pax_global_header00006660000000000000000000000064143014770670014523gustar00rootroot0000000000000052 comment=7f3d3746e16fd12f7e87e5ebe7acc30fd692711b calamares-calamares-2d126ae/000077500000000000000000000000001430147706700160075ustar00rootroot00000000000000calamares-calamares-2d126ae/.clang-format000066400000000000000000000020121430147706700203550ustar00rootroot00000000000000# 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" SpaceInEmptyBlock: "false" SpacesBeforeTrailingComments: "2" SpacesInAngles: "true" SpacesInParentheses: "true" SpacesInSquareBrackets: "true" Standard: c++17 calamares-calamares-2d126ae/.git-blame-ignore-revs000066400000000000000000000002301430147706700221020ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # 18fef8dfe5d926ec0bc979562553adf4db8db2e9 874a0c1f38b0da4e5bc83083b13a63b1c7eed935 calamares-calamares-2d126ae/.reuse/000077500000000000000000000000001430147706700172105ustar00rootroot00000000000000calamares-calamares-2d126ae/.reuse/dep5000066400000000000000000000046431430147706700177770ustar00rootroot00000000000000Format: 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-calamares-2d126ae/3rdparty/000077500000000000000000000000001430147706700175575ustar00rootroot00000000000000calamares-calamares-2d126ae/3rdparty/kdsingleapplicationguard/000077500000000000000000000000001430147706700246265ustar00rootroot00000000000000calamares-calamares-2d126ae/3rdparty/kdsingleapplicationguard/LICENSE.LGPL.txt000066400000000000000000000621261430147706700272150ustar00rootroot00000000000000 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-calamares-2d126ae/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp000066400000000000000000000314061430147706700331370ustar00rootroot00000000000000/* * 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-calamares-2d126ae/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.h000066400000000000000000000102231430147706700325760ustar00rootroot00000000000000/* * 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-calamares-2d126ae/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp000066400000000000000000000021171430147706700315510ustar00rootroot00000000000000/* * 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-calamares-2d126ae/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h000066400000000000000000000014751430147706700312240ustar00rootroot00000000000000/* * 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-calamares-2d126ae/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp000066400000000000000000001144751430147706700324150ustar00rootroot00000000000000/* * 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-calamares-2d126ae/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h000066400000000000000000000072021430147706700320470ustar00rootroot00000000000000/* * 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-calamares-2d126ae/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp000066400000000000000000000032161430147706700301740ustar00rootroot00000000000000/* * 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-calamares-2d126ae/3rdparty/kdsingleapplicationguard/kdtoolsglobal.h000066400000000000000000000121501430147706700276360ustar00rootroot00000000000000/* * 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-calamares-2d126ae/3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp000066400000000000000000000105051430147706700273410ustar00rootroot00000000000000/* * 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-calamares-2d126ae/3rdparty/kdsingleapplicationguard/pimpl_ptr.h000066400000000000000000000026001430147706700270030ustar00rootroot00000000000000/* * 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-calamares-2d126ae/3rdparty/waitingspinnerwidget.cpp000066400000000000000000000204711430147706700245340ustar00rootroot00000000000000/* * 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-calamares-2d126ae/3rdparty/waitingspinnerwidget.h000066400000000000000000000101211430147706700241700ustar00rootroot00000000000000/* * 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-calamares-2d126ae/AUTHORS000066400000000000000000000027641430147706700170700ustar00rootroot00000000000000 # 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 - Anke Boersma - Anubhav Choudhary - Arjen Balfoort - Arnaud Ferraris - Artem Grinev - artoo@cromnix.org - benne-dee - Bernhard Landauer - Bezzy1999 - Bill Auger - Bob van der Linden - Caio Jordão Carvalho - Camilo Higuita - Collabora LTD - Corey Lang - crispg72 - Dan Simmons - demmm - Emmanuel Arias - Enrique Medina Gremaldos - Erik Dubois - Dominic Hayes - El-Wumbus - Evan James - Frede H - Gabriel Craciunescu - Harald Sitter - Huang Jia Wen - Jerrod Frost - Jia Chao - Joe Kamprad - Jonas Strassel - Kai Dohmen - Kevin Kofler - Kyle Robertze - Lisa Vitolo - Matti Hyttinen - n3rdopolis - Neal Gompa - Nico 'dr460nf1r3' - Omer I.S. - Philip Müller - Ramon Buldó - Raul Rodrigo Segura - Rohan Garg - Santosh Mahto - Scott Harvey - Simon Quigley - Taejun Park - Victor Fuentes - vtriolet - Walter Lapchynski - Waneon Kim > This list was updated to revision 6e8d820737dea0f3e08f12b10768facef19be684 on May 28th 2022. calamares-calamares-2d126ae/CHANGES-3.2000066400000000000000000002522211430147706700173060ustar00rootroot00000000000000 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. > Note that the 3.2 series is now in LTS / bug-fix-only mode. # 3.2.61 (2022-08-24) # This is the second community-maintainence release of Calamares 3.2. It corrects a handful of bugs foud in the stable release. There are also translation updates. This release contains contributions from (alphabetically by first name): - Adriaan de Groot - Anke Boersma ## Core ## - The "About" and "Debug" buttons in a QWidgets-based panel were no longer translated. This has been fixed (by re-using translations of the same buttons from the QML module. #2030 (Thanks Anke) ## Modules ## - *bootloader* Python code slipped in that was incompatible with the minimum required Python version. #2033 (Thanks Adriaan) - *locale* fixes a large regression introduced with 3.2.60, where the location picked for many locales was not the same as in 3.2.59, and generally peculiar (e.g. picking "English" led to "en_AG" which is nice if you are in Bermuda, but not expected in the rest of the world). #2008 - *luksopenswaphookcfg* Remove duplicate options. #1659 (Thanks Anke) # 3.2.60 (2022-06-19) # This is the first community-maintainence release of Calamares 3.2. Somewhat ironically, all the commits in the branch come from Adriaan de Groot -- the community is working in the 3.3 (*calamares*) branch. ## Core ## - No core changes ## Modules ## - *fstab* now warns when the mount options are empty (which is non- sensical, and indicates that the configuration is bad). - *locale* does a better job of preserving Catalan (Valencia) across modules; previously it dropped the *Valencia* after the locale module unless you specifically re-selected `ca@valencia` in the locale module. (Reported by Lliurex) - *welcome* now has text labels on the special buttons (nominally, this is part of the core, but the *About* button was always on the welcome page). # 3.2.59 (2022-05-29) # This release contains contributions from (alphabetically by first name): - Arjen Balfoort This is the final release of Calamares 3.2 where the release is from the *calamares* branch -- that is, where the primary development branch is also the branch being released regularly. Future releases of the 3.2 series are bugfix-only, and no new feature development or translations are expected. This is also the final release done *as work-work* by the current maintainer. ## Core ## - Prep-work for moving the *About Calamares* button to the panels, rather than keeping it in the Welcome module. The about information is somewhat more flexible now, so that a new maintainer can be added easily without frustrating translators. - The progress panels (both Widgets and QML) now have an About button on them, showing the traditional *About Calamares* dialog. - Translations for the (QML) slideshow were not being loaded correctly. The log is now somewhat more informative when that fails. ## Modules ## - *fstab* can now be configured to put `/tmp` on a *tmpfs*, and this can depend on it being on an SSD or not. Options applicable to `/tmp` can be configured separately as well. #1818 (Thanks Arjen) - *partition* now has some support for re-using LUKS partitions. (Thanks Arjen) - *partition* will cycle out a LUKS key if all the key slots are in use and a new key is added, rather than crashing the installer. (Thanks Arjen) - *welcome* and *welcomeq* have no *About* button anymore; this is now available from the progress panel, since it's also not-really about the distro itself. # 3.2.58.2 (2022-05-24) This is a extra-quick release for an issue that shows up when using a swap **file** on a btrfs filesystem; the installation would fail with a Python error, raised from btrfs-progs. Reported by Evan James, Erik Dubois, TechXero. # 3.2.58.1 (2022-05-20) This is a hot-fix release for a regression in the *partition* module where it was impossible to proceed unless *Encrypt system* was checked. # 3.2.58 (2022-05-18) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Arjen Balfoort - Enrique Medina Gremaldos - Evan James ## Core ## - Internal improvements to translations-setup means that Catalan (in the Valencian dialect), Occitan (Lenga d'Oc) and Serbian (in Latin script) are all better supported. Thanks Enrique. ## Modules ## - *netinstall* Now displays entries with an empty name slightly differently. An empty name is not generally useful, but in combination with *immutable:true* and *selected:false* can be used to introduce separators or descriptive comments into the list of packages. - *partition* does not offer full-disk encryption when using ZFS. ZFS and the way Calamares sets up FDE don't mix well. (Thanks Evan) - *partition* Various bugs related to LUKS have been fixed. (Thanks Arjen) - *users* module now has a structured *user* key with settings specific to the user (shell, in particular). This maintains backwards compatibility with the *userShell* key. - *users* module now has lists of forbidden login- and host-names, to avoid settings that will mess up the install (e.g. using a login-name that is one of the system's reserved names). #1944 # 3.2.57 (2022-05-04) # This release contains contributions from (alphabetically by first name): - Arjen Balfoort (new contributor! Welcome!) - Victor Fuentes ## Core ## - Calamares can now be started in Serbian (Latin Script) and Catalan (Valencia) when the LANG environment variable is set to values that indicate those languages. ## Modules ## - *fstab* and *luksbootkeyfile* have better support for an **un**encrypted `/boot` partition. #1931 (thanks Arjen) - *packagechooser* and *packagechooserq* can now be given a custom name in the side-panel. #1932 (thanks Victor) # 3.2.56 (2022-04-22) # As of this release, Calamares 3.2 development is winding down. The reason is simple: systems where the backwards-compatibility of Calamares 3.2 is important are becoming increasingly difficult to work with for **other** reasons. Foremost among these are deprecated versions of dependencies and tools. Calamares 3.2 branch remains open for bugfixes and will see a few more releases, but development is now shifting wholesale to the newer generation. This release contains contributions from (alphabetically by first name): - Victor Fuentes (new contributor! Welcome!) ## Core ## - Changes in git forced some changes on the CI tooling. ## Modules ## - *locale* showed the wrong timezone for Dhaka, although it configured the correct one. #1929 - *users* module sets global storage key *fullname* to the full name of the user (e.g. what is entered in the "your full name" box on the users page). #1923 (Thanks Victor) # 3.2.55 (2022-04-11) # This release contains contributions from (alphabetically by first name): - vtriolet (new contributor! Welcome!) ## Core ## - `readTargetFile()` did not properly return all the lines of the target file. #1918 (thanks vtriolet) ## Modules ## - *users* module has rearranged configuration for setting the hostname. Legacy settings are preserved, but produce a warning. Please see `users.conf` for details. - *users* module has a new hostname.location setting, *Transient*, which will force the installed system to transient-hostname-setting by removing the file `/etc/hostname`. - *users* module has a new hostname.template setting, which allows some tweaking of how the hostname suggestion is constructed. In particular, it can be configured to use the current hostname (whatever that may be). See the example `users.conf` for details on available keys. # 3.2.54 (2022-03-21) # This release contains contributions from (alphabetically): - Bob van der Linden (new contributor! Welcome!) - El-Wumbus (new contributor! Welcome!) - Evan James - Santosh Mahto (new contributor! Welcome!) ## Core ## - During the installation ("exec") step, while the slideshow is displayed, there is also a button to show the scrolling installation log as it is written. (Thanks Bob) ## Modules ## - *fstab* module correctly handles empty UUID strings. (Thanks Evan) - *partition* module no longer forgets configured partition-layouts. It also respects configured partition labels better. (Thanks Santosh) # 3.2.53 (2022-03-04) # This release contains contributions from (alphabetically by first name): - Huang Jia Wen (new contributor! Welcome!) ## Core ## - Automount-manipulation (to switch off KDE Plasma automounting new devices) now logs slightly more as it works. Defaults have changed in KDE Plasma 5.24 and it turns out the automount-manipulation does not work well. Distro's are encouraged to turn off automount in the live ISO (see #1885). ## Modules ## - *bootloader* now knows about loongarch64 and can install suitable EFI files for this CPU type. (Thanks Huang Jia Wen) - Progress reporting for `pacman` from the *packages* module has been switched off. The progress reporting works under low load, but there are many reports of it crashing (from XeroLinux and from Evan James, who has been debugging the issue) during a regular installation with thousands of updates. This will be revisited in the next release. - The *umount* module was buggy and did not actually unmount anything. # 3.2.52 (2022-02-25) # This release contains contributions from (alphabetically by first name): - Evan James ## Core ## - No core changes yet ## Modules ## - *fstab* recognizes nvme and mmc devices correctly as SSDs now. #1883 - *luksbootkeyfile* handles trailing slashes in mount point - *partition* can be built with a new `SKIP` option, which skips the actual formatting steps but does not fail. The old `LAME` option is renamed `BAIL_OUT`. - *users* has a new key *sudoersConfigureWithGroup* to allow for different styles of sudo configuration. #1887 # 3.2.51 (2022-02-01) # This release contains contributions from (alphabetically by first name): - Evan James **WARNING** The *umount* module has been rewritten in C++. Check your configuration if you previously used the copy-a-log functionality. ## Core ## - Evan has made a start on documenting which Global Storage keys there are and how they tie modules together. This can be found in the `src/modules/README.md` documentation. ## Modules ## - *bootloader* can now be configured to try to generate a unique suffix for the bootloader-id. #1820 - *grubcfg* now has a configurable default for kernel parameters, which allows distributions to change the value from `quiet`. The default, if nothing is set, remains `quiet`. Use an explicitly- empty list to specify no-arguments-at-all. - *packagechooser* can now export its choices for use by the *netinstall* module. This makes it possible to use *packagechooser* for large-scale choices, followed by *netinstall* for fine-grained control. (Thanks Evan) - When the *partition* module has a conflicting configuration for the swap choices, it prints a warning and uses the configured choice, rather than always using "suspend". #1881 - The *umount* module has been re-written in C++. The copy-a-log-file functionality has been removed. Use the *preservefiles* module for that. # 3.2.50 (2022-01-18) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Erik Dubois - Evan James - Johannes Kamprad - Taejun Park (new contributor, welcome!) **Replacement notice:** The *umount* module will be replaced by a C++ implementation in the next release. The "preserve log file" feature will be removed in that release. Use the *preservefiles* module instead. ## Core ## - No core changes yet ## Modules ## - *initcpiocfg* mentioned a special kernel-name "all", which did not work, and a special kernel-name "$uname" which cannot work. Fixed the former and removed the "$uname" special key. (Thanks Evan) - *luksswaphookcfg* has been converted to a C++ module. - *networkcfg* could fail to update the NetworkManager configuration if the SSID or username contained non-ASCII characters **and** the default Python text-file encoding was set to ASCII. The files are now read and written in UTF-8, explicitly. #1848 - *partition* always sets *bigtime* option on XFS filesystems, if possible. Requires sufficiently-recent xfsprogs. #1874 - *preservefiles* was missing some necessary features, needed for it to replace the deprecated log-file-saving functionality in the *umount* module. (Thanks Erik and Joe for testing) #1851 - *umount* is now marked as an emergency module in the example configuration, since it should **probably** be run as a cleanup. (Thanks Evan) - *welcome* and *locale* could be confusing, together, and configure the target system with a language that does not match the installer language, even though the user did not make any explicit choice. (Thanks Taejun) #1864 # 3.2.49.1 (2021-12-11) # This is a hot-fix release, to fix a regression in the calculation of swap-size. Reported by EndeavourOS (Joe Kamprad) and Xero Linux. # 3.2.49 (2021-12-10) # This release contains contributions from (alphabetically by first name): - Artem Grinev - Evan James Distributions are **specifically** reminded to update the *umount* module configuration (and to use *preservefiles* if needed). ## Core ## - Errors (e.g. when an installation fails for whatever reason) are displayed in a dialog with a scrollable details panel, rather than growing up to the size of the screen. (Thanks Artem) ## Modules ## - *bootloader* better supports multiple installations of the same OS. - *mount* supports btrfs subvolumes on subdirectories of / now. - *partition* now supports "deep" btrfs subvolume names, e.g. a separate subvolume for `/usr/local`. (Thanks Evan) - The *umount* module now warns if the "preserve log file" feature is used. This has been deprecated for a long time: use the *preservefiles* module instead. A future release will turn this into an error. # 3.2.48 (2021-12-03) # This release contains contributions from (alphabetically by first name): - Evan James ## Core ## - Python modules now have `warn()` and `error()` methods they can call, alongside the existing `debug()` and `warning()` (all live in the *libcalamares.utils* module). - Python modules can load YAML files via `libcalamares.utils.load_yaml()`. This may be the most useful for test-scripts. ## Modules ## - *fstab* now has a separate, special, flags-setting for swap subvolumes on btrfs. A swap subvolume is created if a swap **file** (not a separate partition) is selected in the auto-partitioning page. (Thanks Evan) - When using btrfs, the *mount* module creates subvolumes. It was not possible to **avoid** having a subvolume name created for the root. This is now possible. #1837 - The *packages* module now has some special settings for the `pacman` package manager (generally used on Arch-derivatives). This allows tweaking of the installation process, if downloads are slow or packages may fail to install. See the `packages.conf` file for details. (Thanks Evan) # 3.2.47 (2021-11-19) # This release contains contributions from (alphabetically by first name): - Evan James - Jonas Strassel ## Core ## - The translation for Sinhala (`si`) has reached 100%. Thank you to හෙළබස and Sandaruwan, translators for Sinhala, for special effort in completing that translation. - Logging now supports Redacted names. This reduces the scope for leaking names or other private information through the logs (if they are posted to a pastebin). A name is redacted consistently within one run of Calamares, but differently each time. ## Modules ## - *bootloader* with systemd-boot now handles root subvolumes better (Thanks Evan) - *displaymanager* supports the *greetd* display manager, which is a kind of meta-DM itself, supporting multiple greeters. (Thanks Jonas) - *finishedq* now has an extra example QML file that builds the UI in a different fashion, demonstrating how a mobile-OS customization of Calamares would present the "all done" message. - *fstab* has an example configuration file that mentioned `space_cache` as an option. Since 2014 there was only one possible value, so this option matched the default-and-only value. Newer kernels with newer btrfs versions have a `v2` option value as well. Remove the example option, since the kernel automatically picks the right value, while setting it to the wrong one may prevent the system from booting. (Thanks Evan) - The *partition* module no longer logs recognizable disk names or UUIDs. These are redacted in the logs. #1593 - The *partition* module, together with the new *zfs* module and changes in *mount* and *bootloader* can install to ZFS **if** the distribution kernel supports it. ZFS tools are required, as well as the relevant kernel modules. See the `README.md` in the *zfs* module. (Thanks Evan) # 3.2.46 (2021-11-09) # This release contains contributions from (alphabetically by first name): - Philip Müller ## Core ## - A new core class `Runner` is now responsible for running commands either in the host or in the target system. This is invisible for end-users, but **does** expand the API available to consumers inside Calamares modules. In particular, Python modules can now easily read and respond to command output. #1740 ## Modules ## - *fstab* writes a slightly different message in `/etc/crypttab` about the root filesystem. Since Calamares itself ignores the (previous wording of) message, it was confusing. #1811 - *packages* module has some support for reporting progress while the packages are installed. This depends on the package-manager itself reporting useful progress information **and** the *packages* module having support-code to interpret that progress. A proof-of-concept for `pacman` has been implemented. #1582 - *partition* has a number of edge-cases for LVM and LUKS resolved. #1564 #1817 - *partition* module once again always offers `/boot` as a mount-point, even when EFI would want `/boot/efi`. (Thanks Phil) - *summary* had a regression and showed some descriptive texts twice. # 3.2.45 (2021-10-31) # This release contains contributions from (alphabetically by first name): - Evan James (new contributor, welcome!) ## Core ## - New internal convenience functions from Evan ## Modules ## - *packagechooser* now displays screenshots nicely-scaled rather than jagged. (#1807) - *partition* module removes ZFS partitions directly. At install-time, we think that the partitions should be handled separately from a zpool that potentially includes those partitions. (Thanks Evan) - *services-systemd* supports timers, e.g. for weekly trim on SSDs. (Thanks Evan) # 3.2.44.3 (2021-10-04) # This is not a hotfix release, but a tiny-tiny incremental improvement that fixes one hugely annoying -- user-facing message presenting bytes as mebibytes -- bug in the partition module. ## Modules ## - The *partition* module now consistently uses the configured EFI partition size (defaults to 300MiB). - Internal changes in the *summary* module to increase consistency between *summary* and *summaryq*. # 3.2.44.2 (2021-09-27) # This release contains contributions from (alphabetically by first name): - Corey Lang (new contributor, welcome!) This is a hotfix for a typo -- not a syntax error -- that affects the *networkcfg* module. Reported and fixed by Corey. # 3.2.44.1 (2021-09-24) # This release contains contributions from (alphabetically by first name): - Anke Boersma This is a hotfix for a typo -- not a syntax error -- that affects the *initcpiocfg* module. Reported and fixed by Anke. # 3.2.44 (2021-09-24) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Shrinivas Vishnu Kumbhar (new contributor, welcome!) - whorfin (new contributor, welcome!) ## Core ## - "Log spam" has been reduced a little in the partitioning module. ## Modules ## - *initcpiocfg* has had a number of internal code-fixes, and now adds the `consolefont` hook by default as well. (Thanks Shrinivas) - Both *locale* and *keyboard* have received some tweaks for configurations in India; unless the user selects otherwise, English is preferred. - The *luksbootkeyfile* module was reported to be too quick to declare a timeout when applying the keyfile. The timeout has been increased to one minute. (Thanks whorfin) - *networkcfg* tries harder to find the live-user login for re-working networking settings. This fixes a regression on FerenOS, where the installer was crashing because it could not find the live-user login. # 3.2.43 (2021-09-17) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Joe Kamprad ## Core ## - Translations have been made more consistent. In particular, some *OK*, *Yes*, *No* and *Cancel* buttons that were previously untranslated or "stuck" in the language that Calamares started in, are now changed to the current language as selected in the welcome page. - Documentation improvements from Joe Kamprad. A *sizeLimit* of zero (which is the default if nothing is set in the branding configuration) disables log uploads. ## Modules ## - The *keyboardq* module (QML-based UI for keyboard-layout-selection) now features an interactive keyboard preview and has the layout adjusted. (Thanks Anke) # 3.2.42 (2021-09-06) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Artem Grinev - Nico 'dr460nf1r3' (new contributor, welcome!) - Waneon Kim (new contributor, welcome!) ## Core ## - No core changes yet ## Modules ## - BTRFS partitions are no longer listed as "check in phase 2" in the *fstab* module. (Thanks Nico) - The *keyboard* module (and *keyboardq*) now pick an English layout (with Rupee) for keyboards when the language is English and locale is India, rather than Hindi layout. - The *localeq* module had the i18n.qml rewritten to make it easier to customize. A bug in the layout has been fixed, and the overall look has been updated. - *networkcfg* now translates the "live user" on an ISO to the regular user on the installed system, so that network configuration changes made in the live system are automatically used after installation. #1755 - *partition* no longer allows you to delete an extended partition with children (which led to crashes). #1749 (Thanks Artem) - *partition* complains in more detail about the state of the UEFI boot partition (under manual partitioning schemes). #1761 - *welcome* can now check multiple URLs to determine if internet connectivity is available. It is still recommended to check the distro home-page or some special "ping" page of the distro, although that has some privacy implications; using example.com or google.com may work as well. Listing multiple URLs will ping each of them in turn until one succeeds. #1669 - The work to make a QML version available for all view modules is almost completed. Two new QML modules have been added *packagechooserq* and *summaryq*. Summaryq brings the option to present the summary page in a customizable way, with a bit more of a contemporary look. Packagechooserq adds the option to preselect an item and displays all options in one overview. (Thanks Anke) # 3.2.41.1 (2021-08-05) # This is a hotfix release for a crash in the *partition* module, reported on KDE neon. #1746 # 3.2.41 (2021-07-31) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Camilo Higuita ## Core ## - The (re)translation framework has been internally re-vamped to be less resource-intensive and to work with all QObjects, not just widgets. Consumers of the translations framework are expected to set up the event filter on the top-level widget(s) manually. Since Calamares and the Calamares-test-applications have been adjusted already, no further action is needed. ## Modules ## - When the *keyboard* module is activated, it no longer replaces an explicit user choice (e.g. for a Belgian layout) by a guessed-for- this-language layout (e.g. Danish if you're installing in Danish). - Logic for handling installation lists has been moved around in the *packages* module so that package managers can, in principle, adjust how to handle critical and non-critical package lists. - In the *partition* module, translation code has been simplified. - The *usersq* module has had a fair bit of QML rewritten to make it easier to customize the colors used by the module in a consistent way. (Thanks Anke) - *Welcome* now uses a translated message from the Config object, increasing the sharing between widgets- and QML-modules. # 3.2.40 (2021-07-14) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Anubhav Choudhary (SoK success!) - Emmanuel Arias (new contributor! welcome!) - Erik Dubois - Jerrod Frost (new contributor! welcome!) - Jia Chao (new contributor! welcome!) - Joe Kamprad - Lisa Vitolo (blast from the past!) - Omer I.S. (new contributor! welcome!) In project news, chat (instant-messaging) communications has largely moved to Matrix and Libera.Chat. CI notifications -- issues and build results -- are sent to Matrix only. ## Core ## - The CMake modules for consumption by external modules (e.g. the calamares-extensions repository, but also any other modules built by distro's for internal use) now support consistent skip-module behavior and reporting. #1641 (one tiny part of this change) - In global storage, the *filesystem_use* key now has an API in libcalamares to systematically mark filesystem (types) as "in use" or not. This, in turn, means that modules can depend on that information for other work (e.g. removing drivers for unused filesystems). #1635 - The "upload log file" now has a configurable log-file-size. (Thanks Anubhav) ## Modules ## - *bootloader* can now install an aarch64 (ARM) compatible EFI GRUB. (Thanks Jia) - *displaymanager* example configuration has been shuffled around a bit, for better results when the live image is running XFCE. Also lists more potential display managers. #1205 (Thanks Erik) - *keyboard* now switches on an alternate `en_US` keyboard layout when Arabic or Hebrew is selected as primary layout. (Thanks Omer) - *localeq* now has a fully functional offline option (alongside the default interactive map option, which requires internet). - The *netinstall* module can now fall back to alternative URLs when loading groups data. The first URL to yield a non-empty groups collection is accepted. No changes are needed in the configuration. #1673 - *packagechooser* can now integrate with the *packages* module; that means you can specify package names to install for a given selection, and the regular package-installation mechanism will take care of it. Legacy configurations that use *contextualprocess* are still supported. See the `packagechooser.conf` file for details. #1550 - A long-neglected pull request from Lisa Vitolo for the *partition* module -- allowing to set filesystem labels during manual partitioning -- has been revived and merged. - The *partition* manager has had a long-standing bug with partition-flags and manual partitioning resolved. This may help resolve some installation issues on UEFI systems. #1724 - *usersq* is further implemented and can now be used for a successful install. Not all warning messages available in the regular users module are implemented. # 3.2.39.3 (2021-04-14) # A minor bugfix tweak release. Since this contains yet **another** autologin-related fix, and there is nothing large enough to justify a 3.2.40 release yet, add it to the growing tail of 3.2.39. (Reported by Joe Kamprad, #1672). Also fixes a regression from 3.2.28 in localized packages (e.g. *package-LOCALE* did not work). # 3.2.39.2 (2021-04-02) # This is **another** hotfix release for issues around autologin .. autoLogin, really, since the whole problem is that internal capitalization changed. An unrelated bug in writing /etc/default/keyboard was also fixed. (Reported by pcrepix, #1668) # 3.2.39.1 (2021-03-30) # This hotfix release corrects a regression in the *displaymanager* module caused by changes in the *users* module; autologin was internally renamed and no longer recognized by the *displaymanager* module. (Reported by Erik Dubois, #1665) # 3.2.39 (2021-03-19) # This release contains contributions from (alphabetically by first name): - Matti Hyttinen ## Core ## - A *packages* service has been added to the core, for use by *netinstall* module and any others that need to set up package information for the *packages* module. ## Modules ## - The *mount* module has gained a configurable setup for btrfs volumes. If your distro has a default-to-btrfs setup, it can skip the hard- coded setup (which Calamares has had for a long time with @home and similar) and introduce a custom btrfs configuration through the `mount.conf` file. See issues #1659 and #1661 for warnings about using this in production. - *netinstall* now supports fallbacks for the groups data. Instead of a single URL, multiple URLs may be specified in a list and Calamares goes through them until one is successfully retrieved. Older configurations with a single string are treated like a one-item list. #1579 - The *usersq* module now connects to the internal configuration object and may be usable for regular installations. # 3.2.38.1 (2021-03-15) # This hotfix release is for this item in the release notes of 3.2.38: - The .desktop file for Calamares now makes a longer trip, calling `sh -c "pkexec calamares"`; distributions may still need to adjust. The change had been lost while updating other files. It has been restored in `calamares.desktop` and `calamares.desktop.in`. (Reported by Erik) Other minor changes and fixes: - presets in the *users* module show the hostname, too, - translations update for Korean, Ukranian and Chinese (zh_TW). # 3.2.38 (2021-03-14) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Anubhav Choudhary - Neal Gompa ## Core ## - Uploading your log files (in case of installation failure) has been expanded and is now more configurable. Users should still take care when uploading logs, and distro's should configure a URL with no public viewing of those logs. (Thanks Anubhav) - The .desktop file for Calamares now makes a longer trip, calling `sh -c "pkexec calamares"`; distributions may still need to adjust. ## Modules ## - A new QML-based *finishedq* module has been added. (Thanks Anke) - The *packages* module no longer supports *urpmi*; no Calamares- consumers with that package manager seem to exist. (Thanks Neal) - The *users* module now can set a fixed username and prevent editing. The *presets* configuration entry in `users.conf` can set a *loginName* and a *fullName* and (independently) enable or disable editing of that value. You can, for instance, set *loginName* to "manjaro" if you like; the user can change it afterwards. You could set the *loginName* to "oem" and prevent editing it as well. #942 # 3.2.37 (2021-02-23) # This release contains contributions from (alphabetically by first name): - benne-dee ## Core ## - Calamares has a table of 'best guess' languages for each country and when GeoIP is enabled, it will automatically select that country's language as default -- the user can of course pick a different one. The 'best guess' is based on Unicode / ISO data, which is sometimes dubious. Based on some personal notes, the 'best guess' language for Belarus has been changed to Russian. - Calamares has a table of 'best guess' keyboard mappings, allowing native language input. However, usernames and passwords should be in US-ASCII (this is a limitation of the login system -- **some** parts of the system will support non-ASCII input, but it's better safe than sorry). Add Greek to the list of languages that needs US-ASCII in addition to native input. - The CI infrastructure now builds Calamares and Calamares-extensions on a nightly basis. ## Modules ## - The *netinstall* module has a YAML schema, allowing packagers to validate and verify their netinstall configurations before shipping an ISO (or writing bug reports). Thanks benne-dee. - The *finished* module has been heavily refactored, opening the way to a QML-based version of the same module. This is also preparatory work for allowing packagers (e.g. PostmarketOS) to customize the messages on the finished page. # 3.2.36 (2021-02-03) # This release contains contributions from (alphabetically by first name): - Anubhav Choudhary - benne-dee - Gaël PORTAY - Jonas Strassel - Kevin Kofler - Matti Hyttinen - Neal Gompa ## Core ## - It is now possible to hide the *next* and *back* buttons during the "exec" phase of installation. Thanks Anubhav. - The Calamares CI has migrated to GitHub actions. Thanks Jonas. ## Modules ## - *bootloader* now uses the current file names for the UEFI Secure Boot shim instead of obsolete ones. - The *mount* module creates swap in its own subvolume, if btrfs is used. Thanks Matti. - *partition* includes more information about what it will do, including GPT partition types (in human-readable format, if possible). Thanks Gaël. - Some edge-cases with overlay filesystems have been resolved in the *partition* module. Thanks Gaël. - During the creation of filesystems and partitions, automounting is turned off (if DBus is available, and the host system supports KDE Solid automount control). This should reduce the number of failed installations if automount grabs partitions while they are being created. The code is prepared to handle other ways to control automount-behavior as well. # 3.2.35.1 (2020-12-07) # This release contains contributions from (alphabetically by first name): - Anubhav Choudhary - Matti Hyttinen Some strange string artifacts appeared, leading to `{1?}` being displayed in various user-facing messages. These have been removed and the translations updated. ## Modules ## - The *initcpiocfg* module would sometimes configure the system to ask for a passphrase, when none is needed. # 3.2.35 (2020-11-30) # This release contains contributions from (alphabetically by first name): - Clarissa Borges - Matti Hyttinen A new kind of issue template has been added for Calamares, for reporting (and adding tests for) usability issues. Thanks to Clarissa for leading that effort. ## Core ## - No core changes yet ## Modules ## - The *partition* module now supports a not-full-disk-encryption setup, where `/boot` is not encrypted, but the rest of the system is. - The *plasmalnf* module has been substantially rewritten, so that it can support a QML version of the module in future. The UI has changed a little, and now displays more themes than before. # 3.2.34 (2020-11-16) # This release contains contributions from (alphabetically by first name): - Artem Grinev - Gaël PORTAY ## Core ## - No core changes yet ## Modules ## - The *keyboard* module had a regression in which it no-longer painted the keycaps in the keyboard preview. (reported by Vinnie) - The *plasmalnf* module did not set all of the look-and-feel values in the target system. (reported by Bluestar Linux) - In the *users* module, warnings about the strength of the password are now correctly pluralized when possible. - In the *users* module, if ICU is installed, the user's full name is automatically transliterated to US-ASCII (for some locales; this will need tweaking) so that the login name is acceptable. (Thanks Artem) # 3.2.33 (2020-11-09) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Andrius Å tikonas - Artem Grinev - Gaël PORTAY - Matti Hyttinen - TTran Me ## Core ## - Calamares now sets the C++ standard for compilation to C++17; this is for better compatibility and fewer warnings when building with modern KDE Frameworks and KPMcore 4.2.0. - Vietnamese translations have been added. Welcome! (Thanks TTran) ## Modules ## - The *initcpiocfg* module should support plymouth with encryption now. (Thanks Matti) - The *keyboard* and *keyboardq* modules now share backend code and handle non-ASCII layouts better (for setting passwords and usernames). (Thanks Artem) - Various cleanups and documentation improvements in the *partition* module, and configurable GPT name for swap. (Thanks Gaël) - A long-standing bug related to GPT partition flags in the *partition* module has been resolved. #1327 #1267 - The *users* module now has a more detailed way to specify user groups -- which may be system groups rather than user-GIDs. A new option in each group can require that the group already exists in the target system, allowing for better consistency checks with the squashfs. #1523 # 3.2.32.1 (2020-10-17) # This is a release to address source-incompatible changes in KPMcore 4.2.0, which was released just before Calamares 3.2.32 and had not yet been compile-tested. There is also one changed message in the translations, reported by Yuri Chornoivan. # 3.2.32 (2020-10-16) # This release contains contributions from (alphabetically by first name): - Fabian Tomat - Gaël PORTAY ## Core ## - When doing GeoIP lookups, Calamares pretends to be Firefox. This resolves an issue where the GeoIP provider was refusing QNAM connections with the default User-Agent. - New translation available, Friulian. Welcome! ## Modules ## - The *netinstall* module has some tricky configuration files; it now complains about more cases of bad syntax or poor structure. - The *partition* module can now be constrained to work only with a particular kind of partition table. (thanks Gaël) - The *partition* module is a little more resilient to variations in btrfs notation from os-prober. - The *shellprocess* module now supports having a different progress message (other than "Shell Processes Job") through the config file. # 3.2.31 (2020-10-06) # This release contains contributions from (alphabetically by first name): - Corentin Noël - kadler15 (new contributor! hi!) ## Core ## - At the start of the *exec* phase, an overview is given of the various job weights, which allows you to tweak the overall progress reporting during the installation. - Problems with running Calamares on a 1-core single CPU have been resolved. ## Modules ## - The *keyboard* module now recognizes Turkish "F" layout and will set the vconsole keyboard layout correctly even if xkb keymaps are not found. - The *machineid* module, which generates UUIDs for systemd and dbus and can generate entropy files (filled from `/dev/urandom` in the host system) now supports more than one entropy file; generate them as needed (or copy a fixed value to all, depending on *entropy-copy*). Deprecate *entropy* (which generates a specific output file) as too inflexible. - In the *partition* module, swap can now be chosen as *file*, which is **not** create a swap partition, but write a `/swapfile` in the root directory, 512MiB large, and set that as swap. There is as yet no "smarts" about the size of the swap file. - Multiple problems in the *partition* module around partition sizing have been resolved by Corentin Noël. - The *preservefiles* module documentation did not match the functionality, and when used, didn't work right. #1521 (thanks kadler15) - Progress reporting from the *unpackfs* module has been revamped: it reports more often now, so that it is more obvious that files are being transferred even when the percentage progress does not change. - The *unpackfs* module now supports a *weight* setting for each of the unpack entries. For a single entry this does not matter, but if there are multiple entries it allows tweaking the relative progress between each entry. # 3.2.30 (2020-09-03) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Asif Mahmud Shimon - Manzoor Ahmed Munawar - Sai Kamal - Victor Ibragimov This release has two giant source-code changes that have no effect on functionality, but do touch each and every source file: - SPDX headers for licensing information, following the standard set by REUSE.software ; all source files and resources have SPDX-License-Identifier information and copyright notices. All of the boilerplate texts have been removed. - Calamares coding style has been mechanically applied to the entire codebase. This was already done to most of it, but there were some hold-outs. ## Core ## - Network access status is deprecated in Qt 5.15's QNetworkAccessManager, and was not useful already in some previous versions. Replace its use in the Calamares network service by testing-it-ourself directly via a synchronous ping. (Thanks to Asif) - New Telugu translation. (Thanks to Sai) - Urdu translation started. (Thanks to Manzoor) - Timezones translated in Tajik and Russian. (Thanks to Victor) ## Modules ## - *keyboardq* and *localeq* improvements. (Thanks to Anke) - *users* module did not set up autologin properly. This is yet another regression left over from 3.2.28. (Reported by Phil and pcrepix, #1498) - *welcome* module now sets the *LANG* key in the locale configuration (which is shared with the *locale* module and consumed by the *localecfg* module). This makes it feasible to drop the *locale* module and still set the installed system's language to the language selected in Calamares. (Reported by FerenOS) # 3.2.29 (2020-08-20) # This release contains contributions from (alphabetically by first name): - Asif Mahmud Shimon (new contributor! hi!) ## Core ## - Edge case in extracting string-lists from YAML, reported and fixed by Asif (#1491). - Progress reporting is now more flexible. Modules can have a weight assigned to them in the descriptor; module instances can have a weight assigned which overrides the module descriptor. When jobs are run for a module instance, the jobs report progress pro-rated by the module's weight. Or in other words, it is now possible to tweak the amount of the overall progress bar that different modules fill. The default settings give unpackfs a weight of 12. (#1176) ## Modules ## - The *users* module did not read the *defaultGroups* correctly. Fixed by the string-lists change mentioned above. # 3.2.28.3 (2020-08-18) # Another hotfix, for more issues reported by Marco Obaid. Users were not having a password set (#1489) # 3.2.28.2 (2020-08-12) # A second hotfix, for autologin support -- the autologin group was not created in the target system before assigning the user to it. Reported by Marco Obaid. # 3.2.28.1 (2020-08-10) # This is a hotfix release for #1482 and #1483, where no user was created during installation and a chmod was failing (resulting in a failed installation). Reported by Jonathan Riddell. With incidental improvements in SPDX tagging (code licensing) and some new icon options for the welcomeq and localeq modules. # 3.2.28 (2020-08-09) # This release contains contributions from (alphabetically by first name): - Anke Boersma - apt-ghetto - Victor Ibragimov ## Core ## - A new object *Network* is available to QML modules in `io.calamares.core`. It exposes network status through the *hasInternet* property. - Welcome to Tajik translations. The Tajik language has quickly reached 100% completion. Thanks Victor! - Welcome to [Interlingue](https://en.wikipedia.org/wiki/Interlingue). The translation is at an early stage. Qt does not support language code *ie* though, so it may take some time to be integrated (much like Esperanto wasn't supported until Qt 5.12). ## Modules ## - The *locale* module has been completely redone on the inside. Users should see no changes. #1391 - The *localeq* module uses the redone internals of the locale module. It can now be used to set timezone, language and locale information and is a suitable alternative module. Thanks to Anke Boersma who did the work of figuring out maps. Note that the map uses several GeoIP and GeoData providers and you may need to configure the URLs with suitable usernames for those services. #1426 - Both *locale* and *localeq* can now be configured to use the system's timezone setting -- this can be useful to avoid both hard-coding an initial zone and doing extra GeoIP lookups, in the case where the live system already does so. #1391 - The *locale* and *localeq* modules have additional machinery for timezone lookups; please report cases where clicking on the map returns an obviously bogus timezone (up until this release, for instance, Cape Town). - The *users* module no longer accepts `root` as a username. #1462 - The *keyboardq* module is now more inline with the look of the rest of the Calamares modules, use of a background image is removed. - The *grubcfg* module now understands `/etc/default/grub.d`. #1457 # 3.2.27 (2020-07-11) # This release contains contributions from (alphabetically by first name): - Gaël PORTAY - Vitor Lopes (new! welcome!) ## Core ## - QML modules with no surrounding navigation -- this is basically a special case for full-screen Calamares -- now have margins suitable for full-screen use. - PythonQt modules are increasingly on the way out. ## Modules ## - The Manjaro package manager *pamac* has been added to those supported by the *packages* module. - The *netinstall* module has had some minor UI tweaks. - Partitioning now tries harder to avoid floppy drives. # 3.2.26.1 (2020-06-23) # This is a hotfix release for undefined behavior caused by an uninitialized integer variable. It includes new translations and features as well since those arrived independently. This release contains contributions from (alphabetically by first name): - Anke Boersma - Gaël PORTAY ## Core ## - Welcome to Azerbaijani translations. These are available in two variations, *Azerbaijani* and *Azerbaijani (Azerbaijan)*. [Wikipedia Azerbaijani](https://en.wikipedia.org/wiki/Azerbaijani_language#North_vs._South_Azerbaijani) has a nice overview. - Warnings while building with Qt 5.15 have been much reduced. ## Modules ## - *partitioning* has one case of undefined behavior (UB) due to a missing integer-initialization. (Thanks Gaël) - *keyboardq* QML module now works correctly. (Thanks Anke) # 3.2.26 (2020-06-18) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Gaël PORTAY - Pablo Ovelleiro Corral - Philip Müller ## Core ## - The default branch for Calamares source repositories (calamares and calamares-extensions) is now *calamares*. - External modules can now be built again, outside of the Calamares source and build-tree. - The repository *calamares-tools* has been removed. The idea behind the tooling was to provide schema validation for Calamares configuration files. This has been merged into the primary repository, where it is now part of the test suite. ## Modules ## - *locale* put some more places into the correct timezone **visually**; for instance Norfolk Island gave up UTC+11.5 in 2015 and is now UTC+11, but Calamares still showed it in a zone separate from UTC+11. - *localeq* can now properly switch between on & offline mode, it detects internet status through js. - *packages* gained support for the Void Linux package manager, *xbps*. (thanks Pablo) - *tracking* now supports kuserfeedback configuration. - *welcomeq* added the GEOIP configuration option, so locale can be initially set according to IP address. # 3.2.25 (2020-06-06) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Callum Farmer - FLVAL - Gaël PORTAY ## Core ## - The slideshow in `branding.desc` can be configured with QML (recommended, as it has been for the past umpteen releases) or with a list of images (new). - It is possible to turn off all the new QML code -- navigation, slideshow, QML-based modules -- with a single `-DWITH_QML=OFF` at CMake time. This removes QML from Calamares' dependency footprint (but only saves 200kB in Calamares itself). - Tests have been extended and now support a tests/CMakeTests.txt file for fine-tuning tests for Python modules. - SPDX identifiers are used much more widely and consistently in Calamares. (thanks Callum) ## Modules ## - The QML based *welcomeq* module is now a viable alternative to the *welcome*(widgets based) module. Using QML files means it no longer is needed to have pop-up windows for additional information or warnings, all loads in the Calamares window itself. Additional features include the option to customize the *About* info and load files like Release Notes direct into Calamares, QML files added to the branding directory can be used. - The *welcome* and *locale* modules that do GeoIP lookup can now also use "fixed" style; this just negates the GeoIP lookup and substitutes a constant (fixed) value; useful for testing specific locales. - The *keyboard* module no longer uses *ca_eng* keyboards in Canada by default, but sticks to the *us* keyboard. #1419 # 3.2.24 (2020-05-11) # This release contains contributions from (alphabetically by first name): - Bill Auger - Gaël PORTAY - Luna Jernberg - Philip Müller ## Core ## - There is now a bash-completions script for Calamares; turn on the (CMake-time) option INSTALL_COMPLETION to get it. (Thanks Gaël) - The *productWallpaper* setting is documented and works. (Thanks Bill) - GlobalStorage is available to QML modules as `Global`. - The height of the navigation bar in QML can be set within the QML code for the navigation; if not set, try something sensible. - A regression in the requirements-checker which could block the installer from proceeding without telling the user **why** it was blocked, has been resolved. ## Modules ## - The *bootloader* module can force a UEFI-based machine to boot into the newly-installed system. #1394 (Thanks Gaël) - *partition* Pop-ups about boot flags use the right flag names. #1192 # 3.2.23 (2020-04-17) # This release contains contributions from (alphabetically by first name): - FLVAL ## Core ## - Some strange annotations were added to the *About* dialog text in all the translations, like `{1?}`. These have been removed again. ## Modules ## - *locale* module had some errors in timezone data, where clicking on a city would select a different timezone. Some of these are now fixed (thanks FLVAL). #1374 - *netinstall* supports a wider variety of package naming schemes, and is more flexible in loading a `netinstall.yaml` that is copied from the example configuration file, *groups* key and all. #1369 - *users* module logs a full error message from libpwquality if something is wrong internally. # 3.2.22 (2020-04-08) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Camilo Higuita ## Core ## - Both the sidebar (on the left) and the navigation buttons (along the bottom of the window) can now be configured to use the traditional *widgets*, to use *qml*, or *hidden* from view (hiding the navigation is not recommended unless you have a pure-QML UI to run inside Calamares). The example QML that is compiled into Calamares has been improved. To use your own QML, put files `calamares-sidebar.qml` or `calamares-navigation.qml` into the branding directory. - The sidebar and navigation can now be placed on any side of the main window. This is probably only useful for QML-based UIs. See `branding.desc` for details. ## Modules ## - The *welcomeq* module has been improved with better layout and nicer buttons in the example QML form. (Thanks to Anke Boersma) - The *keyboardq* and *localeq* modules now provide some QML for configuring these parts, although they are still very primitive. - *netinstall* has had some minor layout fixes. - *unpackfs* has much more detailed progress reporting and no longer jumps around strangely in overall progress. - *partition* now correctly marks a partition as bootable in BIOS + MBR installs. #1175 # 3.2.21 (2020-03-27) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Camilo Higuita - Gabriel Craciunescu - Gaël PORTAY ## Core ## - Python job modules (such as *unpackfs* or *packages*) can now provide a `pretty_status_message()` function, like the existing `pretty_name()` function, that is used to update the status during install. #1330 - QML support-modules and objects are now registered into the io.calamares namespace. This affects modules using Calamares models inside their QML UI (at this point, very few). With this release, the necessary `import` for Calamares parts looks like > ```import io.calamares.ui 1.0``` A complete list of objects available from Calamares van be found in the documentation in `Qml.h`. - The sidebar (which shows overall progress in the installation) is now more configurable: the branding key *sidebar* controls it. The sidebar can be shown as a widget (default, as it has been), hidden, or use a new QML view which is more easily customised. - A new `settings.conf` key *quit-at-end* will automatically close Calamares (by clicking on the *Done* button) when the end of the sequence is reached. If *finished* is the last module in the sequence, this will run whatever it is configured for; you can also leave out the finished page and Calamares will close after the exec parts. ## Modules ## - *packages* now reports more details in the installation progress-bar. - *netinstall* module supports an `expanded` key, which will pre-expand a group (as if the user had pressed the arrow-button in the tree-view). This only affects the UI, and only the **outermost** level of groups. - *netinstall* module now supports a special value for *groupsUrl*. Setting this to *local* will read the groups directly from the configuration file. - *netinstall* groups now support a new key `immutable` which prevents their check-state from being changed (they are shown, or hidden, as usual and can be expanded). - Modules that use QML need a new import line. The QML file for the module is configured through new keys *qmlSearch* and *qmlFilename* (previously those were without the `qml` prefix, which invites name collisions). The full module identifier is also used as a filename, so that multiple instances of a module can use different QML files. - *partition* module has a number of new features and settings for type, UUID, and filesystem characteristics. Thanks to Gaël. # 3.2.20 (2020-02-27) # This release contains contributions from (alphabetically by first name): - Bart Ribbers ## Core ## - When logging level is set to 8 (eight), for instance via the `-D8` logging flag, or the `-d` debug flag, the *Show debug information* button will appear in the progress view. This helps with debugging issues where the `-d` flag would be inappropriate. - Calamares now starts at logging level 1 (warnings and errors to the console) by default. Previously it (wrongly) started at level 8. ## Modules ## - The *partition* module now stores which filesystems are in use in global storage. - The *contextualprocess* module now understands "compound variable names", where a dot (.) is used to index into structured data stored in global storage. This allows it to use the map stored by the partition module (but also other things, like looking into the branding information). - The *packages* module now understands "apk", the Alpine Linux package manager. # 3.2.19.1 (2020-02-24) # This is a hotfix release for bugs in the *users* module. Reported by Philip Mueller and Walter Lapchynski. ## Modules ## - The *users* module no longer wrote `/etc/hostname` at all. - The *users* module erroneously shows the root password input fields. - The *initramfs* module sets a resume-hook even when there is no swap. - The partitioning service expects *udevadm* in `/sbin`, but some distro's place it elsewhere. - The mount service didn't unmount directories properly, leading to blocked installations. # 3.2.19 (2020-02-21) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Camilo Higuita - Gabriel Craciunescu ## Core ## - *Assamese* translation has been completed. - Translations are now loaded from more places: instead of **only** being compiled in to the Calamares executable, they can now be read from the current directory (when Calamares is run in developer mode) and from the application data directory.This allows updating the translations without requiring a recompile: helpful for translators and possibly for distributions with their own translation style. See the translators and deployers wiki for details. - A new `ViewStep` base class, `QmlViewStep`, has been added that loads a configurable QML file and plays it. This is used by the new *notesqml* module -- which is in itself a minimal wrapper around the same that adds only a translatable module name. ## Modules ## - The *machineid* and *users* modules now prefer high-quality random data from `/dev/urandom` rather than pseudo-random data. #1254 - A new *notesqml* module supports loading QML. This can be used for "fancy" release notes as a QML application, rather than a webview or text widget. Note that this does not replace the slideshow-during- installation module. - The *users* module now has knobs for setting the hostname and writing the `/etc/hosts` file. The new configuration options are documented in `users.conf`. #1140 - Multiple *netinstall* modules can exist side-by-side, and they each control the package installation for their part of the package list. Previously, a netinstall module would overwrite all of the package configuration done by other netinstall modules. Translations can be provided in the configuration file, `netinstall.conf`. #1303 - The *fstab* module no longer "claims" all the swap partitions it finds on disk. It only uses swap specified for the current installation. This means that "replace" and "alongside" installations will have no swap configured in the target system. # 3.2.18 (2020-01-28) # This release contains contributions from (alphabetically by first name): - Bill Auger ## Core ## - *Assamese* translation has been added (still in preliminary state). - Timezone support code has migrated into the core of Calamares. This means that modules now have easier access to timezone information. Translations for timezones have also been enabled, so it is **possible** at least to translate the displayed zones in the *locale* module. - Branding can now specify whether to (try to) display the Calamares window in the middle of the desktop or not. The *windowPlacement* key in `branding.desc` specifies *center* or *free* placement. ## Modules ## - All modules can now set a new key in `module.desc` called *noconfig*. If this key is set to `true` (the default is `false), no configuration file is searched-for or loaded, and no warning is printed if the configuration is missing. This should tidy up some unnecessary warnings on startup. #1302 #1301 - The *license* module has seen a significant change to its looks. Actions are now labeled more clearly, and the URL (or filename) for each license is displayed. - The *locale* module now supports translations for timezone and location names (e.g. "Berlin" is "Berlijn" in Dutch). - *Packagechooser* is a little more careful with displaying default and empty package names. (thanks to Bill Auger) - The *unpackfs* module now carries a larger weight in the overall progress of the installation, which should resolve downstream reports like "progress stops at 24% for a long time". This is currently hard-coded, but will become configurable in a future release. #1176 # 3.2.17.1 (2019-12-02) # This is a hotfix release for a bug in the grubcfg module. Reported by Philip Mueller and Erik Dubois. ## Modules ## - The *grubcfg* module had a typo in it that made installations fail. # 3.2.17 (2019-11-28) # This release contains contributions from (alphabetically by first name): - Bill Auger ## Core ## - A translation "string freeze" is now enforced by the release scripts. ## Modules ## - A new module, *hostinfo*, places information about the host into Global Storage. This can support contextualprocess modules that need that information. - The password-checks in the *users* module are now ordered consistently. A new check *nonempty* can be used to explicitly check for a non-empty password. This was previously hard-coded. If you have no other password-requirements set (e.g. minimum-length) and rely on Calamares to filter out empty passwords, add this check. - The *grubcfg* module has a new configuration setting *keepDistributor* which prevents replacing the `GRUB_DISTRIBUTION` line when writing the new configuration. #1201 - *packagechooser* documentation has been updated. - *welcome* module now works better with dark themes. - The *license* module could get into a confused state, now fixed. #1271 # 3.2.16 (2019-11-01) # This release contains contributions from (alphabetically by first name): - Bill Auger ## Core ## - Some obscure build scenarios which would lead to bogus module-is- misconfigured messages on startup have been resolved. ## Modules ## - The explanatory messages on the *users* page have moved to tooltips, and placeholder text has been added to the fields. #1202 - The bad-password messages in the *users* page have been improved. #1261 - Password-checking in the *users* module has been substantially changed. A new key *allowWeakPasswords* can be used to introduce an additional checkbox to the page, which can then be used to switch off strict password checking. (Thanks to Bill Auger) - The icons used in password warnings on the *users* page have been changed to the colorful status icons (rather than the thin red X). # 3.2.15 (2019-10-11) # This release contains contributions from (alphabetically by first name): - No other contributors this time around. ## Core ## - No changes to core functionality ## Modules ## - *displaymanager* module now treats *sysconfig* as a regular entry in the *displaymanagers* list, and the *sysconfigSetup* key is used as a shorthand to force **only** that entry in the list. #1253 - *machineid* module has been re-written in C++ and extended with a new configuration key to generate urandom pool data. #1252 - *unpackfs* now supports a special *sourcefs* value of `file` for copying single files (optionally with renaming) or directory trees to the target system. - *unpackfs* now support an *exclude* and *excludeFile* setting for excluding particular files or patters from unpacking. #1229 # 3.2.14 (2019-09-30) # This release contains contributions from (alphabetically by first name): - Andrius Å tikonas - Harald Sitter ## Core ## - No changes to core functionality ## Modules ## - *locale* module no longer recognizes the legacy GeoIP configuration. This has been deprecated since Calamares 3.2.8 and is now removed. - *packagechooser* module can now be custom-labeled in the overall progress (left-hand column). #1228 - *displaymanager* module now recognizes KDE Plasma 5.17. - *displaymanager* module now can handle Wayland sessions and can detect sessions from their .desktop files. #1247 #1248 - *unpackfs* now has special handling for *sourcefs* setting "file" (so you can copy single files or directories that are on the source system, directly to the target). #1188 #1181 # 3.2.13 (2019-08-30) # This release contains contributions from (alphabetically by first name): - Arnaud Ferraris - Arnaud Rebillout - Bill Auger - Kevin Kofler ## Core ## - The Calamares standard coding style -- embodied in `ci/calamaresstyle` has had a few updates and has now been consistently applied across the core codebase (e.g. libcalamares, libcalamaresui, calamares, but not the modules). - *KCoreAddons* is now a required dependency. This lets us drop a chunk of code that was copied from KCoreAddons years ago, and use the (maintained!) upstream version instead. It also gives us KMacroExpander everywhere, which will simplify code for handling substitutions in configuration files. - *Slideshows* now have a new property *activatedInCalamares* which controls the keyboard shortcuts (and can control timers and other properties of the slideshow, too). ## Modules ## - The *packagechooser* module can load data from the config-file, from AppData XML files referred by the config-file, and (new) also from AppStream caches by referring to an application's AppStream id. #1212 - The *partition* module now understands the units *KB*, *MB*, *GB* which are powers-of-ten sizes, alongside the powers-of-two sizes that it already used. (thanks to Arnaud) - The *welcome* module now supports a *Donate* button if *showDonateUrl* is set to a non-empty URL. #1197 - The *welcome* module can have URLs for the various buttons configured directly in the module configuration (rather than in `branding.desc`). # 3.2.12 (2019-08-07) # This release contains contributions from (alphabetically by first name): - apt-ghetto - Bill Auger - embar ## Core ## - Preliminary work to allow jobs to have a *weight* assigned to them has been added. This will allow the progress bar to better reflect progress by the amount of work done rather than purely by the number of jobs. (Thanks to Bill Auger) - Preliminary work has been added to post the installation log to a pastebin for bug reporting. (Thanks to Bill Auger) - Support for translated human-readable strings in Calamares config files has been added. This is used only in the *packagechooser* module (see below) but will expand to those modules that need user-visible strings from the configuration file (existing solutions need either gettext or Qt support). - Esperanto is now available when Qt version 5.12.2 or later is used. ## Modules ## - *fstab* A new configuration key *efiMountOptions* has been added, to allow setting filesystem options specifically for the EFI partition. (Thanks to apt-ghetto) - *packagechooser* is a new module for low-density package choices, e.g. for selecting a default desktop environment, or adding some proprietary drivers, or chosing browsers of office suites. It presents **one** collection of items -- at most ten or so, because of the UI -- and the user can select zero or more of them. The behavior is configurable, and package information can be set through the Calamares configuration file or by reading AppData files for the packages. #426 # 3.2.11 (2019-07-06) # This release contains contributions from (alphabetically by first name): - No other contributors this time around. This is a security release with no functional changes (except for improved security) relative to 3.2.10. The Calamares team would like to acknowledge the help of the following people in reporting and understanding the issues (alphabetically by first name): - Kevin Kofler - Seth Arnold - Simon Quigley - Thomas Ward Both CVE's have been resolved. ## Core ## No core changes. ## Modules ## - *initramfs* could create an initramfs with insecure permissions. Since the keyfile is included in the initramfs, an attacker could read the file from the initramfs. #1190 CVE-2019-13178 - *luksbootkeyfile* created a key file where a window of opportunity existed where the key file could have too-lax file permissions. #1191 CVE-2019-13179 # 3.2.10 (2019-06-28) # This release contains contributions from (alphabetically by first name): - No other contributors this time around. Distributions are **advised** to check the slideshow they use for the installation step; changes in loading and translation mechanisms may require changes in the slideshow. ## Core ## - With this release, option *WITH_PYTHONQT* changes default to **off**. There does not seem to be any serious use of the PythonQt API and the UI opportunities it offers, so begin the process of deprecating and removing that. Sometime in the future, QML pages will fill the gap for easily-prototyped-yet-slick UI elements. - A crash when no *finished* page (or rather, no page at all) is configured after the last *exec* section of the sequence has been solved. The *finished* page can be left out (but then you don't get the restart-now functionality). #1168 - The *slideshow* which is run during installation now has API versions. API version 1 (the default) runs as before, where the slideshow is loaded when the installation starts. API version 2 loads the slideshow on Calamares startup, thus improving responsiveness. Documentation in `src/branding/README.md`. #1152 - The example slideshow now uses API version 2. ## Modules ## - *initramfs* has been changed from a Python module to a C++ module. Packaging will need to adjust now it installs a .so instead of a .py. The module itself functions as before. It does have a new configuration option, to change the version passed as to the `-k` option of update-initramfs. #1180 - *partition* Now has its own setting for *requiredStorage*, duplicating the same setting in the *welcome* module. This is useful for configurations where no *welcome* module is used, but a minimum size must be checked anyway. #1169 # 3.2.9 (2019-06-03) # This release contains contributions from (alphabetically by first name): - Kevin Kofler ## Core ## No user- or deployer-visible changes. Bugfixing as usual, see the milestone for details. ## Modules ## - *branding* now supports os-release variables in the *strings* section, which allows re-using (at runtime) information set in /etc/os-release . This requires KDE Frameworks 5.58. #1150 - *branding* allows the use of FreeDesktop.org icon names for the *productLogo* and *productIcon* keys. If a file is named there, then the file is used, and otherwise the icon is looked up in the current theme. #1160 - *packages* On Arch, with the `pacman` package manager, avoid a hang during system update. #1154 - *welcome* allows a custom image path or icon name to be set for the language-selection drop-down (instead of the international standard one). # 3.2.8 (2019-05-10) # This is a **source-incompatible** release of Calamares. Include files have been shuffled around, so third-party C++ modules will need adjustment to the changed names. This release contains contributions from (alphabetically by first name): - Arnaud Ferraris - Kevin Kofler ## Core ## - All user-visible texts referring to "MB" and "GB" now use the standard "MiB" and "GiB" wording, which matches what we were actually calculating with (i.e. 2^20 and 2^30 respectively). #1129 - The side-pane, which shows the list of steps that will be executed, now tries to fit the text (name of each module) into the available space by shrinking the font as needed. #1137 - *libcalamares* (accidentally) linked with Qt's GUI libraries when PythonQt was found. This led to the odd situation where the non-GUI Calamares library depends on a bunch of GUI libraries. - *libcalamares* The `utils/` subdirectory has been hugely refactored, with functionality split out into separate files. C++ modules will need to have their `#include` names updated. Basically, users of `utils/CalamaresUtils.h` will need to include the header file for the functionality that is actually used. ## Modules ## - *finished* has a new mechanism for configuring the behavior of the *restart now* button. The old-style boolean configuration is still supported but generates a warning. #1138 - *locale* module GeoIP configuration has a new preferred format. See `locale.conf` for details. The old configuration is still supported but will be phased out before 3.3.0 -- in particular, support for "legacy" format will be removed, since that was a crutch for the disappearance of one GeoIP provider in 2018. - *oemid* is a new module for configuring OEM phase-0 (image pre-mastering, or pre-deployment) things. It has limited functionality at the moment, writing only a single batch-identifier file. #943 - *welcome* can now do GeoIP lookups as well (but be careful with the configuration, since you need a GeoIP that provides country information, not just timezones). This will let Calamares select a starting language that matches where it is -- which might not be useful at all. #934 - All Python modules now bail out gracefully on (at least some) bad configurations, rather than raising an exception. The pre-release scripts now test for exceptions to avoid shipping modules with ImportError or SyntaxError results. # 3.2.7 (2019-04-27) # This is a **hotfix** release for regressions introduced in the Python modules. The *localecfg* module was unusable because of a missing `import`. # 3.2.6 (2019-04-25) # This release contains contributions from (alphabetically by first name): - Arnaud Ferraris - Dominic Hayes (feren) - Raul Rodrigo Segura (raurodse) ## Core ## * Under-the-hood code cleanups in lots of parts of the core. Calamares now builds without warnings when Clang 8 is used. * A new *disable-cancel-during-exec* setting provides more fine-grained control than *disable-cancel*, which hides the button entirely. #1122 (Thanks to Dominic, FerenOS) * A branding module can now also cause a stylesheet to be loaded, which will be applied to the widgets inside Calamares. #961 (Thanks to Raul) ## Modules ## * All of the Python-based modules now have translations enabled. #991 * *Displaymanager* module has improved support for LightDM configuration. #1123 (Thanks to Dominic, FerenOS) * *License* module can now display local files inline, and scrolls to allow longer lists of licenses and to support long license texts displayed inline. #1124 #1125 #1052 * *Partition* module has additional checks for validity partition layouts. #1127 (Thanks to Arnaud) * *Welcome* module has improved usability: a standard icon alongside the *Language* label, for improved recognition, and improved language-list display and sorting. #1107 # 3.2.5 (2019-04-15) # This release contains contributions from (alphabetically by first name): - Arnaud Ferraris - Dan Simmons - Gabriel Craciunescu ## Core ## * View modules (in C++) can now perform their own requirements-checking to see if installation makes sense. This expands upon the existing requirements checks in the welcome module (RAM, disk space, ..). The checks have been made asynchronous, so that responsiveness during requirements-checking is improved and the user has better feedback. * Support for building an AppImage of Calamares has been added to the `ci/` directory. There are use-cases where a containerized build and configuration make sense rather than having Calamares installed in the host system. (Thanks to the AppImage team, Alexis) * OEM mode (phase-1) now correctly refers to Calamares as a "Setup Program" rather than an installer. #1100 (Thanks to Arnaud) ## Modules ## * *Bootloader* module: a serious bug introduced in 3.2.4 which prevents succesful boot after installation on EFI machines, has been repaired. (Thanks to Gabriel) #1104 * *Displaymanager* module: it is no longer a fatal error to not have any display-managers. #1095 * *Partition* module: it is now possible to build without libparted. Since KPMCore may not need this library anymore, it is a dependency that will be dropped as soon as it is feasible. Add this to the CMake flags: `-DCMAKE_DISABLE_FIND_PACKAGE_LIBPARTED=ON` * *Partition* module: the location that is selected for the bootloader, no longer changes when a new partition is created. #1098 * Python modules: several modules have had translations added. This is usually only visible when the module runs as part of the *exec* step, when the module's *pretty name* is displayed. In addition, some error messages are now translated. * *UnpackFS* module: improved progress reporting and tests. #565 # 3.2.4 (2019-02-12) # This release contains contributions from (alphabetically by first name): - Alf Gaida - aliveafter1000 - Arnaud Ferraris - Caio Jordão Carvalho - Collabora LTD - Gabriel Craciunescu - Kevin Kofler - Philip Mueller - Scott Harvey ## Core ## * The Calamares application now recognizes the `-X` or `--xdg-config` option, which adds XDG_DATA_DIRS to the places used to find QML and branding directories, and XDG_CONFIG_DIRS to the places used to find the global settings and module configurations. This allows a more fine-grained, and more layered, approach to setting up Calamares configurations (in particular, distro's can **add** configuration files and give them priority, instead of **forking** configuration files). * The *branding* file now contains settings that control the size and resize behavior of Calamares. See the branding file for more documentation. In particular, the setting *windowExpanding* can be set to *normal*, *fullscreen* or *noexpand*. * The `settings.conf` file can now configure whether the *Cancel* button is shown (this isn't a branding thing, because it's quite fundamental to the workflow of the installer). ## Modules ## * The *partition* module supports RAID devices, but only when Calamares is compiled with the newest KPMCore release (3.3.0). * The calculation of required space -- including swap -- has been simplified, and Calamares no longer reserves 2GiB of space in calculations for internal use (this means that it no longer mysteriously drops swap when the disk size is close to the required installation size). * The name of the type of default filesystem (e.g. ext4 or btrfs) is now handled case- and localization-insensitively. This means that *btrfs* is now always an acceptable spelling. * The currently-selected disk device is remembered between manual partitioning and the partitioning-overview pages. (Thanks to Arnaud) * *partition* There is new support for partitioning layout presets. See `partition.conf` for documentation and details. * The *keyboard* module now handles the (bogus) Austrian keymap for the system console properly. (Thanks to Kevin) * The *preservefiles* module now has a mechanism for setting the permissions (and ownership) of preserved files. (Thanks to Scott) * New module *fsresizer* can be used to resize filesystems. It is intended for use in OEM installs where an image of fixed size is created, and then sized to the actual SD card the user has used. * The *mount* module now handles missing *extraMounts* and *extraMountsEfi* keys gracefully (this is probably a misconfiguration, though, and gives a warning). * The *packages* module now supports pre- and post-script options for all operations, not just during install (keep in mind that these run as three separate shells, though). * A new *rawfs* module supports straightforward copying of filesystems from the installation media to the target stystem. This can be used, for instance, for block-level-identical installations. # 3.2.3 (2019-01-09) # This release contains contributions from (alphabetically by first name): - aliveafter1000 ## Core ## There are no core changes in this release. ## Modules ## * *partition* Fixed bug where, during detection of existing systems, the existing system partitions may be mounted and then files deleted. This is a **limited** version of the patch from aliveafter1000 that will be in 3.2.4, which tries harder to mount filesystems read-only and unmodifiable. * *locale* It was possible to set the installer and system language (e.g. to German) while the global storage value for *locale* remained set to English. Then no localization packages are installed (see feature `${LOCALE}` in `packages.conf`). Reported downstream in Netrunner. # 3.2.2 (2018-09-04) # This release contains contributions from (alphabetically by first name): - Andrius Å tikonas - artoo@cromnix.org - Caio Jordão Carvalho - Harald Sitter - Philip Müller - Simon Quigley - Walter Lapchynski ## Core ## * Example configurations are **no longer installed** by default. The default setting for *INSTALL_CONFIG* has changed. Distributions are strongly encouraged to write their own configuration files and not rely on the example configuration files. Example configurations may change unpredictably. * It is now possible to express module dependencies through the *requiredModules* key in `module.desc`. All of the required modules for a given module must occur in the sequence **before** the module requiring them. None of the core modules use this facility. * The search paths for QML files, branding descriptors and module descriptors have been revamped and now self-document in the log. * A new `ci/RELEASE.sh` script has been added to streamline releases; it is not guaranteed to work anywhere in particular though. ## Modules ## * When multiple modules are mutually exclusive, or don't make sense to enable concurrectly, a new `USE_` framework has been added to CMake to simplify the selection of modules. This is in addition to the existing `SKIP_MODULES` mechanism. * Various off-by-one-sector errors in the automatic partitioning mode have been corrected. In addition, swap space is calculated a little more conservatively. * A new module has been added to the core which can configure openrc services. To make services configuration consistent: - The *services* module has been **renamed** *services-systemd*, - The openrc module is named *services-openrc*, - At CMake time, it is possible to select all of the services modules, or one specific one, by setting the *USE_services* CMake variable. By default, all of the modules are built and installed. * The systemd-services module can now disable targets and mask both targets and services (which will allow you to break the system with a bad configuration). The configuration is a little more flexible because a service (or target) name can be used on its own with sensible defaults. * The displaymanager module has been entirely revamped. A long-standing bug which ignored the settings for default desktop has been fixed (thanks to Walter Lapchynski). Translations have been added to the error messages. Each DM now has an implementation class for doing all the configuration steps it needs. This groups the code needed for a specific DM (and presumably, per-distro) in one place. Distro's are **strongly advised** to re-test their DM configuration and installation with the revamped code. # 3.2.1 (2018-06-25) # This release contains contributions from (alphabetically by first name): - Bill Auguer - Gabriel Craciunescu - Phil Mueller - Raul Rodrigo Segura ## Core ## * Qt 5.7 is now the minimum required Qt version. Because KPMCore (a fairly fundamental dependency) requires Qt 5.7, Calamares has followed suit. * New testing application `loadmodule` for loading and running a single Calamares module. * New translations Belarussian and Korean. * Jobs can now be *emergency jobs* which run even after a failure. * Improved debugging when modules fail to load. * Bad configuration files will now cause the user-interface of Calamares to display an error message, rather than silently ignoring some configuration errors. This will certainly cause problems for distributions with sloppy configurations. ## Modules ## * New module preservefiles, keeps (log) files around after install; this duplicates functionality with the unmount module, but unmount is very late, rather limited, and fragile. * Interactiveterminal module now disables itself if build requirements are not met, rather than blocking the build. * Fixes in the timezone map data make the southern hemisphere more usable and put Reykjavik in its place. * The packages module can now update the target system if explicitly told to do so. * More paths and executables are configurable in the bootloader module. * Distributions are advised to review the `users.conf` setup **again**, as some changes in version 3.2.0 caused regressions downstream. * Distributions are advised to review their `locale.gen` files **again**. Previous changes were too restrictive, matching only the specific format Chakra Linux uses. Calamares now preserves all the comment-lines in the file and writes enabled locales at the end, with a descriptive comment. # 3.2.0 (2018-05-17) # This release contains contributions from (alphabetically by first name): - Alf Gaida - AlmAck - Caio Jordão Carvalho - Frede H ## Modules ## * UI annoyances in the partitioning module were fixed; the mount-point selector is now more obvious when no mount-point has been chosen, and the mount-point and flags are preserved when (re)editing partitions. * The handling of `@@ROOT@@` substitution in shellprocesses was backwards; this has been fixed (the substitution is made when running in the **host**). * The user shell is no longer hard-coded to `/bin/bash`, but follows the default setting for useradd(8), e.g. those set in `/etc/default/useradd`. calamares-calamares-2d126ae/CMakeLists.txt000066400000000000000000000622531430147706700205570ustar00rootroot00000000000000# === 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.61 LANGUAGES C CXX ) # Leave this as "Release mode", since 3.2 is in LTS / bugfix-only state, # and should always be releaseable. set( CALAMARES_VERSION_RC 0 ) # Set to 0 during release cycle, 1 during development if( CALAMARES_VERSION_RC EQUAL 1 AND CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) message( FATAL_ERROR "Do not build development versions in the source-directory." ) endif() ### OPTIONS # option( INSTALL_CONFIG "Install configuration files" OFF ) option( INSTALL_POLKIT "Install Polkit configuration" ON ) option( 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_BAIL_OUT (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) or location (ca@valencia) need special # handling in libcalamares/locale/Translation.h . # # NOTE: move eo (Esperanto) to _ok once Qt can actually create a # locale for it. (Qt 5.12.2 can, see 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 75 languages set( _tx_complete az az_AZ ca fi_FI fr he hr ja ko lt pt_BR pt_PT sv tr_TR uk zh_TW ) set( _tx_good as be ca@valencia cs_CZ da de es fa fur hi it_IT ml nl ru si sk sq tg vi zh_CN ) set( _tx_ok ar ast bg bn el en_GB es_MX et eu gl hu id is mr nb oc pl ro sl sr sr@latin th ) set( _tx_incomplete eo es_PR gu ie ja-Hira kk kn lo lv mk ne_NP ta_IN te ur uz zh zh_HK ) ### 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. This massages the language lists # for use with older Qt (which does not support Esperanto) and checks # for some obvious error. The actual work of compiling translations # is done in the lang/ directory. # 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-calamares-2d126ae/CMakeModules/000077500000000000000000000000001430147706700203205ustar00rootroot00000000000000calamares-calamares-2d126ae/CMakeModules/BoostPython3.cmake000066400000000000000000000073011430147706700236760ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/CMakeColors.cmake000066400000000000000000000024251430147706700234670ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/CalamaresAddBrandingSubdirectory.cmake000066400000000000000000000152121430147706700276700ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/CalamaresAddLibrary.cmake000066400000000000000000000105651430147706700251570ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/CalamaresAddModuleSubdirectory.cmake000066400000000000000000000304741430147706700274000ustar00rootroot00000000000000# === 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 ) # We look for Pylint (just once) so that unittests can be added that # check the syntax / variables of Python modules. This should help # avoid more typo's-in-releases. if(BUILD_TESTING AND NOT PYLINT_COMMAND_SEARCHED) set(PYLINT_COMMAND_SEARCHED TRUE) find_program( PYLINT_COMMAND NAMES pylint3 pylint PATHS $ENV{HOME}/.local/bin ) endif() function( _calamares_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() if ( PYLINT_COMMAND AND MODULE_INTERFACE MATCHES "python" ) # Python modules get an additional test via pylint; this # needs to run at top-level because the ci/libcalamares directory # contains API stubs. # # TODO: the entry point is assumed to be `main.py`, but that is # configurable through module.desc add_test( NAME lint-${SUBDIRECTORY} COMMAND env PYTHONPATH=ci: ${PYLINT_COMMAND} -E ${_mod_dir}/main.py WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) endif() endif() endfunction() function( calamares_add_module_subdirectory ) set( SUBDIRECTORY ${ARGV0} ) set( _ams_SKIP_LIST ${ARGV1} ) set( SKIPPED_MODULES "" ) _calamares_add_module_subdirectory_impl( ${SUBDIRECTORY} ) if ( SKIPPED_MODULES ) if ( _ams_SKIP_LIST ) list( APPEND ${_ams_SKIP_LIST} "${SKIPPED_MODULES}" ) set( ${_ams_SKIP_LIST} "${${_ams_SKIP_LIST}}" PARENT_SCOPE ) else() set( SKIPPED_MODULES "${SKIPPED_MODULES}" PARENT_SCOPE ) endif() endif() endfunction() calamares-calamares-2d126ae/CMakeModules/CalamaresAddPlugin.cmake000066400000000000000000000214541430147706700250100ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/CalamaresAddTest.cmake000066400000000000000000000033711430147706700244670ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/CalamaresAddTranslations.cmake000066400000000000000000000102341430147706700262250ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/CalamaresAutomoc.cmake000066400000000000000000000037161430147706700245510ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/CalamaresCheckModuleSelection.cmake000066400000000000000000000110351430147706700271640ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/ExtendedVersion.cmake000066400000000000000000000060051430147706700244310ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/FindCrypt.cmake000066400000000000000000000022241430147706700232240ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/FindLIBPARTED.cmake000066400000000000000000000051521430147706700234340ustar00rootroot00000000000000# 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-calamares-2d126ae/CMakeModules/FindLibPWQuality.cmake000066400000000000000000000026361430147706700244600ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/FindPythonQt.cmake000066400000000000000000000140141430147706700237110ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/FindYAMLCPP.cmake000066400000000000000000000047711430147706700232410ustar00rootroot00000000000000# === 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-calamares-2d126ae/CMakeModules/KPMcoreHelper.cmake000066400000000000000000000026551430147706700237720ustar00rootroot00000000000000# === 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-calamares-2d126ae/CONTRIBUTING.md000066400000000000000000000107121430147706700202410ustar00rootroot00000000000000 # 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-calamares-2d126ae/CalamaresConfig.cmake.in000066400000000000000000000060651430147706700224430ustar00rootroot00000000000000# 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-calamares-2d126ae/LICENSES/000077500000000000000000000000001430147706700172145ustar00rootroot00000000000000calamares-calamares-2d126ae/LICENSES/BSD-2-Clause.txt000066400000000000000000000024541430147706700217430ustar00rootroot00000000000000 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-calamares-2d126ae/LICENSES/CC-BY-4.0.txt000066400000000000000000000406561430147706700210640ustar00rootroot00000000000000Creative 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-calamares-2d126ae/LICENSES/CC0-1.0.txt000066400000000000000000000154041430147706700206220ustar00rootroot00000000000000Creative 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-calamares-2d126ae/LICENSES/GPL-3.0-or-later.txt000066400000000000000000001045131430147706700224240ustar00rootroot00000000000000 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-calamares-2d126ae/LICENSES/LGPL-2.0-only.txt000066400000000000000000000621261430147706700217760ustar00rootroot00000000000000 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-calamares-2d126ae/LICENSES/LGPL-2.1-only.txt000066400000000000000000000624671430147706700220070ustar00rootroot00000000000000GNU 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-calamares-2d126ae/LICENSES/LGPL-3.0-or-later.txt000066400000000000000000000164071430147706700225440ustar00rootroot00000000000000GNU 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-calamares-2d126ae/LICENSES/MIT.txt000066400000000000000000000021241430147706700204050ustar00rootroot00000000000000MIT 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-calamares-2d126ae/README.md000066400000000000000000000072521430147706700172740ustar00rootroot00000000000000 # 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/LICENSES/GPL-3.0-or-later.txt) | [Report a Bug](https://github.com/calamares/calamares/issues/new) | [Translate](https://www.transifex.com/projects/p/calamares/) | [Contribute](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) (needs a Matrix account) * [![Chat on IRC](https://img.shields.io/badge/IRC-Libera.Chat%20%23calamares-green)](https://kiwiirc.com/client/irc.libera.chat/#calamares) (IRC supports guest accounts) calamares-calamares-2d126ae/calamares.desktop000066400000000000000000000223031430147706700213320ustar00rootroot00000000000000[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[ast]=Instalar el sistema Icon[ast]=calamares GenericName[ast]=Instalador del sistema Comment[ast]=Calamares — Instalador del sistema Name[az]=Sistemi QuraÅŸdırmaq Icon[az]=calamares GenericName[az]=Sistem QuraÅŸdırıcısı Comment[az]=Calamares Sistem QuraÅŸdırıcısı Name[az_AZ]=Sistemi quraÅŸdırmaq Icon[az_AZ]=calamares GenericName[az_AZ]=Sistem quraÅŸdırcısı Comment[az_AZ]=Calamares — Sistem QuraÅŸdırıcısı Name[be]=УÑталÑваць ÑÑ–ÑÑ‚Ñму Icon[be]=calamares GenericName[be]=УÑталёўшчык ÑÑ–ÑÑ‚Ñмы Comment[be]=Calamares — уÑталёўшчык ÑÑ–ÑÑ‚Ñмы Name[bg]=ИнÑталирай ÑиÑтемата Icon[bg]=calamares GenericName[bg]=СиÑтемен инÑталатор Comment[bg]=„Calamares“ – СиÑтемен инÑталатор Name[bn]=সিসà§à¦Ÿà§‡à¦® ইনসà§à¦Ÿà¦² করà§à¦¨ Icon[bn]=কà§à¦¯à¦¾à¦²à¦¾à¦®à¦¾à¦°à§‡à¦¸ GenericName[bn]=সিসà§à¦Ÿà§‡à¦® ইনসà§à¦Ÿà¦²à¦¾à¦° Comment[bn]=কà§à¦¯à¦¾à¦²à¦¾à¦®à¦¾à¦°à§‡à¦¸ - সিসà§à¦Ÿà§‡à¦® ইনসà§à¦Ÿà¦²à¦¾à¦° Name[ca]=Instal·la el sistema Icon[ca]=calamares GenericName[ca]=Instal·lador de sistema Comment[ca]=Calamares — Instal·lador de sistema Name[cs_CZ]=Nainstalovat systém Icon[cs_CZ]=calamares GenericName[cs_CZ]=Instalátor systému Comment[cs_CZ]=Calamares – instalátor operaÄních systémů Name[da]=Installér system Icon[da]=calamares GenericName[da]=Systeminstallationsprogram 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[eo]=Instali Sistemo Icon[eo]=calamares GenericName[eo]=Sistema Instalilo Comment[eo]=Calamares — Sistema Instalilo Name[es]=Instalar el sistema Icon[es]=calamares GenericName[es]=Instalador del sistema Comment[es]=Calamares — Instalador del sistema Name[es_MX]=Instalar el Sistema Icon[es_MX]=calamares GenericName[es_MX]=Instalador del sistema Comment[es_MX]=Calamares - Instalador del sistema Name[es_PR]=Instalar el sistema Name[et]=Paigalda süsteem Icon[et]=calamares GenericName[et]=Süsteemipaigaldaja 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[fi_FI]=Asenna järjestelmä Icon[fi_FI]=calamares GenericName[fi_FI]=Järjestelmän asennusohjelma Comment[fi_FI]=Calamares — Järjestelmän asentaja Name[fr]=Installer le système Icon[fr]=calamares GenericName[fr]=Installateur système Comment[fr]=Calamares - Installateur système Name[fur]=Instale il sisteme Icon[fur]=calamares GenericName[fur]=Program di instalazion dal sisteme Comment[fur]=Calamares — Program di instalazion dal sisteme Name[gl]=Instalación do Sistema Icon[gl]=calamares GenericName[gl]=Instalador de sistemas 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[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[ie]=Installar li sistema Icon[ie]=calamares GenericName[ie]=Installator del sistema Comment[ie]=Calamares — Installator del sistema Name[is]=Setja upp kerfið Icon[is]=calamares GenericName[is]=Kerfis uppsetning Comment[is]=Calamares — Kerfis uppsetning Name[it_IT]=Installa il sistema Icon[it_IT]=calamares GenericName[it_IT]=Programma d'installazione del sistema Comment[it_IT]=Calamares — Programma d'installazione del sistema Name[ja]=システムをインストール Icon[ja]=calamares GenericName[ja]=システムインストーラー 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[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[ne_NP]= सिसà¥à¤Ÿà¤® इनà¥à¤¸à¥à¤Ÿà¤² गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ Icon[ne_NP]=Calamares GenericName[ne_NP]=सिसà¥à¤Ÿà¤® इनà¥à¤¸à¥à¤Ÿà¤²à¤° Comment[ne_NP]=Calamares - सिसà¥à¤Ÿà¤® इनà¥à¤¸à¥à¤Ÿà¤²à¤° Name[nl]=Installeer systeem Icon[nl]=calamares GenericName[nl]=Installatieprogramma Comment[nl]=Calamares — Installatieprogramma 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[pt_PT]=Instalar Sistema Icon[pt_PT]=calamares GenericName[pt_PT]=Instalador de Sistema Comment[pt_PT]=Instalador de Sistema - Calamares Name[ro]=Instalează sistemul Icon[ro]=calamares GenericName[ro]=Instalator de sistem Comment[ro]=Calamares — Instalator de sistem Name[ru]=УÑтановить ÑиÑтему Icon[ru]=calamares GenericName[ru]=УÑтановщик ÑиÑтемы Comment[ru]=Calamares - УÑтановщик ÑиÑтемы Name[si]=පද්ධතිය ස්ථà·à¶´à¶±à¶º කරන්න Icon[si]=à¶šà·à¶½à¶¸à¶»à·šà·ƒà·Š GenericName[si]=පද්ධති ස්ථà·à¶´à¶šà¶º Comment[si]=Calamares - පද්ධති ස්ථà·à¶´à¶šà¶º Name[sk]=InÅ¡talovaÅ¥ systém Icon[sk]=calamares GenericName[sk]=InÅ¡talátor systému 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[sr]=ИнÑталирај ÑиÑтем Icon[sr]=calamares GenericName[sr]=ИнÑталатер ÑиÑтема Comment[sr]=ÐšÐ°Ð»Ð°Ð¼Ð°Ñ€ÐµÑ â€” инÑталатер ÑиÑтема Name[sr@latin]=Instaliraj sistem Name[sv]=Installera system Icon[sv]=calamares GenericName[sv]=Systeminstallerare Comment[sv]=Calamares — Systeminstallerare Name[tg]=ÐаÑбкунии низом Icon[tg]=calamares GenericName[tg]=ÐаÑбкунандаи низомӣ Comment[tg]=Calamares — ÐаÑбкунандаи низомӣ Name[th]=ติดตั้งระบบ Name[tr_TR]=Sistemi Yükle Icon[tr_TR]=calamares GenericName[tr_TR]=Sistem Yükleyici Comment[tr_TR]=Calamares — Sistem Yükleyici Name[uk]=Ð’Ñтановити СиÑтему Icon[uk]=calamares GenericName[uk]=Ð’Ñтановлювач ÑиÑтеми Comment[uk]=Calamares - Ð’Ñтановлювач ÑиÑтеми Name[uz]=O'rnatish Icon[uz]=calamares GenericName[uz]=Sistema o'rnatuvchisi Comment[uz]=Calamares — Sistema o'rnatuvchisi 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 ── 系統安è£ç¨‹å¼ calamares-calamares-2d126ae/calamares.desktop.in000066400000000000000000000004721430147706700217420ustar00rootroot00000000000000[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-calamares-2d126ae/ci/000077500000000000000000000000001430147706700164025ustar00rootroot00000000000000calamares-calamares-2d126ae/ci/AppImage.sh000077500000000000000000000234101430147706700204240ustar00rootroot00000000000000#! /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-calamares-2d126ae/ci/RELEASE.md000066400000000000000000000136221430147706700200100ustar00rootroot00000000000000# 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. Pick the right file for the release-stream. * 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*. See the text below, "Placeholder Release". Add the placeholder to the right file for the release-stream. * Commit and push that, usually with the message *Changes: post-release housekeeping*. # Related Material > This section isn't directly related to any specific release, > but bears on all releases. ## GPG Key Maintainence Calamares uses GPG Keys for signing the tarballs and some commits (tags, mostly). Calamares uses the **maintainer's** personal GPG key for this. This section details some GPG activities that the maintainer should do with those keys. - Signing sub-key. It's convenient to use a signing sub-key specifically for the signing of Calamares. To do so, add a key to the private key. It's recommended to use key expiry, and to update signing keys periodically. - Run `gpg -K` to find the key ID of your personal GPG secret key. - Run `gpg --edit-key ` to edit that personal GPG key. - In gpg edit-mode, use `addkey`, then pick a key type that is *sign-only* (e.g. type 4, *RSA (sign only)*), then pick a keysize (3072 seems ok as of 2020) and set a key expiry time, (e.g. in 18 months time). - After generation, the secret key information is printed again, now including the new signing subkey: ``` ssb rsa3072/0xCFDDC96F12B1915C created: 2020-07-11 expires: 2022-01-02 usage: S ``` - Update the `RELEASE.sh` script with a new signing sub-key ID when a new one is generated. Also announce the change of signing sub-key (e.g. on the Calmares site or as part of a release announcement). - Send the updated key to keyservers with `gpg --send-keys ` - Optional: sanitize the keyring for use in development machines. Export the current subkeys of the primary key and keep **only** those secret keys around. There is documentation [here](https://blog.tinned-software.net/create-gnupg-key-with-sub-keys-to-sign-encrypt-authenticate/) but be careful. - Export the public key material with `gpg --export --armor `, possibly also setting an output file. - Upload that public key to the relevant GitHub profile. - Upload that public key to the Calamares site. ## Placeholder Release Notes ``` # 3.2.XX (unreleased) # This release contains contributions from (alphabetically by first name): - No external contributors yet ## Core ## - No core changes yet ## Modules ## - No module changes yet ``` calamares-calamares-2d126ae/ci/RELEASE.sh000077500000000000000000000127101430147706700200220ustar00rootroot00000000000000#! /bin/sh # # SPDX-FileCopyrightText: 2018 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # ### USAGE # # Release script for Calamares # # 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 # * '-b' do not build-and-test tarball # # 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 # * TEST_TARBALL set to 'false' to skip build-and-test phase after tarring # ### 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 test -z "$TEST_TARBALL" && TEST_TARBALL=true STRING_FREEZE=true while getopts "hBbPT" 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 ;; b) TEST_TARBALL=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 ./cala-tmp-XXXXXX) KEY_ID="328D742D8807A435" # Try to make gpg cache the signing key, so we can leave the process # to run and sign. rm -f CMakeLists.txt.gpg gpg -s -u $KEY_ID CMakeLists.txt ### Build with default compiler # # 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 # # if test "x$TEST_TARBALL" = "xtrue" ; then D=$(date +%Y%m%d-%H%M%S) TMPDIR=$(mktemp -d ./cala-tar-XXXXXX) 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 ; } fi 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-License-Identifier: BSD-2-Clause # # Compares the ABI of the current working tree with the ABI # from a base-version. Uses libabigail for the actual comparison. # # To use the tool, just run the script. It will build Calamares at # least once, maybe twice (if it needs the base-version ABI information # and hasn't cached it). # The base version can be a tag or git-hash; it will be checked-out # in a worktree. # # Note that the hash here now is 3.2.60, which is sort-of-the # start of LTS releases. We try to keep ABI compatibility from # there on out. BASE_VERSION=b11ee3abc583e571e588fd00afb99d1a528373e6 ### Build a tree and cache the ABI info into ci/ # # do_build() { LABEL=$1 SOURCE_DIR=$2 BUILD_DIR=build-abi-$LABEL rm -rf $BUILD_DIR mkdir $BUILD_DIR if ( cd $BUILD_DIR && cmake $SOURCE_DIR -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-Og -g -gdwarf" -DCMAKE_C_FLAGS="-Og -g -gdwarf" && make -j12 ) > /dev/null 2>&1 then ls -1 $BUILD_DIR/libcalamares*.so.* # Copy the un-versioned files; .so is a symlink to the just-built one for lib in $BUILD_DIR/libcalamares*.so do cp $lib ci/`basename $lib`.$LABEL done else echo "! failed to build $LABEL" exit 1 fi } ### Build current tree and get ABI info # # do_build current `pwd -P` ### Build ABI base version # # We cache this to save on some build time, if we are chasing a # single branch from an unchanging base version. # if test -f ci/libcalamares.so.$BASE_VERSION then # The ABI version is cached, so we're good : else git worktree remove --force tree-abi-$BASE_VERSION git worktree add tree-abi-$BASE_VERSION $BASE_VERSION > /dev/null 2>&1 || { echo "! could not create worktree for $BASE_VERSION" ; exit 1 ; } do_build $BASE_VERSION $( cd tree-abi-$BASE_VERSION && pwd -P ) fi ### Compare & Report # # abidiff compares the Application Binary Interfaces (ABI) of two # shared libraries in ELF format. It emits a meaningful report describing # the differences between the two ABIs. # # -l prints only the leaf changes, leaving out explanations of why. # abidiff -l ci/libcalamares.so.$BASE_VERSION ci/libcalamares.so.current calamares-calamares-2d126ae/ci/astylerc000066400000000000000000000005071430147706700201550ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2014 Aurélien Gâteau # 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-calamares-2d126ae/ci/calamaresstyle000077500000000000000000000046031430147706700213440ustar00rootroot00000000000000#!/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" || { echo "! No .clang-format support files in $TOPDIR" ; exit 1 ; } AS=$( which astyle ) # Allow specifying CF_VERSIONS outside already CF_VERSIONS="$CF_VERSIONS clang-format13 clang-format-13 clang-format-13.0.1 clang-format12 clang-format-12 clang-format" for _cf in $CF_VERSIONS do # Not an error if this particular clang-format isn't found CF=$( which $_cf 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 12 handles lambdas nicely, so use that. # Version 13 is also ok. # Version 14 behaves differently with short-functions-in-class, # spreading functions out that 13 keeps on one line. To avoid # ping-pong commits, forbid 14. format_version=`"$CF" --version | tr -dc '[^.0-9]' | cut -d . -f 1` case "$format_version" in 12|13 ) : ;; * ) echo "! Clang-format version '$format_version' unsupported, versions 12 or 13 are ok." exit 1 ;; esac ### FILE PROCESSING # # set -e any_dirs=no 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 calamares-calamares-2d126ae/ci/configvalidator.py000077500000000000000000000076761430147706700221520ustar00rootroot00000000000000#! /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-calamares-2d126ae/ci/coverity-model.c000066400000000000000000000004171430147706700215120ustar00rootroot00000000000000/* 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-calamares-2d126ae/ci/libcalamares/000077500000000000000000000000001430147706700210215ustar00rootroot00000000000000calamares-calamares-2d126ae/ci/libcalamares/__init__.py000066400000000000000000000004601430147706700231320ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Stubs for part of the Python API from libcalamares # (although the **actual** API is presented through # Boost::Python, not as a bare C-extension) so that # pylint doesn't complain about libcalamares internals. VERSION_SHORT="1.0" calamares-calamares-2d126ae/ci/libcalamares/globalstorage.py000066400000000000000000000010411430147706700242140ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Stubs for part of the Python API from libcalamares # (although the **actual** API is presented through # Boost::Python, not as a bare C-extension) so that # pylint doesn't complain about libcalamares internals. def count(): return 1 def keys(): return [] def contains(_): return True def value(key): if key in ("branding",): return dict() if key in ("partitions",): return list() return "" def insert(key, value): pass def remove(_): pass calamares-calamares-2d126ae/ci/libcalamares/job.py000066400000000000000000000006121430147706700221440ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Stubs for part of the Python API from libcalamares # (although the **actual** API is presented through # Boost::Python, not as a bare C-extension) so that # pylint doesn't complain about libcalamares internals. configuration = dict() def setprogress(_): pass def pretty_name(): return "" def working_path(): return "" calamares-calamares-2d126ae/ci/libcalamares/utils.py000066400000000000000000000011721430147706700225340ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Stubs for part of the Python API from libcalamares # (although the **actual** API is presented through # Boost::Python, not as a bare C-extension) so that # pylint doesn't complain about libcalamares internals. def debug(_): pass def warning(_): pass def error(_): pass def gettext_path(): pass def gettext_languages(): pass def target_env_call(_): return 0 def check_target_env_call(_): pass def target_env_process_output(cmd, *args): return 0 def host_env_process_output(cmd, *args): return 0 def mount(device, mountpoint, fstype, options): return 0 calamares-calamares-2d126ae/ci/txcheck.sh000077500000000000000000000106641430147706700204010ustar00rootroot00000000000000#! /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 -d $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 } # 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 # Now group translated key-names (Name, Icon, Description, ..) by sorted # language key rather than random-ish language-key order (which shuffles # entries around). # # First, the non-translated lines grep -v '\[.*\]=' calamares.desktop > calamares.desktop.new # The translated lines: # - replace (the first) [] by | so we have a consistent field separator # - sort based on field 2, then 1 (language code, then reversed key-name) # - replace the first | by [, the first (remaining) | by ] # Effectively this puts the fields in this order: Name, Icon, Generic Name, # Comment -- within each language key. This keeps churn down since the # language codes and key-names are constant. grep '\[.*\]=' calamares.desktop | sed -e 's/\[/|/' -e 's/\]/|/' | sort -t '|' -k 2,2 -k 1,1r | sed -e 's/|/\[/' | sed -e 's/|/\]/' >> calamares.desktop.new mv calamares.desktop.new calamares.desktop git add --verbose calamares.desktop git commit "$AUTHOR" --message="i18n: [desktop] $BOILERPLATE" | true # 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 -- # sed either wants -i'' (GNU sed) or -i '' (BSD sed) to # replace in a file, with no backup extension. Define # a `reinplace` command to deal with the difference. if test FreeBSD = `uname` ; then reinplace() { sed -i '' "$@" } else reinplace() { sed -i'' "$@" } fi # Go through the Python modules; those with a lang/ subdir have their # own complete gettext-based setup. for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do 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 reinplace '/^"Content-Type/s/CHARSET/UTF-8/' $POFILE # msgfmt -o ${POFILE%.po}.mo $POFILE done git add --verbose ${MODULE_DIR}/lang/* git commit "$AUTHOR" --message="i18n: [${MODULE_NAME}] $BOILERPLATE" | true fi fi done for POFILE in $(find lang -name "python.po") ; do reinplace '/^"Content-Type/s/CHARSET/UTF-8/' $POFILE # msgfmt -o ${POFILE%.po}.mo $POFILE done git add --verbose lang/python* git commit "$AUTHOR" --message="i18n: [python] $BOILERPLATE" | true calamares-calamares-2d126ae/ci/txpush.sh000077500000000000000000000115551430147706700203030ustar00rootroot00000000000000#!/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 | sort) ; do FILES=$(find "$MODULE_DIR" -name "*.py" -a -type f | sort) 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-calamares-2d126ae/ci/txreduce.py000077500000000000000000000027411430147706700206060ustar00rootroot00000000000000#! /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-calamares-2d126ae/ci/txstats.py000077500000000000000000000222741430147706700205000ustar00rootroot00000000000000#! /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 os 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. """ # 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: 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) # Audit the languages that are in TX, mapped to git for lang_name in languages: if not os.path.exists("lang/calamares_{}.ts".format(lang_name)): print("# !! Missing translation file for {}".format(lang_name)) if not os.path.isdir("lang/python/{}/LC_MESSAGES".format(lang_name)): print("# !! Missing Python translation file for {}".format(lang_name)) # Audit the files that are in git, mapped to TX special_cases = ("python.pot", "python", "CMakeLists.txt", "txload.cpp", "calamares_i18n.qrc.in") for file_name in os.listdir("lang"): if file_name in special_cases: continue elif file_name.startswith("calamares_") and file_name.endswith(".ts"): key = file_name[10:-3] if not key in languages and not key == "en": print("# !! Translation file for {} not in TX".format(key)) elif file_name.startswith("tz_") and file_name.endswith(".ts"): key = file_name[3:-3] if not key in languages and not key == "en": print("# !! Translation file for TZ {} not in TX".format(key)) elif file_name.startswith("kb_") and file_name.endswith(".ts"): key = file_name[3:-3] if not key in languages and not key == "en": print("# !! Translation file for KB {} not in TX".format(key)) else: print("# !! Weird translation file {} not in TX".format(file_name)) # Audit the python translation files that are in git, mapped to TX for file_name in os.listdir("lang/python"): if file_name not in languages: print("# !! Translation file for Python {} not in TX".format(file_name)) return 0 def main(): 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-calamares-2d126ae/ci/umount.sh000077500000000000000000000020651430147706700202730ustar00rootroot00000000000000#! /bin/sh ### LICENSE # === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2022 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # # This file is Free Software: you can redistribute it and/or modify # it under the terms of the 2-clause BSD License. # ### END LICENSE # # This is an "unmount" script that tries to unmount whatever # filesystems Calamares might have left mounted (e.g. because of # a crash, or ^C'ing the installer, or ..). # # Swap may have become enabled on the disks just used; assume # we're in a live session where we don't want any. sudo swapoff -a # In Arch-based systems, there may be a gpg-agent started by # pacman during installation, which lives in the chroot. Kill # them all; again assume we're in a live session where it doesn't matter. sudo pkill gpg-agent # Unmount the filesystems in *reverse* order, since we need to ditch # e.g. /run/udev before /run before the root filesystem. sudo umount $( LC_ALL=C mount | awk '/calamares-root/{print $3}' | LC_ALL=C sort -r ) calamares-calamares-2d126ae/cmake_uninstall.cmake.in000066400000000000000000000020231430147706700225640ustar00rootroot00000000000000# 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-calamares-2d126ae/com.github.calamares.calamares.policy000066400000000000000000000016511430147706700251500ustar00rootroot00000000000000 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-calamares-2d126ae/data/000077500000000000000000000000001430147706700167205ustar00rootroot00000000000000calamares-calamares-2d126ae/data/completion/000077500000000000000000000000001430147706700210715ustar00rootroot00000000000000calamares-calamares-2d126ae/data/completion/bash/000077500000000000000000000000001430147706700220065ustar00rootroot00000000000000calamares-calamares-2d126ae/data/completion/bash/calamares000066400000000000000000000013251430147706700236620ustar00rootroot00000000000000# === 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-calamares-2d126ae/data/config-appimage/000077500000000000000000000000001430147706700217465ustar00rootroot00000000000000calamares-calamares-2d126ae/data/config-appimage/branding/000077500000000000000000000000001430147706700235325ustar00rootroot00000000000000calamares-calamares-2d126ae/data/config-appimage/branding/default/000077500000000000000000000000001430147706700251565ustar00rootroot00000000000000calamares-calamares-2d126ae/data/config-appimage/branding/default/squid.png000066400000000000000000000250541430147706700270170ustar00rootroot00000000000000‰PNG  IHDR\r¨f pHYsX•X•Ùm7ÓtEXtSoftwarewww.inkscape.org›î< IDATxœíy”Åç¿‘™uô}HÝj­D .$!ÀæF3Ø,mÀÌîØ»ïÍzæÍó[{y¶wÞ®Ç;ûÖ~óÌ0ãg<#Æf%ŒeaÌ! ¨….кúT«:3ö¬Èʪʬ®#³*߇W´**3"**¾ßüEdd&C Øs¾Â8þ±e„à ®Ú†Gœ.Grº‚ Ü A2‚0d`È"ÀD€! ˆC@† €  A2‚0d`È"ÀD€! ˆC@† €  A2‚0d`È"ÀD€! ˆC@† €  A2‚0d`È"ÀD€! ˆC@† €  A2‚0d`È"À(õ®á<}›ÐzÍçÊÚgd׿!qðe‡jD¸2€™¿7c¼ƒs{_E[(íP­7@CÂ’ UÂxJ®w5! ,a&Rd~† €°†k4 ®âGèW%Jb"%“ øúE‰’`&É|ýš„)ÜðofH¤á€¯ _’0…åüå0ZÂdJÂy2_@¿"aIVüyé ˜L“ øß.ºtûÌÛ ÜYÝþåR¬¼JÊù͸ýöþã?Ý$•J¥ô.ñìmÛ¿TKÞLj±=ªio³v)¿R ¿ãKÈÿñ#‘:;;ÑÔÔ„óçÏcddÉdRß.¿#F"ôõ-±ÌhhCCCé===hoo/HÄððpÉuD"X²¤¼ò—-[†P(”“666†Ó§OëšÐÛÛ[ßÑ£GsÞ—SþdZ ¢»»¦Û§R)ŒallL7@û®Æ¶_¼x1¢Ñ¨e¹fœ9sÀhNšñ÷ïììD[[8çzÌÊ*¾4ÁܹsqÝu×á‚ .È9²%“IìÝ»/¿ü2FFF :âE‹pÏ=÷XæûöÛocÇŽéëׯÇúõë ÒŸþyìÚµ«äzWRþ–-[ ÌçØ±cøÉO~¢¿_¹r%n»í¶‚üy䑊ËskÖ¬ÁÆ-÷Î9±{÷nô÷÷#Î]f|ë­·¢§§§hùüú׿ðYá˲Œ 6àŠ+®@GGGÎögÏžE?Þzë-\º]‹\‚l¾3Ñ ®¿þzlÚ´ ’T8N …BX»v-V®\‰;wâwÞÉ9jÌÔ Ëí¤åRjù3…¹óçχ,˺Ð-Zd¹­Ñ K-ÿ¦§RE·Ë‡1†îînÜzë­X»v-¶nÝŠK·Ÿ/+3ŒíÐÒÒ‚{î¹óçÏ7ݶ»»ŸúÔ§°jÕ*<ù䓦€ á›YœK·g;ÂæÍ›qíµ×šŠßH8ÆwÜ«¯¾:'}&twwC–[kWùŠ¢äaáÂ…5-¿sæÌÁ½÷Þ[ÖœÃL„B!|îsŸ³¿‘ÞÞ^Üwß}˜;w.gæ|¼€o @pÉ%—àŠ+®(kÎsgºg€,˘={vÙu› Ñ í,_ˆ¾££---%íS«ïßÝÝË/¿¼ê|›6m*+:kjjÂí·ßn[ù^Ä „F±yóæ²öݵk^}õUý}$)7š!Žvcwù"ì/õèowùããã.0YÁºuëfÌ#N#•J™¾TUÇK’T¶™LMMá‰'žÜ!€¯æV­Z…¦¦&ÓÏ^ýu¼õÖ[èììÄæÍ›ÑÖÖ†þþ~<ÿüó9ÛÍ™3Œ1Ó<Œ85`wù½½½`Œ•lv—¿{÷n¼øâ‹X¸p!¾øÅ/ ËfÏžÖÖVŒ[æñØcáÈ‘#EË™7o ÒÓé4{ì1Äb1\|ñŸꪫôy‘Ç###?à3¸ì²ËLÓðÌ3ÏÐfOŸ> 6à¹çž+ØÖ¬c«ªZÐqí6€bá5åG£QÌ™3§ªñ¿ßÿøñã8~ü8/^\ðY[[[Q(…ÖÖVÓô“'OêæqòäI¼ÿþû¸ûî»ñì³ÏâØ±c?àƒ!€NKK æÌ™cº1Ä´óãÏ>û¬iXjÖ±c±XIÛÙå¯X±¢ä1»“ßbbÂ4½±±±ì¼ò™žž6MïêêBss³þþرcøÁ~€wÞy'ðâ|`‚ ˜¦ŽŽâÔ©S%çcֱϞ=[FMýT‹å_tÑE%…õN•oÜÇ +ñ–ƒÕB«h4Šx §ÄãñªËó ¾1«I)³Îk…$Ièîî.H?tèéövEßoú3GË7‹áä÷WÅò7:¾øZ€ÞÞ^ôõõ¼Œ‘Ãùóç-ë¶¶6|éK_ÂÆK6 à›9«0rrr²ä<ºººLÏK=zÉd²`©mOO8P^EMøéOêhù¥€å˲ŒY³fáºë®3 ššÂ¹sçŠæñÉO~Ò4ýÑGÕ—1sαk×.Üy§y\/Ë2n¾ùf,_¾¿üå/166è@ßDVáåÔÔTÉyXц‡‡122Ròö•âÇò¯¹æ|ík_êU«L?ß¿¿~*¯ZÞ{ï=ìÙ³§è6‹/ƃ>ˆ /¼@p |cápØ4=™L–œ‡Y‡G<·¼øÇN‚V~:Æë¯¿^UF8çØ±cÞ{ï½¢Û544೟ý,.ºè"Á6ß@"‘0M/çê2³ÇÑ××g:vloo7=÷\)v–ŸJ¥LÏr˜Íè;Q~)¼øâ‹eÍÑ”B:ƶmÛ°sç΢æ/Iî¼óNý Æ š€o Àªc—sŠÉL]]]¸çž{pñÅ—¼O9ÌtR¥åK’”s)0 Ï7;’;QþL¼ð xùåÒžñ‰OÔ¬|ÁÀÀ€é2íuëÖY.2ª„ÖÖV|á _@{{;î¾ûnlß¾û÷ï ÝŒÄìš øÄ¨ßñ… Ü©‰ëÍ7ßÄ–-[ >ïîîÆý÷ß}ûö!cõêÕˆD"øô§?d2‰˜Çàà ¶nݪ¿¿é¦› &$IBWWWÑåÆXºt©ég©T ǯºüjq²ü½{÷â†n(8“°|ùr´´´Ì¸°Ø¥Ç“““8sæ ššštñÚŸ»ï¾ûöíÃÉ“'±dÉS£J$¦k‚‚/ @°gÏ\{íµhkk+ølÖ¬Y¸æškrÒ$IÂ]wÝ…'žxÂ4 ÌŸ1·ZoÞÓÓSÔÖ¬Yƒ5kÖ˜~666†‡~¸êò­¸è¸áô<ð#Ë#u8v¬|@ûŽ'Nœ(¸"Q’$¬Y³fƳ7Ýt“ågÀ/~ñ Ü{ï½<1ưråJ¬\¹²èþ¥Do~ÅósF’É$vìØQÖŒ®,˦QPØá­N¡U;Pl^-ÊŸ5k–ãå‹¡V>ëÖ­«z}~2™´œ*F*•ÂK/½TUÙ^Ç7 &9‚;w–lñxï¾û®égvgÂjÿZ•oev–¿oß>ÓI¸ŽŽŽ¢· /Î9ž~úi¼öÚkeíó«_ýJÿNA½&À7dÄþþ~lÛ¶ÍòúsÁÇŒÿøÇ–«‡‡‡1p'ô×ää¤é¥«===UÅŠE¥–_ V÷ Æs[d<·EÆï¶ÈU•?99‰Ã‡›~VÊmÁJá7¿ù ¶nÝ:ãÅE“““øùÏ®_7Tñ>›0²oß>>|kÖ¬A__ºººÐÐЀÉÉIœ>}ï¾û®~!J©!¸HË¿÷@©÷ѳŽò«¹Æ}¦!ËK3+¿”%×úE8FV¬XQõMAÄDð|€þð‡X±bV­Z…Ù³g£¥¥ñxƒƒƒ8xð vïÞM÷ÈP“‹£÷Ü…¯0ެEY»ÖvÛõøªz•_Ê$`1~·%»ˆê†§ÒE¶¬/%?&Íb?·Á\µ ̼euøj`Ä­?,á,¥þîbXt|;ìÿ+É/²ðR,úæ³[ÌÇÙoïÄGxræ´ÚïSÎé®C?ú œúí?ç¤ýn‹l2Š)ü©W}û¼˜Н?†YWþ±y]'F±÷¡Í˜8²;7Q™£Q¶žä%a—Žo#70“ø yímXð—ÛÀB‘Ö¬2j%~Pš;pÉCÏ y麂rci†©4ÝÚËÈ¢ñ ¼`µ¿@˜@ÓÒ³ñ4Ã4™@Õ8@9â¸Ùê!~™ ˆücdUC`3•ˆ_àF¨§øF0 T€T#~›LÀ â¨d•B`#Íkn­Jüz>koÃü¯m“C3oìvŠ¿ïë[«¿@iî@ûêëMëC&Pd62ü«¿ÃàϾaK^-— ¾þ„+"A¥GþÙWÞaKù'ÿ>~òûõÄÈʆ Àf†v|Ï6pÕp a¿‘'ÿNA}ò‹« 12’!p¿™€WįŸ (2‡ð‹ xMü"1–&(2ñº xNü<·Nd3Cà0^5¢âç…¸BüpÄÒ (@ ðª XŠ??ÝuâÏu¨XZ›$ !¨^3£¦¼&þBÈÌ!¨!^3 xˆíñ‹|È !¨1^2?‰_@& @ð‚ ÔKüŒ9'~AœL@‡  NxÁê!~³*ès¦u*Oü"9žddõÄÕ&`*~¥.â·®Sa%Í"ý³¼÷122€zãj0 ‰ÿß\/~3r"ˆ<‚ ¸·›@-Å/ÎàÛ)~«tãp ¨sd.Á­&Pkñµ>‰€š€‹p› Eü"Ÿ¤ªÝl4H¸ ·˜S‚%~A’Ë|ý`¯2´ã{@(Š®;¿Uu^ÍkoC×—½ßÂÿðM„Z«¿½àñ ’@ˆÈ…Ÿù Š\ÊÐöoÛ TrŸÂ Š_lŸâ q÷> Ñ6È\ŒÃzàUñ ‚`d.Ç«&àuñ ündÀk&àñ üldÁ+&à7ñ Rœ!¡–°¡Ç ðn7¿Š_Týgdí&àwñ‹|ü x·™@PÄ/ð“ x·˜@Yâ7¹›°×Ä/HúÄÈ–Û;(~±}šPÅ¥‡Z—V‹°“r#¯‰¿XaE-Ä/póœ@@(Õ¼(þr°šƒpJü‚4ÏD.ƒ @ÌdA¿ågâˆ_RÝg40¬æ‚,~ƒøšƒH©$@.÷ 8E$?¼øs.S._üåÎA¸)   ˆ‡ÄÒŒÄoxS«ú¨w$@`†¶±4ËëÝ$þÚÔÇ &@C€€•9å¬Hüµ­ÊµW½  –rM€Ä_›úˆätM€ € L@%ñר>ùÉõ22B',Mrfɉ߱úXåSá‘CHšåüu«$~§Å/ÒkmdDŠ´„T0–s‚\Ç âç¦o´ïãVñ T$­«i+d„)2Z)¯zEüÌøÆð·‹_ÀÓ`¨>ÉK$4L€Ä_~}Š–;s>Ö(QaV‹UHü•åSF}52bF$4™˜‰¿²|Ê­OfG´J@”„0E ,¶#ñϧñgÚ®W2¢d€Fƒ ˜}nšN⯨>(<ÊdSdDYè& ¦›nO⯨>E”i« eÃ4ÊÙb’ø‹çcc}ŒÃ[L€ €¨˜™#lуHü3¤W.~ã¦U›QQ™#,gß[Ýt ñWQŸb‹ƒ«2º!Q5I“¥Õƒ1+é¡$~+ñÓY‘íŠB@ØBDâ’<·+Û%4IéeCCÂ6"²v_]BËÉ+ âgÌyñ6–Ž„ZžÔÜrÛîRòªÁ‘ß ÛM"ÂvB’˜( ·Ý¶{¦¼ÊJw±øŠ‡Ð qÄgˆ¼r#byyUüE„ƒ(’všÐ ¯ˆ¿Xáeñd„ÃÈL3|AxIüVéfŸÙ¹t€ð2¢RÖü þró)·N²õG¶ž  j‚”1ü[ŒàCñ—[Ÿ2®¬2¢fHL;;`Ù¿IüV˜ßÕȈš"L  ã‘ø­pô&ádDÍ‘‘9$Ñ·=vÛîZÕ‹  ꃶtXÖû¸¿—ö–[Éz)°­uƒË€ÌHüÕäS dD]Éš€Åç$~G! êŽTû"ËüIü–®!"²¸Ï ‰¿&®",¡àŽÃ¿ý®#$Î ø €p%! 3>…È é°ÓƒCû/%•óøT£ãå¾#•N!™HjÅâ¢f!+Ëóí’ùK˜ÅRI·.2æc~ŒµÊ_ÿ<Ò8%œ(«° `£cçj²à€ *%•J!•Jêï­Dn¥r+±¹-½Ð×£( cH%“Ö¹LÌ^?@s„GeJ(dþ¡ËÄìñd„‡e¡p87Ñebö’ø2ÂcH’¤™@‘;g¸Män?(ÉTºÞu ˆòaRÎÄ áóÍIü¦(#£cõ®ATç©T œg®&tXœ~?(5¸çA8c€¢ÈH¥R™”¾¬‰°ôtë²Ê˧Üüë…âþ*Dƒ¬(H§Óz$ %kGßüþm•^¼ó»s”›îFÏÔ” ,``%Y7Ƙ©Â­Ò‹æ]f^•”QOh@ø1ȲŸWò£`«ôJÊp4 |…$š@¹!y%!?à5ékЀ𥠬ð{ÈŸ-"|‰,Ëtš¯îeû"ˆ"H²„tº´…nZxo>®/'ÝkP@øšR" ù4@ø‰IP¹j}v @cþ|è,˜$œƒ«ª!Ñ¿ |J…Ö1hÏÜRÕÌÿ-í-‚L²e8àh@±p§„ÅB~ ûЀ$b"__, °ß ˆÀÂÀ´#|ÿAC‚È3¿‡ýFh!A »¸ÇO‹|J¡þs“ÃÀáWÁ޾ ~ö°‘c@b Hņv ±hí®_´è] „¢õ­³: |ØvìM`è01 LénÚç‚w.z×K®æ]\ï×Mû•ë!•JáÌéÓ8ùñG8}ú¦¦¦Å1==EQGÐÖÖ†öŽÌ7 z{ÑÐÐ`[ý+½ûÞÚ;ç`‡^ëÿpø@-ãÆ¤Ñð5w€oøS`öçêèS`{ž{ã1àÌ¡²vå³kÿ|Ã=@´Õ¡ úƒ±ÑQì؃÷D"/y?Æ$ô.\„•—\‚Þ…‹ê}ÔÜØ‡¯ƒ=ó·À™ƒUfÄ€Ko‡zëßM³ì©œ_à*Ø[ÛÀžû{`ú\uYEš«ï¿ú>@ ϼC€˜œœÄk¯üG¿o:‘X³fwáêM×`î¼ù6Õ®4jgÉi°ßÛý„½ùF[‘¾é¯ÀÖßeo¾^eø(¤'ÿ8ñ޽ùÎ^‚ÔgþlÞÊÀ“Í8°^{å÷eñg‚1†¾+qÕÕ›²z ’ͰwöîwÞÆ>†ô؃`ƒ‡+"¶ön„þè[“+Ãí°ÿéñÿÄÆÉŸË!Œ]÷—h¹æÏkœ«xåå—±ï½ÇÊè蜅[o»---Ž•!pÜØÐa°Ÿ~ìüY'‹$—] ésÿHÁ{æ)øwíȯ¦fÞ¸ª‚Ưús4ÞôµÀ™€ªªøí¯wâø±£Ž—ÕÔÔŒOmùc´wt8Z޳§ÇOƒmýJMġûÀ·ýPåxÌk°cýv|Ãyñçh}õG˜záçËrœs¼ôÂó5?LNNàߟÚóçÏ;ZŽüàú‹‡É9•€ò¯÷ q${+¤¡RU°¥—×´ÜzÁ†Ž@þ—/‰éš–9ѱÎ>Dæ,®i¹õb÷î71°çÝš–™H&pæô),ïës,Ú’À'^Òsÿ8¹Ï‘JÏDø•G:¾Ç‘ï媗ªBúåbÎ%LQÓh}æ!Œž:q¢ÞÕЙ7>¡°½sÜV’—nAÄ%ÀÃMºñ›PÙŽÇôjƈNª§1­ã"ÛiE:ô£W¶kG7žÉG¼D鯴ÜÇNÓ*% @yg{UyØE¬g.ºêâ;2½½®·³ÞÆÚ–Í*1 MM®3D"m?{L_ÑXo–]°vëÕöO_| Ô6{ÔJ9ßw›/ÅÉ+îuÍpk|µöL†JÄÏ =˜szzÚuÃp8ŒåõÕ»€¦æf,^ºÔö|í¿' SÚx¿í-5ÔˆñK>£u<®MB1®ÏQC<ŽA˜ƒ¶8G¦g¶b9ÛéÕت?V޳ÜTqŻíÌ;#Ýwc-š²(ñî>LÏ¿<ó½˜ÞÞÚ¬ŸhÁLëí=™¿\åˆMÇ ¦U{ûc•¯‹W^Z³‡tcÍÚË 1Éöï'qØÿ_rõ§¡Î[Yã&Êetבnš Ð×N1® I™VO1çâ/Tè½3“®o§ïp®fò1¦‹2²/±¯1;Û9~ã_Qça “0¼ñ?RæÈnhGÑÎ"Íøä´ ·¥ÊUÄã1¨\u WVö_csÖ­ßPÛvÍ£«»,_îÈ÷s&†dâ··n+c=+1¹òЇý"LeB±\ã³éȳŠ6 ­IDAT ï­Ã~±“a>¼y6â×ÿWÛó-•±5Šd×…° ûó†^i&m 3DàˆÇ¨öY{vÒwñJtuw×¥lEQ°éºO:x[p‡Pg-A|ó·LÎ 9Kª¥C7þwˆÑ_ůßÕw ¹þ³ŽåoÅô‚õ8wÙ½°Süâ¬ç* ÷˜c Ÿ¼ñf477׸\àêk®C[[›ceÈ÷}åÏr*sµëBðH”P#-8}Û÷‘néÑ:/_ü,»¡ëÅ/H/Ùið¤á£Ž—ñ®‹pö–ÿ®D 3 剿prÚXÀÐ\\å`’„œÄ: …0oÁ|xøí&³5àò+7âB‡'!åû¿òàCN Î_µ¡ò‘WýS-=8sÛÿBªc‘‰øEGƒMâ×§ë.~QßÔE7‚M@>íìÃXbóVãÌ-ß4™ˆ?Û–Õˆ_o;¦Í·È²;ÎvD£Q,X¸8¤O.„áÊW£ïbççÑäûŒ‰î> 7ô¢éÔnH,^‰Í¹g6ÿO¤[çOü&!¹t&bI4ž€­÷yÆpî’Ï`øº¿58.~ýtk·¬hhhÀ’eË0xö,&'í½9‡–#®¿éf,^ºÌö¼Í`¯ö¿]“V*™Äð‰Cèêÿg´{É–ª†›1ºþK8¿âv€Æü@^Gó¹ø ¨ªŠ‰C¯£ó•ÿ‹†¡ƒ¶ä™l[€á+¿Šéë²ß›gÛÌAñgÞK’ä¹M÷>¼ýV?Éê 10,½àB¬ßp¢ µ›<¯™š œ=;ˆÈà~ÌÚûÿÐüq?ÄÒrHGÚ0±üœ»ôOnè€X`tñ TUÅÈð "~‹ÎƒO!:ü~Eù$[æáܪ»1qáÍà²R7ñÛÕM&SSSØÿÞÞ?tñ EÇÀлp.]½³»º¨á å¿Ú¿»¦S­©dƒCƒPÓ*BÓCh=º M'w#:xRÚÚIÓ³0ݳ Só/Ãä’k%¢w>!œsŒ ŸFtøZþgßCtä0À­WÜ%Úz1=o &_‡xÏ%™F4ˆºŽâ7në6Ò©Žý}tgNŸÂÔԔ嶊¬ «»ó,À’%ËÐTã³ FØ+oÔÖ͆††æªÖi8 !‰ðÄ„ÆOBNÆÀÒ ¨ ­HGÚnšdËm¸‰¼I"Fø¹cÕÌþÙÞW þlçö¦øœsŒŽŒ`:ÓçEäÔBçOAŽŸƒ2=<Ô€TSm  †›3¢Õò`ŒiZµ¿ˆ¾f<ã’+~½¹| ~3&&&0=5…x<†X,E–¡„BhmmCKk«k¾G] R©††¡¦9㙎&:™AÀ™NE⯠Î9FÇFŸŽéÑ2íœm'ˆ/Iâ¶Þ¨¬‚³gÏÆðð0¸šÖ:´N&Í3âçñbI.ËŸºQB|@D˜ª¡ÃŠ4ž“¦%©z>Ùtn¿!±¼²Ü±`ŠƀΎŒaο¡›®î¬º‘òÌ~ <³–TØ><#þl{Š2…§æ´ÏæŸû›˜¤ÚÕ íìUì½+p™ÈŠ‚ÎÎNŒŒŒ‚gîv*Ž$<ïÈ/z7ùaHÏþ[“­f Ù±¼è‘úPäèG~ž—®°òÒ õý=@[G0Æ0=Ó£ªìú}q´†þÝTaÂ\kGfT&ThG~°lé¿´¶ í$¼\KÌæ“4C»z­½†½7©¤Jªò¬°3½LëoÙ°]Üt2'=Óó´ƒD^Ø/ŽlâŠ=-óž‹2YN~,[.ao=Ö+ÛÚÚÁØ9Ħc08\6烃!ì϶¢¶ 7„ý9í#L¡°ô¸¡MYVå0þ— ¼ÙÎ^ÂçT”PY?:é &c~c:`?óÇüÙm³Û"!þ¼1'ËßÈùëå±hkk¢ÑhöÈÏôÖAΘñ3¦·qi ­PØž@N›š¦ÚÕëíìl¿#P¥È!íííçjv©x²µd\Oφø\ï²Ù1¿Ø6Âfòb\¿8`‰ü²a¿!åæá–6«”–¶Và0¢Èš œÏŒË˜¾hP„˜"×Ã~C¸jöçž Žüy!lÁPÀãa¿-Í-ÃôÔ´Þ>rÃ~½Ý C/m«‚°?÷71„ý@N;Žñö»W Œ(Š‚¶öv0YÒÇ£@Þp “ ‡¡Fñç…ýÆÓzEÃ~cH쳰ߊ¦¦f446êGì¢a¿hQ“°?÷7)ög)ìw u= `…¬(hmmÃøøx&mvúºÜYjmÛlX˲á­ög;¸˜¹æÈOóæl¹465Lè)C[ªÈC1¶™ñ7B×ç iÙ!¶Íö»‡º­˜ E‘ÑÒÚ‚‰ñq¢Ã ¡gŽöç§³3ÆsÖ0Œùý[¬9Ð:e^9Ïo ` ˆMOgÛ¡èZ qä×ÞÃÐN¹G~ÑÖºÌ i™}À´³qÕ@>!YAsK+¦&&ô9 ¦„.Æü†jÉc~ý4˜¿Çü3Ñm€11˜;æ×çŒgfDÛ”2æÏ,8`yí¯Ý†+‡FEAcs3&''²a¥!ìÏÎØgÏ_SØ_áhœ1LǦsÂþì¢ýöû׌(ŠŒ¦¦&í «‚°ßºB| û+# àˆÇbya¿˜\ÕÞSØï\=0¢È 1=5B|}jñPØ_‘°v¯¿x ¥°ßvBá0À€x<‘Q9…ý~ÄuëfBQD£Qˆù@ý(/âS:Ïo¡P‘H$g>€Îóû Åö›GÖE–Á"Q-D…¡3ªÜ` bøÊ a¿1éEQHHQΑL&³Ã-ãø¢­¹!ìÏmÔÎ.ÅSC#’,#‰hÐÅ güò¬Ã~á)aŽ Œ!™LÖdg÷`’fxÌ:µ³kQÆÎ×»U¡ª*ÒéTæ˜ñ7†©™4=ŒÍvJ–ˆÐÚ:óP f8ªë Âôjg—£œ¬w‚¨ž›$Â>È"ÀD€! ˆC@æÿï;ë“uOIEND®B`‚calamares-calamares-2d126ae/data/config-appimage/branding/default/squid.png.license000066400000000000000000000001421430147706700304270ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/config-appimage/modules/000077500000000000000000000000001430147706700234165ustar00rootroot00000000000000calamares-calamares-2d126ae/data/config-appimage/modules/displaymanager.conf000066400000000000000000000021331430147706700272640ustar00rootroot00000000000000# 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-calamares-2d126ae/data/config-appimage/modules/finished.conf000066400000000000000000000026651430147706700260670ustar00rootroot00000000000000# 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-calamares-2d126ae/data/config-appimage/modules/keyboard.conf000066400000000000000000000014231430147706700260650ustar00rootroot00000000000000# 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-calamares-2d126ae/data/config-appimage/modules/locale.conf000066400000000000000000000020721430147706700255250ustar00rootroot00000000000000# 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-calamares-2d126ae/data/config-appimage/modules/users.conf000066400000000000000000000043531430147706700254330ustar00rootroot00000000000000# 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-calamares-2d126ae/data/config-appimage/modules/welcome.conf000066400000000000000000000034011430147706700257160ustar00rootroot00000000000000# 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-calamares-2d126ae/data/config-appimage/settings.conf000066400000000000000000000013321430147706700244540ustar00rootroot00000000000000# 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-calamares-2d126ae/data/example-root/000077500000000000000000000000001430147706700213345ustar00rootroot00000000000000calamares-calamares-2d126ae/data/example-root/README.md000066400000000000000000000007601430147706700226160ustar00rootroot00000000000000# 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-calamares-2d126ae/data/example-root/etc/000077500000000000000000000000001430147706700221075ustar00rootroot00000000000000calamares-calamares-2d126ae/data/example-root/etc/bash.bashrc000066400000000000000000000002001430147706700242000ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Global .profile -- add /sbin_1 PATH=$PATH:/sbin_1:/xbin calamares-calamares-2d126ae/data/example-root/etc/group000066400000000000000000000001201430147706700231570ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # root:x:0: calamares-calamares-2d126ae/data/example-root/etc/issue000066400000000000000000000001521430147706700231600ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # This is an example /etc/issue file. calamares-calamares-2d126ae/data/example-root/etc/locale.gen000066400000000000000000000005651430147706700240470ustar00rootroot00000000000000# 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-calamares-2d126ae/data/example-root/etc/profile000066400000000000000000000002001430147706700234620ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Global .profile -- add /sbin_1 PATH=$PATH:/sbin_1:/xbin calamares-calamares-2d126ae/data/example-root/etc/sudoers.d/000077500000000000000000000000001430147706700240155ustar00rootroot00000000000000calamares-calamares-2d126ae/data/example-root/etc/sudoers.d/10-installer000066400000000000000000000000001430147706700261410ustar00rootroot00000000000000calamares-calamares-2d126ae/data/example-root/usr/000077500000000000000000000000001430147706700221455ustar00rootroot00000000000000calamares-calamares-2d126ae/data/example-root/usr/share/000077500000000000000000000000001430147706700232475ustar00rootroot00000000000000calamares-calamares-2d126ae/data/example-root/usr/share/zoneinfo/000077500000000000000000000000001430147706700250765ustar00rootroot00000000000000calamares-calamares-2d126ae/data/example-root/usr/share/zoneinfo/.dummy000066400000000000000000000000001430147706700262200ustar00rootroot00000000000000calamares-calamares-2d126ae/data/example-root/usr/share/zoneinfo/America/000077500000000000000000000000001430147706700264375ustar00rootroot00000000000000calamares-calamares-2d126ae/data/example-root/usr/share/zoneinfo/America/New_York000066400000000000000000000067311430147706700301260ustar00rootroot00000000000000TZif2쀞¦pŸºë` †p¡šÍ`¢eâp£ƒéà¤j®p¥5§`¦SÊð§‰`¨3¬ð¨þ¥àªŽðªÞ‡à«ópð¬¾ià­ÓRð®žK௳4ð°~-౜Qp²gJ`³|3p´G,`µ\p¶'`·;÷p¸ð`¹Ùp¹æÒ`»õð»Æ´`¼ä×ð½¯Ðà¾Ä¹ð¿²àÀ¤›ðÁo”à„}ðÃOvàÄd_ðÅ/XàÆM|pÇ:àÈ-^pÈøW`Ê @pÊØ9`ˈðpÒ#ôpÒ`ûàÓuäðÔ@ÝàÕUÆðÖ ¿à×5¨ðØ¡àÙŠðÙàƒàÚþ§pÛÀeàÜÞ‰pÝ©‚`Þ¾kp߉d`àžMpáiF`â~/pãI(`ä^påW.àæG-ðç7àè'ðéòàêñðêöÔàëæÓðìÖ¶àíÆµðî¿Ó`ï¯ÒpðŸµ`ñ´pò—`óo–pô_y`õOxpö?[`÷/Zpø(wàùÐp?›bà@o²pA„`BO”pCda`D/vpEDC`Eó¨ðG-_àGÓŠðI AàI³lðJí#àKœ‰pLÖ@`M|kpN¶"`O\MpP–`QÐp?›bà@o²pA„`BO”pCda`D/vpEDC`Eó¨ðG-_àGÓŠðI AàI³lðJí#àKœ‰pLÖ@`M|kpN¶"`O\MpP–`Q image/svg+xml calamares-calamares-2d126ae/data/images/boot-environment.svg.license000066400000000000000000000001421430147706700256310ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/bugs.svg000066400000000000000000000073501430147706700216530ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/data/images/bugs.svg.license000066400000000000000000000001421430147706700232640ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/fail.svgz000066400000000000000000000023771430147706700220240ustar00rootroot00000000000000‹‰Þ‘Sedit-delete.svg­WMoã6½çW°Ê%‹5%’ú´+{Qìb=ôÒnÑ3#ѶI4$:¶óë;Ô·m9ŽuXœyœ§y3”Gá—c–¢WQ”‰Ì—5‰DÉ8É7K㟟ßq` Rñ<æ©ÌÅÒÈ¥ñeõþ†1úZ®DŒ‰Ú¢ùKñ@O[¥v Ë:fÒMYl¬OãÕÃCX¾nBÀ›—‹8Z͆ݾH+`Y"™ÈUiQ“ZFzx¤Ù“WÉ,“yYíÌËǸˆ×ZßÍÁ®@t>Ÿ[„YŒa@àò”+~Äç[áǶ2Bˆ¾ù1Ô¢AwðßÁ[ƒYÊ}‰5ìf.”õíç·Î‰‰«x¦ÕóŒõLäœg¢ÜñH”Vk¯ö’Xm—sªÕV$›­ê–I¼4à~mß#Õzд4¡‡˜Nð9¯"EEiïyËHßÄÒq¢p •TÂÔj¬Æb]jxMªWÀÊ dUÞ.ˆŽ¿&âÐcŸyY§‚ÐŽo ì©,–Æãºú4ŽgYÄ¢h]^õ9sI&Q§ºÑ›Ømn:jç'ãþrËcyá.oRf`f¦Ç|‡ú—îè”Äôl—zå xŸ' Úmw¼Ú¾/ HùI@ÚÕWËQnåaShùT±oå[C]2^l’+¹ƒ\¯í©X«QGQ7ΈçY*¥5¸Òíä n:ÚÞUŽ ¢íJŸ7 "¾’¾ñˆÌ¾áËø1É’7:\©¯%–vÍSh´U…êr³ObQï„þ“e¢ªc€©é8¶íΉ;cŽ gŸÐö’Eµá5š93ÒytQª¨¥ns¦3 ¨çO¯ÆYɬ9æ—¬þÇY™mÂSsx!Ä7óœÿ ãQÉ çÇè¶šÌ6ú. ÆSƒÖû2»æêúý*µgH6¡_iu¼C†o¦6¥O:¶;:BÕnä6¡Gì¾jäýªyã©ÙZ¤'sîVÍ%›Ð"tÞêx‡ ßLmBôlwtÔUÏmÐ#Ý“Uÿð´XuÒSËñ¤mçÀû'TÝí Aƒ÷«ÎF¥adBC÷dÞݪ³Q² ™Q¿­Ã2|+5:¡¡{¶;:êªæFÛŽ­ëÉ­²gBñ˜+Þq­Æ>·ý•…1|ñ׷陼"Œ¢Å¿²xiÒþ,÷0«ÎÆÑ猫U’Á/¸ž¹?àZ½ã ¬›°Z‡-D=¾†ÄQ–èMÖß*IÓš¤Ó· š¨T¬*Îú²ÍÂjÒh’´Y†V+CµÚ\Œ$)éÒøÊw]Í+›Bîw™ŒE3ê½¶g£Ÿ*x^jôì—)¼«=a×%& \ŸÍ°G<Ósüù§¶ ›³Cy½NìpÇÕ¶—n4vºÜoÑ1u‡:öÀ Ö?eÈA þHõçhÓÐKFÎ,ŒŒ`ô†êpfžOç€ðMZ}ØàªÂ#xîÁÊfAê `ßö¼÷#öØ74P¤T§jÛ¼‰,èïkh½ÅcÌǵ«î}¥*ä‹Xäðj>h̰‘­‰"9>Ó'>%žÌðàúÆåŒ svÀ|“@‘ýYæ1m×!¾7°·C=…'©OŽö}à¢Gô­ÃSÓþ? ­M}êà+ÔO‰ÕÃ$²Âøcalamares-calamares-2d126ae/data/images/fail.svgz.license000066400000000000000000000001421430147706700234310ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/help-donate.svg000066400000000000000000000012431430147706700231060ustar00rootroot00000000000000 calamares-calamares-2d126ae/data/images/help-donate.svg.license000066400000000000000000000001701430147706700245250ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-calamares-2d126ae/data/images/help.svg000066400000000000000000000177621430147706700216530ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/data/images/help.svg.license000066400000000000000000000001421430147706700232540ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/information.svgz000066400000000000000000000021421430147706700234240ustar00rootroot00000000000000‹‰Þ‘Shelp-about.svgµW[o£8~ï¯ðÒ—M h ,É<´i^碕öÍÅN‚ açÖ_¿ÇLnm7Ò.U|ÎwîÇÇnöu_•hË[Yˆzî×w¯sÁŠz5w~ÿú†IEkFKQó¹S çëâ.ûcôØrª8C»B­Ñ÷úEæ´áèÓZ©&õ¼Ýnç=ÑíÊûŒ0^ÜÝer»ºCÝZ¦,Ÿ;½@³iKd¹ÇK^ñZI¸ÄsFx>Âsm½Øò\T•¨¥‘¬åý¸eK‹ÖÞìB"³ÙÌó/0 °<ÔŠîñ©(øxM4ð}ßÞˆüw¨TBBøXø@p¥Ø´9_‚wk®¼§_O–‰}—)v¤fÈç‰Õ“$״ⲡ9—Þ@7ò»‚©õÜ ³ZóbµVvY°¹þv‹£^ ·×“ZŽïFÉÆ·¼D­ §LäÚð— ^rΞiþâêd,˜1¾”Z ³©W‘ƒ<ò:´¶-øn>SÙ…PCWPòR´sç~ižžñ,ZÆÛ55Ï K@Z uèš¼×=„¦µZ¾/×”‰$íœù*DäÈ â$y˜³ó=˜ôÝ$ “èá‚©ý ]Î’ |‘”žá]ÆÕó*º/ªâ•ƒ‡ä¢?Nú’–¶L`›‚qÙ‡¶0ôÌ ë¨;(Bê ·Ëþ iÎ@ÔIÑ„ˆø³¾ÿŽ;Ð(°…2mLh xHl5‰¶€üÓ@’‰jC+Š o2ÒÛˆ®ñ'¶§Fn0âd¿K|›™÷3æOðÑÜP—pBfï×ez=–€Üb$ü°.Ó«Fn(>™}d¿Ë å3dL×åz4Cù3ïr`zÅeTÑqz”xبpì¦?ž¾-zýYž§‰öe0‡Ðg±±ã,,9cy eEÕ¢¨`6è3ö Œ™72NÀzïJ;µ-ïNܫזW…ò~ª¢,¿k#6«Vi¡J>3¯÷¾Í; .ó†ÐÍju6ãJúÌ˹óHŠ.છ¦Œ÷SÝóy2åUKk©ƒ×³^K¸’}ÒåóCß §AðÙfçjˆDªC šû#/%.!Þô>búÏ,ðÈ“ª/<­áþwÒZ!tÄØŽÃ%Ãì=ÃRÌYhWúðóéñslßÿËÑècGãw9ÚPµþÏÕ2 QŽpäFa0ñN` ¢Ø, X›È à…ÀW܉v¤½Ðß6¢7Zó¨3¯i6í%GÔ50E‹áº³¥jÓB¢ÇÚŒsv‹Þ½p-ö±ãjÿµè‰±¸û€\h\ô calamares-calamares-2d126ae/data/images/information.svgz.license000066400000000000000000000001421430147706700250430ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/no.svgz000066400000000000000000000020721430147706700215150ustar00rootroot00000000000000‹ùSwindow-close.svgWQoâ8~çWøÒ—VG;I d•n«•öõnO÷ìÆ¬&1ŠMýõ7Nì$ íFª{¾™ñ÷eì1󯇲@¯¼VBV ØC¼Ê%Õzáýûó»?õÒ´b´_x•ô¾.Gó?|}«9Õœ¡½Ðô£zQ9Ýrt¿Ñz›…á~¿„ d½ï/G£¹z]B·RËžuØîꢲ<ä/y¥UHz=<ïá¹É.^y.ËRVªñ¬ÔÝ\³U‡6«ÙÇ ˆÌf³Gaù€ðÕ±ÒôàŸºÂ/¹Fãl=òc¨L [øëàn"PrWç|~<¨¸Ÿ~>uFL³A§çIÖ‘+Zrµ¥9W¡›oü÷‚éÍ‹¢f´áb½ÑÝP°…ëmƒZ ­ÕÆÉ: ’ªI”&ÖEðý_ò„QØ<ÙèŽMÆdn–·ðö¢brïç…T<0B-7g|¥ ¾]% SÂø3“®>SÕRDhK×P…¬Þݪy¬áYÖŒ×Î4iž“É„>¶ÀÆv´MÔÎŽ/ÛÕ†#ô­ñ—”%DMƒ4!³Ç3s¢%‰b%“3£YOàÇt–LßAÌÙ"þ®Êp{8sßÕµôÈvóXÚÈýº6òézçä{7’AY®hÑiÞêgs ‚uÎöcÛ$ñ䌧E¸¢LÉY‹±ü3 ­ ´Šâwl%=ˆRüâ@—4µ6,©õN0ÞúAI%tSã¶Šq2ŽpóJRÏ¡d-@XÚáÛΚgŒ;€¶‰›` ÛñçrÚ”ÓË9ñ¸Ëz1çôã9ÉÌ-ÿFNÿÑÿVÒëâⱕi}šþw8š¹Ó0‘L\ÓÏ»F3_rMÕ´o!n&u‡Ü ²¿Ÿ¾/møyžgÿÉúÅeCÈè³ÜÁqå-»é9Ë3èä%ÕKQÂyi.B瞇½ál¸ôAÛ°5o¯ïE,/…q ÿÑ¢(~˜$\]P¡ ¾lr¶¯ŽEhiX’á€å SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/partition-alongside.svg000066400000000000000000000415221430147706700246660ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/data/images/partition-alongside.svg.license000066400000000000000000000001421430147706700263000ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/partition-disk.svg000066400000000000000000000244631430147706700236600ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/data/images/partition-disk.svg.license000066400000000000000000000001421430147706700252650ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/partition-erase-auto.svg000066400000000000000000000325551430147706700247740ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/data/images/partition-erase-auto.svg.license000066400000000000000000000001421430147706700264000ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/partition-manual.svg000066400000000000000000000316351430147706700242020ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/data/images/partition-manual.svg.license000066400000000000000000000001421430147706700256100ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/partition-partition.svg000066400000000000000000000301311430147706700247240ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/data/images/partition-partition.svg.license000066400000000000000000000001421430147706700263440ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/partition-replace-os.svg000066400000000000000000000410611430147706700247510ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/data/images/partition-replace-os.svg.license000066400000000000000000000001421430147706700263650ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/partition-table.svg000066400000000000000000000131751430147706700240130ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/data/images/partition-table.svg.license000066400000000000000000000001421430147706700254220ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/release.svg000066400000000000000000000060011430147706700223230ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/data/images/release.svg.license000066400000000000000000000001421430147706700237440ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/squid.png000066400000000000000000000201711430147706700220210ustar00rootroot00000000000000‰PNG  IHDR\r¨fsBIT|dˆ pHYsX•X•Ùm7ÓtEXtSoftwarewww.inkscape.org›î<öIDATxœíy°%U}Ç¿§»ï½oófcö•e`†d ¥¢(Á}IÔ²RV“*£–eEC”XFMR©TÊŠ•ABÀ2„RRj©,ƒÂà 0ÌÀ0ÀÀlo7ïݵoŸüÑ}ºÏ½·û¾»ôÞ¿õxsÏí{úÜÓçûíßYÞi†xö#¸qü[ç"ˆ4Àn¿è>|/èó(AŸ€ ˆøB@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0ZÔ ‚ghÇu»þ]}fæ‘ zðÑ€JDÄ2€ PX>&Þþ']}fîå§qú¹Ç1ž«T*"P€ðdÁP0¯«Qƒ2Â`A'H3d„7Üüeš5•4BW•èˆ]%H!tE‰Ž`ÉR]MÂ.ý›I©‹ÔHt% WXÃoÙugÈR]EÂGüMé X¬“ ¤º‚DÜÅ/ H>tõˆŽ‘Å/ H6t刎p?`Í $ºjÄ’´¿è$,Ö, $ºb„;–²;¿`L qÐÕ"<éFü""dAWŠèŠvâÌ7u2¤@W‰è˜NÄ/ Ht…ˆŽèFüâ êĺ:Ä’ô"~ñÆba±NÍ,®Ð•!ÚÒø :™@\¡«BxÀ}¿H^ÔÈb]¿Ä/(’ ĺDÇô#~™@¼ +At„âé%a‘fb]bIü¿ X'ˆtˆ¶!~™@ôPíî0K´»™‰>ˆ0ÿÖ d0,ê^GAC@xãy×o|“5¿åõ99¹ …L "ȈÎh#~¯ÃÝÞc¬Qü2h  –¦ñ»¦KÂwëU”êdaC@´'ñ»o½A&.d„;¡‹_Pª+(ÖÉ€ €pÅhsxâuš-êñ„Kÿ„%~ñFÉŠ†5ω>¡ dògmSsQcIŒ&Í-~¦æ0¸f[ËeZ'(d!RX>6ÿíÃØðù‚å Q§cÂÿùŸ¿»¿ù†7ïjɧl02€(lÚ…ÍwüÚ²5¹äfløÜ}‰0°Ä¿âê÷!7¾ ÝùsŒl¿´eGâRL ÈB °i6ågPGWÚiI00Å/ÐF&°ëއ0²íÒ–üËd¾C0nâ$Áš Rümd6™€È‡LÀ_ȤøI20Ä/M ù¼dþAˆ_SüaÃ.ÝJÙÓ„Dï@7âÄÙ¢¿ÀÍäî™@øL/âÄÑ¢¿@6·î™@ïøH?âÄÉâ ~AÛî€A&Ð+d>2rñ»ú¿Ï%7cýgïŠtÅ Ÿâßñù»ú¿@™À²Ýos-™@oøÈôÿ~“÷|Ù—¼F¯ü@ìV özç_yõû}9ÿÑ{¿Ž7ô–òÊd]Cà3S|Ë7ˆUw ‚°_æè½_ÇÑ{¿ÞRžæÓW †2™@Ç@ÚL )â·gÈ:† ÒbI¿H,×É: @’n‰ÓfƒdKC0I5¶âoÞÕ1 å:ÈÚ@I5Oñ7§ÇNüU®›ƒƒD+d!‘4p}PbÄß ™€;d!’4Ú‡ØI¿½³™@ d!“$H“ødD@L *ñËk.B¿âTÈlÈ"" &…øÝŠ`A¸–©;ñ‹äJ¨’ DI¬MÀUüZ$â÷.Sk!Ý"û½¦×e22€¨‰µ H˜âÿAìÅïFCÑDÖ#2€wSübßOñ{¥ËÝ¬Ž Ä„¸š@ØâÂ3ÕŒš@Œˆ› dEü"Ÿšan6š%ÈbF\L€iÙ¿ Æ³eôtà2õÀ·€ÜV}ø«}ç5rÉÍ<ûÊ®?·é¾‚ÜXÿۛɿ ÆÔ‚êñ¡A@L™ºÿk¾E½ìS˜Uñ‹ãuÎP©{|0EÄ?»QTñ ²`d1'©&tñ Ònd i&ñ Òld !)&6ñ tÎP5:80a$ˆ¸›@ZÅ/¨é32€„WH»øE>i‹ÈHÜL +â¤ÉÈJ\L +ñ»ì&œ4ñ j)12€µ t-þ’)~ñ׊:g¨%Üh)p™zà[€UûF¨çíOü½íâÓqzâ/jœàÈ%ôVšÐb2aG$~H_ƒ£f ±‘@JËHüh¿È_O¨ ¤ˆ M€ÄWñ ’h42‚â÷mñ tË’2&bÝàw$°”øHür>uîAÜ!H)~™@'âoHh9¢‘n¶í^2=†âè 12€Ó¯ !~7"—÷\Óc,~AL€ÆRN¯c^âëÒÞvŸñ<>@ñ‹ãë€h1½ÕÆ´X„Ÿt $Müí"/¿ Îcd¡SH¢ø»Ák "(ñ êÜŠb@†Xʲ ~Ï÷Ä?¿@7âg41¼Æ²,~IüAAèP»ýA@iŽ2/þ†?Sî^üÝŽAÄ)  £ˆ‡”ëŒÄ/½«<¢ŽÈ2ÌÔý_C¹ÎÀšZ7‰?œòÄÁ¨ qTŽ!ÕQ‰?ÜòÜü‰ 2y¥ÑHüá”G$×#42€0ƒÄRyš“£22Â&¯ÃªµdÄXy¼ò‰¢;@@4S€µyÝ*‰?hñ‹ô°M€ €hAS€ÑœÆ&Èm’ ~îúÂü>q¿Àà@Í»˜¾B@¸¢2`TãPššaRÄÏäÒ?â.~¯ƒ!}’ž( ‘L€Äß}yÚžwé|¬Q2¢-¼«ø{˧‹òjdÄ’( v1oùt[ë#h• €èašèxGâoŸOâ—gú®W2¢c€!ÉÜÞwM'ñ÷T´NÁ°6ÙôѶ (­é®Ç“ø{*OeújdD×0Cªó@Lû||,ÜðÅȈžT9ò-ˆÄ¿Dzïâ—íÛȈ¾P9òªóÚkÓM€ÄßGyÚ-îËhC¢o Š)K¯cöÒBIü6^â—ÓY›ãÚB@øBAáj¼±)û%4Gé]C]Â7 ª¹¯€À/¡5ä•ñ3¼øŠŸÉ+GÕèNjqÙ¶»“¼B¸ó{á»)P@øNNã·m»—Ê««ô‹ €s¡Ge‰H )y´Ë+©â( DSÌiB/’"þvD’Å£2Óš‘$ñ{¥»½çç:Ð,‘T (Ž ¤AüÝæÓm™Tï·|  BA±L y‹±R(þnËÓÅ_ö  3g<Û7‰ß ÷ÝY}€ €a- ÄïE ›„“¡£0  r(¢m'lÛî°Êƒ€ÅÁ`.Ví6žî¥½Ý–Gñ^ ì+dDd0yP‰¿Ÿ|ú €ˆÇ<Þ'ñ 9¢;ÐïSˆ<ó'ñ{B@Ć‚ ¨bŸA(±"¯ eÇa‰ßȈؑSZÇHüÁ@@Ä’œ‚%ŸB䉿s؉ɩŸE¯æy¥8øyˆÔ¡×uÔªµV­xüQó•ç|»â¾s óø€ÒÑÖEr>î÷X¯üí÷ CEhùjW'ë6;w:”Ñ+º®C×kök/‘{©ÜKlqKÚˆˆ=š¦1½Vó>(fbN‚ø ‚ªªÐr9÷7c&椈  „ªªÈåó‰1s’Ä CQÓÚìœ7‘ÇUü ÕôzÔe ˆîaJÃÀ ô†ûá$~W´™Ù¹¨Ë@=Á9‡®ëàÜúk€ř6ñ€žŒš¦B×u+¥µ-›"ì<Ýû\ÝåÓmþQ¡Å¿ˆÑÆ jêõº ˜ÉæÝ·¹}{¥·?…ûîݦÇ-1%%TEµM€1æªp¯ô¶yw™W/çˆê©@tš#çý^B~´|Æ+½—sÄê©BQ[M Û¼—HšôM¨ @¤ŽNº^¤=äo†©DUUšæë'Ù¾¢ Šª ^ïl¡›Þ»÷ë»IO©¦“H ‹w~©Ga nxÏd¨Ïß Í™€) À9¸aH‰é]àÓ)´€È ŒÁ|æ–aX/Ò·´·[¨ @d 0Å—î@ .‘=Ä ¥1ì—¡.‘IÄ@¾½X(Ca¿ uˆÌÂÀÌ;|Ý´A]‚h2´‡ý2´ˆ à,îIÓ"ŸNˆ~ `q8ü8Ø«OŸzlæ5 Zô 0¸ šÆV›.ß|°q7ˆ¶ÌIdê0pd/ØkOS¯ ³@i¨ë@~X¶|ù`ãÅÀÖ«€uD]âÐ1µß»t]ÇÉ'pìÍ7pâÄq‹ETÊ”JEhš†|¾€ññq,›˜ÀÚuë±aãF úVþ^`Ï<ÿbøÀ9Ø¡_í½8¼0ºØ˜t`üâ÷ƒ_ñq`åÖàʘªE°g{ònàä¡®>ÊWl.ùø ŒTÀt07;‹çö?‹—DµZéøsŒ)ظi3v^x!6nÚIôº°#O€=ô àäÁ>3bÀ®[`¼ëKÀð  —¸öÛûÀ~þ@étYF€ko¿öV@Ë/ý ±¸¸ˆ_ïy ¯~Éu ±V¬\…k¯»k×­÷©tžÔJ`?¹lßýÍw` õw|ìòø›oR™~ʾ}Úß|Wn…þÁoƒ­Û™¹~²/x¿ÞóXWwü¥`ŒaÇù;ñ–k¯CÎë)H>Þ~î@ð0÷&”»o›<Ø)Ê—|¹÷~`j`çˆ;ìÈo Üû—@y>ü¹šÃÜ ŸÃèõ”YàÜÀžGÅ ÏïìËWà]7ß‚ÑÑÑÀÎ!ÜØÔa°ÿøØ™SAžPÛþ{P>ñ¯€’½gž²ý?6ïü†¾ôÁ}ˆaþ-ŸÁÐ;>›90 ?ý¿Ÿàõ×^ ü\ÃÃ#øý÷¼Ë&&=O°Ó€ó'Àîº-ñ@îð#à÷}è³?–4Øk{¡<ðåàÅœcìñï¢øËï®Á9ÇÿüE(â€ÅÅüøÁpæÌ™@Ï£Þþ§vG 9ëUhß¿lò•@²÷B™zºa€m»2ÔóF›zê~ ¨–B=oáè^Ì-ßÂY[B=oTìÛ÷ö?ûL¨ç¬Öª8yâ8Îݱ#°hK‚øQ~þOÀ±)ôRä÷|úëÏò½bõcPþç¯r°w WŒ:ƺ³ÇŽF_ÿLMNbßÞ½‘œûÔÉSØûÄoË?˜.À©CPž¼+¬;¨Cyà˨UÊÑ•!ØS÷€½áóhhÅIäû.æfg#+CÐpnàÑ_ý †¼‘HÈìæLOM’·„±(?ûNw‹{ ?ý Šß½^úÌOµõÿâkõÂø‹bñøK˜›‹¾Nø9tð &'ÃÃòÂ0 <ùäoù~ 8‡Ÿ?ìØóP^~,Ô òbtÿý8uò¤¹3¬Ïß3êåé6Ý×FûïÇÂü<ÎÌŸŽ¼^üüá†ýÏDaɼñú똞šôý;ú>_¦ø½Ð§ò³G0øâC8=s&–M@QÒ3m¥<ñý¨‹`3røxùÜcvn££cŽºH¾033™™™¨‹àœãà¸æºë}Í×ß?æu°ò3ǾYõè?D]„Ô£ÔŠ8õðam Àòy ¹-ö›Ã/¿„«¯½Î×_Ù±`}®='’É6œ²7Ú¬ÖjÐõÖ$dŒr¹Œ™i}PŽîóµpDrX[=ÀyVN¥R%€Çû;àk`ꈟ¹ b¸26hL8GµZhZö–fÅìì,üÔ¬¿]€ÓÇüÌŽHŠ¡c„—lñ‹]7©;à/‹ ¾æ§ûè'ÕEÿò"G:œ‡npŒÕjŒ™Ïé#ú£Z­ÀOÍúÛˆxñ-*¯ÖT+‡õ˜~P­VQ( (´ e?†ß.rÑîoFDKU1§þšÅ/¨T«‘.©M~oâësøÐrÿ2#’c(¡Î›Äoµ/Ó€j¥Š|¡%c{ øÅÀÀ üÔ¬¯»ó[|Ë‹Håü8*ȹÞù9œmppÔªäryêôÀ²eËà§f}0ÖžïcnD’˜ÎŸÌ{SeÌ·2Ãepsv —Ë‘ tÉò•+ã;Pßx™9LdŽ×Õµïüv‚$~ù˜Z­Fc] ( ÎZ³Ö×<ý}6`aÆ–« ùµ™öGiý娞Àé›Ú0³_*·ZkÛ9Rãü£1'ÑÏeâÑÓ'`ÞÇ»—¦+Ôç4žÙ WãlÍ|~À³ÆÌ bVE0Æì*…Åvv`aá Þ8z4êbج[¿ù\Þß1]ïA!&Àóغñ+0òCVÃcö5cD#µÓ˜Ùpá4Z‘ûîå4bóîÆ­|Ä8»œÖøØ)9­Wò´§ïï+¿(¯¹ç½åíÄwdv}Ü®g»ŽÍ#!ªUa ††‡cgÕj÷Ýs·½¢1j¶Ÿ}.üÖ«ï5^¿à&ãþ†)½rfÇÍ©?Ô®údlº[ó»Íg2ô"~óÁœ¥R)vÝ|>sÏÛu1Ã##زm›ïùú¿' Ó _óiß Ú-Fnó~ÐlxÜ„bÜ£†x ƒ0ó8p«[G±†ãìî€Á!§Ú•ã¬1UL‹IyøQÏ|ùÔwÜFU¶¥²zJ믴¾³ëÛõ5hÕ±]?°ÓaýæG¹T†Q7üm}þ\°sWhéhÇÅ—\…)¾?…Ãÿÿj»?cÝΫ¨‘Ù+>…úðJ€½vŠq³KÊÌrŠN8¿aÀnVº}œý9€sÃÊGNçp~Ägå<ü¬çÊ_‚x„'LÁô5(Ö]ªGQÏ"M¾ õØuip•J7h•½ý742ŒK/¿"ÜzmbÕêÕ8ûÜsù~ÁÄLAå–;#[X^³‹;ßÛ>ìa*Šåv藍)¼÷ûÅg‚ û›á#+QyÛ_ùžo§Ì]üqÔVϰ¿©ë‘æRg¬.G¥RE¿ÏÚó“ìĪի#9·¦i¸î†·¸-x@+¶¢òî¯ºÌ ‹>ºS7þ Dï&­â·¿ïî÷£vùÇËߋ҆Ëqú²OÂOñ‹YÎ T«ñ1ÆÞzã;122òyk¯¿ãããC½õ¶ÏÜTæÆªsÀ ÃÐBš0 £8qówP]c6<Þ½ø™s`ìÅ/¨o½Êä!(Ó¯~.¨¬:§nú;p­ €t'þÖÁU˜}©º¸ÁÁ ‰‘Ëå°nÃ9ü²¹Él\yõ58'àAHõÓ·Ý~G'0Ö_cpê+{½Œú蜼ùï¡Olv¿hhðIüöP`äâåÕÏ»¬8õD°c)¯Û“7Ý ^v¿S—ýˆß®;fŽ·¨j>¸†«¯¹;.~Mýt€€ ºz¦7bøø>(,^)Ÿu!N¾û›¨­ÍžøLAmÛuX(×0tr?|ÝçÃé ?ˆé¾ž \üöt«E\Ö bëöí˜?ÐÔÐR.~ Ã0°pè ,ßóÏœ:èKžµñ ˜¾úÏQÚp©ó½¹S`Šßz­(JlL€µM÷ øÝo÷¢Zë¡ö³ÏÁåW\…ÁðÏC3À4S§&Q˜<€Ïý7FÞÜ ±4¤ê…q,œ{Nïúêƒ L².~a˜™žDáÅŸbùÁ10ýROùÔF×áôEÅÂ9ïWµÈÄ/×kœLŠÅ"<¿/:ˆJ¢c`ظi3ví¾+W­  „Kœÿñ½ûBjÕk5LNM¨È•¦0öê#>¶“/B©{;i}hJk.BqýeXÜú{€V°‰¿Î9f¦gP®”00}c¯>†¡SÏc`æ0À½WÜUÇ7¢´îb,n¹•5Z•(‰:BñËÇÆº®ãµWà7Žâä‰ã(‹žÇjª†U«Wc݆ غu;†Cž]a{ž ×Ó¦¦¦Pç†Ùh8  †üÂIäæA­•ÁêUƒc¨ÆQ^‰ÚèYfwMƒDh#~Kø}UëóNëk¿Ó¸“)~ç³33(UÊö¸ˆª‘;sjå4´Ò< ðÜ ôáU¨Žo€‘±DkæÁ3µê%~}-9ãÒ(~»ºR ~7P*Q©”Q.—¡©*´\ccã‹Í÷ˆÄ@×uLMM¨s0Æ­†&™$`«Q‘ø{ƒsŽÙ¹YTJe;Z‚UÏN=A|IÆðuG ®N¬©X¹r%¦§§ÁºÙÐ8`62!hn‰ŸKâÄ’\fŸ¶QH!> "LCj°"7¤™I†“Î%ñKiŒ5+ VÜ` X>19Ì¢T.Yâ‡mº¶³ÚFÊ­Ï1pë3©µ~8¸%~§>Å9…§6Ôwòo¼&.iR½&¡ž“Š¿»w‰ªiX¾|9fffÁ­ÝNÅ„7ÝùE«àÒRºóoS¶¦58}yÑ"í; È°ïü¼)ݼa5¥I¿íÏ'€ñ‰ `Ž¡T*ÛQ•³~_Ü­a7C˜07ë‘ÉÊd€óÎæÔ‘}ý`Ö% Õ“ðr3ÑÉ.iR½&­ž“†¿‚ôR-‡å˜apGØV+3Û›¶‹M'Ò­–gÞ$šÂ~qgñc§Y¯¹8'kÈ5Ë… ¤ð6a­r||;r© É᜜K)ìwjÑü—Âþ†ú¦ÐZOö \ªSæ¨òN@ÌzN±˜SÑr9LL,‡¢©öÝÉnPpéóËé€~6÷ùc㤈@ˆ¿©ÏÉš~'¹/:66ŽçÎÏìÚACŸ’ø³ë¸³…Vh­O ¡N]Ó¤zMz='ßwê5§aÙ²e˜›ç†Ó‰4o±ïȨš†¡!»ŸjwC)ì÷\>0 R©Z*§°?ÄnÀRhš†ˆñ@û./âSšç÷\.B¡Ð0@óüéBó}óÈÐT¬0`†¨£Á%cÝW.…ýr³‹4¢•œ¦œ£V«9Ý-¹Q×\ ûëÕsLIT@FQUä ó¶˜yįyÁŠöh O w´\` µš&­pF÷à’&=fê9¶hsgæ£.C_†z]·^‰9LµÒì0Öi”̉ˆ0ëÚz(“îêv‚0;…ê9æhǦ'£.A‘¸A@‚ üƒ € 2 Ad2‚È0d‘aþä‡êok\IEND®B`‚calamares-calamares-2d126ae/data/images/squid.png.license000066400000000000000000000001421430147706700234360ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/squid.svg000066400000000000000000000260061430147706700220370ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/data/images/squid.svg.license000066400000000000000000000001421430147706700234510ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/data/images/state-error.svg000066400000000000000000000012251430147706700231550ustar00rootroot00000000000000 calamares-calamares-2d126ae/data/images/state-error.svg.license000066400000000000000000000001701430147706700245740ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-calamares-2d126ae/data/images/state-ok.svg000066400000000000000000000011171430147706700224350ustar00rootroot00000000000000 calamares-calamares-2d126ae/data/images/state-ok.svg.license000066400000000000000000000001701430147706700240540ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-calamares-2d126ae/data/images/state-warning.svg000066400000000000000000000016341430147706700234750ustar00rootroot00000000000000 calamares-calamares-2d126ae/data/images/state-warning.svg.license000066400000000000000000000001701430147706700251100ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-calamares-2d126ae/data/images/yes.svgz000066400000000000000000000021621430147706700217010ustar00rootroot00000000000000‹ùSdialog-ok-apply.svgWÉrÛ8½û+0ô%©$ÁI9$•ª\3™š3L@Ê$Á¡Í_? ®ZÛrÙ"»ú¡@{ñõPhÇU#dµ´ˆíZˆW™d¢Ê—Ö¿¿àÄB¦£…¬øÒª¤õuõ°ø côMqª9C{¡7ègõÜd´æèÓFëzî8ûý޽і*w>#ŒW‹f—? „€·jæ,[Zý€z«ŠÈ2‡¼ä•nbÇšàÙÏ »ØñL–¥¬švdÕ<ž€[h3›½ß‚Hš¦Žë9ž‡›c¥éŸ…9Þê¹®ë€oB¾ 5o@Ð~Gø`°¹U_Ã8nW\;ßص™f'a=ÏXÏD®hÉ›šf¼q{;~/˜Þ,-Ïkß6\ä=¾ ¶´`¾¾Ÿöý¤:Ãj>z\;H¾0¾ãR-d˜óœÉÌLbi1%“cZ×ÅÑ6r¬·`|Ý|ÇjÞ€Ö·ÓzÇ(&Û ¾Ÿ°O´érA¨¦9¬{!ÕÒz\·ŸÞñ$ãjpEíçÌ%A¡]¥÷±‡äLÔÑïÞö7Êä”»t¾HYAíÈ‹_º³P†v“( ®œÀÛI†qš^:AÏ­Ù x[ õV®†o•2€‚9¤Ý~‘Ôlä>WF>­¶ƒ|k¡qIU.*¬e ¹^Û ¾Ö7ª«œž'©µÑàJ·½¨@3Ü— ñÇ%¹D eEɨˆ¯¤ï} ¢çßñ•ô JñÂAr 1.íšc¡µòmãM/વ/ÆÁFÛŠ>šy8›5ôÆôU~Zçmð[ËFèv{ù6œ!.!ñ,°á¸Jã$#J%`µitg$:ç2úo'#iÇæA¬Ž-½G†ï°ÅogóÆÔ€÷56’ÌÜ[dÑ;R;!û£ŽÉM²ðdî¨ãëdønjïÑqb{]G³j·sK?R$y}Õ¢Û©Åä#dÞǪ?þPõÿ ßMí5r²×^×ñî^‹‡Y8×·ek/¹¦Œj:]ƒ®Úh8 ÷™ÿúþcÕS,²lþŸTÏ#B@Ÿädk5š,›C·RR½%œš¦ÑùÝÉ™g`s*NA»°ŠwmÏÍÞe¥0ƒœ´(ŠŸ†dÔw *tÁ'ãÂégßçæœ$·p†ìÛ·üâô/è/–Ö7ZStu5äJnëR2ÞߪÖ$éÙ-«­“¼¹%à±€¾øö£Àcø3z¡§n~ä¯©Þ )5úXEß{ÌÉßkH|þ0óÓ¾àÉ×h%Ÿù¼‚n|,³ÄÈO<;‰€-ôÝ–,F˜@Ÿæ'q4ƒ‡0Š‚áÀ&A”¦3󯱇 ËŒÝ*¾á$OЀèÆïºÆ Q‡õ{lŒ:œ—@b\ŸAû‰Å3ÜÏ,œæÑ‰ÐËYý+ži¸EýÉ86@²ªÀ)†VhGõVqÓ† Û$‡ÿWL™®þùí¹î calamares-calamares-2d126ae/data/images/yes.svgz.license000066400000000000000000000001421430147706700233160ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/io.calamares.calamares.appdata.xml000066400000000000000000000023611430147706700244310ustar00rootroot00000000000000 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-calamares-2d126ae/lang/000077500000000000000000000000001430147706700167305ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/CMakeLists.txt000066400000000000000000000040371430147706700214740ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2018 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # ### # # This CMakeList handles the following i18n / language targets: # # - creating a translation test-tool # - building the Python (gettext-based) translations # - compiling all the Qt translations into a C++ file calamares-i18n.cxx # - defines an OBJECT LIBRARY calamares-i18n for linking the compiled # translations into an executable. include( CalamaresAddTranslations ) find_package(Qt5 COMPONENTS Xml) if( Qt5Xml_FOUND ) add_executable(txload txload.cpp) target_link_libraries(txload Qt5::Xml) endif() install_calamares_gettext_translations( python SOURCE_DIR ${CMAKE_SOURCE_DIR}/lang/python FILENAME python.mo RENAME calamares-python.mo ) ### TRANSLATIONS # # set( TS_FILES "" ) set( calamares_i18n_qrc_content "" ) # calamares and qt language files foreach( lang ${CALAMARES_TRANSLATION_LANGUAGES} ) foreach( tlsource "calamares_${lang}" "tz_${lang}" "kb_${lang}" ) if( EXISTS "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) string( APPEND calamares_i18n_qrc_content "${tlsource}.qm\n" ) list( APPEND TS_FILES "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) endif() endforeach() endforeach() set( trans_file calamares_i18n ) set( trans_infile ${CMAKE_CURRENT_BINARY_DIR}/${trans_file}.qrc ) set( trans_outfile ${CMAKE_CURRENT_BINARY_DIR}/calamares-i18n.cxx ) set( CALAMARES_TRANSLATIONS_SOURCE ${trans_outfile} ) configure_file( ${CMAKE_SOURCE_DIR}/lang/calamares_i18n.qrc.in ${trans_infile} @ONLY ) qt5_add_translation(QM_FILES ${TS_FILES}) # Run the resource compiler (rcc_options should already be set) add_custom_command( OUTPUT ${trans_outfile} COMMAND "${Qt5Core_RCC_EXECUTABLE}" ARGS ${rcc_options} --format-version 1 -name ${trans_file} -o ${trans_outfile} ${trans_infile} MAIN_DEPENDENCY ${trans_infile} DEPENDS ${QM_FILES} ) add_library(calamares-i18n OBJECT ${trans_outfile}) calamares-calamares-2d126ae/lang/calamares_ar.ts000066400000000000000000006317651430147706700217340ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 ÙØ´Ù„ التثبيت 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> اضبط طراز لوحة Ø§Ù„Ù…ÙØªØ§ØªÙŠØ­ ليكون %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. Packages Install option: <strong>%1</strong> None Summary الخلاصة This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. هذه نظرة عامّة عمّا سيحصل ما إن تبدأ عمليّة التّثبيت. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition أنشئ قسمًا Si&ze: الح&جم: MiB Partition &Type: &نوع القسم: Primar&y E&xtended ممت&دّ Fi&le System: نظام المل&Ùّات: LVM LV name &Mount Point: نقطة ال&ضّمّ: Flags: الشّارات: Label for the filesystem FS Label: En&crypt تشÙير Logical منطقيّ Primary أساسيّ GPT GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. ينشئ قسم %1 جديد على %2. The installer failed to create partition on disk '%1'. ÙØ´Ù„ المثبّت ÙÙŠ إنشاء قسم على القرص '%1'. 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 حرّر قسمًا موجودًا Con&tent: &Keep Format هيّئ Warning: Formatting the partition will erase all existing data. تحذير: تهيئة القسم ستمسح بياناته كلّها. &Mount Point: نقطة ال&ضّمّ: Si&ze: الح&جم: MiB Fi&le System: نظام المل&Ùّات: Flags: الشّارات: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form نموذج En&crypt system ع&مّ٠النّظام Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase عبارة المرور Confirm passphrase أكّد عبارة المرور Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information اضبط معلومات القسم Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. ثبّت %1 على قسم نظام %2 <strong>جديد</strong>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form نموذج <h1>License Agreement</h1> I accept the terms and conditions above. أقبل الشّروط والأحكام أعلاه. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License الرّخصة LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>مشغّل %1</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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 الأقسام Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: الحاليّ: After: بعد: No EFI system partition configured لم ÙŠÙØ¶Ø¨Ø· أيّ قسم نظام EFI EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form نموذج Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. معاملات نداء المهمة سيّئة. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) %1 (%2) unknown مجهول extended ممتدّ unformatted غير مهيّأ swap Default Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table مساحة غير مقسّمة أو جدول تقسيم مجهول Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system إزالة المستخدم المباشر من النظام الهد٠RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form نموذج Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. اختر مكان تثبيت %1.<br/><font color="red">تحذير: </font>سيحذ٠هذا كلّ الملÙّات ÙÙŠ القسم المحدّد. The selected item does not appear to be a valid partition. لا يبدو العنصر المحدّد قسمًا صالحًا. %1 cannot be installed on empty space. Please select an existing partition. لا يمكن تثبيت %1 ÙÙŠ مساحة ÙØ§Ø±ØºØ©. ÙØ¶Ù„ًا اختر قسمًا موجودًا. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. لا يمكن تثبيت %1 على قسم ممتدّ. ÙØ¶Ù„ًا اختر قسمًا أساسيًّا أو ثانويًّا. %1 cannot be installed on this partition. لا يمكن تثبيت %1 على هذا القسم. Data partition (%1) قسم البيانات (%1) Unknown system partition (%1) قسم نظام مجهول (%1) %1 system partition (%2) قسم نظام %1 â€(%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>القسم %1 صغير جدًّا ل†%2. ÙØ¶Ù„ًا اختر قسمًا بحجم %3 غ.بايت على الأقلّ. <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 متطلّبات النّظام 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) StandardButtons &OK &Yes &نعم &No &لا &Cancel &إلغاء &Close &اغلاق TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form نموذج Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. الغاء تحميل مل٠النظام No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users المستخدمين UsersViewStep Users المستخدمين VariantModel Key Column header for key/value Value Column header for key/value القيمة VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form الصيغة Select application and system language Open donations website &Donate Open help and support website &Support &الدعم Open issues and bug-tracking website &Known issues &مشاكل Ù…Ø¹Ø±ÙˆÙØ© Open release notes website &Release notes &ملاحظات الإصدار %1 support %1 الدعم About %1 setup About %1 installer حول 1% المثبت WelcomeQmlViewStep Welcome مرحبا بك WelcomeViewStep Welcome مرحبا بك ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error خطأ ÙÙŠ الضبط No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug التدقيق Show information about Calamares Show debug information أظهر معلومات التّنقيح finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: طراز لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­: Layouts Type here to test your keyboard اكتب هنا لتجرّب لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­ Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? ما اسمك؟ Your Full Name What name do you want to use to log in? ما الاسم الذي تريده لتلج به؟ Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? ما اسم هذا الحاسوب؟ Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. اختر كلمة مرور لإبقاء حسابك آمنًا. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. استخدم Ù†ÙØ³ كلمة المرور لحساب المدير. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_as.ts000066400000000000000000007721421430147706700217300ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 ইনসà§à¦¤à¦²à§‡à¦šà¦¨ বিফল হ'ল 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 %1ত বিভাজন কৰà§à¦¯à§à¦¯à§° বাবে মাউণà§à¦Ÿà§ আতৰাওক Clearing mounts for partitioning operations on %1. %1ত বিভাজন কৰà§à¦¯à§à¦¯à§° বাবে মাউণà§à¦Ÿà§ আতৰ কৰি আছে। Cleared all mounts for %1 %1à§° গোটেই মাউনà§à¦¤ আতৰোৱা হ'ল ClearTempMountsJob Clear all temporary mounts. গোটেই অসà§à¦¥à¦¾à§Ÿà§€ মাউনà§à¦¤ আà¦à¦¤à§°à¦¾à¦“ক। Clearing all temporary mounts. গোটেই অসà§à¦¥à¦¾à§Ÿà§€ মাউনà§à¦¤ আà¦à¦¤à§°à§‹à§±à¦¾ হৈ আছে। Cleared all temporary mounts. গোটেই অসà§à¦¥à¦¾à§Ÿà§€ মাউনà§à¦¤ আà¦à¦¤à§°à§‹à§±à¦¾ হ'ল। CommandList Could not run command. কমাণà§à¦¡ চলাব পৰা নগ'ল। The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. কমাণà§à¦¡à¦Ÿà§‹ হ'সà§à¦Ÿ পৰিৱেশত চলে আৰৠতাৰ বাবে à§°à§à¦Ÿ পথ জানাটো আৱশà§à¦¯à¦•, কিনà§à¦¤à§ 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. সà§à¦šà§€à§° পৰা পণà§à¦¯ à¦à¦Ÿà¦¾ বাচনি কৰক। বাচনি কৰা পণà§à¦¯à¦Ÿà§‹ ইনসà§à¦¤à¦² হ'ব। Packages পেকেজ Install option: <strong>%1</strong> None Summary সাৰাংশ This is an overview of what will happen once you start the setup procedure. চেতৠআপ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ হ'লে কি হ'ব à¦à§Ÿà¦¾ à¦à¦Ÿà¦¾ অৱলোকন। This is an overview of what will happen once you start the install procedure. ইনসà§à¦¤à¦² পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ হ'লে কি হ'ব à¦à§Ÿà¦¾ à¦à¦Ÿà¦¾ অৱলোকন। ContextualProcessJob Contextual Processes Job পà§à¦°à¦¾à¦¸à¦™à§à¦—িক পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾à¦¬à§‹à§°à§° কাৰà§à¦¯à§à¦¯ CreatePartitionDialog Create a Partition à¦à¦–ন বিভাজন বনাওক Si&ze: আয়তন (&z): MiB MiB Partition &Type: বিভাজনৰ পà§à§°à¦•াৰ (&T): Primar&y E&xtended সমà§à¦ªà§à§°à¦¸à¦¾à§°à¦¿à¦¤ (&x) Fi&le System: ফাইল চিছà§à¦Ÿà§‡à¦® (&l): LVM LV name LVM LV নাম &Mount Point: মাউনà§à¦Ÿ পইনà§à¦Ÿ (&M): Flags: ফà§à¦²à§‡à¦— সমূহ: Label for the filesystem FS Label: En&crypt à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§ (&c) Logical যà§à¦•à§à¦¤à¦¿à¦¸à¦®à§à¦®à¦¤ Primary মূখà§à¦¯ GPT GPT Mountpoint already in use. Please select another one. à¦à¦‡à¦Ÿà§‹ মাওনà§à¦Ÿà§ পইনà§à¦Ÿà§ ইতিমধà§à¦¯à§‡ বà§à¦¯à§±à¦¹à¦¾à§° হৈ আছে। অনà§à¦—à§à§°à¦¹ কৰি বেলেগ à¦à¦Ÿà¦¾ বাচনি কৰক। Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. %1 ফাইল চিছটেমৰ সৈতে %4 (%3) ত %2MiBà§° নতà§à¦¨ বিভাজন বনাওক। Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%4</strong>ত নতà§à¦¨ (%3) <strong>%1</strong> ফাইল চিছটেমৰ <strong>%2MiB</strong> বিভাজন কৰক। Creating new %1 partition on %2. %2ত নতà§à¦¨ %1 বিভজন বনাই আছে। The installer failed to create partition on disk '%1'. '%1' ডিসà§à¦•ত নতà§à¦¨ বিভাজন বনোৱাত ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ বিফল হ'ল। 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 উপলবà§à¦§ বিভাজন সমà§à¦ªà¦¾à¦¦à¦¨ কৰক Con&tent: &Keep ৰাখক (&K) Format ফৰà§à¦®à§‡à¦Ÿ Warning: Formatting the partition will erase all existing data. সকিয়নি: বিভাজনটো ফৰমেট কৰিলে উপসà§à¦¥à¦¿à¦¤ থকা গোটেই ডাটা বিলোপ হ'ব। &Mount Point: মাউনà§à¦Ÿ পইনà§à¦Ÿ (&M): Si&ze: আয়তন (&z): MiB MiB Fi&le System: ফাইল চিছটেম: Flags: ফà§à¦²à§‡à¦— সমূহ: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form ৰূপ En&crypt system চিছটেম à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§ কৰক (&c) Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase পাছফà§à§°à§‡à¦› Confirm passphrase পাছফà§à§°à§‡à¦› নিশà§à§±à¦¿à¦¤ কৰক Please enter the same passphrase in both boxes. অনà§à¦—à§à§°à¦¹ কৰি দà§à§Ÿà§‹à¦Ÿà¦¾ বাকচত à¦à¦•ে পাছফà§à§°à§‡à¦› পà§à¦°à¦¬à¦¿à¦·à§à¦Ÿ কৰক। ErrorDialog Details: Would you like to paste the install log to the web? আপà§à¦¨à¦¿ ৱেবত ইণà§à¦¸à§à¦Ÿà¦² ল'গ পেসà§à¦Ÿ কৰিব বিচাৰে নেকি? FillGlobalStorageJob Set partition information বিভাজন তথà§à¦¯ চেতৠকৰক Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. <strong>নতà§à¦¨</strong> %2 চিছটেম বিভাজনত %1 ইনসà§à¦¤à¦² কৰক। Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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> ফাইল চিছটেমৰ সৈতে ফৰà§à¦®à§‡à¦Ÿ কৰক। %1 (%2) partition label %1 (device path %2) %1 (%2) 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) LOSHJob Configuring encrypted swap. à¦à¦¨à§à¦•à§à§°à¦¿à¦ªà§à¦Ÿà§‡à¦¡ সà§à§±à§‡à¦ª কনà§à¦«à¦¿à¦—াৰ কৰি আছে। No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form ৰূপ <h1>License Agreement</h1> <h1>অনà§à¦œà§à¦žà¦¾-পতà§à§° চà§à¦•à§à¦¤à¦¿</h1> I accept the terms and conditions above. মই ওপৰোকà§à¦¤ চৰà§à¦¤à¦¾à§±à¦²à§€ গà§à§°à¦¹à¦£ কৰিছোà¦à¥¤ Please review the End User License Agreements (EULAs). অনà§à¦—à§à§°à¦¹ কৰি বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾à§° অনà§à¦œà§à¦žà¦¾-পতà§à§° চà§à¦•à§à¦¤à¦¿ (EULA) সমূহ ভালদৰে নিৰীকà§à¦·à¦£ কৰক। This setup procedure will install proprietary software that is subject to licensing terms. à¦à¦‡ চেচৠআপ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾à¦‡ মালিকানা চফটৱেৰ ইনসà§à¦¤à¦² কৰিব যিটো অনà§à¦œà§à¦žà¦¾-পতà§à§°à§° চৰà§à¦¤à§° অধীন বিষয় হ'ব। If you do not agree with the terms, the setup procedure cannot continue. যদি আপà§à¦¨à¦¿ চৰà§à¦¤à¦¾à§±à¦²à§€ গà§à§°à¦¹à¦£ নকৰে, চেতৠআপ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ চলাই যাব নোৱাৰিব। This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. à¦à¦‡ চেতৠআপ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾à¦‡ অতিৰিকà§à¦¤ বৈশিষà§à¦Ÿà§à¦¯ থকা সà¦à¦œà§à¦²à¦¿ পà§à§°à¦¦à¦¾à¦¨ কৰি বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾à§° অভিজà§à¦žà¦¤à¦¾ সংবৰà§à¦¦à§à¦§à¦¨ কৰাৰ বাবে মালিকানা চফটৱেৰ ইনসà§à¦¤à¦² কৰিব যিটো অনà§à¦œà§à¦žà¦¾-পতà§à§°à§° চৰà§à¦¤à§° অধীন বিষয় হ'ব। If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. যাদি আপà§à¦¨à¦¿ চৰà§à¦¤à¦¾à§±à¦²à§€ নামানে, মালিকিসà§à§±à¦¤à§à¦¤ থকা চফà§à¦Ÿà§±à§‡à§° ইনসà§à¦¤à¦² নহব আৰৠমà§à¦•লি উৎস বিকলà§à¦ª বà§à¦¯à§±à¦¹à¦¾à§° হ'ব। LicenseViewStep License অনà§à¦œà§à¦žà¦¾-পতà§à§° LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <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 label for netinstall module, Linux kernel কাৰà§à¦£à§‡à¦² Services label for netinstall module, system services সেৰà§à§±à¦¿à¦šà§‡à¦¸ Login label for netinstall module, choose login manager পৰীকà§à¦·à¦£ কৰক Desktop label for netinstall module, choose desktop environment দেসà§à¦•েতোপ Communication label for netinstall module যোগাযোগ Development label for netinstall module পà§à¦°à¦¬à§ƒà¦¦à§à¦§à¦¿ Office label for netinstall module কাৰà§à¦¯à¦¾à¦²à¦¯à¦¼ Multimedia label for netinstall module মালà§à¦Ÿà¦¿à¦®à¦¿à¦¡à¦¿à¦¯à¦¼à¦¾ Internet label for netinstall module ইণà§à¦Ÿà¦¾à§°à¦¨à§‡à¦Ÿ Theming label for netinstall module থিমীং Gaming label for netinstall module খেলা Utilities label for netinstall module সà¦à¦œà§à¦²à¦¿ Applications à¦à¦ªà§à¦²à§€à¦•েছà§à¦¨à¦š 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. সà§à¦šà§€à§° পৰা পণà§à¦¯ à¦à¦Ÿà¦¾ বাচনি কৰক। বাচনি কৰা পণà§à¦¯à¦Ÿà§‹ ইনসà§à¦¤à¦² হ'ব। 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 বিভাজনসমà§à¦¹ Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: বরà§à¦¤à¦®à¦¾à¦¨: After: পিছত: No EFI system partition configured কোনো EFI চিছটেম বিভাজন কনফিগাৰ কৰা হোৱা নাই EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS GPTà§° BIOSত বà§à¦¯à§±à¦¹à¦¾à§°à§° বাবে বিকলà§à¦ª A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted বà§à¦¤à§ বিভাজন à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§ নহয় A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§‡à¦¡ à§°à§à¦Ÿ বিভাজনৰ সৈতে à¦à¦Ÿà¦¾ বেলেগ বà§à¦Ÿ বিভাজন চেতৠআপ কৰা হৈছিল, কিনà§à¦¤à§ বà§à¦Ÿ বিভাজন à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§‡à¦¡ কৰা হোৱা নাই। <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 চিছটেমৰ আৱশà§à¦¯à¦•তাবোৰ 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 StandardButtons &OK ঠিক আছে (&O) &Yes হয় (&Y) &No নহয় (&N) &Cancel বাতিল কৰক (&C) &Close বনà§à¦§ (&C) TrackingInstallJob Installation feedback ইনসà§à¦¤à¦² সমà§à¦¬à¦¨à§à¦§à§€à§Ÿ পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾ Sending installation feedback. ইনà§à¦¸à§à¦¤à¦² সমà§à¦¬à¦¨à§à¦§à§€à§Ÿ পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾ পঠাই আছে। Internal error in install-tracking. ইনà§à¦¸à§à¦¤à¦²-কà§à§°à§à¦Ÿà¦¿à§° আভà§à¦¯à¦¨à§à¦¤à§°à§€à¦£ কà§à§°à§à¦Ÿà¦¿à¥¤ HTTP request timed out. HTTP ৰিকà§à§±à§‡à¦¸à§à¦Ÿà§° সময় উকলি গ'ল। TrackingKUserFeedbackJob KDE user feedback KDE বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾à§° সমà§à¦¬à¦¨à§à¦§à§€à§Ÿ পà§à§°à¦¤à¦¿à¦•à§à§°à§€à§Ÿà¦¾ Configuring KDE user feedback. কনফিগাৰত KDE বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾à§° সমà§à¦¬à¦¨à§à¦§à§€à§Ÿ পà§à§°à¦¤à¦¿à¦•à§à§°à§€à§Ÿà¦¾ Error in KDE user feedback configuration. KDE বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾à§° ফিডবেক কনফিগাৰেচনৰ কà§à§°à§à¦Ÿà¦¿à¥¤ Could not configure KDE user feedback correctly, script error %1. KDE বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾à§° পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾ ঠাকভাৱে কনà§à¦«à¦¿à¦—াৰ কৰিব পৰা নগ'ল, লিপি কà§à§°à§à¦Ÿà¦¿ %1। Could not configure KDE user feedback correctly, Calamares error %1. KDE বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾à§° পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾ ঠাকভাৱে কনà§à¦«à¦¿à¦—াৰ কৰিব পৰা নগ'ল, কেলামাৰেচ কà§à§°à§à¦Ÿà¦¿ %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 পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾ UmountJob Unmount file systems. ফাইল চিছটেম​বোৰ মাউণà§à¦Ÿà§° পৰা আতৰাওক। No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>যদি à¦à¦Ÿà¦¾à¦¤à¦•ৈ বেছি বà§à¦¯à¦•à§à¦¤à¦¿à§Ÿà§‡ à¦à¦‡à¦Ÿà§‹ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§° বà§à¦¯à§±à¦¹à¦¾à§° কৰে, আপà§à¦¨à¦¿ চেতৠআপৰ পিছত বহà§à¦¤à§‹ à¦à¦•াউনà§à¦Ÿ বনাব পাৰে।</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>যদি à¦à¦Ÿà¦¾à¦¤à¦•ৈ বেছি বà§à¦¯à¦•à§à¦¤à¦¿à§Ÿà§‡ à¦à¦‡à¦Ÿà§‹ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§° বà§à¦¯à§±à¦¹à¦¾à§° কৰে, আপà§à¦¨à¦¿ ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹à§° পিছত বহà§à¦¤à§‹ à¦à¦•াউনà§à¦Ÿ বনাব পাৰে।</small> UsersQmlViewStep Users বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰীসকল UsersViewStep Users বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰীসকল VariantModel Key Column header for key/value কি Value Column header for key/value মান VolumeGroupBaseDialog Create Volume Group ভলিউমৠগোট List of Physical Volumes ফিজিকেল ভলিউমবোৰৰ সà§à¦šà§€ Volume Group Name: ভলিউমৠগোটৰ নাম: Volume Group Type: ভলিউমৠগোটৰ পà§à§°à¦•াৰ: Physical Extent Size: ফিজিকেল ডিসà§à¦•à§° আয়তন সীমা: MiB MiB Total Size: মà§à¦  আয়তন: Used Size: বà§à¦¯à§±à¦¹à¦¾à§° কৰা আয়তন: Total Sectors: মà§à¦  চেকà§à¦Ÿà§°à¦¬à§‹à§°: Quantity of LVs: LVবোৰৰ সংখà§à¦¯à¦¾: WelcomePage Form ৰূপ Select application and system language à¦à¦ªà§à¦²à¦¿à¦•েচন আৰৠচিছটেম ভাষা বাচনি কৰক 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) %1 support %1 সহায় About %1 setup %1 চেতৠআপ পà§à§°à¦—à§à§°à¦¾à¦®à§° বিষয়ে About %1 installer %1 ইনসà§à¦¤à¦²à¦¾à§°à§° বিষয়ে WelcomeQmlViewStep Welcome আদৰণি WelcomeViewStep Welcome আদৰণি ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error কনফিগাৰেচন তà§à§°à§à¦Ÿà¦¿ No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About সমà§à¦ªà¦°à§à¦•ে Debug Show information about Calamares Show debug information দিবাগ তথà§à¦¯ দেখাওক finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>ভাষা</h1> </br> চিছটেমৰ সà§à¦¥à¦¾à¦¨à§€à§Ÿ ছেটিংসৠকমাণà§à¦¡à¦²à¦¾à¦‡à¦¨à§° কিছà§à¦®à¦¾à¦¨ উপভোকà§à¦¤à¦¾ ইনà§à¦Ÿà¦¾à§°à¦«à§‡à¦› উপাদানৰ ভাষা আৰৠআখৰবোৰত পà§à§°à¦­à¦¾à§± পেলায়। বৰà§à¦¤à¦®à¦¾à¦¨ ছেটিংসৠহ'ল: <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>সà§à¦¥à¦¾à¦¨à§€à¦¯à¦¼</h1> </br> চিছটেমৰ সà§à¦¥à¦¾à¦¨à§€à§Ÿ ছেটিংসে উপাদানৰ নমà§à¦¬à§° আৰৠতাৰিখ সজà§à¦œà¦¾ পà§à§°à¦­à¦¾à§± পেলায়। বৰà§à¦¤à¦®à¦¾à¦¨ ছেটিংসৠহ'ল: <strong>%1</strong>. Back পাছলৈ keyboardq To activate keyboard preview, select a layout. Keyboard Model: কিবোৰà§à¦¡ মডেল: Layouts লেআউট Type here to test your keyboard আপোনাৰ কিবোৰà§à¦¡ পৰীকà§à¦·à¦¾ কৰিবলৈ ইয়াত টাইপ কৰক Variants ভিনà§à¦¨ à§°à§à¦ª localeq Change সলনি notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>à¦à¦‡ খিনি ৰিলিজ নোতৰ উদাহৰণ </p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> 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> Support সহায় Known issues জà§à¦žà¦¾à¦¤ সমসà§à¦¯à¦¾ Release notes মà§à¦•à§à¦¤à¦¿ টোকা Donate দান কৰক calamares-calamares-2d126ae/lang/calamares_ast.ts000066400000000000000000006546761430147706700221270ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Llimpieza de los montaxes pa les operaciones de particionáu en %1. Clearing mounts for partitioning operations on %1. Llimpiando los montaxes pa les operaciones de particionáu en %1. Cleared all mounts for %1 Llimpiáronse tolos montaxes de %1 ClearTempMountsJob Clear all temporary mounts. Llimpieza de tolos montaxes temporales. Clearing all temporary mounts. Llimpiando tolos 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. Packages Paquetes Install option: <strong>%1</strong> None Summary Sumariu This is an overview of what will happen once you start the setup procedure. Esto ye una previsualización de lo que va asoceder nel momentu qu'anicies el procesu de configuración. This is an overview of what will happen once you start the install procedure. Esto ye una previsualización de lo que va asoceder nel momentu qu'anicies el procesu d'instalación. ContextualProcessJob Contextual Processes Job Trabayu de procesos contestuales CreatePartitionDialog Create a Partition Creación d'una partición Si&ze: Tama&ñu: MiB MiB Partition &Type: &Triba de la partición: Primar&y E&xtended E&stendida Fi&le System: Sistema de &ficheros: LVM LV name Nome del volume llóxicu de LVM &Mount Point: Puntu de &montaxe: Flags: Banderes: Label for the filesystem FS Label: En&crypt &Cifrar Logical Llóxica Primary Primaria GPT GPT Mountpoint already in use. Please select another one. El puntu de montaxe yá ta n'usu. Esbilla otru, por favor. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Creando una partición %1 en %2. The installer failed to create partition on disk '%1'. L'instalador falló al crear la partición nel discu «%1». 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 Con&tent: &Keep &Caltener Format Formatiar Warning: Formatting the partition will erase all existing data. Alvertencia: Formatiar la partición va desaniciar tolos datos esistentes. &Mount Point: Puntu de &montaxe: Si&ze: Tama&ñu: MiB MiB Fi&le System: Sistema de &ficheros: Flags: Banderes: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formulariu En&crypt system &Cifrar el sistema Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Fras de pasu Confirm passphrase Confirmación de la fras de pasu Please enter the same passphrase in both boxes. Introduz la mesma fras de pasu en dambes caxes, por favor. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Afitamientu de la información de les particiones Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Va instalase %1 na partición %2 <strong>nueva</strong> del sistema. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Configurando l'intercambéu cifráu. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formulariu <h1>License Agreement</h1> I accept the terms and conditions above. Aceuto los términos y condiciones d'enriba. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Esti procedimientu va instalar software privativu que ta suxetu a términos de llicencia. If you do not agree with the terms, the setup procedure cannot continue. Si nun aceutes los términos, el procedimientu de configuración nun pue siguir. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Esti procedimientu de configuración pue instalar software privativu que ta suxetu a términos de llicencia pa fornir carauterístiques adicionales y ameyorar la esperiencia d'usuariu. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Si nun aceutes los términos, el software privativu nun va instalase y van usase les alternatives de códigu abiertu. 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 label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Servicios Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Escritoriu Communication label for netinstall module Comunicación Development label for netinstall module Desendolcu Office label for netinstall module Oficina Multimedia label for netinstall module Multimedia Internet label for netinstall module Internet Theming label for netinstall module Estilu Gaming label for netinstall module Utilities label for netinstall module Utilidaes Applications Aplicaciones 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Anguaño: After: Dempués: No EFI system partition configured Nun se configuró nenguna partición del sistema EFI EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted La partición d'arrinque nun ta cifrada A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Configuróse una partición d'arrinque xunto con una partición raigañu cifrada pero la partición d'arrinque nun ta cifrada.<br/><br/>Hai problemes de seguranza con esta triba de configuración porque los ficheros importantes del sistema caltiénense nuna partición ensin cifrar.<br/>Podríes siguir si quixeres pero'l desbloquéu del sistema de ficheros va asoceder más sero nel aniciu del sistema.<br/>Pa cifrar la partición raigañu, volvi p'atrás y recreala esbillando <strong>Cifrar</strong> na ventana de creación de particiones. has at least one disk device available. tien polo menos un preséu disponible d'almacenamientu There are no partitions to install on. Nun hai particiones nes qu'instalar. 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 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 StandardButtons &OK &Aceutar &Yes &Sí &No &Non &Cancel &Encaboxar &Close &Zarrar TrackingInstallJob Installation feedback Instalación del siguimientu Sending installation feedback. Unviando'l siguimientu de la instalación. Internal error in install-tracking. Fallu internu n'install-tracking. HTTP request timed out. Escosó'l tiempu d'espera de la solicitú HTTP. 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 UmountJob Unmount file systems. Desmontaxe de sistemes de ficheros. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si va usar l'ordenador más d'una persona, pues crear más cuentes tres la configuración.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si va usar l'ordenador más d'una persona, pues crear más cuentes tres la instalación.</small> UsersQmlViewStep 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 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 %1 support Sofitu de %1 About %1 setup Tocante a la configuración de %1 About %1 installer Tocante al instalador de %1 WelcomeQmlViewStep Welcome Acoyida WelcomeViewStep Welcome Acoyida ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information Amosar la depuración finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Modelu del tecláu: Layouts Type here to test your keyboard Teclexa equí pa probar el tecláu Variants Variantes localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? ¿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> Support Known issues Problemes conocíos Release notes Notes del llanzamientu Donate calamares-calamares-2d126ae/lang/calamares_az.ts000066400000000000000000007201671430147706700217370ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> %3 <strong><br/><br/> üçün <h1>%1</h1> </strong>%2<br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <a href="https://calamares.io/team/"> Calamares komandası</a>na vÉ™ <a href="https://www.transifex.com/calamares/calamares/">Calamares tÉ™rcüməçilÉ™r komandası</a>na təşəkkürlÉ™r. <br/><br/><a href="https://calamares.io/">Calamres-in inkiÅŸafı<br/> <a href="http://www.blue-systems.com/">Blue Sytems</a> Azad proqram tÉ™minatı tÉ™rÉ™findÉ™n dÉ™stÉ™klÉ™nir. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Müəllif Hüquqları %1-%2 %3 &lt;%4&gt; <br/> AutoMountManagementJob Manage auto-mount settings Avtomatik qoÅŸulma ayarlarını idarÉ™ edin BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. Sistemin <strong>açılış mühiti</strong>.<br><br>KöhnÉ™ x86 sistemlÉ™r yalnız <strong>BIOS</strong> dÉ™stÉ™klÉ™yir.<br>Müasir sistemlÉ™r isÉ™ adÉ™tÉ™n <strong>EFI</strong> istifadÉ™ edir, lakin açılış mühiti É™gÉ™r uyÄŸun rejimdÉ™ baÅŸladılmışsa, hÉ™mçinin BİOS istiafadÉ™ edÉ™ bilÉ™r. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Bu sistem <strong>EFI</strong> açılış mühiti ilÉ™ baÅŸladılıb.<br><br>EFİ ilÉ™ baÅŸlamanı ayarlamaq üçün quraÅŸdırıcı <strong>EFI Sistemi BölmÉ™si</strong> üzÉ™rindÉ™ <strong>GRUB</strong> vÉ™ ya <strong>systemd-boot</strong> kimi yüklÉ™yici istifadÉ™ etmÉ™lidir. Bunlar avtomatik olaraq seçilÉ™ bilir, lakin istÉ™diyiniz halda diskdÉ™ bu bölmÉ™lÉ™ri özünüz É™l ilÉ™ seçərÉ™k bölÉ™ bilÉ™rsiniz. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Bu sistem <strong>BIOS</strong> önyüklÉ™yici mühiti ilÉ™ iÅŸÉ™ salındı. <br> <br> BIOS mühitindÉ™n baÅŸlatmanı tÉ™nzimlÉ™mÉ™k üçün, bu quraÅŸdırıcı, ya bölmÉ™nin É™vvÉ™lindÉ™ ya da bölmÉ™lÉ™r cÉ™dvÉ™linin yanında <strong>Æsas ÖnyüklÉ™yici Qeydi</strong> bölmÉ™sindÉ™ <strong>GRUB</strong> kimi bir önyüklÉ™yici quraÅŸdırmalıdır (buna üstünlük verilir). Bu, siz É™l ilÉ™ bölmÉ™ yaratmadığınız halda öz-özünÉ™ quraÅŸdırılır. ÆgÉ™r cÉ™dvÉ™li siz bölsÉ™niz hÉ™r bir bölmÉ™ni ayrıca ayarlamalısınız. BootLoaderModel Master Boot Record of %1 %1 ÆsasÖnyüklÉ™yici Qeydi Boot Partition ÖnyüklÉ™yici bölmÉ™si System Partition Sistem bölmÉ™si Do not install a boot loader ÖnyüklÉ™yici quraÅŸdırmayın %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page BoÅŸ SÉ™hifÉ™ Calamares::DebugWindow Form Format GlobalStorage ÜmumiYaddaÅŸ JobQueue TapşırıqSırası Modules Modullar Type: Növ: none heç biri Interface: İnterfeys: Crashes Calamares, so that Dr. Konqui can look at it. Calamares çökür, belÉ™ ki, Dr. Konqui onu görÉ™ bilir. Reloads the stylesheet from the branding directory. Üslub cÉ™dvÉ™lini marka kataloqundan yenidÉ™n yüklÉ™yir. Uploads the session log to the configured pastebin. Sessiya jurnalını konfiqurasiya edilmiÅŸ pastebin'É™ yüklÉ™yir. Send Session Log Sessiya jurnalını göndÉ™rin Reload Stylesheet Üslub cÉ™dvÉ™lini yenidÉ™n yüklÉ™mÉ™k Displays the tree of widget names in the log (for stylesheet debugging). (Üslub cÉ™dvÉ™li sazlamaları üçün) Jurnalda vidjet adları aÄŸacını göstÉ™rir. Widget Tree VidjetlÉ™r aÄŸacı Debug information Sazlama mÉ™lumatları Calamares::ExecutionViewStep Set up Ayarlamaq Install QuraÅŸdırmaq Calamares::FailJob Job failed (%1) (%1) Tapşırığı yerinÉ™ yetirmÉ™k mümkün olmadı Programmed job failure was explicitly requested. Proqramın iÅŸi, istifadəçi tÉ™rÉ™findÉ™n dayandırıldı. Calamares::JobThread Done QuraÅŸdırılma baÅŸa çatdı Calamares::NamedJob Example job (%1) Tapşırıq nümunÉ™si (%1) Calamares::ProcessJob Run command '%1' in target system. '%1' É™mrini hÉ™dÉ™f sistemdÉ™ baÅŸlatmaq. Run command '%1'. '%1' É™mrini baÅŸlatmaq. Running command %1 %2 %1 É™mri icra olunur %2 Calamares::PythonJob Running %1 operation. %1 É™mÉ™liyyatı icra olunur. Bad working directory path İş qovluÄŸuna sÉ™hv yol Working directory %1 for python job %2 is not readable. %1 qovluÄŸu %2 python iÅŸlÉ™ri üçün açıla bilmir. Bad main script file Korlanmış É™sas É™mrlÉ™r faylı Main script file %1 for python job %2 is not readable. %1 É™sas É™mrlÉ™r faylı %2 python iÅŸlÉ™ri üçün açıla bilmir. Boost.Python error in job "%1". Boost.Python iÅŸ xÉ™tası "%1". Calamares::QmlViewStep Loading ... YüklÉ™nir... QML Step <i>%1</i>. QML addımı <i>%1</i>. Loading failed. YüklÉ™nmÉ™ alınmadı. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. <i>%1</i>üçün tÉ™lÉ™blÉ™rin yoxlanılması baÅŸa çatdı. Waiting for %n module(s). %n modul üçün gözlÉ™mÉ™. %n modul(lar) üçün gözlÉ™mÉ™. (%n second(s)) (%n saniyÉ™(lÉ™r)) (%n saniyÉ™) System-requirements checking is complete. Sistem uyÄŸunluqları yoxlaması baÅŸa çatdı. Calamares::ViewManager Setup Failed QuraÅŸdırılma xÉ™tası Installation Failed QuraÅŸdırılma alınmadı Error XÉ™ta &Yes &BÉ™li &No &Xeyr &Close &BaÄŸlamaq Install Log Paste URL Jurnal yerləşdirmÉ™ URL-nu daxil etmÉ™k The upload was unsuccessful. No web-paste was done. YüklÉ™mÉ™ uÄŸursuz oldu. Heç nÉ™ vebdÉ™ daxil edilmÉ™di. Install log posted to %1 Link copied to clipboard QuraÅŸdırma jurnalını burada yazın %1 Keçid mübadilÉ™ yaddaşına kopyalandı Calamares Initialization Failed Calamares iÅŸÉ™ salına bilmÉ™di %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 quraÅŸdırılmadı. Calamares konfiqurasiya edilmiÅŸ modulların hamısını yüklÉ™yÉ™ bilmÉ™di. Bu Calamares'i, sizin distribütör tÉ™rÉ™findÉ™n necÉ™ istifadÉ™ edilmÉ™sindÉ™n asılı olan bir problemdir. <br/>The following modules could not be loaded: <br/>YüklÉ™nÉ™ bilmÉ™yÉ™n modullar aÅŸağıdakılardır: Continue with setup? QuraÅŸdırılma davam etdirilsin? Continue with installation? QuraÅŸdırılma davam etdirilsin? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %1 quraÅŸdırıcı proqramı %2 quraÅŸdırmaq üçün Sizin diskdÉ™ dÉ™yiÅŸiklik etmÉ™yÉ™ hazırdır.<br/><strong>Bu dÉ™yiÅŸikliyi ləğv etmÉ™k mümkün olmayacaq.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 quraÅŸdırıcı proqramı %2 quraÅŸdırmaq üçün Sizin diskdÉ™ dÉ™yiÅŸiklik etmÉ™yÉ™ hazırdır.<br/><strong>Bu dÉ™yiÅŸikliyi ləğv etmÉ™k mümkün olmayacaq.</strong> &Set up now &İndi ayarlamaq &Install now Q&uraÅŸdırmaÄŸa baÅŸlamaq Go &back &GeriyÉ™ &Set up A&yarlamaq &Install Qu&raÅŸdırmaq Setup is complete. Close the setup program. QuraÅŸdırma baÅŸa çatdı. QuraÅŸdırma proqramını baÄŸlayın. The installation is complete. Close the installer. QuraÅŸdırma baÅŸa çatdı. QuraÅŸdırıcını baÄŸlayın. Cancel setup without changing the system. Sistemi dÉ™yiÅŸdirmÉ™dÉ™n quraÅŸdırmanı ləğv etmÉ™k. Cancel installation without changing the system. SistemÉ™ dÉ™yiÅŸiklik etmÉ™dÉ™n quraÅŸdırmadan imtina etmÉ™k. &Next İ&rÉ™li &Back &GeriyÉ™ &Done &Hazır &Cancel İm&tina etmÉ™k Cancel setup? QuraÅŸdırılmadan imtina edilsin? Cancel installation? YüklÉ™nmÉ™dÉ™n imtina edilsin? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Siz doÄŸrudanmı hazırkı quraÅŸdırmadan imtina etmÉ™k istÉ™yirsiniz? Bu proqramdan çıxılacaq vÉ™ bütün dÉ™yiÅŸikliklÉ™r itirilÉ™cÉ™kdir. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Siz doÄŸrudanmı hazırkı yüklÉ™nmÉ™dÉ™n imtina etmÉ™k istÉ™yirsiniz? Bu proqramdan çıxılacaq vÉ™ bütün dÉ™yiÅŸikliklÉ™r itirilÉ™cÉ™kdir. CalamaresPython::Helper Unknown exception type NamÉ™lum istisna hal unparseable Python error görünmÉ™miÅŸ Python xÉ™tası unparseable Python traceback görünmÉ™miÅŸ Python izi Unfetchable Python error. Oxunmayan Python xÉ™tası. CalamaresWindow %1 Setup Program %1 QuraÅŸdırıcı proqram %1 Installer %1 QuraÅŸdırıcı ChangeFilesystemLabelJob Set filesystem label on %1. Fayl sistemi yarlığını %1 üzÉ™rindÉ™ qurun. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. <strong>%1</strong> fayl sistemi yarlığını <strong>%2</strong> bölmÉ™sinÉ™ qurun. The installer failed to update partition table on disk '%1'. QuraÅŸdırıcının '%1' diskindÉ™ki bölmÉ™ni yenilÉ™mÉ™si baÅŸ tutmadı. CheckerContainer Gathering system information... Sistem mÉ™lumatları toplanır ... ChoicePage Form Format Select storage de&vice: YaddaÅŸ ci&hazını seçmÉ™k: Current: Cari: After: Sonra: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Æl ilÉ™ bölmÉ™k</strong><br/>Siz bölmÉ™ni özünüz yarada vÉ™ ölçüsünü dÉ™yiÅŸÉ™ bilÉ™rsiniz. Reuse %1 as home partition for %2. %1 Ev bölmÉ™si olaraq %2 üçün istifadÉ™ edilsin. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>KiçiltmÉ™k üçün bir bölmÉ™ seçərÉ™k altdakı çübüğü sürüşdürÉ™rÉ™k ölçüsünü verin</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 %2MB-a qÉ™dÉ™r azalacaq vÉ™ %4 üçün yeni bölmÉ™ %3MB disk bölmÉ™si yaradılacaq. Boot loader location: Ön yüklÉ™yici (boot) yeri: <strong>Select a partition to install on</strong> <strong>QuraÅŸdırılacaq disk bölmÉ™sini seçin</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI sistem bölmÉ™si tapılmadı. GeriyÉ™ qayıdın vÉ™ %1 bölmÉ™sini É™llÉ™ yaradın. The EFI system partition at %1 will be used for starting %2. %1 EFI sistemi %2 baÅŸlatmaq üçün istifadÉ™ olunacaqdır. EFI system partition: EFI sistem bölmÉ™si: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazıda É™mÉ™liyyat sistemi görünmür. NÉ™ etmÉ™k istÉ™yÉ™rdiniz?<br/>Bu cihazda dÉ™yiÅŸiklik etmÉ™dÉ™n öncÉ™ siz seçiminizi dÉ™qiqləşdirÉ™, dÉ™yiÅŸÉ™ vÉ™ tÉ™sdiq edÉ™ bilÉ™rsiniz. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Diski tÉ™mizlÉ™mÉ™k</strong><br/> <font color="red">SilmÉ™k</font>seçimi hal-hazırda, seçilmiÅŸ diskdÉ™ki bütün verilÉ™nlÉ™ri silÉ™cÉ™kdir. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Yanına quraÅŸdırın</strong><br/>QuraÅŸdırıcı, bölmÉ™ni kiçildÉ™rÉ™k %1 üçün boÅŸ disk sahÉ™si yaradacaqdır. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>BölmÉ™ni baÅŸqası ilÉ™ É™vÉ™zlÉ™mÉ™k</strong><br/>BölmÉ™ni %1 ilÉ™ É™vÉ™zlÉ™yir. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda %1 var. NÉ™ etmÉ™k istÉ™yirsiniz?<br/>Bu cihazda dÉ™yiÅŸiklik etmÉ™dÉ™n öncÉ™ siz seçiminizi dÉ™qiqləşdirÉ™, dÉ™yiÅŸÉ™ vÉ™ tÉ™sdiq edÉ™ bilÉ™rsiniz. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda artıq bir É™mÉ™liyyat sistemi var. NÉ™ etmÉ™k istÉ™rdiniz?.<br/>Bu cihazda dÉ™yiÅŸiklik etmÉ™dÉ™n öncÉ™ siz seçiminizi dÉ™qiqləşdirÉ™, dÉ™yiÅŸÉ™ vÉ™ tÉ™sdiq edÉ™ bilÉ™rsiniz. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda bir neçə É™mÉ™liyyat sistemi mövcuddur. NÉ™ etmÉ™k istÉ™rdiniz? Bu cihazda dÉ™yiÅŸiklik etmÉ™dÉ™n öncÉ™ siz seçiminizi dÉ™qiqləşdirÉ™, dÉ™yiÅŸÉ™ vÉ™ tÉ™sdiq edÉ™ bilÉ™rsiniz. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> Bu yaddaÅŸ qurÄŸusunda artıq É™mÉ™liyyat sistemi var, lakin, bölmÉ™ cÉ™dvÉ™li <strong>%1</strong>, lazım olan <strong>%2</strong> ilÉ™ fÉ™rqlidir.<br/> This storage device has one of its partitions <strong>mounted</strong>. Bu yaddaÅŸ qurÄŸusunda bölmÉ™lÉ™rdÉ™n biri <strong>quraÅŸdırılmışdır</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. Bu yaddaÅŸ qurÄŸusu <strong>qeyri-aktiv RAİD</strong> qurÄŸusunun bir hissÉ™sidir. No Swap MübadilÉ™ bölmÉ™si olmadan Reuse Swap Mövcud mübadilÉ™ bölmÉ™sini istifadÉ™ etmÉ™k Swap (no Hibernate) MübadilÉ™ bölmÉ™si (yuxu rejimi olmadan) Swap (with Hibernate) MübadilÉ™ bölmÉ™si (yuxu rejimi ilÉ™) Swap to file MübadilÉ™ faylı ClearMountsJob Successfully unmounted %1. %1 uÄŸurla ayrıldı. Successfully disabled swap %1. %1 mübadilÉ™ bölmÉ™si uÄŸurla söndürüldü. Successfully cleared swap %1. %1 mübadilÉ™ bölmÉ™si uÄŸurla tÉ™mizlÉ™ndi Successfully closed mapper device %1. YerləşdirmÉ™ cihazı %1 uÄŸurla baÄŸlandı Successfully disabled volume group %1. Tutum qrupu %1, uÄŸurla söndürüldü Clear mounts for partitioning operations on %1 %1-dÉ™ bölmÉ™ É™mÉ™liyyatı üçün qoÅŸulma nöqtÉ™lÉ™rini silmÉ™k Clearing mounts for partitioning operations on %1. %1-dÉ™ bölmÉ™ É™mÉ™liyyatı üçün qoÅŸulma nöqtÉ™lÉ™rini silinir. Cleared all mounts for %1 %1 üçün bütün qoÅŸulma nöqtÉ™lÉ™ri silindi ClearTempMountsJob Clear all temporary mounts. Bütün müvÉ™qqÉ™ti qoÅŸulma nöqtÉ™lÉ™rini ləğv etmÉ™k. Clearing all temporary mounts. Bütün müvÉ™qqÉ™ti qoÅŸulma nöqtÉ™lÉ™ri ləğv edilir. Cleared all temporary mounts. Bütün müvÉ™qqÉ™ti qoÅŸulma nöqtÉ™lÉ™ri ləğv edildi. CommandList Could not run command. Æmri ictra etmÉ™k mümkün olmadı. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Æmr, quraÅŸdırı mühitindÉ™ icra olunur vÉ™ kök qovluÄŸa yolu bilinmÉ™lidir, lakin rootMountPoint - KökQoÅŸulmaNöqtÉ™si - aÅŸkar edilmÉ™di. The command needs to know the user's name, but no username is defined. Æmr üçün istifadəçi adı vacibdir., lakin istifadəçi adı müəyyÉ™n edilmÉ™di. Config Set keyboard model to %1.<br/> Klaviatura modelini %1 olaraq tÉ™yin etmÉ™k.<br/> Set keyboard layout to %1/%2. Klaviatura qatını %1/%2 olaraq tÉ™yin etmÉ™k. Set timezone to %1/%2. Saat quraÅŸağını tÉ™yin etmÉ™k %1/%2 The system language will be set to %1. Sistem dili %1 tÉ™yin edilÉ™cÉ™k. The numbers and dates locale will be set to %1. Yerli say vÉ™ tarix formatı %1 tÉ™yin olunacaq. Network Installation. (Disabled: Incorrect configuration) ŞəbÉ™kÉ™ üzÉ™rindÉ™n quraÅŸdırmaq (Söndürüldü: SÉ™hv tÉ™nzimlÉ™nmÉ™) Network Installation. (Disabled: Received invalid groups data) ŞəbÉ™kÉ™ üzÉ™rindÉ™n quraÅŸdırmaq (Söndürüldü: qruplar haqqında sÉ™hv mÉ™lumatlar alındı) Network Installation. (Disabled: Internal error) ŞəbÉ™kÉ™nin quraÅŸdırılması. (Söndürüldü: daxili xÉ™ta) Network Installation. (Disabled: No package list) ŞəbÉ™kÉ™nin quraÅŸdırılması. (Söndürüldü: Paket siyahısı yoxdur) Package selection Paket seçimi Network Installation. (Disabled: Unable to fetch package lists, check your network connection) ŞəbÉ™kÉ™ üzÉ™rindÉ™n quraÅŸdırmaq (Söndürüldü: paket siyahıları qÉ™bul edilmir, ÅŸÉ™bÉ™kÉ™ baÄŸlantınızı yoxlayın) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Bu kompüter, %1 quraÅŸdırılması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilmÉ™z. <a href="#details">Ætraflı mÉ™lumatlar...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Bu kompüter, %1 quraÅŸdırılması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilmÉ™z. <a href="#details">Ætraflı mÉ™lumatlar...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Bu kompüter, %1 quraÅŸdırılması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilÉ™r, lakin bÉ™zi imkanları É™lçatmaz ola bilÉ™r. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Bu kompüter, %1 quraÅŸdırılması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilÉ™r, lakin bÉ™zi imkanları É™lçatmaz ola bilÉ™r. This program will ask you some questions and set up %2 on your computer. Bu proqram sizÉ™ bÉ™zi suallar verÉ™cÉ™k vÉ™ %2 É™mÉ™liyyat sistemini sizin komputerinizÉ™ qurmaÄŸa kömÉ™k edÉ™cÉ™k. <h1>Welcome to the Calamares setup program for %1</h1> <h1>%1 üçün Calamares quraÅŸdırma proqramına xoÅŸ gÉ™ldiniz!</h1> <h1>Welcome to %1 setup</h1> <h1>%1 quraÅŸdırmaq üçün xoÅŸ gÉ™ldiniz</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>%1 üçün Calamares quraÅŸdırıcısına xoÅŸ gÉ™ldiniz!</h1> <h1>Welcome to the %1 installer</h1> <h1>%1 quraÅŸdırıcısına xoÅŸ gÉ™ldiniz</h1> Your username is too long. İstifadəçi adınız çox uzundur. '%1' is not allowed as username. İstifadəçi adı '%1' ola bilmÉ™z Your username must start with a lowercase letter or underscore. İstifadəçi adınız yalnız kiçik vÉ™ ya alt cizgili hÉ™rflÉ™rdÉ™n ibarÉ™t olmalıdır. Only lowercase letters, numbers, underscore and hyphen are allowed. Yalnız kiçik hÉ™rflÉ™rdÉ™n, simvollardan, alt cizgidÉ™n vÉ™ defisdÉ™n istifadÉ™ oluna bilÉ™r. Your hostname is too short. Host adınız çox qısadır. Your hostname is too long. Host adınız çox uzundur. '%1' is not allowed as hostname. Host_adı '%1' ola bilmÉ™z Only letters, numbers, underscore and hyphen are allowed. Yalnız kiçik hÉ™rflÉ™rdÉ™n, saylardan, alt cizgidÉ™n vÉ™ defisdÉ™n istifadÉ™ oluna bilÉ™r. Your passwords do not match! ÅžifrÉ™nizin tÉ™krarı eyni deyil! OK! OLDU! Setup Failed QuraÅŸdırılma xÉ™tası Installation Failed QuraÅŸdırılma alınmadı The setup of %1 did not complete successfully. %1 qurulması uÄŸurla çaÅŸa çatmadı. The installation of %1 did not complete successfully. %1 quraÅŸdırılması uÄŸurla tamamlanmadı. Setup Complete QuraÅŸdırma tamamlandı Installation Complete QuraÅŸdırma tamamlandı The setup of %1 is complete. %1 quraÅŸdırmaq baÅŸa çatdı. The installation of %1 is complete. %1-n quraÅŸdırılması baÅŸa çatdı. Package Selection Paket seçimi Please pick a product from the list. The selected product will be installed. LütfÉ™n mÉ™hsulu siyahıdan seçin. SeçilmiÅŸ mÉ™hsul quraÅŸdırılacaqdır. Packages PaketlÉ™r Install option: <strong>%1</strong> QuraÅŸdırma seçimi: <strong>%1</strong> None Heç biri Summary NÉ™ticÉ™ This is an overview of what will happen once you start the setup procedure. Bu quraÅŸdırma proseduruna baÅŸladıqdan sonra nÉ™lÉ™rin baÅŸ verÉ™cÉ™yinÉ™ ümumi baxışdır. This is an overview of what will happen once you start the install procedure. Bu quraÅŸdırma proseduruna baÅŸladıqdan sonra nÉ™lÉ™rin baÅŸ verÉ™cÉ™yinÉ™ ümumi baxışdır. ContextualProcessJob Contextual Processes Job ŞəraitÉ™ baÄŸlı proseslÉ™rlÉ™ iÅŸ CreatePartitionDialog Create a Partition BölmÉ™ yaratmaq Si&ze: Ö&lçüsü: MiB MB Partition &Type: BölmÉ™nin &növlÉ™ri: Primar&y &İlkin E&xtended &GeniÅŸlÉ™ndirilmiÅŸ Fi&le System: Fay&l Sistemi: LVM LV name LVM LV adı &Mount Point: QoÅŸul&ma NöqtÉ™si: Flags: Bayraqlar: Label for the filesystem Fayl sitemi üçün yarlıq FS Label: FS yarlığı: En&crypt &ÅžifrÉ™lÉ™mÉ™k Logical MÉ™ntiqi Primary Æsas GPT GPT Mountpoint already in use. Please select another one. QoÅŸulma nöqtÉ™si artıq istifadÉ™ olunur. LütfÉ™n baÅŸqasını seçin. Mountpoint must start with a <tt>/</tt>. QoÅŸulma nöqtÉ™si <tt>/</tt> ilÉ™ baÅŸlamalıdır. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Yeni %1MiB bölmÉ™sini %3 (%2) üzÉ™rindÉ™ %4 giriÅŸlÉ™ri ilÉ™ yaradın. Create new %1MiB partition on %3 (%2). Yeni %1MiB bölmÉ™sini %3 (%2) üzÉ™rindÉ™ yaradın. Create new %2MiB partition on %4 (%3) with file system %1. %1 fayl sistemi ilÉ™ %4 (%3)-dÉ™ yeni %2MB bölmÉ™ yaratmaq. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Yeni <strong>%1MiB</strong> bölmÉ™sini <strong>%3</strong> (%2) üzÉ™rindÉ™ <em>%4</em> giriÅŸlÉ™rindÉ™ yaradın. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Yeni <strong>%1MiB</strong> bölmÉ™sini <strong>%3</strong> (%2) üzÉ™rindÉ™ yaradın. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%1</strong> fayl sistemi ilÉ™ <strong>%4</strong> (%3)-dÉ™ yeni <strong>%2MB</strong> bölmÉ™ yaratmaq. Creating new %1 partition on %2. %2-dÉ™ yeni %1 bölmÉ™ yaratmaq. The installer failed to create partition on disk '%1'. QuraÅŸdırıcı '%1' diskindÉ™ bölmÉ™ yarada bilmÉ™di. CreatePartitionTableDialog Create Partition Table BölmÉ™lÉ™r CÉ™dvÉ™li yaratmaq Creating a new partition table will delete all existing data on the disk. BölmÉ™lÉ™r CÉ™dvÉ™li yaratmaq, bütün diskdÉ™ olan mÉ™lumatların hamısını silÉ™cÉ™k. What kind of partition table do you want to create? Hansı BölmÉ™ CÉ™dvÉ™li yaratmaq istÉ™yirsiniz? Master Boot Record (MBR) Ön yüklÉ™mÉ™ BölmÉ™si (MBR) GUID Partition Table (GPT) GUID bölmÉ™lÉ™r cÉ™dvÉ™li (GPT) CreatePartitionTableJob Create new %1 partition table on %2. %2-dÉ™ yeni %1 bölmÉ™lÉ™r cÉ™dvÉ™li yaratmaq. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3)`dÉ™ yeni <strong>%1</strong> bölmÉ™lÉ™r cÉ™dvÉ™li yaratmaq. Creating new %1 partition table on %2. %2-dÉ™ yeni %1 bölmÉ™si yaratmaq. The installer failed to create a partition table on %1. QuraÅŸdırıcı %1-dÉ™ bölmÉ™lÉ™r cÉ™dvÉ™li yarada bilmÉ™di. CreateUserJob Create user %1 %1 İstifadəçi hesabı yaratmaq Create user <strong>%1</strong>. <strong>%1</strong> istifadəçi hesabı yaratmaq. Preserving home directory Ev qovluÄŸunun saxlanılması Creating user %1 İsitfadəçi %1 yaradılır Configuring user %1 %1 istifadəçisinin tÉ™nzimlÉ™nmÉ™si Setting file permissions Fayl icazÉ™lÉ™rinin quruaÅŸdırılması CreateVolumeGroupDialog Create Volume Group Tutumlar qrupu yaratmaq CreateVolumeGroupJob Create new volume group named %1. %1 adlı yeni tutumlar qrupu yaratmaq. Create new volume group named <strong>%1</strong>. <strong>%1</strong> adlı yeni tutumlar qrupu yaratmaq. Creating new volume group named %1. %1 adlı yeni tutumlar qrupu yaradılır. The installer failed to create a volume group named '%1'. QuraÅŸdırıcı '%1' adlı tutumlar qrupu yarada bilmÉ™di. DeactivateVolumeGroupJob Deactivate volume group named %1. %1 adlı tutumlar qrupu qeyri-aktiv edildi. Deactivate volume group named <strong>%1</strong>. <strong>%1</strong> adlı tutumlar qrupunu qeyri-aktiv etmÉ™k. The installer failed to deactivate a volume group named %1. QuraÅŸdırıcı %1 adlı tutumlar qrupunu qeyri-aktiv edÉ™ bilmÉ™di. DeletePartitionJob Delete partition %1. %1 bölmÉ™sini silmÉ™k. Delete partition <strong>%1</strong>. <strong>%1</strong> bölmÉ™sini silmÉ™k. Deleting partition %1. %1 bölmÉ™sinin silinmÉ™si. The installer failed to delete partition %1. QuraÅŸdırıcı %1 bölmÉ™sini silÉ™ bilmÉ™di. DeviceInfoWidget This device has a <strong>%1</strong> partition table. Bu cihazda <strong>%1</strong> bölmÉ™lÉ™r cÉ™dvÉ™li var. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Bu <strong>loop</strong> cihazıdır.<br><br> Bu bölmÉ™lÉ™r cÉ™dvÉ™li olmayan saxta cihaz olub, adi faylları blok cihazı kimi istifadÉ™ etmÉ™yÉ™ imkan yaradır. Bu cür qoÅŸulma adÉ™tÉ™n yalnız tÉ™k fayl sisteminÉ™ malik olur. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Bu quraÅŸdırıcı seçilmiÅŸ qurÄŸuda <strong>bölmÉ™lÉ™r cÉ™dvÉ™li aÅŸkar edÉ™ bilmÉ™di</strong>.<br><br>Bu cihazda ya bölmÉ™lÉ™r cÉ™dvÉ™li yoxdur, ya bölmÉ™lÉ™r cÉ™dvÉ™li korlanıb, ya da növü namÉ™lumdur.<br>Bu quraÅŸdırıcı bölmÉ™lÉ™r cÉ™dvÉ™lini avtomatik, ya da É™llÉ™ bölmÉ™k sÉ™hifÉ™si vasitÉ™si ilÉ™ yarada bilÉ™r. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Bu <strong>EFI</strong> ön yüklÉ™yici mühiti istifadÉ™ edÉ™n müasir sistemlÉ™r üçün mÉ™slÉ™hÉ™t görülÉ™n bölmÉ™lÉ™r cÉ™dvÉ™li növüdür. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Bu, <strong>BIOS</strong> ön yüklÉ™yici mühiti istifadÉ™ edÉ™n köhnÉ™ sistemlÉ™r üçün bölmÉ™lÉ™r cÉ™dvÉ™lidir. ÆksÉ™r hallarda bunun É™vÉ™zinÉ™ GPT istifadÉ™ etmÉ™k daha yaxşıdır. DiqqÉ™t:</strong>MBR, köhnÉ™lmiÅŸ MS-DOS standartında bölmÉ™lÉ™r cÉ™dvÉ™lidir. <br>SadÉ™cÉ™ 4 <em>ilkin</em> bölüm yaratmaÄŸa imkan verir vÉ™ 4-dÉ™n çox bölmÉ™dÉ™n yalnız biri <em>extended</em> geniÅŸlÉ™ndirilmiÅŸ ola bilÉ™r, vÉ™ belÉ™liklÉ™ daha çox <em>mÉ™ntiqi</em> bölmÉ™lÉ™r yaradıla bilÉ™r. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. SeçilmiÅŸ cihazda<strong>bölmÉ™lÉ™r cÉ™dvÉ™li</strong> növü.<br><br>BölmÉ™lÉ™r cÉ™dvÉ™li növünü dÉ™yiÅŸdirmÉ™yin yeganÉ™ yolu, bölmÉ™lÉ™r cÉ™dvÉ™lini sıfırdan silmÉ™k vÉ™ yenidÉ™n qurmaqdır, bu da saxlama cihazındakı bütün mÉ™lumatları mÉ™hv edir.<br>QuraÅŸdırıcı siz baÅŸqa bir seçim edÉ™nÉ™dÉ™k bölmÉ™lÉ™r cÉ™dvÉ™linin cari vÉ™ziyyÉ™tini saxlayacaqdır.<br>Müasir sistemlÉ™r standart olaraq GPT bölümünü istifadÉ™ edir. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 %1 -dÉ™ Dracut üçün LUKS tÉ™nzimlÉ™mÉ™lirini yazmaq Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut üçün LUKS tÉ™nzimlÉ™mÉ™lÉ™rini yazmağı ötürmÉ™k: "/" bölmÉ™si ÅŸifrÉ™lÉ™nmÉ™di Failed to open %1 %1 açılmadı DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Mövcud bölmÉ™yÉ™ düzÉ™liÅŸ etmÉ™k Con&tent: &TÉ™rkibi: &Keep &Saxlamaq Format Formatlamaq Warning: Formatting the partition will erase all existing data. DiqqÉ™t: BölmÉ™nin formatlanması ondakı bütün mövcud mÉ™lumatları silir. &Mount Point: QoÅŸil&ma nöqtÉ™si: Si&ze: Ol&çü: MiB MB Fi&le System: Fay&l sistemi: Flags: Bayraqlar: Label for the filesystem Fayl sitemi üçün yarlıq FS Label: FS yarlığı: Passphrase for existing partition Mövcud bölmÉ™ üçün ÅŸifrÉ™li ifadÉ™ Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. %1 bölmÉ™nin ÅŸifrÉ™si verilmiÅŸ ÅŸifrÉ™li ifadÉ™ ilÉ™ açıla bilmÉ™di. <br/><br/>BölmÉ™yÉ™ düzÉ™liÅŸ edin vÉ™ düzgün ÅŸifrÉ™li ifadÉ™ daxil edin vÉ™ ya silin vÉ™ yeni ÅŸifrÉ™lÉ™nmiÅŸ bölmÉ™ yaradın. EncryptWidget Form Format En&crypt system &ÅžifrÉ™lÉ™mÉ™ sistemi Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Sisteminiz göründüyü kimi bütün sistemin ÅŸifrÉ™lÉ™nmÉ™sini lazım olduÄŸu qÉ™dÉ™r dÉ™stÉ™klÉ™mir. Siz ÅŸifrÉ™lÉ™mÉ™ni aktiv edÉ™ bilÉ™rsiniz, lakin bu sistemin iÅŸini zÉ™iflÉ™dÉ™ bilÉ™r. Passphrase ÅžifrÉ™ Confirm passphrase ÅžifrÉ™ni tÉ™sdiq edin Please enter the same passphrase in both boxes. LütfÉ™n, hÉ™r iki sahÉ™yÉ™ eyni ÅŸifrÉ™ni daxil edin. ErrorDialog Details: TÉ™fÉ™rrüatlar: Would you like to paste the install log to the web? QuraÅŸdırma jurnalını vebdÉ™ yerləşdirmÉ™k istÉ™yirsinizmi? FillGlobalStorageJob Set partition information BölmÉ™ mÉ™lumatlarını ayarlamaq Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> <strong>Yeni</strong> %2 sistem bölmÉ™sindÉ™ <em>%3</em> xüsusiyyÉ™tlÉ™ri ilÉ™ %1 quraÅŸdırın Install %1 on <strong>new</strong> %2 system partition. %2 <strong>yeni</strong> sistem diskinÉ™ %1 quraÅŸdırmaq. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. <strong>Yeni</strong> %2 bölmÉ™sini <strong>%1</strong> qoÅŸulma nöqtÉ™si vÉ™ <em>%3</em> xüsusiyyÉ™tlÉ™ri ilÉ™ qurun. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. <strong>yeni</strong> %2 bölmÉ™sini <strong>%1</strong>%3 qoÅŸulma nöqtÉ™si ilÉ™ qurun. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. %3 <strong>%1</strong> sistem bölmÉ™sindÉ™ <em>%4</em> xüsusiyyÉ™tlÉ™ri ilÉ™ %2 quraÅŸdırın. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. <strong>%1</strong> %3 bölmÉ™sini <strong>%2</strong> qoÅŸulma nöqtÉ™si vÉ™ <em>%4</em> xüsusiyyÉ™tlÉ™ri ilÉ™ qurun. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. %3 bölmÉ™sinÉ™ <strong>%1</strong> ilÉ™ <strong>%2</strong>%4 qoÅŸulma nöqtÉ™si ayarlamaq. Install %2 on %3 system partition <strong>%1</strong>. %3 <strong>%1</strong> sistem bölmÉ™sindÉ™ %2 quraÅŸdırın. Install boot loader on <strong>%1</strong>. Ön yüklÉ™yicini <strong>%1</strong> üzÉ™rindÉ™ quraÅŸdırın. Setting up mount points. QoÅŸulma nöqtÉ™sini ayarlamaq. FinishedPage Form Formatlamaq &Restart now &YenidÉ™n baÅŸlatmaq <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>HÉ™r ÅŸey hazırdır.</h1><br/>%1 kompyuterinizÉ™ qurulub.<br/>Siz indi yeni sisteminizi baÅŸlada bilÉ™rsiniz. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Bu çərçivÉ™ iÅŸarÉ™lÉ™nÉ™rsÉ™ siz <span style="font-style:italic;">Hazır</span> düymÉ™sinÉ™ vurduÄŸunuz vÉ™ ya quraÅŸdırıcı proqramı baÄŸlatdığınız zaman sisteminiz dÉ™rhal yenidÉ™n baÅŸladılacaqdır.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>HÉ™r ÅŸey hazırdır.</h1><br/>%1 kompyuterinizÉ™ quraÅŸdırıldı.<br/>Siz yenidÉ™n baÅŸladaraq yeni sisteminizÉ™ daxil ola vÉ™ ya %2 Canlı mühitini istifadÉ™ etmÉ™yÉ™ davam edÉ™ bilÉ™rsiniz. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Bu çərçivÉ™ iÅŸarÉ™lÉ™nÉ™rsÉ™ siz <span style="font-style:italic;">Hazır</span> düymÉ™sinÉ™ vurduÄŸunuz vÉ™ ya quraÅŸdırıcınıı baÄŸladığınız zaman sisteminiz dÉ™rhal yenidÉ™n baÅŸladılacaqdır.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>QuraÅŸdırılma alınmadı</h1><br/>%1 kompyuterinizÉ™ quraÅŸdırıla bilmÉ™di.<br/>BaÅŸ vermiÅŸ xÉ™ta: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>QuraÅŸdırılma alınmadı</h1><br/>%1 kompyuterinizÉ™ quraÅŸdırıla bilmÉ™di.<br/>BaÅŸ vermiÅŸ xÉ™ta: %2. FinishedQmlViewStep Finish Son FinishedViewStep Finish Son FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. %4 üzÉ™rindÉ™ %1 bölmÉ™sini format etmÉ™k (fayl sistemi: %2, ölçüsü: %3 MB). Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%3MB</strong> bölmÉ™sini <strong>%2</strong> fayl sistemi ilÉ™ <strong>%1</strong> formatlamaq. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. %1 bölmÉ™sini %2 fayl sistemi ilÉ™ formatlamaq. The installer failed to format partition %1 on disk '%2'. QuraÅŸdırıcı '%2' diskindÉ™ %1 bölmÉ™sini formatlaya bilmÉ™di. GeneralRequirements has at least %1 GiB available drive space É™n az %1 QB disk boÅŸ sahÉ™si var There is not enough drive space. At least %1 GiB is required. KifayÉ™t qÉ™dÉ™r disk sahÉ™si yoxdur. Æn azı %1 QB tÉ™lÉ™b olunur. has at least %1 GiB working memory É™n azı %1 QB iÅŸ yaddaşı var The system does not have enough working memory. At least %1 GiB is required. SistemdÉ™ kifayÉ™t qÉ™dÉ™r iÅŸ yaddaşı yoxdur. Æn azı %1 GiB tÉ™lÉ™b olunur. is plugged in to a power source enerji mÉ™nbÉ™yi qoÅŸuludur The system is not plugged in to a power source. enerji mÉ™nbÉ™yi qoÅŸulmayıb. is connected to the Internet internetÉ™ qoÅŸuludur The system is not connected to the Internet. Sistem internetÉ™ qoÅŸulmayıb. is running the installer as an administrator (root) quraÅŸdırıcını adminstrator (root) imtiyazları ilÉ™ baÅŸladılması The setup program is not running with administrator rights. QuraÅŸdırıcı adminstrator imtiyazları ilÉ™ baÅŸladılmayıb. The installer is not running with administrator rights. QuraÅŸdırıcı adminstrator imtiyazları ilÉ™ baÅŸladılmayıb. has a screen large enough to show the whole installer quraÅŸdırıcını tam göstÉ™rmÉ™k üçün ekran kifayÉ™t qÉ™dÉ™r geniÅŸdir The screen is too small to display the setup program. QuraÅŸdırıcı proqramı göstÉ™rmÉ™k üçün ekran çox kiçikdir. The screen is too small to display the installer. Bu quarÅŸdırıcını göstÉ™rmÉ™k üçün ekran çox kiçikdir. HostInfoJob Collecting information about your machine. Komputeriniz haqqında mÉ™lumat toplanması. IDJob OEM Batch Identifier OEM toplama identifikatoru Could not create directories <code>%1</code>. <code>%1</code> qovluÄŸu yaradılmadı. Could not open file <code>%1</code>. <code>%1</code> faylı açılmadı. Could not write to file <code>%1</code>. <code>%1</code> faylına yazılmadı. InitcpioJob Creating initramfs with mkinitcpio. mkinitcpio kömÉ™yi ilÉ™ initramfs yaradılması. InitramfsJob Creating initramfs. initramfs yaradılması. InteractiveTerminalPage Konsole not installed Konsole quraÅŸdırılmayıb Please install KDE Konsole and try again! LütfÉ™n KDE Konsole tÉ™tbiqini quraÅŸdırın vÉ™ yenidÉ™n cÉ™hd edin! Executing script: &nbsp;<code>%1</code> Ssenari icra olunur. &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Ssenari KeyboardQmlViewStep Keyboard Klaviatura KeyboardViewStep Keyboard Klaviatura LCLocaleDialog System locale setting Ümumi mÉ™kan ayarları The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Ümumi mÉ™kan ayarları, É™mrlÉ™r sÉ™tiri interfeysinin ayrıca elementlÉ™ri üçün dil vÉ™ kodlaÅŸmaya tÉ™sir edir. <br/>Hazırkı seçim <strong>%1</strong>. &Cancel İm&tina etmÉ™k &OK &OK LOSHJob Configuring encrypted swap. ÇifrÉ™lÉ™nmiÅŸ mübadilÉ™ sahÉ™si - swap tÉ™nzimlÉ™nir. No target system available. HÉ™dÉ™f sistemi É™lçatan deyil. No rootMountPoint is set. Kök qoÅŸulma nöztÉ™si (rootMountPoint) tÉ™yin olunmayıb. No configFilePath is set. TÉ™nzimlÉ™mÉ™ faylı yolu (configFilePath) tÉ™yin olunmayıb. LicensePage Form Format <h1>License Agreement</h1> <h1>Lisenziya razılaÅŸması</h1> I accept the terms and conditions above. MÉ™n yuxarıda göstÉ™rilÉ™n ÅŸÉ™rtlÉ™ri qÉ™bul edirÉ™m. Please review the End User License Agreements (EULAs). LütfÉ™n lisenziya razılaÅŸması (EULA) ilÉ™ tanış olun. This setup procedure will install proprietary software that is subject to licensing terms. Bu quraÅŸdırma proseduru lisenziya ÅŸÉ™rtlÉ™rinÉ™ tabe olan xüsusi proqram tÉ™minatını quraÅŸdıracaqdır. If you do not agree with the terms, the setup procedure cannot continue. Lisenziya razılaÅŸmalarını qÉ™bul etmÉ™sÉ™niz quraÅŸdırılma davam etdirilÉ™ bilmÉ™z. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Bu quraÅŸdırma proseduru, É™lavÉ™ xüsusiyyÉ™tlÉ™r tÉ™min etmÉ™k vÉ™ istifadəçi tÉ™crübÉ™sini artırmaq üçün lisenziyalaÅŸdırma ÅŸÉ™rtlÉ™rinÉ™ tabe olan xüsusi proqram tÉ™minatını quraÅŸdıra bilÉ™r. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. ŞərtlÉ™rlÉ™ razılaÅŸmasanız, xüsusi proqram quraÅŸdırılmayacaq vÉ™ bunun É™vÉ™zinÉ™ açıq mÉ™nbÉ™ kodu ilÉ™ alternativlÉ™r istifadÉ™ edilÉ™cÉ™kdir. LicenseViewStep License Lisenziya LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 sürücü</strong>%2 tÉ™rÉ™findÉ™n <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafik sürücü</strong><br/><font color="Grey">%2 tÉ™rÉ™findÉ™n</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 brauzer É™lavÉ™si</strong><br/><font color="Grey">%2 tÉ™rÉ™findÉ™n</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodek</strong><br/><font color="Grey">%2 tÉ™rÉ™findÉ™n</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paket</strong><br/><font color="Grey">%2 É™rÉ™findÉ™n</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">%2 É™rÉ™findÉ™n</font> File: %1 %1 faylı Hide license text Lisenziya mÉ™tnini gizlÉ™tmÉ™k Show the license text Lisenziya mÉ™tnini göstÉ™rmÉ™k Open license agreement in browser. Lisenziya razılaÅŸmasını brauzerdÉ™ açmaq. LocalePage Region: MÉ™kan: Zone: Saat qurÅŸağı: &Change... &DÉ™yiÅŸmÉ™k... LocaleQmlViewStep Location MÉ™kan LocaleTests Quit Çıxış LocaleViewStep Location MÉ™kan LuksBootKeyFileJob Configuring LUKS key file. LUKS düymÉ™ faylını ayarlamaq. No partitions are defined. Heç bir bölmÉ™ müəyyÉ™n edilmÉ™yib. Encrypted rootfs setup error Kök fayl sisteminin ÅŸifrÉ™lÉ™nmÉ™si xÉ™tası Root partition %1 is LUKS but no passphrase has been set. %1 Kök bölmÉ™si LUKS-dur lakin, ÅŸifrÉ™ tÉ™yin olunmayıb. Could not create LUKS key file for root partition %1. %1 kök bölmÉ™si üçün LUKS düymÉ™ faylı yaradılmadı. Could not configure LUKS key file on partition %1. %1 bölmÉ™sindÉ™ LUKS düymÉ™ faylı tÉ™nzimlÉ™nÉ™ bilmÉ™di. MachineIdJob Generate machine-id. Komputerin İD-ni yaratmaq. Configuration Error TÉ™nzimlÉ™mÉ™ xÉ™tası No root mount point is set for MachineId. Komputer İD-si üçün kök qoÅŸulma nöqtÉ™si tÉ™yin edilmÉ™yib. Map Timezone: %1 Saat qurÅŸağı: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. LütfÉ™n, xÉ™ritÉ™dÉ™ üstünlük verdiyiniz yeri seçin, belÉ™ ki, quraÅŸdırıcı sizin üçün yerli vÉ™ saat qurÅŸağı parametrlÉ™rini tÉ™klif edÉ™ bilÉ™r. AÅŸağıda tÉ™klif olunan parametrlÉ™ri dÉ™qiq tÉ™nzimlÉ™yÉ™ bilÉ™rsiniz. XÉ™ritÉ™ni sürüşdürÉ™rÉ™k axtarın. miqyası dÉ™yiÅŸmÉ™k üçün +/- düymÉ™lÉ™rindÉ™n vÉ™ ya siçanla sürüşdürmÉ™ çubuÄŸundan istifadÉ™ etmÉ™k. NetInstallViewStep Package selection Paket seçimi Office software Ofis proqramı Office package Ofis paketi Browser software Veb bÉ™lÉ™dçi proqramı Browser package Veb bÉ™lÉ™dçi paketi Web browser Veb bÉ™lÉ™dçi Kernel label for netinstall module, Linux kernel NüvÉ™ Services label for netinstall module, system services XidmÉ™tlÉ™r Login label for netinstall module, choose login manager GiriÅŸ Desktop label for netinstall module, choose desktop environment İş Masası Communication label for netinstall module RabitÉ™ Development label for netinstall module TÉ™rtibat Office label for netinstall module Ofis Multimedia label for netinstall module Multimediya Internet label for netinstall module Internet Theming label for netinstall module Mövzular, Temalar Gaming label for netinstall module Oyun Utilities label for netinstall module VasitÉ™lÉ™r, AlÉ™tlÉ™r Applications TÉ™tbiqlÉ™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. PackageModel Name Adı Description TÉ™sviri Page_Keyboard Form Format Keyboard Model: Klaviatura modeli: Type here to test your keyboard Buraya yazaraq klaviaturanı yoxlayın Page_UserSetup Form Format What is your name? Adınız nÉ™dir? Your Full Name Tam adınız What name do you want to use to log in? GiriÅŸ üçün hansı adı istifadÉ™ etmÉ™k istÉ™yirsiniz? login giriÅŸ What is the name of this computer? Bu kompyuterin adı nÉ™dir? <small>This name will be used if you make the computer visible to others on a network.</small> <small>ÆgÉ™r kompyuterinizi ÅŸÉ™bÉ™kÉ™ üzÉ™rindÉ™n görünÉ™n etsÉ™niz, bu ad istifadÉ™ olunacaq.</small> Computer Name Kompyuterin adı Choose a password to keep your account safe. Hesabınızın tÉ™hlükÉ™sizliyi üçün ÅŸifrÉ™ seçin. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>SÉ™hvsiz yazmaq üçün eyni ÅŸifrÉ™ni iki dÉ™fÉ™ daxil edin. Yaxşı bir ÅŸifrÉ™, hÉ™rflÉ™rin, nömrÉ™lÉ™rin vÉ™ durÄŸu iÅŸarÉ™lÉ™rinin qarışığından vÉ™ É™n azı sÉ™kkiz simvoldan ibarÉ™t olmalıdır, hÉ™mçinin müntÉ™zÉ™m olaraq dÉ™yiÅŸdirilmÉ™lidir.</small> Password ÅžifrÉ™ Repeat Password ÅžifrÉ™nin tÉ™kararı When this box is checked, password-strength checking is done and you will not be able to use a weak password. Bu qutu iÅŸarÉ™lÉ™ndikdÉ™, ÅŸifrÉ™nin etibarlıq sÉ™viyyÉ™si yoxlanılır vÉ™ siz zÉ™if ÅŸifrÉ™dÉ™n istifadÉ™ edÉ™ bilmÉ™yÉ™cÉ™ksiniz. Require strong passwords. Güclü ÅŸifrÉ™lÉ™r tÉ™lÉ™b edilir. Log in automatically without asking for the password. ÅžifrÉ™ soruÅŸmadan sistemÉ™ avtomatik daxil olmaq. Use the same password for the administrator account. İdarəçi hesabı üçün eyni ÅŸifrÉ™dÉ™n istifadÉ™ etmÉ™k. Choose a password for the administrator account. İdarəçi hesabı üçün ÅŸifrÉ™ni seçmÉ™k. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>SÉ™hvsiz yazmaq üçün eyni ÅŸifrÉ™ni iki dÉ™fÉ™ daxil edin</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI sistemi Swap Swap - MübadilÉ™ New partition for %1 %1 üçün yeni bölmÉ™ New partition Yeni bölmÉ™ %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space BoÅŸ disk sahÉ™si New partition Yeni bölmÉ™ Name Adı File System Fayl sistemi File System Label Fayl sistemi yarlığı Mount Point QoÅŸulma nöqtÉ™si Size Ölçüsü PartitionPage Form Format Storage de&vice: YaddaÅŸ qurÄŸu&su: &Revert All Changes Bütün dÉ™yiÅŸikliklÉ™ri &geri qaytarmaq New Partition &Table Yeni bölmÉ™lÉ™r &cÉ™dvÉ™li Cre&ate Yar&atmaq &Edit DüzÉ™liÅŸ &etmÉ™k &Delete &SilmÉ™k New Volume Group Yeni tutum qrupu Resize Volume Group Tutum qrupunun ölçüsünü dÉ™yiÅŸmÉ™k Deactivate Volume Group Tutum qrupunu deaktiv etmÉ™k Remove Volume Group Tutum qrupunu silmÉ™k I&nstall boot loader on: Ön yüklÉ™y&icinin quraÅŸdırılma yeri: Are you sure you want to create a new partition table on %1? %1-dÉ™ yeni bölmÉ™ yaratmaq istÉ™diyinizÉ™ É™minsiniz? Can not create new partition Yeni bölmÉ™ yaradıla bilmir The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. %1 üzÉ™rindÉ™ki bölmÉ™ cÉ™dvÉ™lindÉ™ %2 birinci disk bölümü var vÉ™ artıq É™lavÉ™ edilÉ™ bilmÉ™z. LütfÉ™n bir birinci disk bölümünü çıxarın vÉ™ É™vÉ™zinÉ™ geniÅŸlÉ™ndirilmiÅŸ bölmÉ™ É™lavÉ™ edin. PartitionViewStep Gathering system information... Sistem mÉ™lumatları toplanır ... Partitions BölmÉ™lÉ™r Unsafe partition actions are enabled. BölmÉ™lÉ™rlÉ™ qeyri-tÉ™hlükÉ™siz É™mÉ™llÉ™r ativ edilib. Partitioning is configured to <b>always</b> fail. BölmÉ™lÉ™rÉ™ bölünmÉ™ elÉ™ ayarlanıb ki, <b>hÉ™miÅŸÉ™</b> xÉ™ta ilÉ™ baÅŸa çatır. No partitions will be changed. DÉ™yiÅŸiklik edilÉ™cÉ™k heç bir bölmÉ™ yoxdur. Current: Cari: After: Sonra: No EFI system partition configured EFI sistemi bölmÉ™si tÉ™nzimlÉ™nmÉ™yib EFI system partition configured incorrectly EFİ sistem bölmÉ™si sÉ™hv yaradıldı An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. EFİ fayl sistemi %1 baÅŸladılması üçün lazımdır.<br/> <br/> EFİ fayl sistemini quraÅŸdırmaq üçün geri qayıdın vÉ™ uyÄŸun fayl sistemini seçin vÉ™ ya yaradın. The filesystem must be mounted on <strong>%1</strong>. Fayl sistemi burada qoÅŸulmalıdır: <strong>%1</strong>. The filesystem must have type FAT32. Fayl sistemi FAT32 olmalıdır. The filesystem must be at least %1 MiB in size. Fayl sisteminin ölçüsü É™n az %1 MiB olmalıdır. The filesystem must have flag <strong>%1</strong> set. Fayl sisteminÉ™ <strong>%1</strong> bayrağı tÉ™yin olunmalıdır. You can continue without setting up an EFI system partition but your system may fail to start. Siz, EFİ sistem bölmÉ™sini ayarlamadan davam edÉ™ bilÉ™rsiniz, lakin bu sisteminizin iÅŸÉ™ düşə bilmÉ™mÉ™sinÉ™ sÉ™bÉ™b ola bilÉ™r. Option to use GPT on BIOS BIOS-da GPT istifadÉ™si seçimi A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. GPT bölmÉ™ cÉ™dvÉ™li bütün sistemlÉ™r üçün yaxşıdır. Bu quraÅŸdırıcı BIOS sistemlÉ™ri üçün dÉ™ belÉ™ bir quruluÅŸu dÉ™stÉ™klÉ™yir.<br/><br/>BİOS-da GPT bölmÉ™lÉ™r cÉ™dvÉ™lini ayarlamaq üçün (É™gÉ™r bu edilmÉ™yibsÉ™) geriyÉ™ qayıdın vÉ™ bölmÉ™lÉ™r cÉ™dvÉ™lini GPT-yÉ™ qurun, sonra isÉ™ <strong>%2</strong> bayrağı seçilmiÅŸ 8 MB-lıq formatlanmamış bölmÉ™ yaradın.<br/><br/>8 MB-lıq formatlanmamış bölmÉ™ GPT ilÉ™ BİOS sistemindÉ™ %1 baÅŸlatmaq üçün lazımdır. Boot partition not encrypted Ön yüklÉ™yici bölmÉ™si çifrÉ™lÉ™nmÉ™yib A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. ÅžifrÉ™li bir kök bölmÉ™si ilÉ™ birlikdÉ™ ayrı bir ön yüklÉ™yici bölmÉ™si qurulub, ancaq ön yüklÉ™yici bölmÉ™si ÅŸifrÉ™lÉ™nmÉ™yib.<br/><br/>Bu cür quraÅŸdırma ilÉ™ baÄŸlı tÉ™hlükÉ™sizlik problemlÉ™ri olur, çünki vacib sistem sÉ™nÉ™dlÉ™ri ÅŸifrÉ™siz bölmÉ™dÉ™ saxlanılır.<br/>İstÉ™yirsinizsÉ™ davam edÉ™ bilÉ™rsiniz, lakin, fayl sisteminin kilidi, sistem baÅŸladıldıqdan daha sonra açılacaqdır.<br/>YüklÉ™mÉ™ hissÉ™sini ÅŸifrÉ™lÉ™mÉ™k üçün geri qayıdın vÉ™ bölmÉ™ yaratma pÉ™ncÉ™rÉ™sindÉ™ <strong>ÅžifrÉ™lÉ™mÉ™</strong> menyusunu seçərÉ™k onu yenidÉ™n yaradın. has at least one disk device available. É™n az bir disk qurÄŸusu mövcuddur. There are no partitions to install on. QuraÅŸdırmaq üçün bölmÉ™ yoxdur. PlasmaLnfJob Plasma Look-and-Feel Job Plasma Xarici Görünüş Mövzusu İşlÉ™ri Could not select KDE Plasma Look-and-Feel package KDE Plasma Xarici Görünüş paketinin seçilmÉ™si PlasmaLnfPage Form Format Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. LütfÉ™n, KDE Plasma İş Masası üçün Xarici Görünüşü seçin. Siz hÉ™mçinin bu mÉ™rhÉ™lÉ™ni ötürÉ™ vÉ™ sistem qurulduqdan sonra Plasma xarici görünüşünü ayarlaya bilÉ™rsiniz. Xarici Görünüşə kliklÉ™mÉ™niz onun canlı görüntüsünü sizÉ™ göstÉ™rÉ™cÉ™kdir. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. LütfÉ™n, KDE Plasma İş Masası üçün Xarici Görünüşü seçin. Siz hÉ™mçinin bu mÉ™rhÉ™lÉ™ni ötürÉ™ vÉ™ sistem qurulduqdan sonra Plasma xarici görünüşünü ayarlaya bilÉ™rsiniz. Xarici Görünüşə kliklÉ™mÉ™niz onun canlı görüntüsünü sizÉ™ göstÉ™rÉ™cÉ™kdir. PlasmaLnfViewStep Look-and-Feel Xarici Görünüş PreserveFiles Saving files for later ... Fayllar daha sonra saxlanılır... No files configured to save for later. Sonra saxlamaq üçün heç bir ayarlanan fayl yoxdur. Not all of the configured files could be preserved. Ayarlanan faylların hamısı saxlanıla bilmÉ™z. ProcessResult There was no output from the command. ÆmrlÉ™rdÉ™n çıxarış alınmadı. Output: Çıxarış: External command crashed. Xarici É™mr qÉ™zası baÅŸ verdi. Command <i>%1</i> crashed. <i>%1</i> É™mrindÉ™ qÉ™za baÅŸ verdi. External command failed to start. Xarici É™mr baÅŸladıla bilmÉ™di. Command <i>%1</i> failed to start. <i>%1</i> É™mri É™mri baÅŸladıla bilmÉ™di. Internal error when starting command. Æmr baÅŸlayarkÉ™n daxili xÉ™ta. Bad parameters for process job call. İş prosesini çağırmaq üçün xÉ™talı parametr. External command failed to finish. Xarici É™mr baÅŸa çatdırıla bilmÉ™di. Command <i>%1</i> failed to finish in %2 seconds. <i>%1</i> É™mrini %2 saniyÉ™dÉ™ baÅŸa çatdırmaq mümkün olmadı. External command finished with errors. Xarici É™mr xÉ™ta ilÉ™ baÅŸa çatdı. Command <i>%1</i> finished with exit code %2. <i>%1</i> É™mri %2 xÉ™ta kodu ilÉ™ baÅŸa çatdı. QObject %1 (%2) %1 (%2) unknown namÉ™lum extended geniÅŸlÉ™ndirilmiÅŸ unformatted format olunmamış swap mübadilÉ™ Default Standart File not found Fayl tapılmadı Path <pre>%1</pre> must be an absolute path. <pre>%1</pre> yolu mütlÉ™q bir yol olmalıdır. Directory not found Qovluq tapılmadı Could not create new random file <pre>%1</pre>. Yeni tÉ™sadüfi<pre>%1</pre> faylı yaradıla bilmir. No product MÉ™hsul yoxdur No description provided. TÉ™sviri verilmÉ™yib. (no mount point) (qoÅŸulma nöqtÉ™si yoxdur) Unpartitioned space or unknown partition table BölünmÉ™miÅŸ disk sahÉ™si vÉ™ ya namÉ™lum bölmÉ™lÉ™r cÉ™dvÉ™li Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> Bu kompüter %1 qurulması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilÉ™r, lakin bÉ™zi imkanları É™lçatmaz ola bilÉ™r.</p> RemoveUserJob Remove live user from target system Canlı istifadəçini hÉ™dÉ™f sistemindÉ™n silmÉ™k RemoveVolumeGroupJob Remove Volume Group named %1. %1 adlı Tutum Qrupunu silmÉ™k. Remove Volume Group named <strong>%1</strong>. <strong>%1</strong> adlı Tutum Qrupunu silmÉ™k. The installer failed to remove a volume group named '%1'. QuraÅŸdırıcı "%1" adlı tutum qrupunu silÉ™ bilmÉ™di. ReplaceWidget Form Format Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 quraÅŸdırmaq yerini seÅŸmÉ™k.<br/><font color="red">DiqqÉ™t!</font>bu seçilmiÅŸ bölmÉ™dÉ™ki bütün faylları silÉ™cÉ™k. The selected item does not appear to be a valid partition. SeçilmiÅŸ element etibarlı bir bölüm kimi görünmür. %1 cannot be installed on empty space. Please select an existing partition. %1 böş disk sahÉ™sinÉ™ quraÅŸdırıla bilmÉ™z. LütfÉ™n mövcüd bölmÉ™ni seçin. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 geniÅŸlÉ™ndirilmiÅŸ bölmÉ™yÉ™ quraÅŸdırıla bilmÉ™z. LütfÉ™n, mövcud birinci vÉ™ ya mÉ™ntiqi bölmÉ™ni seçin. %1 cannot be installed on this partition. %1 bu bölmÉ™yÉ™ quraÅŸdırıla bilmÉ™z. Data partition (%1) VerilÉ™nlÉ™r bölmÉ™si (%1) Unknown system partition (%1) NamÉ™lum sistem bölmÉ™si (%1) %1 system partition (%2) %1 sistem bölmÉ™si (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>%1 BölmÉ™si %2 üçün çox kiçikdir. LütfÉ™n, É™n azı %3 QB hÉ™cmindÉ™ olan bölmÉ™ni seçin. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>EFI sistem bölmÉ™si bu sistemin heç bir yerindÉ™ tapılmadı. LütfÉ™n, geri qayıdın vÉ™ %1 tÉ™yin etmÉ™k üçün É™l ilÉ™ bu bölmÉ™ni yaradın. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1, %2.bölmÉ™sindÉ™ quraÅŸdırılacaq.<br/><font color="red">DiqqÉ™t: </font>%2 bölmÉ™sindÉ™ki bütün mÉ™lumatlar itirilÉ™cÉ™k. The EFI system partition at %1 will be used for starting %2. %1 EFI sistemi %2 baÅŸlatmaq üçün istifadÉ™ olunacaqdır. EFI system partition: EFI sistem bölmÉ™si: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> Bu kompüter %1 qurulması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/> QuraÅŸdırılma davam etdirilÉ™ bilmÉ™z. </p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> Bu kompüter %1 qurulması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilÉ™r, lakin bÉ™zi imkanları É™lçatmaz ola bilÉ™r.</p> ResizeFSJob Resize Filesystem Job Fayl sisteminin ölçüsünü dÉ™yiÅŸmÉ™k Invalid configuration Etibarsız TÉ™nzimlÉ™mÉ™ The file-system resize job has an invalid configuration and will not run. Fayl sisteminin ölçüsünü dÉ™yiÅŸmÉ™k iÅŸinin tÉ™nzimlÉ™nmÉ™si etibarsızdır vÉ™ baçladıla bilmÉ™z. KPMCore not Available KPMCore mövcud deyil Calamares cannot start KPMCore for the file-system resize job. Calamares bu fayl sisteminin ölçüsünü dÉ™yiÅŸmÉ™k üçün KPMCore proqramını iÅŸÉ™ sala bilmir. Resize Failed Ölçüsünü dÉ™yiÅŸmÉ™ alınmadı The filesystem %1 could not be found in this system, and cannot be resized. %1 fayl sistemi bu sistemdÉ™ tapılmadı vÉ™ ölçüsü dÉ™yiÅŸdirilÉ™ bilmÉ™di. The device %1 could not be found in this system, and cannot be resized. %1 qurÄŸusu bu sistemdÉ™ tapılmadı vÉ™ ölçüsü dÉ™yiÅŸdirilÉ™ bilmÉ™z. The filesystem %1 cannot be resized. %1 fayl sisteminin ölçüsü dÉ™yiÅŸdirilÉ™ bilmÉ™di. The device %1 cannot be resized. %1 qurÄŸusunun ölçüsü dÉ™yiÅŸdirilÉ™ bilmÉ™di. The filesystem %1 must be resized, but cannot. %1 fayl sisteminin ölçüsü dÉ™yiÅŸdirilmÉ™lidir, lakin bu mümkün deyil. The device %1 must be resized, but cannot %1 qurÄŸusunun ölçüsü dÉ™yiÅŸdirilmÉ™lidir, lakin, bu mümkün deyil ResizePartitionJob Resize partition %1. %1 bölmÉ™sinin ölçüsünü dÉ™yiÅŸmÉ™k. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MB</strong> <strong>%1</strong> bölmÉ™sinin ölçüsünü <strong>%3MB</strong>-a dÉ™yiÅŸmÉ™k. Resizing %2MiB partition %1 to %3MiB. %2 MB %1 bölmÉ™sinin ölçüsünü %3MB-a dÉ™yiÅŸmÉ™k. The installer failed to resize partition %1 on disk '%2'. QuraÅŸdırıcı %1 bölmÉ™sinin ölçüsünü "%2" diskindÉ™ dÉ™yiÅŸÉ™ bilmÉ™di. ResizeVolumeGroupDialog Resize Volume Group Tutum qrupunun ölçüsünü dÉ™yiÅŸmÉ™k ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. %1 adlı tutum qrupunun ölçüsünü %2-dÉ™n %3-É™ dÉ™yiÅŸmÉ™k. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong> adlı tutum qrupunun ölçüsünü <strong>%2</strong>-dÉ™n strong>%3</strong>-É™ dÉ™yiÅŸmÉ™k. The installer failed to resize a volume group named '%1'. QuraÅŸdırıcı "%1" adlı tutum qrupunun ölçüsünü dÉ™yiÅŸÉ™ bilmÉ™di. ResultsListDialog For best results, please ensure that this computer: Æn yaÅŸxı nÉ™ticÉ™ üçün lütfÉ™n, É™min olun ki, bu kompyuter: System requirements Sistem tÉ™lÉ™blÉ™ri ScanningDialog Scanning storage devices... YaddaÅŸ qurÄŸusu axtarılır... Partitioning BölüşdürmÉ™ SetHostNameJob Set hostname %1 %1 host adı tÉ™yin etmÉ™k Set hostname <strong>%1</strong>. <strong>%1</strong> host adı tÉ™yin etmÉ™k. Setting hostname %1. %1 host adının ayarlanması. Internal Error Daxili XÉ™ta Cannot write hostname to target system Host adı hÉ™dÉ™f sistemÉ™ yazıla bilmÉ™di SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Klaviatura modeliini %1, qatını isÉ™ %2-%3 tÉ™yin etmÉ™k Failed to write keyboard configuration for the virtual console. Virtual konsol üçün klaviatura tÉ™nzimlÉ™mÉ™lÉ™rini yazmaq mümkün olmadı. Failed to write to %1 %1-É™ yazmaq mümkün olmadı Failed to write keyboard configuration for X11. X11 üçün klaviatura tÉ™nzimlÉ™mÉ™lÉ™rini yazmaq mümükün olmadı. Failed to write keyboard configuration to existing /etc/default directory. Klaviatura tÉ™nzimlÉ™mÉ™lÉ™ri möcvcud /etc/default qovluÄŸuna yazıla bilmÉ™di. SetPartFlagsJob Set flags on partition %1. %1 bölmÉ™sindÉ™ bayraqlar qoymaq. Set flags on %1MiB %2 partition. %1 MB %2 bölmÉ™sindÉ™ bayraqlar qoymaq. Set flags on new partition. Yeni bölmÉ™dÉ™ bayraq qoymaq. Clear flags on partition <strong>%1</strong>. <strong>%1</strong> bölmÉ™sindÉ™ki bayraqları ləğv etmÉ™k. Clear flags on %1MiB <strong>%2</strong> partition. %1MB <strong>%2</strong> bölmÉ™sindÉ™ki bayraqları ləğv etmÉ™k. Clear flags on new partition. Yeni bölmÉ™dÉ™ki bayraqları ləğv etmÉ™k. Flag partition <strong>%1</strong> as <strong>%2</strong>. <strong>%1</strong> bölmÉ™sini <strong>%2</strong> kimi bayraqlamaq. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. %1MB <strong>%2</strong> bölmÉ™sini <strong>%3</strong> kimi bayraqlamaq. Flag new partition as <strong>%1</strong>. Yeni bölmÉ™ni <strong>%1</strong> kimi bayraqlamaq. Clearing flags on partition <strong>%1</strong>. <strong>%1</strong> bölmÉ™sindÉ™ki bayraqları ləöv etmÉ™k. Clearing flags on %1MiB <strong>%2</strong> partition. %1MB <strong>%2</strong> bölmÉ™sindÉ™ki bayraqların ləğv edilmÉ™si. Clearing flags on new partition. Yeni bölmÉ™dÉ™ki bayraqların ləğv edilmÉ™si. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. <strong>%2</strong> bayraqlarının <strong>%1</strong> bölmÉ™sindÉ™ ayarlanması. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. <strong>%3</strong> bayraqlarının %1MB <strong>%2</strong> bölmÉ™sindÉ™ ayarlanması. Setting flags <strong>%1</strong> on new partition. <strong>%1</strong> bayraqlarının yeni bölmÉ™dÉ™ ayarlanması. The installer failed to set flags on partition %1. QuraÅŸdırıcı %1 bölmÉ™sinÉ™ bayraqlar qoya bilmÉ™di. SetPasswordJob Set password for user %1 %1 istifadəçisi üçün ÅŸifrÉ™ daxil etmÉ™k Setting password for user %1. %1 istifadəçisi üçün ÅŸifrÉ™ ayarlamaq. Bad destination system path. SÉ™hv sistem yolu tÉ™yinatı. rootMountPoint is %1 rootMountPoint %1-dir Cannot disable root account. Kök hesabını qeyri-aktiv etmÉ™k olmur. passwd terminated with error code %1. %1 xÉ™ta kodu ilÉ™ sonlanan ÅŸifrÉ™. Cannot set password for user %1. %1 istifadəçisi üçün ÅŸifrÉ™ yaradıla bilmÉ™di. usermod terminated with error code %1. usermod %1 xÉ™ta kodu ilÉ™ sonlandı. SetTimezoneJob Set timezone to %1/%2 Saat qurÅŸağını %1/%2 olaraq ayarlamaq Cannot access selected timezone path. SeçilmiÅŸ saat qurÅŸağı yoluna daxil olmaq mümkün deyil. Bad path: %1 Etibarsız yol: %1 Cannot set timezone. Saat qurÅŸağını qurmaq mümkün deyil. Link creation failed, target: %1; link name: %2 Keçid yaradılması alınmadı, hÉ™dÉ™f: %1; keçed adı: %2 Cannot set timezone, Saat qurÅŸağı qurulmadı, Cannot open /etc/timezone for writing /etc/timezone qovluÄŸu yazılmaq üçün açılmadı SetupGroupsJob Preparing groups. Qruplar hazırlanır. Could not create groups in target system HÉ™dÉ™f sistemdÉ™ qruplar yaratmaq mümkün olmadı These groups are missing in the target system: %1 HÉ™dÉ™f sistemdÉ™ çatışmayan qruplar: %1 SetupSudoJob Configure <pre>sudo</pre> users. <pre>sudo</pre> istifadəçilÉ™rinin tÉ™nzimlÉ™nmÉ™si. Cannot chmod sudoers file. Sudoers faylına chmod tÉ™tbiq etmÉ™k mümkün olmadı. Cannot create sudoers file for writing. Sudoers faylını yazmaq mümkün olmadı. ShellProcessJob Shell Processes Job Shell proseslÉ™ri ilÉ™ iÅŸ SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK &OK &Yes &BÉ™li &No &Xeyr &Cancel &İmtina etmÉ™k &Close &BaÄŸlamaq TrackingInstallJob Installation feedback QuraÅŸdırılma hesabatı Sending installation feedback. QuraÅŸdırılma hesabatının göndÉ™rmÉ™si. Internal error in install-tracking. install-tracking daxili xÉ™tası. HTTP request timed out. HTTP sorÄŸusunun vaxtı keçdi. TrackingKUserFeedbackJob KDE user feedback KDE istifadəçi hesabatı Configuring KDE user feedback. KDE istifadəçi hesabatının tÉ™nzimlÉ™nmÉ™si. Error in KDE user feedback configuration. KDE istifadəçi hesabatının tÉ™nzimlÉ™nmÉ™sindÉ™ xÉ™ta. Could not configure KDE user feedback correctly, script error %1. KDE istifadəçi hesabatı düzgün tÉ™nzimlÉ™nmÉ™di, É™mr xÉ™tası %1. Could not configure KDE user feedback correctly, Calamares error %1. KDE istifadəçi hesabatı düzgün tÉ™nzimlÉ™nmÉ™di, Calamares xÉ™tası %1. TrackingMachineUpdateManagerJob Machine feedback Kompyuter hesabatı Configuring machine feedback. kompyuter hesabatının tÉ™nzimlÉ™nmÉ™si. Error in machine feedback configuration. Kompyuter hesabatının tÉ™nzimlÉ™nmÉ™sindÉ™ xÉ™ta. Could not configure machine feedback correctly, script error %1. Kompyuter hesabatı düzgün tÉ™nzimlÉ™nmÉ™di, É™mr xÉ™tası %1. Could not configure machine feedback correctly, Calamares error %1. Kompyuter hesabatı düzgün tÉ™nzimlÉ™nmÉ™di, Calamares xÉ™tası %1. TrackingPage Form Format Placeholder ÆvÉ™zlÉ™yici <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>GöndÉ™rmÉ™k üçün buraya kliklÉ™yin <span style=" font-weight:600;">quraÅŸdırıcınız haqqında heç bir mÉ™lumat yoxdur</span>.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">İstifadəçi hesabatı haqqında daha çox mÉ™lumat üçün buraya kliklÉ™yin</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. İzlÉ™mÉ™ %1É™, cihazın neçə dÉ™fÉ™ quraÅŸdırıldığını, hansı cihazda quraÅŸdırıldığını vÉ™ hansı tÉ™tbiqlÉ™rdÉ™n istifadÉ™ olunduÄŸunu görmÉ™yÉ™ kömÉ™k edir. GöndÉ™rilÉ™nlÉ™ri görmÉ™k üçün hÉ™r sahÉ™nin yanındakı yardım iÅŸarÉ™sini vurun. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. Bunu seçərÉ™k quraÅŸdırma vÉ™ kompyuteriniz haqqında mÉ™lumat göndÉ™rÉ™cÉ™ksiniz. QuraÅŸdırma baÅŸa çatdıqdan sonra, bu mÉ™lumat yalnız <b>bir dÉ™fÉ™</b> göndÉ™rilÉ™cÉ™kdir. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. Bu seçimdÉ™ siz vaxtaşırı <b>kompyuter</b> qurÄŸularınız, avadanlıq vÉ™ tÉ™tbiqlÉ™riniz haqqında %1-É™ mÉ™lumat göndÉ™rÉ™cÉ™ksiniz. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. Bu seçimdÉ™ siz vaxtaşırı <b>istifadəçi</b> qurÄŸularınız, avadanlıq vÉ™ tÉ™tbiqlÉ™riniz haqqında %1-É™ mÉ™lumat göndÉ™rÉ™cÉ™ksiniz. TrackingViewStep Feedback Hesabat UmountJob Unmount file systems. Fayl sistemini ayırmaq. No target system available. HÉ™dÉ™f sistemi É™lçatan deyil. No rootMountPoint is set. Kök qoÅŸulma nöztÉ™si (rootMountPoint) tÉ™yin olunmayıb. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>ÆgÉ™r bu kompyuteri sizdÉ™n baÅŸqa ÅŸÉ™xs istifadÉ™ edÉ™cÉ™kdirsÉ™ o zaman ayarlandıqdan sonra bir neçə istifadəçi hesabı yarada bilÉ™rsiniz.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>ÆgÉ™r bu kompyuteri sizdÉ™n baÅŸqa ÅŸÉ™xs istifadÉ™ edÉ™cÉ™kdirsÉ™ o zaman quraÅŸdırıldıqdan sonra bir neçə istifadəçi hesabı yarada bilÉ™rsiniz.</small> UsersQmlViewStep Users İstifadəçilÉ™r UsersViewStep Users İstifadəçilÉ™r VariantModel Key Column header for key/value Açar Value Column header for key/value DÉ™yÉ™r VolumeGroupBaseDialog Create Volume Group Tutumlar qrupu yaratmaq List of Physical Volumes Fiziki Tutumların siyahısı Volume Group Name: Tutum Qrupunun adı: Volume Group Type: Tutum Qrupunun Növü: Physical Extent Size: Fiziki boy ölçüsü: MiB MB Total Size: Ümumi Ölçü: Used Size: İstifadÉ™ olunanın ölçüsü: Total Sectors: Ümumi BölmÉ™lÉ™r: Quantity of LVs: LVlÉ™rin sayı: WelcomePage Form Format Select application and system language Sistem vÉ™ tÉ™tbiq dilini seçmÉ™k 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 %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 WelcomeQmlViewStep Welcome XoÅŸ GÉ™ldiniz WelcomeViewStep Welcome XoÅŸ GÉ™ldiniz ZfsJob Create ZFS pools and datasets ZFS mÉ™nbÉ™lÉ™ri - zpool vÉ™ verilÉ™nlÉ™r dÉ™sti yaratmaq Failed to create zpool on Zpool yaradıla bilmÉ™di Configuration Error TÉ™nzimlÉ™mÉ™ xÉ™tası No partitions are available for ZFS. ZFS üçün É™lçatan bölmÉ™lÉ™r yoxdur. Internal data missing Daxili mÉ™lumatlar çatışmır Failed to create zpool Zpool yaradıla bilmÉ™di Failed to create dataset VerilÉ™nlÉ™r dÉ™sti yaradıla bilmÉ™di The output was: Çıxışda: calamares-sidebar About Haqqında Debug Sazlama Show information about Calamares Calamares haqqında mÉ™lumatlar göstÉ™rilsin Show debug information Sazlama mÉ™lumatlarını göstÉ™rmÉ™k finishedq Installation Completed QuraÅŸdırma baÅŸa çatdı %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 komputerinizÉ™ quraÅŸdırıldı.<br/> Siz indi yeni quraÅŸdırılmış sistemÉ™ daxil ola bilÉ™rsiniz, vÉ™ ya Canlı mühitdÉ™n istifadÉ™ etmÉ™yÉ™ davam edÉ™ bilÉ™rsiniz. Close Installer QuraÅŸdırıcını baÄŸlayın Restart System Sistemi yenidÉ™n baÅŸladın <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>QuraÅŸdırmanın tam jurnalı, Canlı mühit istifadəçisinin ev qovluÄŸunda installation.log kimi mövcuddur.<br/> Bu jurnal, hÉ™dÉ™f sistemin /var/log/installation.log qovluÄŸuna kopyalandı.</p> finishedq@mobile Installation Completed QuraÅŸdırma baÅŸa çatdı %1 has been installed on your computer.<br/> You may now restart your device. %1 kompyuterinizÉ™ quraÅŸdırıldı.<br/> Cihazınızı indi yenidÉ™n baÅŸlada bilÉ™rsiniz. Close BaÄŸlayın Restart YenidÉ™n baÅŸladın i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>DillÉ™r</h1> </br> Sistemin yer ayarları bÉ™zi istifadəçi interfeysi elementlÉ™ri É™mrlÉ™r sÉ™tri üçün dil vÉ™ simvolların ayarlanmasına tÉ™sir edir. Cari ayar: <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>YerlÉ™r</h1></br> Sistemin mÉ™kan ayarları say vÉ™ tarix formatlarÉ™na tÉ™sir edir. Cari ayar <strong>%1</strong>-dir Back GeriyÉ™ keyboardq To activate keyboard preview, select a layout. Klaviatura önbaxışını aktiv etmÉ™k üçün bir qat seçin. Keyboard Model: Klaviatura modeli: Layouts Qatlar Type here to test your keyboard Buraya yazaraq klaviaturanı yoxlayın Variants Variantlar localeq Change DÉ™yiÅŸdirmÉ™k notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Bunlar buraxılış qeydlÉ™ri nümunÉ™sidir.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice bütün dünyada milyonlarla insanın istifadÉ™ etdiyi güclü vÉ™ pulsuz ofis proqramları dÉ™stidir. Buraya, onu bazarda hÉ™rtÉ™rÉ™fli Pulsuz vÉ™ Açıq mÉ™nbÉ™li ofis proqramları dÉ™sti halına gÉ™tirÉ™n bir neçə tÉ™tbiqlÉ™r daxildir. <br/> İlkin seçimlÉ™r. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. ÆgÉ™r ofis proqramları quraÅŸdırmaq istÉ™mÉ™sÉ™niz, sadÉ™cÉ™ "Ofis dÉ™sti olmadan' seçin. Sİz daha sonra quraÅŸdırılmış sistemÉ™ istÉ™diyiniz tÉ™tbiqi (hÉ™mçinin ofis üçün) quraÅŸdıra bilÉ™rsiniz. No Office Suite Ofis dÉ™sti olmadan Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimum İş masası quraÅŸdırması yaradın, bütün É™lavÉ™ tÉ™tbiqlÉ™ri silin vÉ™ sonra sisteminizÉ™ nÉ™ É™lavÉ™ etmÉ™k istÉ™diyinizÉ™ qÉ™rar verin. MÉ™sÉ™lÉ™n belÉ™ bir quraÅŸdırmada Office Suite, media oynadıcı, ÅŸÉ™killÉ™rÉ™ baxış vÉ™ ya printer dÉ™stÉ™yi üçün tÉ™tbiqlÉ™ri quraÅŸdırmaq istÉ™mÉ™yÉ™ bilÉ™rsiniz. Bu, yalnızca fayl bÉ™lÉ™dçisi, paket idarÉ™edicisi, mÉ™tn redaktoru vÉ™ sadÉ™ veb bÉ™lÉ™dçidÉ™n ibarÉ™t sadÉ™ İş masası olacaq. Minimal Install Minimum quraÅŸdırma Please select an option for your install, or use the default: LibreOffice included. LütfÉ™n quraÅŸdırmanız üçün bir seçim edin vÉ™ ya ilkin variandan istifadÉ™ edin: LibreOffice daxildir. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Bu Flickable tÉ™rkiblÉ™ri ilÉ™ RichText seçimlÉ™rindÉ™ göstÉ™rilÉ™n QML faylı nümunÉ™sidir</p> <p>QML RichText ilÉ™ HTML yarlığı istifadÉ™ edÉ™ bilÉ™r, Flickable daha çox toxunaqlı ekranlar üçün istifadÉ™ olunur.</p> <p><b>Bu qalın ÅŸriftli mÉ™tndir</b></p> <p><i>Bu kursif ÅŸriftli mÉ™tndir</i></p> <p><u>Bu al cizgili ÅŸriftli mÉ™tndir</u></p> <p><center>Bu mÉ™tn mÉ™rkÉ™zdÉ™ yerləşəcÉ™k.</center></p> <p><s>Bu üzÉ™ri cizgilidir</s></p> <p>Kod nümunÉ™si: <code>ls -l /home</code></p> <p><b>Siyahı:</b></p> <ul> <li>Intel CPU sistemlÉ™ri</li> <li>AMD CPU sistemlÉ™ri</li> </ul> <p>Åžaquli sürüşmÉ™ çubuÄŸu tÉ™nzimlÉ™nir, cari eni 10-a qurulur.</p> Back GeriyÉ™ usersq Pick your user name and credentials to login and perform admin tasks İnzibatçı tapşırıqlarını yerinÉ™ yetirmÉ™k vÉ™ sistemÉ™ giriÅŸ üçün istifadəçi adını vÉ™ istifadəçi hesabı mÉ™lumatlarını daxil edin What is your name? Adınız nÉ™dir? Your Full Name Tam adınız What name do you want to use to log in? GiriÅŸ üçün hansı adı istifadÉ™ etmÉ™k istÉ™yirsiniz? Login Name GiriÅŸ Adı If more than one person will use this computer, you can create multiple accounts after installation. ÆgÉ™r bu komputeri bir neçə ÅŸÉ™xs istifadÉ™ edilÉ™cÉ™ksÉ™ o zaman quraÅŸdırmadan sonra birdÉ™n çox hesab yarada bilÉ™rsiniz. Only lowercase letters, numbers, underscore and hyphen are allowed. Yalnız kiçik hÉ™rflÉ™rdÉ™n, simvollardan, alt cizgidÉ™n vÉ™ defisdÉ™n istifadÉ™ oluna bilÉ™r. root is not allowed as username. kökÉ™ istifadəçi_adı kimi icazÉ™ verilmir. What is the name of this computer? Bu kompyuterin adı nÉ™dir? Computer Name Kompyuterin adı This name will be used if you make the computer visible to others on a network. ÆgÉ™r gizlÉ™dilmÉ™zsÉ™ komputer ÅŸÉ™bÉ™kÉ™dÉ™ bu adla görünÉ™cÉ™k. localhost is not allowed as hostname. yerli hosta host_adı kimi icazÉ™ verilmir. Choose a password to keep your account safe. Hesabınızın tÉ™hlükÉ™sizliyi üçün ÅŸifrÉ™ seçin. Password ÅžifrÉ™ Repeat Password ÅžifrÉ™nin tÉ™kararı Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Düzgün yazılmasını yoxlamaq üçün eyni ÅŸifrÉ™ni iki dÉ™fÉ™ daxil edin. Güclü ÅŸifrÉ™ üçün rÉ™qÉ™m, hÉ™rf vÉ™ durÄŸu iÅŸarÉ™lÉ™rinin qarışıöğından istifadÉ™ edin. ÅžifrÉ™ É™n azı sÉ™kkiz simvoldan uzun olmalı vÉ™ müntÉ™zÉ™m olaraq dÉ™yiÅŸdirilmÉ™lidir. Validate passwords quality ÅžifrÉ™nin keyfiyyÉ™tini yoxlamaq When this box is checked, password-strength checking is done and you will not be able to use a weak password. Bu qutu iÅŸarÉ™lÉ™ndikdÉ™, ÅŸifrÉ™nin etibarlıq sÉ™viyyÉ™si yoxlanılır vÉ™ siz zÉ™if ÅŸifrÉ™dÉ™n istifadÉ™ edÉ™ bilmÉ™yÉ™cÉ™ksiniz. Log in automatically without asking for the password ÅžifrÉ™ soruÅŸmadan sistemÉ™ daxil olmaq Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Yalnız hÉ™rflÉ™rÉ™, saylara, alt cizgisinÉ™ vÉ™ tire iÅŸarÉ™sinÉ™ icazÉ™ verilir, É™n az iki simvol. Reuse user password as root password İstifadəçi ÅŸifrÉ™sini kök ÅŸifrÉ™si kimi istifadÉ™ etmÉ™k Use the same password for the administrator account. İdarəçi hesabı üçün eyni ÅŸifrÉ™dÉ™n istifadÉ™ etmÉ™k. Choose a root password to keep your account safe. Hesabınızı qorumaq üçün kök ÅŸifrÉ™sini seçin. Root Password Kök ÅžifrÉ™si Repeat Root Password Kök ÅžifrÉ™sini tÉ™krar yazın Enter the same password twice, so that it can be checked for typing errors. Düzgün yazılmasını yoxlamaq üçün eyni ÅŸifrÉ™ni iki dÉ™fÉ™ daxil edin. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>%1quraÅŸdırıcısına <quote>%2</quote> XoÅŸ GÉ™ldiniz</h3> <p>Bu proqram sizÉ™ bÉ™zi suallar verÉ™cÉ™k vÉ™ %1 komputerinizÉ™ quraÅŸdıracaq.</p> Support DÉ™stÉ™k Known issues MÉ™lum problemlÉ™r Release notes Buraxılış qeydlÉ™ri Donate Maddi dÉ™stÉ™k calamares-calamares-2d126ae/lang/calamares_az_AZ.ts000066400000000000000000007201751430147706700223300ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> %3 <strong><br/><br/> üçün <h1>%1</h1> </strong>%2<br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <a href="https://calamares.io/team/"> Calamares komandası</a>na vÉ™ <a href="https://www.transifex.com/calamares/calamares/">Calamares tÉ™rcüməçilÉ™r komandası</a>na təşəkkürlÉ™r. <br/><br/><a href="https://calamares.io/">Calamres-in inkiÅŸafı<br/> <a href="http://www.blue-systems.com/">Blue Sytems</a> Azad proqram tÉ™minatı tÉ™rÉ™findÉ™n dÉ™stÉ™klÉ™nir. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Müəllif Hüquqları %1-%2 %3 &lt;%4&gt; <br/> AutoMountManagementJob Manage auto-mount settings Avtomatik qoÅŸulma ayarlarını idarÉ™ edin BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. Sistemin <strong>açılış mühiti</strong>.<br><br>KöhnÉ™ x86 sistemlÉ™r yalnız <strong>BIOS</strong> dÉ™stÉ™klÉ™yir.<br>Müasir sistemlÉ™r isÉ™ adÉ™tÉ™n <strong>EFI</strong> istifadÉ™ edir, lakin açılış mühiti É™gÉ™r uyÄŸun rejimdÉ™ baÅŸladılmışsa, hÉ™mçinin BİOS istiafadÉ™ edÉ™ bilÉ™r. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Bu sistem <strong>EFI</strong> açılış mühiti ilÉ™ baÅŸladılıb.<br><br>EFİ ilÉ™ baÅŸlamanı ayarlamaq üçün quraÅŸdırıcı <strong>EFI Sistemi BölmÉ™si</strong> üzÉ™rindÉ™ <strong>GRUB</strong> vÉ™ ya <strong>systemd-boot</strong> kimi yüklÉ™yici istifadÉ™ etmÉ™lidir. Bunlar avtomatik olaraq seçilÉ™ bilir, lakin istÉ™diyiniz halda diskdÉ™ bu bölmÉ™lÉ™ri özünüz É™l ilÉ™ seçərÉ™k bölÉ™ bilÉ™rsiniz. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Bu sistem <strong>BIOS</strong> önyüklÉ™yici mühiti ilÉ™ iÅŸÉ™ salındı. <br> <br> BIOS mühitindÉ™n baÅŸlatmanı tÉ™nzimlÉ™mÉ™k üçün, bu quraÅŸdırıcı, ya bölmÉ™nin É™vvÉ™lindÉ™ ya da bölmÉ™lÉ™r cÉ™dvÉ™linin yanında <strong>Æsas ÖnyüklÉ™yici Qeydi</strong> bölmÉ™sindÉ™ <strong>GRUB</strong> kimi bir önyüklÉ™yici quraÅŸdırmalıdır (buna üstünlük verilir). Bu, siz É™l ilÉ™ bölmÉ™ yaratmadığınız halda öz-özünÉ™ quraÅŸdırılır. ÆgÉ™r cÉ™dvÉ™li siz bölsÉ™niz hÉ™r bir bölmÉ™ni ayrıca ayarlamalısınız. BootLoaderModel Master Boot Record of %1 %1 Æsas önyüklÉ™yici qeydi Boot Partition ÖnyüklÉ™yici bölmÉ™si System Partition Sistem bölmÉ™si Do not install a boot loader ÖnyüklÉ™yici quraÅŸdırmayın %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page BoÅŸ SÉ™hifÉ™ Calamares::DebugWindow Form Format GlobalStorage ÜmumiYaddaÅŸ JobQueue TapşırıqSırası Modules Modullar Type: Növ: none heç biri Interface: İnterfeys: Crashes Calamares, so that Dr. Konqui can look at it. Calamares çökür, belÉ™ ki, Dr. Konqui onu görÉ™ bilir. Reloads the stylesheet from the branding directory. Üslub cÉ™dvÉ™lini marka kataloqundan yenidÉ™n yüklÉ™yir. Uploads the session log to the configured pastebin. Sessiya jurnalını konfiqurasiya edilmiÅŸ pastebin'É™ yüklÉ™yir. Send Session Log Sessiya jurnalını göndÉ™rin Reload Stylesheet Üslub cÉ™dvÉ™lini yenidÉ™n yüklÉ™mÉ™k Displays the tree of widget names in the log (for stylesheet debugging). (Üslub cÉ™dvÉ™li sazlamaları üçün) Jurnalda vidjet adları aÄŸacını göstÉ™rir. Widget Tree VidjetlÉ™r aÄŸacı Debug information Sazlama mÉ™lumatları Calamares::ExecutionViewStep Set up Ayarlamaq Install QuraÅŸdırmaq Calamares::FailJob Job failed (%1) (%1) Tapşırığı yerinÉ™ yetirmÉ™k mümkün olmadı Programmed job failure was explicitly requested. Proqramın iÅŸi, istifadəçi tÉ™rÉ™findÉ™n dayandırıldı. Calamares::JobThread Done QuraÅŸdırılma baÅŸa çatdı Calamares::NamedJob Example job (%1) Tapşırıq nümunÉ™si (%1) Calamares::ProcessJob Run command '%1' in target system. '%1' É™mrini hÉ™dÉ™f sistemdÉ™ baÅŸlatmaq. Run command '%1'. '%1' É™mrini baÅŸlatmaq. Running command %1 %2 %1 É™mri icra olunur %2 Calamares::PythonJob Running %1 operation. %1 É™mÉ™liyyatı icra olunur. Bad working directory path İş qovluÄŸuna sÉ™hv yol Working directory %1 for python job %2 is not readable. %1 qovluÄŸu %2 python iÅŸlÉ™ri üçün açıla bilmir. Bad main script file Korlanmış É™sas É™mrlÉ™r faylı Main script file %1 for python job %2 is not readable. %1 É™sas É™mrlÉ™r faylı %2 python iÅŸlÉ™ri üçün açıla bilmir. Boost.Python error in job "%1". Boost.Python iÅŸ xÉ™tası "%1". Calamares::QmlViewStep Loading ... YüklÉ™nir... QML Step <i>%1</i>. QML addımı <i>%1</i>. Loading failed. YüklÉ™nmÉ™ alınmadı. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. <i>%1</i>üçün tÉ™lÉ™blÉ™rin yoxlanılması baÅŸa çatdı. Waiting for %n module(s). %n modul üçün gözlÉ™mÉ™. %n modul(lar) üçün gözlÉ™mÉ™. (%n second(s)) (%n saniyÉ™(lÉ™r)) (%n saniyÉ™) System-requirements checking is complete. Sistem uyÄŸunluqları yoxlaması baÅŸa çatdı. Calamares::ViewManager Setup Failed QuraÅŸdırılma xÉ™tası Installation Failed QuraÅŸdırılma alınmadı Error XÉ™ta &Yes &BÉ™li &No &Xeyr &Close &BaÄŸlamaq Install Log Paste URL Jurnal yerləşdirmÉ™ URL-nu daxil etmÉ™k The upload was unsuccessful. No web-paste was done. YüklÉ™mÉ™ uÄŸursuz oldu. Heç nÉ™ vebdÉ™ daxil edilmÉ™di. Install log posted to %1 Link copied to clipboard QuraÅŸdırma jurnalını burada yazın %1 Keçid mübadilÉ™ yaddaşına kopyalandı Calamares Initialization Failed Calamares iÅŸÉ™ salına bilmÉ™di %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 quraÅŸdırılmadı. Calamares konfiqurasiya edilmiÅŸ modulların hamısını yüklÉ™yÉ™ bilmÉ™di. Bu Calamares'i, sizin distribütör tÉ™rÉ™findÉ™n necÉ™ istifadÉ™ edilmÉ™sindÉ™n asılı olan bir problemdir. <br/>The following modules could not be loaded: <br/>YüklÉ™nÉ™ bilmÉ™yÉ™n modullar aÅŸağıdakılardır: Continue with setup? QuraÅŸdırılma davam etdirilsin? Continue with installation? QuraÅŸdırılma davam etdirilsin? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %1 quraÅŸdırıcı proqramı %2 quraÅŸdırmaq üçün Sizin diskdÉ™ dÉ™yiÅŸiklik etmÉ™yÉ™ hazırdır.<br/><strong>Bu dÉ™yiÅŸikliyi ləğv etmÉ™k mümkün olmayacaq.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 quraÅŸdırıcı proqramı %2 quraÅŸdırmaq üçün Sizin diskdÉ™ dÉ™yiÅŸiklik etmÉ™yÉ™ hazırdır.<br/><strong>Bu dÉ™yiÅŸikliyi ləğv etmÉ™k mümkün olmayacaq.</strong> &Set up now &İndi ayarlamaq &Install now Q&uraÅŸdırmaÄŸa baÅŸlamaq Go &back &GeriyÉ™ &Set up A&yarlamaq &Install Qu&raÅŸdırmaq Setup is complete. Close the setup program. QuraÅŸdırma baÅŸa çatdı. QuraÅŸdırma proqramını baÄŸlayın. The installation is complete. Close the installer. QuraÅŸdırma baÅŸa çatdı. QuraÅŸdırıcını baÄŸlayın. Cancel setup without changing the system. Sistemi dÉ™yiÅŸdirmÉ™dÉ™n quraÅŸdırmanı ləğv etmÉ™k. Cancel installation without changing the system. SistemÉ™ dÉ™yiÅŸiklik etmÉ™dÉ™n quraÅŸdırmadan imtina etmÉ™k. &Next İ&rÉ™li &Back &GeriyÉ™ &Done &Hazır &Cancel İm&tina etmÉ™k Cancel setup? QuraÅŸdırılmadan imtina edilsin? Cancel installation? YüklÉ™nmÉ™dÉ™n imtina edilsin? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Siz doÄŸrudanmı hazırkı quraÅŸdırmadan imtina etmÉ™k istÉ™yirsiniz? Bu proqramdan çıxılacaq vÉ™ bütün dÉ™yiÅŸikliklÉ™r itirilÉ™cÉ™kdir. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Siz doÄŸrudanmı hazırkı yüklÉ™nmÉ™dÉ™n imtina etmÉ™k istÉ™yirsiniz? Bu proqramdan çıxılacaq vÉ™ bütün dÉ™yiÅŸikliklÉ™r itirilÉ™cÉ™kdir. CalamaresPython::Helper Unknown exception type NamÉ™lum istisna hal unparseable Python error görünmÉ™miÅŸ Python xÉ™tası unparseable Python traceback görünmÉ™miÅŸ Python izi Unfetchable Python error. Oxunmayan Python xÉ™tası. CalamaresWindow %1 Setup Program %1 QuraÅŸdırıcı proqram %1 Installer %1 QuraÅŸdırıcı ChangeFilesystemLabelJob Set filesystem label on %1. Fayl sistemi yarlığını %1 üzÉ™rindÉ™ qurun. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. <strong>%1</strong> fayl sistemi yarlığını <strong>%2</strong> bölmÉ™sinÉ™ qurun. The installer failed to update partition table on disk '%1'. QuraÅŸdırıcının '%1' diskindÉ™ki bölmÉ™ni yenilÉ™mÉ™si baÅŸ tutmadı. CheckerContainer Gathering system information... Sistem mÉ™lumatları toplanır ... ChoicePage Form Format Select storage de&vice: YaddaÅŸ ci&hazını seçmÉ™k: Current: Cari: After: Sonra: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Æl ilÉ™ bölmÉ™k</strong><br/>Siz bölmÉ™ni özünüz yarada vÉ™ ölçüsünü dÉ™yiÅŸÉ™ bilÉ™rsiniz. Reuse %1 as home partition for %2. %1 Ev bölmÉ™si olaraq %2 üçün istifadÉ™ edilsin. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>KiçiltmÉ™k üçün bir bölmÉ™ seçərÉ™k altdakı çübüğü sürüşdürÉ™rÉ™k ölçüsünü verin</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 %2MB-a qÉ™dÉ™r azalacaq vÉ™ %4 üçün yeni bölmÉ™ %3MB disk bölmÉ™si yaradılacaq. Boot loader location: Ön yüklÉ™yici (boot) yeri: <strong>Select a partition to install on</strong> <strong>QuraÅŸdırılacaq disk bölmÉ™sini seçin</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI sistem bölmÉ™si tapılmadı. GeriyÉ™ qayıdın vÉ™ %1 bölmÉ™sini É™llÉ™ yaradın. The EFI system partition at %1 will be used for starting %2. %1 EFI sistemi %2 baÅŸlatmaq üçün istifadÉ™ olunacaqdır. EFI system partition: EFI sistem bölmÉ™si: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazıda É™mÉ™liyyat sistemi görünmür. NÉ™ etmÉ™k istÉ™yÉ™rdiniz?<br/>Bu cihazda dÉ™yiÅŸiklik etmÉ™dÉ™n öncÉ™ siz seçiminizi dÉ™qiqləşdirÉ™, dÉ™yiÅŸÉ™ vÉ™ tÉ™sdiq edÉ™ bilÉ™rsiniz. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Diski tÉ™mizlÉ™mÉ™k</strong><br/> <font color="red">SilmÉ™k</font>seçimi hal-hazırda, seçilmiÅŸ diskdÉ™ki bütün verilÉ™nlÉ™ri silÉ™cÉ™kdir. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Yanına quraÅŸdırın</strong><br/>QuraÅŸdırıcı, bölmÉ™ni kiçildÉ™rÉ™k %1 üçün boÅŸ disk sahÉ™si yaradacaqdır. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>BölmÉ™ni baÅŸqası ilÉ™ É™vÉ™zlÉ™mÉ™k</strong><br/>BölmÉ™ni %1 ilÉ™ É™vÉ™zlÉ™yir. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda %1 var. NÉ™ etmÉ™k istÉ™yirsiniz?<br/>Bu cihazda dÉ™yiÅŸiklik etmÉ™dÉ™n öncÉ™ siz seçiminizi dÉ™qiqləşdirÉ™, dÉ™yiÅŸÉ™ vÉ™ tÉ™sdiq edÉ™ bilÉ™rsiniz. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda artıq bir É™mÉ™liyyat sistemi var. NÉ™ etmÉ™k istÉ™rdiniz?.<br/>Bu cihazda dÉ™yiÅŸiklik etmÉ™dÉ™n öncÉ™ siz seçiminizi dÉ™qiqləşdirÉ™, dÉ™yiÅŸÉ™ vÉ™ tÉ™sdiq edÉ™ bilÉ™rsiniz. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda bir neçə É™mÉ™liyyat sistemi mövcuddur. NÉ™ etmÉ™k istÉ™rdiniz? Bu cihazda dÉ™yiÅŸiklik etmÉ™dÉ™n öncÉ™ siz seçiminizi dÉ™qiqləşdirÉ™, dÉ™yiÅŸÉ™ vÉ™ tÉ™sdiq edÉ™ bilÉ™rsiniz. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> Bu yaddaÅŸ qurÄŸusunda artıq É™mÉ™liyyat sistemi var, lakin, bölmÉ™ cÉ™dvÉ™li <strong>%1</strong>, lazım olan <strong>%2</strong> ilÉ™ fÉ™rqlidir.<br/> This storage device has one of its partitions <strong>mounted</strong>. Bu yaddaÅŸ qurÄŸusunda bölmÉ™lÉ™rdÉ™n biri <strong>quraÅŸdırılmışdır</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. Bu yaddaÅŸ qurÄŸusu <strong>qeyri-aktiv RAİD</strong> qurÄŸusunun bir hissÉ™sidir. No Swap MübadilÉ™ bölmÉ™si olmadan Reuse Swap Mövcud mübadilÉ™ bölmÉ™sini istifadÉ™ etmÉ™k Swap (no Hibernate) MübadilÉ™ bölmÉ™si (yuxu rejimi olmadan) Swap (with Hibernate) MübadilÉ™ bölmÉ™si (yuxu rejimi ilÉ™) Swap to file MübadilÉ™ faylı ClearMountsJob Successfully unmounted %1. %1 uÄŸurla ayrıldı. Successfully disabled swap %1. %1 mübadilÉ™ bölmÉ™si uÄŸurla söndürüldü. Successfully cleared swap %1. %1 mübadilÉ™ bölmÉ™si uÄŸurla tÉ™mizlÉ™ndi Successfully closed mapper device %1. YerləşdirmÉ™ cihazı %1 uÄŸurla baÄŸlandı Successfully disabled volume group %1. Tutum qrupu %1, uÄŸurla söndürüldü Clear mounts for partitioning operations on %1 %1-dÉ™ bölmÉ™ É™mÉ™liyyatı üçün qoÅŸulma nöqtÉ™lÉ™rini silmÉ™k Clearing mounts for partitioning operations on %1. %1-dÉ™ bölmÉ™ É™mÉ™liyyatı üçün qoÅŸulma nöqtÉ™lÉ™rini silinir. Cleared all mounts for %1 %1 üçün bütün qoÅŸulma nöqtÉ™lÉ™ri silindi ClearTempMountsJob Clear all temporary mounts. Bütün müvÉ™qqÉ™ti qoÅŸulma nöqtÉ™lÉ™rini ləğv etmÉ™k. Clearing all temporary mounts. Bütün müvÉ™qqÉ™ti qoÅŸulma nöqtÉ™lÉ™ri ləğv edilir. Cleared all temporary mounts. Bütün müvÉ™qqÉ™ti qoÅŸulma nöqtÉ™lÉ™ri ləğv edildi. CommandList Could not run command. Æmri ictra etmÉ™k mümkün olmadı. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Æmr, quraÅŸdırı mühitindÉ™ icra olunur vÉ™ kök qovluÄŸa yolu bilinmÉ™lidir, lakin rootMountPoint - KökQoÅŸulmaNöqtÉ™si - aÅŸkar edilmÉ™di. The command needs to know the user's name, but no username is defined. Æmr üçün istifadəçi adı vacibdir., lakin istifadəçi adı müəyyÉ™n edilmÉ™di. Config Set keyboard model to %1.<br/> Klaviatura modelini %1 olaraq tÉ™yin etmÉ™k.<br/> Set keyboard layout to %1/%2. Klaviatura qatını %1/%2 olaraq tÉ™yin etmÉ™k. Set timezone to %1/%2. Saat quraÅŸağını tÉ™yin etmÉ™k %1/%2 The system language will be set to %1. Sistem dili %1 tÉ™yin edilÉ™cÉ™k. The numbers and dates locale will be set to %1. Yerli say vÉ™ tarix formatı %1 tÉ™yin olunacaq. Network Installation. (Disabled: Incorrect configuration) ŞəbÉ™kÉ™ üzÉ™rindÉ™n quraÅŸdırmaq (Söndürüldü: SÉ™hv tÉ™nzimlÉ™nmÉ™) Network Installation. (Disabled: Received invalid groups data) ŞəbÉ™kÉ™ üzÉ™rindÉ™n quraÅŸdırmaq (Söndürüldü: qruplar haqqında sÉ™hv mÉ™lumatlar alındı) Network Installation. (Disabled: Internal error) ŞəbÉ™kÉ™nin quraÅŸdırılması. (Söndürüldü: daxili xÉ™ta) Network Installation. (Disabled: No package list) ŞəbÉ™kÉ™nin quraÅŸdırılması. (Söndürüldü: Paket siyahısı yoxdur) Package selection Paket seçimi Network Installation. (Disabled: Unable to fetch package lists, check your network connection) ŞəbÉ™kÉ™ üzÉ™rindÉ™n quraÅŸdırmaq (Söndürüldü: paket siyahıları qÉ™bul edilmir, ÅŸÉ™bÉ™kÉ™ baÄŸlantınızı yoxlayın) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Bu kompüter, %1 quraÅŸdırılması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilmÉ™z. <a href="#details">Ætraflı mÉ™lumatlar...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Bu kompüter, %1 quraÅŸdırılması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilmÉ™z. <a href="#details">Ætraflı mÉ™lumatlar...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Bu kompüter, %1 quraÅŸdırılması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilÉ™r, lakin bÉ™zi imkanları É™lçatmaz ola bilÉ™r. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Bu kompüter, %1 quraÅŸdırılması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilÉ™r, lakin bÉ™zi imkanları É™lçatmaz ola bilÉ™r. This program will ask you some questions and set up %2 on your computer. Bu proqram sizÉ™ bÉ™zi suallar verÉ™cÉ™k vÉ™ %2 É™mÉ™liyyat sistemini sizin komputerinizÉ™ qurmaÄŸa kömÉ™k edÉ™cÉ™k. <h1>Welcome to the Calamares setup program for %1</h1> <h1>%1 üçün Calamares quraÅŸdırma proqramına xoÅŸ gÉ™ldiniz!</h1> <h1>Welcome to %1 setup</h1> <h1>%1 quraÅŸdırmaq üçün xoÅŸ gÉ™ldiniz</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>%1 üçün Calamares quraÅŸdırıcısına xoÅŸ gÉ™ldiniz!</h1> <h1>Welcome to the %1 installer</h1> <h1>%1 quraÅŸdırıcısına xoÅŸ gÉ™ldiniz</h1> Your username is too long. İstifadəçi adınız çox uzundur. '%1' is not allowed as username. İstifadəçi adı '%1' ola bilmÉ™z Your username must start with a lowercase letter or underscore. İstifadəçi adınız yalnız kiçik vÉ™ ya alt cizgili hÉ™rflÉ™rdÉ™n ibarÉ™t olmalıdır. Only lowercase letters, numbers, underscore and hyphen are allowed. Yalnız kiçik hÉ™rflÉ™rdÉ™n, simvollardan, alt cizgidÉ™n vÉ™ defisdÉ™n istifadÉ™ oluna bilÉ™r. Your hostname is too short. Host adınız çox qısadır. Your hostname is too long. Host adınız çox uzundur. '%1' is not allowed as hostname. Host_adı '%1' ola bilmÉ™z Only letters, numbers, underscore and hyphen are allowed. Yalnız kiçik hÉ™rflÉ™rdÉ™n, saylardan, alt cizgidÉ™n vÉ™ defisdÉ™n istifadÉ™ oluna bilÉ™r. Your passwords do not match! ÅžifrÉ™nizin tÉ™krarı eyni deyil! OK! OLDU! Setup Failed QuraÅŸdırılma xÉ™tası Installation Failed QuraÅŸdırılma alınmadı The setup of %1 did not complete successfully. %1 qurulması uÄŸurla çaÅŸa çatmadı. The installation of %1 did not complete successfully. %1 quraÅŸdırılması uÄŸurla tamamlanmadı. Setup Complete QuraÅŸdırma tamamlandı Installation Complete QuraÅŸdırma tamamlandı The setup of %1 is complete. %1 quraÅŸdırmaq baÅŸa çatdı. The installation of %1 is complete. %1-n quraÅŸdırılması baÅŸa çatdı. Package Selection Paket seçimi Please pick a product from the list. The selected product will be installed. LütfÉ™n mÉ™hsulu siyahıdan seçin. SeçilmiÅŸ mÉ™hsul quraÅŸdırılacaqdır. Packages PaketlÉ™r Install option: <strong>%1</strong> QuraÅŸdırma seçimi: <strong>%1</strong> None Heç biri Summary NÉ™ticÉ™ This is an overview of what will happen once you start the setup procedure. Bu quraÅŸdırma proseduruna baÅŸladıqdan sonra nÉ™lÉ™rin baÅŸ verÉ™cÉ™yinÉ™ ümumi baxışdır. This is an overview of what will happen once you start the install procedure. Bu quraÅŸdırma proseduruna baÅŸladıqdan sonra nÉ™lÉ™rin baÅŸ verÉ™cÉ™yinÉ™ ümumi baxışdır. ContextualProcessJob Contextual Processes Job ŞəraitÉ™ baÄŸlı proseslÉ™rlÉ™ iÅŸ CreatePartitionDialog Create a Partition BölmÉ™ yaratmaq Si&ze: Ö&lçüsü: MiB MB Partition &Type: BölmÉ™nin &növlÉ™ri: Primar&y &İlkin E&xtended &GeniÅŸlÉ™ndirilmiÅŸ Fi&le System: Fay&l Sistemi: LVM LV name LVM LV adı &Mount Point: QoÅŸul&ma NöqtÉ™si: Flags: Bayraqlar: Label for the filesystem Fayl sitemi üçün yarlıq FS Label: FS yarlığı: En&crypt &ÅžifrÉ™lÉ™mÉ™k Logical MÉ™ntiqi Primary Æsas GPT GPT Mountpoint already in use. Please select another one. QoÅŸulma nöqtÉ™si artıq istifadÉ™ olunur. LütfÉ™n baÅŸqasını seçin. Mountpoint must start with a <tt>/</tt>. QoÅŸulma nöqtÉ™si <tt>/</tt> ilÉ™ baÅŸlamalıdır. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Yeni %1MiB bölmÉ™sini %3 (%2) üzÉ™rindÉ™ %4 giriÅŸlÉ™ri ilÉ™ yaradın. Create new %1MiB partition on %3 (%2). Yeni %1MiB bölmÉ™sini %3 (%2) üzÉ™rindÉ™ yaradın. Create new %2MiB partition on %4 (%3) with file system %1. %1 fayl sistemi ilÉ™ %4 (%3)-dÉ™ yeni %2MB bölmÉ™ yaratmaq. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Yeni <strong>%1MiB</strong> bölmÉ™sini <strong>%3</strong> (%2) üzÉ™rindÉ™ <em>%4</em> giriÅŸlÉ™rindÉ™ yaradın. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Yeni <strong>%1MiB</strong> bölmÉ™sini <strong>%3</strong> (%2) üzÉ™rindÉ™ yaradın. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%1</strong> fayl sistemi ilÉ™ <strong>%4</strong> (%3)-dÉ™ yeni <strong>%2MB</strong> bölmÉ™ yaratmaq. Creating new %1 partition on %2. %2-dÉ™ yeni %1 bölmÉ™ yaratmaq. The installer failed to create partition on disk '%1'. QuraÅŸdırıcı '%1' diskindÉ™ bölmÉ™ yarada bilmÉ™di. CreatePartitionTableDialog Create Partition Table BölmÉ™lÉ™r CÉ™dvÉ™li yaratmaq Creating a new partition table will delete all existing data on the disk. BölmÉ™lÉ™r CÉ™dvÉ™li yaratmaq, bütün diskdÉ™ olan mÉ™lumatların hamısını silÉ™cÉ™k. What kind of partition table do you want to create? Hansı BölmÉ™ CÉ™dvÉ™li yaratmaq istÉ™yirsiniz? Master Boot Record (MBR) Ön yüklÉ™mÉ™ BölmÉ™si (MBR) GUID Partition Table (GPT) GUID bölmÉ™lÉ™r cÉ™dvÉ™li (GPT) CreatePartitionTableJob Create new %1 partition table on %2. %2-dÉ™ yeni %1 bölmÉ™lÉ™r cÉ™dvÉ™li yaratmaq. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3)`dÉ™ yeni <strong>%1</strong> bölmÉ™lÉ™r cÉ™dvÉ™li yaratmaq. Creating new %1 partition table on %2. %2-dÉ™ yeni %1 bölmÉ™si yaratmaq. The installer failed to create a partition table on %1. QuraÅŸdırıcı %1-dÉ™ bölmÉ™lÉ™r cÉ™dvÉ™li yarada bilmÉ™di. CreateUserJob Create user %1 %1 İstifadəçi hesabı yaratmaq Create user <strong>%1</strong>. <strong>%1</strong> istifadəçi hesabı yaratmaq. Preserving home directory Ev qovluÄŸunun saxlanılması Creating user %1 İsitfadəçi %1 yaradılır Configuring user %1 %1 istifadəçisinin tÉ™nzimlÉ™nmÉ™si Setting file permissions Fayl icazÉ™lÉ™rinin quruaÅŸdırılması CreateVolumeGroupDialog Create Volume Group Tutumlar qrupu yaratmaq CreateVolumeGroupJob Create new volume group named %1. %1 adlı yeni tutumlar qrupu yaratmaq. Create new volume group named <strong>%1</strong>. <strong>%1</strong> adlı yeni tutumlar qrupu yaratmaq. Creating new volume group named %1. %1 adlı yeni tutumlar qrupu yaradılır. The installer failed to create a volume group named '%1'. QuraÅŸdırıcı '%1' adlı tutumlar qrupu yarada bilmÉ™di. DeactivateVolumeGroupJob Deactivate volume group named %1. %1 adlı tutumlar qrupu qeyri-aktiv edildi. Deactivate volume group named <strong>%1</strong>. <strong>%1</strong> adlı tutumlar qrupunu qeyri-aktiv etmÉ™k. The installer failed to deactivate a volume group named %1. QuraÅŸdırıcı %1 adlı tutumlar qrupunu qeyri-aktiv edÉ™ bilmÉ™di. DeletePartitionJob Delete partition %1. %1 bölmÉ™sini silmÉ™k. Delete partition <strong>%1</strong>. <strong>%1</strong> bölmÉ™sini silmÉ™k. Deleting partition %1. %1 bölmÉ™sinin silinmÉ™si. The installer failed to delete partition %1. QuraÅŸdırıcı %1 bölmÉ™sini silÉ™ bilmÉ™di. DeviceInfoWidget This device has a <strong>%1</strong> partition table. Bu cihazda <strong>%1</strong> bölmÉ™lÉ™r cÉ™dvÉ™li var. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Bu <strong>loop</strong> cihazıdır.<br><br> Bu bölmÉ™lÉ™r cÉ™dvÉ™li olmayan saxta cihaz olub, adi faylları blok cihazı kimi istifadÉ™ etmÉ™yÉ™ imkan yaradır. Bu cür qoÅŸulma adÉ™tÉ™n yalnız tÉ™k fayl sisteminÉ™ malik olur. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Bu quraÅŸdırıcı seçilmiÅŸ qurÄŸuda <strong>bölmÉ™lÉ™r cÉ™dvÉ™li aÅŸkar edÉ™ bilmÉ™di</strong>.<br><br>Bu cihazda ya bölmÉ™lÉ™r cÉ™dvÉ™li yoxdur, ya bölmÉ™lÉ™r cÉ™dvÉ™li korlanıb, ya da növü namÉ™lumdur.<br>Bu quraÅŸdırıcı bölmÉ™lÉ™r cÉ™dvÉ™lini avtomatik, ya da É™llÉ™ bölmÉ™k sÉ™hifÉ™si vasitÉ™si ilÉ™ yarada bilÉ™r. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Bu <strong>EFI</strong> ön yüklÉ™yici mühiti istifadÉ™ edÉ™n müasir sistemlÉ™r üçün mÉ™slÉ™hÉ™t görülÉ™n bölmÉ™lÉ™r cÉ™dvÉ™li növüdür. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Bu, <strong>BIOS</strong> ön yüklÉ™yici mühiti istifadÉ™ edÉ™n köhnÉ™ sistemlÉ™r üçün bölmÉ™lÉ™r cÉ™dvÉ™lidir. ÆksÉ™r hallarda bunun É™vÉ™zinÉ™ GPT istifadÉ™ etmÉ™k daha yaxşıdır. DiqqÉ™t:</strong>MBR, köhnÉ™lmiÅŸ MS-DOS standartında bölmÉ™lÉ™r cÉ™dvÉ™lidir. <br>SadÉ™cÉ™ 4 <em>ilkin</em> bölüm yaratmaÄŸa imkan verir vÉ™ 4-dÉ™n çox bölmÉ™dÉ™n yalnız biri <em>extended</em> geniÅŸlÉ™ndirilmiÅŸ ola bilÉ™r, vÉ™ belÉ™liklÉ™ daha çox <em>mÉ™ntiqi</em> bölmÉ™lÉ™r yaradıla bilÉ™r. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. SeçilmiÅŸ cihazda<strong>bölmÉ™lÉ™r cÉ™dvÉ™li</strong> növü.<br><br>BölmÉ™lÉ™r cÉ™dvÉ™li növünü dÉ™yiÅŸdirmÉ™yin yeganÉ™ yolu, bölmÉ™lÉ™r cÉ™dvÉ™lini sıfırdan silmÉ™k vÉ™ yenidÉ™n qurmaqdır, bu da saxlama cihazındakı bütün mÉ™lumatları mÉ™hv edir.<br>QuraÅŸdırıcı siz baÅŸqa bir seçim edÉ™nÉ™dÉ™k bölmÉ™lÉ™r cÉ™dvÉ™linin cari vÉ™ziyyÉ™tini saxlayacaqdır.<br>Müasir sistemlÉ™r standart olaraq GPT bölümünü istifadÉ™ edir. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 %1 -dÉ™ Dracut üçün LUKS tÉ™nzimlÉ™mÉ™lirini yazmaq Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut üçün LUKS tÉ™nzimlÉ™mÉ™lÉ™rini yazmağı ötürmÉ™k: "/" bölmÉ™si ÅŸifrÉ™lÉ™nmÉ™di Failed to open %1 %1 açılmadı DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Mövcud bölmÉ™yÉ™ düzÉ™liÅŸ etmÉ™k Con&tent: &TÉ™rkibi: &Keep &Saxlamaq Format Formatlansın 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ığı: Passphrase for existing partition Mövcud bölmÉ™ üçün ÅŸifrÉ™li ifadÉ™ Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. %1 bölmÉ™nin ÅŸifrÉ™si verilmiÅŸ ÅŸifrÉ™li ifadÉ™ ilÉ™ açıla bilmÉ™di. <br/><br/>BölmÉ™yÉ™ düzÉ™liÅŸ edin vÉ™ düzgün ÅŸifrÉ™li ifadÉ™ daxil edin vÉ™ ya silin vÉ™ yeni ÅŸifrÉ™lÉ™nmiÅŸ bölmÉ™ yaradın. EncryptWidget Form Format En&crypt system &ÅžifrÉ™lÉ™mÉ™ sistemi Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Sisteminiz göründüyü kimi bütün sistemin ÅŸifrÉ™lÉ™nmÉ™sini lazım olduÄŸu qÉ™dÉ™r dÉ™stÉ™klÉ™mir. Siz ÅŸifrÉ™lÉ™mÉ™ni aktiv edÉ™ bilÉ™rsiniz, lakin bu sistemin iÅŸini zÉ™iflÉ™dÉ™ bilÉ™r. Passphrase ÅžifrÉ™ Confirm passphrase ÅžifrÉ™ni tÉ™sdiq edin Please enter the same passphrase in both boxes. LütfÉ™n, hÉ™r iki sahÉ™yÉ™ eyni ÅŸifrÉ™ni daxil edin. ErrorDialog Details: TÉ™fÉ™rrüatlar: Would you like to paste the install log to the web? QuraÅŸdırma jurnalını vebdÉ™ yerləşdirmÉ™k istÉ™yirsinizmi? FillGlobalStorageJob Set partition information BölmÉ™ mÉ™lumatlarını ayarlamaq Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> <strong>Yeni</strong> %2 sistem bölmÉ™sindÉ™ <em>%3</em> xüsusiyyÉ™tlÉ™ri ilÉ™ %1 quraÅŸdırın Install %1 on <strong>new</strong> %2 system partition. %2 <strong>yeni</strong> sistem diskinÉ™ %1 quraÅŸdırmaq. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. <strong>Yeni</strong> %2 bölmÉ™sini <strong>%1</strong> qoÅŸulma nöqtÉ™si vÉ™ <em>%3</em> xüsusiyyÉ™tlÉ™ri ilÉ™ qurun. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. <strong>yeni</strong> %2 bölmÉ™sini <strong>%1</strong>%3 qoÅŸulma nöqtÉ™si ilÉ™ qurun. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. %3 <strong>%1</strong> sistem bölmÉ™sindÉ™ <em>%4</em> xüsusiyyÉ™tlÉ™ri ilÉ™ %2 quraÅŸdırın. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. <strong>%1</strong> %3 bölmÉ™sini <strong>%2</strong> qoÅŸulma nöqtÉ™si vÉ™ <em>%4</em> xüsusiyyÉ™tlÉ™ri ilÉ™ qurun. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. %3 bölmÉ™sinÉ™ <strong>%1</strong> ilÉ™ <strong>%2</strong>%4 qoÅŸulma nöqtÉ™si ayarlamaq. Install %2 on %3 system partition <strong>%1</strong>. %3 <strong>%1</strong> sistem bölmÉ™sindÉ™ %2 quraÅŸdırın. Install boot loader on <strong>%1</strong>. Ön yüklÉ™yicini <strong>%1</strong> üzÉ™rindÉ™ quraÅŸdırın. Setting up mount points. QoÅŸulma nöqtÉ™sini ayarlamaq. FinishedPage Form Formatlamaq &Restart now &YenidÉ™n baÅŸlatmaq <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>HÉ™r ÅŸey hazırdır.</h1><br/>%1 kompyuterinizÉ™ qurulub.<br/>Siz indi yeni sisteminizi baÅŸlada bilÉ™rsiniz. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Bu çərçivÉ™ iÅŸarÉ™lÉ™nÉ™rsÉ™ siz <span style="font-style:italic;">Hazır</span> düymÉ™sinÉ™ vurduÄŸunuz vÉ™ ya quraÅŸdırıcı proqramı baÄŸlatdığınız zaman sisteminiz dÉ™rhal yenidÉ™n baÅŸladılacaqdır.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>HÉ™r ÅŸey hazırdır.</h1><br/>%1 kompyuterinizÉ™ quraÅŸdırıldı.<br/>Siz yenidÉ™n baÅŸladaraq yeni sisteminizÉ™ daxil ola vÉ™ ya %2 Canlı mühitini istifadÉ™ etmÉ™yÉ™ davam edÉ™ bilÉ™rsiniz. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Bu çərçivÉ™ iÅŸarÉ™lÉ™nÉ™rsÉ™ siz <span style="font-style:italic;">Hazır</span> düymÉ™sinÉ™ vurduÄŸunuz vÉ™ ya quraÅŸdırıcınıı baÄŸladığınız zaman sisteminiz dÉ™rhal yenidÉ™n baÅŸladılacaqdır.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>QuraÅŸdırılma alınmadı</h1><br/>%1 kompyuterinizÉ™ quraÅŸdırıla bilmÉ™di.<br/>BaÅŸ vermiÅŸ xÉ™ta: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>QuraÅŸdırılma alınmadı</h1><br/>%1 kompyuterinizÉ™ quraÅŸdırıla bilmÉ™di.<br/>BaÅŸ vermiÅŸ xÉ™ta: %2. FinishedQmlViewStep Finish Son FinishedViewStep Finish Son FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. %4 üzÉ™rindÉ™ %1 bölmÉ™sini format etmÉ™k (fayl sistemi: %2, ölçüsü: %3 MB). Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%3MB</strong> bölmÉ™sini <strong>%2</strong> fayl sistemi ilÉ™ <strong>%1</strong> formatlamaq. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. %1 bölmÉ™sini %2 fayl sistemi ilÉ™ formatlamaq. The installer failed to format partition %1 on disk '%2'. QuraÅŸdırıcı '%2' diskindÉ™ %1 bölmÉ™sini formatlaya bilmÉ™di. GeneralRequirements has at least %1 GiB available drive space É™n az %1 QB disk boÅŸ sahÉ™si var There is not enough drive space. At least %1 GiB is required. KifayÉ™t qÉ™dÉ™r disk sahÉ™si yoxdur. Æn azı %1 QB tÉ™lÉ™b olunur. has at least %1 GiB working memory É™n azı %1 QB iÅŸ yaddaşı var The system does not have enough working memory. At least %1 GiB is required. SistemdÉ™ kifayÉ™t qÉ™dÉ™r iÅŸ yaddaşı yoxdur. Æn azı %1 GiB tÉ™lÉ™b olunur. is plugged in to a power source enerji mÉ™nbÉ™yi qoÅŸuludur The system is not plugged in to a power source. enerji mÉ™nbÉ™yi qoÅŸulmayıb. is connected to the Internet internetÉ™ qoÅŸuludur The system is not connected to the Internet. Sistem internetÉ™ qoÅŸulmayıb. is running the installer as an administrator (root) quraÅŸdırıcını adminstrator (root) imtiyazları ilÉ™ baÅŸladılması The setup program is not running with administrator rights. QuraÅŸdırıcı adminstrator imtiyazları ilÉ™ baÅŸladılmayıb. The installer is not running with administrator rights. QuraÅŸdırıcı adminstrator imtiyazları ilÉ™ baÅŸladılmayıb. has a screen large enough to show the whole installer quraÅŸdırıcını tam göstÉ™rmÉ™k üçün ekran kifayÉ™t qÉ™dÉ™r geniÅŸdir The screen is too small to display the setup program. QuraÅŸdırıcı proqramı göstÉ™rmÉ™k üçün ekran çox kiçikdir. The screen is too small to display the installer. Bu quarÅŸdırıcını göstÉ™rmÉ™k üçün ekran çox kiçikdir. HostInfoJob Collecting information about your machine. Komputeriniz haqqında mÉ™lumat toplanması. IDJob OEM Batch Identifier OEM toplama identifikatoru Could not create directories <code>%1</code>. <code>%1</code> qovluÄŸu yaradılmadı. Could not open file <code>%1</code>. <code>%1</code> faylı açılmadı. Could not write to file <code>%1</code>. <code>%1</code> faylına yazılmadı. InitcpioJob Creating initramfs with mkinitcpio. mkinitcpio kömÉ™yi ilÉ™ initramfs yaradılması. InitramfsJob Creating initramfs. initramfs yaradılması. InteractiveTerminalPage Konsole not installed Konsole quraÅŸdırılmayıb Please install KDE Konsole and try again! LütfÉ™n KDE Konsole tÉ™tbiqini quraÅŸdırın vÉ™ yenidÉ™n cÉ™hd edin! Executing script: &nbsp;<code>%1</code> Ssenari icra olunur. &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Ssenari KeyboardQmlViewStep Keyboard Klaviatura KeyboardViewStep Keyboard Klaviatura LCLocaleDialog System locale setting Ümumi mÉ™kan ayarları The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Ümumi mÉ™kan ayarları, É™mrlÉ™r sÉ™tiri interfeysinin ayrıca elementlÉ™ri üçün dil vÉ™ kodlaÅŸmaya tÉ™sir edir. <br/>Hazırkı seçim <strong>%1</strong>. &Cancel İm&tina etmÉ™k &OK &OK LOSHJob Configuring encrypted swap. ÇifrÉ™lÉ™nmiÅŸ mübadilÉ™ sahÉ™si - swap tÉ™nzimlÉ™nir. No target system available. HÉ™dÉ™f sistemi É™lçatan deyil. No rootMountPoint is set. Kök qoÅŸulma nöztÉ™si (rootMountPoint) tÉ™yin olunmayıb. No configFilePath is set. TÉ™nzimlÉ™mÉ™ faylı yolu (configFilePath) tÉ™yin olunmayıb. LicensePage Form Format <h1>License Agreement</h1> <h1>Lisenziya razılaÅŸması</h1> I accept the terms and conditions above. MÉ™n yuxarıda göstÉ™rilÉ™n ÅŸÉ™rtlÉ™ri qÉ™bul edirÉ™m. Please review the End User License Agreements (EULAs). LütfÉ™n lisenziya razılaÅŸması (EULA) ilÉ™ tanış olun. This setup procedure will install proprietary software that is subject to licensing terms. Bu quraÅŸdırma proseduru lisenziya ÅŸÉ™rtlÉ™rinÉ™ tabe olan xüsusi proqram tÉ™minatını quraÅŸdıracaqdır. If you do not agree with the terms, the setup procedure cannot continue. Lisenziya razılaÅŸmalarını qÉ™bul etmÉ™sÉ™niz quraÅŸdırılma davam etdirilÉ™ bilmÉ™z. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Bu quraÅŸdırma proseduru, É™lavÉ™ xüsusiyyÉ™tlÉ™r tÉ™min etmÉ™k vÉ™ istifadəçi tÉ™crübÉ™sini artırmaq üçün lisenziyalaÅŸdırma ÅŸÉ™rtlÉ™rinÉ™ tabe olan xüsusi proqram tÉ™minatını quraÅŸdıra bilÉ™r. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. ŞərtlÉ™rlÉ™ razılaÅŸmasanız, xüsusi proqram quraÅŸdırılmayacaq vÉ™ bunun É™vÉ™zinÉ™ açıq mÉ™nbÉ™ kodu ilÉ™ alternativlÉ™r istifadÉ™ edilÉ™cÉ™kdir. LicenseViewStep License Lisenziya LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 sürücü</strong>%2 tÉ™rÉ™findÉ™n <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafik sürücü</strong><br/><font color="Grey">%2 tÉ™rÉ™findÉ™n</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 brauzer É™lavÉ™si</strong><br/><font color="Grey">%2 tÉ™rÉ™findÉ™n</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodek</strong><br/><font color="Grey">%2 tÉ™rÉ™findÉ™n</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paket</strong><br/><font color="Grey">%2 É™rÉ™findÉ™n</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">%2 É™rÉ™findÉ™n</font> File: %1 %1 faylı Hide license text Lisenziya mÉ™tnini gizlÉ™tmÉ™k Show the license text Lisenziya mÉ™tnini göstÉ™rmÉ™k Open license agreement in browser. Lisenziya razılaÅŸmasını brauzerdÉ™ açmaq. LocalePage Region: MÉ™kan: Zone: Saat qurÅŸağı: &Change... &DÉ™yiÅŸmÉ™k... LocaleQmlViewStep Location MÉ™kan LocaleTests Quit Çıxış LocaleViewStep Location MÉ™kan LuksBootKeyFileJob Configuring LUKS key file. LUKS düymÉ™ faylını ayarlamaq. No partitions are defined. Heç bir bölmÉ™ müəyyÉ™n edilmÉ™yib. Encrypted rootfs setup error Kök fayl sisteminin ÅŸifrÉ™lÉ™nmÉ™si xÉ™tası Root partition %1 is LUKS but no passphrase has been set. %1 Kök bölmÉ™si LUKS-dur lakin, ÅŸifrÉ™ tÉ™yin olunmayıb. Could not create LUKS key file for root partition %1. %1 kök bölmÉ™si üçün LUKS düymÉ™ faylı yaradılmadı. Could not configure LUKS key file on partition %1. %1 bölmÉ™sindÉ™ LUKS düymÉ™ faylı tÉ™nzimlÉ™nÉ™ bilmÉ™di. MachineIdJob Generate machine-id. Komputerin İD-ni yaratmaq. Configuration Error TÉ™nzimlÉ™mÉ™ xÉ™tası No root mount point is set for MachineId. Komputer İD-si üçün kök qoÅŸulma nöqtÉ™si tÉ™yin edilmÉ™yib. Map Timezone: %1 Saat qurÅŸağı: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. LütfÉ™n, xÉ™ritÉ™dÉ™ üstünlük verdiyiniz yeri seçin, belÉ™ ki, quraÅŸdırıcı sizin üçün yerli vÉ™ saat qurÅŸağı parametrlÉ™rini tÉ™klif edÉ™ bilÉ™r. AÅŸağıda tÉ™klif olunan parametrlÉ™ri dÉ™qiq tÉ™nzimlÉ™yÉ™ bilÉ™rsiniz. XÉ™ritÉ™ni sürüşdürÉ™rÉ™k axtarın. miqyası dÉ™yiÅŸmÉ™k üçün +/- düymÉ™lÉ™rindÉ™n vÉ™ ya siçanla sürüşdürmÉ™ çubuÄŸundan istifadÉ™ etmÉ™k. NetInstallViewStep Package selection Paket seçimi Office software Ofis proqramı Office package Ofis paketi Browser software Veb bÉ™lÉ™dçi proqramı Browser package Veb bÉ™lÉ™dçi paketi Web browser Veb bÉ™lÉ™dçi Kernel label for netinstall module, Linux kernel NüvÉ™ Services label for netinstall module, system services XidmÉ™tlÉ™r Login label for netinstall module, choose login manager GiriÅŸ Desktop label for netinstall module, choose desktop environment İş Masası Communication label for netinstall module RabitÉ™ Development label for netinstall module TÉ™rtibat Office label for netinstall module Ofis Multimedia label for netinstall module Multimediya Internet label for netinstall module Internet Theming label for netinstall module Mövzular, Temalar Gaming label for netinstall module Oyun Utilities label for netinstall module VasitÉ™lÉ™r, AlÉ™tlÉ™r Applications TÉ™tbiqlÉ™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. PackageModel Name Adı Description TÉ™sviri Page_Keyboard Form Format Keyboard Model: Klaviatura modeli: Type here to test your keyboard Buraya yazaraq klaviaturanı yoxlayın Page_UserSetup Form Format What is your name? Adınız nÉ™dir? Your Full Name Tam adınız What name do you want to use to log in? GiriÅŸ üçün hansı adı istifadÉ™ etmÉ™k istÉ™yirsiniz? login giriÅŸ What is the name of this computer? Bu kompyuterin adı nÉ™dir? <small>This name will be used if you make the computer visible to others on a network.</small> <small>ÆgÉ™r kompyuterinizi ÅŸÉ™bÉ™kÉ™ üzÉ™rindÉ™n görünÉ™n etsÉ™niz, bu ad istifadÉ™ olunacaq.</small> Computer Name Kompyuterin adı Choose a password to keep your account safe. Hesabınızın tÉ™hlükÉ™sizliyi üçün ÅŸifrÉ™ seçin. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>SÉ™hvsiz yazmaq üçün eyni ÅŸifrÉ™ni iki dÉ™fÉ™ daxil edin. Yaxşı bir ÅŸifrÉ™, hÉ™rflÉ™rin, nömrÉ™lÉ™rin vÉ™ durÄŸu iÅŸarÉ™lÉ™rinin qarışığından vÉ™ É™n azı sÉ™kkiz simvoldan ibarÉ™t olmalıdır, hÉ™mçinin müntÉ™zÉ™m olaraq dÉ™yiÅŸdirilmÉ™lidir.</small> Password ÅžifrÉ™ Repeat Password ÅžifrÉ™nin tÉ™kararı When this box is checked, password-strength checking is done and you will not be able to use a weak password. Bu qutu iÅŸarÉ™lÉ™ndikdÉ™, ÅŸifrÉ™nin etibarlıq sÉ™viyyÉ™si yoxlanılır vÉ™ siz zÉ™if ÅŸifrÉ™dÉ™n istifadÉ™ edÉ™ bilmÉ™yÉ™cÉ™ksiniz. Require strong passwords. Güclü ÅŸifrÉ™lÉ™r tÉ™lÉ™b edilir. Log in automatically without asking for the password. ÅžifrÉ™ soruÅŸmadan sistemÉ™ avtomatik daxil olmaq. Use the same password for the administrator account. İdarəçi hesabı üçün eyni ÅŸifrÉ™dÉ™n istifadÉ™ etmÉ™k. Choose a password for the administrator account. İdarəçi hesabı üçün ÅŸifrÉ™ni seçmÉ™k. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>SÉ™hvsiz yazmaq üçün eyni ÅŸifrÉ™ni iki dÉ™fÉ™ daxil edin</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI sistemi Swap Swap - MübadilÉ™ New partition for %1 %1 üçün yeni bölmÉ™ New partition Yeni bölmÉ™ %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space BoÅŸ disk sahÉ™si New partition Yeni bölmÉ™ Name Adı File System Fayl sistemi File System Label Fayl sistemi yarlığı Mount Point QoÅŸulma nöqtÉ™si Size Ölçüsü PartitionPage Form Format Storage de&vice: YaddaÅŸ qurÄŸu&su: &Revert All Changes Bütün dÉ™yiÅŸikliklÉ™ri &geri qaytarmaq New Partition &Table Yeni bölmÉ™lÉ™r &cÉ™dvÉ™li Cre&ate Yar&atmaq &Edit DüzÉ™liÅŸ &etmÉ™k &Delete &SilmÉ™k New Volume Group Yeni tutum qrupu Resize Volume Group Tutum qrupunun ölçüsünü dÉ™yiÅŸmÉ™k Deactivate Volume Group Tutum qrupunu deaktiv etmÉ™k Remove Volume Group Tutum qrupunu silmÉ™k I&nstall boot loader on: Ön yüklÉ™y&icinin quraÅŸdırılma yeri: Are you sure you want to create a new partition table on %1? %1-dÉ™ yeni bölmÉ™ yaratmaq istÉ™diyinizÉ™ É™minsiniz? Can not create new partition Yeni bölmÉ™ yaradıla bilmir The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. %1 üzÉ™rindÉ™ki bölmÉ™ cÉ™dvÉ™lindÉ™ %2 birinci disk bölümü var vÉ™ artıq É™lavÉ™ edilÉ™ bilmÉ™z. LütfÉ™n bir birinci disk bölümünü çıxarın vÉ™ É™vÉ™zinÉ™ geniÅŸlÉ™ndirilmiÅŸ bölmÉ™ É™lavÉ™ edin. PartitionViewStep Gathering system information... Sistem mÉ™lumatları toplanır ... Partitions BölmÉ™lÉ™r Unsafe partition actions are enabled. BölmÉ™lÉ™rlÉ™ qeyri-tÉ™hlükÉ™siz É™mÉ™llÉ™r ativ edilib. Partitioning is configured to <b>always</b> fail. BölmÉ™lÉ™rÉ™ bölünmÉ™ elÉ™ ayarlanıb ki, <b>hÉ™miÅŸÉ™</b> xÉ™ta ilÉ™ baÅŸa çatır. No partitions will be changed. DÉ™yiÅŸiklik edilÉ™cÉ™k heç bir bölmÉ™ yoxdur. Current: Cari: After: Sonra: No EFI system partition configured EFI sistemi bölmÉ™si tÉ™nzimlÉ™nmÉ™yib EFI system partition configured incorrectly EFİ sistem bölmÉ™si sÉ™hv yaradıldı An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. EFİ fayl sistemi %1 baÅŸladılması üçün lazımdır.<br/> <br/> EFİ fayl sistemini quraÅŸdırmaq üçün geri qayıdın vÉ™ uyÄŸun fayl sistemini seçin vÉ™ ya yaradın. The filesystem must be mounted on <strong>%1</strong>. Fayl sistemi burada qoÅŸulmalıdır: <strong>%1</strong>. The filesystem must have type FAT32. Fayl sistemi FAT32 olmalıdır. The filesystem must be at least %1 MiB in size. Fayl sisteminin ölçüsü É™n az %1 MiB olmalıdır. The filesystem must have flag <strong>%1</strong> set. Fayl sisteminÉ™ <strong>%1</strong> bayrağı tÉ™yin olunmalıdır. You can continue without setting up an EFI system partition but your system may fail to start. Siz, EFİ sistem bölmÉ™sini ayarlamadan davam edÉ™ bilÉ™rsiniz, lakin bu sisteminizin iÅŸÉ™ düşə bilmÉ™mÉ™sinÉ™ sÉ™bÉ™b ola bilÉ™r. Option to use GPT on BIOS BIOS-da GPT istifadÉ™si seçimi A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. GPT bölmÉ™ cÉ™dvÉ™li bütün sistemlÉ™r üçün yaxşıdır. Bu quraÅŸdırıcı BIOS sistemlÉ™ri üçün dÉ™ belÉ™ bir quruluÅŸu dÉ™stÉ™klÉ™yir.<br/><br/>BİOS-da GPT bölmÉ™lÉ™r cÉ™dvÉ™lini ayarlamaq üçün (É™gÉ™r bu edilmÉ™yibsÉ™) geriyÉ™ qayıdın vÉ™ bölmÉ™lÉ™r cÉ™dvÉ™lini GPT-yÉ™ qurun, sonra isÉ™ <strong>%2</strong> bayrağı seçilmiÅŸ 8 MB-lıq formatlanmamış bölmÉ™ yaradın.<br/><br/>8 MB-lıq formatlanmamış bölmÉ™ GPT ilÉ™ BİOS sistemindÉ™ %1 baÅŸlatmaq üçün lazımdır. Boot partition not encrypted Ön yüklÉ™yici bölmÉ™si çifrÉ™lÉ™nmÉ™yib A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. ÅžifrÉ™li bir kök bölmÉ™si ilÉ™ birlikdÉ™ ayrı bir ön yüklÉ™yici bölmÉ™si qurulub, ancaq ön yüklÉ™yici bölmÉ™si ÅŸifrÉ™lÉ™nmÉ™yib.<br/><br/>Bu cür quraÅŸdırma ilÉ™ baÄŸlı tÉ™hlükÉ™sizlik problemlÉ™ri olur, çünki vacib sistem sÉ™nÉ™dlÉ™ri ÅŸifrÉ™siz bölmÉ™dÉ™ saxlanılır.<br/>İstÉ™yirsinizsÉ™ davam edÉ™ bilÉ™rsiniz, lakin, fayl sisteminin kilidi, sistem baÅŸladıldıqdan daha sonra açılacaqdır.<br/>YüklÉ™mÉ™ hissÉ™sini ÅŸifrÉ™lÉ™mÉ™k üçün geri qayıdın vÉ™ bölmÉ™ yaratma pÉ™ncÉ™rÉ™sindÉ™ <strong>ÅžifrÉ™lÉ™mÉ™</strong> menyusunu seçərÉ™k onu yenidÉ™n yaradın. has at least one disk device available. É™n az bir disk qurÄŸusu mövcuddur. There are no partitions to install on. QuraÅŸdırmaq üçün bölmÉ™ yoxdur. PlasmaLnfJob Plasma Look-and-Feel Job Plasma Xarici Görünüş Mövzusu İşlÉ™ri Could not select KDE Plasma Look-and-Feel package KDE Plasma Xarici Görünüş paketinin seçilmÉ™si PlasmaLnfPage Form Format Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. LütfÉ™n, KDE Plasma İş Masası üçün Xarici Görünüşü seçin. Siz hÉ™mçinin bu mÉ™rhÉ™lÉ™ni ötürÉ™ vÉ™ sistem qurulduqdan sonra Plasma xarici görünüşünü ayarlaya bilÉ™rsiniz. Xarici Görünüşə kliklÉ™mÉ™niz onun canlı görüntüsünü sizÉ™ göstÉ™rÉ™cÉ™kdir. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. LütfÉ™n, KDE Plasma İş Masası üçün Xarici Görünüşü seçin. Siz hÉ™mçinin bu mÉ™rhÉ™lÉ™ni ötürÉ™ vÉ™ sistem qurulduqdan sonra Plasma xarici görünüşünü ayarlaya bilÉ™rsiniz. Xarici Görünüşə kliklÉ™mÉ™niz onun canlı görüntüsünü sizÉ™ göstÉ™rÉ™cÉ™kdir. PlasmaLnfViewStep Look-and-Feel Xarici Görünüş PreserveFiles Saving files for later ... Fayllar daha sonra saxlanılır... No files configured to save for later. Sonra saxlamaq üçün heç bir ayarlanan fayl yoxdur. Not all of the configured files could be preserved. Ayarlanan faylların hamısı saxlanıla bilmÉ™z. ProcessResult There was no output from the command. ÆmrlÉ™rdÉ™n çıxarış alınmadı. Output: Çıxarış: External command crashed. Xarici É™mr qÉ™zası baÅŸ verdi. Command <i>%1</i> crashed. <i>%1</i> É™mrindÉ™ qÉ™za baÅŸ verdi. External command failed to start. Xarici É™mr baÅŸladıla bilmÉ™di. Command <i>%1</i> failed to start. <i>%1</i> É™mri É™mri baÅŸladıla bilmÉ™di. Internal error when starting command. Æmr baÅŸlayarkÉ™n daxili xÉ™ta. Bad parameters for process job call. İş prosesini çağırmaq üçün xÉ™talı parametr. External command failed to finish. Xarici É™mr baÅŸa çatdırıla bilmÉ™di. Command <i>%1</i> failed to finish in %2 seconds. <i>%1</i> É™mrini %2 saniyÉ™dÉ™ baÅŸa çatdırmaq mümkün olmadı. External command finished with errors. Xarici É™mr xÉ™ta ilÉ™ baÅŸa çatdı. Command <i>%1</i> finished with exit code %2. <i>%1</i> É™mri %2 xÉ™ta kodu ilÉ™ baÅŸa çatdı. QObject %1 (%2) %1 (%2) unknown namÉ™lum extended geniÅŸlÉ™ndirilmiÅŸ unformatted format olunmamış swap mübadilÉ™ Default Standart File not found Fayl tapılmadı Path <pre>%1</pre> must be an absolute path. <pre>%1</pre> yolu mütlÉ™q bir yol olmalıdır. Directory not found Qovluq tapılmadı Could not create new random file <pre>%1</pre>. Yeni tÉ™sadüfi<pre>%1</pre> faylı yaradıla bilmir. No product MÉ™hsul yoxdur No description provided. TÉ™sviri verilmÉ™yib. (no mount point) (qoÅŸulma nöqtÉ™si yoxdur) Unpartitioned space or unknown partition table BölünmÉ™miÅŸ disk sahÉ™si vÉ™ ya namÉ™lum bölmÉ™lÉ™r cÉ™dvÉ™li Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> Bu kompüter %1 qurulması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilÉ™r, lakin bÉ™zi imkanları É™lçatmaz ola bilÉ™r.</p> RemoveUserJob Remove live user from target system Canlı istifadəçini hÉ™dÉ™f sistemindÉ™n silmÉ™k RemoveVolumeGroupJob Remove Volume Group named %1. %1 adlı Tutum Qrupunu silmÉ™k. Remove Volume Group named <strong>%1</strong>. <strong>%1</strong> adlı Tutum Qrupunu silmÉ™k. The installer failed to remove a volume group named '%1'. QuraÅŸdırıcı "%1" adlı tutum qrupunu silÉ™ bilmÉ™di. ReplaceWidget Form Format Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 quraÅŸdırmaq yerini seÅŸmÉ™k.<br/><font color="red">DiqqÉ™t!</font>bu seçilmiÅŸ bölmÉ™dÉ™ki bütün faylları silÉ™cÉ™k. The selected item does not appear to be a valid partition. SeçilmiÅŸ element etibarlı bir bölüm kimi görünmür. %1 cannot be installed on empty space. Please select an existing partition. %1 böş disk sahÉ™sinÉ™ quraÅŸdırıla bilmÉ™z. LütfÉ™n mövcüd bölmÉ™ni seçin. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 geniÅŸlÉ™ndirilmiÅŸ bölmÉ™yÉ™ quraÅŸdırıla bilmÉ™z. LütfÉ™n, mövcud birinci vÉ™ ya mÉ™ntiqi bölmÉ™ni seçin. %1 cannot be installed on this partition. %1 bu bölmÉ™yÉ™ quraÅŸdırıla bilmÉ™z. Data partition (%1) VerilÉ™nlÉ™r bölmÉ™si (%1) Unknown system partition (%1) NamÉ™lum sistem bölmÉ™si (%1) %1 system partition (%2) %1 sistem bölmÉ™si (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>%1 BölmÉ™si %2 üçün çox kiçikdir. LütfÉ™n, É™n azı %3 QB hÉ™cmindÉ™ olan bölmÉ™ni seçin. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>EFI sistem bölmÉ™si bu sistemin heç bir yerindÉ™ tapılmadı. LütfÉ™n, geri qayıdın vÉ™ %1 tÉ™yin etmÉ™k üçün É™l ilÉ™ bu bölmÉ™ni yaradın. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1, %2.bölmÉ™sindÉ™ quraÅŸdırılacaq.<br/><font color="red">DiqqÉ™t: </font>%2 bölmÉ™sindÉ™ki bütün mÉ™lumatlar itirilÉ™cÉ™k. The EFI system partition at %1 will be used for starting %2. %1 EFI sistemi %2 baÅŸlatmaq üçün istifadÉ™ olunacaqdır. EFI system partition: EFI sistem bölmÉ™si: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> Bu kompüter %1 qurulması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/> QuraÅŸdırılma davam etdirilÉ™ bilmÉ™z. </p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> Bu kompüter %1 qurulması üçün minimum tÉ™lÉ™blÉ™rÉ™ cavab vermir. <br/>QuraÅŸdırılma davam etdirilÉ™ bilÉ™r, lakin bÉ™zi imkanları É™lçatmaz ola bilÉ™r.</p> ResizeFSJob Resize Filesystem Job Fayl sisteminin ölçüsünü dÉ™yiÅŸmÉ™k Invalid configuration Etibarsız TÉ™nzimlÉ™mÉ™ The file-system resize job has an invalid configuration and will not run. Fayl sisteminin ölçüsünü dÉ™yiÅŸmÉ™k iÅŸinin tÉ™nzimlÉ™nmÉ™si etibarsızdır vÉ™ baçladıla bilmÉ™z. KPMCore not Available KPMCore mövcud deyil Calamares cannot start KPMCore for the file-system resize job. Calamares bu fayl sisteminin ölçüsünü dÉ™yiÅŸmÉ™k üçün KPMCore proqramını iÅŸÉ™ sala bilmir. Resize Failed Ölçüsünü dÉ™yiÅŸmÉ™ alınmadı The filesystem %1 could not be found in this system, and cannot be resized. %1 fayl sistemi bu sistemdÉ™ tapılmadı vÉ™ ölçüsü dÉ™yiÅŸdirilÉ™ bilmÉ™di. The device %1 could not be found in this system, and cannot be resized. %1 qurÄŸusu bu sistemdÉ™ tapılmadı vÉ™ ölçüsü dÉ™yiÅŸdirilÉ™ bilmÉ™z. The filesystem %1 cannot be resized. %1 fayl sisteminin ölçüsü dÉ™yiÅŸdirilÉ™ bilmÉ™di. The device %1 cannot be resized. %1 qurÄŸusunun ölçüsü dÉ™yiÅŸdirilÉ™ bilmÉ™di. The filesystem %1 must be resized, but cannot. %1 fayl sisteminin ölçüsü dÉ™yiÅŸdirilmÉ™lidir, lakin bu mümkün deyil. The device %1 must be resized, but cannot %1 qurÄŸusunun ölçüsü dÉ™yiÅŸdirilmÉ™lidir, lakin, bu mümkün deyil ResizePartitionJob Resize partition %1. %1 bölmÉ™sinin ölçüsünü dÉ™yiÅŸmÉ™k. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MB</strong> <strong>%1</strong> bölmÉ™sinin ölçüsünü <strong>%3MB</strong>-a dÉ™yiÅŸmÉ™k. Resizing %2MiB partition %1 to %3MiB. %2 MB %1 bölmÉ™sinin ölçüsünü %3MB-a dÉ™yiÅŸmÉ™k. The installer failed to resize partition %1 on disk '%2'. QuraÅŸdırıcı %1 bölmÉ™sinin ölçüsünü "%2" diskindÉ™ dÉ™yiÅŸÉ™ bilmÉ™di. ResizeVolumeGroupDialog Resize Volume Group Tutum qrupunun ölçüsünü dÉ™yiÅŸmÉ™k ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. %1 adlı tutum qrupunun ölçüsünü %2-dÉ™n %3-É™ dÉ™yiÅŸmÉ™k. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong> adlı tutum qrupunun ölçüsünü <strong>%2</strong>-dÉ™n strong>%3</strong>-É™ dÉ™yiÅŸmÉ™k. The installer failed to resize a volume group named '%1'. QuraÅŸdırıcı "%1" adlı tutum qrupunun ölçüsünü dÉ™yiÅŸÉ™ bilmÉ™di. ResultsListDialog For best results, please ensure that this computer: Æn yaÅŸxı nÉ™ticÉ™ üçün lütfÉ™n, É™min olun ki, bu kompyuter: System requirements Sistem tÉ™lÉ™blÉ™ri ScanningDialog Scanning storage devices... YaddaÅŸ qurÄŸusu axtarılır... Partitioning BölüşdürmÉ™ SetHostNameJob Set hostname %1 %1 host adı tÉ™yin etmÉ™k Set hostname <strong>%1</strong>. <strong>%1</strong> host adı tÉ™yin etmÉ™k. Setting hostname %1. %1 host adının ayarlanması. Internal Error Daxili XÉ™ta Cannot write hostname to target system Host adı hÉ™dÉ™f sistemÉ™ yazıla bilmÉ™di SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Klaviatura modeliini %1, qatını isÉ™ %2-%3 tÉ™yin etmÉ™k Failed to write keyboard configuration for the virtual console. Virtual konsol üçün klaviatura tÉ™nzimlÉ™mÉ™lÉ™rini yazmaq mümkün olmadı. Failed to write to %1 %1-É™ yazmaq mümkün olmadı Failed to write keyboard configuration for X11. X11 üçün klaviatura tÉ™nzimlÉ™mÉ™lÉ™rini yazmaq mümükün olmadı. Failed to write keyboard configuration to existing /etc/default directory. Klaviatura tÉ™nzimlÉ™mÉ™lÉ™ri möcvcud /etc/default qovluÄŸuna yazıla bilmÉ™di. SetPartFlagsJob Set flags on partition %1. %1 bölmÉ™sindÉ™ bayraqlar qoymaq. Set flags on %1MiB %2 partition. %1 MB %2 bölmÉ™sindÉ™ bayraqlar qoymaq. Set flags on new partition. Yeni bölmÉ™dÉ™ bayraq qoymaq. Clear flags on partition <strong>%1</strong>. <strong>%1</strong> bölmÉ™sindÉ™ki bayraqları ləğv etmÉ™k. Clear flags on %1MiB <strong>%2</strong> partition. %1MB <strong>%2</strong> bölmÉ™sindÉ™ki bayraqları ləğv etmÉ™k. Clear flags on new partition. Yeni bölmÉ™dÉ™ki bayraqları ləğv etmÉ™k. Flag partition <strong>%1</strong> as <strong>%2</strong>. <strong>%1</strong> bölmÉ™sini <strong>%2</strong> kimi bayraqlamaq. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. %1MB <strong>%2</strong> bölmÉ™sini <strong>%3</strong> kimi bayraqlamaq. Flag new partition as <strong>%1</strong>. Yeni bölmÉ™ni <strong>%1</strong> kimi bayraqlamaq. Clearing flags on partition <strong>%1</strong>. <strong>%1</strong> bölmÉ™sindÉ™ki bayraqları ləöv etmÉ™k. Clearing flags on %1MiB <strong>%2</strong> partition. %1MB <strong>%2</strong> bölmÉ™sindÉ™ki bayraqların ləğv edilmÉ™si. Clearing flags on new partition. Yeni bölmÉ™dÉ™ki bayraqların ləğv edilmÉ™si. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. <strong>%2</strong> bayraqlarının <strong>%1</strong> bölmÉ™sindÉ™ ayarlanması. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. <strong>%3</strong> bayraqlarının %1MB <strong>%2</strong> bölmÉ™sindÉ™ ayarlanması. Setting flags <strong>%1</strong> on new partition. <strong>%1</strong> bayraqlarının yeni bölmÉ™dÉ™ ayarlanması. The installer failed to set flags on partition %1. QuraÅŸdırıcı %1 bölmÉ™sinÉ™ bayraqlar qoya bilmÉ™di. SetPasswordJob Set password for user %1 %1 istifadəçisi üçün ÅŸifrÉ™ daxil etmÉ™k Setting password for user %1. %1 istifadəçisi üçün ÅŸifrÉ™ ayarlamaq. Bad destination system path. SÉ™hv sistem yolu tÉ™yinatı. rootMountPoint is %1 rootMountPoint %1-dir Cannot disable root account. Kök hesabını qeyri-aktiv etmÉ™k olmur. passwd terminated with error code %1. %1 xÉ™ta kodu ilÉ™ sonlanan ÅŸifrÉ™. Cannot set password for user %1. %1 istifadəçisi üçün ÅŸifrÉ™ yaradıla bilmÉ™di. usermod terminated with error code %1. usermod %1 xÉ™ta kodu ilÉ™ sonlandı. SetTimezoneJob Set timezone to %1/%2 Saat qurÅŸağını %1/%2 olaraq ayarlamaq Cannot access selected timezone path. SeçilmiÅŸ saat qurÅŸağı yoluna daxil olmaq mümkün deyil. Bad path: %1 Etibarsız yol: %1 Cannot set timezone. Saat qurÅŸağını qurmaq mümkün deyil. Link creation failed, target: %1; link name: %2 Keçid yaradılması alınmadı, hÉ™dÉ™f: %1; keçed adı: %2 Cannot set timezone, Saat qurÅŸağı qurulmadı, Cannot open /etc/timezone for writing /etc/timezone qovluÄŸu yazılmaq üçün açılmadı SetupGroupsJob Preparing groups. Qruplar hazırlanır. Could not create groups in target system HÉ™dÉ™f sistemdÉ™ qruplar yaratmaq mümkün olmadı These groups are missing in the target system: %1 HÉ™dÉ™f sistemdÉ™ çatışmayan qruplar: %1 SetupSudoJob Configure <pre>sudo</pre> users. <pre>sudo</pre> istifadəçilÉ™rinin tÉ™nzimlÉ™nmÉ™si. Cannot chmod sudoers file. Sudoers faylına chmod tÉ™tbiq etmÉ™k mümkün olmadı. Cannot create sudoers file for writing. Sudoers faylını yazmaq mümkün olmadı. ShellProcessJob Shell Processes Job Shell proseslÉ™ri ilÉ™ iÅŸ SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK &OK &Yes &BÉ™li &No &Xeyr &Cancel &İmtina etmÉ™k &Close &BaÄŸlamaq TrackingInstallJob Installation feedback QuraÅŸdırılma hesabatı Sending installation feedback. QuraÅŸdırılma hesabatının göndÉ™rmÉ™si. Internal error in install-tracking. install-tracking daxili xÉ™tası. HTTP request timed out. HTTP sorÄŸusunun vaxtı keçdi. TrackingKUserFeedbackJob KDE user feedback KDE istifadəçi hesabatı Configuring KDE user feedback. KDE istifadəçi hesabatının tÉ™nzimlÉ™nmÉ™si. Error in KDE user feedback configuration. KDE istifadəçi hesabatının tÉ™nzimlÉ™nmÉ™sindÉ™ xÉ™ta. Could not configure KDE user feedback correctly, script error %1. KDE istifadəçi hesabatı düzgün tÉ™nzimlÉ™nmÉ™di, É™mr xÉ™tası %1. Could not configure KDE user feedback correctly, Calamares error %1. KDE istifadəçi hesabatı düzgün tÉ™nzimlÉ™nmÉ™di, Calamares xÉ™tası %1. TrackingMachineUpdateManagerJob Machine feedback Kompyuter hesabatı Configuring machine feedback. kompyuter hesabatının tÉ™nzimlÉ™nmÉ™si. Error in machine feedback configuration. Kompyuter hesabatının tÉ™nzimlÉ™nmÉ™sindÉ™ xÉ™ta. Could not configure machine feedback correctly, script error %1. Kompyuter hesabatı düzgün tÉ™nzimlÉ™nmÉ™di, É™mr xÉ™tası %1. Could not configure machine feedback correctly, Calamares error %1. Kompyuter hesabatı düzgün tÉ™nzimlÉ™nmÉ™di, Calamares xÉ™tası %1. TrackingPage Form Format Placeholder ÆvÉ™zlÉ™yici <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>GöndÉ™rmÉ™k üçün buraya kliklÉ™yin <span style=" font-weight:600;">quraÅŸdırıcınız haqqında heç bir mÉ™lumat yoxdur</span>.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">İstifadəçi hesabatı haqqında daha çox mÉ™lumat üçün buraya kliklÉ™yin</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. İzlÉ™mÉ™ %1É™, cihazın neçə dÉ™fÉ™ quraÅŸdırıldığını, hansı cihazda quraÅŸdırıldığını vÉ™ hansı tÉ™tbiqlÉ™rdÉ™n istifadÉ™ olunduÄŸunu görmÉ™yÉ™ kömÉ™k edir. GöndÉ™rilÉ™nlÉ™ri görmÉ™k üçün hÉ™r sahÉ™nin yanındakı yardım iÅŸarÉ™sini vurun. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. Bunu seçərÉ™k quraÅŸdırma vÉ™ kompyuteriniz haqqında mÉ™lumat göndÉ™rÉ™cÉ™ksiniz. QuraÅŸdırma baÅŸa çatdıqdan sonra, bu mÉ™lumat yalnız <b>bir dÉ™fÉ™</b> göndÉ™rilÉ™cÉ™kdir. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. Bu seçimdÉ™ siz vaxtaşırı <b>kompyuter</b> qurÄŸularınız, avadanlıq vÉ™ tÉ™tbiqlÉ™riniz haqqında %1-É™ mÉ™lumat göndÉ™rÉ™cÉ™ksiniz. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. Bu seçimdÉ™ siz vaxtaşırı <b>istifadəçi</b> qurÄŸularınız, avadanlıq vÉ™ tÉ™tbiqlÉ™riniz haqqında %1-É™ mÉ™lumat göndÉ™rÉ™cÉ™ksiniz. TrackingViewStep Feedback Hesabat UmountJob Unmount file systems. Fayl sistemini ayırmaq. No target system available. HÉ™dÉ™f sistemi É™lçatan deyil. No rootMountPoint is set. Kök qoÅŸulma nöztÉ™si (rootMountPoint) tÉ™yin olunmayıb. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>ÆgÉ™r bu kompyuteri sizdÉ™n baÅŸqa ÅŸÉ™xs istifadÉ™ edÉ™cÉ™kdirsÉ™ o zaman ayarlandıqdan sonra bir neçə istifadəçi hesabı yarada bilÉ™rsiniz.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>ÆgÉ™r bu kompyuteri sizdÉ™n baÅŸqa ÅŸÉ™xs istifadÉ™ edÉ™cÉ™kdirsÉ™ o zaman quraÅŸdırıldıqdan sonra bir neçə istifadəçi hesabı yarada bilÉ™rsiniz.</small> UsersQmlViewStep Users İstifadəçilÉ™r UsersViewStep Users İstifadəçilÉ™r VariantModel Key Column header for key/value Açar Value Column header for key/value DÉ™yÉ™r VolumeGroupBaseDialog Create Volume Group Tutumlar qrupu yaratmaq List of Physical Volumes Fiziki Tutumların siyahısı Volume Group Name: Tutum Qrupunun adı: Volume Group Type: Tutum Qrupunun Növü: Physical Extent Size: Fiziki boy ölçüsü: MiB MB Total Size: Ümumi Ölçü: Used Size: İstifadÉ™ olunanın ölçüsü: Total Sectors: Ümumi BölmÉ™lÉ™r: Quantity of LVs: LVlÉ™rin sayı: WelcomePage Form Format Select application and system language Sistem vÉ™ tÉ™tbiq dilini seçmÉ™k 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 %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 WelcomeQmlViewStep Welcome XoÅŸ GÉ™ldiniz WelcomeViewStep Welcome XoÅŸ GÉ™ldiniz ZfsJob Create ZFS pools and datasets ZFS mÉ™nbÉ™lÉ™ri - zpool vÉ™ verilÉ™nlÉ™r dÉ™sti yaratmaq Failed to create zpool on Zpool yaradıla bilmÉ™di Configuration Error TÉ™nzimlÉ™mÉ™ xÉ™tası No partitions are available for ZFS. ZFS üçün É™lçatan bölmÉ™lÉ™r yoxdur. Internal data missing Daxili mÉ™lumatlar çatışmır Failed to create zpool Zpool yaradıla bilmÉ™di Failed to create dataset VerilÉ™nlÉ™r dÉ™sti yaradıla bilmÉ™di The output was: Çıxışda: calamares-sidebar About Haqqında Debug Sazlama Show information about Calamares Calamares haqqında mÉ™lumatlar göstÉ™rilsin Show debug information Sazlama mÉ™lumatlarını göstÉ™rmÉ™k finishedq Installation Completed QuraÅŸdırma baÅŸa çatdı %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 komputerinizÉ™ quraÅŸdırıldı.<br/> Siz indi yeni quraÅŸdırılmış sistemÉ™ daxil ola bilÉ™rsiniz, vÉ™ ya Canlı mühitdÉ™n istifadÉ™ etmÉ™yÉ™ davam edÉ™ bilÉ™rsiniz. Close Installer QuraÅŸdırıcını baÄŸlayın Restart System Sistemi yenidÉ™n baÅŸladın <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>QuraÅŸdırmanın tam jurnalı, Canlı mühit istifadəçisinin ev qovluÄŸunda installation.log kimi mövcuddur.<br/> Bu jurnal, hÉ™dÉ™f sistemin /var/log/installation.log qovluÄŸuna kopyalandı.</p> finishedq@mobile Installation Completed QuraÅŸdırma baÅŸa çatdı %1 has been installed on your computer.<br/> You may now restart your device. %1 kompyuterinizÉ™ quraÅŸdırıldı.<br/> Cihazınızı indi yenidÉ™n baÅŸlada bilÉ™rsiniz. Close BaÄŸlayın Restart YenidÉ™n baÅŸladın i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>DillÉ™r</h1> </br> Sistemin yer ayarları bÉ™zi istifadəçi interfeysi elementlÉ™ri É™mrlÉ™r sÉ™tri üçün dil vÉ™ simvolların ayarlanmasına tÉ™sir edir. Cari ayar: <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>YerlÉ™r</h1></br> Sistemin mÉ™kan ayarları say vÉ™ tarix formatlarÉ™na tÉ™sir edir. Cari ayar <strong>%1</strong>-dir Back GeriyÉ™ keyboardq To activate keyboard preview, select a layout. Klaviatura önbaxışını aktiv etmÉ™k üçün bir qat seçin. Keyboard Model: Klaviatura modeli: Layouts Qatlar Type here to test your keyboard Buraya yazaraq klaviaturanı yoxlayın Variants Variantlar localeq Change DÉ™yiÅŸdirmÉ™k notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Bunlar buraxılış qeydlÉ™ri nümunÉ™sidir.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice bütün dünyada milyonlarla insanın istifadÉ™ etdiyi güclü vÉ™ pulsuz ofis proqramları dÉ™stidir. Buraya, onu bazarda hÉ™rtÉ™rÉ™fli Pulsuz vÉ™ Açıq mÉ™nbÉ™li ofis proqramları dÉ™sti halına gÉ™tirÉ™n bir neçə tÉ™tbiqlÉ™r daxildir. <br/> İlkin seçimlÉ™r. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. ÆgÉ™r ofis proqramları quraÅŸdırmaq istÉ™mÉ™sÉ™niz, sadÉ™cÉ™ "Ofis dÉ™sti olmadan' seçin. Sİz daha sonra quraÅŸdırılmış sistemÉ™ istÉ™diyiniz tÉ™tbiqi (hÉ™mçinin ofis üçün) quraÅŸdıra bilÉ™rsiniz. No Office Suite Ofis dÉ™sti olmadan Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimum İş masası quraÅŸdırması yaradın, bütün É™lavÉ™ tÉ™tbiqlÉ™ri silin vÉ™ sonra sisteminizÉ™ nÉ™ É™lavÉ™ etmÉ™k istÉ™diyinizÉ™ qÉ™rar verin. MÉ™sÉ™lÉ™n belÉ™ bir quraÅŸdırmada Office Suite, media oynadıcı, ÅŸÉ™killÉ™rÉ™ baxış vÉ™ ya printer dÉ™stÉ™yi üçün tÉ™tbiqlÉ™ri quraÅŸdırmaq istÉ™mÉ™yÉ™ bilÉ™rsiniz. Bu, yalnızca fayl bÉ™lÉ™dçisi, paket idarÉ™edicisi, mÉ™tn redaktoru vÉ™ sadÉ™ veb bÉ™lÉ™dçidÉ™n ibarÉ™t sadÉ™ İş masası olacaq. Minimal Install Minimum quraÅŸdırma Please select an option for your install, or use the default: LibreOffice included. LütfÉ™n quraÅŸdırmanız üçün bir seçim edin vÉ™ ya ilkin variandan istifadÉ™ edin: LibreOffice daxildir. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Bu Flickable tÉ™rkiblÉ™ri ilÉ™ RichText seçimlÉ™rindÉ™ göstÉ™rilÉ™n QML faylı nümunÉ™sidir</p> <p>QML RichText ilÉ™ HTML yarlığı istifadÉ™ edÉ™ bilÉ™r, Flickable daha çox toxunaqlı ekranlar üçün istifadÉ™ olunur.</p> <p><b>Bu qalın ÅŸriftli mÉ™tndir</b></p> <p><i>Bu kursif ÅŸriftli mÉ™tndir</i></p> <p><u>Bu al cizgili ÅŸriftli mÉ™tndir</u></p> <p><center>Bu mÉ™tn mÉ™rkÉ™zdÉ™ yerləşəcÉ™k.</center></p> <p><s>Bu üzÉ™ri cizgilidir</s></p> <p>Kod nümunÉ™si: <code>ls -l /home</code></p> <p><b>Siyahı:</b></p> <ul> <li>Intel CPU sistemlÉ™ri</li> <li>AMD CPU sistemlÉ™ri</li> </ul> <p>Åžaquli sürüşmÉ™ çubuÄŸu tÉ™nzimlÉ™nir, cari eni 10-a qurulur.</p> Back GeriyÉ™ usersq Pick your user name and credentials to login and perform admin tasks İnzibatçı tapşırıqlarını yerinÉ™ yetirmÉ™k vÉ™ sistemÉ™ giriÅŸ üçün istifadəçi adını vÉ™ istifadəçi hesabı mÉ™lumatlarını daxil edin What is your name? Adınız nÉ™dir? Your Full Name Tam adınız What name do you want to use to log in? GiriÅŸ üçün hansı adı istifadÉ™ etmÉ™k istÉ™yirsiniz? Login Name GiriÅŸ Adı If more than one person will use this computer, you can create multiple accounts after installation. ÆgÉ™r bu komputeri bir neçə ÅŸÉ™xs istifadÉ™ edilÉ™cÉ™ksÉ™ o zaman quraÅŸdırmadan sonra birdÉ™n çox hesab yarada bilÉ™rsiniz. Only lowercase letters, numbers, underscore and hyphen are allowed. Yalnız kiçik hÉ™rflÉ™rdÉ™n, simvollardan, alt cizgidÉ™n vÉ™ defisdÉ™n istifadÉ™ oluna bilÉ™r. root is not allowed as username. kökÉ™ istifadəçi_adı kimi icazÉ™ verilmir. What is the name of this computer? Bu kompyuterin adı nÉ™dir? Computer Name Kompyuterin adı This name will be used if you make the computer visible to others on a network. ÆgÉ™r gizlÉ™dilmÉ™zsÉ™ komputer ÅŸÉ™bÉ™kÉ™dÉ™ bu adla görünÉ™cÉ™k. localhost is not allowed as hostname. yerli hosta host_adı kimi icazÉ™ verilmir. Choose a password to keep your account safe. Hesabınızın tÉ™hlükÉ™sizliyi üçün ÅŸifrÉ™ seçin. Password ÅžifrÉ™ Repeat Password ÅžifrÉ™nin tÉ™kararı Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Düzgün yazılmasını yoxlamaq üçün eyni ÅŸifrÉ™ni iki dÉ™fÉ™ daxil edin. Güclü ÅŸifrÉ™ üçün rÉ™qÉ™m, hÉ™rf vÉ™ durÄŸu iÅŸarÉ™lÉ™rinin qarışıöğından istifadÉ™ edin. ÅžifrÉ™ É™n azı sÉ™kkiz simvoldan uzun olmalı vÉ™ müntÉ™zÉ™m olaraq dÉ™yiÅŸdirilmÉ™lidir. Validate passwords quality ÅžifrÉ™nin keyfiyyÉ™tini yoxlamaq When this box is checked, password-strength checking is done and you will not be able to use a weak password. Bu qutu iÅŸarÉ™lÉ™ndikdÉ™, ÅŸifrÉ™nin etibarlıq sÉ™viyyÉ™si yoxlanılır vÉ™ siz zÉ™if ÅŸifrÉ™dÉ™n istifadÉ™ edÉ™ bilmÉ™yÉ™cÉ™ksiniz. Log in automatically without asking for the password ÅžifrÉ™ soruÅŸmadan sistemÉ™ daxil olmaq Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Yalnız hÉ™rflÉ™rÉ™, saylara, alt cizgisinÉ™ vÉ™ tire iÅŸarÉ™sinÉ™ icazÉ™ verilir, É™n az iki simvol. Reuse user password as root password İstifadəçi ÅŸifrÉ™sini kök ÅŸifrÉ™si kimi istifadÉ™ etmÉ™k Use the same password for the administrator account. İdarəçi hesabı üçün eyni ÅŸifrÉ™dÉ™n istifadÉ™ etmÉ™k. Choose a root password to keep your account safe. Hesabınızı qorumaq üçün kök ÅŸifrÉ™sini seçin. Root Password Kök ÅžifrÉ™si Repeat Root Password Kök ÅžifrÉ™sini tÉ™krar yazın Enter the same password twice, so that it can be checked for typing errors. Düzgün yazılmasını yoxlamaq üçün eyni ÅŸifrÉ™ni iki dÉ™fÉ™ daxil edin. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>%1quraÅŸdırıcısına <quote>%2</quote> XoÅŸ GÉ™ldiniz</h3> <p>Bu proqram sizÉ™ bÉ™zi suallar verÉ™cÉ™k vÉ™ %1 komputerinizÉ™ quraÅŸdıracaq.</p> Support DÉ™stÉ™k Known issues MÉ™lum problemlÉ™r Release notes Buraxılış qeydlÉ™ri Donate Maddi dÉ™stÉ™k calamares-calamares-2d126ae/lang/calamares_be.ts000066400000000000000000007524731430147706700217200ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 Ðе атрымалаÑÑ ÑžÑталÑваць 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 ÐчыÑціць пункты Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½Ð½Ñ Ñ€Ð°Ð·Ð¼ÐµÑ‚ÐºÑ– на %1 Clearing mounts for partitioning operations on %1. ÐчыÑтка пунктаў Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½Ð½Ñ Ñ€Ð°Ð·Ð¼ÐµÑ‚ÐºÑ– на %1. Cleared all mounts for %1 УÑе пункты Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ‡Ñ‹ÑˆÑ‡Ð°Ð½Ñ‹Ñ Ð´Ð»Ñ %1 ClearTempMountsJob Clear all temporary mounts. ÐчыÑціць уÑе чаÑÐ¾Ð²Ñ‹Ñ Ð¿ÑƒÐ½ÐºÑ‚Ñ‹ мантаваннÑ. Clearing all temporary mounts. Ðчышчаюцца ÑžÑе чаÑÐ¾Ð²Ñ‹Ñ Ð¿ÑƒÐ½ÐºÑ‚Ñ‹ мантаваннÑ. Cleared all temporary mounts. УÑе чаÑÐ¾Ð²Ñ‹Ñ Ð¿ÑƒÐ½ÐºÑ‚Ñ‹ Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ‡Ñ‹ÑˆÑ‡Ð°Ð½Ñ‹Ñ. CommandList Could not run command. Ðе атрымалаÑÑ Ð·Ð°Ð¿ÑƒÑціць загад. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Загад выконваецца Ñž аÑÑроддзі праграмы Ð´Ð»Ñ ÑžÑталёўкі. Яму неабходна ведаць шлÑÑ… да каранёвага раздзела, але 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. Калі лаÑка, абÑрыце прадукт Ñа ÑпіÑа. Ðбраны прадукт будзе ÑžÑталÑваны. Packages Пакункі Install option: <strong>%1</strong> None Summary Ðгулам This is an overview of what will happen once you start the setup procedure. ГÑта аглÑд дзеÑннÑÑž, ÑÐºÑ–Ñ Ð·Ð´ÐµÐ¹ÑнÑцца Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку працÑдуры ÑžÑталёўкі. This is an overview of what will happen once you start the install procedure. ГÑта аглÑд дзеÑннÑÑž, ÑÐºÑ–Ñ Ð·Ð´ÐµÐ¹ÑнÑцца Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку працÑдуры ÑžÑталёўкі. ContextualProcessJob Contextual Processes Job КантÑкÑÑ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ð¿Ñ€Ð°Ñ†ÑÑÑ‹ CreatePartitionDialog Create a Partition Стварыць раздзел Si&ze: Па&мер: MiB Міб Partition &Type: &Тып раздзела: Primar&y E&xtended &Пашыраны Fi&le System: &Ð¤Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма: LVM LV name Ðазва LVM LV &Mount Point: &Пункт мантаваннÑ: Flags: СцÑгі: Label for the filesystem FS Label: En&crypt &Шыфраваць Logical Лагічны Primary ÐÑноўны GPT GPT Mountpoint already in use. Please select another one. Пункт Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ ÑžÐ¶Ð¾ выкарыÑтоўваецца. Калі лаÑка, абÑрыце іншы. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Стварыць новы раздзел %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 РÑдагаваць Ñ–Ñны раздзел Con&tent: &Keep &Пакінуць Format Фарматаваць Warning: Formatting the partition will erase all existing data. Увага: Ð¿Ð°Ð´Ñ‡Ð°Ñ Ñ„Ð°Ñ€Ð¼Ð°Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ Ñ€Ð°Ð·Ð´Ð·ÐµÐ»Ð° ÑтрацÑцца ÑžÑе даныÑ. &Mount Point: &Пункт мантаваннÑ: Si&ze: Па&мер: MiB Міб Fi&le System: &Ð¤Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма: Flags: СцÑгі: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Форма En&crypt system СіÑÑ‚Ñма &ÑˆÑ‹Ñ„Ñ€Ð°Ð²Ð°Ð½Ð½Ñ Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Пароль Confirm passphrase Пацвердзіце парольную фразу Please enter the same passphrase in both boxes. Калі лаÑка, увÑдзіце адную Ñ– тую парольную фразу Ñž абодва радкі. ErrorDialog Details: Would you like to paste the install log to the web? Сапраўды хочаце ÑžÑтавіць журнал уÑталёўкі па Ñеціўным адраÑе? FillGlobalStorageJob Set partition information Вызначыць звеÑткі пра раздзел Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. УÑталÑваць %1 на <strong>новы</strong> %2 ÑÑ–ÑÑ‚Ñмны раздзел. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. УÑталÑваць %2 на %3 ÑÑ–ÑÑ‚Ñмны раздзел <strong>%1</strong>. Install boot loader on <strong>%1</strong>. УÑталÑваць загрузчык на <strong>%1</strong>. Setting up mount points. Ðаладка пунктаў мантаваннÑ. FinishedPage Form Форма &Restart now &ПеразапуÑціць <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Гатова.</h1><br/>СіÑÑ‚Ñма %1 уÑталÑÐ²Ð°Ð½Ð°Ñ Ð½Ð° ваш камп’ютар.<br/> Ð’Ñ‹ ўжо можаце пачаць выкарыÑтоўваць вашу новую ÑÑ–ÑÑ‚Ñму. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Калі адзначана, то ÑÑ–ÑÑ‚Ñма перазапуÑціцца адразу паÑÐ»Ñ Ð½Ð°Ñ†Ñ–ÑÐºÐ°Ð½Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÑ– <span style="font-style:italic;">Завершана</span> альбо Ð·Ð°ÐºÑ€Ñ‹Ñ†Ñ†Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ñ‹ ÑžÑталёўкі.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Завершана.</h1><br/>СіÑÑ‚Ñма %1 уÑталÑÐ²Ð°Ð½Ð°Ñ Ð½Ð° ваш камп’ютар.<br/>Ð’Ñ‹ можаце перазапуÑціць камп’ютар Ñ– ўвайÑці Ñž Ñе, альбо працÑгнуць працу Ñž 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. Фарматаванне раздзела %1 Ñž файлавую ÑÑ–ÑÑ‚Ñму %2. The installer failed to format partition %1 on disk '%2'. У праграмы ÑžÑталёўкі не атрымалаÑÑ Ð°Ð´Ñ„Ð°Ñ€Ð¼Ð°Ñ‚Ð°Ð²Ð°Ñ†ÑŒ раздзел %1 на дыÑку '%2'. GeneralRequirements has at least %1 GiB available drive space даÑтупна прынамÑÑ– %1 Гб вольнага меÑца There is not enough drive space. At least %1 GiB is required. ÐедаÑтаткова меÑца. Ðеабходна прынамÑÑ– %1 Гб. has at least %1 GiB working memory даÑтупна прынамÑÑ– %1 Гб аператыўнай памÑці The system does not have enough working memory. At least %1 GiB is required. ÐедаÑтаткова аператыўнай памÑці. ПатрÑбна прынамÑÑ– %1 Гб. is plugged in to a power source падключана да крыніцы ÑÑ–Ð»ÐºÐ°Ð²Ð°Ð½Ð½Ñ The system is not plugged in to a power source. Ðе падключана да крыніцы ÑілкаваннÑ. is connected to the Internet Ñ‘Ñць злучÑнне з інтÑрнÑтам The system is not connected to the Internet. ЗлучÑнне з інтÑрнÑтам адÑутнічае. is running the installer as an administrator (root) праграма ÑžÑталёўкі Ð·Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð½Ð°Ñ Ð°Ð´ Ñ–Ð¼Ñ Ð°Ð´Ð¼Ñ–Ð½Ñ–Ñтратара (root) The setup program is not running with administrator rights. Праграма ÑžÑталёўкі Ð·Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð½Ð°Ñ Ð±ÐµÐ· правоў адмініÑтратара. The installer is not running with administrator rights. Праграма ÑžÑталёўкі Ð·Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð½Ð°Ñ Ð±ÐµÐ· правоў адмініÑтратара. has a screen large enough to show the whole installer Ñ‘Ñць Ñкран, памераў Ñкога даÑтаткова, каб адлюÑтраваць акно праграмы ÑžÑталёўкі The screen is too small to display the setup program. Экран занадта малы Ð´Ð»Ñ Ñ‚Ð°Ð³Ð¾, каб адлюÑтраваць акно праграмы ÑžÑталёўкі. The screen is too small to display the installer. Экран занадта малы Ð´Ð»Ñ Ñ‚Ð°Ð³Ð¾, каб адлюÑтраваць акно праграмы ÑžÑталёўкі. HostInfoJob Collecting information about your machine. Збор інфармацыі пра ваш камп’ютар. IDJob OEM Batch Identifier МаÑавы ідÑнтыфікатар OEM Could not create directories <code>%1</code>. Ðе атрымалаÑÑ Ñтварыць каталогі <code>%1</code>. Could not open file <code>%1</code>. Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ файл <code>%1</code>. Could not write to file <code>%1</code>. Ðе атрымалаÑÑ Ð·Ð°Ð¿Ñ–Ñаць у файл <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. СтварÑнне initramfs праз mkinitcpio. InitramfsJob Creating initramfs. СтварÑнне initramfs. InteractiveTerminalPage Konsole not installed Konsole не ÑžÑталÑÐ²Ð°Ð½Ð°Ñ Please install KDE Konsole and try again! Калі лаÑка, ÑžÑталюйце KDE Konsole Ñ– паўтарыце зноў! Executing script: &nbsp;<code>%1</code> Выкананне Ñкрыпта: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Скрыпт KeyboardQmlViewStep Keyboard КлавіÑтура KeyboardViewStep Keyboard КлавіÑтура LCLocaleDialog System locale setting РÑгіÑÐ½Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹ ÑÑ–ÑÑ‚Ñмы The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. СіÑÑ‚ÑÐ¼Ð½Ñ‹Ñ Ñ€ÑгіÑÐ½Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹ вызначаюць мову Ñ– кадаванне Ð´Ð»Ñ Ð¿Ñўных Ñлементаў інтÑрфейÑу загаднага радка.<br/>БÑÐ³ÑƒÑ‡Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹ <strong>%1</strong>. &Cancel &СкаÑаваць &OK &Добра LOSHJob Configuring encrypted swap. Ðаладка зашыфраванага swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Форма <h1>License Agreement</h1> <h1>ЛіцÑнзійнае пагадненне</h1> I accept the terms and conditions above. Я пагаджаюÑÑ Ð· пададзенымі вышÑй умовамі. Please review the End User License Agreements (EULAs). Калі лаÑка, паглÑдзіце ліцÑнзійную дамову з канчатковым карыÑтальнікам (EULA). This setup procedure will install proprietary software that is subject to licensing terms. ÐŸÐ°Ð´Ñ‡Ð°Ñ Ð³Ñтай працÑдуры ÑžÑталюецца прапрыетарнае праграмнае забеÑпÑчÑнне, на Ñкое раÑпаўÑюджваюцца ўмовы ліцÑнзаваннÑ. If you do not agree with the terms, the setup procedure cannot continue. Калі вы не Ð·Ð³Ð¾Ð´Ð½Ñ‹Ñ Ð· умовамі, то працÑгнуць уÑталёўку не атрымаецца. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. ÐŸÐ°Ð´Ñ‡Ð°Ñ Ð³Ñтай працÑдуры ÑžÑталюецца прапрыетарнае праграмнае забеÑпÑчÑнне, на Ñкое раÑпаўÑюджваюцца ўмовы ліцÑнзаваннÑ. ГÑтае апраграмаванне патрабуецца Ð´Ð»Ñ Ð·Ð°Ð±ÐµÑпÑчÑÐ½Ð½Ñ Ð´Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ… функцый Ñ– палÑпшÑÐ½Ð½Ñ ÑžÐ·Ð°ÐµÐ¼Ð°Ð´Ð·ÐµÑÐ½Ð½Ñ Ð· карыÑтальнікам. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Калі вы не Ð·Ð³Ð¾Ð´Ð½Ñ‹Ñ Ð· умовамі, то прапрыетарнае апраграмаванне не будзе ÑžÑталÑвана. ЗамеÑÑ‚ Ñго будуць выкарыÑтоўвацца ÑÐ²Ð°Ð±Ð¾Ð´Ð½Ñ‹Ñ Ð°Ð»ÑŒÑ‚Ñрнатывы. LicenseViewStep License ЛіцÑÐ½Ð·Ñ–Ñ LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 драйвер</strong><br/>ад %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>відÑадрайвер %1 </strong><br/><font color="Grey">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 label for netinstall module, Linux kernel Ядро Services label for netinstall module, system services Службы Login label for netinstall module, choose login manager Лагін Desktop label for netinstall module, choose desktop environment Працоўнае аÑÑроддзе Communication label for netinstall module СтаÑункі Development label for netinstall module РаÑпрацоўка Office label for netinstall module ÐžÑ„Ñ–Ñ Multimedia label for netinstall module ÐœÐµÐ´Ñ‹Ñ Internet label for netinstall module ІнтÑрнÑÑ‚ Theming label for netinstall module Ðфармленне Gaming label for netinstall module Гульні Utilities label for netinstall module Утыліты Applications Праграмы 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. Калі лаÑка, абÑрыце прадукт Ñа ÑпіÑа. Ðбраны прадукт будзе ÑžÑталÑваны. 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 Раздзелы Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: БÑгучы: After: ПаÑлÑ: No EFI system partition configured ÐÑма наладжанага ÑÑ–ÑÑ‚Ñмнага раздзела EFI EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS Параметр Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹ÑÑ‚Ð°Ð½Ð½Ñ GPT у BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted Загрузачны раздзел не зашыфраваны A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Уключана шыфраванне каранёвага раздзела, але выкарыÑтаны аÑобны загрузачны раздзел без шыфраваннÑ.<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 СіÑÑ‚ÑÐ¼Ð½Ñ‹Ñ Ð¿Ð°Ñ‚Ñ€Ð°Ð±Ð°Ð²Ð°Ð½Ð½Ñ– 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 StandardButtons &OK &Добра &Yes &Так &No &Ðе &Cancel &СкаÑаваць &Close &Закрыць TrackingInstallJob Installation feedback Справаздача па ÑžÑталёўцы Sending installation feedback. Ðдпраўленне Ñправаздачы па ÑžÑталёўцы. Internal error in install-tracking. Ð£Ð½ÑƒÑ‚Ñ€Ð°Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° адÑÐ¾Ñ‡Ð²Ð°Ð½Ð½Ñ ÑžÑталёўкі. HTTP request timed out. Ð§Ð°Ñ Ñ‡Ð°ÐºÐ°Ð½Ð½Ñ Ð°Ð´ÐºÐ°Ð·Ñƒ ад HTTP Ñышоў. TrackingKUserFeedbackJob KDE user feedback Ð—Ð²Ð°Ñ€Ð¾Ñ‚Ð½Ð°Ñ ÑувÑзь KDE Configuring KDE user feedback. Ðаладка зваротнай ÑувÑзі KDE. Error in KDE user feedback configuration. ÐŸÐ°Ð´Ñ‡Ð°Ñ Ð½Ð°Ð»Ð°Ð´ÐºÑ– зваротнай ÑувÑзі KDE адбылаÑÑ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°. Could not configure KDE user feedback correctly, script error %1. Ðе атрымалаÑÑ Ð½Ð°Ð»Ð°Ð´Ð·Ñ–Ñ†ÑŒ зваротную ÑувÑзь KDE, памылка Ñкрыпта %1. Could not configure KDE user feedback correctly, Calamares error %1. Ðе атрымалаÑÑ Ð½Ð°Ð»Ð°Ð´Ð·Ñ–Ñ†ÑŒ зваротную ÑувÑзь KDE, памылка Calamares %1. TrackingMachineUpdateManagerJob Machine feedback СіÑÑ‚Ñма зваротнай ÑувÑзі Configuring machine feedback. Ðаладка ÑÑ–ÑÑ‚Ñмы зваротнай ÑувÑзі. Error in machine feedback configuration. Памылка Ñž канфігурацыі ÑÑ–ÑÑ‚Ñмы зваротнай ÑувÑзі. Could not configure machine feedback correctly, script error %1. Ðе атрымалаÑÑ Ð½Ð°Ð»Ð°Ð´Ð·Ñ–Ñ†ÑŒ ÑÑ–ÑÑ‚Ñму зваротнай ÑувÑзі, памылка Ñкрыпта %1. Could not configure machine feedback correctly, Calamares error %1. Ðе атрымалаÑÑ Ð½Ð°Ð»Ð°Ð´Ð·Ñ–Ñ†ÑŒ ÑÑ–ÑÑ‚Ñму зваротнай ÑувÑзі, памылка Calamares %1. TrackingPage Form Форма Placeholder Замена <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>ПÑтрыкніце Ñюды, каб не адпраўлÑць <span style=" font-weight:600;">ніÑкіх звеÑтак</span> пра вашу ÑžÑталёўку.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ПÑтрыкніце Ñюды, каб праглÑдзець больш звеÑтак зваротнай ÑувÑзі ад карыÑтальнікаў</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. ÐдÑочванне дапамагае праекту %1 бачыць, Ñк чаÑта ён уÑталёўваецца, на Ñкім абÑталÑванні ён уÑталёўваецца, ÑÐºÑ–Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ñ‹ выкарыÑтоўваюцца. Каб убачыць, што будзе адпраўлена, пÑтрыкніце па значку Ð»Ñ ÐºÐ¾Ð¶Ð½Ð°Ð¹ воблаÑці. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. Ðбраўшы гÑты пункт вы адправіце звеÑткі пра Ñваю канфігурацыю ÑžÑталёўкі Ñ– ваша абÑталÑванне. ЗвеÑткі адправÑцца <b>адзін раз</b> паÑÐ»Ñ Ð·Ð°Ð²ÑршÑÐ½Ð½Ñ ÑžÑталёўкі. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. Ðбраўшы гÑты пункт вы будзеце перыÑдычна адпраўлÑць звеÑткі пра уÑталёўку, абÑталÑванне Ñ– праграмы вашага <b>камп'ютара</b> на %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. Ðбраўшы гÑты пункт вы будзеце перыÑдычна адпраўлÑць звеÑткі пра уÑталёўку, абÑталÑванне, праграмы <b>карыÑтальніка</b> Ñ– воблаÑці Ñ–Ñ… выкарыÑÑ‚Ð°Ð½Ð½Ñ Ð½Ð° %1. TrackingViewStep Feedback Ð—Ð²Ð°Ñ€Ð¾Ñ‚Ð½Ð°Ñ ÑувÑзь UmountJob Unmount file systems. Ðдмантаваць Ñ„Ð°Ð¹Ð»Ð°Ð²Ñ‹Ñ ÑÑ–ÑÑ‚Ñмы. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Калі камп’ютарам карыÑтаецца некалькі чалавек, то вы можаце Ñтварыць Ð´Ð»Ñ Ñ–Ñ… акаўнты паÑÐ»Ñ Ð·Ð°Ð²ÑршÑÐ½Ð½Ñ ÑžÑталёўкі.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Калі камп’ютарам карыÑтаецца некалькі чалавек, то вы можаце Ñтварыць Ð´Ð»Ñ Ñ–Ñ… акаўнты паÑÐ»Ñ Ð·Ð°Ð²ÑршÑÐ½Ð½Ñ ÑžÑталёўкі.</small> UsersQmlViewStep Users КарыÑтальнікі UsersViewStep Users КарыÑтальнікі VariantModel Key Column header for key/value Ключ Value Column header for key/value ЗначÑнне VolumeGroupBaseDialog Create Volume Group Стварыць групу тамоў List of Physical Volumes Ð¡Ð¿Ñ–Ñ Ñ„Ñ–Ð·Ñ–Ñ‡Ð½Ñ‹Ñ… тамоў Volume Group Name: Ðазва групы тамоў: Volume Group Type: Тып групы тамоў: Physical Extent Size: Фізічны памер: MiB Міб Total Size: Ðгульны памер: Used Size: ВыкарыÑтана: Total Sectors: Сектараў агулам: Quantity of LVs: КолькаÑць LVs: WelcomePage Form Форма Select application and system language Ðбраць мову ÑÑ–ÑÑ‚Ñмы Ñ– праграм Open donations website Ðдкрыць Ñтаронку ахвÑраваннÑÑž &Donate &ÐхвÑраваць Open help and support website Ðдкрыць Ñтаронку з даведкай &Support &Падтрымка Open issues and bug-tracking website Ðдкрыць Ñтаронку трÑкера хібаў &Known issues &Ð’ÑÐ´Ð¾Ð¼Ñ‹Ñ Ð¿Ñ€Ð°Ð±Ð»ÐµÐ¼Ñ‹ Open release notes website Ðдкрыць Ñтаронку нататак да выпуÑку &Release notes &Ðататкі да выпуÑку %1 support падтрымка %1 About %1 setup Пра ÑžÑталёўку %1 About %1 installer Пра %1 WelcomeQmlViewStep Welcome Вітаем WelcomeViewStep Welcome Вітаем ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Памылка канфігурацыі No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Пра праграму Debug Show information about Calamares Show debug information Паказаць адладачную інфармацыю finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Мовы</h1></br> СіÑÑ‚ÑÐ¼Ð½Ñ‹Ñ Ñ€ÑгіÑÐ½Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹ вызначаюць мову Ñ– кадаванне Ð´Ð»Ñ Ð¿Ñўных Ñлементаў інтÑрфейÑу загаднага радка. БÑÐ³ÑƒÑ‡Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹ <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>РÑгіÑÐ½Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹</h1></br> СіÑÑ‚ÑÐ¼Ð½Ñ‹Ñ Ñ€ÑгіÑÐ½Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹ вызначаюць фармат нумароў Ñ– датаў. БÑÐ³ÑƒÑ‡Ñ‹Ñ Ð½Ð°Ð»Ð°Ð´Ñ‹ <strong>%1</strong>. Back Ðазад keyboardq To activate keyboard preview, select a layout. Keyboard Model: МадÑль клавіÑтуры: Layouts РаÑкладкі Type here to test your keyboard Радок уводу Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐµÑ€ÐºÑ– вашай клавіÑтуры Variants ВарыÑнты localeq Change ЗмÑніць notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>ГÑта прыклад нататак да выпуÑку.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>ГÑта прыклад файла QML, у Ñкім паказваюцца параметры RichText Ñа зменным змеÑцівам.</p> <p>QML з RichText можа выкарыÑтоўваць пазнакі HTML. Зменнае змеÑціва карыÑна Ð´Ð»Ñ ÑÑнÑарных Ñкранаў.</p> <p><b>ГÑта паўтлуÑты Ñ‚ÑкÑÑ‚</b></p> <p><i>ГÑта Ñ‚ÑкÑÑ‚ курÑівам</i></p> <p><u>ГÑта падкрÑÑлены</u></p> <p><center>ГÑта выраўнаваны па цÑнтры Ñ‚ÑкÑÑ‚.</center><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> Support Падтрымка Known issues Ð’ÑÐ´Ð¾Ð¼Ñ‹Ñ Ð¿Ñ€Ð°Ð±Ð»ÐµÐ¼Ñ‹ Release notes Ðататкі да выпуÑку Donate ÐхвÑраваць calamares-calamares-2d126ae/lang/calamares_bg.ts000066400000000000000000010012661430147706700217060ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1> %1</h1><br/><strong>%2<br/> за %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. БлагодарноÑти на <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. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;<br/> 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. Предизвиква Ñрив на 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 ÐеуÑпешна инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ 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> Програмата за наÑтройване на %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. ИнÑталациÑта е завършена. Затворете инÑталатор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 програма за наÑтройка %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 като домашен дÑл за %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 Без swap Reuse Swap Повторно използване на swap Swap (no Hibernate) Swap (без ХибернациÑ) Swap (with Hibernate) Swap (Ñ Ð¥Ð¸Ð±ÐµÑ€Ð½Ð°Ñ†Ð¸Ñ) Swap to file Swap във файл ClearMountsJob Successfully unmounted %1. УÑпешно демонтиране на %1. Successfully disabled swap %1. УÑпешно деактивиране на swap %1. Successfully cleared swap %1. УÑпешно изчиÑтване на swap %1. Successfully closed mapper device %1. УÑпешно затварÑне на mapper уÑтройÑтво %1. Successfully disabled volume group %1. УÑпешно деактивиране на група дÑлове %1. Clear mounts for partitioning operations on %1 РазчиÑти монтираниÑта за операциите на подÑлбата на %1 Clearing mounts for partitioning operations on %1. РазчиÑтване на монтираниÑта за операциите на подÑлбата на %1 Cleared all mounts for %1 РазчиÑтени вÑички Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð·Ð° %1 ClearTempMountsJob Clear all temporary mounts. РазчиÑти вÑички временни монтираниÑ. Clearing all temporary mounts. РазчиÑтване на вÑички временни монтираниÑ. Cleared all temporary mounts. РазчиÑтени вÑички временни монтираниÑ. CommandList Could not run command. Командата не може да Ñе изпълни. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Командата Ñе изпълнÑва в Ñредата на хоÑта и трÑбва да уÑтанови меÑтоположението на оÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ð´Ñл, но 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! 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. МолÑ, изберете продукт от ÑпиÑъка. ИзбраниÑÑ‚ продукт ще бъде инÑталиран. Packages Пакети Install option: <strong>%1</strong> ÐžÐ¿Ñ†Ð¸Ñ Ð·Ð° инÑталиране: <strong>%1</strong> None Без Summary Обобщение This is an overview of what will happen once you start the setup procedure. Това е преглед на това, което ще Ñе Ñлучи, Ñлед като започнете процедурата за наÑтройване. This is an overview of what will happen once you start the install procedure. Това е преглед на промените, които ще Ñе извършат, Ñлед като започнете процедурата по инÑталиране. ContextualProcessJob Contextual Processes Job Задача Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтуални процеÑи CreatePartitionDialog Create a Partition Създай дÑл Si&ze: Раз&мер: MiB MiB Partition &Type: &Тип на дÑла: Primar&y &ОÑновен E&xtended Р&азширен Fi&le System: Фа&йлова ÑиÑтема: LVM LV name LVM LV име &Mount Point: Точка на &монтиране: Flags: Флагове: Label for the filesystem Етикет на файловата ÑиÑтема FS Label: Етикет на ФС: En&crypt Ши&фриране Logical ЛогичеÑка Primary Главна GPT GPT Mountpoint already in use. Please select another one. Точката за монтиране вече Ñе използва. ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ друга. Mountpoint must start with a <tt>/</tt>. Точката на монтиране трÑбва да започва Ñ <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Създаване на нов %1МiB дÑл на %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) Сектор за начално зареждане (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> уÑтройÑтво.<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 Фиктивна С++ задача EditExistingPartitionDialog Edit Existing Partition Редактирай ÑъщеÑтвуващ дÑл Con&tent: &Съдържание: &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: Етикет на ФС: Passphrase for existing partition ПаÑфраза за ÑъщеÑтвуващ дÑл Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. ДÑл %1 не може да бъде декриптиран Ñ Ð´Ð°Ð´ÐµÐ½Ð°Ñ‚Ð° парола. <br/><br/> Редактирайтеотново дÑлът и дайте правилната парола или го изтрийте и Ñъздайте нов криптиран дÑл. EncryptWidget Form Форма En&crypt system Крип&тиране на ÑиÑтемата Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Изглежда, че вашата ÑиÑтема е Ñлаба за криптиране на цÑлата ÑиÑтема. Може да активирате криптирането, но производителноÑтта може да Ñпадне . Passphrase Парола Confirm passphrase Потвърди паролата Please enter the same passphrase in both boxes. МолÑ, въведете еднаква парола в двете полета. ErrorDialog Details: ПодробноÑти: Would you like to paste the install log to the web? ИÑкате ли да поÑтавите дневника за инÑталиране в мрежата? FillGlobalStorageJob Set partition information ПоÑтави Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° дÑл Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> ИнÑталиране на %1 на <strong> нов </strong> %2 ÑиÑтемен дÑл Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ <em> %3 </em> Install %1 on <strong>new</strong> %2 system partition. ИнÑталирай %1 на <strong>нов</strong> %2 ÑиÑтемен дÑл. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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></ody></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></ody></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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 OEM -партиден идентификатор Could not create directories <code>%1</code>. ÐеуÑпех при Ñъздаването на директории <code>%1 </code>. Could not open file <code>%1</code>. Грешка при отварÑне на файла <code>%1</code>. Could not write to file <code>%1</code>. Ðе може да Ñе извърши Ð·Ð°Ð¿Ð¸Ñ Ð²ÑŠÐ² файл <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Създаване на initramfs Ñ mkinitcpio. InitramfsJob Creating initramfs. Създаване на initramfs. InteractiveTerminalPage Konsole not installed Konsole не е инÑталиран Please install KDE Konsole and try again! МолÑ, инÑталирайте KDE Konsole и опитайте отново! Executing script: &nbsp;<code>%1</code> ИзпълнÑване на Ñкрипт: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Скрипт KeyboardQmlViewStep Keyboard Клавиатура KeyboardViewStep Keyboard Клавиатура LCLocaleDialog System locale setting ÐаÑтройка на локациÑта на ÑиÑтемата The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. ЛокациÑта на ÑиÑтемата заÑÑга езика и Ñимволите зададени за нÑкои елементи на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´.<br/>Текущата наÑтройка е <strong>%1</strong>. &Cancel &Отказ &OK &ОК LOSHJob Configuring encrypted swap. Конфигуриране на криптиран swap. No target system available. ÐÑма налична целева ÑиÑтема. No rootMountPoint is set. Ðе е зададен RootMountpoint. No configFilePath is set. Ðе е зададен configFilePath. LicensePage Form Форма <h1>License Agreement</h1> <h1>Лицензно Ñпоразумение</h1> I accept the terms and conditions above. Приемам лицензионните уÑловиÑ. Please review the End User License Agreements (EULAs). МолÑ, прегледайте лицензионните ÑÐ¿Ð¾Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ½Ð¸Ñ Ð·Ð° краен потребител (EULAS). This setup procedure will install proprietary software that is subject to licensing terms. Тази процедура за наÑтройка ще инÑталира патентован Ñофтуер, който подлежи налицензионни уÑловиÑ. If you do not agree with the terms, the setup procedure cannot continue. Ðко не Ñте ÑъглаÑни Ñ ÑƒÑловиÑта, процедурата за инÑталиране не може да продължи. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. С цел да Ñе оÑигурÑÑ‚ допълнителни функции и да Ñе подобри работата на потребителÑ, процедурата може да инÑталира Ñофтуер, който е обект на лицензионни уÑловиÑ. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Ðко не Ñте ÑъглаÑни Ñ ÑƒÑловиÑта, патентованиÑÑ‚ Ñофтуер нÑма да бъде инÑталиран и вмеÑто него ще бъдат използвани алтернативи Ñ Ð¾Ñ‚Ð²Ð¾Ñ€ÐµÐ½ код. LicenseViewStep License Лиценз 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 label for netinstall module, Linux kernel Ядро Services label for netinstall module, system services УÑлуги Login label for netinstall module, choose login manager Вход Desktop label for netinstall module, choose desktop environment Работен плот Communication label for netinstall module ÐšÐ¾Ð¼ÑƒÐ½Ð¸ÐºÐ°Ñ†Ð¸Ñ Development label for netinstall module Разработка Office label for netinstall module ÐžÑ„Ð¸Ñ Multimedia label for netinstall module ÐœÑƒÐ»Ñ‚Ð¸Ð¼ÐµÐ´Ð¸Ñ Internet label for netinstall module Интернет Theming label for netinstall module Стилове и теми Gaming label for netinstall module Игри Utilities label for netinstall module Помощни програми Applications ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ NotesQmlViewStep Notes Бележки OEMPage Ba&tch: Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Въведете batch идентификатор тук. Той ще Ñе ÑъхранÑва в целевата ÑиÑтема</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM КонфигурациÑ</h1><p>Calamares ще използва OEM наÑтройки при конфигуриране на целевата ÑиÑтема</p></body></html> OEMViewStep OEM Configuration OEM ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Set the OEM Batch Identifier to <code>%1</code>. Задаване на идентификатора на OEM Batch на <code>%1 </code>. Offline Select your preferred Region, or use the default settings. Изберете Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ñ‡Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð¾Ñ‚ Ð²Ð°Ñ Ñ€ÐµÐ³Ð¸Ð¾Ð½ или използвайте наÑтройките по подразбиране. Timezone: %1 ЧаÑова зона: %1 Select your preferred Zone within your Region. Изберете предпочитаната от Ð²Ð°Ñ Ð·Ð¾Ð½Ð° във Ð²Ð°ÑˆÐ¸Ñ Ñ€ÐµÐ³Ð¸Ð¾Ð½. Zones Зони You can fine-tune Language and Locale settings below. Можете да прецизирате наÑтройките за езика и регионалните формати по-долу. PWQ Password is too short Паролата е твърде кратка Password is too long Паролата е твърде дълга Password is too weak Паролата е твърде Ñлаба Memory allocation error when setting '%1' Грешка при разпределÑне на паметта по време на наÑтройването на '%1' Memory allocation error Грешка при разпределÑне на паметта The password is the same as the old one Паролата Ñъвпада Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð°Ñ‚Ð° The password is a palindrome Паролата е палиндром The password differs with case changes only Паролата Ñе различава Ñамо ÑÑŠÑ ÑмÑна на главни и малки букви The password is too similar to the old one Паролата е твърде Ñходна Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð°Ñ‚Ð° The password contains the user name in some form Паролата Ñъдържа потребителÑкото име под нÑкаква форма The password contains words from the real name of the user in some form Паролата Ñъдържа думи от иÑтинÑкото име на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð´ нÑкаква форма The password contains forbidden words in some form Паролата Ñъдържа забранени думи под нÑкаква форма The password contains too few digits Паролата Ñъдържа твърде малко цифри The password contains too few uppercase letters Паролата Ñъдържа твърде малко главни букви The password contains fewer than %n lowercase letters Паролата Ñъдържа по -малко от %n малки букви Паролата Ñъдържа по -малко от %n малки букви The password contains too few lowercase letters Паролата Ñъдържа твърде малко малки букви The password contains too few non-alphanumeric characters Паролата Ñъдържа твърде малко знаци, които не Ñа букви или цифри The password is too short Паролата е твърде кратка The password does not contain enough character classes Паролата не Ñъдържа доÑтатъчно видове знаци The password contains too many same characters consecutively Паролата Ñъдържа твърде много еднакви знаци поÑледователно The password contains too many characters of the same class consecutively Паролата Ñъдържа твърде много еднакви видове знаци поÑледователно The password contains fewer than %n digits Паролата Ñъдържа по -малко от %n цифри Паролата Ñъдържа по -малко от %n цифри The password contains fewer than %n uppercase letters Паролата Ñъдържа по -малко от %n главни букви Паролата Ñъдържа по -малко от %n главни букви The password contains fewer than %n non-alphanumeric characters Паролата Ñъдържа по-малко от %n небуквени и нецифрови знаци Паролата Ñъдържа по-малко от %n небуквени и нецифрови знаци The password is shorter than %n characters Паролата е по -къÑа от %n знака Паролата е по -къÑа от %n знака The password is a rotated version of the previous one Паролата е обърната верÑÐ¸Ñ Ð½Ð° предишната The password contains fewer than %n character classes Паролата Ñъдържа по -малко от %n клаÑове Ñимволи Паролата Ñъдържа по -малко от %n клаÑове Ñимволи The password contains more than %n same characters consecutively Паролата Ñъдържа повече от %n еднакви знака поÑледователно Паролата Ñъдържа повече от %n еднакви знака поÑледователно The password contains more than %n characters of the same class consecutively Паролата Ñъдържа повече от %n знака от един и Ñъщи ÐºÐ»Ð°Ñ Ð¿Ð¾Ñледователно Паролата Ñъдържа повече от %n знака от един и Ñъщи ÐºÐ»Ð°Ñ Ð¿Ð¾Ñледователно The password contains monotonic sequence longer than %n characters Паролата Ñъдържа монотонната поÑледователноÑÑ‚ по -дълга от %n знаци Паролата Ñъдържа монотонната поÑледователноÑÑ‚ по -дълга от %n знаци The password contains too long of a monotonic character sequence Паролата Ñъдържа твърде дълга монотонна поÑледователноÑÑ‚ от знаци No password supplied ЛипÑва парола Cannot obtain random numbers from the RNG device Получаването на произволни чиÑла от RNG уÑтройÑтвото е неуÑпешно Password generation failed - required entropy too low for settings Генерирането на парола е неуÑпешно - необходимата ÐµÐ½Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ Ðµ твърде ниÑка за наÑтройки The password fails the dictionary check - %1 Паролата не издържа проверката на речника - %1 The password fails the dictionary check Паролата не издържа проверката на речника Unknown setting - %1 ÐеизвеÑтна наÑтройка - %1 Unknown setting ÐеизвеÑтна наÑтройка Bad integer value of setting - %1 Ðевалидна чиÑлена ÑтойноÑÑ‚ на наÑтройката - %1 Bad integer value Ðевалидна чиÑлена ÑтойноÑÑ‚ на наÑтройката Setting %1 is not of integer type ÐаÑтройката %1 не е от чиÑлов вид Setting is not of integer type ÐаÑтройката не е от чиÑлов вид Setting %1 is not of string type ÐаÑтройката %1 не е от текÑтов вид Setting is not of string type ÐаÑтройката не е от текÑтов вид Opening the configuration file failed ОтварÑнето на файла Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñта е неуÑпешно The configuration file is malformed Файлът Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñта е деформиран Fatal failure Фатална повреда Unknown error ÐеизвеÑтна грешка Password is empty Паролата е празна PackageChooserPage Form Форма Product Name Продуктово име TextLabel TextLabel Long Product Description Подробно опиÑание на продукта Package Selection Избор на пакети Please pick a product from the list. The selected product will be installed. МолÑ, изберете продукт от ÑпиÑъка. ИзбраниÑÑ‚ продукт ще бъде инÑталиран. 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 Ðова група LVM дÑлове Resize Volume Group ПреоразмерÑване на група дÑлове Deactivate Volume Group Деактивиране на група дÑлове Remove Volume Group Премахване на група дÑлове I&nstall boot loader on: И& нÑталиране на програма за начално зареждане на: Are you sure you want to create a new partition table on %1? Сигурни ли Ñте че иÑкате да Ñъздадете нова таблица на дÑловете върху %1? Can not create new partition Ðе може да Ñе Ñъздаде нов дÑл The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Таблицата на дÑловете на %1 вече има %2 главни дÑлове, повече не може да Ñе добавÑÑ‚. МолÑ, премахнете един главен дÑл и добавете разширен дÑл, на негово мÑÑто. PartitionViewStep Gathering system information... Събиране на ÑиÑтемна информациÑ... Partitions ДÑлове Unsafe partition actions are enabled. Ðктивирани Ñа опаÑни дейÑÑ‚Ð²Ð¸Ñ Ñ Ð´Ñлове. Partitioning is configured to <b>always</b> fail. РазделÑнето на дÑлове е конфигурирано така, че <b>винаги</b> да е неуÑпешно. No partitions will be changed. ДÑловете нÑма да бъдат променени. Current: Сегашен: After: След: No EFI system partition configured ÐÑма конфигуриран EFI ÑиÑтемен дÑл EFI system partition configured incorrectly СиÑтемниÑÑ‚ дÑл EFI е конфигуриран неправилно An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. За Ñтартирането на %1 е необходим ÑиÑтемен дÑл EFI.<br/><br/>За да конфигурирате EFI ÑиÑтемен дÑл, върнете Ñе назад и изберете или Ñъздайте подходÑща файлова ÑиÑтема. The filesystem must be mounted on <strong>%1</strong>. Файловата ÑиÑтема трÑбва да бъде монтирана на <strong>%1 </strong>. The filesystem must have type FAT32. Файловата ÑиÑтема трÑбва да бъде от тип FAT32. The filesystem must be at least %1 MiB in size. Файловата ÑиÑтема трÑбва да е Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€ поне %1 MiB. The filesystem must have flag <strong>%1</strong> set. Файловата ÑиÑтема трÑбва да има флаг <strong>%1 </strong>. You can continue without setting up an EFI system partition but your system may fail to start. Можете да продължите, без да наÑтроите EFI ÑиÑтемен дÑл, но вашата ÑиÑтемаможе да не уÑпее да Ñе Ñтартира. Option to use GPT on BIOS ÐžÐ¿Ñ†Ð¸Ñ Ð·Ð° използване на GPT на BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Таблица Ñ Ð´Ñлове на GPT е най -добриÑÑ‚ вариант за вÑички ÑиÑтеми. Този инÑталаторподдържа такава наÑтройка и за BIOS ÑиÑтеми. <br/><br/> За конфигуриране на GPT таблица Ñ Ð´Ñловете в BIOS (ако вече не Ñте го направили), върнете Ñе назад и задайте таблица на дÑловете на GPT, Ñлед което Ñъздайте 8 MB неформатиран дÑл Ñактивиран <strong>%2 </strong> флаг. <br/><br/> Ðеобходим е 8 MB дÑл за Ñтартиране на %1 на BIOS ÑиÑтема Ñ GPT. Boot partition not encrypted ЛипÑва криптиране на дÑл за начално зареждане A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Отделен дÑл за начално зареждане беше Ñъздаден заедно Ñ ÐºÑ€Ð¸Ð¿Ñ‚Ð¸Ñ€Ð°Ð½ 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 ÐеуÑпех при избиране на пакет Ñ Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ðµ на външен вид на Plasma 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. Можете Ñъщо да пропуÑнете тази Ñтъпка и да Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð¸Ñ€Ð°Ñ‚Ðµ, Ñлед като ÑиÑтемата е наÑтроена. Щракването върху това поле ще ви даде предварителен изглед на това оформление. Please choose a 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 ГБ. <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. ПреоразмерÑване на %2MiB дÑл %1 до %3MiB. The installer failed to resize partition %1 on disk '%2'. ИнÑталатора не уÑÐ¿Ñ Ð´Ð° преоразмери дÑл %1 върху диÑк '%2'. ResizeVolumeGroupDialog Resize Volume Group ПреоразмерÑване на група дÑлове ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. ПреоразмерÑване на група дÑлове %1 от %2 на %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. ПреоразмерÑване на група дÑлове <strong>%1</strong> от<strong>%2</strong> на<strong>%3</strong>. The installer failed to resize a volume group named '%1'. ИнÑталаторът не уÑÐ¿Ñ Ð´Ð° преоразмери група дÑлове "%1". ResultsListDialog For best results, please ensure that this computer: За най-добри резултати, Ð¼Ð¾Ð»Ñ Ð±ÑŠÐ´ÐµÑ‚Ðµ Ñигурни че този компютър: System requirements СиÑтемни изиÑÐºÐ²Ð°Ð½Ð¸Ñ ScanningDialog Scanning storage devices... Сканиране на уÑтройÑтвата за Ñъхранение Partitioning РазделÑне SetHostNameJob Set hostname %1 ПоÑтавете име на хоÑта %1 Set hostname <strong>%1</strong>. ПоÑтавете име на хоÑÑ‚ <strong>%1</strong>. Setting hostname %1. Задаване името на хоÑта %1 Internal Error Вътрешна грешка Cannot write hostname to target system Ðе може да Ñе запише името на хоÑта на целевата ÑиÑтема SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 ПоÑтави модела на клавиатурата на %1, оформлението на %2-%3 Failed to write keyboard configuration for the virtual console. ÐеуÑпешно запиÑването на клавиатурна ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° виртуалната конзола. Failed to write to %1 ÐеуÑпешно запиÑване върху %1 Failed to write keyboard configuration for X11. ÐеуÑпешно запиÑване на клавиатурна ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° X11. Failed to write keyboard configuration to existing /etc/default directory. ÐеуÑпешно запиÑване на клавиатурна ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð² ÑъщеÑтвуващата Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ /etc/default. SetPartFlagsJob Set flags on partition %1. Задай флагове на дÑл %1. Set flags on %1MiB %2 partition. Задаване на флагове на %1MiB %2 дÑл. Set flags on new partition. Задай флагове на нов дÑл. Clear flags on partition <strong>%1</strong>. ИзчиÑти флаговете на дÑл <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. ИзчиÑтване на флагове на %1MiB <strong> %2 </strong> дÑл. Clear flags on new partition. ИзчиÑти флагове на нов дÑл. Flag partition <strong>%1</strong> as <strong>%2</strong>. Сложи флаг на дÑл <strong>%1</strong> като <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Задаване на флаг на %1MiB <strong>%2</strong> дÑл като <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Сложи флаг на Ð½Ð¾Ð²Ð¸Ñ Ð´Ñл като <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. ИзчиÑтване на флаговете на дÑл <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. ИзчиÑтване на флагове на %1MiB <strong> %2 </strong> дÑл. Clearing flags on new partition. ИзчиÑтване на флаговете на Ð½Ð¾Ð²Ð¸Ñ Ð´Ñл. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Задаване на флагове <strong>%2</strong> на дÑл <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Задаване на флагове <strong>%3 </strong> на %1MiB <strong>%2 </strong> дÑл. Setting flags <strong>%1</strong> on new partition. Задаване на флагове <strong>%1</strong> на Ð½Ð¾Ð²Ð¸Ñ Ð´Ñл. The installer failed to set flags on partition %1. ИнÑталатора не уÑÐ¿Ñ Ð´Ð° зададе флагове на дÑл %1. 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. Ðе може да Ñе изпълни chmod върху sudoers файла. Cannot create sudoers file for writing. Ðе може да Ñе Ñъздаде sudoers файл за запиÑване. ShellProcessJob Shell Processes Job ПроцеÑна обработка от обвивката SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK &ОК &Yes &Да &No &Ðе &Cancel &Отказ &Close &Затвори TrackingInstallJob Installation feedback Обратна връзка за инÑталирането Sending installation feedback. Изпращане на обратна връзка за инÑталирането. Internal error in install-tracking. Вътрешна грешка при проÑледÑване на инÑталирането. HTTP request timed out. Времето на HTTP заÑвката изтече. TrackingKUserFeedbackJob KDE user feedback ПотребителÑка обратна връзка за KDE Configuring KDE user feedback. Конфигуриране на потребителÑка обратна връзка. 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></ody></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;"> Щракнете тук за повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° обратна връзка от потребителите </span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. ПроÑледÑването помага на %1 да види колко чеÑто Ñе инÑталира, на какъв хардуер Ñе инÑталиран и кои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñе използват. За да видите какво ще бъде изпратено,молÑ, щракнете върху иконата за помощ. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. Като изберете това, ще изпратите Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° вашата инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð¸Ñ…Ð°Ñ€Ð´ÑƒÐµÑ€. Тази Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ñ‰Ðµ бъде изпратена Ñамо <b> веднъж </b> Ñлед завършване на инÑталациÑта. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. Като изберете това, периодично ще изпращате Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° вашата<b> машинна </b> инÑталациÑ, хардуер и Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾ %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. Като изберете това, периодично ще изпращате Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° вашата <b> потребителÑка</b> инÑталациÑ, хардуер, Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ модели на използване на приложениÑта до %1. TrackingViewStep Feedback Обратна връзка UmountJob Unmount file systems. Демонтиране на файловите ÑиÑтеми. No target system available. ÐÑма налична целева ÑиÑтема. No rootMountPoint is set. Ðе е зададен RootMountpoint. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ðко повече от един човек ще използва този компютър, можете да ÑъздадетемножеÑтво акаунти Ñлед наÑтройването.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ðко повече от един човек ще използва този компютър, можете да ÑъздадетемножеÑтво акаунти Ñлед инÑталирането.</small> UsersQmlViewStep 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 Избиране на език за приложениÑта и ÑиÑтемата Open donations website ОтварÑне на уеб Ñтраницата за Ð´Ð°Ñ€ÐµÐ½Ð¸Ñ &Donate &Дарение Open help and support website ОтварÑне на уеб Ñтраницата за помощ и поддръжка &Support &Поддръжка Open issues and bug-tracking website ОтварÑне на уеб Ñтраницата за проблеми и проÑледÑване на грешки &Known issues &СъщеÑтвуващи проблеми Open release notes website ОтварÑне на уеб Ñтраницата за бележки за изданието &Release notes &Бележки по изданието %1 support %1 поддръжка About %1 setup ОтноÑно инÑталирането на %1 About %1 installer ОтноÑно инÑталатор %1 WelcomeQmlViewStep Welcome Добре дошли WelcomeViewStep Welcome Добре дошли ZfsJob Create ZFS pools and datasets Създаване на ZFS пулове и набори от данни Failed to create zpool on ÐеуÑпешно Ñъздаване на zpool Configuration Error Грешка в конфигурациÑта No partitions are available for ZFS. ÐÑма дÑлове за ZFS. Internal data missing ЛипÑват вътрешни данни Failed to create zpool ÐеуÑпешно Ñъздаване на zpool Failed to create dataset ÐеуÑпешно Ñъздаване на набор от данни The output was: Резултатът беше: calamares-sidebar About ОтноÑно Debug ОтÑтранÑване на грешки Show information about Calamares Показване Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Calamares 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>Пълен дневник на инÑталациÑта е доÑтъпен като installation.log в Ð´Ð¾Ð¼Ð°ÑˆÐ½Ð°Ñ‚Ð°Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° Live ÑиÑтемата. <br/> Този ​​дневник Ñе копира в /var/log/installation.log на целеватаÑиÑтема.</p> finishedq@mobile Installation Completed ИнÑталациÑта е завършена %1 has been installed on your computer.<br/> You may now restart your device. %1 е инÑталиран на Ð²Ð°ÑˆÐ¸Ñ ÐºÐ¾Ð¼Ð¿ÑŽÑ‚ÑŠÑ€.<br/> Сега можете да реÑтартирате уÑтройÑтвото Ñи. Close ЗатварÑне Restart РеÑтартиране i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Езици</h1></br> Регионалните наÑтройки на ÑиÑтемата заÑÑгат езика и набора от Ñимволи за нÑкои елементи на потребителÑÐºÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ÐµÐ½ ред. Текущата наÑтройка е <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Регионални наÑтройки</h1></br> Регионалните наÑтройки на ÑиÑтемата Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° на чиÑлата и датите. Текущата наÑтройка е <strong>%1 </strong>. Back Ðазад keyboardq To activate keyboard preview, select a layout. За да активирате визуализациÑта на клавиатурата, изберете подредба. Keyboard Model: Модел на клавиатура: Layouts Подредби Type here to test your keyboard Пишете тук за да теÑтвате вашата клавиатура Variants Варианти localeq Change ПромÑна notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1 </h3> <p>Това Ñа примерни бележки за издание.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. Libreoffice е мощен и безплатен Ð¾Ñ„Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚, използван от милиони хорапо Ñ†ÐµÐ»Ð¸Ñ ÑвÑÑ‚. Той включва нÑколко приложениÑ, които го правÑÑ‚ най-универÑÐ°Ð»Ð½Ð¸Ñ Ð±ÐµÐ·Ð¿Ð»Ð°Ñ‚ÐµÐ½ Ð¾Ñ„Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚ Ñ Ð¾Ñ‚Ð²Ð¾Ñ€ÐµÐ½ код на пазара.<br/> ÐžÐ¿Ñ†Ð¸Ñ Ð¿Ð¾ подразбиране. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Ðко не иÑкате да инÑталирате Ð¾Ñ„Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚, проÑто изберете Без Ð¾Ñ„Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚.При необходимоÑÑ‚ винаги можете по-къÑно да добавите един (или повече) на вече инÑталираната Ñи ÑиÑтема. No Office Suite Без Ð¾Ñ„Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚ Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Създайте минимална инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° работната Ñреда, премахнете вÑички допълнителни Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ решете по-къÑно, какво бихте иÑкали да добавите към вашата ÑиÑтема. Примери за това, което нÑма да има на такава инÑталациÑ: нÑма да има Ð¾Ñ„Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ, медийни плеъри, програми за преглед на Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ поддръжка на печат. Това ще бъде Ñамо работен плот Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² мениджър, текÑтов редактор, проÑÑ‚ уеб браузър и мениджър на пакети. Minimal Install Минимална инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Please select an option for your install, or use the default: LibreOffice included. МолÑ, изберете Ð¾Ð¿Ñ†Ð¸Ñ Ð·Ð° вашата инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð¸Ð»Ð¸ използвайте по подразбиране: LibreOfficeвключен. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Това e примерен QML файл, показващ опции Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð°Ð½ текÑÑ‚ и Ñъдържание Ñ Ð±ÑŠÑ€Ð·Ð¾ прелиÑтване.</p> <p> 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> Добре дошли в <quote> %2 </quote> инÑталатор на %1</h3> <p> Тази програма ще ви зададе нÑкои въпроÑи и ще инÑталира %1 навашиÑÑ‚ компютър.</p> Support Поддръжка Known issues ИзвеÑтни проблеми Release notes Бележки към изданието Donate Дарение calamares-calamares-2d126ae/lang/calamares_bn.ts000066400000000000000000006534651430147706700217320ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. à¦à¦‡ সিসà§à¦Ÿà§‡à¦®à§‡à¦° <strong>বà§à¦Ÿ পরিবেশ</strong>।<br><br> পà§à¦°à¦¾à¦¤à¦¨ x86 সিসà§à¦Ÿà§‡à¦® শà§à¦§à§à¦®à¦¾à¦¤à§à¦° <strong>BIOS</strong> সমরà§à¦¥à¦¨ কর<br> আধà§à¦¨à¦¿à¦• সিসà§à¦Ÿà§‡à¦® সাধারণত <strong>EFI</strong> বà§à¦¯à¦¬à¦¹à¦¾à¦° করে, কিনà§à¦¤à§ যদি সামঞà§à¦œà¦¸à§à¦¯à¦¤à¦¾ মোডে শà§à¦°à§ হয় তাহলে BIOS হিসেবেও পà§à¦°à¦¦à¦°à§à¦¶à¦¿à¦¤ হতে পারে। This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. à¦à¦‡ সিসà§à¦Ÿà§‡à¦® à¦à¦•টি <strong>EFI</strong> বà§à¦Ÿ পরিবেশ দিয়ে শà§à¦°à§ হয়েছিল।<br><br> à¦à¦•টি EFI পরিবেশ থেকে সà§à¦Ÿà¦¾à¦°à§à¦Ÿà¦†à¦ª কনফিগার করতে, à¦à¦‡ ইনসà§à¦Ÿà¦²à¦¾à¦° অবশà§à¦¯à¦‡ à¦à¦•টি <strong>EFI সিসà§à¦Ÿà§‡à¦® পারà§à¦Ÿà¦¿à¦¶à¦¨à§‡</strong> <strong>GRUB</strong> বা <strong>systemd-boot </strong> à¦à¦° মত à¦à¦•টি বà§à¦Ÿ লোডার অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েশন পà§à¦°à¦¯à¦¼à§‹à¦— করতে হবে। à¦à¦Ÿà¦¿ সà§à¦¬à¦¯à¦¼à¦‚কà§à¦°à¦¿à¦¯à¦¼, যদি না আপনি মà§à¦¯à¦¾à¦¨à§à¦¯à¦¼à¦¾à¦² পারà§à¦Ÿà¦¿à¦¶à¦¨à¦¿à¦‚ নিরà§à¦¬à¦¾à¦šà¦¨ করেন, সেকà§à¦·à§‡à¦¤à§à¦°à§‡ আপনাকে অবশà§à¦¯à¦‡ à¦à¦Ÿà¦¿ বেছে নিতে হবে অথবা à¦à¦Ÿà¦¿ নিজে তৈরি করতে হবে। This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. à¦à¦‡ সিসà§à¦Ÿà§‡à¦® à¦à¦•টি <strong>BIOS</strong> বà§à¦Ÿ পরিবেশ দিয়ে শà§à¦°à§ হয়েছিল।<br><br>à¦à¦•টি BIOS পরিবেশ থেকে সà§à¦Ÿà¦¾à¦°à§à¦Ÿà¦†à¦ª কনফিগার করতে, à¦à¦‡ ইনসà§à¦Ÿà¦²à¦¾à¦° অবশà§à¦¯à¦‡ GRUB à¦à¦° মত à¦à¦•টি পারà§à¦Ÿà¦¿à¦¶à¦¨à§‡à¦° শà§à¦°à§à¦¤à§‡ অথবা পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিলের শà§à¦°à§à¦¤à§‡ মাসà§à¦Ÿà¦¾à¦° বà§à¦Ÿ রেকরà§à¦¡à§‡ (পছনà§à¦¦à¦¨à§€à¦¯à¦¼) মত à¦à¦•টি বà§à¦Ÿ লোডার ইনসà§à¦Ÿà¦² করতে হবে। à¦à¦Ÿà¦¿ সà§à¦¬à¦¯à¦¼à¦‚কà§à¦°à¦¿à¦¯à¦¼, যদি না আপনি মà§à¦¯à¦¾à¦¨à§à¦¯à¦¼à¦¾à¦² পারà§à¦Ÿà¦¿à¦¶à¦¨à¦¿à¦‚ নিরà§à¦¬à¦¾à¦šà¦¨ করেন, সেকà§à¦·à§‡à¦¤à§à¦°à§‡ আপনাকে অবশà§à¦¯à¦‡ à¦à¦Ÿà¦¿ নিজেই সেট আপ করতে হবে। BootLoaderModel Master Boot Record of %1 %1 মাসà§à¦Ÿà¦¾à¦° বà§à¦Ÿ রেকরà§à¦¡ Boot Partition বà§à¦Ÿ পারà§à¦Ÿà¦¿à¦¶à¦¨ System Partition সিসà§à¦Ÿà§‡à¦® পারà§à¦Ÿà¦¿à¦¶à¦¨ Do not install a boot loader à¦à¦•টি বà§à¦Ÿ লোডার ইনসà§à¦Ÿà¦² করবেন না %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form ফরà§à¦® GlobalStorage গà§à¦²à§‹à¦¬à¦¾à¦² সà§à¦Ÿà§‹à¦°à§‡à¦œ JobQueue জব লাইন Modules মডিউলগà§à¦²à§‹ Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information তথà§à¦¯ ডিবাগ করà§à¦¨ Calamares::ExecutionViewStep Set up Install ইনসà§à¦Ÿà¦² করà§à¦¨ Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done সমà§à¦ªà¦¨à§à¦¨ Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 কমানà§à¦¡ %1 %2 চলছে Calamares::PythonJob Running %1 operation. %1 কà§à¦°à¦¿à¦¯à¦¼à¦¾à¦•লাপ চলছে। Bad working directory path ওয়ারà§à¦•িং ডিরেকà§à¦Ÿà¦°à¦¿ পাথ ভালো নয় Working directory %1 for python job %2 is not readable. ওয়ারà§à¦•িং ডিরেকà§à¦Ÿà¦°à¦¿ %1 পাইথন কাজের জনà§à¦¯ %2 পাঠযোগà§à¦¯ নয়। Bad main script file পà§à¦°à¦§à¦¾à¦¨ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ ফাইল ভালো নয় Main script file %1 for python job %2 is not readable. মূল সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ ফাইল %1 পাইথন কাজের জনà§à¦¯ %2 পাঠযোগà§à¦¯ নয়। Boost.Python error in job "%1". বà§à¦¸à§à¦Ÿ.পাইথন কাজে %1 তà§à¦°à§à¦Ÿà¦¿ Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed ইনসà§à¦Ÿà¦²à§‡à¦¶à¦¨ বà§à¦¯à¦°à§à¦¥ হলো Error তà§à¦°à§à¦Ÿà¦¿ &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? সেটআপ চালিয়ে যেতে চান? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 ইনসà§à¦Ÿà¦²à¦¾à¦° %2 সংসà§à¦¥à¦¾à¦ªà¦¨ করতে আপনার ডিসà§à¦•ে পরিবরà§à¦¤à¦¨ করতে যাচà§à¦›à§‡à¥¤ &Set up now &Install now à¦à¦¬à¦‚à¦à¦–নই ইনসà§à¦Ÿà¦² করà§à¦¨ Go &back à¦à¦¬à¦‚ফিরে যান &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next à¦à¦¬à¦‚ পরবরà§à¦¤à§€ &Back à¦à¦¬à¦‚ পেছনে &Done &Cancel à¦à¦¬à¦‚বাতিল করà§à¦¨ Cancel setup? Cancel installation? ইনসà§à¦Ÿà¦²à§‡à¦¶à¦¨ বাতিল করবেন? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. আপনি কি সতà§à¦¯à¦¿à¦‡ বরà§à¦¤à¦®à¦¾à¦¨ সংসà§à¦¥à¦¾à¦ªà¦¨ পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾ বাতিল করতে চান? ইনসà§à¦Ÿà¦²à¦¾à¦° টি বনà§à¦§ হয়ে যাবে à¦à¦¬à¦‚ সকল পরিবরà§à¦¤à¦¨ হারিয়ে যাবে। CalamaresPython::Helper Unknown exception type অজানা ধরনের বà§à¦¯à¦¤à¦¿à¦•à§à¦°à¦® unparseable Python error অতà§à¦²à¦¨à§€à¦¯à¦¼ পাইথন তà§à¦°à§à¦Ÿà¦¿ unparseable Python traceback অতà§à¦²à¦¨à§€à¦¯à¦¼ পাইথন টà§à¦°à§‡à¦¸à¦¬à§à¦¯à¦¾à¦• Unfetchable Python error. অতà§à¦²à¦¨à§€à¦¯à¦¼ পাইথন তà§à¦°à§à¦Ÿà¦¿à¥¤ CalamaresWindow %1 Setup Program %1 Installer %1 ইনসà§à¦Ÿà¦² ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... সিসà§à¦Ÿà§‡à¦® তথà§à¦¯ সংগà§à¦°à¦¹ করা হচà§à¦›à§‡... ChoicePage Form ফরà§à¦® Select storage de&vice: সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিà¦à¦¬à¦‚ভাইস নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨: Current: বরà§à¦¤à¦®à¦¾à¦¨: After: পরে: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>সংকà§à¦šà¦¿à¦¤ করার জনà§à¦¯ à¦à¦•টি পারà§à¦Ÿà¦¿à¦¶à¦¨ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨, তারপর নিচের বারটি পà§à¦¨à¦ƒà¦†à¦•ারের জনà§à¦¯ টেনে আনà§à¦¨</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: বà§à¦Ÿ লোডার অবসà§à¦¥à¦¾à¦¨: <strong>Select a partition to install on</strong> <strong>ইনসà§à¦Ÿà¦² করতে à¦à¦•টি পারà§à¦Ÿà¦¿à¦¶à¦¨ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. %1 ঠEFI সিসà§à¦Ÿà§‡à¦® পারà§à¦Ÿà¦¿à¦¶à¦¨ %2 শà§à¦°à§ করার জনà§à¦¯ বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হবে। EFI system partition: EFI সিসà§à¦Ÿà§‡à¦® পারà§à¦Ÿà¦¿à¦¶à¦¨: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à¦à¦‡ সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিভাইসে কোন অপারেটিং সিসà§à¦Ÿà§‡à¦® আছে বলে মনে হয় না। তà§à¦®à¦¿ কি করতে চাও? <br/>সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিভাইসে কোন পরিবরà§à¦¤à¦¨ করার আগে আপনি আপনার পছনà§à¦¦à¦ªà¦°à§à¦¯à¦¾à¦²à§‹à¦šà¦¨à¦¾ à¦à¦¬à¦‚ নিশà§à¦šà¦¿à¦¤ করতে সকà§à¦·à¦® হবেন। <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ডিসà§à¦• মà§à¦›à§‡ ফেলà§à¦¨</strong> <br/>à¦à¦Ÿà¦¿ বরà§à¦¤à¦®à¦¾à¦¨à§‡ নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিভাইসে উপসà§à¦¥à¦¿à¦¤ সকল উপাতà§à¦¤ <font color="red">মà§à¦›à§‡ ফেলবে</font>। <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ইনসà§à¦Ÿà¦² করà§à¦¨ পাশাপাশি</strong> <br/>ইনসà§à¦Ÿà¦²à¦¾à¦° %1 à¦à¦° জনà§à¦¯ জায়গা তৈরি করতে à¦à¦•টি পারà§à¦Ÿà¦¿à¦¶à¦¨ সংকà§à¦šà¦¿à¦¤ করবে। <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>à¦à¦•টি পারà§à¦Ÿà¦¿à¦¶à¦¨ পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨</strong><br/>%1-à¦à¦° সাথে à¦à¦•টি পারà§à¦Ÿà¦¿à¦¶à¦¨ পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ করে। This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à¦à¦‡ সঞà§à¦šà¦¯à¦¼ যনà§à¦¤à§à¦°à¦Ÿà¦¿à¦¤à§‡ %1 আছে। তà§à¦®à¦¿ কি করতে চাও? <br/>সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিভাইসে কোন পরিবরà§à¦¤à¦¨ করার আগে আপনি আপনার পছনà§à¦¦à¦ªà¦°à§à¦¯à¦¾à¦²à§‹à¦šà¦¨à¦¾ à¦à¦¬à¦‚ নিশà§à¦šà¦¿à¦¤ করতে সকà§à¦·à¦® হবেন। This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à¦à¦‡ সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিভাইসে ইতোমধà§à¦¯à§‡ à¦à¦•টি অপারেটিং সিসà§à¦Ÿà§‡à¦® আছে। তà§à¦®à¦¿ কি করতে চাও? <br/>সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিভাইসে কোন পরিবরà§à¦¤à¦¨ করার আগে আপনি আপনার পছনà§à¦¦à¦ªà¦°à§à¦¯à¦¾à¦²à§‹à¦šà¦¨à¦¾ à¦à¦¬à¦‚ নিশà§à¦šà¦¿à¦¤ করতে সকà§à¦·à¦® হবেন. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à¦à¦‡ সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিভাইসে à¦à¦•াধিক অপারেটিং সিসà§à¦Ÿà§‡à¦® আছে। তà§à¦®à¦¿ কি করতে চাও? <br/>সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিভাইসে কোন পরিবরà§à¦¤à¦¨ করার আগে আপনি আপনার পছনà§à¦¦à¦ªà¦°à§à¦¯à¦¾à¦²à§‹à¦šà¦¨à¦¾ à¦à¦¬à¦‚ নিশà§à¦šà¦¿à¦¤ করতে সকà§à¦·à¦® হবেন. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 %1 ঠপারà§à¦Ÿà¦¿à¦¶à¦¨à¦¿à¦‚ অপারেশনের জনà§à¦¯ মাউনà§à¦Ÿ গà§à¦²à¦¿ মà§à¦›à§‡ ফেলà§à¦¨ Clearing mounts for partitioning operations on %1. %1-ঠপারà§à¦Ÿà¦¿à¦¶à¦¨à¦¿à¦‚ অপারেশনের জনà§à¦¯ মাউনà§à¦Ÿ মà§à¦›à§‡ ফেলা হচà§à¦›à§‡à¥¤ Cleared all mounts for %1 %1-à¦à¦° জনà§à¦¯ সকল মাউনà§à¦Ÿ মà§à¦›à§‡ ফেলা হয়েছে ClearTempMountsJob Clear all temporary mounts. সব অসà§à¦¥à¦¾à¦¯à¦¼à§€ মাউনà§à¦Ÿ পরিষà§à¦•ার করà§à¦¨à¥¤ Clearing all temporary mounts. সব অসà§à¦¥à¦¾à¦¯à¦¼à§€ মাউনà§à¦Ÿ পরিষà§à¦•ার করা হচà§à¦›à§‡à¥¤ Cleared all temporary mounts. সব অসà§à¦¥à¦¾à¦¯à¦¼à§€ মাউনà§à¦Ÿ পরিষà§à¦•ার করা হয়েছে. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> %1-ঠকীবোরà§à¦¡ নকশা নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨à¥¤ Set keyboard layout to %1/%2. %1/%2 ঠকীবোরà§à¦¡ বিনà§à¦¯à¦¾à¦¸ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨à¥¤ Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! আপনার পাসওয়ারà§à¦¡ মেলে না! OK! Setup Failed Installation Failed ইনসà§à¦Ÿà¦²à§‡à¦¶à¦¨ বà§à¦¯à¦°à§à¦¥ হলো The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary সারাংশ This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. আপনি ইনসà§à¦Ÿà¦² পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾ শà§à¦°à§ করার পর কি হবে তার à¦à¦•টি পরà§à¦¯à¦¾à¦²à§‹à¦šà¦¨à¦¾à¥¤ ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition à¦à¦•টি পারà§à¦Ÿà¦¿à¦¶à¦¨ তৈরি করà§à¦¨ Si&ze: আà¦à¦¬à¦‚কার MiB Partition &Type: পারà§à¦Ÿà¦¿à¦¶à¦¨ à¦à¦¬à¦‚ধরন: Primar&y E&xtended বà¦à¦¬à¦‚রà§à¦§à¦¿à¦¤ Fi&le System: ফাà¦à¦¬à¦‚ইল সিসà§à¦Ÿà§‡à¦®: LVM LV name &Mount Point: à¦à¦¬à¦‚মাউনà§à¦Ÿ পয়েনà§à¦Ÿ: Flags: Label for the filesystem FS Label: En&crypt Logical যৌকà§à¦¤à¦¿à¦• Primary পà§à¦°à¦¾à¦¥à¦®à¦¿à¦• GPT জিপিটি Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. %2-ঠনতà§à¦¨ %1 পারà§à¦Ÿà¦¿à¦¶à¦¨ তৈরি করা হচà§à¦›à§‡à¥¤ The installer failed to create partition on disk '%1'. ইনসà§à¦Ÿà¦²à¦¾à¦° '%1' ডিসà§à¦•ে পারà§à¦Ÿà¦¿à¦¶à¦¨ তৈরি করতে বà§à¦¯à¦°à§à¦¥ হয়েছে। CreatePartitionTableDialog Create Partition Table পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল তৈরি করà§à¦¨ Creating a new partition table will delete all existing data on the disk. à¦à¦•টি নতà§à¦¨ পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল তৈরি করলে ডিসà§à¦•ের সকল বিদà§à¦¯à¦®à¦¾à¦¨ উপাতà§à¦¤ মà§à¦›à§‡ যাবে। What kind of partition table do you want to create? আপনি কি ধরনের পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল তৈরি করতে চান? Master Boot Record (MBR) মাসà§à¦Ÿà¦¾à¦° বà§à¦Ÿ রেকরà§à¦¡ (à¦à¦®à¦¬à¦¿à¦†à¦°) GUID Partition Table (GPT) জিইউআইডি পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল (জিপিটি) CreatePartitionTableJob Create new %1 partition table on %2. %2-ঠনতà§à¦¨ %1 পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল তৈরি করà§à¦¨à¥¤ Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3) ঠনতà§à¦¨ <strong>%1</strong> পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল তৈরি করà§à¦¨à¥¤ Creating new %1 partition table on %2. %2 ঠনতà§à¦¨ %1 পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল তৈরি করা হচà§à¦›à§‡à¥¤ The installer failed to create a partition table on %1. ইনসà§à¦Ÿà¦²à¦¾à¦° %1 ঠà¦à¦•টি পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল তৈরি করতে বà§à¦¯à¦°à§à¦¥ হয়েছে। CreateUserJob Create user %1 %1 বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী তৈরি করà§à¦¨ Create user <strong>%1</strong>. বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী %1 তৈরি করà§à¦¨à¥¤ Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. পারà§à¦Ÿà¦¿à¦¶à¦¨ %1 মà§à¦›à§‡ ফেলà§à¦¨à¥¤ Delete partition <strong>%1</strong>. পারà§à¦Ÿà¦¿à¦¶à¦¨ <strong>%1</strong> মà§à¦›à§‡ ফেলà§à¦¨à¥¤ Deleting partition %1. পারà§à¦Ÿà¦¿à¦¶à¦¨ %1 মà§à¦›à§‡ ফেলা হচà§à¦›à§‡à¥¤ The installer failed to delete partition %1. ইনসà§à¦Ÿà¦²à¦¾à¦° %1 পারà§à¦Ÿà¦¿à¦¶à¦¨ মà§à¦›à§‡ ফেলতে বà§à¦¯à¦°à§à¦¥ হয়েছে। DeviceInfoWidget This device has a <strong>%1</strong> partition table. à¦à¦‡ যনà§à¦¤à§à¦°à¦Ÿà¦¿à¦° à¦à¦•টি <strong>%1</strong> পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল আছে। This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. à¦à¦Ÿà¦¿ à¦à¦•টি <strong>লà§à¦ª</strong> ডিভাইস।<br><br>à¦à¦Ÿà¦¿ à¦à¦•টি ছদà§à¦®-ডিভাইস যার কোন পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল নেই যা à¦à¦•টি ফাইলকে বà§à¦²à¦• ডিভাইস হিসেবে অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸à¦¯à§‹à¦—à§à¦¯ করে তোলে। à¦à¦‡ ধরনের উপসà§à¦¥à¦¾à¦ªà¦¨à¦¾ সাধারণত শà§à¦§à§à¦®à¦¾à¦¤à§à¦° à¦à¦•টি à¦à¦•ক ফাইলসিসà§à¦Ÿà§‡à¦® ধারণ করে। This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. à¦à¦‡ ইনসà§à¦Ÿà¦²à¦¾à¦° নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সঞà§à¦šà¦¯à¦¼ ডিভাইসে <strong>à¦à¦•টি পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল শনাকà§à¦¤ করতে পারে না</strong>।<br> <br>ডিভাইসটির কোন পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল নেই, অথবা পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিলটি দূষিত অথবা à¦à¦•টি অজানা ধরনের।<br> à¦à¦‡ ইনসà§à¦Ÿà¦²à¦¾à¦° আপনার জনà§à¦¯ à¦à¦•টি নতà§à¦¨ পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল তৈরি করতে পারে, হয় সà§à¦¬à¦¯à¦¼à¦‚কà§à¦°à¦¿à¦¯à¦¼à¦­à¦¾à¦¬à§‡, অথবা মà§à¦¯à¦¾à¦¨à§à¦¯à¦¼à¦¾à¦² পারà§à¦Ÿà¦¿à¦¶à¦¨à¦¿à¦‚ পৃষà§à¦ à¦¾à¦° মাধà§à¦¯à¦®à§‡à¥¤ <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>à¦à¦Ÿà¦¿ আধà§à¦¨à¦¿à¦• সিসà§à¦Ÿà§‡à¦®à§‡à¦° জনà§à¦¯ পà§à¦°à¦¸à§à¦¤à¦¾à¦¬à¦¿à¦¤ পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিলের ধরন যা à¦à¦•টি <strong>EFI</strong> বà§à¦Ÿ পরিবেশ থেকে শà§à¦°à§ হয়। <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিভাইসে <strong>পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিলে</strong>র ধরন। <br><br>পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিলের ধরন পরিবরà§à¦¤à¦¨à§‡à¦° à¦à¦•মাতà§à¦° উপায় হল সà§à¦•à§à¦°à§à¦¯à¦¾à¦š থেকে পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল মà§à¦›à§‡ ফেলা à¦à¦¬à¦‚ পà§à¦¨à¦°à¦¾à¦¯à¦¼ তৈরি করা, যা সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিভাইসের সমসà§à¦¤ ডাটা ধà§à¦¬à¦‚স করে।<br> à¦à¦‡ ইনসà§à¦Ÿà¦²à¦¾à¦° বরà§à¦¤à¦®à¦¾à¦¨ পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল রাখবে যদি না আপনি সà§à¦ªà¦·à§à¦Ÿà¦­à¦¾à¦¬à§‡ অনà§à¦¯à¦­à¦¾à¦¬à§‡ নিরà§à¦¬à¦¾à¦šà¦¨ করেন. যদি অনিশà§à¦šà¦¿à¦¤ থাকেন, আধà§à¦¨à¦¿à¦• সিসà§à¦Ÿà§‡à¦®à§‡ জিপিটি অগà§à¦°à¦¾à¦§à¦¿à¦•ার দেওয়া হয়। DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition বিদà§à¦¯à¦®à¦¾à¦¨ পারà§à¦Ÿà¦¿à¦¶à¦¨ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করà§à¦¨ Con&tent: &Keep à¦à¦¬à¦‚রাখà§à¦¨ Format বিনà§à¦¯à¦¾à¦¸ Warning: Formatting the partition will erase all existing data. সতরà§à¦•ীকরণ: পারà§à¦Ÿà¦¿à¦¶à¦¨ ফরমà§à¦¯à¦¾à¦Ÿ করলে সমসà§à¦¤ বিদà§à¦¯à¦®à¦¾à¦¨ উপাতà§à¦¤ মà§à¦›à§‡ ফেলবে। &Mount Point: à¦à¦¬à¦‚ মাউনà§à¦Ÿ পয়েনà§à¦Ÿ: Si&ze: আà¦à¦¬à¦‚কার MiB Fi&le System: ফাà¦à¦¬à¦‚ইল সিসà§à¦Ÿà§‡à¦®: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form ফরà§à¦® En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information পারà§à¦Ÿà¦¿à¦¶à¦¨ তথà§à¦¯ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨ Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. <strong>নতà§à¦¨</strong> %2 সিসà§à¦Ÿà§‡à¦® পারà§à¦Ÿà¦¿à¦¶à¦¨à§‡ %1 সংসà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨à¥¤ Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. %3 সিসà§à¦Ÿà§‡à¦® পারà§à¦Ÿà¦¿à¦¶à¦¨ <strong>%1</strong> ঠ%2 ইনসà§à¦Ÿà¦² করà§à¦¨à¥¤ Install boot loader on <strong>%1</strong>. <strong>%1</strong> ঠবà§à¦Ÿ লোডার ইনসà§à¦Ÿà¦² করà§à¦¨à¥¤ Setting up mount points. মাউনà§à¦Ÿ পয়েনà§à¦Ÿ সেট আপ করা হচà§à¦›à§‡à¥¤ FinishedPage Form ফরà§à¦® &Restart now à¦à¦¬à¦‚à¦à¦–ন আবার চালৠকরà§à¦¨ <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>সব শেষ।</h1><br/>%1 আপনার কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡ সংসà§à¦¥à¦¾à¦ªà¦¨ করা হয়েছে।<br/>আপনি à¦à¦–ন আপনার নতà§à¦¨ সিসà§à¦Ÿà§‡à¦®à§‡ পà§à¦¨à¦°à§à¦¸à§‚চনা করতে পারেন, অথবা %2 লাইভ পরিবেশ বà§à¦¯à¦¬à¦¹à¦¾à¦° চালিয়ে যেতে পারেন। <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish শেষ করà§à¦¨ FinishedViewStep Finish শেষ করà§à¦¨ FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. ফাইল সিসà§à¦Ÿà§‡à¦® %2 দিয়ে পারà§à¦Ÿà¦¿à¦¶à¦¨ %1 বিনà§à¦¯à¦¾à¦¸ করা হচà§à¦›à§‡à¥¤ The installer failed to format partition %1 on disk '%2'. ইনসà§à¦Ÿà¦²à¦¾à¦° '%2' ডিসà§à¦•ে %1 পারà§à¦Ÿà¦¿à¦¶à¦¨ বিনà§à¦¯à¦¾à¦¸ করতে বà§à¦¯à¦°à§à¦¥ হয়েছে। GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ কারà§à¦¯à¦•র করা হচà§à¦›à§‡: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ KeyboardQmlViewStep Keyboard কীবোরà§à¦¡ KeyboardViewStep Keyboard কীবোরà§à¦¡ LCLocaleDialog System locale setting সিসà§à¦Ÿà§‡à¦® লোকেল সেটিং The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. সিসà§à¦Ÿà§‡à¦® সà§à¦¥à¦¾à¦¨à§€à¦¯à¦¼ বিনà§à¦¯à¦¾à¦¸à¦¨ কিছৠকমানà§à¦¡ লাইন বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ উপাদানের জনà§à¦¯ ভাষা à¦à¦¬à¦‚ অকà§à¦·à¦° সেট কে পà§à¦°à¦­à¦¾à¦¬à¦¿à¦¤ করে. <br/>বরà§à¦¤à¦®à¦¾à¦¨ বিনà§à¦¯à¦¾à¦¸à¦¨ <strong>%1</strong>। &Cancel à¦à¦¬à¦‚বাতিল করà§à¦¨ &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form ফরà§à¦® <h1>License Agreement</h1> I accept the terms and conditions above. আমি উপরের শরà§à¦¤à¦¾à¦¬à¦²à§€ মেনে নিচà§à¦›à¦¿à¥¤ Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License লাইসেনà§à¦¸ LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: অঞà§à¦šà¦²: Zone: বলয়: &Change... à¦à¦¬à¦‚পরিবরà§à¦¤à¦¨ করà§à¦¨... LocaleQmlViewStep Location অবসà§à¦¥à¦¾à¦¨ LocaleTests Quit LocaleViewStep Location অবসà§à¦¥à¦¾à¦¨ LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error কনফিগারেশন তà§à¦°à§à¦Ÿà¦¿ No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name নাম Description Page_Keyboard Form ফরà§à¦® Keyboard Model: কীবোরà§à¦¡ নকশা: Type here to test your keyboard আপনার কীবোরà§à¦¡ পরীকà§à¦·à¦¾ করতে à¦à¦–ানে টাইপ করà§à¦¨ Page_UserSetup Form ফরà§à¦® What is your name? আপনার নাম কি? Your Full Name What name do you want to use to log in? লগ-ইন করতে আপনি কোন নাম বà§à¦¯à¦¬à¦¹à¦¾à¦° করতে চান? login What is the name of this computer? à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡à¦° নাম কি? <small>This name will be used if you make the computer visible to others on a network.</small> <small>আপনি যদি কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦•ে অনà§à¦¯à¦¦à§‡à¦° কাছে à¦à¦•টি নেটওয়ারà§à¦•ে দৃশà§à¦¯à¦®à¦¾à¦¨ করেন তাহলে à¦à¦‡ নামটি বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হবে।</small> Computer Name Choose a password to keep your account safe. আপনার অà§à¦¯à¦¾à¦•াউনà§à¦Ÿ সà§à¦°à¦•à§à¦·à¦¿à¦¤ রাখতে à¦à¦•টি পাসওয়ারà§à¦¡ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤ <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>à¦à¦•ই পাসওয়ারà§à¦¡ দà§à¦‡à¦¬à¦¾à¦° পà§à¦°à¦¬à§‡à¦¶ করান, যাতে à¦à¦Ÿà¦¿ টাইপিং তà§à¦°à§à¦Ÿà¦¿à¦° জনà§à¦¯ পরীকà§à¦·à¦¾ করা যেতে পারে। à¦à¦•টি ভাল পাসওয়ারà§à¦¡ অকà§à¦·à¦°, সংখà§à¦¯à¦¾ à¦à¦¬à¦‚ বিরামচিহà§à¦¨à§‡à¦° à¦à¦•টি মিশà§à¦°à¦£ ধারণ করবে, অনà§à¦¤à¦¤ আট অকà§à¦·à¦° দীরà§à¦˜ হওয়া উচিত, à¦à¦¬à¦‚ নিয়মিত বিরতিতে পরিবরà§à¦¤à¦¨ করা উচিত।</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. পাসওয়ারà§à¦¡ না চাইলে সà§à¦¬à¦¯à¦¼à¦‚কà§à¦°à¦¿à¦¯à¦¼à¦­à¦¾à¦¬à§‡ লগ ইন করà§à¦¨à¥¤ Use the same password for the administrator account. পà§à¦°à¦¶à¦¾à¦¸à¦• হিসাবের জনà§à¦¯ à¦à¦•ই গà§à¦ªà§à¦¤-সংকেত বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤ Choose a password for the administrator account. পà§à¦°à¦¶à¦¾à¦¸à¦• হিসাবের জনà§à¦¯ à¦à¦•টি পাসওয়ারà§à¦¡ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤ <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>à¦à¦•ই পাসওয়ারà§à¦¡ দà§à¦‡à¦¬à¦¾à¦° পà§à¦°à¦¬à§‡à¦¶ করান, যাতে à¦à¦Ÿà¦¿ টাইপিং তà§à¦°à§à¦Ÿà¦¿à¦° জনà§à¦¯ পরীকà§à¦·à¦¾ করা যেতে পারে।</small> PartitionLabelsView Root রà§à¦Ÿ Home বাড়ি Boot বà§à¦Ÿ EFI system ইà¦à¦«à¦†à¦‡ সিসà§à¦Ÿà§‡à¦® Swap অদলবদল New partition for %1 %1 à¦à¦° জনà§à¦¯ নতà§à¦¨ পারà§à¦Ÿà¦¿à¦¶à¦¨ New partition নতà§à¦¨ পারà§à¦Ÿà¦¿à¦¶à¦¨ %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space খালি জায়গা New partition নতà§à¦¨ পারà§à¦Ÿà¦¿à¦¶à¦¨ Name নাম File System নথি বà§à¦¯à¦¬à¦¸à§à¦¥à¦¾ File System Label Mount Point মাউনà§à¦Ÿ পয়েনà§à¦Ÿ Size আকার PartitionPage Form ফরà§à¦® Storage de&vice: সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিà¦à¦¬à¦‚ভাইস &Revert All Changes à¦à¦¬à¦‚সকল পরিবরà§à¦¤à¦¨ ফিরিয়ে দিন New Partition &Table নতà§à¦¨ পারà§à¦Ÿà¦¿à¦¶à¦¨ à¦à¦¬à¦‚টেবিল Cre&ate &Edit à¦à¦¬à¦‚সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করà§à¦¨ &Delete à¦à¦¬à¦‚মà§à¦›à§‡ ফেলà§à¦¨ New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? আপনি কি নিশà§à¦šà¦¿à¦¤ যে আপনি %1 ঠà¦à¦•টি নতà§à¦¨ পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল তৈরি করতে চান? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... সিসà§à¦Ÿà§‡à¦® তথà§à¦¯ সংগà§à¦°à¦¹ করা হচà§à¦›à§‡... Partitions পারà§à¦Ÿà¦¿à¦¶à¦¨à¦—à§à¦²à§‹ Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: বরà§à¦¤à¦®à¦¾à¦¨: After: পরে: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form ফরà§à¦® Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) %1 (%2) unknown অজানা extended বরà§à¦§à¦¿à¦¤ unformatted অবিনà§à¦¯à¦¾à¦¸à¦¿à¦¤ swap Default পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤ File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table অবিভাজনকৃত সà§à¦¥à¦¾à¦¨ বা অজানা পারà§à¦Ÿà¦¿à¦¶à¦¨ টেবিল Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form ফরà§à¦® Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 কোথায় সংসà§à¦¥à¦¾à¦ªà¦¨ করতে হবে তা নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤<br/><font color="red"> সতরà§à¦•ীকরণ: </font>à¦à¦Ÿà¦¿ নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ পারà§à¦Ÿà¦¿à¦¶à¦¨à§‡à¦° সকল ফাইল মà§à¦›à§‡ ফেলবে। The selected item does not appear to be a valid partition. নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ বিষয়োপকরণটি à¦à¦•টি বৈধ পারà§à¦Ÿà¦¿à¦¶à¦¨ বলে মনে হচà§à¦›à§‡ না। %1 cannot be installed on empty space. Please select an existing partition. %1 ফাà¦à¦•া সà§à¦¥à¦¾à¦¨à§‡ সংসà§à¦¥à¦¾à¦ªà¦¨ করা যাবে না। অনà§à¦—à§à¦°à¦¹ করে à¦à¦•টি বিদà§à¦¯à¦®à¦¾à¦¨ পারà§à¦Ÿà¦¿à¦¶à¦¨ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤ %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 à¦à¦•টি বরà§à¦§à¦¿à¦¤ পারà§à¦Ÿà¦¿à¦¶à¦¨à§‡ সংসà§à¦¥à¦¾à¦ªà¦¨ করা যাবে না। অনà§à¦—à§à¦°à¦¹ করে à¦à¦•টি বিদà§à¦¯à¦®à¦¾à¦¨ পà§à¦°à¦¾à¦¥à¦®à¦¿à¦• বা যৌকà§à¦¤à¦¿à¦• বিভাজন নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤ %1 cannot be installed on this partition. %1 à¦à¦‡ পারà§à¦Ÿà¦¿à¦¶à¦¨à§‡ সংসà§à¦¥à¦¾à¦ªà¦¨ করা যাবে না। Data partition (%1) ডাটা পারà§à¦Ÿà¦¿à¦¶à¦¨ (%1) Unknown system partition (%1) অজানা সিসà§à¦Ÿà§‡à¦® পারà§à¦Ÿà¦¿à¦¶à¦¨ (%1) %1 system partition (%2) %1 সিসà§à¦Ÿà§‡à¦® পারà§à¦Ÿà¦¿à¦¶à¦¨ (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>%1 পারà§à¦Ÿà¦¿à¦¶à¦¨ %2 à¦à¦° জনà§à¦¯ খà§à¦¬à¦‡ ছোট। অনà§à¦—à§à¦°à¦¹ করে কমপকà§à¦·à§‡ %3 GiB ধারণ কà§à¦·à¦®à¦¤à¦¾ সমà§à¦ªà¦¨à§à¦¨ à¦à¦•টি পারà§à¦Ÿà¦¿à¦¶à¦¨ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤ <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/> à¦à¦•টি EFI সিসà§à¦Ÿà§‡à¦® পারà§à¦Ÿà¦¿à¦¶à¦¨ à¦à¦‡ সিসà§à¦Ÿà§‡à¦®à§‡à¦° কোথাও খà§à¦à¦œà§‡ পাওয়া যাবে না। অনà§à¦—à§à¦°à¦¹ করে ফিরে যান à¦à¦¬à¦‚ %1 সেট আপ করতে মà§à¦¯à¦¾à¦¨à§à¦¯à¦¼à¦¾à¦² পারà§à¦Ÿà¦¿à¦¶à¦¨à¦¿à¦‚ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤ <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 %2-ঠইনসà§à¦Ÿà¦² করা হবে।<br/><font color="red"> সতরà§à¦•ীকরণ: </font>%2 পারà§à¦Ÿà¦¿à¦¶à¦¨à§‡à¦° সকল উপাতà§à¦¤ হারিয়ে যাবে। The EFI system partition at %1 will be used for starting %2. %1 ঠEFI সিসà§à¦Ÿà§‡à¦® পারà§à¦Ÿà¦¿à¦¶à¦¨ %2 শà§à¦°à§ করার জনà§à¦¯ বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হবে। EFI system partition: EFI সিসà§à¦Ÿà§‡à¦® পারà§à¦Ÿà¦¿à¦¶à¦¨: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. পারà§à¦Ÿà¦¿à¦¶à¦¨ %1 পà§à¦¨à¦ƒà¦†à¦•ার করà§à¦¨à¥¤ Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ইনসà§à¦Ÿà¦²à¦¾à¦° '%2' ডিসà§à¦•ে %1 পারà§à¦Ÿà¦¿à¦¶à¦¨ পà§à¦¨à¦ƒà¦†à¦•ার করতে বà§à¦¯à¦°à§à¦¥ হয়েছে। ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... সà§à¦Ÿà§‹à¦°à§‡à¦œ ডিভাইস সà§à¦•à§à¦¯à¦¾à¦¨ করা হচà§à¦›à§‡... Partitioning পারà§à¦Ÿà¦¿à¦¶à¦¨ করা হচà§à¦›à§‡ SetHostNameJob Set hostname %1 হোসà§à¦Ÿà§‡à¦° নাম %1 নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨ Set hostname <strong>%1</strong>. হোসà§à¦Ÿà¦¨à¦¾à¦® <strong>%1</strong> নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨à¥¤ Setting hostname %1. হোসà§à¦Ÿà¦¨à¦¾à¦® %1 নিরà§à¦§à¦¾à¦°à¦£ করা হচà§à¦›à§‡à¥¤ Internal Error অভà§à¦¯à¦¨à§à¦¤à¦°à§€à¦£ তà§à¦°à§à¦Ÿà¦¿ Cannot write hostname to target system লকà§à¦·à§à¦¯ বà§à¦¯à¦¬à¦¸à§à¦¥à¦¾à§Ÿ হোসà§à¦Ÿà§‡à¦° নাম লেখা যাচà§à¦›à§‡ না SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 কীবোরà§à¦¡ মডেলটিকে %1, লেআউটটিকে %2-%3 ঠসেট করà§à¦¨ Failed to write keyboard configuration for the virtual console. ভারà§à¦šà§à¦¯à¦¼à¦¾à¦² কনসোলের জনà§à¦¯ কীবোরà§à¦¡ কনফিগারেশন লিখতে বà§à¦¯à¦°à§à¦¥ হয়েছে। Failed to write to %1 %1 ঠলিখতে বà§à¦¯à¦°à§à¦¥ Failed to write keyboard configuration for X11. X11 à¦à¦° জনà§à¦¯ কীবোরà§à¦¡ কনফিগারেশন লিখতে বà§à¦¯à¦°à§à¦¥ হয়েছে। Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর জনà§à¦¯ গà§à¦ªà§à¦¤-সংকেত নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨ %1 Setting password for user %1. বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর %1-à¦à¦° জনà§à¦¯ গà§à¦ªà§à¦¤-সংকেত নিরà§à¦§à¦¾à¦°à¦£ করা হচà§à¦›à§‡à¥¤ Bad destination system path. খারাপ গনà§à¦¤à¦¬à§à¦¯ সিসà§à¦Ÿà§‡à¦® পথ। rootMountPoint is %1 রà§à¦Ÿà¦®à¦¾à¦‰à¦¨à§à¦Ÿà¦ªà¦¯à¦¼à§‡à¦¨à§à¦Ÿà¦Ÿà¦¿ %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. %1 বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর জনà§à¦¯ পাসওয়ারà§à¦¡ নিরà§à¦§à¦¾à¦°à¦£ করা যাচà§à¦›à§‡ না। usermod terminated with error code %1. %1 তà§à¦°à§à¦Ÿà¦¿ কোড দিয়ে বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীমোড সমাপà§à¦¤ করা হয়েছে। SetTimezoneJob Set timezone to %1/%2 %1/%2 ঠসময়অঞà§à¦šà¦² নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨ Cannot access selected timezone path. নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সময়অঞà§à¦šà¦² পথে পà§à¦°à¦¬à§‡à¦¶ করতে পারে না। Bad path: %1 খারাপ পথ: %1 Cannot set timezone. সময়অঞà§à¦šà¦² নিরà§à¦§à¦¾à¦°à¦£ করা যাচà§à¦›à§‡ না। Link creation failed, target: %1; link name: %2 লিংক তৈরি বà§à¦¯à¦°à§à¦¥ হয়েছে, লকà§à¦·à§à¦¯: %1; লিংকের নাম: %2 Cannot set timezone, সময়অঞà§à¦šà¦² নিরà§à¦§à¦¾à¦°à¦£ করা যাচà§à¦›à§‡ না, Cannot open /etc/timezone for writing লেখার জনà§à¦¯ /ইতà§à¦¯à¦¾à¦¦à¦¿/সময়অঞà§à¦šà¦² খোলা যাচà§à¦›à§‡ না SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Sudoers ফাইল chmod করা যাবে না। Cannot create sudoers file for writing. লেখার জনà§à¦¯ sudoers ফাইল তৈরি করা যাবে না। ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel à¦à¦¬à¦‚বাতিল করà§à¦¨ &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form ফরà§à¦® Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. আনমাউনà§à¦Ÿ ফাইল সিসà§à¦Ÿà§‡à¦®à¦—à§à¦²à¦¿ করà§à¦¨à¥¤ No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীরা UsersViewStep Users বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীরা VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form ফরà§à¦® Select application and system language Open donations website &Donate Open help and support website &Support à¦à¦¬à¦‚সহায়তা Open issues and bug-tracking website &Known issues à¦à¦¬à¦‚পরিচিত বিষয়গà§à¦²à§‹ Open release notes website &Release notes à¦à¦¬à¦‚নোট পà§à¦°à¦•াশ করà§à¦¨ %1 support %1 সহায়তা About %1 setup About %1 installer %1 ইনসà§à¦Ÿà¦²à¦¾à¦° সমà§à¦ªà¦°à§à¦•ে WelcomeQmlViewStep Welcome সà§à¦¬à¦¾à¦—তম WelcomeViewStep Welcome সà§à¦¬à¦¾à¦—তম ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error কনফিগারেশন তà§à¦°à§à¦Ÿà¦¿ No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information ডিবাগ তথà§à¦¯ দেখান finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: কীবোরà§à¦¡ নকশা: Layouts Type here to test your keyboard আপনার কীবোরà§à¦¡ পরীকà§à¦·à¦¾ করতে à¦à¦–ানে টাইপ করà§à¦¨ Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? আপনার নাম কি? Your Full Name What name do you want to use to log in? লগ-ইন করতে আপনি কোন নাম বà§à¦¯à¦¬à¦¹à¦¾à¦° করতে চান? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡à¦° নাম কি? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. আপনার অà§à¦¯à¦¾à¦•াউনà§à¦Ÿ সà§à¦°à¦•à§à¦·à¦¿à¦¤ রাখতে à¦à¦•টি পাসওয়ারà§à¦¡ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤ Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. পà§à¦°à¦¶à¦¾à¦¸à¦• হিসাবের জনà§à¦¯ à¦à¦•ই গà§à¦ªà§à¦¤-সংকেত বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤ Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_ca.ts000066400000000000000000007200111430147706700216740ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> per a %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Gràcies a <a href="https://calamares.io/team/">l'equip del Calamares</a> i <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. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Drets d'autor %1-%2 %3 &lt;%4&gt;<br/> 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. 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 Successfully unmounted %1. S'ha desmuntat correctament %1. Successfully disabled swap %1. S'ha inhabilitat correctament l'intercanvi %1. Successfully cleared swap %1. S'ha netejat correctament l'intercanvi %1. Successfully closed mapper device %1. El dispositiu de mapatge %1 s'ha tancat correctament. Successfully disabled volume group %1. El grup de volums %1 s'ha inhabilitat correctament. Clear mounts for partitioning operations on %1 Neteja els muntatges per les operacions de partició a %1 Clearing mounts for partitioning operations on %1. Es netegen els muntatges per a les operacions de les particions a %1. Cleared all mounts for %1 S'han netejat tots els muntatges de %1 ClearTempMountsJob Clear all temporary mounts. Neteja tots els muntatges temporals. Clearing all temporary mounts. Es netegen tots els 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. Packages Paquets Install option: <strong>%1</strong> Opció d'instal·lació: <strong>%1</strong> None Cap Summary Resum This is an overview of what will happen once you start the setup procedure. Això és un resum del que passarà quan s'iniciï el procés de configuració. This is an overview of what will happen once you start the install procedure. Això és un resum del que passarà quan s'iniciï el procés d'instal·lació. ContextualProcessJob Contextual Processes Job Tasca de procés contextual CreatePartitionDialog Create a Partition Crea una partició Si&ze: Mi&da: MiB MB Partition &Type: &Tipus de partició: Primar&y Primar&i E&xtended &Ampliada Fi&le System: S&istema de fitxers: LVM LV name Nom del volum lògic LVM &Mount Point: Punt de &muntatge: Flags: Indicadors: Label for the filesystem Etiqueta per al sistema de fitxers FS Label: Etiqueta del sistema de fitxers: En&crypt En&cripta Logical Lògica Primary Primària GPT GPT Mountpoint already in use. Please select another one. El punt de muntatge ja està en ús. Si us plau, seleccioneu-ne un altre. Mountpoint must start with a <tt>/</tt>. El punt de muntatge ha de començar amb <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Crea una partició nova de %1 MiB a %3 (%2) amb entrades %4. Create new %1MiB partition on %3 (%2). Crea una partició nova de %1 MiB a %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Crea una partició nova de %2 MiB a %4 (%3) amb el sistema de fitxers %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Crea una partició nova de <strong>%1 MiB</strong> a <strong>%3</strong> (%2) amb entrades <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Crea una partició nova de <strong>%1 MiB</strong> a <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Crea una partició nova de <strong>%2 MiB</strong> a <strong>%4</strong> (%3) amb el sistema de fitxers <strong>%1</strong>. Creating new %1 partition on %2. Es crea la partició nova %1 a %2. The installer failed to create partition on disk '%1'. L'instal·lador no ha pogut crear la partició al disc '%1'. 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 Con&tent: Con&tingut: &Keep &Mantén Format Formata Warning: Formatting the partition will erase all existing data. Advertència: formatar la partició esborrarà totes les dades existents. &Mount Point: &Punt de muntatge: Si&ze: Mi&da: MiB MB Fi&le System: S&istema de fitxers: Flags: Indicadors: Label for the filesystem Etiqueta per al sistema de fitxers FS Label: Etiqueta del sistema de fitxers: Passphrase for existing partition Contrasenya per a la partició existent Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. La partició %1 no s'ha pogut desencriptar amb la contrasenya proporcionada. <br/><br/> Torneu a editar la partició i proporcioneu la contrasenya correcta, o suprimiu-la i creeu una partició encriptada nova. EncryptWidget Form Formulari En&crypt system En&cripta el sistema Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Sembla que el vostre sistema no admet prou bé l'encriptació per encriptar tot el sistema. Podeu activar-la, però el rendiment se'n pot ressentir. Passphrase Contrasenya: Confirm passphrase Confirmeu la contrasenya Please enter the same passphrase in both boxes. Si us plau, escriviu la mateixa contrasenya a les dues caselles. ErrorDialog Details: Detalls: Would you like to paste the install log to the web? Voleu enganxar el registre d'instal·lació a la xarxa? FillGlobalStorageJob Set partition information Estableix la informació de la partició Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Instal·la %1 a la partició de sistema <strong>nova</strong> %2 amb funcions <em>%3</em>. Install %1 on <strong>new</strong> %2 system partition. Instal·la %1 a la partició de sistema <strong>nova</strong> %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Es configura l'intercanvi encriptat. No target system available. No hi ha cap sistema de destinació disponible. No rootMountPoint is set. No s'ha establert cap punt de muntatge d'arrel. No configFilePath is set. No s'ha establert cap camí de fitxer de configuració. LicensePage Form Formulari <h1>License Agreement</h1> <h1>Acord de llicència</h1> I accept the terms and conditions above. Accepto els termes i les condicions anteriors. Please review the End User License Agreements (EULAs). Si us plau, consulteu els acords de llicència d'usuari final (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Aquest procediment de configuració instal·larà programari de propietat subjecte a termes de llicència. If you do not agree with the terms, the setup procedure cannot continue. Si no esteu d’acord en els termes, el procediment de configuració no pot continuar. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Aquest procediment de configuració instal·larà programari de propietat subjecte a termes de llicència per tal de proporcionar característiques addicionals i millorar l'experiència de l'usuari. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Si no esteu d'acord en els termes, no s'instal·larà el programari de propietat i es faran servir les alternatives de codi lliure. 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 label for netinstall module, Linux kernel Nucli Services label for netinstall module, system services Serveis Login label for netinstall module, choose login manager Entrada Desktop label for netinstall module, choose desktop environment Escriptori Communication label for netinstall module Comunicació Development label for netinstall module Desenvolupament Office label for netinstall module Oficina Multimedia label for netinstall module Multimèdia Internet label for netinstall module Internet Theming label for netinstall module Tema Gaming label for netinstall module Jocs Utilities label for netinstall module Utilitats Applications Aplicacions 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. 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 Unsafe partition actions are enabled. Les accions de partició no segures estan habilitades. Partitioning is configured to <b>always</b> fail. Les particions estan configurades per fallar <b>sempre</b>. No partitions will be changed. No es canviarà cap partició. Current: Actual: After: Després: No EFI system partition configured No hi ha cap partició EFI de sistema configurada EFI system partition configured incorrectly Partició de sistema EFI configurada incorrectament An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. Cal una partició de sistema EFI per iniciar %1. <br/><br/>Per configurar-ne una, torneu enrere i seleccioneu o creeu un sistema de fitxers adequat. The filesystem must be mounted on <strong>%1</strong>. El sistema de fitxers ha d'estar muntat a <strong>%1</strong>. The filesystem must have type FAT32. El sistema de fitxers ha de ser del tipus FAT32. The filesystem must be at least %1 MiB in size. El sistema de fitxers ha de tenir un mínim de %1 MiB. The filesystem must have flag <strong>%1</strong> set. El sistema de fitxers ha de tenir la bandera <strong>%1</strong> establerta. You can continue without setting up an EFI system partition but your system may fail to start. Podeu continuar sense configurar una partició del sistema EFI, però és possible que el sistema no s'iniciï. Option to use GPT on BIOS Opció per usar GPT amb BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. La millor opció per a tots els sistemes és una taula de particions GPT. Aquest instal·lador també admet aquesta configuració per a sistemes BIOS.<br/><br/>Per configurar una taula de particions GPT en un sistema BIOS, (si no s'ha fet ja) torneu enrere i establiu la taula de particions a GPT, després creeu una partició sense formatar de 8 MB amb la bandera <strong>%2</strong> habilitada.<br/><br/>Cal una partició sense format de 8 MB per iniciar %1 en un sistema BIOS amb GPT. Boot partition not encrypted Partició d'arrencada sense encriptar A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. S'ha establert una partició d'arrencada separada conjuntament amb una partició d'arrel encriptada, però la partició d'arrencada no està encriptada.<br/><br/>Hi ha assumptes de seguretat amb aquest tipus de configuració, perquè hi ha fitxers del sistema importants en una partició no encriptada.<br/>Podeu continuar, si així ho desitgeu, però el desbloqueig del sistema de fitxers succeirà després, durant l'inici del sistema.<br/>Per encriptar la partició d'arrencada, torneu enrere i torneu-la a crear seleccionant <strong>Encripta</strong> a la finestra de creació de la partició. has at least one disk device available. tingui com a mínim un dispositiu de disc disponible. There are no partitions to install on. No hi ha particions per fer-hi una instal·lació. 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 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 StandardButtons &OK D'ac&ord &Yes &Sí &No &No &Cancel &Cancel·la &Close Tan&ca TrackingInstallJob Installation feedback Informació de retorn de la instal·lació Sending installation feedback. S'envia la informació de retorn de la instal·lació. Internal error in install-tracking. Error intern a install-tracking. HTTP request timed out. La petició HTTP ha esgotat el temps d'espera. 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 UmountJob Unmount file systems. Desmunta els sistemes de fitxers. No target system available. No hi ha cap sistema de destinació disponible. No rootMountPoint is set. No s'ha establert cap punt de muntatge d'arrel. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si més d'una persona usarà aquest ordinador, podeu crear diversos comptes després de la configuració.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si més d'una persona usarà aquest ordinador, podeu crear diversos comptes després de la instal·lació.</small> UsersQmlViewStep 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 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ó %1 support %1 suport About %1 setup Quant a la configuració de %1 About %1 installer Quant a l'instal·lador %1 WelcomeQmlViewStep Welcome Benvingut/da WelcomeViewStep Welcome Benvingut/da ZfsJob Create ZFS pools and datasets Crea agrupacions i conjunts de dades ZFS Failed to create zpool on No s'ha pogut crear la zpool a Configuration Error Error de configuració No partitions are available for ZFS. No hi ha particions disponibles per a ZFS. Internal data missing Falten dades internes. Failed to create zpool No s'ha pogut crear la zpool. Failed to create dataset No s'ha pogut crear el conjunt de dades. The output was: La sortida ha estat la següent: calamares-sidebar About Quant a Debug Depuració Show information about Calamares Mostra informació quant al Calamares. Show debug information Informació de depuració finishedq Installation Completed Instal·lació acabada %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 s'ha instal·lat a l'ordinador. <br/> Ara podeu reiniciar-lo per tal d'accedir al sistema operatiu nou o bé continuar usant l'entorn autònom. Close Installer Tanca l'instal·lador Restart System Reinicia el sistema <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Hi ha disponible un registre complet de la instal·lació com a installation.log al directori de l’usuari autònom.<br/> Aquest registre es copia a /var/log/installation.log del sistema de destinació.</p> finishedq@mobile Installation Completed Instal·lació acabada %1 has been installed on your computer.<br/> You may now restart your device. %1 s'ha instal·lat a l'ordinador.<br/> Ara podeu reiniciar el dispositiu. Close Tanca Restart Reinicia i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Llengües</h1> </br> La configuració local del sistema afecta la llengua i el joc de caràcters d'alguns elements de la interfície de línia d'ordres. La configuració actual és <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Configuració local</h1> </br> La configuració local del sistema afecta el format de números i dates. La configuració actual és <strong>%1</strong>. Back Enrere keyboardq To activate keyboard preview, select a layout. Per activar la previsualització del teclat, seleccioneu-ne una disposició. Keyboard Model: Model del teclat: Layouts Disposicions Type here to test your keyboard Escriviu aquí per comprovar el teclat Variants Variants 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> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. El LibreOffice és un conjunt de programari d'ofimàtica potent i gratuït, usat per milions de persones a tot el món. Inclou diverses aplicacions que el converteixen en el paquet ofimàtic de codi obert i lliure més versàtil del mercat.<br/> Opció predeterminada. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Si no voleu instal·lar cap programari d'ofimàtica, només cal que seleccioneu Sense paquet d'ofimàtica. Sempre podeu afegir-ne un (o més) més endavant al sistema instal·lat quan arribi la necessitat. No Office Suite Sense paquet d'ofimàtica Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Creeu una instal·lació mínima d'escriptori, suprimiu totes les aplicacions addicionals i decidiu més tard què voleu afegir al vostre sistema. Exemples del que no hi haurà en aquesta instal·lació: no hi haurà paquet d'ofimàtica, ni reproductors multimèdia, ni visualitzador d'imatges ni suport d'impressió. Hi haruà només un escriptori, un navegador de fitxers, un gestor de paquets, un editor de text i un navegador web senzill. Minimal Install Instal·lació mínima Please select an option for your install, or use the default: LibreOffice included. Seleccioneu una opció per a la instal·lació o useu el valor predeterminat: LibreOffice inclòs. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Aquest és un fitxer QML d'exemple. Es mostren les opcions en text ric amb contingut parpellejant.</p> <p>El QML amb text ric pot crear etiquetes d'HTML, el contingut parpellejant és útil per a pantalles tàctils.</p> <p><b>Això és text en negreta.</b></p> <p><i>Això és text en cursiva.</i></p> <p><u>Això és text subratllat.</u></p> <p><center>Aquest text estarà alineat al centre.</center></p> <p><s>Aquest text és ratllat.</s></p> <p>Codi d'exemple: <code>ls -l /home</code></p> <p><b>Llistes:</b></p> <ul> <li>Sistemes amb CPU d'Intel</li> <li>Sistemes amb CPU AMD</li> </ul> <p>La barra de desplaçament vertical és ajustable, amplada actual a 10.</p> Back Enrere usersq Pick your user name and credentials to login and perform admin tasks Trieu el nom d'usuari i les credencials per iniciar la sessió i fer tasques d'administració. What is your name? Com us dieu? Your Full Name El nom complet What name do you want to use to log in? Quin nom voleu usar per iniciar la sessió? Login Name Nom d'entrada If more than one person will use this computer, you can create multiple accounts after installation. Si aquest ordinador l'usarà més d'una persona, podreu crear diversos comptes després de la instal·lació. Only lowercase letters, numbers, underscore and hyphen are allowed. Només es permeten lletres en minúscula, números, ratlles baixes i guions. root is not allowed as username. No es permet root com a nom d'usuari. What is the name of this computer? Com es diu aquest ordinador? Computer Name Nom de l'ordinador This name will be used if you make the computer visible to others on a network. Aquest nom s'usarà si feu visible aquest ordinador per a altres en una xarxa. localhost is not allowed as hostname. No es permet localhost com a nom d'amfitrió. Choose a password to keep your account safe. Trieu una contrasenya per tal de mantenir el compte segur. Password Contrasenya Repeat Password Repetiu la contrasenya. Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Escriviu la mateixa contrasenya dos cops per poder-ne comprovar els errors de mecanografia. Una bona contrasenya ha de contenir una barreja de lletres, números i signes de puntuació, hauria de tenir un mínim de 8 caràcters i s'hauria de modificar a intervals regulars. Validate passwords quality Valida la qualitat de les contrasenyes. When this box is checked, password-strength checking is done and you will not be able to use a weak password. Quan aquesta casella està marcada, es comprova la fortalesa de la contrasenya i no en podreu fer una de dèbil. Log in automatically without asking for the password Entra automàticament sense demanar la contrasenya. Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Només es permeten lletres, números, guionets, guionets baixos i un mínim de dos caràcters. Reuse user password as root password Reutilitza la contrasenya d'usuari com a contrasenya d'arrel. Use the same password for the administrator account. Usa la mateixa contrasenya per al compte d'administració. Choose a root password to keep your account safe. Trieu una contrasenya d'arrel per mantenir el compte segur. Root Password Contrasenya d'arrel Repeat Root Password Repetiu la contrasenya d'arrel. Enter the same password twice, so that it can be checked for typing errors. Escriviu la mateixa contrasenya dos cops per poder-ne comprovar els errors de mecanografia. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Benvingut/da a l'instal·lador <quote>%2</quote>per a %1</h3> <p>Aquest programa us preguntarà unes quantes coses i instal·larà el %1 a l'ordinador. </p> Support Suport Known issues Problemes coneguts Release notes Notes de la versió Donate Feu una donació calamares-calamares-2d126ae/lang/calamares_ca@valencia.ts000066400000000000000000007021511430147706700235040ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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. 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Neteja els muntatges per a les operacions de partició en %1 Clearing mounts for partitioning operations on %1. S'estan netejant els muntatges per a les operacions de les particions en %1. Cleared all mounts for %1 S'han netejat tots els muntatges de %1. ClearTempMountsJob Clear all temporary mounts. Neteja tots els muntatges temporals. Clearing all temporary mounts. S'estan netejant tots els muntatges temporals. 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. Packages Paquets Install option: <strong>%1</strong> None Summary Resum This is an overview of what will happen once you start the setup procedure. Això és un resum de què passarà quan s'inicie el procés de configuració. This is an overview of what will happen once you start the install procedure. Això és un resum de què passarà quan s'inicie el procés d'instal·lació. ContextualProcessJob Contextual Processes Job Tasca de procés contextual CreatePartitionDialog Create a Partition Creació d'una partició Si&ze: Mi&da: MiB MiB Partition &Type: &Tipus de partició: Primar&y E&xtended &Ampliada Fi&le System: S&istema de fitxers: LVM LV name Nom del volum lògic LVM &Mount Point: Punt de &muntatge: Flags: Marcadors: Label for the filesystem FS Label: En&crypt En&cripta Logical Lògica Primary Primària GPT GPT Mountpoint already in use. Please select another one. El punt de muntatge ja està en ús. Seleccioneu-ne un altre. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Crea una partició nova de %2 MiB a %4 (%3) amb el sistema de fitxers %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Crea una partició nova de <strong>%2 MiB</strong> a <strong>%4</strong> (%3) amb el sistema de fitxers <strong>%1</strong>. Creating new %1 partition on %2. S'està creant la partició nova %1 en %2. The installer failed to create partition on disk '%1'. L'instal·lador no ha pogut crear la partició en el disc '%1'. CreatePartitionTableDialog Create Partition Table Creació de la taula de particions Creating a new partition table will delete all existing data on the disk. La creació d'una nova taula de particions suprimirà totes les dades existents en el disc. What kind of partition table do you want to create? Quin tipus de taula de particions voleu crear? Master Boot Record (MBR) Registre d'arrancada mestre (MBR) GUID Partition Table (GPT) Taula de particions GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Creació d'una taula de particions nova %1 en %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creació d'una taula de particions nova <strong>%1</strong> en <strong>%2</strong> (%3). Creating new %1 partition table on %2. S'està creant la taula de particions nova %1 en %2. The installer failed to create a partition table on %1. L'instal·lador no ha pogut crear la taula de particions en %1. CreateUserJob Create user %1 Crea l'usuari %1 Create user <strong>%1</strong>. Crea l'usuari <strong>%1</strong>. 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 Con&tent: &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: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formulari En&crypt system En&cripta el sistema Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Contrasenya Confirm passphrase Confirmeu la contrasenya Please enter the same passphrase in both boxes. Escriviu la mateixa contrasenya en les dues caselles. ErrorDialog Details: Would you like to paste the install log to the web? Voleu enganxar el registre d'instal·lació a la xarxa? FillGlobalStorageJob Set partition information Estableix la informació de la partició Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. S’està configurant l'intercanvi encriptat. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formulari <h1>License Agreement</h1> <h1>Acord de llicència</h1> I accept the terms and conditions above. Accepte els termes i les condicions anteriors. Please review the End User License Agreements (EULAs). Consulteu els acords de llicència d'usuari final (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Aquest procediment de configuració instal·larà programari propietari subjecte a termes de llicència. If you do not agree with the terms, the setup procedure cannot continue. Si no esteu d'acord amb els termes, el procediment de configuració no pot continuar. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Aquest procediment de configuració instal·larà propietari subjecte a termes de llicència per tal de proporcionar característiques addicionals i millorar l'experiència de l'usuari. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Si no esteu d'acord en els termes, no s'instal·larà el programari propietari i es faran servir les alternatives de codi lliure. LicenseViewStep License Llicència LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong> controlador %1</strong><br/>de %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong> controlador gràfic %1</strong><br/><font color="Grey">de %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong> connector del navegador %1</strong><br/><font color="Grey">de %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong> còdec %1</strong><br/><font color="Grey">de %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong> paquet %1</strong><br/><font color="Grey">de %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">de %2</font> File: %1 Fitxer: %1 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 label for netinstall module, Linux kernel Nucli Services label for netinstall module, system services Serveis Login label for netinstall module, choose login manager Entrada Desktop label for netinstall module, choose desktop environment Escriptori Communication label for netinstall module Comunicació Development label for netinstall module Desenvolupament Office label for netinstall module Oficina Multimedia label for netinstall module Multimèdia Internet label for netinstall module Internet Theming label for netinstall module Tema Gaming label for netinstall module Jugant Utilities label for netinstall module Utilitats Applications Aplicacions 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Actual: After: Després: No EFI system partition configured No hi ha cap partició EFI de sistema configurada EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS Opció per a usar GPT amb BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. 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 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 StandardButtons &OK D'ac&ord &Yes &Sí &No &No &Cancel &Cancel·la &Close Tan&ca TrackingInstallJob Installation feedback Informació de retorn de la instal·lació Sending installation feedback. S'envia la informació de retorn de la instal·lació. Internal error in install-tracking. S'ha produït un error intern en install-tracking. HTTP request timed out. La petició HTTP ha esgotat el temps d'espera. 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ó UmountJob Unmount file systems. Desmunta els sistemes de fitxers. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si hi ha més d'una persona que ha d'usar aquest ordinador, podeu crear diversos comptes després de la configuració.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si hi ha més d'una persona que ha d'usar aquest ordinador, podeu crear diversos comptes després de la instal·lació.</small> UsersQmlViewStep Users Usuaris UsersViewStep Users Usuaris VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group Crea un grup de volums List of Physical Volumes Llista de volums físics Volume Group Name: Nom del grup de volums: Volume Group Type: Tipus del grup de volums: Physical Extent Size: Mida de l'extensió física: MiB MiB Total Size: Mida total: Used Size: Mida usada: Total Sectors: Sectors totals: Quantity of LVs: Quantitat de volums lògics: WelcomePage Form Formulari Select application and system language Seleccioneu una aplicació i la llengua del sistema Open donations website 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ó %1 support %1 soport About %1 setup Quant a la configuració de %1 About %1 installer Sobre %1 instal·lador WelcomeQmlViewStep Welcome Benvingut WelcomeViewStep Welcome Benvingut ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error S'ha produït un error en la configuració. No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Quant a Debug Show information about Calamares 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> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Llengües</h1> </br> La configuració local del sistema afecta la llengua i el joc de caràcters d'alguns elements de la interfície de línia d'ordres. La configuració actual és <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Configuració local</h1> </br> La configuració local del sistema afecta el format de números i dates. La configuració actual és <strong>%1</strong>. Back Arrere keyboardq To activate keyboard preview, select a layout. Keyboard Model: Model de teclat: Layouts Disposicions Type here to test your keyboard Escriviu ací per a provar el teclat Variants Variants 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> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Aquest és un fitxer QML d'exemple. Es mostren les opcions en text enriquit amb contingut parpellejant.</p> <p>El QML amb text enriquit pot crear etiquetes d'HTML, el contingut parpellejant és útil per a pantalles tàctils.</p> <p><b>Això és text en negreta.</b></p> <p><i>Això és text en cursiva.</i></p> <p><u>Això és text subratllat.</u></p> <p><center>Aquest text estarà alineat al centre.</center></p> <p><s>Aquest text és ratllat.</s></p> <p>Codi d'exemple: <code>ls -l /home</code></p> <p><b>Llistes:</b></p> <ul> <li>Sistemes amb CPU d'Intel</li> <li>Sistemes amb CPU AMD</li> </ul> <p>La barra de desplaçament vertical és ajustable, amplària actual a 10.</p> Back Arrere usersq Pick your user name and credentials to login and perform admin tasks Trieu el nom d'usuari i les credencials per a iniciar la sessió i fer tasques d'administració. What is your name? Quin és el vostre nom? Your Full Name Nom complet What name do you want to use to log in? Quin nom voleu utilitzar per a entrar al sistema? Login Name Nom d'entrada If more than one person will use this computer, you can create multiple accounts after installation. Si hi ha més d'una persona que ha d'usar aquest ordinador, podeu crear diversos comptes després de la instal·lació. Only lowercase letters, numbers, underscore and hyphen are allowed. Només es permeten lletres en minúscula, números, ratlles baixes i guions. root is not allowed as username. What is the name of this computer? Quin és el nom d'aquest ordinador? Computer Name Nom de l'ordinador This name will be used if you make the computer visible to others on a network. Aquest nom s'usarà si feu visible aquest ordinador per a altres en una xarxa. localhost is not allowed as hostname. Choose a password to keep your account safe. Seleccioneu una contrasenya per a mantindre el vostre compte segur. Password Contrasenya Repeat Password Repetiu la contrasenya Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Escriviu la mateixa contrasenya dues vegades per a poder comprovar-ne els errors de mecanografia. Una bona contrasenya contindrà una barreja de lletres, números i signes de puntuació. Hauria de tindre un mínim de huit caràcters i s'hauria de canviar sovint. Validate passwords quality Valida la qualitat de les contrasenyes. When this box is checked, password-strength checking is done and you will not be able to use a weak password. Quan aquesta casella està marcada, es comprova la fortalesa de la contrasenya i no podreu indicar-ne una de dèbil. Log in automatically without asking for the password Entra automàticament sense demanar la contrasenya. Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Reutilitza la contrasenya d'usuari com a contrasenya d'arrel. Use the same password for the administrator account. Usa la mateixa contrasenya per al compte d'administració. Choose a root password to keep your account safe. Trieu una contrasenya d'arrel per mantindre el compte segur. Root Password Contrasenya d'arrel Repeat Root Password Repetiu la contrasenya d'arrel. Enter the same password twice, so that it can be checked for typing errors. Escriviu la mateixa contrasenya dues vegades per a poder comprovar-ne els errors de mecanografia. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <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> Support Suport Known issues Incidències conegudes Release notes Notes de la versió Donate Feu un donatiu calamares-calamares-2d126ae/lang/calamares_cs_CZ.ts000066400000000000000000007201561430147706700223240ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Autorská práva %1-%2 %3 &lt;%4&gt;<br/> AutoMountManagementJob Manage auto-mount settings Spravovat nastavení automatického pÅ™ipojování (mount) BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>ZavádÄ›cí prostÅ™edí</strong> tohoto systému.<br><br>Starší x86 systémy podporují pouze <strong>BIOS</strong>.<br>Moderní systémy obvykle používají <strong>UEFI</strong>, ale pokud jsou spuÅ¡tÄ›né v režimu kompatibility, mohou se zobrazovat jako BIOS. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Systém byl spuÅ¡tÄ›n se zavádÄ›cím prostÅ™edím <strong>EFI</strong>.<br><br>Aby byl systém zavádÄ›n prostÅ™edím EFI je tÅ™eba, aby instalátor nasadil na <strong> EFI systémový oddíl</strong>aplikaci pro zavádÄ›ní systému, jako <strong>GRUB</strong> nebo <strong>systemd-boot</strong>. To probÄ›hne automaticky, tedy pokud si nezvolíte ruÄní dÄ›lení datového úložiÅ¡tÄ› – v takovém případÄ› si EFI systémový oddíl volíte nebo vytváříte sami. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Systém byl spuÅ¡tÄ›n se zavádÄ›cím prostÅ™edím <strong>BIOS</strong>.<br><br>Aby byl systém zavádÄ›n prostÅ™edím BIOS je tÅ™eba, aby instalátor vpravil zavadÄ›Ä systému, jako <strong>GRUB</strong>, buÄ na zaÄátek oddílu nebo (lépe) do <strong>hlavního zavádÄ›cího záznamu (MBR)</strong> na zaÄátku tabulky oddílů. To probÄ›hne automaticky, tedy pokud si nezvolíte ruÄní dÄ›lení datového úložiÅ¡tÄ› – v takovém případÄ› si zavádÄ›ní nastavujete sami. 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. Zhavaruje Calamares, takže se bude možné podívat v nástroji pro analýzu pádů (Dr. Konqui) Reloads the stylesheet from the branding directory. Znovu naÄíst tabulky stylů ze složky s pÅ™izpůsobením vzhledu. Uploads the session log to the configured pastebin. Nahraje záznam událostí z relace do nastavené instance pastebin. Send Session Log Odeslat záznamu událostí z relace Reload Stylesheet ZnovunaÄíst seÅ¡it se styly Displays the tree of widget names in the log (for stylesheet debugging). Zobrazí v záznamu událostí strom ovládacích prvků (urÄeno pro ladÄ›ní tabulek se styly). Widget Tree Strom ovládacích prvků Debug information Ladící informace Calamares::ExecutionViewStep Set up Nastavit Install Nainstalovat Calamares::FailJob Job failed (%1) Úloha se nezdaÅ™ila (%1) Programmed job failure was explicitly requested. Byl výslovnÄ› vyžádán nezdar naprogramované úlohy. 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žka %1 pro Python skript %2 není přístupná pro Ätení. Bad main script file Nesprávný soubor s hlavním skriptem Main script file %1 for python job %2 is not readable. Hlavní soubor Python skriptu %1 pro úlohu %2 není přístupný 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 Error Chyba &Yes &Ano &No &Ne &Close &Zavřít Install Log Paste URL URL pro vložení záznamu událostí pÅ™i instalaci The upload was unsuccessful. No web-paste was done. Nahrání se nezdaÅ™ilo. Na web nebylo nic vloženo. Install log posted to %1 Link copied to clipboard Záznam událostí z instalace poskytnut na %1 Odkaz na nÄ›j zkopírován do schránky Calamares Initialization Failed Inicializace Calamares se nezdaÅ™ila %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 nemůže být nainstalováno. Calamares se nepodaÅ™ilo naÄíst vÅ¡echny nastavené moduly. Toto je problém způsobu použití Calamares ve vámi používané distribuci. <br/>The following modules could not be loaded: <br/> Následující moduly se nepodaÅ™ilo naÄíst: Continue with setup? PokraÄovat s instalací? Continue with installation? PokraÄovat v instalaci? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Instalátor %1 provede zmÄ›ny na datovém úložiÅ¡ti, aby bylo nainstalováno %2.<br/><strong>ZmÄ›ny nebude možné vrátit zpÄ›t.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Instalátor %1 provede zmÄ›ny na datovém úložiÅ¡ti, aby bylo nainstalováno %2.<br/><strong>ZmÄ›ny nebude možné vrátit zpÄ›t.</strong> &Set up now Na&stavit nyní &Install now &Spustit instalaci Go &back Jít &zpÄ›t &Set up Na&stavit &Install Na&instalovat Setup is complete. Close the setup program. Nastavení je dokonÄeno. UkonÄete nastavovací program. The installation is complete. Close the installer. Instalace je dokonÄena. UkonÄete instalátor. Cancel setup without changing the system. ZruÅ¡it nastavení bez zmÄ›ny v systému. Cancel installation without changing the system. ZruÅ¡ení instalace bez provedení zmÄ›n systému. &Next &Další &Back &ZpÄ›t &Done &Hotovo &Cancel &Storno Cancel setup? ZruÅ¡it nastavování? Cancel installation? PÅ™eruÅ¡it instalaci? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Opravdu chcete pÅ™eruÅ¡it instalaci? InstalaÄní program bude ukonÄen a vÅ¡echny zmÄ›ny ztraceny. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Opravdu chcete instalaci pÅ™eruÅ¡it? InstalaÄní program bude ukonÄen a vÅ¡echny zmÄ›ny ztraceny. 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 Instalátor %1 ChangeFilesystemLabelJob Set filesystem label on %1. Nastavit jmenovku souborového systému na %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. Nastavit jmenovku souborového systému <strong>%1</strong> oddílu <strong>%2</strong>. The installer failed to update partition table on disk '%1'. Instalátoru se nezdaÅ™ilo aktualizovat tabulku oddílů na jednotce „%1“. CheckerContainer Gathering system information... ShromažÄování informací o systému… 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 Successfully unmounted %1. ÚspěšnÄ› odpojeno %1. Successfully disabled swap %1. ÚspěšnÄ› vypnut swap %1. Successfully cleared swap %1. ÚspěšnÄ› vyÄiÅ¡tÄ›n swap %1. Successfully closed mapper device %1. ÚspěšnÄ› zavÅ™eno mapper zařízení %1. Successfully disabled volume group %1. ÚspěšnÄ› vypnuta skupina svazků %1. Clear mounts for partitioning operations on %1 Odpojit souborové systémy pÅ™ed zahájením dÄ›lení %1 na oddíly Clearing mounts for partitioning operations on %1. Odpojují se souborové systémy pÅ™ed zahájením dÄ›lení %1 na oddíly Cleared all mounts for %1 VÅ¡echny souborové systémy na %1 odpojeny 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. 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 rozvržení klávesnice na %1/%2. Set timezone to %1/%2. Nastavit Äasové pásmo na %1/%2. The system language will be set to %1. Jazyk systému bude nastaven na %1. The numbers and dates locale will be set to %1. Formát zobrazení Äísel, data a Äasu bude nastaven dle národního prostÅ™edí %1. 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) Instalace ze sítÄ›. (Vypnuto: vnitÅ™ní chyba) Network Installation. (Disabled: No package list) Instalace ze sítÄ›. (Vypnuto: Není seznam balíÄků) Package selection VýbÄ›r balíÄků Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Síťová instalace. (Vypnuto: Nedaří se stáhnout seznamy balíÄků – zkontrolujte pÅ™ipojení k síti) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> PoÄítaÄ nesplňuje minimální požadavky pro instalaci %1.<br/>Nastavování nemůže pokraÄovat <a href="#details">Podrobnosti…</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> PoÄítaÄ nesplňuje minimální požadavky pro instalaci %1.<br/>Instalace nemůže pokraÄovat <a href="#details">Podrobnosti…</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. PoÄítaÄ nesplňuje nÄ›které doporuÄené požadavky pro instalaci %1.<br/>Instalace může pokraÄovat, ale nÄ›které funkce mohou být vypnuty. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. PoÄítaÄ nesplňuje nÄ›které doporuÄené požadavky pro instalaci %1.<br/>Instalace může pokraÄovat, ale nÄ›které funkce mohou být vypnuty. This program will ask you some questions and set up %2 on your computer. Tento program vám položí nÄ›kolik dotazů, aby na základÄ› odpovÄ›dí přísluÅ¡nÄ› nainstaloval %2 na váš poÄítaÄ. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Vítejte v Calamares – instalaÄním programu pro %1.</h1> <h1>Welcome to %1 setup</h1> <h1>Vítejte v instalátoru %1</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Vítejte v Calamares, instalaÄním programu pro %1</h1> <h1>Welcome to the %1 installer</h1> <h1>Vítejte v instalátoru %1.</h1> Your username is too long. VaÅ¡e uživatelské jméno je příliÅ¡ dlouhé. '%1' is not allowed as username. „%1“ není možné použít jako uživatelské jméno. Your username must start with a lowercase letter or underscore. Je tÅ™eba, aby uživatelské jméno zaÄínalo na malé písmeno nebo podtržítko. Only lowercase letters, numbers, underscore and hyphen are allowed. Je možné použít pouze malá písmena, Äíslice, podtržítko a spojovník. Your hostname is too short. Název stroje je příliÅ¡ krátký. Your hostname is too long. Název stroje je příliÅ¡ dlouhý. '%1' is not allowed as hostname. „%1“ není možné použít jako název poÄítaÄe. Only letters, numbers, underscore and hyphen are allowed. Je možné použít pouze písmena, Äíslice, podtržítko a spojovník. Your passwords do not match! Zadání hesla se neshodují! OK! OK! Setup Failed Nastavení se nezdaÅ™ilo Installation Failed Instalace se nezdaÅ™ila The setup of %1 did not complete successfully. Nastavení %1 nebylo úspěšnÄ› dokonÄeno. The installation of %1 did not complete successfully. Instalace %1 nebyla úspěšnÄ› dokonÄena. Setup Complete Nastavení dokonÄeno Installation Complete Instalace dokonÄena The setup of %1 is complete. Nastavení %1 je dokonÄeno. The installation of %1 is complete. Instalace %1 je dokonÄena. Package Selection VýbÄ›r balíÄků Please pick a product from the list. The selected product will be installed. Vyberte produkt ze seznamu. Ten vybraný bude nainstalován. Packages BalíÄky Install option: <strong>%1</strong> Volba instalace: <strong>%1</strong> None Žádné Summary Souhrn This is an overview of what will happen once you start the setup procedure. Toto je pÅ™ehled událostí které nastanou po spuÅ¡tÄ›ní instalaÄního procesu. This is an overview of what will happen once you start the install procedure. Toto je pÅ™ehled událostí které nastanou po spuÅ¡tÄ›ní instalaÄního procesu. ContextualProcessJob Contextual Processes Job Úloha kontextuálních procesů CreatePartitionDialog Create a Partition VytvoÅ™it oddíl Si&ze: &Velikost: MiB MiB Partition &Type: &Typ oddílu: Primar&y Pr&imární E&xtended &Rozšířený Fi&le System: &Souborový systém: LVM LV name Název LVM logického svazku &Mount Point: &Přípojný bod: Flags: Příznaky: Label for the filesystem Jmenovka pro souborový systém FS Label: Jmenovka soubor. systému: En&crypt Å &ifrovat Logical Logický Primary Primární GPT GPT Mountpoint already in use. Please select another one. Tento přípojný bod už je používán – vyberte jiný. Mountpoint must start with a <tt>/</tt>. Je tÅ™eba, aby přípojný bod zaÄínal na <tt>/</tt> (dopÅ™edné lomítko). CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. VytvoÅ™it nový %1MiB oddíl na %3 (%2) s položkami %4. Create new %1MiB partition on %3 (%2). VytvoÅ™it nový %1MiB oddíl na %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. VytvoÅ™it nový %2MiB oddíl na %4 (%3) se souborovým systémem %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. VytvoÅ™it nový <strong>%1MiB</strong> oddíl na <strong>%3</strong> (%2) s položkami <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). VytvoÅ™it nový <strong>%1MIB</strong> oddíl na <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. VytvoÅ™it nový <strong>%2MiB</strong> oddíl na <strong>%4</strong> (%3) se souborovým systémem <strong>%1</strong>. Creating new %1 partition on %2. Vytváří se nový %1 oddíl na %2. The installer failed to create partition on disk '%1'. Instalátoru se nepodaÅ™ilo vytvoÅ™it oddíl na datovém úložiÅ¡ti „%1“. 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ává se domovská složka Creating user %1 Vytváření uživatele %1 Configuring user %1 Nastavuje se uživatel %1 Setting file permissions Nastavují se přístupová práva k 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 uspořádání vÄ›tÅ¡inou obsahuje jediný souborový systém. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. InstalaÄní program na zvoleném zařízení <strong>nezjistil žádnou tabulku oddílů</strong>.<br><br>Toto zařízení buÄ Å¾Ã¡dnou tabulku nemá nebo je poruÅ¡ená nebo neznámého typu.<br> Instalátor může vytvoÅ™it novou tabulku oddílů – buÄ automaticky nebo pÅ™es ruÄní rozdÄ›lení jednotky. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Toto je doporuÄený typ tabulky oddílů pro moderní systémy, které se spouÅ¡tí pomocí <strong>UEFI</strong> zavádÄ›cího prostÅ™edí. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Tento typ tabulky oddílů je vhodný pro starší systémy, které jsou spouÅ¡tÄ›ny z prostÅ™edí <strong>BIOS</strong>. Více se dnes využívá GPT.<br><strong>UpozornÄ›ní:</strong> Tabulka oddílů MBR je zastaralý standard z dob MS-DOS.<br>Lze vytvoÅ™it pouze 4 <em>primární</em> oddíly, a z tÄ›chto 4, jeden může být <em>rozšířeným</em> oddílem, který potom může obsahovat více <em>logických</em> oddílů. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Typ <strong>tabulky oddílů</strong>, který je na vybraném úložném zařízení.<br><br>Jedinou možností jak zmÄ›nit typ tabulky oddílů je smazání a opÄ›tovné vytvoÅ™ení nové tabulky oddílů, tím se smažou vÅ¡echna data na daném úložném zařízení.<br>Tento instalátor ponechá stávající typ tabulky oddílů, pokud si sami nenavolíte jeho zmÄ›nu.<br>Pokud si nejste jisti, na moderních systémech se upÅ™ednostňuje GPT. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 – %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 – (%2) 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 Con&tent: Ob&sah: &Keep &Zachovat Format Formátovat Warning: Formatting the partition will erase all existing data. Varování: Formátování oddílu vymaže vÅ¡echna data. &Mount Point: &Přípojný bod: Si&ze: &Velikost: MiB MiB Fi&le System: &Souborový systém: Flags: Příznaky: Label for the filesystem Jmenovka pro souborový systém FS Label: Jmenovka soubor. systému: Passphrase for existing partition Heslová fráze pro existující oddíl Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formulář En&crypt system Z&aÅ¡ifrovat systém Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Zdá se, že tento poÄítaÄ nezvládá Å¡ifrování natolik rychle (postrádá přísluÅ¡né rozšíření instrukÄní sady procesoru Äi doplňkový Äip), aby bylo možné Å¡ifrovat celý systém. Å ifrování můžete zapnout i tak, ale může to způsobovat zpomalení. Passphrase Heslová fráze Confirm passphrase Potvrzení heslové fráze Please enter the same passphrase in both boxes. Zadejte stejnou heslovou frázi do obou kolonek. ErrorDialog Details: Podrobnosti: Would you like to paste the install log to the web? Chcete vyvÄ›sit záznam událostí pÅ™i instalaci na web? FillGlobalStorageJob Set partition information Nastavit informace o oddílu Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Nainstalovat %1 na <strong>nový</strong> systémový oddíl %2 s funkcemi <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Nainstalovat %1 na <strong>nový</strong> %2 systémový oddíl. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Nastavit <strong>nový</strong> %2 oddíl s přípojným bodem <strong>%1</strong>a funkcemi <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Nastavit <strong>nový</strong> %2 oddíl s přípojným bodem <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Nainstalovat %2 na systémový oddíl %3 <strong>%1</strong> s funkcemi <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Nastavit %3 oddíl <strong>%1</strong> s přípojným bodem <strong>%2</strong> a funkcemi <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Nastavit %3 oddíl <strong>%1</strong> s přípojným bodem <strong>%2</strong> %4. Install %2 on %3 system partition <strong>%1</strong>. Nainstalovat %2 na %3 systémový oddíl <strong>%1</strong>. 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Nastavování Å¡ifrovaného prostoru pro odkládání stránek pamÄ›ti. No target system available. Není k dispozici cílový systém No rootMountPoint is set. Není nastaven rootMountPoint. No configFilePath is set. Není nastaveno configFilePath. LicensePage Form Formulář <h1>License Agreement</h1> <h1>LicenÄní ujednání</h1> I accept the terms and conditions above. Souhlasím s výše uvedenými podmínkami. Please review the End User License Agreements (EULAs). ProÄtÄ›te si Smlouvy s koncovými uživatelem (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Tato nastavovací procedura nainstaluje proprietární software, který je pÅ™edmÄ›tem licenÄních podmínek. If you do not agree with the terms, the setup procedure cannot continue. Pokud s podmínkami nesouhlasíte, instalaÄní procedura nemůže pokraÄovat. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Pro poskytování dalších funkcí a vylepÅ¡ení pro uživatele, tato nastavovací procedura nainstaluje i proprietární software, který je pÅ™edmÄ›tem licenÄních podmínek. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Pokud nesouhlasíte s podmínkami, proprietární software nebude nainstalován a namísto toho budou použity opensource alternativy. 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 UkonÄit 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é pásmo: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. Vyberte vámi upÅ™ednostňované umístÄ›ní na mapÄ›, aby vám instalátor mohl doporuÄit místní a jazyková nastavení a Äasové pásmo. DoporuÄená nastavení můžete dále jemnÄ› doladit níže. Pro hledání na mapÄ› pÅ™etahujte pro posouvání a pomocí tlaÄítek +/- pÅ™ibližujte/oddalujte nebo k tomu použijte koleÄko myÅ¡i. NetInstallViewStep Package selection VýbÄ›r balíÄků Office software Aplikace pro kancelář Office package BalíÄek s kancelářským software Browser software Aplikace pro procházení webu Browser package BalíÄek s webovým prohlížeÄem Web browser Webový prohlížeÄ Kernel label for netinstall module, Linux kernel Jádro systému Services label for netinstall module, system services Služby Login label for netinstall module, choose login manager Uživatelské jméno Desktop label for netinstall module, choose desktop environment Desktop Communication label for netinstall module Komunikace Development label for netinstall module Vývoj Office label for netinstall module Kancelář Multimedia label for netinstall module Multimédia Internet label for netinstall module Internet Theming label for netinstall module Motivy vzhledu Gaming label for netinstall module Hry Utilities label for netinstall module Nástroje Applications Aplikace 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. Vyberte vámi upÅ™ednostňovanou oblast, nebo použijte výchozí nastavení. Timezone: %1 ÄŒasová zóna: %1 Select your preferred Zone within your Region. Vyberte upÅ™ednostňované pásmo ve svém regionu. Zones Pásma You can fine-tune Language and Locale settings below. Níže můžete doladit nastavení jazyka a národního prostÅ™edí. PWQ Password is too short Heslo je příliÅ¡ krátké Password is too long Heslo je příliÅ¡ dlouhé Password is too weak Heslo je příliÅ¡ slabé Memory allocation error when setting '%1' Chyba pÅ™idÄ›lování pamÄ›ti pÅ™i nastavování „%1“ Memory allocation error Chyba pÅ™i pÅ™idÄ›lování pamÄ›ti The password is the same as the old one Heslo je stejné jako to pÅ™echozí The password is a palindrome Heslo je palindrom (je stejné i pozpátku) The password differs with case changes only Heslo se liší pouze zmÄ›nou velikosti písmen The password is too similar to the old one Heslo je příliÅ¡ podobné tomu pÅ™edchozímu The password contains the user name in some form Heslo obsahuje nÄ›jakou formou uživatelské jméno The password contains words from the real name of the user in some form Heslo obsahuje obsahuje nÄ›jakou formou slova ze jména uživatele The password contains forbidden words in some form Heslo obsahuje nÄ›jakou formou slova, která není možné použít The password contains 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 Heslo obsahuje ménÄ› než %1 malé písmeno Heslo obsahuje ménÄ› než %1 malá písmena Heslo obsahuje ménÄ› než %1 malých písmen Heslo obsahuje ménÄ› než %1 malá písmena The password contains too few lowercase letters Heslo obsahuje příliÅ¡ málo malých písmen The password contains 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 Heslo obsahuje ménÄ› než %1 Äíslici Heslo obsahuje ménÄ› než %1 Äíslice Heslo obsahuje ménÄ› než %1 Äíslic Heslo obsahuje ménÄ› než %1 Äíslice The password contains fewer than %n uppercase letters Heslo obsahuje ménÄ› než %n velké písmeno Heslo obsahuje ménÄ› než %n velká písmena Heslo obsahuje ménÄ› než %n velkých písmen Heslo obsahuje ménÄ› než %n velká písmena The password contains fewer than %n non-alphanumeric characters Heslo obsahuje ménÄ› než %n speciální znak Heslo obsahuje ménÄ› než %n speciální znaky Heslo obsahuje ménÄ› než %n speciálních znaků Heslo obsahuje ménÄ› než %n speciální znaky The password is shorter than %n characters Heslo je kratší než %1 znak Heslo je kratší než %1 znaky Heslo je kratší než %1 znaků Heslo je kratší než %1 znaky The password is a rotated version of the previous one Heslo je otoÄenou verzí nÄ›kterého z pÅ™edchozích The password contains fewer than %n character classes Heslo obsahuje ménÄ› než %n druh znaků Heslo obsahuje ménÄ› než %n druhy znaků Heslo obsahuje ménÄ› než %n druhů znaků Heslo obsahuje ménÄ› než %n druhy znaků The password contains more than %n same characters consecutively Heslo obsahuje více než %1 stejný znak za sebou Heslo obsahuje více než %1 stejné znaky za sebou Heslo obsahuje více než %1 stejných znaků za sebou Heslo obsahuje více než %1 stejné znaky za sebou The password contains more than %n characters of the same class consecutively Heslo obsahuje více než %n znak stejného druhu za sebou Heslo obsahuje více než %n znaky stejného druhu za sebou Heslo obsahuje více než %n znaků stejného druhu za sebou Heslo obsahuje více než %n znaky stejného druhu za sebou The password contains monotonic sequence longer than %n characters Heslo obsahuje monotónní posloupnost delší než %n znak Heslo obsahuje monotónní posloupnost delší než %n znaky Heslo obsahuje monotónní posloupnost delší než %n znaků Heslo obsahuje monotónní posloupnost delší než %n znaky The password contains too long of a monotonic character sequence Heslo obsahuje příliÅ¡ dlouhou monotónní posloupnost No password supplied Nebylo zadáno žádné heslo Cannot obtain random numbers from the RNG device Nedaří se získat náhodná Äísla ze zařízení generátoru náhodných Äísel (RNG) Password generation failed - required entropy too low for settings VytvoÅ™ení hesla se nezdaÅ™ilo – úroveň nahodilosti je příliÅ¡ nízká The password fails the dictionary check - %1 Heslo je slovníkové – %1 The password fails the dictionary check Heslo je slovníkové Unknown setting - %1 Neznámé nastavení – %1 Unknown setting Neznámé nastavení Bad integer value of setting - %1 Chybná celoÄíselná hodnota nastavení – %1 Bad integer value Chybná celoÄíselná hodnota Setting %1 is not of integer type Nastavení %1 není typu celé Äíslo Setting is not of integer type Nastavení není typu celé Äíslo Setting %1 is not of string type Nastavení %1 není typu Å™etÄ›zec Setting is not of string type Nastavení není typu Å™etÄ›zec Opening the configuration file failed NepodaÅ™ilo se otevřít soubor s nastaveními The configuration file is malformed Soubor s nastaveními nemá správný formát Fatal failure Fatální nezdar Unknown error Neznámá chyba Password is empty Heslo není vyplnÄ›né PackageChooserPage Form Formulář Product Name Název produktu TextLabel TextovýPopisek Long Product Description PodrobnÄ›jší popis produktu Package Selection VýbÄ›r balíÄků Please pick a product from the list. The selected product will be installed. Vyberte produkt ze seznamu. Ten vybraný bude nainstalován. 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 Jmenovka souborového systému Mount Point Přípojný bod Size Velikost PartitionPage Form Formulář 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Stávající: After: Potom: No EFI system partition configured Není nastavený žádný EFI systémový oddíl EFI system partition configured incorrectly EFI systémový oddíl není nastaven správnÄ› An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. Aby bylo možné spouÅ¡tÄ›t %1, je zapotÅ™ebí EFI systémový oddíl.<br/><br/>Takový nastavíte tak, že se vrátíte zpÄ›t a vyberete nebo vytvoříte příhodný souborový systém. The filesystem must be mounted on <strong>%1</strong>. Je tÅ™eba, aby souborový systém byl pÅ™ipojený na <strong>%1</strong>. The filesystem must have type FAT32. Je tÅ™eba, aby souborový systém byl typu FAT32. The filesystem must be at least %1 MiB in size. Je tÅ™eba, aby souborový systém byl alespoň %1 MiB velký. The filesystem must have flag <strong>%1</strong> set. Je tÅ™eba, aby souborový systém mÄ›l nastavený příznak <strong>%1</strong>. You can continue without setting up an EFI system partition but your system may fail to start. Je možné pokraÄovat bez vytvoÅ™ení EFI systémového oddílu, ale může se stát, že váš systém tím nenastartuje. Option to use GPT on BIOS Volba použít GPT i pro BIOS zavádÄ›ní (MBR) A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted ZavádÄ›cí oddíl není Å¡ifrován A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. KromÄ› Å¡ifrovaného koÅ™enového oddílu byl vytvoÅ™en i neÅ¡ifrovaný oddíl zavadÄ›Äe.<br/><br/>To by mohl být bezpeÄnostní problém, protože na neÅ¡ifrovaném oddílu jsou důležité soubory systému.<br/>Pokud chcete, můžete pokraÄovat, ale odemykání souborového systému bude probíhat pozdÄ›ji pÅ™i startu systému.<br/>Pro zaÅ¡ifrování oddílu zavadÄ›Äe se vraÅ¥te a vytvoÅ™te ho vybráním možnosti <strong>Å ifrovat</strong> v oknÄ› pÅ™i vytváření oddílu. has at least one disk device available. má k dispozici alespoň jedno zařízení pro ukládání dat. There are no partitions to install on. Nejsou zde žádné oddíly na které by se dalo nainstalovat. 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 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 skonÄil s chybovým kódem %1. Cannot set password for user %1. NepodaÅ™ilo se nastavit heslo uživatele %1. usermod terminated with error code %1. Příkaz usermod ukonÄen s chybovým kódem %1. SetTimezoneJob Set timezone to %1/%2 Nastavit Äasové pásmo na %1/%2 Cannot access selected timezone path. Není přístup k vybranému popisu umístÄ›ní Äasové zóny. Bad path: %1 Chybný popis umístÄ›ní: %1 Cannot set timezone. ÄŒasovou zónu se nedaří nastavit. Link creation failed, target: %1; link name: %2 Odkaz se nepodaÅ™ilo vytvoÅ™it, cíl: %1; název odkazu: %2 Cannot set timezone, Nedaří se nastavit Äasovou zónu, Cannot open /etc/timezone for writing Soubor /etc/timezone se nedaří otevřít pro zápis SetupGroupsJob Preparing groups. Příprava skupin. Could not create groups in target system V cílovém systému se nedaří vytvoÅ™it skupiny These groups are missing in the target system: %1 Tyto skupiny v cílovém systému chybí: %1 SetupSudoJob Configure <pre>sudo</pre> users. Nastavit <pre>sudo</pre> uživatele. Cannot chmod sudoers file. NepodaÅ™ilo se zmÄ›nit přístupová práva (chmod) na souboru se sudoers. Cannot create sudoers file for writing. NepodaÅ™ilo se vytvoÅ™it soubor pro sudoers tak, aby do nÄ›j Å¡lo zapsat. ShellProcessJob Shell Processes Job Úloha shellových procesů SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK &OK &Yes &Ano &No &Ne &Cancel &Storno &Close &Zavřít TrackingInstallJob Installation feedback ZpÄ›tná vazba z instalace Sending installation feedback. Posílání zpÄ›tné vazby z instalace. Internal error in install-tracking. VnitÅ™ní chyba v install-tracking. HTTP request timed out. PÅ™ekroÄen Äasový limit HTTP požadavku. TrackingKUserFeedbackJob KDE user feedback ZpÄ›tná vazba od uživatele pro KDE Configuring KDE user feedback. Nastavuje se zpÄ›tná vazba od uživatele pro KDE Error in KDE user feedback configuration. Chyba v nastavení zpÄ›tné vazby od uživatele pro KDE. Could not configure KDE user feedback correctly, script error %1. NepodaÅ™ilo se správnÄ› nastavit zpÄ›tnou vazbu od uživatele pro KDE, chyba ve skriptu %1. Could not configure KDE user feedback correctly, Calamares error %1. NepodaÅ™ilo se správnÄ› nastavit zpÄ›tnou vazbu od uživatel pro KDE, chyba Calamares %1. TrackingMachineUpdateManagerJob Machine feedback ZpÄ›tná vazba ze stroje Configuring machine feedback. Nastavování zpÄ›tné vazby ze stroje Error in machine feedback configuration. Chyba v nastavení zpÄ›tné vazby ze stroje. Could not configure machine feedback correctly, script error %1. NepodaÅ™ilo se správnÄ› nastavit zpÄ›tnou vazbu ze stroje, chyba skriptu %1. Could not configure machine feedback correctly, Calamares error %1. NepodaÅ™ilo se správnÄ› nastavit zpÄ›tnou vazbu ze stroje, chyba Calamares %1. TrackingPage Form Form Placeholder Výplň <html><head/><body><p>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 odeslá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 UmountJob Unmount file systems. Odpojit souborové systémy. No target system available. Není k dispozici cílový systém No rootMountPoint is set. Není nastaven rootMountPoint. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Pokud bude tento poÄítaÄ používat více lidí, můžete pÅ™idat uživatelské úÄty po dokonÄení instalace.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Pokud bude tento poÄítaÄ používat více lidí, můžete pÅ™idat uživatelské úÄty po dokonÄení instalace.</small> UsersQmlViewStep 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 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í %1 support %1 podpora About %1 setup O nastavování %1 About %1 installer O instalátoru %1. WelcomeQmlViewStep Welcome Vítejte WelcomeViewStep Welcome Vítejte ZfsJob Create ZFS pools and datasets VytvoÅ™it zfs fondy a datové sady Failed to create zpool on NepodaÅ™ilo se vytvoÅ™it zfs fond na Configuration Error Chyba nastavení No partitions are available for ZFS. Pro ZFS nejsou k dispozici žádné oddíly. Internal data missing Chybí vnitÅ™ní data Failed to create zpool NepodaÅ™ilo se vytvoÅ™it zfs fond Failed to create dataset NepodaÅ™ilo se vytvoÅ™it datovou sadu The output was: Výstup byl: calamares-sidebar About O projektu Debug LadÄ›ní Show information about Calamares Show debug information Zobrazit ladící informace finishedq Installation Completed Instalace dokonÄena %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 bylo nainstalováno na váš poÄítaÄ.<br/> Nyní ho můžete restartovat do právÄ› nainstalovaného systému, nebo pokraÄovat v používání stávajícího prostÅ™edí, spuÅ¡tÄ›ného z instalaÄního média. Close Installer Zavřít instalátor Restart System Restartovat systém <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Úplný záznam událostí z instalace je k dispozici v souboru installation.log v domovské složce uživatele Live.<br/> Tento záznam je zkopírován do /var/log/installation.log cílového systému.</p> finishedq@mobile Installation Completed Instalace dokonÄena %1 has been installed on your computer.<br/> You may now restart your device. %1 bylo nainstalováno na váš poÄítaÄ.<br/> Nyní ho můžete restartovat. Close Zavřít Restart Restartovat i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Jazyky</h1> </br> Systémová místní a jazyková nastavení ovlivní jazyk a znakovou sadu nÄ›kterých prvků uživatelského rozhraní příkazového řádku. Stávající nastavení je <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Místní a jazyková nastavení</h1> </br> Místní a jazyková nastavení ovlivní formát Äísel a datumů. Stávající nastavení je <strong>%1</strong>. Back ZpÄ›t keyboardq To activate keyboard preview, select a layout. Pokud chcete aktivovat náhled klávesnice, vyberte rozvržení. Keyboard Model: Model klávesnice: Layouts Rozvržení Type here to test your keyboard Klávesnici vyzkoušíte psaním sem Variants Varianty 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> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice je vybavená a bezplatná sada kancelářských aplikací, používaná miliony lidí po celém svÄ›tÄ›. Obsahuje nÄ›kolika aplikací, které z ní dÄ›lají nejuniverzálnÄ›jší svobodnou a open source sadu kancelářských aplikací na trhu.<br/> Výchozí volba. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Pokud nechcete nainstalovat žádnou sadu kancelářských aplikací, staÄí jen zvolit Žádná sada kancelářských aplikací. V případÄ› potÅ™eby je možné kdykoli nÄ›jakou pÅ™idat do už nainstalovaného systému. No Office Suite Bez sady kancelářských aplikací Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. VytvoÅ™it minimální desktopovou instalaci, odebrat veÅ¡keré dodateÄné aplikace a až pozdÄ›ji rozhodnout, co chcete do svého systému pÅ™idat. Příklady toho, co není souÄástí takové instalace je, že zde nebude žádná sada kancelářských aplikací, žádné pÅ™ehrávaÄe multimédií, žádný prohlížeÄ obrázků Äi podpora pro tisk. Bude zde pouze desktopové prostÅ™edí, správce souborů, správce balíÄků, textový editor a jednoduchý webový prohlížeÄ. Minimal Install Minimální instalace Please select an option for your install, or use the default: LibreOffice included. Vyberte volbu pro vaší instalaci, nebo použijte výchozí: vÄetnÄ› LibreOffice. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Toto je ukázka QML souboru, zobrazující možnosti formátovaného textu s pohyblivým (flickable) obsahem.</p> <p>QML s formátovaným textem může využívat HTML znaÄky, pohyblivý obsah je užiteÄný pro dotykové obrazovky.</p> <p><b>Toto je tuÄný text</b></p> <p><i>Toto je sklonÄ›ný text (kurzíva)</i></p> <p><u>Toto je podtržený text</u></p> <p><center>Tento text bude zarovnán na stÅ™ed.</center></p> <p><s>Toto je pÅ™eÅ¡krtnuté</s></p> <p>Ukázka zobrazení zdrojového kódu: <code>ls -l /home</code></p> <p></b>Seznam:</b></p> <ul> <li>systémy s procesorem Intel</li> <li>systémy s procesorem AMD</li> </ul> <p>Svislý posuvník je pÅ™izpůsobitelný, stávající výška je nastavena na 10.</p> Back ZpÄ›t usersq Pick your user name and credentials to login and perform admin tasks Vyberte své uživatelské jméno a pÅ™ihlaÅ¡ovací údaje pro pÅ™ihlášení a provádÄ›ní úkonů správy What is your name? Jak se jmenujete? Your Full Name VaÅ¡e celé jméno What name do you want to use to log in? Jaké jméno chcete používat pro pÅ™ihlaÅ¡ování do systému? Login Name PÅ™ihlaÅ¡ovací jméno If more than one person will use this computer, you can create multiple accounts after installation. Pokud bude tento poÄítaÄ používat více než jedna osoba, můžete po instalaci vytvoÅ™it více úÄtů. Only lowercase letters, numbers, underscore and hyphen are allowed. Je možné použít pouze malá písmena, Äíslice, podtržítko a spojovník. root is not allowed as username. root není možné použít jako uživatelské jméno. What is the name of this computer? Jaký je název tohoto poÄítaÄe? Computer Name Název poÄítaÄe This name will be used if you make the computer visible to others on a network. Pod tímto názvem se bude poÄítaÄ případnÄ› zobrazovat ostatním poÄítaÄům v síti. localhost is not allowed as hostname. localhost není možné použít jako název poÄítaÄe. Choose a password to keep your account safe. Zvolte si heslo pro ochranu svého úÄtu. Password Heslo Repeat Password Zopakování zadání hesla Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Zadání hesla zopakujte i do kontrolní kolonky, abyste mÄ›li jistotu, že jste napsali, co zamýšleli (že nedoÅ¡lo k pÅ™eklepu). Dobré heslo se bude skládat z písmen, Äíslic a interpunkce a mÄ›lo by být alespoň osm znaků dlouhé. Heslo byste také mÄ›li pravidelnÄ› mÄ›nit (prevence Å¡kod z jeho případného prozrazení). Validate passwords quality Ověřte kvalitu hesel When this box is checked, password-strength checking is done and you will not be able to use a weak password. Když je toto zaÅ¡krtnuto, je prověřována odolnost hesla a nebude umožnÄ›no použít snadno prolomitelné heslo. Log in automatically without asking for the password PÅ™ihlaÅ¡ovat se automaticky bez zadávání hesla Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Je možné použít pouze písmena, Äíslice, podtržítko a spojovník. Dále je tÅ™eba, aby délka byla alespoň dva znaky. Reuse user password as root password Použijte heslo uživatele i pro úÄet správce (root) Use the same password for the administrator account. Použít stejné heslo i pro úÄet správce systému. Choose a root password to keep your account safe. Zvolte heslo uživatele root, aby byl váš úÄet v bezpeÄí. Root Password Heslo uživatele root Repeat Root Password Zopakujte zadání hesla pro správce systému (root) Enter the same password twice, so that it can be checked for typing errors. Zadání hesla zopakujte i do kontrolní kolonky, abyste mÄ›li jistotu, že jste napsali, co zamýšleli (že nedoÅ¡lo k pÅ™eklepu). welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Vítejte v instalátoru %1 <quote>%2</quote></h3> <p>Tato aplikace vám položí nÄ›kolik otázek a na základÄ› odpovÄ›dí přísluÅ¡nÄ› nainstaluje %1 na váš poÄítaÄ.</p> Support Podpora Known issues Známé problémy Release notes Poznámky k vydání Donate PodpoÅ™it vývoj darem calamares-calamares-2d126ae/lang/calamares_da.ts000066400000000000000000006725671430147706700217230ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Ryd monteringspunkter for partitioneringshandlinger pÃ¥ %1 Clearing mounts for partitioning operations on %1. Rydder monteringspunkter for partitioneringshandlinger pÃ¥ %1. Cleared all mounts for %1 Ryddede alle monteringspunkter til %1 ClearTempMountsJob Clear all temporary mounts. Ryd alle midlertidige monteringspunkter. Clearing all temporary mounts. Rydder alle 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. Packages Pakker Install option: <strong>%1</strong> None Summary Opsummering This is an overview of what will happen once you start the setup procedure. Dette er et overblik over hvad der vil ske nÃ¥r du starter opsætningsprocessen. This is an overview of what will happen once you start the install procedure. Dette er et overblik over hvad der vil ske nÃ¥r du starter installationsprocessen. ContextualProcessJob Contextual Processes Job Kontekstuelt procesjob CreatePartitionDialog Create a Partition Opret en partition Si&ze: &Størrelse: MiB MiB Partition &Type: Partitions&type: Primar&y E&xtended &Udvidet Fi&le System: Fi&lsystem: LVM LV name LVM LV-navn &Mount Point: &Monteringspunkt: Flags: Flag: Label for the filesystem FS Label: En&crypt Kryp&tér Logical Logisk Primary Primær GPT GPT Mountpoint already in use. Please select another one. Monteringspunktet er allerede i brug. Vælg venligst et andet. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Opret en ny %2 MiB partition pÃ¥ %4 (%3) med %1-filsystem. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Opret en ny <strong>%2 MiB</strong> partition pÃ¥ <strong>%4</strong> (%3) med <strong>%1</strong>-filsystem. Creating new %1 partition on %2. Opretter ny %1-partition pÃ¥ %2. The installer failed to create partition on disk '%1'. Installationsprogrammet kunne ikke oprette partition pÃ¥ disk '%1'. 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 Con&tent: &Keep &Behold Format Formatér Warning: Formatting the partition will erase all existing data. Advarsel: Formatering af partitionen vil slette alle eksisterende data. &Mount Point: &Monteringspunkt: Si&ze: Stø&rrelse: MiB MiB Fi&le System: Fi&lsystem: Flags: Flag: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formular En&crypt system Kryp&tér system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Adgangskode Confirm passphrase Bekræft adgangskode Please enter the same passphrase in both boxes. Indtast venligst samme adgangskode i begge bokse. ErrorDialog Details: Would you like to paste the install log to the web? Vil du indsætte installationsloggen pÃ¥ webbet? FillGlobalStorageJob Set partition information Indstil partitionsinformation Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Installér %1 pÃ¥ <strong>ny</strong> %2-systempartition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Konfigurerer krypteret swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formular <h1>License Agreement</h1> <h1>Licensaftale</h1> I accept the terms and conditions above. Jeg accepterer de ovenstÃ¥ende vilkÃ¥r og betingelser. Please review the End User License Agreements (EULAs). Gennemse venligst slutbrugerlicensaftalerne (EULA'erne). This setup procedure will install proprietary software that is subject to licensing terms. Opsætningsproceduren installerer proprietær software der er underlagt licenseringsvilkÃ¥r. If you do not agree with the terms, the setup procedure cannot continue. Hvis du ikke er enig 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 label for netinstall module, Linux kernel Kerne Services label for netinstall module, system services Tjenester Login label for netinstall module, choose login manager Log ind Desktop label for netinstall module, choose desktop environment Skrivebord Communication label for netinstall module Kommunikation Development label for netinstall module Udvikling Office label for netinstall module Kontor Multimedia label for netinstall module Multimedie Internet label for netinstall module Internet Theming label for netinstall module Tema Gaming label for netinstall module Spil Utilities label for netinstall module Redskaber Applications Programmer 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Nuværende: After: Efter: No EFI system partition configured Der er ikke konfigureret nogen EFI-systempartition EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted Bootpartition ikke krypteret A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. En separat bootpartition blev opsat sammen med en krypteret rodpartition, men bootpartitionen er ikke krypteret.<br/><br/>Der er sikkerhedsmæssige bekymringer med denne slags opsætning, da vigtige systemfiler er gemt pÃ¥ en ikke-krypteret partition.<br/>Du kan fortsætte hvis du vil, men oplÃ¥sning af filsystemet sker senere under systemets opstart.<br/>For at kryptere bootpartitionen skal du gÃ¥ tilbage og oprette den igen, vælge <strong>Kryptér</strong> i partitionsoprettelsesvinduet. has at least one disk device available. har mindst én tilgængelig diskenhed. There are no partitions to install on. Der er ikke nogen partitioner at installere pÃ¥. 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 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 StandardButtons &OK &OK &Yes &Ja &No &Nej &Cancel &Annullér &Close &Luk TrackingInstallJob Installation feedback Installationsfeedback Sending installation feedback. Sender installationsfeedback. Internal error in install-tracking. Intern fejl i installationssporing. HTTP request timed out. HTTP-anmodning fik timeout. 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 UmountJob Unmount file systems. Afmonter filsystemer. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Hvis mere end én person bruger computeren, kan du oprette flere konti efter opsætningen.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Hvis mere end én person bruger computeren, kan du oprette flere konti efter installationen.</small> UsersQmlViewStep 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 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 %1 support %1 support About %1 setup Om %1-opsætningen About %1 installer Om %1-installationsprogrammet WelcomeQmlViewStep Welcome Velkommen WelcomeViewStep Welcome Velkommen ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Fejl ved konfiguration No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Om Debug Fejlfinde Show information about Calamares Show debug information Vis fejlretningsinformation finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Sprog</h1> </br> Systemets lokalitetsindstilling pÃ¥virker sproget og tegnsættet for visse brugerfladeelementer i kommandolinjen. Den nuværende indstilling er <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Lokaliteter</h1> </br> Systemets lokalitetsindstillinger pÃ¥virker tal- og datoformatet. Den nuværende indstilling er <strong>%1</strong>. Back Tilbage keyboardq To activate keyboard preview, select a layout. Keyboard Model: Tastaturmodel: Layouts Layouts Type here to test your keyboard Skriv her for at teste dit tastatur Variants Varianter localeq Change Skift notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Dette er eksempler pÃ¥ udgivelsesnoter.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>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> Support Support Known issues Kendte problemer Release notes Udgivelsesnoter Donate Donér calamares-calamares-2d126ae/lang/calamares_de.ts000066400000000000000000007176271430147706700217240ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> für %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Danke an <a href="https://calamares.io/team/">das Calamares Team</a> und das <a href="https://www.transifex.com/calamares/calamares/">Calamares Übersetzer Team</a>.<br/><br/><a href="https://calamares.io/">Die Calamares</a> Entwicklung wird gesponsored von <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;<br/> 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 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. Setze Dateisytem-Label für %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. Setze Dateisytem-Label <strong>%1</strong> für Partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. Das Aktualisieren der Partitionstabelle auf Datenträger '%1' ist fehlgeschlagen. CheckerContainer Gathering system information... Sammle Systeminformationen... 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 Successfully unmounted %1. %1 erfolgreich ausgehängt. Successfully disabled swap %1. Swap %1 erfolgreich deaktiviert. Successfully cleared swap %1. Swap %1 erfolgreich gelöscht. Successfully closed mapper device %1. Mapper device %1 erfolgreich geschlossen. Successfully disabled volume group %1. Volume group %1 erfolgreich deaktiviert. Clear mounts for partitioning operations on %1 Leere Mount-Points für Partitioning-Operation auf %1 Clearing mounts for partitioning operations on %1. Löse eingehängte Laufwerke für die Partitionierung von %1 Cleared all mounts for %1 Alle Mount-Points für %1 geleert ClearTempMountsJob Clear all temporary mounts. Alle temporären Mount-Points leeren. Clearing all temporary mounts. Löse alle temporär eingehängten Laufwerke. 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! 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. Packages Pakete Install option: <strong>%1</strong> Installations-Option: <strong>%1</strong> None Nichts Summary Zusammenfassung This is an overview of what will happen once you start the setup procedure. Dies ist eine Übersicht der Aktionen, die nach dem Starten des Installationsprozesses durchgeführt werden. This is an overview of what will happen once you start the install procedure. Dies ist eine Übersicht der Aktionen, die nach dem Starten des Installationsprozesses durchgeführt werden. ContextualProcessJob Contextual Processes Job Job für kontextuale Prozesse CreatePartitionDialog Create a Partition Partition erstellen Si&ze: Grö&sse: MiB MiB Partition &Type: Partitions&typ: Primar&y Primä&r E&xtended Er&weitert Fi&le System: Dateisystem: LVM LV name LVM LV Name &Mount Point: Ein&hängepunkt: Flags: Markierungen: Label for the filesystem Label für das Dateisystem FS Label: FS Label: En&crypt Verschlüsseln Logical Logisch Primary Primär GPT GPT Mountpoint already in use. Please select another one. Dieser Einhängepunkt wird schon benuztzt. Bitte wählen Sie einen anderen. Mountpoint must start with a <tt>/</tt>. Einhängepunkt muss mit einem <tt>/</tt>beginnen. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Erstelle neue %1MiB Partition auf %3 (%2) mit den Einträgen %4. Create new %1MiB partition on %3 (%2). Erstelle neue %1MiB Partition auf %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Erstelle eine neue Partition mit einer Größe von %2MiB auf %4 (%3) mit dem Dateisystem %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Erstelle neue <strong>%1MiB</strong>Partition auf <strong>%3</strong> (%2) mit den Einträgen <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Erstelle neue <strong>%1MiB</strong> Partition auf <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Erstelle eine neue Partition mit einer Größe von <strong>%2MiB</strong> auf <strong>%4</strong> (%3) mit dem Dateisystem <strong>%1</strong>. Creating new %1 partition on %2. Erstelle eine neue %1 Partition auf %2. The installer failed to create partition on disk '%1'. Das Installationsprogramm scheiterte beim Erstellen der Partition auf Datenträger '%1'. 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 Con&tent: Inhal&t: &Keep &Beibehalten Format Formatieren Warning: Formatting the partition will erase all existing data. Warnung: Beim Formatieren der Partition werden alle Daten gelöscht. &Mount Point: Einhängepun&kt: Si&ze: Grö&sse: MiB MiB Fi&le System: Datei&system: Flags: Markierungen: Label for the filesystem Label für das Dateisystem FS Label: FS Label: Passphrase for existing partition Passwort für existierende Partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. Partition %1 konnte mit diesem Passwort nicht entschlüsselt werden.<br/><br/>Editieren Sie die Partition erneut und geben Sie das korrekte Passwort an oder löschen Sie diese und erstellen Sie eine neue verschlüsselte Partition. EncryptWidget Form Formular En&crypt system Verschlüssele System Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Ihr System scheint Verschlüsselung nicht ausreichend zu unterstützen, um das gesamte System zu verschlüsseln. Sie können diese zwar aktivieren, aber die Leistung des Systems könnte darunter leiden. Passphrase Passwort Confirm passphrase Passwort wiederholen Please enter the same passphrase in both boxes. Bitte tragen Sie dasselbe Passwort in beide Felder ein. ErrorDialog Details: Details: Would you like to paste the install log to the web? Möchten Sie das Installationsprotokoll an eine Internetadresse senden? FillGlobalStorageJob Set partition information Setze Partitionsinformationen Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Installiere %1 auf <strong>neue</strong> %2 Systempartition mit den Funktionen <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Installiere %1 auf <strong>neuer</strong> %2 Systempartition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Konfiguriere verschlüsselten Auslagerungsspeicher. No target system available. Kein Zielsystem verfügbar. No rootMountPoint is set. Kein rootMountPoint gesetzt. No configFilePath is set. Kein configFilePath gesetzt. LicensePage Form Formular <h1>License Agreement</h1> <h1>Lizenzvereinbarung</h1> I accept the terms and conditions above. Ich akzeptiere die obigen Allgemeinen Geschäftsbedingungen. Please review the End User License Agreements (EULAs). Bitte lesen Sie die Lizenzvereinbarungen für Endanwender (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Diese Installationsroutine wird proprietäre Software installieren, die Lizenzbedingungen unterliegt. If you do not agree with the terms, the setup procedure cannot continue. Wenn Sie diesen Bedingungen nicht zustimmen, kann die Installation nicht fortgesetzt werden. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Um zusätzliche Funktionen bereitzustellen und das Benutzererlebnis zu verbessern, kann diese Installationsroutine proprietäre Software installieren, die Lizenzbedingungen unterliegt. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Wenn Sie diesen Bedingungen nicht zustimmen, wird keine proprietäre Software installiert, stattdessen werden Open-Source-Alternativen verwendet. 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 Beenden 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 label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Dienste Login label for netinstall module, choose login manager Anmeldung Desktop label for netinstall module, choose desktop environment Desktop Communication label for netinstall module Kommunikation Development label for netinstall module Entwicklung Office label for netinstall module Büro Multimedia label for netinstall module Multimedia Internet label for netinstall module Internet Theming label for netinstall module Anpassung Gaming label for netinstall module Spielen Utilities label for netinstall module Dienstprogramme Applications Anwendungen 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. Wählen Sie Ihre bevorzugte Region oder nutzen Sie die Standardeinstellungen. Timezone: %1 Zeitzone: %1 Select your preferred Zone within your Region. Wählen Sie Ihre bevorzugte Zone innerhalb Ihrer Region. Zones Zonen You can fine-tune Language and Locale settings below. Sie können Sprache und Regionalschema unten weiter anpassen. PWQ Password is too short Das Passwort ist zu kurz Password is too long Das Passwort ist zu lang Password is too weak Das Passwort ist zu schwach Memory allocation error when setting '%1' Fehler bei der Speicherzuweisung beim Einrichten von '%1' Memory allocation error Fehler bei der Speicherzuweisung The password is the same as the old one Das Passwort ist dasselbe wie das alte The password is a palindrome Das Passwort ist ein Palindrom The password differs with case changes only Das Passwort unterscheidet sich nur durch Groß- und Kleinschreibung The password is too similar to the old one Das Passwort ist dem alten zu ähnlich The password contains the user name in some form Das Passwort enthält eine Form des Benutzernamens The password contains words from the real name of the user in some form Das Passwort enthält Teile des Klarnamens des Benutzers The password contains forbidden words in some form Das Passwort enthält verbotene Wörter The password contains 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. 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 Dateisystem-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 Unsafe partition actions are enabled. Unsichere Partitionierungsaktionen sind aktiviert. Partitioning is configured to <b>always</b> fail. Partitionierung ist so eingestellt, dass sie <b>immer</b> fehlschlägt. No partitions will be changed. Keine Partitionen werden verändert. Current: Aktuell: After: Nachher: No EFI system partition configured Keine EFI-Systempartition konfiguriert EFI system partition configured incorrectly EFI Systempartition falsch 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 suitable filesystem. Eine EFI Systempartition ist notwendig, um %1 zu starten.<br/><br/>Um eine EFI Systempartition zu konfigurieren, gehen Sie zurück und wählen oder erstellen Sie ein geeignetes Dateisystem. The filesystem must be mounted on <strong>%1</strong>. Das Dateisystem muss eingehängt sein unter <strong>%1</strong>. The filesystem must have type FAT32. Das Dateisystem muss vom Typ FAT32 sein. The filesystem must be at least %1 MiB in size. Das Dateisystem muss mindestens %1 MiB groß sein. The filesystem must have flag <strong>%1</strong> set. Das Dateisystem muss die Markierung <strong>%1</strong> tragen. You can continue without setting up an EFI system partition but your system may fail to start. Sie können fortfahren, ohne eine EFI-Systempartition einzurichten, aber Ihr installiertes System wird möglicherweise nicht starten. Option to use GPT on BIOS Option zur Verwendung von GPT mit BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Eine Partitionstabelle vom Typ GPT ist die beste Option für alle Systeme. Dieses Installationsprogramm unterstützt solch ein Setup auch für BIOS-Systeme.<br/><br/>Um eine GPT-Partition für BIOS-Systeme zu konfigurieren, (wenn nicht bereits geschehen) gehen Sie zurück und setzen Sie die Partitionstabelle auf GPT, als nächstes erstellen Sie eine 8 MB große unformattierte Partition mit der <strong>%2</strong> Markierung aktiviert.<br/><br/>Eine unformattierte 8 MB Partition ist nötig, 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 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 StandardButtons &OK &OK &Yes &Ja &No &Nein &Cancel &Abbrechen &Close &Schließen TrackingInstallJob Installation feedback Rückmeldungen zur Installation Sending installation feedback. Senden der Rückmeldungen zur Installation. Internal error in install-tracking. Interner Fehler bei der Überwachung der Installation. HTTP request timed out. Zeitüberschreitung bei HTTP-Anfrage 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 UmountJob Unmount file systems. Dateisysteme aushängen. No target system available. Kein Zielsystem verfügbar. No rootMountPoint is set. Kein rootMountPoint gesetzt. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Falls dieser Computer von mehr als einer Person benutzt werden soll, können weitere Benutzerkonten nach der Installation eingerichtet werden.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Falls dieser Computer von mehr als einer Person benutzt werden soll, können weitere Benutzerkonten nach der Installation eingerichtet werden.</small> UsersQmlViewStep 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 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 %1 support Unterstützung für %1 About %1 setup Über das Installationsprogramm %1 About %1 installer Über das %1 Installationsprogramm WelcomeQmlViewStep Welcome Willkommen WelcomeViewStep Welcome Willkommen ZfsJob Create ZFS pools and datasets ZFS Pools und Datensets erstellen Failed to create zpool on Zpool konnte nicht erstellt werden auf Configuration Error Konfigurationsfehler No partitions are available for ZFS. Keine Partitionen für ZFS verfügbar. Internal data missing Interne Daten fehlen Failed to create zpool Zpool konnte nicht erstellt werden Failed to create dataset Datenset konnte nicht erstellt werden The output was: Die Ausgabe war: calamares-sidebar About Über Debug Beheben von Fehlern Show information about Calamares Informationen über Calamares anzeigen Show debug information Informationen zur Fehlersuche anzeigen finishedq Installation Completed Installation abgeschlossen %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 wurde auf Ihrem Computer installiert.<br/> Sie können nun per Neustart das installierte System starten oder weiterhin die Live-Umgebung benutzen. Close Installer Installationsprogramm schließen Restart System System neustarten <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Ein komplettes Protokoll der Installation ist als installation.log im Home-Verzeichnis des Live-Benutzers verfügbar.<br/> Dieses Protokoll liegt als /var/log/installation.log im installierten System vor.</p> finishedq@mobile Installation Completed Installation abgeschlossen %1 has been installed on your computer.<br/> You may now restart your device. %1 wurde auf Ihrem Computer installiert.<br/> Sie können Ihr Gerät nun neu starten. Close Schließen Restart Neustart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Sprachen</h1> </br> Das Regionalschema betrifft die Sprache und die Tastaturbelegung für einige Elemente der Kommandozeile. Derzeit eingestellt ist <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Regionalschemata</h1> </br> Die Regionalschemata betreffen das Format der Zahlen und Daten. Derzeit eingestellt ist <strong>%1</strong>. Back Zurück keyboardq To activate keyboard preview, select a layout. Wählen Sie ein Design, um die Tastatur-Vorschau zu aktivieren. Keyboard Model: Tastaturmodell: Layouts Tastaturbelegungen Type here to test your keyboard Tippen Sie hier, um die Tastaturbelegung zu testen. Variants Varianten localeq Change Ändern notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Dies sind beispielhafte Veröffentlichungshinweise.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice ist eine mächtige und freie Office-Lösung, verwendet von Millionen von Menschen rund um den Globus. Sie enthäIt verschiedene Anwendungen, die LibreOffice zur vielseitigsten Open-Source-Lösung für Office-Anwendungen auf dem Markt machen.<br/> Standard-Option. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Wenn Sie keine Office-Suite installieren wollen, wählen Sie einfach Keine Office Suite. Sie können jederzeit eine oder mehrere zu Ihrem installierten System hinzufügen wenn nötig. No Office Suite Keine Office-Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Erstellen Sie eine minimale Desktop-Installation, entfernen Sie alle zusätzlichen Apps und entscheiden Sie später, welche Anwendungen Sie hinzufügen möchten. Zum Beispiel werden weder eine Office-Suite noch Mediaplayer noch Bildbetrachter oder Druckerunterstützung installiert. Sie bekommen lediglich einen schlanken Desktop mit Dateimanager, Paketmanager, Texteditor und Webbrowser. Minimal Install Minimal-Installation Please select an option for your install, or use the default: LibreOffice included. Bitte wählen Sie eine Option zur Installation oder nutzen Sie die Standard-Auswahl: LibreOffice. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Dies ist eine Beispiel-QML-Datei, die Optionen in RichText mit Flickable-Inhalt zeigt.</p> <p>QML mit RichText kann HTML-Tags verwenden, Flickable-Inhalt ist nützlich für Touchscreens.</p> <p><b>Dies ist fetter Text.</b></p> <p><i>Das ist kursiver Text.</i></p> <p><u>Das ist unterstrichener Text.</u></p> <p><center>Dieser Text ist mittig ausgerichtet.</center></p> <p><s>Das ist durchgestrichen.</s></p> <p>Code Beispiel: <code>ls -l /home</code></p> <p><b>Listen:</b></p> <ul> <li>Intel CPU Systeme</li> <li>AMD CPU Systeme</li> </ul> <p>Die vertikale Bildlaufleiste ist einstellbar, die aktuelle Breite ist auf 10 eingestellt.</p> Back Zurück usersq Pick your user name and credentials to login and perform admin tasks Wählen Sie Benutzername und Passwort, um sich als Administrator anzumelden. What is your name? Wie ist Ihr Vor- und Nachname? Your Full Name Ihr vollständiger Name What name do you want to use to log in? Welchen Namen möchten Sie zum Anmelden benutzen? Login Name Anmeldename If more than one person will use this computer, you can create multiple accounts after installation. Falls mehrere Personen diesen Computer benutzen, können Sie nach der Installation weitere Konten hinzufügen. Only lowercase letters, numbers, underscore and hyphen are allowed. Es sind nur Kleinbuchstaben, Zahlen, Unterstrich und Bindestrich erlaubt. root is not allowed as username. root ist als Benutzername nicht erlaubt. What is the name of this computer? Wie ist der Name dieses Computers? Computer Name Computername This name will be used if you make the computer visible to others on a network. Dieser Name wird benutzt, wenn Sie den Computer im Netzwerk für andere sichtbar machen. localhost is not allowed as hostname. localhost ist als Computername nicht erlaubt. Choose a password to keep your account safe. Wählen Sie ein Passwort, um Ihr Konto zu sichern. Password Passwort Repeat Password Passwort wiederholen Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Geben Sie das Passwort zweimal ein, damit es auf Tippfehler überprüft werden kann. Ein gutes Passwort sollte eine Mischung aus Buchstaben, Zahlen sowie Sonderzeichen enthalten, mindestens acht Zeichen lang sein und regelmäßig geändert werden. Validate passwords quality Passwort-Qualität überprüfen When this box is checked, password-strength checking is done and you will not be able to use a weak password. Wenn dieses Kontrollkästchen aktiviert ist, wird die Passwortstärke überprüft und verhindert, dass Sie ein schwaches Passwort verwenden. Log in automatically without asking for the password Automatisch anmelden ohne Passwortabfrage Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Es sind nur Buchstaben, Zahlen, Unterstrich und Bindestrich erlaubt, minimal zwei Zeichen. Reuse user password as root password Benutzerpasswort als Root-Passwort benutzen Use the same password for the administrator account. Nutze das gleiche Passwort auch für das Administratorkonto. Choose a root password to keep your account safe. Wählen Sie ein Root-Passwort, um Ihr Konto zu schützen. Root Password Root-Passwort Repeat Root Password Root-Passwort wiederholen Enter the same password twice, so that it can be checked for typing errors. Geben Sie das Passwort zweimal ein, damit es auf Tippfehler überprüft werden kann. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Willkommen zum %1 <quote>%2</quote> Installationsprogramm</h3><p>Dieses Programm wird Ihnen einige Fragen stellen und %1 auf Ihrem Computer einrichten.</p> Support Unterstützung Known issues Bekannte Probleme Release notes Veröffentlichungshinweise Donate Spenden calamares-calamares-2d126ae/lang/calamares_el.ts000066400000000000000000006357451430147706700217340ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 Η εγκατάσταση απέτυχε 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ΚαθαÏίστηκαν όλες οι Ï€ÏοσαÏτήσεις για %1 ClearTempMountsJob Clear all temporary mounts. ΚαθάÏισε όλες τις Ï€ÏοσωÏινές Ï€ÏοσαÏτήσεις. Clearing all temporary mounts. ΚαθάÏισμα όλων των Ï€ÏοσωÏινών Ï€ÏοσαÏτήσεων. Cleared all temporary mounts. ΚαθαÏίστηκαν όλες οι Ï€ÏοσωÏινές Ï€ÏοσαÏτήσεις. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> ΟÏισμός του μοντέλου πληκτÏολογίου σε %1.<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. Packages Install option: <strong>%1</strong> None Summary ΣÏνοψη This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Αυτή είναι μια επισκόπηση του τι θα συμβεί μόλις ξεκινήσετε τη διαδικασία εγκατάστασης. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition ΔημιουÏγία κατάτμησης Si&ze: &Μέγεθος: MiB MiB Partition &Type: ΤÏ&πος κατάτμησης: Primar&y E&xtended Ε&κτεταμένη Fi&le System: ΣÏστημα ΑÏχ&είων: LVM LV name &Mount Point: Σ&ημείο Ï€ÏοσάÏτησης: Flags: Σημαίες: Label for the filesystem FS Label: En&crypt Logical Λογική Primary ΠÏωτεÏουσα GPT GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. ΔημιουÏγείται νέα %1 κατάτμηση στο %2. The installer failed to create partition on disk '%1'. Η εγκατάσταση απέτυχε να δημιουÏγήσει μία κατάτμηση στον δίσκο '%1'. 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 ΕπεξεÏγασία υπάÏχουσας κατάτμησης Con&tent: &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: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form ΤÏπος En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Λέξη Κλειδί Confirm passphrase Επιβεβαίωση λέξης κλειδί Please enter the same passphrase in both boxes. ΠαÏακαλώ εισάγετε την ίδια λέξη κλειδί και στα δÏο κουτιά. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information ΟÏισμός πληÏοφοÏιών κατάτμησης Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Εγκατάσταση %1 στο <strong>νέο</strong> %2 διαμέÏισμα συστήματος. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form ΤÏπος <h1>License Agreement</h1> I accept the terms and conditions above. Δέχομαι τους παÏαπάνω ÏŒÏους και Ï€Ïοϋποθέσεις. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Άδεια LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>οδηγός %1</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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Κατατμήσεις Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: ΤÏέχον: After: Μετά: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form ΤÏπος Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. Λανθασμένοι παÏάμετÏοι για την κλήση διεÏγασίας. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) %1 (%2) unknown άγνωστη extended εκτεταμένη unformatted μη μοÏφοποιημένη swap Default ΠÏοκαθοÏισμένο File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Μη κατανεμημένος χώÏος ή άγνωστος πίνακας κατατμήσεων Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form ΤÏπος Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. Το επιλεγμένο στοιχείο φαίνεται να μην είναι ένα έγκυÏο διαμέÏισμα. %1 cannot be installed on empty space. Please select an existing partition. %1 δεν μποÏεί να εγκατασταθεί σε άδειο χώÏο. ΠαÏακαλώ επίλεξε ένα υφιστάμενο διαμέÏισμα. %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 Απαιτήσεις συστήματος 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) StandardButtons &OK &Yes &Îαι &No &Όχι &Cancel &ΑκÏÏωση &Close &Κλείσιμο TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form ΤÏπος Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users ΧÏήστες UsersViewStep Users ΧÏήστες VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form ΤÏπος Select application and system language Open donations website &Donate Open help and support website &Support &ΥποστήÏιξη Open issues and bug-tracking website &Known issues &Γνωστά Ï€Ïοβλήματα Open release notes website &Release notes Ση&μειώσεις έκδοσης %1 support ΥποστήÏιξη %1 About %1 setup About %1 installer Σχετικά με το Ï€ÏόγÏαμμα εγκατάστασης %1 WelcomeQmlViewStep Welcome Καλώς ήλθατε WelcomeViewStep Welcome Καλώς ήλθατε ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Debug Show information about Calamares Show debug information Εμφάνιση πληÏοφοÏιών απασφαλμάτωσης finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Μοντέλο πληκτÏολογίου: Layouts Type here to test your keyboard ΠληκτÏολογείστε εδώ για να δοκιμάσετε το πληκτÏολόγιο σας Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Ποιο είναι το όνομά σας; Your Full Name What name do you want to use to log in? Ποιο όνομα θα θέλατε να χÏησιμοποιείτε για σÏνδεση; Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Ποιο είναι το όνομά του υπολογιστή; Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Επιλέξτε ένα κωδικό για να διατηÏήσετε το λογαÏιασμό σας ασφαλή. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. ΧÏησιμοποιήστε τον ίδιο κωδικό Ï€Ïόσβασης για τον λογαÏιασμό διαχειÏιστή. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_en.ts000066400000000000000000007011161430147706700217200ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;<br/> 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 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 Successfully unmounted %1. Successfully unmounted %1. Successfully disabled swap %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clear all temporary mounts. Clearing all temporary mounts. Clearing all 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. Packages Packages Install option: <strong>%1</strong> Install option: <strong>%1</strong> None None Summary Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job Contextual Processes Job CreatePartitionDialog Create a Partition Create a Partition Si&ze: Si&ze: MiB MiB Partition &Type: Partition &Type: Primar&y Primar&y E&xtended E&xtended Fi&le System: Fi&le System: LVM LV name LVM LV name &Mount Point: &Mount Point: Flags: Flags: Label for the filesystem Label for the filesystem FS Label: FS Label: En&crypt En&crypt Logical Logical Primary Primary GPT GPT Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. The installer failed to create partition on disk '%1'. 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 Con&tent: Con&tent: &Keep &Keep Format Format Warning: Formatting the partition will erase all existing data. Warning: Formatting the partition will erase all existing data. &Mount Point: &Mount Point: Si&ze: Si&ze: MiB MiB Fi&le System: Fi&le System: Flags: Flags: Label for the filesystem Label for the filesystem FS Label: FS Label: Passphrase for existing partition Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Form En&crypt system En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Passphrase Confirm passphrase Confirm passphrase Please enter the same passphrase in both boxes. Please enter the same passphrase in both boxes. ErrorDialog Details: Details: Would you like to paste the install log to the web? Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Configuring encrypted swap. No target system available. No target system available. No rootMountPoint is set. No rootMountPoint is set. No configFilePath is set. No configFilePath is set. LicensePage Form Form <h1>License Agreement</h1> <h1>License Agreement</h1> I accept the terms and conditions above. I accept the terms and conditions above. Please review the End User License Agreements (EULAs). Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Services Login label for netinstall module, choose login manager Login Desktop label for netinstall module, choose desktop environment Desktop Communication label for netinstall module Communication Development label for netinstall module Development Office label for netinstall module Office Multimedia label for netinstall module Multimedia Internet label for netinstall module Internet Theming label for netinstall module Theming Gaming label for netinstall module Gaming Utilities label for netinstall module Utilities Applications Applications 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. 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 Unsafe partition actions are enabled. Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. Partitioning is configured to <b>always</b> fail. No partitions will be changed. No partitions will be changed. Current: Current: After: After: No EFI system partition configured No EFI system partition configured EFI system partition configured incorrectly EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. has at least one disk device available. There are no partitions to install on. There are no partitions to install on. 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 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 StandardButtons &OK &OK &Yes &Yes &No &No &Cancel &Cancel &Close &Close TrackingInstallJob Installation feedback Installation feedback Sending installation feedback. Sending installation feedback. Internal error in install-tracking. Internal error in install-tracking. HTTP request timed out. HTTP request timed out. 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 UmountJob Unmount file systems. Unmount file systems. No target system available. No target system available. No rootMountPoint is set. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep 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 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 %1 support %1 support About %1 setup About %1 setup About %1 installer About %1 installer WelcomeQmlViewStep Welcome Welcome WelcomeViewStep Welcome Welcome ZfsJob Create ZFS pools and datasets Create ZFS pools and datasets Failed to create zpool on Failed to create zpool on Configuration Error Configuration Error No partitions are available for ZFS. No partitions are available for ZFS. Internal data missing Internal data missing Failed to create zpool Failed to create zpool Failed to create dataset Failed to create dataset The output was: The output was: calamares-sidebar About About Debug Debug Show information about Calamares Show information about Calamares Show debug information Show debug information finishedq Installation Completed Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Close Installer Restart System Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. %1 has been installed on your computer.<br/> You may now restart your device. Close Close Restart Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back Back keyboardq To activate keyboard preview, select a layout. To activate keyboard preview, select a layout. Keyboard Model: Keyboard Model: Layouts Layouts Type here to test your keyboard Type here to test your keyboard Variants Variants localeq Change Change notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Minimal Install Please select an option for your install, or use the default: LibreOffice included. Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back Back usersq Pick your user name and credentials to login and perform admin tasks Pick your user name and credentials to login and perform admin tasks What is your name? What is your name? Your Full Name Your Full Name What name do you want to use to log in? What name do you want to use to log in? Login Name Login Name If more than one person will use this computer, you can create multiple accounts after installation. If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. root is not allowed as username. What is the name of this computer? What is the name of this computer? Computer Name Computer Name This name will be used if you make the computer visible to others on a network. This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. localhost is not allowed as hostname. Choose a password to keep your account safe. Choose a password to keep your account safe. Password Password Repeat Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Reuse user password as root password Use the same password for the administrator account. Use the same password for the administrator account. Choose a root password to keep your account safe. Choose a root password to keep your account safe. Root Password Root Password Repeat Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Support Known issues Known issues Release notes Release notes Donate Donate calamares-calamares-2d126ae/lang/calamares_en_GB.ts000066400000000000000000006324331430147706700222750ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clear all temporary mounts. Clearing all temporary mounts. Clearing all 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. Packages Install option: <strong>%1</strong> None Summary Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job Contextual Processes Job CreatePartitionDialog Create a Partition Create a Partition Si&ze: Si&ze: MiB MiB Partition &Type: Partition &Type: Primar&y E&xtended E&xtended Fi&le System: Fi&le System: LVM LV name LVM LV name &Mount Point: &Mount Point: Flags: Flags: Label for the filesystem FS Label: En&crypt En&crypt Logical Logical Primary Primary GPT GPT Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. The installer failed to create partition on disk '%1'. 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 Con&tent: &Keep &Keep Format Format Warning: Formatting the partition will erase all existing data. Warning: Formatting the partition will erase all existing data. &Mount Point: &Mount Point: Si&ze: Si&ze: MiB MiB Fi&le System: Fi&le System: Flags: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Form En&crypt system En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Passphrase Confirm passphrase Confirm passphrase Please enter the same passphrase in both boxes. Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Form <h1>License Agreement</h1> I accept the terms and conditions above. I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Current: After: After: No EFI system partition configured No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted 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 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 StandardButtons &OK &OK &Yes &Yes &No &No &Cancel &Cancel &Close &Close TrackingInstallJob Installation feedback Installation feedback Sending installation feedback. Sending installation feedback. Internal error in install-tracking. Internal error in install-tracking. HTTP request timed out. HTTP request timed out. 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 UmountJob Unmount file systems. Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep 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 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 %1 support %1 support About %1 setup About %1 installer About %1 installer WelcomeQmlViewStep Welcome Welcome WelcomeViewStep Welcome Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Debug Show information about Calamares Show debug information Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Keyboard Model: Layouts Type here to test your keyboard Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? 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> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_eo.ts000066400000000000000000006007611430147706700217250ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete 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. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Kreiu Subdiskon Si&ze: &Grandeco: MiB MiB Partition &Type: &Speco de Subdisko: Primar&y E&xtended &Kromsubdisko Fi&le System: &Dosiersistemo: LVM LV name LVM LV nomo &Mount Point: &Muntopunkto: Flags: Flagoj: Label for the filesystem FS Label: En&crypt &Ĉifras Logical Logika Primary Ĉefa GPT Mountpoint already in use. Please select another one. Muntopunkto jam utiliÄi. Bonvolu elektu alian. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep &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: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formularo En&crypt system &Ĉifru la sistemo Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1(%2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formularo <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Nune: After: Poste: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form 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 ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &DaÅ­rigu &Yes &Jes &No &Ne &Cancel &Nuligi &Close &Fermi 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 UmountJob Unmount file systems. Demeti dosieraj sistemoj. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep 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 Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_es.ts000066400000000000000000007241321430147706700217300ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/>para %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Gracias al <a href="https://calamares.io/team/">equipo de Calamares</a> y al <a href="https://www.transifex.com/calamares/calamares/">equipo de traductores de Calamares</a>. <br/><br/>El desarrollo de <a href="https://calamares.io/">Calamares</a> está patrocinado por <br/><a href="http://www.blue-systems.com/">Blue Systems</a>- Liberador de Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;<br/> 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 más antiguos solo funcionan con <strong>BIOS</strong>, mientras que los sistemas modernos suelen usan <strong>EFI</strong>, pero también pueden aparece como BIOS si se inician en el modo de retrocompatibilidad. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Este sistema ha iniciado con un entorno de arranque <strong>EFI</strong>.<br><br>Para configurar el arranque desde un entorno EFI este instalador debe instalar gestor de arranque como <strong>GRUB</strong> o <strong>systemd-boot</strong> en una <strong>partición del sistema EFI</strong>. Esto se hará de forma automática a menos que utilices el particionado manual y lo completes todo por tu cuenta. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Este sistema se ha iniciado con un entorno de arranque <strong>BIOS</strong>.<br><br>Para configurar el arranque desde un entorno BIOS este instalador debe instalar un gestor de arranque, como <strong>GRUB</strong>, ya sea al principio de una partición o en el <strong>Master Boot Record</strong> (registro de arranque principal) casi al principio de la tabla de partición (si es posible). Esto se hará de forma automática a menos que utilices el particionado manual y lo completes todo por tu cuenta. BootLoaderModel Master Boot Record of %1 Registro de arranque principal (MBR) 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 GlobalStorage JobQueue JobQueue Modules Módulos Type: Tipo: none ninguno Interface: Interfaz: Crashes Calamares, so that Dr. Konqui can look at it. Cuelga y cierra de forma inesperada Calamares para que lo mire el Dr. Konqui. Reloads the stylesheet from the branding directory. Vuelve a cargar la hoja de estilo desde la carpeta de diseño propio. Uploads the session log to the configured pastebin. Sube el registro de la sesión hacia el «pastebin» asignado. Send Session Log Enviar registro de sesión Reload Stylesheet Recargar hoja de estilo Displays the tree of widget names in the log (for stylesheet debugging). Muestra el árbol de nombres de widgets en el registro (para la depuración de hojas de estilo). Widget Tree Ãrbol de «widgets» Debug information Información de depuración Calamares::ExecutionViewStep Set up Preparar Install Instalar Calamares::FailJob Job failed (%1) La tarea ha fallado (%1) Programmed job failure was explicitly requested. Se solicitó de manera explícita que la tarea fallara. Calamares::JobThread Done Hecho Calamares::NamedJob Example job (%1) Tarea de ejemplo (%1) Calamares::ProcessJob Run command '%1' in target system. Ejecutar la orden «%1» en el sistema a instalar. Run command '%1'. Ejecutar la orden «%1». Running command %1 %2 Ejecutando orden %1 %2 Calamares::PythonJob Running %1 operation. Ejecutando operación %1. Bad working directory path La ruta de la carpeta de trabajo no es válida Working directory %1 for python job %2 is not readable. La tarea de python %2 no tiene permisos de lectura en la carpeta de trabajo %1. Bad main script file Script principal erróneo Main script file %1 for python job %2 is not readable. El script principal «%1» de la tarea de python «%2» no es accesible. Boost.Python error in job "%1". Hubo un error Boost.Python en el proceso «%1». Calamares::QmlViewStep Loading ... Cargando... QML Step <i>%1</i>. Paso QML <i>%1</i>. Loading failed. No se ha podido cargar. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Se ha terminado la comprobación de requisitos para el módulo <i>%1</i>. Waiting for %n module(s). Esperando a %n módulo. Esperando a %n módulos. Esperando a %n módulos. (%n second(s)) (%n segundo) (%n segundos) (%n segundos) System-requirements checking is complete. Se ha terminado la comprobación de los requisitos del sistema. Calamares::ViewManager Setup Failed El asistente ha fallado Installation Failed La instalación ha fallado Error Error &Yes &Sí &No &No &Close &Cerrar Install Log Paste URL URL del registro del instalador The upload was unsuccessful. No web-paste was done. No se pudo terminar la subida del registro de texto a la web. Install log posted to %1 Link copied to clipboard El registro se ha publicado en %1 El enlace se ha copiado en el portapapeles. Calamares Initialization Failed Calamares no ha podido arrancar bien %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 no se pudo instalar. Calamares no ha sido capaz de cargar todos los módulos configurados. Puede que esto sea un problema de la propia distribución y de cómo sus desarrolladores hayan desplegado el instalador. <br/>The following modules could not be loaded: Los siguientes módulos no se han podido cargar: Continue with setup? ¿Quieres seguir con la configuración? Continue with installation? ¿Quieres seguir con la instalación? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> El configurador de %1 está a punto de hacer cambios en el disco con el fin de preparar y dejar listo %2.<br/><strong>Ten en cuenta que una vez empezados no se podrán deshacer.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> El instalador %1 está a punto de hacer cambios en el disco con el fin de instalar %2.<br/><strong>Ten en cuenta que una vez empezados no se podrán deshacer.</strong> &Set up now Empezar la &preparación &Install now &Instalar ahora Go &back &Volver atrás &Set up &Preparar &Install &Instalar Setup is complete. Close the setup program. Configuración terminada, ya puedes cerrar el asistente de preparación. The installation is complete. Close the installer. Instalación terminada, ya puedes cerrar el instalador. Cancel setup without changing the system. Cancelar la configuración sin cambiar el sistema. Cancel installation without changing the system. Cancelar la instalación sin cambiar el sistema. &Next &Siguiente &Back &Atrás &Done &Hecho &Cancel &Cancelar Cancel setup? ¿Quieres cancelar la configuración? Cancel installation? ¿Quieres cancelar la instalación? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. ¿Seguro que quieres cancelar el proceso de configuración en curso? El programa se cerrará y todos tus cambios se perderán. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. ¿Seguro que quieres cancelar el proceso de instalación en curso? El instalador se cerrará y todos tus cambios se perderán. CalamaresPython::Helper Unknown exception type Tipo de excepción desconocida unparseable Python error Error de Python no analizable unparseable Python traceback Volcado de errores de Python («traceback») no analizable Unfetchable Python error. No se puede obtener el error de Python. CalamaresWindow %1 Setup Program Programa de configuración de %1 %1 Installer Instalador de %1 ChangeFilesystemLabelJob Set filesystem label on %1. Establecer la etiqueta del sistema de archivos para «%1». Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. Establecer la etiqueta del sistema de archivos «<strong>%1</strong>» para la partición «<strong>%2</strong>». The installer failed to update partition table on disk '%1'. El instalador no ha podido actualizar la tabla de particiones en el disco «%1». CheckerContainer Gathering system information... Obteniendo información del sistema... ChoicePage Form Formulario Select storage de&vice: Elige un dispositivo de almacenamiento: Current: Ahora: After: Después: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionado manual</strong><br/> Puedes crear o cambiar el tamaño de las particiones a tu gusto. Reuse %1 as home partition for %2. Reutilizar %1 como partición de datos personales («home») para %2 <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Elige la partición a reducir, una vez hecho esto arrastra la barra inferior para configurar el espacio restante</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 se reducirá a %2MiB y se creará una nueva partición de %3MiB para %4. Boot loader location: Ubicación del cargador de arranque: <strong>Select a partition to install on</strong> <strong>Elige una partición en la que realizar la instalación</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. No parece que haya ninguna partición del sistema EFI en el equipo. Puedes volver atrás y preparar %1 con la opción de particionado manual. The EFI system partition at %1 will be used for starting %2. La partición del sistema EFI en «%1» se va a usar para arrancar %2. EFI system partition: Partición del sistema EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento no parece tener un sistema operativo dentro. ¿Qué quieres hacer?<br/>Podrás revisar y confirmar los cambios antes de que pase nada. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Borrar el disco</strong><br/>Esto <font color="red">eliminará permanentemente</font> todos los datos en el dispositivo de almacenamiento. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar al lado</strong><br/>El instalador reducirá el tamaño de una partición y dejará el suficiente para instalar %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Reemplazar una partición</strong><br/>Sustituye el espacio de una de las particiones ya existentes con %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. %1 se encuentra instalado en este dispositivo de almacenamiento. ¿Qué quieres hacer?<br/>Podrás revisar y confirmar tu elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Parece que este dispositivo de almacenamiento ya tiene un sistema operativo instalado. ¿Qué quieres hacer?<br/>Podrás revisar y confirmar tu elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento contiene múltiples sistemas operativos instalados en él. ¿Qué quieres hacer?<br/>Podrás revisar y confirmar tu elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> Este dispositivo de almacenamiento ya tiene un sistema operativo, pero la tabla de particiones <strong>%1</strong> es diferente de la que se necesita; <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. Este dispositivo de almacenamiento tiene alguna de sus particiones <strong>ya montadas</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. Este dispositivo de almacenamiento es parte de un <strong>dispositivo RAID</strong> inactivo. No Swap Sin «swap» Reuse Swap Reutilizar «swap» ya existente Swap (no Hibernate) Con «swap» (pero sin hibernación) Swap (with Hibernate) Con «swap» (y con hibernación) Swap to file Swap en archivo ClearMountsJob Successfully unmounted %1. «%1» se ha desmontando correctamente. Successfully disabled swap %1. El «swap» %1 se ha desactivado correctamente. Successfully cleared swap %1. El «swap» %1 se ha vaciado correctamente. Successfully closed mapper device %1. El dispositivo de mapeo «%1» se ha cerrado correctamente. Successfully disabled volume group %1. El grupo de volúmenes «%1» se ha desactivado correctamente. Clear mounts for partitioning operations on %1 Borrar los puntos de montaje para las operaciones de particionado en «%1» Clearing mounts for partitioning operations on %1. Quitando los puntos de montaje para las operaciones de particionado en «%1». Cleared all mounts for %1 Borrar todos los puntos de montaje de «%1» ClearTempMountsJob Clear all temporary mounts. Quitar todos los puntos de montaje temporales. Clearing all temporary mounts. Limpiando todos los puntos de montaje temporales. Cleared all temporary mounts. Limpiado todos los puntos de montaje temporales. CommandList Could not run command. No se pudo ejecutar la orden. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. La orden se ejecuta en el entorno del equipo anfitrión («host») y necesita conocer la ruta de la raíz, pero no hay definido ningún «rootMountPoint». The command needs to know the user's name, but no username is defined. La orden a ejecutar necesita saber el nombre de usuario, pero se ha definido ninguno. Config Set keyboard model to %1.<br/> Establecer el modelo de teclado como %1.<br/> Set keyboard layout to %1/%2. Establecer la disposición de teclado a %1/%2. Set timezone to %1/%2. Configurar el huso horario a %1/%2 The system language will be set to %1. El idioma del sistema se establecerá a %1. The numbers and dates locale will be set to %1. El formato de números y fechas aparecerá en %1. Network Installation. (Disabled: Incorrect configuration) Instalación de red. (Desactivada: configuración incorrecta) Network Installation. (Disabled: Received invalid groups data) Instalación de red. (Desactivada: los grupos recibidos no son correctos) Network Installation. (Disabled: Internal error) Instalación de red. (Desactivada: error interno) Network Installation. (Disabled: No package list) Instalación de red. (Desactivada: sin lista de paquetes) Package selection Selección de paquetes Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalación por Internet. (Desactivada: no se ha podido obtener una lista de paquetes, comprueba tu conexión a la red) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Este equipo no cumple los requisitos mínimos para instalar %1.<br/>La instalación no puede continuar.<a href="#details">Más detalles...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Este equipo no cumple los requisitos mínimos para la instalación. %1.<br/>La instalación no puede continuar. <a href="#details">Detalles...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. El equipo no cumple con alguno de los requisitos recomendados para configurar %1. Se puede continuar con la configuración, pero puede que ciertas funciones no estén disponibles. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. El equipo no cumple con alguno de los requisitos recomendados para instalar %1. Se puede continuar con la instalación, pero puede que ciertas funciones no estén disponibles. This program will ask you some questions and set up %2 on your computer. El programa te hará algunas preguntas y configurará %2 en tu equipo. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Te damos la bienvenida al asistente de configuración de %1</h1> <h1>Welcome to %1 setup</h1> <h1>Te damos la bienvenida al asistente de configuración de %1</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Te damos la bienvenida a Calamares, el instalador de %1</h1> <h1>Welcome to the %1 installer</h1> <h1>Te damos la bienvenida al instalador de %1</h1> Your username is too long. Tu nombre de usuario es demasiado largo. '%1' is not allowed as username. «%1» no vale como nombre de usuario. Your username must start with a lowercase letter or underscore. Los nombres de usuario empiezan con una letra minúscula o un guion bajo. Only lowercase letters, numbers, underscore and hyphen are allowed. Solo se permiten letras minúsculas, números, guiones bajos y normales. Your hostname is too short. El nombre del equipo es demasiado corto. Your hostname is too long. El nombre del equipo es demasiado largo. '%1' is not allowed as hostname. «%1» no es un nombre de equipo válido. Only letters, numbers, underscore and hyphen are allowed. Solo se permiten letras, números, guiones bajos y normales. Your passwords do not match! Parece que las contraseñas no coinciden. OK! Entendido Setup Failed La configuración ha fallado Installation Failed La instalación ha fallado The setup of %1 did not complete successfully. No se ha podido terminar correctamente la configuración de %1. The installation of %1 did not complete successfully. No se ha podido terminar correctamente la instalación de %1. Setup Complete Se ha terminado la configuración Installation Complete Se ha terminado la instalación The setup of %1 is complete. Se ha terminado la configuración de %1. The installation of %1 is complete. Se ha completado la instalación de %1. Package Selection Selección de paquetes Please pick a product from the list. The selected product will be installed. Hay que elegir uno de los productos a instalar de la lista. Packages Paquetes Install option: <strong>%1</strong> Opción de instalación: <strong>%1</strong> None Ninguno Summary Resumen This is an overview of what will happen once you start the setup procedure. Esto es un resumen muy general de lo que se cambiará una vez empiece el proceso de configuración. This is an overview of what will happen once you start the install procedure. Esto es un resumen muy general de lo que se cambiará una vez empiece el proceso de instalación. ContextualProcessJob Contextual Processes Job Tarea de procesos contextuales CreatePartitionDialog Create a Partition Crear partición Si&ze: &Tamaño: MiB MiB Partition &Type: &Tipo de partición: Primar&y Primar&ia E&xtended E&xtendida Fi&le System: Sistema de archivos: LVM LV name Nombre del LV (volumen lógico) del LVM (administrador de LVs) &Mount Point: Punto de &montaje: Flags: Indicadores: Label for the filesystem Etiqueta para el sistema de archivos FS Label: Etiqueta del sist. de arch.: En&crypt &Cifrar Logical Lógica Primary Primaria GPT GPT Mountpoint already in use. Please select another one. El punto de montaje ya está en uso y no se puede modificar. Mountpoint must start with a <tt>/</tt>. El punto de montaje debe comenzar con un <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Crear nueva partición %1MiB en %3 (%2) con entradas %4. Create new %1MiB partition on %3 (%2). Crear nueva partición %1MiB en %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Crear nueva partición %2MiB en %4 (%3) con sistema de archivos %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Crear nueva partición <strong>%1MiB</strong> en <strong>%3</strong> (%2) con entradas<em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Crear nueva partición <strong>%1MiB</strong> en <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Crear nueva partición <strong>%2MiB</strong> en <strong>%4</strong> (%3) con sistema de archivos <strong>%1</strong>. Creating new %1 partition on %2. Creando nueva %1 partición en %2 The installer failed to create partition on disk '%1'. El instalador no pudo particionar el disco «%1». CreatePartitionTableDialog Create Partition Table Crear tabla de particiones Creating a new partition table will delete all existing data on the disk. Al crear una tabla de particiones se borrarán todos los datos del disco. What kind of partition table do you want to create? Elige el tipo de tabla de particiones que quieres crear: Master Boot Record (MBR) Registro de arranque principal (MBR) GUID Partition Table (GPT) Tabla de particiones GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Crear una nueva tabla de particiones %1 en %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Crear una nueva tabla de particiones <strong>%1</strong> en <strong>%2</strong> (%3). Creating new %1 partition table on %2. Creando una nueva tabla de particiones %1 en %2. The installer failed to create a partition table on %1. El instalador no pudo crear una tabla de particiones en %1. CreateUserJob Create user %1 Crear el usuario %1 Create user <strong>%1</strong>. Crear el usuario <strong>%1</strong>. Preserving home directory Preservando la carpeta de usuario («home») Creating user %1 Creando el usuario %1 Configuring user %1 Configurando el usuario %1 Setting file permissions Configurando permisos de archivo CreateVolumeGroupDialog Create Volume Group Crear grupo de volúmenes CreateVolumeGroupJob Create new volume group named %1. Crear un nuevo grupo de volúmenes denominado «%1». Create new volume group named <strong>%1</strong>. Crear un nuevo grupo de volúmenes denominado «<strong>%1</strong>». Creating new volume group named %1. Creando un nuevo grupo de volúmenes denominado «%1». The installer failed to create a volume group named '%1'. El instalador no pudo crear un grupo de volúmenes denominado «%1». DeactivateVolumeGroupJob Deactivate volume group named %1. Desactivar el grupo de volúmenes denominado «%1». Deactivate volume group named <strong>%1</strong>. Desactivar el grupo de volúmenes denominado «<strong>%1</strong>». The installer failed to deactivate a volume group named %1. El instalador no pudo desactivar el grupo de volúmenes denominado «%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 la partición %1. The installer failed to delete partition %1. El instalador no pudo eliminar la partición %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. Este dispositivo tiene un tabla de particiones <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Este es un dispositivo <strong>«loop»</strong>.<br/><br/>Lo que significa que es un archivo normal que se ha montado como disco virtual de bloques, pero sin tabla de particiones. Normalmente estos puntos de montaje contienen un único sistema de archivos, como una sola partición. This 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> con varias particiones <em>lógicas</em> dentro. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. El tipo de <strong>tabla de particiones</strong> en el dispositivo de almacenamiento seleccionado.<br/><br/>La única forma de cambiar el tipo de la tabla de particiones es borrando y creando la tabla de particiones de nuevo, lo cual destruirá todos los datos almacenados en el dispositivo de almacenamiento.<br/>Este instalador mantendrá la tabla de particiones actual salvo que explícitamente se indique lo contrario.<br/>En caso de dudas, GPT es preferible en sistemas modernos. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) 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 ya existente Con&tent: Con&tenido: &Keep &Mantener Format Formato Warning: Formatting the partition will erase all existing data. Advertencia: Al formatear la partición se borrarán todos los datos ya existentes. &Mount Point: Punto de &montaje: Si&ze: &Tamaño: MiB MiB Fi&le System: S&istema de archivos: Flags: Indicadores: Label for the filesystem Etiqueta para el sistema de archivos FS Label: Etiqueta del sist. de archivos: Passphrase for existing partition Frase de contraseña para la partición existente Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. La partición %1 no se pudo descifrar con la frase de contraseña proporcionada. Edite la partición nuevamente y proporcione la frase de contraseña correcta o elimine y cree una nueva partición cifrada. EncryptWidget Form Formulario En&crypt system &Cifrar sistema Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Parece que tu sistema puede tener problemas al utilizar un cifrado de disco completo. Ten en cuenta que puedes dejar el cifrado activado, pero el rendimiento puede verse afectado. Passphrase Contraseña de cifrado Confirm passphrase Confirmar contraseña de cifrado Please enter the same passphrase in both boxes. Las contraseñas de ambos campos deben coincidir. ErrorDialog Details: Detalles: Would you like to paste the install log to the web? ¿Quieres subir una copia del registro de instalación a la web? FillGlobalStorageJob Set partition information Establecer la información de la partición Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Instalar %1 en una <strong>nueva</strong> partición %2 del sistema con funciones <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Instalar %1 en una <strong>nueva</strong> partición %2 del sistema. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Configurar una <strong>nueva</strong> partición %2 con el punto de montaje <strong>%1</strong> y las funciones <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Configurar una <strong>nueva</strong> %2 partición con punto de montaje <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Instalar %2 en %3 partición de sistema <strong>%1</strong> con características <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Configurar %3 partición <strong>%1</strong> con punto de montaje <strong>%2</strong> y características <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Configurar %3 partición <strong>%1</strong> con punto de montaje <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Instalar %2 en %3 partición del sistema <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Instalar el 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. <h1>Hemos terminado.</h1><br/>Ahora %1 ya está configurado y listo para usar.<br/>Ya puedes empezar a utilizar tu equipo. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Al marcar esta casilla el sistema se reiniciará inmediatamente una vez hagas clic en el botón <span style="font-style:italic;">Hecho</span> o al cerrar el programa de configuración.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Hemos terminado.</h1><br/>Ahora %1 está instalado en tu equipo.<br/>Puedes reiniciar para empezar a utilizar tu nuevo sistema o seguir en el entorno temporal («live») de %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Al marcar esta casilla el sistema se reiniciará inmediatamente una vez hagas clic en el botón <span style="font-style:italic;">Hecho</span> o al cerrar el instalador.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>La configuración ha fallado</h1><br/>%1 no ha podido configurar tu equipo.<br/>El mensaje de error fue: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>La instalación ha fallado</h1><br/>%1 no se ha instalado en tu equipo.<br/>El mensaje de error fue: %2. FinishedQmlViewStep Finish Terminar FinishedViewStep Finish Terminar FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatear partición %1 (sistema de archivos: %2, tamaño: %3 MiB) en %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatear <strong>%3MiB</strong> partición «<strong>%1</strong>» con sistema de archivos <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 tiene al menos %1 GiB de espacio disponible en el disco There is not enough drive space. At least %1 GiB is required. No hay suficiente espació en el disco duro. Se requiere al menos %1 GB libre. has at least %1 GiB working memory tiene al menos %1 GB de memoria. The system does not have enough working memory. At least %1 GiB is required. El sistema no tiene suficiente memoria; se necesita un mínimo de %1 GB. is plugged in to a power source esta conectado a una fuente de alimentación The system is not plugged in to a power source. El sistema no esta conectado a una fuente de alimentación. is connected to the Internet está conectado a Internet The system is not connected to the Internet. El sistema no esta conectado a Internet is running the installer as an administrator (root) esta ejecutándose con permisos de administrador («root»). The setup program is not running with administrator rights. El instalador no esta ejecutándose con permisos de administrador. The installer is not running with administrator rights. El instalador no se está ejecutando con permisos de administrador. has a screen large enough to show the whole installer tiene una pantalla lo suficientemente grande como para mostrar todo el instalador The screen is too small to display the setup program. La pantalla es demasiado pequeña para mostrar el instalador. The screen is too small to display the installer. La pantalla es demasiado pequeña para mostrar el instalador. HostInfoJob Collecting information about your machine. Recopilando información sobre su máquina. IDJob OEM Batch Identifier Identificador de lote OEM Could not create directories <code>%1</code>. No se pudieron crear las carpetas <code>%1</code>. Could not open file <code>%1</code>. No se pudo abrir el archivo <code>%1</code>. Could not write to file <code>%1</code>. No se pudo escribir en el archivo <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Creando el «initramfs» con «mkinitcpio». InitramfsJob Creating initramfs. Creando el «initramfs». InteractiveTerminalPage Konsole not installed Konsole no está instalado Please install KDE Konsole and try again! Instala KDE Konsole y prueba a lanzar este asistente otra vez. Executing script: &nbsp;<code>%1</code> Ejecutando el 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 al tipo de caracteres que se muestran en algunos elementos del terminal.<br/>El modo actual está establecido a «<strong>%1</strong>». &Cancel &Cancelar &OK &Aceptar LOSHJob Configuring encrypted swap. Configurando la memoria de intercambio («swap») cifrada. No target system available. No parece que haya ningún sistema al que aplicar las operaciones. No rootMountPoint is set. No se ha definido «rootMountPoint». No configFilePath is set. No se ha definido «configFilePath». LicensePage Form Formulario <h1>License Agreement</h1> <h1>Contrato de licencia</h1> I accept the terms and conditions above. Acepto los términos y condiciones anteriores. Please review the End User License Agreements (EULAs). Revisa los contratos de licencia para el usuario final (CLUF). This setup procedure will install proprietary software that is subject to licensing terms. Este asistente instalará software privativo, o no libre, que está sujeto a términos de licencia especiales. If you do not agree with the terms, the setup procedure cannot continue. Si no estás de acuerdo con estas licencias la configuración no puede continuar. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Este procedimiento de configuración puede instalar software privativo (o no libre) sujeto a términos de licencia especiales, con el fin de proporcionar características adicionales y mejorar la experiencia del usuario. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Si no estás de acuerdo con estas licencias no se instalará dicho software y se sustituirá por alternativas libres, de código abierto. LicenseViewStep License Contrato 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áfico %1</strong><br/><font color="Grey">de %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>extensión del navegador %1</strong><br/><font color="Grey">de %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>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 Archivo: %1 Hide license text Ocultar el texto legal Show the license text Ver el texto legal Open license agreement in browser. Abrir el texto legal en el navegador. LocalePage Region: Región: Zone: Huso horario: &Change... &Cambiar... LocaleQmlViewStep Location Ubicación LocaleTests Quit Salir LocaleViewStep Location Ubicación LuksBootKeyFileJob Configuring LUKS key file. Configurando archivo de claves LUKS. No partitions are defined. Se ha definido ninguna partición. Encrypted rootfs setup error Se ha producido un error del «rootfs» cifrado Root partition %1 is LUKS but no passphrase has been set. La partición root %1 es LUKS pero no se ha establecido ninguna frase de contraseña. Could not create LUKS key file for root partition %1. No se pudo crear el archivo de clave LUKS para la partición root %1. Could not configure LUKS key file on partition %1. No se pudo configurar el archivo de clave LUKS para la partición root %1. MachineIdJob Generate machine-id. Generar el identificador único de máquina. Configuration Error Error de configuración No root mount point is set for MachineId. No hay ningún punto de montaje raíz («root») establecido para «MachineId». Map Timezone: %1 Huso horario: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. Seleccione su ubicación preferida en el mapa para que el instalador pueda sugerir la ubicación y la configuración de la zona horaria para usted. Puede ajustar la configuración sugerida a continuación. Busque en el mapa arrastrando para mover y usar los botones +/- para acercar/alejar o usar el desplazamiento del mouse para acercar. NetInstallViewStep Package selection Selección de paquetes Office software Programa de oficina Office package Paquete de oficina Browser software Explorador de archivos Browser package Paquetes de explorador de archivos Web browser Navegador web Kernel label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Servicios Login label for netinstall module, choose login manager Iniciar sesion Desktop label for netinstall module, choose desktop environment Escritorio Communication label for netinstall module Comunicación Development label for netinstall module Desarrollo Office label for netinstall module Oficina Multimedia label for netinstall module Multimedia Internet label for netinstall module Internet Theming label for netinstall module Temas Gaming label for netinstall module Juegos Utilities label for netinstall module Herramientas Applications Aplicaciones NotesQmlViewStep Notes Notas OEMPage Ba&tch: Lo&te: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Introduce un identificador de lote, se almacenará en el sistema a instalar.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body>Configuración OEM</h1><p>Calamares usará la configuración OEM al configurar el sistema de destino.</p></body></html> OEMViewStep OEM Configuration Configuración OEM Set the OEM Batch Identifier to <code>%1</code>. Define el identificador de lote OEM en <code>%1</code>. Offline Select your preferred Region, or use the default settings. Seleccione su región preferida o use la configuración predeterminada. Timezone: %1 Huso horario: %1 Select your preferred Zone within your Region. Elige un huso horario en tu región. Zones Husos You can fine-tune Language and Locale settings below. A continuación puedes ajustar la configuración regional. PWQ Password is too short La contraseña es demasiado corta Password is too long La contraseña es demasiado larga Password is too weak La contraseña es demasiado débil Memory allocation error when setting '%1' No parece que haya suficiente memoria como para establecer «%1» Memory allocation error Error de asignación de memoria The password is the same as the old one La contraseña es la misma que la antigua The password is a palindrome La contraseña es un palíndromo The password differs with case changes only La contraseña solo cambia las mayúsculas y minúsculas The password is too similar to the old one La contraseña es demasiado similar a la antigua The password contains the user name in some form La contraseña contiene partes del nombre de usuario The password contains words from the real name of the user in some form La contraseña contiene partes del nombre real del usuario The password contains forbidden words in some form La contraseña contiene alguna palabra prohibida The password contains too few digits La contraseña no tiene suficientes números The password contains too few uppercase letters La contraseña no tiene suficientes mayúsculas The password contains fewer than %n lowercase letters La contraseña contiene menos de %n letras minúsculas La contraseña contiene menos de %n letras minúsculas La contraseña contiene menos de %n letras minúsculas 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 no tiene suficientes 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 tipos de caracteres The password contains too many same characters consecutively La contraseña contiene demasiados caracteres iguales consecutivos The password contains too many characters of the same class consecutively La contraseña contiene demasiados caracteres seguidos del mismo tipo The password contains fewer than %n digits La contraseña contiene menos de %n dígitos La contraseña contiene menos de %n dígitos La contraseña contiene menos de %n dígitos The password contains fewer than %n uppercase letters La contraseña contiene menos de %n letras mayúsculas La contraseña contiene menos de %n letras mayúsculas La contraseña contiene menos de %n letras mayúsculas The password contains fewer than %n non-alphanumeric characters La contraseña contiene menos de %n caracteres no alfanuméricos La contraseña contiene menos de %n caracteres no alfanuméricos La contraseña contiene menos de %n caracteres no alfanuméricos The password is shorter than %n characters La contraseña es más corta que %n caracteres La contraseña es más corta que %n caracteres La contraseña es más corta que %n caracteres The password is a rotated version of the previous one La contraseña es una versión rotada de la anterior. The password contains fewer than %n character classes La contraseña contiene menos de %n clases de caracteres La contraseña contiene menos de %n clases de caracteres La contraseña contiene menos de %n clases de caracteres The password contains more than %n same characters consecutively La contraseña contiene más de %n caracteres iguales consecutivos La contraseña contiene más de %n caracteres iguales consecutivos La contraseña contiene más de %n caracteres iguales consecutivos The password contains more than %n characters of the same class consecutively La contraseña contiene más de %n caracteres de la misma clase consecutivamente La contraseña contiene más de %n caracteres de la misma clase consecutivamente La contraseña contiene más de %n caracteres de la misma clase consecutivamente The password contains monotonic sequence longer than %n characters La contraseña contiene una secuencia monótona de más de %n caracteres La contraseña contiene una secuencia monótona de más de %n caracteres La contraseña contiene una secuencia monótona de más de %n caracteres The password contains too long of a monotonic character sequence La contraseña contiene una secuencia monótona de caracteres demasiado larga No password supplied No se proporcionó contraseña Cannot obtain random numbers from the RNG device No se puede obtener números aleatorios del dispositivo RNG (generador de números aleatorios) Password generation failed - required entropy too low for settings No se pudo generar la contraseña; no hay suficiente entropía para ello The password fails the dictionary check - %1 La contraseña contiene una palabra del diccionario (%1), por lo que ha fallado el nivel de seguridad necesario The password fails the dictionary check La contraseña contiene una palabra del diccionario, por lo que ha fallado el nivel de seguridad necesario Unknown setting - %1 Ajuste desconocido; %1 Unknown setting Ajuste desconocido Bad integer value of setting - %1 El siguiente ajuste no es un número entero; %1 Bad integer value Hay un número que no es de tipo entero Setting %1 is not of integer type La el ajuste %1 no es un número entero Setting is not of integer type El ajuste no es un número entero Setting %1 is not of string type El ajuste %1 no contiene una cadena de caracteres Setting is not of string type El ajuste no es una cadena de caracteres Opening the configuration file failed No se pudo abrir el fichero de configuración The configuration file is malformed El archivo de configuración tiene un formato desconocido o incorrecto Fatal failure Fallo fatal Unknown error Error desconocido Password is empty La contraseña está vacía. PackageChooserPage Form Formulario Product Name Nombre del producto TextLabel TextLabel Long Product Description Descripción larga del producto Package Selection Selección de paquetes Please pick a product from the list. The selected product will be installed. Elige un producto de la lista para instalarlo. PackageModel Name Nombre Description Descripción Page_Keyboard Form Formulario Keyboard Model: Modelo de teclado: Type here to test your keyboard Escribe aquí para probar la salida del teclado Page_UserSetup Form Formulario What is your name? ¿Cómo te llamas? Your Full Name Tu nombre completo What name do you want to use to log in? ¿Qué nombre quieres usar para iniciar sesión? login minombredeusuario What is the name of this computer? ¿Qué nombre le ponemos al equipo? <small>This name will be used if you make the computer visible to others on a network.</small> <small>Este nombre será visible al compartir cosas en red.</small> Computer Name Nombre del equipo Choose a password to keep your account safe. Elige una contraseña para proteger tu 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 hay errores de escritura. Una buena contraseña contendrá una combinación de letras, números y signos de puntuación; tiene por lo menos ocho caracteres y hay que cambiarla cada cierto tiempo.</small> Password Contraseña Repeat Password Repite la contraseña When this box is checked, password-strength checking is done and you will not be able to use a weak password. Cuando se marca esta casilla se comprueba la seguridad de la contraseña y no se podrá usar una débil. Require strong passwords. Requiere contraseñas fuertes. Log in automatically without asking for the password. Iniciar sesión automáticamente sin pedir la contraseña Use the same password for the administrator account. Utilizar la misma contraseña para la cuenta de administrador. Choose a password for the administrator account. Elige una contraseña para la cuenta de administrador. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Escribe dos veces la contraseña para comprobar si tiene errores.</small> PartitionLabelsView Root Raíz Home Datos de usuario Boot Arranque EFI system Sistema EFI Swap Swap New partition for %1 Nueva partición de %1 New partition Nueva partición %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 Etiqueta del sistema de archivos 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 Eliminar grupo de volúmenes I&nstall boot loader on: I&nstalar gestor de arranque en: Are you sure you want to create a new partition table on %1? ¿Estás seguro de que quieres crear una nueva tabla de particiones en %1? Can not create new partition No se pudo crear una partición nueva The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. La tabla de particiones en %1 ya tiene %2 particiones primarias, y no se puede añadir ninguna más. Quita una partición primaria y sustitúyela por una extendida para poder añadir particiones lógicas en su interior. PartitionViewStep Gathering system information... Recogiendo información sobre el sistema... Partitions Particiones Unsafe partition actions are enabled. Se han activado las particiones inseguras. Partitioning is configured to <b>always</b> fail. Se ha configurado el particionado para que falle <b>siempre</b>. No partitions will be changed. No se cambiará ninguna partición. Current: Ahora: After: Después: No EFI system partition configured No hay una partición del sistema EFI configurada EFI system partition configured incorrectly La partición del sistema EFI no se ha configurado bien An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. Se necesita una partición EFI para arrancar %1.<br/><br/>Para establecer una partición EFI vuelve atrás y selecciona o crea un sistema de archivos adecuado. The filesystem must be mounted on <strong>%1</strong>. El sistema de archivos debe estar montado en <strong>%1</strong>. The filesystem must have type FAT32. El sistema de archivos debe ser de tipo FAT32. The filesystem must be at least %1 MiB in size. El sistema de archivos debe tener al menos %1 MiB de tamaño. The filesystem must have flag <strong>%1</strong> set. El sistema de archivos debe tener establecido el indicador <strong>%1.</strong> You can continue without setting up an EFI system partition but your system may fail to start. Puedes seguir con la instalación sin haber establecido una partición del sistema EFI, pero puede que el sistema no arranque. Option to use GPT on BIOS Opción para usar GPT en BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Una tabla de particiones GPT es lo preferible en casi todos los casos. Este instalador también la admite para los sistemas más antiguos basados en arranque por BIOS.<br/><br/>Para configurar una partición GPT en BIOS, (si aún no lo has hecho) vuelve atrás y configura la tabla de particiones como GPT, luego crea una partición sin formato de 8 MB con el indicador <strong>bios_grub</strong> marcado.<br/><br/>Se necesita una partición de 8 MB sin formatear para arrancar %1 en un sistema BIOS con GPT. Boot partition not encrypted Partición de arranque sin cifrar A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Se estableció una partición de arranque aparte junto con una partición raíz cifrada, pero la partición de arranque no está cifrada.<br/><br/>Hay consideraciones de seguridad con esta clase de instalación, porque los ficheros de sistema importantes se mantienen en una partición no cifrada.<br/>Puede continuar si lo desea, pero el desbloqueo del sistema de ficheros ocurrirá más tarde durante el arranque del sistema.<br/>Para cifrar la partición de arranque, retroceda y vuelva a crearla, seleccionando <strong>Cifrar</strong> en la ventana de creación de la partición. has at least one disk device available. tiene al menos un dispositivo de disco disponible. There are no partitions to install on. No hay particiones donde instalar. PlasmaLnfJob Plasma Look-and-Feel Job Tarea de aspecto de Plasma Could not select KDE Plasma Look-and-Feel package No se pudo seleccionar el paquete de aspecto de KDE Plasma PlasmaLnfPage Form Formulario Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Elige un aspecto para el escritorio KDE Plasma. También puedes omitir este paso y configurar la apariencia una vez el sistema esté configurado. Al hacer clic en cualquiera de los elementos verás una vista previa del estilo. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Elige un aspecto para el escritorio KDE Plasma. También puedes omitir este paso y configurar la apariencia una vez el sistema esté instalado. Al hacer clic en cualquiera de los elementos verás una vista previa del estilo. PlasmaLnfViewStep Look-and-Feel Apariencia PreserveFiles Saving files for later ... Guardando archivos para más tarde... No files configured to save for later. No hay archivos configurados para guardarse más tarde. Not all of the configured files could be preserved. No se pudieron conservar todos los archivos configurados. ProcessResult There was no output from the command. La orden no ha proporcionado información de salida. Output: Información de salida: External command crashed. El programa externo se ha colgado, fallando de forma inesperada. Command <i>%1</i> crashed. El programa externo se ha colgado al llamarlo con <i>%1</i>. External command failed to start. El programa externo no se ha podido iniciar. Command <i>%1</i> failed to start. El programa externo <i>%1</i> no se ha podido iniciar. Internal error when starting command. Se ha producido un error interno al iniciar el programa. Bad parameters for process job call. Parámetros erróneos en la llamada al proceso. External command failed to finish. El programa externo no se ha podido terminar. Command <i>%1</i> failed to finish in %2 seconds. El programa externo <i>%1</i> no ha podido terminar en %2 segundos. External command finished with errors. El programa externo ha terminado, pero devolviendo errores. Command <i>%1</i> finished with exit code %2. El programa externo <i>%1</i> ha terminado con un código de salida %2. QObject %1 (%2) %1 (%2) unknown desconocido extended extendido unformatted sin formato swap swap Default Predeterminado File not found No se ha encontrado el archivo Path <pre>%1</pre> must be an absolute path. La ruta <pre>%1</pre> debe ser absoluta. Directory not found No se ha encontrado la carpeta Could not create new random file <pre>%1</pre>. No se ha podido crear nuevo archivo temporal al azar «<pre>%1</pre>». No product Sin producto No description provided. No se ha proporcionado ninguna descripción. (no mount point) (sin punto de montaje) Unpartitioned space or unknown partition table Espacio no particionado o tabla de partición desconocida Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p>El equipo no cumple con alguno de los requisitos recomendados para configurar %1.<br/> Se puede continuar con la configuración, pero puede que ciertas funciones no estén disponibles.</p> RemoveUserJob Remove live user from target system Borrar el usuario temporal («live») del sistema a instalar RemoveVolumeGroupJob Remove Volume Group named %1. Quitar el grupo de volumen denominado «%1». Remove Volume Group named <strong>%1</strong>. Quitar el grupo de volumen denominado «<strong>%1</strong>». The installer failed to remove a volume group named '%1'. El instalador no pudo eliminar el grupo de volúmenes denominado «%1». ReplaceWidget Form Formulario Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Seleccione dónde instalar %1<br/><font color="red">Atención: </font>esto borrará todos sus archivos en la partición seleccionada. The selected item does not appear to be a valid partition. El elemento seleccionado no parece ser una partición válida. %1 cannot be installed on empty space. Please select an existing partition. %1 no se puede instalar en el espacio vacío. Por favor, seleccione una partición existente. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 no se puede instalar en una partición extendida. Por favor, seleccione una partición primaria o lógica existente. %1 cannot be installed on this partition. %1 no se puede instalar en esta partición. Data partition (%1) Partición de datos (%1) Unknown system partition (%1) Partición desconocida del sistema (%1) %1 system partition (%2) %1 partición del sistema (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partición %1 es demasiado pequeña para %2. Por favor, seleccione una participación con capacidad para al menos %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>No se puede encontrar una partición de sistema EFI en ninguna parte de este sistema. Por favor, retroceda y use el particionamiento manual para establecer %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 se instalará en %2.<br/><font color="red">Advertencia: </font>Todos los datos en la partición %2 se perderán. The EFI system partition at %1 will be used for starting %2. La partición del sistema EFI en %1 se utilizará para iniciar %2. EFI system partition: Partición del sistema EFI: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>El equipo no cumple con los requisitos mínimos para instalar %1.<br/> La instalación no puede continuar.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p>El equipo no cumple con alguno de los requisitos recomendados para configurar %1.<br/> Se puede continuar con la configuración, pero puede que ciertas funciones no estén disponibles.</p> ResizeFSJob Resize Filesystem Job Tarea de redimensionamiento de sistema de archivos Invalid configuration Configuración no válida The file-system resize job has an invalid configuration and will not run. La tarea de redimensionamiento del sistema de archivos no posee una configuración válida y no se ejecutará. KPMCore not Available KPMCore no disponible Calamares cannot start KPMCore for the file-system resize job. Calamares no puede iniciar KPMCore para la tarea de redimensionamiento del sistema de archivos. Resize Failed Falló el redimiensionamiento The filesystem %1 could not be found in this system, and cannot be resized. No se encontró en este sistema el sistema de archivos %1, por lo que no puede redimensionarse. The device %1 could not be found in this system, and cannot be resized. No se encontró en este sistema el dispositivo %1, por lo que no puede redimensionarse. The filesystem %1 cannot be resized. No puede redimensionarse el sistema de archivos %1. The device %1 cannot be resized. No puede redimensionarse el dispositivo %1. The filesystem %1 must be resized, but cannot. Es necesario redimensionar el sistema de archivos %1 pero no es posible hacerlo. The device %1 must be resized, but cannot Es necesario redimensionar el dispositivo %1 pero no es posible hacerlo. ResizePartitionJob Resize partition %1. Redimensionar partición %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Cambiar tamaño de la <strong>%2MiB</strong> partición <strong>%1</strong> a <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. Cambiando tamaño de la %2MiB partición %1 a %3MiB. The installer failed to resize partition %1 on disk '%2'. El instalador ha fallado a la hora de reducir la partición %1 en el disco '%2'. 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 denominado «<strong>%1</strong>» de «<strong>%2</strong>» a «<strong>%3</strong>». The installer failed to resize a volume group named '%1'. El instalador no pudo redimensionar el grupo de volúmenes denominado «%1». ResultsListDialog For best results, please ensure that this computer: Para un mejor desempeño se recomienda que este equipo: System requirements Requisitos del sistema 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. Establecer indicadores en la %1MiB %2 partición.. Set flags on new partition. Establecer indicadores en una nueva partición. Clear flags on partition <strong>%1</strong>. Limpiar indicadores en la partición <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Borrar indicadores en la %1MiB <strong>%2</strong> partición. Clear flags on new partition. Limpiar indicadores en la nueva partición. Flag partition <strong>%1</strong> as <strong>%2</strong>. Indicar partición <strong>%1</strong> como <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Marcar %1MiB <strong>%2</strong> partición como <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Indicar nueva partición como <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Limpiando indicadores en la partición <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Borrando marcadores en la %1MiB <strong>%2</strong> partición. Clearing flags on new partition. Limpiando indicadores en la nueva partición. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Estableciendo indicadores <strong>%2</strong> en la partición <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Estableciendo indicadores <strong>%3</strong> en la %1MiB <strong>%2</strong> partición. Setting flags <strong>%1</strong> on new partition. Estableciendo indicadores <strong>%1</strong> en una nueva partición. The installer failed to set flags on partition %1. El instalador no pudo establecer indicadores en la partición %1. 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. Preparando grupos. Could not create groups in target system No se pudieron crear grupos en el sistema destino These groups are missing in the target system: %1 Estos grupos faltan en el sistema de destino: %1 SetupSudoJob Configure <pre>sudo</pre> users. Configurar usuarios <pre>sudo</pre> . Cannot chmod sudoers file. No es posible modificar los permisos de sudoers. Cannot create sudoers file for writing. No es posible crear el archivo de escritura para sudoers. ShellProcessJob Shell Processes Job Tarea de procesos de la «shell» SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK &Aceptar &Yes &Sí &No &No &Cancel &Cancelar &Close &Cerrar TrackingInstallJob Installation feedback Respuesta de la instalación Sending installation feedback. Enviar respuesta de la instalación Internal error in install-tracking. Error interno en el seguimiento-de-instalación. HTTP request timed out. La petición HTTP agotó el tiempo de espera. TrackingKUserFeedbackJob KDE user feedback comentarios de los usuarios de KDE Configuring KDE user feedback. Configuración de los comentarios de los usuarios de KDE. Error in KDE user feedback configuration. Error en la configuración de los comentarios de los usuarios de KDE. Could not configure KDE user feedback correctly, script error %1. No se pudieron configurar correctamente los comentarios de los usuarios de KDE, error de script %1. Could not configure KDE user feedback correctly, Calamares error %1. No se pudieron configurar correctamente los comentarios de los usuarios de KDE, error de Calamares %1. TrackingMachineUpdateManagerJob Machine feedback Respuesta de la máquina Configuring machine feedback. Configurando respuesta de la máquina. Error in machine feedback configuration. Error en la configuración de la respuesta de la máquina. Could not configure machine feedback correctly, script error %1. No se pudo configurar correctamente la respuesta de la máquina, error de script %1. Could not configure machine feedback correctly, Calamares error %1. No se pudo configurar correctamente la respuesta de la máquina, error de Calamares %1. 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>Haz clic aquí para <span style=" font-weight:600;">no enviar información</span> sobre tu instalación.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Haz clic aquí para saber más sobre el sistema de opinión de 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. El seguimiento ayuda a %1 a ver con qué frecuencia se instala, en qué hardware se instala y qué aplicaciones se usan. Para ver lo que se envía, haz clic en el icono de ayuda en cada sección. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. Al seleccionar esto, enviará información sobre su instalación y hardware. Esta información solo se enviará <b>una vez</b> después de finalizar la instalación. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. Al seleccionar esto, enviará periódicamente información sobre la instalación, el hardware y las aplicaciones de su <b>máquina</b> a %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. Al seleccionar esto, enviará regularmente información sobre su instalación de <b>usuario</b>, hardware, aplicaciones y patrones de uso de aplicaciones a %1. TrackingViewStep Feedback Opinar UmountJob Unmount file systems. Desmontar los sistemas de archivos. No target system available. No parece que haya ningún sistema instalable disponible. No rootMountPoint is set. «rootMountPoint» no definido. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si va a haber más de una persona usando el equipo se pueden crear otras cuentas de usuario una vez terminado el asistente de configuración.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si va a haber más de una persona usando el equipo se pueden crear otras cuentas de usuario una vez instalado.</small> UsersQmlViewStep Users Usuarios UsersViewStep Users Usuarios VariantModel Key Column header for key/value Clave Value Column header for key/value Valor VolumeGroupBaseDialog Create Volume Group Crear grupo de volúmenes List of Physical Volumes Lista de volúmenes físicos Volume Group Name: Nombre del grupo de volúmenes: Volume Group Type: Tipo del grupo de volúmenes: Physical Extent Size: Tamaño de sector físico: MiB MiB Total Size: Tamaño total: Used Size: Tamaño utilizado Total Sectors: Sectores totales: Quantity of LVs: Cantidad de LVs: WelcomePage Form Formulario Select application and system language Elige el idioma para las aplicaciones y el sistema Open donations website Abrir la página web de donaciones &Donate &Donar Open help and support website Abrir el sitio web de ayuda y soporte &Support &Ayuda Open issues and bug-tracking website Sitio web de problemas y mejoras &Known issues &Problemas conocidos Open release notes website Abrir la web con las notas de lanzamiento &Release notes &Notas de publicación %1 support %1 ayuda About %1 setup Acerca del configurador de %1 About %1 installer Acerca del instalador %1 WelcomeQmlViewStep Welcome Te damos la bienvenida WelcomeViewStep Welcome Te damos la bienvenida ZfsJob Create ZFS pools and datasets Crear grupos y conjuntos de datos ZFS Failed to create zpool on Error al crear el «zpool» en Configuration Error Error de configuración No partitions are available for ZFS. No hay particiones disponibles para ZFS. Internal data missing Faltan datos internos Failed to create zpool Error al crear el «zpool» Failed to create dataset No se pudo crear el «dataset» The output was: El programa ha devuelto: calamares-sidebar About Acerca de Debug Depurar Show information about Calamares Mostrar información acerca de Calamares Show debug information Ver la información de depuración. finishedq Installation Completed Instalación completada %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Se ha instalado %1 en tu equipo. A partir de ahora puedes reiniciar para empezar a usar el sistema operativo nuevo o seguir usando el entorno temporal («live»). Close Installer Cerrar el instalador Restart System Reiniciar el sistema <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Un registro completo de la instalación está disponible como «installation.log» en la carpeta personal del usuario temporal. <br/> Este registro también se copia en la ruta «/var/log/installation.log» del sistema a instalar. finishedq@mobile Installation Completed Instalación completada %1 has been installed on your computer.<br/> You may now restart your device. Se ha instalado %1 en tu equipo.<br/> Ya puedes reiniciar para empezar a usar tu nuevo sistema operativo. Close Cerrar Restart Reiniciar i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Idiomas</h1></br> La configuración regional del sistema afecta al idioma y al tipo de caracteres que se muestran en algunos elementos del terminal. El modo actual está establecido a «<strong>%1</strong>». <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Configuración regional</h1> </br> La configuración regional del sistema afecta el formato de números y fechas. La configuración actual es <strong>%1</strong>. Back Atrás keyboardq To activate keyboard preview, select a layout. Para previsualizar el teclado elige una distribución. Keyboard Model: Modelo de teclado: Layouts Distribuciones Type here to test your keyboard Escribe aquí para probar la salida del teclado Variants Variantes localeq Change Modificar notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Estos son ejemplos de notas de publicación.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice es una suite ofimática potente y gratuita, utilizada por millones de personas en todo el mundo. Incluye varias aplicaciones que la convierten en la suite ofimática libre y de código abierto más versátil del mercado.<br/> Opción predeterminada. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Si no quieres instalar un paquete de ofimática cámbialo abajo. Siempre se puede instalar uno (o más de uno) a través del administrador de paquetes cuando surja la necesidad. No Office Suite Sin paquete de ofimática Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Crea una instalación de escritorio mínima, evitando todas las aplicaciones extras para poder elegir más adelante qué te gustaría añadir al sistema. En este modo no habrá paquete de ofimática, ni reproductores multimedia, ni visor de imágenes ni soporte de impresión. Solo incluye un escritorio, un explorador de archivos, un administrador de paquetes, un editor de texto y un navegador web simple. Simple. Minimal Install Instalación mínima Please select an option for your install, or use the default: LibreOffice included. Elige una de las opciones o deja la que viene de serie: con LibreOffice. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Este es un archivo QML de ejemplo, que muestra opciones en RichText con contenido Flickable.</p> <p>QML con RichText puede usar etiquetas HTML, el contenido móvil es útil para pantallas táctiles.</p> <p><b>Este es un texto en negrita</b></p> <p><i>Este es el texto en cursiva</i></p> <p><u>Este es un texto subrayado</u></p> <p><center>Este texto se alineará al centro.</center></p> <p><s>esto es tachado</s></p> <p>Ejemplo de código: <code>ls -l /casa</code></p> <p><b>Listas:</b></p> <ul> <li>Sistemas de CPU Intel</li> <li>Sistemas de CPU AMD</li> </ul> <p>La barra de desplazamiento vertical es ajustable, el ancho actual se establece en 10.</p> Back Atrás usersq Pick your user name and credentials to login and perform admin tasks Elige un nombre de usuario con contraseña para iniciar sesión y poder hacer tareas de administración What is your name? Nombre Your Full Name Tu nombre completo What name do you want to use to log in? ¿Qué nombre quieres usar para iniciar sesión? Login Name Nombre de inicio de sesión If more than one person will use this computer, you can create multiple accounts after installation. Si va a haber más de una persona usando el equipo se pueden crear otras cuentas de usuario una vez terminada la instalación. Only lowercase letters, numbers, underscore and hyphen are allowed. Solo se pueden poner letras minúsculas, números y guiones bajos y normales. root is not allowed as username. No se puede poner «root» como nombre de usuario. What is the name of this computer? ¿Qué nombre le ponemos al equipo? Computer Name Nombre del equipo This name will be used if you make the computer visible to others on a network. Este nombre será visible al compartir cosas en red. localhost is not allowed as hostname. No se puede poner «localhost» como nombre del equipo. Choose a password to keep your account safe. Elige una contraseña para mantener tu cuenta segura. Password Contraseña Repeat Password Repite la contraseña Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Introduce la misma contraseña dos veces, para que se pueda verificar si hay errores de escritura. Una buena contraseña contendrá una combinación de letras, números y puntuación; tiene que tener al menos ocho caracteres y cambiarse de vez en cuando. Validate passwords quality Verificar la fortaleza de contraseña When this box is checked, password-strength checking is done and you will not be able to use a weak password. Cuando se marca esta casilla se verificará la seguridad de la contraseña y no se podrá usar una contraseña débil. Log in automatically without asking for the password Iniciar sesión automáticamente sin pedir la contraseña Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Solo se permiten letras, números, guiones bajos y guiones, con un mínimo de dos caracteres. Reuse user password as root password Reutilizar la contraseña para el usuario «root» Use the same password for the administrator account. Utiliza la misma contraseña para la cuenta de administrador. Choose a root password to keep your account safe. Elige una contraseña segura para la cuenta de administración «root». Root Password Contraseña de «root» Repeat Root Password Repetir la contraseña de «root» Enter the same password twice, so that it can be checked for typing errors. Introduce la misma contraseña dos veces para verificar si hay errores de escritura. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Te damos la bienvenida al instalador de <quote>%2</quote></h3> <p>Este programa te hará algunas preguntas y configurará %1 en tu equipo.</p> Support Soporte Known issues Problemas conocidos Release notes Notas de lanzamiento Donate Donar calamares-calamares-2d126ae/lang/calamares_es_MX.ts000066400000000000000000006461071430147706700223410ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Borrar puntos de montaje para operaciones de particionamiento en %1 Clearing mounts for partitioning operations on %1. Borrando puntos de montaje para operaciones de particionamiento en %1. Cleared all mounts for %1 Puntos de montaje despejados para %1 ClearTempMountsJob Clear all temporary mounts. Despejar todos los puntos de montaje temporales. Clearing all temporary mounts. Despejando todos los 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. Packages Install option: <strong>%1</strong> None Summary Resumen This is an overview of what will happen once you start the setup procedure. Esta es una descripción general de lo que sucederá una vez que comience el procedimiento de configuración. This is an overview of what will happen once you start the install procedure. Esto es un resumen de lo que pasará una vez que inicie el procedimiento de instalación. ContextualProcessJob Contextual Processes Job Tareas de procesos contextuales CreatePartitionDialog Create a Partition Crear una Partición Si&ze: Ta&maño: MiB MiB Partition &Type: &Tipo de partición: Primar&y E&xtended E&xtendida Fi&le System: Sis&tema de Archivos: LVM LV name Nombre del LVM LV. &Mount Point: Punto de &Montaje: Flags: Indicadores: Label for the filesystem FS Label: En&crypt En&criptar Logical Lógica Primary Primaria GPT GPT Mountpoint already in use. Please select another one. Punto de montaje ya esta en uso. Por favor seleccione otro. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Crear nueva %2MiB partición en %4 (%3) con el sistema de archivos %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Crear nueva<strong>%2MiB</strong> partición en<strong>%2MiB</strong> (%3) con el sistema de archivos <strong>%1</strong>. Creating new %1 partition on %2. Creando nueva partición %1 en %2 The installer failed to create partition on disk '%1'. El instalador falló en crear la partición en el disco '%1'. 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 Con&tent: &Keep &Conservar Format Formato Warning: Formatting the partition will erase all existing data. Advertencia: Formatear la partición borrara todos los datos existentes. &Mount Point: Punto de &Montaje Si&ze: Tam&año: MiB MiB Fi&le System: Sis&tema de Archivos: Flags: Indicadores: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formulario En&crypt system En&criptar sistema Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Contraseña segura Confirm passphrase Confirmar contraseña segura Please enter the same passphrase in both boxes. Favor ingrese la misma contraseña segura en ambas casillas. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Fijar información de la partición. Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Instalar %1 en <strong>nueva</strong> %2 partición de sistema. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Configurando la swap encriptada. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formulario <h1>License Agreement</h1> I accept the terms and conditions above. Acepto los terminos y condiciones anteriores. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Actual: After: Después: No EFI system partition configured Sistema de partición EFI no configurada EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted 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 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 StandardButtons &OK &OK &Yes &Si &No &No &Cancel &Cancelar &Close &Cerrar TrackingInstallJob Installation feedback Retroalimentacion de la instalación Sending installation feedback. Envío de retroalimentación de instalación. Internal error in install-tracking. Error interno en el seguimiento de instalación. HTTP request timed out. Tiempo de espera en la solicitud HTTP agotado. 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 UmountJob Unmount file systems. Desmontar sistemas de archivo. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si más de una persona usará esta computadora, puede crear múltiples cuentas después de la configuración</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si más de una persona usará esta computadora, puede crear varias cuentas después de la instalación.</small> UsersQmlViewStep 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 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 %1 support %1 Soporte About %1 setup Acerca de la configuración %1 About %1 installer Acerca del instalador %1 WelcomeQmlViewStep Welcome Bienvenido WelcomeViewStep Welcome Bienvenido ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Error de configuración No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Depurar Show information about Calamares Show debug information Mostrar información de depuración finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Modelo de teclado: Layouts Type here to test your keyboard Teclee aquí para probar su teclado Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? ¿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> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_es_PR.ts000066400000000000000000005731571430147706700223420ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed 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. Packages Install option: <strong>%1</strong> None Summary Resumen This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formulario En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formulario <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form 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 ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form 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 UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Formulario Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_et.ts000066400000000000000000006360261430147706700217350ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Tühjenda monteeringud partitsioneerimistegevustes %1 juures Clearing mounts for partitioning operations on %1. Tühjendan monteeringud partitsioneerimistegevustes %1 juures. Cleared all mounts for %1 Kõik monteeringud tühjendatud %1 jaoks ClearTempMountsJob Clear all temporary mounts. Tühjenda kõik ajutised monteeringud. Clearing all temporary mounts. Tühjendan kõik ajutised monteeringud. 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. Packages Install option: <strong>%1</strong> None Summary Kokkuvõte This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. See on ülevaade sellest mis juhtub, kui alustad paigaldusprotseduuri. ContextualProcessJob Contextual Processes Job Kontekstipõhiste protsesside töö CreatePartitionDialog Create a Partition Loo sektsioon Si&ze: Suurus: MiB MiB Partition &Type: Partitsiooni tüüp: Primar&y E&xtended %Laiendatud Fi&le System: %Failisüsteem: LVM LV name LVM LV nimi &Mount Point: &Monteerimispunkt: Flags: Sildid: Label for the filesystem FS Label: En&crypt &Krüpti Logical Loogiline Primary Peamine GPT GPT Mountpoint already in use. Please select another one. Monteerimispunkt on juba kasutusel. Palun vali mõni teine. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Loon uut %1 partitsiooni kettal %2. The installer failed to create partition on disk '%1'. Paigaldaja ei suutnud luua partitsiooni kettale "%1". 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 Con&tent: &Keep &Säilita Format Vorminda Warning: Formatting the partition will erase all existing data. Hoiatus: Partitsiooni vormindamine tühjendab kõik olemasolevad andmed. &Mount Point: &Monteerimispunkt: Si&ze: Suurus: MiB MiB Fi&le System: %Failisüsteem: Flags: Sildid: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Form En&crypt system Krüpti süsteem Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Salaväljend Confirm passphrase Kinnita salaväljendit Please enter the same passphrase in both boxes. Palun sisesta sama salaväljend mõlemisse kasti. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Sea partitsiooni teave Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Paigalda %1 <strong>uude</strong> %2 süsteemipartitsiooni. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Form <h1>License Agreement</h1> I accept the terms and conditions above. Ma nõustun alljärgevate tingimustega. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Hetkel: After: Pärast: No EFI system partition configured EFI süsteemipartitsiooni pole seadistatud EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted 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 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 StandardButtons &OK &OK &Yes &Jah &No &Ei &Cancel &Tühista &Close &Sulge TrackingInstallJob Installation feedback Paigalduse tagasiside Sending installation feedback. Saadan paigalduse tagasisidet. Internal error in install-tracking. Paigaldate jälitamisel esines sisemine viga. HTTP request timed out. HTTP taotlusel esines ajalõpp. 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 UmountJob Unmount file systems. Haagi failisüsteemid lahti. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep 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 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 %1 support %1 tugi About %1 setup About %1 installer Teave %1 paigaldaja kohta WelcomeQmlViewStep Welcome Tervist WelcomeViewStep Welcome Tervist ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Silu Show information about Calamares Show debug information Kuva silumisteavet finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Klaviatuurimudel: Layouts Type here to test your keyboard Kirjuta siia, et testida oma klaviatuuri Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? 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> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_eu.ts000066400000000000000000006171031430147706700217310ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Garbitu muntaketa puntuak partizioak egiteko %1 -(e)an. Clearing mounts for partitioning operations on %1. Garbitzen muntaketa puntuak partizio eragiketak egiteko %1 -(e)an. Cleared all mounts for %1 Muntaketa puntu guztiak garbitu dira %1 -(e)an ClearTempMountsJob Clear all temporary mounts. Garbitu aldi-baterako muntaketa puntu guztiak. Clearing all temporary mounts. Garbitzen aldi-baterako muntaketa puntu guztiak. 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. Packages Install option: <strong>%1</strong> None Summary Laburpena This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Sortu partizio bat Si&ze: &Tamaina: MiB MiB Partition &Type: PartizioMo&ta: Primar&y E&xtended &Hedatua Fi&le System: Fi&txategi-Sistema: LVM LV name LVM LV izena &Mount Point: &Muntatze Puntua: Flags: Banderak: Label for the filesystem FS Label: En&crypt En%kriptatu Logical Logikoa Primary Primarioa GPT GPT Mountpoint already in use. Please select another one. Muntatze-puntua erabiltzen. Mesedez aukeratu beste bat. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. %1 partizioa berria sortzen %2n. The installer failed to create partition on disk '%1'. Huts egin du instalatzaileak '%1' diskoan partizioa sortzen. 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 Con&tent: &Keep M&antendu Format Formateatu Warning: Formatting the partition will erase all existing data. Oharra: Partizioa formateatzean dauden datu guztiak ezabatuko dira. &Mount Point: &Muntatze Puntua: Si&ze: &Tamaina: MiB MiB Fi&le System: Fi&txategi-Sistema: Flags: Banderak: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formulario En&crypt system Sistema en%kriptatua Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Pasahitza Confirm passphrase Berretsi pasahitza Please enter the same passphrase in both boxes. Mesedez sartu pasahitz berdina bi kutxatan. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Ezarri partizioaren informazioa Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Instalatu %1 sistemako %2 partizio <strong>berrian</strong>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formulario <h1>License Agreement</h1> I accept the terms and conditions above. Goiko baldintzak onartzen ditut. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Unekoa: After: Ondoren: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form 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 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) StandardButtons &OK &Ados &Yes &Bai &No &Ez &Cancel &Utzi &Close &Itxi 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 UmountJob Unmount file systems. Fitxategi sistemak desmuntatu. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep 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 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 %1 support %1 euskarria About %1 setup About %1 installer %1 instalatzaileari buruz WelcomeQmlViewStep Welcome Ongi etorri WelcomeViewStep Welcome Ongi etorri ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Honi buruz Debug Show information about Calamares Show debug information Erakutsi arazte informazioa finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back Atzera keyboardq To activate keyboard preview, select a layout. Keyboard Model: Teklatu Modeloa: Layouts Type here to test your keyboard Idatzi hemen zure teklatua frogatzeko Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back 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> Support Known issues Release notes Donate Egin dohaintza calamares-calamares-2d126ae/lang/calamares_fa.ts000066400000000000000000007457701430147706700217220ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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. کلامارس کرش میکنه، تا Dr. Konqui بتونه بهش یک نگاهی بندازه. Reloads the stylesheet from the branding directory. استایل های مسیر branding را بارگیری مجدد می‌کند. Uploads the session log to the configured pastebin. گزارش نشست را به pastebin تنظیم شده بارگذاری میکند. Send Session Log ارسال گزارش نشست Reload Stylesheet بارگزاری مجدد برگه‌شیوه Displays the tree of widget names in the log (for stylesheet debugging). نمایش درخت نام های ویجت ها در گزارش (برای دیباگ استایل ها). Widget Tree درخت ابزارک‌ها Debug information اطّلاعات اشکال‌زدایی Calamares::ExecutionViewStep Set up راه‌اندازی Install نصب Calamares::FailJob Job failed (%1) کار شکست خورد. (%1) Programmed job failure was explicitly requested. عدم موÙقیت کار برنامه ریزی شده به صورت صریح درخواست شد Calamares::JobThread Done انجام شد. Calamares::NamedJob Example job (%1) کار نمونه (%1) Calamares::ProcessJob Run command '%1' in target system. دستور '%1' را در سیستم هد٠اجرا کنید Run command '%1'. دستور '%1' را اجرا کنید Running command %1 %2 اجرای دستور %1 %2 Calamares::PythonJob Running %1 operation. اجرا عملیات %1 Bad working directory path مسیر شاخهٔ جاری بد Working directory %1 for python job %2 is not readable. شاخهٔ کاری %1 برای کار پایتونی %2 خواندنی نیست Bad main script file پروندهٔ کدنوشتهٔ اصلی بد Main script file %1 for python job %2 is not readable. پروندهٔ کدنویسهٔ اصلی %1 برای کار پایتونی %2 قابل خواندن نیست. Boost.Python error in job "%1". خطای Boost.Python در کار %1. Calamares::QmlViewStep Loading ... در حال بارگذاری ... QML Step <i>%1</i>. مرحله QML <i>%1</i>. Loading failed. بارگذاری شکست خورد. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. بررسی الزامات برای ماژول٪ 1 کامل شد. Waiting for %n module(s). منتظر ماندن برای n% ماژول منتظر ماندن برای n% ماژول (ها). (%n second(s)) (%n ثانیه) (%n ثانیه) System-requirements checking is complete. Ú†Ú© کردن نیازمندی‌های سیستم تمام شد. Calamares::ViewManager Setup Failed راه‌اندازی شکست خورد. Installation Failed نصب شکست خورد Error خطا &Yes &بله &No &خیر &Close &بسته Install Log Paste URL Install Log Paste URL The upload was unsuccessful. No web-paste was done. The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard گزارش نصب به پیوند زیر پست شد %1 پیوند در کلیپ برد رونگاری شد Calamares Initialization Failed راه اندازی کالاماریس شکست خورد. %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. تنظیم برچسب سامانه پرونده روی %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. شما Ù…ÛŒ توانید پارتیشن بندی دستی ایجاد یا تغییر اندازه دهید . 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/> این دستگاه Ø­Ø§ÙØ¸Ù‡ هم اکنون یک سیستم عامل روی خود دارد، اما جدول Ø§ÙØ±Ø§Ø² <strong>%1</strong> با نیاز <strong>%2</strong> Ù…ØªÙØ§ÙˆØª است. This storage device has one of its partitions <strong>mounted</strong>. این دستگاه Ø­Ø§ÙØ¸Ù‡ دارای یک Ø§ÙØ±Ø§Ø²ÛŒ بوده Ú©Ù‡ هم اکنون <strong>سوارشده</strong> است. This storage device is a part of an <strong>inactive RAID</strong> device. یکی از بخش های این دستگاه Ø­Ø§ÙØ¸Ù‡ عضوی از دستگاه <strong>RAID ØºÛŒØ±ÙØ¹Ø§Ù„</strong> است. No Swap بدون Swap Reuse Swap باز Ø§Ø³ØªÙØ§Ø¯Ù‡ از مبادله Swap (no Hibernate) مبادله (بدون خواب‌زمستانی) Swap (with Hibernate) مبادله (با خواب‌زمستانی) Swap to file مبادله به پرونده ClearMountsJob Successfully unmounted %1. %1 باموÙقیت جدا شد. Successfully disabled swap %1. سوآپ %1 باموÙقیت ØºÛŒØ±ÙØ¹Ø§Ù„ شد. Successfully cleared swap %1. سوآپ %1 باموÙقیت پاک شد. Successfully closed mapper device %1. دستگاه مپر %1 باموÙقیت بسته شد. Successfully disabled volume group %1. گروه حجمی %1 باموÙقیت ØºÛŒØ±ÙØ¹Ø§Ù„ شد. Clear mounts for partitioning operations on %1 پاک‌سازی اتّصال‌ها برای عملبات Ø§ÙØ±Ø§Ø² روی %1 Clearing mounts for partitioning operations on %1. در حال پاک‌سازی اتّصال‌ها برای عملبات Ø§ÙØ±Ø§Ø² روی %1 Cleared all mounts for %1 همهٔ اتّصال‌ها برای %1 پاک‌‌سازی شدند ClearTempMountsJob Clear all temporary mounts. پاک‌سازی همهٔ اتّصال‌های موقّتی. Clearing all temporary mounts. در حال پاک‌سازی همهٔ اتّصال‌های موقّتی. 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. '%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. Ù„Ø·ÙØ§Ù‹ محصولی را از لیست انتخاب کنید. محصول انتخاب شده نصب خواهد شد. Packages بسته‌ها Install option: <strong>%1</strong> گزینه نصب: <strong>%1</strong> None هیچ کدام Summary خلاصه This is an overview of what will happen once you start the setup procedure. این یک بررسی از مواردی Ú©Ù‡ بعد از اینکه برپایی را شروع کنید، انجام Ù…ÛŒ شوند است. This is an overview of what will happen once you start the install procedure. این یک بررسی از مواردی Ú©Ù‡ بعد از اینکه نصب را شروع کنید، انجام Ù…ÛŒ شوند است. ContextualProcessJob Contextual Processes Job پردازه های متنی CreatePartitionDialog Create a Partition ایجاد یک Ø§ÙØ±Ø§Ø² Si&ze: اندا&زه: MiB می‌ب Partition &Type: &گونهٔ Ø§ÙØ±Ø§Ø² Primar&y E&xtended &Ú¯Ø³ØªØ±Ø´â€ŒÛŒØ§ÙØªÙ‡ Fi&le System: سامانه &پرونده: LVM LV name نام حجم منطقی &Mount Point: &نقطهٔ اتّصال: Flags: پرچم‌ها: Label for the filesystem برچسب برای سامانه پرونده FS Label: برچسب سامانه پرونده: En&crypt رمز&نگاری Logical منطقی Primary اصلی GPT GPT Mountpoint already in use. Please select another one. نقطهٔ اتّصال از پیش در حال Ø§Ø³ØªÙØ§Ø¯Ù‡ است. Ù„Ø·ÙØ§Ù‹ نقطهٔ دیگری برگزینید. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. ایجاد Ø§ÙØ±Ø§Ø² %1 می‌ب جدید روی %3 (%2) با ورودی های %4. Create new %1MiB partition on %3 (%2). ایجاد Ø§ÙØ±Ø§Ø² %1 می‌ب جدید روی %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. ایچاد Ø§ÙØ±Ø§Ø² %2می‌ب جدید روی %4 (%3) با سامانهٔ پروندهٔ %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. ایجاد Ø§ÙØ±Ø§Ø² <strong>%1 می‌ب</strong> جدید روی <strong>%3</strong> (%2) با ورودی های <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). ایجاد Ø§ÙØ±Ø§Ø² <strong>%1</strong> می‌ب جدید روی <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. ایچاد Ø§ÙØ±Ø§Ø² <strong>%2می‌ب</strong> جدید روی <strong>%</strong>4 (%3) با سامانهٔ پروندهٔ <strong>%</strong>1. Creating new %1 partition on %2. در حال ایجاد Ø§ÙØ±Ø§Ø² %1 جدید روی %2. The installer failed to create partition on disk '%1'. نصب کننده برای ساختن Ø§ÙØ±Ø§Ø² روی دیسک '%1' شکست خورد. CreatePartitionTableDialog Create Partition Table ایجاد جدول Ø§ÙØ±Ø§Ø² Creating a new partition table will delete all existing data on the disk. ایجاد یک جدول Ø§ÙØ±Ø§Ø² جدید، همهٔ داده‌های موجود روی دیسک را حذ٠خواهد کرد. What kind of partition table do you want to create? می‌خواهید Ú†Ù‡ جور جدول Ø§ÙØ±Ø§Ø²ÛŒ بسازید؟ Master Boot Record (MBR) رکورد راه‌اندازی اصلی (MBR) GUID Partition Table (GPT) جدول Ø§ÙØ±Ø§Ø² گاید (GPT) CreatePartitionTableJob Create new %1 partition table on %2. ایجاد جدول Ø§ÙØ±Ø§Ø² %1 جدید روی %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). ایجاد جدول Ø§ÙØ±Ø§Ø² <strong>%1</strong> جدید روی <strong>%2</strong> (%3). Creating new %1 partition table on %2. در حال ایجاد جدول Ø§ÙØ±Ø§Ø² %1 جدید روی %2. The installer failed to create a partition table on %1. نصب کننده برای ساختن جدول Ø§ÙØ±Ø§Ø² روی %1 شکست خورد. CreateUserJob Create user %1 ایجاد کاربر %1 Create user <strong>%1</strong>. ایجاد کاربر <strong>%</strong>1. 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. این یک دستگاه حلقه ای است. این یک دستگاه شبه بدون جدول پارتیشن است Ú©Ù‡ یک ÙØ§ÛŒÙ„ را به عنوان یک دستگاه بلوک قابل دسترسی Ù…ÛŒ کند. این نوع تنظیمات معمولاً Ùقط شامل یک سیستم ÙØ§ÛŒÙ„ Ù…Ù†ÙØ±Ø¯ است. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. این نصب کننده نمی تواند یک جدول پارتیشن را در دستگاه ذخیره سازی انتخاب شده تشخیص دهد. دستگاه یا جدول پارتیشن بندی ندارد ØŒ یا جدول پارتیشن خراب است یا از نوع ناشناخته ای است. این نصب کننده Ù…ÛŒ تواند یک جدول پارتیشن جدید برای شما ایجاد کند ØŒ یا به صورت خودکار یا از طریق ØµÙØ­Ù‡ پارتیشن بندی دستی. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. این نوع جدول پارتیشن بندی توصیه شده برای سیستم های مدرن است Ú©Ù‡ از محیط راه اندازی EFI شروع Ù…ÛŒ شود. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. این نوع جدول پارتیشن بندی Ùقط در سیستم های قدیمی Ú©Ù‡ از محیط راه اندازی BIOS شروع Ù…ÛŒ شوند توصیه Ù…ÛŒ شود. GPT در بیشتر موارد دیگر توصیه Ù…ÛŒ شود. هشدار: جدول پارتیشن MBR یک استاندارد منسوخ شده دوره MS-DOS است. Ùقط 4 پارتیشن اصلی ممکن است ایجاد شود Ùˆ از این 4 پارتیشن Ù…ÛŒ تواند یک پارتیشن توسعه ÛŒØ§ÙØªÙ‡ باشد ØŒ Ú©Ù‡ ممکن است به نوبه خود شامل بسیاری از موارد منطقی باشد پارتیشن بندی The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. نوع جدول پارتیشن در دستگاه ذخیره سازی انتخاب شده. تنها راه برای تغییر نوع جدول پارتیشن پاک کردن Ùˆ ایجاد مجدد جدول پارتیشن از ابتدا است ØŒ Ú©Ù‡ تمام داده های دستگاه ذخیره سازی را از بین Ù…ÛŒ برد. این نصب کننده جدول پارتیشن ÙØ¹Ù„ÛŒ را Ø­ÙØ¸ Ù…ÛŒ کند مگر اینکه شما به صراحت غیر از این را انتخاب کنید. اگر مطمئن نیستید ØŒ در سیستم های مدرن GPT ترجیح داده Ù…ÛŒ شود. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted ردشدن از نوشتن تنظیمات LUKS برای Dracut: Ø§ÙØ±Ø§Ø² "/" رمزگذاری نشده است Failed to open %1 شکست در گشودن %1 DummyCppJob Dummy C++ Job کار سی‌پلاس‌پلاس الکی EditExistingPartitionDialog Edit Existing Partition ویرایش Ø§ÙØ±Ø§Ø² موجود Con&tent: &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: برچسب سامانه پرونده: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form ÙØ±Ù… En&crypt system رمز&نگاری سامانه Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase عبارت عبور Confirm passphrase تأیید عبارت عبور Please enter the same passphrase in both boxes. Ù„Ø·ÙØ§Ù‹ عبارت عبور یکسانی را در هر دو جعبه وارد کنید. ErrorDialog Details: Would you like to paste the install log to the web? آیا مایلید Ú©Ù‡ گزارش‌ها در وب الصاق شوند؟ FillGlobalStorageJob Set partition information تنظیم اطّلاعات Ø§ÙØ±Ø§Ø² Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> نصب %1 روی سامانه Ø§ÙØ±Ø§Ø² %2 <strong>جدید</strong> با امکانات <em>%3</em>. Install %1 on <strong>new</strong> %2 system partition. نصب %1 روی سامانه Ø§ÙØ±Ø§Ø² %2 <strong>جدید</strong>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. برپایی Ø§ÙØ±Ø§Ø² <strong>جدید</strong> %2 با نقطه سوارشدن <strong>%1</strong> Ùˆ امکانات <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. برپایی Ø§ÙØ±Ø§Ø² <strong>جدید</strong> %2 با نقطه سوارشدن <strong>%1</strong> %3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. نصب %2 روی <strong>%1</strong> سامانه Ø§ÙØ±Ø§Ø² %3 با امکانات <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. برپایی %3 Ø§ÙØ±Ø§Ø² <strong>%1</strong> با نقطه سوارشدن <strong>%2</strong> Ùˆ امکانات <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. برپایی %3 Ø§ÙØ±Ø§Ø² <strong>%1</strong> با نقطه سوارشدن <strong>%2</strong> %4. Install %2 on %3 system partition <strong>%1</strong>. نصب %2 روی <strong>%1</strong> سامانه Ø§ÙØ±Ø§Ø² %3. Install boot loader on <strong>%1</strong>. نصب بوت لودر روی <strong>%1</strong>. Setting up mount points. برپایی نقطه‌های اتّصال FinishedPage Form ÙØ±Ù… &Restart now &راه‌اندازی دوباره <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. تمام شد.Ùª 1 در رایانه شما تنظیم شده است. اکنون Ù…ÛŒ توانید از سیستم جدید خود Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> هنگامی Ú©Ù‡ این کادر علامت گذاری شد ØŒ هنگامی Ú©Ù‡ بر روی انجام شده کلیک کنید یا برنامه برپاکننده را ببندید ØŒ سیستم شما Ø¨Ù„Ø§ÙØ§ØµÙ„Ù‡ راه اندازی Ù…ÛŒ شود. <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>همه‌چیز انجام شد.</h1><br/>%1 روی رایانه‌تان نصب شد.<br/>ممکن است بخواهید به سامانهٔ جدیدتان وارد شده تا به Ø§Ø³ØªÙØ§Ø¯Ù‡ از محیط زندهٔ %2 ادامه دهید. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> هنگامی Ú©Ù‡ این کادر علامت گذاری شد ØŒ هنگامی Ú©Ù‡ بر روی انجام شده کلیک کنید یا نصب را ببندید ØŒ سیستم شما Ø¨Ù„Ø§ÙØ§ØµÙ„Ù‡ راه اندازی Ù…ÛŒ شود. <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>برپایی شکست خورد</h1><br/>%1 روی رایانه شما برپا نشد.<br/>پیام خطا: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>نصب شکست خورد</h1><br/>%1 روی رایانه شما نصب نشد.<br/>پیام خطا: %2. FinishedQmlViewStep Finish پایان FinishedViewStep Finish پایان FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. ÙØ±Ù…ت Ø§ÙØ±Ø§Ø² %1 (سامانه پروانه: %2ØŒ اندازه: %3مبی‌بایت) روی %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. ÙØ±Ù…ت Ø§ÙØ±Ø§Ø²<strong>%1</strong> با سایز <strong>%3مبی‌بایت</strong> با سامانه پرونده <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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) دارد نصب‌کننده را به عنوان یک مدیر (ریشه) اجرا می‌کند The setup program is not running with administrator rights. برنامهٔ برپایی با دسترسی‌های مدیر اجرا نشده‌است. The installer is not running with administrator rights. برنامهٔ نصب کننده با دسترسی‌های مدیر اجرا نشده‌است. has a screen large enough to show the whole installer ØµÙØ­Ù‡â€ŒØ§ÛŒ با بزرگی کاÙÛŒ برای نمایش تمام نصب‌کننده دارد The screen is too small to display the setup program. ØµÙØ­Ù‡ برای نمایش برنامهٔ برپایی خیلی Ú©ÙˆÚ†Ú© است. The screen is too small to display the installer. ØµÙØ­Ù‡ برای نمایش نصب‌کننده خیلی Ú©ÙˆÚ†Ú© است. HostInfoJob Collecting information about your machine. در حال جمع‌آوری اطّلاعات دربارهٔ دستگاهتان. IDJob OEM Batch Identifier شناسه Batch اوئی‌ام Could not create directories <code>%1</code>. نمی‌توان شاخه‌های <code>%1</code> را ایجاد کرد. Could not open file <code>%1</code>. نمی‌توان پروندهٔ <code>%1</code> را گشود. Could not 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 &قبول LOSHJob Configuring encrypted swap. در حال پیکربندی مبادلهٔ رمزشده. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form ÙØ±Ù… <h1>License Agreement</h1> <h1>تواÙÙ‚ پروانه</h1> I accept the terms and conditions above. شرایط Ùˆ ضوابط Ùوق را می‌پذیرم. Please review the End User License Agreements (EULAs). Ù„Ø·ÙØ§Ù‹ تواÙÙ‚ پروانهٔ کاربر نهایی (EULAs) را بازبینی کنید. This setup procedure will install proprietary software that is subject to licensing terms. با این روش نصب ØŒ نرم Ø§ÙØ²Ø§Ø± اختصاصی نصب Ù…ÛŒ شود Ú©Ù‡ مشروط به شرایط مجوز است. If you do not agree with the terms, the setup procedure cannot continue. اگر با شرایط مواÙÙ‚ نباشید ØŒ روش تنظیم ادامه نمی یابد. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. این روش راه اندازی Ù…ÛŒ تواند نرم Ø§ÙØ²Ø§Ø± اختصاصی را Ú©Ù‡ مشمول شرایط صدور مجوز است نصب کند تا ویژگی های اضاÙÛŒ را ÙØ±Ø§Ù‡Ù… کند Ùˆ تجربه کاربر را Ø§ÙØ²Ø§ÛŒØ´ دهد. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. اگر با این شرایط مواÙÙ‚ نباشید ØŒ نرم Ø§ÙØ²Ø§Ø± اختصاصی نصب نمی شود Ùˆ به جای آن از گزینه های منبع باز Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ شود. 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 label for netinstall module, Linux kernel کرنل Services label for netinstall module, system services خدمت‌ها Login label for netinstall module, choose login manager ورود Desktop label for netinstall module, choose desktop environment میزکار Communication label for netinstall module ارتباطات Development label for netinstall module توسعه Office label for netinstall module اداری Multimedia label for netinstall module چندرسانه‌ای Internet label for netinstall module اینترنت Theming label for netinstall module شخصی‌سازی Gaming label for netinstall module بازی Utilities label for netinstall module ابزارها Applications برنامه‌های کاربردی NotesQmlViewStep Notes یادداشت‌ها OEMPage Ba&tch: Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>اینجا یک شناسه batch وارد کنید. این مقدار در سامانه هد٠ذخیره می‌شود.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>تنظیمات اوئی‌ام</h1><p>کلامارس از تنظیمات اوئی‌ام هنگام تنظیم سامانه Ù‡Ø¯Ù Ø§Ø³ØªÙØ¯Ù‡ خواهد کرد.</p></body></html> OEMViewStep OEM Configuration پیکربندی سازنده Set the OEM Batch Identifier to <code>%1</code>. تنظیم شناسه Batch اوئی‌ام به <code>%1</code>. Offline Select your preferred Region, or use the default settings. منطقه موردنظر خود را انتخاب کنید یا از تنظیمات Ù¾ÛŒØ´ÙØ±Ø¶ Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید. Timezone: %1 منطقه زمانی: %1 Select your preferred Zone within your Region. منطقه مورد نظر خود را در منطقه خود انتخاب کنید. Zones مناطق You can fine-tune Language and Locale settings below. شما میتوانید زبان Ùˆ زبان محلی را در تنظیمات زیر بطوردقیق تنظیم کنید. PWQ Password is too short گذرواژه خیلی کوتاه است Password is too long گذرواژه خیلی بلند است Password is too weak گذرواژه خیلی ضعی٠است Memory allocation error when setting '%1' خطای تخصیص Ø­Ø§ÙØ¸Ù‡ هنگام تنظیم %1 Memory allocation error خطای تخصیص Ø­Ø§ÙØ¸Ù‡ The password is the same as the old one گذرواژه همان قبلی است The password is a palindrome گذرواژه متقارن است The password differs with case changes only گذرواژه Ùقط در Ú©ÙˆÚ†Ú©ÛŒ Ùˆ بزرگی Ù…ØªÙØ§ÙˆØª است The password is too similar to the old one گذرواژه خیلی شبیه قبلی است The password contains the user name in some form گذرواژه، Ø´Ú©Ù„ÛŒ از نام کاربری را داراست The password contains words from the real name of the user in some form گذرواژه شامل واژگانی از نام واقعی کاربر است The password contains forbidden words in some form گذرواژه Ø´Ú©Ù„ÛŒ از واژگان ممنوعه را دارد The password contains too few digits گذرواژه، رقم‌های خیلی Ú©Ù…ÛŒ دارد The password contains too few uppercase letters رمز عبور حاوی حرو٠بزرگ بسیار Ú©Ù…ÛŒ است The password contains fewer than %n lowercase letters گذرواژه حاوی کمتر از %n حر٠کوچک است گذرواژه حاوی کمتر از %n حر٠کوچک است The password contains too few lowercase letters گذرواژه حاوی حرو٠کوچک بسیار Ú©Ù…ÛŒ است The password contains too few non-alphanumeric characters گذرواژه حاوی بیش از حد نویسه غیر Ø§Ù„ÙØ¨Ø§ است The password is too short گذرواژه خیلی کوتاه است The password does not contain enough character classes کلمه عبور شامل Ø´Ú©Ù„ های کاÙÛŒ نیست. The password contains too many same characters consecutively گذرواژه حاوی بیش از حد نویسه های Ù¾ÛŒ در Ù¾ÛŒ است The password contains too many characters of the same class consecutively رمز ورود به صورت Ù¾ÛŒ در Ù¾ÛŒ حاوی نویسه های زیادی از همان کلاس است The password contains fewer than %n digits گذرواژه حاوی کمتر از %n عدد است گذرواژه حاوی کمتر از %n عدد است The password contains fewer than %n uppercase letters گذرواژه حاوی کمتر از %n حر٠بزرگ است گذرواژه حاوی کمتر از %n حر٠بزرگ است The password contains fewer than %n non-alphanumeric characters گذرواژه حاوی کمتر از %n نویسه ØºÛŒØ±Ø§Ù„ÙØ¨Ø§ است گذرواژه حاوی کمتر از %n نویسه ØºÛŒØ±Ø§Ù„ÙØ¨Ø§ است The password is shorter than %n characters گذرواژه کوتاه تر از %n نویسه است گذرواژه کوتاه تر از %n نویسه است The password is a rotated version of the previous one گذرواژه یک نسخه برعکس شده از قبلی است The password contains fewer than %n character classes گذرواژه حاوی کمتر از %n کلاس نویسه است گذرواژه حاوی کمتر از %n کلاس نویسه است The password contains more than %n same characters consecutively گذرواژه حاوی بیش از %n نویسه Ù¾ÛŒ در Ù¾ÛŒ است گذرواژه حاوی بیش از %n نویسه Ù¾ÛŒ در Ù¾ÛŒ است The password contains more than %n characters of the same class consecutively گذرواژه حاوی بیش از%n نویسه Ù¾ÛŒ در Ù¾ÛŒ از همان کلاس است گذرواژه حاوی بیش از%n نویسه Ù¾ÛŒ در Ù¾ÛŒ از همان کلاس است The password contains monotonic sequence longer than %n characters گذرواژه حاوی یک توالی کاراکتر یکنواخت بیش از %n نویسه است گذرواژه حاوی یک توالی کاراکتر یکنواخت بیش از %n نویسه است The password contains too long of a monotonic character sequence رمز عبور حاوی یک توالی کاراکتر یکنواخت بیش از حد طولانی است No password supplied هیچ‌گذرواژه‌ای ÙØ±Ø§Ù‡Ù… نشده Cannot obtain random numbers from the RNG device نمی توان اعداد تصادÙÛŒ را از دستگاه RNG بدست آورد Password generation failed - required entropy too low for settings تولید رمز عبور ناموÙÙ‚ بود - برای تنظیمات آنتروپی مورد نیاز بسیار Ú©Ù… است The password fails the dictionary check - %1 گذرواژه در بررسی ÙØ±Ù‡Ù†Ú¯ Ù„ÙØª ناموÙÙ‚ است - %1 The password fails the dictionary check رمز عبور در بررسی ÙØ±Ù‡Ù†Ú¯ لغت ناموÙÙ‚ است Unknown setting - %1 تنظیمات ناشناخته - %1 Unknown setting تنظیمات ناشناخته Bad integer value of setting - %1 مقدار صحیح بد در تنظیمات - %1 Bad integer value مقدار صحیح بد Setting %1 is not of integer type تنظیمات %1 از گونهٔ صحیح نیست Setting is not of integer type تنظیمات از گونهٔ صحیح نیست Setting %1 is not of string type تنظیمات %1 از گونهٔ رشته نیست Setting is not of string type تنظیمات از گونهٔ رشته نیست Opening the configuration file failed گشودن پروندهٔ پیکربندی شکست خورد The configuration file is malformed پروندهٔ پیکربندی بدریخت است Fatal failure خطای مهلک Unknown error خطای ناشناخته Password is empty گذرواژه خالی است PackageChooserPage Form ÙØ±Ù… Product Name نام محصول TextLabel TextLabel Long Product Description شرح محصول بلند Package Selection گزینش بسته‌ها Please pick a product from the list. The selected product will be installed. Ù„Ø·ÙØ§Ù‹ محصولی را از لیست انتخاب کنید. محصول انتخاب شده نصب خواهد شد. 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 Ø§ÙØ±Ø§Ø²Ù‡Ø§ Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: ÙØ¹Ù„ÛŒ: After: بعد از: No EFI system partition configured هیچ پارتیشن سیستم EFI پیکربندی نشده است EFI system partition configured incorrectly Ø§ÙØ±Ø§Ø² سامانه EFI به نادرستی تنظیم شده است An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. یک Ø§ÙØ±Ø§Ø² سامانه EFI نیازمندست Ú©Ù‡ از %1 شروع شود.<br/><br/>برای تنظیم یک Ø§ÙØ±Ø§Ø² سامانه EFIØŒ به عقب بازگشته Ùˆ یک سامانه پرونده مناسب انتخاب یا ایجاد کنید. The filesystem must be mounted on <strong>%1</strong>. سامانه پرونده باید روی <strong>%1</strong> سوارشده باشد. The filesystem must have type FAT32. سامانه پرونده باید دارای نوع FAT32 باشد. The filesystem must be at least %1 MiB in size. سامانه پرونده حداقل باید دارای %1مبی‌بایت حجم باشد. The filesystem must have flag <strong>%1</strong> set. سامانه پرونده باید پرچم <strong>%1</strong> را دارا باشد. You can continue without setting up an EFI system partition but your system may fail to start. شما میتوانید بدون برپاکردن Ø§ÙØ±Ø§Ø² سامانه EFI ادامه دهید ولی ممکن است سامانه برای شروع با مشکل مواجه شود. Option to use GPT on BIOS گزینه ای برای Ø§Ø³ØªÙØ§Ø¯Ù‡ از GPT در BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted پارتیشن بوت رمزشده نیست A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. یک پارتیشن بوت جداگانه همراه با یک پارتیشن ریشه ای رمزگذاری شده راه اندازی شده است ØŒ اما پارتیشن بوت رمزگذاری نشده است. با این نوع تنظیمات مشکلات امنیتی وجود دارد ØŒ زیرا پرونده های مهم سیستم در یک پارتیشن رمزگذاری نشده نگهداری Ù…ÛŒ شوند. در صورت تمایل Ù…ÛŒ توانید ادامه دهید ØŒ اما باز کردن Ù‚ÙÙ„ سیستم ÙØ§ÛŒÙ„ بعداً در هنگام راه اندازی سیستم Ø§ØªÙØ§Ù‚ Ù…ÛŒ Ø§ÙØªØ¯. برای رمزگذاری پارتیشن بوت ØŒ به عقب برگردید Ùˆ آن را دوباره ایجاد کنید ØŒ رمزگذاری را در پنجره ایجاد پارتیشن انتخاب کنید. has at least one disk device available. حداقل یک دستگاه دیسک در دسترس دارد. There are no partitions to install on. هیچ پارتیشنی برای نصب وجود ندارد PlasmaLnfJob Plasma Look-and-Feel Job شغل ظاهری Ùˆ احساس پلاسما Could not select KDE Plasma Look-and-Feel package بسته KDE Plasma Look-and-Feel قابل انتخاب نیست PlasmaLnfPage Form ÙØ±Ù… Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Ù„Ø·ÙØ§Ù‹ برای KDE Plasma Desktop ظاهر Ùˆ احساسی را انتخاب کنید. همچنین Ù…ÛŒ توانید پس از نصب سیستم ØŒ از این مرحله صر٠نظر کرده Ùˆ Ø´Ú©Ù„ ظاهری را پیکربندی کنید. با کلیک بر روی انتخاب ظاهر Ùˆ احساس ØŒ پیش نمایش زنده ای از آن احساس Ùˆ احساس به شما ارائه Ù…ÛŒ شود. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Ù„Ø·ÙØ§Ù‹ برای KDE Plasma Desktop ظاهر Ùˆ احساسی را انتخاب کنید. همچنین Ù…ÛŒ توانید پس از نصب سیستم ØŒ از این مرحله صر٠نظر کرده Ùˆ Ø´Ú©Ù„ ظاهری را پیکربندی کنید. با کلیک بر روی انتخاب ظاهر Ùˆ احساس ØŒ پیش نمایش زنده ای از آن احساس Ùˆ احساس به شما ارائه Ù…ÛŒ شود. PlasmaLnfViewStep Look-and-Feel ظاهر Ùˆ احساس PreserveFiles Saving files for later ... ذخیرهٔ پرونده‌ها برای بعد No files configured to save for later. هیچ پرونده ای پیکربندی نشده است تا بعداً ذخیره شود. Not all of the configured files could be preserved. همه پرونده های پیکربندی شده قابل Ø­ÙØ¸ نیستند. ProcessResult There was no output from the command. output هیچ خروجی از دستور نبود. Output: خروجی External command crashed. ÙØ±Ù…ان خارجی خراب شد. Command <i>%1</i> crashed. دستور <i>%1</i> شکست خورد. External command failed to start. دستور خارجی شروع نشد. Command <i>%1</i> failed to start. دستور <i>%1</i> برای شروع شکست خورد. Internal error when starting command. خطای داخلی هنگام شروع دستور. Bad parameters for process job call. پارامترهای نامناسب برای صدا زدن کار پردازش شده است External command failed to finish. ÙØ±Ù…ان خارجی به پایان نرسید. Command <i>%1</i> failed to finish in %2 seconds. دستور <i>%1</i> برای اتمام در %2 ثانیه شکست خورد. External command finished with errors. دستور خارجی با خطا به پایان رسید. Command <i>%1</i> finished with exit code %2. دستور <i>%1</i> با کد خروج %2 به پایان رسید. QObject %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 را ندارد. برپاسازی می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار Ø§ÙØªØ§Ø¯Ù‡ باشند.</p> RemoveUserJob Remove live user from target system برداشتن کاربر زنده از سامانهٔ هد٠RemoveVolumeGroupJob Remove Volume Group named %1. حذ٠گروه حجمی با نام %1. Remove Volume Group named <strong>%1</strong>. حذ٠گروه حجمی با نام <strong>%1</strong>. The installer failed to remove a volume group named '%1'. نصب کننده برای حذ٠گروه حجمی با نام '%1' شکست خورد. ReplaceWidget Form ÙØ±Ù… Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. انتخاب کنید Ú©Ù‡ کجا %1 نصب شود.<br/><font color="red">اخطار:</font>این همه پرونده های Ø§ÙØ±Ø§Ø² انتخاب شده را پاک خواهد کرد. The selected item does not appear to be a valid partition. بنظر نمی آید Ú©Ù‡ گزینه انتخاب شده، Ø§ÙØ±Ø§Ø² معتبری باشد. %1 cannot be installed on empty space. Please select an existing partition. %1 نمیتواند روی ÙØ¶Ø§ÛŒ خالی نصب شود. Ù„Ø·ÙØ§ یک Ø§ÙØ±Ø§Ø² موجود را برگزینید. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 نمیتواند روی یک Ø§ÙØ±Ø§Ø² extended نصب شود. Ù„Ø·ÙØ§ یک Ø§ÙØ±Ø§Ø² primary یا logical برگزینید. %1 cannot be installed on this partition. %1 نمیتواند روی این Ø§ÙØ±Ø§Ø² نصب شود. Data partition (%1) داده Ø§ÙØ±Ø§Ø² (%1) Unknown system partition (%1) سامانه Ø§ÙØ±Ø§Ø² ناشناس (%1) %1 system partition (%2) سامانه Ø§ÙØ±Ø§Ø² %1 (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Ø§ÙØ±Ø§Ø² %1 برای %2 بسیار Ú©ÙˆÚ†Ú© است. Ù„Ø·ÙØ§ یک Ø§ÙØ±Ø§Ø² با ظرÙیت حداقل %3 گیبی‌بایت انتخاب کنید. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Ø§ÙØ±Ø§Ø² سامانه EFI نمی‌تواند در هیچ جایی از این سیستم ÛŒØ§ÙØª شود. Ù„Ø·ÙØ§ برگردید Ùˆ از پارتیشن بندی دستی Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید تا %1 را راه‌اندازی کنید. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 روی %2 نصب خواهد شد.<br/><font color="red">اخطار:</font>همه داده های Ø§ÙØ±Ø§Ø² %2 از دست خواهند Ø±ÙØª. The EFI system partition at %1 will be used for starting %2. پارتیشن سیستم ای.اÙ.Ø¢ÛŒ در %1 برای شروع %2 Ø§Ø³ØªÙØ§Ø¯Ù‡ خواهد شد. EFI system partition: پارتیشن سیستم ای.اÙ.Ø¢ÛŒ Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>رایانه شما نیازمندی های نصب %1 را ندارد.<br/> نصب نمیتواند ادامه یابد.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p>رایانه شما نیازمندی‌های برپاسازی %1 را ندارد. برپاسازی می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار Ø§ÙØªØ§Ø¯Ù‡ باشند.</p> ResizeFSJob Resize Filesystem Job کار تغییر اندازهٔ سامانه‌پرونده Invalid configuration پیکربندی نامعتبر The file-system resize job has an invalid configuration and will not run. کار تغییر اندازه سیستم ÙØ§ÛŒÙ„ دارای پیکربندی نامعتبری است Ùˆ اجرا نمی شود. KPMCore not Available KPMCore موجود نیست Calamares cannot start KPMCore for the file-system resize job. کلامارس نمیتواند KPMCore را برای کار تغییراندازه ÙØ§ÛŒÙ„ سیستم شروع کند. Resize Failed تغییر اندازه شکست خورد The filesystem %1 could not be found in this system, and cannot be resized. ÙØ§ÛŒÙ„ سیستم %1 روی این سامانه ÛŒØ§ÙØª نشد Ùˆ نمیتواند تغییر اندازه دهد. The device %1 could not be found in this system, and cannot be resized. دستگاه %1 روی این سامانه ÛŒØ§ÙØª نشد Ùˆ نمیتواند تغییراندازه دهد. The filesystem %1 cannot be resized. سیستم ÙØ§ÛŒÙ„ %1 نمی تواند تغییر اندازه دهد. The device %1 cannot be resized. دستگاه %1 نمی تواند تغییر اندازه دهد. The filesystem %1 must be resized, but cannot. سیستم ÙØ§ÛŒÙ„Ùª 1 باید تغییر اندازه دهد ØŒ اما نمی تواند. The device %1 must be resized, but cannot دستگاه %1 باید تغییر اندازه دهد، اما نمی تواند. ResizePartitionJob Resize partition %1. تغییر اندازهٔ Ø§ÙØ±Ø§Ø² %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. تغییر اندازه Ø§ÙØ±Ø§Ø² <strong>%1</strong> از <strong>%2مبی‌بایت</strong> به <strong>%3مبی‌بایت</strong>. Resizing %2MiB partition %1 to %3MiB. درحال تغییر اندازه Ø§ÙØ±Ø§Ø² %1 از %2مبی‌بایت به %3مبی‌بایت. The installer failed to resize partition %1 on disk '%2'. نصب کننده برای تغییر اندازه Ø§ÙØ±Ø§Ø² %1 روی دیسک '%2' شکست خورد. ResizeVolumeGroupDialog Resize Volume Group تغییر اندازهٔ گروه حجمی ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. تغییر اندازه گروه حجمی با نام %1 از %2 به %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. تغییر اندازه گروه حجمی با نام <strong>%1</strong> از <strong>%2</strong> به <strong>%3</strong>. The installer failed to resize a volume group named '%1'. نصب کننده برای تغییر اندازه گروه حجمی با نام '%1' شکست خورد. ResultsListDialog For best results, please ensure that this computer: برای بهترین نتیجه ØŒ Ù„Ø·ÙØ§ اطمینان حاصل کنید Ú©Ù‡ این کامپیوتر: System requirements نیازمندی‌های سامانه ScanningDialog Scanning storage devices... در حال پویش Ø§ÙØ²Ø§Ø±Ù‡Ù” ذخیره‌ساز… Partitioning Ø§ÙØ±Ø§Ø²Ø´ SetHostNameJob Set hostname %1 تنظیم نام میزبان %1 Set hostname <strong>%1</strong>. تنظیم نام میزبان <strong>%1</strong>. Setting hostname %1. تنظیم نام میزبان به %1. Internal Error خطای داخلی Cannot write hostname to target system عدم توانایی نوشتن نام میزبان به سامانه هد٠SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 تنظیم مدل کیبورد به %1ØŒ چیدمان به %2-%3 Failed to write keyboard configuration for the virtual console. شکست در نوشتن تنظیمات کیبورد برای کنسول مجازی. Failed to write to %1 شکست در نوشتن %1 Failed to write keyboard configuration for X11. شکست در نوشتن تنظیمات کیبورد برای X11. Failed to write keyboard configuration to existing /etc/default directory. شکست در نوشتن تنظیمات کیبورد به مسیر /etc/default موجود. SetPartFlagsJob Set flags on partition %1. تنظیم پرچم ها روی Ø§ÙØ±Ø§Ø² %1. Set flags on %1MiB %2 partition. تنظیم پرچم ها روی Ø§ÙØ±Ø§Ø² %2 با حجم %1مبی‌بایت. Set flags on new partition. تنظیم پرچم ها روی Ø§ÙØ±Ø§Ø² جدید. Clear flags on partition <strong>%1</strong>. پاک کردن پرچم ها از Ø§ÙØ±Ø§Ø² <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. پاک کردن پرچم ها از Ø§ÙØ±Ø§Ø² <strong>%2</strong> با حجم %1مبی‌بایت. Clear flags on new partition. پاک کردن پرچم در Ø§ÙØ±Ø§Ø² جدید. Flag partition <strong>%1</strong> as <strong>%2</strong>. پرچم گذاری Ø§ÙØ±Ø§Ø² <strong>%1</strong> بعنوان <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. پرچم گذاری Ø§ÙØ±Ø§Ø² <strong>%2</strong> بعنوان <strong>%3</strong> با حجم %1 مبی‌بایت. Flag new partition as <strong>%1</strong>. درحال پرچم گذاری Ø§ÙØ±Ø§Ø² جدید بعنوان <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. درحال پاک کردن پرچم ها از Ø§ÙØ±Ø§Ø² <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. درحال پاک کردن پرچم ها از Ø§ÙØ±Ø§Ø² <strong>%2</strong> با حجم %1مبی‌بایت. Clearing flags on new partition. پاک کردن پرچم ها در Ø§ÙØ±Ø§Ø² جدید. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. درحال تنظیم پرچم های <strong>%2</strong> روی Ø§ÙØ±Ø§Ø² <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. درحال تنظیم پرچم های <strong>%3</strong> روی Ø§ÙØ±Ø§Ø² <strong>%2</strong> با حجم %1مبی‌بایت. Setting flags <strong>%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 را تغییر داد. Cannot create sudoers file for writing. نمی‌توان پروندهٔ sudoers را برای نوشتن ایجاد کرد. ShellProcessJob Shell Processes Job پردازه های شل SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 از %L2 StandardButtons &OK &قبول &Yes &بله &No &خیر &Cancel &لغو &Close &بسته TrackingInstallJob Installation feedback بازخورد نصب Sending installation feedback. ارسال بازخورد نصب Internal error in install-tracking. خطای داخلی در پیگیری نصب رخ داد. HTTP request timed out. زمان درخواست HTTP به پایان رسید. TrackingKUserFeedbackJob KDE user feedback بازخورد کاربری KDE Configuring KDE user feedback. در حال تنظیم بازخورد کاربری KDE. Error in KDE user feedback configuration. خطایی در تنظیمات بازخورد کاربری KDE رخ داد. Could not configure KDE user feedback correctly, script error %1. عدم توانایی در تنظیم درست بازخورد کاربری KDEØŒ برنامه با خطای %1 مواجه شد. Could not configure KDE user feedback correctly, Calamares error %1. عدم توانایی در تنظیم درست بازخورد کاربری KDEØŒ کلامارس با خطای %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 بازخورد UmountJob Unmount file systems. پیاده کردن سامانه‌های پرونده. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>اگر بیش از یک Ù†ÙØ± از این کامپیوتر Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ کنند، میتوانید حساب های دیگری بعد نصب ایجاد کنید.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>اگر بیش از یک Ù†ÙØ± از این کامپیوتر Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ کنند، میتوانید حساب های دیگری بعد نصب ایجاد کنید.</small> UsersQmlViewStep Users کاربران UsersViewStep Users کاربران VariantModel Key Column header for key/value کلید Value Column header for key/value مقدار VolumeGroupBaseDialog Create Volume Group ایجاد گروه حجمی List of Physical Volumes Ùهرست حجم‌های Ùیزیکی Volume Group Name: نام گروه حجمی: Volume Group Type: گونهٔ گروه حجمی: Physical Extent Size: اندازه Ùیزیکی: MiB می‌ب Total Size: اندازهٔ Ú©Ù„: Used Size: اندازهٔ Ø§Ø³ØªÙØ§Ø¯Ù‡â€ŒØ´Ø¯Ù‡: Total Sectors: Ú©Ù„ شیارها: Quantity of LVs: کمیت حجم‌های منطقی: WelcomePage Form ÙØ±Ù… Select application and system language برنامه Ùˆ زبان سیستم را انتخاب کنید Open donations website گشودن پایگاه وب اعانه‌ها &Donate ا&عانه Open help and support website گشودن پایگاه وب راهنمایی Ùˆ پشتیبانی &Support &پشتیبانی Open issues and bug-tracking website گشودن پایگاه وب ردیاب مشکل &Known issues &مشکلات شناخته‌شده Open release notes website گشودن پاگاه وب یادداشت‌های انتشار &Release notes &یادداشت‌های انتشار %1 support پشتیبانی %1 About %1 setup دربارهٔ برپاسازی %1 About %1 installer دربارهٔ نصب‌کنندهٔ %1 WelcomeQmlViewStep Welcome خوش آمدید WelcomeViewStep Welcome خوش آمدید ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error خطای پیکربندی No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About درباره Debug Show information about Calamares Show debug information نمایش اطّلاعات اشکال‌زدایی finishedq Installation Completed نصب کامل شد %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 روی رایانه شما نصب شد.<br/> میتوانید به سامانه جدیدتان وارد شوید، یا به Ø§Ø³ØªÙØ§Ø¯Ù‡ محیط زنده ادامه دهید. Close Installer بستن نصب کننده Restart System راه اندازی مجدد سامانه <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>یک گزارش کامل از نصب در ÙØ§ÛŒÙ„ installation.log درون مسیر خانه کاربر زنده موجود است.<br/> این گزارش به مسیر /var/log/installation.log سامانه هد٠نیز رونوشت شده است.</p> finishedq@mobile Installation Completed نصب کامل شد %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>زبان ها</h1></br> تنظیمات محلی سامانه روی زبان Ùˆ مجموعه کارکتر برخی از عناصر رابط کاربری خط ÙØ±Ù…ان تاثیر Ù…ÛŒ گذارد. تنظیمات ÙØ¹Ù„ÛŒ <strong>%1</strong> است. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>زبان های محلی</h1> </br> تنظیمات زبان محلی سامانه قالب اعداد Ùˆ تاریخ را تغییر Ù…ÛŒ دهد. تنظیمات ÙØ¹Ù„ÛŒ <strong>%1</strong> است. Back بازگشت keyboardq To activate keyboard preview, select a layout. برای ÙØ¹Ø§Ù„ کردن پیشنمایش ØµÙØ­Ù‡ کلید، یک چیدمان انتخاب کنید. Keyboard Model: مدل ØµÙØ­Ù‡â€ŒÚ©Ù„ید: Layouts چینش‌ها Type here to test your keyboard برای آزمودن ØµÙØ­Ù‡â€ŒÚ©Ù„یدتان، این‌جا بنویسید Variants دگرگونه‌ها localeq Change تغییر notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>این ها یک سری یادداشت انتشار نمونه هستند.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice یک مجموعه قدرتمند Ùˆ آزاد از برنامه های اداری است، Ú©Ù‡ توسط میلیون ها آدم در سراسر دنیا Ø§Ø³ØªÙØ§Ø¯Ù‡ میشود. این مجموعه شامل برنامه های بسیاری هست Ú©Ù‡ این مجموعه را یک مجموعه برنامه همه کاره آزاد Ùˆ متن باز در بازار میکند.<br/> گزینه Ù¾ÛŒØ´ÙØ±Ø¶ LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. اگر نمیخواهید برنامه های اداری را نصب کنید، Ùقط گزینه بدون برنامه های اداری را انتخاب کنید. شما همیشه بعدا میتوانید یکی (یا چند تا) را اگر نیاز پیدا کردید، نصب کنید. No Office Suite بدون برنامه های اداری Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. یک نصب حداقلی برای میزکار ایجاد کنید، تمام برنامه های اضاÙÛŒ را حذ٠کنید Ùˆ بعدا تصمیم بگیرید Ú©Ù‡ Ú†Ù‡ چیزی را میخواهید به رایانه خود اضاÙÙ‡ کنید. مثال هایی از برنامه هایی Ú©Ù‡ در این نصب جای ندارند عبارت است از نبود برنامه های اداری، هیچ پخش کننده رسانه ای، هیچ بازکننده تصویری یا پشتیبانی چاپ. این تنها یک میزکار، مدیریت ÙØ§ÛŒÙ„ØŒ مدیریت بسته، ویرایشگر متن Ùˆ مرورگر ساده وب خواهد بود. Minimal Install نصب حداقلی Please select an option for your install, or use the default: LibreOffice included. Ù„Ø·ÙØ§ گزینه ای را برای نصب انتخاب کنید، یا از Ù¾ÛŒØ´ÙØ±Ø¶ Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید: LibreOffice release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Ùª 1 این یک نمونه پرونده QML است Ú©Ù‡ گزینه هایی را در RichText با محتوای قابل تکان دادن نشان Ù…ÛŒ دهد. QML با RichText Ù…ÛŒ تواند از برچسب های HTML Ø§Ø³ØªÙØ§Ø¯Ù‡ کند ØŒ محتوای قابل تکان خوردن برای ØµÙØ­Ù‡ های لمسی Ù…Ùید است. این متن پررنگ است این متن مورب است این متن زیرخط دار است این متن در تراز وسط قرار خواهد Ú¯Ø±ÙØª. این مثال از کد نمونه است: ls -l / home لیست ها: سیستم های CPU اینتل سیستم های CPU AMD نوار پیمایش عمودی قابل تنظیم است ØŒ عرض ÙØ¹Ù„ÛŒ روی 10 تنظیم شده است. Back بازگشت usersq Pick your user name and credentials to login and perform admin tasks نام کاربری Ùˆ اطلاعات مهم خود را برای ورود Ùˆ انجام وظای٠مدیریت برگزینید What is your name? نامتان چیست؟ Your Full Name نام کاملتان What name do you want to use to log in? برای ورود Ù…ÛŒ خواهید از Ú†Ù‡ نامی Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید؟ Login Name نام ورود If more than one person will use this computer, you can create multiple accounts after installation. اگر بیش از یک Ù†ÙØ± از این کامپیوتر Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ کنند، میتوانید حساب های دیگری بعد نصب ایجاد کنید. Only lowercase letters, numbers, underscore and hyphen are allowed. Ùقط حرو٠کوچک ØŒ اعداد ØŒ زیر خط Ùˆ خط خط مجاز است. root is not allowed as username. عبارت root بعنوان نام کاربر مجاز نیست. What is the name of this computer? نام این رایانه چیست؟ Computer Name نام رایانه This name will be used if you make the computer visible to others on a network. اگر رایانه‌تان را روی یک شبکه برای دیگران نمایان کنید، از این نام Ø§Ø³ØªÙØ§Ø¯Ù‡ می‌شود. localhost is not allowed as hostname. عبارت localhost بعنوان نام میزبان مجاز نیست. Choose a password to keep your account safe. برای امن Ù†Ú¯Ù‡ داشتن حسابتان، گذرواژه‌ای برگزینید. Password گذرواژه Repeat Password تکرار TextLabel Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. رمز ورود یکسان را دو بار وارد کنید ØŒ تا بتوان آن را از نظر اشتباه تایپ بررسی کرد. یک رمز ورود خوب شامل ترکیبی از حرو٠، اعداد Ùˆ علائم نگارشی است ØŒ باید حداقل هشت حر٠داشته باشد Ùˆ باید در Ùواصل منظم تغییر یابد. Validate passwords quality اعتبارسنجی Ú©ÛŒÙیت گذرواژه When this box is checked, password-strength checking is done and you will not be able to use a weak password. وقتی این کادر علامت گذاری شد ØŒ بررسی قدرت رمز عبور انجام Ù…ÛŒ شود Ùˆ دیگر نمی توانید از رمز عبور Ø¶Ø¹ÛŒÙ Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید. Log in automatically without asking for the password ورود خودکار بدون پرسیدن گذرواژه Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. حداقل دو حر٠و Ùقط Ø­Ø±ÙˆÙØŒ اعداد، زیرخط Ùˆ خط تیره مجاز هستند. Reuse user password as root password Ø§Ø³ØªÙØ§Ø¯Ù‡ گذرواژه کاربر بعنوان گذرواژه روت Use the same password for the administrator account. Ø§Ø³ØªÙØ§Ø¯Ù‡ از گذرواژهٔ یکسان برای حساب مدیر. Choose a root password to keep your account safe. برای امن Ù†Ú¯Ù‡ داشتن حسابتان، گذرواژه روت ای برگزینید. Root Password گذرواژه روت Repeat Root Password تکرار گذرواژه روت Enter the same password twice, so that it can be checked for typing errors. همان گذرواژه را دوباره وارد کنید تا بتواند برای خطاهای نوشتاری بررسی شود. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <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> Support پشتیبانی Known issues اشکالات شناخته‌شده Release notes یادداشت‌های انتشار Donate اعانه calamares-calamares-2d126ae/lang/calamares_fi_FI.ts000066400000000000000000007043511430147706700222760ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> on %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Kiitos <a href="https://calamares.io/team/">Calamares tiimille </a> ja <a href="https://www.transifex.com/calamares/calamares/">Calamares kääntäjätiimille</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> kehitystä sponsoroi <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;<br/> 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äynnistylatain, kuten <strong>GRUB</strong> tai <strong>systemd-boot</strong>, <strong>EFI-järjestelmäosioon</strong>. Tämä on automaattinen oletus, ellet valitse manuaalista osiointia, jolloin sinun on valittava asetukset itse. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Tämä järjestelmä käynnistettiin <strong>BIOS</strong>-käynnistysympäristössä.<br><br>Jos haluat määrittää käynnistämisen BIOS-ympäristöstä, tämän asennusohjelman on asennettava käynnistyslatain, kuten<strong>GRUB</strong>, joko osion alkuun tai <strong>pääkäynnistyslohkoon (MBR)</strong> ,joka on osiotaulukon alussa (suositus). Tämä on automaattista, ellet valitset manuaalista osiointia, jolloin sinun on valittava asetukset itse. BootLoaderModel Master Boot Record of %1 %1:n pääkäynnistyslohko Boot Partition Käynnistysosio System Partition Järjestelmäosio Do not install a boot loader Älä asenna käynnistyslatainta %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Tyhjä sivu Calamares::DebugWindow Form Lomake GlobalStorage Tallennustila JobQueue Työjono Modules Moduulit Type: Tyyppi: none ei käytössä 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ääritettyyn pastebiniin. 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 Widgettipuu 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) Esimerkkityö (%1) Calamares::ProcessJob Run command '%1' in target system. Suorita komento '%1' kohdejärjestelmässä. Run command '%1'. Suorita komento '%1'. Running command %1 %2 Suoritetaan komentoa %1 %2 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 python-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 moduulia. Odotetaan %n moduulia. (%n second(s)) (%n sekunti) (%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 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> Asennusohjelman %1 on tehtävä muutoksia asemalle, jotta %2 voidaan asentaa.<br/><strong>Et voi kumota näitä muutoksia.</strong> &Set up now &Määritä nyt &Install now &Asenna nyt Go &back Mene &takaisin &Set up &Määritä &Install &Asenna Setup is complete. Close the setup program. Asennus on valmis. Sulje asennusohjelma. The installation is complete. Close the installer. Asennus on valmis. Sulje asennusohjelma. Cancel setup without changing the system. Peruuta asennus muuttamatta järjestelmää. Cancel installation without changing the system. Peruuta asennus tekemättä muutoksia järjestelmään. &Next &Seuraava &Back &Takaisin &Done &Valmis &Cancel &Peruuta Cancel setup? Peruuta asennus? Cancel installation? Peruuta asennus? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Haluatko todella peruuttaa nykyisen asennuksen? Asennusohjelma lopetetaan ja kaikki muutokset menetetään. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Haluatko todella 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 kiintole&vy: 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äynnistyslataajan sijainti: <strong>Select a partition to install on</strong> <strong>Valitse asennettava osio</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI-järjestelmäosiota ei löydy tästä järjestelmästä. Siirry takaisin ja käytä manuaalista osiointia, kun haluat määrittää %1 The EFI system partition at %1 will be used for starting %2. EFI-järjestelmäosiota %1 käytetään %2 käynnistämiseen. EFI system partition: EFI-järjestelmäosio: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tällä massamuistilla ei näytä olevan käyttöjärjestelmää. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin massamuistille tehdään muutoksia. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Tyhjennä asema</strong><br/>Tämä <font color="red">poistaa</font> kaikki tiedot valitusta massamuistista. <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ä massamuistissa on %1 dataa. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin massamuistiin tehdään muutoksia. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tämä massamuisti sisältää jo käyttöjärjestelmän. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin massamuistiin tehdään muutoksia. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tämä massamuisti sisältää jo useita käyttöjärjestelmiä. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin massamuistiin tehdään muutoksia. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> Tällä massamuistilla on jo käyttöjärjestelmä, mutta osiotaulukko <strong>%1</strong> on erilainen kuin tarvittava <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. Tähän massamuistiin on <strong>liitetty</strong> yksi osioista. This storage device is a part of an <strong>inactive RAID</strong> device. Tämä massamuisti on osa <strong>passiivista RAID</strong> kokoonpanoa. No Swap Swap ei Reuse Swap Swap käytä uudellen Swap (no Hibernate) Swap (ei lepotilaa) Swap (with Hibernate) Swap (lepotilan kanssa) Swap to file Swap tiedostona ClearMountsJob Successfully unmounted %1. Poistettu onnistuneesti %1. Successfully disabled swap %1. Poistettu käytöstä swap %1. Successfully cleared swap %1. Tyhjennetty swap %1. Successfully closed mapper device %1. Suljettu laitekartoitus %1. Successfully disabled volume group %1. Poistettu käytöstä taltioryhmä %1. Clear mounts for partitioning operations on %1 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. 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 asetteluksi %1/%2. Set timezone to %1/%2. Aseta aikavyöhykkeeksi %1/%2. The system language will be set to %1. Järjestelmän kielen asetuksena on %1. The numbers and dates locale will be set to %1. Numerot ja päivämäärät, paikallinen asetus on %1. Network Installation. (Disabled: Incorrect configuration) Verkko asennus. (Ei käytössä: virheellinen määritys) Network Installation. (Disabled: Received invalid groups data) Verkkoasennus. (Ei käytössä: Vastaanotettiin virheellisiä ryhmän tietoja) Network Installation. (Disabled: Internal error) Verkon asennus (Poistettu käytöstä: sisäinen virhe) Network Installation. (Disabled: No package list) Verkon asennus (Poistettu käytöstä: ei pakettien listaa) Package selection Paketin valinta Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Verkkoasennus. (Ei käytössä: Pakettiluetteloita ei voi hakea, tarkista verkkoyhteys) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Tämä tietokone ei täytä vähimmäisvaatimuksia, %1.<br/>Asennusta ei voi jatkaa. <a href="#details">Yksityiskohdat...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Tämä tietokone ei täytä asennuksen vähimmäisvaatimuksia, %1.<br/>Asennus ei voi jatkua. <a href="#details">Yksityiskohdat...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1.<br/>Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1. Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. This program will ask you some questions and set up %2 on your computer. Tämä ohjelma kysyy joitakin kysymyksiä liittyen järjestelmään %2 ja asentaa sen tietokoneeseen. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Tervetuloa Calamares-asennusohjelmaan %1</h1> <h1>Welcome to %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. Packages Paketit Install option: <strong>%1</strong> Asennuksen vaihtoehto: <strong>%1</strong> None Ei käytössä Summary Yhteenveto This is an overview of what will happen once you start the setup procedure. Tämä on yleiskuva siitä, mitä tapahtuu, kun asennusohjelma käynnistetään. This is an overview of what will happen once you start the install procedure. Tämä on yleiskuva siitä, mitä tapahtuu asennuksen aloittamisen jälkeen. ContextualProcessJob Contextual Processes Job Prosessien yhteydessä tehtävät CreatePartitionDialog Create a Partition Luo levyosio Si&ze: K&oko: MiB MiB Partition &Type: Osion &tyyppi: Primar&y Ensisi&jainen E&xtended &Laajennettu Fi&le System: Tiedostojärjeste&lmä: LVM LV name LVM LV -nimi &Mount Point: &Liitoskohta: Flags: Liput: Label for the filesystem Tiedostojärjestelmän nimi FS Label: Tiedostojärjestelmän nimike: En&crypt Sa&laa Logical Looginen Primary Ensisijainen GPT GPT Mountpoint already in use. Please select another one. Asennuskohde on jo käytössä. Valitse toinen. Mountpoint must start with a <tt>/</tt>. Liitospisteen tulee alkaa <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Luo uusi %1MiB osio kohteeseen %3 (%2), jossa on %4. Create new %1MiB partition on %3 (%2). Luo uusi %1MiB osio kohteeseen %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Luo uusi %2Mib-osio %4 (%3) tiedostojärjestelmällä %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Luo uusi <strong>%1MiB</strong> osio kohteeseen <strong>%3</strong> (%2) jossa on <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Luo uusi <strong>%1MiB</strong> osio kohteeseen <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Luo uusi <strong>%2Mib</strong> osio <strong>%4</strong> (%3) tiedostojärjestelmällä <strong>%1</strong>. Creating new %1 partition on %2. Luodaan uutta %1-osiota kohteessa %2. The installer failed to create partition on disk '%1'. Asennusohjelma epäonnistui osion luonnissa asemalle '%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 asemalta. What kind of partition table do you want to create? Minkälaisen osiotaulukon haluat luoda? Master Boot Record (MBR) Pääkäynnistyslohko (MBR) GUID Partition Table (GPT) GUID-osiotaulukko (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Luo uusi %1 osiotaulukko kohteessa %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Luo uusi <strong>%1</strong> osiotaulukko kohteessa <strong>%2</strong> (%3). Creating new %1 partition table on %2. Luodaan uutta %1 osiotaulukkoa kohteelle %2. The installer failed to create a partition table on %1. Asennusohjelma epäonnistui osiotaulukon luonnissa kohteeseen %1. 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 taltioryhmä CreateVolumeGroupJob Create new volume group named %1. Luo uusi taltioryhmä nimeltä %1. Create new volume group named <strong>%1</strong>. Luo uusi aseman ryhmä nimellä <strong>%1</strong>. Creating new volume group named %1. Luodaan uusi aseman ryhmä nimellä %1. The installer failed to create a volume group named '%1'. Asennusohjelma ei voinut luoda aseman ryhmää nimellä '%1'. 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. Asennusohjelma <strong>ei tunnista osiotaulukkoa</strong> valitussa massamuistissa.<br><br>Laitteessa ei ole osiotaulukkoa, taulukko on vioittunut tai tuntematon.<br>Asennusohjelma voi tehdä uuden osiotaulukon, joko automaattisesti tai manuaalisesti. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Tämä on suositeltava osion taulun tyyppi nykyaikaisille järjestelmille, jotka käyttävät <strong>EFI</strong> -käynnistysympäristöä. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Tämä osiotaulukon tyyppi on suositeltava vain vanhemmissa järjestelmissä, jotka käyttävät <strong>BIOS</strong> -käynnistysympäristöä. GPT:tä suositellaan useimmissa muissa tapauksissa.<br><br><strong>Varoitus:</strong>MBR-taulukko on vanhentunut MS-DOS-standardi.<br>Vain 4 <em>ensisijaisia</em> Vain ensisijaisia osioita voidaan luoda, ja 4, niistä yksi voi olla <em>laajennettu</em> osio, joka voi puolestaan sisältää monia osioita <em>loogisia</em> osioita. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Valitun massamuistin <strong>osiotaulukon</strong> tyyppi.<br><br>Ainoa tapa muuttaa osiotaulukon tyyppiä on poistaa ja luoda uudelleen osiot tyhjästä, mikä tuhoaa kaikki massamuistin sisältämät tiedot. <br>Asennusohjelma säilyttää nykyisen osiotaulukon, ellet nimenomaisesti valitse muuta.<br>Jos olet epävarma niin nykyaikaisissa järjestelmissä GPT on suositus. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) 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 Con&tent: Sisäl&tö: &Keep &Säilytä Format Alusta Warning: Formatting the partition will erase all existing data. Varoitus: Osion alustus tulee poistamaan kaikki olemassa olevat tiedostot. &Mount Point: &Liitoskohta: Si&ze: K&oko: MiB Mib Fi&le System: Tie&dostojärjestelmä: Flags: Liput: Label for the filesystem Tiedostojärjestelmän nimi FS Label: Tiedostojärjestelmän nimike: Passphrase for existing partition Olemassa olevan osion salasana Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. Osion %1 salausta ei voitu purkaa annetulla salasanalla. <br/><br/>Muokkaa osiota antamalla oikea salasana tai poista ja luo uusi salattu osio. EncryptWidget Form Lomake En&crypt system Sa&laa järjestelmä Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Järjestelmäsi ei näytä tukevan salausta tarpeeksi hyvin koko järjestelmän salaamiseksi. Voit ottaa salauksen käyttöön, mutta suorituskyky voi kärsiä. Passphrase Salasana Confirm passphrase Vahvista salasana Please enter the same passphrase in both boxes. Anna sama salasana molempiin kenttiin. ErrorDialog Details: Tiedot: Would you like to paste the install log to the web? Haluatko liittää asennuslokin verkkoon? FillGlobalStorageJob Set partition information Aseta osion tiedot Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Asenna %1 <strong>uusi</strong> %2 järjestelmäosio ominaisuuksilla <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Asenna %1 <strong>uusi</strong> %2 järjestelmä osio. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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 käynnistää tietokoneen nyt uuteen järjestelmääsi, tai voit jatkaa käyttöjärjestelmän %2 live-ympäristön käyttöä. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Kun tämä valintaruutu on valittuna, järjestelmä käynnistyy heti, kun napsautat <span style="font-style:italic;">Valmis</span> tai suljet asentimen.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Asennus epäonnistui</h1><br/>%1 ei ole määritetty tietokoneellesi.<br/> Virhesanoma oli: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Asennus epäonnistui </h1><br/>%1 ei ole asennettu tietokoneeseesi.<br/>Virhesanoma oli: %2. 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. Alustaa osiota %1 tiedostojärjestelmällä %2. The installer failed to format partition %1 on disk '%2'. Aseman '%2' osion %1 alustus epäonnistui. GeneralRequirements has at least %1 GiB available drive space vähintään %1 GiB vapaata levytilaa There is not enough drive space. At least %1 GiB is required. Levytilaa ei ole riittävästi. Vähintään %1 GiB tarvitaan. has at least %1 GiB working memory vähintään %1 GiB työmuistia The system does not have enough working memory. At least %1 GiB is required. Järjestelmässä ei ole tarpeeksi työmuistia. Vähintään %1 GiB vaaditaan. is plugged in to a power source on yhdistetty virtalähteeseen The system is not plugged in to a power source. Järjestelmä ei ole kytketty virtalähteeseen. is connected to the Internet on yhdistetty internetiin The system is not connected to the Internet. Järjestelmä ei ole yhteydessä internetiin. is running the installer as an administrator (root) ajaa asennusohjelmaa järjestelmänvalvojana (root) The setup program is not running with administrator rights. Asennusohjelma ei ole käynnissä järjestelmänvalvojan oikeuksin. The installer is not running with administrator rights. Asennusohjelma ei ole käynnissä järjestelmänvalvojan oikeuksin. has a screen large enough to show the whole installer näytöllä on riittävän suuri tarkkuus asentajalle The screen is too small to display the setup program. Näyttö on liian pieni, jotta asennus -ohjelma voidaan näyttää. The screen is too small to display the installer. Näyttö on liian pieni asentajan näyttämiseksi. 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. Luodaan initramfs 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 maa-asetus vaikuttaa komentorivin käyttöliittymän kieleen ja merkistön käyttöön.<br/>Nykyinen asetus on <strong>%1</strong>. &Cancel &Peruuta &OK &OK LOSHJob Configuring encrypted swap. Salatun swapin määrittäminen. No target system available. Kohdejärjestelmää ei ole käytettävissä. No rootMountPoint is set. Ei ole asetettu rootMountPoint No configFilePath is set. Ei ole asetettu configFilePath LicensePage Form Lomake <h1>License Agreement</h1> <h1>Lisenssisopimus</h1> I accept the terms and conditions above. Hyväksyn yllä olevat ehdot ja edellytykset. Please review the End User License Agreements (EULAs). Ole hyvä ja tarkista loppukäyttäjän lisenssisopimus (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Tämä asennusohjelma asentaa patentoidun ohjelmiston, johon sovelletaan lisenssiehtoja. If you do not agree with the terms, the setup procedure cannot continue. Jos et hyväksy ehtoja, asennusta ei voida jatkaa. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Tämä asennus voi asentaa patentoidun ohjelmiston, johon sovelletaan lisenssiehtoja lisäominaisuuksien tarjoamiseksi ja käyttökokemuksen parantamiseksi. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Jos et hyväksy ehtoja, omaa ohjelmistoa ei asenneta, vaan sen sijaan käytetään avoimen lähdekoodin vaihtoehtoja. 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 maa- ja aikavyöhyke-asetukset. Voit hienosäätää alla olevia asetuksia. Etsi kartalta vetämällä ja suurenna/pienennä +/- -painikkeella tai käytä hiiren vieritystä skaalaamiseen. NetInstallViewStep Package selection Paketin valinta Office software Office-ohjelmisto Office package Office-paketti Browser software Selainohjelmisto Browser package Selainpaketti Web browser Nettiselain Kernel label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Palvelut Login label for netinstall module, choose login manager Kirjaudu Desktop label for netinstall module, choose desktop environment Työpöytä Communication label for netinstall module Viestintä Development label for netinstall module Ohjelmistokehitys Office label for netinstall module Toimisto Multimedia label for netinstall module Multimedia Internet label for netinstall module Internetti Theming label for netinstall module Teema Gaming label for netinstall module Pelit Utilities label for netinstall module Apuohjelmat Applications Sovellukset 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 tunnisteeksi <code>%1</code>. Offline Select your preferred Region, or use the default settings. Valitse sinun asuinalue tai käytä oletusta. Timezone: %1 Aikavyöhyke: %1 Select your preferred Zone within your Region. Valitse haluamasi alue alueesi sisällä. Zones Vyöhykkeet You can fine-tune Language and Locale settings below. Voit hienosäätää kieli- ja alueasetuksia alla. PWQ Password is too short Salasana on liian lyhyt Password is too long Salasana on liian pitkä Password is too weak Salasana on liian heikko Memory allocation error when setting '%1' Muistin varausvirhe asetettaessa '%1' Memory allocation error Muistin varausvirhe The password is the same as the old one Salasana on sama kuin vanha The password is a palindrome Salasana on palindromi The password differs with case changes only Salasana eroaa vain vähäisin muutoksin The password is too similar to the old one Salasana on liian samanlainen kuin vanha The password contains the user name in some form Salasana sisältää jonkin käyttäjänimen The password contains words from the real name of the user in some form Salasana sisältää sanoja käyttäjän todellisesta nimestä jossain muodossa The password contains forbidden words in some form Salasana sisältää kiellettyjä sanoja The password contains 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. Valitse tuote luettelosta. Valittu tuote asennetaan. 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 osio %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Vapaa tila New partition Uusi osio Name Nimi File System Tiedostojärjestelmä File System Label Tiedostojärjestelmän nimi Mount Point Liitoskohta Size Koko PartitionPage Form Lomake Storage de&vice: Kiintole&vy: &Revert All Changes &Peru kaikki muutokset New Partition &Table Uusi osiointi&taulukko Cre&ate Luo& &Edit &Muokkaa &Delete &Poista New Volume Group Uusi taltioryhmä Resize Volume Group Muuta taltioryhmän kokoa Deactivate Volume Group Poista taltioryhmä käytöstä Remove Volume Group Poista taltioryhmä I&nstall boot loader on: A&senna käynnistyslatain: Are you sure you want to create a new partition table on %1? Haluatko varmasti luoda uuden osiotaulukon levylle %1? Can not create new partition Ei voi luoda uutta osiota The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. %1 osio-taulukossa on jo %2 ensisijaista osiota, eikä sitä voi lisätä. Poista yksi ensisijainen osio ja lisää laajennettu osio. PartitionViewStep Gathering system information... Kerätään järjestelmän tietoja... Partitions Osiot Unsafe partition actions are enabled. Epäturvalliset osiotoiminnot ovat käytössä. Partitioning is configured to <b>always</b> fail. Osiointi on määritetty <b>aina</b> epäonnistumaan. No partitions will be changed. Osioita ei muuteta. Current: Nykyinen: After: Jälkeen: No EFI system partition configured EFI-järjestelmäosiota ei ole määritetty EFI system partition configured incorrectly EFI-järjestelmäosio on määritetty väärin An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. EFI-järjestelmäosio on vaatimus käynnistääksesi %1.<br/><br/>Palaa jos haluat määrittää EFI-järjestelmäosion, valitse tai luo sopiva tiedostojärjestelmä. The filesystem must be mounted on <strong>%1</strong>. Tiedostojärjestelmä on asennettava <strong>%1</strong>. The filesystem must have type FAT32. Tiedostojärjestelmän on oltava tyyppiä FAT32. The filesystem must be at least %1 MiB in size. Tiedostojärjestelmän on oltava kooltaan vähintään %1 MiB. The filesystem must have flag <strong>%1</strong> set. Tiedostojärjestelmässä on oltava <strong>%1</strong> lippu. You can continue without setting up an EFI system partition but your system may fail to start. Voit jatkaa ilman EFI-järjestelmäosion määrittämistä, mutta järjestelmä ei ehkä käynnisty. Option to use GPT on BIOS BIOS:ssa mahdollisuus käyttää GPT:tä A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. GPT-osiotaulukko on paras vaihtoehto kaikille järjestelmille. Kuitenkin asennusohjelma tukee myös BIOS-järjestelmää.<br/><br/>Jos haluat määrittää GPT-osiotaulukon BIOS:ssa (jos et ole jo tehnyt) niin palaa takaisin ja aseta osiotaulukkoksi GPT. Luo seuraavaksi 8 Mt alustamaton osio <strong>%2</strong> lipulla käyttöön.<br/><br/>Alustamaton 8 Mt tarvitaan %1 käynnistämiseen BIOS-järjestelmässä, jossa on GPT. Boot partition not encrypted Käynnistysosiota ei ole salattu A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Erillinen käynnistysosio perustettiin yhdessä salatun juuriosion kanssa, mutta käynnistysosio ei ole salattu.<br/><br/>Tällaisissa asetuksissa on tietoturvaongelmia, koska tärkeät järjestelmätiedostot pidetään salaamattomassa osiossa.<br/>Voit jatkaa, jos haluat, mutta tiedostojärjestelmän lukituksen avaaminen tapahtuu myöhemmin järjestelmän käynnistyksen aikana.<br/>Käynnistysosion salaamiseksi siirry takaisin ja luo se uudelleen valitsemalla <strong>Salaa</strong> osion luominen -ikkunassa. has at least one disk device available. on vähintään yksi asema 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. Napsauttamalla ulkoasun valintaa saat suoran esikatselun tästä ulkoasusta. PlasmaLnfViewStep Look-and-Feel Ulkoasu PreserveFiles Saving files for later ... Tallennetaan tiedostoja myöhemmäksi... No files configured to save for later. Ei tiedostoja, joita olisi määritetty tallentamaan myöhemmin. Not all of the configured files could be preserved. Kaikkia määritettyjä tiedostoja ei voitu säilyttää. 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 taltioryhmä nimeltä %1. Remove Volume Group named <strong>%1</strong>. Poista taltioryhmä nimeltä <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Asennusoihjelma ei onnistunut poistamaan taltioryhmää '%1'. ReplaceWidget Form Lomake Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Valitse minne %1 asennetaan.<br/><font color="red">Varoitus: </font>tämä poistaa kaikki tiedostot valitulta osiolta. The selected item does not appear to be a valid partition. Valitsemaasi kohta ei näytä olevan kelvollinen osio. %1 cannot be installed on empty space. Please select an existing partition. %1 ei voi asentaa tyhjään tilaan. Valitse olemassa oleva osio. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 ei voida asentaa jatketun osion. Valitse olemassa oleva ensisijainen tai looginen osio. %1 cannot be installed on this partition. %1 ei voida asentaa tähän osioon. Data partition (%1) Dataosio (%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 asemalla '%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'. Asennusohjelma ei onnistunut muuttamaan taltioryhmän '%1' kokoa. ResultsListDialog For best results, please ensure that this computer: Saadaksesi parhaan lopputuloksen, tarkista että tämä tietokone: System requirements Järjestelmävaatimukset ScanningDialog Scanning storage devices... Etsitään massamuisteja... Partitioning Osiointi SetHostNameJob Set hostname %1 Aseta isäntänimi %1 Set hostname <strong>%1</strong>. Aseta isäntänimi <strong>%1</strong>. Setting hostname %1. Asetetaan isäntänimi %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, asetteluksi %2-%3 Failed to write keyboard configuration for the virtual console. Virtuaalikonsolin näppäimistöasetuksen tallentaminen epäonnistui. Failed to write to %1 Kirjoittaminen epäonnistui kohteeseen %1 Failed to write keyboard configuration for X11. X11-näppäimistöasetusten tallentaminen epäonnistui. Failed to write keyboard configuration to existing /etc/default directory. Näppäimistöasetusten kirjoittaminen epäonnistui olemassa olevaan /etc/default-hakemistoon. 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 kirjoitusta varten SetupGroupsJob Preparing groups. Valmistellaan ryhmiä. Could not create groups in target system Ryhmiä ei voitu luoda kohdejärjestelmään These groups are missing in the target system: %1 Kohderyhmästä puuttuu näitä ryhmiä: %1 SetupSudoJob Configure <pre>sudo</pre> users. Määritä <pre>sudo</pre>-käyttäjät. Cannot chmod sudoers file. Ei voida tehdä käyttöoikeuden muutosta sudoers-tiedostolle. Cannot create sudoers file for writing. Ei voida luoda sudoers-tiedostoa kirjoitettavaksi. ShellProcessJob Shell Processes Job Shell-prosessien työ SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK &OK &Yes &Kyllä &No &Ei &Cancel &Peruuta &Close &Sulje TrackingInstallJob Installation feedback Asennuksen palaute Sending installation feedback. Lähetetään asennuksen palautetta. Internal error in install-tracking. Sisäinen virhe asennuksen seurannassa. HTTP request timed out. HTTP-pyyntö aikakatkaistiin. TrackingKUserFeedbackJob KDE user feedback KDE-käyttäjäpalaute Configuring KDE user feedback. Määritetään KDE-käyttäjäpalaute. Error in KDE user feedback configuration. Virhe KDE:n käyttäjäpalautteen määrityksissä. Could not configure KDE user feedback correctly, script error %1. KDE-käyttäjäpalautetta ei voitu määrittää oikein, komentosarjassa virhe %1. Could not configure KDE user feedback correctly, Calamares error %1. KDE-käyttäjäpalautetta ei voitu määrittää oikein, Calamares-virhe %1. TrackingMachineUpdateManagerJob Machine feedback Koneen palaute Configuring machine feedback. Konekohtaisen palautteen määrittäminen. Error in machine feedback configuration. Virhe koneen palautteen määrityksessä. Could not configure machine feedback correctly, script error %1. Konekohtaista palautetta ei voitu määrittää oikein, komentosarjan virhe %1. Could not configure machine feedback correctly, Calamares error %1. Koneen palautetta ei voitu määrittää oikein, Calamares-virhe %1. 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 UmountJob Unmount file systems. Irrota tiedostojärjestelmät käytöstä. No target system available. Kohdejärjestelmää ei ole käytettävissä. No rootMountPoint is set. Ei ole asetettu rootMountPoint UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.</small> UsersQmlViewStep 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 taltioryhmä List of Physical Volumes Fyysisten taltioiden luettelo Volume Group Name: Taltioryhmän nimi: Volume Group Type: Taltioryhmän tyyppi: Physical Extent Size: Fyysinen koko: MiB Mib Total Size: Yhteensä koko: Used Size: Käytetty tila: Total Sectors: Sektorit yhteensä: Quantity of LVs: Loogisten taltioiden määrä: WelcomePage Form Lomake Select application and system language Valitse sovelluksen ja järjestelmän kieli 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 julkaisutietojen verkkosivusto &Release notes &Julkaisutiedot %1 support %1 tuki About %1 setup Tietoja %1 asetuksista About %1 installer Tietoa %1-asennusohjelmasta WelcomeQmlViewStep Welcome Tervetuloa WelcomeViewStep Welcome Tervetuloa ZfsJob Create ZFS pools and datasets Luo ZFS-poolit ja tietojoukot Failed to create zpool on Zpoolin luominen epäonnistui Configuration Error Määritysvirhe No partitions are available for ZFS. ZFS:lle ei ole saatavilla osioita. Internal data missing Sisäiset tiedot puuttuvat Failed to create zpool Epäonnistui zpoolin luominen Failed to create dataset Tietojoukon luominen epäonnistui The output was: Tulos oli: calamares-sidebar About Tietoa Debug Virheiden etsintä Show information about Calamares Show debug information Näytä virheenkorjaustiedot finishedq Installation Completed Asennus suoritettu %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 on asennettu tietokoneellesi.<br/> Voit käynnistää nyt uuteen järjestelmään tai jatkaa Live-ympäristön käyttöä. Close Installer Sulje asennusohjelma Restart System Käynnistä järjestelmä <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Täydellinen loki asennuksesta on saatavana nimellä install.log Live-käyttäjän kotihakemistossa.<br/> Tämä loki on kopioitu /var/log/installation.log-tiedostoon.</p> finishedq@mobile Installation Completed Asennus suoritettu %1 has been installed on your computer.<br/> You may now restart your device. %1 on asennettu tietokoneellesi.<br/> Voit nyt käynnistää uudelleen. Close Sulje Restart Käynnistä i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Kielet</h1> </br> Järjestelmän maa-asetus vaikuttaa komentorivin käyttöliittymän kieleen ja merkistöön. Nykyinen asetus on <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Maa-asetukset</h1> </br> Järjestelmän maa-asetus vaikuttaa numeroiden ja päivämäärien muotoihin. Nykyinen asetus on <strong>%1</strong>. Back Takaisin keyboardq To activate keyboard preview, select a layout. Jos haluat aktivoida näppäimistön esikatselun, valitse asettelu. Keyboard Model: Näppäimistön malli: Layouts Asettelut Type here to test your keyboard Kirjoita tähän testaksesi näppäimistöäsi. Variants Vaihtoehdot localeq Change Vaihda notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Nämä ovat esimerkkejä julkaisutiedoista.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice on tehokas ja ilmainen toimistopaketti, jota käyttävät miljoonat ihmiset ympäri maailmaa. Sisältää useita sovelluksia, joka tekee siitä markkinoiden monipuolisimman avoimen lähdekoodin toimistopaketin.<br/> Oletusvalinta. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Jos et halua asentaa toimistopakettia, valitse "Ei toimistopakettia". Voit aina lisätä myöhemmin yhden (tai useamman) asennettuun järjestelmään tarpeen mukaan. No Office Suite Ei toimistopakettia Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Luo minimaalinen työpöydän asennus, poista kaikki ylimääräiset sovellukset ja päätät myöhemmin, mitä haluat lisätä järjestelmääsi. Tällaisessa asennuksessa ei ole esimerkiksi toimistopakettia, mediasoittimia, kuvien katseluohjelmaa tai tulostintukea. Vain työpöytä, tiedostoselain, paketinhallinta, tekstieditori ja verkkoselain. Minimal Install Minimaalinen asennus Please select an option for your install, or use the default: LibreOffice included. Valitse asennuksen vaihtoehto tai käytä oletusta: LibreOffice sisältyy toimitukseen. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Tämä esimerkki QML-tiedostosta, jossa näkyvät RichText-asetukset, joissa on liukuva sisältö.</p> <p>QML Richtext voi käyttää HTML-tunnisteita, liukuva sisältö on hyödyllinen kosketusnäytöissä.</p> <p><b>Tämä on lihavoitu teksti</b></p> <p><i>Tämä on kursivoitu teksti</i></p> <p><u>Tämä on alleviivattu teksti</u></p> <p><center>Tämä teksti on keskitetty</center></p> <p><s>Tämä on yliviivattu</s></p> <p>Koodiesimerkki: <code>ls -l /home</code></p> <p><b>Listat:</b></p> <ul> <li>Intel CPU järjestelmät</li> <li>AMD CPU järjestelmät</li> </ul> <p>Pystysuuntainen vieritys on säädettävissä, leveys nyt 10.</p> Back Takaisin usersq Pick your user name and credentials to login and perform admin tasks Valitse käyttäjänimi kirjautumiseen ja järjestelmänvalvojan tehtävien suorittamiseen What is your name? Mikä on nimesi? Your Full Name Koko nimesi What name do you want to use to log in? Mitä nimeä haluat käyttää sisäänkirjautumisessa? Login Name Kirjautumisnimi If more than one person will use this computer, you can create multiple accounts after installation. Jos tätä tietokonetta käyttää useampi kuin yksi henkilö, voit luoda useita tilejä asennuksen jälkeen. Only lowercase letters, numbers, underscore and hyphen are allowed. Vain pienet kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. root is not allowed as username. root ei ole sallittu käyttäjänimeksi. What is the name of this computer? Mikä on tämän tietokoneen nimi? Computer Name Tietokoneen nimi This name will be used if you make the computer visible to others on a network. Tätä nimeä käytetään, jos teet tietokoneen näkyväksi verkon muille käyttäjille. localhost is not allowed as hostname. localhost ei ole sallittu koneen nimeksi. Choose a password to keep your account safe. Valitse salasana pitääksesi tilisi turvallisena. Password Salasana Repeat Password Toista salasana Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Syötä sama salasana kahdesti, jotta se voidaan tarkistaa kirjoittamisvirheiden varalta. Hyvä salasana sisältää sekoituksen kirjaimia, numeroita ja välimerkkejä. Vähintään kahdeksan merkkiä pitkä ja se on vaihdettava säännöllisin väliajoin. Validate passwords quality Tarkista salasanojen laatu When this box is checked, password-strength checking is done and you will not be able to use a weak password. Kun tämä valintaruutu on valittu, salasanan vahvuus tarkistetaan, etkä voi käyttää heikkoa salasanaa. Log in automatically without asking for the password Kirjaudu automaattisesti ilman salasanaa Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Vain kirjaimet, numerot, alaviiva ja väliviiva ovat sallittuja, vähintään kaksi merkkiä. Reuse user password as root password Käytä käyttäjän salasanaa myös root-salasanana Use the same password for the administrator account. Käytä pääkäyttäjän tilillä samaa salasanaa. Choose a root password to keep your account safe. Valitse root-salasana, jotta tilisi pysyy turvassa. Root Password Root-salasana Repeat Root Password Toista Root-salasana Enter the same password twice, so that it can be checked for typing errors. Syötä sama salasana kahdesti, jotta se voidaan tarkistaa kirjoitusvirheiden varalta. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Tervetuloa %1 <quote>%2</quote> -asentajaan</h3> <p>Tämä ohjelma esittää sinulle joitain kysymyksiä liittyen järjestelmään %1 ja asentaa sen tietokoneellesi.</p> Support Tuki Known issues Tunnetut ongelmat Release notes Julkaisutiedot Donate Lahjoita calamares-calamares-2d126ae/lang/calamares_fr.ts000066400000000000000000007262231430147706700217330ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/>pour %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. 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. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;1<br/> 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). En attente de %n module(s). (%n second(s)) (%n seconde(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é 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. Définir l'étiquette du système de fichiers sur %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 Successfully unmounted %1. Démontage réussi de %1. Successfully disabled swap %1. Le swap %1 a été désactivé avec succès. Successfully cleared swap %1. Le swap %1 a été effacé avec succès. Successfully closed mapper device %1. Le périphérique mappeur %1 a été fermé avec succès. Successfully disabled volume group %1. Le groupe de volumes %1 a été désactivé avec succès. 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. 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é. Packages Paquets Install option: <strong>%1</strong> Option d'installation : <strong>%1</strong> None Aucun Summary Résumé This is an overview of what will happen once you start the setup procedure. Ceci est un aperçu de ce qui va arriver lorsque vous commencerez la configuration. This is an overview of what will happen once you start the install procedure. Ceci est un aperçu de ce qui va arriver lorsque vous commencerez l'installation. ContextualProcessJob Contextual Processes Job Tâche des processus contextuels CreatePartitionDialog Create a Partition Créer une partition Si&ze: Ta&ille : MiB Mio Partition &Type: Type de partition : Primar&y Primair&e 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 Étiquette pour le système de fichiers FS Label: Étiquette FS : En&crypt Chi&ffrer Logical Logique Primary Primaire GPT GPT Mountpoint already in use. Please select another one. Le point de montage est déjà utilisé. Merci d'en sélectionner un autre. Mountpoint must start with a <tt>/</tt>. Le point de montage doit commencer par un <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Créer une nouvelle partition %1 Mio sur %3 (%2) avec les entrées %4. Create new %1MiB partition on %3 (%2). Créer une nouvelle partition %1 Mio sur %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Créer une nouvelle partition de %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 Con&tent: Con&tenu : &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 Étiquette pour le système de fichiers FS Label: Étiquette FS : Passphrase for existing partition Mot de passe pour la partition existante Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. La partition %1 n'a pas pu être déchiffrée avec la phrase secrète donnée. <br/><br/>Modifier à nouveau la partition et indiquer la phrase secrète correcte ou supprimer et créer une nouvelle partition chiffrée. EncryptWidget Form Formulaire En&crypt system Chi&ffrer le système Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Votre système ne semble pas prendre en charge le chiffrement suffisamment bien pour chiffrer l'ensemble du système. Vous pouvez activer le chiffrement, mais les performances peuvent en souffrir. 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. ErrorDialog Details: Détails : Would you like to paste the install log to the web? Voulez-vous copier le journal d'installation sur le Web ? FillGlobalStorageJob Set partition information Configurer les informations de la partition Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Installer %1 sur la <strong>nouvelle</strong> partition système %2 avec les fonctionnalités <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Installer %1 sur le <strong>nouveau</strong> système de partition %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Configuration du swap chiffrée. No target system available. Aucun système cible disponible. No rootMountPoint is set. Aucun point de montage racine n'est défini. No configFilePath is set. Aucun chemin de fichier de configuration n'est défini. 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 label for netinstall module, Linux kernel Noyau Services label for netinstall module, system services Services Login label for netinstall module, choose login manager Connexion Desktop label for netinstall module, choose desktop environment Bureau Communication label for netinstall module Communication Development label for netinstall module Développement Office label for netinstall module Bureautique Multimedia label for netinstall module Multimédia Internet label for netinstall module Internet Theming label for netinstall module Thèmes Gaming label for netinstall module Jeux Utilities label for netinstall module Utilitaires Applications Applications 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. Sélectionner votre région préférée ou utiliser les paramètres par défaut. 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 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 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 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 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 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 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 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 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 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é. 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 Libellé du système de fichiers 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 Unsafe partition actions are enabled. Les actions de partition non sécurisées sont activées. Partitioning is configured to <b>always</b> fail. Le partitionnement est configuré pour <b>toujours</b> échouer. No partitions will be changed. Aucune partition ne sera modifiée. Current: Actuel : After: Après : No EFI system partition configured Aucune partition système EFI configurée EFI system partition configured incorrectly Partition système EFI mal 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 suitable filesystem. Une partition système EFI est nécessaire pour démarrer %1.<br/><br/>Pour configurer une partition système EFI, revenir en arrière et sélectionner ou créer un système de fichiers approprié. The filesystem must be mounted on <strong>%1</strong>. Le système de fichiers doit être monté sur <strong>%1</strong>. The filesystem must have type FAT32. Le système de fichiers doit avoir le type FAT32. The filesystem must be at least %1 MiB in size. Le système de fichiers doit avoir une taille d'au moins %1 Mio. The filesystem must have flag <strong>%1</strong> set. Le système de fichiers doit avoir l'indicateur <strong>%1</strong> défini. You can continue without setting up an EFI system partition but your system may fail to start. Vous pouvez continuer sans configurer de partition système EFI, mais votre système risque de ne pas démarrer. Option to use GPT on BIOS Option pour utiliser GPT sur le BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. 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), revenir en arrière et définir la table de partition sur GPT, puis créer une partition non formatée de 8 Mo avec l'indicateur <strong>%2</strong> activé.<br/><br/>Une partition non formatée de 8 Mo 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 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 StandardButtons &OK &OK &Yes &Oui &No &Non &Cancel &Annuler &Close &Fermer TrackingInstallJob Installation feedback Rapport d'installation Sending installation feedback. Envoi en cours du rapport d'installation. Internal error in install-tracking. Erreur interne dans le suivi d'installation. HTTP request timed out. La requête HTTP a échoué. 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 UmountJob Unmount file systems. Démonter les systèmes de fichiers No target system available. Aucun système cible disponible. No rootMountPoint is set. Aucun point de montage racine n'est défini. 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 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 %1 support Support de %1 About %1 setup À propos de la configuration de %1 About %1 installer À propos de l'installateur %1 WelcomeQmlViewStep Welcome Bienvenue WelcomeViewStep Welcome Bienvenue ZfsJob Create ZFS pools and datasets Créer des pools et des jeux de données ZFS Failed to create zpool on Impossible de créer zpool sur Configuration Error Erreur de configuration No partitions are available for ZFS. Aucune partition n'est disponible pour ZFS. Internal data missing Données internes manquantes Failed to create zpool Impossible de créer zpool Failed to create dataset Échec de la création de l'ensemble de données The output was: La sortie était : calamares-sidebar About À propos Debug Débug Show information about Calamares Show debug information Afficher les informations de dépannage finishedq Installation Completed Installation terminée %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 a été installé sur votre ordinateur.<br/> Vous pouvez maintenant redémarrer votre nouveau système ou continuer à utiliser l'environnement en direct. Close Installer Fermer l'installateur Restart System Redémarrer le système <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Un journal complet de l'installation est disponible sous le nom d'installation.log dans le répertoire de base de l'utilisateur en direct.<br/> Ce journal est copié dans /var/log/installation.log du système cible.</p> finishedq@mobile Installation Completed Installation terminée %1 has been installed on your computer.<br/> You may now restart your device. %1 a été installé sur votre ordinateur.<br/> Vous pouvez maintenant redémarrer votre appareil. Close Fermer Restart Redémarrer 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 To activate keyboard preview, select a layout. Pour activer l'aperçu du clavier, sélectionner une disposition. Keyboard Model: Modèle de clavier : Layouts Dispositions Type here to test your keyboard Saisir ici pour tester votre clavier Variants Variantes 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> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice est une suite bureautique puissante et gratuite, utilisée par des millions de personnes dans le monde. Il comprend plusieurs applications qui en font la suite bureautique libre et open source la plus polyvalente du marché.<br/> Option par défaut. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Si vous ne souhaitez pas installer de suite bureautique, sélectionner simplement Aucune suite bureautique. Vous pouvez toujours en ajouter un (ou plusieurs) plus tard sur votre système installé au fur et à mesure que le besoin se fait sentir. No Office Suite Pas de suite bureautique Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Créer une installation de bureau minimale, supprimer toutes les applications supplémentaires et décider plus tard de ce que vous souhaitez ajouter à votre système. Exemples de ce qui ne sera pas sur une telle installation, il n'y aura pas de suite Office, pas de lecteurs multimédias, pas de visionneuse d'images ou de support d'impression. Ce ne sera qu'un bureau, un navigateur de fichiers, un gestionnaire de packages, un éditeur de texte et un simple navigateur Web. Minimal Install Installation minimale Please select an option for your install, or use the default: LibreOffice included. Veuillez sélectionner une option pour votre installation, ou utiliser la valeur par défaut : LibreOffice inclus. 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> Support Support Known issues Problèmes connus Release notes Notes de version Donate Faites un don calamares-calamares-2d126ae/lang/calamares_fur.ts000066400000000000000000007021001430147706700221040ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. L'<strong>ambient di inviament</strong> di chest sisteme. I vecjos sistemis x86 a supuartin dome <strong>BIOS</strong>.<br>I sistemis modernis di solit a doprin <strong>EFI</strong>, ma a puedin ancje mostrâsi tant che BIOS se si ju invie inte modalitât di compatibilitât. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Chest sisteme al è stât inviât cuntun ambient di inviament <strong>EFI</strong>.<br><br>Par configurâ l'inviament di un ambient EFI chest program di instalazion al scugne meti in vore une aplicazion che e gjestìs l'inviament, come <strong>GRUB</strong> o <strong>systemd-boot</strong>, suntune <strong>Partizion di sisteme EFI</strong>. Cheste operazion e ven fate in automatic, gjavant che no si sielzi di partizionâ a man il disc, in chest câs si scugnarà sielzile o creâle di bessôi. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Chest sisteme al è stât inviât cuntun ambient di inviament <strong>BIOS</strong>.<br><br>Par configurâ l'inviament di un ambient BIOS chest program di instalazion al scugne instalâ un gjestôr di inviament, come <strong>GRUB</strong>, o al inizi di une partizion o sul <strong>Master Boot Record</strong> che al sta dongje de tabele des partizions (opzion preferide). Chest al ven fat in automatic, gjavant che no si sielzi di partizionâ a man il disc, in chest câs si scugnarà configurâlu di bessôi. BootLoaderModel Master Boot Record of %1 Master Boot Record di %1 Boot Partition Partizion di inviament System Partition Partizion di sisteme Do not install a boot loader No sta instalâ un gjestôr di inviament %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Pagjine vueide Calamares::DebugWindow Form Formulari GlobalStorage ArchiviGlobâl JobQueue Code dai lavôrs Modules Modui Type: Gjenar: none nissun Interface: Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Torne cjarie sfuei di stîl Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Arbul dai widget Debug information Informazions di debug Calamares::ExecutionViewStep Set up Impostazion Install Instale Calamares::FailJob Job failed (%1) Operazion falide (%1) Programmed job failure was explicitly requested. Il faliment de operazion programade al è stât domandât in maniere esplicite. Calamares::JobThread Done Fat Calamares::NamedJob Example job (%1) Lavôr di esempli (%1) Calamares::ProcessJob Run command '%1' in target system. Eseguìs il comant '%1' tal sisteme di destinazion. Run command '%1'. Eseguìs il comant '%1'. Running command %1 %2 Daûr a eseguî il comant %1 %2 Calamares::PythonJob Running %1 operation. Operazion %1 in esecuzion. Bad working directory path Il percors de cartele di lavôr nol è just Working directory %1 for python job %2 is not readable. No si rive a lei la cartele di lavôr %1 pe operazion di python %2. Bad main script file Il file di script principâl nol è valit Main script file %1 for python job %2 is not readable. No si rive a lei il file di script principâl %1 pe operazion di python %2. Boost.Python error in job "%1". Erôr di Boost.Python te operazion "%1". Calamares::QmlViewStep Loading ... Daûr a cjariâ ... QML Step <i>%1</i>. Pas QML <i>%1</i>. Loading failed. Cjariament falît. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Il control dai recuisîts pal modul <i>%1</i> al è complet. Waiting for %n module(s). In spiete di %n modul. In spiete di %n modui. (%n second(s)) (%n secont) (%n seconts) System-requirements checking is complete. Il control dai recuisîts di sisteme al è complet. Calamares::ViewManager Setup Failed Configurazion falide Installation Failed Instalazion falide Error Erôr &Yes &Sì &No &No &Close S&iere Install Log Paste URL URL de copie dal regjistri di instalazion The upload was unsuccessful. No web-paste was done. Il cjariament sù pe rêt al è lât strucj. No je stade fate nissune copie sul web. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed Inizializazion di Calamares falide %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. No si pues instalâ %1. Calamares nol è rivât a cjariâ ducj i modui configurâts. Chest probleme achì al è causât de distribuzion e di cemût che al ven doprât Calamares. <br/>The following modules could not be loaded: <br/>I modui chi sot no puedin jessi cjariâts: Continue with setup? Continuâ cu la configurazion? Continue with installation? Continuâ cu la instalazion? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Il program di configurazion %1 al sta par aplicâ modifichis al disc, di mût di podê instalâ %2.<br/><strong>No si podarà tornâ indaûr e anulâ chestis modifichis.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Il program di instalazion %1 al sta par aplicâ modifichis al disc, di mût di podê instalâ %2.<br/><strong>No tu podarâs tornâ indaûr e anulâ chestis modifichis.</strong> &Set up now &Configure cumò &Install now &Instale cumò Go &back &Torne indaûr &Set up &Configure &Install &Instale Setup is complete. Close the setup program. Configurazion completade. Siere il program di configurazion. The installation is complete. Close the installer. La instalazion e je stade completade. Siere il program di instalazion. Cancel setup without changing the system. Anule la configurazion cence modificâ il sisteme. Cancel installation without changing the system. Anulâ la instalazion cence modificâ il sisteme. &Next &Sucessîf &Back &Indaûr &Done &Fat &Cancel &Anule Cancel setup? Anulâ la configurazion? Cancel installation? Anulâ la instalazion? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Anulâ pardabon il procès di configurazion? Il program di configurazion al jessarà e dutis lis modifichis a laran pierdudis. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Anulâ pardabon il procès di instalazion? Il program di instalazion al jessarà e dutis lis modifichis a laran pierdudis. CalamaresPython::Helper Unknown exception type Gjenar di ecezion no cognossût unparseable Python error erôr Python che no si pues analizâ unparseable Python traceback rapuart di ricercje erôr di Python che no si pues analizâ Unfetchable Python error. erôr di Python che no si pues recuperâ. CalamaresWindow %1 Setup Program Program di configurazion di %1 %1 Installer Program di instalazion di %1 ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... Daûr a dâ dongje lis informazions dal sisteme... ChoicePage Form Formulari Select storage de&vice: Selezione il &dispositîf di memorie: Current: Atuâl: After: Dopo: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Partizionament manuâl</strong><br/>Tu puedis creâ o ridimensionâ lis partizions di bessôl. Reuse %1 as home partition for %2. Torne dopre %1 come partizion home par %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selezione une partizion di scurtâ, dopo strissine la sbare inferiôr par ridimensionâ</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 e vignarà scurtade a %2MiB e une gnove partizion di %3MiB e vignarà creade par %4. Boot loader location: Ubicazion dal gjestôr di inviament: <strong>Select a partition to install on</strong> <strong>Selezione une partizion dulà lâ a instalâ</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Impussibil cjatâ une partizion di sisteme EFI. Par plasê torne indaûr e dopre un partizionament manuâl par configurâ %1. The EFI system partition at %1 will be used for starting %2. La partizion di sisteme EFI su %1 e vignarà doprade par inviâ %2. EFI system partition: Partizion di sisteme EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Al somee che chest dispositîf di memorie nol vedi parsore un sisteme operatîf. Ce desideristu fâ?<br/>Tu podarâs tornâ a viodi e confermâ lis tôs sieltis prime di aplicâ cualsisei modifiche al dispositîf di memorie. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Scancelâ il disc</strong><br/>Chest al <font color="red">eliminarà</font> ducj i dâts presints sul dispositîf di memorie selezionât. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalâ in bande</strong><br/>Il program di instalazion al scurtarà une partizion par fâ spazi a %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Sostituî une partizion</strong><br/>Al sostituìs une partizion cun %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Chest dispositîf di memorie al à parsore %1. Ce desideristu fâ? <br/>Tu podarâs tornâ a viodi e confermâ lis tôs sieltis prime di aplicâ cualsisei modifiche al dispositîf di memorie. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Chest dispositîf di memorie al à za parsore un sisteme operatîf. Ce desideristu fâ?<br/>Tu podarâs tornâ a viodi e confermâ lis tôs sieltis prime di aplicâ cualsisei modifiche al dispositîf di memorie. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Chest dispositîf di memorie al à parsore plui sistemis operatîfs. Ce desideristu fâ?<br/>Tu podarâs tornâ a viodi e confermâ lis tôs sieltis prime di aplicâ cualsisei modifiche al dispositîf di memorie. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> Chest dispositîf di memorie al à za un sisteme operatîf parsore, ma la tabele des partizions <strong>%1</strong> e je diferente di chê che a covente: <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. Une des partizions dal dispositîf di memorie e je <strong>montade</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. Chest dispositîf di memorie al fâs part di un dispositîf <strong>RAID inatîf</strong>. No Swap Cence Swap Reuse Swap Torne dopre Swap Swap (no Hibernate) Swap (cence ibernazion) Swap (with Hibernate) Swap (cun ibernazion) Swap to file Swap su file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Netâ i ponts di montaç pes operazions di partizionament su %1 Clearing mounts for partitioning operations on %1. Daûr a netâ i ponts di montaç pes operazions di partizionament su %1. Cleared all mounts for %1 Netâts ducj i ponts di montaç par %1 ClearTempMountsJob Clear all temporary mounts. Netâ ducj i ponts di montaç temporanis. Clearing all temporary mounts. Daûr a netâ ducj i ponts di montaç temporanis. Cleared all temporary mounts. Netâts ducj i ponts di montaç temporanis. CommandList Could not run command. Impussibil eseguî il comant. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Il comant al ven eseguît tal ambient anfitrion (host) e al à bisugne di savê il percors lidrîs (root), ma nol è stât definît nissun rootMountPoint (pont di montaç de lidrîs). The command needs to know the user's name, but no username is defined. Il comant al à bisugne di cognossi il non dal utent, ma nol è stât definît nissun non utent. Config Set keyboard model to %1.<br/> Stabilî il model di tastiere a %1.<br/> Set keyboard layout to %1/%2. Stabilî la disposizion di tastiere a %1/%2. Set timezone to %1/%2. Stabilî il fûs orari a %1/%2. The system language will be set to %1. La lenghe dal sisteme e vignarà configurade a %1. The numbers and dates locale will be set to %1. La localizazion dai numars e des datis e vignarà configurade a %1. Network Installation. (Disabled: Incorrect configuration) Instalazion di rêt (Disabilitade: configurazion no valide) Network Installation. (Disabled: Received invalid groups data) Instalazion di rêt. (Disabilitade: ricevûts dâts di grups no valits) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Selezion pachets Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalazion di rêt. (Disabilitade: impussibil recuperâ la liste dai pachets, controlâ la conession di rêt) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Chest computer nol sodisfe i recuisîts minims pe configurazion di %1.<br/>La configurazion no pues continuâ. <a href="#details">Detais...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Chest computer nol sodisfe i recuisîts minims pe instalazion di %1.<br/>La instalazion no pues continuâ. <a href="#details">Detais...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Chest computer nol sodisfe cualchi recuisît conseât pe configurazion di %1.<br/>La configurazion e pues continuâ, ma cualchi funzionalitât e podarès vignî disabilitade. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Chest computer nol sodisfe cualchi recuisît conseât pe instalazion di %1.<br/>La instalazion e pues continuâ, ma cualchi funzionalitât e podarès vignî disabilitade. This program will ask you some questions and set up %2 on your computer. Chest program al fasarà cualchi domande e al configurarà %2 sul computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Benvignûts sul program di configurazion Calamares par %1</h1> <h1>Welcome to %1 setup</h1> <h1>Benvignûts te configurazion di %1</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Benvignûts sul program di instalazion Calamares par %1</h1> <h1>Welcome to the %1 installer</h1> <h1>Benvignûts tal program di instalazion di %1</h1> Your username is too long. Il to non utent al è masse lunc. '%1' is not allowed as username. '%1' nol è ametût come non utent. Your username must start with a lowercase letter or underscore. Il to non utent al scugne scomençâ cuntune letare minuscule o une liniute basse. Only lowercase letters, numbers, underscore and hyphen are allowed. A son ametûts dome i numars, lis letaris minusculis, lis liniutis bassis e i tratuts. Your hostname is too short. Il to non host al è masse curt. Your hostname is too long. Il to non host al è masse lunc. '%1' is not allowed as hostname. '%1' nol è ametût come non host. Only letters, numbers, underscore and hyphen are allowed. A son ametûts dome i numars, lis letaris, lis liniutis bassis e i tratuts. Your passwords do not match! Lis passwords no corispuindin! OK! Setup Failed Configurazion falide Installation Failed Instalazion falide The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Configurazion completade Installation Complete Instalazion completade The setup of %1 is complete. La configurazion di %1 e je completade. The installation of %1 is complete. La instalazion di %1 e je completade. Package Selection Selezion pachets Please pick a product from the list. The selected product will be installed. Sielç un prodot de liste. Il prodot selezionât al vignarà instalât. Packages Pachets Install option: <strong>%1</strong> None Summary Sintesi This is an overview of what will happen once you start the setup procedure. Cheste e je une panoramiche di ce che al sucedarà une volte inviade la procedure di configurazion. This is an overview of what will happen once you start the install procedure. Cheste e je une panoramiche di ce che al sucedarà une volte inviade la procedure di instalazion. ContextualProcessJob Contextual Processes Job Lavôr dai procès contestuâi CreatePartitionDialog Create a Partition Creâ une partizion Si&ze: Di&mension: MiB MiB Partition &Type: &Gjenar di partizion: Primar&y E&xtended E&stese Fi&le System: Fi&le System: LVM LV name Non VL LVM &Mount Point: &Pont di montaç: Flags: Proprietâts: Label for the filesystem FS Label: En&crypt Ci&frâ Logical Logjiche Primary Primarie GPT GPT Mountpoint already in use. Please select another one. Pont di montaç za in ûs. Selezione un altri. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Creâ une gnove partizion di %2MiB su %4 (%3) cul filesystem %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creâ une gnove partizion di <strong>%2MiB</strong> su <strong>%4</strong> (%3) cul filesystem <strong>%1</strong>. Creating new %1 partition on %2. Daûr a creâ une gnove partizion %1 su %2. The installer failed to create partition on disk '%1'. Il program di instalazion nol è rivât a creâ la partizion sul disc '%1'. CreatePartitionTableDialog Create Partition Table Creâ la tabele des partizions Creating a new partition table will delete all existing data on the disk. Creant une gnove tabele des partizions si eliminarà ducj i dâts esistents sul disc. What kind of partition table do you want to create? Ce gjenar di tabele des partizions si desiderie creâ? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Creâ une gnove tabele des partizions %1 su %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creâ une gnove tabele des partizions <strong>%1</strong> su <strong>%2</strong>(%3). Creating new %1 partition table on %2. Daûr a creâ une gnove tabele des partizions %1 su %2. The installer failed to create a partition table on %1. Il program di instalazion nol è rivât a creâ une tabele des partizions su %1. CreateUserJob Create user %1 Creâ l'utent %1 Create user <strong>%1</strong>. Creâ l'utent <strong>%1</strong>. Preserving home directory Si preserve la cartele home Creating user %1 Configuring user %1 Daûr a configurâ l'utent %1 Setting file permissions Daûr a stabilî i permès dai file CreateVolumeGroupDialog Create Volume Group Creâ Grup di Volums CreateVolumeGroupJob Create new volume group named %1. Creâ un gnûf grup di volums clamât %1. Create new volume group named <strong>%1</strong>. Creâ un gnûf grup di volums clamât <strong>%1</strong>. Creating new volume group named %1. Daûr a creâ un gnûf grup di volums clamât %1. The installer failed to create a volume group named '%1'. Il program di instalazion nol è rivât a creâ un grup di volums clamât '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Disativâ grup di volums clamât %1. Deactivate volume group named <strong>%1</strong>. Disativâ grup di volums clamât <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Il program di instalazion nol è rivât a disativâ un grup di volums clamât %1. DeletePartitionJob Delete partition %1. Eliminâ partizion %1. Delete partition <strong>%1</strong>. Eliminâ partizion <strong>%1</strong>. Deleting partition %1. Daûr a eliminâ la partizion %1. The installer failed to delete partition %1. Il program di instalazion nol è rivât a eliminâ la partizion %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. Chest dispositîf al à une tabele des partizions <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Chest al è un dispositîf di <strong>loop</strong>.<br><br>Al è un pseudodispositîf cence tabele des partizions che al fâs deventâ un file un dispositîf a blocs. Chest gjenar di configurazion di solit al conten dome un sôl filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Il program di instalazion <strong>nol rive a rilevâ une tabele des partizions</strong> sul dispositîf di memorie selezionât.<br><br>O il dispositîf nol à une tabele des partizions o la tabele des partizions e je ruvinade o di gjenar no cognossût.<br>Chest program di instalazion al pues creâ une gnove tabele des partizions par te sedi in maniere automatiche che cu la pagjine dal partizionament manuâl. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Chest al è il gjenar di tabele des partizions conseade pai sistemis modernis che a partissin di un ambient di inviament <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Chest gjenar di tabele des partizions al è conseât dome pai sistemis plui vecjos, chei che a partissin di un ambient di inviament <strong>BIOS</strong>. In ducj chei altris câs al è conseât doprâ GPT.<br><br><strong>Atenzion:</strong>la tabele des partizions MBR al è un standard sorpassât de ete di MS-DOS.<br>A puedin jessi creadis dome 4 partizions <em>primariis</em> e di chês 4 dome une e pues jessi une partizion <em>estese</em>, che però a pues contignî tantis partizions <em>logjichis</em>. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Il gjenar di <strong>tabele des partizions</strong> sul dispositîf di memorie selezionât.<br><br>La uniche maniere par cambiâ il gjenar di tabele des partizions e je chê di scancelâle e tornâ a creâ la tabele des partizion di zero. Cheste operazion e distrûç ducj i dâts sul dispositîf di memorie. <br>Chest program di instalazion al tignarà la tabele des partizions atuâl gjavât che no tu decidis in mût esplicit il contrari.<br>Se no tu sês sigûr, si preferìs doprâ GPT sui sistemis modernis. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Scrivi la configurazion LUKS par Dracut su %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Salt de scriture de configurazion LUKS par Dracut: la partizion "/" no je cifrade Failed to open %1 No si è rivâts a vierzi %1 DummyCppJob Dummy C++ Job Lavôr C++ pustiç EditExistingPartitionDialog Edit Existing Partition Modificâ partizion esistente Con&tent: &Keep &Mantignî Format Formatâ Warning: Formatting the partition will erase all existing data. Atenzion: la formatazion de partizion e scancelarà ducj i dâts esistents. &Mount Point: &Pont di montaç: Si&ze: Di&mension: MiB MiB Fi&le System: Fi&le System: Flags: Proprietâts: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formulari En&crypt system &Cifrâ il sisteme Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Frase di acès Confirm passphrase Conferme frase di acès Please enter the same passphrase in both boxes. Par plasê inserìs la stesse frase di acès in ducj i doi i ricuadris. ErrorDialog Details: Would you like to paste the install log to the web? Meti sul web il regjistri di instalazion? FillGlobalStorageJob Set partition information Stabilî informazions di partizion Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Instalâ %1 te <strong>gnove</strong> partizion di sisteme %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Instalâ %2 te partizion di sisteme %3 <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Instalâ il gjestôr di inviament su <strong>%1</strong>. Setting up mount points. Daûr a configurâ i ponts di montaç. FinishedPage Form Formulari &Restart now &Torne invie cumò <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Fat dut.</h1><br/>%1 al è stât configurât sul computer.<br/>Tu puedis cumò scomençâ a doprâ il gnûf sisteme. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Cuant che cheste casele e ven selezionade, il sisteme al tornarà a inviâsi a colp apene che si fasarà clic su <span style="font-style:italic;">Fat</span> o si sierarà il program di configurazion.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Fat dut.</h1><br/>%1 al è stât instalât sul computer.<br/>Tu puedis tornâ a inviâ la machine tal gnûf sisteme o continuâ a doprâ l'ambient Live di %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Cuant che cheste casele e ven selezionade, il sisteme al tornarà a inviâsi a colp apene che si fasarà clic su <span style="font-style:italic;">Fat</span> o si sierarà il program di instalazion.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Configurazion falide</h1><br/>%1 nol è stât configurât sul to computer.<br/>Il messaç di erôr al jere: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalazion falide</h1><br/>%1 nol è stât instalât sul to computer.<br/>Il messaç di erôr al jere: %2. FinishedQmlViewStep Finish Finìs FinishedViewStep Finish Finìs FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatâ la partizion %1 (filesystem: %2, dimension %3 MiB) su %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatâ la partizion <strong>%1</strong> di <strong>%3MiB</strong> cul filesystem <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. Daûr a formatâ la partizion %1 cul filesystem %2. The installer failed to format partition %1 on disk '%2'. Il program di instalazion nol è rivât a formatâ la partizion %1 sul disc '%2'. GeneralRequirements has at least %1 GiB available drive space al à almancul %1 GiB di spazi disponibil There is not enough drive space. At least %1 GiB is required. No si à vonde spazi libar te unitât. Al covente spazi par almancul %1 GiB. has at least %1 GiB working memory al à almancul %1 GiB di memorie di lavôr The system does not have enough working memory. At least %1 GiB is required. Il sisteme nol à vonde memorie di lavôr. Al covente spazi par almancul %1 GiB. is plugged in to a power source al è tacât a une prese di alimentazion The system is not plugged in to a power source. Il sisteme nol è tacât a une prese di alimentazion. is connected to the Internet al è tacât a internet The system is not connected to the Internet. Il sisteme nol è tacât a internet. is running the installer as an administrator (root) al sta eseguint il program di instalazion come aministradôr (root) The setup program is not running with administrator rights. Il program di configurazion nol è in esecuzion cui permès di aministradôr. The installer is not running with administrator rights. Il program di instalazion nol è in esecuzion cui permès di aministradôr. has a screen large enough to show the whole installer al à un schermi avonde grant par mostrâ dut il program di instalazion The screen is too small to display the setup program. Il schermi al è masse piçul par visualizâ il program di configurazion. The screen is too small to display the installer. Il schermi al è masse piçul par visualizâ il program di instalazion. HostInfoJob Collecting information about your machine. Daûr a tirâ dongje lis informazions su la machine. IDJob OEM Batch Identifier Identificadôr dal lot OEM Could not create directories <code>%1</code>. Impussibil creâ lis cartelis <code>%1</code>. Could not open file <code>%1</code>. Impussibil vierzi il file <code>%1</code>. Could not write to file <code>%1</code>. Impussibil scrivi sul file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Daûr a creâ initramfs cun mkinitcpio. InitramfsJob Creating initramfs. Daûr a creâ initramfs. InteractiveTerminalPage Konsole not installed Konsole no instalade Please install KDE Konsole and try again! Par plasê instale KDE Konsole e torne prove! Executing script: &nbsp;<code>%1</code> Esecuzion script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Tastiere KeyboardViewStep Keyboard Tastiere LCLocaleDialog System locale setting Impostazion di localizazion dal sisteme The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. La impostazion di localizazion dal sisteme e interesse la lenghe e la cumbinazion di caratars par cualchi element de interface utent a rie di comant.<br/>La impostazion atuâl e je <strong>%1</strong>. &Cancel &Anule &OK &Va ben LOSHJob Configuring encrypted swap. Daûr a configurâ la memorie di scambi (swap) cifrade. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formulari <h1>License Agreement</h1> <h1>Acuardi di licence</h1> I accept the terms and conditions above. O aceti i tiermins e lis condizions chi parsore. Please review the End User License Agreements (EULAs). Si pree di tornâ a viodi i acuardis di licence pal utent finâl (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. La procedure di configurazion e instalarà software proprietari sometût a tiermins di licence. If you do not agree with the terms, the setup procedure cannot continue. Se no tu concuardis cui tiermins, la procedure di configurazion no pues continuâ. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Cheste procedure di configurazion e pues instalâ software proprietari che al è sometût a tiermins di licence par podê furnî funzionalitâts adizionâls e miorâ la esperience dal utent. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Se no tu concuardis cui tiermins, il software proprietari nol vignarà instalât e al lôr puest a vignaran dopradis lis alternativis open source. LicenseViewStep License Licence LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>di %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 driver video</strong><br/><font color="Grey">di %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 plugin dal navigadôr</strong><br/><font color="Grey">di %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">di %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pachet</strong><br/><font color="Grey">di %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">di %2</font> File: %1 File: %1 Hide license text Plate il test de licence Show the license text Mostre il test de licence Open license agreement in browser. Vierç l'acuardi di licence tal navigadôr. LocalePage Region: Regjon: Zone: Zone: &Change... &Cambie... LocaleQmlViewStep Location Posizion LocaleTests Quit LocaleViewStep Location Posizion LuksBootKeyFileJob Configuring LUKS key file. Daûr a configurâ dal file clâf di LUKS. No partitions are defined. No je stade definide nissune partizion. Encrypted rootfs setup error Erôr te configurazion di rootfs cifrât Root partition %1 is LUKS but no passphrase has been set. La partizion lidrîs (root) %1 e je LUKS ma no je stade stabilide nissune frase di acès. Could not create LUKS key file for root partition %1. Impussibil creâ il file clâf di LUKS pe partizion lidrîs (root) %1. Could not configure LUKS key file on partition %1. No si è rivâts a configurâ il file clâf di LUKS su la partizion %1. MachineIdJob Generate machine-id. Gjenerâ id-machine. Configuration Error Erôr di configurazion No root mount point is set for MachineId. Nissun pont di montaç pe lidrîs al è stât stabilît par MachineId. Map Timezone: %1 Fûs orari: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. Selezione la posizion preferide su pe mape in mût che il program di instalazion al podedi sugjerî lis impostazions di localizazion e fûs orari. Chi sot tu puedis justâ lis impostazion sugjeridis. Cîr te mape strissinantle par spostâsi e doprant +/- o la rudiele dal mouse par justâ l'ingrandiment. NetInstallViewStep Package selection Selezion pachets Office software Software pal ufici Office package Pachet pal ufici Browser software Software par navigâ Browser package Pachet par navigadôr Web browser Navigadôr web Kernel label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Servizis Login label for netinstall module, choose login manager Acès Desktop label for netinstall module, choose desktop environment Scritori Communication label for netinstall module Comunicazion Development label for netinstall module Disvilup Office label for netinstall module Ufici Multimedia label for netinstall module Multimedia Internet label for netinstall module Internet Theming label for netinstall module Personalizazion teme Gaming label for netinstall module Zûcs Utilities label for netinstall module Utilitâts Applications Aplicazions 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. PackageModel Name Non Description Descrizion Page_Keyboard Form Formulari Keyboard Model: Model de tastiere: Type here to test your keyboard Scrîf achì par provâ la tastiere Page_UserSetup Form Formulari What is your name? Ce non âstu? Your Full Name Il to non complet What name do you want to use to log in? Ce non vûstu doprâ pe autenticazion? login acès What is the name of this computer? Ce non aial chest computer? <small>This name will be used if you make the computer visible to others on a network.</small> <small>Si doprarà chest non inte rêt par rindi visibil a altris chest computer.</small> Computer Name Non dal computer Choose a password to keep your account safe. Sielç une password par tignî il to account al sigûr. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure. Une buine password e contignarà un miscliç di letaris, numars e puntuazions, e sarà lungje almancul vot caratars, e si scugnarà cambiâle a intervai regolârs.</small> Password Password Repeat Password Ripeti password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Cuant che cheste casele e je selezionade, il control su la robustece de password al ven fat e no si podarà doprâ une password debile. Require strong passwords. Si domande passwords robustis. Log in automatically without asking for the password. Jentre in automatic cence domandâ la password. Use the same password for the administrator account. Dopre la stesse password pal account di aministradôr. Choose a password for the administrator account. Sielç une password pal account dal aministradôr. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure.</small> PartitionLabelsView Root Lidrîs Home Home Boot Boot EFI system Sisteme EFI Swap Swap New partition for %1 Gnove partizion par %1 New partition Gnove partizion %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Spazi libar New partition Gnove partizion Name Non File System File System File System Label Mount Point Pont di montaç Size Dimension PartitionPage Form Formulari Storage de&vice: Dis&positîf di memorie: &Revert All Changes &Disfe dutis lis modifichis New Partition &Table Gnove &tabele des partizions Cre&ate Cre&ê &Edit &Modifiche &Delete E&limine New Volume Group Gnûf grup di volums Resize Volume Group Ridimensione grup di volums Deactivate Volume Group Disative grup di volums Remove Volume Group Gjave grup di volums I&nstall boot loader on: I&nstale gjestôr di inviament su: Are you sure you want to create a new partition table on %1? Creâ pardabon une gnove tabele des partizions su %1? Can not create new partition Impussibil creâ une gnove partizion The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. La tabele des partizions su %1 e à za %2 partizions primaris e no si pues zontâ altris. Gjave une partizion primarie e zonte une partizion estese al so puest. PartitionViewStep Gathering system information... Daûr a dâ dongje lis informazions dal sisteme... Partitions Partizions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Atuâl: After: Dopo: No EFI system partition configured Nissune partizion di sisteme EFI configurade EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS Opzion par doprâ GPT su BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted Partizion di inviament no cifrade A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. E je stade configurade une partizion di inviament separade adun cuntune partizion lidrîs cifrade, ma la partizion di inviament no je cifrade.<br/><br/> A esistin problemis di sigurece cun chest gjenar di configurazion, par vie che i file di sisteme impuartants a vegnin tignûts intune partizion no cifrade.<br/>Tu puedis continuâ se tu lu desideris, ma il sbloc dal filesystem al sucedarà plui indenant tal inviament dal sisteme.<br/>Par cifrâ la partizion di inviament, torne indaûr e torne creile, selezionant <strong>Cifrâ</strong> tal barcon di creazion de partizion. has at least one disk device available. al à almancul une unitât disc disponibil. There are no partitions to install on. No son partizions dulà lâ a instalâ. PlasmaLnfJob Plasma Look-and-Feel Job Lavôr di aspiet e compuartament di Plasma Could not select KDE Plasma Look-and-Feel package Impussibil selezionâ il pachet di KDE Plasma Look-and-Feel PlasmaLnfPage Form Formulari Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Sielç un aspiet-e-compuartament pal scritori KDE Plasma. Si pues ancje saltâ chest passaç e configurâ l'aspiet e il compuartament une volte finide la configurazion dal sisteme. Fasint clic suntune selezion dal aspiet-e-compuartament si varà une anteprime di chel teme. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Sielç un aspiet-e-compuartament pal scritori KDE Plasma. Si pues ancje saltâ chest passaç e configurâ l'aspiet e il compuartament une volte finide la instalazion dal sisteme. Fasint clic suntune selezion dal aspiet-e-compuartament si varà une anteprime di chel teme. PlasmaLnfViewStep Look-and-Feel Aspiet-e-compuartament PreserveFiles Saving files for later ... Daûr a salvâ files par dopo ... No files configured to save for later. Nissun file configurât di salvâ par dopo. Not all of the configured files could be preserved. Nol è stât pussibil preservâ ducj i files configurâts. ProcessResult There was no output from the command. No si à vût un output dal comant. Output: Output: External command crashed. Comant esterni colassât. Command <i>%1</i> crashed. Comant <i>%1</i> colassât. External command failed to start. Il comant esterni nol è rivât a inviâsi. Command <i>%1</i> failed to start. Il comant <i>%1</i> nol è rivât a inviâsi. Internal error when starting command. Erôr interni tal inviâ il comant. Bad parameters for process job call. Parametris sbaliâts par processâ la clamade de operazion. External command failed to finish. Il comant esterni nol è stât finît. Command <i>%1</i> failed to finish in %2 seconds. Il comant <i>%1</i> nol è stât finît in %2 seconts. External command finished with errors. Il comant esterni al è terminât cun erôrs. Command <i>%1</i> finished with exit code %2. Il comant <i>%1</i> al è terminât cul codiç di jessude %2. QObject %1 (%2) %1 (%2) unknown no cognossût extended estese unformatted no formatade swap swap Default Predefinît File not found File no cjatât Path <pre>%1</pre> must be an absolute path. Il percors <pre>%1</pre> al à di jessi un percors assolût. Directory not found Cartele no cjatade Could not create new random file <pre>%1</pre>. Impussibil creâ il gnûf file casuâl <pre>%1</pre>. No product Nissun prodot No description provided. Nissune descrizion dade. (no mount point) (nissun pont di montaç) Unpartitioned space or unknown partition table Spazi no partizionât o tabele des partizions no cognossude Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p>Chest computer nol sodisfe cualchi recuisît conseât par configurâ %1.<br/> La configurazion e pues continuâ, ma cualchi funzionalitât e podarès jessi disabilitade.</p> RemoveUserJob Remove live user from target system Gjavâ l'utent “live†dal sisteme di destinazion RemoveVolumeGroupJob Remove Volume Group named %1. Gjavâ il grup di volums clamât %1. Remove Volume Group named <strong>%1</strong>. Gjavâ il grup di volums clamât <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Il program di instalazion nol è rivât a gjavâ un grup di volums clamât '%1'. ReplaceWidget Form Formulari Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Selezione dulà lâ a instalâ %1.<br/><font color="red">Atenzion: </font>cheste operazion e eliminarà ducj i file de partizion selezionade. The selected item does not appear to be a valid partition. L'element selezionât nol somee jessi une partizion valide. %1 cannot be installed on empty space. Please select an existing partition. No si pues instalâ %1 su spazi vueit. Par plasê selezione une partizion esistente. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 nol pues jessi instalât suntune partizion estese. Par plasê selezione une partizion primarie o logjiche esistente. %1 cannot be installed on this partition. No si pues instalâ %1 su cheste partizion. Data partition (%1) Partizion dâts (%1) Unknown system partition (%1) Partizion di sisteme no cognossude (%1) %1 system partition (%2) %1 partizion di sisteme (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partizion %1 e je masse piçule par %2. Selezione une partizion cun almancul %3 GiB di capacitât. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>No si rive a cjatâ di nissune bande su cheste machine une partizion di sisteme EFI. Par plasê torne indaûr e dopre il partizionament manuâl par configurâ %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>Si instalarà %1 su %2.<br/><font color="red">Atenzion: </font>ducj i dâts de partizion %2 a laran pierdûts. The EFI system partition at %1 will be used for starting %2. La partizion di sisteme EFI su %1 e vignarà doprade par inviâ %2. EFI system partition: Partizion di sisteme EFI: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>Chest computer nol sodisfe i recuisîts minims pe instalazion di %1.<br/> La instalazion no pues continuâ.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p>Chest computer nol sodisfe cualchi recuisît conseât par configurâ %1.<br/> La configurazion e pues continuâ, ma cualchi funzionalitât e podarès jessi disabilitade.</p> ResizeFSJob Resize Filesystem Job Operazion di ridimensionament dal filesystem Invalid configuration Configurazion no valide The file-system resize job has an invalid configuration and will not run. La operazion di ridimensionament dal filesystem e à une configurazion no valide e no vignarà eseguide. KPMCore not Available KPMCore no disponibil Calamares cannot start KPMCore for the file-system resize job. Calamares nol rive a inviâ KPMCore pe operazion di ridimensionament dal filesystem. Resize Failed Ridimensionament falît The filesystem %1 could not be found in this system, and cannot be resized. Nol è stât pussibil cjatâ in chest sisteme il filesystem %1 e duncje nol pues jessi ridimensionât. The device %1 could not be found in this system, and cannot be resized. Nol è stât pussibil cjatâ in chest sisteme il dispositîf %1 e duncje nol pues jessi ridimensionât. The filesystem %1 cannot be resized. Impussibil ridimensionâ il filesystem %1. The device %1 cannot be resized. Impussibil ridimensionâ il dispositîf %1. The filesystem %1 must be resized, but cannot. Si scugne ridimensionâ il filesystem %1, ma no si rive. The device %1 must be resized, but cannot Si scugne ridimensionâ il filesystem %1, ma no si rive. ResizePartitionJob Resize partition %1. Ridimensionâ partizion %1 Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Ridimensionâ la partizion <strong>%1</strong> di <strong>%2MiB</strong> a <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. Ridimensionâ la partizion %1 di %2MiB a %3MiB. The installer failed to resize partition %1 on disk '%2'. Il program di instalazion nol è rivât a ridimensionâ la partizion %1 sul disc '%2'. ResizeVolumeGroupDialog Resize Volume Group Ridimensione grup di volums ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Ridimensionâ il grup di volums clamât %1 di %2 a %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Ridimensionâ il grup di volums clamât <strong>%1</strong> di <strong>%2</strong> a <strong>%3</strong>. The installer failed to resize a volume group named '%1'. Il program di instalazion nol è rivât a ridimensionâ un grup di volums clamât '%1'. ResultsListDialog For best results, please ensure that this computer: Par otignî i miôrs risultâts, siguriti che chest computer: System requirements Recuisîts di sisteme ScanningDialog Scanning storage devices... Scandai dai dispositîfs di memorie... Partitioning Partizionament SetHostNameJob Set hostname %1 Stabilî il non-host a %1 Set hostname <strong>%1</strong>. Stabilî il non-host a <strong>%1</strong>. Setting hostname %1. Daûr a stabilî il non-host a %1. Internal Error Erôr interni Cannot write hostname to target system Impussibil scrivi il non-host sul sisteme di destinazion SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Stabilî il model di tastiere a %1, disposizion a %2-%3 Failed to write keyboard configuration for the virtual console. No si è rivâts a scrivi la configurazion de tastiere pe console virtuâl. Failed to write to %1 No si è rivâts a scrivi su %1 Failed to write keyboard configuration for X11. No si è rivâts a scrivi la configurazion de tastiere par X11. Failed to write keyboard configuration to existing /etc/default directory. No si è rivâts a scrivi la configurazion de tastiere te cartele esistente /etc/default . SetPartFlagsJob Set flags on partition %1. Stabilî lis opzions te partizion %1. Set flags on %1MiB %2 partition. Stabilî lis opzions te partizion %2 di %1MiB. Set flags on new partition. Stabilî lis opzion te gnove partizion. Clear flags on partition <strong>%1</strong>. Netâ lis opzions te partizion <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Netâ lis opzions te partizion <strong>%2</strong> di %1MiB. Clear flags on new partition. Netâ lis opzions te gnove partizion. Flag partition <strong>%1</strong> as <strong>%2</strong>. Segnâ la partizion <strong>%1</strong> come <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Segnâ la partizion <strong>%2</strong> di %1MiB come <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Segnâ la gnove partizion come <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Daûr a netâ lis opzions te partizion <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Daûr a netâ lis opzion te partizion <strong>%2</strong> di %1MiB. Clearing flags on new partition. Daûr a netâ lis opzions te gnove partizion. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Daûr a meti lis opzions <strong>%2</strong> te partizion <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Daûr a meti lis opzions <strong>%3</strong> te partizion <strong>%2</strong> di %1MiB. Setting flags <strong>%1</strong> on new partition. Daûr a meti lis opzions <strong>%1</strong> te gnove partizion. The installer failed to set flags on partition %1. Il program di instalazion nol è rivât a meti lis opzions te partizion %1. SetPasswordJob Set password for user %1 Stabilî la password pal utent %1 Setting password for user %1. Daûr a stabilî la password pal utent %1. Bad destination system path. Percors di sisteme de destinazion sbaliât. rootMountPoint is %1 Il rootMountPoint (pont di montaç de lidrîs) al è %1 Cannot disable root account. Impussibil disabilitâ l'account di root. passwd terminated with error code %1. passwd terminât cun codiç di erôr %1. Cannot set password for user %1. Impussibil stabilî la password pal utent %1. usermod terminated with error code %1. usermod terminât cun codiç di erôr %1. SetTimezoneJob Set timezone to %1/%2 Meti il fûs orari su %1/%2 Cannot access selected timezone path. Impussibil acedi al percors dal fûs orari selezionât. Bad path: %1 Percors no valit: %1 Cannot set timezone. Impussibil stabilî il fûs orari. Link creation failed, target: %1; link name: %2 Creazion dal colegament falide, destinazion: %1; non colegament: %2 Cannot set timezone, Impussibil stabilî il fûs orari, Cannot open /etc/timezone for writing Impussibil vierzi /etc/timezone pe scriture SetupGroupsJob Preparing groups. Daûr a preparâ i grups. Could not create groups in target system Impussibil creâ i grups intal sisteme di destinazion These groups are missing in the target system: %1 A mancjin chescj grups tal sisteme di destinazion: %1 SetupSudoJob Configure <pre>sudo</pre> users. Configurâ i utents <pre>sudo</pre>. Cannot chmod sudoers file. Impussibil eseguî chmod sul file sudoers. Cannot create sudoers file for writing. Impussibil creâ il file sudoers pe scriture. ShellProcessJob Shell Processes Job Operazion dai procès de shell SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK &Va ben &Yes &Sì &No &No &Cancel &Anule &Close S&iere TrackingInstallJob Installation feedback Opinion su la instalazion Sending installation feedback. Daûr a inviâ la opinion su la instalazion. Internal error in install-tracking. Erôr interni in install-tracking. HTTP request timed out. Richieste HTTP scjadude. TrackingKUserFeedbackJob KDE user feedback Opinion dal utent di KDE Configuring KDE user feedback. Daûr a configurâ la opinione dal utent di KDE. Error in KDE user feedback configuration. Erôr te configurazion de opinion dal utent di KDE. Could not configure KDE user feedback correctly, script error %1. Nol è stât pussibil configurâ in maniere juste la opinion dal utent di KDE, erôr di script %1. Could not configure KDE user feedback correctly, Calamares error %1. Nol è stât pussibil configurâ in maniere juste la opinion dal utent di KDE, erôr di Calamares %1. TrackingMachineUpdateManagerJob Machine feedback Opinion su la machine Configuring machine feedback. Daûr a configurâ la opinion su la machine. Error in machine feedback configuration. Erôr inte configurazion de opinion su la machine. Could not configure machine feedback correctly, script error %1. Nol è stât pussibil configurâ in maniere juste la opinion su la machine, erôr di script %1. Could not configure machine feedback correctly, Calamares error %1. Nol è stât pussibil configurâ in maniere juste la opinion su la machine, erôr di Calamares %1. TrackingPage Form Formulari Placeholder Segnepuest <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Fâs clic achì par <span style=" font-weight:600;">no inviâ nissune informazion</span> su la tô instalazion.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Fâs clic achì par vê plui informazions su lis opinions dai utents</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. Tignî i indizis al jude %1 a viodi trop dispès che al ven instalât, in cuâl hardware e ce aplicazions che a vegnin dopradis. Par viodi ce che al ven inviât, fâs clic su pe icone di jutori dongje a ogni aree. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. Selezionant chest tu inviarâs informazions sul to hardware e su la tô instalazion. Cheste informazion e vignarà mandade dome <b>une volte</b>, dopo finide la instalazion. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. Selezionant chest tu mandarâs informazions in mût periodic a %1 su la instalazion, l'hardware e lis aplicazions de tô <b>machine</b>. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. Selezionant chest tu mandarâs cun regolaritât informazions a %1 su la instalazion, l'hardware, lis aplicazions e modei di ûs de aplicazion dal tô <b>utent</b>. TrackingViewStep Feedback Opinion UmountJob Unmount file systems. Dismonte i file-systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se chest computer al vignarà doprât di plui di une persone, si pues creâ plui accounts dopo vê completade la configurazion.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se chest computer al vignarà doprât di plui di une persone, si pues creâ plui accounts dopo vê completade la instalazion.</small> UsersQmlViewStep Users Utents UsersViewStep Users Utents VariantModel Key Column header for key/value Clâf Value Column header for key/value Valôr VolumeGroupBaseDialog Create Volume Group Creâ Grup di Volums List of Physical Volumes Liste di volums fisics Volume Group Name: Non dal grup di volums: Volume Group Type: Gjenar dal grup di volums: Physical Extent Size: Dimension de estension fisiche: MiB MiB Total Size: Dimension totâl: Used Size: Dimension doprade: Total Sectors: Setôrs totâi: Quantity of LVs: Cuantitât di VLs: WelcomePage Form Formulari Select application and system language Selezionâ lenghe di sisteme e di aplicazions 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 %1 support Supuart di %1 About %1 setup Informazions su la configurazion di %1 About %1 installer Informazion su la instalazion di %1 WelcomeQmlViewStep Welcome Benvignûts WelcomeViewStep Welcome Benvignûts ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Erôr di configurazion No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Informazions Debug Show information about Calamares Show debug information Mostre informazions di debug finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Lenghis</h1> </br> La impostazion di localizazion dal sisteme e influence la lenghe e la cumbinazion di caratars par cualchi element de interface utent a rie di comant. La impostazion atuâl e je <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Localitâts</h1> </br> La impostazions di localizazion dal sisteme e influence il formât des datis e dai numars. La impostazion atuâl e je <strong>%1</strong>. Back Indaûr keyboardq To activate keyboard preview, select a layout. Keyboard Model: Model de tastiere: Layouts Disposizions Type here to test your keyboard Scrîf achì par provâ la tastiere Variants Variantis localeq Change Cambie notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Chescj a son esemplis di notis di publicazion.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Chest esempli di file QML, al mostre lis opzions in test formatât cun contignût che si pues dai une passade.</p> <p>Il QML cun test formatât al pues doprâ etichetis HTML, il contignût che si pues scori al è util pai touchscreens.</p> <p><b>Chest al è test in neret</b></p> <p><i>Chest al è test corsîf</i></p> <p><u>Chest al è test sotlineât</u></p> <p><center>Chest test al vignarà centrât.</center></p> <p><s>Chest al è stricât</s></p> <p>Esempli di codiç: <code>ls -l /home</code></p> <p><b>Listis:</b></p> <ul> <li>Sistemis a CPU Intel</li> <li>Sistemis a CPU AMD</li> </ul> <p>La sbare di scoriment verticâl si pues justâ, cumò la largjece e je metude a 10.</p> Back Indaûr usersq Pick your user name and credentials to login and perform admin tasks Sielç e dopre il to non utent e lis credenziâls par jentrâ e eseguî ativitâts di aministradôr What is your name? Ce non âstu? Your Full Name Il to non complet What name do you want to use to log in? Ce non vûstu doprâ pe autenticazion? Login Name Non di acès If more than one person will use this computer, you can create multiple accounts after installation. Se chest computer al vignarà doprât di plui personis, tu puedis creâ plui account dopo vê completade la instalazion. Only lowercase letters, numbers, underscore and hyphen are allowed. A son ametûts dome i numars, lis letaris minusculis, lis liniutis bassis e i tratuts. root is not allowed as username. What is the name of this computer? Ce non aial chest computer? Computer Name Non dal computer This name will be used if you make the computer visible to others on a network. Si doprarà chest non se tu rindis visibil a altris chest computer suntune rêt. localhost is not allowed as hostname. Choose a password to keep your account safe. Sielç une password par tignî il to account al sigûr. Password Password Repeat Password Ripeti password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure. Une buine password e contignarà un miscliç di letaris, numars e puntuazions, e sarà lungje almancul vot caratars e si scugnarà cambiâle a intervai regolârs. Validate passwords quality Convalidâ la cualitât des passwords When this box is checked, password-strength checking is done and you will not be able to use a weak password. Cuant che cheste casele e je selezionade, il control su la fuarce de password al ven fat e no si podarà doprâ une password debile. Log in automatically without asking for the password Jentre in automatic cence domandâ la password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Torne dopre la password dal utent pe password di root Use the same password for the administrator account. Dopre la stesse password pal account di aministradôr. Choose a root password to keep your account safe. Sielç une password di root par tignî il to account al sigûr. Root Password Password di root Repeat Root Password Ripeti password di root Enter the same password twice, so that it can be checked for typing errors. Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Benvignûts sul program di instalazion <quote>%2</quote> par %1</h3> <p>Chest program al fasarà cualchi domande e al configurarà %1 sul to computer.</p> Support Supuart Known issues Problemis cognossûts Release notes Notis di publicazion Donate Done calamares-calamares-2d126ae/lang/calamares_gl.ts000066400000000000000000006443001430147706700217210ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Desmontar os volumes para levar a cabo as operacións de particionado en %1 Clearing mounts for partitioning operations on %1. Desmontando os volumes para levar a cabo as operacións de particionado en %1. Cleared all mounts for %1 Os volumes para %1 foron desmontados ClearTempMountsJob Clear all temporary mounts. Limpar todas as montaxes temporais. Clearing all temporary mounts. Limpando todas as 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. Packages Install option: <strong>%1</strong> None Summary Resumo This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Esta é unha vista xeral do que vai acontecer cando inicie o procedemento de instalación. ContextualProcessJob Contextual Processes Job Tarefa de procesos contextuais CreatePartitionDialog Create a Partition Crear partición Si&ze: &Tamaño: MiB MiB Partition &Type: &Tipo de partición: Primar&y E&xtended E&xtendida Fi&le System: Sistema de ficheiros: LVM LV name Nome de LV de LVM &Mount Point: Punto de &montaxe: Flags: Bandeiras: Label for the filesystem FS Label: En&crypt Encriptar Logical Lóxica Primary Primaria GPT GPT Mountpoint already in use. Please select another one. Punto de montaxe xa en uso. Faga o favor de escoller outro Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Creando unha nova partición %1 en %2. The installer failed to create partition on disk '%1'. O instalador fallou ó crear a partición no disco '%1'. 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 Con&tent: &Keep &Gardar Format Formato Warning: Formatting the partition will erase all existing data. Atención: Dar formato á partición borrará tódolos datos existentes. &Mount Point: Punto de &montaxe: Si&ze: &Tamaño: MiB MiB Fi&le System: Sistema de Ficheiros: Flags: Bandeiras: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formulario En&crypt system En&criptar sistema Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Frase de contrasinal Confirm passphrase Confirme a frase de contrasinal Please enter the same passphrase in both boxes. Faga o favor de introducila a misma frase de contrasinal námbalas dúas caixas. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Poñela información da partición Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Instalar %1 nunha <strong>nova</strong> partición do sistema %2 Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formulario <h1>License Agreement</h1> I accept the terms and conditions above. Acepto os termos e condicións anteriores. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Actual: After: Despois: No EFI system partition configured Non hai ningunha partición de sistema EFI configurada EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A 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 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 StandardButtons &OK &Ok &Yes &Si &No &Non &Cancel &Cancelar &Close &Pechar TrackingInstallJob Installation feedback Opinións sobre a instalació Sending installation feedback. Enviar opinións sobre a instalación. Internal error in install-tracking. Produciuse un erro interno en install-tracking. HTTP request timed out. Esgotouse o tempo de espera de HTTP. 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 UmountJob Unmount file systems. Desmontar sistemas de ficheiros. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep 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 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 %1 support %1 axuda About %1 setup About %1 installer Acerca do instalador %1 WelcomeQmlViewStep Welcome Benvido WelcomeViewStep Welcome Benvido ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information Mostrar informes de depuración finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Modelo de teclado. Layouts Type here to test your keyboard Teclee aquí para comproba-lo seu teclado. Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? 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> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_gu.ts000066400000000000000000005715641430147706700217450ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Error &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next &Back &Done &Cancel Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_he.ts000066400000000000000000007425141430147706700217210ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> עבור %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. תודה ל<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> - ×ž×©×—×¨×¨×™× ×ª×•×›× ×”. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> כל הזכויות שמורות %1-%2 %3 &lt;%4&gt;<br/> 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 ההתקנה נכשלה 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 Successfully unmounted %1. הניתוק של %1 הצליח. Successfully disabled swap %1. שטח ההחלפה %1 הושבת בהצלחה. Successfully cleared swap %1. שטח ההחלפה %1 התפנה בהצלחה. Successfully closed mapper device %1. התקן המיפוי %1 נסגר בהצלחה. Successfully disabled volume group %1. קבוצת הכרכינ%1 הושבתה בהצלחה. Clear mounts for partitioning operations on %1 מחיקת נקודות עיגון עבור פעולות חלוקה למחיצות על %1. Clearing mounts for partitioning operations on %1. מתבצעת מחיקה של נקודות עיגון לטובת פעולות חלוקה למחיצות על %1. Cleared all mounts for %1 כל נקודות העיגון על %1 נמחקו. ClearTempMountsJob Clear all temporary mounts. מחיקת כל נקודות העיגון הזמניות. Clearing all temporary mounts. מבצע מחיקה של כל נקודות העיגון הזמניות. 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. × × ×œ×‘×—×•×¨ במוצר מהרשימה. המוצר הנבחר יותקן. Packages חבילות Install option: <strong>%1</strong> ×פשרות התקנה: <strong>%1</strong> None ×œ×œ× Summary ×¡×™×›×•× This is an overview of what will happen once you start the setup procedure. זו סקירה של מה שיקרה ל×חר התחלת תהליך ההתקנה. This is an overview of what will happen once you start the install procedure. להלן סקירת המ×ורעות שיתרחשו ×¢× ×ª×—×™×œ×ª תהליך ההתקנה. ContextualProcessJob Contextual Processes Job משימת תהליכי הקשר CreatePartitionDialog Create a Partition יצירת מחיצה Si&ze: גו&דל: MiB MiB Partition &Type: &סוג מחיצה: Primar&y &עיקרי E&xtended מ&ורחבת Fi&le System: מ&ערכת ×§×‘×¦×™× LVM LV name ×©× ×›×¨×š לוגי במנהל ×”×›×¨×›×™× ×”×œ×•×’×™×™× &Mount Point: נקודת &עיגון: Flags: סימוני×: Label for the filesystem תווית למערכת ×”×§×‘×¦×™× FS Label: תווית מערכת הקבצי×: En&crypt ×”&צפנה Logical לוגית Primary ר×שית GPT GPT Mountpoint already in use. Please select another one. נקודת העיגון בשימוש. × × ×œ×‘×—×•×¨ בנקודת עיגון ×חרת. Mountpoint must start with a <tt>/</tt>. נקודת העיגון צריכה להיפתח ב־<tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. יצירת מחיצת %1MiB על גבי %3 (%2) ×¢× ×”×¨×©×•×ž×•×ª %4. Create new %1MiB partition on %3 (%2). יצירת מחיצה חדשה בגודל %1MiB על גבי %3 â€(%2). Create new %2MiB partition on %4 (%3) with file system %1. יצירת מחיצה חדשה בגודל %2MiB על גבי %4 (%3) ×¢× ×ž×¢×¨×›×ª ×”×§×‘×¦×™× %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. יצירת מחיצה חדשה בגודל <strong>%1MiB</strong> על גבי <strong>%3</strong> (%2) ×¢× ×”×¨×©×•×ž×•×ª <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). יצירת מחיצה חדשה בגודל <strong>%1MiB</strong> על גבי <strong>%3</strong> â€(%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. יצירת מחיצה חדשה בגודל <strong>%2MiB</strong> על גבי <strong>%4</strong> (%3) ×¢× ×ž×¢×¨×›×ª ×”×§×‘×¦×™× <strong>%1</strong>. Creating new %1 partition on %2. מוגדרת מחיצת %1 חדשה על %2. The installer failed to create partition on disk '%1'. ×שף ההתקנה נכשל ביצירת מחיצה על הכונן ‚%1’. 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 עריכת מחיצה קיימת Con&tent: &תוכן: &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: תווית מערכת הקבצי×: Passphrase for existing partition מילת צופן למחיצה קיימת Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. ×œ× × ×™×ª×Ÿ לפענח ×ת המחיצה %1 ×¢× ×ž×™×œ×ª הצופן שסופקה.<br/><br/>יש לערוך ×ת המחיצה שוב ולספק ×ת מילת הצופן הנכונה ×ו למחוק וליצור מחיצה מוצפנת חדשה. EncryptWidget Form Form En&crypt system ×”&צפנת המערכת Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. נר××” ×›×™ המערכת שלך ×œ× ×ª×•×ž×›×ª בהצפנה ב×ופן מיטבי כדי להצפין ×ת כלל המערכת. ×פשר להפעיל הצפנה ×בל ×–×” עלול ×œ×¤×’×•× ×‘×‘×™×¦×•×¢×™×. Passphrase מילת צופן Confirm passphrase ×ישור מילת צופן Please enter the same passphrase in both boxes. × × ×œ×”×§×œ×™×“ ×ת ×ותה מילת הצופן בשתי התיבות. ErrorDialog Details: פרטי×: Would you like to paste the install log to the web? להדביק ×ת יומן ההתקנה ל×ינטרנט? FillGlobalStorageJob Set partition information הגדרת מידע עבור המחיצה Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> התקנת %1 על מחיצת מערכת <strong>חדשה</strong> מסוג %2 ×¢× ×”×™×›×•×œ×•×ª <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. התקנת %1 על מחיצת מערכת <strong>חדשה</strong> מסוג %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 &×ישור LOSHJob Configuring encrypted swap. מוגדר שטח החלפה מוצפן. No target system available. ×ין מערכת יעד זמינה. No rootMountPoint is set. ×œ× ×”×•×’×“×¨×” נקודת עיגון לשורש. No configFilePath is set. ×œ× ×”×•×’×“×¨ נתיב קובץ הגדרות. LicensePage Form Form <h1>License Agreement</h1> <h1>×”×¡×›× ×¨×™×©×•×™</h1> I accept the terms and conditions above. התנ××™× ×•×”×”×’×‘×œ×•×ª שלמעלה ×ž×§×•×‘×œ×™× ×¢×œ×™. Please review the End User License Agreements (EULAs). × × ×œ×¡×§×•×¨ בקפידה ×ת הסכמי רישוי משתמש הקצה (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. תהליך התקנה ×–×” יתקין תכנה קניינית שכפופה לתנ××™ רישוי. If you do not agree with the terms, the setup procedure cannot continue. ×× ×”×ª× ××™× ×”×לה ××™× × ×ž×§×•×‘×œ×™× ×¢×œ×™×›×, ××™ ×פשר להמשיך בתהליך ההתקנה. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. תהליך התקנה ×–×” יכול להתקין תכנה קניינית שכפופה לתנ××™ רישוי כדי לספק תכונות נוספות ולשפר ×ת חוויית המשתמש. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. ×× ×”×ª× ××™× ×”×œ×œ×• ××™× × ×ž×§×•×‘×œ×™× ×¢×œ×™×›×, תוכנה קניינית ×œ× ×ª×•×ª×§×Ÿ, ובמקומן יעשה שימוש בחלופות בקוד פתוח. LicenseViewStep License רישיון 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 label for netinstall module, Linux kernel ליבה Services label for netinstall module, system services ×©×™×¨×•×ª×™× Login label for netinstall module, choose login manager כניסה Desktop label for netinstall module, choose desktop environment שולחן עבודה Communication label for netinstall module תקשורת Development label for netinstall module פיתוח Office label for netinstall module כלי משרד Multimedia label for netinstall module מולטימדיה Internet label for netinstall module ×ינטרנט Theming label for netinstall module עיצוב Gaming label for netinstall module ×ž×©×—×§×™× Utilities label for netinstall module ×›×œ×™× Applications ×™×™×©×•×ž×™× 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. × × ×œ×‘×—×•×¨ במוצר מהרשימה. המוצר הנבחר יותקן. 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 מחיצות Unsafe partition actions are enabled. פעולות מחיצה מסוכנות פעילות. Partitioning is configured to <b>always</b> fail. החלוקה למחיצות מוגדר כך ש<b>תמיד</b> תיכשל. No partitions will be changed. ×œ× × ×¢×¨×›×• מחיצות. Current: נוכחי: After: ל×חר: No EFI system partition configured ×œ× ×”×•×’×“×¨×” מחיצת מערכת EFI EFI system partition configured incorrectly מחיצת המערכת EFI ×œ× ×”×•×’×“×¨×” נכון An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. מחיצת מערכת EFI נחוצה להפעלת %1. <br/><br/>כדי להפעיל מחיצת מערכת EFI, יש לחזור ולבחור ×ו ליצור מערכת ×§×‘×¦×™× ×ž×ª×ימה. The filesystem must be mounted on <strong>%1</strong>. יש לעגן ×ת מערכת ×”×§×‘×¦×™× ×‘Ö¾<strong>%1</strong> The filesystem must have type FAT32. מערכת ×”×§×‘×¦×™× ×—×™×™×‘×ª להיות מסוג FAT32. The filesystem must be at least %1 MiB in size. גודל מערכת ×”×§×‘×¦×™× ×—×™×™×‘ להיות לפחות ‎%1 MIB. The filesystem must have flag <strong>%1</strong> set. למערכת ×”×§×‘×¦×™× ×—×™×™×‘ להיות מוגדר הדגלון <strong>%1</strong>. You can continue without setting up an EFI system partition but your system may fail to start. ניתן להמשיך ×œ×œ× ×”×§×ž×ª מחיצת מערכת EFI ×ך המערכת שלך ×œ× ×ª×¦×œ×™×— להיטען. Option to use GPT on BIOS ×פשרות להשתמש ב־GPT ×ו ב־BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. טבלת מחיצות GPT ×”×™× ×”×פשרות הטובה ביותר לכל המערכות. תוכנית התקנה ×–×ת תומכת בהקמה שכז×ת ×’× ×¢×‘×•×¨ מערכות BIOS.<br/><br/>כדי להגדיר טבלת מחיצות GPT על BIOS, (×× ×–×” ×˜×¨× ×‘×•×¦×¢) יש לחזור ולהגדיר ×ת טבלת המחיצות ל־GPT, ל×חר מכן ליצור מחיצה בלתי מפורמטת בגודל 8 מ״ב ×¢× ×”×“×’×œ×•×Ÿ <strong>%2</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 דרישות מערכת 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 StandardButtons &OK &×ישור &Yes &כן &No &×œ× &Cancel &ביטול &Close &סגירה TrackingInstallJob Installation feedback משוב ×‘× ×•×©× ×”×”×ª×§× ×” Sending installation feedback. שולח משוב ×‘× ×•×©× ×”×”×ª×§× ×”. Internal error in install-tracking. שגי××” פנימית בעת התקנת תכונת המעקב. HTTP request timed out. בקשת HTTP חרגה מזמן ההמתנה המקסימ×לי. TrackingKUserFeedbackJob KDE user feedback משוב משתמש KDE Configuring KDE user feedback. משוב המשתמש ב־KDE מוגדר. Error in KDE user feedback configuration. שגי××” בהגדרות משוב המשתמש ב־KDE. Could not configure KDE user feedback correctly, script error %1. ×œ× × ×™×ª×Ÿ להגדיר ×ת משוב המשתמש ב־KDE כר×וי, שגי×ת סקריפט %1. Could not configure KDE user feedback correctly, Calamares error %1. ×œ× × ×™×ª×Ÿ להגדיר ×ת משוב המשתמש ב־KDE כר×וי, שגי×ת Calamares†%1. TrackingMachineUpdateManagerJob Machine feedback משוב ×‘× ×•×©× ×¢×ž×“×ª המחשב Configuring machine feedback. מגדיר משוב ×‘× ×•×©× ×¢×ž×“×ª המחשב. Error in machine feedback configuration. שגי××” בעת הגדרת המשוב ×‘× ×•×©× ×¢×ž×“×ª המחשב. Could not configure machine feedback correctly, script error %1. ×œ× × ×™×ª×Ÿ להגדיר ×ת המשוב ×‘× ×•×©× ×¢×ž×“×ª המחשב ב×ופן תקין. שגי×ת הרצה %1. Could not configure machine feedback correctly, Calamares error %1. ×œ× × ×™×ª×Ÿ להגדיר ×ת המשוב ×‘× ×•×©× ×¢×ž×“×ª המחשב ב×ופן תקין. שגי×ת Calamares %1. TrackingPage Form Form Placeholder ×ž×ž×œ× ×ž×§×•× <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>ניתן ללחוץ ×›×ן כדי <span style=" font-weight:600;">×œ× ×œ×ž×¡×•×¨ כלל מידע</span> על ההתקנה שלך.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">יש ללחוץ ×›×ן למידע נוסף על המשוב מצד המשתמשי×</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. מעקב מסייע ל־%1 לר×ות מה תדירות ההתקנות, על ×יזו חומרה המערכת מותקנת ו×ילו ×™×™×©×•×ž×™× ×‘×©×™×ž×•×©. כדי לצפות במה שיישלח, × × ×œ×œ×—×•×¥ על סמל העזרה שליד כל ×זור. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. בחירה ב×פשרות זו תוביל לשליחת מידע על ההתקנה והחומרה שלך. מידע ×–×” יישלח <b>×¤×¢× ×חת</b> בלבד ל×חר ×¡×™×•× ×”×”×ª×§× ×”. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. בחירה ב×פשרות ×”×–×ת תוביל לשליחת מידע מדי ×¤×¢× ×‘×¤×¢× ×¢×œ ההתקנה ב<b>מערכת</b>, החומרה ×•×”×™×™×©×•×ž×™× ×©×œ×š ×ל %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. בחירה ב×פשרות זו תוביל לשליחת מידע ב×ופן קבוע על התקנת ×”<b>משתמש</b>, החומרה, ×”×™×™×©×•×ž×™× ×•×“×¤×•×¡×™ שימוש ×ל %1. TrackingViewStep Feedback משוב UmountJob Unmount file systems. ניתוק עיגון מערכות קבצי×. No target system available. ×ין מערכת יעד זמינה. No rootMountPoint is set. ×œ× ×”×•×’×“×¨×” נקודת עיגון לשורש. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>×× ×ž×—×©×‘ ×–×” מיועד לשימוש לטובת למעלה ממשתמש ×חד, ניתן ליצור מגוון חשבונות ל×חר ההתקנה.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>×× ×ž×—×©×‘ ×–×” מיועד לשימוש לטובת למעלה ממשתמש ×חד, ניתן ליצור מגוון חשבונות ל×חר ההתקנה.</small> UsersQmlViewStep Users ×ž×©×ª×ž×©×™× UsersViewStep Users ×ž×©×ª×ž×©×™× VariantModel Key Column header for key/value מפתח Value Column header for key/value ערך VolumeGroupBaseDialog Create Volume Group יצירת קבוצת ×›×¨×›×™× List of Physical Volumes רשימת ×›×¨×›×™× ×¤×™×–×™×™× Volume Group Name: ×©× ×§×‘×•×¦×ª כרכי×: Volume Group Type: סוג קבוצת כרכי×: Physical Extent Size: גודל משטח פיזי: MiB MiB Total Size: גודל כולל: Used Size: גודל מנוצל: Total Sectors: סך כל המקטעי×: Quantity of LVs: כמות ×”×›×¨×›×™× ×”×œ×•×’×™×™×: WelcomePage Form Form Select application and system language × × ×œ×‘×—×•×¨ ×™×™×©×•× ×•×ת שפת המערכת Open donations website פתיחת ×תר התרומות &Donate &תרומה Open help and support website פתיחת ×תר העזרה והתמיכה &Support &תמיכה Open issues and bug-tracking website פתיחת ×תר התקלות והמעקב ×חר ב××’×™× &Known issues &בעיות נפוצות Open release notes website פתיחת ×”×תר ×¢× ×”×¢×¨×•×ª המהדורה &Release notes ×”&ערות מהדורה %1 support תמיכה ב־%1 About %1 setup על ×ודות התקנת %1 About %1 installer על ×ודות התקנת %1 WelcomeQmlViewStep Welcome ברוך בו×ך WelcomeViewStep Welcome ברוך בו×ך ZfsJob Create ZFS pools and datasets יצירת מ×גרי ZFS וסדרות × ×ª×•× ×™× Failed to create zpool on נכשלה יצירת מ×גר zpool תחת Configuration Error שגי×ת הגדרות No partitions are available for ZFS. ×ין מחיצות זמינות ל־ZFS. Internal data missing ×”× ×ª×•× ×™× ×”×¤× ×™×ž×™×™× ×—×¡×¨×™× Failed to create zpool יצירת מ×גר zpool נכשלה Failed to create dataset יצירת סדרת ×”× ×ª×•× ×™× × ×›×©×œ×” The output was: הפלט ×”×™×”: calamares-sidebar About על ×ודות Debug ניפוי שגי×ות Show information about Calamares הצגת מידע על Calamares Show debug information הצגת מידע ניפוי שגי×ות finishedq Installation Completed ההתקנה הושלמה %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 הותקן על המחשב שלך.<br/> כעת ניתן ל×תחל ×ת המחשב ×ל תוך המערכת החדשה שלך, ×ו להמשיך להשתמש בסביבה הניסיונית. Close Installer סגירת ×שף ההתקנה Restart System הפעלת המערכת מחדש <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>יומן ×ž×œ× ×©×œ ההתקנה זמין ×‘×©× installation.log בתיקיית הבית של המשתמש Live.<br/> יומן ×–×” מועתק ×ל ‎/var/log/installation.log במערכת היעד.</p> finishedq@mobile Installation Completed ההתקנה הושלמה %1 has been installed on your computer.<br/> You may now restart your device. על המחשב שלך בוצעה התקנה של %1.<br/>   ניתן כעת להפעיל ×ת המכשיר ×”×–×” מחדש. Close סגירה Restart הפעלה מחדש i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>שפות</h1> </br> תבנית המערכת המקומית משפיעה על השפה ועל ערכת ×”×ª×•×•×™× ×©×œ מגוון ×¨×›×™×‘×™× ×‘×ž× ×©×§ המשתמש. ההגדרה הנוכחית ×”×™× <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>תבניות מקומיות</h1> </br> הגדרות התבנית המקומית של המערכת תשפיע על תצורת ×”×ž×¡×¤×¨×™× ×•×”×ª×ריכי×. ההגדרה הנוכחית ×”×™× <strong>%1</strong>. Back חזרה keyboardq To activate keyboard preview, select a layout. כדי להפעיל תצוגה מקדימה של מקלדת יש לבחור בפריסה. Keyboard Model: ×“×’× ×ž×§×œ×“×ª: Layouts פריסות Type here to test your keyboard ניתן להקליד ×›×ן כדי לבדוק ×ת המקלדת שלך Variants ×”×’×•×•× ×™× localeq Change החלפה notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>×לו הערות מהדורה לדוגמה.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice ×”×™× ×—×‘×™×œ×ª ×›×œ×™× ×ž×©×¨×“×™×™× ×ž×§×™×¤×” וחופשית, משרתת מיליוני ×ž×©×ª×ž×©×™× ×‘×¨×—×‘×™ העול×. ×”×™× ×›×•×œ×œ×ª מגוון ×™×™×©×•×ž×™× ×©×”×•×¤×›×™× ×ותה לחבילת ×”×›×œ×™× ×”×ž×©×¨×“×™×™× ×”×’×ž×™×©×” ביותר בשוק הקוד הפתוח.<br/> ×פשרות בררת המחדל. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. ×× ×”×¢×“×¤×ª×š ×”×™× ×©×œ× ×œ×”×ª×§×™×Ÿ חבילת ×›×œ×™× ×ž×©×¨×“×™×™×, ×פשר לבחור ב×פשרות â€ž×œ×œ× ×›×œ×™× ×ž×©×¨×“×™×™×â€. תמיד ניתן להוסיף ×›×לה (××£ יותר מסוג ×חד) בהמשך ל×חר שהמערכת כבר מותקנת. No Office Suite ×œ×œ× ×›×œ×™× ×ž×©×¨×“×™×™× Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. יצירת התקנה מצומצמת לשולחן העבודה, להסיר ×ת כל ×”×™×™×©×•×ž×™× ×”×¢×•×“×¤×™× ×•×œ×”×—×œ×™×˜ מ×וחר יותר מה מת××™× ×œ×”×•×¡×™×£ למערכת שלך. דוגמ×ות למה ×©×œ× ×™×”×™×” בהתקנה שכז×ת, למשל: ×œ× ×ª×”×™×” חבילת ×›×œ×™× ×ž×©×¨×“×™×™× (Office), ×œ× ×™×”×™×• × ×’× ×™ מדיה, ×ין מציגי תמונות ×ו תמיכה בהדפסה. ×–×” ×™×”×™×” רק שולחן עבודה, מנהל קבצי×, מנהל חבילות, עורך טקסט ודפדפן ×ינטרנט פשוט. Minimal Install התקנה מצומצמת Please select an option for your install, or use the default: LibreOffice included. × × ×œ×‘×—×•×¨ ×פשרות להתקנה שלך ×ו להשתמש בבררת המחדל: LibreOffice כלול. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>×–×” קובץ QML לדוגמה, שמציג ×פשרויות ב־RichText ×¢× ×ª×•×›×Ÿ Flickable.</p> <p>QML ×¢× RichText יכול להשתמש בתגיות HTML, תוכן Flickable ×”×•× ×©×™×ž×•×©×™ למסכי מגע.</p> <p><b>×–×” טקסט מודגש</b></p> <p><i>×–×” טקסט נטוי</i></p> <p><u>×–×” טקסט ×¢× ×§×• תחתי</u></p> <p><center>טקסט ×–×” ימורכז.</center></p> <p><s>×–×” קו חוצה</s></p> <p>דוגמת קוד: <code>ls -l /home</code></p> <p><b>רשימות:</b></p> <ul> <li>מערכות ×¢× ×ž×¢×‘×“×™ ×ינטל</li> <li>מערכות ×¢× ×ž×¢×‘×“×™ AMD</li> </ul> <p>פס הגלילה ×”×× ×›×™ ניתן להת×מה, כרגע העובי שהוגדר עבורו ×”×•× 10.</p> Back חזרה usersq Pick your user name and credentials to login and perform admin tasks × × ×œ×‘×—×•×¨ ×ת ×©× ×”×ž×©×ª×ž×© ו×ת פרטי הגישה שלך כדי להיכנס ולבצע פעולות ניהוליות. What is your name? מה שמך? Your Full Name שמך ×”×ž×œ× What name do you want to use to log in? ××™×–×” ×©× ×‘×¨×¦×•× ×š שישמש ×ותך לכניסה? Login Name ×©× ×”×›× ×™×¡×” If more than one person will use this computer, you can create multiple accounts after installation. ×× ×‘×ž×—×©×‘ ×–×” יש יותר ממשתמש ×חד, ניתן ליצור מגוון חשבונות ל×חר ההתקנה. Only lowercase letters, numbers, underscore and hyphen are allowed. מותר להשתמש רק ב×ותיות קטנות, ספרות, ×§×•×•×™× ×ª×—×ª×™×™× ×•×ž×™× ×•×¡×™×. root is not allowed as username. ×סור להשתמש ב־root ×›×©× ×ž×©×ª×ž×©. What is the name of this computer? מהו ×”×©× ×©×œ המחשב ×”×–×”? Computer Name ×©× ×”×ž×—×©×‘ This name will be used if you make the computer visible to others on a network. ×”×©× ×”×–×” ×™×”×™×” בשימוש ×× ×”×ž×—×©×‘ ×”×–×” ×™×”×™×” גלוי לש×ר הרשת. localhost is not allowed as hostname. ×סור להשתמש ב־localhost ×›×©× ×ž×רח. Choose a password to keep your account safe. × × ×œ×‘×—×•×¨ סיסמה להגנה על חשבונך. Password סיסמה Repeat Password חזרה על הסיסמה Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. יש להקליד ×ת ×ותה הסיסמה ×¤×¢×ž×™×™× ×›×“×™ שניתן ×™×”×™×” לבדוק שגי×ות הקלדה. סיסמה טובה ×מורה להכיל שילוב של ×ותיות, ×ž×¡×¤×¨×™× ×•×¡×™×ž× ×™ פיסוק, להיות ב×ורך של שמונה ×ª×•×•×™× ×œ×¤×—×•×ª ויש להחליף ×ותה במרווחי זמן קבועי×. Validate passwords quality ×ימות ×יכות הסיסמ×ות When this box is checked, password-strength checking is done and you will not be able to use a weak password. כשתיבה זו מסומנת, בדיקת ×ורך סיסמה מתבצעת ×•×œ× ×ª×”×™×” לך ×פשרות להשתמש בסיסמה חלשה. Log in automatically without asking for the password להיכנס ×וטומטית מבלי לבקש סיסמה Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. מותר להשתמש ב×ותיות, ספרות, ×§×•×•×™× ×ª×—×ª×•× ×™× ×•×ž×™× ×•×¡×™×, שני ×ª×•×•×™× ×•×ž×¢×œ×”. Reuse user password as root password להשתמש בסיסמת המשתמש ×’× ×‘×©×‘×™×œ משתמש העל (root) Use the same password for the administrator account. להשתמש ב×ותה הסיסמה בשביל חשבון המנהל. Choose a root password to keep your account safe. × × ×œ×‘×—×•×¨ סיסמה למשתמש העל (root) כדי להגן על חשבונך. Root Password סיסמה למשתמש העל (root) Repeat Root Password × × ×œ×—×–×•×¨ על סיסמת משתמש העל Enter the same password twice, so that it can be checked for typing errors. × × ×œ×”×§×œ×™×“ ×ת הסיסמה ×¤×¢×ž×™×™× ×›×“×™ ל×פשר זיהוי של שגי×ות הקלדה. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>ברוך בו×ך לתכנית ההתקנה של %1 <quote>%2</quote></h3> <p>תכנית זו תש×ל ×ותך מספר ש×לות ותתקין ×ת %1 על המחשב שלך.</p> Support תמיכה Known issues בעיות נפוצות Release notes הערות מהדורה Donate תרומה calamares-calamares-2d126ae/lang/calamares_hi.ts000066400000000000000000010413221430147706700217130ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 इंसà¥à¤Ÿà¥‰à¤² विफल रहा। 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 Successfully unmounted %1. %1 को माउंट से हटाना सफल। Successfully disabled swap %1. %1 सà¥à¤µà¥ˆà¤ª निषà¥à¤•à¥à¤°à¤¿à¤¯ करना सफल। Successfully cleared swap %1. %1 सà¥à¤µà¥ˆà¤ª रिकà¥à¤¤ करना सफल। Successfully closed mapper device %1. पà¥à¤°à¤¤à¤¿à¤šà¤¿à¤¤à¥à¤°à¤£ उपकरण %1 बंद करना सफल। Successfully disabled volume group %1. वॉलà¥à¤¯à¥‚म समूह %1 निषà¥à¤•à¥à¤°à¤¿à¤¯ करना सफल। Clear mounts for partitioning operations on %1 %1 पर विभाजन कारà¥à¤¯ हेतॠमाउंट हटाà¤à¤ Clearing mounts for partitioning operations on %1. %1 पर विभाजन कारà¥à¤¯ हेतॠमाउंट हटाà¤à¤ जा रहे हैं। Cleared all mounts for %1 %1 के लिठसभी माउंट हटा दिठगठClearTempMountsJob Clear all temporary mounts. सभी असà¥à¤¥à¤¾à¤¯à¥€ माउंट हटाà¤à¤à¥¤ Clearing all temporary mounts. सभी असà¥à¤¥à¤¾à¤¯à¥€ माउंट हटाà¤à¤ जा रहे हैं। 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. सूची में से वसà¥à¤¤à¥ विशेष का चयन करें। चयनित वसà¥à¤¤à¥ इंसà¥à¤Ÿà¥‰à¤² कर दी जाà¤à¤—ी। Packages पैकेज Install option: <strong>%1</strong> इंसà¥à¤Ÿà¥‰à¤² विकलà¥à¤ª : <strong>%1</strong> None कोई नहीं Summary सारांश This is an overview of what will happen once you start the setup procedure. यह à¤à¤• अवलोकन है कि सेटअप पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ आरंभ होने के उपरांत कà¥à¤¯à¤¾ होगा। This is an overview of what will happen once you start the install procedure. यह अवलोकन है कि इंसà¥à¤Ÿà¥‰à¤² शà¥à¤°à¥‚ होने के बाद कà¥à¤¯à¤¾ होगा। ContextualProcessJob Contextual Processes Job पà¥à¤°à¤¾à¤¸à¤‚गिक पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ कारà¥à¤¯ CreatePartitionDialog Create a Partition à¤à¤• विभाजन बनाà¤à¤ Si&ze: आकार (&z): MiB MiB Partition &Type: विभाजन का पà¥à¤°à¤•ार (&T): Primar&y मà¥à¤–à¥à¤¯ (&y) E&xtended विसà¥à¤¤à¥ƒà¤¤ (&x) Fi&le System: फ़ाइल सिसà¥à¤Ÿà¤® (&l): LVM LV name LVM LV का नाम &Mount Point: माउंट पॉइंट (&M): Flags: फà¥à¤²à¥ˆà¤— : Label for the filesystem फाइल सिसà¥à¤Ÿà¤® हेतॠउपनाम FS Label: फाइल सिसà¥à¤Ÿà¤® उपनाम : En&crypt à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ (&c) Logical तारà¥à¤•िक Primary मà¥à¤–à¥à¤¯ GPT GPT Mountpoint already in use. Please select another one. माउंट पॉइंट पहले से उपयोग में है । कृपया दूसरा चà¥à¤¨à¥‡à¤‚। Mountpoint must start with a <tt>/</tt>. माउंट पॉइंट का <tt>/</tt> से आरंभ होना आवशà¥à¤¯à¤• है। CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. %3 (%2) पर %4 पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤¿ यà¥à¤•à¥à¤¤ %1 à¤à¤®à¤¬à¥€ का नया विभाजन बनाà¤à¤à¥¤ Create new %1MiB partition on %3 (%2). %3 (%2) पर %1 à¤à¤®à¤¬à¥€ का नया विभाजन बनाà¤à¤à¥¤ Create new %2MiB partition on %4 (%3) with file system %1. फ़ाइल सिसà¥à¤Ÿà¤® %1 के साथ %4 (%3) पर नया %2MiB का विभाजन बनाà¤à¤à¥¤ Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. <strong>%3</strong> (%2) पर <em>%4</em> पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤¿ यà¥à¤•à¥à¤¤ <strong>%1 à¤à¤®à¤¬à¥€</strong> का नया विभाजन बनाà¤à¤à¥¤ Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). <strong>%3</strong> (%2) पर <strong>%1 à¤à¤®à¤¬à¥€</strong> का नया विभाजन बनाà¤à¤à¥¤ Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. फ़ाइल सिसà¥à¤Ÿà¤® <strong>%1</strong> के साथ <strong>%4</strong> (%3) पर नया <strong>%2MiB</strong> का विभाजन बनाà¤à¤à¥¤ Creating new %1 partition on %2. %2 पर नया %1 विभाजन बनाया जा रहा है। The installer failed to create partition on disk '%1'. इंसà¥à¤Ÿà¥‰à¤²à¤° डिसà¥à¤• '%1' पर विभाजन बनाने में विफल रहा। 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 मौजूदा विभाजन को संपादित करें Con&tent: सामगà¥à¤°à¥€ (&t): &Keep रखें (&K) Format फॉरà¥à¤®à¥‡à¤Ÿ करें Warning: Formatting the partition will erase all existing data. चेतावनी: विभाजन फॉरà¥à¤®à¥‡à¤Ÿ करने से सारा मौजूदा डाटा मिट जायेगा। &Mount Point: माउंट पॉइंट (&M): Si&ze: आकार (&z): MiB MiB Fi&le System: फ़ाइल सिसà¥à¤Ÿà¤® (&l): Flags: फà¥à¤²à¥ˆà¤— : Label for the filesystem फाइल सिसà¥à¤Ÿà¤® हेतॠउपनाम FS Label: फाइल सिसà¥à¤Ÿà¤® उपनाम : Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form रूप En&crypt system सिसà¥à¤Ÿà¤® à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ करें (&E) Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. आपके सिसà¥à¤Ÿà¤® पर à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ हेतॠसमरà¥à¤¥à¤¨ समà¥à¤ªà¥‚रà¥à¤£ सिसà¥à¤Ÿà¤® à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ करने के लिठपरà¥à¤¯à¤¾à¤ªà¥à¤¤ नहीं है। इचà¥à¤›à¤¾ हो तो à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ करें परनà¥à¤¤à¥ इससे कारà¥à¤¯à¤•à¥à¤·à¤®à¤¤à¤¾ पà¥à¤°à¤­à¤¾à¤µà¤¿à¤¤ हो सकती है। Passphrase कूटशबà¥à¤¦ Confirm passphrase कूटशबà¥à¤¦ की पà¥à¤·à¥à¤Ÿà¤¿ करें Please enter the same passphrase in both boxes. कृपया दोनों सà¥à¤¥à¤¾à¤¨à¥‹à¤‚ में समान कूटशबà¥à¤¦ दरà¥à¤œ करें। ErrorDialog Details: विवरण : Would you like to paste the install log to the web? कà¥à¤¯à¤¾ आप इंसà¥à¤Ÿà¥‰à¤² पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ की लॉग फ़ाइल इंटरनेट पर पेसà¥à¤Ÿ करना चाहेंगे ? FillGlobalStorageJob Set partition information विभाजन संबंधी जानकारी सेट करें Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> <strong>नवीन</strong> सिसà¥à¤Ÿà¤® विभाजन %2 पर %1 को <em>%3</em> विशेषताओं सहित इंसà¥à¤Ÿà¥‰à¤² करें। Install %1 on <strong>new</strong> %2 system partition. <strong>नà¤</strong> %2 सिसà¥à¤Ÿà¤® विभाजन पर %1 इंसà¥à¤Ÿà¥‰à¤² करें। Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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> को फॉरà¥à¤®à¥‡à¤Ÿ करें। %1 (%2) partition label %1 (device path %2) %1 (%2) 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) LOSHJob Configuring encrypted swap. à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ सà¥à¤µà¥ˆà¤ª का विनà¥à¤¯à¤¾à¤¸ जारी। No target system available. लकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® उपलबà¥à¤§ नहीं है। No rootMountPoint is set. rootMountPoint निरà¥à¤§à¤¾à¤°à¤¿à¤¤ नहीं है। No configFilePath is set. configFilePath निरà¥à¤§à¤¾à¤°à¤¿à¤¤ नहीं है। LicensePage Form रूप <h1>License Agreement</h1> <h1>लाइसेंस अनà¥à¤¬à¤‚ध</h1> I accept the terms and conditions above. मैं उपरोकà¥à¤¤ नियम व शरà¥à¤¤à¥‡à¤‚ सà¥à¤µà¥€à¤•ार करता हूà¤à¥¤ Please review the End User License Agreements (EULAs). कृपया लकà¥à¤·à¤¿à¤¤ उपयोकà¥à¤¤à¤¾ लाइसेंस अनà¥à¤¬à¤‚धों (EULAs) की समीकà¥à¤·à¤¾ करें। This setup procedure will install proprietary software that is subject to licensing terms. यह सेटअप पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ लाइसेंस शरà¥à¤¤à¥‹à¤‚ के अधीन अमà¥à¤•à¥à¤¤ सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° को इंसà¥à¤Ÿà¥‰à¤² करेगी। If you do not agree with the terms, the setup procedure cannot continue. यदि आप शरà¥à¤¤à¥‹à¤‚ से असहमत है, तो सेटअप पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ जारी नहीं रखी जा सकती। This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. यह सेटअप पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ अतिरिकà¥à¤¤ सà¥à¤µà¤¿à¤§à¤¾à¤à¤ पà¥à¤°à¤¦à¤¾à¤¨ करने व उपयोकà¥à¤¤à¤¾ अनà¥à¤­à¤µ में वृदà¥à¤§à¤¿ हेतॠलाइसेंस शरà¥à¤¤à¥‹à¤‚ के अधीन अमà¥à¤•à¥à¤¤ सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° को इंसà¥à¤Ÿà¥‰à¤² कर सकती है। If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. यदि आप शरà¥à¤¤à¥‹à¤‚ से असहमत है, तो अमà¥à¤•à¥à¤¤ सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° इंसà¥à¤Ÿà¤¾à¤² नहीं किया जाà¤à¤—ा व उनके मà¥à¤•à¥à¤¤ विकलà¥à¤ª उपयोग किठजाà¤à¤à¤—े। LicenseViewStep License लाइसेंस 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 label for netinstall module, Linux kernel करà¥à¤¨à¥‡à¤² Services label for netinstall module, system services सेवाà¤à¤ Login label for netinstall module, choose login manager लॉगिन Desktop label for netinstall module, choose desktop environment डेसà¥à¤•टॉप Communication label for netinstall module संचार Development label for netinstall module सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° विकास Office label for netinstall module ऑफिस Multimedia label for netinstall module मलà¥à¤Ÿà¥€à¤®à¥€à¤¡à¤¿à¤¯à¤¾ Internet label for netinstall module इंटरनेट Theming label for netinstall module थीम Gaming label for netinstall module खेल Utilities label for netinstall module साधन Applications अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— 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. सूची में से वसà¥à¤¤à¥ विशेष का चयन करें। चयनित वसà¥à¤¤à¥ इंसà¥à¤Ÿà¥‰à¤² कर दी जाà¤à¤—ी। 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 विभाजन Unsafe partition actions are enabled. विभाजन हेतॠअसà¥à¤°à¤•à¥à¤·à¤¿à¤¤ कारà¥à¤¯ सकà¥à¤°à¤¿à¤¯ हैं। Partitioning is configured to <b>always</b> fail. विभाजन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ <b>सदैव</b> विफल होने हेतॠविनà¥à¤¯à¤¸à¥à¤¤ है। No partitions will be changed. किसी विभाजन में कोई परिवरà¥à¤¤à¤¨ नहीं होगा। Current: मौजूदा : After: बाद में: No EFI system partition configured कोई EFI सिसà¥à¤Ÿà¤® विभाजन विनà¥à¤¯à¤¸à¥à¤¤ नहीं है EFI system partition configured incorrectly EFI सिसà¥à¤Ÿà¤® विभाजन उचित रूप से विनà¥à¤¯à¤¸à¥à¤¤ नहीं है An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. %1 आरंभ करने हेतॠEFI सिसà¥à¤Ÿà¤® विभाजन आवशà¥à¤¯à¤• है। <br/><br/> EFI सिसà¥à¤Ÿà¤® विभाजन विनà¥à¤¯à¤¸à¥à¤¤ करने हेतà¥, वापस जाà¤à¤ व à¤à¤• उपयà¥à¤•à¥à¤¤ फाइल सिसà¥à¤Ÿà¤® चà¥à¤¨à¥‡à¤‚ या बनाà¤à¤à¥¤ The filesystem must be mounted on <strong>%1</strong>. फाइल सिसà¥à¤Ÿà¤® का <strong>%1</strong> पर माउंट होना आवशà¥à¤¯à¤• है। The filesystem must have type FAT32. फाइल सिसà¥à¤Ÿà¤® का पà¥à¤°à¤•ार FAT32 होना आवशà¥à¤¯à¤• है। The filesystem must be at least %1 MiB in size. फाइल सिसà¥à¤Ÿà¤® का आकार कम-से-कम %1 à¤à¤®à¤¬à¥€ होना आवशà¥à¤¯à¤• है। The filesystem must have flag <strong>%1</strong> set. फाइल सिसà¥à¤Ÿà¤® पर <strong>%1</strong> फà¥à¤²à¥ˆà¤— सेट होना आवशà¥à¤¯à¤• है। You can continue without setting up an EFI system partition but your system may fail to start. आप बिना EFI सिसà¥à¤Ÿà¤® विभाजन सेट करें भी पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ जारी रख सकते हैं परनà¥à¤¤à¥ समà¥à¤­à¤µà¤¤à¤ƒ à¤à¤¸à¤¾ करने से आपका सिसà¥à¤Ÿà¤® आरंभ नहीं होगा। Option to use GPT on BIOS BIOS पर GPT उपयोग करने के लिठविकलà¥à¤ª A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. GPT विभाजन तालिका सभी सिसà¥à¤Ÿà¤® हेतॠसबसे उतà¥à¤¤à¤® विकलà¥à¤ª है। यह इंसà¥à¤Ÿà¥‰à¤²à¤° BIOS सिसà¥à¤Ÿà¤® के सेटअप को भी समरà¥à¤¥à¤¨ करता है। <br/><br/>BIOS पर GPT विभाजन तालिका को विनà¥à¤¯à¤¸à¥à¤¤ करने हेतà¥, (यदि अब तक नहीं करा है) वापस जाकर विभाजन तालिका GPT पर सेट करें, फिर à¤à¤• 8 MB का बिना फॉरà¥à¤®à¥‡à¤Ÿ हà¥à¤† विभाजन बनाà¤à¤ जिस पर <strong>%2</strong> का फà¥à¤²à¥ˆà¤— हो।<br/><br/>यह बिना फॉरà¥à¤®à¥‡à¤Ÿ हà¥à¤† 8 MB का विभाजन %1 को BIOS सिसà¥à¤Ÿà¤® पर GPT के साथ आरंभ करने हेतॠआवशà¥à¤¯à¤• है। Boot partition not encrypted बूट विभाजन à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ नहीं है A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ रà¥à¤Ÿ विभाजन के साथ à¤à¤• अलग बूट विभाजन भी सेट किया गया था, पर बूट विभाजन à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ नहीं था।<br/><br/> इस तरह का सेटअप सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ नहीं होता कà¥à¤¯à¥‹à¤‚कि सिसà¥à¤Ÿà¤® फ़ाइल à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ विभाजन पर होती हैं।<br/>आप चाहे तो जारी रख सकते है, पर फिर फ़ाइल सिसà¥à¤Ÿà¤® बाद में सिसà¥à¤Ÿà¤® सà¥à¤Ÿà¤¾à¤°à¥à¤Ÿà¤…प के दौरान अनलॉक होगा।<br/> विभाजन को à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ करने के लिठवापस जाकर उसे दोबारा बनाà¤à¤ व विभाजन निरà¥à¤®à¤¾à¤£ विंडो में<strong>à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ</strong> चà¥à¤¨à¥‡à¤‚। has at least one disk device available. कम-से-कम à¤à¤• डिसà¥à¤• डिवाइस उपलबà¥à¤§ हो। There are no partitions to install on. इंसà¥à¤Ÿà¥‰à¤² हेतॠकोई विभाजन नहीं हैं। PlasmaLnfJob Plasma Look-and-Feel Job पà¥à¤²à¤¾à¥›à¥à¤®à¤¾ Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package KDE पà¥à¤²à¤¾à¥›à¥à¤®à¤¾ का Look-and-Feel पैकेज चà¥à¤¨à¤¾ नहीं जा सका 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 सिसà¥à¤Ÿà¤® इंसà¥à¤Ÿà¥‰à¤² हेतॠआवशà¥à¤¯à¤•ताà¤à¤ 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 StandardButtons &OK ठीक है (&O) &Yes हाठ(&Y) &No नहीं (&N) &Cancel रदà¥à¤¦ करें (&C) &Close बंद करें (&C) TrackingInstallJob Installation feedback इंसà¥à¤Ÿà¥‰à¤² संबंधी पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ Sending installation feedback. इंसà¥à¤Ÿà¥‰à¤² संबंधी पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ भेजना। Internal error in install-tracking. इंसà¥à¤Ÿà¥‰à¤²-टà¥à¤°à¥ˆà¤•िंग में आंतरिक तà¥à¤°à¥à¤Ÿà¤¿à¥¤ HTTP request timed out. à¤à¤šà¤Ÿà¥€à¤Ÿà¥€à¤ªà¥€ अनà¥à¤°à¥‹à¤§ हेतॠसमय समापà¥à¤¤à¥¤ 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 पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ UmountJob Unmount file systems. फ़ाइल सिसà¥à¤Ÿà¤® माउंट से हटाना। No target system available. लकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® उपलबà¥à¤§ नहीं है। No rootMountPoint is set. rootMountPoint निरà¥à¤§à¤¾à¤°à¤¿à¤¤ नहीं है। UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>यदि à¤à¤• से अधिक वà¥à¤¯à¤•à¥à¤¤à¤¿ इस कंपà¥à¤¯à¥‚टर का उपयोग करेंगे, तो आप सेटअप के उपरांत à¤à¤•ाधिक अकाउंट बना सकते हैं।</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>यदि à¤à¤• से अधिक वà¥à¤¯à¤•à¥à¤¤à¤¿ इस कंपà¥à¤¯à¥‚टर का उपयोग करेंगे, तो आप इंसà¥à¤Ÿà¥‰à¤² के उपरांत à¤à¤•ाधिक अकाउंट बना सकते हैं।</small> UsersQmlViewStep 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 अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— व सिसà¥à¤Ÿà¤® भाषा चà¥à¤¨à¥‡à¤‚ 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) %1 support %1 सहायता About %1 setup %1 सेटअप के बारे में About %1 installer %1 इंसà¥à¤Ÿà¥‰à¤²à¤° के बारे में WelcomeQmlViewStep Welcome सà¥à¤µà¤¾à¤—त है WelcomeViewStep Welcome सà¥à¤µà¤¾à¤—त है ZfsJob Create ZFS pools and datasets ZFS पूल व डेटासेट सृजन Failed to create zpool on यहाठzpool का सृजन विफल Configuration Error विनà¥à¤¯à¤¾à¤¸ तà¥à¤°à¥à¤Ÿà¤¿ No partitions are available for ZFS. ZFS हेतॠकोई विभाजन उपलबà¥à¤§ नहीं है। Internal data missing आतंरिक डेटा अनà¥à¤ªà¤²à¤¬à¥à¤§ Failed to create zpool zpool का सृजन विफल Failed to create dataset डेटासेट का सृजन विफल The output was: यह आउटपà¥à¤Ÿ था : calamares-sidebar About बारे में Debug Show information about Calamares Show debug information डीबग संबंधी जानकारी दिखाà¤à¤ finishedq Installation Completed इंसà¥à¤Ÿà¥‰à¤² पूरà¥à¤£ %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. आपके कंपà¥à¤¯à¥‚टर पर %1 इंसà¥à¤Ÿà¥‰à¤² हो चà¥à¤•ा है।<br/> अब आप नठसिसà¥à¤Ÿà¤® को पà¥à¤¨à¤ƒ आरंभ, या फिर लाइव वातावरण उपयोग करना जारी रख सकते हैं। Close Installer इंसà¥à¤Ÿà¥‰à¤²à¤° बंद करें Restart System सिसà¥à¤Ÿà¤® पà¥à¤¨à¤ƒ आरंभ करें <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>इंसà¥à¤Ÿà¥‰à¤² पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ की पूरà¥à¤£ लॉग installation.log फाइल के रूप में लाइव उपयोकà¥à¤¤à¤¾ की होम डायरेकà¥à¤Ÿà¤°à¥€ में उपलबà¥à¤§ है।<br/> यह लॉग फाइल लकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® में %1 पर भी कॉपी की गई है।</p> finishedq@mobile Installation Completed इंसà¥à¤Ÿà¥‰à¤² पूरà¥à¤£ %1 has been installed on your computer.<br/> You may now restart your device. आपके कंपà¥à¤¯à¥‚टर पर %1 इंसà¥à¤Ÿà¥‰à¤² हो चà¥à¤•ा है।<br/> अब आप उपकरण को पà¥à¤¨à¤ƒ आरंभ कर सकते हैं। Close बंद करें Restart पà¥à¤¨à¤ƒ आरंभ करें i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>भाषाà¤à¤</h1></br> सिसà¥à¤Ÿà¤® सà¥à¤¥à¤¾à¤¨à¤¿à¤•ी सेटिंग कमांड लाइन के कà¥à¤› उपयोकà¥à¤¤à¤¾ अंतरफलक ततà¥à¤µà¥‹à¤‚ की भाषा व अकà¥à¤·à¤° सेट पर असर डालती है।<br/>मौजूदा सेटिंग <strong>%1</strong>है। <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>सà¥à¤¥à¤¾à¤¨à¤¿à¤•ी</h1> </br> सिसà¥à¤Ÿà¤® सà¥à¤¥à¤¾à¤¨à¤¿à¤•ी सेटिंग संखà¥à¤¯à¤¾ व दिनांक के पà¥à¤°à¤¾à¤°à¥‚प को पà¥à¤°à¤­à¤¾à¤µà¤¿à¤¤ करती है। वरà¥à¤¤à¤®à¤¾à¤¨ सेटिंग <strong>%1</strong> है। Back वापस keyboardq To activate keyboard preview, select a layout. कà¥à¤‚जीपटल पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न सकà¥à¤°à¤¿à¤¯ करने हेतॠà¤à¤• अभिनà¥à¤¯à¤¾à¤¸ चà¥à¤¨à¥‡à¤‚। Keyboard Model: कà¥à¤‚जीपटल का मॉडल Layouts अभिनà¥à¤¯à¤¾à¤¸ Type here to test your keyboard अपना कà¥à¤‚जीपटल जाà¤à¤šà¤¨à¥‡ के लिठयहाठटाइप करें Variants भिनà¥à¤¨ रूप localeq Change बदलें notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>ये उदाहरण रिलीज़ नोटà¥à¤¸ हैं।</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. लिबà¥à¤°à¥‡-ऑफिस à¤à¤• सशकà¥à¤¤ और निःशà¥à¤²à¥à¤• ऑफिस सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° है जिसका उपयोग दà¥à¤¨à¤¿à¤¯à¤¾ भर के लाखों लोग करते हैं। इसमें कई अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— समà¥à¤®à¤¿à¤²à¤¿à¤¤ हैं जो इसे उपलबà¥à¤§ विकलà¥à¤ªà¥‹à¤‚ में सबसे बहà¥à¤®à¥à¤–ी निःशà¥à¤²à¥à¤• व मà¥à¤•à¥à¤¤ सà¥à¤°à¥‹à¤¤ ऑफिस सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° बनाते हैं।<br/> डिफ़ॉलà¥à¤Ÿ विकलà¥à¤ªà¥¤ LibreOffice लिबà¥à¤°à¥‡-ऑफिस If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. यदि आप ऑफिस सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° इंसà¥à¤Ÿà¥‰à¤² नहीं करना चाहते हैं, तो कोई ऑफिस सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° नहीं का विकलà¥à¤ª चà¥à¤¨à¥‡à¤‚। आप आवशà¥à¤¯à¤•ता अनà¥à¤¸à¤¾à¤° बाद में अपने इंसà¥à¤Ÿà¥‰à¤² किठगठसिसà¥à¤Ÿà¤® पर à¤à¤• (या अधिक) à¤à¤¸à¥‡ सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° जोड़ सकते हैं। No Office Suite कोई ऑफिस सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° नहीं Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. à¤à¤• संकà¥à¤·à¤¿à¤ªà¥à¤¤ डेसà¥à¤•टॉप इंसà¥à¤Ÿà¥‰à¤² का सृजन करें, सभी अतिरिकà¥à¤¤ अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— हटाà¤à¤ à¤à¤µà¤‚ इंसà¥à¤Ÿà¥‰à¤² उपरांत तय करें कि आप सिसà¥à¤Ÿà¤® में कौन से सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° जोड़ना चाहते हैं। इस पà¥à¤°à¤•ार के इंसà¥à¤Ÿà¥‰à¤² में उदाहरण के तौर पर कोई ऑफिस सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤°, कोई मीडिया पà¥à¤²à¥‡à¤¯à¤°, कोई चितà¥à¤° पà¥à¤°à¤¦à¤°à¥à¤¶à¤• या पà¥à¤°à¤¿à¤‚टर समरà¥à¤¥à¤¨ नहीं होगा। इसमें केवल à¤à¤• डेसà¥à¤•टॉप, फाइल पà¥à¤°à¤¬à¤‚धक, पैकेज पà¥à¤°à¤¬à¤‚धक, लेख संपादक व सरल वेब-बà¥à¤°à¤¾à¤‰à¤œà¤¼à¤° होगा। Minimal Install संकà¥à¤·à¤¿à¤ªà¥à¤¤ इंसà¥à¤Ÿà¥‰à¤² Please select an option for your install, or use the default: LibreOffice included. कृपया अपने इंसà¥à¤Ÿà¥‰à¤² हेतॠà¤à¤• विकलà¥à¤ª चà¥à¤¨à¥‡à¤‚ या फिर डिफ़ॉलà¥à¤Ÿ ही उपयोग करें : इसमें लिबà¥à¤°à¥‡-ऑफिस समà¥à¤®à¤¿à¤²à¤¿à¤¤ है। release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>यह à¤à¤• उदाहरण QML फ़ाइल है, जो फà¥à¤²à¤¿à¤• योगà¥à¤¯ सामगà¥à¤°à¥€ यà¥à¤•à¥à¤¤ रिच टेकà¥à¤¸à¥à¤Ÿ के विकलà¥à¤ª पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ करती है।</p> <p>रिच टेकà¥à¤¸à¥à¤Ÿ के साथ QML à¤à¤šà¤Ÿà¥€à¤à¤®à¤à¤² टैग उपयोग कर सकता है, फà¥à¤²à¤¿à¤• योगà¥à¤¯ सामगà¥à¤°à¥€ टचसà¥à¤•à¥à¤°à¥€à¤¨ में उपयोगी होती है।</p> <p><b>यह बोलà¥à¤¡ टेकà¥à¤¸à¥à¤Ÿ है</b></p> <p><i>यह तिरछा टेकà¥à¤¸à¥à¤Ÿ है</i></p> <p><u>यह रेखांकित टेकà¥à¤¸à¥à¤Ÿ है</u></p> <p><center>यह टेकà¥à¤¸à¥à¤Ÿ केंदà¥à¤°-संरेखित होगा।</center></p> <p><s>यह सà¥à¤Ÿà¥à¤°à¤¾à¤‡à¤•थà¥à¤°à¥‚ है</s></p> <p>कोड उदाहरण : <code>ls -l /home</code></p> <p><b>सूचियाठ:</b></p> <ul> <li>इंटेल सीपीयू सिसà¥à¤Ÿà¤®</li> <li>à¤à¤à¤®à¤¡à¥€ सीपीयू सिसà¥à¤Ÿà¤®</li> </ul> <p>ऊरà¥à¤§à¥à¤µà¤¾à¤§à¤° सà¥à¤•à¥à¤°à¥‰à¤²à¤¬à¤¾à¤° समायोजà¥à¤¯ है, वरà¥à¤¤à¤®à¤¾à¤¨ चौड़ाई 10 पर सेट है।</p> Back वापस usersq Pick your user name and credentials to login and perform admin tasks लॉगिन à¤à¤µà¤‚ पà¥à¤°à¤¶à¤¾à¤¸à¤• कारà¥à¤¯à¥‹à¤‚ हेतॠउपयोकà¥à¤¤à¤¾ नाम इतà¥à¤¯à¤¾à¤¦à¤¿ चà¥à¤¨à¥‡à¤‚। What is your name? आपका नाम कà¥à¤¯à¤¾ है? Your Full Name आपका पूरा नाम What name do you want to use to log in? लॉग इन के लिठआप किस नाम का उपयोग करना चाहते हैं? Login Name लॉगिन नाम If more than one person will use this computer, you can create multiple accounts after installation. यदि à¤à¤• से अधिक वà¥à¤¯à¤•à¥à¤¤à¤¿ इस कंपà¥à¤¯à¥‚टर का उपयोग करेंगे, तो आप इंसà¥à¤Ÿà¥‰à¤² के उपरांत à¤à¤•ाधिक अकाउंट बना सकते हैं। Only lowercase letters, numbers, underscore and hyphen are allowed. केवल लोअरकेस अकà¥à¤·à¤°, अंक, अंडरसà¥à¤•ोर(_) व हाइफ़न(-) ही सà¥à¤µà¥€à¤•ारà¥à¤¯ हैं। root is not allowed as username. उपयोकà¥à¤¤à¤¾ नाम के रूप में root का उपयोग असà¥à¤µà¥€à¤•ारà¥à¤¯ है। What is the name of this computer? इस कंपà¥à¤¯à¥‚टर का नाम ? Computer Name कंपà¥à¤¯à¥‚टर का नाम This name will be used if you make the computer visible to others on a network. यदि आपका कंपà¥à¤¯à¥‚टर किसी नेटवरà¥à¤• पर दृशà¥à¤¯à¤®à¤¾à¤¨ होता है, तो यह नाम उपयोग किया जाà¤à¤—ा। localhost is not allowed as hostname. होसà¥à¤Ÿ नाम के रूप में localhost का उपयोग असà¥à¤µà¥€à¤•ारà¥à¤¯ है। Choose a password to keep your account safe. अपना अकाउंट सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ रखने के लिठपासवरà¥à¤¡ चà¥à¤¨à¥‡à¤‚ । Password कूटशबà¥à¤¦ Repeat Password कूटशबà¥à¤¦ पà¥à¤¨à¤ƒ दरà¥à¤œ करें Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. à¤à¤• ही कूटशबà¥à¤¦ दो बार दरà¥à¥› करें, ताकि उसे टाइप तà¥à¤°à¥à¤Ÿà¤¿ हेतॠजाà¤à¤šà¤¾ जा सके। à¤à¤• अचà¥à¤›à¥‡ कूटशबà¥à¤¦ में अकà¥à¤·à¤°, अंक व विराम चिनà¥à¤¹à¥‹à¤‚ का मेल होता है, उसमें कम-से-कम आठ अकà¥à¤·à¤° होने चाहिà¤, और उसे नियमित अंतराल पर बदलते रहना चाहिà¤à¥¤ Validate passwords quality कूटशबà¥à¤¦ गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾ पà¥à¤°à¤®à¤¾à¤£à¥€à¤•रण When this box is checked, password-strength checking is done and you will not be able to use a weak password. यह बॉकà¥à¤¸ टिक करने के परिणाम सà¥à¤µà¤°à¥à¤ª कूटशबà¥à¤¦-कà¥à¤·à¤®à¤¤à¤¾ की जाà¤à¤š होगी व आप कमज़ोर कूटशबà¥à¤¦ उपयोग नहीं कर पाà¤à¤‚गे। Log in automatically without asking for the password कूटशबà¥à¤¦ बिना पूछे ही सà¥à¤µà¤¤à¤ƒ लॉग इन करें Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. केवल अकà¥à¤·à¤°, अंक, अंडरसà¥à¤•ोर व हाइफ़न ही सà¥à¤µà¥€à¤•ारà¥à¤¯ हैं, परनà¥à¤¤à¥ केवल दो अकà¥à¤·à¤° ही à¤à¤¸à¥‡ हो सकते हैं। Reuse user password as root password रà¥à¤Ÿ कूटशबà¥à¤¦ हेतॠभी उपयोकà¥à¤¤à¤¾ कूटशबà¥à¤¦ उपयोग करें Use the same password for the administrator account. पà¥à¤°à¤¬à¤‚धक अकाउंट के लिठभी यही कूटशबà¥à¤¦ उपयोग करें। Choose a root password to keep your account safe. अकाउंट सà¥à¤°à¤•à¥à¤·à¤¾ हेतॠरà¥à¤Ÿ कूटशबà¥à¤¦ चà¥à¤¨à¥‡à¤‚। Root Password रà¥à¤Ÿ कूटशबà¥à¤¦ Repeat Root Password रà¥à¤Ÿ कूटशबà¥à¤¦ पà¥à¤¨à¤ƒ दरà¥à¤œ करें Enter the same password twice, so that it can be checked for typing errors. समान कूटशबà¥à¤¦ दो बार दरà¥à¤œ करें, ताकि टाइपिंग तà¥à¤°à¥à¤Ÿà¤¿ हेतॠजाà¤à¤š की जा सकें। welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <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> Support सहायता Known issues जà¥à¤žà¤¾à¤¤ समसà¥à¤¯à¤¾à¤à¤ Release notes रिलीज़ नोटà¥à¤¸ Donate दान करें calamares-calamares-2d126ae/lang/calamares_hr.ts000066400000000000000000007100121430147706700217220ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. 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. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;<br/> 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 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 Successfully unmounted %1. UspjeÅ¡no demontiran %1. Successfully disabled swap %1. UspjeÅ¡no onemogućen swap %1. Successfully cleared swap %1. UspjeÅ¡no obrisan swap %1. Successfully closed mapper device %1. UspjeÅ¡no zatvoren device mapper %1. Successfully disabled volume group %1. Volume grupa %1 je uspjeÅ¡no onemogućena. Clear mounts for partitioning operations on %1 Ukloni montiranja za operacije s particijama na %1 Clearing mounts for partitioning operations on %1. Uklanjam montiranja za operacija s particijama na %1. Cleared all mounts for %1 Uklonjena sva montiranja za %1 ClearTempMountsJob Clear all temporary mounts. Ukloni sva privremena montiranja. Clearing all temporary mounts. Uklanjam sva privremena 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. Packages Paketi Install option: <strong>%1</strong> Opcija instalacije: <strong>%1</strong> None Nijedan Summary Sažetak This is an overview of what will happen once you start the setup procedure. Ovo je prikaz dogaÄ‘aja koji će uslijediti jednom kad poÄne instalacijska procedura. This is an overview of what will happen once you start the install procedure. Ovo je prikaz dogaÄ‘aja koji će uslijediti jednom kad poÄne instalacijska procedura. ContextualProcessJob Contextual Processes Job Posao kontekstualnih procesa CreatePartitionDialog Create a Partition Stvori particiju Si&ze: Ve&liÄina: MiB MiB Partition &Type: Tip &particije: Primar&y Primarn&i E&xtended P&roduženo Fi&le System: Da&toteÄni sustav: LVM LV name LVM LV ime &Mount Point: &ToÄke montiranja: Flags: Oznake: Label for the filesystem Oznaka za datoteÄni sustav FS Label: Oznaka datoteÄnog sustava: En&crypt Å i&friraj Logical LogiÄno Primary Primarno GPT GPT Mountpoint already in use. Please select another one. ToÄka montiranja se već koristi. Odaberite drugu. Mountpoint must start with a <tt>/</tt>. ToÄka postavljanja mora poÄeti s <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Stvori novu %1MiB particiju na %3 (%2) s unosima %4. Create new %1MiB partition on %3 (%2). Stvori novu %1MiB particiju na %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Stvori novu %2MB particiju na %4 (%3) s datoteÄnim sustavom %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Stvori novu <strong>%1MiB</strong> particiju na <strong>%3</strong> (%2) sa unosima <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Stvori novu <strong>%1MiB</strong> particiju na <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Stvori novu <strong>%2MB</strong> particiju na <strong>%4</strong> (%3) s datoteÄnim sustavom <strong>%1</strong>. Creating new %1 partition on %2. Stvaram novu %1 particiju na %2. The installer failed to create partition on disk '%1'. Instalacijski program nije uspio stvoriti particiju na disku '%1'. 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 Con&tent: Sad&ržaj: &Keep &Zadrži Format Formatiraj Warning: Formatting the partition will erase all existing data. Upozorenje: Formatiranje particije će izbrisati sve postojeće podatke. &Mount Point: &ToÄka montiranja: Si&ze: Ve&liÄina: MiB MiB Fi&le System: Da&toteÄni sustav: Flags: Oznake: Label for the filesystem Oznaka za datoteÄni sustav FS Label: Oznaka datoteÄnog sustava: Passphrase for existing partition Å ifra za postojeću particiju Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. Particija %1 nije se mogla deÅ¡ifrirati s danom Å¡ifrom. <br/><br/>Ponovno uredite particiju i dajte ispravnu Å¡ifru ili izbriÅ¡ite i kreirajte novu Å¡ifriranu particiju. EncryptWidget Form Oblik En&crypt system Å i&friraj sustav Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. ÄŒini se da vaÅ¡ sustav ne podržava enkripciju dovoljno dobro za Å¡ifriranje cijelog sustava. Možete omogućiti enkripciju, ali performanse mogu patiti. Passphrase Lozinka Confirm passphrase Potvrdi lozinku Please enter the same passphrase in both boxes. Molimo unesite istu lozinku u oba polja. ErrorDialog Details: Detalji: Would you like to paste the install log to the web? Želite li objaviti dnevnik instaliranja na web? FillGlobalStorageJob Set partition information Postavi informacije o particiji Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Instaliraj %1 na <strong>novu</strong> %2 sistemsku particiju sa znaÄajkama <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Instaliraj %1 na <strong>novu</strong> %2 sistemsku particiju. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Konfiguriranje Å¡ifriranog swapa. No target system available. Ciljni sustav nije dostupan. No rootMountPoint is set. Nije postavljen rootMountPoint. No configFilePath is set. ConfigFilePath nije postavljen. LicensePage Form Oblik <h1>License Agreement</h1> <h1>Licencni ugovor</h1> I accept the terms and conditions above. Prihvaćam gore navedene uvjete i odredbe. Please review the End User License Agreements (EULAs). Pregledajte Ugovore o licenci za krajnjeg korisnika (EULA). This setup procedure will install proprietary software that is subject to licensing terms. U ovom postupku postavljanja instalirat će se vlasniÄki softver koji podliježe uvjetima licenciranja. If you do not agree with the terms, the setup procedure cannot continue. Ako se ne slažete sa uvjetima, postupak postavljanja ne može se nastaviti. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Ovaj postupak postavljanja može instalirati vlasniÄki softver koji podliježe uvjetima licenciranja kako bi se pružile dodatne znaÄajke i poboljÅ¡alo korisniÄko iskustvo. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Ako se ne slažete s uvjetima, vlasniÄki softver neće biti instaliran, a umjesto njega će se koristiti alternative otvorenog koda. 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 label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Servisi Login label for netinstall module, choose login manager Prijava Desktop label for netinstall module, choose desktop environment Radna povrÅ¡ina Communication label for netinstall module Komunikacija Development label for netinstall module Razvoj Office label for netinstall module Ured Multimedia label for netinstall module Multimedija Internet label for netinstall module Internet Theming label for netinstall module Izgled Gaming label for netinstall module Igranje Utilities label for netinstall module Alati Applications Aplikacije 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. 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 Unsafe partition actions are enabled. Nesigurne radnje na particijama su omogućene. Partitioning is configured to <b>always</b> fail. Particioniranje je konfigurirano tako da <b>uvijek</b> ne uspije. No partitions will be changed. Nijedna particija neće biti promijenjena. Current: Trenutni: After: Poslije: No EFI system partition configured EFI particija nije konfigurirana EFI system partition configured incorrectly EFI particija nije ispravno 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 suitable filesystem. Za pokretanje %1 potrebna je EFI particija. <br/><br/>Za konfiguriranje EFI sistemske particije, vratite se i odaberite ili kreirajte odgovarajući datoteÄni sustav. The filesystem must be mounted on <strong>%1</strong>. DatoteÄni sustav mora biti montiran na <strong>%1</strong>. The filesystem must have type FAT32. DatoteÄni sustav mora biti FAT32. The filesystem must be at least %1 MiB in size. DatoteÄni sustav mora biti veliÄine od najmanje %1 MiB. The filesystem must have flag <strong>%1</strong> set. DatoteÄni sustav mora imati postavljenu oznaku <strong>%1</strong>. You can continue without setting up an EFI system partition but your system may fail to start. Možete nastaviti bez postavljanja EFI particije, ali vaÅ¡ se sustav možda neće pokrenuti. Option to use GPT on BIOS Mogućnost koriÅ¡tenja GPT-a na BIOS-u A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. GPT tablica particija je najbolja opcija za sve sustave. Ovaj instalacijski program podržava takvo postavljanje i za BIOS sustave. <br/><br/>Da biste konfigurirali GPT particijsku tablicu za BIOS sustave, (ako to već nije uÄinjeno) vratite se natrag i postavite particijsku tablicu na GPT, a zatim stvorite neformatiranu particiju od 8 MB s omogućenom oznakom <strong>%2</strong>. <br/><br/>Neformirana particija od 8 MB potrebna je za pokretanje %1 na BIOS sustavu s GPT-om. Boot partition not encrypted Boot particija nije kriptirana A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Odvojena boot particija je postavljena zajedno s kriptiranom root particijom, ali boot particija nije kriptirana.<br/><br/>Zabrinuti smo za vaÅ¡u sigurnost jer su važne datoteke sustava na nekriptiranoj particiji.<br/>Možete nastaviti ako želite, ali datoteÄni sustav će se otkljuÄati kasnije tijekom pokretanja sustava.<br/>Da bi ste kriptirali boot particiju, vratite se natrag i napravite ju, odabirom opcije <strong>Kriptiraj</strong> u prozoru za stvaranje prarticije. has at least one disk device available. ima barem jedan disk dostupan. There are no partitions to install on. Ne postoje particije na koje bi se instalirao sustav. 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 particija ne postoji na ovom sustavu. Vratite se natrag i koristite ruÄno particioniranje za postavljane %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 će biti instaliran na %2.<br/><font color="red">Upozorenje: </font>svi podaci na particiji %2 će biti izgubljeni. The EFI system partition at %1 will be used for starting %2. EFI particija na %1 će se koristiti za pokretanje %2. EFI system partition: EFI particija: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>Ovo raÄunalo ne zadovoljava minimalne zahtjeve za instalaciju %1.<br/> Instalacija se ne može nastaviti.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p>Ovo raÄunalo ne zadovoljava neke preporuÄene zahtjeve za postavljanje %1.<br/> Postavljanje se može nastaviti, ali neke će znaÄajke možda biti onemogućene.</p> ResizeFSJob Resize Filesystem Job Promjena veliÄine datoteÄnog sustava Invalid configuration Nevažeća konfiguracija The file-system resize job has an invalid configuration and will not run. Promjena veliÄine datoteÄnog sustava ima nevažeću konfiguraciju i neće se pokrenuti. KPMCore not Available KPMCore nije dostupan Calamares cannot start KPMCore for the file-system resize job. Calamares ne može pokrenuti KPMCore za promjenu veliÄine datoteÄnog sustava. Resize Failed Promjena veliÄine nije uspjela The filesystem %1 could not be found in this system, and cannot be resized. DatoteÄni sustav %1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veliÄina. 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 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 StandardButtons &OK &OK &Yes &Da &No &Ne &Cancel &Odustani &Close &Zatvori TrackingInstallJob Installation feedback Povratne informacije o instalaciji Sending installation feedback. Å aljem povratne informacije o instalaciji Internal error in install-tracking. Interna pogreÅ¡ka prilikom praćenja instalacije. HTTP request timed out. HTTP zahtjev je istekao 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 UmountJob Unmount file systems. Odmontiraj datoteÄne sustave. No target system available. Ciljni sustav nije dostupan. No rootMountPoint is set. Nije postavljena root toÄka moniranja. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ako će viÅ¡e osoba koristiti ovo raÄunalo, možete postaviti viÅ¡e korisniÄkih raÄuna poslije instalacije.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ako će viÅ¡e osoba koristiti ovo raÄunalo, možete postaviti viÅ¡e korisniÄkih raÄuna poslije instalacije.</small> UsersQmlViewStep 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 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 %1 support %1 podrÅ¡ka About %1 setup O %1 instalacijskom programu About %1 installer O %1 instalacijskom programu WelcomeQmlViewStep Welcome DobrodoÅ¡li WelcomeViewStep Welcome DobrodoÅ¡li ZfsJob Create ZFS pools and datasets Stvorite ZFS pool-ove i skupove podataka Failed to create zpool on Nije uspjelo kreiranje zpool-a na Configuration Error GreÅ¡ka konfiguracije No partitions are available for ZFS. Nisu dostupne particije za ZFS. Internal data missing Nedostaju interni podaci Failed to create zpool Nije uspjelo kreiranje zpool-a Failed to create dataset Nije uspjelo kreiranje skupova podataka The output was: Izlaz je bio: calamares-sidebar About O programu Debug Uklanjanje greÅ¡aka Show information about Calamares Prikaži informacije o Calamares instalacijskom programu Show debug information Prikaži debug informaciju finishedq Installation Completed Instalacija je zavrÅ¡ila %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 je instaliran na vaÅ¡e raÄunalo.<br/> Možete ponovno pokrenuti vaÅ¡ novi sustav ili nastaviti koristiti trenutno okruženje. Close Installer Zatvori instalacijski program Restart System Ponovno pokretanje sustava <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Potpuni zapisnik instalacije dostupan je kao installation.log u home direktoriju Live korisnika.<br/> Ovaj se zapisnik kopira u /var/log/installation.log ciljnog sustava.</p> finishedq@mobile Installation Completed Instalacija je zavrÅ¡ila %1 has been installed on your computer.<br/> You may now restart your device. %1 je instaliran na vaÅ¡e raÄunalo.<br/> Možete ponovno pokrenuti vaÅ¡ ureÄ‘aj. Close Zatvori Restart Ponovno pokreni i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Postavke jezika</h1></br> JeziÄne postavke sustava utjeÄu na skup jezika i znakova za neke elemente korisniÄkog suÄelja naredbenog retka. Trenutne postavke su <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Postavke regije</h1></br> Postavke regije utjeÄu na format brojeva i datuma. Trenutne postavke su <strong>%1</strong>. Back Natrag keyboardq To activate keyboard preview, select a layout. Da biste aktivirali pregled tipkovnice, odaberite raspored iste. Keyboard Model: Tip tipkovnice: Layouts Rasporedi Type here to test your keyboard Ovdje testiraj tipkovnicu Variants Varijante 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> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice je moćan i besplatan uredski paket koji koriste milijuni ljudi diljem svijeta. UkljuÄuje nekoliko aplikacija koje ga Äine najsvestranijim besplatnim uredskim paketom otvorenog koda na tržiÅ¡tu.<br/> Zadana opcija. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Ako ne želite instalirati uredski paket, samo odaberite "bez uredskog paketa". Uvijek možete po potrebi dodati jedan (ili viÅ¡e) njih kasnije na svoj sustav. No Office Suite Bez uredskog paketa Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Napravite minimalnu instalaciju na radnoj povrÅ¡ini, uklonite sve dodatne aplikacije i kasnije odluÄite Å¡to želite dodati svom sustavu. Primjeri onoga Å¡to neće biti u takvoj instalaciji, neće biti uredskog paketa, nema media playera, nema preglednika slika ili podrÅ¡ke za ispis. Bit će to samo radna povrÅ¡ina, preglednik datoteka, upravitelj paketa, ureÄ‘ivaÄ teksta i jednostavan web-preglednik. Minimal Install Minimalna instalacija Please select an option for your install, or use the default: LibreOffice included. Odaberite opciju za instalaciju ili upotrijebite zadano: LibreOffice ukljuÄen. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Ovo je primjer QML datoteke, koja prikazuje opcije u RichText-u sa sadržajem koji se može kliknuti. <p>QML s RichText može koristiti HTML oznake, sadržaj koji se može kliknuti koristan je za zaslone osjetljive na dodir.</p> <p><b>Ovo je podebljani tekst</b></p> <p><i>Ovo je kurzivni tekst</i></p> <p><u>Ovo je podvuÄeni tekst</u></p> <p><center>Ovaj će tekst biti poravnan u sredini.</center></p> <p><s>Ovo je precrtano</s></p> <p>Primjer koda: <code>ls -l /home</code></p> <p><b>Liste:</b></p> <ul> <li>Intel CPU sustavi</li> <li>AMD CPU sustavi</li> </ul> <p>Okomita traka za pomicanje je podesiva, trenutna Å¡irina je postavljena na 10.</p> Back Natrag usersq Pick your user name and credentials to login and perform admin tasks Odaberite svoje korisniÄko ime i vjerodajnice za prijavu i izvrÅ¡avanje administracijskih zadataka What is your name? Koje je tvoje ime? Your Full Name VaÅ¡e puno ime What name do you want to use to log in? Koje ime želite koristiti za prijavu? Login Name KorisniÄko ime If more than one person will use this computer, you can create multiple accounts after installation. Ako će viÅ¡e korisnika koristiti ovo raÄunalo, nakon instalacije možete otvoriti viÅ¡e raÄuna. Only lowercase letters, numbers, underscore and hyphen are allowed. DopuÅ¡tena su samo mala slova, brojevi, donja crta i crtica. root is not allowed as username. root nije dozvoljeno korisniÄko ime. What is the name of this computer? Koje je ime ovog raÄunala? Computer Name Ime raÄunala This name will be used if you make the computer visible to others on a network. Ovo će se ime upotrebljavati ako raÄunalo uÄinite vidljivim drugima na mreži. localhost is not allowed as hostname. localhost nije dozvoljeno ime raÄunala. Choose a password to keep your account safe. Odaberite lozinku da bi raÄun bio siguran. Password Lozinka Repeat Password Ponovite lozinku Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Dvaput unesite istu lozinku kako biste je mogli provjeriti ima li pogreÅ¡aka u tipkanju. Dobra lozinka sadržavat će mjeÅ¡avinu slova, brojeva i interpunkcije, treba imati najmanje osam znakova i treba je mijenjati u redovitim intervalima. Validate passwords quality Provjerite kvalitetu lozinki When this box is checked, password-strength checking is done and you will not be able to use a weak password. Kad je ovaj okvir potvrÄ‘en, bit će napravljena provjera jakosti lozinke te nećete moći koristiti slabu lozinku. Log in automatically without asking for the password Automatska prijava bez traženja lozinke Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. DopuÅ¡tena su samo slova, brojevi, donja crta i crtica i to kao najmanje dva znaka Reuse user password as root password Upotrijebite lozinku korisnika kao root lozinku Use the same password for the administrator account. Koristi istu lozinku za administratorski raÄun. Choose a root password to keep your account safe. Odaberite root lozinku da biste zaÅ¡titili svoj raÄun. Root Password Root lozinka Repeat Root Password Ponovite root lozinku Enter the same password twice, so that it can be checked for typing errors. Dvaput unesite istu lozinku kako biste mogli provjeriti ima li pogreÅ¡aka u tipkanju. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>DobrodoÅ¡li u %1<quote>%2</quote> instalacijski program</h3> <p>Ovaj program će vas pitati neka pitanja i pripremiti %1 na vaÅ¡em raÄunalu.</p> Support PodrÅ¡ka Known issues Poznati problemi Release notes BiljeÅ¡ke o izdanju Donate Doniraj calamares-calamares-2d126ae/lang/calamares_hu.ts000066400000000000000000006546241430147706700217450ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 %1 csatolás törlése partícionáláshoz Clearing mounts for partitioning operations on %1. %1 csatolás törlése partícionáláshoz Cleared all mounts for %1 %1 minden csatolása törölve ClearTempMountsJob Clear all temporary mounts. Minden ideiglenes csatolás törlése Clearing all temporary mounts. Minden ideiglenes csatolás törlése 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. Packages Install option: <strong>%1</strong> None Summary Összefoglalás This is an overview of what will happen once you start the setup procedure. Összefoglaló arról mi fog történni a telepítés során. This is an overview of what will happen once you start the install procedure. Ez áttekintése annak, hogy mi fog történni, ha megkezded a telepítést. ContextualProcessJob Contextual Processes Job KörnyezetfüggÅ‘ folyamatok feladat CreatePartitionDialog Create a Partition Partíció Létrehozása Si&ze: Mé&ret: MiB MiB Partition &Type: Partíció &típus: Primar&y E&xtended K&iterjesztett Fi&le System: Fájlrendszer: LVM LV name LVM LV név &Mount Point: &Csatolási pont: Flags: Zászlók: Label for the filesystem FS Label: En&crypt Titkosítás Logical Logikai Primary ElsÅ‘dleges GPT GPT Mountpoint already in use. Please select another one. A csatolási pont már használatban van. Kérlek, válassz másikat. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Új partíció létrehozása %2MiB partíción a %4 (%3) %1 fájlrendszerrel Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Új <strong>%2MiB </strong>partíció létrehozása itt <strong>%4</strong> (%3) fájlrendszer típusa <strong>%1</strong>. Creating new %1 partition on %2. Új %1 partíció létrehozása a következÅ‘n: %2. The installer failed to create partition on disk '%1'. A telepítÅ‘ nem tudta létrehozni a partíciót ezen a lemezen '%1'. 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 Con&tent: &Keep &megtart Format Formázás Warning: Formatting the partition will erase all existing data. Figyelem: A partíció formázása az összes meglévÅ‘ adatot törölni fogja. &Mount Point: &Csatolási pont: Si&ze: &méret: MiB MiB Fi&le System: &fájlrendszer Flags: Zászlók: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Adatlap En&crypt system Rendszer titkosítása Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Jelszó Confirm passphrase Jelszó megerÅ‘sítés Please enter the same passphrase in both boxes. Ãrd be ugyanazt a jelmondatot mindkét dobozban. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Partíció információk beállítása Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. %1 telepítése az <strong>új</strong> %2 partícióra. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Titkosított swap konfigurálása. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Adatlap <h1>License Agreement</h1> <h1>LicenszszerzÅ‘dés</h1> I accept the terms and conditions above. Elfogadom a fentebbi felhasználási feltételeket. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Szolgáltatások Login label for netinstall module, choose login manager Bejelentkezés Desktop label for netinstall module, choose desktop environment Asztal Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications Alkalmazások 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Aktuális: After: Utána: No EFI system partition configured Nincs EFI rendszer partíció beállítva EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted 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 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 StandardButtons &OK &OK &Yes &Igen &No &Nem &Cancel &Mégse &Close &Bezár TrackingInstallJob Installation feedback Visszajelzés a telepítésrÅ‘l Sending installation feedback. Telepítési visszajelzés küldése. Internal error in install-tracking. Hiba a telepítÅ‘ nyomkövetésben. HTTP request timed out. HTTP kérés ideje lejárt. 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 UmountJob Unmount file systems. Fájlrendszerek leválasztása. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ha egynél több személy használja a számítógépet akkor létrehozhat több felhasználói fiókot telepítés után.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ha egynél több személy használja a számítógépet akkor létrehozhat több felhasználói fiókot telepítés után.</small> UsersQmlViewStep 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 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 %1 support %1 támogatás About %1 setup A %1 telepítÅ‘rÅ‘l. About %1 installer A %1 telepítÅ‘rÅ‘l WelcomeQmlViewStep Welcome Üdvözlet WelcomeViewStep Welcome Üdvözlet ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Konfigurációs hiba No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Hibakeresés Show information about Calamares Show debug information Hibakeresési információk mutatása finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Billentyűzet modell: Layouts Type here to test your keyboard Gépelj itt a billentyűzet teszteléséhez Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? 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> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_i18n.qrc.in000066400000000000000000000003061430147706700226320ustar00rootroot00000000000000 @calamares_i18n_qrc_content@ calamares-calamares-2d126ae/lang/calamares_id.ts000066400000000000000000006451511430147706700217200ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings Kelola pengaturan mount otomatis BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Lingkungan boot</strong> pada sistem ini.<br><br>Sistem x86 kuno hanya mendukung <strong>BIOS</strong>.<br>Sistem moderen biasanya menggunakan <strong>EFI</strong>, tapi mungkin juga tampak sebagai BIOS jika dimulai dalam mode kompatibilitas. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Sistem ini telah dimulai dengan lingkungan boot <strong>EFI</strong>.<br><br>Untuk mengkonfigurasi startup dari lingkungan EFI, installer ini seharusnya memaparkan sebuah aplikasi boot loader, seperti <strong>GRUB</strong> atau <strong>systemd-boot</strong> pada sebuah <strong>EFI System Partition</strong>. Ini adalah otomatis, kecuali kalau kamu memilih pemartisian manual, dalam 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. Unggah catatan sesi ke pastebin yang telah dikonfigurasi. Send Session Log Kirim Catatan Sesi Reload Stylesheet Muat ulang Lembar gaya Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Informasi debug Calamares::ExecutionViewStep Set up Install Instal Calamares::FailJob Job failed (%1) Pekerjaan gagal (%1) Programmed job failure was explicitly requested. Kegagalan pekerjaan diprogram diminta secara eksplisit. Calamares::JobThread Done Selesai Calamares::NamedJob Example job (%1) Contoh pekerjaan (%1) Calamares::ProcessJob Run command '%1' in target system. Jalankan perintah '%1' pada sistem target. Run command '%1'. Jalankan perintah '%1'. Running command %1 %2 Menjalankan perintah %1 %2 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>. QML Langkah <i>%1</i>. Loading failed. Gagal memuat. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). Menunggu %n modul(). (%n second(s)) (%n detik()) System-requirements checking is complete. Pengecekan kebutuhan sistem telah selesai. Calamares::ViewManager Setup Failed Pengaturan Gagal Installation Failed Instalasi Gagal Error Kesalahan &Yes &Ya &No &Tidak &Close &Tutup Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed Inisialisasi Calamares Gagal %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 tidak dapat terinstal. Calamares tidak dapat memuat seluruh modul konfigurasi. Terdapat masalah dengan Calamares karena sedang digunakan oleh distribusi. <br/>The following modules could not be loaded: <br/>Modul berikut tidak dapat dimuat. Continue with setup? Lanjutkan dengan setelan ini? Continue with installation? Lanjutkan instalasi? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Installer %1 akan membuat perubahan ke disk Anda untuk memasang %2.<br/><strong>Anda tidak dapat membatalkan perubahan tersebut.</strong> &Set up now &Install now &Instal sekarang Go &back &Kembali &Set up &Install &Instal Setup is complete. Close the setup program. Setup selesai. Tutup program setup. The installation is complete. Close the installer. Instalasi sudah lengkap. Tutup installer. Cancel setup without changing the system. Batalkan setup tanpa mengubah sistem. Cancel installation without changing the system. Batalkan instalasi tanpa mengubah sistem yang ada. &Next &Berikutnya &Back &Kembali &Done &Selesai &Cancel &Batal Cancel setup? Batalkan setup? Cancel installation? Batalkan instalasi? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Apakah Anda benar-benar ingin membatalkan proses instalasi ini? Instalasi akan ditutup dan semua perubahan akan hilang. 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Lepaskan semua kaitan untuk operasi pemartisian pada %1 Clearing mounts for partitioning operations on %1. Melepas semua kaitan untuk operasi pemartisian pada %1 Cleared all mounts for %1 Semua kaitan dilepas untuk %1 ClearTempMountsJob Clear all temporary mounts. Lepaskan semua kaitan sementara. Clearing all temporary mounts. Melepaskan semua 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. Packages Install option: <strong>%1</strong> None Summary Ikhtisar This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Berikut adalah tinjauan mengenai yang akan terjadi setelah Anda memulai prosedur instalasi. ContextualProcessJob Contextual Processes Job Memproses tugas kontekstual CreatePartitionDialog Create a Partition Buat Partisi Si&ze: Uku&ran: MiB MiB Partition &Type: Partisi & Tipe: Primar&y E&xtended E&xtended Fi&le System: Sistem Berkas: LVM LV name Nama LV LVM &Mount Point: &Titik Kait: Flags: Tanda: Label for the filesystem Label untuk filesystem FS Label: Label FS: En&crypt Enkripsi Logical Logikal Primary Utama GPT GPT Mountpoint already in use. Please select another one. Titik-kait sudah digunakan. Silakan pilih yang lainnya. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Membuat partisi %1 baru di %2. The installer failed to create partition on disk '%1'. Installer gagal untuk membuat partisi di disk '%1'. 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 Con&tent: &Keep &Pertahankan Format Format Warning: Formatting the partition will erase all existing data. Peringatan: Memformat partisi akan menghapus semua data yang ada. &Mount Point: Lokasi Mount: Si&ze: Uku&ran: MiB MiB Fi&le System: Sis&tem Berkas: Flags: Bendera: Label for the filesystem Label untuk filesystem FS Label: Label FS: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formulir En&crypt system &Sistem enkripsi Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Kata Sandi Confirm passphrase Konfirmasi kata sandi Please enter the same passphrase in both boxes. Silakan masukkan kata sandi yang sama di kedua kotak. ErrorDialog Details: Would you like to paste the install log to the web? Maukah anda menempelkan log instalasi ke situs? FillGlobalStorageJob Set partition information Tetapkan informasi partisi Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Instal %1 pada partisi sistem %2 <strong>baru</strong> Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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 partisi %1 (file system: %2, ukuran %3 MiB) pada %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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) menjalankan installer sebagai administrator (root) The setup program is not running with administrator rights. Installer tidak dijalankan dengan kewenangan administrator. The installer is not running with administrator rights. Installer tidak dijalankan dengan kewenangan administrator. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. Layar terlalu kecil untuk menampilkan installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Tidak dapat membuka berkas <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Membuat initramfs menggunakan mkinitcpio. InitramfsJob Creating initramfs. Membuat initramfs. InteractiveTerminalPage Konsole not installed Konsole tidak terinstal Please install KDE Konsole and try again! Silahkan instal KDE Konsole dan ulangi lagi! Executing script: &nbsp;<code>%1</code> Mengeksekusi skrip: &nbsp;<code>%1</code> 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Isian <h1>License Agreement</h1> I accept the terms and conditions above. Saya menyetujui segala persyaratan di atas. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 Perangkat lunak peramban Browser package Paket peramban Web browser Peramban web Kernel label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Servis Login label for netinstall module, choose login manager Masuk Desktop label for netinstall module, choose desktop environment Desktop Communication label for netinstall module Komunikasi Development label for netinstall module Pengembangan Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications Aplikasi 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. 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 Ulangi Kata Sandi When this box is checked, password-strength checking is done and you will not be able to use a weak password. Ketikan kotak ini dicentang, pengecekan kekuatan kata sandi akan dilakukan dan anda tidak akan dapat menggunakan kata sandi yang lemah. Require strong passwords. Log in automatically without asking for the password. Log in otomatis tanpa menanyakan sandi. Use the same password for the administrator account. Gunakan sandi yang sama untuk akun administrator. Choose a password for the administrator account. Pilih sebuah kata sandi untuk akun administrator. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Ketik kata sandi yang sama dua kali, supaya kesalahan pengetikan dapat diketahui.</small> 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Saat ini: After: Sesudah: No EFI system partition configured Tiada partisi sistem EFI terkonfigurasi EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted 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 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 StandardButtons &OK &OK &Yes &Ya &No &Tidak &Cancel &Batal &Close &Tutup TrackingInstallJob Installation feedback Umpan balik instalasi. Sending installation feedback. Mengirim umpan balik installasi. Internal error in install-tracking. Galat intern di pelacakan-instalasi. HTTP request timed out. Permintaan waktu HTTP habis. 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 UmountJob Unmount file systems. Lepaskan sistem berkas. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep 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 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 %1 support Dukungan %1 About %1 setup About %1 installer Tentang installer %1 WelcomeQmlViewStep Welcome Selamat Datang WelcomeViewStep Welcome Selamat Datang ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Kesalahan Konfigurasi No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Debug Show information about Calamares Show debug information Tampilkan informasi debug finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Model Papan Ketik: Layouts Type here to test your keyboard Ketik di sini untuk mencoba papan ketik Anda Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Siapa nama Anda? Your Full Name What name do you want to use to log in? Nama apa yang ingin Anda gunakan untuk log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. root tidak boleh digunakan sebagai nama pengguna. What is the name of this computer? Apakah nama dari komputer ini? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Pilih sebuah kata sandi untuk menjaga keamanan akun Anda. Password Repeat Password Ulangi Kata Sandi Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality Validasi kualitas kata sandi When this box is checked, password-strength checking is done and you will not be able to use a weak password. Ketikan kotak ini dicentang, pengecekan kekuatan kata sandi akan dilakukan dan anda tidak akan dapat menggunakan kata sandi yang lemah. Log in automatically without asking for the password Masuk ke dalam sesi secara otomatis tanpa menanyakan kata sandi Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Hanya huruf, angka, garis bawah, dan tanda hubung yang diperbolehkan, minimal dua karakter. Reuse user password as root password Gunakan kata sandi pengguna sebagai kata sandi root Use the same password for the administrator account. Gunakan sandi yang sama untuk akun administrator. Choose a root password to keep your account safe. Root Password Kata Sandi Root Repeat Root Password Ulangi Kata Sandi Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_ie.ts000066400000000000000000006013671430147706700217220ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 MBR del %1 Boot Partition Partition de inicialisation System Partition Partition del sistema Do not install a boot loader Ne installar un bootloader %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Blanc págine Calamares::DebugWindow Form Redimensionar un gruppe de tomes GlobalStorage JobQueue Modules Modules Type: Tip: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Configurar Install Installar Calamares::FailJob Job failed (%1) Tache ne successat (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Finit Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... Cargante... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Configuration ne successat Installation Failed Installation ne successat Error Errore &Yes &Yes &No &No &Close C&luder Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continuar li configuration? Continue with installation? Continuar li installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Configurar nu &Install now &Installar nu Go &back Ear &retro &Set up &Configurar &Install &Installar Setup is complete. Close the setup program. Configuration es completat. Ples cluder li configurator. The installation is complete. Close the installer. Installation es completat. Ples cluder li installator. Cancel setup without changing the system. Anullar li configuration sin modificationes del sistema. Cancel installation without changing the system. Anullar li installation sin modificationes del sistema. &Next &Sequent &Back &Retro &Done &Finir &Cancel A&nullar Cancel setup? Anullar li configuration? Cancel installation? Anullar li installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type Ãnconosset tip de exception unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program Configiration de %1 %1 Installer Installator de %1 ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Redimensionar un gruppe de tomes Select storage de&vice: Current: Actual: After: Pos: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: Localisation del bootloader: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: Partition de sistema EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Sin swap Reuse Swap Reusar un swap Swap (no Hibernate) Swap (sin hivernation) Swap (with Hibernate) Swap (con hivernation) Swap to file Swap in un file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Selection de paccages Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Benevenit al configurator Calamares por %1</h1> <h1>Welcome to %1 setup</h1> <h1>Benevenit al configurator de %1</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Benevenit al installator Calamares por %1</h1> <h1>Welcome to the %1 installer</h1> <h1>Benevenit al installator de %1</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Configuration ne successat Installation Failed Installation ne successat The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Configuration es completat Installation Complete Installation es completat The setup of %1 is complete. Li configuration de %1 es completat. The installation of %1 is complete. Li installation de %1 es completat. Package Selection Selection de paccages Please pick a product from the list. The selected product will be installed. Packages Paccages Install option: <strong>%1</strong> None Summary Resume This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Crear un partition Si&ze: &Grandore: MiB Mio Partition &Type: Primar&y E&xtended E&xtendet Fi&le System: Sistema de fi&les: LVM LV name Gruppe (LV) de LVM &Mount Point: Flags: Label for the filesystem FS Label: En&crypt &Ciffrar Logical Logic Primary Primari GPT GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Creante un nov partition de %1 sur %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Crear li tabelle de partitiones Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) Tabelle GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Crear un nov tabelle de partitiones %1 sur %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Crear un nov tabelle de partitiones <strong>%1</strong> sur <strong>%2</strong> (%3). Creating new %1 partition table on %2. Creante un nov tabelle de partitiones %1 sur %2. The installer failed to create a partition table on %1. Li installator ne successat crear un tabelle de partitiones sur %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group Crear un gruppe de tomes CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 Ne successat aperter %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep &Retener Format Formate Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: &Grandore: MiB Mio Fi&le System: Sistema de fi&les: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Redimensionar un gruppe de tomes En&crypt system &Ciffrar li sistema Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form Redimensionar un gruppe de tomes &Restart now &Reiniciar nu <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish Finir FinishedViewStep Finish Finir FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Creante initramfs med mkinitcpio. InitramfsJob Creating initramfs. Creante initramfs. InteractiveTerminalPage Konsole not installed Konsole ne es installat Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Scripte KeyboardQmlViewStep Keyboard Tastatura KeyboardViewStep Keyboard Tastatura LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel A&nullar &OK &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Redimensionar un gruppe de tomes <h1>License Agreement</h1> <h1>Acorde de licentie</h1> I accept the terms and conditions above. Yo accepta li termines e condiciones ad-supra. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licentie LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>Driver de %1</strong><br/>de %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Driver de grafica %1</strong><br/><font color="Grey">de %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Plugin de navigator «%1»</strong><br/><font color="Grey">de %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Codec de %1</strong><br/><font color="Grey">de %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Paccage «%1»</strong><br/><font color="Grey">de %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">de %2</font> File: %1 File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Region: Zone: Zone: &Change... &Modificar... LocaleQmlViewStep Location Localisation LocaleTests Quit LocaleViewStep Location Localisation LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Null partition es definit. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generar li machine-id. Configuration Error Errore de configuration No root mount point is set for MachineId. Map Timezone: %1 Zone horari: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Selection de paccages Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Nucleo Services label for netinstall module, system services Servicios Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Communication Development label for netinstall module Office label for netinstall module Officie Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Temas Gaming label for netinstall module Ludes Utilities label for netinstall module Utensiles Applications Applicationes 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. PackageModel Name Nómine Description Descrition Page_Keyboard Form Redimensionar un gruppe de tomes Keyboard Model: Modelle de tastatura: Type here to test your keyboard Tippa ti-ci por provar vor tastatura Page_UserSetup Form Redimensionar un gruppe de tomes What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Hem Boot Inicie EFI system Sistema EFI Swap Swap New partition for %1 New partition Nov partition %1 %2 size[number] filesystem[name] PartitionModel Free Space Líber spacie New partition Nov partition Name Nómine File System Sistema de files File System Label Mount Point Monte-punctu Size Grandore PartitionPage Form Redimensionar un gruppe de tomes Storage de&vice: &Revert All Changes New Partition &Table Nov &tabelle de partitiones Cre&ate Cre&ar &Edit &Modificar &Delete &Remover New Volume Group Nov gruppe de tomes Resize Volume Group Redimensionar li gruppe Deactivate Volume Group Desactivar li gruppe Remove Volume Group Remover li gruppe de tomes I&nstall boot loader on: I&nstallar li bootloader sur: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Partitiones Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Actual: After: Pos: No EFI system partition configured Null partition del sistema EFI es configurat EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. Ne existe disponibil partitiones por installation. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Redimensionar un gruppe de tomes Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel Aspecte e conduida PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) %1 (%2) unknown ínconosset extended unformatted swap Default Predefinit File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Redimensionar un gruppe de tomes Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Partition de sistema EFI: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available KPMCore ne es disponibil Calamares cannot start KPMCore for the file-system resize job. Resize Failed Redimension ne successat The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Redimensionar li partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group Redimensionar li gruppe de tomes ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning Gerer partitiones SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Intern errore Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Modelle del tastatura: %1, li arangeament: %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. passwd ha terminat con code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Assignar li zone horari: %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK &OK &Yes &Yes &No &No &Cancel A&nullar &Close C&luder TrackingInstallJob Installation feedback Response al installation Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Redimensionar un gruppe de tomes Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback Response UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users Usatores UsersViewStep Users Usatores VariantModel Key Column header for key/value Clave Value Column header for key/value Valore VolumeGroupBaseDialog Create Volume Group Crear un gruppe de tomes List of Physical Volumes Liste de fisic tomes Volume Group Name: Nómine de gruppe: Volume Group Type: Tip de gruppe: Physical Extent Size: MiB Mio Total Size: Total grandore: Used Size: Usat grandore: Total Sectors: Total sectores: Quantity of LVs: WelcomePage Form Redimensionar un gruppe de tomes Select application and system language Selecter li application e li lingue del sistema 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 %1 support Suporte de %1 About %1 setup Pri li configurator de %1 About %1 installer Pri li installator de %1 WelcomeQmlViewStep Welcome Benevenit WelcomeViewStep Welcome Benevenit ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Errore de configuration No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Pri Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back Retro keyboardq To activate keyboard preview, select a layout. Keyboard Model: Modelle de tastatura: Layouts Arangeamentes Type here to test your keyboard Tippa ti-ci por provar vor tastatura Variants Variantes localeq Change Modificar notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back Retro usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Suporte Known issues Conosset problemas Release notes Notes del version Donate Donar calamares-calamares-2d126ae/lang/calamares_is.ts000066400000000000000000006144261430147706700217400ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 Hreinsaði alla tengipunkta fyrir %1 ClearTempMountsJob Clear all temporary mounts. Hreinsa alla bráðabirgðatengipunkta. Clearing all temporary mounts. Hreinsa alla bráðabirgðatengipunkta. 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. Packages Pakkar Install option: <strong>%1</strong> None Summary Yfirlit This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Þetta er yfirlit yfir það sem mun gerast þegar þú byrjar að setja upp aðferð. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Búa til disksneið Si&ze: St&ærð: MiB MiB Partition &Type: &Tegund disksneiðar: Primar&y E&xtended Útví&kkuð Fi&le System: Skráa&kerfi: LVM LV name LVM LV nafn &Mount Point: Tengi&punktur: Flags: Flögg: Label for the filesystem FS Label: En&crypt &Dulrita Logical Rökleg Primary Aðal GPT GPT Mountpoint already in use. Please select another one. Tengipunktur er þegar í notkun. Veldu einhvern annan. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Búa til nýja %1 disksneiðatöflu á %2. The installer failed to create partition on disk '%1'. Uppsetningarforritinu mistókst að búa til disksneið á diski '%1'. 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ð Con&tent: &Keep &Halda Format Forsníða Warning: Formatting the partition will erase all existing data. Aðvörun: Ef disksneiðin er forsniðin munu öll gögn eyðast. &Mount Point: Tengi&punktur: Si&ze: St&ærð: MiB MiB Fi&le System: Skráaker&fi: Flags: Flögg: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Eyðublað En&crypt system &Dulrita kerfi Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Lykilorð Confirm passphrase Staðfesta lykilorð Please enter the same passphrase in both boxes. Vinsamlegast sláðu inn sama lykilorðið í báða kassana. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Setja upplýsingar um disksneið Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Setja upp %1 á <strong>nýja</strong> %2 disk sneiðingu. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Eyðublað <h1>License Agreement</h1> I accept the terms and conditions above. Ég samþykki skilyrði leyfissamningsins hér að ofan. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Núverandi: After: Eftir: No EFI system partition configured Ekkert EFI kerfisdisksneið stillt EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form 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 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 StandardButtons &OK &à lagi &Yes &Já &No &Nei &Cancel &Hætta við &Close &Loka 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 UmountJob Unmount file systems. Aftengja skráarkerfi. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep 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 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 %1 support %1 stuðningur About %1 setup Um %1 uppsetninguna About %1 installer Um %1 uppsetningarforrrit WelcomeQmlViewStep Welcome Velkomin(n) WelcomeViewStep Welcome Velkomin(n) ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information Birta villuleitarupplýsingar finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Lyklaborðs tegund: Layouts Type here to test your keyboard Skrifaðu hér til að prófa lyklaborðið Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? 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> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_it_IT.ts000066400000000000000000006740311430147706700223330ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Grazie al <a href="https://calamares.io/team/">team di Calamares</a> e ai <a href="https://www.transifex.com/calamares/calamares/">traduttori di Calamares</a>.<br/><br/><a href="https://calamares.io/">Lo sviluppo di Calamares</a>e' sponsorizzato da<br/><a href="http://www.blue-systems.com/">Blue Systems e </a>Liberating Software Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings Gestisci le impostazioni di mount automatico BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. L'<strong>ambiente di avvio</strong> di questo sistema. <br><br>I vecchi sistemi x86 supportano solo <strong>BIOS</strong>. <bt>I sistemi moderni normalmente usano <strong>EFI</strong> ma possono anche apparire come sistemi BIOS se avviati in modalità compatibile. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Il sistema è stato avviato con un ambiente di boot <strong>EFI</strong>.<br><br>Per configurare l'avvio da un ambiente EFI, il programma d'installazione deve inserire un boot loader come <strong>GRUB</strong> o <strong>systemd-boot</strong> su una <strong>EFI System Partition</strong>. Ciò avviene automaticamente, a meno che non si scelga il partizionamento manuale che permette di scegliere un proprio boot loader personale. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. ll sistema è stato avviato con un ambiente di boot <strong>BIOS</strong>.<br><br>Per configurare l'avvio da un ambiente BIOS, il programma d'installazione deve installare un boot loader come <strong>GRUB</strong> all'inizio di una partizione o nel <strong>Master Boot Record</strong> vicino all'origine della tabella delle partizioni (preferito). Ciò avviene automaticamente, a meno che non si scelga il partizionamento manuale che permette di fare una configurazione personale. 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. Ricarica il foglio di stile dalla cartella del marchio. Uploads the session log to the configured pastebin. Carica i registri di sessione nel pastebin configurato. Send Session Log Invia registro di sessione Reload Stylesheet Ricarica il foglio di stile Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Albero dei Widget Debug information Informazioni di debug 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). In attesa di %n modulo(i). (%n second(s)) (%n secondo) (%n secondo(i)) (%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 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. Imposta l'etichetta del filesystem a %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. Il programma di installazione non è riuscito ad aggiornare la tabella delle partizioni sul disco '%1'. CheckerContainer Gathering system information... Raccolta delle informazioni di sistema... 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 Successfully unmounted %1. %1 smontata correttamente. Successfully disabled swap %1. Swap %1 disabilitata correttamente. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Rimuovere i punti di mount per operazioni di partizionamento su %1 Clearing mounts for partitioning operations on %1. Rimozione dei punti di mount per le operazioni di partizionamento su %1. Cleared all mounts for %1 Rimossi tutti i punti di mount per %1 ClearTempMountsJob Clear all temporary mounts. Rimuovere tutti i punti di mount temporanei. Clearing all temporary mounts. Rimozione di tutti i 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. Imposta fuso orario a %1/%2. The system language will be set to %1. La lingua di sistema sarà impostata a %1. The numbers and dates locale will be set to %1. I numeri e le date locali saranno impostati a %1. Network Installation. (Disabled: Incorrect configuration) Installazione di rete. (Disabilitato: Configurazione non valida) Network Installation. (Disabled: Received invalid groups data) Installazione di rete. (Disabilitata: Ricevuti dati dei gruppi non validi) Network Installation. (Disabled: Internal error) Installazione di rete (disabilitata: errore interno) Network Installation. (Disabled: No package list) Installazione di rete (disabilitata: nessun elenco di pacchetti) Package selection Selezione del pacchetto Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Installazione di rete. (Disabilitata: impossibile recuperare le liste dei pacchetti, controllare la connessione di rete) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Questo computer non soddisfa i requisiti minimi per la configurazione di %1.<br/>La configurazione non può continuare. <a href="#details">Dettagli...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Questo computer non soddisfa i requisiti minimi per installare %1. <br/>L'installazione non può continuare. <a href="#details">Dettagli...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Questo computer non soddisfa alcuni requisiti raccomandati per la configurazione di %1.<br/>La configurazione può continuare ma alcune funzionalità potrebbero essere disabilitate. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Questo computer non soddisfa alcuni requisiti consigliati per l'installazione di %1.<br/>L'installazione può continuare ma alcune funzionalità potrebbero non essere disponibili. This program will ask you some questions and set up %2 on your computer. Questo programma chiederà alcune informazioni e configurerà %2 sul computer. <h1>Welcome to the Calamares setup program for %1</h1> Benvenuto nel programma di installazione Calamares di %1 <h1>Welcome to %1 setup</h1> Benvenuto nell'installazione di %1 <h1>Welcome to the Calamares installer for %1</h1> Benvenuto nel programma di installazione Calamares di %1 <h1>Welcome to the %1 installer</h1> Benvenuto nel programma di installazione di %1 Your username is too long. Il nome utente è troppo lungo. '%1' is not allowed as username. '%1' non è consentito come nome utente. Your username must start with a lowercase letter or underscore. Il tuo username deve iniziare con una lettera minuscola o un trattino basso. Only lowercase letters, numbers, underscore and hyphen are allowed. Solo lettere minuscole, numeri, trattini e trattini bassi sono permessi. Your hostname is too short. Hostname è troppo corto. Your hostname is too long. Hostname è troppo lungo. '%1' is not allowed as hostname. '%1' non è consentito come nome host. Only letters, numbers, underscore and hyphen are allowed. Solo lettere, numeri, trattini e trattini bassi sono permessi. Your passwords do not match! Le password non corrispondono! OK! OK! Setup Failed Installazione fallita Installation Failed Installazione non riuscita The setup of %1 did not complete successfully. La configurazione di %1 non è stata completata correttamente. The installation of %1 did not complete successfully. L'installazione di %1 non è stata completata correttamente. Setup Complete Installazione completata Installation Complete Installazione completata The setup of %1 is complete. L'installazione di %1 è completa The installation of %1 is complete. L'installazione di %1 è completata. Package Selection Selezione del Pacchetto Please pick a product from the list. The selected product will be installed. Si prega di scegliere un prodotto dalla lista. Il prodotto selezionato verrà installato. Packages Pacchetti Install option: <strong>%1</strong> Opzione di installazione: <strong>%1</strong> None Nessuno Summary Riepilogo This is an overview of what will happen once you start the setup procedure. Questa è una panoramica di quello che succederà una volta avviata la procedura di configurazione. This is an overview of what will happen once you start the install procedure. Una panoramica delle modifiche che saranno effettuate una volta avviata la procedura di installazione. ContextualProcessJob Contextual Processes Job Job dei processi contestuali CreatePartitionDialog Create a Partition Creare una partizione Si&ze: Dimen&sione: MiB MiB Partition &Type: &Tipo di partizione: Primar&y Primar&ia E&xtended E&stesa Fi&le System: Fi&le System: LVM LV name Nome LV di LVM &Mount Point: Punto di &mount: Flags: Flag: Label for the filesystem Etichetta per il filesystem FS Label: Etichetta FS: En&crypt Cr&iptare Logical Logica Primary Primaria GPT GPT Mountpoint already in use. Please select another one. Il punto di mount è già in uso. Sceglierne un altro. Mountpoint must start with a <tt>/</tt>. Il punto di mount deve iniziare con un <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Crea nuova partizione di %1MiB su %3 (%2) con voci %4. Create new %1MiB partition on %3 (%2). Crea nuova partizione di %1MiB su %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Crea una nuova partizione da %2MiB su %4 (%3) con file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Crea nuova partizione di <strong>%1MiB</strong> su <strong>%3</strong> (%2) con voci <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Creare nuova partizione di <strong>%1MiB</strong> su <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. 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 Creazione utente %1. Configuring user %1 Configurazione utente %1 Setting file permissions Impostazione permessi file 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 Con&tent: Con&tenuto: &Keep &Mantenere Format Formattare Warning: Formatting the partition will erase all existing data. Attenzione: la formattazione della partizione cancellerà tutti i dati! &Mount Point: Punto di &Mount: Si&ze: Di&mensione: MiB MiB Fi&le System: Fi&le System: Flags: Flag: Label for the filesystem Etichetta per il filesystem FS Label: Etichetta FS: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Modulo En&crypt system Cr&iptare il sistema Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Frase di accesso Confirm passphrase Confermare frase di accesso Please enter the same passphrase in both boxes. Si prega di immettere la stessa frase di accesso in entrambi i riquadri. ErrorDialog Details: Dettagli: Would you like to paste the install log to the web? Si vuole mettere il log di installazione sul web? FillGlobalStorageJob Set partition information Impostare informazioni partizione Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Installare %1 sulla <strong>nuova</strong> partizione di sistema %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Configurazione per lo swap cifrato. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Modulo <h1>License Agreement</h1> <h1>Accordo di Licenza</h1> I accept the terms and conditions above. Accetto i termini e le condizioni sopra indicati. Please review the End User License Agreements (EULAs). Si prega di leggere l'Accordo di Licenza per l'Utente Finale (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Questa procedura di configurazione installerà software proprietario che è soggetto ai termini di licenza. If you do not agree with the terms, the setup procedure cannot continue. Se non accetti i termini, la procedura di configurazione non può continuare. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Questa procedura di configurazione installerà software proprietario sottoposto a termini di licenza, per fornire caratteristiche aggiuntive e migliorare l'esperienza utente. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Se non se ne accettano i termini, il software proprietario non verrà installato e al suo posto saranno utilizzate alternative open source. 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 Esci 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 label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Servizi Login label for netinstall module, choose login manager Accesso Desktop label for netinstall module, choose desktop environment Ambiente desktop Communication label for netinstall module Comunicazione Development label for netinstall module Sviluppo Office label for netinstall module Ufficio Multimedia label for netinstall module Multimedia Internet label for netinstall module Internet Theming label for netinstall module Personalizzazione tema Gaming label for netinstall module Giochi Utilities label for netinstall module Utilità Applications Applicazioni 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 Zone You can fine-tune Language and Locale settings below. PWQ Password is too short Password troppo corta Password is too long Password troppo lunga Password is too weak Password troppo debole Memory allocation error when setting '%1' Errore di allocazione della memoria quando si imposta '%1' Memory allocation error Errore di allocazione di memoria The password is the same as the old one La password coincide con la precedente The password is a palindrome La password è un palindromo The password differs with case changes only La password differisce solo per lettere minuscole e maiuscole The password is too similar to the old one La password è troppo simile a quella precedente The password contains the user name in some form La password contiene il nome utente in qualche campo The password contains words from the real name of the user in some form La password contiene parti del nome utente reale in qualche campo The password contains forbidden words in some form La password contiene parole vietate in alcuni campi The password contains 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Corrente: After: Dopo: No EFI system partition configured Nessuna partizione EFI di sistema è configurata EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS Opzione per usare GPT su BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. 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 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 StandardButtons &OK &OK &Yes &Si &No &No &Cancel &Annulla &Close &Chiudi TrackingInstallJob Installation feedback Valutazione dell'installazione Sending installation feedback. Invio della valutazione dell'installazione. Internal error in install-tracking. Errore interno in install-tracking. HTTP request timed out. La richiesta HTTP è scaduta. 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 UmountJob Unmount file systems. Smonta i file system. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se più di una persona utilizzerà questo computer, puoi creare ulteriori account dopo la configurazione.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se più di una persona utilizzerà questo computer, puoi creare ulteriori account dopo l'installazione.</small> UsersQmlViewStep 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 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 %1 support supporto %1 About %1 setup Informazioni sul sistema di configurazione %1 About %1 installer Informazioni sul programma di installazione %1 WelcomeQmlViewStep Welcome Benvenuti WelcomeViewStep Welcome Benvenuti ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Errore di Configurazione No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Informazioni su Debug Debug Show information about Calamares Show debug information Mostra le informazioni di debug finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back Indietro keyboardq To activate keyboard preview, select a layout. Keyboard Model: Modello della tastiera: Layouts Schemi Type here to test your keyboard Digitare qui per provare la tastiera Variants Varianti 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> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>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> Support Supporto Known issues Problemi conosciuti Release notes Note di rilascio Donate Donazioni calamares-calamares-2d126ae/lang/calamares_ja-Hira.ts000066400000000000000000005711741430147706700226020ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Error &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next &Back &Done &Cancel Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_ja.ts000066400000000000000000007441721430147706700217210ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <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 ãŒå¾Œæ´ã—ã¦ã„ã¾ã™ã€‚ Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;<br/> 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 インストールã«å¤±æ•— 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 Successfully unmounted %1. %1 を正常ã«ã‚¢ãƒ³ãƒžã‚¦ãƒ³ãƒˆã—ã¾ã—ãŸã€‚ Successfully disabled swap %1. スワップ %1 を正常ã«ç„¡åйã«ã—ã¾ã—ãŸã€‚ Successfully cleared swap %1. スワップ %1 を正常ã«ã‚¯ãƒªã‚¢ã—ã¾ã—ãŸã€‚ Successfully closed mapper device %1. マッパーデãƒã‚¤ã‚¹ %1 を正常ã«é–‰ã˜ã¾ã—ãŸã€‚ Successfully disabled volume group %1. ボリュームグループ %1 を正常ã«ç„¡åйã«ã—ã¾ã—ãŸã€‚ Clear mounts for partitioning operations on %1 %1 ã®ãƒ‘ーティションæ“作ã®ãŸã‚ã€ãƒžã‚¦ãƒ³ãƒˆã‚’解除ã™ã‚‹ Clearing mounts for partitioning operations on %1. %1 ã®ãƒ‘ーティションæ“作ã®ãŸã‚ã€ãƒžã‚¦ãƒ³ãƒˆã‚’解除ã—ã¦ã„ã¾ã™ã€‚ Cleared all mounts for %1 %1 ã®ã™ã¹ã¦ã®ãƒžã‚¦ãƒ³ãƒˆã‚’解除ã—ã¾ã—㟠ClearTempMountsJob Clear all temporary mounts. ã™ã¹ã¦ã®ä¸€æ™‚çš„ãªãƒžã‚¦ãƒ³ãƒˆã‚’クリアã™ã‚‹ Clearing all temporary mounts. ã™ã¹ã¦ã®ä¸€æ™‚çš„ãªãƒžã‚¦ãƒ³ãƒˆã‚’クリアã—ã¦ã„ã¾ã™ã€‚ 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. リストã‹ã‚‰è£½å“ã‚’é¸ã‚“ã§ãã ã•ã„ã€‚é¸æŠžã—ãŸè£½å“ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚ Packages パッケージ Install option: <strong>%1</strong> インストールオプション: <strong>%1</strong> None ãªã— Summary è¦ç´„ This is an overview of what will happen once you start the setup procedure. ã“れã¯ã€ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—開始後ã«è¡Œã†ã“ã¨ã®æ¦‚è¦ã§ã™ã€‚ This is an overview of what will happen once you start the install procedure. ã“れã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«é–‹å§‹å¾Œã«è¡Œã†ã“ã¨ã®æ¦‚è¦ã§ã™ã€‚ ContextualProcessJob Contextual Processes Job コンテキストプロセスジョブ CreatePartitionDialog Create a Partition パーティションã®ç”Ÿæˆ Si&ze: サイズ (&Z) MiB MiB Partition &Type: パーティションã®ç¨®é¡ž (&T): Primar&y プライマリ (&Y) E&xtended æ‹¡å¼µ (&X) Fi&le System: ファイルシステム (&L): LVM LV name LVMã®LVå &Mount Point: マウントãƒã‚¤ãƒ³ãƒˆ (&M) Flags: フラグ: Label for the filesystem ファイルシステムã®ãƒ©ãƒ™ãƒ« FS Label: FSラベル: En&crypt æš—å·åŒ– (&C) Logical è«–ç† Primary プライマリ GPT GPT Mountpoint already in use. Please select another one. マウントãƒã‚¤ãƒ³ãƒˆã¯æ—¢ã«ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚ä»–ã‚’é¸æŠžã—ã¦ãã ã•ã„。 Mountpoint must start with a <tt>/</tt>. マウントãƒã‚¤ãƒ³ãƒˆã¯ <tt>/</tt> ã§é–‹å§‹ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. %3 (%2) ã«ã‚¨ãƒ³ãƒˆãƒª %4 ã®æ–°ã—ã„ %1MiB パーティションを作æˆã™ã‚‹ã€‚ Create new %1MiB partition on %3 (%2). %3 (%2) ã«æ–°ã—ã„ %1MiB パーティションを作æˆã™ã‚‹ã€‚ Create new %2MiB partition on %4 (%3) with file system %1. %4 (%3) ã«ãƒ•ァイルシステム %1 ã®æ–°ã—ã„ %2MiB パーティションを作æˆã™ã‚‹ã€‚ 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 パーティションã®ç·¨é›† Con&tent: コンテンツ (&T): &Keep ä¿æŒ (&K) Format フォーマット Warning: Formatting the partition will erase all existing data. 警告: パーティションã®ãƒ•ォーマットã¯ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’消去ã—ã¾ã™ã€‚ &Mount Point: マウントãƒã‚¤ãƒ³ãƒˆ (&M) Si&ze: サイズ (&Z): MiB MiB Fi&le System: ファイルシステム (&L) Flags: フラグ: Label for the filesystem ファイルシステムã®ãƒ©ãƒ™ãƒ« FS Label: FSラベル: Passphrase for existing partition 既存ã®ãƒ‘ーティションã®ãƒ‘スフレーズ Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. 指定ã—ãŸãƒ‘スフレーズã§ãƒ‘ーティション %1 を復å·åŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚<br/><br/>パーティションをå†åº¦ç·¨é›†ã—ã¦æ­£ã—ã„パスフレーズを指定ã™ã‚‹ã‹ã€å‰Šé™¤ã—ã¦æ–°ã—ã„æš—å·åŒ–パーティションを作æˆã—ã¦ãã ã•ã„。 EncryptWidget Form フォーム En&crypt system システムを暗å·åŒ– (&C) Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã¯ã‚·ã‚¹ãƒ†ãƒ å…¨ä½“ã‚’æš—å·åŒ–ã™ã‚‹ã®ã«ååˆ†ãªæš—å·åŒ–をサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„よã†ã§ã™ã€‚æš—å·åŒ–を有効ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€ãƒ‘フォーマンスãŒä½Žä¸‹ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ Passphrase パスフレーズ Confirm passphrase パスフレーズã®ç¢ºèª Please enter the same passphrase in both boxes. 両方ã®ãƒœãƒƒã‚¯ã‚¹ã«åŒã˜ãƒ‘スフレーズを入力ã—ã¦ãã ã•ã„。 ErrorDialog Details: 詳細: Would you like to paste the install log to the web? インストールログをWebã«è²¼ã‚Šä»˜ã‘ã¾ã™ã‹ï¼Ÿ FillGlobalStorageJob Set partition information パーティション情報ã®è¨­å®š Install %1 on <strong>new</strong> %2 system partition 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> ã§ãƒ•ォーマットã™ã‚‹ã€‚ %1 (%2) partition label %1 (device path %2) %1 (%2) 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) LOSHJob Configuring encrypted swap. æš—å·åŒ–ã—ãŸswapを設定ã—ã¦ã„ã¾ã™ã€‚ No target system available. 使用å¯èƒ½ãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ãŒã‚りã¾ã›ã‚“。 No rootMountPoint is set. rootMountPoint ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。 No configFilePath is set. configFilePath ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。 LicensePage Form フォーム <h1>License Agreement</h1> <h1>ライセンス契約</h1> I accept the terms and conditions above. 上記ã®é …ç›®åŠã³æ¡ä»¶ã«åŒæ„ã—ã¾ã™ã€‚ Please review the End User License Agreements (EULAs). エンドユーザーライセンス契約(EULA)を確èªã—ã¦ãã ã•ã„。 This setup procedure will install proprietary software that is subject to licensing terms. ã“ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—手順ã§ã¯ã€ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ¡é …ã®å¯¾è±¡ã¨ãªã‚‹ãƒ—ロプライエタリソフトウェアをインストールã—ã¾ã™ã€‚ If you do not agree with the terms, the setup procedure cannot continue. æ¡ä»¶ã«åŒæ„ã—ãªã„å ´åˆã¯ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—手順を続行ã§ãã¾ã›ã‚“。 This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. ã“ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—手順ã§ã¯ã€è¿½åŠ æ©Ÿèƒ½ã‚’æä¾›ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã€ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ¡é …ã®å¯¾è±¡ã¨ãªã‚‹ãƒ—ロプライエタリソフトウェアをインストールã§ãã¾ã™ã€‚ If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. æ¡ä»¶ã«åŒæ„ã—ãªã„å ´åˆã¯ãƒ—ロプライエタリソフトウェアãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãšã€ä»£ã‚りã«ã‚ªãƒ¼ãƒ—ンソースã®ä»£æ›¿ã‚½ãƒ•トウェアãŒä½¿ç”¨ã•れã¾ã™ã€‚ 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 label for netinstall module, Linux kernel カーãƒãƒ« Services label for netinstall module, system services サービス Login label for netinstall module, choose login manager ログイン Desktop label for netinstall module, choose desktop environment デスクトップ Communication label for netinstall module コミュニケーション Development label for netinstall module 開発 Office label for netinstall module オフィス Multimedia label for netinstall module マルãƒãƒ¡ãƒ‡ã‚£ã‚¢ Internet label for netinstall module インターãƒãƒƒãƒˆ Theming label for netinstall module テーマ Gaming label for netinstall module ゲーム Utilities label for netinstall module ユーティリティー Applications アプリケーション 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. リストã‹ã‚‰è£½å“ã‚’é¸ã‚“ã§ãã ã•ã„ã€‚é¸æŠžã—ãŸè£½å“ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚ 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 パーティション Unsafe partition actions are enabled. 安全ã§ãªã„ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚ Partitioning is configured to <b>always</b> fail. パーティショニングãŒ<b>常ã«</b>失敗ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚ No partitions will be changed. パーティションã¯å¤‰æ›´ã•れã¾ã›ã‚“。 Current: ç¾åœ¨: After: 変更後: No EFI system partition configured EFI システムパーティションãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“ EFI system partition configured incorrectly EFI ã‚·ã‚¹ãƒ†ãƒ ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ãŒæ­£ã—ã設定ã•れã¦ã„ã¾ã›ã‚“ An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. %1 ã‚’èµ·å‹•ã™ã‚‹ã«ã¯ EFI システムパーティションãŒå¿…è¦ã§ã™ã€‚<br/><br/>EFI システムパーティションを設定ã™ã‚‹ã«ã¯ã€æˆ»ã£ã¦é©åˆ‡ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã‚’é¸æŠžã¾ãŸã¯ä½œæˆã—ã¦ãã ã•ã„。 The filesystem must be mounted on <strong>%1</strong>. ファイルシステム㯠<strong>%1</strong> ã«ãƒžã‚¦ãƒ³ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ The filesystem must have type FAT32. ファイルシステムã®ã‚¿ã‚¤ãƒ—㯠FAT32 ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ The filesystem must be at least %1 MiB in size. ファイルシステムã®ã‚µã‚¤ã‚ºã¯æœ€ä½Žã§ã‚‚ %1 MiB ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ The filesystem must have flag <strong>%1</strong> set. ファイルシステムã«ã¯ãƒ•ラグ <strong>%1</strong> を設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ You can continue without setting up an EFI system partition but your system may fail to start. EFI システムパーティションを設定ã—ãªãã¦ã‚‚続行ã§ãã¾ã™ãŒã€ã‚·ã‚¹ãƒ†ãƒ ãŒèµ·å‹•ã—ãªã„å ´åˆãŒã‚りã¾ã™ã€‚ Option to use GPT on BIOS BIOS ã§ GPT を使用ã™ã‚‹ãŸã‚ã®ã‚ªãƒ—ション A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. GPT パーティションテーブルã¯ã€ã™ã¹ã¦ã®ã‚·ã‚¹ãƒ†ãƒ ã«æœ€é©ãªã‚ªãƒ—ションã§ã™ã€‚ã“ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã¯ã€BIOS システムã®ãã®ã‚ˆã†ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—もサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚<br/><br/>BIOS ã§ GPT パーティションテーブルを設定ã™ã‚‹ã«ã¯ï¼ˆã¾ã è¨­å®šã—ã¦ã„ãªã„å ´åˆã¯ï¼‰ã€æˆ»ã£ã¦ãƒ‘ーティションテーブルを GPT ã«è¨­å®šã—ã€<strong>%2</strong> フラグを有効ã«ã—㟠8 MB ã®æœªãƒ•ォーマットパーティションを作æˆã—ã¾ã™ã€‚<br/><br/>GPT を使用ã™ã‚‹ BIOS システム㧠%1 ã‚’é–‹å§‹ã™ã‚‹ã«ã¯ã€æœªãƒ•ォーマット㮠8 MB ã®ãƒ‘ーティションãŒå¿…è¦ã§ã™ã€‚ Boot partition not encrypted ãƒ–ãƒ¼ãƒˆãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ãŒæš—å·åŒ–ã•れã¦ã„ã¾ã›ã‚“ A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. ãƒ–ãƒ¼ãƒˆãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã¯æš—å·åŒ–ã•れãŸãƒ«ãƒ¼ãƒˆãƒ‘ーティションã¨ã¨ã‚‚ã«ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã•れã¾ã—ãŸãŒã€ãƒ–ãƒ¼ãƒˆãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã¯æš—å·åŒ–ã•れã¦ã„ã¾ã›ã‚“。<br/><br/>é‡è¦ãªã‚·ã‚¹ãƒ†ãƒ ãƒ•ã‚¡ã‚¤ãƒ«ãŒæš—å·åŒ–ã•れã¦ã„ãªã„ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã«æ®‹ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚ˆã†ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã¯å®‰å…¨ä¸Šã®æ‡¸å¿µãŒã‚りã¾ã™ã€‚<br/>セットアップを続行ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€å¾Œã§ã‚·ã‚¹ãƒ†ãƒ ã®èµ·å‹•中ã«ãƒ•ァイルシステムãŒè§£é™¤ã•れã¾ã™ã€‚<br/>ブートパーティションを暗å·åŒ–ã•ã›ã‚‹ã«ã¯ã€å‰ã®ç”»é¢ã«æˆ»ã£ã¦ã€å†åº¦ãƒ‘ーティションを作æˆã—ã€ãƒ‘ーティション作æˆã‚¦ã‚£ãƒ³ãƒ‰ã‚¦å†…ã§<strong>Encrypt</strong> (æš—å·åŒ–) ã‚’é¸æŠžã—ã¦ãã ã•ã„。 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 システムè¦ä»¶ 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 StandardButtons &OK 了解 (&O) &Yes ã¯ã„ (&Y) &No ã„ã„㈠(&N) &Cancel 中止 (&C) &Close é–‰ã˜ã‚‹ (&C) TrackingInstallJob Installation feedback インストールã®ãƒ•ィードãƒãƒƒã‚¯ Sending installation feedback. インストールã®ãƒ•ィードãƒãƒƒã‚¯ã‚’é€ä¿¡ Internal error in install-tracking. インストールトラッキング中ã®å†…部エラー HTTP request timed out. HTTPリクエストãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸã€‚ TrackingKUserFeedbackJob KDE user feedback KDEã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ•ィードãƒãƒƒã‚¯ Configuring KDE user feedback. KDEã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ•ィードãƒãƒƒã‚¯ã‚’設定ã—ã¦ã„ã¾ã™ã€‚ Error in KDE user feedback configuration. KDEã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ•ィードãƒãƒƒã‚¯ã®è¨­å®šã§ã‚¨ãƒ©ãƒ¼ã€‚ Could not configure KDE user feedback correctly, script error %1. KDEã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ•ィードãƒãƒƒã‚¯ã‚’æ­£ã—ã設定ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚スクリプトエラー %1。 Could not configure KDE user feedback correctly, Calamares error %1. KDEã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ•ィードãƒãƒƒã‚¯ã‚’æ­£ã—ã設定ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚Calamaresエラー %1。 TrackingMachineUpdateManagerJob Machine feedback マシンフィードãƒãƒƒã‚¯ Configuring machine feedback. マシンフィードãƒãƒƒã‚¯ã®è¨­å®š Error in machine feedback configuration. マシンフィードãƒãƒƒã‚¯ã®è¨­å®šä¸­ã®ã‚¨ãƒ©ãƒ¼ Could not configure machine feedback correctly, script error %1. マシンフィードãƒãƒƒã‚¯ã®è¨­å®šãŒæ­£ç¢ºã«ã§ãã¾ã›ã‚“ã§ã—ãŸã€ã‚¹ã‚¯ãƒªãƒ—トエラー %1。 Could not configure machine feedback correctly, Calamares error %1. マシンフィードãƒãƒƒã‚¯ã®è¨­å®šãŒæ­£ç¢ºã«ã§ãã¾ã›ã‚“ã§ã—ãŸã€Calamares エラー %1。 TrackingPage Form フォーム Placeholder プレースホルダー <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>インストールã«é–¢ã™ã‚‹æƒ…報を <span style=" font-weight:600;">é€ä¿¡ã—ãªã„</span> å ´åˆã¯ã“ã“をクリック。</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ユーザーフィードãƒãƒƒã‚¯ã«ã¤ã„ã¦ã®è©³ã—ã„æƒ…å ±ã«ã¤ã„ã¦ã¯ã€ã“ã“をクリックã—ã¦ãã ã•ã„</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. 追跡ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€%1 ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã®é »åº¦ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã€ä½¿ç”¨ã•れã¦ã„るアプリケーションを確èªã§ãã¾ã™ã€‚é€ä¿¡å†…容を確èªã™ã‚‹ã«ã¯ã€å„ã‚¨ãƒªã‚¢ã®æ¨ªã«ã‚るヘルプアイコンをクリックã—ã¦ãã ã•ã„。 By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. ã“ã‚Œã‚’é¸æŠžã™ã‚‹ã¨ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¨ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã«é–¢ã™ã‚‹æƒ…å ±ãŒé€ä¿¡ã•れã¾ã™ã€‚ã“ã®æƒ…å ±ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã®å®Œäº†å¾Œã«<b>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 フィードãƒãƒƒã‚¯ UmountJob Unmount file systems. ファイルシステムをアンマウント。 No target system available. 使用å¯èƒ½ãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ãŒã‚りã¾ã›ã‚“。 No rootMountPoint is set. rootMountPoint ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。 UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>複数ã®äººãŒã“ã®ã‚³ãƒ³ãƒ”ューターを使用ã™ã‚‹å ´åˆã¯ã€ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—後ã«è¤‡æ•°ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã§ãã¾ã™ã€‚</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>複数ã®äººãŒã“ã®ã‚³ãƒ³ãƒ”ューターを使用ã™ã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å¾Œã«è¤‡æ•°ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã§ãã¾ã™ã€‚</small> UsersQmlViewStep 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 アプリケーションåŠã³è¨€èªžã®é¸æŠž 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) %1 support %1 サãƒãƒ¼ãƒˆ About %1 setup %1 セットアップã«ã¤ã„㦠About %1 installer %1 インストーラーã«ã¤ã„㦠WelcomeQmlViewStep Welcome よã†ã“ã WelcomeViewStep Welcome よã†ã“ã ZfsJob Create ZFS pools and datasets ZFS プールã¨ãƒ‡ãƒ¼ã‚¿ã‚»ãƒƒãƒˆã‚’ä½œæˆ Failed to create zpool on 以下ã¸ã® zpool ã®ä½œæˆã«å¤±æ•— Configuration Error コンフィグレーションエラー No partitions are available for ZFS. ZFS ã«ä½¿ç”¨ã§ãるパーティションãŒã‚りã¾ã›ã‚“。 Internal data missing 内部データãŒã‚りã¾ã›ã‚“ Failed to create zpool zpool ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—㟠Failed to create dataset データセットã®ä½œæˆã«å¤±æ•—ã—ã¾ã—㟠The output was: å‡ºåŠ›ã¯æ¬¡ã®ã¨ãŠã‚Š: calamares-sidebar About About Debug デãƒãƒƒã‚° Show information about Calamares Calamares ã«é–¢ã™ã‚‹æƒ…報を表示ã™ã‚‹ Show debug information デãƒãƒƒã‚°æƒ…報を表示 finishedq Installation Completed インストールãŒå®Œäº†ã—ã¾ã—㟠%1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 ãŒã‚³ãƒ³ãƒ”ューターã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã—ãŸã€‚<br/> å†èµ·å‹•ã—ã¦æ–°ã—ã„システムを使用ã™ã‚‹ã‹ã€ãƒ©ã‚¤ãƒ–環境をã“ã®ã¾ã¾ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ Close Installer インストーラーを閉ã˜ã‚‹ Restart System システムをå†èµ·å‹• <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>インストールã®å®Œå…¨ãªãƒ­ã‚°ã¯ã€ãƒ©ã‚¤ãƒ–ユーザーã®ãƒ›ãƒ¼ãƒ ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚ã‚‹ installation.log ã¨ã—ã¦å…¥æ‰‹ã§ãã¾ã™ã€‚<br/> ã“ã®ãƒ­ã‚°ã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ã® /var/log/installation.log ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚</p> finishedq@mobile Installation Completed インストールãŒå®Œäº†ã—ã¾ã—㟠%1 has been installed on your computer.<br/> You may now restart your device. %1 ãŒã‚³ãƒ³ãƒ”ューターã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã—ãŸã€‚<br/> ã“れã§ãƒ‡ãƒã‚¤ã‚¹ã‚’å†èµ·å‹•ã§ãã¾ã™ã€‚ Close é–‰ã˜ã‚‹ Restart å†èµ·å‹• i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>言語</h1> </br> システムロケールã®è¨­å®šã¯ã€ä¸€éƒ¨ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®è¨€èªžã¨æ–‡å­—セットã«å½±éŸ¿ã—ã¾ã™ã€‚ç¾åœ¨ã®è¨­å®šã¯ <strong>%1</strong> ã§ã™ã€‚ <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>ロケール</h1> </br> システムã®ãƒ­ã‚±ãƒ¼ãƒ«è¨­å®šã¯ã€æ•°å€¤ã¨æ—¥ä»˜ã®å½¢å¼ã«å½±éŸ¿ã‚’åŠã¼ã—ã¾ã™ã€‚ç¾åœ¨ã®è¨­å®šã¯ <strong>%1</strong> ã§ã™ã€‚ Back 戻る keyboardq To activate keyboard preview, select a layout. キーボードプレビューをアクティブã«ã™ã‚‹ã«ã¯ã€ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。 Keyboard Model: キーボードモデル: Layouts レイアウト Type here to test your keyboard ã“ã“ã§ã‚¿ã‚¤ãƒ—ã—ã¦ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’テストã—ã¦ãã ã•ã„ Variants ãƒãƒªã‚¢ãƒ³ãƒˆ localeq Change 変更 notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>ã“れらã¯ãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆã®ä¾‹ã§ã™ã€‚</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice ã¯å¼·åŠ›ã‹ã¤ãƒ•リーãªã‚ªãƒ•ィススイートã§ã€ä¸–界中ã®ä½•百万人もã®äººã€…ã«ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚ã“れã«ã¯å¸‚å ´ã§æœ€ã‚‚用途ãŒåºƒã„フリーã‹ã¤ã‚ªãƒ¼ãƒ—ンソースã®ã‚¢ãƒ—リケーションãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚<br/> デフォルトオプション。 LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. オフィススイートをインストールã—ãŸããªã„å ´åˆã¯ã€ã€Œã‚ªãƒ•ィススイートãªã—ã€ã‚’é¸æŠžã™ã‚‹ã ã‘ã§ã™ã€‚å¿…è¦ã«ãªã‚Œã°ã€å¾Œã‹ã‚‰ã„ã¤ã§ã‚‚1ã¤ï¼ˆã‚‚ã—ãã¯ãれ以上を)システムã«è¿½åŠ ã§ãã¾ã™ã€‚ No Office Suite オフィススイートãªã— Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. 最å°é™ã®ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—インストールを作æˆã—ã€ä½™åˆ†ãªã‚¢ãƒ—リケーションをã™ã¹ã¦å‰Šé™¤ã—ã¦ã€ã‚·ã‚¹ãƒ†ãƒ ã«è¿½åŠ ã™ã‚‹ã‚‚ã®ã‚’å¾Œã§æ±ºå®šã—ã¾ã™ã€‚ã“ã®ã‚ˆã†ãªã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§å«ã¾ã‚Œãªã„ã‚‚ã®ã®ä¾‹ã¯ã€ã‚ªãƒ•ィススイートã€ãƒ¡ãƒ‡ã‚£ã‚¢ãƒ—レーヤーã€ç”»åƒãƒ“ューアã€å°åˆ·ã‚µãƒãƒ¼ãƒˆã§ã™ã€‚デスクトップã¯ãƒ•ァイルブラウザーã€ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã€ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã€ã‚·ãƒ³ãƒ—ルãªã‚¦ã‚§ãƒ–ブラウザーã«ãªã‚Šã¾ã™ã€‚ Minimal Install 最å°ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« Please select an option for your install, or use the default: LibreOffice included. インストールã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã™ã‚‹ã‹ã€ãƒ‡ãƒ•ォルト(LibreOffice ãŒå«ã¾ã‚Œã¾ã™ï¼‰ã‚’使用ã—ã¦ãã ã•ã„。 release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>ã“れã¯QMLファイルã®ä¾‹ã§ã€Flickableコンテンツをå«ã‚€RichTextã®ã‚ªãƒ—ションを示ã—ã¦ã„ã¾ã™ã€‚</p> <p>RichTextã‚’å‚™ãˆãŸQMLã¯HTMLタグを使用ã§ãã€Flickableコンテンツã¯ã‚¿ãƒƒãƒã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã«å½¹ç«‹ã¡ã¾ã™ã€‚</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>垂直スクロールãƒãƒ¼ã¯èª¿æ•´å¯èƒ½ã§ã€ç¾åœ¨ã®å¹…ã¯10ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚</p> Back 戻る usersq Pick your user name and credentials to login and perform admin tasks ログインã—ã¦ç®¡ç†è€…タスクを実行ã™ã‚‹ã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨è³‡æ ¼æƒ…å ±ã‚’é¸æŠžã—ã¦ãã ã•ã„ What is your name? ã‚ãªãŸã®åå‰ã¯ä½•ã§ã™ã‹ï¼Ÿ Your Full Name ã‚ãªãŸã®ãƒ•ルãƒãƒ¼ãƒ  What name do you want to use to log in? ログイン時ã«ä½¿ç”¨ã™ã‚‹åå‰ã¯ä½•ã§ã™ã‹ï¼Ÿ Login Name ログインå If more than one person will use this computer, you can create multiple accounts after installation. 複数ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã“ã®ã‚³ãƒ³ãƒ”ューターを使用ã™ã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å¾Œã«è¤‡æ•°ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã§ãã¾ã™ã€‚ Only lowercase letters, numbers, underscore and hyphen are allowed. 使用ã§ãã‚‹ã®ã¯ã‚¢ãƒ«ãƒ•ァベットã®å°æ–‡å­—ã¨æ•°å­—㨠_ 㨠- ã ã‘ã§ã™ã€‚ root is not allowed as username. root ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ã—ã¦è¨±å¯ã•れã¦ã„ã¾ã›ã‚“。 What is the name of this computer? ã“ã®ã‚³ãƒ³ãƒ”ューターã®åå‰ã¯ä½•ã§ã™ã‹ï¼Ÿ Computer Name コンピューターã®åå‰ This name will be used if you make the computer visible to others on a network. ã“ã®åå‰ã¯ã€ã‚³ãƒ³ãƒ”ューターをãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã®ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¡¨ç¤ºã™ã‚‹å ´åˆã«ä½¿ç”¨ã•れã¾ã™ã€‚ localhost is not allowed as hostname. localhost ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ã—ã¦è¨±å¯ã•れã¦ã„ã¾ã›ã‚“。 Choose a password to keep your account safe. アカウントを安全ã«ä½¿ã†ãŸã‚ã€ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„ Password パスワード Repeat Password パスワードをå†åº¦å…¥åŠ› Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. åŒã˜ãƒ‘スワードを2回入力ã—ã¦ã€å…¥åŠ›ã‚¨ãƒ©ãƒ¼ã‚’ãƒã‚§ãƒƒã‚¯ã§ãるよã†ã«ã—ã¾ã™ã€‚é©åˆ‡ãªãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã¯æ–‡å­—ã€æ•°å­—ã€å¥èª­ç‚¹ãŒæ··åœ¨ã™ã‚‹8文字以上ã®ã‚‚ã®ã§ã€å®šæœŸçš„ã«å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ Validate passwords quality パスワードã®å“質を検証ã™ã‚‹ When this box is checked, password-strength checking is done and you will not be able to use a weak password. ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’オンã«ã™ã‚‹ã¨ãƒ‘スワードã®å¼·åº¦ãƒã‚§ãƒƒã‚¯ãŒè¡Œã‚れã€å¼±ã„パスワードを使用ã§ããªããªã‚Šã¾ã™ã€‚ Log in automatically without asking for the password ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’è¦æ±‚ã›ãšã«è‡ªå‹•çš„ã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. 使用ã§ãã‚‹ã®ã¯ã‚¢ãƒ«ãƒ•ã‚¡ãƒ™ãƒƒãƒˆã¨æ•°å­—㨠_ 㨠- ã§ã€2文字以上必è¦ã§ã™ã€‚ Reuse user password as root password rootパスワードã¨ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‘スワードをå†åˆ©ç”¨ã™ã‚‹ Use the same password for the administrator account. 管ç†è€…アカウントã¨åŒã˜ãƒ‘スワードを使用ã™ã‚‹ã€‚ Choose a root password to keep your account safe. アカウントを安全ã«ä¿ã¤ãŸã‚ã«ã€rootãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„。 Root Password rootパスワード Repeat Root Password rootパスワードをå†å…¥åŠ› Enter the same password twice, so that it can be checked for typing errors. åŒã˜ãƒ‘スワードを2回入力ã—ã¦ã€å…¥åŠ›ã‚¨ãƒ©ãƒ¼ã‚’ãƒã‚§ãƒƒã‚¯ã§ãるよã†ã«ã—ã¾ã™ã€‚ welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>%1 <quote>%2</quote> インストーラーã¸ã‚ˆã†ã“ã</h3> <p>ã“ã®ãƒ—ログラムã¯ã„ãã¤ã‹ã®è³ªå•を行ã„ã€ã‚³ãƒ³ãƒ”ューター㫠%1 をセットアップã—ã¾ã™ã€‚</p> Support サãƒãƒ¼ãƒˆ Known issues 既知ã®å•題点 Release notes リリースノート Donate 寄付 calamares-calamares-2d126ae/lang/calamares_kk.ts000066400000000000000000005722471430147706700217360ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel Ба&Ñ Ñ‚Ð°Ñ€Ñ‚Ñƒ &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: EFI жүйелік бөлімі: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel Ба&Ñ Ñ‚Ð°Ñ€Ñ‚Ñƒ &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users Пайдаланушылар UsersViewStep Users Пайдаланушылар VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support %1 қолдауы About %1 setup About %1 installer WelcomeQmlViewStep Welcome Қош келдіңіз WelcomeViewStep Welcome Қош келдіңіз ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_kn.ts000066400000000000000000005724361430147706700217410ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Install ಸà³à²¥à²¾à²ªà²¿à²¸à³ Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed ಅನà³à²¸à³à²¥à²¾à²ªà²¨à³† ವಿಫಲವಾಗಿದೆ Error ದೋಷ &Yes ಹೌದೠ&No ಇಲà³à²² &Close ಮà³à²šà³à²šà²¿à²°à²¿ Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next ಮà³à²‚ದಿನ &Back ಹಿಂದಿನ &Done &Cancel ರದà³à²¦à³à²—ೊಳಿಸೠCancel setup? Cancel installation? ಅನà³à²¸à³à²¥à²¾à²ªà²¨à³†à²¯à²¨à³à²¨à³ ರದà³à²¦à³à²®à²¾à²¡à³à²µà³à²¦à³‡? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: ಪà³à²°à²¸à²•à³à²¤: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed ಅನà³à²¸à³à²¥à²¾à²ªà²¨à³† ವಿಫಲವಾಗಿದೆ The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel ರದà³à²¦à³à²—ೊಳಿಸೠ&OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: ಪà³à²°à²¸à²•à³à²¤: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes ಹೌದೠ&No ಇಲà³à²² &Cancel ರದà³à²¦à³à²—ೊಳಿಸೠ&Close ಮà³à²šà³à²šà²¿à²°à²¿ TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_ko.ts000066400000000000000000007233431430147706700217350ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <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> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;<br/> 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 설치 실패 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: ë‹¤ìŒ ëª¨ë“ˆ 불러오기 실패: 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 Successfully unmounted %1. %1 경로를 성공ì ìœ¼ë¡œ 마운트 해제했습니다. Successfully disabled swap %1. %1 ìŠ¤ì™‘ì„ ì„±ê³µì ìœ¼ë¡œ 비활성화했습니다. Successfully cleared swap %1. %1 ìŠ¤ì™‘ì„ ì„±ê³µì ìœ¼ë¡œ 지웠습니다. Successfully closed mapper device %1. %1 ë§¤í¼ ìž¥ì¹˜ë¥¼ 성공ì ìœ¼ë¡œ 닫았습니다. Successfully disabled volume group %1. %1 볼륨 ê·¸ë£¹ì„ ì„±ê³µì ìœ¼ë¡œ 비활성화했습니다. Clear mounts for partitioning operations on %1 íŒŒí‹°ì…”ë‹ ìž‘ì—…ì„ ìœ„í•´ %1ì˜ ë§ˆìš´íŠ¸ë¥¼ ëª¨ë‘ í•´ì œí•©ë‹ˆë‹¤ Clearing mounts for partitioning operations on %1. íŒŒí‹°ì…”ë‹ ìž‘ì—…ì„ ìœ„í•´ %1ì˜ ë§ˆìš´íŠ¸ë¥¼ ëª¨ë‘ í•´ì œí•˜ëŠ” 중입니다. Cleared all mounts for %1 %1ì˜ ëª¨ë“  마운트가 í•´ì œë˜ì—ˆìŠµë‹ˆë‹¤. ClearTempMountsJob Clear all temporary mounts. 모든 임시 ë§ˆìš´íŠ¸ë“¤ì„ í•´ì œí•©ë‹ˆë‹¤ Clearing all temporary mounts. 모든 임시 ë§ˆìš´íŠ¸ë“¤ì´ í•´ì œí•˜ëŠ” 중입니다. 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. 목ë¡ì—서 ì œí’ˆì„ ì„ íƒí•˜ì‹­ì‹œì˜¤. ì„ íƒí•œ ì œí’ˆì´ ì„¤ì¹˜ë©ë‹ˆë‹¤. Packages 패키지 Install option: <strong>%1</strong> 설치 옵션: <strong>%1</strong> None ì—†ìŒ Summary 요약 This is an overview of what will happen once you start the setup procedure. 설정 절차를 시작하면 어떻게 ë˜ëŠ”ì§€ 간략히 설명합니다. This is an overview of what will happen once you start the install procedure. 설치 절차를 시작하면 어떻게 ë˜ëŠ”ì§€ 간략히 설명합니다. ContextualProcessJob Contextual Processes Job 컨í…스트 프로세스 작업 CreatePartitionDialog Create a Partition 파티션 ìƒì„± Si&ze: í¬ê¸°(&z): MiB MiB Partition &Type: 파티션 유형 (&T): Primar&y 기본(&Y) E&xtended 확장 파티션 (&E) Fi&le System: íŒŒì¼ ì‹œìŠ¤í…œ (&l): LVM LV name LVM 논리 볼륨 ì´ë¦„ &Mount Point: 마운트 위치 (&M): Flags: 플래그: Label for the filesystem 파ì¼ì‹œìŠ¤í…œ ë ˆì´ë¸” FS Label: 파ì¼ì‹œìŠ¤í…œ ë ˆì´ë¸”: En&crypt 암호화 (&c) Logical 논리 파티션 Primary 파티션 GPT GPT Mountpoint already in use. Please select another one. 마운트 위치가 ì´ë¯¸ 사용 중입니다. 다른 위치를 ì„ íƒí•´ì£¼ì„¸ìš”. Mountpoint must start with a <tt>/</tt>. 마운트 위치는 <tt>/</tt>로 시작해야 합니다. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. %4 í•­ëª©ì´ ìžˆëŠ” %3(%2)ì— %1MiB í¬ê¸°ì˜ 새 íŒŒí‹°ì…˜ì„ ë§Œë“­ë‹ˆë‹¤. Create new %1MiB partition on %3 (%2). %3(%2)ì— %1MiB í¬ê¸°ì˜ 새 íŒŒí‹°ì…˜ì„ ë§Œë“­ë‹ˆë‹¤. Create new %2MiB partition on %4 (%3) with file system %1. %1 íŒŒì¼ ì‹œìŠ¤í…œìœ¼ë¡œ %4(%3)ì— ìƒˆ %2MiB íŒŒí‹°ì…˜ì„ ë§Œë“­ë‹ˆë‹¤. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. <em>%4</em> í•­ëª©ì´ ìžˆëŠ” <strong>%3</strong>(%2)ì— <strong>%1MiB</strong> í¬ê¸°ì˜ 새 íŒŒí‹°ì…˜ì„ ë§Œë“­ë‹ˆë‹¤. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). <strong>%3</strong>(%2)ì— <strong>%1MiB</strong> í¬ê¸°ì˜ 새 íŒŒí‹°ì…˜ì„ ë§Œë“­ë‹ˆë‹¤. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%1</strong> íŒŒì¼ ì‹œìŠ¤í…œìœ¼ë¡œ <strong>%4</strong> (%3)ì— ìƒˆ <strong>%2MiB</strong> íŒŒí‹°ì…˜ì„ ë§Œë“­ë‹ˆë‹¤. Creating new %1 partition on %2. %2ì— ìƒˆë¡œìš´ %1 파티션 í…Œì´ë¸”ì„ ë§Œë“œëŠ” 중입니다. The installer failed to create partition on disk '%1'. 설치 관리ìžê°€ ë””ìŠ¤í¬ '%1'ì— íŒŒí‹°ì…˜ì„ ìƒì„±í•˜ì§€ 못했습니다. 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 기존 íŒŒí‹°ì…˜ì„ ìˆ˜ì •í•©ë‹ˆë‹¤ Con&tent: ë‚´ìš©(&t): &Keep 유지 (&K) Format í¬ë§· Warning: Formatting the partition will erase all existing data. 경고: íŒŒí‹°ì…˜ì„ í¬ë§·í•˜ëŠ” ê²ƒì€ ëª¨ë“  ë°ì´í„°ë¥¼ 지울 것입니다. &Mount Point: 마운트 위치 (&M): Si&ze: í¬ê¸° (&z): MiB MiB Fi&le System: íŒŒì¼ ì‹œìŠ¤í…œ (&l): Flags: 플래그: Label for the filesystem 파ì¼ì‹œìŠ¤í…œ ë ˆì´ë¸” FS Label: 파ì¼ì‹œìŠ¤í…œ ë ˆì´ë¸”: Passphrase for existing partition 기존 íŒŒí‹°ì…˜ì˜ ì•”í˜¸ 구문 Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. %1 íŒŒí‹°ì…˜ì„ ì§€ì •ëœ ì•”í˜¸ 구문으로 í•´ë…í•  수 없습니다.<br/><br/>íŒŒí‹°ì…˜ì„ ë‹¤ì‹œ 편집하고 올바른 암호를 지정하거나 ì•”í˜¸í™”ëœ íŒŒí‹°ì…˜ì„ ì‚­ì œí•˜ê³  새로 만듭니다. EncryptWidget Form í˜•ì‹ En&crypt system 암호화 시스템 (&c) Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. ì „ì²´ ì‹œìŠ¤í…œì„ ì•”í˜¸í™”í•  ë§Œí¼ ì¶©ë¶„ížˆ 암호화를 ì§€ì›í•˜ì§€ 않는 것 같습니다. 암호화를 활성화할 수 있지만 ì„±ëŠ¥ì´ ì €í•˜ë  ìˆ˜ 있습니다. Passphrase 암호 Confirm passphrase 암호 í™•ì¸ Please enter the same passphrase in both boxes. 암호와 암호 í™•ì¸ ìƒìžì— ë™ì¼í•œ ê°’ì„ ìž…ë ¥í•´ì£¼ì„¸ìš”. ErrorDialog Details: ìƒì„¸: Would you like to paste the install log to the web? 설치 로그를 ì›¹ì— ë¶™ì—¬ë„£ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ? FillGlobalStorageJob Set partition information 파티션 ì •ë³´ 설정 Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> <em>%3</em> ê¸°ëŠ¥ì´ ìžˆëŠ” <strong>새</strong> %2 시스템 íŒŒí‹°ì…˜ì— %1ì„(를) 설치합니다. Install %1 on <strong>new</strong> %2 system partition. <strong>새</strong> %2 시스템 íŒŒí‹°ì…˜ì— %1를설치합니다. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>로 í¬ë§·í•©ë‹ˆë‹¤. %1 (%2) partition label %1 (device path %2) %1 (%2) 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) LOSHJob Configuring encrypted swap. ì•”í˜¸í™”ëœ ìŠ¤ì™‘ 구성 중. No target system available. ëŒ€ìƒ ì‹œìŠ¤í…œì„ ì‚¬ìš©í•  수 없습니다. No rootMountPoint is set. 루트마운트위치가 지정ë˜ì§€ 않았습니다. No configFilePath is set. 구성파ì¼ê²½ë¡œê°€ 지정ë˜ì§€ 않았습니다. LicensePage Form í˜•ì‹ <h1>License Agreement</h1> <h1>ë¼ì´ì„¼ìФ 계약</h1> I accept the terms and conditions above. ìƒê¸° 계약 ì¡°ê±´ì„ ëª¨ë‘ ë™ì˜í•©ë‹ˆë‹¤. Please review the End User License Agreements (EULAs). 최종 ì‚¬ìš©ìž ì‚¬ìš©ê¶Œ 계약(EULA)ì„ ê²€í† í•˜ì‹­ì‹œì˜¤. This setup procedure will install proprietary software that is subject to licensing terms. ì´ ì„¤ì • 절차ì—서는 ë¼ì´ì„¼ìФ ì¡°ê±´ì— í•´ë‹¹í•˜ëŠ” ë…ì  ì†Œí”„íŠ¸ì›¨ì–´ë¥¼ 설치합니다. If you do not agree with the terms, the setup procedure cannot continue. ì•½ê´€ì— ë™ì˜í•˜ì§€ 않으면 설치 절차를 계ì†í•  수 없습니다. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. ì´ ì„¤ì¹˜ 절차는 추가 ê¸°ëŠ¥ì„ ì œê³µí•˜ê³  ì‚¬ìš©ìž í™˜ê²½ì„ í–¥ìƒì‹œí‚¤ê¸° 위해 ë¼ì´ì„ ìФ ì¡°ê±´ì— ë”°ë¼ ë…ì  ì†Œí”„íŠ¸ì›¨ì–´ë¥¼ 설치할 수 있습니다. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. ì¡°ê±´ì— ë™ì˜í•˜ì§€ 않으면 ë…ì  ì†Œí”„íŠ¸ì›¨ì–´ê°€ 설치ë˜ì§€ 않으며 대신 오픈 소스 대체 소프트웨어가 사용ë©ë‹ˆë‹¤. LicenseViewStep License ë¼ì´ì„¼ìФ LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 드ë¼ì´ë²„</strong><br/>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 label for netinstall module, Linux kernel ì»¤ë„ Services label for netinstall module, system services 서비스 Login label for netinstall module, choose login manager ë¡œê·¸ì¸ Desktop label for netinstall module, choose desktop environment ë°ìФí¬íƒ‘ Communication label for netinstall module 통신 Development label for netinstall module 개발 Office label for netinstall module 오피스 Multimedia label for netinstall module 멀티미디어 Internet label for netinstall module ì¸í„°ë„· Theming label for netinstall module 테마 Gaming label for netinstall module 게임 Utilities label for netinstall module 유틸리티 Applications 애플리케ì´ì…˜ 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. 목ë¡ì—서 ì œí’ˆì„ ì„ íƒí•˜ì‹­ì‹œì˜¤. ì„ íƒí•œ ì œí’ˆì´ ì„¤ì¹˜ë©ë‹ˆë‹¤. 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 파티션 Unsafe partition actions are enabled. 안전하지 ì•Šì€ íŒŒí‹°ì…˜ ìž‘ì—…ì´ í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤. Partitioning is configured to <b>always</b> fail. 파티셔ë‹ì´ <b>í•­ìƒ</b> 실패하ë„ë¡ êµ¬ì„±ë˜ì–´ 있습니다. No partitions will be changed. 파티션 ì—†ìŒì€ ë³€ê²½ë  ê²ƒìž…ë‹ˆë‹¤. Current: 현재: After: ì´í›„: No EFI system partition configured EFI 시스템 íŒŒí‹°ì…˜ì´ ì„¤ì •ë˜ì§€ 않았습니다 EFI system partition configured incorrectly EFI 시스템 íŒŒí‹°ì…˜ì´ ìž˜ëª» êµ¬ì„±ë¨ An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. %1ì„(를) 시작하려면 EFI 시스템 íŒŒí‹°ì…˜ì´ í•„ìš”í•©ë‹ˆë‹¤.<br/><br/>EFI 시스템 íŒŒí‹°ì…˜ì„ êµ¬ì„±í•˜ë ¤ë©´ ëŒì•„가서 ì ì ˆí•œ íŒŒì¼ ì‹œìŠ¤í…œì„ ì„ íƒí•˜ê±°ë‚˜ ìƒì„±í•˜ì‹­ì‹œì˜¤. The filesystem must be mounted on <strong>%1</strong>. íŒŒì¼ ì‹œìŠ¤í…œì€ <strong>%1</strong>ì— ë§ˆìš´íŠ¸ë˜ì–´ì•¼ 합니다. The filesystem must have type FAT32. íŒŒì¼ ì‹œìŠ¤í…œì—는 FAT32 ìœ í˜•ì´ ìžˆì–´ì•¼ 합니다. The filesystem must be at least %1 MiB in size. íŒŒì¼ ì‹œìŠ¤í…œì˜ í¬ê¸°ëŠ” %1MiB ì´ìƒì´ì–´ì•¼ 합니다. The filesystem must have flag <strong>%1</strong> set. íŒŒì¼ ì‹œìŠ¤í…œì— í”Œëž˜ê·¸ <strong>%1</strong> 세트가 있어야 합니다. You can continue without setting up an EFI system partition but your system may fail to start. EFI 시스템 íŒŒí‹°ì…˜ì„ ì„¤ì •í•˜ì§€ 않고 계ì†í•  수 있지만 ì‹œìŠ¤í…œì´ ì‹œìž‘ë˜ì§€ ì•Šì„ ìˆ˜ 있습니다. Option to use GPT on BIOS BIOSì—서 GPT를 사용하는 옵션 A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. GPT 파티션 í…Œì´ë¸”ì€ ëª¨ë“  ì‹œìŠ¤í…œì— ê°€ìž¥ ì í•©í•œ 옵션입니다. ì´ ì„¤ì¹˜ 관리ìžëŠ” BIOS ì‹œìŠ¤í…œì— ëŒ€í•œ ì´ëŸ¬í•œ ì„¤ì •ë„ ì§€ì›í•©ë‹ˆë‹¤.<br/><br/>BIOSì—서 GPT 파티션 í…Œì´ë¸”ì„ êµ¬ì„±í•˜ë ¤ë©´(ì•„ì§ ìˆ˜í–‰í•˜ì§€ ì•Šì€ ê²½ìš°) ëŒì•„가서 파티션 í…Œì´ë¸”ì„ GPT로 설정한 ë‹¤ìŒ <strong>%2</strong> 플래그가 í™œì„±í™”ëœ 8MBì˜ í¬ë§·ë˜ì§€ ì•Šì€ íŒŒí‹°ì…˜ì„ ìƒì„±í•˜ì‹­ì‹œì˜¤.<br/><br/>GPTê°€ 있는 BIOS 시스템ì—서 %1ì„(를) 시작하려면 í¬ë§·ë˜ì§€ ì•Šì€ 8MB íŒŒí‹°ì…˜ì´ í•„ìš”í•©ë‹ˆë‹¤. Boot partition not encrypted 부트 íŒŒí‹°ì…˜ì´ ì•”í˜¸í™”ë˜ì§€ 않았습니다 A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. ì•”í˜¸í™”ëœ ë£¨íŠ¸ 파티션과 함께 별ë„ì˜ ë¶€íŒ… íŒŒí‹°ì…˜ì´ ì„¤ì •ë˜ì—ˆì§€ë§Œ 부팅 íŒŒí‹°ì…˜ì€ ì•”í˜¸í™”ë˜ì§€ 않았습니다.<br/><br/>중요한 시스템 파ì¼ì€ 암호화ë˜ì§€ ì•Šì€ íŒŒí‹°ì…˜ì— ë³´ê´€ë˜ê¸° ë•Œë¬¸ì— ì´ëŸ¬í•œ 설정과 관련하여 보안 문제가 있습니다.<br/>ì›í•˜ëŠ” 경우 계ì†í•  수 있지만 ë‚˜ì¤‘ì— ì‹œìŠ¤í…œì„ ì‹œìž‘í•˜ëŠ” ë™ì•ˆ íŒŒì¼ ì‹œìŠ¤í…œ ìž ê¸ˆì´ í•´ì œë©ë‹ˆë‹¤.<br/>부팅 íŒŒí‹°ì…˜ì„ ì•”í˜¸í™”í•˜ë ¤ë©´ ëŒì•„가서 다시 ìƒì„±í•˜ì—¬ 파티션 ìƒì„± ì°½ì—서 <strong>암호화</strong>를 ì„ íƒí•©ë‹ˆë‹¤. has at least one disk device available. 하나 ì´ìƒì˜ ë””ìŠ¤í¬ ìž¥ì¹˜ë¥¼ 사용할 수 있습니다. There are no partitions to install on. 설치를 위한 íŒŒí‹°ì…˜ì´ ì—†ìŠµë‹ˆë‹¤. 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. 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 시스템 요구 사항 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 StandardButtons &OK 확ì¸(&O) &Yes 예(&Y) &No 아니오(&N) &Cancel 취소(&C) &Close 닫기(&C) TrackingInstallJob Installation feedback 설치 피드백 Sending installation feedback. 설치 í”¼ë“œë°±ì„ ë³´ë‚´ëŠ” 중입니다. Internal error in install-tracking. 설치 ì¶”ì ì¤‘ ë‚´ë¶€ 오류 HTTP request timed out. HTTP 요청 ì‹œê°„ì´ ë§Œë£Œë˜ì—ˆìŠµë‹ˆë‹¤. TrackingKUserFeedbackJob KDE user feedback KDE ì‚¬ìš©ìž ì˜ê²¬ Configuring KDE user feedback. KDE ì‚¬ìš©ìž ì˜ê²¬ì„ 설정하는 중입니다. Error in KDE user feedback configuration. KDE ì‚¬ìš©ìž ì˜ê²¬ 설정 ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. Could not configure KDE user feedback correctly, script error %1. KDE ì‚¬ìš©ìž í”¼ë“œë°±ì„ ì˜¬ë°”ë¥´ê²Œ 구성할 수 없습니다, 스í¬ë¦½íЏ 오류 %1. Could not configure KDE user feedback correctly, Calamares error %1. KDE ì‚¬ìš©ìž í”¼ë“œë°±ì„ ì˜¬ë°”ë¥´ê²Œ 구성할 수 없습니다. Calamares 오류 %1. TrackingMachineUpdateManagerJob Machine feedback 시스템 피드백 Configuring machine feedback. 시스템 í”¼ë“œë°±ì„ ì„¤ì •í•˜ëŠ” 중입니다. Error in machine feedback configuration. 시스템 피드백 설정 ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. Could not configure machine feedback correctly, script error %1. 시스템 í”¼ë“œë°±ì„ ì •í™•í•˜ê²Œ 설정할 수 없습니다, %1 스í¬ë¦½íЏ 오류. Could not configure machine feedback correctly, Calamares error %1. 시스템 í”¼ë“œë°±ì„ ì •í™•í•˜ê²Œ 설정할 수 없습니다, Calamaresì˜ %1 오류입니다. TrackingPage Form í˜•ì‹ Placeholder ìžë¦¬ í‘œì‹œìž <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>ì„¤ì¹˜ì— ëŒ€í•œ <span style=" font-weight:600;">정보를 전혀 ë³´ë‚´ì§€ 않으려면</span> 여기를 í´ë¦­í•˜ì‹­ì‹œì˜¤.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ì‚¬ìš©ìž í”¼ë“œë°±ì— ëŒ€í•œ ìžì„¸í•œ 정보를 보려면 여기를 í´ë¦­í•˜ì„¸ìš”.</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. íŠ¸ëž˜í‚¹ì„ í†µí•´ %1ì´(ê°€) 얼마나 ìžì£¼ 설치ë˜ëŠ”ì§€, ì–´ë–¤ í•˜ë“œì›¨ì–´ì— ì„¤ì¹˜ë˜ì–´ 있고 ì–´ë–¤ ì‘ìš© í”„ë¡œê·¸ëž¨ì´ ì‚¬ìš©ë˜ëŠ”ì§€ 확ì¸í•  수 있습니다. 전송할 ë‚´ìš©ì„ ë³´ë ¤ë©´ ê° ì˜ì—­ ì˜†ì— ìžˆëŠ” ë„ì›€ë§ ì•„ì´ì½˜ì„ í´ë¦­í•˜ì‹­ì‹œì˜¤. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. ì´ ì˜µì…˜ì„ ì„ íƒí•˜ë©´ 설치 ë° í•˜ë“œì›¨ì–´ì— ëŒ€í•œ ì •ë³´ê°€ 전송ë©ë‹ˆë‹¤. ì´ ì •ë³´ëŠ” 설치가 ì™„ë£Œëœ í›„ <b>한 번만</b> 전송ë©ë‹ˆë‹¤. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. ì´ ì˜µì…˜ì„ ì„ íƒí•˜ë©´ <b>컴퓨터</b> 설치, 하드웨어 ë° ì‘ìš© í”„ë¡œê·¸ëž¨ì— ëŒ€í•œ 정보를 %1ì—게 주기ì ìœ¼ë¡œ 보냅니다. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. ì´ë¥¼ ì„ íƒí•˜ë©´ <b>사용ìž</b> 설치, 하드웨어, ì‘ìš© 프로그램 ë° ì‘ìš© 프로그램 사용 íŒ¨í„´ì— ëŒ€í•œ 정보를 정기ì ìœ¼ë¡œ %1ì—게 보냅니다. TrackingViewStep Feedback 피드백 UmountJob Unmount file systems. 파ì¼ì‹œìŠ¤í…œì„ ë§ˆìš´íŠ¸ 해제합니다. No target system available. ëŒ€ìƒ ì‹œìŠ¤í…œì„ ì‚¬ìš©í•  수 없습니다. No rootMountPoint is set. 루트 마운트 경로가 지정ë˜ì§€ 않았습니다. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>둘 ì´ìƒì˜ 사용ìžê°€ ì´ ì»´í“¨í„°ë¥¼ 사용할 경우, 설정 후 ê³„ì •ì„ ì—¬ëŸ¬ ê°œ 만들 수 있습니다.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>둘 ì´ìƒì˜ 사용ìžê°€ ì´ ì»´í“¨í„°ë¥¼ 사용할 경우 설치 후 ê³„ì •ì„ ì—¬ëŸ¬ ê°œ 만들 수 있습니다.</small> UsersQmlViewStep Users ì‚¬ìš©ìž UsersViewStep Users ì‚¬ìš©ìž VariantModel Key Column header for key/value 키 Value Column header for key/value ê°’ VolumeGroupBaseDialog Create Volume Group 볼륨 그룹 ìƒì„± List of Physical Volumes 물리 볼륨 ëª©ë¡ Volume Group Name: 볼륨 그룹 ì´ë¦„ : Volume Group Type: 볼륨 그룹 유형 : Physical Extent Size: 물리 확장 í¬ê¸° : MiB MiB Total Size: ì „ì²´ í¬ê¸° : Used Size: ì‚¬ìš©ëœ í¬ê¸° : Total Sectors: ì „ì²´ 섹터 : Quantity of LVs: LVsì˜ ìš©ëŸ‰ WelcomePage Form í˜•ì‹ Select application and system language ì‘ìš© 프로그램 ë° ì‹œìŠ¤í…œ 언어 ì„ íƒ 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) %1 support %1 ì§€ì› About %1 setup %1 설치 ì •ë³´ About %1 installer %1 설치 관리ìžì— 대하여 WelcomeQmlViewStep Welcome 환ì˜í•©ë‹ˆë‹¤ WelcomeViewStep Welcome 환ì˜í•©ë‹ˆë‹¤ ZfsJob Create ZFS pools and datasets ZFS pool ë° ë°ì´í„°ì„¸íЏ 만들기 Failed to create zpool on zpool 만들기 실패함: Configuration Error 구성 오류 No partitions are available for ZFS. 파티션 ì—†ìŒì„ ZFS로 사용할 수 있습니다. Internal data missing ë‚´ë¶€ ë°ì´í„°ê°€ 누ë½ë˜ì—ˆìŠµë‹ˆë‹¤ Failed to create zpool zpoolì„ ë§Œë“¤ì§€ 못했습니다 Failed to create dataset ë°ì´í„°ì„¸íŠ¸ë¥¼ 만들지 못했습니다 The output was: ì¶œë ¥ì€ ë‹¤ìŒê³¼ ê°™ìŒ: calamares-sidebar About Calamaresì— ëŒ€í•˜ì—¬ Debug 디버그 Show information about Calamares Calamaresì— ëŒ€í•œ ì •ë³´ 표시하기 Show debug information 디버그 ì •ë³´ 표시하기 finishedq Installation Completed 설치 완료 %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1ì´(ê°€) ì»´í“¨í„°ì— ì„¤ì¹˜ë˜ì—ˆìŠµë‹ˆë‹¤.<br/> ì´ì œ 새 시스템으로 다시 시작하거나 ë¼ì´ë¸Œ í™˜ê²½ì„ ê³„ì† ì‚¬ìš©í•  수 있습니다. Close Installer 설치 ê´€ë¦¬ìž ë‹«ê¸° Restart System 시스템 재시작 <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>ì„¤ì¹˜ì˜ ì „ì²´ 로그는 ë¼ì´ë¸Œ 사용ìžì˜ 홈 ë””ë ‰í† ë¦¬ì— installation.log로 제공ë©ë‹ˆë‹¤.<br/> ì´ ë¡œê·¸ëŠ” ëŒ€ìƒ ì‹œìŠ¤í…œì˜ /var/log/installation.logì— ë³µì‚¬ë©ë‹ˆë‹¤.</p> finishedq@mobile Installation Completed 설치 완료 %1 has been installed on your computer.<br/> You may now restart your device. %1ì´(ê°€) ì»´í“¨í„°ì— ì„¤ì¹˜ë˜ì—ˆìŠµë‹ˆë‹¤.<br/> ì´ì œ 사용ìžì˜ 장치를 다시 시작할 수 있습니다. Close 닫기 Restart 다시 시작 i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>언어</h1> </br> 시스템 ë¡œì¼€ì¼ ì„¤ì •ì€ ì¼ë¶€ 명령줄 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ìš”ì†Œì— ëŒ€í•œ 언어 ë° ë¬¸ìž ì§‘í•©ì— ì˜í–¥ì„ ì¤ë‹ˆë‹¤. 현재 ì„¤ì •ì€ <strong>%1</strong>입니다. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>로케ì¼</h1> </br> 시스템 ë¡œì¼€ì¼ ì„¤ì •ì€ ìˆ«ìž ë° ë‚ ì§œ 형ì‹ì— ì˜í–¥ì„ ì¤ë‹ˆë‹¤. 현재 ì„¤ì •ì€ <strong>%1</strong>입니다. Back 뒤로 keyboardq To activate keyboard preview, select a layout. 키보드 미리보기를 활성화하려면 ë ˆì´ì•„ì›ƒì„ ì„ íƒí•˜ì„¸ìš”. Keyboard Model: 키보드 모ë¸: Layouts ë ˆì´ì•„웃 Type here to test your keyboard 키보드를 테스트하기 위해 ì—¬ê¸°ì— ìž…ë ¥í•˜ì„¸ìš” Variants 변형 localeq Change 변경 notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>릴리즈 ë…¸íŠ¸ì˜ ì˜ˆì œìž…ë‹ˆë‹¤.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. 리브레오피스는 ì „ 세계 수백만 ëª…ì˜ ì‚¬ëžŒë“¤ì´ ì‚¬ìš©í•˜ëŠ” 강력한 무료 오피스 제품군입니다. 여기ì—는 시장ì—서 가장 다재다능한 무료 ë° ì˜¤í”ˆì†ŒìŠ¤ 오피스 ì œí’ˆêµ°ì´ ë˜ëŠ” 여러 ì‘ìš© í”„ë¡œê·¸ëž¨ì´ í¬í•¨ë˜ì–´ 있습니다.<br/> 기본 옵션입니다. LibreOffice 리브레오피스 If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Office ì œí’ˆêµ°ì„ ì„¤ì¹˜í•˜ì§€ 않으려면 Office 제품군 ì—†ìŒì„ ì„ íƒí•˜ë©´ ë©ë‹ˆë‹¤. í•„ìš”ì— ë”°ë¼ ë‚˜ì¤‘ì— ì„¤ì¹˜ëœ ì‹œìŠ¤í…œì— ì–¸ì œë“ ì§€ 하나(ë˜ëŠ” ê·¸ ì´ìƒ)를 추가할 수 있습니다. No Office Suite 오피스 제품군 ì—†ìŒ Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. ìµœì†Œí•œì˜ ë°ìФí¬íƒ‘ 설치를 만들고 모든 추가 ì‘ìš©í”„ë¡œê·¸ëž¨ì„ ì œê±°í•œ ë‹¤ìŒ ë‚˜ì¤‘ì— ì‹œìŠ¤í…œì— ì¶”ê°€í•  í•­ëª©ì„ ê²°ì •í•˜ì‹­ì‹œì˜¤. ì´ëŸ¬í•œ 설치ì—는 ë°ìФí¬íƒ‘, íŒŒì¼ ë¸Œë¼ìš°ì €, 패키지 관리ìž, í…스트 편집기 ë° ê°„ë‹¨í•œ 웹 브ë¼ìš°ì € ë“±ì´ í¬í•¨ë˜ë©°, í¬í•¨ë˜ì§€ 않는 항목ì—는 Office 제품군, 미디어 플레ì´ì–´, ì´ë¯¸ì§€ ë·°ì–´ ë˜ëŠ” ì¸ì‡„ ì§€ì› ë“±ì´ ìžˆìŠµë‹ˆë‹¤ Minimal Install 최소 설치 Please select an option for your install, or use the default: LibreOffice included. 설치 ì˜µì…˜ì„ ì„ íƒí•˜ê±°ë‚˜ ê¸°ë³¸ê°’ì¸ ë¦¬ë¸Œë ˆì˜¤í”¼ìŠ¤ í¬í•¨ì„ 사용하십시오. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>ì´ ì˜ˆì œ QML 파ì¼ì€ Flickable 컨í…츠가 있는 RichTextì˜ ì˜µì…˜ì„ í‘œì‹œí•©ë‹ˆë‹¤.</p> <p>RichTextê°€ í¬í•¨ëœ QMLì€ HTML 태그를 사용할 수 있으며 Flickable 콘í…츠는 터치 스í¬ë¦°ì— 유용합니다.</p> <p><b>êµµì€ í…스트입니다</b></p> <p><i>기울임꼴 í…스트입니다</i></p> <p><u>ë°‘ì¤„ì´ ê·¸ì–´ì§„ í…스트입니다</u></p> <p><center>ì´ í…스트는 ê°€ìš´ë° ì •ë ¬ë©ë‹ˆë‹¤.</center></p> <p><s>취소선입니다</s></p> <p>코드 예제: <code>ls -l /home</code></p> <p><b>목ë¡:</b></p> <ul> <li>Intel CPU 시스템</li> <li>AMD CPU 시스템</li> </ul> <p>ìˆ˜ì§ ìŠ¤í¬ë¡¤ë°”는 ì¡°ì • 가능하며 현재 너비는 10으로 설정ë˜ì–´ 있습니다.</p> Back 뒤로 usersq Pick your user name and credentials to login and perform admin tasks ë¡œê·¸ì¸ ë° ê´€ë¦¬ìž ìž‘ì—…ì„ ìˆ˜í–‰í•˜ë ¤ë©´ ì‚¬ìš©ìž ì´ë¦„ê³¼ ìžê²© ì¦ëª…ì„ ì„ íƒí•˜ì„¸ìš” What is your name? ì´ë¦„ì´ ë¬´ì—‡ì¸ê°€ìš”? Your Full Name ì „ì²´ ì´ë¦„ What name do you want to use to log in? 로그ì¸í•  때 사용할 ì´ë¦„ì€ ë¬´ì—‡ì¸ê°€ìš”? Login Name ë¡œê·¸ì¸ ì´ë¦„ If more than one person will use this computer, you can create multiple accounts after installation. ë‹¤ìˆ˜ì˜ ì‚¬ìš©ìžê°€ ì´ ì»´í“¨í„°ë¥¼ 사용하는 경우, 설치를 마친 í›„ì— ì—¬ëŸ¬ ê³„ì •ì„ ë§Œë“¤ 수 있습니다. Only lowercase letters, numbers, underscore and hyphen are allowed. 소문ìž, 숫ìž, 밑줄 ë° í•˜ì´í”ˆë§Œ 허용ë©ë‹ˆë‹¤. root is not allowed as username. root는 ì‚¬ìš©ìž ì´ë¦„으로 허용ë˜ì§€ 않습니다. What is the name of this computer? ì´ ì»´í“¨í„°ì˜ ì´ë¦„ì€ ë¬´ì—‡ì¸ê°€ìš”? Computer Name 컴퓨터 ì´ë¦„ This name will be used if you make the computer visible to others on a network. ì´ ì´ë¦„ì€ ë„¤íŠ¸ì›Œí¬ì˜ 다른 사용ìžê°€ ì´ ì»´í“¨í„°ë¥¼ ë³¼ 수 있게 하는 ê²½ìš°ì— ì‚¬ìš©ë©ë‹ˆë‹¤. localhost is not allowed as hostname. localhost는 호스트 ì´ë¦„으로 허용ë˜ì§€ 않습니다. Choose a password to keep your account safe. ì‚¬ìš©ìž ê³„ì •ì˜ ë³´ì•ˆì„ ìœ ì§€í•˜ê¸° 위한 암호를 ì„ íƒí•˜ì„¸ìš”. Password 비밀번호 Repeat Password 비밀번호 반복 Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. ìž…ë ¥ 오류를 확ì¸í•  수 있ë„ë¡ ë™ì¼í•œ 암호를 ë‘ ë²ˆ 입력합니다. 올바른 암호ì—는 문ìž, ìˆ«ìž ë° êµ¬ë‘ì ì´ 혼합ë˜ì–´ 있으며 길ì´ëŠ” 8ìž ì´ìƒì´ì–´ì•¼ 하며 정기ì ìœ¼ë¡œ 변경해야 합니다. Validate passwords quality 암호 품질 ê²€ì¦ When this box is checked, password-strength checking is done and you will not be able to use a weak password. ì´ í™•ì¸ëž€ì„ ì„ íƒí•˜ë©´ 비밀번호 ê°•ë„ ê²€ì‚¬ê°€ 수행ë˜ë©° 불충분한 비밀번호를 사용할 수 없습니다. Log in automatically without asking for the password 암호를 묻지 않고 ìžë™ìœ¼ë¡œ 로그ì¸í•©ë‹ˆë‹¤ Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. 문ìž, 숫ìž, 밑줄 ë° í•˜ì´í”ˆë§Œ 허용ë˜ë©°, 최소 2ìž ì´ìƒì´ì–´ì•¼ 합니다. Reuse user password as root password ì‚¬ìš©ìž ì•”í˜¸ë¥¼ 루트 암호로 재사용합니다 Use the same password for the administrator account. ê´€ë¦¬ìž ê³„ì •ì— ëŒ€í•´ ê°™ì€ ì•”í˜¸ë¥¼ 사용합니다. Choose a root password to keep your account safe. ë‹¹ì‹ ì˜ ê³„ì •ì„ ì•ˆì „í•˜ê²Œ 보호하기 위해서 루트 암호를 ì„ íƒí•˜ì„¸ìš”. Root Password 루트 암호 Repeat Root Password 루트 암호 í™•ì¸ Enter the same password twice, so that it can be checked for typing errors. ìž…ë ¥ 오류를 확ì¸í•˜ê¸° 위해서 ë™ì¼í•œ 암호를 ë‘번 입력해주세요. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>%1 <quote>%2</quote> 설치 관리ìžì— 오신 ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤</h3> <p>ì´ í”„ë¡œê·¸ëž¨ì€ ë‹¹ì‹ ì—게 몇 가지 ì§ˆë¬¸ì„ í•˜ê³  %1ì„(를) ì»´í“¨í„°ì— ì„¤ì¹˜í•  것입니다.</p> Support ì§€ì› Known issues 알려진 ì´ìŠˆë“¤ Release notes 릴리즈 노트 Donate 기부 calamares-calamares-2d126ae/lang/calamares_lo.ts000066400000000000000000005711671430147706700217430ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Error &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next &Back &Done &Cancel Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_lt.ts000066400000000000000000007212731430147706700217430ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2,<br/> skirta %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. 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. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Autorių teisÄ—s %1-%2 %3 &lt;%4&gt;<br/> 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 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 Successfully unmounted %1. %1 sÄ—kmingai atjungtas. Successfully disabled swap %1. Sukeitimų sritis %1 sÄ—kmingai iÅ¡jungta. Successfully cleared swap %1. Sukeitimų sritis %1 sÄ—kmingai iÅ¡valyta. Successfully closed mapper device %1. Atvaizdavimo įrenginys %1 sÄ—kmingai užvertas. Successfully disabled volume group %1. Tomų grupÄ— %1 sÄ—kmingai iÅ¡jungta. Clear mounts for partitioning operations on %1 IÅ¡valyti prijungimus, siekiant atlikti skaidymo operacijas skaidiniuose %1 Clearing mounts for partitioning operations on %1. IÅ¡valomi prijungimai, siekiant atlikti skaidymo operacijas skaidiniuose %1. Cleared all mounts for %1 Visi %1 prijungimai iÅ¡valyti ClearTempMountsJob Clear all temporary mounts. IÅ¡valyti visus laikinuosius prijungimus. Clearing all temporary mounts. IÅ¡valomi visi laikinieji prijungimai. 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. Packages Paketai Install option: <strong>%1</strong> Diegimo parinktis: <strong>%1</strong> None NÄ—ra Summary SuvestinÄ— This is an overview of what will happen once you start the setup procedure. Tai yra apžvalga to, kas įvyks, prasidÄ—jus sÄ…rankos procedÅ«rai. This is an overview of what will happen once you start the install procedure. Tai yra apžvalga to, kas įvyks, prasidÄ—jus diegimo procedÅ«rai. ContextualProcessJob Contextual Processes Job Konteksto procesų užduotis CreatePartitionDialog Create a Partition Sukurti skaidinį Si&ze: D&ydis: MiB MiB Partition &Type: Skaidinio tipas: Primar&y Pir&minis E&xtended IÅ¡&plÄ—stinÄ— Fi&le System: Fai&lų sistema: LVM LV name LVM LV pavadinimas &Mount Point: &Prijungimo vieta: Flags: VÄ—liavÄ—lÄ—s: Label for the filesystem Failų sistemos etiketÄ— FS Label: FS etiketÄ—: En&crypt Užši&fruoti Logical Loginis Primary Pirminis GPT GPT Mountpoint already in use. Please select another one. Prijungimo taÅ¡kas jau yra naudojamas. PraÅ¡ome pasirinkti kitÄ…. Mountpoint must start with a <tt>/</tt>. Prijungimo taÅ¡kas privalo prasidÄ—ti simboliu <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Sukurti naujÄ… %1MiB skaidinį ties %3 (%2) su įraÅ¡ais %4. Create new %1MiB partition on %3 (%2). Sukurti naujÄ… %1MiB skaidinį ties %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Sukurti naujÄ… %2MiB skaidinį diske %4 (%3) su %1 failų sistema. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Sukurti naujÄ… <strong>%1MiB</strong> skaidinį ties <strong>%3</strong> (%2) su įraÅ¡ais <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Sukurti naujÄ… <strong>%1MiB</strong> skaidinį ties <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Sukurti naujÄ… <strong>%2MiB</strong> skaidinį diske <strong>%4</strong> (%3) su <strong>%1</strong> failų sistema. Creating new %1 partition on %2. Kuriamas naujas %1 skaidinys ties %2. The installer failed to create partition on disk '%1'. Diegimo programai nepavyko sukurti skaidinio diske '%1'. 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į Con&tent: Turi&nys: &Keep IÅ¡sa&ugoti Format Formatuoti Warning: Formatting the partition will erase all existing data. Ä®spÄ—jimas: Formatuojant skaidinį, sunaikinami visi jame esantys duomenys. &Mount Point: &Prijungimo vieta: Si&ze: Dy&dis: MiB MiB Fi&le System: Fai&lų sistema: Flags: VÄ—liavÄ—lÄ—s: Label for the filesystem Failų sistemos etiketÄ— FS Label: FS etiketÄ—: Passphrase for existing partition Esamo skaidinio slaptafrazÄ— Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. Nepavyko iššifruoti %1 skaidinio, naudojant pateiktÄ… slaptafrazÄ™.<br/><br/>Taisykite skaidinį dar kartÄ… ir nurodykite teisingÄ… slaptafrazÄ™ arba iÅ¡trinkite šį ir sukurkite naujÄ… Å¡ifruotÄ… skaidinį. EncryptWidget Form Forma En&crypt system Užš&ifruoti sistemÄ… Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Atrodo, kad jÅ«sų sistema nepalaiko Å¡ifravimo pakankamai gerai, kad galÄ—tų Å¡ifruoti visÄ… sistemÄ…. Galite įjungti Å¡ifravimÄ…, bet dÄ—l to gali nukentÄ—ti naÅ¡umas. Passphrase SlaptafrazÄ— Confirm passphrase Patvirtinkite slaptafrazÄ™ Please enter the same passphrase in both boxes. PraÅ¡ome abiejuose langeliuose įraÅ¡yti tÄ… paÄiÄ… slaptafrazÄ™. ErrorDialog Details: IÅ¡samiau: Would you like to paste the install log to the web? Ar norÄ—tumÄ—te įdÄ—ti diegimo žurnalÄ… į saitynÄ…? FillGlobalStorageJob Set partition information Nustatyti skaidinio informacijÄ… Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Ä®diegti %1 <strong>naujame</strong> %2 sistemos skaidinyje su ypatybÄ—mis <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Ä®diegti %1 <strong>naujame</strong> %2 sistemos skaidinyje. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. KonfigÅ«ruojamas Å¡ifruotas sukeitimų skaidinys. No target system available. Neprieinama jokia paskirties sistema. No rootMountPoint is set. Nenustatyta „rootMountPoint“. No configFilePath is set. Nenustatyta „configFilePath“. LicensePage Form Forma <h1>License Agreement</h1> <h1>Licencijos sutartis</h1> I accept the terms and conditions above. Sutinku su aukÅ¡Äiau iÅ¡dÄ—stytomis nuostatomis ir sÄ…lygomis. Please review the End User License Agreements (EULAs). PeržiÅ«rÄ—kite galutinio naudotojo licencijos sutartis (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Å i sÄ…ranka įdiegs nuosavybinÄ™ programinÄ™ įrangÄ…, kuriai yra taikomos licencijavimo nuostatos. If you do not agree with the terms, the setup procedure cannot continue. Jeigu nesutinkate su nuostatomis, sÄ…rankos procedÅ«ra negali bÅ«ti tÄ™siama. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Tam, kad pateiktų papildomas ypatybes ir pagerintų naudotojo patirtį, Å¡i sÄ…rankos procedÅ«ra gali įdiegti nuosavybinÄ™ programinÄ™ įrangÄ…, kuriai yra taikomos licencijavimo nuostatos. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Jeigu nesutiksite su nuostatomis, nuosavybinÄ— programinÄ— įranga nebus įdiegta, o vietoj jos, bus naudojamos atvirojo kodo alternatyvos. 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 label for netinstall module, Linux kernel Branduolys Services label for netinstall module, system services Tarnybos Login label for netinstall module, choose login manager Prisijungimas Desktop label for netinstall module, choose desktop environment Darbalaukis Communication label for netinstall module Komunikacija Development label for netinstall module PlÄ—tojimas Office label for netinstall module RaÅ¡tinÄ— Multimedia label for netinstall module Multimedija Internet label for netinstall module Internetas Theming label for netinstall module Apipavidalinimas Gaming label for netinstall module Žaidimai Utilities label for netinstall module Paslaugų programos Applications 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. 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 Unsafe partition actions are enabled. NesaugÅ«s veiksmai su skaidiniais yra įjungti. Partitioning is configured to <b>always</b> fail. Skaidymas yra sukonfigÅ«ruotas taip, kad <b>visada</b> patirtų nesÄ—kmÄ™. No partitions will be changed. Nebus pakeisti jokie skaidiniai. Current: Dabartinis: After: Po: No EFI system partition configured NÄ—ra sukonfigÅ«ruoto EFI sistemos skaidinio EFI system partition configured incorrectly Neteisingai sukonfigÅ«ruotas EFI sistemos skaidinys An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. %1 paleidimui yra reikalingas EFI sistemos skaidinys.<br/><br/>NorÄ—dami konfigÅ«ruoti EFI sistemos skaidinį, grįžkite atgal ir pasirinkite arba sukurkite tinkamÄ… failų sistemÄ…. The filesystem must be mounted on <strong>%1</strong>. Failų sistema privalo bÅ«ti prijungta ties <strong>%1</strong>. The filesystem must have type FAT32. Failų sistema privalo bÅ«ti FAT32 tipo. The filesystem must be at least %1 MiB in size. Failų sistema privalo bÅ«ti bent %1 MiB dydžio. The filesystem must have flag <strong>%1</strong> set. Failų sistema privalo turÄ—ti nustatytÄ… <strong>%1</strong> vÄ—liavÄ—lÄ™. You can continue without setting up an EFI system partition but your system may fail to start. Galite tÄ™sti nenustatÄ™ EFI sistemos skaidinio, bet jÅ«sų sistema gali nepasileisti. Option to use GPT on BIOS Parinktis naudoti GPT per BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. GPT skaidinių lentelÄ— yra geriausias variantas visoms sistemoms. Å i diegimo programa palaiko tokiÄ… sÄ…rankÄ… taip pat ir BIOS sistemoms.<br/><br/>NorÄ—dami konfigÅ«ruoti GPT skaidinių lentelÄ™ BIOS sistemoje, (jei dar nesate to padarÄ™) grįžkite atgal ir nustatykite skaidinių lentelÄ™ į GPT, toliau, sukurkite 8 MB neformatuotÄ… skaidinį su įjungta <strong>%2</strong> vÄ—liavÄ—le.<br/><br/>Neformatuotas 8 MB skaidinys yra bÅ«tinas, norint paleisti %1 BIOS sistemoje su GPT. Boot partition not encrypted Paleidimo skaidinys nÄ—ra užšifruotas A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Kartu su užšifruotu Å¡aknies skaidiniu, buvo nustatytas atskiras paleidimo skaidinys, taÄiau paleidimo skaidinys nÄ—ra užšifruotas.<br/><br/>DÄ—l tokios sÄ…rankos iÅ¡kyla tam tikrų saugumo klausimų, kadangi svarbÅ«s sisteminiai failai yra laikomi neužšifruotame skaidinyje.<br/>Jeigu norite, galite tÄ™sti, taÄiau failų sistemos atrakinimas įvyks vÄ—liau, sistemos paleidimo metu.<br/>NorÄ—dami užšifruoti paleidimo skaidinį, grįžkite atgal ir sukurkite jį iÅ¡ naujo bei skaidinių kÅ«rimo lange pažymÄ—kite parinktį <strong>Užšifruoti</strong>. has at least one disk device available. turi bent vienÄ… prieinamÄ… disko įrenginį. There are no partitions to install on. NÄ—ra skaidinių į kuriuos diegti. 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 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 StandardButtons &OK &Gerai &Yes &Taip &No &Ne &Cancel A&tsisakyti &Close &Užverti TrackingInstallJob Installation feedback Grįžtamasis ryÅ¡ys apie diegimÄ… Sending installation feedback. SiunÄiamas grįžtamasis ryÅ¡ys apie diegimÄ…. Internal error in install-tracking. VidinÄ— klaida diegimo sekime. HTTP request timed out. BaigÄ—si HTTP užklausos laikas. 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 UmountJob Unmount file systems. Atjungti failų sistemas. No target system available. Neprieinama jokia paskirties sistema. No rootMountPoint is set. Nenustatyta „rootMountPoint“. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Jei Å¡iuo kompiuteriu naudosis keli žmonÄ—s, po sÄ…rankos galite sukurti papildomas paskyras.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Jei Å¡iuo kompiuteriu naudosis keli žmonÄ—s, po diegimo galite sukurti papildomas paskyras.</small> UsersQmlViewStep 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Ä… 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 %1 support %1 palaikymas About %1 setup Apie %1 sÄ…rankÄ… About %1 installer Apie %1 diegimo programÄ… WelcomeQmlViewStep Welcome Pasisveikinimas WelcomeViewStep Welcome Pasisveikinimas ZfsJob Create ZFS pools and datasets Sukurti ZFS telkinius ir duomenų rinkinius Failed to create zpool on Nepavyko sukurti zpool ties Configuration Error KonfigÅ«racijos klaida No partitions are available for ZFS. NÄ—ra jokių skaidinių, prieinamų ZFS. Internal data missing TrÅ«ksta vidinių duomenų Failed to create zpool Nepavyko sukurti zpool Failed to create dataset Nepavyko sukurti duomenų rinkinio The output was: IÅ¡vestis buvo tokia: calamares-sidebar About Apie Debug Derinti Show information about Calamares Rodyti informacijÄ… apie Calamares Show debug information Rodyti derinimo informacijÄ… finishedq Installation Completed Diegimas užbaigtas %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 įdiegta jÅ«sų kompiuteryje.<br/> Galite iÅ¡ naujo paleisti kompiuterį dabar ir naudotis savo naujÄ…ja sistema; arba galite ir toliau naudotis demonstracine aplinka. Close Installer Užverti diegimo programÄ… Restart System Paleisti sistemÄ… iÅ¡ naujo <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Pilnas diegimo žurnalas yra prieinamas kaip installation.log failas, esantis demonstracinio naudotojo namų kataloge.<br/> Å is žurnalas yra nukopijuotas paskirties sistemoje į failÄ… /var/log/installation.log.</p> finishedq@mobile Installation Completed Diegimas užbaigtas %1 has been installed on your computer.<br/> You may now restart your device. %1 įdiegta jÅ«sų kompiuteryje.<br/> Dabar galite paleisti savo įrenginį iÅ¡ naujo. Close Užverti Restart Paleisti iÅ¡ naujo i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Kalbos</h1> </br> Sistemos lokalÄ—s nustatymas įtakoja, kai kurių komandų eilutÄ—s naudotojo sÄ…sajos elementų, kalbos ir simbolių rinkinį. Dabar yra nustatyta <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>LokalÄ—s</h1> </br> Sistemos lokalÄ—s nustatymas įtakoja skaiÄių ir datų formatÄ…. Dabar yra nustatyta <strong>%1</strong>. Back Atgal keyboardq To activate keyboard preview, select a layout. NorÄ—dami aktyvuoti klaviatÅ«ros peržiÅ«rÄ…, pasirinkite iÅ¡dÄ—stymÄ…. Keyboard Model: KlaviatÅ«ros modelis: Layouts IÅ¡dÄ—stymai Type here to test your keyboard RaÅ¡ykite Äia ir iÅ¡bandykite savo klaviatÅ«rÄ… Variants Variantai localeq Change Keisti notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Tai yra pavyzdinÄ— laidos informacija.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice yra galingas ir laisvasis raÅ¡tinÄ—s programų paketas, naudojamas milijonų žmonių visame pasaulyje. Ä® jį įeina kelios programos, kurios padaro jį labiausiai universaliu laisvuoju ir atvirojo kodo raÅ¡tinÄ—s programų paketu rinkoje.<br/> Numatytoji parinktis. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Jei nenorite diegti raÅ¡tinÄ—s programų paketo, tiesiog pasirinkite „Be raÅ¡tinÄ—s programų paketo“. Atsiradus poreikiui vÄ—liau visada galite pridÄ—ti vienÄ… (ar daugiau) raÅ¡tinÄ—s programų paketÄ… į savo įdiegtÄ… sistemÄ…. No Office Suite Be raÅ¡tinÄ—s programų paketo Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Sukurti minimalų darbalaukio diegimÄ…, paÅ¡alinti visas papildomas programas ir vÄ—liau sprÄ™sti, kÄ… pridÄ—ti į savo sistemÄ…. Kaip pavyzdys, į tokį diegimÄ… nebus įtrauktas raÅ¡tinÄ—s programų paketas, medijos leistuvÄ—s, paveikslų žiÅ«ryklÄ— ir spausdinimo palaikymas. Bus tik darbalaukis, failų narÅ¡yklÄ—, paketų tvarkytuvÄ—, tekstų redaktorius ir paprasta saityno narÅ¡yklÄ—. Minimal Install Minimalus diegimas Please select an option for your install, or use the default: LibreOffice included. Pasirinkite diegimo parinktį arba naudokite numatytÄ…jÄ…: į jÄ… įtrauktas LibreOffice. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Tai yra pavyzdinis QML failas, rodantis parinktis raiÅ¡kiuoju tekstu su interaktyviu turiniu.</p> <p>QML su raiÅ¡kiuoju tekstu gali naudoti HTML žymes, interaktyvus turinys yra naudingas jutikliniuose ekranuose.</p> <p><b>Tai yra pusjuodis tekstas</b></p> <p><i>Tai yra kursyvinis tekstas</i></p> <p><u>Tai yra pabrauktas tekstas</u></p> <p><center>Å is tekstas bus lygiuojamas centre.</center></p> <p><s>Tai yra perbraukimas</s></p> <p>Kodo pavyzdžiai: <code>ls -l /home</code></p> <p><b>SÄ…raÅ¡ai:</b></p> <ul> <li>Intel CPU sistemos</li> <li>AMD CPU sistemos</li> </ul> <p>Vertikalioji slankjuostÄ— yra reguliuojama, dabartinis plotis nustatytas į 10.</p> Back Atgal usersq Pick your user name and credentials to login and perform admin tasks Pasirinkite naudotojo vardÄ… ir prisijungimo duomenis, kad galÄ—tumÄ—te prisijungti ir atlikti administravimo užduotis What is your name? Koks jÅ«sų vardas? Your Full Name JÅ«sų visas vardas What name do you want to use to log in? Kokį vardÄ… norite naudoti prisijungimui? Login Name Prisijungimo vardas If more than one person will use this computer, you can create multiple accounts after installation. Jei Å¡iuo kompiuteriu naudosis keli žmonÄ—s, po diegimo galÄ—site sukurti papildomas paskyras. Only lowercase letters, numbers, underscore and hyphen are allowed. Yra leidžiamos tik mažosios raidÄ—s, skaitmenys, pabraukimo brÅ«kÅ¡niai ir brÅ«kÅ¡neliai. root is not allowed as username. root neleidžiama naudoti kaip naudotojo vardÄ…. What is the name of this computer? Koks Å¡io kompiuterio vardas? Computer Name Kompiuterio vardas This name will be used if you make the computer visible to others on a network. Å is vardas bus naudojamas, jeigu padarysite savo kompiuterį matomÄ… kitiems naudotojams tinkle. localhost is not allowed as hostname. localhost neleidžiama naudoti kaip naudotojo vardÄ…. Choose a password to keep your account safe. Apsaugokite savo paskyrÄ… slaptažodžiu Password Slaptažodis Repeat Password Pakartokite slaptažodį Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Norint įsitikinti, kad raÅ¡ydami slaptažodį nesuklydote, įraÅ¡ykite tÄ… patį slaptažodį du kartus. Stiprus slaptažodis yra raidžių, skaiÄių ir punktuacijos ženklų miÅ¡inys, jis turi bÅ«ti mažiausiai aÅ¡tuonių simbolių, be to, turÄ—tų bÅ«ti reguliariai keiÄiamas. Validate passwords quality Tikrinti slaptažodžių kokybÄ™ When this box is checked, password-strength checking is done and you will not be able to use a weak password. PažymÄ—jus šį langelį, bus atliekamas slaptažodžio stiprumo tikrinimas ir negalÄ—site naudoti silpnÄ… slaptažodį. Log in automatically without asking for the password Prisijungti automatiÅ¡kai, neklausiant slaptažodžio Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Yra leidžiamos tik raidÄ—s, skaitmenys, pabraukimo brÅ«kÅ¡niai ir brÅ«kÅ¡neliai, mažiausiai du simboliai. Reuse user password as root password Naudotojo slaptažodį naudoti pakartotinai kaip pagrindinio naudotojo (root) slaptažodį Use the same password for the administrator account. Naudoti tokį patį slaptažodį administratoriaus paskyrai. Choose a root password to keep your account safe. Pasirinkite pagrindinio naudotojo (root) slaptažodį, kad apsaugotumÄ—te savo paskyrÄ…. Root Password Pagrindinio naudotojo (Root) slaptažodis Repeat Root Password Pakartokite pagrindinio naudotojo (Root) slaptažodį Enter the same password twice, so that it can be checked for typing errors. Norint įsitikinti, kad raÅ¡ydami slaptažodį nesuklydote, įraÅ¡ykite tÄ… patį slaptažodį du kartus. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Jus sveikina %1 <quote>%2</quote> diegimo programa</h3> <p>Å i programa užduos jums kelis klausimus ir padÄ—s kompiuteryje nusistatyti %1.</p> Support Palaikymas Known issues Žinomos problemos Release notes Laidos informacija Donate Paaukoti calamares-calamares-2d126ae/lang/calamares_lv.ts000066400000000000000000005721611430147706700217450ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Error &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next &Back &Done &Cancel Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_mk.ts000066400000000000000000005717711430147706700217410ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Празна Страна Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Install ИнÑталирај Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Готово Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Error Грешка &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. ИнÑталацијата е готова. ИÑклучете го инÑталерот. Cancel setup without changing the system. Cancel installation without changing the system. &Next &Back &Done &Cancel Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_ml.ts000066400000000000000000010253351430147706700217310ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 ഇൻസàµà´±àµà´±à´³àµ‡à´·àµ» പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 %1 ൽ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´™àµà´™àµ à´ªàµà´°à´•àµà´°à´¿à´¯à´•ൾകàµà´•ായി മൗണàµà´Ÿàµà´•ൾ നീകàµà´•à´‚ ചെയàµà´¯àµà´• Clearing mounts for partitioning operations on %1. %1 ൽ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´™àµà´™àµ à´ªàµà´°à´•àµà´°à´¿à´¯à´•ൾകàµà´•ായി മൗണàµà´Ÿàµà´•ൾ നീകàµà´•à´‚ ചെയàµà´¯àµà´¨àµà´¨àµ. Cleared all mounts for %1 %1 നായàµà´³àµà´³ à´Žà´²àµà´²à´¾ മൗണàµà´Ÿàµà´•à´³àµà´‚ നീകàµà´•à´‚ ചെയàµà´¤àµ ClearTempMountsJob Clear all temporary mounts. à´Žà´²àµà´²à´¾ താൽകàµà´•ാലിക മൗണàµà´Ÿàµà´•à´³àµà´‚ നീകàµà´•à´‚ ചെയàµà´¯àµà´• Clearing all temporary mounts. à´Žà´²àµà´²à´¾ താൽകàµà´•ാലിക മൗണàµà´Ÿàµà´•à´³àµà´‚ നീകàµà´•à´‚ ചെയàµà´¯àµà´¨àµà´¨àµ. Cleared all temporary mounts. à´Žà´²àµà´²à´¾ താൽകàµà´•ാലിക മൗണàµà´Ÿàµà´•à´³àµà´‚ നീകàµà´•à´‚ ചെയàµà´¤àµ. CommandList Could not run command. ആജàµà´ž à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´ªàµà´ªà´¿à´•àµà´•ാനായിലàµà´². The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. കമാൻഡൠഹോസàµà´±àµà´±àµ എൻവയോൺമെനàµà´±à´¿àµ½ à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´•àµà´•àµà´¨àµà´¨àµ, റൂടàµà´Ÿàµ പാതàµà´¤àµ അറിയേണàµà´Ÿà´¤àµà´£àµà´Ÿàµ, പകàµà´·àµ‡ 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. പടàµà´Ÿà´¿à´•യിൽ നിനàµà´¨àµà´‚ ഒരൠഉതàµà´ªà´¨àµà´¨à´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•. തിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ ഉതàµà´ªà´¨àµà´¨à´‚ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´•. Packages പാകàµà´•േജàµà´•ൾ Install option: <strong>%1</strong> None Summary à´šàµà´°àµà´•àµà´•à´‚ This is an overview of what will happen once you start the setup procedure. താങàµà´•ൾ സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯ ആരംഭിചàµà´šà´¤à´¿à´¨àµà´¶àµ‡à´·à´‚ à´Žà´¨àµà´¤àµ സംഭവികàµà´•àµà´‚ à´Žà´¨àµà´¨à´¤à´¿à´¨àµà´±àµ† അവലോകനമാണിതàµ. This is an overview of what will happen once you start the install procedure. നിങàµà´™àµ¾ ഇൻസàµà´±àµà´±à´¾àµ¾ നടപടികàµà´°à´®à´™àµà´™àµ¾ ആരംഭിചàµà´šàµà´•à´´à´¿à´žàµà´žà´¾àµ½ à´Žà´¨àµà´¤àµ സംഭവികàµà´•àµà´‚ à´Žà´¨àµà´¨à´¤à´¿à´¨àµà´±àµ† ഒരൠഅവലോകനമാണിതàµ. ContextualProcessJob Contextual Processes Job സാനàµà´¦àµ¼à´­à´¿à´• à´ªàµà´°à´•àµà´°à´¿à´¯à´•ൾ ജോലി CreatePartitionDialog Create a Partition ഒരൠപാർടàµà´Ÿàµ€à´·àµ» സൃഷàµà´Ÿà´¿à´•àµà´•àµà´• Si&ze: വലàµà´ªàµà´ªà´‚ (&z): MiB MiB Partition &Type: പാർടàµà´Ÿàµ€à´·àµ» തരം (&T): Primar&y E&xtended à´Žà´•àµà´¸àµà´±àµà´±àµ»à´¡à´¡àµ (&x) Fi&le System: ഫയൽ സിസàµà´±àµà´±à´‚ (&l): LVM LV name എൽവി‌എം എൽവി പേരൠ&Mount Point: മൗണàµà´Ÿàµ പോയിനàµà´±àµ (&M): Flags: à´«àµà´²à´¾à´—àµà´•ൾ: Label for the filesystem FS Label: En&crypt എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ (&c) Logical ലോജികàµà´•ൽ Primary à´ªàµà´°à´¾à´¥à´®à´¿à´•à´‚ GPT ജിപിറàµà´±à´¿ Mountpoint already in use. Please select another one. മൗണàµà´Ÿàµà´ªàµ‹à´¯à´¿à´¨àµà´±àµ നിലവിൽ ഉപയോഗികàµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. ദയവായി മറàµà´±àµŠà´°àµ†à´£àµà´£à´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•ൂ. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. ഫയൽ സിസàµà´±àµà´±à´‚ %1 ഉപയോഗിചàµà´šàµ %4 (%3) ൽ à´ªàµà´¤à´¿à´¯ %2MiB പാർടàµà´Ÿàµ€à´·àµ» സൃഷàµà´Ÿà´¿à´•àµà´•àµà´•. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. ഫയൽ സിസàµà´±àµà´±à´‚ <strong>%1</strong> ഉപയോഗിചàµà´šàµ <strong>%4</strong> (%3) ൽ à´ªàµà´¤à´¿à´¯ <strong>%2MiB</strong> പാർടàµà´Ÿàµ€à´·àµ» സൃഷàµà´Ÿà´¿à´•àµà´•àµà´•. Creating new %1 partition on %2. %2 ൽ à´ªàµà´¤à´¿à´¯ %1 പാർടàµà´Ÿàµ€à´·àµ» സൃഷàµà´Ÿà´¿à´•àµà´•àµà´¨àµà´¨àµ. The installer failed to create partition on disk '%1'. '%1' à´¡à´¿à´¸àµà´•ിൽ പാർടàµà´Ÿàµ€à´·àµ» സൃഷàµà´Ÿà´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. 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 നിലവിലàµà´³àµà´³ പാർടàµà´Ÿàµ€à´·àµ» തിരàµà´¤àµà´¤àµà´• Con&tent: &Keep നിലനിർതàµà´¤àµà´• (&K) Format ഫോർമാറàµà´±àµ Warning: Formatting the partition will erase all existing data. à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµ: പാർടàµà´Ÿàµ€à´·àµ» ഫോർമാറàµà´±àµ ചെയàµà´¯àµà´¨àµà´¨à´¤àµ നിലവിലàµà´³àµà´³ à´Žà´²àµà´²à´¾ ഡാറàµà´±à´¯àµà´‚ ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´‚. &Mount Point: മൗണàµà´Ÿàµ പോയിനàµà´±àµ (&M): Si&ze: വലàµà´ªàµà´ªà´‚ (&z): MiB MiB Fi&le System: ഫയൽ സിസàµà´±àµà´±à´‚ (&l): Flags: à´«àµà´²à´¾à´—àµà´•ൾ: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form ഫോം En&crypt system സിസàµà´±àµà´±à´‚ എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯àµà´• (&c) Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase രഹസàµà´¯à´µà´¾à´šà´•à´‚ Confirm passphrase രഹസàµà´¯à´µà´¾à´šà´•à´‚ à´¸àµà´¥à´¿à´°àµ€à´•à´°à´¿à´•àµà´•àµà´• Please enter the same passphrase in both boxes. à´°à´£àµà´Ÿàµ പെടàµà´Ÿà´¿à´•ളിലàµà´‚ ഒരേ രഹസàµà´¯à´µà´¾à´šà´•à´‚ നലàµâ€à´•àµà´•, ErrorDialog Details: Would you like to paste the install log to the web? ഇൻസàµà´±àµà´±à´¾àµ¾ ലോഗൠവെബിലേകàµà´•ൠപകർതàµà´¤à´£àµ‹? FillGlobalStorageJob Set partition information പാർടàµà´Ÿàµ€à´·àµ» വിവരങàµà´™àµ¾ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´• Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. <strong>à´ªàµà´¤à´¿à´¯</strong> %2 സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·à´¨à´¿àµ½ %1 ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´•. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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> ഫോർമാറàµà´±àµ ചെയàµà´¯àµà´•. %1 (%2) partition label %1 (device path %2) %1 (%2) 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) LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form ഫോം <h1>License Agreement</h1> <h1>à´…à´¨àµà´®à´¤à´¿à´ªà´¤àµà´° നിബനàµà´§à´¨à´•ൾ</h1> I accept the terms and conditions above. à´®àµà´•ളിലàµà´³àµà´³ നിബനàµà´§à´¨à´•à´³àµà´‚ à´µàµà´¯à´µà´¸àµà´¥à´•à´³àµà´‚ ഞാൻ അംഗീകരികàµà´•àµà´¨àµà´¨àµ. Please review the End User License Agreements (EULAs). എൻഡൠയൂസർ ലൈസൻസൠഎഗàµà´°à´¿à´®àµ†à´¨àµà´±àµà´•ൾ (EULAs) ദയവായി പരിശോധികàµà´•ൂ. This setup procedure will install proprietary software that is subject to licensing terms. à´ˆ സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯ à´…à´¨àµà´®à´¤à´¿à´ªà´¤àµà´°à´¨à´¿à´¬à´¨àµà´§à´¨à´•ൾകàµà´•ൠകീഴിലàµà´³àµà´³ à´•àµà´¤àµà´¤à´• സോഫàµà´±àµà´±àµâ€Œâ€Œà´µàµ†à´¯à´±àµà´•ൾ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´‚. If you do not agree with the terms, the setup procedure cannot continue. താങàµà´•ൾ à´ˆ നിബനàµà´§à´¨à´•ളോടൠയോജികàµà´•àµà´¨àµà´¨à´¿à´²àµà´²àµ†à´™àµà´•ിൽ, സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯à´¯àµà´•àµà´•ൠതàµà´Ÿà´°à´¾à´¨à´¾à´•à´¿à´²àµà´². This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. കൂടàµà´¤àµ½ സവിശേഷതകൾ നൽകàµà´¨àµà´¨à´¤à´¿à´¨àµà´‚ ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµà´±àµ† à´…à´¨àµà´­à´µà´‚ കൂടàµà´¤àµ½ മികവàµà´±àµà´±à´¤à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´‚ à´ˆ സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯à´¯àµà´•àµà´•ൠഅനàµà´®à´¤à´¿à´ªà´¤àµà´°à´¨à´¿à´¬à´¨àµà´§à´¨à´•ൾകàµà´•ൠകീഴിലàµà´³àµà´³ à´•àµà´¤àµà´¤à´• സോഫàµà´±àµà´±àµâ€Œâ€Œà´µàµ†à´¯à´±àµà´•ൾ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´¾à´‚. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. താങàµà´•ൾ à´ˆ നിബനàµà´§à´¨à´•ളോടൠയോജികàµà´•àµà´¨àµà´¨à´¿à´²àµà´²àµ†à´™àµà´•ിൽ, à´•àµà´¤àµà´¤à´• സോഫàµà´±àµà´±àµâ€Œâ€Œà´µàµ†à´¯à´±àµà´•ൾ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿà´¿à´²àµà´², പകരം à´¸àµà´µà´¤à´¨àµà´¤àµà´° ബദലàµà´•ൾ ഉപയോഗികàµà´•àµà´‚. 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. പടàµà´Ÿà´¿à´•യിൽ നിനàµà´¨àµà´‚ ഒരൠഉതàµà´ªà´¨àµà´¨à´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•. തിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ ഉതàµà´ªà´¨àµà´¨à´‚ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´•. 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 പാർടàµà´Ÿàµ€à´·à´¨àµà´•ൾ Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: നിലവിലàµà´³àµà´³à´¤àµ: After: ശേഷം: No EFI system partition configured ഇഎഫàµà´ സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·à´¨àµŠà´¨àµà´¨àµà´‚ à´•àµà´°à´®àµ€à´•à´°à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´² EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted ബൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·àµ» എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´Ÿàµà´Ÿà´¿à´²àµà´² A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ ഒരൠറൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·à´¨àµ‹à´ŸàµŠà´ªàµà´ªà´‚ ഒരൠവേർപെടàµà´¤àµà´¤à´¿à´¯ ബൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·à´¨àµà´‚ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´°àµà´¨àµà´¨àµ, à´Žà´¨àµà´¨à´¾àµ½ ബൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·àµ» എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¤à´²àµà´².<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 സിസàµà´±àµà´±à´‚ ആവശàµà´¯à´•തകൾ 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 StandardButtons &OK à´¶à´°à´¿ (&O) &Yes വേണം (&Y) &No വേണàµà´Ÿ (&N) &Cancel റദàµà´¦à´¾à´•àµà´•àµà´• (&C) &Close à´…à´Ÿà´¯àµà´•àµà´•àµà´• (&C) TrackingInstallJob Installation feedback ഇൻസàµà´±àµà´±à´³àµ‡à´·à´¨àµ† പറàµà´±à´¿à´¯àµà´³àµà´³ à´ªàµà´°à´¤à´¿à´•രണം Sending installation feedback. ഇൻസàµà´±àµà´±à´³àµ‡à´·à´¨àµ† പറàµà´±à´¿à´¯àµà´³àµà´³ à´ªàµà´°à´¤à´¿à´•രണം അയയàµà´•àµà´•àµà´¨àµà´¨àµ. Internal error in install-tracking. ഇൻസàµà´±àµà´±à´¾àµ¾-പിനàµà´¤àµà´Ÿà´°àµà´¨àµà´¨à´¤à´¿àµ½ ആനàµà´¤à´°à´¿à´•മായ പിഴവàµ. HTTP request timed out. HTTP അപേകàµà´·à´¯àµà´Ÿàµ† സമയപരിധി à´•à´´à´¿à´žàµà´žàµ. TrackingKUserFeedbackJob KDE user feedback 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 à´ªàµà´°à´¤à´¿à´•രണം UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>à´’à´¨àµà´¨à´¿à´²à´§à´¿à´•à´‚ ആളàµà´•ൾ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ ഉപയോഗികàµà´•àµà´®àµ†à´™àµà´•ിൽ, താങàµà´•ൾകàµà´•ൠസജàµà´œàµ€à´•രണതàµà´¤à´¿à´¨àµ ശേഷം നിരവധി à´…à´•àµà´•ൗണàµà´Ÿàµà´•ൾ സൃഷàµà´Ÿà´¿à´•àµà´•ാം.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>à´’à´¨àµà´¨à´¿à´²à´§à´¿à´•à´‚ ആളàµà´•ൾ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ ഉപയോഗികàµà´•àµà´®àµ†à´™àµà´•ിൽ, താങàµà´•ൾകàµà´•ൠഇൻസàµà´±àµà´±à´³àµ‡à´·à´¨àµ ശേഷം നിരവധി à´…à´•àµà´•ൗണàµà´Ÿàµà´•ൾ സൃഷàµà´Ÿà´¿à´•àµà´•ാം.</small> UsersQmlViewStep Users ഉപയോകàµà´¤à´¾à´•àµà´•ൾ UsersViewStep Users ഉപയോകàµà´¤à´¾à´•àµà´•ൾ VariantModel Key Column header for key/value സൂചിക Value Column header for key/value മൂലàµà´¯à´‚ VolumeGroupBaseDialog Create Volume Group വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നിർമàµà´®à´¿à´•àµà´•àµà´• List of Physical Volumes ഫിസികàµà´•ൽ വോളàµà´¯à´™àµà´™à´³àµà´Ÿàµ† പടàµà´Ÿà´¿à´• Volume Group Name: വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªà´¿à´¨àµà´±àµ† പേരàµ: Volume Group Type: വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ തരം: Physical Extent Size: ഫിസികàµà´•ൽ à´Žà´•àµà´¸àµà´±àµà´±à´¨àµà´±àµ വലàµà´ªàµà´ªà´‚: MiB MiB Total Size: മൊതàµà´¤à´‚ വലàµà´ªàµà´ªà´‚: Used Size: ഉപയോഗിചàµà´š വലàµà´ªàµà´ªà´‚: Total Sectors: മൊതàµà´¤à´‚ സെകàµà´Ÿà´±àµà´•ൾ: Quantity of LVs: LVà´•à´³àµà´Ÿàµ† അളവàµ: WelcomePage Form ഫോം Select application and system language à´…à´ªàµà´²à´¿à´•àµà´•േഷനàµà´‚ സിസàµà´±àµà´±à´‚ ഭാഷയàµà´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´• 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) %1 support %1 പിനàµà´¤àµà´£ About %1 setup %1 സജàµà´œàµ€à´•രണതàµà´¤àµ†à´•àµà´•àµà´±à´¿à´šàµà´šàµ About %1 installer %1 ഇൻസàµà´±àµà´±à´¾à´³à´±à´¿à´¨àµ† à´•àµà´±à´¿à´šàµà´šàµ WelcomeQmlViewStep Welcome à´¸àµà´µà´¾à´—തം WelcomeViewStep Welcome à´¸àµà´µà´¾à´—തം ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error à´•àµà´°à´®àµ€à´•രണതàµà´¤à´¿àµ½ പിഴവൠNo partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About വിവരം Debug Show information about Calamares Show debug information ഡീബഗൠവിവരങàµà´™àµ¾ കാണികàµà´•àµà´• finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back à´ªàµà´±à´•ോടàµà´Ÿàµ keyboardq To activate keyboard preview, select a layout. Keyboard Model: കീബോഡൠമാതൃക: Layouts Type here to test your keyboard നിങàµà´™à´³àµà´Ÿàµ† കീബോർഡൠപരിശോധികàµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ ഇവിടെ ടൈപàµà´ªàµà´šàµ†à´¯àµà´¯àµà´• Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back à´ªàµà´±à´•ോടàµà´Ÿàµ usersq Pick your user name and credentials to login and perform admin tasks What is your name? നിങàµà´™à´³àµà´Ÿàµ† പേരെനàµà´¤à´¾à´£àµ ? Your Full Name താങàµà´•à´³àµà´Ÿàµ† à´®àµà´´àµà´µàµ» പേരàµàµ What name do you want to use to log in? ലോഗിൻ ചെയàµà´¯à´¾àµ» നിങàµà´™àµ¾ à´à´¤àµ നാമം ഉപയോഗികàµà´•ാനാണൠആഗàµà´°à´¹à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ? Login Name à´ªàµà´°à´µàµ‡à´¶à´¨ നാമം If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. ചെറിയ à´…à´•àµà´·à´°à´™àµà´™àµ¾, à´…à´•àµà´•à´™àµà´™àµ¾, à´…à´£àµà´Ÿàµ¼à´¸àµà´•ോർ, ഹൈഫൺ à´Žà´¨àµà´¨à´¿à´µà´¯àµ‡ à´…à´¨àµà´µà´¦à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿàµà´³àµà´³àµ‚. root is not allowed as username. What is the name of this computer? à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨àµà´±àµ† നാമം à´Žà´¨àµà´¤à´¾à´£àµ ? Computer Name à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨àµà´±àµ† പേരൠThis name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. 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> Support സഹായം Known issues അറിയാവàµà´¨àµà´¨ à´ªàµà´°à´¶àµà´¨à´™àµà´™àµ¾ Release notes à´ªàµà´°à´•ാശനകàµà´•àµà´±à´¿à´ªàµà´ªàµà´•ൾ Donate സംഭാവന calamares-calamares-2d126ae/lang/calamares_mr.ts000066400000000000000000005775431430147706700217530ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 अधिषà¥à¤ à¤¾à¤ªà¤¨à¤¾ अयशसà¥à¤µà¥€ à¤à¤¾à¤²à¥€ 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. तà¥à¤®à¤šà¤¾ वापरकरà¥à¤¤à¤¾à¤¨à¤¾à¤µ खूप लांब आहे '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. तà¥à¤®à¤šà¤¾ संगणकनाव खूप लहान आहे Your hostname is too long. तà¥à¤®à¤šà¤¾ संगणकनाव खूप लांब आहे '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! तà¥à¤®à¤šà¤¾ परवलीशबà¥à¤¦ जà¥à¤³à¤¤ नाही OK! Setup Failed Installation Failed अधिषà¥à¤ à¤¾à¤ªà¤¨à¤¾ अयशसà¥à¤µà¥€ à¤à¤¾à¤²à¥€ The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary सारांश This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition विभाजन निरà¥à¤®à¤¾à¤£ करा Si&ze: MiB Partition &Type: विभाजन &पà¥à¤°à¤•ार : Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical तारà¥à¤•िक Primary पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤• GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. %2 वर %1 हे नवीन विभाजन निरà¥à¤®à¤¾à¤£ करत आहे The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table विभाजन कोषà¥à¤Ÿà¤• निरà¥à¤®à¤¾à¤£ करा Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form सà¥à¤µà¤°à¥à¤ª En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form सà¥à¤µà¤°à¥à¤ª &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &रदà¥à¤¦ करा &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form सà¥à¤µà¤°à¥à¤ª <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form सà¥à¤µà¤°à¥à¤ª Keyboard Model: Type here to test your keyboard Page_UserSetup Form सà¥à¤µà¤°à¥à¤ª What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form सà¥à¤µà¤°à¥à¤ª Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: सदà¥à¤¯à¤¾ : After: नंतर : No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form सà¥à¤µà¤°à¥à¤ª Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form सà¥à¤µà¤°à¥à¤ª Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements पà¥à¤°à¤£à¤¾à¤²à¥€à¤šà¥€ आवशकà¥à¤¯à¤¤à¤¾ ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error अंतरà¥à¤—त तà¥à¤°à¥‚टी  Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1.  %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) StandardButtons &OK &Yes &होय &No &नाही &Cancel &रदà¥à¤¦ करा &Close &बंद करा TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form सà¥à¤µà¤°à¥à¤ª Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users वापरकरà¥à¤¤à¥‡ UsersViewStep Users वापरकरà¥à¤¤à¥‡ VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form सà¥à¤µà¤°à¥à¤ª Select application and system language 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 &पà¥à¤°à¤•ाशन टिपा %1 support %1 पाठबळ About %1 setup About %1 installer %1 अधिषà¥à¤ à¤¾à¤ªà¤• बदà¥à¤¦à¤² WelcomeQmlViewStep Welcome सà¥à¤µà¤¾à¤—त WelcomeViewStep Welcome सà¥à¤µà¤¾à¤—त ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information दोषमारà¥à¤œà¤¨ माहिती दरà¥à¤¶à¤µà¤¾ finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_nb.ts000066400000000000000000005767341430147706700217350ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> 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. Packages Install option: <strong>%1</strong> None Summary Oppsummering This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Opprett en partisjon Si&ze: St&ørrelse: MiB Partition &Type: Partisjon &Type: Primar&y E&xtended U&tvidet Fi&le System: LVM LV name &Mount Point: &Monteringspunkt: Flags: Label for the filesystem FS Label: En&crypt Logical Logisk Primary Primær GPT GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. 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 Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: &Monteringspunkt: Si&ze: St&ørrelse: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form 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 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) StandardButtons &OK &OK &Yes &Ja &No &Nei &Cancel &Avbryt &Close &Lukk 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 UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users 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 Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome Velkommen WelcomeViewStep Welcome Velkommen ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Debug Show information about Calamares Show debug information Vis feilrettingsinformasjon finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Tastaturmodell: Layouts Type here to test your keyboard Skriv her for Ã¥ teste tastaturet ditt Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? 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> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_ne_NP.ts000066400000000000000000005736061430147706700223300ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> %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. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form फारम En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form फारम &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form फारम <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form फारम Keyboard Model: Type here to test your keyboard Page_UserSetup Form फारम What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form फारम Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form फारम Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form फारम Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form फारम Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form फारम Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_nl.ts000066400000000000000000006776521430147706700217500ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Geef aankoppelpunten vrij voor partitiebewerkingen op %1 Clearing mounts for partitioning operations on %1. Aankoppelpunten vrijgeven voor partitiebewerkingen op %1. Cleared all mounts for %1 Alle aankoppelpunten voor %1 zijn vrijgegeven ClearTempMountsJob Clear all temporary mounts. Geef alle tijdelijke aankoppelpunten vrij. Clearing all temporary mounts. Alle tijdelijke aankoppelpunten vrijgeven. 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. Packages Pakketten Install option: <strong>%1</strong> None Summary Samenvatting This is an overview of what will happen once you start the setup procedure. Dit is een overzicht van wat zal gebeuren wanneer je de installatieprocedure start. This is an overview of what will happen once you start the install procedure. Dit is een overzicht van wat zal gebeuren wanneer je de installatieprocedure start. ContextualProcessJob Contextual Processes Job Contextuele processen Taak CreatePartitionDialog Create a Partition Maak partitie Si&ze: &Grootte: MiB MiB Partition &Type: Partitie&type: Primar&y E&xtended &Uitgebreid Fi&le System: &Bestandssysteem LVM LV name LVM LV naam &Mount Point: Aan&koppelpunt Flags: Vlaggen: Label for the filesystem FS Label: En&crypt &Versleutelen Logical Logisch Primary Primair GPT GPT Mountpoint already in use. Please select another one. Aankoppelpunt reeds in gebruik. Gelieve een andere te kiezen. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Maak nieuwe %1MiB partitie aan op %3 (%2) met onderdelen %4. Create new %1MiB partition on %3 (%2). Maak nieuwe %1MiB partitie aan op %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Maak nieuwe %2MiB partitie aan op %4 (%3) met bestandsysteem %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Maak een nieuwe <strong>%1MiB</strong> partitie aan op <strong>%3</strong> (%2) met onderdelen <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Maak een nieuwe <strong>%1MiB</strong> partitie aan op <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Maak een nieuwe <strong>%2MiB</strong> partitie aan op <strong>%4</strong> (%3) met bestandsysteem <strong>%1</strong>. Creating new %1 partition on %2. Nieuwe %1 partitie aanmaken op %2. The installer failed to create partition on disk '%1'. Het installatieprogramma kon geen partitie aanmaken op schijf '%1'. 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 Con&tent: &Keep &Behouden Format Formatteren Warning: Formatting the partition will erase all existing data. Opgelet: Een partitie formatteren zal alle bestaande gegevens wissen. &Mount Point: Aan&koppelpunt: Si&ze: &Grootte: MiB MiB Fi&le System: Bestands&systeem Flags: Vlaggen: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formulier En&crypt system En&crypteer systeem Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Wachtwoordzin Confirm passphrase Bevestig wachtwoordzin Please enter the same passphrase in both boxes. Gelieve in beide velden dezelfde wachtwoordzin in te vullen. ErrorDialog Details: Would you like to paste the install log to the web? Wil je het installatielogboek plakken naar het web? FillGlobalStorageJob Set partition information Instellen partitie-informatie Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Installeer %1 op <strong>nieuwe</strong> %2 systeempartitie met features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Installeer %1 op <strong>nieuwe</strong> %2 systeempartitie. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Instellen van versleutelde swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formulier <h1>License Agreement</h1> <h1>Licentieovereenkomst</h1> I accept the terms and conditions above. Ik aanvaard de bovenstaande algemene voorwaarden. Please review the End User License Agreements (EULAs). Lees de gebruikersovereenkomst (EULA's). This setup procedure will install proprietary software that is subject to licensing terms. Deze voorbereidingsprocedure zal propriëtaire software installeren waarop licentievoorwaarden van toepassing zijn. If you do not agree with the terms, the setup procedure cannot continue. Indien je niet akkoord gaat met deze voorwaarden kan de installatie niet doorgaan. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Deze voorbereidingsprocedure zal propriëtaire software installeren waarop licentievoorwaarden van toepassing zijn, om extra features aan te bieden en de gebruikerservaring te verbeteren. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Indien je de voorwaarden niet aanvaardt zal de propriëtaire software vervangen worden door opensource alternatieven. LicenseViewStep License Licentie 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 label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Diensten Login label for netinstall module, choose login manager Login Desktop label for netinstall module, choose desktop environment Desktop Communication label for netinstall module Communicatie Development label for netinstall module Ontwikkelen Office label for netinstall module Kantoor Multimedia label for netinstall module Multimedia Internet label for netinstall module Internet Theming label for netinstall module Thema Gaming label for netinstall module Spellen Utilities label for netinstall module Gereedschappen Applications Applicaties 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Huidig: After: Na: No EFI system partition configured Geen EFI systeempartitie geconfigureerd EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS Optie om GPT te gebruiken in BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. 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 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 StandardButtons &OK &OK &Yes &ja &No &Nee &Cancel &Afbreken &Close &Sluiten TrackingInstallJob Installation feedback Installatiefeedback Sending installation feedback. Installatiefeedback opsturen. Internal error in install-tracking. Interne fout in de installatie-tracking. HTTP request timed out. HTTP request is verlopen. 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 UmountJob Unmount file systems. Unmount bestandssystemen. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Als meer dan één persoon deze computer zal gebruiken, kan je meerdere accounts aanmaken na installatie.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Als meer dan één persoon deze computer zal gebruiken, kan je meerdere accounts aanmaken na installatie.</small> UsersQmlViewStep 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. 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 %1 support %1 ondersteuning About %1 setup Over %1 installatieprogramma. About %1 installer Over het %1 installatieprogramma WelcomeQmlViewStep Welcome Welkom WelcomeViewStep Welcome Welkom ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Configuratiefout No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Over Debug Fouten opsporen Show information about Calamares Show debug information Toon debug informatie finishedq Installation Completed Installatie Voltooid %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 is geïnstalleerd op je computer.<br/> Je mag nu opnieuw opstarten in je systeem, of de Live-omgeving blijven gebruiken. Close Installer Sluit Installatieprogramma Restart System Herstart Systeem <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Een logboek van de installatie is beschikbaar als installation.log in de gebruikersmap van de Live gebruiker<br/> Dit logboek is ook gekopieerd naar /var/log/installation.log van het doelsysteem.</p> finishedq@mobile Installation Completed Installatie Voltooid %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Talen</h1></br> De taalinstellingen bepalen de taal en karakterset voor sommige opdrachtsregelelementen. De huidige instelling is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Tijdinstellingen</h1></br> De systeemstijdinstellingen beïnvloeden de cijfer- en datumsformaat. De huidige instelling is <strong>%1</strong>. Back Terug keyboardq To activate keyboard preview, select a layout. Keyboard Model: Toetsenbord model: Layouts Indeling Type here to test your keyboard Typ hier om uw toetsenbord te testen Variants Varianten localeq Change Veranderen notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Dit zijn voorbeeld release-opmerkingen.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Dit voorbeeld QML bestand weergeeft opties in RichtText met Flickable inhoud.</p> <p>QML met RichText kan HTML-tags gebruiken. Flickable inhoud is handig voor touchscreens.</p> <p><b>Dit is vergedrukte tekst</b></p> <p><i>Dit is schuingedrukte tekst</i></p> <p><u>Dit is onderstreepte tekst</u></p> <p><center>Deze tekst zal worden gecentreerd.</center></p> <p><s>Dit is doorgestreepte teksts</s></p> <p>Code voorbeeld: <code>ls -l /home</code> </p> <p><b>Lijsten:</b></p> <ul> <li>Intel CPU systemen</li> <li>AMD CPU systemen</li> </ul> <p>De verticale scrollbalk is verstelbaar, huidige breedte ingesteld op 10.</p> Back Terug usersq Pick your user name and credentials to login and perform admin tasks Kies je gebruikersnaam en wachtwoord om in te loggen en administratieve taken uit te voeren What is your name? Wat is je naam? Your Full Name Volledige naam What name do you want to use to log in? Welke naam wil je gebruiken om in te loggen? Login Name Inlognaam If more than one person will use this computer, you can create multiple accounts after installation. Als meer dan één persoon deze computer zal gebruiken, kan je meerdere accounts aanmaken na installatie. Only lowercase letters, numbers, underscore and hyphen are allowed. Alleen kleine letters, nummerse en (laag) streepjes zijn toegestaan. root is not allowed as username. What is the name of this computer? Wat is de naam van deze computer? Computer Name Computer Naam This name will be used if you make the computer visible to others on a network. Deze naam zal worden gebruikt als u de computer zichtbaar maakt voor anderen op een netwerk. localhost is not allowed as hostname. Choose a password to keep your account safe. Kies een wachtwoord om uw account veilig te houden. Password Wachtwoord Repeat Password Herhaal wachtwoord Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Voer hetzelfde wachtwoord twee keer in, zodat het gecontroleerd kan worden op tikfouten. Een goed wachtwoord bevat een combinatie van letters, cijfers en leestekens, is ten minste acht tekens lang, en zou regelmatig moeten worden gewijzigd. Validate passwords quality Controleer wachtwoorden op gelijkheid When this box is checked, password-strength checking is done and you will not be able to use a weak password. Wanneer dit vakje is aangevinkt, wachtwoordssterkte zal worden gecontroleerd en je zal geen zwak wachtwoord kunnen gebruiken. Log in automatically without asking for the password Automatisch aanmelden zonder wachtwoord te vragen Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Hergebruik gebruikerswachtwoord als root (administratie) wachtwoord. Use the same password for the administrator account. Gebruik hetzelfde wachtwoord voor het administratoraccount. Choose a root password to keep your account safe. Kies een root (administratie) wachtwoord om je account veilig te houden. Root Password Root (Administratie) Wachtwoord Repeat Root Password Herhaal Root Wachtwoord Enter the same password twice, so that it can be checked for typing errors. Voer hetzelfde wachtwoord twee keer in, zodat het gecontroleerd kan worden op tikfouten. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <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> Support Ondersteuning Known issues Bekende problemen Release notes Aantekeningen bij deze versie Donate Doneren calamares-calamares-2d126ae/lang/calamares_oc.ts000066400000000000000000006030701430147706700217170ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> per %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;<br/> 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 Enregistrament d’aviada màger de %1 Boot Partition Particion d’aviada System Partition Particion sistèma Do not install a boot loader Installar pas lo gestionari d'aviada %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Pagina blanca Calamares::DebugWindow Form Formulari GlobalStorage JobQueue Modules Moduls Type: Tipe : none cap Interface: Interfàcia : Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Recargar fuèlh d’estil Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Informacions de desbugatge Calamares::ExecutionViewStep Set up Configurar Install Installar Calamares::FailJob Job failed (%1) Prètzfach fracassat (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Fach Calamares::NamedJob Example job (%1) Prètzfach d’exemple (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Executar la comanda « %1 ». Running command %1 %2 Execucion de la comanda %1 %2 Calamares::PythonJob Running %1 operation. Execucion de l’operacion %1 Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... Cargament... QML Step <i>%1</i>. Loading failed. Fracàs del cargament. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) (%n segonda) (%n segondas) System-requirements checking is complete. Calamares::ViewManager Setup Failed Configuracion fracassada Installation Failed Installacion fracassada Error Error &Yes &Ã’c &No &Non &Close &Tampar Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed Lançament de Calamares fracassat %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Contunhar la configuracion ? Continue with installation? Contunhar l’installacion ? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Configurar ara &Install now &Installar ara Go &back &Tornar &Set up &Configurar &Install &Installar Setup is complete. Close the setup program. Configuracion acabada. Tampatz lo programa de configuracion. The installation is complete. Close the installer. L’installacion es acabada. Tampatz l’installador. Cancel setup without changing the system. Anullar la configuracion sens cambiar lo sistèma. Cancel installation without changing the system. Anullar l’installacion sens cambiar lo sistèma. &Next &Seguent &Back &Tornar &Done &Acabat &Cancel &Anullar Cancel setup? Anullar la configuracion ? Cancel installation? Anullar l’installacion ? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program Programa de configuracion %1 %1 Installer Installador de %1 ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... Obtencion de las informacions del sistèma... ChoicePage Form Formulari Select storage de&vice: Current: Actual : After: Aprèp : <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: Emplaçament del gestionari d'aviada : <strong>Select a partition to install on</strong> <strong>Seleccionar una particion ont installar</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: Particion sistèma EFI : This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Seleccion dels paquets Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>La benvenguda al programa d’installacion de Calamares per %1</h1> <h1>Welcome to %1 setup</h1> <h1>La benvenguda a la configuracion de %1</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>La benvenguda a l’installador de Calamares per %1</h1> <h1>Welcome to the %1 installer</h1> <h1>La benvenguda a l’installador de %1</h1> Your username is too long. Vòstre nom d’utilizaire es tròp long. '%1' is not allowed as username. « %1 » es pas permés coma nom d’utilizaire. Your username must start with a lowercase letter or underscore. Vòstre nom d’utilizaire deu començar per una minuscula o un jonhent bas. Only lowercase letters, numbers, underscore and hyphen are allowed. Son solament permeses las letras minusculas, nombres, jonhents basses e los tirets. Your hostname is too short. Vòstre nom d’òste es tròp cort. Your hostname is too long. Vòstre nom d’òste es tròp long. '%1' is not allowed as hostname. « %1 » es pas permés coma nom d’òste. Only letters, numbers, underscore and hyphen are allowed. Son solament permeses las letras, nombres, jonhents basses e los tirets. Your passwords do not match! Los senhals correspondon pas ! OK! D’acòrd ! Setup Failed Configuracion fracassada Installation Failed Installacion fracassada The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Configuracion acabada Installation Complete Installacion acabada The setup of %1 is complete. La configuracion de %1 es acabada. The installation of %1 is complete. L’installacion de %1 es acabada. Package Selection Seleccion dels paquets Please pick a product from the list. The selected product will be installed. Packages Paquets Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Crear una particion Si&ze: Ta&lha : MiB MiO Partition &Type: &Tipe de particion : Primar&y Primàr&ia E&xtended E&spandida Fi&le System: Sistèma de fic&hièr : LVM LV name &Mount Point: Punt de &montatge : Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Crear l’utilizaire %1 Create user <strong>%1</strong>. Crear utilizaire <strong>%1</strong>. Preserving home directory Servar lo repertòri home Creating user %1 Creacion de l’utilizaire %1 Configuring user %1 Configuracion de l’utilizaire %1 Setting file permissions Definicion de las autorizacions fichièr CreateVolumeGroupDialog Create Volume Group Crear un grop de volum CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Suprimir la particion %1. Delete partition <strong>%1</strong>. Deleting partition %1. Supression de la particion %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep &Gardar Format Format Warning: Formatting the partition will erase all existing data. &Mount Point: Punt de &montatge : Si&ze: Ta&lha : MiB MiO Fi&le System: Sistèma de fic&hièr : Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formulari En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Detalhs : Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form Formulari &Restart now &Reaviar ara <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish Terminar FinishedViewStep Finish Terminar FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source es brancat a una alimentacion electrica The system is not plugged in to a power source. Lo sistèma es pas brancat a una alimentacion electrica. is connected to the Internet es connectat a l’Internet The system is not connected to the Internet. Lo sistèma es pas connectat a l’Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole pas installada Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Escript KeyboardQmlViewStep Keyboard Clavièr KeyboardViewStep Keyboard Clavièr LCLocaleDialog System locale setting Paramètres de regionalizacion del sistèma The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &Anullar &OK &D’acòrdi LOSHJob Configuring encrypted swap. No target system available. Cap de sistèma cibla pas disponible. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formulari <h1>License Agreement</h1> <h1>Acòrd de licéncia</h1> I accept the terms and conditions above. Accèpti los tèrmes e las condicion aquí dessús. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licéncia LicenseWidget URL: %1 URL : %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Fichièr : %1 Hide license text Amagar lo tèxte de licéncia Show the license text Mostrar lo tèxte de licéncia Open license agreement in browser. Dobrir l’acòrd de licéncia dins lo navegador. LocalePage Region: Region : Zone: Zòna ; &Change... &Cambiar... LocaleQmlViewStep Location Emplaçament LocaleTests Quit Quitar LocaleViewStep Location Emplaçament LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error Error de configuracion No root mount point is set for MachineId. Map Timezone: %1 Fus orari : %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Seleccion dels paquets Office software Office package Browser software Browser package Percórrer lo paquet Web browser Navegador web Kernel label for netinstall module, Linux kernel Nuclèu Services label for netinstall module, system services Servicis Login label for netinstall module, choose login manager Connexion Desktop label for netinstall module, choose desktop environment Burèu Communication label for netinstall module Comunicacion Development label for netinstall module Desvolopament Office label for netinstall module Burotica Multimedia label for netinstall module Multimèdia Internet label for netinstall module Internet Theming label for netinstall module Personalizacion Gaming label for netinstall module Jòc Utilities label for netinstall module Utilitaris Applications Aplicacions NotesQmlViewStep Notes Nòtas OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Configuracion OEM Set the OEM Batch Identifier to <code>%1</code>. Offline Select your preferred Region, or use the default settings. Timezone: %1 Fus orari : %1 Select your preferred Zone within your Region. Zones Zònas You can fine-tune Language and Locale settings below. PWQ Password is too short Lo senhal es tròp cort Password is too long Lo senhal es tròp long Password is too weak Lo senhal es tròp feble Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains too few digits The password contains too few uppercase letters The password contains fewer than %n lowercase letters The password contains too few lowercase letters The password contains too few non-alphanumeric characters The password is too short Lo senhal es tròp cort The password does not contain enough character classes The password contains too many same characters consecutively The password contains too many characters of the same class consecutively The password contains fewer than %n digits The password contains fewer than %n uppercase letters The password contains fewer than %n non-alphanumeric characters The password is shorter than %n characters The password is a rotated version of the previous one The password contains fewer than %n character classes The password contains more than %n same characters consecutively The password contains more than %n characters of the same class consecutively The password contains monotonic sequence longer than %n characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Paramètre desconegut - %1 Unknown setting Paramètre desconegut Bad integer value of setting - %1 Bad integer value Marrida valor d’entièr Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Error desconeguda Password is empty Lo senhal es void PackageChooserPage Form Formulari Product Name TextLabel Long Product Description Package Selection Seleccion dels paquets Please pick a product from the list. The selected product will be installed. PackageModel Name Nom Description Descripcion Page_Keyboard Form Formulari Keyboard Model: Modèl de clavièr : Type here to test your keyboard Picatz aicí per ensajar lo clavièr Page_UserSetup Form Formulari What is your name? Cossí vos dison ? Your Full Name Vòstre nom complèt What name do you want to use to log in? Qual nom volètz utilizar per vos connectar ? login identificant What is the name of this computer? Cossí s’apèla aqueste ordenador ? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Nom de l’ordenador Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Senhal Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Home Boot Boot EFI system Sistèma EFI Swap New partition for %1 New partition Particion novèla %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Espaci disponible New partition Particion novèla Name Nom File System File System Label Mount Point Punt de montatge Size Talha PartitionPage Form Formulari Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete &Suprimir New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Obtencion de las informacions del sistèma... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Actual : After: Aprèp : No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form 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. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) %1 (%2) unknown desconegut extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Formulari Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Particion sistèma EFI : Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Error intèrna Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Definir lo senhal per l’utilizaire %1 Setting password for user %1. Definicion de senhal per l’utilizaire %1 Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. Definicion del senhal per l’utilizaire %1 impossibla. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Fus orari definit a %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Definicion impossibla de la zòna orària. Link creation failed, target: %1; link name: %2 Cannot set timezone, Definicion impossibla de la zòna orària. Cannot open /etc/timezone for writing Dubertura impossibla en escritura de /etc/timezone SetupGroupsJob Preparing groups. Preparacion dels grops. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Configurar l’utilizaire <pre>sudo</pre>. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK &D’acòrdi &Yes &Ã’c &No &Non &Cancel &Anullar &Close &Tampar TrackingInstallJob Installation feedback Comentaris d’installacion Sending installation feedback. Mandadís dels comentaris d’installacion. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Formulari Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. Cap de sistèma cibla pas disponible. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users Utilizaires UsersViewStep Users Utilizaires VariantModel Key Column header for key/value Clau Value Column header for key/value Valor VolumeGroupBaseDialog Create Volume Group Crear un grop de volum List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB MiO Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Formulari Select application and system language Open donations website &Donate &Donar Open help and support website &Support &Assisténcia Open issues and bug-tracking website &Known issues &Problèmas coneguts Open release notes website &Release notes %1 support Assisténcia %1 About %1 setup About %1 installer WelcomeQmlViewStep Welcome La benvenguda WelcomeViewStep Welcome La benvenguda ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Error de configuracion No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About A prepaus Debug Show information about Calamares Show debug information Afichar las informacions de desbugatge finishedq Installation Completed Installacion acabada %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Tampar l’installador Restart System Reaviar lo sistèma <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed Installacion acabada %1 has been installed on your computer.<br/> You may now restart your device. Close Tampar Restart Reaviar i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Lengas</h1> </br> Los paramètres de lingüistics del sistèma afèctan la lenga, lo jòc de caractèrs per d’unes elements d’interfàcias de linha de comanda. Lo parametratge actual es <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back Tornar keyboardq To activate keyboard preview, select a layout. Keyboard Model: Modèl de clavièr : Layouts Agençament Type here to test your keyboard Picatz aicí per ensajar lo clavièr Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Installacion minimala Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back Tornar usersq Pick your user name and credentials to login and perform admin tasks What is your name? Cossí vos dison ? Your Full Name Vòstre nom complèt What name do you want to use to log in? Qual nom volètz utilizar per vos connectar ? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. Son solament permeses las letras, nombres, jonhents basses e los tirets. root is not allowed as username. What is the name of this computer? Cossí s’apèla aqueste ordenador ? Computer Name Nom de l’ordenador This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Senhal Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Assisténcia Known issues Problèmas coneguts Release notes Donate Donar calamares-calamares-2d126ae/lang/calamares_pl.ts000066400000000000000000006543661430147706700217470ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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) Zadanie nie powiodÅ‚o siÄ™ (%1) Programmed job failure was explicitly requested. Wyraźnie zażądano zaprogramowanej awarii zadania. Calamares::JobThread Done UkoÅ„czono Calamares::NamedJob Example job (%1) PrzykÅ‚adowe zadanie (%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 ... Åadowanie... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). Oczekiwanie na %n moduÅ‚. Oczekiwanie na %n moduÅ‚y. Oczekiwanie na %n modułów. Oczekiwanie na %n moduÅ‚(y). (%n second(s)) (%n sekunda) (%n sekundy) (%n sekund) (%n sekund) System-requirements checking is complete. Sprawdzanie wymagaÅ„ systemowych zostaÅ‚o zakoÅ„czone. Calamares::ViewManager Setup Failed Nieudane ustawianie Installation Failed WystÄ…piÅ‚ błąd instalacji Error Błąd &Yes &Tak &No &Nie &Close Zam&knij Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed Błąd inicjacji programu Calamares %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 nie może zostać zainstalowany. Calamares nie mógÅ‚ wczytać wszystkich skonfigurowanych modułów. Jest to problem ze sposobem, w jaki Calamares jest używany przez dystrybucjÄ™. <br/>The following modules could not be loaded: <br/>NastÄ™pujÄ…ce moduÅ‚y nie mogÅ‚y zostać wczytane: Continue with setup? Kontynuować z programem instalacyjnym? Continue with installation? Kontynuować instalacjÄ™? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Program instalacyjny %1 dokona zmian na dysku, aby skonfigurować %2.<br/><strong>Nie bÄ™dzie można cofnąć tych zmian.</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 U&staw teraz &Install now &Zainstaluj teraz Go &back &Cofnij siÄ™ &Set up U&staw &Install Za&instaluj Setup is complete. Close the setup program. Konfiguracja jest zakoÅ„czona. Zamknij program instalacyjny. The installation is complete. Close the installer. Instalacja ukoÅ„czona pomyÅ›lnie. Możesz zamknąć instalator. Cancel setup without changing the system. Anuluj konfiguracjÄ™ bez zmiany w systemie. 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. Czy naprawdÄ™ chcesz anulować bieżący proces konfiguracji? Program instalacyjny zostanie zamkniÄ™ty, a wszystkie zmiany zostanÄ… utracone. 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 Program instalacyjny %1 Installer Instalator %1 ChangeFilesystemLabelJob Set filesystem label on %1. Ustaw etykietÄ™ systemu plików na %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. Instalator nie mógÅ‚ zaktualizować tablicy partycji na dysku '%1'. CheckerContainer Gathering system information... Zbieranie informacji o systemie... 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 Successfully unmounted %1. PomyÅ›lnie odmontowano %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Wyczyść zamontowania dla operacji partycjonowania na %1 Clearing mounts for partitioning operations on %1. Czyszczenie montowaÅ„ dla operacji partycjonowania na %1. Cleared all mounts for %1 Wyczyszczono wszystkie zamontowania dla %1 ClearTempMountsJob Clear all temporary mounts. Wyczyść wszystkie tymczasowe montowania. Clearing all temporary mounts. Usuwanie wszystkich tymczasowych punktów montowania. 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. '%1' nie może zostać użyte jako nazwa użytkownika. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Twoja nazwa komputera jest za krótka. Your hostname is too long. Twoja nazwa komputera jest za dÅ‚uga. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! Twoje hasÅ‚a nie sÄ… zgodne! OK! OK! Setup Failed Nieudane ustawianie Installation Failed WystÄ…piÅ‚ błąd instalacji The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Ustawianie ukoÅ„czone Installation Complete Instalacja zakoÅ„czona The setup of %1 is complete. Ustawianie %1 jest ukoÅ„czone. The installation of %1 is complete. Instalacja %1 ukoÅ„czyÅ‚a siÄ™ pomyÅ›lnie. Package Selection Wybór Pakietów Please pick a product from the list. The selected product will be installed. Packages Pakiety Install option: <strong>%1</strong> None Summary Podsumowanie This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. To jest podsumowanie czynnoÅ›ci, które zostanÄ… wykonane po rozpoczÄ™ciu przez Ciebie instalacji. ContextualProcessJob Contextual Processes Job DziaÅ‚ania procesów kontekstualnych CreatePartitionDialog Create a Partition Utwórz partycjÄ™ Si&ze: Ro&zmiar: MiB MB Partition &Type: Rodzaj par&tycji: Primar&y E&xtended Ro&zszerzona Fi&le System: System p&lików: LVM LV name Nazwa LV LVM &Mount Point: Punkt &montowania: Flags: Flagi: Label for the filesystem Etykieta dla systemu plików FS Label: En&crypt Zaszy%fruj Logical Logiczna Primary Podstawowa GPT GPT Mountpoint already in use. Please select another one. Punkt montowania jest już używany. ProszÄ™ wybrać inny. Mountpoint must start with a <tt>/</tt>. Punkt montowania musi siÄ™ zaczynać od <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Tworzenie nowej partycji %1 na %2. The installer failed to create partition on disk '%1'. Instalator nie mógÅ‚ utworzyć partycji na dysku '%1'. 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 Utwórz grupÄ™ woluminów 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 Con&tent: &Keep &Zachowaj Format Sformatuj Warning: Formatting the partition will erase all existing data. Ostrzeżenie: Sformatowanie partycji wymaże wszystkie istniejÄ…ce na niej dane. &Mount Point: Punkt &montowania: Si&ze: Ro&zmiar: MiB MB Fi&le System: System p&lików: Flags: Flagi: Label for the filesystem Etykieta dla systemu plików FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formularz En&crypt system Zaszy&fruj system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase HasÅ‚o Confirm passphrase Potwierdź hasÅ‚o Please enter the same passphrase in both boxes. Użyj tego samego hasÅ‚a w obu polach. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Ustaw informacje partycji Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Zainstaluj %1 na <strong>nowej</strong> partycji systemowej %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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. <h1>Wszystko gotowe.</h1><br/>%1 zostaÅ‚ skonfigurowany na twoim komputerze.<br/>Możesz teraz zacząć używać swojego nowego systemu. <html><head/><body><p>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>Gdy to pole jest zaznaczone, system bÄ™dzie uruchamiany ponownie natychmiast po klikniÄ™ciu na <span style="font-style:italic;">UkoÅ„czone</span> lub zamkniÄ™ciu programu instalacyjnego.</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> <html><head/><body><p>Gdy to pole jest zaznaczone, system bÄ™dzie uruchamiany ponownie natychmiast po klikniÄ™ciu na <span style="font-style:italic;">UkoÅ„czone</span> lub zamkniÄ™ciu programu instalacyjnego.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Instalacja nie powiodÅ‚a siÄ™</h1><br/>%1 nie zostaÅ‚ zainstalowany na twoim komputerze.<br/>Komunikat o błędzie: %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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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. Nie ma wystarczajÄ…cej iloÅ›ci miejsca na dysku. Wymagane jest przynajmniej %1 GiB. has at least %1 GiB working memory ma przynajmniej %1 GiB pamiÄ™ci roboczej 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. Program instalacyjny nie jest uruchomiony z prawami administratora. 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. Ekran jest zbyt maÅ‚y, aby wyÅ›wietlić program konfiguracyjny. 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>. Nie można utworzyć katalogów <code>%1</code>. Could not open file <code>%1</code>. Nie można otworzyć pliku <code>%1</code>. Could not write to file <code>%1</code>. Nie można zapisać do pliku <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 LOSHJob Configuring encrypted swap. Konfigurowanie zaszyfrowanej przestrzeni wymiany. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formularz <h1>License Agreement</h1> I accept the terms and conditions above. AkceptujÄ™ powyższe warunki korzystania. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 Ukryj tekst licencji 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 Strefa czasowa: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Wybór pakietów Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications NotesQmlViewStep Notes OEMPage Ba&tch: Par&tia: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Wprowadź tutaj identyfikator partii. Zostanie on zapisany w systemie docelowym.</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 Strefa czasowa: %1 Select your preferred Zone within your Region. Zones You can fine-tune Language and Locale settings below. PWQ Password is too short HasÅ‚o jest zbyt krótkie Password is too long HasÅ‚o jest zbyt dÅ‚ugie Password is too weak HasÅ‚o jest zbyt sÅ‚abe Memory allocation error when setting '%1' WystÄ…piÅ‚ błąd przydzielania pamiÄ™ci przy ustawieniu '%1' Memory allocation error Błąd przydzielania pamiÄ™ci The password is the same as the old one HasÅ‚o jest takie samo jak poprzednie The password is a palindrome HasÅ‚o jest palindromem The password differs with case changes only HasÅ‚a różniÄ… siÄ™ tylko wielkoÅ›ciÄ… znaków The password is too similar to the old one HasÅ‚o jest zbyt podobne do poprzedniego The password contains the user name in some form HasÅ‚o zawiera nazwÄ™ użytkownika The password contains words from the real name of the user in some form HasÅ‚o zawiera fragment peÅ‚nej nazwy użytkownika The password contains forbidden words in some form HasÅ‚o zawiera jeden z niedozwolonych wyrazów The password contains 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 HasÅ‚o skÅ‚ada siÄ™ z mniej niż %1 maÅ‚ej litery HasÅ‚o skÅ‚ada siÄ™ z mniej niż %1 maÅ‚ych liter HasÅ‚o skÅ‚ada siÄ™ z mniej niż %1 maÅ‚ych liter HasÅ‚o skÅ‚ada siÄ™ z mniej niż %1 maÅ‚ych liter The password contains too few lowercase letters HasÅ‚o zawiera zbyt maÅ‚o maÅ‚ych liter The password contains 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 HasÅ‚o jest puste PackageChooserPage Form Formularz Product Name Nazwa produktu TextLabel EtykietaTekstowa Long Product Description Package Selection Wybór Pakietów Please pick a product from the list. The selected product will be installed. 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 Twoja PeÅ‚ne ImiÄ™ What name do you want to use to log in? Jakiego imienia chcesz używać do logowania siÄ™? login 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 Nazwa Komputera Choose a password to keep your account safe. Wybierz hasÅ‚o, aby chronić swoje konto. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Wpisz swoje hasÅ‚o dwa razy, aby mieć pewność, że uniknÄ…Å‚eÅ› literówek. Dobre hasÅ‚o powinno zawierać mieszaninÄ™ liter, cyfr, znaków specjalnych; mieć przynajmniej 8 znaków i być regularnie zmieniane.</small> Password HasÅ‚o Repeat Password Powtórz HasÅ‚o When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Zaloguj automatycznie bez proszenia o hasÅ‚o. Use the same password for the administrator account. Użyj tego samego hasÅ‚a dla konta administratora. Choose a password for the administrator account. Wybierz hasÅ‚o do konta administratora. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Wpisz to samo hasÅ‚o dwa razy, aby mieć pewność, że uniknÄ…Å‚eÅ› literówek.</small> 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 Etykieta Systemu Plików 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Bieżący: After: Po: No EFI system partition configured Nie skonfigurowano partycji systemowej EFI EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. System plików musi zostać zamontowany w <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted Niezaszyfrowana partycja rozruchowa A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Oddzielna partycja rozruchowa zostaÅ‚a skonfigurowana razem z zaszyfrowanÄ… partycjÄ… roota, ale partycja rozruchowa nie jest szyfrowana.<br/><br/>Nie jest to najbezpieczniejsze rozwiÄ…zanie, ponieważ ważne pliki systemowe znajdujÄ… siÄ™ na niezaszyfrowanej partycji.<br/>Możesz kontynuować, ale odblokowywanie systemu nastÄ…pi później, w trakcie uruchamiania.<br/>Aby zaszyfrować partycjÄ™ rozruchowÄ…, wróć i utwórz jÄ… ponownie zaznaczajÄ…c opcjÄ™ <strong>Szyfruj</strong> w oknie tworzenia partycji. has at least one disk device available. jest dostÄ™pne co najmniej jedno urzÄ…dzenie dyskowe. 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. ProszÄ™ wybrać wyglÄ…d i styl dla pulpitu KDE Plazma. Możesz również pominąć ten krok i skonfigurować je po zainstalowaniu systemu. KlikniÄ™cie na wybranym wyglÄ…dzie i stylu spowoduje wyÅ›wietlenie ich podglÄ…du na żywo. Please choose a 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 Plik nie zostaÅ‚ znaleziony Path <pre>%1</pre> must be an absolute path. Directory not found Katalog nie zostaÅ‚ znaleziony Could not create new random file <pre>%1</pre>. No product Brak produktu 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 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 StandardButtons &OK &OK &Yes &Tak &No &Nie &Cancel &Anuluj &Close Zam&knij TrackingInstallJob Installation feedback Informacja zwrotna o instalacji Sending installation feedback. WysyÅ‚anie informacji zwrotnej o instalacji. Internal error in install-tracking. Błąd wewnÄ™trzny Å›ledzenia instalacji. HTTP request timed out. Wyczerpano limit czasu żądania HTTP. 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 UmountJob Unmount file systems. Odmontuj systemy plików. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>JeÅ›li z tego komputera bÄ™dzie korzystać wiÄ™cej niż jedna osoba, po skonfigurowaniu można utworzyć wiele kont.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>JeÅ›li z tego komputera bÄ™dzie korzystać wiÄ™cej niż jedna osoba, po instalacji można utworzyć wiele kont.</small> UsersQmlViewStep Users Użytkownicy UsersViewStep Users Użytkownicy VariantModel Key Column header for key/value Klucz Value Column header for key/value Wartość VolumeGroupBaseDialog Create Volume Group Utwórz grupÄ™ woluminów 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 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 %1 support Wsparcie %1 About %1 setup Informacje o konfiguracji %1 About %1 installer O instalatorze %1 WelcomeQmlViewStep Welcome Witamy WelcomeViewStep Welcome Witamy ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Błąd konfiguracji No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About O nas Debug Debug Show information about Calamares Show debug information Pokaż informacje debugowania finishedq Installation Completed Instalacja zostaÅ‚a zakoÅ„czona %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Zamknij instalator Restart System Uruchom ponownie system <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed Instalacja zostaÅ‚a zakoÅ„czona %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back Wstecz keyboardq To activate keyboard preview, select a layout. Keyboard Model: Model klawiatury: Layouts Type here to test your keyboard Napisz coÅ› tutaj, aby sprawdzić swojÄ… klawiaturÄ™ Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back Wstecz usersq Pick your user name and credentials to login and perform admin tasks What is your name? Jak siÄ™ nazywasz? Your Full Name Twoja PeÅ‚ne ImiÄ™ What name do you want to use to log in? Jakiego imienia chcesz używać do logowania siÄ™? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Jaka jest nazwa tego komputera? Computer Name Nazwa Komputera This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Wybierz hasÅ‚o, aby chronić swoje konto. Password HasÅ‚o Repeat Password Powtórz HasÅ‚o Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Użyj tego samego hasÅ‚a dla konta administratora. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Witaj w instalatorze %1<quote>%2</quote></h3> <p>Ten program zapyta ciÄ™ o kilka rzeczy i ustawi %1 na twoim komputerze.</p> Support Wsparcie Known issues Znane problemy Release notes Informacje o wydaniu Donate Dotacje calamares-calamares-2d126ae/lang/calamares_pt_BR.ts000066400000000000000000007175711430147706700223400ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> para %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. 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 por <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Direitos Autorais %1-%2 %3 &lt;%4&gt;<br/> 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 inicialização, como o <strong>GRUB</strong>, no começo de uma partição ou no <strong>Master Boot Record</strong>, perto do começo da tabela de partições (recomendado). Esse processo é automático, a não ser que você escolha o particionamento manual, onde você deverá configurá-lo manualmente. BootLoaderModel Master Boot Record of %1 Master Boot Record de %1 Boot Partition Partição de Boot System Partition Partição de Sistema Do not install a boot loader Não instalar um gerenciador de inicialização %1 (%2) %1 (%2) 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. Esperando por %n módulos. (%n second(s)) (%n segundo) (%n segundos) (%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 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 internet. Install log posted to %1 Link copied to clipboard Registro de instalação postado em %1 Link copiado para a área de transferência Calamares Initialization Failed Falha na inicialização do Calamares %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 não pôde ser instalado. O Calamares não conseguiu carregar todos os módulos configurados. Este é um problema com o modo em que o Calamares está sendo utilizado pela distribuição. <br/>The following modules could not be loaded: <br/>Os seguintes módulos não puderam ser carregados: Continue with setup? Continuar com configuração? Continue with installation? Continuar com a instalação? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> O programa de configuração %1 está prestes a fazer mudanças no seu disco de modo a configurar %2.<br/><strong>Você não será capaz de desfazer estas mudanças.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> O instalador %1 está prestes a fazer alterações no disco a fim de instalar %2.<br/><strong>Você não será capaz de desfazer estas mudanças.</strong> &Set up now &Configurar agora &Install now &Instalar agora Go &back &Voltar &Set up &Configurar &Install &Instalar Setup is complete. Close the setup program. A configuração está completa. Feche o programa de configuração. The installation is complete. Close the installer. A instalação está completa. Feche o instalador. Cancel setup without changing the system. Cancelar configuração sem alterar o sistema. Cancel installation without changing the system. Cancelar instalação sem modificar o sistema. &Next &Próximo &Back &Voltar &Done &Concluído &Cancel &Cancelar Cancel setup? Cancelar a configuração? Cancel installation? Cancelar a instalação? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Você realmente quer cancelar o processo atual de configuração? O programa de configuração será fechado e todas as mudanças serão perdidas. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Você deseja realmente cancelar a instalação atual? O instalador será fechado e todas as alterações serão perdidas. 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. Definir etiqueta do sistema de arquivos em %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. Definir etiqueta do sistema de arquivos <strong>%1</strong> para partição <strong>%2</strong>. The installer failed to update partition table on disk '%1'. O instalador falhou ao atualizar a tabela de partições no disco '%1'. CheckerContainer Gathering system information... Coletando informações do sistema... 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 presentes atualmente 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 Successfully unmounted %1. %1 desmontado com sucesso. Successfully disabled swap %1. Swap %1 desativada com sucesso. Successfully cleared swap %1. Swap %1 limpa com sucesso. Successfully closed mapper device %1. Dispositivo de mapeamento %1 fechado com sucesso. Successfully disabled volume group %1. Grupo de volume %1 desativado com sucesso. Clear mounts for partitioning operations on %1 Limpar as montagens para as operações nas partições em %1 Clearing mounts for partitioning operations on %1. Limpando montagens para operações de particionamento em %1. Cleared all mounts for %1 Todos os pontos de montagem para %1 foram limpos ClearTempMountsJob Clear all temporary mounts. Limpar pontos de montagens temporários. Clearing all temporary mounts. Limpando todos os pontos de montagem temporários. 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! 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. Packages Pacotes Install option: <strong>%1</strong> Instalar opção: <strong>%1</strong> None Nenhum Summary Resumo This is an overview of what will happen once you start the setup procedure. Esta é uma visão geral do que acontecerá quando você iniciar o procedimento de configuração. This is an overview of what will happen once you start the install procedure. Este é um resumo do que acontecerá assim que o processo de instalação for iniciado. ContextualProcessJob Contextual Processes Job Tarefa de Processos Contextuais CreatePartitionDialog Create a Partition Criar uma partição Si&ze: &Tamanho: MiB MiB Partition &Type: &Tipo da partição: Primar&y Primár&ia E&xtended E&xtendida Fi&le System: Sistema de Arquivos: LVM LV name Nome do LVM LV &Mount Point: Ponto de Montagem: Flags: Marcadores: Label for the filesystem Etiqueta para o sistema de arquivos FS Label: Etiqueta do FS: En&crypt &Criptografar Logical Lógica Primary Primária GPT GPT Mountpoint already in use. Please select another one. Ponto de montagem já em uso. Por favor, selecione outro. Mountpoint must start with a <tt>/</tt>. O ponto de montagem deve começar com um <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Criar nova partição de %1MiB em %3 (%2) com entradas %4. Create new %1MiB partition on %3 (%2). Criar nova partição de %1MiB em %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Criar nova partição de %2MiB em %4 (%3) com o sistema de arquivos %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Criar nova partição de <strong>%1MiB</strong> em <strong>%3</strong> (%2) com entradas <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Criar nova partição de <strong>%1MiB</strong> em <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Criar nova partição de <strong>%2MiB</strong> em <strong>%4</strong> (%3) com o sistema de arquivos <strong>%1</strong>. Creating new %1 partition on %2. Criando nova partição %1 em %2. The installer failed to create partition on disk '%1'. O instalador não conseguiu criar partições no disco '%1'. 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 Con&tent: Con&teúdo: &Keep &Manter Format Formatar Warning: Formatting the partition will erase all existing data. Atenção: A formatação apagará todos os dados existentes. &Mount Point: Ponto de &Montagem: Si&ze: &Tamanho: MiB MiB Fi&le System: &Sistema de Arquivos: Flags: Marcadores: Label for the filesystem Etiqueta para o sistema de arquivos FS Label: Etiqueta do FS: Passphrase for existing partition Frase-chave para partição existente Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. A partição %1 não pôde ser descriptografada com a frase-chave fornecida.<br/><br/>Edite a partição novamente e forneça a frase-chave correta ou a exclua e crie uma nova partição criptografada. EncryptWidget Form Formulário En&crypt system &Criptografar sistema Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Seu sistema parece não suportar encriptação bem o suficiente para encriptar o sistema inteiro. Você pode habilitar a encriptação, mas o desempenho pode ser ruim. Passphrase Frase-chave Confirm passphrase Confirme a frase-chave Please enter the same passphrase in both boxes. Por favor, insira a mesma frase-chave nos dois campos. ErrorDialog Details: Detalhes: Would you like to paste the install log to the web? Deseja colar o registro de instalação na internet? FillGlobalStorageJob Set partition information Definir informações da partição Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Instalar %1 em <strong>nova</strong> partição do sistema %2 com recursos <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Instalar %1 em <strong>nova</strong> partição %2 do sistema. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Configurando swap encriptada. No target system available. Não há um sistema alvo disponível. No rootMountPoint is set. Nenhum rootMountPoint está definido. No configFilePath is set. Nenhum configFilePath está definido. LicensePage Form Formulário <h1>License Agreement</h1> <h1>Contrato de Licença</h1> I accept the terms and conditions above. Aceito os termos e condições acima. Please review the End User License Agreements (EULAs). Revise o contrato de licença de usuário final (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Este procedimento de configuração irá instalar software proprietário que está sujeito aos termos de licença. If you do not agree with the terms, the setup procedure cannot continue. Se não concordar com os termos, o procedimento de configuração não poderá continuar. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Este procedimento de configuração pode instalar software proprietário sujeito a termos de licenciamento para fornecer recursos adicionais e aprimorar a experiência do usuário. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Se você não concordar com os termos, o software proprietário não será instalado e serão utilizadas as alternativas de código aberto. 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 Sair 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 de internet Kernel label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Seriços Login label for netinstall module, choose login manager Login Desktop label for netinstall module, choose desktop environment Ãrea de trabalho Communication label for netinstall module Comunicação Development label for netinstall module Desenvolvimento Office label for netinstall module Escritório Multimedia label for netinstall module Multimídia Internet label for netinstall module Internet Theming label for netinstall module Temas Gaming label for netinstall module Jogos Utilities label for netinstall module Utilitários Applications Aplicações 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. Selecione sua região preferida ou use as configurações predefinidas. Timezone: %1 Fuso horário: %1 Select your preferred Zone within your Region. Selecione a sua Zona preferida dentro da sua Região. Zones Zonas You can fine-tune Language and Locale settings below. Você pode ajustar as configurações de Idioma e Localidade abaixo. PWQ Password is too short A senha é muito curta Password is too long A senha é muito longa Password is too weak A senha é muito fraca Memory allocation error when setting '%1' Erro de alocação de memória ao definir '%1' 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 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 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 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 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 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 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 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 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 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. 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 Etiqueta do Sistema de Arquivos 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 Unsafe partition actions are enabled. As ações de partição não seguras estão habilitadas. Partitioning is configured to <b>always</b> fail. O particionamento está configurado para <b>sempre</b> falhar. No partitions will be changed. Nenhuma partição será modificada. Current: Atualmente: After: Depois: No EFI system partition configured Nenhuma partição de sistema EFI configurada EFI system partition configured incorrectly Partição EFI do sistema configurada incorretamente An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. Uma partição de sistema EFI é necessária para iniciar o %1. <br/><br/>Para configurar uma partição de sistema EFI, volte atrás e selecione ou crie um sistema de arquivos adequado. The filesystem must be mounted on <strong>%1</strong>. O sistema de arquivos deve ser montado em <strong>%1</strong>. The filesystem must have type FAT32. O sistema de arquivos deve ter o tipo FAT32. The filesystem must be at least %1 MiB in size. O sistema de arquivos deve ter pelo menos %1 MiB de tamanho. The filesystem must have flag <strong>%1</strong> set. O sistema de arquivos deve ter o marcador %1 definido. You can continue without setting up an EFI system partition but your system may fail to start. Você pode continuar sem configurar uma partição de sistema EFI, mas seu sistema pode não iniciar. Option to use GPT on BIOS Opção para usar GPT no BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Uma tabela de partições GPT é a melhor opção para todos os sistemas. Este instalador suporta tal configuração para sistemas BIOS também.<br/><br/>Para configurar uma tabela de partições GPT no BIOS, (caso não tenha sido feito ainda) volte atrás e defina a tabela de partições como GPT, depois crie uma partição sem formatação de 8 MB com o marcador <strong>%2</strong> ativado.<br/><br/>Uma partição não formatada de 8 MB é necessária para iniciar %1 em um sistema BIOS com GPT. Boot partition not encrypted Partição de inicialização não criptografada A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Uma partição de inicialização separada foi configurada juntamente com uma partição raiz criptografada, mas a partição de inicialização não é criptografada.<br/><br/>Há preocupações de segurança quanto a esse tipo de configuração, porque arquivos de sistema importantes são mantidos em uma partição não criptografada.<br/>Você pode continuar se quiser, mas o desbloqueio do sistema de arquivos acontecerá mais tarde durante a inicialização do sistema.<br/>Para criptografar a partição de inicialização, volte e recrie-a, selecionando <strong>Criptografar</strong> na janela de criação da partição. has at least one disk device available. tem pelo menos um dispositivo de disco disponível. There are no partitions to install on. Não há partições para instalar. 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 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 StandardButtons &OK &OK &Yes &Sim &No &Não &Cancel &Cancelar &Close &Fechar TrackingInstallJob Installation feedback Feedback da instalação Sending installation feedback. Enviando feedback da instalação. Internal error in install-tracking. Erro interno no install-tracking. HTTP request timed out. A solicitação HTTP expirou. 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 UmountJob Unmount file systems. Desmontar os sistemas de arquivos. No target system available. Não há um sistema alvo disponível. No rootMountPoint is set. Nenhum rootMountPoint está definido. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se mais de uma pessoa for utilizar este computador, você poderá criar múltiplas contas após terminar a configuração.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se mais de uma pessoa for utilizar este computador, você poderá criar múltiplas contas após terminar de instalar.</small> UsersQmlViewStep 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 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 website com as notas de lançamento &Release notes &Notas de lançamento %1 support %1 suporte About %1 setup Sobre a configuração de %1 About %1 installer Sobre o instalador %1 WelcomeQmlViewStep Welcome Bem-vindo WelcomeViewStep Welcome Bem-vindo ZfsJob Create ZFS pools and datasets Criação de pools ZFS e datasets Failed to create zpool on Falha ao criar zpool on Configuration Error Erro de Configuração. No partitions are available for ZFS. Não há partições disponíveis para o ZFS. Internal data missing Dados internos faltando Failed to create zpool Falha ao criar zpool Failed to create dataset Falha ao criar dataset The output was: O resultado foi: calamares-sidebar About Sobre Debug Depuração Show information about Calamares Mostrar informações sobre o Calamares Show debug information Exibir informações de depuração finishedq Installation Completed Instalação Completa %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 foi instalado no seu computador.<br/> Você pode agora reiniciar em seu novo sistema, ou continuar usando o ambiente Live. Close Installer Fechar Instalador Restart System Reiniciar Sistema <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Um registro completo da instalação está disponível como installation.log no diretório home do usuário Live.<br/> Esse registro é copiado para /var/log/installation.log do sistema alvo.</p> finishedq@mobile Installation Completed Instalação Completa %1 has been installed on your computer.<br/> You may now restart your device. %1 foi instalado no seu computador.<br/> Agora você pode reiniciar o seu dispositivo. Close Fechar Restart Reiniciar i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Idiomas</h1> </br> A configuração de localidade do sistema afeta o idioma e o conjunto de caracteres para algumas linhas de comando e elementos da interface do usuário. A configuração atual é <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Localização</h1> </br> A configuração de localização do sistema afeta os formatos de números e datas. A configuração atual é <strong>%1</strong>. Back Voltar keyboardq To activate keyboard preview, select a layout. Para ativar a pré-visualização do teclado, selecione um layout. Keyboard Model: Modelo de teclado: Layouts Layouts Type here to test your keyboard Escreva aqui para testar o seu teclado Variants Variantes 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> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. O LibreOffice é um programa de produtividade poderoso e gratuito, utilizado por milhões de pessoas ao redor do mundo. Ele inclui vários aplicativos que o tornam o programa de produtividade Livre e de Código Aberto mais versátil do mercado.<br/> Opção padrão. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Se você não quiser instalar uma suíte de escritório, basta selecionar Sem Suíte de Escritório. Você pode sempre adicionar uma (ou mais) mais tarde no sistema instalado, à medida que precisar. No Office Suite Sem Suíte de Escritório Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Crie uma instalação mínima da Ãrea de Trabalho, remova todas as aplicações adicionais e decida mais tarde o que gostaria de adicionar ao sistema. Exemplos do que não estará em tal instalação: não haverá nenhuma suíte de escritório, nenhum reprodutor multimídia, nenhum visualizador de imagens ou suporte para impressão. Será apenas um ambiente de trabalho, navegador de arquivos, gerenciador de pacotes, editor de texto e um simples navegador de internet. Minimal Install Instalação Mínima Please select an option for your install, or use the default: LibreOffice included. Por favor, selecione uma opção para sua instalação, ou use o padrão: LibreOffice incluído. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Este é um exemplo de arquivo QML, mostrando as opções em RichText com conteúdo Flickable.</p> <p>QML com RichText pode usar tags HTML, conteúdo Flickable é útil para telas sensíveis ao toque.</p> <p><b>Este é um texto em negrito</b></p> <p><i>Este é um texto em itálico</i></p> <p><u>Este é um texto sublinhado</u></p> <p><center>Este texto será centralizado.</center></p> <p><s>Isto é tachado</s></p> <p>Código-exemplo: <code>ls -l /home</code></p> <p><b>Listas:</b></p> <ul> <li>Sistemas de CPU Intel</li> <li>Sistemas de CPU AMD</li> </ul> <p>A barra de rolagem vertical é ajustável e a largura atual está definida como 10.</p> Back Voltar usersq Pick your user name and credentials to login and perform admin tasks Escolha seu nome de usuário e credenciais para entrar e executar tarefas de administrador What is your name? Qual é o seu nome? Your Full Name Seu nome completo What name do you want to use to log in? Qual nome você quer usar para entrar? Login Name Nome do Login If more than one person will use this computer, you can create multiple accounts after installation. Se mais de uma pessoa for usar este computador, você poderá criar múltiplas contas após a instalação. Only lowercase letters, numbers, underscore and hyphen are allowed. É permitido apenas letras minúsculas, números, sublinhado e hífen. root is not allowed as username. root não é permitido como um nome de usuário. What is the name of this computer? Qual é o nome deste computador? Computer Name Nome do computador This name will be used if you make the computer visible to others on a network. Este nome será usado se você fizer o computador ficar visível para outros numa rede. localhost is not allowed as hostname. localhost não é permitido como hostname. Choose a password to keep your account safe. Escolha uma senha para manter a sua conta segura. Password Senha Repeat Password Repita a senha Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Digite a mesma senha duas vezes, de modo que possam ser verificados erros de digitação. Uma boa senha contém uma mistura de letras, números e sinais de pontuação, deve ter pelo menos oito caracteres, e deve ser alterada em intervalos regulares. Validate passwords quality Validar qualidade das senhas When this box is checked, password-strength checking is done and you will not be able to use a weak password. Quando esta caixa estiver marcada, será feita a verificação da força da senha e você não poderá usar uma senha fraca. Log in automatically without asking for the password Entrar automaticamente sem perguntar pela senha Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. São permitidos apenas letras, números, sublinhado e hífen, com no mínimo dois caracteres. Reuse user password as root password Reutilizar a senha de usuário como senha de root Use the same password for the administrator account. Usar a mesma senha para a conta de administrador. Choose a root password to keep your account safe. Escolha uma senha de root para manter sua conta segura. Root Password Senha de Root Repeat Root Password Repita a Senha de Root Enter the same password twice, so that it can be checked for typing errors. Digite a mesma senha duas vezes, de modo que possam ser verificados erros de digitação. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Bem-vindo ao %1 instalador <quote>%2</quote></h3> <p>Este programa fará algumas perguntas e configurar o %1 no seu computador.</p> Support Suporte Known issues Problemas conhecidos Release notes Notas de lançamento Donate Faça uma doação calamares-calamares-2d126ae/lang/calamares_pt_PT.ts000066400000000000000000007206301430147706700223460ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> para %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Obrigado à <a href="https://calamares.io/team/">equipa do 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. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Direitos de autor %1-%2 %3 &lt;%4&gt;<br/> 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). A aguardar por %n módulo(s). (%n second(s)) (%n segundo(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 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 efetuar alterações no seu disco a fim de configurar o %2.<br/><strong>Não poderá anular estas alterações.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> O instalador %1 está prestes a efetuar alterações ao seu disco a fim de instalar o %2.<br/><strong>Não será capaz de anular estas alterações.</strong> &Set up now &Instalar agora &Install now &Instalar agora Go &back Voltar &atrás &Set up &Instalar &Install &Instalar Setup is complete. Close the setup program. Instalação completa. Feche o programa de instalação. The installation is complete. Close the installer. A instalação está completa. Feche o instalador. Cancel setup without changing the system. Cancelar instalação sem alterar o sistema. Cancel installation without changing the system. Cancelar instalar instalação sem modificar o sistema. &Next &Próximo &Back &Voltar &Done &Concluído &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. 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 Successfully unmounted %1. %1 desmontado com sucesso. Successfully disabled swap %1. Swap %1 desativada com sucesso. Successfully cleared swap %1. Swap %1 limpa com sucesso. Successfully closed mapper device %1. Dispositivo mapeador %1 fechado com sucesso. Successfully disabled volume group %1. Grupo de volume %1 desativado com sucesso. Clear mounts for partitioning operations on %1 Limpar montagens para operações de particionamento em %1 Clearing mounts for partitioning operations on %1. A limpar montagens para operações de particionamento em %1. Cleared all mounts for %1 Limpar todas as montagens para %1 ClearTempMountsJob Clear all temporary mounts. Limpar todas as montagens temporárias. Clearing all temporary mounts. A limpar todas as 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. O idioma do sistema será definido para %1. The numbers and dates locale will be set to %1. Os números e datas locais serão definidos para %1. 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. Escolha um produto da lista. O produto selecionado será instalado. Packages Pacotes Install option: <strong>%1</strong> Instalar opção: <strong>%1</strong> None Nenhum Summary Resumo This is an overview of what will happen once you start the setup procedure. Isto é uma visão geral do que acontecerá assim que iniciar o procedimento de configuração. This is an overview of what will happen once you start the install procedure. Isto é uma visão geral do que acontecerá assim que iniciar o procedimento de instalação. ContextualProcessJob Contextual Processes Job Tarefa de Processos Contextuais CreatePartitionDialog Create a Partition Criar uma Partição Si&ze: Ta&manho: MiB MiB Partition &Type: Partição &Tamanho: Primar&y Pri&mária 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. Selecione outro. Mountpoint must start with a <tt>/</tt>. O ponto de montagem deve começar com um <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Criar nova partição de %1MiB em %3 (%2) com entradas %4. Create new %1MiB partition on %3 (%2). Criar nova partição de %1MiB em %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Criar nova partição de %2MiB em %4 (%3) com o sistema de ficheiros %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Criar nova partição de <strong>%1MiB</strong> em <strong>%3</strong> (%2) com entradas <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Criar nova partição de <strong>%1MiB</strong> em <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Criar nova partição de <strong>%2MiB</strong> em <strong>%4</strong> (%3) com o sistema de ficheiros <strong>%1</strong>. Creating new %1 partition on %2. Criando nova partição %1 em %2. The installer failed to create partition on disk '%1'. O instalador falhou a criação da partição no disco '%1'. 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 padrão obsoleto da era MS-DOS.<br>Apenas 4 partições <em>primárias</em> podem ser criadas, e dessas 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 Con&tent: Con&teú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: Passphrase for existing partition Frase-chave para a partição existente Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. Não foi possível desencriptar a partição %1 com a frase-chave introduzida.<br/><br/>Edite novamente a partição e introduza a frase-chave correta ou elimine e crie uma nova partição encriptada. EncryptWidget Form Forma En&crypt system En&criptar systema Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. O sistema não parece suportar encriptação o suficiente para encriptar todo o sistema. Pode permitir a encriptação, mas o seu desempenho pode diminuir. Passphrase Frase-chave Confirm passphrase Confirmar frase-chave Please enter the same passphrase in both boxes. Introduza a mesma frase-passe em ambas as caixas. ErrorDialog Details: Detalhes: Would you like to paste the install log to the web? Deseja colar o registo de instalação na Web? FillGlobalStorageJob Set partition information Definir informação da partição Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Instalar %1 na <strong>nova</strong> partição do sistema %2 com funcionalidades <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Instalar %1 na <strong>nova</strong> %2 partição de sistema. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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 concluído</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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 sobre a sua máquina. IDJob OEM Batch Identifier Identificador OEM em Lote Could not create directories <code>%1</code>. Não foi possível criar diretorias <code>%1</code>. Could not open file <code>%1</code>. Não foi possível abrir ficheiro <code>%1</code>. Could not write to file <code>%1</code>. Não foi possível escrever para o ficheiro <code>%1</code>. 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! Instale o Konsole do 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 LOSHJob Configuring encrypted swap. Configurando a swap criptografada. No target system available. Não existe um sistema alvo disponível. No rootMountPoint is set. Nenhum rootMountPoint está definido. No configFilePath is set. Nenhum configFilePath está definido. LicensePage Form Formulário <h1>License Agreement</h1> <h1>Acordo de Licença</h1> I accept the terms and conditions above. Aceito os termos e condições acima descritos. Please review the End User License Agreements (EULAs). Reveja o contrato de licença de utilizador final (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Este procedimento de configuração irá instalar software proprietário que está sujeito aos termos de licença. If you do not agree with the terms, the setup procedure cannot continue. Se não concordar com os termos, o procedimento de configuração não poderá continuar. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Este procedimento de configuração pode instalar software proprietário sujeito a termos de licenciamento para fornecer recursos adicionais e aprimorar a experiência do utilizador. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Se não concordar com os termos, o software proprietário não será instalado e serão utilizadas as alternativas de código aberto. LicenseViewStep License Licença 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. 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 label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Serviços Login label for netinstall module, choose login manager Entrar Desktop label for netinstall module, choose desktop environment Ambiente de trabalho Communication label for netinstall module Comunicação Development label for netinstall module Desenvolvimento Office label for netinstall module Escritório Multimedia label for netinstall module Multimédia Internet label for netinstall module Internet Theming label for netinstall module Temas Gaming label for netinstall module Jogos Utilities label for netinstall module Utilitários Applications Aplicações 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 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 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 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 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 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 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 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 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 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. Escolha um produto da lista. O produto selecionado será instalado. 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, 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 Unsafe partition actions are enabled. As ações de partição inseguras estão ativadas. Partitioning is configured to <b>always</b> fail. A partição é configurada para falhar <b>sempre</b>. No partitions will be changed. Nenhuma partição será alterada. Current: Atual: After: Depois: No EFI system partition configured Nenhuma partição de sistema EFI configurada EFI system partition configured incorrectly Partição de sistema EFI configurada incorretamente An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. Uma partição de sistema EFI é necessária para iniciar o %1. <br/><br/>Para configurar uma partição de sistema EFI, volte atrás e selecione ou crie um sistema de ficheiros adequado. The filesystem must be mounted on <strong>%1</strong>. O sistema de ficheiros deve ser montado em <strong>%1</strong>. The filesystem must have type FAT32. O sistema de ficheiros deve ter o tipo FAT32. The filesystem must be at least %1 MiB in size. O sistema de ficheiros deve ter pelo menos %1 MiB de tamanho. The filesystem must have flag <strong>%1</strong> set. O sistema de ficheiros deve ter a "flag" %1 definida. You can continue without setting up an EFI system partition but your system may fail to start. Pode continuar sem configurar uma partição do sistema EFI, mas o seu sistema pode não arrancar. Option to use GPT on BIOS Opção para utilizar GPT no BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Uma tabela de partições GPT é a melhor opção para todos os sistemas. Este instalador suporta tal configuração para sistemas BIOS também.<br/><br/>Para configurar uma tabela de partições GPT no BIOS, (caso não tenha sido feito ainda) volte atrás e defina a tabela de partições como GPT, depois crie uma partição sem formatação de 8 MB com o sinalizador <strong>%2</strong> ativado.<br/><br/>Uma partição não formatada de 8 MB é necessária para iniciar %1 num sistema BIOS com o GPT. Boot partition not encrypted Partição de arranque não encriptada A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Foi preparada uma partição de arranque separada juntamente com uma partição root encriptada, mas a partição de arranque não está encriptada.<br/><br/>Existem preocupações de segurança com este tipo de configuração, por causa de importantes ficheiros de sistema serem guardados numa partição não encriptada.<br/>Se desejar pode continuar, mas o destrancar do sistema de ficheiros irá ocorrer mais tarde durante o arranque do sistema.<br/>Para encriptar a partição de arranque, volte atrás e recrie-a, e selecione <strong>Encriptar</strong> na janela de criação de partições. has at least one disk device available. tem pelo menos um dispositivo de disco disponível. There are no partitions to install on. Não há partições para instalar. PlasmaLnfJob Plasma Look-and-Feel Job Tarefa de Aparência Plasma Could not select KDE Plasma Look-and-Feel package Não foi possível selecionar o pacote KDE Plasma Look-and-Feel 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. 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. 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. 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. 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. 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, certifique-se que este computador: System requirements Requisitos de sistema 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 StandardButtons &OK &OK &Yes &Sim &No &Não &Cancel &Cancelar &Close &Fechar TrackingInstallJob Installation feedback Relatório da Instalação Sending installation feedback. A enviar relatório da instalação. Internal error in install-tracking. Erro interno no rastreio da instalação. HTTP request timed out. Expirou o tempo para o pedido de HTTP. 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, 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 acerca da instalação do seu <b>utilizador</b>, hardware, aplicações e padrões de utilização das aplicações para %1. TrackingViewStep Feedback Relatório UmountJob Unmount file systems. Desmontar sistemas de ficheiros. No target system available. Não existe um sistema alvo disponível. No rootMountPoint is set. Nenhum rootMountPoint está definido. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se mais de uma pessoa usar este computador, você pode criar várias contas após a configuração.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se mais de uma pessoa usar este computador, você pode criar várias contas após a instalação.</small> UsersQmlViewStep 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 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 %1 support Suporte do %1 About %1 setup Acerca da instalação de %1 About %1 installer Acerca do instalador %1 WelcomeQmlViewStep Welcome Bem-vindo WelcomeViewStep Welcome Bem-vindo ZfsJob Create ZFS pools and datasets Criação de ZFS pools e datasets Failed to create zpool on Falha ao criar zpool em Configuration Error Erro de configuração No partitions are available for ZFS. Não estão disponíveis partições para ZFS. Internal data missing Dados internos em falta Failed to create zpool Falha ao criar zpool Failed to create dataset Falha ao criar dataset The output was: O resultado foi: calamares-sidebar About Acerca Debug Depuração Show information about Calamares Mostrar informação acerca do Calamares 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 computador.<br/> Pode agora reiniciar no seu novo sistema, ou continuar a utilizar o ambiente Live. Close Installer Fechar Instalador Restart System Reiniciar Sistema <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Um registo completo da instalação está disponível como installation.log no diretório home do utilizador Live.<br/> Este registo é copiado para /var/log/installation.log do sistema de destino.</p> finishedq@mobile Installation Completed Instalação Concluída %1 has been installed on your computer.<br/> You may now restart your device. %1 foi instalado no computador.<br/> Pode agora reiniciar o dispositivo. Close Fechar Restart Reiniciar i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Idiomas</h1> </br> A definição de localização do sistema afeta o idioma e o conjunto de caracteres para alguns elementos da interface de utilizador de linha de comando. A definição atual é <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Localização</h1> </br> A definição de localização do sistema afeta os formatos de números e datas. A definição atual é <strong>%1</strong>. Back Voltar keyboardq To activate keyboard preview, select a layout. Para ativar a pré-visualização do teclado, selecione um esquema. Keyboard Model: Modelo do Teclado: Layouts Disposições Type here to test your keyboard Escreva aqui para testar a configuração do teclado Variants Variantes 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> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. O LibreOffice é um programa de produtividade poderoso e gratuito, utilizado por milhões de pessoas em todo o mundo. Inclui várias aplicações que o tornam o mais versátil programa de produtividade Livre e de Código Aberto do mercado.<br/> Opção predefinida. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Se não quiser instalar um programa de produtividade, basta selecionar Sem programa de produtividade. Pode sempre adicionar uma (ou mais) mais tarde no sistema instalado, à medida que houver a necessidade. No Office Suite Sem programa de produtividade Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Crie uma instalação mínima do Ambiente de trabalho, remova todas as aplicações extra e decida mais tarde o que gostaria de adicionar ao sistema. Exemplos do que não estará em tal instalação, não haverá nenhum programa de produtividade, nenhum reprodutor multimédia, nenhum visualizador de imagens ou suporte de impressão. Será apenas um ambiente de trabalho, navegador de ficheiros, gestor de pacotes, editor de texto e um simples navegador da web. Minimal Install Instalação Mínima Please select an option for your install, or use the default: LibreOffice included. Selecione uma opção para a sua instalação, ou utilize o predefinido: LibreOffice incluído. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Este é um exemplo de ficheiro QML, a mostrar as opções em RichText com conteúdo Flickable.</p> <p>QML com RichText pode utilizar tags HTML, conteúdo Flickable é útil para ecrãs sensíveis ao toque.</p> <p><b>Este é um texto em negrito</b></p> <p><i>Este é um texto em itálico</i></p> <p><u>Este é um texto sublinhado</u></p> <p><center>Este texto será centrado.</center></p> <p><s>Isto é riscado</s></p> <p>Código-exemplo: <code>ls -l /home</code></p> <p><b>Listas:</b></p> <ul> <li>Sistemas de CPU Intel</li> <li>Sistemas de CPU AMD</li> </ul> <p>A barra de deslocamento vertical é ajustável e a largura atual está definida como 10.</p> Back Voltar usersq Pick your user name and credentials to login and perform admin tasks Escolha o seu nome de utilizador e credenciais para iniciar sessão e executar tarefas de administrador What is your name? Qual é o seu nome? Your Full Name O seu nome completo What name do you want to use to log in? Que nome deseja usar para iniciar a sessão? Login Name Nome de utilizador If more than one person will use this computer, you can create multiple accounts after installation. Se mais do que uma pessoa utilizar este computador, poderá criar várias contas após a instalação. Only lowercase letters, numbers, underscore and hyphen are allowed. Apenas letras minúsculas, números, underscore e hífen são permitidos. root is not allowed as username. root não é permitido como nome de utilizador. What is the name of this computer? Qual o nome deste computador? Computer Name Nome do computador This name will be used if you make the computer visible to others on a network. Este nome será utilizado se tornar o computador visível a outros numa rede. localhost is not allowed as hostname. localhost não é permitido como "hostname". Choose a password to keep your account safe. Escolha uma palavra-passe para manter a sua conta segura. Password Palavra-passe Repeat Password Repita a palavra-passe Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Introduzir a mesma palavra-passe duas vezes, para que possa ser verificada a existência de erros de escrita. Uma boa palavra-passe conterá uma mistura de letras, números e pontuação, deve ter pelo menos oito caracteres, e deve ser alterada a intervalos regulares. Validate passwords quality Validar qualidade das palavras-passe When this box is checked, password-strength checking is done and you will not be able to use a weak password. Quando esta caixa é assinalada, a verificação da força da palavra-passe é feita e não será possível utilizar uma palavra-passe fraca. Log in automatically without asking for the password Iniciar sessão automaticamente sem pedir a palavra-passe Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Apenas são permitidas letras, números, sublinhado e hífen, mínimo de dois caracteres. Reuse user password as root password Reutilizar palavra-passe de utilizador como palavra-passe de root Use the same password for the administrator account. Usar a mesma palavra-passe para a conta de administrador. Choose a root password to keep your account safe. Escolha uma palavra-passe de root para manter a sua conta segura. Root Password Palavra-passe de root Repeat Root Password Repetir palavra-passe de root Enter the same password twice, so that it can be checked for typing errors. Introduzir a mesma palavra-passe duas vezes, para que possa ser verificada a existência de erros de escrita. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <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> Support Suporte Known issues Problemas conhecidos Release notes Notas de lançamento Donate Doar calamares-calamares-2d126ae/lang/calamares_ro.ts000066400000000000000000006372251430147706700217470ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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. Dă crash lui Calamares, pentru ca doctorul Konqui să se uite la el. Reloads the stylesheet from the branding directory. Reîncarcă foaia de stil din directorul branding. Uploads the session log to the configured pastebin. ÃŽncarcă jurnalul sesiunii pe pastebin-ul configurat. Send Session Log Reload Stylesheet Reincarcă stilul Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Arborele de widget Debug information InformaÈ›ie pentru depanare 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ă 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 EliminaÈ›i montările pentru operaÈ›iunea de partiÈ›ionare pe %1 Clearing mounts for partitioning operations on %1. Se elimină montările pentru operaÈ›iunile de partiÈ›ionare pe %1. Cleared all mounts for %1 S-au eliminat toate punctele de montare pentru %1 ClearTempMountsJob Clear all temporary mounts. Elimină toate montările temporare. Clearing all temporary mounts. Se elimină toate montările 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. Packages Install option: <strong>%1</strong> None Summary Sumar This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Acesta este un rezumat a ce se va întâmpla după ce începeÈ›i procedura de instalare. ContextualProcessJob Contextual Processes Job Job de tip Contextual Process CreatePartitionDialog Create a Partition Creează o partiÈ›ie Si&ze: Mă&rime: MiB MiB Partition &Type: &Tip de partiÈ›ie: Primar&y E&xtended E&xtinsă Fi&le System: Sis&tem de fiÈ™iere: LVM LV name Nume LVM LV &Mount Point: Punct de &Montare Flags: Flags: Label for the filesystem FS Label: En&crypt &Criptează Logical Logică Primary Primară GPT GPT Mountpoint already in use. Please select another one. Punct de montare existent. Vă rugăm alegeÅ£i altul. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Se creează nouă partiÈ›ie %1 pe %2. The installer failed to create partition on disk '%1'. Programul de instalare nu a putut crea partiÈ›ia pe discul „%1â€. 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ă Con&tent: &Keep &Păstrează Format Formatează Warning: Formatting the partition will erase all existing data. AtenÈ›ie: Formatarea partiÈ›iei va È™terge toate datele existente. &Mount Point: Punct de &Montare: Si&ze: Mă&rime MiB MiB Fi&le System: Sis&tem de fiÈ™iere: Flags: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Formular En&crypt system Sistem de &criptare Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Frază secretă Confirm passphrase Confirmă fraza secretă Please enter the same passphrase in both boxes. IntroduceÈ›i aceeaÈ™i frază secretă în ambele căsuÈ›e. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Setează informaÈ›ia pentru partiÈ›ie Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Instalează %1 pe <strong>noua</strong> partiÈ›ie de sistem %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Formular <h1>License Agreement</h1> I accept the terms and conditions above. Sunt de acord cu termenii È™i condiÈ›iile de mai sus. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 Eroare de configurare 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Actual: After: După: No EFI system partition configured Nicio partiÈ›ie de sistem EFI nu a fost configurată EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted 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 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 StandardButtons &OK %Ok &Yes &Da &No &Nu &Cancel &Anulează &Close ÃŽn&chide TrackingInstallJob Installation feedback Feedback pentru instalare Sending installation feedback. Trimite feedback pentru instalare Internal error in install-tracking. Eroare internă în gestionarea instalării. HTTP request timed out. Requestul HTTP a atins time out. 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 UmountJob Unmount file systems. Demonteaza sistemul de fisiere No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep 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 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 %1 support %1 suport About %1 setup About %1 installer Despre programul de instalare %1 WelcomeQmlViewStep Welcome Bine aÈ›i venit WelcomeViewStep Welcome Bine aÈ›i venit ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Eroare de configurare No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Depanare Show information about Calamares Show debug information Arată informaÈ›ia de depanare finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Modelul tastaturii: Layouts Type here to test your keyboard TastaÈ›i aici pentru a testa tastatura Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? 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> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_ru.ts000066400000000000000000007414601430147706700217520ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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. Загрузка журнала ÑеÑÑии на 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 УÑтановка завершилаÑÑŒ неудачей 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 неподдающийÑÑ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐµ 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 как домашний раздел Ð´Ð»Ñ %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/> Этот накопитель данных уже имеет операционную ÑиÑтему на нём, но разметка диÑка <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 (без Гибернации) Swap (with Hibernate) Swap (Ñ Ð“Ð¸Ð±ÐµÑ€Ð½Ð°Ñ†Ð¸ÐµÐ¹) Swap to file Файл подкачки ClearMountsJob Successfully unmounted %1. УÑпешно размонтирован %1. Successfully disabled swap %1. УÑпешно отключен раздел swap %1. Successfully cleared swap %1. УÑпешно очищен раздел swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 ОÑвободить точки Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ‚ÐºÐ¸ на %1 Clearing mounts for partitioning operations on %1. ОÑвобождаютÑÑ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ‚ÐºÐ¸ на %1. Cleared all mounts for %1 ОÑвобождены вÑе точки Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ %1 ClearTempMountsJob Clear all temporary mounts. ОÑвободить вÑе временные точки монтированиÑ. Clearing all temporary mounts. ОÑвобождаютÑÑ Ð²Ñе временные точки монтированиÑ. Cleared all temporary mounts. ОÑвобождены вÑе временные точки монтированиÑ. CommandList Could not run command. Ðе удалоÑÑŒ выполнить команду. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Команда выполнÑетÑÑ Ð² окружении уÑтановщика, и ей необходимо знать путь корневого раздела, но 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. ÐаÑтройка %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. ПожалуйÑта, выберите продукт из ÑпиÑка. Выбранный продукт будет уÑтановлен. Packages Пакеты Install option: <strong>%1</strong> ÐžÐ¿Ñ†Ð¸Ñ ÑƒÑтановки: <strong>%1</strong> None Ðет Summary Сводка This is an overview of what will happen once you start the setup procedure. Это обзор изменений, которые будут применены при запуÑке процедуры уÑтановки. This is an overview of what will happen once you start the install procedure. Это обзор изменений, которые будут применены при запуÑке процедуры уÑтановки. ContextualProcessJob Contextual Processes Job Работа Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтными процеÑÑами CreatePartitionDialog Create a Partition Создать раздел Si&ze: Ра&змер: MiB МиБ Partition &Type: &Тип раздела: Primar&y E&xtended &РаÑширенный Fi&le System: &Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема: LVM LV name Ð˜Ð¼Ñ LV LVM &Mount Point: Точка &Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Flags: Флаги: Label for the filesystem Метка файловой ÑиÑтемы FS Label: Метка ФС: En&crypt &Шифровать Logical ЛогичеÑкий Primary ОÑновной GPT GPT Mountpoint already in use. Please select another one. Точка Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ занÑта. ПожалуйÑта, выберете другую. Mountpoint must start with a <tt>/</tt>. Точка Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° начинатьÑÑ Ñ <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Создать новый раздел %1МиБ на %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Создать новый раздел %2 MiB на %4 (%3) Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемой %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Создать новый раздел <strong>%1МиБ</strong> на <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Создать новый раздел <strong>%2 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 Редактировать ÑущеÑтвующий раздел Con&tent: &Keep О&Ñтавить Format Форматировать Warning: Formatting the partition will erase all existing data. Внимание: Форматирование раздела уничтожит вÑе данные. &Mount Point: Точка &монтированиÑ: Si&ze: Ра&змер: MiB МиБ Fi&le System: &Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема: Flags: Флаги: Label for the filesystem Метка файловой ÑиÑтемы FS Label: Метка ФС: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Форма En&crypt system ÐаÑтроить &шифрование Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Пароль Confirm passphrase Подтвердите пароль Please enter the same passphrase in both boxes. ПожалуйÑта, введите один и тот же пароль в оба полÑ. ErrorDialog Details: Детали: Would you like to paste the install log to the web? РазмеÑтить журнал уÑтановки в интернете? FillGlobalStorageJob Set partition information УÑтановить ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ разделе Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. УÑтановить %1 на <strong>новый</strong> ÑиÑтемный раздел %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. ÐаÑтроить <strong>новый</strong> %2 раздел Ñ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <strong>%1</strong> %3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. ÐаÑтроить %3 раздел <strong>%1</strong> Ñ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. УÑтановить %2 на %3 ÑиÑтемный раздел <strong>%1</strong>. 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. ФорматируетÑÑ Ñ€Ð°Ð·Ð´ÐµÐ» %1 под файловую ÑиÑтему %2. The installer failed to format partition %1 on disk '%2'. Программе уÑтановки не удалоÑÑŒ отформатировать раздел %1 на диÑке '%2'. GeneralRequirements has at least %1 GiB available drive space доÑтупно как минимум %1 ГБ Ñвободного диÑкового проÑтранÑтва There is not enough drive space. At least %1 GiB is required. ÐедоÑтаточно меÑта на диÑках. Ðеобходимо как минимум %1 ГБ. has at least %1 GiB working memory доÑтупно как минимум %1 ГБ оперативной памÑти The system does not have enough working memory. At least %1 GiB is required. ÐедоÑтаточно оперативной памÑти. Ðеобходимо как минимум %1 ГБ. is plugged in to a power source подключено Ñетевое питание The system is not plugged in to a power source. Сетевое питание не подключено. is connected to the Internet приÑутÑтвует выход в Ñеть Интернет The system is not connected to the Internet. ОтÑутÑтвует выход в Интернет. is running the installer as an administrator (root) запуÑк уÑтановщика Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ админиÑтратора (root) The setup program is not running with administrator rights. Программа уÑтановки запущена без прав админиÑтратора. The installer is not running with administrator rights. Программа уÑтановки запущена без прав админиÑтратора. has a screen large enough to show the whole installer Ñкран доÑтаточно большой, чтобы показать уÑтановщик полноÑтью The screen is too small to display the setup program. Экран Ñлишком маленький, чтобы отобразить программу уÑтановки. The screen is too small to display the installer. Экран Ñлишком маленький, чтобы отобразить окно уÑтановщика. HostInfoJob Collecting information about your machine. Сбор информации о вашем компьютере. IDJob OEM Batch Identifier Идентификатор партии OEM Could not create directories <code>%1</code>. Ðе удалоÑÑŒ Ñоздать директории <code>%1</code>. Could not open file <code>%1</code>. Ðе удалоÑÑŒ открыть файл <code>%1</code>. Could not write to file <code>%1</code>. Ðе удалаÑÑŒ запиÑÑŒ в файл <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Создание initramfs при помощи mkinitcpio. InitramfsJob Creating initramfs. Создание initramfs. InteractiveTerminalPage Konsole not installed Программа Konsole не уÑтановлена Please install KDE Konsole and try again! УÑтановите KDE Konsole и попробуйте ещё раз! Executing script: &nbsp;<code>%1</code> ВыполнÑетÑÑ Ñценарий: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Скрипт KeyboardQmlViewStep Keyboard Клавиатура KeyboardViewStep Keyboard Клавиатура LCLocaleDialog System locale setting Общие региональные наÑтройки The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Общие региональные наÑтройки влиÑÑŽÑ‚ на Ñзык и кодировку Ð´Ð»Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ñлементов интерфейÑа командной Ñтроки.<br/>Текущий выбор <strong>%1</strong>. &Cancel &Отмена &OK &ОК LOSHJob Configuring encrypted swap. ÐаÑтройка зашифрованного swap. No target system available. No rootMountPoint is set. Ðе задано rootMountPoint. No configFilePath is set. Ðе задано configFilePath. LicensePage Form Форма <h1>License Agreement</h1> <h1>Лицензионное Ñоглашение</h1> I accept the terms and conditions above. Я принимаю приведенные выше уÑловиÑ. Please review the End User License Agreements (EULAs). ПожалуйÑта, ознакомьтеÑÑŒ Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ Ñоглашением (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Ð’ ходе Ñтой процедуры уÑтановки будет уÑтановлено проприетарное программное обеÑпечение, на которое раÑпроÑтранÑÑŽÑ‚ÑÑ ÑƒÑÐ»Ð¾Ð²Ð¸Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ. If you do not agree with the terms, the setup procedure cannot continue. еÑли вы не ÑоглаÑны Ñ ÑƒÑловиÑми, процедура уÑтановки не может быть продолжена. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Эта процедура уÑтановки может уÑтановить проприетарное программное обеÑпечение, на которое раÑпроÑтранÑÑŽÑ‚ÑÑ ÑƒÑÐ»Ð¾Ð²Ð¸Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, чтобы предоÑтавить дополнительные функции и улучшить взаимодейÑтвие Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. ЕÑли вы не ÑоглаÑны Ñ ÑƒÑловиÑми, проприетарное программное обеÑпечение не будет уÑтановлено, и вмеÑто него будут иÑпользованы альтернативы Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом. 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 label for netinstall module, Linux kernel Ядро Services label for netinstall module, system services СервиÑÑ‹ Login label for netinstall module, choose login manager Вход Desktop label for netinstall module, choose desktop environment Рабочий Ñтол Communication label for netinstall module Общение Development label for netinstall module Разработка Office label for netinstall module ÐžÑ„Ð¸Ñ Multimedia label for netinstall module Мультимедиа Internet label for netinstall module Интернет Theming label for netinstall module Темы Gaming label for netinstall module Игры Utilities label for netinstall module Утилиты Applications ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ 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. ПожалуйÑта, выберите продукт из ÑпиÑка. Выбранный продукт будет уÑтановлен. 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 Разделы Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Текущий: After: ПоÑле: No EFI system partition configured Ðет наÑтроенного ÑиÑтемного раздела EFI EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS ВозможноÑть Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ GPT в BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted Загрузочный раздел не зашифрован A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Включено шифрование корневого раздела, но иÑпользован отдельный загрузочный раздел без шифрованиÑ.<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> <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 Гиб. <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>%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 СиÑтемные Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ 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. ÐаÑтройка пользователей <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) %L1 / %L2 StandardButtons &OK &ОК &Yes &Да &No &Ðет &Cancel &Отмена &Close &Закрыть 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. 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>Ðажмите Ñюда, чтобы не отправлÑть <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. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback Отзывы UmountJob Unmount file systems. Размонтирование файловой ÑиÑтемы. No target system available. No rootMountPoint is set. Ðе задано rootMountPoint. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>ЕÑли Ñтот компьютер будет иÑпользоватьÑÑ Ð½ÐµÑколькими людьми, вы Ñможете Ñоздать учетные запиÑи Ð´Ð»Ñ Ð½Ð¸Ñ… поÑле уÑтановки.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>ЕÑли Ñтот компьютер иÑпользуетÑÑ Ð½ÐµÑколькими людьми, Ð’Ñ‹ Ñможете Ñоздать ÑоответÑтвующие учетные запиÑи Ñразу поÑле уÑтановки.</small> UsersQmlViewStep Users Пользователи UsersViewStep Users Пользователи VariantModel Key Column header for key/value Ключ Value Column header for key/value Значение VolumeGroupBaseDialog Create Volume Group Создать группу томов List of Physical Volumes СпиÑок физичеÑких томов Volume Group Name: Ð˜Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ томов: Volume Group Type: Тип группы томов: Physical Extent Size: ФизичеÑкий размер: MiB МиБ Total Size: Общий объём: Used Size: ИÑпользованный объём: Total Sectors: Ð’Ñего Ñекторов: Quantity of LVs: WelcomePage Form Форма Select application and system language Выберите Ñзык Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÑиÑтемы Open donations website &Donate Пожертвовать Open help and support website Открыть Ñайт Ñправки и поддержки &Support П&оддержка Open issues and bug-tracking website Открыть Ñайт Ñо ÑпиÑком извеÑтных проблем и отÑлеживанием ошибок &Known issues &ИзвеÑтные проблемы Open release notes website Открыть Ñайт Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ°Ð¼Ð¸ о выпуÑке &Release notes &ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ðº выпуÑку %1 support %1 поддержка About %1 setup О уÑтановке %1 About %1 installer О программе уÑтановки %1 WelcomeQmlViewStep Welcome Добро пожаловать WelcomeViewStep Welcome Добро пожаловать ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Ошибка конфигурации No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: Вывод: calamares-sidebar About О Программе Debug Отладка Show information about Calamares Show debug information Показать отладочную информацию finishedq Installation Completed УÑтановка завершена %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Закрыть уÑтановщик Restart System ПерезапуÑтить ÑиÑтему <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed УÑтановка завершена %1 has been installed on your computer.<br/> You may now restart your device. Close Закрыть Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back Ðазад keyboardq To activate keyboard preview, select a layout. Keyboard Model: Тип клавиатуры: Layouts РаÑкладки Type here to test your keyboard ПротеÑтируйте клавиатуру здеÑÑŒ Variants Варианты localeq Change Изменить notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Это пример заметок о выпуÑке..</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back Ðазад usersq Pick your user name and credentials to login and perform admin tasks What is your name? Как Ð’Ð°Ñ Ð·Ð¾Ð²ÑƒÑ‚? Your Full Name Ваше полное Ð¸Ð¼Ñ What name do you want to use to log in? Какое Ð¸Ð¼Ñ Ð’Ñ‹ хотите иÑпользовать Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð°? Login Name Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ If more than one person will use this computer, you can create multiple accounts after installation. ЕÑли Ñтот компьютер иÑпользуетÑÑ Ð½ÐµÑколькими людьми, Ð’Ñ‹ Ñможете Ñоздать ÑоответÑтвующие учетные запиÑи Ñразу поÑле уÑтановки. Only lowercase letters, numbers, underscore and hyphen are allowed. ДопуÑкаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñтрочные буквы, чиÑла, Ñимволы Ð¿Ð¾Ð´Ñ‡Ñ‘Ñ€ÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¸ дефиÑÑ‹. root is not allowed as username. root не допуÑкаетÑÑ Ð² качеÑтве имени пользователÑ. What is the name of this computer? Какое Ð¸Ð¼Ñ Ñƒ компьютера? Computer Name Ð˜Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð° This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. localhost не допуÑкаетÑÑ Ð² качеÑтве имени пользователÑ. Choose a password to keep your account safe. Выберите пароль Ð´Ð»Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ вашей учетной запиÑи. Password Пароль Repeat Password Повторите пароль Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Когда Ñтот флажок уÑтановлен, выполнÑетÑÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° надежноÑти паролÑ, и вы не Ñможете иÑпользовать Ñлабый пароль. Log in automatically without asking for the password Входить автоматичеÑки, не ÑÐ¿Ñ€Ð°ÑˆÐ¸Ð²Ð°Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password ИÑпользовать пароль Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ°Ðº пароль ÑÑƒÐ¿ÐµÑ€Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Use the same password for the administrator account. ИÑпользовать тот же пароль Ð´Ð»Ñ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð° админиÑтратора. Choose a root password to keep your account safe. Root Password Пароль ÑÑƒÐ¿ÐµÑ€Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Repeat Root Password Повторите пароль от root Enter the same password twice, so that it can be checked for typing errors. Введите пароль повторно, чтобы не допуÑтить ошибок при вводе welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <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> Support Поддержка Known issues ИзвеÑтные проблемы Release notes ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ðº выпуÑку Donate Пожертвовать calamares-calamares-2d126ae/lang/calamares_si.ts000066400000000000000000010367131430147706700217360ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings ස්වයංක්â€à¶»à·“ය සවිකිරීම් à·ƒà·à¶šà·ƒà·“ම් කළමනà·à¶šà¶»à¶«à¶º කරන්න BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. මෙම පද්ධතියේ <strong>ඇරඹුම් පරිසරය</srong> à¶´à·à¶»à¶«à·’ x86 පද්ධති සහය දක්වන්නේ <strong>BIOS</strong> සඳහ෠පමණි. <br>නවීන පද්ධති à·ƒà·à¶¸à·à¶±à·Šâ€à¶ºà¶ºà·™à¶±à·Š <strong>EFI</strong> à¶·à·à·€à·’ත෠කරයි, නමුත් à¶œà·à·…පුම් මà·à¶¯à·’ලියෙන් ආරම්භ කළහොත් මෙය BIOS ලෙසද පෙන්විය à·„à·à¶š. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. මෙම පද්ධතිය <strong>EFI</strong> ඇරඹුම් පරිසරයකින් ආරම්භ කරන ලදී. <stron>EFI</strong> පරිසරයකින් ආරම්භය à·ƒà·à¶šà·ƒà·”ම් කිරීම සඳහà·, මෙම ස්ථà·à¶´à¶šà¶º <strong>EFI</strong> පද්ධති කොටසක <strong>GRUB</strong> à·„à· <strong>systemd-boot</strong> à·€à·à¶±à·’ ඇරඹුම් à¶šà·à¶»à¶š යෙදුමක් යෙදවිය යුතුය. ඔබ අතින් කොටස් කිරීම à¶­à·à¶»à· නොගතහොත් (manual partitioning) මෙය ස්වයංක්â€à¶»à·“ය වේ, මෙම අවස්ථà·à·€à·šà¶¯à·“ ඔබ එය à¶­à·à¶»à·à¶œà¶­ යුතුය හ෠එය ඔබම නිර්මà·à¶«à¶º à¶šà·… යුතුය. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. මෙම පද්ධතිය <strong>BIOS</strong> ඇරඹුම් පරිසරයකින් ආරම්භ කරන ලදී. <br><br><strong>BIOS</strong> පරිසරයකින් ආරම්භය à·ƒà·à¶šà·ƒà·”ම් කිරීම සඳහà·, මෙම ස්ථà·à¶´à¶šà¶º <strong>GRUB<strong> à·€à·à¶±à·’ ඇරඹුම් à¶šà·à¶»à¶šà¶ºà¶šà·Š ස්ථà·à¶´à¶±à¶º à¶šà·… යුතුය.<br> එක්ක෠කොටසක ආරම්භයේදී හ෠කොටස් වගුවේ ආරම්භයට ආසන්නයේ (වඩà·à¶­à·Š සුදුසු) <strong>à¶´à·Šâ€à¶»à¶°à·à¶± ඇරඹුම් à·€à·à¶»à·Šà¶­à·à·€</strong> මත මෙය à·ƒà·à¶šà·ƒà·’ය යුතුය. මෙය ස්වයංක්â€à¶»à·“ය à¶šà·Šâ€à¶»à·’යà·à¶¯à·à¶¸à¶ºà¶šà·Š වේ, ඔබ අතින් කොටස් කිරීම à¶­à·à¶»à· ගතහොත්, ඔබ විසින්ම එය à·ƒà·à¶šà·ƒà·’ය යුතුය. BootLoaderModel Master Boot Record of %1 %1 à·„à·’ à¶´à·Šâ€à¶»à¶°à·à¶± ඇරඹුම් à·€à·à¶»à·Šà¶­à·à·€ Boot Partition ඇරඹුම් කොටස System Partition පද්ධති කොටස Do not install a boot loader ඇරඹුම් à¶šà·à¶»à¶šà¶ºà¶šà·Š ස්ථà·à¶´à¶±à¶º නොකරන්න %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page හිස් පිටුව Calamares::DebugWindow Form සිට GlobalStorage à¶œà·à¶½à·“ය ගබඩà·à·€ JobQueue à¶šà·Šâ€à¶»à·’යදà·à¶¸ à¶´à·à¶½à·’ම Modules මොඩියුල Type: වර්ගය: none කිසිවක් à¶±à·à¶­ Interface: අතුරුමුහුණත: Crashes Calamares, so that Dr. Konqui can look at it. වෛද්â€à¶º කොන්කිට එය දෙස à¶¶à·à¶½à·“මට à·„à·à¶šà·’ වන පරිදි, Calamares à¶šà¶©à· à·€à·à¶§à·™à¶± ලදී. Reloads the stylesheet from the branding directory. සන්නà·à¶¸ à¶±à·à¶¸à·à·€à¶½à·’යෙන් මà·à·ƒà·Šà¶­à¶» à¶´à¶­à·Šâ€à¶»à¶º à¶±à·à·€à¶­ පූරණය කරයි. Uploads the session log to the configured pastebin. à·ƒà·à·ƒà·’ à¶½à¶à·” à·ƒà·à¶šà·ƒà·”ම් පේස්ට්බින් වෙත උඩුගත කරයි. Send Session Log à·ƒà·à·ƒà·’ à¶½à¶à·” යවන්න Reload Stylesheet මà·à·ƒà·Šà¶­à¶» à¶´à¶­à·Šâ€à¶»à·’à¶šà·à·€ à¶±à·à·€à¶­ පූරණය කරන්න Displays the tree of widget names in the log (for stylesheet debugging). ලොගයේ විජට් නම් ගස පෙන්වයි (විලà·à·ƒà·’à¶­à· à¶´à¶­à·Šâ€à¶» නිදොස්කරණය සඳහà·). Widget Tree විජට් ගස Debug information දà·à· නිරà·à¶šà¶»à¶« තොරතුරු Calamares::ExecutionViewStep Set up පිහිටුවීම Install ස්ථà·à¶´à¶±à¶º Calamares::FailJob Job failed (%1) à¶šà·à¶»à·Šà¶ºà¶º à¶…à·ƒà·à¶»à·Šà¶®à¶š විය (%1) Programmed job failure was explicitly requested. à·€à·à¶©à·ƒà¶§à·„න්ගත à¶šà·Šâ€à¶»à·’ය෠අසà·à¶»à·Šà¶®à¶šà¶­à·Šà·€à¶º à¶´à·à·„à·à¶¯à·’ලිවම ඉල්ල෠ඇත. Calamares::JobThread Done අවසන් Calamares::NamedJob Example job (%1) උදà·à·„රණ à¶šà·à¶»à·Šà¶ºà¶º (%1) Calamares::ProcessJob Run command '%1' in target system. ඉලක්කගත පද්ධතිය තුළ '%1' විධà·à¶±à¶º à¶šà·Šâ€à¶»à·’යà·à¶­à·Šà¶¸à¶š කරන්න. Run command '%1'. '%1' විධà·à¶±à¶º à¶°à·à·€à¶±à¶º කරන්න. Running command %1 %2 à¶šà·Šâ€à¶»à·’යà·à¶­à·Šà¶¸à¶š වන විධà·à¶±à¶º %1 %2 Calamares::PythonJob Running %1 operation. %1 මෙහෙයුම à¶šà·Šâ€à¶»à·’යà·à¶­à·Šà¶¸à¶š වේ. Bad working directory path නොසදුසු à·€à·à¶© කරන à·†à·à¶½à·Šà¶©à¶»à·Š මà·à¶»à·Šà¶œà¶ºà¶šà·’. Working directory %1 for python job %2 is not readable. පයිතොන් à¶šà·Šâ€à¶»à·’යà·à¶šà·à¶»à·“à¶­à·Šà·€ %2 සඳහ෠%1 à·†à·à¶½à·Šà¶©à¶»à·Š මà·à¶»à·Šà¶œà¶º කියවිය නොහà·à¶š. Bad main script file නොසදුසු à¶´à·Šâ€à¶»à¶°à·à¶± ස්ක්â€à¶»à·’à¶´à·Šà¶§à·Š ගොනුව Main script file %1 for python job %2 is not readable. පයිතොන් à¶šà·Šâ€à¶»à·’යà·à¶šà·à¶»à·“à¶­à·Šà·€ %2 සඳහ෠%1 à¶´à·Šâ€à¶»à¶°à·à¶± ස්ක්â€à¶»à·’à¶´à·Šà¶§à·Š ගොනුව කියවිය නොහà·à¶š. Boost.Python error in job "%1". "%1" à¶šà·à¶»à·Šà¶ºà¶ºà·š Boost.පයිතොන් දà·à·‚යකි. Calamares::QmlViewStep Loading ... පූරණය වෙමින්... QML Step <i>%1</i>. QML පියවර <strong>%1</strong>. Loading failed. පූරණය à¶…à·ƒà·à¶»à·Šà¶®à¶šà¶ºà·’. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. <strong>%1</strong> මොඩියුලය සඳහ෠අවà·à·Šâ€à¶ºà¶­à· පරීක්ෂ෠කිරීම සම්පූර්ණයි. Waiting for %n module(s). %n මොඩියුල(ය) සඳහ෠රà·à¶³à·“ සිටිමි %n මොඩියුල(ය) සඳහ෠රà·à¶³à·“ සිටිමි (%n second(s)) (à¶­à¶­à·Šà¶´à¶» %n) (à¶­à¶­à·Šà¶´à¶» %n) System-requirements checking is complete. පද්ධති à¶…à·€à·à·Šâ€à¶ºà¶­à· පරීක්ෂ෠කිරීම සම්පූර්ණයි. Calamares::ViewManager Setup Failed පිහිටුවීම à¶…à·ƒà·à¶»à·Šà¶®à¶š විය Installation Failed ස්ථà·à¶´à¶±à¶º à¶…à·ƒà·à¶»à·Šà¶®à¶š විය Error දà·à·‚යක් &Yes ඔව් (Y) &No à¶±à·à·„à· (N) &Close වසන්න (C) Install Log Paste URL ස්ථà·à¶´à¶± ලොගයේ URLය අලවන්න The upload was unsuccessful. No web-paste was done. උඩුගත කිරීම à¶…à·ƒà·à¶»à·Šà¶®à¶š විය. කිසිම වෙබ් පේස්ට් කිරීමක් නොකලේය. Install log posted to %1 Link copied to clipboard ස්ථà·à¶´à¶± ලොගය à¶´à·… à¶šà¶» ඇත %1 සබà·à¶³à·’ය පසුරු පුවරුවට à¶´à·’à¶§à¶´à¶­à·Š කරන ලදී Calamares Initialization Failed Calamares ආරම්භ කිරීම à¶…à·ƒà·à¶»à·Šà¶®à¶š විය %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 ස්ථà·à¶´à¶±à¶º à¶šà¶½ නොහà·à¶š. Calamares à·„à¶§ à·ƒà·à¶šà·ƒà·”ම් à¶šà·… මොඩියුල සියල්ල පූරණය කිරීමට නොහà·à¶šà·’ විය. මෙය බෙද෠හà·à¶»à·“ම මගින් Calamares à¶·à·à·€à·’ත෠කරන ආකà·à¶»à¶º à¶´à·’à·…à·’à¶¶à¶³ à¶œà·à¶§à·…ුවකි. <br/>The following modules could not be loaded: <br/>මෙම මොඩියුල පූරණය à¶šà·… නොහà·à¶š: Continue with setup? පිහිටුවීම සමඟ ඉදිරියට යන්නද? Continue with installation? ස්ථà·à¶´à¶±à¶º කරගෙන යන්නද? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %1 පිහිටුවීම් à·€à·à¶©à·ƒà¶§à·„à¶± %2 පිහිටුවීම සඳහ෠ඔබගේ à¶­à·à¶§à·’යේ වෙනස්කම් සිදු කිරීමට සූදà·à¶±à¶¸à·Š වේ. <br/><strong>ඔබට මෙම වෙනස්කම් පසුගමනය කිරීමට නොහà·à¶šà·’ වනු ඇත.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %2 ස්ථà·à¶´à¶±à¶º කිරීම සඳහ෠%1 ස්ථà·à¶´à¶šà¶º ඔබගේ à¶­à·à¶§à·’යේ වෙනස්කම් සිදු කිරීමට සූදà·à¶±à¶¸à·Š වේ. <br/><strong>ඔබට මෙම වෙනස්කම් පසුගමනය කිරීමට නොහà·à¶šà·’ වනු ඇත.</strong> &Set up now දà·à¶±à·Š පිහිටවන්න &Install now දà·à¶±à·Š ස්ථà·à¶´à¶±à¶º කරන්න Go &back ආපසු යන්න &Set up පිහිටුවන්න &Install ස්ථà·à¶´à¶±à¶º කරන්න Setup is complete. Close the setup program. පිහිටුවීම සම්පූර්ණයි. à·ƒà·à¶šà·ƒà·”ම් à·€à·à¶©à·ƒà¶§à·„à¶± වසන්න. The installation is complete. Close the installer. ස්ථà·à¶´à¶±à¶º සම්පූර්ණයි. ස්ථà·à¶´à¶šà¶º වසන්න. Cancel setup without changing the system. පද්ධතිය වෙනස් නොකර පිහිටුවීම අවලංගු කරන්න. Cancel installation without changing the system. පද්ධතිය වෙනස් නොකර ස්ථà·à¶´à¶±à¶º අවලංගු කරන්න. &Next à¶Šà·…à¶Ÿ (&N) &Back ආපසු (&B) &Done අවසන්(&D) &Cancel අවලංගු කරන්න (&C) Cancel setup? පිහිටුවීම අවලංගු කරන්නද? Cancel installation? ස්ථà·à¶´à¶±à¶º අවලංගු කරනවà·à¶¯? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. ඔබට ඇත්තටම වත්මන් පිහිටුවීම් à¶šà·Šâ€à¶»à·’යà·à·€à¶½à·’ය අවලංගු කිරීමට à¶…à·€à·à·Šâ€à¶ºà¶¯? à·ƒà·à¶šà·ƒà·”ම් à·€à·à¶©à·ƒà¶§à·„à¶± ඉවත් වන à¶…à¶­à¶» සියලු වෙනස්කම් අහිමි වනු ඇත. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. ඔබට ඇත්තටම වත්මන් ස්ථà·à¶´à¶± à¶šà·Šâ€à¶»à·’යà·à·€à¶½à·’ය අවලංගු කිරීමට à¶…à·€à·à·Šâ€à¶ºà¶¯? ස්ථà·à¶´à¶šà¶º ඉවත් වන à¶…à¶­à¶» සියලු වෙනස්කම් අහිමි වනු ඇත. CalamaresPython::Helper Unknown exception type නොදන්න෠ව්â€à¶ºà¶­à·’රේක වර්ගය unparseable Python error විග්â€à¶»à·„ à¶šà·… නොහà·à¶šà·’ පයිතන් දà·à·‚යකි unparseable Python traceback විග්â€à¶»à·„ à¶šà·… නොහà·à¶šà·’ පයිතන් ලුහුබà·à¶¯à·“මකි Unfetchable Python error. ලබà·à¶œà¶­ නොහà·à¶šà·’ පයිතන් දà·à·‚යකි. CalamaresWindow %1 Setup Program %1 à·ƒà·à¶šà·ƒà·”ම් à·€à·à¶©à·ƒà¶§à·„à¶± %1 Installer %1 ස්ථà·à¶´à¶šà¶º ChangeFilesystemLabelJob Set filesystem label on %1. ගොනු පද්ධති ලේබලය %1 මත සකසන්න. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. ගොනු පද්ධති ලේබලය <strong>%1</strong> කොටස <strong>%2</strong> ලෙස සකසන්න. The installer failed to update partition table on disk '%1'. ස්ථà·à¶´à¶šà¶º '%1' à¶­à·à¶§à·’යේ කොටස් වගුව යà·à·€à¶­à·Šà¶šà·à¶½à·“à¶± කිරීමට අසමත් විය. CheckerContainer Gathering system information... පද්ධති තොරතුරු à¶»à·à·ƒà·Š කරමින් පවතී... ChoicePage Form à¶´à·à¶»à¶¸à¶º Select storage de&vice: ගබඩ෠උපà·à¶‚ගය à¶­à·à¶»à¶±à·Šà¶±: Current: වත්මන්: After: පසු: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>අතින් කොටස් කිරීම</strong> <br/>ඔබට à¶…à·€à·à·Šâ€à¶º à¶…à¶šà·à¶»à¶ºà¶§ කොටස් සෑදීමට à·„à· à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º වෙනස් කිරීමට à·„à·à¶šà·’ය. Reuse %1 as home partition for %2. %2 සඳහ෠නිවෙස් කොටස ලෙස %1 à¶±à·à·€à¶­ à¶·à·à·€à·’à¶­ කරන්න. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º අඩුකිරීමට කොටසක් à¶­à·à¶»à¶±à·Šà¶±, පසුව à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º වෙනස් කිරීමට à¶´à·„à·… තීරුව අදින්න</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 %2MiB දක්ව෠ප්â€à¶»à¶¸à·à¶«à¶º අඩුකරනු ඇති à¶…à¶­à¶» %4 සඳහ෠නව %3MiB කොටසක් à·ƒà·à¶¯à¶±à·” ඇත. Boot loader location: ඇරඹුම් à¶šà·à¶»à¶š ස්ථà·à¶±à¶º: <strong>Select a partition to install on</strong> <strong>ස්ථà·à¶´à¶±à¶º කිරීමට කොටසක් à¶­à·à¶»à¶±à·Šà¶±</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI පද්ධති කොටසක් මෙම පද්ධතියේ කොතà·à¶±à¶šà·€à¶­à·Š සොයà·à¶œà¶­ නොහà·à¶š. කරුණà·à¶šà¶» ආපසු ගොස් %1 පිහිටුවීමට අතින් කොටස් කිරීම à¶·à·à·€à·’ත෠කරන්න. The EFI system partition at %1 will be used for starting %2. %2 ආරම්භ කිරීම සඳහ෠%1 à·„à·’ EFI පද්ධති කොටස à¶·à·à·€à·’ත෠කරනු ඇත. EFI system partition: EFI පද්ධති කොටස: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. මෙම ගබඩ෠උපà·à¶‚ගයේ මෙහෙයුම් පද්ධතියක් ඇති බවක් නොපෙනේ. ඔබ කුමක් කිරීමට à¶šà·à¶¸à¶­à·’ද? <br/>ගබඩ෠උපà·à¶‚ගයට කිසියම් වෙනසක් සිදු කිරීමට පෙර ඔබට ඔබේ තේරීම් සමà·à¶½à·à¶ à¶±à¶º à¶šà¶» තහවුරු කිරීමට à·„à·à¶šà·’ වනු ඇත. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>à¶­à·à¶§à·’ය මà·à¶šà·“ම</strong><br/>මෙම à¶­à·à¶»à·à¶œà¶­à·Š ගබඩ෠උපà·à¶‚ගයේ දà·à¶±à¶§ පවතින සියලුම දත්ත <strong>මà·à¶šà·“යනු</strong> ඇත. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>පසෙකින් ස්ථà·à¶´à¶±à¶º කිරීම</strong><br/>ස්ථà·à¶´à¶šà¶º %1 සඳහ෠ඉඩ ලබ෠දීම සඳහ෠කොටසක් à·„à·à¶šà·’ලෙනු ඇත. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>කොටසක් à¶´à·Šâ€à¶»à¶­à·’ස්ථà·à¶´à¶±à¶º කිරීම</strong><br/> %1 සමඟ කොටසක් à¶´à·Šâ€à¶»à¶­à·’ස්ථà·à¶´à¶±à¶º කරන්න. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. මෙම ගබඩ෠උපà·à¶‚ගයේ %1 ඇත. ඔබ කුමක් කිරීමට à¶šà·à¶¸à¶­à·’ද?<br/>ගබඩ෠උපà·à¶‚ගයට කිසියම් වෙනසක් සිදු කිරීමට පෙර ඔබට ඔබේ තේරීම් සමà·à¶½à·à¶ à¶±à¶º à¶šà¶» තහවුරු කිරීමට à·„à·à¶šà·’ වනු ඇත. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. මෙම ගබඩ෠උපà·à¶‚ගයේ දà·à¶±à¶§à¶¸à¶­à·Š මෙහෙයුම් පද්ධතියක් ඇත. ඔබ කුමක් කිරීමට à¶šà·à¶¸à¶­à·’ද?<br/>ගබඩ෠උපà·à¶‚ගයට කිසියම් වෙනසක් සිදු කිරීමට පෙර ඔබට ඔබේ තේරීම් සමà·à¶½à·à¶ à¶±à¶º à¶šà¶» තහවුරු කිරීමට à·„à·à¶šà·’ වනු ඇත. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. මෙම ගබඩ෠උපà·à¶‚ගයේ à¶¶à·„à·” මෙහෙයුම් පද්ධති ඇත. ඔබ කුමක් කිරීමට à¶šà·à¶¸à¶­à·’ද?<br/>ගබඩ෠උපà·à¶‚ගයට කිසියම් වෙනසක් සිදු කිරීමට පෙර ඔබට ඔබේ තේරීම් සමà·à¶½à·à¶ à¶±à¶º à¶šà¶» තහවුරු කිරීමට à·„à·à¶šà·’ වනු ඇත. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> මෙම ගබඩ෠උපà·à¶‚ගයේ දà·à¶±à¶§à¶¸à¶­à·Š මෙහෙයුම් පද්ධතියක් ඇත, නමුත් %1 කොටස් වගුව à¶…à·€à·à·Šâ€à¶º %2 à¶§ වඩ෠වෙනස් වේ. This storage device has one of its partitions <strong>mounted</strong>. මෙම ගබඩ෠උපà·à¶‚ගය, à¶‘à·„à·’ à¶‘à¶šà·Š කොටසක් <strong>සවි à¶šà¶» ඇත</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. මෙම ගබඩ෠උපà·à¶‚ගය <strong>à¶…à¶šà·Šâ€à¶»à·’ය RAID</strong> à¶‹à¶´à·à¶‚ගයක කොටසකි. No Swap Swap නොමà·à¶­à·’à·€ Reuse Swap Swap à¶±à·à·€à¶­ à¶·à·à·€à·’ත෠කරන්න Swap (no Hibernate) Swap (හයිබර්නේට් නොමà·à¶­à·’à·€) Swap (with Hibernate) Swap (හයිබර්නේට් සහිතව) Swap to file Swap ගොනුව ClearMountsJob Successfully unmounted %1. %1 à·ƒà·à¶»à·Šà¶®à¶šà·€ ඉවත් කරන ලදී. Successfully disabled swap %1. swap % 1 à·ƒà·à¶»à·Šà¶®à¶šà·€ à¶…à¶šà·Šâ€à¶»à·“ය කරන ලදී. Successfully cleared swap %1. swap %1 à·ƒà·à¶»à·Šà¶®à¶šà·€ හිස් කරන ලදී. Successfully closed mapper device %1. සිතියම් à¶‹à¶´à·à¶‚ගය %1 à·ƒà·à¶»à·Šà¶®à¶šà·€ වස෠ඇත. Successfully disabled volume group %1. %1 වෙළුම් සමූහය à·ƒà·à¶»à·Šà¶®à¶šà·€ à¶šà·Šâ€à¶»à·’ය෠කරයි. Clear mounts for partitioning operations on %1 කොටස් කිරීම සදහ෠%1 à¶­à·à¶§à·’ හිස් කරනු à¶½à·à¶¶à·š Clearing mounts for partitioning operations on %1. කොටස් කිරීම සදහ෠%1 සවි කිරීම් හිස් කරනු à¶½à·à¶¶à·š Cleared all mounts for %1 %1 සඳහ෠සියලුම සවි කිරීම් හිස් කරන ලදී ClearTempMountsJob Clear all temporary mounts. සියලුම à¶­à·à·€à¶šà·à¶½à·’à¶š සවි කිරීම් ඉවත් කරන්න. Clearing all temporary mounts. සියලුම à¶­à·à·€à¶šà·à¶½à·’à¶š à¶­à·à¶§à·’ ඉවත් කරමින් පවතී. Cleared all temporary mounts. සියලුම à¶­à·à·€à¶šà·à¶½à·’à¶š සවි කිරීම් හිස් කරන ලදී. CommandList Could not run command. විධà·à¶±à¶º à¶šà·Šâ€à¶»à·’යà·à¶­à·Šà¶¸à¶š කිරීමට නොහà·à¶šà·’ විය. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. විධà·à¶±à¶º à¶°à·à¶»à¶š පරිසරය තුළ à¶šà·Šâ€à¶»à·’යà·à¶­à·Šà¶¸à¶š වන à¶…à¶­à¶» මූල මà·à¶»à·Šà¶œà¶º දà·à¶± à¶œà·à¶±à·“මට à¶…à·€à·à·Šâ€à¶º වේ, නමුත් මූල සවි කිරීමේ ලක්ෂ්â€à¶ºà¶ºà¶šà·Š à·ƒà·à¶šà·ƒà·”ම් à¶šà¶» නොමà·à¶­. The command needs to know the user's name, but no username is defined. විධà·à¶±à¶ºà¶§ පරිà·à·“ලකයà·à¶œà·š නම දà·à¶± à¶œà·à¶±à·“මට à¶…à·€à·à·Šâ€à¶º වේ, නමුත් පරිà·à·“ලක à¶±à·à¶¸à¶ºà¶šà·Š අර්ථ දක්ව෠නොමà·à¶­. Config Set keyboard model to %1.<br/> යතුරුපුවරු ආකෘතිය %1 ලෙස සකසන්න. Set keyboard layout to %1/%2. යතුරුපුවරු පිරිසà·à¶½à·ƒà·”ම %1/%2 ලෙස සකසන්න. Set timezone to %1/%2. වේල෠කලà·à¶´à¶º %1/%2 ලෙස සකසන්න. The system language will be set to %1. පද්ධති à¶·à·à·‚à·à·€ %1 ලෙස à·ƒà·à¶šà·ƒà·™à¶±à·” ඇත. The numbers and dates locale will be set to %1. à¶…à¶‚à¶š සහ දින පෙදෙසිය %1 ලෙස සකසනු ඇත. Network Installation. (Disabled: Incorrect configuration) à¶¢à·à¶½ ස්ථà·à¶´à¶±à¶º. (à¶…à¶šà·Šâ€à¶»à·’යයි: à·€à·à¶»à¶¯à·’ à·ƒà·à¶šà·ƒà·“මකි) Network Installation. (Disabled: Received invalid groups data) à¶¢à·à¶½ ස්ථà·à¶´à¶±à¶º. (à¶…à¶šà·Šâ€à¶»à·’යයි: වලංගු නොවන à¶šà¶«à·Šà¶©à·à¶ºà¶¸à·Š දත්ත à¶½à·à¶¶à·“ ඇත) Network Installation. (Disabled: Internal error) à¶¢à·à¶½ ස්ථà·à¶´à¶±à¶º. (à¶…à¶šà·Šâ€à¶»à·’යයි: à¶…à¶·à·Šâ€à¶ºà¶±à·Šà¶­à¶» දà·à·‚යකි) Network Installation. (Disabled: No package list) à¶¢à·à¶½ ස්ථà·à¶´à¶±à¶º. (à¶…à¶šà·Šâ€à¶»à·’යයි: à¶´à·à¶šà·šà¶¢ à¶½à·à¶ºà·’ස්තුවක් à¶±à·à¶­) Package selection à¶´à·à¶šà·šà¶¢ තේරීම Network Installation. (Disabled: Unable to fetch package lists, check your network connection) à¶¢à·à¶½ ස්ථà·à¶´à¶±à¶º. (à¶…à¶šà·Šâ€à¶»à·’යයි: à¶´à·à¶šà·šà¶¢ à¶½à·à¶ºà·’ස්තු ලබ෠ගà·à¶±à·“මට නොහà·à¶š, ඔබගේ à¶¢à·à¶½ සම්බන්ධතà·à·€à¶º පරීක්ෂ෠කරන්න) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> මෙම පරිගණකය %1 පිහිටුවීම සඳහ෠අවම à¶…à·€à·à·Šâ€à¶ºà¶­à· සපුරà·à¶½à¶±à·Šà¶±à·š à¶±à·à¶­. <br/>පිහිටුවීම දිගටම කරගෙන ය෠නොහà·à¶š. <strong>විස්තර...</strong> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> මෙම පරිගණකය %1 ස්ථà·à¶´à¶±à¶º සඳහ෠අවම à¶…à·€à·à·Šâ€à¶ºà¶­à· සපුරà·à¶½à¶±à·Šà¶±à·š à¶±à·à¶­. <br/>ස්ථà·à¶´à¶±à¶º දිගටම කරගෙන ය෠නොහà·à¶š. <strong>විස්තර...</strong> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. මෙම පරිගණකය %1 පිහිටුවීම සඳහ෠නිර්දේà·à·’à¶­ සමහර à¶…à·€à·à·Šâ€à¶ºà¶­à· සපුරà·à¶½à¶±à·Šà¶±à·š à¶±à·à¶­. <br/>පිහිටුවීම දිගටම කරගෙන ය෠හà·à¶š, නමුත් සමහර විà·à·šà·‚à·à¶‚à¶œ à¶šà·Šâ€à¶»à·’ය෠විරහිත විය à·„à·à¶š. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. මෙම පරිගණකය %1 ස්ථà·à¶´à¶±à¶º කිරීම සඳහ෠නිර්දේà·à·’à¶­ සමහර à¶…à·€à·à·Šâ€à¶ºà¶­à· සපුරà·à¶½à¶±à·Šà¶±à·š à¶±à·à¶­. <br/>ස්ථà·à¶´à¶±à¶º දිගටම කරගෙන ය෠හà·à¶š, නමුත් සමහර විà·à·šà·‚à·à¶‚à¶œ à¶šà·Šâ€à¶»à·’ය෠විරහිත විය à·„à·à¶š. This program will ask you some questions and set up %2 on your computer. මෙම à·€à·à¶©à·ƒà¶§à·„à¶± ඔබෙන් à¶´à·Šâ€à¶»à·à·Šà¶± කිහිපයක් අසන à¶…à¶­à¶» ඔබේ පරිගණකයේ %2 සකසනු ඇත. <h1>Welcome to the Calamares setup program for %1</h1> <strong>%1 සඳහ෠Calamares à·ƒà·à¶šà·ƒà·”ම් à·€à·à¶©à·ƒà¶§à·„à¶± වෙත à·ƒà·à¶¯à¶»à¶ºà·™à¶±à·Š පිළිගනිමු</strong> <h1>Welcome to %1 setup</h1> <strong>%1 පිහිටුවීමට à·ƒà·à¶¯à¶»à¶ºà·™à¶±à·Š පිළිගනිමු</strong> <h1>Welcome to the Calamares installer for %1</h1> <strong>%1 සඳහ෠Calamares ස්ථà·à¶´à¶šà¶º වෙත à·ƒà·à¶¯à¶»à¶ºà·™à¶±à·Š පිළිගනිමු</strong> <h1>Welcome to the %1 installer</h1> <strong>%1 ස්ථà·à¶´à¶šà¶º වෙත à·ƒà·à¶¯à¶»à¶ºà·™à¶±à·Š පිළිගනිමු</strong> Your username is too long. පරිà·à·“ලක à¶±à·à¶¸à¶º දිග à·€à·à¶©à·’ය. '%1' is not allowed as username. '%1' පරිà·à·“ලක à¶±à·à¶¸à¶ºà¶šà·Š ලෙස ඉඩ නොදේ. Your username must start with a lowercase letter or underscore. ඔබගේ පරිà·à·“ලක à¶±à·à¶¸à¶º කුඩ෠අකුරකින් හ෠යටි ඉරකින් ආරම්භ විය යුතුය. Only lowercase letters, numbers, underscore and hyphen are allowed. කුඩ෠අකුරු, ඉලක්කම්, යටි ඉරි සහ තනි ඉර පමණක් ඉඩ දෙනු à¶½à·à¶¶à·š. Your hostname is too short. ඔබගේ සත්කà·à¶»à¶š à¶±à·à¶¸à¶º කෙටි à·€à·à¶©à·’ය. Your hostname is too long. ඔබේ සත්කà·à¶»à¶š à¶±à·à¶¸à¶º දිග à·€à·à¶©à·’යි. '%1' is not allowed as hostname. '%1' à¶°à·à¶»à¶š à¶±à·à¶¸à¶º ලෙස ඉඩ නොදේ. Only letters, numbers, underscore and hyphen are allowed. අකුරු, ඉලක්කම්, යටි ඉරි සහ තනි ඉර පමණක් ඉඩ දෙනු à¶½à·à¶¶à·š. Your passwords do not match! ඔබගේ මුරපද නොගà·à¶½à¶´à·š! OK! හරි! Setup Failed පිහිටුවීම à¶…à·ƒà·à¶»à·Šà¶®à¶š විය Installation Failed ස්ථà·à¶´à¶±à¶º à¶…à·ƒà·à¶»à·Šà¶®à¶š විය The setup of %1 did not complete successfully. %1 à·„à·’ පිහිටුවීම à·ƒà·à¶»à·Šà¶®à¶šà·€ සම්පූර්ණ නොවීය. The installation of %1 did not complete successfully. %1 ස්ථà·à¶´à¶±à¶º à·ƒà·à¶»à·Šà¶®à¶šà·€ නිම නොවීය. Setup Complete පිහිටුවීම සම්පූර්ණයි Installation Complete ස්ථà·à¶´à¶±à¶º සම්පූර්ණයි The setup of %1 is complete. %1 à·„à·’ පිහිටුවීම සම්පූර්ණයි. The installation of %1 is complete. %1 ස්ථà·à¶´à¶±à¶º සම්පූර්ණයි. Package Selection à¶´à·à¶šà·šà¶¢ තේරීම Please pick a product from the list. The selected product will be installed. කරුණà·à¶šà¶» à¶½à·à¶ºà·’ස්තුවෙන් නිෂ්පà·à¶¯à¶±à¶ºà¶šà·Š à¶­à·à¶»à¶±à·Šà¶±. à¶­à·à¶»à·à¶œà¶­à·Š නිෂ්පà·à¶¯à¶±à¶º ස්ථà·à¶´à¶±à¶º කෙරේ. Packages à¶´à·à¶šà·šà¶¢ Install option: <strong>%1</strong> ස්ථà·à¶´à¶± විකල්පය: <strong>%1</strong> None කිසිවක් à¶±à·à¶­ Summary à·ƒà·à¶»à·à¶‚à·à¶º This is an overview of what will happen once you start the setup procedure. මෙය ඔබ à·ƒà·à¶šà·ƒà·”ම් à¶šà·Šâ€à¶»à·’ය෠පටිපà·à¶§à·’ය ආරම්භ à¶šà·… පසු කුමක් සිදුවේද යන්න à¶´à·’à·…à·’à¶¶à¶³ දළ විà·à·Šà¶½à·šà·‚ණයකි. This is an overview of what will happen once you start the install procedure. මෙය ඔබ ස්ථà·à¶´à¶± à¶šà·Šâ€à¶»à·’ය෠පටිපà·à¶§à·’ය ආරම්භ à¶šà·… පසු කුමක් සිදුවේද යන්න à¶´à·’à·…à·’à¶¶à¶³ දළ විà·à·Šà¶½à·šà·‚ණයකි. ContextualProcessJob Contextual Processes Job සන්දර්භ à¶šà·Šâ€à¶»à·’යවලිය CreatePartitionDialog Create a Partition කොටසක් à·ƒà·à¶¯à¶±à·Šà¶± Si&ze: à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º: MiB MiB Partition &Type: කොටස් වර්ගය (&T): Primar&y à¶´à·Šâ€à¶»à¶°à·à¶± (&y) E&xtended දීර්ග කිරීම (&E) Fi&le System: ගොනු පද්ධතිය: LVM LV name LVM LV à¶±à·à¶¸à¶º &Mount Point: සවිකිරීමේ ස්ථà·à¶±à¶º (&M) Flags: වර්ගීකරන à¶±à·à¶¸à¶º: Label for the filesystem ගොනු පද්ධතිය සඳහ෠ලේබලය FS Label: FS ලේබලය: En&crypt සංකේතනය කරන්න (&C) Logical à¶­à·à¶»à·Šà¶šà·’à¶š Primary à¶´à·Šâ€à¶»à¶°à·à¶± GPT GPT Mountpoint already in use. Please select another one. සවිකිරීම දà·à¶±à¶§à¶¸à¶­à·Š à¶·à·à·€à·’තයේ ඇත. කරුණà·à¶šà¶» වෙනත් à¶‘à¶šà¶šà·Š à¶­à·à¶»à¶±à·Šà¶±. Mountpoint must start with a <tt>/</tt>. මවුන්ට්පොයින්ට් à¶‘à¶š <tt>/ </tt>සමඟ ආරම්භ විය යුතුය. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. %4 ඇතුළත් කිරීම් සමඟ %3 (%2) මත නව %1MiB කොටසක් à·ƒà·à¶¯à¶±à·Šà¶±. Create new %1MiB partition on %3 (%2). %3 (%2) මත නව %1MiB කොටසක් à·ƒà·à¶¯à¶±à·Šà¶±. Create new %2MiB partition on %4 (%3) with file system %1. %1 ගොනු පද්ධතිය සමඟ %4 (%3) මත නව %2MiB කොටසක් à·ƒà·à¶¯à¶±à·Šà¶±. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. <strong>%4</strong> ඇතුළත් කිරීම් සමඟ <strong>%3</strong> (%2) මත නව <strong>%1MiB</strong> කොටසක් à·ƒà·à¶¯à¶±à·Šà¶±. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). <strong>%3</strong> (%2) මත නව <strong>%1MiB</strong> කොටසක් à·ƒà·à¶¯à¶±à·Šà¶±. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%1</strong> ගොනු පද්ධතිය සමඟ <strong>%4</strong> (%3) මත නව <strong>%2MiB</strong> කොටසක් à·ƒà·à¶¯à¶±à·Šà¶±. Creating new %1 partition on %2. %2 මත නව %1 කොටස නිර්මà·à¶«à¶º කරමින් පවතී. The installer failed to create partition on disk '%1'. ස්ථà·à¶´à¶šà¶º '%1' à¶­à·à¶§à·’යේ කොටසක් සෑදීමට අසමත් විය. CreatePartitionTableDialog Create Partition Table කොටස් වගුව à·ƒà·à¶¯à¶±à·Šà¶± Creating a new partition table will delete all existing data on the disk. නව කොටස් වගුවක් සෑදීමෙන් à¶­à·à¶§à·’යේ පවතින සියලුම දත්ත මà·à¶šà·“යනු ඇත. What kind of partition table do you want to create? ඔබට කුමන ආකà·à¶»à¶ºà·š කොටස් වගුවක් නිර්මà·à¶«à¶º කිරීමට à¶…à·€à·à·Šâ€à¶ºà¶¯? Master Boot Record (MBR) à¶´à·Šâ€à¶»à¶°à·à¶± ඇරඹුම් à·€à·à¶»à·Šà¶­à·à·€ (MBR) GUID Partition Table (GPT) GUID කොටස් වගුව (GPT) CreatePartitionTableJob Create new %1 partition table on %2. %2 මත නව %1 කොටස් වගුවක් à·ƒà·à¶¯à¶±à·Šà¶±. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). %2 (%3) මත නව %1 කොටස් වගුවක් à·ƒà·à¶¯à¶±à·Šà¶±. Creating new %1 partition table on %2. %2 මත නව% 1 කොටස් වගුවක් නිර්මà·à¶«à¶º කිරීම. The installer failed to create a partition table on %1. ස්ථà·à¶´à¶šà¶º %1 මත කොටස් වගුවක් සෑදීමට අසමත් විය. CreateUserJob Create user %1 %1 පරිà·à·“ලක à·ƒà·à¶¯à¶±à·Šà¶± Create user <strong>%1</strong>. <strong>%1</strong> පරිà·à·“ලක à·ƒà·à¶¯à¶±à·Šà¶±. Preserving home directory හොම් à·†à·à¶½à·Šà¶©à¶»à¶º සංරක්ෂණය කිරීම Creating user %1 %1 පරිà·à·“ලක සෑදෙමින් Configuring user %1 %1 පරිà·à·“ලක වින්â€à¶ºà·à·ƒà¶œà¶­ වෙමින් Setting file permissions ගොනු අවසර à·ƒà·à¶šà·ƒà·“ම CreateVolumeGroupDialog Create Volume Group වෙළුම් à¶šà¶«à·Šà¶©à·à¶ºà¶¸à¶šà·Š à·ƒà·à¶¯à¶±à·Šà¶± CreateVolumeGroupJob Create new volume group named %1. %1 නමින් නව වෙළුම් à¶šà¶«à·Šà¶©à·à¶ºà¶¸à¶šà·Š à·ƒà·à¶¯à¶±à·Šà¶±. Create new volume group named <strong>%1</strong>. <strong>%1</strong> නමින් නව වෙළුම් à¶šà¶«à·Šà¶©à·à¶ºà¶¸à¶šà·Š à·ƒà·à¶¯à¶±à·Šà¶±. Creating new volume group named %1. %1 නමින් නව වෙළුම් à¶šà¶«à·Šà¶©à·à¶ºà¶¸à¶šà·Š නිර්මà·à¶«à¶º කිරීම. The installer failed to create a volume group named '%1'. ස්ථà·à¶´à¶šà¶º '%1' නමින් වෙළුම් à¶šà¶«à·Šà¶©à·à¶ºà¶¸à¶šà·Š සෑදීමට අසමත් විය. DeactivateVolumeGroupJob Deactivate volume group named %1. %1 නම් වෙළුම් à¶šà¶«à·Šà¶©à·à¶ºà¶¸ à¶…à¶šà·Šâ€à¶»à·’ය කරන්න. Deactivate volume group named <strong>%1</strong>. <strong>%1</strong> නම් වෙළුම් à¶šà¶«à·Šà¶©à·à¶ºà¶¸ à¶…à¶šà·Šâ€à¶»à·’ය කරන්න. The installer failed to deactivate a volume group named %1. ස්ථà·à¶´à¶šà¶º %1 නම් වූ පරිම෠සමූහයක් à¶…à¶šà·Šâ€à¶»à·’ය කිරීමට අසමත් විය. DeletePartitionJob Delete partition %1. %1 කොටස මකන්න. Delete partition <strong>%1</strong>. <strong>%1</strong> කොටස මකන්න. Deleting partition %1. %1 කොටස මක෠දමමින්. The installer failed to delete partition %1. ස්ථà·à¶´à¶šà¶º %1 කොටස මක෠දà·à¶¸à·“මට අසමත් විය. DeviceInfoWidget This device has a <strong>%1</strong> partition table. මෙම à¶‹à¶´à·à¶‚ගයට අදà·à¶½à·€ <strong>%1</strong> කොටස් වගුවක් ඇත. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. මෙය <strong>ලූප්</strong> à¶‹à¶´à·à¶‚ගයකි. <br/><br/>එය බ්ලොක් à¶‹à¶´à·à¶‚ගයක් ලෙස ගොනුවක් වෙත à¶´à·Šâ€à¶»à·€à·šà· විය à·„à·à¶šà·’ කොටස් වගුවක් නොමà·à¶­à·’ ව්â€à¶ºà·à¶¢ à¶‹à¶´à·à¶‚ගයකි. මෙවà·à¶±à·’ à·ƒà·à¶šà·ƒà·”මක à·ƒà·à¶¸à·à¶±à·Šâ€à¶ºà¶ºà·™à¶±à·Š අඩංගු වන්නේ à¶‘à¶šà·Š ගොනු පද්ධතියක් පමණි. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. මෙම ස්ථà·à¶´à¶šà¶ºà¶§ <strong>à¶­à·à¶»à·à¶œà¶­à·Š ගබඩ෠උපà·à¶‚ගයේ කොටස් වගුවක් හඳුනà·à¶œà¶­ නොහà·à¶š</strong>. <br/><br/>à¶‹à¶´à·à¶‚ගයට කොටස් වගුවක් à¶±à·à¶­, à¶±à·à¶­à·„ොත් කොටස් වගුව දූෂිත වී හ෠නොදන්න෠වර්ගයකි. <br/>මෙම ස්ථà·à¶´à¶šà¶ºà¶§ ඔබ වෙනුවෙන් ස්වයංක්â€à¶»à·“යව හ෠අතින් කොටස් කිරීමේ පිටුව හරහ෠නව කොටස් වගුවක් සෑදිය à·„à·à¶š. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br><strong>EFI</strong> ඇරඹුම් පරිසරයකින් ආරම්භ වන නවීන පද්ධති සඳහ෠නිර්දේà·à·’à¶­ කොටස් වගු වර්ගය මෙයයි. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>මෙම කොටස් වගු වර්ගය සුදුසු වන්නේ <strong>BIOS</strong> ඇරඹුම් පරිසරයකින් ආරම්භ වන à¶´à·à¶»à¶«à·’ පද්ධති සඳහ෠පමණි. අනෙකුත් බොහ෠අවස්ථà·à·€à¶±à·Šà·„ිදී GPT නිර්දේ෠කෙරේ. <br><br><strong>අවවà·à¶¯à¶ºà¶ºà·’:</strong> MBR කොටස් වගුව යල් à¶´à·à¶± ගිය MS-DOS යුගයේ සම්මතයකි. <br><em>à¶´à·Šâ€à¶»à¶°à·à¶±</em> කොටස් 4à¶šà·Š පමණක් සෑදිය à·„à·à¶šà·’ à¶…à¶­à¶», එම 4න් à¶‘à¶šà¶šà·Š <strong>දීර්à¶</strong> à¶šà·… කොටසක් විය à·„à·à¶š, à¶‘à·„à·’ බොහ෠<strong>à¶­à·à¶»à·Šà¶šà·’à¶š</strong> කොටස් අඩංගු විය à·„à·à¶š. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. à¶­à·à¶»à·à¶œà¶­à·Š ගබඩ෠උපà·à¶‚ගයේ <strong>කොටස් වගුවේ</strong> වර්ගය. <br>කොටස් වගු වර්ගය වෙනස් කිරීමට ඇති එකම à¶šà·Šâ€à¶»à¶¸à¶º නම් ගබඩ෠උපà·à¶‚ගයේ ඇති සියලුම දත්ත විනà·à· කරන කොටස් වගුව මුල සිට මක෠ප්â€à¶»à¶­à·’නිර්මà·à¶«à¶º කිරීමයි. <br>මෙම ස්ථà·à¶´à¶šà¶º ඔබ වෙනත් ආකà·à¶»à¶ºà¶šà·’න් à¶­à·à¶»à· ගන්නේ නම් මිස වත්මන් කොටස් වගුව තබ෠ගනී. <br>විà·à·Šà·€à·à·ƒ à¶±à·à¶­à·Šà¶±à¶¸à·Š, නවීන පද්ධති GPT මත මනà·à¶´ වේ. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Dracut සඳහ෠LUKS වින්â€à¶ºà·à·ƒà¶º %1 වෙත ලියන්න Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut සඳහ෠LUKS වින්â€à¶ºà·à·ƒà¶º ලිවීම මඟ හරින්න: "/" කොටස සංකේතනය à¶šà¶» නොමà·à¶­ Failed to open %1 %1 විවෘත කිරීමට අසමත් විය DummyCppJob Dummy C++ Job ව්â€à¶ºà·à¶¢ C++ à¶šà·Šâ€à¶»à·’යවලියක් EditExistingPartitionDialog Edit Existing Partition පවතින කොටසක් සංස්කරණය කරන්න Con&tent: අන්තර්ගතය(&t): &Keep තබ෠ගන්න (&K) Format මක෠දමන්න Warning: Formatting the partition will erase all existing data. අවවà·à¶¯à¶ºà¶ºà·’: කොටස මà·à¶šà·“මෙන් පවතින සියලුම දත්ත ඉවත්වනු ඇත. &Mount Point: සවිකිරීමේ ස්ථà·à¶±à¶º (&M) Si&ze: à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º: MiB MiB Fi&le System: ගොනු පද්ධතිය: Flags: වර්ගීකරන à¶±à·à¶¸à¶º: Label for the filesystem ගොනු පද්ධතිය සඳහ෠ලේබලය FS Label: FS ලේබලය: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form à¶´à·à¶»à¶¸à¶º En&crypt system පද්ධතිය සංකේතනය (&C) කරන්න Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. ඔබේ පද්ධතිය සම්පූර්ණ පද්ධතියම සංකේතනය කිරීමට තරම් සංකේතනයට සහය දක්වන බවක් නොපෙනේ. ඔබට සංකේතනය සක්â€à¶»à·“ය à¶šà·… à·„à·à¶š, නමුත් à¶šà·Šâ€à¶»à·’යà·à¶šà·à¶»à·“ත්වයට à·„à·à¶±à·’ විය à·„à·à¶š. Passphrase මුරපදය Confirm passphrase මුරපදය තහවුරු කරන්න Please enter the same passphrase in both boxes. කරුණà·à¶šà¶» කොටු දෙකෙහිම එකම මුර-à·€à·à¶šà·’à¶šà¶© ඇතුලත් කරන්න. ErrorDialog Details: විස්තර: Would you like to paste the install log to the web? ඔබ ස්ථà·à¶´à¶± ලොගය අන්තර්ජà·à¶½à¶ºà¶§ ඇලවීමට à¶šà·à¶¸à¶­à·’ද? FillGlobalStorageJob Set partition information කොටස් තොරතුරු සකසන්න Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> <strong>%3</strong> විà·à·šà·‚à·à¶‚à¶œ සහිත <strong>නව</strong> %2 පද්ධති කොටසේ %1 ස්ථà·à¶´à¶±à¶º කරන්න Install %1 on <strong>new</strong> %2 system partition. <strong>නව</strong> %2 පද්ධති කොටසෙහි %1 ස්ථà·à¶´à¶±à¶º කරන්න. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. <strong>නව</strong> %2 කොටස සවිකිරීමේ ලක්ෂ්â€à¶ºà¶º <strong>%1</strong> සහ විà·à·šà·‚à·à¶‚à¶œ <strong>%3</strong> සමඟ සකසන්න Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. <strong>නව</strong> %2 කොටස සවිකිරීමේ ලක්ෂ්â€à¶ºà¶º <strong>%1</strong>%3 සමඟ සකසන්න. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. <strong>%4</strong> විà·à·šà·‚à·à¶‚à¶œ සහිත %3 පද්ධති කොටස <strong>%1</strong> මත %2 ස්ථà·à¶´à¶±à¶º කරන්න. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. %3 කොටස සකසන්න <strong>%1</strong> සවිකිරීමේ ලක්ෂ්â€à¶ºà¶º <strong>%2</strong> සහ විà·à·šà·‚à·à¶‚à¶œ <strong>%4</strong> සමඟින්. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. %3 කොටස <strong>%1</strong> සවිකිරීමේ ලක්ෂ්â€à¶ºà¶º <strong>%2</strong>%4 සමඟ සකසන්න. Install %2 on %3 system partition <strong>%1</strong>. %3 පද්ධති කොටස <strong>%1</strong> මත %2 ස්ථà·à¶´à¶±à¶º කරන්න. Install boot loader on <strong>%1</strong>. <strong>%1</strong> මත ඇරඹුම් à¶šà·à¶»à¶šà¶º ස්ථà·à¶´à¶±à¶º කරන්න. Setting up mount points. සවි කිරීම් ස්ථà·à¶± à·ƒà·à¶šà·ƒà·“ම. FinishedPage Form à¶´à·à¶»à¶¸à¶º &Restart now à¶±à·à·€à¶­ ආරම්භ කරන්න (&R) <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <strong>සියල්ල à·ƒà·à¶»à·Šà¶®à¶šà·€ අවසන් විය</strong>.<br>%1 ඔබගේ පරිගණකයේ පිහිටුව෠ඇත.<br>ඔබට දà·à¶±à·Š ඔබගේ නව පද්ධතිය à¶·à·à·€à·’ත෠කිරීමට පටන් ගත à·„à·à¶š. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>මෙම කොටුව සලකුණු à¶šà·… විට, ඔබ <strong>Done</strong> මත ක්ලික් à¶šà·… විට à·„à· à·ƒà·à¶šà·ƒà·”ම් à·€à·à¶©à·ƒà¶§à·„à¶± වස෠දà·à¶¸à·– විට ඔබේ පද්ධතිය වහà·à¶¸ à¶±à·à·€à¶­ ආරම්භ වනු ඇත.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <strong>සියල්ල à·ƒà·à¶»à·Šà¶®à¶šà·€ අවසන් විය</strong>.<br>%1 ඔබගේ පරිගණකයේ ස්ථà·à¶´à¶±à¶º à¶šà¶» ඇත.<br>ඔබට දà·à¶±à·Š ඔබගේ නව පද්ධතියට à¶±à·à·€à¶­ ආරම්භ à¶šà·… à·„à·à¶š, à¶±à·à¶­à·„ොත් %2 සජීවී පරිසරය à¶·à·à·€à·’ත෠කිරීම දිගටම කරගෙනය෠හà·à¶š. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>මෙම කොටුව සලකුණු à¶šà·… විට, ඔබ <strong>Done</strong> මත ක්ලික් à¶šà·… විට හ෠ස්ථà·à¶´à¶š à·€à·à¶©à·ƒà¶§à·„à¶± වස෠දà·à¶¸à·– විට ඔබේ පද්ධතිය වහà·à¶¸ à¶±à·à·€à¶­ ආරම්භ වනු ඇත.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <strong>පිහිටුවීම à¶…à·ƒà·à¶»à·Šà¶®à¶š විය</strong><br>% 1 ඔබේ පරිගණකයේ පිහිටුව෠නà·à¶­. <br>දà·à·‚ පණිවිඩය වූයේ: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <strong>ස්ථà·à¶´à¶±à¶º à¶…à·ƒà·à¶»à·Šà¶®à¶š විය</strong><br>%1 ඔබේ පරිගණකයේ ස්ථà·à¶´à¶±à¶º à¶šà¶» à¶±à·à¶­. <br>දà·à·‚ පණිවිඩය වූයේ: %2. FinishedQmlViewStep Finish අවසන් FinishedViewStep Finish අවසන් FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. %4 මත කොටස %1 (ගොනු පද්ධතිය: %2, à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º: %3 MiB) ආකෘතිකරණය කරන්න. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%3MiB</strong> කොටස <strong>%1</strong> ගොනු පද්ධතිය <strong>%2</strong> සමඟ ආකෘති කරන්න. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. %2 ගොනු පද්ධතිය සමඟ %1 කොටස à·„à·à¶©à¶­à¶½ à¶œà·à¶±à·Šà·€à·“ම. The installer failed to format partition %1 on disk '%2'. ස්ථà·à¶´à¶šà¶º '%2' à¶­à·à¶§à·’යේ %1 කොටස à·„à·à¶©à¶­à¶½ à¶œà·à¶±à·Šà·€à·“මට අසමත් විය. GeneralRequirements has at least %1 GiB available drive space අවම à·€à·à¶ºà·™à¶±à·Š %1 GiB ලබ෠ගත à·„à·à¶šà·’ à¶°à·à·€à¶šà¶ºà·š ඉඩක් ඇත There is not enough drive space. At least %1 GiB is required. à¶´à·Šâ€à¶»à¶¸à·à¶«à·€à¶­à·Š à¶°à·à·€à¶± ඉඩක් නොමà·à¶­. අවම à·€à·à¶ºà·™à¶±à·Š %1 GiB à¶…à·€à·à·Šâ€à¶º වේ. has at least %1 GiB working memory අවම à·€à·à¶ºà·™à¶±à·Š %1 GiB à¶šà·Šâ€à¶»à·’යà·à¶šà·à¶»à·“ මතකයක් ඇත The system does not have enough working memory. At least %1 GiB is required. පද්ධතියට ප්රමà·à¶«à·€à¶­à·Š ක්රියà·à¶šà·à¶»à·“ මතකයක් නොමà·à¶­. අවම à·€à·à¶ºà·™à¶±à·Š %1 GiB à¶…à·€à·à·Šâ€à¶º වේ. is plugged in to a power source විදුලි à¶´à·Šâ€à¶»à¶·à·€à¶ºà¶šà¶§ සම්බන්ධ à¶šà¶» ඇත The system is not plugged in to a power source. පද්ධතිය විදුලි à¶´à·Šâ€à¶»à¶·à·€à¶ºà¶šà¶§ සම්බන්ධ à¶šà¶» නොමà·à¶­. is connected to the Internet අන්තර්ජà·à¶½à¶ºà¶§ සම්බන්ධවී ඇත The system is not connected to the Internet. පද්ධතිය අන්තර්ජà·à¶½à¶ºà¶§ සම්බන්ධවී නොමà·à¶­. is running the installer as an administrator (root) ස්ථà·à¶´à¶šà¶º පරිපà·à¶½à¶šà¶ºà·™à¶šà·” ලෙස à¶°à·à·€à¶±à¶º කරයි (root) The setup program is not running with administrator rights. à·ƒà·à¶šà·ƒà·”ම් à·€à·à¶©à·ƒà¶§à·„à¶± පරිපà·à¶½à¶š අයිතිවà·à·ƒà·’කම් සමඟ à¶šà·Šâ€à¶»à·’යà·à¶­à·Šà¶¸à¶š නොවේ. The installer is not running with administrator rights. ස්ථà·à¶´à¶šà¶º පරිපà·à¶½à¶š අයිතිවà·à·ƒà·’කම් සමඟ à¶šà·Šâ€à¶»à·’යà·à¶­à·Šà¶¸à¶š නොවේ. has a screen large enough to show the whole installer සම්පූර්ණ ස්ථà·à¶´à¶šà¶º පෙන්වීමට තරම් විà·à·à¶½ තිරයක් ඇත The screen is too small to display the setup program. à·ƒà·à¶šà·ƒà·”ම් à·€à·à¶©à·ƒà¶§à·„à¶± à¶´à·Šâ€à¶»à¶¯à¶»à·Šà·à¶±à¶º කිරීමට තිරය කුඩ෠වà·à¶©à·’ය. The screen is too small to display the installer. ස්ථà·à¶´à¶šà¶º වෙත පෙන්වීමට තිරය කුඩ෠වà·à¶©à·’ය. HostInfoJob Collecting information about your machine. ඔබගේ යන්ත්â€à¶»à¶º à¶´à·’à·…à·’à¶¶à¶³ තොරතුරු à¶»à·à·ƒà·Š කරමින් සිටී. IDJob OEM Batch Identifier OEM à¶šà¶«à·Šà¶©à·à¶ºà¶¸à·Š à·„à·à¶³à·”නුම්කà·à¶»à¶šà¶º Could not create directories <code>%1</code>. <code>%1</code> ගොනු à¶­à·à¶±à·“මට නොහà·à¶šà·’ විය. Could not open file <code>%1</code>. <code>%1</code> ගොනුව විවෘත කිරීමට නොහà·à¶šà·’ විය. Could not write to file <code>%1</code>. <code>%1</code> ගොනුවට ලිවීමට නොහà·à¶šà·’ විය. InitcpioJob Creating initramfs with mkinitcpio. mkinitcpio සමඟ initramfs නිර්මà·à¶«à¶º කිරීම. InitramfsJob Creating initramfs. initramfs නිර්මà·à¶«à¶º කිරීම. InteractiveTerminalPage Konsole not installed කොන්සà·à¶½à·Š ස්ථà·à¶´à¶±à¶º à¶šà¶» à¶±à·à¶­ Please install KDE Konsole and try again! කරුණà·à¶šà¶» KDE කොන්සà·à¶½à·Š ස්ථà·à¶´à¶±à¶º à¶šà¶» à¶±à·à·€à¶­ à¶‹à¶­à·Šà·ƒà·à·„ කරන්න! Executing script: &nbsp;<code>%1</code> ස්ක්â€à¶»à·’à¶´à·Šà¶§à·Š à¶šà·Šâ€à¶»à·’යà·à¶­à·Šà¶¸à¶š කරමින්: &nbsp;<code>%1</code><code> InteractiveTerminalViewStep Script ස්ක්â€à¶»à¶´à·Šà¶§à·Š KeyboardQmlViewStep Keyboard යතුරුපුවරුව KeyboardViewStep Keyboard යතුරුපුවරුව LCLocaleDialog System locale setting පද්ධති ස්ථà·à¶± à·ƒà·à¶šà·ƒà·“ම The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. පද්ධති පෙදෙසි à·ƒà·à¶šà·ƒà·”ම සමහර විධà·à¶± රේඛ෠පරිà·à·“ලක අතුරුමුහුණත් මූලද්â€à¶»à·€à·Šâ€à¶º සඳහ෠භà·à·‚à·à·€ සහ à¶…à¶šà·Šà·‚à¶» කට්ටලයට බලපà·à¶ºà·’. <br/>වත්මන් à·ƒà·à¶šà·ƒà·”ම <strong>%1</strong> වේ. &Cancel අවලංගු කරන්න &OK හරි (&O) LOSHJob Configuring encrypted swap. සංකේතà·à¶­à·Šà¶¸à¶š swap වින්â€à¶ºà·à·ƒ කිරීම. No target system available. ඉලක්ක පද්ධතියක් නොමà·à¶­. No rootMountPoint is set. මූල මවුන්ට් පොයින්ට් à¶‘à¶šà¶šà·Š සකස෠නà·à¶­. No configFilePath is set. configFilePath à¶‘à¶šà¶šà·Š සකස෠නà·à¶­. LicensePage Form à¶´à·à¶»à¶¸à¶º <h1>License Agreement</h1> <h1>බලපත්ර එකගතà·à·€à¶º</h1> I accept the terms and conditions above. මම ඉහත නියමයන් සහ කොන්දේසි පිළිගනිමි. Please review the End User License Agreements (EULAs). කරුණà·à¶šà¶» අවසන් පරිà·à·“ලක බලපත්â€à¶» ගිවිසුම් (EULAs) සමà·à¶½à·à¶ à¶±à¶º කරන්න. This setup procedure will install proprietary software that is subject to licensing terms. මෙම à·ƒà·à¶šà·ƒà·”ම් à¶šà·Šâ€à¶»à·’ය෠පටිපà·à¶§à·’ය බලපත්â€à¶» කොන්දේසි වලට යටත් වන හිමිකà·à¶» මෘදුකà·à¶‚à¶œ ස්ථà·à¶´à¶±à¶º කරනු ඇත. If you do not agree with the terms, the setup procedure cannot continue. ඔබ නියමයන් සමඟ à¶‘à¶šà¶Ÿ නොවන්නේ නම්, à·ƒà·à¶šà·ƒà·”ම් à¶šà·Šâ€à¶»à·’ය෠පටිපà·à¶§à·’ය දිගටම කරගෙන ය෠නොහà·à¶š. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. මෙම à·ƒà·à¶šà·ƒà·”ම් à¶šà·Šâ€à¶»à·’ය෠පටිපà·à¶§à·’යට අමතර විà·à·šà·‚à·à¶‚à¶œ à·ƒà·à¶´à¶ºà·“මට සහ පරිà·à·“ලක අත්දà·à¶šà·“ම à·€à·à¶©à·’දියුණු කිරීමට බලපත්â€à¶» නියමයන්ට යටත් වන හිමිකà·à¶» මෘදුකà·à¶‚à¶œ ස්ථà·à¶´à¶±à¶º à¶šà·… à·„à·à¶š. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. ඔබ නියමයන් සමඟ à¶‘à¶šà¶Ÿ නොවන්නේ නම්, හිමිකà·à¶» මෘදුකà·à¶‚à¶œ ස්ථà·à¶´à¶±à¶º නොකරනු ඇති à¶…à¶­à¶», à¶’ වෙනුවට විවෘත මූලà·à·à·Šâ€à¶» විකල්ප à¶·à·à·€à·’ත෠කරනු ඇත. LicenseViewStep License බලපත්â€à¶»à¶º LicenseWidget URL: %1 à¶’.à·ƒ.නි.: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 à¶°à·à·€à¶šà¶º</strong><br/>%2 කින් <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 à¶ à·’à¶­à·Šâ€à¶»à¶š à¶°à·à·€à¶šà¶º</strong><br/><font color="Grey">%2 කින්</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 à¶¶à·Šâ€à¶»à·€à·”සර ප්ලගිනය</strong><br/><font color="Grey"> %2 කින්</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 à¶šà·à¶©à·™à¶šà·Š</strong><br/><font color="Grey">%2 කින්</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 à¶´à·à¶šà·šà¶¢à¶º</strong><br><font color="Grey">%2 කින්</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">%2 කින්</font> File: %1 ගොනුව: %1 Hide license text බලපත්â€à¶» පෙළ සඟවන්න Show the license text බලපත්ර à¶´à·à¶¨à¶º පෙන්වන්න Open license agreement in browser. à¶¶à·Šâ€à¶»à·€à·”සරයේ බලපත්â€à¶» ගිවිසුම විවෘත කරන්න. LocalePage Region: à¶šà¶½à·à¶´à¶ºà·š: Zone: à¶šà¶½à·à¶´à¶º: &Change... වෙනස් කරන්න... LocaleQmlViewStep Location ස්ථà·à¶±à¶º LocaleTests Quit ඉවත් වන්න LocaleViewStep Location ස්ථà·à¶±à¶º LuksBootKeyFileJob Configuring LUKS key file. LUKS යතුරු ගොනුව වින්â€à¶ºà·à·ƒ කරමින්. No partitions are defined. කොටස් නිර්වචනය à¶šà¶» නොමà·à¶­. Encrypted rootfs setup error සංකේතනය කරන ලද rootfs පිහිටුවීමේ දà·à·‚යකි Root partition %1 is LUKS but no passphrase has been set. මූල කොටස %1 LUKS වන නමුත් මුර-à·€à·à¶šà·’à¶šà¶©à¶šà·Š සකස෠නොමà·à¶­. Could not create LUKS key file for root partition %1. මූල කොටස %1 සඳහ෠LUKS යතුරු ගොනුව සෑදිය නොහà·à¶š. Could not configure LUKS key file on partition %1. %1 කොටසේ LUKS යතුරු ගොනුව වින්â€à¶ºà·à·ƒ කිරීමට නොහà·à¶šà·’ විය. MachineIdJob Generate machine-id. යන්ත්â€à¶» à·„à·à¶³à·”නුම්පත ජනනය කරන්න. Configuration Error වින්â€à¶ºà·à·ƒ දà·à·‚ය No root mount point is set for MachineId. MachineId සඳහ෠root mount point à¶‘à¶šà¶šà·Š සකස෠නà·à¶­. Map Timezone: %1 වේල෠කලà·à¶´à¶º:% 1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. කරුණà·à¶šà¶» ස්ථà·à¶´à¶šà¶ºà¶§ පෙදෙසිය යà·à¶¢à¶±à· à¶šà·… à·„à·à¶šà·’ වන පරිදි සිතියමේ ඔබ à¶šà·à¶¸à¶­à·’ ස්ථà·à¶±à¶º à¶­à·à¶»à¶±à·Šà¶± සහ ඔබ සඳහ෠වේල෠කලà·à¶´ à·ƒà·à¶šà·ƒà·“ම්. ඔබට à¶´à·„à¶­ යà·à¶¢à·’à¶­ à·ƒà·à¶šà·ƒà·”ම් මනà·à·€ සකස් à¶šà·… à·„à·à¶š. ඇදගෙන යà·à¶¸à·™à¶±à·Š සිතියම සොයන්න චලනය කිරීමට සහ විà·à·à¶½à¶±à¶º කිරීමට හ෠විà·à·à¶½à¶±à¶º කිරීම සඳහ෠මූසික අනුචලනය à¶·à·à·€à·’ත෠කිරීමට +/- බොත්තම් à¶·à·à·€à·’ත෠කරන්න. NetInstallViewStep Package selection à¶´à·à¶šà·šà¶¢ තේරීම Office software à¶šà·à¶»à·Šà¶ºà·à¶½à·“ය මෘදුකà·à¶‚ගය Office package à¶šà·à¶»à·Šà¶ºà·à¶½à·“ය ඇසුරුම Browser software අතිරික්සු මෘදුකà·à¶‚ගය Browser package අතිරික්සු ඇසුරුම Web browser වියමන අතිරික්සුව Kernel label for netinstall module, Linux kernel කර්නලය Services label for netinstall module, system services සේව෠Login label for netinstall module, choose login manager පිවිසෙන්න Desktop label for netinstall module, choose desktop environment ඩෙස්ක්ටොප් Communication label for netinstall module සන්නිවේදනය Development label for netinstall module සංවර්ධනය Office label for netinstall module à¶šà·à¶»à·Šà¶ºà·à¶½à·“ය Multimedia label for netinstall module බහුමà·à¶°à·Šâ€à¶º Internet label for netinstall module අන්තර්ජà·à¶½à¶º Theming label for netinstall module තේම෠කිරීම Gaming label for netinstall module පරිගණක ක්රීඩ෠Utilities label for netinstall module උපයà·à¶œà·’à¶­à· Applications යෙදුම් NotesQmlViewStep Notes සටහන් OEMPage Ba&tch: à¶šà¶«à·Šà¶©à·à¶ºà¶¸(&t): <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>මෙහි batch-identifier à¶‘à¶šà¶šà·Š ඇතුළු කරන්න. මෙය ඉලක්ක පද්ධතිය තුළ ගබඩ෠කරනු à¶½à·à¶¶à·š.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM වින්â€à¶ºà·à·ƒà¶º</h1><p>Calamares ඉලක්ක පද්ධතිය වින්â€à¶ºà·à·ƒ කිරීමේදී OEM à·ƒà·à¶šà·ƒà·”ම් à¶·à·à·€à·’ත෠කරනු ඇත.</p></body></html> OEMViewStep OEM Configuration OEM වින්â€à¶ºà·à·ƒà¶º Set the OEM Batch Identifier to <code>%1</code>. OEM Batch Identifier <code>%1</code> ලෙස සකසන්න. Offline Select your preferred Region, or use the default settings. ඔබ à¶šà·à¶¸à¶­à·’ à¶šà¶½à·à¶´à¶º à¶­à·à¶»à¶±à·Šà¶±, à¶±à·à¶­à·„ොත් පෙරනිමි à·ƒà·à¶šà·ƒà·”ම් à¶·à·à·€à·’ත෠කරන්න. Timezone: %1 වේල෠කලà·à¶´à¶º:% 1 Select your preferred Zone within your Region. ඔබ à¶šà·à¶¸à¶­à·’ à¶šà¶½à·à¶´à¶º à¶­à·à¶»à¶±à·Šà¶±. Zones à¶šà¶½à·à¶´à¶º: You can fine-tune Language and Locale settings below. ඔබට à¶´à·„à¶­ à¶·à·à·‚à·à·€ සහ ස්ථà·à¶± à·ƒà·à¶šà·ƒà·“ම් මනà·à·€ සකස් à¶šà·… à·„à·à¶š. PWQ Password is too short මුරපදය ඉත෠කෙටිය Password is too long මුරපදය ඉත෠දිගය Password is too weak මුරපදය ඉත෠දුර්වලයි Memory allocation error when setting '%1' '%1' à·ƒà·à¶šà·ƒà·“මේදී මතකය වෙන් කිරීමේ දà·à·‚යකි Memory allocation error මතකය වෙන් කිරීමේ දà·à·‚යකි The password is the same as the old one මුරපදය à¶´à·à¶»à¶«à·’ à¶‘à¶šà¶§ සමà·à¶±à¶ºà·’ The password is a palindrome මුරපදය palindrome වේ The password differs with case changes only මුරපදය වෙනස් වන්නේ සිද්ධි වෙනස් කිරීම් සමඟ පමණි The password is too similar to the old one මුරපදය à¶´à·à¶»à¶«à·’ à¶‘à¶šà¶§ ඉත෠සමà·à¶± ය The password contains the user name in some form මුරපදයේ යම් ආකà·à¶»à¶ºà¶š පරිà·à·“ලක à¶±à·à¶¸à¶º අඩංගු වේ The password contains words from the real name of the user in some form මුරපදයේ යම් ආකà·à¶»à¶ºà¶š පරිà·à·“ලකයà·à¶œà·š à·ƒà·à¶¶à·‘ නමෙන් වචන අඩංගු වේ The password contains forbidden words in some form මුරපදයේ යම් ආකà·à¶»à¶ºà¶š තහනම් වචන අඩංගු වේ The password contains too few digits මුරපදයේ ඉත෠අඩු ඉලක්කම් ඇත The password contains too few uppercase letters මුරපදයේ විà·à·à¶½ අකුරු ඉත෠ස්වල්පයක් ඇත The password contains fewer than %n lowercase letters මුරපදයේ කුඩ෠අකුරු %nà¶šà¶§ වඩ෠අඩු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶ºà¶šà·Š ඇත මුරපදයේ කුඩ෠අකුරු %n à¶šà¶§ වඩ෠අඩු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶ºà¶šà·Š ඇත The password contains too few lowercase letters මුරපදයේ කුඩ෠අකුරු ඉත෠ස්වල්පයක් ඇත The password contains too few non-alphanumeric characters මුරපදයේ à¶…à¶šà·Šà·‚à¶»à·à¶‚à¶š නොවන à¶…à¶šà·Šà·‚à¶» ඉත෠ස්වල්පයක් අඩංගු වේ The password is too short මුරපදය ඉත෠කෙටිය The password does not contain enough character classes මුරපදයේ à¶´à·Šâ€à¶»à¶¸à·à¶«à·€à¶­à·Š à¶…à¶šà·Šà·‚à¶» පන්ති අඩංගු නොවේ The password contains too many same characters consecutively මුරපදයේ à¶‘à¶š හ෠සමà·à¶± අනුලකුණු කිහිපයක් à¶‘à¶š දිගට අඩංගු වේ The password contains too many characters of the same class consecutively මුරපදයේ එකම පන්තියේ අනුලකුණු à·€à·à¶©à·’ ගණනක් à¶‘à¶š දිගට අඩංගු වේ The password contains fewer than %n digits මුරපදයේ ඉලක්කම් %n à¶šà¶§ වඩ෠අඩු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶ºà¶šà·Š අඩංගු වේ මුරපදයේ ඉලක්කම් %n à¶šà¶§ වඩ෠අඩු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶ºà¶šà·Š අඩංගු වේ The password contains fewer than %n uppercase letters මුරපදයේ ලොකු අකුරු %n à¶šà¶§ වඩ෠අඩු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶ºà¶šà·Š ඇත මුරපදයේ ලොකු අකුරු %n à¶šà¶§ වඩ෠අඩු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶ºà¶šà·Š ඇත The password contains fewer than %n non-alphanumeric characters මුරපදයේ à¶…à¶šà·Šà·‚à¶»à·à¶‚à¶š නොවන à¶…à¶šà·Šà·‚à¶» %n à¶šà¶§ වඩ෠අඩු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶ºà¶šà·Š අඩංගු වේ මුරපදයේ à¶…à¶šà·Šà·‚à¶»à·à¶‚à¶š නොවන à¶…à¶šà·Šà·‚à¶» %n à¶šà¶§ වඩ෠අඩු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶ºà¶šà·Š අඩංගු වේ The password is shorter than %n characters මුරපදය à¶…à¶šà·Šà·‚à¶» %n à¶§ වඩ෠කෙටිය මුරපදය à¶…à¶šà·Šà·‚à¶» %n à¶§ වඩ෠කෙටිය The password is a rotated version of the previous one මුරපදය පෙර එකෙහි අනුවà·à¶¯à¶ºà¶šà·’ The password contains fewer than %n character classes මුරපදයේ à¶…à¶šà·Šà·‚à¶» පන්ති %n à¶šà¶§ වඩ෠අඩු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶ºà¶šà·Š අඩංගු වේ මුරපදයේ à¶…à¶šà·Šà·‚à¶» පන්ති %n à¶šà¶§ වඩ෠අඩු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶ºà¶šà·Š අඩංගු වේ The password contains more than %n same characters consecutively මුරපදයේ à¶‘à¶š දිගට එකම à¶…à¶šà·Šà·‚à¶» %nà¶šà¶§ වඩ෠අඩංගු වේ මුරපදයේ à¶‘à¶š දිගට එකම à¶…à¶šà·Šà·‚à¶» %nà¶šà¶§ වඩ෠අඩංගු වේ The password contains more than %n characters of the same class consecutively මුරපදයේ à¶‘à¶š පන්තියේ අනුලකුණු %n à¶šà¶§ වඩ෠එක දිගට අඩංගු වේ මුරපදයේ à¶‘à¶š පන්තියේ අනුලකුණු %n à¶šà¶§ වඩ෠එක දිගට අඩංගු වේ The password contains monotonic sequence longer than %n characters මුරපදයේ à¶…à¶šà·Šà·‚à¶» %n à¶šà¶§ වඩ෠දිග à¶’à¶šà·à¶šà·à¶»à·“ අනුපිළිවෙලක් ඇත මුරපදයේ à¶…à¶šà·Šà·‚à¶» %n à¶šà¶§ වඩ෠දිග à¶’à¶šà·à¶šà·à¶»à·“ අනුපිළිවෙලක් ඇත The password contains too long of a monotonic character sequence මුරපදයේ à¶’à¶šà·à¶šà·à¶»à·“ à¶…à¶šà·Šà·‚à¶» අනුපිළිවෙලක් ඉත෠දිගු වේ No password supplied මුරපදයක් සපය෠නà·à¶­ Cannot obtain random numbers from the RNG device RNG à¶‹à¶´à·à¶‚ගයෙන් අහඹු à¶…à¶‚à¶š ලබ෠ගත නොහà·à¶š Password generation failed - required entropy too low for settings මුරපද à¶‹à¶­à·Šà¶´à·à¶¯à¶±à¶º à¶…à·ƒà·à¶»à·Šà¶®à¶š විය - à·ƒà·à¶šà·ƒà·“ම් සඳහ෠අවà·à·Šâ€à¶º එන්ට්â€à¶»à·œà¶´à·’ය ඉත෠අඩුය The password fails the dictionary check - %1 මුරපදය à·à¶¶à·Šà¶¯ à¶šà·à·‚ පරීක්ෂà·à·€ අසමත් වේ - %1 The password fails the dictionary check මුරපදය à·à¶¶à·Šà¶¯ à¶šà·à·‚ පරීක්ෂà·à·€ අසමත් වේ Unknown setting - %1 නොදන්න෠සà·à¶šà·ƒà·”ම - %1 Unknown setting නොදන්න෠සà·à¶šà·ƒà·”මක් Bad integer value of setting - %1 à·ƒà·à¶šà·ƒà·”මෙහි නරක පූර්ණ සංඛ්â€à¶ºà· අගය - % 1 Bad integer value à·ƒà·à¶šà·ƒà·”මෙහි නරක පූර්ණ සංඛ්â€à¶ºà· අගයක් Setting %1 is not of integer type %1 à·ƒà·à¶šà·ƒà·“ම පූර්ණ සංඛ්â€à¶ºà· වර්ගයට අයත් නොවේ Setting is not of integer type à·ƒà·à¶šà·ƒà·“ම නිඛිල ආකà·à¶»à¶ºà·š නොවේ Setting %1 is not of string type %1 à·ƒà·à¶šà·ƒà·“ම තන්තු වර්ගයට අයත් නොවේ Setting is not of string type à·ƒà·à¶šà·ƒà·“ම තන්තු ආකà·à¶»à¶ºà·š නොවේ Opening the configuration file failed වින්â€à¶ºà·à·ƒ ගොනුව විවෘත කිරීම à¶…à·ƒà·à¶»à·Šà¶®à¶š විය The configuration file is malformed වින්â€à¶ºà·à·ƒ ගොනුව විකෘති වී ඇත Fatal failure දරුනු අසර්ථක වීමක් Unknown error නොදන්න෠දà·à·‚යකි Password is empty මුරපදය හිස් ය PackageChooserPage Form à¶´à·à¶»à¶¸à¶º Product Name නිෂ්පà·à¶¯à¶± à¶±à·à¶¸à¶º TextLabel අකුරු à¶±à·à¶¸à¶šà¶º Long Product Description දිගු නිෂ්පà·à¶¯à¶± විස්තරය Package Selection à¶´à·à¶šà·šà¶¢ තේරීම Please pick a product from the list. The selected product will be installed. කරුණà·à¶šà¶» à¶½à·à¶ºà·’ස්තුවෙන් නිෂ්පà·à¶¯à¶±à¶ºà¶šà·Š à¶­à·à¶»à¶±à·Šà¶±. à¶­à·à¶»à·à¶œà¶­à·Š නිෂ්පà·à¶¯à¶±à¶º ස්ථà·à¶´à¶±à¶º කෙරේ. PackageModel Name නම Description විස්තරය Page_Keyboard Form à¶´à·à¶»à¶¸à¶º Keyboard Model: යතුරුපුවරු ආකෘතිය: Type here to test your keyboard ඔබේ යතුරු පුවරුව පරීක්ෂ෠කිරීමට මෙහි ටයිප් කරන්න Page_UserSetup Form à¶´à·à¶»à¶¸à¶º What is your name? ඔබගේ නම කුමක් ද? Your Full Name ඔබේ සම්පුර්ණ නම What name do you want to use to log in? ඔබට පුරනය වීමට à¶·à·à·€à·’ත෠කිරීමට à¶…à·€à·à·Šâ€à¶º නම කුමක්ද? login පිවිසෙන්න What is the name of this computer? මෙම පරිගණකයේ නම කුමක්ද? <small>This name will be used if you make the computer visible to others on a network.</small> <small>ඔබ පරිගණකය à¶¢à·à¶½à¶ºà¶š අන් අයට පෙනෙන ලෙස සලස්වන්නේ නම් මෙම නම à¶·à·à·€à·’ත෠වේ.</small> Computer Name පරිගණක නම Choose a password to keep your account safe. ඔබගේ ගිණුම ආරක්ෂිතව à¶­à¶¶à· à¶œà·à¶±à·“මට මුරපදයක් à¶­à·à¶»à¶±à·Šà¶±. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>එකම මුරපදය දෙවරක් ඇතුල් කරන්න, එවිට එය ටයිප් කිරීමේ දà·à·‚ සඳහ෠පරීක්ෂ෠කළ à·„à·à¶š. හොඳ මුරපදයක අකුරු, ඉලක්කම් සහ විරà·à¶¸ ලකුණු මිà·à·Šâ€à¶»à¶«à¶ºà¶šà·Š අඩංගු වන à¶…à¶­à¶», අවම à·€à·à¶ºà·™à¶±à·Š à¶…à¶šà·Šà·‚à¶» අටක්වත් දිග විය යුතු à¶…à¶­à¶» නියමිත à¶šà·à¶½ à¶´à¶»à·à·ƒà¶ºà¶±à·Šà·„ිදී වෙනස් à¶šà·… යුතුය.</small> Password රහස් පදය Repeat Password මුරපදය à¶±à·à·€à¶­ ඇතුල් කරන්න When this box is checked, password-strength checking is done and you will not be able to use a weak password. මෙම කොටුව සලකුණු à¶šà·… විට, මුරපදය-à·à¶šà·Šà¶­à·’ය පරීක්ෂ෠කිරීම සිදු කරනු ලබන à¶…à¶­à¶» ඔබට දුර්වල මුරපදයක් à¶·à·à·€à·’ත෠කිරීමට නොහà·à¶šà·’ වනු ඇත. Require strong passwords. à·à¶šà·Šà¶­à·’මත් මුරපද à¶…à·€à·à·Šâ€à¶ºà¶ºà·’. Log in automatically without asking for the password. මුරපදය ඉල්ලන්නේ à¶±à·à¶­à·’à·€ ස්වයංක්â€à¶»à·“යව ලොග් වන්න. Use the same password for the administrator account. පරිපà·à¶½à¶š ගිණුම සඳහ෠එකම මුරපදය à¶·à·à·€à·’ත෠කරන්න. Choose a password for the administrator account. පරිපà·à¶½à¶š ගිණුම සඳහ෠මුරපදයක් à¶­à·à¶»à¶±à·Šà¶±. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>එකම මුරපදය දෙවරක් ඇතුල් කරන්න, එවිට එය ටයිප් කිරීමේ දà·à·‚ සඳහ෠පරීක්ෂ෠කළ à·„à·à¶š.</small> PartitionLabelsView Root රූට් Home à·„à·à¶¸à·Š Boot à¶¶à·–à¶§à·Š EFI system EFI පද්ධතිය Swap ස්වප් New partition for %1 %1 සඳහ෠නව කොටස New partition නව කොටස %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space නිදහස් ඉඩ New partition නව කොටස Name නම File System ගොනු පද්ධතිය File System Label ගොනු පද්ධති ලේබලය Mount Point මවුන්ට් පොයින්ට් Size à¶´à·Šâ€à¶»à¶¸à·à¶±à¶º PartitionPage Form à¶´à·à¶»à¶¸à¶º Storage de&vice: ගබඩ෠උපà·à¶‚ගය (&v): &Revert All Changes සියලුම වෙනස්කම් ආපසු හරවන්න (&R) New Partition &Table නව කොටස් වගුව (&T) Cre&ate නිර්මà·à¶«à¶º කරන්න (&r) &Edit සංස්කරණය කරන්න (&E) &Delete මකන්න (&D) New Volume Group නව වෙළුම් සමූහය Resize Volume Group වෙළුම් සමූහය à¶´à·Šâ€à¶»à¶­à·’à¶´à·Šâ€à¶»à¶¸à·à¶« කරන්න Deactivate Volume Group පරිම෠සමූහය à¶…à¶šà·Šâ€à¶»à·’ය කරන්න Remove Volume Group වෙළුම් à¶šà¶«à·Šà¶©à·à¶ºà¶¸ ඉවත් කරන්න I&nstall boot loader on: ඇරඹුම් à¶šà·à¶»à¶šà¶º ස්ථà·à¶´à¶±à¶º කරන්න (&n): Are you sure you want to create a new partition table on %1? ඔබට %1 මත නව කොටස් වගුවක් සෑදීමට à¶…à·€à·à·Šâ€à¶º à¶¶à·€ විà·à·Šà·€à·à·ƒà¶¯? Can not create new partition නව කොටසක් සෑදිය නොහà·à¶š The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. %1 à·„à·’ කොටස් වගුවෙහි දà·à¶±à¶§à¶¸à¶­à·Š à¶´à·Šâ€à¶»à·à¶®à¶¸à·’à¶š කොටස් %2à¶šà·Š ඇති à¶…à¶­à¶», තවත් à¶‘à¶šà¶­à·” à¶šà·… නොහà·à¶š. කරුණà·à¶šà¶» à¶‘à¶šà·Š à¶´à·Šâ€à¶»à·à¶®à¶¸à·’à¶š කොටසක් ඉවත් à¶šà¶» à¶’ වෙනුවට දිගු කොටසක් à¶‘à¶šà·Š කරන්න. PartitionViewStep Gathering system information... පද්ධති තොරතුරු à¶»à·à·ƒà·Š කරමින් පවතී... Partitions කොටස් Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: වත්මන්: After: පසු: No EFI system partition configured EFI පද්ධති කොටසක් වින්â€à¶ºà·à·ƒ à¶šà¶» නොමà·à¶­ EFI system partition configured incorrectly EFI පද්ධති කොටස à·€à·à¶»à¶¯à·’ ලෙස වින්â€à¶ºà·à·ƒ à¶šà¶» ඇත An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. %1 ආරම්භ කිරීමට EFI පද්ධති කොටසක් à¶…à·€à·à·Šâ€à¶º වේ. <br/><br/>EFI පද්ධති කොටසක් වින්â€à¶ºà·à·ƒ කිරීමට, ආපසු ගොස් සුදුසු ගොනු පද්ධතියක් à¶­à·à¶»à¶±à·Šà¶± à·„à· à·ƒà·à¶¯à¶±à·Šà¶±. The filesystem must be mounted on <strong>%1</strong>. ගොනු පද්ධතිය %1 මත සවිකර තිබිය යුතුය. The filesystem must have type FAT32. ගොනු පද්ධතියට FAT32 වර්ගය තිබිය යුතුය. The filesystem must be at least %1 MiB in size. ගොනු පද්ධතිය අවම à·€à·à¶ºà·™à¶±à·Š %1 MiB විà·à·à¶½à¶­à·Šà·€à¶ºà¶šà·’න් යුක්ත විය යුතුය. The filesystem must have flag <strong>%1</strong> set. ගොනු පද්ධතියට ධජය <strong>%1</strong> කට්ටලයක් තිබිය යුතුය. You can continue without setting up an EFI system partition but your system may fail to start. ඔබට EFI පද්ධති කොටසක් à·ƒà·à¶šà·ƒà·“මෙන් තොරව ඉදිරියට ය෠හà·à¶šà·’ නමුත් ඔබේ පද්ධතිය ආරම්භ කිරීමට අසමත් විය à·„à·à¶š. Option to use GPT on BIOS BIOS මත GPT à¶·à·à·€à·’ත෠කිරීමේ විකල්පය A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted ඇරඹුම් කොටස සංකේතනය à¶šà¶» නොමà·à¶­ A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. එන්ක්â€à¶»à·’à¶´à·Šà¶§à·Š කරන ලද රූට් à¶´à·à¶§à·’ෂන් à¶‘à¶šà¶šà·Š සමඟින් වෙනම ඇරඹුම් කොටසක් සකස෠ඇත, නමුත් ඇරඹුම් කොටස සංකේතනය à¶šà¶» නොමà·à¶­. <br/<br/>à·€à·à¶¯à¶œà¶­à·Š පද්ධති ගොනු සංකේතනය නොකළ කොටසක තබ෠ඇති නිස෠මෙවà·à¶±à·’ à·ƒà·à¶šà·ƒà·”ම සමඟ ආරක්ෂක à¶œà·à¶§à·…à·” ඇත. <br/>ඔබට à¶…à·€à·à·Šâ€à¶º නම් ඔබට දිගටම කරගෙන ය෠හà·à¶š, නමුත් ගොනු පද්ධති අගුළු à·„à·à¶»à·“ම පද්ධති ආරම්භයේදී පසුව සිදුවනු ඇත. <br/>ඇරඹුම් කොටස සංකේතනය කිරීමට, ආපසු ගොස් එය à¶±à·à·€à¶­ à·ƒà·à¶¯à¶±à·Šà¶±, කොටස් සෑදීමේ කවුළුව තුළ <strong>සංකේතනය</srong> à¶­à·à¶»à¶±à·Šà¶±. has at least one disk device available. අවම à·€à·à¶ºà·™à¶±à·Š à¶‘à¶šà·Š à¶­à·à¶§à·’ à¶‹à¶´à·à¶‚ගයක් à¶­à·’à¶¶à·š. There are no partitions to install on. ස්ථà·à¶´à¶±à¶º කිරීමට කොටස් නොමà·à¶­. PlasmaLnfJob Plasma Look-and-Feel Job à¶´à·Šà¶½à·à·ƒà·Šà¶¸à· පෙනුම සහ à·„à·à¶Ÿà·“ම à¶»à·à¶šà·’යà·à·€ Could not select KDE Plasma Look-and-Feel package KDE à¶´à·Šà¶½à·à·ƒà·Šà¶¸à· පෙනුම සහ දà·à¶±à·“ම à¶´à·à¶šà·šà¶¢à¶º තේරීමට නොහà·à¶šà·’ විය PlasmaLnfPage Form à¶´à·à¶»à¶¸à¶º Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. කරුණà·à¶šà¶» KDE à¶´à·Šà¶½à·à·ƒà·Šà¶¸à· ඩෙස්ක්ටොප් à¶‘à¶š සඳහ෠පෙනුම සහ à·„à·à¶Ÿà·“ම à¶­à·à¶»à¶±à·Šà¶±. ඔබට මෙම පියවර මඟ à·„à·à¶» පද්ධතිය à·ƒà·à¶šà·ƒà·– පසු පෙනුම සහ à·„à·à¶Ÿà·“ම වින්â€à¶ºà·à·ƒà¶œà¶­ à¶šà·… à·„à·à¶š. පෙනුම සහ à·„à·à¶Ÿà·“ම තේරීමක් මත ක්ලික් කිරීමෙන් ඔබට එම පෙනුම සහ à·„à·à¶Ÿà·“ම à¶´à·’à·…à·’à¶¶à¶³ සජීවී පෙරදසුනක් ලබ෠දෙනු ඇත. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. කරුණà·à¶šà¶» KDE à¶´à·Šà¶½à·à·ƒà·Šà¶¸à· ඩෙස්ක්ටොප් à¶‘à¶š සඳහ෠පෙනුම සහ à·„à·à¶Ÿà·“ම à¶­à·à¶»à¶±à·Šà¶±. ඔබට මෙම පියවර මඟ à·„à·à¶» පද්ධතිය ස්ථà·à¶´à¶±à¶º à¶šà·… පසු පෙනුම සහ à·„à·à¶Ÿà·“ම වින්â€à¶ºà·à·ƒà¶œà¶­ à¶šà·… à·„à·à¶š. පෙනුම සහ à·„à·à¶Ÿà·“ම තේරීමක් මත ක්ලික් කිරීමෙන් ඔබට එම පෙනුම සහ à·„à·à¶Ÿà·“ම à¶´à·’à·…à·’à¶¶à¶³ සජීවී පෙරදසුනක් ලබ෠දෙනු ඇත. PlasmaLnfViewStep Look-and-Feel බලන්න සහ දà·à¶±à·™à¶±à·Šà¶± PreserveFiles Saving files for later ... පසු à¶¶à·à·€à·’à¶­à¶§ ගොනු සුරකමින් ... No files configured to save for later. පසුව සුරà·à¶šà·“මට ගොනු කිසිවක් වින්â€à¶ºà·à·ƒ à¶šà¶» නොමà·à¶­. Not all of the configured files could be preserved. වින්â€à¶ºà·à·ƒ à¶šà¶» ඇති සියලුම ගොනු සංරක්ෂණය à¶šà·… නොහà·à¶š. ProcessResult There was no output from the command. විධà·à¶±à¶ºà·™à¶±à·Š à¶´à·Šâ€à¶»à¶­à·’දà·à¶±à¶ºà¶šà·Š නොතිබුණි. Output: à¶´à·Šâ€à¶»à¶­à·’දà·à¶±à¶º: External command crashed. à¶¶à·à·„à·’à¶» විධà·à¶±à¶º à¶¶à·’à¶³ à·€à·à¶§à·”à¶«à·’. Command <i>%1</i> crashed. %1 විධà·à¶±à¶º à¶¶à·’à¶³ à·€à·à¶§à·”à¶«à·’. External command failed to start. à¶¶à·à·„à·’à¶» විධà·à¶±à¶º ආරම්භ කිරීමට අසමත් විය. Command <i>%1</i> failed to start. %1 විධà·à¶±à¶º ආරම්භ කිරීමට අසමත් විය. Internal error when starting command. විධà·à¶±à¶º ආරම්භ කිරීමේදී අභ්යන්තර දà·à·‚යකි. Bad parameters for process job call. à¶»à·à¶šà·’ය෠ඇමතුම් à¶šà·Šâ€à¶»à·’යà·à·€à¶½à·’ සඳහ෠නරක à¶´à¶»à·à¶¸à·’තීන්. External command failed to finish. à¶¶à·à·„à·’à¶» විධà·à¶±à¶º අවසන් කිරීමට අසමත් විය. Command <i>%1</i> failed to finish in %2 seconds. <i>%1</i> විධà·à¶±à¶º à¶­à¶­à·Šà¶´à¶» %2කින් අවසන් කිරීමට අසමත් විය. External command finished with errors. à¶¶à·à·„à·’à¶» විධà·à¶±à¶º දà·à·‚ සහිතව අවසන් විය. Command <i>%1</i> finished with exit code %2. <i>%1</i> විධà·à¶±à¶º පිටවීමේ කේතය %2 සමඟ අවසන් විය. QObject %1 (%2) %1 (%2) unknown නොදන්න෠extended දිගුව unformatted ආකෘතිකරණය නොකළ swap ස්වප් Default පෙරනිමිය File not found ගොනුව හමු නොවිණි Path <pre>%1</pre> must be an absolute path. මà·à¶»à·Šà¶œà¶º <pre>%1</pre> නිරපේක්ෂ මà·à¶»à·Šà¶œà¶ºà¶šà·Š විය යුතුය. Directory not found à¶±à·à¶¸à·à·€à¶½à·’ය හමු නොවීය Could not create new random file <pre>%1</pre>. නව අහඹු <pre>%1</pre> ගොනුවක් à¶­à·à¶±à·“මට නොහà·à¶šà·’ විය. No product නිෂ්පà·à¶¯à¶±à¶ºà¶šà·Š à¶±à·à¶­ No description provided. විස්තරයක් සපය෠නà·à¶­. (no mount point) (සවිකිරීම් ස්ථà·à¶±à¶ºà¶šà·Š නොමà·à¶­) Unpartitioned space or unknown partition table කොටස් නොකළ ඉඩ හ෠නොදන්න෠කොටස් වගුව Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p>මෙම පරිගණකය %1 පිහිටුවීම සඳහ෠නිර්දේà·à·’à¶­ සමහර à¶…à·€à·à·Šâ€à¶ºà¶­à· සපුරà·à¶½à¶±à·Šà¶±à·š à¶±à·à¶­.<br/> පිහිටුවීම දිගටම කරගෙන ය෠හà·à¶š, නමුත් සමහර විà·à·šà·‚à·à¶‚à¶œ à¶…à¶¶à¶½ විය à·„à·à¶š.</p> RemoveUserJob Remove live user from target system ඉලක්ක පද්ධතියෙන් සජීවී පරිà·à·“ලකය෠ඉවත් කරන්න RemoveVolumeGroupJob Remove Volume Group named %1. %1 නම් වූ වෙළුම් සමූහය ඉවත් කරන්න. Remove Volume Group named <strong>%1</strong>. <strong>%1</strong> නම් වූ වෙළුම් සමූහය ඉවත් කරන්න. The installer failed to remove a volume group named '%1'. ස්ථà·à¶´à¶šà¶º '%1' නම් වෙළුම් à¶šà¶«à·Šà¶©à·à¶ºà¶¸à¶šà·Š ඉවත් කිරීමට අසමත් විය. ReplaceWidget Form à¶´à·à¶»à¶¸à¶º Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 ස්ථà·à¶´à¶±à¶º à¶šà·… යුතු ස්ථà·à¶±à¶º à¶­à·à¶»à¶±à·Šà¶±. <br/><font color='red'>අවවà·à¶¯à¶ºà¶ºà·’: </font>මෙය à¶­à·à¶»à·à¶œà¶­à·Š කොටසේ ඇති සියලුම ගොනු මක෠දමයි. The selected item does not appear to be a valid partition. à¶­à·à¶»à·à¶œà¶­à·Š අයිතමය වලංගු කොටසක් ලෙස නොපෙනේ. %1 cannot be installed on empty space. Please select an existing partition. %1 හිස් අවකà·à·à¶ºà·š ස්ථà·à¶´à¶±à¶º à¶šà¶½ නොහà·à¶š. කරුණà·à¶šà¶» පවතින කොටසක් à¶­à·à¶»à¶±à·Šà¶±. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 දිගු à¶šà·… කොටසක ස්ථà·à¶´à¶±à¶º à¶šà¶½ නොහà·à¶š. කරුණà·à¶šà¶» පවතින à¶´à·Šâ€à¶»à·à¶®à¶¸à·’à¶š à·„à· à¶­à·à¶»à·Šà¶šà·’à¶š කොටසක් à¶­à·à¶»à¶±à·Šà¶±. %1 cannot be installed on this partition. %1 මෙම කොටසෙහි ස්ථà·à¶´à¶±à¶º à¶šà¶½ නොහà·à¶š. Data partition (%1) දත්ත කොටස (%1) Unknown system partition (%1) නොදන්න෠පද්ධති කොටස (%1) %1 system partition (%2) %1 පද්ධති කොටස (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>%1 කොටස %2 සඳහ෠ඉත෠කුඩà·à¶º. කරුණà·à¶šà¶» අවම à·€à·à¶ºà·™à¶±à·Š %3 GiB à¶°à·à¶»à·’à¶­à·à·€à¶šà·Š සහිත කොටසක් à¶­à·à¶»à¶±à·Šà¶±. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>EFI පද්ධති කොටසක් මෙම පද්ධතියේ කොතà·à¶±à¶šà·€à¶­à·Š සොයà·à¶œà¶­ නොහà·à¶š. කරුණà·à¶šà¶» ආපසු ගොස් %1 පිහිටුවීමට අතින් කොටස් කිරීම à¶·à·à·€à·’ත෠කරන්න. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 %2 මත ස්ථà·à¶´à¶±à¶º වනු ඇත.<br/><font color="red">අවවà·à¶¯à¶ºà¶ºà·’:</font> %2 කොටසේ ඇති සියලුම දත්ත à¶±à·à¶­à·’ වී යයි. The EFI system partition at %1 will be used for starting %2. %2 ආරම්භ කිරීම සඳහ෠%1 à·„à·’ EFI පද්ධති කොටස à¶·à·à·€à·’ත෠කරනු ඇත. EFI system partition: EFI පද්ධති කොටස: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>මෙම පරිගණකය %1 ස්ථà·à¶´à¶±à¶º සඳහ෠අවම à¶…à·€à·à·Šâ€à¶ºà¶­à· සපුරà·à¶½à¶±à·Šà¶±à·š à¶±à·à¶­.<br/> ස්ථà·à¶´à¶±à¶º දිගටම කරගෙන ය෠නොහà·à¶š.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p>මෙම පරිගණකය %1 පිහිටුවීම සඳහ෠නිර්දේà·à·’à¶­ සමහර à¶…à·€à·à·Šâ€à¶ºà¶­à· සපුරà·à¶½à¶±à·Šà¶±à·š à¶±à·à¶­.<br/> පිහිටුවීම දිගටම කරගෙන ය෠හà·à¶š, නමුත් සමහර විà·à·šà·‚à·à¶‚à¶œ à¶…à¶¶à¶½ විය à·„à·à¶š.</p> ResizeFSJob Resize Filesystem Job ගොනු පද්ධති à¶šà·à¶»à·Šà¶ºà¶º à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º වෙනස් කරන්න Invalid configuration වලංගු නොවන වින්â€à¶ºà·à·ƒà¶º The file-system resize job has an invalid configuration and will not run. ගොනු පද්ධති à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º වෙනස් කිරීමේ à¶šà·à¶»à·Šà¶ºà¶ºà¶§ වලංගු නොවන වින්â€à¶ºà·à·ƒà¶ºà¶šà·Š ඇති à¶…à¶­à¶» එය à¶šà·Šâ€à¶»à·’යà·à¶­à·Šà¶¸à¶š නොවේ. KPMCore not Available KPMCore නොමà·à¶­ Calamares cannot start KPMCore for the file-system resize job. ගොනු පද්ධති à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º වෙනස් කිරීමේ à¶šà·à¶»à·Šà¶ºà¶º සඳහ෠Calamares à·„à¶§ KPMCore ආරම්භ à¶šà·… නොහà·à¶š. Resize Failed à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º වෙනස් කිරීම à¶…à·ƒà·à¶»à·Šà¶®à¶š විය The filesystem %1 could not be found in this system, and cannot be resized. ගොනු පද්ධතිය %1 මෙම පද්ධතිය තුළ සොය෠ගත නොහà·à¶šà·’ à¶…à¶­à¶», à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º වෙනස් à¶šà·… නොහà·à¶š. The device %1 could not be found in this system, and cannot be resized. %1 à¶‹à¶´à·à¶‚ගය මෙම පද්ධතිය තුළ සොයà·à¶œà¶­ නොහà·à¶šà·’ වූ à¶…à¶­à¶», à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º වෙනස් à¶šà·… නොහà·à¶š. The filesystem %1 cannot be resized. %1 ගොනු පද්ධතිය à¶´à·Šâ€à¶»à¶­à·’à¶´à·Šâ€à¶»à¶¸à·à¶« à¶šà·… නොහà·à¶š. The device %1 cannot be resized. à¶‹à¶´à·à¶‚ගය %1 à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º වෙනස් à¶šà·… නොහà·à¶š. The filesystem %1 must be resized, but cannot. ගොනු පද්ධතිය %1 à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º වෙනස් à¶šà·… යුතුය, නමුත් à¶šà·… නොහà·à¶š. The device %1 must be resized, but cannot à¶‹à¶´à·à¶‚ගය %1 à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º වෙනස් à¶šà·… යුතු නමුත් à¶šà·… නොහà·à¶š ResizePartitionJob Resize partition %1. %1 කොටස à¶´à·Šâ€à¶»à¶­à·’à¶´à·Šâ€à¶»à¶¸à·à¶« කරන්න. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MiB</strong> කොටස <strong>%1</strong> සිට <strong>%3MiB</strong> දක්ව෠ප්â€à¶»à¶¸à·à¶«à¶º වෙනස් කරන්න. Resizing %2MiB partition %1 to %3MiB. %2MiB කොටස %1 සිට %3MiB දක්ව෠ප්â€à¶»à¶¸à·à¶«à¶º වෙනස් කිරීම. The installer failed to resize partition %1 on disk '%2'. '%2' à¶­à·à¶§à·’යේ %1 කොටස à¶´à·Šâ€à¶»à¶­à·’à¶´à·Šâ€à¶»à¶¸à·à¶« කිරීමට ස්ථà·à¶´à¶šà¶º අසමත් විය. ResizeVolumeGroupDialog Resize Volume Group වෙළුම් සමූහය à¶´à·Šâ€à¶»à¶­à·’à¶´à·Šâ€à¶»à¶¸à·à¶« කරන්න ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. %2 සිට %3 දක්ව෠%1 ලෙස නම් කරන ලද වෙළුම් සමූහය à¶´à·Šâ€à¶»à¶­à·’à¶´à·Šâ€à¶»à¶¸à·à¶« කරන්න. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%2</strong> සිට <strong>%3</strong> දක්ව෠<strong>%1</strong> ලෙස නම් කරන ලද වෙළුම් සමූහය à¶´à·Šâ€à¶»à¶­à·’à¶´à·Šâ€à¶»à¶¸à·à¶« කරන්න. The installer failed to resize a volume group named '%1'. ස්ථà·à¶´à¶šà¶º '%1' නම් වූ වෙළුම් සමූහයක් à¶´à·Šâ€à¶»à¶­à·’à¶´à·Šâ€à¶»à¶¸à·à¶« කිරීමට අසමත් විය. ResultsListDialog For best results, please ensure that this computer: හොඳම à¶´à·Šâ€à¶»à¶­à·’ඵල සඳහà·, කරුණà·à¶šà¶» මෙම පරිගණකය සහතික à¶šà¶» ගන්න: System requirements පද්ධති à¶…à·€à·à·Šà¶ºà¶­à· ScanningDialog Scanning storage devices... ගබඩ෠උපà·à¶‚à¶œ පරිලà·à¶šà¶±à¶º කරමින්... Partitioning කොටස් කරමින් SetHostNameJob Set hostname %1 à¶°à·à¶»à¶š à¶±à·à¶¸à¶º සකසන්න %1 Set hostname <strong>%1</strong>. à¶°à·à¶»à¶š à¶±à·à¶¸à¶º සකසන්න <strong>%1</strong>. Setting hostname %1. සත්කà·à¶»à¶š à¶±à·à¶¸à¶º %1 à·ƒà·à¶šà·ƒà·“ම. Internal Error අභ්යන්තර දà·à·‚යකි Cannot write hostname to target system ඉලක්ක පද්ධතියට සත්කà·à¶»à¶š à¶±à·à¶¸à¶º ලිවිය නොහà·à¶š SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 යතුරුපුවරු ආකෘතිය %1 ලෙස සකසන්න, පිරිසà·à¶½à·ƒà·”ම %2-%3 ලෙස සකසන්න Failed to write keyboard configuration for the virtual console. අතථ්â€à¶º කොන්සà·à¶½à¶º සඳහ෠යතුරුපුවරු වින්â€à¶ºà·à·ƒà¶º ලිවීමට අසමත් විය. Failed to write to %1 %1 වෙත ලිවීමට අසමත් විය Failed to write keyboard configuration for X11. X11 සඳහ෠යතුරුපුවරු වින්â€à¶ºà·à·ƒà¶º ලිවීමට අසමත් විය. Failed to write keyboard configuration to existing /etc/default directory. පවතින /etc/default බහලුම වෙත යතුරුපුවරු වින්â€à¶ºà·à·ƒà¶º ලිවීමට අසමත් විය. SetPartFlagsJob Set flags on partition %1. %1 කොටසේ කොඩි සකසන්න. Set flags on %1MiB %2 partition. %1MiB %2 කොටස මත කොඩි සකසන්න. Set flags on new partition. නව කොටසේ කොඩි සකසන්න. Clear flags on partition <strong>%1</strong>. %1 කොටසේ කොඩි හිස් කරන්න. Clear flags on %1MiB <strong>%2</strong> partition. %1MiB %2 කොටසේ කොඩි හිස් කරන්න. Clear flags on new partition. නව කොටසේ කොඩි ඉවත් කරන්න. Flag partition <strong>%1</strong> as <strong>%2</strong>. %1 කොටස %2 ලෙස සලකුණු කරන්න. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. %1MiB <strong>%2</strong> කොටස <strong>%3</strong> ලෙස සලකුණු කරන්න. Flag new partition as <strong>%1</strong>. නව කොටස <strong>%1</strong> ලෙස සලකුණු කරන්න. Clearing flags on partition <strong>%1</strong>. %1 කොටසේ කොඩි ඉවත් කිරීම. Clearing flags on %1MiB <strong>%2</strong> partition. %1MiB <strong>%2</strong> කොටසේ කොඩි ඉවත් කිරීම. Clearing flags on new partition. නව කොටසේ කොඩි ඉවත් කිරීම. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. <strong>%1</strong> කොටස මත කොඩි <strong>%2</strong> à·ƒà·à¶šà·ƒà·“ම. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. %1MiB <strong>%2</strong> කොටස මත කොඩි <strong>%3</strong> à·ƒà·à¶šà·ƒà·“ම. Setting flags <strong>%1</strong> on new partition. නව කොටසෙහි කොඩි <strong>%1</strong> à·ƒà·à¶šà·ƒà·“ම. The installer failed to set flags on partition %1. ස්ථà·à¶´à¶šà¶º %1 කොටසෙහි කොඩි à·ƒà·à¶šà·ƒà·“මට අසමත් විය. SetPasswordJob Set password for user %1 පරිà·à·“ලක %1 සඳහ෠මුරපදය සකසන්න Setting password for user %1. පරිà·à·“ලක %1 සඳහ෠මුරපදය à·ƒà·à¶šà·ƒà·“ම. Bad destination system path. නරක ගමනà·à¶±à·Šà¶­ පද්ධති මà·à¶»à·Šà¶œà¶º. rootMountPoint is %1 මූලමවුන්ට්පොයින්ට් % 1 වේ Cannot disable root account. මූල ගිණුම à¶…à¶šà·Šâ€à¶»à·’ය à¶šà·… නොහà·à¶š. passwd terminated with error code %1. මුරපදය %1 දà·à·‚ කේතය සමඟ අවසන් විය. Cannot set password for user %1. පරිà·à·“ලක %1 සඳහ෠මුරපදය à·ƒà·à¶šà·ƒà·’ය නොහà·à¶š. usermod terminated with error code %1. පරිà·à·“ලක මොඩ් දà·à·‚ කේතය % 1 සමඟ අවසන් කරන ලදී. SetTimezoneJob Set timezone to %1/%2 වේල෠කලà·à¶´à¶º %1/%2 ලෙස සකසන්න Cannot access selected timezone path. à¶­à·à¶»à·à¶œà¶­à·Š වේල෠කලà·à¶´ මà·à¶»à·Šà¶œà¶ºà¶§ à¶´à·Šâ€à¶»à·€à·šà· විය නොහà·à¶š. Bad path: %1 නරක මà·à¶»à·Šà¶œà¶º:%1 Cannot set timezone. වේල෠කලà·à¶´à¶ºà¶šà·Š à·ƒà·à¶šà·ƒà·’ය නොහà·à¶š. Link creation failed, target: %1; link name: %2 සබà·à¶³à·’ නිර්මà·à¶«à¶º à¶…à·ƒà·à¶»à·Šà¶®à¶š විය, ඉලක්කය: %1; සබà·à¶³à·’ නම: %2 Cannot set timezone, වේල෠කලà·à¶´à¶º à·ƒà·à¶šà·ƒà·’ය නොහà·à¶š, Cannot open /etc/timezone for writing ලිවීම සඳහ෠/etc/timezone විවෘත à¶šà·… නොහà·à¶š SetupGroupsJob Preparing groups. à¶šà¶«à·Šà¶©à·à¶ºà¶¸à·Š සූදà·à¶±à¶¸à·Š කිරීම. Could not create groups in target system ඉලක්ක පද්ධතිය තුළ à¶šà¶«à·Šà¶©à·à¶ºà¶¸à·Š සෑදීමට නොහà·à¶šà·’ විය These groups are missing in the target system: %1 ඉලක්ක පද්ධතිය තුළ මෙම à¶šà¶«à·Šà¶©à·à¶ºà¶¸à·Š අතුරුදහන් වී ඇත: %1 SetupSudoJob Configure <pre>sudo</pre> users. <strong>sudo</strong> à¶·à·à·€à·’ත෠කරන්නන් වින්â€à¶ºà·à·ƒ කරන්න. Cannot chmod sudoers file. sudoers ගොනුව chmod à¶šà·… නොහà·à¶š. Cannot create sudoers file for writing. ලිවීම සඳහ෠sudoers ගොනුව සෑදිය නොහà·à¶š. ShellProcessJob Shell Processes Job ෂෙල් ක්රියà·à·€à¶½à·“න් SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK හරි (&O) &Yes ඔව් (&Y) &No à¶±à·à¶­ (&N) &Cancel අවලංගු කරන්න (&C) &Close වසන්න (&C) TrackingInstallJob Installation feedback ස්ථà·à¶´à¶± à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚ණය Sending installation feedback. ස්ථà·à¶´à¶± à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚à¶« යà·à·€à·“ම. Internal error in install-tracking. ස්ථà·à¶´à¶± ලුහුබà·à¶³à·“මේ à¶…à¶·à·Šâ€à¶ºà¶±à·Šà¶­à¶» දà·à·‚යකි. HTTP request timed out. HTTP ඉල්ලීම කල් ඉකුත් විය. TrackingKUserFeedbackJob KDE user feedback KDE පරිà·à·“ලක à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚ණය Configuring KDE user feedback. KDE පරිà·à·“ලක à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚à¶« වින්â€à¶ºà·à·ƒ කිරීම. Error in KDE user feedback configuration. KDE පරිà·à·“ලක à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚à¶« වින්â€à¶ºà·à·ƒà¶ºà·™à·„à·’ දà·à·‚යකි. Could not configure KDE user feedback correctly, script error %1. KDE පරිà·à·“ලක à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚ණය නිවà·à¶»à¶¯à·’à·€ වින්â€à¶ºà·à·ƒ කිරීමට නොහà·à¶šà·’ විය, ස්ක්â€à¶»à·’à¶´à·Šà¶§à·Š දà·à·‚ය %1. Could not configure KDE user feedback correctly, Calamares error %1. KDE පරිà·à·“ලක à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚ණය නිවà·à¶»à¶¯à·’à·€ වින්â€à¶ºà·à·ƒ කිරීමට නොහà·à¶šà·’ විය, Calamares දà·à·‚ය %1. TrackingMachineUpdateManagerJob Machine feedback යන්ත්â€à¶» à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚ණය Configuring machine feedback. යන්ත්â€à¶» à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚à¶« වින්â€à¶ºà·à·ƒ කිරීම. Error in machine feedback configuration. යන්ත්â€à¶» à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚à¶« වින්â€à¶ºà·à·ƒà¶º තුළ දà·à·‚යකි. Could not configure machine feedback correctly, script error %1. යන්ත්â€à¶» à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚ණය නිවà·à¶»à¶¯à·’à·€ වින්â€à¶ºà·à·ƒ කිරීමට නොහà·à¶šà·’ විය, ස්ක්â€à¶»à·’à¶´à·Šà¶§à·Š දà·à·‚ය %1. Could not configure machine feedback correctly, Calamares error %1. යන්ත්â€à¶» à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚ණය නිවà·à¶»à¶¯à·’à·€ වින්â€à¶ºà·à·ƒ කිරීමට නොහà·à¶šà·’ විය, Calamares දà·à·‚ය %1. TrackingPage Form à¶´à·à¶»à¶¸à¶º Placeholder ස්ථà·à¶± දà·à¶»à¶šà¶º <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>ඔබගේ ස්ථà·à¶´à¶±à¶º à¶´à·’à·…à·’à¶¶à¶³ <span style=" font-weight:600;">කිසිදු තොරතුරක්</span> නොයà·à·€à·“මට මෙතන ක්ලික් කරන්න.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">පරිà·à·“ලක à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚à¶« à¶´à·’à·…à·’à¶¶à¶³ à·€à·à¶©à·’ විස්තර සඳහ෠මෙතà·à¶± ක්ලික් කරන්න</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. ලුහුබà·à¶³à·“ම %1 à·„à¶§ එය කොපමණ à·€à·à¶»à¶ºà¶šà·Š ස්ථà·à¶´à¶±à¶º à¶šà¶» ඇත්ද, කුමන දෘඩà·à¶‚à¶œ මත ස්ථà·à¶´à¶±à¶º à¶šà¶» ඇත්ද සහ කුමන යෙදුම් à¶·à·à·€à·’ත෠කරන්නේද යන්න à¶¶à·à¶½à·“මට à¶‹à¶´à¶šà·à¶»à·“ වේ. යවන්නේ කුමක් දà·à¶ºà·’ à¶¶à·à¶½à·“මට, à¶‘à¶šà·Š à¶‘à¶šà·Š à¶´à·Šâ€à¶»à¶¯à·šà·à¶ºà¶§ යà·à¶¶à¶¯à·€ ඇති උදවු නිරූපකය ක්ලික් කරන්න. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. මෙය තේරීමෙන් ඔබ ඔබේ ස්ථà·à¶´à¶±à¶º සහ දෘඪà·à¶‚à¶œ à¶´à·’à·…à·’à¶¶à¶³ තොරතුරු එවනු ඇත. ස්ථà·à¶´à¶±à¶º අවසන් වූ පසු මෙම තොරතුරු <b>à¶‘à¶šà·Š වරක්</b> පමණක් යවනු à¶½à·à¶¶à·š. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. මෙය තේරීමෙන් ඔබ විසින් ඔබේ <b>යන්ත්â€à¶»</b> ස්ථà·à¶´à¶±à¶º, දෘඪà·à¶‚à¶œ සහ යෙදුම් à¶´à·’à·…à·’à¶¶à¶³ තොරතුරු වරින් වර %1 වෙත යවනු à¶½à·à¶¶à·š. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. මෙය තේරීමෙන් ඔබ ඔබේ <b>පරිà·à·“ලක</b> ස්ථà·à¶´à¶±à¶º, දෘඪà·à¶‚à¶œ, යෙදුම්, සහ යෙදුම් à¶·à·à·€à·’à¶­ රටà·, %1 වෙත නිතිපත෠යවනු à¶½à·à¶¶à·š. TrackingViewStep Feedback à¶´à·Šâ€à¶»à¶­à·’à¶´à·à·‚à¶« UmountJob Unmount file systems. ගොනු පද්ධති ඉවත් කරන්න. No target system available. ඉලක්ක පද්ධතියක් නොමà·à¶­. No rootMountPoint is set. මූල මවුන්ට් පොයින්ට් à¶‘à¶šà¶šà·Š සකස෠නà·à¶­. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>à¶‘à¶šà·Š අයෙකුට වඩ෠මෙම පරිගණකය à¶·à·à·€à·’ත෠කරන්නේ නම්, à·ƒà·à¶šà·ƒà·“මෙන් පසු ඔබට ගිණුම් කිහිපයක් සෑදිය à·„à·à¶š.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>මෙම පරිගණකය à¶‘à¶šà·Š අයෙකුට වඩ෠භà·à·€à·’ත෠කරන්නේ නම්, ස්ථà·à¶´à¶±à¶º කිරීමෙන් පසු ඔබට ගිණුම් කිහිපයක් සෑදිය à·„à·à¶š.</small> UsersQmlViewStep Users පරිà·à·“ලකයන් UsersViewStep Users පරිà·à·“ලකයන් VariantModel Key Column header for key/value යතුර Value Column header for key/value අගය VolumeGroupBaseDialog Create Volume Group වෙළුම් à¶šà¶«à·Šà¶©à·à¶ºà¶¸à¶šà·Š à·ƒà·à¶¯à¶±à·Šà¶± List of Physical Volumes à¶·à·žà¶­à·’à¶š වෙළුම් à¶½à·à¶ºà·’ස්තුව Volume Group Name: වෙළුම් සමූහයේ නම: Volume Group Type: වෙළුම් à¶šà¶«à·Šà¶©à·à¶ºà¶¸à·Š වර්ගය: Physical Extent Size: à¶·à·žà¶­à·’à¶š à¶´à·Šâ€à¶»à¶¸à·à¶«à¶ºà·š à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º: MiB MiB Total Size: මුළු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º: Used Size: à¶·à·à·€à·’à¶­à· à¶šà·… à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º: Total Sectors: මුළු à¶…à¶‚à·: Quantity of LVs: LV à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º: WelcomePage Form à¶´à·à¶»à¶¸à¶º Select application and system language යෙදුම් සහ පද්ධති à¶·à·à·‚à·à·€ à¶­à·à¶»à¶±à·Šà¶± 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) %1 support %1 සහà·à¶º About %1 setup %1 පිහිටුවීම à¶œà·à¶± About %1 installer %1 ස්ථà·à¶´à¶šà¶º à¶œà·à¶± WelcomeQmlViewStep Welcome à·ƒà·à¶¯à¶»à¶ºà·™à¶±à·Š පිළිගනිමු WelcomeViewStep Welcome à·ƒà·à¶¯à¶»à¶ºà·™à¶±à·Š පිළිගනිමු ZfsJob Create ZFS pools and datasets ZFS සංචිත සහ දත්ත à¶šà¶§à·Šà¶§à¶½ à·ƒà·à¶¯à¶±à·Šà¶± Failed to create zpool on zpool à¶šà·Šâ€à¶»à·’යà·à¶­à·Šà¶¸à¶š කිරීමට අසමත් විය Configuration Error වින්â€à¶ºà·à·ƒ දà·à·‚ය No partitions are available for ZFS. Internal data missing à¶…à¶·à·Šâ€à¶ºà¶±à·Šà¶­à¶» දත්ත අතුරුදහන් Failed to create zpool zpool නිර්මà·à¶«à¶º කිරීමට අසමත් විය Failed to create dataset දත්ත කට්ටලයක් සෑදීමට අසමත් විය The output was: à¶´à·Šâ€à¶»à¶­à·’දà·à¶±à¶º වූයේ: calamares-sidebar About à¶œà·à¶± Debug Show information about Calamares Show debug information දà·à· නිරà·à¶šà¶»à¶« තොරතුරු පෙන්වන්න finishedq Installation Completed ස්ථà·à¶´à¶±à¶º අවසන් %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 ඔබේ පරිගණකයේ ස්ථà·à¶´à¶±à¶º à¶šà¶» ඇත.<br/> ඔබට දà·à¶±à·Š ඔබේ නව පද්ධතිය à¶±à·à·€à¶­ ආරම්භ à¶šà·… à·„à·à¶šà·’ය, à¶±à·à¶­à·„ොත් සජීවී පරිසරය දිගටම à¶·à·à·€à·’à¶­à· à¶šà·… à·„à·à¶š. Close Installer ස්ථà·à¶´à¶šà¶º වසන්න Restart System පද්ධතිය à¶±à·à·€à¶­ ආරම්භ කරන්න <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>ස්ථà·à¶´à¶±à¶ºà·š සම්පූර්ණ ලොගයක් සජීවී පරිà·à·“ලකයà·à¶œà·š මුල් à¶±à·à¶¸à·à·€à¶½à·’යෙහි install.log ලෙස පවතී.<br/> මෙම ලොගය ඉලක්ක පද්ධතියේ /var/log/installation.log වෙත à¶´à·’à¶§à¶´à¶­à·Š à¶šà¶» ඇත.</p> finishedq@mobile Installation Completed ස්ථà·à¶´à¶±à¶º අවසන් %1 has been installed on your computer.<br/> You may now restart your device. %1 ඔබේ පරිගණකයේ ස්ථà·à¶´à¶±à¶º à¶šà¶» ඇත.<br/> ඔබට දà·à¶±à·Š ඔබගේ à¶‹à¶´à·à¶‚ගය à¶±à·à·€à¶­ ආරම්භ à¶šà·… à·„à·à¶š. Close වසන්න Restart යළි අරඹන්න i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>à¶·à·à·‚à·</h1> </br> පද්ධති පෙදෙසි à·ƒà·à¶šà·ƒà·”ම සමහර විධà·à¶± රේඛ෠පරිà·à·“ලක අතුරුමුහුණත් මූලද්â€à¶»à·€à·Šâ€à¶º සඳහ෠භà·à·‚à·à·€ සහ à¶…à¶šà·Šà·‚à¶» කට්ටලයට බලපà·à¶ºà·’. වත්මන් à·ƒà·à¶šà·ƒà·”ම <strong>%1</strong> වේ. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>à¶´à·Šâ€à¶»à·à¶¯à·šà·à·“ය</h1> </br> පද්ධති පෙදෙසි à·ƒà·à¶šà·ƒà·“ම à¶…à¶‚à¶š සහ දින ආකෘතියට බලපà·à¶ºà·’. වත්මන් à·ƒà·à¶šà·ƒà·”ම <strong>%1</strong> වේ. Back ආපසු keyboardq To activate keyboard preview, select a layout. යතුරුපුවරු පෙරදසුන සක්â€à¶»à·’ය කිරීමට, පිරිසà·à¶½à·ƒà·”මක් à¶­à·à¶»à¶±à·Šà¶±. Keyboard Model: යතුරුපුවරු ආකෘතිය: Layouts පිරිසà·à¶½à·ƒà·”ම් Type here to test your keyboard ඔබේ යතුරු පුවරුව පරීක්ෂ෠කිරීමට මෙහි ටයිප් කරන්න Variants à¶´à·Šâ€à¶»à¶·à·šà¶¯ localeq Change වෙනස් කරන්න notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>මේව෠නිදසුන් නිකුත් කිරීමේ සටහන් වේ.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice යනු ලොව පුර෠සිටින මිලියන සංඛ්â€à¶ºà·à¶­ ජනතà·à·€à¶šà·Š විසින් à¶·à·à·€à·’ත෠කරන බලවත් සහ නිදහස් à¶šà·à¶»à·Šà¶ºà·à¶½ කට්ටලයකි. වෙළඳපොලේ ඇති වඩà·à¶­à·Šà¶¸ බහුකà·à¶»à·Šà¶º නිදහස් සහ විවෘත මූලà·à·à·Šâ€à¶» à¶šà·à¶»à·Šà¶ºà·à¶½ කට්ටලය බවට à¶´à¶­à·Š කරන යෙදුම් කිහිපයක් එයට ඇතුළත් වේ.<br/> පෙරනිමි විකල්පය. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. ඔබට à¶šà·à¶»à·Šà¶ºà·à¶½ කට්ටලයක් ස්ථà·à¶´à¶±à¶º කිරීමට à¶…à·€à·à·Šâ€à¶º à¶±à·à¶­à·’නම්, No Office Suite à¶­à·à¶»à¶±à·Šà¶±. ඔබගේ ස්ථà·à¶´à·’à¶­ පද්ධතියට à¶…à·€à·à·Šâ€à¶ºà¶­à·à·€à¶º අනුව ඔබට à·ƒà·à¶¸ විටම à¶‘à¶šà¶šà·Š (හ෠කිහිපයක්) පසුව à¶‘à¶šà·Š à¶šà·… à·„à·à¶š No Office Suite No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. අවම ඩෙස්ක්ටොප් ස්ථà·à¶´à¶±à¶ºà¶šà·Š à·ƒà·à¶¯à¶±à·Šà¶±, සියලුම අමතර යෙදුම් ඉවත් à¶šà¶» ඔබ ඔබේ පද්ධතියට à¶‘à¶šà¶­à·” කිරීමට à¶šà·à¶¸à¶­à·’ දේ පසුව තීරණය කරන්න. à¶‘à·€à·à¶±à·’ ස්ථà·à¶´à¶±à¶ºà¶š සිදු නොවන දේ à¶´à·’à·…à·’à¶¶à¶³ උදà·à·„රණ, Office Suite à¶‘à¶šà¶šà·Š, මà·à¶°à·Šâ€à¶º à·€à·à¶¯à¶šà¶ºà¶šà·Š, රූප නරඹන්නà·à¶šà·Š හ෠මුද්â€à¶»à¶« සහà·à¶ºà¶šà·Š නොමà·à¶­. එය ඩෙස්ක්ටොප් à¶‘à¶šà¶šà·Š, ගොනු à¶¶à·Šâ€à¶»à·€à·”සරයක්, à¶´à·à¶šà·šà¶¢ කළමනà·à¶šà¶»à·”, පෙළ සංස්කà·à¶»à¶šà¶ºà¶šà·Š සහ සරල වෙබ් à¶¶à·Šâ€à¶»à·€à·Šà·ƒà¶»à¶ºà¶šà·Š පමණක් වනු ඇත. Minimal Install අවම ස්ථà·à¶´à¶±à¶º Please select an option for your install, or use the default: LibreOffice included. කරුණà·à¶šà¶» ඔබගේ ස්ථà·à¶´à¶±à¶º සඳහ෠විකල්පයක් à¶­à·à¶»à¶±à·Šà¶±, à¶±à·à¶­à·„ොත් පෙරනිමිය à¶·à·à·€à·’ත෠කරන්න: LibreOffice ඇතුළත්. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>මෙය උදà·à·„රණ QML ගොනුවකි, Flickable අන්තර්ගතය සහිත Rich Text විකල්ප පෙන්වයි.</p> <p>Rich Text සහිත QML à·„à¶§ HTML à¶§à·à¶œà·Š à¶·à·à·€à·’à¶­à· à¶šà·… à·„à·à¶š, Flickable අන්තර්ගතය ස්පර්෠තිර සඳහ෠ප්â€à¶»à¶ºà·à¶¢à¶±à·€à¶­à·Š වේ.</p> <p><b>මෙය තද පෙළකි</b></p> <p><i>මෙය ඇල අකුරු වේ</i></p> <p><u>මෙය යටින් ඉරි ඇඳ ඇති à¶´à·à¶¨à¶ºà¶šà·’</u></p> <p><center>මෙම à¶´à·à¶¨à¶º මà·à¶¯à¶§ පෙළගස්වනු ඇත.</center></p> <p><s>මෙය මà·à¶¯à·’න් ඇදි ඉරකි.</s></p> <p>à¶šà·šà¶­ උදà·à·„රණය: <code>ls -l /home</code></p> <p><b>à¶½à·à¶ºà·’ස්තු:</b></p> <ul> <li>Intel CPU පද්ධති</li> <li>AMD CPU පද්ධති</li> </ul> <p>සිරස් අනුචලන තීරුව වෙනස් à¶šà·… à·„à·à¶šà·’ à¶…à¶­à¶», වත්මන් à¶´à·…à¶½ 10 ලෙස සකස෠ඇත.</p> Back ආපසු usersq Pick your user name and credentials to login and perform admin tasks පිවිසීමට සහ පරිපà·à¶½à¶š à¶šà·à¶»à·Šà¶ºà¶ºà¶±à·Š කිරීමට ඔබගේ පරිà·à·“ලක à¶±à·à¶¸à¶º සහ à¶…à¶šà·Šà¶­à¶´à¶­à·Šâ€à¶» à¶­à·à¶»à¶±à·Šà¶± What is your name? ඔබගේ නම කුමක් ද? Your Full Name ඔබේ සම්පුර්ණ නම What name do you want to use to log in? ඔබට පුරනය වීමට à¶·à·à·€à·’ත෠කිරීමට à¶…à·€à·à·Šâ€à¶º නම කුමක්ද? Login Name ලොගින් නම If more than one person will use this computer, you can create multiple accounts after installation. මෙම පරිගණකය à¶‘à¶šà·Š අයෙකුට වඩ෠භà·à·€à·’ත෠කරන්නේ නම්, ස්ථà·à¶´à¶±à¶º කිරීමෙන් පසු ඔබට ගිණුම් කිහිපයක් සෑදිය à·„à·à¶š. Only lowercase letters, numbers, underscore and hyphen are allowed. කුඩ෠අකුරු, ඉලක්කම්, යටි ඉරි සහ තනි ඉර පමණක් ඉඩ දෙනු à¶½à·à¶¶à·š. root is not allowed as username. root පරිà·à·“ලක à¶±à·à¶¸à¶ºà¶šà·Š ලෙස අවසර à¶±à·à¶­. What is the name of this computer? මෙම පරිගණකයේ නම කුමක්ද? Computer Name පරිගණක නම This name will be used if you make the computer visible to others on a network. ඔබ පරිගණකය à¶¢à·à¶½à¶ºà¶š අන් අයට පෙනෙන ලෙස සලස්වන්නේ නම් මෙම නම à¶·à·à·€à·’ත෠වේ. localhost is not allowed as hostname. localhost සත්කà·à¶»à¶š à¶±à·à¶¸à¶º ලෙස à¶·à·à·€à·’තයට අවසර à¶±à·à¶­. Choose a password to keep your account safe. ඔබගේ ගිණුම ආරක්ෂිතව à¶­à¶¶à· à¶œà·à¶±à·“මට මුරපදයක් à¶­à·à¶»à¶±à·Šà¶±. Password රහස් පදය Repeat Password මුරපදය à¶±à·à·€à¶­ ඇතුල් කරන්න Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. එකම මුරපදය දෙවරක් ඇතුල් කරන්න, එවිට එය ටයිප් කිරීමේ දà·à·‚ සඳහ෠පරීක්ෂ෠කළ à·„à·à¶š. හොඳ මුරපදයක අකුරු, ඉලක්කම් සහ විරà·à¶¸ ලකුණු මිà·à·Šâ€à¶»à¶«à¶ºà¶šà·Š අඩංගු වන à¶…à¶­à¶», අවම à·€à·à¶ºà·™à¶±à·Š à¶…à¶šà·Šà·‚à¶» අටක්වත් දිග විය යුතු à¶…à¶­à¶» නියමිත à¶šà·à¶½ à¶´à¶»à·à·ƒà¶ºà¶±à·Šà·„ිදී වෙනස් à¶šà·… යුතුය. Validate passwords quality මුරපදවල ගුණà·à¶­à·Šà¶¸à¶šà¶·à·à·€à¶º තහවුරු කරන්න When this box is checked, password-strength checking is done and you will not be able to use a weak password. මෙම කොටුව සලකුණු à¶šà·… විට, මුරපදය-à·à¶šà·Šà¶­à·’ය පරීක්ෂ෠කිරීම සිදු කරනු ලබන à¶…à¶­à¶» ඔබට දුර්වල මුරපදයක් à¶·à·à·€à·’ත෠කිරීමට නොහà·à¶šà·’ වනු ඇත. Log in automatically without asking for the password මුරපදය ඉල්ලන්නේ à¶±à·à¶­à·’à·€ ස්වයංක්â€à¶»à·“යව ලොග් වන්න Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. අකුරු, ඉලක්කම්, යටි ඉරි සහ යටි ඉරි පමණක් ඉඩ දෙනු à¶½à·à¶¶à·š, අවම à·€à·à¶ºà·™à¶±à·Š à¶…à¶šà·Šà·‚à¶» දෙකක්. Reuse user password as root password පරිà·à·“ලක මුරපදය root මුරපදය ලෙස à¶±à·à·€à¶­ à¶·à·à·€à·’ත෠කරන්න Use the same password for the administrator account. පරිපà·à¶½à¶š ගිණුම සඳහ෠එකම මුරපදය à¶·à·à·€à·’ත෠කරන්න. Choose a root password to keep your account safe. ඔබගේ ගිණුම ආරක්ෂිතව à¶­à¶¶à· à¶œà·à¶±à·“මට root මුරපදයක් à¶­à·à¶»à¶±à·Šà¶±. Root Password Root මුරපදය Repeat Root Password Root මුරපදය à¶±à·à·€à¶­ ඇතුල් කරන්න Enter the same password twice, so that it can be checked for typing errors. එකම මුරපදය දෙවරක් ඇතුල් කරන්න, එවිට එය ටයිප් කිරීමේ දà·à·‚ සඳහ෠පරීක්ෂ෠කළ à·„à·à¶š. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>%1 <quote>%2</quote> ස්ථà·à¶´à¶šà¶º වෙත à·ƒà·à¶¯à¶»à¶ºà·™à¶±à·Š පිළිගනිමු</h3> <p>මෙම à·€à·à¶©à·ƒà¶§à·„à¶± ඔබෙන් à¶´à·Šâ€à¶»à·à·Šà¶± කිහිපයක් අසන à¶…à¶­à¶» ඔබේ පරිගණකයේ %1 පිහිටුවනු ඇත.</p> Support සහà·à¶º Known issues දන්න෠ගà·à¶§à·…à·” Release notes නිකුත් කිරීමේ සටහන් Donate පරිත්â€à¶ºà·à¶œ කරන්න calamares-calamares-2d126ae/lang/calamares_sk.ts000066400000000000000000007122561430147706700217420ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings SpravovaÅ¥ nastavenia automatického pripojenia BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Zavádzacie prostredie</strong> tohto systému.<br><br>StarÅ¡ie systémy architektúry x86 podporujú iba <strong>BIOS</strong>.<br>Moderné systémy obvykle používajú <strong>EFI</strong>, ale tiež sa môžu zobraziÅ¥ ako BIOS, ak sú spustené v režime kompatiblitiy. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Tento systém bol spustený so zavádzacím prostredím <strong>EFI</strong>.<br><br>Na konfiguráciu spustenia z prostredia EFI, musí inÅ¡talátor umiestniÅ¥ aplikáciu zavádzaÄa, ako je <strong>GRUB</strong> alebo <strong>systemd-boot</strong> na <strong>oddiel systému EFI</strong>. Toto je vykonané automaticky, pokiaľ nezvolíte ruÄné rozdelenie oddielov, v tom prípade ho musíte zvoliÅ¥ alebo vytvoriÅ¥ ruÄne. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Tento systém bol spustený so zavádzacím prostredím <strong>BIOS</strong>.<br><br>Na konfiguráciu spustenia z prostredia BIOS, musí inÅ¡talátor nainÅ¡talovaÅ¥ zavádzaÄ, ako je <strong>GRUB</strong>, buÄ na zaÄiatok oddielu alebo na <strong>hlavný zavádzací záznam (MBR)</strong> pri zaÄiatku tabuľky oddielov (preferované). Toto je vykonané automaticky, pokiaľ nezvolíte ruÄné rozdelenie oddielov, v tom prípade ho musíte nainÅ¡talovaÅ¥ ruÄne. 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 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. Nastavenie menovky systému súborov na %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. Nastavenie menovky systému súborov <strong>%1</strong> na oddieli <strong>%2</strong>. The installer failed to update partition table on disk '%1'. InÅ¡talátor zlyhal pri aktualizovaní tabuľky oddielov na disku „%1“. CheckerContainer Gathering system information... Zbierajú sa informácie o poÄítaÄi... 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 Successfully unmounted %1. ÚspeÅ¡ne odpojený oddiel %1. Successfully disabled swap %1. ÚspeÅ¡ne zakázaný odkladací priestor na oddieli %1. Successfully cleared swap %1. ÚspeÅ¡ne vymazaný odkladací priestor na oddieli %1. Successfully closed mapper device %1. Successfully disabled volume group %1. ÚspeÅ¡ne zakázaná skupina zväzkov %1. Clear mounts for partitioning operations on %1 VymazaÅ¥ pripojenia pre operácie rozdelenia oddielov na zariadení %1 Clearing mounts for partitioning operations on %1. Vymazávajú sa pripojenia pre operácie rozdelenia oddielov na zariadení %1. Cleared all mounts for %1 Vymazané vÅ¡etky pripojenia pre zariadenie %1 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. 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ý. Packages Balíky Install option: <strong>%1</strong> Voľba inÅ¡talácie: <strong>%1</strong> None Summary Súhrn This is an overview of what will happen once you start the setup procedure. Toto je prehľad toho, Äo sa stane, keÄ spustíte inÅ¡taláciu. This is an overview of what will happen once you start the install procedure. Toto je prehľad toho, Äo sa stane, keÄ spustíte inÅ¡taláciu. ContextualProcessJob Contextual Processes Job Úloha kontextových procesov CreatePartitionDialog Create a Partition Vytvorenie oddielu Si&ze: Veľ&kosÅ¥: MiB MiB Partition &Type: &Typ oddielu: Primar&y H&lavný E&xtended Ro&zšírený Fi&le System: &Systém súborov: LVM LV name Názov LVM LV &Mount Point: Bo&d pripojenia: Flags: Príznaky: Label for the filesystem Menovka systému súborov FS Label: Menovka SS: En&crypt ZaÅ¡i&frovaÅ¥ Logical Logický Primary Primárny GPT GPT Mountpoint already in use. Please select another one. Bod pripojenia sa už používa. Prosím, vyberte iný. Mountpoint must start with a <tt>/</tt>. Bod pripojenia musí zaÄínaÅ¥ znakom <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Vytvorenie nového %1MiB oddielu na zariadení %3 (%2) so záznamami %4. Create new %1MiB partition on %3 (%2). Vytvorenie nového %1MiB oddielu na zariadení %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Vytvorenie nového %2MiB oddielu na zariadení %4 (%3) so systémom súborov %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Vytvorenie nového <strong>%1MiB</strong> oddielu na zariadení <strong>%3</strong> (%2) so záznamami <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Vytvorenie nového <strong>%1MiB</strong> oddielu na zariadení <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Vytvorenie nového <strong>%2MiB</strong> oddielu na zariadení <strong>%4</strong> (%3) so systémom súborov <strong>%1</strong>. Creating new %1 partition on %2. Vytvára sa nový %1 oddiel na zariadení %2. The installer failed to create partition on disk '%1'. InÅ¡talátor zlyhal pri vytváraní oddielu na disku „%1“. 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 Con&tent: O&bsah: &Keep &PonechaÅ¥ Format FormátovaÅ¥ Warning: Formatting the partition will erase all existing data. Upozornenie: Naformátovaním oddielu sa vymažú vÅ¡etky existujúce údaje. &Mount Point: Bod pripoje&nia: Si&ze: V&eľkosÅ¥: MiB MiB Fi&le System: S&ystém súborov: Flags: Príznaky: Label for the filesystem Menovka systému súborov FS Label: Menovka SS: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Forma En&crypt system &ZaÅ¡ifrovaÅ¥ systém Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Zdá sa, že váš systém nepodporuje Å¡ifrovanie na takej úrovni, aby mohol byÅ¥ zaÅ¡ifrovaný celý systém. Môžete povoliÅ¥ Å¡ifrovanie, ale na úkor výkonu. Passphrase Heslo Confirm passphrase Potvrdenie hesla Please enter the same passphrase in both boxes. Prosím, zadajte rovnaké heslo do oboch polí. ErrorDialog Details: Podrobnosti: Would you like to paste the install log to the web? Chceli by ste vložiÅ¥ záznam z inÅ¡talácie na web? FillGlobalStorageJob Set partition information NastaviÅ¥ informácie o oddieli Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> NainÅ¡talovaÅ¥ distribúciu %1 na <strong>nový</strong> systémový oddiel %2 s funkciami <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. InÅ¡talovaÅ¥ distribúciu %1 na <strong>novom</strong> %2 systémovom oddieli. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. NastaviÅ¥ <strong>nový</strong> oddiel typu %2 s bodom pripojenia <strong>%1</strong> a funkciami <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. NastaviÅ¥ <strong>nový</strong> oddiel typu %2 s bodom pripojenia <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. NainÅ¡talovaÅ¥ distribúciu %2 na systémový oddiel <strong>%1</strong> typu %3 s funkciami <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. NastaviÅ¥ oddiel <strong>%1</strong> typu %3 s bodom pripojenia <strong>%2</strong> a funkciami <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. NastaviÅ¥ oddiel <strong>%1</strong> typu %3 s bodom pripojenia <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. InÅ¡talovaÅ¥ distribúciu %2 na %3 systémovom oddieli <strong>%1</strong>. 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Konfigurácia zaÅ¡ifrovaného odkladacieho priestoru. No target system available. Nie je dostupný žiadny cieľový systém. No rootMountPoint is set. No configFilePath is set. LicensePage Form Forma <h1>License Agreement</h1> <h1>LicenÄné podmienky</h1> I accept the terms and conditions above. Prijímam podmienky vyššie. Please review the End User License Agreements (EULAs). Prosím, prezrite si licenÄné podmienky koncového používateľa (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Touto inÅ¡talaÄnou procedúrou sa nainÅ¡taluje uzavretý softvér, ktorý je predmetom licenÄných podmienok. If you do not agree with the terms, the setup procedure cannot continue. Bez súhlasu podmienok nemôže inÅ¡talaÄná procedúra pokraÄovaÅ¥. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Tento proces inÅ¡talácie môže nainÅ¡talovaÅ¥ uzavretý softvér, ktorý je predmetom licenÄných podmienok v rámci poskytovania dodatoÄných funkcií a vylepÅ¡enia používateľských skúseností. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Ak nesúhlasíte s podmienkami, uzavretý softvér nebude nainÅ¡talovaný a namiesto neho budú použité alternatívy s otvoreným zdrojom. 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 label for netinstall module, Linux kernel Jadro Services label for netinstall module, system services Služby Login label for netinstall module, choose login manager Prihlásenie Desktop label for netinstall module, choose desktop environment Pracovné prostredie Communication label for netinstall module Komunikácia Development label for netinstall module Vývoj Office label for netinstall module Kancelária Multimedia label for netinstall module Multimédiá Internet label for netinstall module Internet Theming label for netinstall module Motívy Gaming label for netinstall module Hry Utilities label for netinstall module Nástroje Applications Aplikácie 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ý. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Nebudú zmenené žiadne oddiely. Current: Teraz: After: Potom: No EFI system partition configured Nie je nastavený žiadny oddiel systému EFI EFI system partition configured incorrectly Systémový oddiel EFI nie je správne nastavený An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. Na spustenie distribúcie %1 je potrebný systémový oddiel EFI.<br/><br/>Na konfiguráciu systémového oddielu EFI, prejdite späť a vyberte alebo vytvorte vhodný systém súborov. The filesystem must be mounted on <strong>%1</strong>. Systém súborov musí byÅ¥ pripojený do <strong>%1</strong>. The filesystem must have type FAT32. Systém súborov musí byÅ¥ typu FAT32. The filesystem must be at least %1 MiB in size. Systém súborov musí maÅ¥ veľkosÅ¥ aspoň %1. The filesystem must have flag <strong>%1</strong> set. Systém súborov musí maÅ¥ nastavený príznak <strong>%1 . You can continue without setting up an EFI system partition but your system may fail to start. Môžete pokraÄovaÅ¥ bez nastavenia systémového oddielu EFI, ale váš systém môže zlyhaÅ¥ pri spúšťaní. Option to use GPT on BIOS Voľba na použitie tabuľky GPT s BIOSom A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Tabuľka oddielov GPT je najlepÅ¡ou voľbou pre vÅ¡etky systémy. InÅ¡talátor podporuje taktiež inÅ¡taláciu pre systémy s BIOSom.<br/><br/>Pre nastavenie tabuľky oddielov GPT s BIOSom, (ak ste tak už neuÄinili) prejdite späť a nastavte tabuľku oddielov na GPT, a potom vytvorte nenaformátovaný oddiel o veľkosti 8 MB s povoleným príznakom <strong>%2</strong>.<br/><br/>Nenaformátovaný oddiel o veľkosti 8 MB je potrebný na spustenie distribúcie %1 na systéme s BIOSom a tabuľkou GPT. Boot partition not encrypted Zavádzací oddiel nie je zaÅ¡ifrovaný A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Spolu so zaÅ¡ifrovaným koreňovým oddielom bol nainÅ¡talovaný oddelený zavádzací oddiel, ktorý ale nie je zaÅ¡ifrovaný.<br/><br/>S týmto typom inÅ¡talácie je ohrozená bezpeÄnosÅ¥, pretože dôležité systémové súbory sú uchovávané na nezaÅ¡ifrovanom oddieli.<br/>Ak si to želáte, môžete pokraÄovaÅ¥, ale neskôr, poÄas spúšťania systému sa vykoná odomknutie systému súborov.<br/>Na zaÅ¡ifrovanie zavádzacieho oddielu prejdite späť a vytvorte ju znovu vybraním voľby <strong>ZaÅ¡ifrovaÅ¥</strong> v okne vytvárania oddielu. has at least one disk device available. má dostupné aspoň jedno diskové zariadenie. There are no partitions to install on. Neexistujú žiadne oddiely, na ktoré je možné vykonaÅ¥ inÅ¡taláciu. 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 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 StandardButtons &OK &OK &Yes Ãn&o &No &Nie &Cancel &ZruÅ¡iÅ¥ &Close &ZavrieÅ¥ TrackingInstallJob Installation feedback Spätná väzba inÅ¡talácie Sending installation feedback. Odosiela sa spätná väzba inÅ¡talácie. Internal error in install-tracking. Interná chyba príkazu install-tracking. HTTP request timed out. Požiadavka HTTP vyprÅ¡ala. 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 UmountJob Unmount file systems. Odpojenie súborových systémov. No target system available. Nie je dostupný žiadny cieľový systém. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ak bude tento poÄítaÄ používaÅ¥ viac ako jedna osoba, môžete nastaviÅ¥ viacero úÄtov po inÅ¡talácii.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ak bude tento poÄítaÄ používaÅ¥ viac ako jedna osoba, môžete nastaviÅ¥ viacero úÄtov po inÅ¡talácii.</small> UsersQmlViewStep 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 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 %1 support Podpora distribúcie %1 About %1 setup O inÅ¡talátore %1 About %1 installer O inÅ¡talátore %1 WelcomeQmlViewStep Welcome Uvítanie WelcomeViewStep Welcome Uvítanie ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Chyba konfigurácie No partitions are available for ZFS. Nie sú dostupné žiadne oddiely pre ZFS. Internal data missing Chýbajú vnútorné údaje Failed to create zpool Failed to create dataset The output was: Výstup bol: calamares-sidebar About O inÅ¡talátore Debug LadiÅ¥ Show information about Calamares Show debug information ZobraziÅ¥ ladiace informácie finishedq Installation Completed InÅ¡talácia dokonÄená %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Distribúcia %1 bola nainÅ¡talovaná do vášho poÄítaÄa.<br/> Teraz môžete reÅ¡tartovaÅ¥ váš poÄítaÄ a spustiÅ¥ nový systém, alebo pokraÄovaÅ¥ v používaní živého prostredia. Close Installer ZavrieÅ¥ inÅ¡talátor Restart System ReÅ¡tartovaÅ¥ systém <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed InÅ¡talácia dokonÄená %1 has been installed on your computer.<br/> You may now restart your device. Distribúcia %1 bola nainÅ¡talovaná do vášho poÄítaÄa.<br/> Teraz môžete reÅ¡tartovaÅ¥ vaÅ¡e zariadenie. Close ZavrieÅ¥ Restart ReÅ¡tartovaÅ¥ i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Jazyky</h1> </br> Miestne nastavenie systému ovplyvní jazyk a znakovú sadu pre niektoré prvky používateľského rozhrania príkazového riadku. Aktuálne nastavenie je <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Miestne nastavenie</h1> </br> Miestne nastavenie systému ovplyvní formát Äísel a dátumov. Aktuálne nastavenie je <strong>%1</strong>. Back Späť keyboardq To activate keyboard preview, select a layout. Na aktiváciu náhľadu klávesnice, vyberte rozloženie. Keyboard Model: Model klávesnice: Layouts Rozloženia Type here to test your keyboard Tu môžete písaÅ¥ na odskúšanie vaÅ¡ej klávesnice Variants Varianty 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> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice je výkonným a bezplatným kancelárskym balíkom, ktorý používajú milióny ľudí po celom svete. Zahŕňa niekoľko aplikácií, ktoré ho robia najuniverzálnejším slobodným kancelárskym balíkom s otvoreným zdrojom na trhu.<br/> Predvolená voľba. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Ak nechcete inÅ¡talovaÅ¥ kancelársky balík, staÄí vybraÅ¥ voľbu Žiadny kancelársky balík. Vždy môžete podľa potreby nejaký (alebo viacero) pridaÅ¥ neskôr vo vaÅ¡om nainÅ¡talovanom systéme. No Office Suite Žiadny kancelársky balík Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Minimálna inÅ¡talácia Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back Späť usersq Pick your user name and credentials to login and perform admin tasks Vyberte vaÅ¡e používateľské meno a poverenia na prihlásenie a vykonávanie administrátorských úloh What is your name? Aké je vaÅ¡e meno? Your Full Name VaÅ¡e celé meno What name do you want to use to log in? Aké meno chcete použiÅ¥ na prihlásenie? Login Name Prihlasovacie meno If more than one person will use this computer, you can create multiple accounts after installation. Ak bude tento poÄítaÄ používaÅ¥ viac ako jedna osoba, môžete po inÅ¡talácii vytvoriÅ¥ viacero úÄtov. Only lowercase letters, numbers, underscore and hyphen are allowed. Sú povolené iba malé písmená, Äíslice, podtržníky a pomlÄky. root is not allowed as username. root nie je možné použiÅ¥ ako meno používateľa What is the name of this computer? Aký je názov tohto poÄítaÄa? Computer Name Názov poÄítaÄa This name will be used if you make the computer visible to others on a network. Tento názov bude použitý, keÄ zviditeľníte poÄítaÄ ostatným v sieti. localhost is not allowed as hostname. localhost nie možné použiÅ¥ ako názov hostiteľa Choose a password to keep your account safe. Zvoľte heslo pre zachovanie vášho úÄtu v bezpeÄí. Password Heslo Repeat Password Zopakovanie hesla Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Zadajte rovnaké heslo dvakrát, aby sa prediÅ¡lo preklepom. Dobré heslo by malo obsahovaÅ¥ mix písmen, Äísel a diakritiky, malo by maÅ¥ dĺžku aspoň osem znakov a malo by byÅ¥ pravidelne menené. Validate passwords quality OveriÅ¥ kvalitu hesiel When this box is checked, password-strength checking is done and you will not be able to use a weak password. KeÄ je zaÅ¡krtnuté toto políÄko, kontrola kvality hesla bude ukonÄená a nebudete môcÅ¥ použiÅ¥ slabé heslo. Log in automatically without asking for the password PrihlásiÅ¥ automaticky bez pýtania hesla Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Znovu použiÅ¥ používateľské heslo ako heslo správcu Use the same password for the administrator account. PoužiÅ¥ rovnaké heslo pre úÄet správcu. Choose a root password to keep your account safe. Zvoľte heslo správcu pre zachovanie vášho úÄtu v bezpeÄí. Root Password Heslo správcu Repeat Root Password Zopakovanie hesla správcu Enter the same password twice, so that it can be checked for typing errors. Zadajte rovnaké heslo dvakrát, aby sa prediÅ¡lo preklepom. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Vitajte v inÅ¡talátore distribúcie %1 <quote>%2</quote></h3> <p>Tento program vám položí niekoľko otázok a nainÅ¡taluje distribúciu %1 do vášho poÄítaÄa.</p> Support Podpora Known issues Známe problémy Release notes Poznámky k vydaniu Donate PrispieÅ¥ calamares-calamares-2d126ae/lang/calamares_sl.ts000066400000000000000000005777211430147706700217510ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. PoÄisti vse zaÄasne priklope. Clearing all temporary mounts. 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. Packages Install option: <strong>%1</strong> None Summary Povzetek This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Ustvari razdelek Si&ze: Ve&likost MiB Partition &Type: &Vrsta razdelka: Primar&y E&xtended R&azÅ¡irjen Fi&le System: LVM LV name &Mount Point: &Priklopna toÄka: Flags: Zastavice: Label for the filesystem FS Label: En&crypt Logical LogiÄen Primary Primaren GPT GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. Namestilniku ni uspelo ustvariti razdelka na disku '%1'. 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 Con&tent: &Keep Format Formatiraj Warning: Formatting the partition will erase all existing data. Opozorilo: Formatiranje razdelka bo izbrisalo vse obstojeÄe podatke. &Mount Point: &Priklopna toÄka: Si&ze: Ve&likost MiB Fi&le System: Flags: Zastavice: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Oblika En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Nastavi informacije razdelka Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Oblika <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: Potem: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form 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 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) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form 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 UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Oblika Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome DobrodoÅ¡li WelcomeViewStep Welcome DobrodoÅ¡li ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug RazhroÅ¡Äevanje Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Model tipkovnice: Layouts Type here to test your keyboard Tipkajte tukaj za testiranje tipkovnice Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? 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> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_sq.ts000066400000000000000000007163451430147706700217530ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> për %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Falënderime për <a href="https://calamares.io/team/">ekipin Calamares</a> dhe <a href="https://www.transifex.com/calamares/calamares/">ekpin e përkthyesve të Calamares-it</a>.<br/><br/>Zhvillimi i <a href="https://calamares.io/">Calamares-it</a> sponsorizohet nga <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Të drejt kopjimi %1-%2 %3 &lt;%4&gt;<br/> 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 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 Successfully unmounted %1. %1 u çmontua me sukses. Successfully disabled swap %1. Pjesa swap %1 u çaktivizua me sukses. Successfully cleared swap %1. Pjesa swap %1 u spastrua me sukses. Successfully closed mapper device %1. Pajisja “mapper†%1 u mbyll me sukses. Successfully disabled volume group %1. Grupi i vëllimeve %1 u çaktivizua me sukses. Clear mounts for partitioning operations on %1 Hiqi montimet për veprime pjesë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. 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. Packages Paketa Install option: <strong>%1</strong> Mundësi instalimi: <strong>%1</strong> None Asnjë Summary Përmbledhje This is an overview of what will happen once you start the setup procedure. Kjo është një përmbledhje e asaj që do të ndodhë sapo të nisni procedurën e rregullimit. This is an overview of what will happen once you start the install procedure. Kjo është një përmbledhje e asaj që do të ndodhë sapo të nisni procedurën e instalimit. ContextualProcessJob Contextual Processes Job Akt Procesesh Kontekstuale CreatePartitionDialog Create a Partition Krijoni një Pjesë Si&ze: &Madhësi: MiB MiB Partition &Type: &Lloj Pjese: Primar&y P&arësor E&xtended E&xtended Fi&le System: &Sistem Kartelash: LVM LV name Emër LV LVM &Mount Point: Pikë &Montimi: Flags: Parametra: Label for the filesystem Etiketë për sistemin e kartelave FS Label: Etiketë FS-je: En&crypt &Fshehtëzoje Logical Logjik Primary Parësor GPT GPT Mountpoint already in use. Please select another one. Pikë montimi tashmë e përdorur. Ju lutemi, përzgjidhni një tjetër. Mountpoint must start with a <tt>/</tt>. Pika e montimit duhet të fillojë me një <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Krijo pjesë të re %1MiB te %3 (%2) me zëra %4. Create new %1MiB partition on %3 (%2). Krijo pjesë të re %1MiB te %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Krijo pjesë të re %2MiB te %4 (%3) me sistem kartelash %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Krijo pjesë të re <strong>%1MiB</strong> te <strong>%3</strong> (%2) me zërat <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Krijo pjesë të re <strong>%1MiB</strong> te <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Krijo pjesë të re <strong>%2MiB</strong> te <strong>%4</strong> (%3) me sistem kartelash <strong>%1</strong>. Creating new %1 partition on %2. Po krijohet pjesë e re %1 te %2. The installer failed to create partition on disk '%1'. Instaluesi s’arriti të krijojë pjesë në diskun '%1'. 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 Con&tent: Lën&dë: &Keep &Mbaje Format Formatoje Warning: Formatting the partition will erase all existing data. Kujdes: Formatimi i pjesës do të fshijë krejt të dhënat ekzistuese. &Mount Point: Pikë &Montimi: Si&ze: &Madhësi: MiB MiB Fi&le System: &Sistem Kartelash: Flags: Parametra: Label for the filesystem Etiketë për sistemin e kartelave FS Label: Etiketë FS-je: Passphrase for existing partition Frazëkalim për pjesë ekzistuese Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. Pjesa %1 s’u fshehtëzua dot me frazëkalimin e dhënë.<br/><br/>Përpunojeni sërish pjesën dhe jepni frazëkalimin e saktë, ose fshijeni dhe krijoni një pjesë të re të fshehtëzuar. EncryptWidget Form Formular En&crypt system &Fshehtëzoje sistemin Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Sistemi juaj nuk duket se mbulon fshehtëzimin aq mirë sa të fshehtëzohet tërë sistemi. Mund të aktivizoni fshehtëzimin, por nga kjo mund të vuajë funksionimi. Passphrase Frazëkalim Confirm passphrase Ripohoni frazëkalimin Please enter the same passphrase in both boxes. Ju lutemi, jepni të njëjtin frazëkalim në të dy kutizat. ErrorDialog Details: Hollësi: Would you like to paste the install log to the web? Do të donit të hidhet në web regjistri i instalimit? FillGlobalStorageJob Set partition information Caktoni të dhëna pjese Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Instalo %1 te pjesë e <strong>re</strong> %2 sistemi, me veçoritë <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Instaloje %1 në pjesë sistemi <strong>të re</strong> %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Po formësohet pjesë swap e fshehtëzuar. No target system available. S’ka sistem të synuar. No rootMountPoint is set. S’është ujdisur rootMountPoint. No configFilePath is set. S’është ujdisur configFilePath. LicensePage Form Formular <h1>License Agreement</h1> <h1>Marrëveshje Licence</h1> I accept the terms and conditions above. I pranoj termat dhe kushtet më sipër. Please review the End User License Agreements (EULAs). Ju lutemi, shqyrtoni Marrëveshjet e Licencave për Përdorues të Thjeshtë (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Kjo procedurë ujdisjeje do të instalojë software pronësor që është subjekt kushtesh licencimi. If you do not agree with the terms, the setup procedure cannot continue. Nëse nuk pajtoheni me kushtet, procedura e ujdisjes s’do të vazhdojë. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Që të furnizojë veçori shtesë dhe të përmirësojë punën e përdoruesit, kjo procedurë ujdisjeje mundet të instalojë software pronësor që është subjekt kushtesh licencimi. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Nëse nuk pajtohemi me kushtet, nuk do të instalohet software pronësor, dhe në vend të tij do të përdoren alternativa nga burimi i hapët. 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 label for netinstall module, Linux kernel Kernel Services label for netinstall module, system services Shërbime Login label for netinstall module, choose login manager Hyrje Desktop label for netinstall module, choose desktop environment Desktop Communication label for netinstall module Komunikim Development label for netinstall module Zhvillim Office label for netinstall module Zyrë Multimedia label for netinstall module Multimedia Internet label for netinstall module Internet Theming label for netinstall module Tema Gaming label for netinstall module Lojëra Utilities label for netinstall module Të dobishme Applications Aplikacione 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. 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ë Unsafe partition actions are enabled. Janë aktivizuar veprime jo të parrezik pjesësh. Partitioning is configured to <b>always</b> fail. Pjesëzimi është formësuar të dështojë <b>përherë</b>. No partitions will be changed. S’do të ndryshohet ndonjë pjesë. Current: E tanishmja: After: Më Pas: No EFI system partition configured S’ka të formësuar pjesë sistemi EFI EFI system partition configured incorrectly Pjesë EFI sistemi e formësuar pasaktësisht An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. Që të niset %1, është e nevojshme një pjesë EFI sistemi.<br/><br/>Që të formësoni një pjesë sistemi EFI, kthehuni nbrapsht dhe përzgjidhni ose krijoni një sistem të përshtatshëm kartelash. The filesystem must be mounted on <strong>%1</strong>. Sistemi i kartelave duhet të montohet te <strong>%1</strong>. The filesystem must have type FAT32. Sistemi i kartelave duhet të jetë i llojit FAT32. The filesystem must be at least %1 MiB in size. Sistemi i kartelave duhet të jetë të paktën %1 MiB i madh. The filesystem must have flag <strong>%1</strong> set. Sistemi i kartelave duhet të ketë të përzgjedhur parametrin <strong>%1</strong>. You can continue without setting up an EFI system partition but your system may fail to start. Mund të vazhdoni pa ujdisur një pjesë EFI sistemi, por sistemi juaj mund të mos arrijë të niset. Option to use GPT on BIOS Mundësi për përdorim GTP-je në BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Mundësia më e mirë për krejt sistemet është një tabelë GPT pjesësh. Ky instalues mbulon një ujdisje të tillë edhe për sisteme BIOS.<br/><br/>Që të formësoni një tabelë GPT pjesësh në BIOS, (nëse s’është bërë tashmë), kthehuni mbrapsht dhe vëreni tabelën e pjesëve si GPT, më pas, krijoni një pjesë 8 MB të paformatuar, me parametrin <strong>%2</strong> të aktivizuar.<br/><br/>Një pjesë e paformatuar 8 MB është e nevojshme për të nisur %1 në një sistem BIOS me GPT. Boot partition not encrypted Pjesë nisjesh e pafshehtëzuar A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Tok me pjesën e fshehtëzuar <em>root</em> qe rregulluar edhe një pjesë <em>boot</em> veçmas, por pjesa <em>boot</em> s’është e fshehtëzuar.<br/><br/>Ka preokupime mbi sigurinë e këtij lloj rregullimi, ngaqë kartela të rëndësishme sistemi mbahen në një pjesë të pafshehtëzuar.<br/>Mund të vazhdoni, nëse doni, por shkyçja e sistemit të kartelave do të ndodhë më vonë, gjatë nisjes së sistemit.<br/>Që të fshehtëzoni pjesën <em>boot</em>, kthehuni mbrapsht dhe rikrijojeni, duke përzgjedhur te skena e krijimit të pjesës <strong>Fshehtëzoje</strong>. has at least one disk device available. ka të paktën një pajisje disku për përdorim. There are no partitions to install on. S’ka pjesë ku të instalohet. 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 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 StandardButtons &OK &OK &Yes &Po &No &Jo &Cancel &Anuloje &Close &Mbylle TrackingInstallJob Installation feedback Përshtypje mbi instalimin Sending installation feedback. Po dërgohen përshtypjet mbi instalimin. Internal error in install-tracking. Gabim i brendshëm në shquarjen e instalimit. HTTP request timed out. Kërkesës HTTP i mbaroi koha. 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 UmountJob Unmount file systems. Çmontoni sisteme kartelash. No target system available. S’ka sistem të synuar. No rootMountPoint is set. S’është ujdisur rootMountPoint. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Nëse këtë kompjuter do ta përdorë më shumë se një person, mund të krijoni disa llogari, pas rregullimit.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Nëse këtë kompjuter do ta përdorë më shumë se një person, mund të krijoni disa llogari, pas instalimit.</small> UsersQmlViewStep 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 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 %1 support Asistencë %1 About %1 setup Mbi rregullimin e %1 About %1 installer Rreth instaluesit %1 WelcomeQmlViewStep Welcome Mirë se vini WelcomeViewStep Welcome Mirë se vini ZfsJob Create ZFS pools and datasets Krijoni pool-e dhe grupe të dhënash ZFS Failed to create zpool on S’u arrit të krijohej zpool në Configuration Error Gabim Formësimi No partitions are available for ZFS. S’ka pjesë të passhme për ZFS Internal data missing Mungojnë të dhëna të brendshme Failed to create zpool S’u arrit të krijohej zpool Failed to create dataset S’u arrit të krijohej grup të dhënash The output was: Output-i qe: calamares-sidebar About Mbi Debug Diagnostikojeni Show information about Calamares Shfaq hollësi mbi Calamares Show debug information Shfaq të dhëna diagnostikimi finishedq Installation Completed Instalimi u Plotësua %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 është instaluar në kompjuterin tuaj.<br/> Tani mundeni ta rinisni me sistemin tuaj të ri, ose të vazhdoni përdorimin e mjedisit Live. Close Installer Mbylle Instaluesin Restart System Rinis Sistemin <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Një regjistër i plotë i instalimit gjendet si installation.log, te drejtoria shtëpi e përdoruesit Live.<br/> Te sistemi i synuar, ky regjistër është kopjuar te /var/log/installation.log.</p> finishedq@mobile Installation Completed Instalimi u Plotësua %1 has been installed on your computer.<br/> You may now restart your device. %1 është instaluar në kompjuterin tuaj.<br/> Tani mund të rinisni pajisjen tuaj. Close Mbylle Restart Rinise i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Gjuhë</h1> </br> Vlera për vendoren e sistemit prek gjuhën dhe shkronjat e përdorura për disa elementë të ndërfaqes rresh urdhrash të përdoruesit. Vlera e tanishme është <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Vendore</h1> </br> Rregullimi i vendores së sistemit prek formatin e numrave dhe datave. Rregullimi i tanishëm është <strong>%1</strong>. Back Mbrapsht keyboardq To activate keyboard preview, select a layout. Që të aktivizohet paraparje tastiere, përzgjidhni një skemë. Keyboard Model: Model Tastiere: Layouts Skema Type here to test your keyboard Që të provoni tastierën tuaj, shtypni këtu Variants Variante 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> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice është një suitë zyrash e lirë dhe e fuqishme, e përdorur nga miliona vetë anembanë rruzullit. Përfshin disa aplikacione, që e bëjnë suitën e Lirë dhe me Burim të Hapët më të zhdërvjellët në treg për zyra.<br/> Mundësi parazgjedhje. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Nëse s’doni të instalohet një suitë zyre, thjesht përzgjidhni Pa Suitë Zyre. Mundeni përherë të shtoni një të tillë (ose disa) më vonë, në sistemin tuaj të instaluar, kur të jetë e nevojshme. No Office Suite Pa Suitë Zyre Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Krijoni një instalim minimal Desktopi, hiqni krejt aplikacionet ekstra dhe vendosni më vonë se ç’doni të shtoni në sistemin tuaj. Shembuj se çfarë s’do të jenë në një instalim të tillë, s’do të ketë Suitë Zyre, as lojtës mediash, as parës figurash apo mbulim shtypësish. Do të jetë thjesht një mjedis desktop, shfletues kartelash, përgjegjës paketash, përpunues tekstesh dhe një shfletues elementar interneti. Minimal Install Instalim Minimal Please select an option for your install, or use the default: LibreOffice included. Ju lutemi, përzgjidhni një mundësi për instalimin tuaj, ose përdorni parazgjedhjen: me përfshirje të LibreOffice-it. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Kjo është një kartelë shembull QML, që tregon mundësi në RichText me lëndë Flickable.</p> <p>QML me RichText mund të përdorë etiketa HTML, lënda Flickable është e dobishme për ekrane me prekje.</p> <p><b>Ky është tekst me të trasha</b></p> <p><i>Ky është tekst me të pjerrëta</i></p> <p><u>Ky është një tekst i nënvijëzuar</u></p> <p><center>Ky tekst do të vendoset në qendër.</center></p> <p><s>Këtij i është hequr vijë përsipër</s></p> <p>Shembull kodi: <code>ls -l /home</code></p> <p><b>Listë:</b></p> <ul> <li>Sisteme me CPU Intel</li> <li>Sistemem me CPU AMD</li> </ul> <p>Ky rrëshqitës vertikal mund të ujdiset, gjerësia e tanishme është 10.</p> Back Mbrapsht usersq Pick your user name and credentials to login and perform admin tasks Zgjidhni emrin tuaj të përdoruesit dhe kredencialet për të bërë hyrje dhe kryer veprime përgjegjësi What is your name? Cili është emri juaj? Your Full Name Emri Juaj i Plotë What name do you want to use to log in? Ç’emër doni të përdorni për t’u futur? Login Name Emër Hyrjeje If more than one person will use this computer, you can create multiple accounts after installation. Nëse këtë kompjuter do ta përdorë më shumë se një person, mund të krijoni llogari të shumta pas instalimit. Only lowercase letters, numbers, underscore and hyphen are allowed. Lejohen vetëm shkronja të vogla, numra, nënvijë dhe vijë ndarëse. root is not allowed as username. “root†nuk lejohet si emër përdoruesi. What is the name of this computer? Cili është emri i këtij kompjuteri? Computer Name Emër Kompjuteri This name will be used if you make the computer visible to others on a network. Ky emër do të përdoret nëse e bëni kompjuterin të dukshëm për të tjerët në një rrjet. localhost is not allowed as hostname. “localhost†s’lejohet si strehëemër. Choose a password to keep your account safe. Zgjidhni një fjalëkalim për ta mbajtur llogarinë tuaj të parrezikuar. Password Fjalëkalim Repeat Password Ripërsëritni Fjalëkalimin Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Jepeni të njëjtin fjalëkalim dy herë, që të kontrollohet për gabime shkrimi. Një fjalëkalim i mirë do të përmbante një përzierje shkronjash, numrash dhe shenjash pikësimi, do të duhej të ishte të paktën tetë shenja i gjatë, dhe do të duhej të ndryshohej periodikisht. Validate passwords quality Vlerëso cilësi fjalëkalimi When this box is checked, password-strength checking is done and you will not be able to use a weak password. Kur i vihet shenjë kësaj kutize, bëhet kontroll fortësie fjalëkalimi dhe s’do të jeni në gjendje të përdorni një fjalëkalim të dobët. Log in automatically without asking for the password Kryej hyrje vetvetiu, pa kërkuar fjalëkalimin. Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Lejohen vetëm shkronja, numra, nënvijë dhe vijë ndarëse. minimumi dy shenja. Reuse user password as root password Ripërdor fjalëkalim përdoruesi si fjalëkalim përdoruesi rrënjë Use the same password for the administrator account. Përdor të njëjtin fjalëkalim për llogarinë e përgjegjësit. Choose a root password to keep your account safe. Që ta mbani llogarinë tuaj të parrezik, zgjidhni një fjalëkalim rrënje Root Password Fjalëkalim Rrënje Repeat Root Password Përsëritni Fjalëkalim Rrënje Enter the same password twice, so that it can be checked for typing errors. Jepeni të njëjtin fjalëkalim dy herë, që të mund të kontrollohet për gabime shkrimi. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Mirë se vini te instaluesi %1 <quote>%2</quote></h3> <p>Ky program do t’ju bëjë disa pyetje dhe do të ujdisë %1 në kompjuterin tuaj.</p> Support Asistencë Known issues Probleme të njohura Release notes Shënime hedhjeje në qarkullim Donate Dhuroni calamares-calamares-2d126ae/lang/calamares_sr.ts000066400000000000000000006021301430147706700217360ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 ИнÑталација није уÑпела 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Уклони тачке припајања за операције партиције на %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 Уклоњене Ñве тачке припајања за %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. СиÑтемÑки језик биће поÑтављен на %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. Packages Install option: <strong>%1</strong> None Summary Сажетак This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Ðаправи партицију Si&ze: Вели&чина MiB Partition &Type: &Тип партиције Primar&y E&xtended П&роширена Fi&le System: Фајл &ÑиÑтем: LVM LV name &Mount Point: Тачка &припајања: Flags: Label for the filesystem FS Label: En&crypt Logical Логичка Primary Примарна GPT GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. ИнÑталација није уÑпела да направи партицију на диÑку '%1'. 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 Con&tent: &Keep &Очувај Format Форматирај Warning: Formatting the partition will erase all existing data. Упозорење: Форматирање партиције ће обриÑати Ñве поÑтојеће податке. &Mount Point: &Тачка монтирања: Si&ze: &Величина: MiB Fi&le System: Фајл &ÑиÑтем: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Форма En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form Форма &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish Заврши FinishedViewStep Finish Заврши FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Скрипта KeyboardQmlViewStep Keyboard ТаÑтатура KeyboardViewStep Keyboard ТаÑтатура LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &Откажи &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Форма <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Лиценца LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Регион: Zone: Зона: &Change... &Измени... LocaleQmlViewStep Location Локација LocaleTests Quit LocaleViewStep Location Локација LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error Грешка поÑтаве No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Избор пакета Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Ðазив Description ÐžÐ¿Ð¸Ñ Page_Keyboard Form Форма Keyboard Model: Type here to test your keyboard куцајте овде да теÑтирате таÑтатуру Page_UserSetup Form Форма What is your name? Како Ñе зовете? Your Full Name What name do you want to use to log in? login What is the name of this computer? Како ћете звати ваш рачунар? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. Изаберите лозинку да обезбедите Ñвој налог. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name Ðазив File System Фајл ÑиÑтем File System Label Mount Point Size PartitionPage Form Форма Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Тренутно: After: ПоÑле: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Форма Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. Лоши параметри при позиву поÑла процеÑа. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) %1 (%2) unknown непознато extended проширена unformatted неформатирана swap Default подразумевано File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Форма Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: За најбоље резултате обезбедите да овај рачунар: System requirements СиÑтемÑки захтеви ScanningDialog Scanning storage devices... Partitioning ПартициониÑање SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Интерна грешка Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Ðије могуће променити мод (chmod) над "ÑудоерÑ" фајлом Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Откажи &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Форма Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. Демонтирање фајл-ÑиÑтема. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users КориÑници UsersViewStep Users КориÑници VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Форма Select application and system language Open donations website &Donate Open help and support website &Support По&дршка Open issues and bug-tracking website &Known issues &Познати проблеми Open release notes website &Release notes %1 support %1 подршка About %1 setup About %1 installer О %1 инÑталатеру WelcomeQmlViewStep Welcome Добродошли WelcomeViewStep Welcome Добродошли ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Грешка поÑтаве No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Уклањање грешака Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard куцајте овде да теÑтирате таÑтатуру Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Како Ñе зовете? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Како ћете звати ваш рачунар? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Изаберите лозинку да обезбедите Ñвој налог. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_sr@latin.ts000066400000000000000000005767131430147706700231070ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Skini taÄke montiranja za operacije nad particijama na %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 Sve taÄke montiranja na %1 skinute ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! 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. Packages Install option: <strong>%1</strong> None Summary IzveÅ¡taj This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Kreiraj particiju Si&ze: Veli&Äina MiB Partition &Type: &Tip particije Primar&y E&xtended P&roÅ¡irena Fi&le System: LVM LV name &Mount Point: TaÄka &montiranja: Flags: Label for the filesystem FS Label: En&crypt Logical LogiÄka Primary Primarna GPT GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. Instaler nije uspeo napraviti particiju na disku '%1'. 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: Con&tent: &Keep Format Formatiraj Warning: Formatting the partition will erase all existing data. Upozorenje: Formatiranje particije će obrisati sve podatke. &Mount Point: TaÄka za &montiranje: Si&ze: Veli&Äina MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish 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>. %1 (%2) partition label %1 (device path %2) 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 LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: 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 label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. 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 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: Poslije: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. 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 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) StandardButtons &OK &Yes &No &Cancel &Prekini &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users 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 Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome DobrodoÅ¡li WelcomeViewStep Welcome DobrodoÅ¡li ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Otklanjanje greÅ¡ki Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Model tastature: Layouts Type here to test your keyboard Test tastature Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? 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> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_sv.ts000066400000000000000000007075531430147706700217610ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1> <br/> <strong>%2<br/> för %3</strong> <br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. 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 är sponsrad av <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;<br/> 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 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 Successfully unmounted %1. FramgÃ¥ngsrikt avmonterade %1. Successfully disabled swap %1. FramgÃ¥ngsrikt inaktiverade swap %1. Successfully cleared swap %1. FramgÃ¥ngsrikt rensade swap %1. Successfully closed mapper device %1. FramgÃ¥ngsrikt stängde krypterad enhet %1. Successfully disabled volume group %1. FramgÃ¥ngsrikt inaktiverade volymgrupp %1. Clear mounts for partitioning operations on %1 Rensa monteringspunkter för partitionering pÃ¥ %1 Clearing mounts for partitioning operations on %1. Rensar monteringspunkter för partitionering pÃ¥ %1. Cleared all mounts for %1 Rensade alla monteringspunkter för %1 ClearTempMountsJob Clear all temporary mounts. Rensa alla tillfälliga monteringspunkter. Clearing all temporary mounts. Rensar alla 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 rootMonteringspunkt är inte definierat. The command needs to know the user's name, but no username is defined. Kommandot behöver veta användarnamnet, men inget användarnamn är definerat. 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. Packages Paket Install option: <strong>%1</strong> Installations alternativ: <strong>%1</strong> None Ingen Summary Översikt This is an overview of what will happen once you start the setup procedure. Detta är en översikt över vad som kommer hända när du startar installationsprocessen. This is an overview of what will happen once you start the install procedure. Detta är en överblick av vad som kommer att ske när du startar installationsprocessen. ContextualProcessJob Contextual Processes Job Kontextuellt processjobb CreatePartitionDialog Create a Partition Skapa en partition Si&ze: Storlek: MiB MiB Partition &Type: Partitions&typ: Primar&y Primä&r E&xtended Utökad Fi&le System: Fi&lsystem: LVM LV name LVM LV namn &Mount Point: &Monteringspunkt: Flags: Flaggor: Label for the filesystem Etikett för filsystem FS Label: FS Etikett: En&crypt Kr%yptera Logical Logisk Primary Primär GPT GPT Mountpoint already in use. Please select another one. Monteringspunkt används redan. Välj en annan. Mountpoint must start with a <tt>/</tt>. Monteringspunkt mÃ¥ste starta med ett <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Skapa ny %1MiB partition pÃ¥ %3 (%2) med poster %4. Create new %1MiB partition on %3 (%2). Skapa ny %1MiB partition pÃ¥ %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Skapa ny %2MiB partition pÃ¥ %4 (%3) med filsystem %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Skapa ny <strong>%1MiB</strong> partition pÃ¥ <strong>%3</strong> (%2) med poster <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Skapa ny <strong>%1MiB</strong> partition pÃ¥ <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Skapa ny <strong>%2MiB</strong>partition pÃ¥ <strong>%4</strong> (%3) med filsystem <strong>%1</strong>. Creating new %1 partition on %2. Skapar ny %1 partition pÃ¥ %2. The installer failed to create partition on disk '%1'. Installationsprogrammet kunde inte skapa partition pÃ¥ disk '%1'. 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 Con&tent: Inne&hÃ¥ll: &Keep BehÃ¥ll Format Format Warning: Formatting the partition will erase all existing data. Varning: Formatering av partitionen kommer att radera alla data. &Mount Point: &Monteringspunkt Si&ze: Storlek: MiB MiB Fi&le System: Fi&lsystem: Flags: Flaggor: Label for the filesystem Etikett för filsystem FS Label: FS Etikett: Passphrase for existing partition Lösenfras för existerande partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. Partition %1 kunde inte dekrypteras med den angivna lösenfrasen. <br/><br/>Redigera partitionen igen och ange den korrekta lösenfrasen eller ta bort och skapa en ny krypterad partition EncryptWidget Form Form En&crypt system Kryptera system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Ditt system verkar inte stödja kryptering tillräckligt bra för att kryptera hela systemet. Du kan aktivera kryptering, men prestandan kan bli lidande. Passphrase Lösenord Confirm passphrase Bekräfta lösenord Please enter the same passphrase in both boxes. Vänligen skriv samma lösenord i bÃ¥da fälten. ErrorDialog Details: Detaljer: Would you like to paste the install log to the web? Vill du ladda upp installationsloggen pÃ¥ webben? FillGlobalStorageJob Set partition information Ange partitionsinformation Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Installera %1 pÃ¥ <strong>ny</strong> %2 system partition med funktioner <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Installera %1 pÃ¥ <strong>ny</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Konfigurerar krypterad swap. No target system available. Inget mÃ¥lsystem tillgängligt. No rootMountPoint is set. Ingen rootMonteringspunkt är satt No configFilePath is set. Ingen konfigurations filsökväg är satt. LicensePage Form Formulär <h1>License Agreement</h1> <h1>Licensavtal</h1> I accept the terms and conditions above. Jag accepterar villkoren och avtalet ovan. Please review the End User License Agreements (EULAs). Vänligen läs igenom licensavtalen för slutanvändare (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Denna installationsprocess kommer installera proprietär mjukvara för vilken särskilda licensvillkor gäller. If you do not agree with the terms, the setup procedure cannot continue. Om du inte accepterar villkoren kan inte installationsproceduren fortsätta. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Denna installationsprocess kan installera proprietär mjukvara för vilken särskilda licensvillkor gäller, för att kunna erbjuda ytterligare funktionalitet och förbättra användarupplevelsen. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Om du inte godkänner villkoren kommer inte proprietär mjukvara att installeras, och alternativ med öppen källkod kommer användas istället. LicenseViewStep License Licens 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 label for netinstall module, Linux kernel Kärna Services label for netinstall module, system services Tjänster Login label for netinstall module, choose login manager Inloggning Desktop label for netinstall module, choose desktop environment Skrivbord Communication label for netinstall module Kommunikation Development label for netinstall module Utveckling Office label for netinstall module Kontorsprogram Multimedia label for netinstall module Multimedia Internet label for netinstall module Internet Theming label for netinstall module Teman Gaming label for netinstall module Gaming Utilities label for netinstall module Verktyg Applications Program 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. 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 Unsafe partition actions are enabled. Osäkra partitionsÃ¥tgärder är aktiverade. Partitioning is configured to <b>always</b> fail. Partitionering är konfigurerad till att <b>alltid</b> misslyckas. No partitions will be changed. Inga partitioner kommer att ändras. Current: Nuvarande: After: Efter: No EFI system partition configured Ingen EFI system partition konfigurerad EFI system partition configured incorrectly EFI-systempartitionen felaktigt 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 suitable filesystem. En EFI-systempartition krävs för att starta %1 <br/><br/>För att konfigurera en EFI-systempartition, gÃ¥ tillbaka och välj eller skapa ett lämpligt filsystem. The filesystem must be mounted on <strong>%1</strong>. Filsystemet mÃ¥ste vara monterat pÃ¥ <strong>%1</strong>. The filesystem must have type FAT32. Filsystemet mÃ¥ste vara av typ FAT32. The filesystem must be at least %1 MiB in size. Filsystemet mÃ¥ste vara minst %1 MiB i storlek. The filesystem must have flag <strong>%1</strong> set. Filsystemet mÃ¥ste ha flagga <strong>%1</strong> satt. You can continue without setting up an EFI system partition but your system may fail to start. Du kan fortsätta utan att ställa in en EFI-systempartition men ditt system kanske inte startar. Option to use GPT on BIOS Alternativ för att använda GPT pÃ¥ BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. En GPT-partitionstabell är det bästa alternativet för alla system. Det här installationsprogrammet stöder ocksÃ¥ en sÃ¥dan installation för BIOS-system. <br/><br/>för att konfigurera en GPT-partitionstabell i BIOS, (om du inte redan har gjort det) gÃ¥ tillbaka och ställ in partitionstabellen till GPT, skapa sedan en 8 MB oformaterad partition med <strong>%2</strong> flaggan aktiverad.<br/><br/>En oformaterad 8 MB partition krävs för att starta %1 pÃ¥ ett BIOS-system med GPT. Boot partition not encrypted Boot partition inte krypterad A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. En separat uppstartspartition skapades tillsammans med den krypterade rootpartitionen, men uppstartspartitionen är inte krypterad.<br/><br/>Det finns säkerhetsproblem med den här inställningen, eftersom viktiga systemfiler sparas pÃ¥ en okrypterad partition.<br/>Du kan fortsätta om du vill, men upplÃ¥sning av filsystemet kommer hända senare under uppstart av systemet.<br/>För att kryptera uppstartspartitionen, gÃ¥ tillbaka och Ã¥terskapa den, och välj <strong>Kryptera</strong> i fönstret när du skapar partitionen. has at least one disk device available. har Ã¥tminstone en diskenhet tillgänglig. There are no partitions to install on. Det finns inga partitioner att installera pÃ¥. 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 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 StandardButtons &OK &Okej &Yes &Ja &No &Nej &Cancel &Avsluta &Close &Stäng TrackingInstallJob Installation feedback InstallationsÃ¥terkoppling Sending installation feedback. Skickar installationsÃ¥terkoppling Internal error in install-tracking. Internt fel i install-tracking. HTTP request timed out. HTTP-begäran tog för lÃ¥ng tid. 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 UmountJob Unmount file systems. Avmontera filsystem. No target system available. Inget mÃ¥lsystem tillgängligt. No rootMountPoint is set. Ingen rootMonteringspunkt är satt UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Om mer än en person skall använda datorn sÃ¥ kan du skapa flera användarkonton när inställningarna är klara.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Om mer än en person skall använda datorn sÃ¥ kan du skapa flera användarkonton när installationen är klar.</small> UsersQmlViewStep 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 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 %1 support %1-support About %1 setup Om inställningarna för %1 About %1 installer Om %1-installationsprogrammet WelcomeQmlViewStep Welcome Välkommen WelcomeViewStep Welcome Välkommen ZfsJob Create ZFS pools and datasets Skapa ZFS pools och datasets Failed to create zpool on Misslyckades att skapa zpool pÃ¥ Configuration Error Konfigurationsfel No partitions are available for ZFS. Inga partitioner är tillgängliga för ZFS. Internal data missing Intern data saknas Failed to create zpool Misslyckades med att skapa zpool Failed to create dataset Misslyckades med att skapa dataset The output was: Utdatan var: calamares-sidebar About Om Debug Avlusning Show information about Calamares Visa information om Calamares Show debug information Visa avlusningsinformation finishedq Installation Completed Installationen är klar %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 har installerats pÃ¥ din dator. <br/> Du kan nu starta om i ditt nya system eller fortsätta använda Live-miljön. Close Installer Stäng installationsprogrammet Restart System Starta om System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>En fullständig logg över installationen är tillgänglig som installation.log i hemkatalogen av Live användaren.<br/> Denna logg är kopierad till /var/log/installation.log pÃ¥ mÃ¥lsystemet.</p> finishedq@mobile Installation Completed Installationen är klar %1 has been installed on your computer.<br/> You may now restart your device. %1 har nu installerats pÃ¥ din dator.<br/> Du kan nu starta om din enhet. Close Stäng Restart Starta om i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>SprÃ¥k</h1> </br> SystemsprÃ¥ket pÃ¥verkar vilket sprÃ¥k och teckenuppsättning somliga kommandoradsprogram använder. Den nuvarande inställningen är <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Nationella inställningar</h1> </br> Systems nationella inställningar pÃ¥verkar nummer och datumformat. Den nuvarande inställningen är <strong>%3</strong>. Back BakÃ¥t keyboardq To activate keyboard preview, select a layout. Välj en layout för att aktivera förhandsgranskning av tangentbord. Keyboard Model: Tangentbordsmodell: Layouts Layouter Type here to test your keyboard Skriv här för att testa ditt tangentbord Variants Varianter localeq Change Ändra notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Detta är exempel versionsinformation. packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice är ett kraftfull och gratis Office paket, som används av miljontals människor runt om i världen. Det innehÃ¥ller flera program som gör det till de mest mÃ¥ngsidiga Office paketet som är gratis och öppen källkod pÃ¥ marknaden.<br/> Standard alternativ. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Om du inte vill installera ett office paket, bara välj Inget Office paket. Du kan alltid lägga till ett (eller mer) senare pÃ¥ ditt installerade system om behovet uppstÃ¥r. No Office Suite Inget Office paket Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Skapa en minimal skrivbordsinstallation, ta bort alla extra program och välj senare pÃ¥ vad du vill lägga till i ditt system. Exempel pÃ¥ vad som inte kommer att finnas pÃ¥ en sÃ¥dan installation, det kommer inte att finnas nÃ¥got Office paket, inga mediaspelare, ingen bildvisare eller utskriftsstöd. Det kommer bara att finnas en skrivbordsmiljö, filbläddrare, pakethanterare, textredigerare och enkel webbläsare. Minimal Install Minimal installation Please select an option for your install, or use the default: LibreOffice included. Välj ett alternativ för din installation, eller använd standard: LibreOffice ingÃ¥r. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Detta är en exempelfil för QML, som visar inställningar för RichText och innehÃ¥ll som är Flickable.</p> <p>QML med RichText kan använda HTML-taggar. InnehÃ¥ll som är Flickable är användbart pÃ¥ pekskärmar.</p> <p><b>Detta är fet text</b></p> <p><i>Detta är kursiv text</i></p> <p>Detta är understruken text</p> <p><center>Denna text är centrerad.</center></p> <p><s>Detta är överstruket</s></p> <p>Kodexample: <code>ls -l /home</code></p> <p><b>Listor:</b></p> <ul> <li>System med Intel-processor</li> <li>System med AMD-processor</li> </ul> <p>Den vertikala rullningslisten är justerbar, nuvarande bredd är satt till 10.</p> Back BakÃ¥t usersq Pick your user name and credentials to login and perform admin tasks Välj ditt användarnamn och inloggningsuppgifter för att logga in och utföra admin-uppgifter What is your name? Vad heter du? Your Full Name Ditt Fullständiga namn What name do you want to use to log in? Vilket namn vill du använda för att logga in? Login Name Inloggningsnamn If more than one person will use this computer, you can create multiple accounts after installation. Om mer än en person skall använda datorn sÃ¥ kan du skapa flera användarkonton efter installationen. Only lowercase letters, numbers, underscore and hyphen are allowed. Endast smÃ¥ bokstäver, nummer, understreck och bindestreck är tillÃ¥tet. root is not allowed as username. root är inte tillÃ¥tet som användarnamn. What is the name of this computer? Vad är namnet pÃ¥ datorn? Computer Name Datornamn This name will be used if you make the computer visible to others on a network. Detta namn kommer användas om du gör datorn synlig för andra i ett nätverk. localhost is not allowed as hostname. localhost är inte tillÃ¥tet som värdnamn. Choose a password to keep your account safe. Välj ett lösenord för att hÃ¥lla ditt konto säkert. Password Lösenord Repeat Password Repetera Lösenord Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Ange samma lösenord tvÃ¥ gÃ¥nger, sÃ¥ att det kan kontrolleras för stavfel. Ett bra lösenord innehÃ¥ller en blandning av bokstäver, nummer och interpunktion, bör vara minst Ã¥tta tecken lÃ¥ngt, och bör ändras regelbundet. Validate passwords quality Validera lösenords kvalite When this box is checked, password-strength checking is done and you will not be able to use a weak password. När den här rutan är förkryssad kommer kontroll av lösenordsstyrka att genomföras, och du kommer inte kunna använda ett svagt lösenord. Log in automatically without asking for the password Logga in automatiskt utan att frÃ¥ga efter ett lösenord. Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Endast bokstäver, nummer, understreck och bindestreck är tillÃ¥tet, minst tvÃ¥ tecken. Reuse user password as root password Ã…teranvänd användarlösenord som root lösenord Use the same password for the administrator account. Använd samma lösenord för administratörskontot. Choose a root password to keep your account safe. Välj ett root lösenord för att hÃ¥lla ditt konto säkert. Root Password Root Lösenord Repeat Root Password Repetera Root Lösenord Enter the same password twice, so that it can be checked for typing errors. Ange samma lösenord tvÃ¥ gÃ¥nger, sÃ¥ att det kan kontrolleras för stavfel. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Välkommen till %2 installationsprogram för <quote>%1</quote></h3> <p>Detta program kommer ställa nÃ¥gra frÃ¥gor och installera %1 pÃ¥ din dator.</p> Support Support Known issues Kända problem Release notes Versionsinformation Donate Donera calamares-calamares-2d126ae/lang/calamares_ta_IN.ts000066400000000000000000005716661430147706700223270ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition இயகà¯à®•ப௠பகà¯à®¤à®¿à®ªà¯à®ªà®¿à®°à®¿à®ªà¯à®ªà¯ System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Error &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next &Back &Done &Cancel Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_te.ts000066400000000000000000006022121430147706700217230ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. à°ˆ సిసà±à°Ÿà°®à± యొకà±à°• బూటౠఎనà±à°µà°¿à°°à°¾à°¨à±à°®à±†à°‚à°Ÿà±. పాత x86 సిసà±à°Ÿà°®à± BIOS à°•à°¿ మాతà±à°°à°®à±‡ మదà±à°¦à°¤à± ఇసà±à°¤à±à°‚ది. ఆధà±à°¨à°¿à°• à°µà±à°¯à°µà°¸à±à°¥à°²à± సాధారణంగా EFI ని ఉపయోగిసà±à°¤à°¾à°¯à°¿, కాని compatibility మోడà±â€Œà°²à±‹ à°ªà±à°°à°¾à°°à°‚à°­à°¿à°¸à±à°¤à±‡ BIOS à°—à°¾ కూడా కనిపిసà±à°¤à°¾à°¯à°¿. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. à°ˆ సిసà±à°Ÿà°®à± EFI బూటౠఎనà±à°µà°¿à°°à°¾à°¨à±à°®à±†à°‚à°Ÿà±â€Œà°¤à±‹ à°ªà±à°°à°¾à°°à°‚భించబడింది. EFI à°Žà°¨à±à°µà°¿à°°à°¾à°¨à±à°®à±†à°‚à°Ÿà± à°¨à±à°‚à°¡à°¿ à°¸à±à°Ÿà°¾à°°à±à°Ÿà°ªà±â€Œà°¨à± కానà±à°«à°¿à°—రౠచేయడానికి, à°ˆ ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à°°à± తపà±à°ªà°¨à°¿à°¸à°°à°¿à°—à°¾ EFI సిసà±à°Ÿà°®à± విభజనలో GRUB లేదా systemd-boot వంటి బూటౠలోడరౠఅపà±à°²à°¿à°•ేషనà±â€Œà°¨à± అమరà±à°šà°¾à°²à°¿. ఇది automatic ఉంటà±à°‚ది, మీరౠమానà±à°¯à±à°µà°²à± విభజననౠఎంచà±à°•à±à°‚టే తపà±à°ª, à°ˆ సందరà±à°­à°‚లో మీరౠదీనà±à°¨à°¿ à°Žà°‚à°šà±à°•ోవాలి లేదా మీ à°¸à±à°µà°‚తంగా సృషà±à°Ÿà°¿à°‚చాలి. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. à°ˆ సిసà±à°Ÿà°®à± BIOS బూటౠenvironment తో à°ªà±à°°à°¾à°°à°‚భించబడింది. BIOS environment à°¨à±à°‚à°¡à°¿ à°ªà±à°°à°¾à°°à°‚భానà±à°¨à°¿ కానà±à°«à°¿à°—రౠచేయడానికి, à°ˆ ఇనà±à°¸à±à°Ÿà°¾à°²à°°à± GRUB వంటి బూటౠలోడరà±â€Œà°¨à± à°’à°• విభజన à°ªà±à°°à°¾à°°à°‚భంలో లేదా విభజన పటà±à°Ÿà°¿à°• à°ªà±à°°à°¾à°°à°‚భంలో మాసà±à°Ÿà°°à± బూటౠరికారà±à°¡à±â€Œà°²à±‹ ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à± చేయాలి ( à°ªà±à°°à°¾à°§à°¾à°¨à±à°¯à°¤ ఇవà±à°µà°¬à°¡à°¿à°‚ది). ఇది à°¸à±à°µà°¯à°‚చాలకంగా ఉంటà±à°‚ది, మీరౠమానà±à°¯à±à°µà°²à± విభజననౠఎంచà±à°•à±à°‚టే తపà±à°ª, à°ˆ సందరà±à°­à°‚లో మీరౠదీనà±à°¨à°¿ మీ à°¸à±à°µà°‚తంగా సెటపౠచేయాలి BootLoaderModel Master Boot Record of %1 %1 యొకà±à°• మాసà±à°Ÿà°°à± బూటౠరికారà±à°¡à± Boot Partition బూటౠపారà±à°Ÿà°¿à°·à°¨à± System Partition సిసà±à°Ÿà°®à± పారà±à°Ÿà°¿à°·à°¨à± Do not install a boot loader బూటౠలోడరà±â€Œà°¨à± ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à± చేయవదà±à°¦à± %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page ఖాళీ పేజీ Calamares::DebugWindow Form GlobalStorage à°—à±à°²à±‹à°¬à°²à± à°¸à±à°Ÿà±‹à°°à±‡à°œà±   JobQueue జాబౠకà±à°¯à±‚ Modules మోడà±à°¯à±‚à°²à±à°¸à± Type: టైపà±: none Interface: ఇంటరà±à°«à±‡à°¸à± Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet రీలోడౠసà±à°Ÿà±ˆà°²à±à°·à±€à°Ÿà± Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree విడà±à°œà±†à°Ÿà± à°Ÿà±à°°à±€ Debug information డీబగౠసమాచారం Calamares::ExecutionViewStep Set up సెటౠఅపౠInstall ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à± Calamares::FailJob Job failed (%1) జాబౠవిఫలమైంది (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done à°®à±à°—à°¿à°‚à°šà± Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Error లోపం &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next &Back &Done &Cancel Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format à°¤à±à°¡à°¿à°šà°¿à°µà±‡à°¯à± Warning: Formatting the partition will erase all existing data. హెచà±à°šà°°à°¿à°• : à°¤à±à°¡à°¿à°šà°¿à°µà±‡à°¯à°Ÿà°‚ వలన à°ˆ విభజనలోని సమాచారం మొతà±à°¤à°‚ పోతà±à°‚ది &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information విభజన సమాచారం à°à°°à±à°ªà°¾à°Ÿà± Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? మీ పేరౠà°à°®à°¿à°Ÿà°¿ ? Your Full Name What name do you want to use to log in? à°ªà±à°°à°µà±‡à°¶à°¿à°‚చడానికి à°ˆ పేరà±à°¨à°¿ ఉపయోగిసà±à°¤à°¾à°°à± login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. మీ ఖాతా నౠభదà±à°°à°ªà°°à±à°šà±à°•ోవడానికి à°’à°• మంతà±à°°à°®à±à°¨à± à°Žà°‚à°šà±à°•ోండి <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> అదే మంతà±à°°à°¿à°¨à°¿ మళà±à°³à±€ ఇకà±à°•à°¡ ఇవà±à°µà°‚à°¡à°¿, దానివలన మీరౠపైన ఇచà±à°šà°¿à°¨ దాంటà±à°²à±‹ à°à°®à°¿ అయినా దోషమà±à°²à± ఉంటే సరిదిదà±à°¦à±à°•ోవచà±à°šà±. à°’à°• మంచి మంతà±à°°à°‚లో, à°’à°• à°…à°•à±à°·à°°à°®à±, à°’à°• సంఖà±à°¯à°¾, à°’à°• విరామచిహà±à°¨à°‚, ఉండాలి. అది కనీసం ఎనిమిది à°…à°•à±à°·à°°à°¾à°²à°¾ పొడవౠఉండాలి. దీనిని కొనà±à°¨à°¿ వారాలౠకానీ నెలలకౠకానీ మారà±à°šà°¾à°²à°¿. Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? మీ పేరౠà°à°®à°¿à°Ÿà°¿ ? Your Full Name What name do you want to use to log in? à°ªà±à°°à°µà±‡à°¶à°¿à°‚చడానికి à°ˆ పేరà±à°¨à°¿ ఉపయోగిసà±à°¤à°¾à°°à± Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. మీ ఖాతా నౠభదà±à°°à°ªà°°à±à°šà±à°•ోవడానికి à°’à°• మంతà±à°°à°®à±à°¨à± à°Žà°‚à°šà±à°•ోండి Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_tg.ts000066400000000000000000007611761430147706700217440ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings Идора кардани танзимоти ваÑлкунии худкор BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Муҳити роҳандозӣ</strong> барои низоми ҷорӣ.<br><br>Ðизомҳои x86-и куҳна танҳо <strong>BIOS</strong>-ро даÑтгирӣ менамоÑнд.<br>Ðизомҳои муоÑир одатан <strong>EFI</strong>-ро иÑтифода мебаранд, аммо инчунин метавонанд ҳамчун BIOS намоиш дода шаванд, агар дар реҷаи мувофиқÑозӣ оғоз шаванд. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Ðизоми ҷорӣ бо муҳити роҳандозии <strong>EFI</strong> оғоз ёфт.<br><br>Барои танзими оғози кор аз муҳити EFI наÑбкунандаи ҷорӣ боÑд барномаи боркунандаи роҳандозиро монанди <strong>GRUB</strong> Ñ‘ <strong>systemd-boot</strong> дар <strong>ҚиÑми диÑки низомии EFI</strong> ба кор дарорад. Ин амал боÑд ба таври худкор иҷро шавад, агар шумо барои қиÑмбандии диÑк тарзи даÑтиро интихоб накунед. Дар ин маврид шумо боÑд онро муÑтақилона интихоб Ñ‘ Ñҷод кунед. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Ðизоми ҷорӣ бо муҳити роҳандозии <strong>BIOS</strong> оғоз ёфт.<br><br>Барои танзими оғози кор аз муҳити BIOS наÑбкунандаи ҷорӣ боÑд боркунандаи роҳандозиро монанди <strong>GRUB</strong> дар аввали қиÑми диÑк Ñ‘ дар <strong>Сабти роҳандозии аÑоÑÓ£</strong> назди аввали ҷадвали қиÑми диÑк (тарзи пазируфта) наÑб намоÑд. Ин амал боÑд ба таври худкор иҷро шавад, агар шумо барои қиÑмбандии диÑк тарзи даÑтиро интихоб накунед. Дар ин маврид шумо боÑд онро муÑтақилона интихоб Ñ‘ Ñҷод кунед. BootLoaderModel Master Boot Record of %1 Сабти роҳандозии аÑоÑÓ£ барои %1 Boot Partition ҚиÑми диÑки роҳандозӣ System Partition ҚиÑми диÑки низомӣ Do not install a boot loader Боркунандаи роҳандозӣ наÑб карда нашавад %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Саҳифаи холӣ Calamares::DebugWindow Form Шакл GlobalStorage Захирагоҳи умумӣ JobQueue Ðавбати вазифа Modules Модулҳо Type: Ðавъ: none ҳеҷ чиз Interface: ИнтерфейÑ: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Ðз нав бор кардани варақаи уÑлубҳо Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Дарахти виҷетҳо Debug information Иттилооти иÑлоҳи нуқÑонҳо Calamares::ExecutionViewStep Set up Танзимкунӣ Install ÐаÑбкунӣ Calamares::FailJob Job failed (%1) Вазифа иҷро нашуд (%1) Programmed job failure was explicitly requested. Қатъшавии вазифаи барномавӣ ботафÑил дархоÑÑ‚ карда шуд. Calamares::JobThread Done Ðнҷоми кор Calamares::NamedJob Example job (%1) Вазифаи намунавӣ (%1) Calamares::ProcessJob Run command '%1' in target system. Иҷро кардани фармони '%1' дар низоми интихобшуда. Run command '%1'. Иҷро кардани фармони '%1'. Running command %1 %2 Иҷрокунии фармони %1 %2 Calamares::PythonJob Running %1 operation. Иҷрокунии амалиёти %1. Bad working directory path МаÑири феҳриÑти корӣ нодуруÑÑ‚ аÑÑ‚ Working directory %1 for python job %2 is not readable. ФеҳриÑти кории %1 барои вазифаи "python"-и %2 хонда намешавад. Bad main script file Файли нақши аÑоÑÓ£ нодуруÑÑ‚ аÑÑ‚ Main script file %1 for python job %2 is not readable. Файли нақши аÑоÑии %1 барои вазифаи "python"-и %2 хонда намешавад. Boost.Python error in job "%1". Хатои "Boost.Python" дар вазифаи "%1". Calamares::QmlViewStep Loading ... Бор шуда иÑтодааÑÑ‚... QML Step <i>%1</i>. Қадами QML <i>%1</i>. Loading failed. Боршавӣ қатъ шуд. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Санҷиши талабот барои модули <i>%1</i> ба анҷом раÑид. Waiting for %n module(s). Дар ҳоли интизори %n модул. Дар ҳоли интизори %n модул. (%n second(s)) (%n ÑониÑ) (%n ÑониÑ) System-requirements checking is complete. Санҷиши талаботи низомӣ ба анҷом раÑид. Calamares::ViewManager Setup Failed Танзимкунӣ қатъ шуд Installation Failed ÐаÑбкунӣ қатъ шуд Error Хато &Yes &Ҳа &No &Ðе &Close &Пӯшидан Install Log Paste URL Гузоштани нишонии URL-и Ñабти рӯйдодҳои наÑб The upload was unsuccessful. No web-paste was done. Боркунӣ иҷро нашуд. Гузариш ба шабака иҷро нашуд. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed Омодашавии Calamares қатъ шуд %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 наÑб карда намешавад. Calamares ҳамаи модулҳои танзимкардашударо бор карда натавониÑÑ‚. Ин мушкилие мебошад, ки бо ҳамин роҳ Calamares дар диÑтрибутиви ҷорӣ кор мекунад. <br/>The following modules could not be loaded: <br/>Модулҳои зерин бор карда намешаванд: Continue with setup? Танзимкуниро идома медиҳед? Continue with installation? ÐаÑбкуниро идома медиҳед? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Барномаи танзимкунии %1 барои танзим кардани %2 ба диÑки компютери шумо тағйиротро ворид мекунад.<br/><strong>Шумо ин тағйиротро ботил карда наметавонед.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> ÐаÑбкунандаи %1 барои наÑб кардани %2 ба диÑки компютери шумо тағйиротро ворид мекунад.<br/><strong>Шумо ин тағйиротро ботил карда наметавонед.</strong> &Set up now &Ҳозир танзим карда шавад &Install now &Ҳозир наÑб карда шавад Go &back &Бозгашт &Set up &Танзим кардан &Install &ÐаÑб кардан Setup is complete. Close the setup program. Танзим ба анҷом раÑид. Барномаи танзимкуниро пӯшед. The installation is complete. Close the installer. ÐаÑб ба анҷом раÑид. Барномаи наÑбкуниро пӯшед. Cancel setup without changing the system. Бекор кардани танзимкунӣ бе тағйирдиҳии низом. Cancel installation without changing the system. Бекор кардани наÑбкунӣ бе тағйирдиҳии низом. &Next &Ðавбатӣ &Back &Ба қафо &Done &Ðнҷоми кор &Cancel &Бекор кардан Cancel setup? Танзимкуниро бекор мекунед? Cancel installation? ÐаÑбкуниро бекор мекунед? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Шумо дар ҳақиқат мехоҳед, ки раванди танзимкунии ҷориро бекор намоед? Барномаи танзимкунӣ хомӯш карда мешавад ва ҳамаи тағйирот гум карда мешаванд. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Шумо дар ҳақиқат мехоҳед, ки раванди наÑбкунии ҷориро бекор намоед? ÐаÑбкунанда хомӯш карда мешавад ва ҳамаи тағйирот гум карда мешаванд. CalamaresPython::Helper Unknown exception type Ðавъи иÑтиÑноии номаълум unparseable Python error Хатои таҳлилнашавандаи Python unparseable Python traceback Барориши таҳлилнашавандаи Python Unfetchable Python error. Хатои кашиданашавандаи Python. CalamaresWindow %1 Setup Program Барномаи танзимкунии %1 %1 Installer ÐаÑбкунандаи %1 ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... Ҷамъкунии иттилооти низомӣ... ChoicePage Form Шакл Select storage de&vice: Интихоби даÑтгоҳи &захирагоҳ: Current: Танзимоти ҷорӣ: After: Баъд аз тағйир: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>ҚиÑмбандии диÑк ба таври даÑтӣ</strong><br/>Шумо худатон метавонед қиÑмҳои диÑкро Ñҷод кунед Ñ‘ андозаи онҳоро иваз намоед. Reuse %1 as home partition for %2. Дубора иÑтифода бурдани %1 ҳамчун диÑки аÑоÑÓ£ барои %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>ҚиÑми диÑкеро, ки мехоҳед хурдтар кунед, интихоб намоед, Ð¿Ð°Ñ Ð»Ð°Ð²Ò³Ð°Ð¸ поёнро барои ивази андоза кашед</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 то андозаи %2MiB хурдтар мешавад ва қиÑми диÑки нав бо андозаи %3MiB барои %4 Ñҷод карда мешавад. Boot loader location: Ҷойгиршавии боркунандаи роҳандозӣ: <strong>Select a partition to install on</strong> <strong>ҚиÑми диÑкеро барои наÑб интихоб намоед</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. ҚиÑми диÑки низомии EFI дар дохили низоми ҷорӣ ёфт нашуд. Лутфан, ба қафо гузаред ва барои танзим кардани %1 аз имкони қиÑмбандии диÑк ба таври даÑтӣ иÑтифода баред. The EFI system partition at %1 will be used for starting %2. ҚиÑми диÑки низомии EFI дар %1 барои оғоз кардани %2 иÑтифода бурда мешавад. EFI system partition: ҚиÑми диÑки низомии: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Чунин менамоÑд, ки ин захирагоҳ низоми амалкунандаро дар бар намегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба даÑтгоҳи захирагоҳ интихоби худро аз назар гузаронед ва таÑдиқ кунед. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Пок кардани диÑк</strong><br/>Ин амал ҳамаи иттилооти ҷориро дар даÑтгоҳи захирагоҳи интихобшуда <font color="red">неÑÑ‚ мекунад</font>. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ÐаÑбкунии паҳлуӣ</strong><br/>ÐаÑбкунанда барои %1 фазоро омода карда, қиÑми диÑкеро хурдтар мекунад. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ивазкунии қиÑми диÑк</strong><br/>ҚиÑми диÑекро бо %1 иваз мекунад. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ин захирагоҳ %1-ро дар бар мегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба даÑтгоҳи захирагоҳ интихоби худро аз назар гузаронед ва таÑдиқ кунед. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ин захирагоҳ аллакай низоми амалкунандаро дар бар мегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба даÑтгоҳи захирагоҳ интихоби худро аз назар гузаронед ва таÑдиқ кунед. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ин захирагоҳ Ñкчанд низоми амалкунандаро дар бар мегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба даÑтгоҳи захирагоҳ интихоби худро аз назар гузаронед ва таÑдиқ кунед. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> Ин даÑтгоҳи захирагоҳ аллакай дорои низоми амалкунанда мебошад, аммо ҷадвали қиÑми диÑки <strong>%1</strong> аз диÑки лозимии <strong>%2</strong> фарқ мекунад.<br/> This storage device has one of its partitions <strong>mounted</strong>. Яке аз қиÑмҳои диÑки ин даÑтгоҳи захирагоҳ <strong>ваÑлшуда</strong> мебошад. This storage device is a part of an <strong>inactive RAID</strong> device. Ин даÑтгоҳи захирагоҳ қиÑми даÑгоҳи <strong>RAID-и ғайрифаъол</strong> мебошад. No Swap Бе мубодила Reuse Swap ИÑтифодаи муҷаддади мубодила Swap (no Hibernate) Мубодила (бе реҷаи Ðигаҳдорӣ) Swap (with Hibernate) Мубодила (бо реҷаи Ðигаҳдорӣ) Swap to file Мубодила ба файл ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Пок кардани ваÑлҳо барои амалиётҳои қиÑмбандӣ дар %1 Clearing mounts for partitioning operations on %1. ПокÑозии ваÑлҳо барои амалиётҳои қиÑмбандӣ дар %1 Cleared all mounts for %1 Ҳамаи ваÑлҳо барои %1 пок карда шуданд. ClearTempMountsJob Clear all temporary mounts. Пок кардани ҳамаи ваÑлҳои муваққатӣ. Clearing all temporary mounts. ПокÑозии ҳамаи ваÑлҳои муваққатӣ. Cleared all temporary mounts. Ҳамаи ваÑлҳои муваққатӣ пок карда шуданд. CommandList Could not run command. Фармон иҷро карда нашуд. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Фармон дар муҳити мизбон иҷро мешавад ва боÑд маÑири реша (root)-ро донад, аммо маÑири rootMountPoint муайÑн нашудааÑÑ‚. The command needs to know the user's name, but no username is defined. Фармон боÑд номи корбари шуморо донад, аммо номи корбар муайÑн нашудааÑÑ‚. Config Set keyboard model to %1.<br/> Ðамунаи клавиатура ба %1 танзим карда мешавад.<br/> Set keyboard layout to %1/%2. Тарҳбандии клавиатура ба %1 %1/%2 танзим карда мешавад. Set timezone to %1/%2. Минтақаи вақт ба %1/%2 танзим карда мешавад. The system language will be set to %1. Забони низом ба %1 танзим карда мешавад. The numbers and dates locale will be set to %1. Ðизоми рақамҳо ва Ñанаҳо ба %1 танзим карда мешавад. Network Installation. (Disabled: Incorrect configuration) ÐаÑбкунии шабака. (Ғайрифаъол: Танзимоти нодуруÑÑ‚) Network Installation. (Disabled: Received invalid groups data) ÐаÑбкунии шабака. (Ғайрифаъол: Иттилооти гурӯҳии нодуруÑÑ‚ қабул шуд) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Интихоби баÑтаҳо Network Installation. (Disabled: Unable to fetch package lists, check your network connection) ÐаÑбкунии шабака. (Ғайрифаъол: Рӯйхати қуттиҳо гирифта намешавад. ПайваÑти шабакаро тафтиш кунед) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Ин компютер ба талаботи камтарин барои танзимкунии %1 ҷавобгӯ намебошад.<br/>Танзимот идома дода намешавад. <a href="#details">ТафÑилот...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Ин компютер ба талаботи камтарин барои наÑбкунии %1 ҷавобгӯ намебошад.<br/>ÐаÑбкунӣ идома дода намешавад. <a href="#details">ТафÑилот...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Ин компютер ба баъзеи талаботи тавÑиÑшуда барои танзимкунии %1 ҷавобгӯ намебошад.<br/>Танзимот идома дода мешавад, аммо баъзеи хуÑуÑиÑтҳо ғайрифаъол карда мешаванд. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Ин компютер ба баъзеи талаботи тавÑиÑшуда барои наÑбкунии %1 ҷавобгӯ намебошад.<br/>ÐаÑбкунӣ идома дода мешавад, аммо баъзеи хуÑуÑиÑтҳо ғайрифаъол карда мешаванд. This program will ask you some questions and set up %2 on your computer. Ин барнома аз Шумо Ñкчанд Ñавол мепурÑад ва %2-ро дар компютери шумо танзим мекунад. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Хуш омадед ба барномаи танзимкунии Calamares барои %1</h1> <h1>Welcome to %1 setup</h1> <h1>Хуш омадед ба танзимкунии %1</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Хуш омадед ба наÑбкунандаи Calamares барои %1</h1> <h1>Welcome to the %1 installer</h1> <h1>Хуш омадед ба наÑбкунандаи %1</h1> Your username is too long. Ðоми корбари шумо хеле дароз аÑÑ‚. '%1' is not allowed as username. '%1' ҳамчун номи корбар иÑтифода намешавад. Your username must start with a lowercase letter or underscore. Ðоми корбари шумо боÑд бо ҳарфи хурд Ñ‘ зерхат Ñар шавад. Only lowercase letters, numbers, underscore and hyphen are allowed. Шумо метавонед танҳо ҳарфҳои хурд, рақамҳо, зерхат ва нимтиреро иÑтифода баред. Your hostname is too short. Ðоми мизбони шумо хеле кӯтоҳ аÑÑ‚. Your hostname is too long. Ðоми мизбони шумо хеле дароз аÑÑ‚. '%1' is not allowed as hostname. '%1' ҳамчун номи мизбон иÑтифода намешавад. Only letters, numbers, underscore and hyphen are allowed. Шумо метавонед танҳо ҳарфҳо, рақамҳо, зерхат ва нимтиреро иÑтифода баред. Your passwords do not match! Ðиҳонвожаҳои шумо мувофиқат намекунанд! OK! Setup Failed Танзимкунӣ қатъ шуд Installation Failed ÐаÑбкунӣ қатъ шуд The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Ðнҷоми танзимкунӣ Installation Complete ÐаÑбкунӣ ба анҷом раÑид The setup of %1 is complete. Танзимкунии %1 ба анҷом раÑид. The installation of %1 is complete. ÐаÑбкунии %1 ба анҷом раÑид. Package Selection Интихоби баÑтаҳо Please pick a product from the list. The selected product will be installed. Лутфан, маҳÑулеро аз рӯйхат интихоб намоед. МаҳÑули интихобшуда наÑб карда мешавад. Packages БаÑтаҳо Install option: <strong>%1</strong> None Summary ҶамъбаÑÑ‚ This is an overview of what will happen once you start the setup procedure. Дар ин ҷамъбаÑÑ‚ шумо мебинед, ки чӣ мешавад Ð¿Ð°Ñ Ð°Ð· он ки шумо раванди танзимкуниро оғоз мекунед. This is an overview of what will happen once you start the install procedure. Дар ин ҷамъбаÑÑ‚ шумо мебинед, ки чӣ мешавад Ð¿Ð°Ñ Ð°Ð· он ки шумо раванди наÑбкуниро оғоз мекунед. ContextualProcessJob Contextual Processes Job Вазифаи равандҳои мазмунӣ CreatePartitionDialog Create a Partition Эҷод кардани қиÑми диÑк Si&ze: &Ðндоза: MiB МБ Partition &Type: &Ðавъи қиÑми диÑк: Primar&y E&xtended &Ðфзуда Fi&le System: &Ðизоми файлӣ: LVM LV name Ðоми LVM LV &Mount Point: &Ðуқтаи ваÑл: Flags: Ðишонҳо: Label for the filesystem FS Label: En&crypt &Рамзгузорӣ Logical Мантиқӣ Primary ÐÑоÑÓ£ GPT GPT Mountpoint already in use. Please select another one. Ðуқтаи ваÑл аллакай дар иÑтифода аÑÑ‚. Лутфан, нуқтаи ваÑли дигареро интихоб намоед. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. ҚиÑми диÑки нав бо ҳаҷми %2MiB дар %4 (%3) бо низоми файлии %1 Ñҷод карда мешавад. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. ҚиÑми диÑки нав бо ҳаҷми <strong>%2MiB</strong> дар <strong>%4</strong> (%3) бо низоми файлии <strong>%1</strong> Ñҷод карда мешавад. Creating new %1 partition on %2. Эҷодкунии қиÑми диÑки нави %1 дар %2. The installer failed to create partition on disk '%1'. ÐаÑбкунанда қиÑми диÑкро дар '%1' Ñҷод карда натавониÑÑ‚. CreatePartitionTableDialog Create Partition Table Эҷод кардани ҷадвали қиÑми диÑк Creating a new partition table will delete all existing data on the disk. Эҷодкунии ҷадвали қиÑми диÑки нав ҳамаи иттилооти дар диÑк мавҷудбударо неÑÑ‚ мекунад. What kind of partition table do you want to create? Шумо кадом навъи ҷадвали қиÑми диÑкро Ñҷод кардан мехоҳед? Master Boot Record (MBR) Сабти роҳандозии аÑоÑÓ£ (MBR) GUID Partition Table (GPT) Ҷадвали қиÑми диÑки GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Ҷадвали қиÑми диÑки нави %1 дар %2 Ñҷод карда мешавад. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Ҷадвали қиÑми диÑки нави <strong>%1</strong> дар <strong>%2</strong> (%3) Ñҷод карда мешавад. Creating new %1 partition table on %2. Эҷодкунии ҷадвали қиÑми диÑки нави %1 дар %2. The installer failed to create a partition table on %1. ÐаÑбкунанда ҷадвали қиÑми диÑкро дар '%1' Ñҷод карда натавониÑÑ‚. CreateUserJob Create user %1 Эҷод кардани корбари %1 Create user <strong>%1</strong>. Эҷод кардани корбари <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group Эҷод кардани гурӯҳи ҳаҷм CreateVolumeGroupJob Create new volume group named %1. Гурӯҳи ҳаҷми нав бо номи %1 Ñҷод карда мешавад. Create new volume group named <strong>%1</strong>. Гурӯҳи ҳаҷми нав бо номи <strong>%1</strong> Ñҷод карда мешавад. Creating new volume group named %1. Эҷодкунии гурӯҳи ҳаҷм бо номи %1. The installer failed to create a volume group named '%1'. ÐаÑбкунанда гурӯҳи ҳаҷмро бо номи '%1' Ñҷод карда натавониÑÑ‚. DeactivateVolumeGroupJob Deactivate volume group named %1. Ғайрифаъол кардани гурӯҳи ҳаҷм бо номи %1. Deactivate volume group named <strong>%1</strong>. Ғайрифаъол кардани гурӯҳи ҳаҷм бо номи <strong>%1</strong>. The installer failed to deactivate a volume group named %1. ÐаÑбкунанда гурӯҳи ҳаҷмро бо номи %1 ғайрифаъол карда натавониÑÑ‚. DeletePartitionJob Delete partition %1. ҚиÑми диÑки %1 неÑÑ‚ карда мешавад. Delete partition <strong>%1</strong>. ҚиÑми диÑки <strong>%1</strong> неÑÑ‚ карда мешавад. Deleting partition %1. ÐеÑткунии қиÑми диÑки %1. The installer failed to delete partition %1. ÐаÑбкунанда қиÑми диÑки %1-ро неÑÑ‚ карда натавониÑÑ‚. DeviceInfoWidget This device has a <strong>%1</strong> partition table. Ин даÑтгоҳ ҷадвали қиÑми диÑки <strong>%1</strong>-ро дар бар мегирад. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Ин даÑтгоҳи <strong>даврӣ</strong> мебошад.<br><br>Ин даÑтгоҳи Ñохтагӣ мебошад ва ҷадвали қиÑми диÑкеро дар бар намегирад, ки файлеро ҳамчун блоки даÑтгоҳ даÑÑ‚Ñ€Ð°Ñ Ð¼ÐµÐºÑƒÐ½Ð°Ð´. Ин навъи танзимкунӣ одатан танҳо Ñк низоми файлиро дар бар мегирад. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Ин наÑбкунанда дар даÑтгоҳи захирагоҳи интихобшуда <strong>ҷадвали қиÑми диÑкеро муайÑн карда наметавонад</strong>.<br><br>Эҳтимол аÑÑ‚, ки даÑтгоҳ дорои ҷадвали қиÑми диÑк намебошад Ñ‘ ҷадвали қиÑми диÑк вайрон Ñ‘ номаълум аÑÑ‚.<br>Ин наÑбкунанда метавонад барои шумо ҷадвали қиÑми диÑки наверо ба таври худкор Ñ‘ ба таври даÑтӣ дар Ñаҳифаи қиÑмбандии даÑтӣ Ñҷод намоÑд. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Ин навъи ҷадвали қиÑми диÑки тавÑиÑшуда барои низомҳои муоÑир мебошад, ки аз муҳити роҳандозии <strong>EFI</strong> ба роҳ монда мешавад. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Ин навъи ҷадвали қиÑми диÑк танҳо барои низомҳои куҳна тавÑÐ¸Ñ ÐºÐ°Ñ€Ð´Ð° мешавад, ки аз муҳити роҳандозии <strong>BIOS</strong> корро оғоз мекунад. GPT дар акÑариÑти мавридҳои дигар тавÑÐ¸Ñ ÐºÐ°Ñ€Ð´Ð° мешавад.<br><br><strong>Огоҳӣ:</strong> Ҷадвали қиÑми диÑки MBR ба Ñтандатри куҳнаи давраи MS-DOS тааллуқ дорад.<br>Танҳо 4 қиÑми диÑки <em>аÑоÑÓ£</em> Ñҷод карда мешаванд ва аз он 4 қиÑм танҳо Ñк қиÑми диÑк <em>афзуда</em> мешавад, ки дар натиҷа метавонад биÑёр қиÑмҳои диÑки <em>мантиқиро</em> дар бар гирад. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Ðавъи <strong>ҷадвали қиÑми диÑк</strong> дар даÑтгоҳи захирагоҳи интихобшуда.<br><br>Ðавъи ҷадвали қиÑми диÑк танҳо таваÑÑути пок кардан ва аз нав Ñҷод кардани ҷадвали қиÑми диÑк иваз карда мешавад, ки дар ин марвид ҳамаи иттилоот дар даÑтгоҳи захирагоҳ неÑÑ‚ карда мешавад.<br>Ин наÑбкунанда ҷадвали қиÑми диÑки ҷориро нигоҳ медорад, агар шумо онро тағйир надиҳед.<br>Ðгар надонед, ки чӣ кор кардан лозим аÑÑ‚, GPT дар низомҳои муоÑир боÑд иÑтифода бурда шавад. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Танзимоти LUKS барои Dracut ба %1 Ñабт карда мешавад Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Сабти танзимоти LUKS барои Dracut иҷро карда намешавад: қиÑми диÑки "/" рамзгузорӣ нашудааÑÑ‚ Failed to open %1 %1 кушода нашуд DummyCppJob Dummy C++ Job Вазифаи амÑилаи C++ EditExistingPartitionDialog Edit Existing Partition Таҳрир кардани қиÑми диÑки мавҷудбуда Con&tent: &Keep &Ðигоҳ доштан Format Шаклбандӣ Warning: Formatting the partition will erase all existing data. Огоҳӣ: Ðмали шаклбандӣ ҳамаи иттилооти мавҷудбударо дар қиÑки диÑк пок мекунад. &Mount Point: &Ðуқтаи ваÑл: Si&ze: &Ðндоза: MiB МБ Fi&le System: &Ðизоми файлӣ: Flags: Ðишонҳо: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Шакл En&crypt system &Рамзгузории низом Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Гузарвожаро ворид намоед Confirm passphrase Гузарвожаро таÑдиқ намоед Please enter the same passphrase in both boxes. Лутфан, гузарвожаи Ñгонаро дар ҳар дуи Ñатр ворид намоед. ErrorDialog Details: Would you like to paste the install log to the web? Шумо мехоҳед, ки Ñабти рӯйдодҳои наÑбро ба шабака нуÑха бардоред? FillGlobalStorageJob Set partition information Танзими иттилооти қиÑми диÑк Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. ÐаÑбкунии %1 дар қиÑми диÑки низомии <strong>нави</strong> %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. ÐаÑбкунии %2 дар қиÑми диÑки низомии %3 <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Боркунандаи роҳандозӣ дар <strong>%1</strong> наÑб карда мешавад. Setting up mount points. Танзимкунии нуқтаҳои ваÑл. FinishedPage Form Шакл &Restart now &Ҳозир аз нав оғоз карда шавад <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Ҳамааш тайёр.</h1><br/>%1 дар компютери шумо танзим карда шуд.<br/>Ðкнун шумо метавонед иÑтифодаи низоми навро оғоз намоед. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Ðгар ин имконро интихоб кунед, низоми шумо Ð¿Ð°Ñ Ð°Ð· зер кардани тугмаи <span style="font-style:italic;">Ðнҷоми кор</span> Ñ‘ пӯшидани барномаи танзимкунӣ дарҳол аз нав оғоз карда мешавад.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Ҳамааш тайёр.</h1><br/>%1 дар компютери шумо наÑб карда шуд.<br/>Ðкнун шумо метавонед компютерро аз нав оғоз карда, ба низоми нав ворид шавед Ñ‘ иÑтифодаи муҳити зиндаи %2-ро идома диҳед. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Ðгар ин имконро интихоб кунед, низоми шумо Ð¿Ð°Ñ Ð°Ð· зер кардани тугмаи <span style="font-style:italic;">Ðнҷоми кор</span> Ñ‘ пӯшидани наÑбкунанда дарҳол аз нав оғоз карда мешавад.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Танзимкунӣ қатъ шуд</h1><br/>%1 дар компютери шумо танзим карда нашуд.<br/>Паёми хато: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>ÐаÑбкунӣ қатъ шуд</h1><br/>%1 дар компютери шумо наÑб карда нашуд.<br/>Паёми хато: %2. FinishedQmlViewStep Finish Ðнҷом FinishedViewStep Finish Ðнҷом FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Шаклбандии қиÑми диÑки %1 (низоми файлӣ: %2, андоза: %3 МБ) дар %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Шаклбандии қиÑми диÑк бо ҳаҷми <strong>%3MiB</strong> - <strong>%1</strong> бо низоми файлии <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. Шаклбандии қиÑми диÑки %1 бо низоми файлии %2. The installer failed to format partition %1 on disk '%2'. ÐаÑбкунанда қиÑми диÑки %1-ро дар диÑки '%2' шаклбандӣ карда натавониÑÑ‚. GeneralRequirements has at least %1 GiB available drive space ақаллан %1 ГБ фазои диÑк даÑÑ‚Ñ€Ð°Ñ Ð°ÑÑ‚ There is not enough drive space. At least %1 GiB is required. Дар диÑк фазои кофӣ неÑÑ‚. Ðқаллан %1 ГБ лозим аÑÑ‚. has at least %1 GiB working memory ақаллан %1 ГБ ҳофизаи корӣ даÑÑ‚Ñ€Ð°Ñ Ð°ÑÑ‚ The system does not have enough working memory. At least %1 GiB is required. Ðизом дорои ҳофизаи кории кофӣ намебошад. Ðқаллан %1 ГБ лозим аÑÑ‚. is plugged in to a power source низом ба манбаи барқ пайваÑÑ‚ карда шуд The system is not plugged in to a power source. Компютер боÑд ба манбаи барқ пайваÑÑ‚ карда шавад is connected to the Internet пайваÑти Интернет даÑÑ‚Ñ€Ð°Ñ Ð°ÑÑ‚ The system is not connected to the Internet. Компютер ба Интернет пайваÑÑ‚ карда нашуд. is running the installer as an administrator (root) наÑбкунанда бо ҳуқуқҳои маъмурӣ (root) иҷро шуда иÑтодааÑÑ‚. The setup program is not running with administrator rights. Барномаи наÑбкунӣ бе ҳуқуқҳои маъмурӣ иҷро шуда иÑтодааÑÑ‚. The installer is not running with administrator rights. ÐаÑбкунанда бе ҳуқуқҳои маъмурӣ иҷро шуда иÑтодааÑÑ‚. has a screen large enough to show the whole installer Ñкран равзанаи наÑбкунандаро ба таври пурра нишон медиҳад The screen is too small to display the setup program. Экран барои нишон додани барномаи наÑбкунӣ хеле хурд аÑÑ‚. The screen is too small to display the installer. Экран барои нишон додани наÑбкунанда хеле хурд аÑÑ‚. HostInfoJob Collecting information about your machine. Ҷамъкунии иттилоот дар бораи компютери шумо. IDJob OEM Batch Identifier МуайÑнкунандаи баÑтаи OEM Could not create directories <code>%1</code>. ФеҳриÑтҳои <code>%1</code> Ñҷод карда намешаванд. Could not open file <code>%1</code>. Файли <code>%1</code> кушода нашуд. Could not write to file <code>%1</code>. Ба файли <code>%1</code> навишта натавониÑÑ‚. InitcpioJob Creating initramfs with mkinitcpio. Эҷодкунии initramfs бо mkinitcpio. InitramfsJob Creating initramfs. Эҷодкунии initramfs. InteractiveTerminalPage Konsole not installed Konsole наÑб нашудааÑÑ‚ Please install KDE Konsole and try again! Лутфан, KDE Konsole-ро наÑб намуда, аз нав кӯшиш кунед! Executing script: &nbsp;<code>%1</code> Иҷрокунии нақши: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Ðақш KeyboardQmlViewStep Keyboard Клавиатура KeyboardViewStep Keyboard Клавиатура LCLocaleDialog System locale setting Танзими маҳаллигардонии низом The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Танзими маҳаллигардонии низом ба забон ва маҷмӯаи аломатҳо барои баъзеи унÑурҳои интерфейÑи корбарӣ дар Ñатри фармондиҳӣ таъÑир мераÑонад.<br/>Танзимоти ҷорӣ: <strong>%1</strong>. &Cancel &Бекор кардан &OK &ХУБ LOSHJob Configuring encrypted swap. Танзимкунии мубодилаи рамзгузоришуда. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Шакл <h1>License Agreement</h1> <h1>Созишномаи иҷозатномавӣ</h1> I accept the terms and conditions above. Ман шарту шароитҳои дар боло зикршударо қабул мекунам. Please review the End User License Agreements (EULAs). Лутфан, Созишномаҳои иҷозатномавии корбари ниҳоиро (EULA-ҳо) мутолиа намоед. This setup procedure will install proprietary software that is subject to licensing terms. Раванди танзимкунӣ нармафзори патентдореро, ки дорои шартҳои иҷозатномавӣ мебошад, наÑб мекунад. If you do not agree with the terms, the setup procedure cannot continue. Ðгар шумо шартҳоро қабул накунед, раванди наÑбкунӣ боÑд идома дода нашавад. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Раванди танзимкунӣ метавонад нармафзори патентдореро наÑб кунад, ки дорои шартҳои иҷозатномавӣ барои таъмини хуÑуÑиÑтҳои иловагӣ ва беҳтар кардани таҷрибаи корбарӣ мебошад. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Ðгар шумо шартҳоро қабул накунед, нармафзори патентдор наÑб карда намешавад, аммо ба ҷоÑш нармафзори имконпазири ройгон иÑтифода бурда мешавад. LicenseViewStep License Иҷозатнома LicenseWidget URL: %1 Ðишонии URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>Драйвери %1</strong><br/>аз ҷониби %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Драйвери графикии %1</strong><br/><font color="Grey">аз ҷониби %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>ВаÑлкунаки браузери %1</strong><br/><font color="Grey">аз ҷониби %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Кодеки %1</strong><br/><font color="Grey">аз ҷониби %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>БаÑтаи %1</strong><br/><font color="Grey">аз ҷониби %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">аз ҷониби %2</font> File: %1 Файл: %1 Hide license text Пинҳон кардани матни иҷозатнома Show the license text Ðишон додани матни иҷозатнома Open license agreement in browser. Созишномаи иҷозатномавиро дар браузер кушоед. LocalePage Region: Минтақа: Zone: Шаҳр: &Change... &Тағйир додан... LocaleQmlViewStep Location Ҷойгиршавӣ LocaleTests Quit LocaleViewStep Location Ҷойгиршавӣ LuksBootKeyFileJob Configuring LUKS key file. Танзимкунии файли калиди LUKS. No partitions are defined. Ягон қиÑми диÑк муайÑн карда нашуд. Encrypted rootfs setup error Хатои танзими рамзгузории "rootfs" Root partition %1 is LUKS but no passphrase has been set. ҚиÑми диÑки реша (root)-и %1 дар LUKS аÑÐ¾Ñ Ð¼ÐµÑ‘Ð±Ð°Ð´, вале гузарвожа танзим нашудааÑÑ‚. Could not create LUKS key file for root partition %1. Файли калидии LUKS барои қиÑми диÑки реша (root)-и %1 Ñҷод карда нашуд. Could not configure LUKS key file on partition %1. Файли калидии LUKS дар қиÑми диÑки %1 танзим карда нашуд. MachineIdJob Generate machine-id. Эҷодкунии рақами мушаххаÑи компютер (machine-id). Configuration Error Хатои танзимкунӣ No root mount point is set for MachineId. Ðуқтаи ваÑли реша (root) барои MachineId танзим нашудааÑÑ‚. Map Timezone: %1 Минтақаи вақт: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. Лутфан, ҷойгиршавии пазируфтаи худро аз рӯи харита интихоб намоед, то ки наÑбкунанда тавонад танзимоти маҳаллиÑозӣ ва минтақаи вақти шуморо пешниҳод намоÑд. Шумо метавонед танзимоти пешниҳодшударо дар зер дақиқ кунед. Барои ҷуÑтуҷӯи макон дар харита тугмаҳои +/- Ñ‘ тугмаи чархии мушро барои калон ва хурд кардани харита иÑтифода баред Ñ‘ харитаро кашида, ҳаракат кунед. NetInstallViewStep Package selection Интихоби баÑтаҳо Office software Ðармафзори идорӣ Office package БаÑтаҳои идорӣ Browser software Ðармафзори браузерӣ Browser package БаÑтаҳои браузерӣ Web browser Браузери Ñомона Kernel label for netinstall module, Linux kernel ҲаÑта Services label for netinstall module, system services Хидматҳо Login label for netinstall module, choose login manager Воридшавӣ Desktop label for netinstall module, choose desktop environment Мизи корӣ Communication label for netinstall module ВоÑитаҳои алоқа Development label for netinstall module Барномарезӣ Office label for netinstall module Идора Multimedia label for netinstall module Мултимедиа Internet label for netinstall module Интернет Theming label for netinstall module Мавзӯъҳо Gaming label for netinstall module Бозиҳо Utilities label for netinstall module Барномаҳои муфид Applications Барномаҳо 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. Лутфан, маҳÑулеро аз рӯйхат интихоб намоед. МаҳÑули интихобшуда наÑб карда мешавад. PackageModel Name Ðом Description Маълумоти муфаÑÑал Page_Keyboard Form Шакл Keyboard Model: Ðамунаи клавиатура: Type here to test your keyboard Барои Ñанҷидани клавиатура ҳарфҳоро дар ин Ñатр ворид намоед Page_UserSetup Form Шакл What is your name? Ðоми шумо чиÑÑ‚? Your Full Name Ðоми пурраи шумо What name do you want to use to log in? Кадом номро барои ворид шудан ба низом иÑтифода мебаред? login Ðоми корбари шумо What is the name of this computer? Ðоми ин компютер чиÑÑ‚? <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ин ном иÑтифода мешавад, агар шумо компютери худро барои дигарон дар шабака намоён кунед.</small> Computer Name Ðоми компютери шумо Choose a password to keep your account safe. Барои Ñмин нигоҳ доштани ҳиÑоби худ ниҳонвожаеро интихоб намоед. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Ðиҳонвожаи Ñгонаро ду маротиба ворид намоед, то ки он барои хатоҳои имлоӣ тафтиш карда шавад. Ðиҳонвожаи хуб боÑд дар омезиш калимаҳо, рақамҳо ва аломатҳои китобатиро дар бар гирад, ақаллан аз ҳашт аломат иборат шавад ва мунтазам иваз карда шавад.</small> Password Ðиҳонвожаро ворид намоед Repeat Password Ðиҳонвожаро таÑдиқ намоед When this box is checked, password-strength checking is done and you will not be able to use a weak password. Ðгар шумо ин имконро интихоб кунед, қувваи ниҳонвожа тафтиш карда мешавад ва шумо ниҳонвожаи заифро иÑтифода карда наметавонед. Require strong passwords. Ðиҳонвожаҳои қавӣ лозиманд. Log in automatically without asking for the password. Ба таври худкор бе дархоÑти ниҳонвожа ворид карда шавад. Use the same password for the administrator account. Ðиҳонвожаи Ñгона барои ҳиÑоби маъмурӣ иÑтифода бурда шавад. Choose a password for the administrator account. Барои ҳиÑоби маъмурӣ ниҳонвожаеро интихоб намоед. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Ðиҳонвожаи Ñгонаро ду маротиба ворид намоед, то ки он барои хатоҳои имлоӣ тафтиш карда шавад.</small> PartitionLabelsView Root Реша (root) Home ÐÑоÑÓ£ Boot Роҳандозӣ EFI system Ðизоми EFI Swap Мубодила New partition for %1 ҚиÑми диÑки нав барои %1 New partition ҚиÑми диÑки нав %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Фазои озод New partition ҚиÑми диÑки нав Name Ðом File System Ðизоми файлӣ File System Label Mount Point Ðуқтаи ваÑл Size Ðндоза PartitionPage Form Шакл Storage de&vice: &ДаÑтгоҳи захирагоҳ: &Revert All Changes &Бозгардонидани ҳамаи тағйирот New Partition &Table &Ҷадвали қиÑми диÑки нав Cre&ate &Эҷод кардан &Edit &Таҳрир кардан &Delete &ÐеÑÑ‚ кардан New Volume Group Гурӯҳи ҳаҷми нав Resize Volume Group Иваз кардани андозаи гурӯҳи ҳаҷм Deactivate Volume Group Ғайрифаъол кардани гурӯҳи ҳаҷм Remove Volume Group Тоза кардани гурӯҳи ҳаҷм I&nstall boot loader on: &ÐаÑб кардани боркунандаи роҳандозӣ дар: Are you sure you want to create a new partition table on %1? Шумо мутмаин ҳаÑтед, ки мехоҳед ҷадвали қиÑми диÑки навро дар %1 Ñҷод намоед? Can not create new partition ҚиÑми диÑки нав Ñҷод карда намешавад The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Ҷадвали қиÑми диÑк дар %1 аллакай %2 қиÑми диÑки аÑоÑиро дар бар мегирад ва қиÑмҳои бештар илова карда намешаванд. Лутфан, Ñк қиÑми диÑки аÑоÑиро неÑÑ‚ кунед ва ба ҷоÑш қиÑми диÑки афзударо илова намоед. PartitionViewStep Gathering system information... Ҷамъкунии иттилооти низомӣ... Partitions ҚиÑмҳои диÑк Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Танзимоти ҷорӣ: After: Баъд аз тағйир: No EFI system partition configured Ягон қиÑми диÑки низомии EFI танзим нашуд EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS Имкони иÑтифодаи GPT дар BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted ҚиÑми диÑки роҳандозӣ рамзгузорӣ нашудааÑÑ‚ A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. ҚиÑми диÑки роҳандозии алоҳида дар Ñк ҷой бо қиÑми диÑки реша (root)-и рамзгузоришуда танзим карда шуд, аммо қиÑми диÑки роҳандозӣ рамзгузорӣ нашудааÑÑ‚.<br/><br/>Барои ҳамин навъи танзимкунӣ маÑъалаи амниÑтӣ аҳамиÑÑ‚ дорад, зеро ки файлҳои низомии муҳим дар қиÑми диÑки рамзгузоринашуда нигоҳ дошта мешаванд.<br/>Ðгар шумо хоҳед, метавонед идома диҳед, аммо қулфкушоии низоми файлӣ дертар ҳангоми оғози кори низом иҷро карда мешавад.<br/>Барои рамзгзорӣ кардани қиÑми диÑки роҳандозӣ ба қафо гузаред ва бо интихоби тугмаи <strong>Рамзгузорӣ</strong> дар равзанаи Ñҷодкунии қиÑми диÑк онро аз нав Ñҷод намоед. has at least one disk device available. ақаллан Ñк даÑтгоҳи диÑк даÑÑ‚Ñ€Ð°Ñ Ð°ÑÑ‚. There are no partitions to install on. Ягон қиÑми диÑк барои наÑб вуҷуд надорад. PlasmaLnfJob Plasma Look-and-Feel Job Вазифаи намуди зоҳирии Plasma Could not select KDE Plasma Look-and-Feel package БаÑтаи намуди зоҳирии KDE Plasma интихоб карда намешавад PlasmaLnfPage Form Шакл Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Лутфан, намуди зоҳириро барои мизи кории KDE Plasma интихоб намоед. Шумо инчунин метавонед ин қадамро ҳозир ба назар нагиред, аммо намуди зоҳириро Ð¿Ð°Ñ Ð°Ð· анҷоми танзимкунии низом дар вақти дилхоҳ танзим намоед. Барои пешнамоиш кардани намуди зоҳирии интихобшуда, онро зер кунед. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Лутфан, намуди зоҳириро барои мизи кории KDE Plasma интихоб намоед. Шумо инчунин метавонед ин қадамро ҳозир ба назар нагиред, аммо намуди зоҳириро Ð¿Ð°Ñ Ð°Ð· анҷоми наÑбкунии низом дар вақти дилхоҳ танзим намоед. Барои пешнамоиш кардани намуди зоҳирии интихобшуда, онро зер кунед. PlasmaLnfViewStep Look-and-Feel Ðамуди зоҳирӣ PreserveFiles Saving files for later ... Ðигоҳдории файлҳо барои коркарди минбаъда ... No files configured to save for later. Ягон файл барои коркарди минбаъда танзим карда нашуд. Not all of the configured files could be preserved. Ðа ҳамаи файлҳои танзимшуда метавонанд нигоҳ дошта шаванд. ProcessResult There was no output from the command. Фармони иҷрошуда Ñгон натиҷа надод. Output: Ðатиҷа: External command crashed. Фармони берунӣ иҷро нашуд. Command <i>%1</i> crashed. Фармони <i>%1</i> иҷро нашуд. External command failed to start. Фармони берунӣ оғоз нашуд. Command <i>%1</i> failed to start. Фармони <i>%1</i> оғоз нашуд. Internal error when starting command. Ҳангоми оғоз кардани фармон хатои дохилӣ ба миён омад. Bad parameters for process job call. Имконоти нодуруÑÑ‚ барои дархоÑти вазифаи раванд. External command failed to finish. Фармони берунӣ ба анҷом нараÑид. Command <i>%1</i> failed to finish in %2 seconds. Фармони <i>%1</i> дар муддати %2 ÑÐ¾Ð½Ð¸Ñ Ð±Ð° анҷом нараÑид. External command finished with errors. Фармони берунӣ бо хатоҳо ба анҷом раÑид. Command <i>%1</i> finished with exit code %2. Фармони <i>%1</i> бо рамзи барориши %2 ба анҷом раÑид. QObject %1 (%2) %1 (%2) unknown номаълум extended афзуда unformatted шаклбандинашуда swap мубодила Default Муқаррар File not found Файл ёфт нашуд Path <pre>%1</pre> must be an absolute path. МаÑири <pre>%1</pre> боÑд маÑири мутлақ бошад. Directory not found ФеҳриÑÑ‚ ёфт нашуд Could not create new random file <pre>%1</pre>. Файл таÑодуфии нави <pre>%1</pre> Ñҷод карда нашуд. No product Ягон маҳÑул неÑÑ‚ No description provided. Ягон тафÑилот неÑÑ‚ (no mount point) (бе нуқтаи ваÑл) Unpartitioned space or unknown partition table Фазои диÑк бо қиÑми диÑки ҷудонашуда Ñ‘ ҷадвали қиÑми диÑки номаълум Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p>Ин компютер ба баъзеи талаботи тавÑиÑшуда барои наÑбкунии %1 ҷавобгӯ намебошад.<br/> Танзимот идома дода мешавад, аммо баъзеи хуÑуÑиÑтҳо ғайрифаъол карда мешаванд.</p> RemoveUserJob Remove live user from target system Тоза кардани корбари фаъол аз низоми интихобшуда RemoveVolumeGroupJob Remove Volume Group named %1. Тоза кардани гурӯҳи ҳаҷм бо номи %1. Remove Volume Group named <strong>%1</strong>. Тоза кардани гурӯҳи ҳаҷм бо номи <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ÐаÑбкунанда гурӯҳи ҳаҷмро бо номи '%1' тоза карда натавониÑÑ‚. ReplaceWidget Form Шакл Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Интихоб кунед, ки %1 дар куҷо боÑд наÑб карда шавад.<br/><font color="red">Огоҳӣ: </font>Ин амал ҳамаи файлҳоро дар қиÑми диÑки интихобшуда неÑÑ‚ мекунад. The selected item does not appear to be a valid partition. Чунин менамоÑд, ки ҷузъи интихобшуда қиÑми диÑки дуруÑÑ‚ намебошад. %1 cannot be installed on empty space. Please select an existing partition. %1 дар фазои холӣ наÑб карда намешавад. Лутфан, қиÑми диÑки мавҷудбударо интихоб намоед. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 дар қиÑми диÑки афзуда наÑб карда намешавад. Лутфан, қиÑми диÑки мавҷудбудаи аÑоÑÓ£ Ñ‘ мантиқиро интихоб намоед. %1 cannot be installed on this partition. %1 дар ин қиÑми диÑк наÑб карда намешавад. Data partition (%1) ҚиÑми диÑки иттилоотӣ (%1) Unknown system partition (%1) ҚиÑми диÑки низомии номаълум (%1) %1 system partition (%2) ҚиÑми диÑки низомии %1 (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>ҚиÑми диÑки %1 барои %2 хеле хурд аÑÑ‚. Лутфан, қиÑми диÑкеро бо ҳаҷми ақаллан %3 ГБ интихоб намоед. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>ҚиÑми диÑки низомии EFI дар дохили низоми ҷорӣ ёфт нашуд. Лутфан, ба қафо гузаред ва барои танзим кардани %1 аз имкони қиÑмбандии диÑк ба таври даÑтӣ иÑтифода баред. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 дар %2 наÑб карда мешавад.<br/><font color="red">Огоҳӣ: </font>Ҳамаи иттилоот дар қиÑми диÑки %2 гум карда мешавад. The EFI system partition at %1 will be used for starting %2. ҚиÑми диÑки низомии EFI дар %1 барои оғоз кардани %2 иÑтифода бурда мешавад. EFI system partition: ҚиÑми диÑки низомии: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>Ин компютер ба талаботи камтарин барои наÑбкунии %1 ҷавобгӯ намебошад.<br/> ÐаÑбкунӣ идома дода намешавад.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p>Ин компютер ба баъзеи талаботи тавÑиÑшуда барои наÑбкунии %1 ҷавобгӯ намебошад.<br/> Танзимот идома дода мешавад, аммо баъзеи хуÑуÑиÑтҳо ғайрифаъол карда мешаванд.</p> ResizeFSJob Resize Filesystem Job Вазифаи ивазкунии андозаи низоми файлӣ Invalid configuration Танзимоти нодуруÑÑ‚ The file-system resize job has an invalid configuration and will not run. Вазифаи ивазкунии андозаи низоми файлӣ танзимоти нодуруÑÑ‚ дорад ва иҷро карда намешавад. KPMCore not Available KPMCore даÑÑ‚Ð½Ð¾Ñ€Ð°Ñ Ð°ÑÑ‚ Calamares cannot start KPMCore for the file-system resize job. Calamares барои вазифаи ивазкунии андозаи низоми файлӣ KPMCore-ро оғоз карда наметавонад. Resize Failed Ðндоза иваз карда нашуд The filesystem %1 could not be found in this system, and cannot be resized. Ðизоми файлии %1 дар ин низом ёфт нашуд ва андозаи он иваз карда намешавад. The device %1 could not be found in this system, and cannot be resized. ДаÑтгоҳи %1 дар ин низом ёфт нашуд ва андозаи он иваз карда намешавад. The filesystem %1 cannot be resized. Ðндозаи низоми файлии %1 иваз карда намешавад. The device %1 cannot be resized. Ðндозаи даÑтгоҳи %1 иваз карда намешавад. The filesystem %1 must be resized, but cannot. Ðндозаи низоми файлии %1 боÑд иваз карда шавад, аммо иваз карда намешавад. The device %1 must be resized, but cannot Ðндозаи даÑтгоҳи %1 боÑд иваз карда шавад, аммо иваз карда намешавад. ResizePartitionJob Resize partition %1. Иваз кардани андозаи қиÑми диÑки %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Ðндозаи қиÑми диÑк бо ҳаҷми <strong>%2MiB</strong> - <strong>%1</strong> ба ҳаҷми<strong>%3MiB</strong> иваз карда мешавад. Resizing %2MiB partition %1 to %3MiB. Ивазкунии андозаи қиÑми диÑки %1 бо ҳаҷми %2MiB то ҳаҷми %3MiB. The installer failed to resize partition %1 on disk '%2'. ÐаÑбкунанда андозаи қиÑми диÑки %1-ро дар диÑки '%2' иваз карда натавониÑÑ‚. ResizeVolumeGroupDialog Resize Volume Group Иваз кардани андозаи гурӯҳи ҳаҷм ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Иваз кардани андозаи гурӯҳи ҳаҷм бо номи %1 аз %2 ба %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Иваз кардани андозаи гурӯҳи ҳаҷм бо номи <strong>%1</strong> аз <strong>%2</strong> ба <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ÐаÑбкунанда андозаи гурӯҳи ҳаҷмро бо номи '%1' иваз карда натавониÑÑ‚. ResultsListDialog For best results, please ensure that this computer: Барои натиҷаҳои беҳтарин, мутмаин шавед, ки дар ин компютер: System requirements Талаботи низом ScanningDialog Scanning storage devices... ҶуÑтуҷӯи даÑтгоҳҳои захирагоҳ... Partitioning ҚиÑмбандии диÑк SetHostNameJob Set hostname %1 Танзими номи мизбони %1 Set hostname <strong>%1</strong>. Танзими номи мизбони <strong>%1</strong>. Setting hostname %1. Танзимкунии номи мизбони %1. Internal Error Хатои дохилӣ Cannot write hostname to target system Ðоми мизбон ба низоми интихобшуда Ñабт нашуд SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Ðамунаи клавиатура ба %1 ва тарҳбандӣ ба %2-%3 танзим карда мешавад Failed to write keyboard configuration for the virtual console. Танзимоти клавиатура барои конÑоли маҷозӣ Ñабт нашуд. Failed to write to %1 Ба %1 Ñабт нашуд Failed to write keyboard configuration for X11. Танзимоти клавиатура барои X11 Ñабт нашуд. Failed to write keyboard configuration to existing /etc/default directory. Танзимоти клавиатура ба феҳриÑти мавҷудбудаи /etc/default Ñабт нашуд. SetPartFlagsJob Set flags on partition %1. Танзим кардани нишонҳо дар қиÑми диÑки %1. Set flags on %1MiB %2 partition. Танзим кардани нишонҳо дар қиÑми диÑки %1MiB %2. Set flags on new partition. Танзим кардани нишонҳо дар қиÑми диÑки нав. Clear flags on partition <strong>%1</strong>. Пок кардани нишонҳо дар қиÑми диÑки <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Пок кардани нишонҳо дар қиÑми диÑки <strong>%2</strong> %1MiB. Clear flags on new partition. Пок кардани нишонҳо дар қиÑми диÑки нав. Flag partition <strong>%1</strong> as <strong>%2</strong>. Ðишони қиÑми диÑки <strong>%1</strong> ҳамчун <strong>%2</strong> танзим карда мешавад. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Ðишони қиÑми диÑки <strong>%2</strong> бо ҳаҷми %1MiB <strong>%3</strong> танзим карда мешавад. Flag new partition as <strong>%1</strong>. Ðишони қиÑми диÑки нав ҳамчун <strong>%1</strong> танзим карда мешавад. Clearing flags on partition <strong>%1</strong>. ПокÑозии нишонҳо дар қиÑми диÑки <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. ПокÑозии нишонҳо дар қиÑми диÑки <strong>%2</strong> бо ҳаҷми %1MiB. Clearing flags on new partition. ПокÑозии нишонҳо дар қиÑми диÑки нав Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Танзимкунии нишонҳои <strong>%2</strong> дар қиÑми диÑки <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Танзимкунии нишонҳои <strong>%3</strong> дар қиÑми диÑки <strong>%2</strong> бо ҳаҷми %1MiB. Setting flags <strong>%1</strong> on new partition. Танзимкунии нишонҳои <strong>%1</strong> дар қиÑми диÑки нав The installer failed to set flags on partition %1. ÐаÑбкунанда нишонҳоро дар қиÑми диÑки %1 танзим карда натавониÑÑ‚. SetPasswordJob Set password for user %1 Танзими ниҳонвожа барои корбари %1 Setting password for user %1. Танзимкунии ниҳонвожа барои корбари %1. Bad destination system path. МаÑири ҷойи таъиноти низомӣ нодуруÑÑ‚ аÑÑ‚. rootMountPoint is %1 rootMountPoint: %1 Cannot disable root account. ҲиÑоби реша (root) ғайрифаъол карда намешавад. passwd terminated with error code %1. passwd бо рамзи хатои %1 қатъ шуд. Cannot set password for user %1. Ðиҳонвожа барои корбари %1 танзим карда намешавад. usermod terminated with error code %1. usermod бо рамзи хатои %1 қатъ шуд. SetTimezoneJob Set timezone to %1/%2 Минтақаи вақт ба %1/%2 танзим карда мешавад Cannot access selected timezone path. МаÑири минтақаи вақти интихобшуда даÑÑ‚Ð½Ð¾Ñ€Ð°Ñ Ð°ÑÑ‚ Bad path: %1 МаÑири нодуруÑÑ‚: %1 Cannot set timezone. Минтақаи вақт танзим карда намешавад Link creation failed, target: %1; link name: %2 Пайванд Ñҷод карда нашуд, вазифа: %1; номи пайванд: %2 Cannot set timezone, Минтақаи вақт танзим карда намешавад. Cannot open /etc/timezone for writing Файли /etc/timezone барои Ñабт кушода намешавад SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Фармони chmod барои файли sudoers иҷро намешавад. Cannot create sudoers file for writing. Файли sudoers барои Ñабт Ñҷод карда намешавад. ShellProcessJob Shell Processes Job Вазифаи равандҳои воÑит SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK &ХУБ &Yes &Ҳа &No &Ðе &Cancel &Бекор кардан &Close &Пӯшидан TrackingInstallJob Installation feedback Ðлоқаи бозгашти наÑбкунӣ Sending installation feedback. ФириÑтодани алоқаи бозгашти наÑбкунӣ. Internal error in install-tracking. Хатои дохилӣ дар пайгирии наÑб. HTTP request timed out. Вақти дархоÑти HTTP ба анҷом раÑид. TrackingKUserFeedbackJob KDE user feedback Изҳори назари корбари KDE Configuring KDE user feedback. Танзимкунии изҳори назари корбари KDE. Error in KDE user feedback configuration. Хато дар танзимкунии изҳори назари корбари KDE. Could not configure KDE user feedback correctly, script error %1. Изҳори назари корбари KDE ба таври дуруÑÑ‚ танзим карда нашуд. Хатои нақш: %1. Could not configure KDE user feedback correctly, Calamares error %1. Изҳори назари корбари KDE ба таври дуруÑÑ‚ танзим карда нашуд. Хатои Calamares: %1. TrackingMachineUpdateManagerJob Machine feedback Ðизоми изҳори назар ва алоқаи бозгашт Configuring machine feedback. Танзимкунии алоқаи бозгашти компютерӣ. Error in machine feedback configuration. Хато дар танзимкунии алоқаи бозгашти компютерӣ. Could not configure machine feedback correctly, script error %1. Ðлоқаи бозгашти компютерӣ ба таври дуруÑÑ‚ танзим карда нашуд. Хатои нақш: %1. Could not configure machine feedback correctly, Calamares error %1. Ðлоқаи бозгашти компютерӣ ба таври дуруÑÑ‚ танзим карда нашуд. Хатои Calamares: %1. TrackingPage Form Шакл Placeholder Пуркунандаи фазо <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Дар ин ҷо зер кунед, то ки <span style=" font-weight:600;">Ñгон маълумот</span> дар бораи наÑбкунии шумо фириÑтода нашавад.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Барои гирифтани маълумоти муфаÑÑал оид ба изҳори назари корбар, дар ин ҷо зер кунед</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. Пайгирӣ ба %1 барои дидани шумораи наÑбҳо, намудҳои Ñахтафзорҳо ва маҷмӯаи барномаҳои иÑтифодашуда кумак мераÑонад. Барои дидани маълумоте, ки фириÑтода мешавад нишонаи кумакро дар назди ҳар Ñк мавод зер кунед. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. Ðгар ин имконро интихоб кунед, шумо маълумотро дар бораи наÑбкунӣ ва Ñахтафзори худ мефириÑтонед. Ин маълумот <b>танҳо Ñк маротиба</b> баъд аз анҷоми наÑбкунӣ фириÑтода мешавад. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. Ðгар ин имконро интихоб кунед, шумо маълумотро ба таври мунтазам дар бораи наÑбкунӣ, Ñахтафзор ва барномаҳои <b>компютери</b> худ ба %1 мефириÑтонед. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. Ðгар ин имконро интихоб кунед, шумо маълумотро ба таври мунтазам дар бораи наÑбкунӣ, Ñахтафзор ва барномаҳои <b>корбари</b> худ ба %1 мефириÑтонед. TrackingViewStep Feedback Изҳори назар ва алоқаи бозгашт UmountJob Unmount file systems. Ҷудо кардани низомҳои файлӣ. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ðгар зиёда аз Ñк корбар ин компютерро иÑтифода барад, шумо метавонед баъд аз танзимкунӣ Ñкчанд ҳиÑобро Ñҷод намоед.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ðгар зиёда аз Ñк корбар ин компютерро иÑтифода барад, шумо метавонед баъд аз наÑбкунӣ Ñкчанд ҳиÑобро Ñҷод намоед.</small> UsersQmlViewStep Users Корбарон UsersViewStep Users Корбарон VariantModel Key Column header for key/value Тугма Value Column header for key/value Қимат VolumeGroupBaseDialog Create Volume Group Эҷод кардани гурӯҳи ҳаҷм List of Physical Volumes Рӯйхати ҳаҷмҳои ҷиÑмонӣ Volume Group Name: Ðоми гурӯҳи ҳаҷм: Volume Group Type: Ðавъи гурӯҳи ҳаҷм: Physical Extent Size: Ðндозаи меъёри ҷиÑмонӣ: MiB МБ Total Size: Ðндозаи умумӣ: Used Size: Ðндозаи иÑтифодашуда: Total Sectors: Бахшҳои умумӣ: Quantity of LVs: Шумораи LV-ҳо: WelcomePage Form Шакл Select application and system language Интихоби забон барои низом ва барномаҳо Open donations website Сомонаи Ñаҳмгузориро кушоед &Donate &Саҳмгузорӣ Open help and support website Сомонаи кумак ва даÑтгириро кушоед &Support &ДаÑтгирӣ Open issues and bug-tracking website Сомонаи маÑъалаҳо ва пайгирии нуқÑонҳоро кушоед &Known issues &МаÑъалаҳои маълум Open release notes website Сомонаро бо қайдҳои нашр кушоед &Release notes &Қайдҳои нашр %1 support ДаÑтгирии %1 About %1 setup Дар бораи танзими %1 About %1 installer Дар бораи наÑбкунандаи %1 WelcomeQmlViewStep Welcome Хуш омадед WelcomeViewStep Welcome Хуш омадед ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Хатои танзимкунӣ No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Дар бораи барнома Debug Show information about Calamares Show debug information Ðамоиши иттилооти иÑлоҳи нуқÑонҳо finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Забонҳо</h1> </br> Танзими маҳаллигардонии низом ба забон ва маҷмӯаи аломатҳо барои баъзеи унÑурҳои интерфейÑи корбарӣ дар Ñатри фармондиҳӣ таъÑир мераÑонад. Танзими ҷорӣ: <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Маҳаллигардонӣ</h1> </br> Танзими маҳаллигардонии низом ба забон ва маҷмӯаи аломатҳо барои баъзеи унÑурҳои интерфейÑи корбарӣ дар Ñатри фармондиҳӣ таъÑир мераÑонад. Танзими ҷорӣ: <strong>%1</strong>. Back Ба қафо keyboardq To activate keyboard preview, select a layout. Keyboard Model: Ðамунаи клавиатура: Layouts Тарҳбандиҳо Type here to test your keyboard Барои Ñанҷидани клавиатура ҳарфҳоро дар ин Ñатр ворид намоед Variants Имконот localeq Change Тағйир додан notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Матни намунавии қайдҳои нашр.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Ин файли QML-и намунавие мебошад, ки имконотро дар шакли RichText бо муҳтавои зершаванда нишон медиҳад.</p> <p>Файли QML бо шакли RichText метавонад барчаÑпҳои HTML-ро иÑтифода барад, аммо муҳтавои зершаванда барои Ñкранҳои ламÑÓ£ мувофиқ мебошад.</p> <p><b>Ин матни Ò“Ð°Ñ„Ñ Ð°ÑÑ‚</b></p> <p><i>Ин матни хам аÑÑ‚</i></p> <p><u>Ин матни бо зерхат аÑÑ‚</u></p> <p><center>Ин матн дар марказ ҷойгир мешавад.</center></p> <p><s>Ин матни хатзадашуда аÑÑ‚</s></p> <p>МиÑоли рамз: <code>ls -l /home</code></p> <p><b>Рӯйхатҳо:</b></p> <ul> <li>Ðизомҳои Intel CPU</li> <li>Ðизомҳои AMD CPU</li> </ul> <p>Ðавори ҳаракати амудӣ танзимпазир аÑÑ‚, паҳнии ҷорӣ ба 10 танзим шудааÑÑ‚.</p> Back Ба қафо usersq Pick your user name and credentials to login and perform admin tasks Барои ворид шудан ба низом ва иҷро кардани вазифаҳои маъмурӣ, номи корбар ва маълумоти корбариро муайÑн кунед. What is your name? Ðоми шумо чиÑÑ‚? Your Full Name Ðоми пурраи шумо What name do you want to use to log in? Кадом номро барои ворид шудан ба низом иÑтифода мебаред? Login Name Ðоми корбар If more than one person will use this computer, you can create multiple accounts after installation. Ðгар зиёда аз Ñк корбар ин компютерро иÑтифода барад, шумо метавонед баъд аз наÑбкунӣ Ñкчанд ҳиÑобро Ñҷод намоед. Only lowercase letters, numbers, underscore and hyphen are allowed. Шумо метавонед танҳо ҳарфҳои хурд, рақамҳо, зерхат ва нимтиреро иÑтифода баред. root is not allowed as username. What is the name of this computer? Ðоми ин компютер чиÑÑ‚? Computer Name Ðоми компютери шумо This name will be used if you make the computer visible to others on a network. Ин ном иÑтифода мешавад, агар шумо компютери худро барои дигарон дар шабака намоён кунед. localhost is not allowed as hostname. Choose a password to keep your account safe. Барои Ñмин нигоҳ доштани ҳиÑоби худ ниҳонвожаеро интихоб намоед. Password Ðиҳонвожаро ворид намоед Repeat Password Ðиҳонвожаро таÑдиқ намоед Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Ðиҳонвожаи Ñгонаро ду маротиба ворид намоед, то ки он барои хатоҳои имлоӣ тафтиш карда шавад. Ðиҳонвожаи хуб боÑд дар омезиш калимаҳо, рақамҳо ва аломатҳои китобатиро дар бар гирад, ақаллан аз ҳашт аломат иборат шавад ва мунтазам иваз карда шавад. Validate passwords quality Санҷиши Ñифати ниҳонвожаҳо When this box is checked, password-strength checking is done and you will not be able to use a weak password. Ðгар шумо ин имконро интихоб кунед, қувваи ниҳонвожа тафтиш карда мешавад ва шумо ниҳонвожаи заифро иÑтифода карда наметавонед. Log in automatically without asking for the password Ба таври худкор бе дархоÑти ниҳонвожа ворид карда шавад Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Ðиҳонвожаи корбар ҳам барои ниҳонвожаи root иÑтифода карда шавад Use the same password for the administrator account. Ðиҳонвожаи Ñгона барои ҳиÑоби маъмурӣ иÑтифода бурда шавад. Choose a root password to keep your account safe. Барои Ñмин нигоҳ доштани ҳиÑоби худ ниҳонвожаи root-ро интихоб намоед. Root Password Ðиҳонвожаи root Repeat Root Password Ðиҳонвожаи root-ро таÑдиқ намоед Enter the same password twice, so that it can be checked for typing errors. Ðиҳонвожаи Ñгонаро ду маротиба ворид намоед, то ки он барои хатоҳои имлоӣ тафтиш карда шавад. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Хуш омадед ба наÑбкунандаи <quote>%2</quote> барои %1</h3> <p>Ин барнома аз Шумо Ñкчанд Ñавол мепурÑад ва %1-ро дар компютери шумо танзим мекунад.</p> Support ДаÑтгирӣ Known issues МаÑъалаҳои маълум Release notes Қайдҳои нашр Donate Саҳмгузорӣ calamares-calamares-2d126ae/lang/calamares_th.ts000066400000000000000000006461061430147706700217400ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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 à¸à¸²à¸£à¸•ิดตั้งล้มเหลว 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> <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 Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 ล้างจุดเชื่อมต่อสำหรับà¸à¸²à¸£à¹à¸šà¹ˆà¸‡à¸žà¸²à¸£à¹Œà¸—ิชันบน %1 Clearing mounts for partitioning operations on %1. à¸à¸³à¸¥à¸±à¸‡à¸¥à¹‰à¸²à¸‡à¸ˆà¸¸à¸”เชื่อมต่อสำหรับà¸à¸²à¸£à¸”ำเนินงานเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸žà¸²à¸£à¹Œà¸—ิชันบน %1 Cleared all mounts for %1 ล้างจุดเชื่อมต่อทั้งหมดà¹à¸¥à¹‰à¸§à¸ªà¸³à¸«à¸£à¸±à¸š %1 ClearTempMountsJob Clear all temporary mounts. ล้างจุดเชื่อมต่อชั่วคราวทั้งหมด Clearing all temporary mounts. à¸à¸³à¸¥à¸±à¸‡à¸¥à¹‰à¸²à¸‡à¸ˆà¸¸à¸”เชื่อมต่อชั่วคราวทุà¸à¸ˆà¸¸à¸” Cleared all temporary mounts. จุดเชื่อมต่อชั่วคราวทั้งหมดถูà¸à¸¥à¹‰à¸²à¸‡à¹à¸¥à¹‰à¸§ CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> ตั้งค่าโมเดลà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¹€à¸›à¹‡à¸™ %1<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. 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. เลือà¸à¸œà¸¥à¸´à¸•ภัณฑ์จาà¸à¸£à¸²à¸¢à¸à¸²à¸£ ผลิตภัณฑ์ที่เลือà¸à¹„ว้จะถูà¸à¸•ิดตั้ง Packages à¹à¸žà¹‡à¸à¹€à¸à¸ˆ Install option: <strong>%1</strong> None Summary สาระสำคัภThis is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition สร้างพาร์ทิชัน Si&ze: &Z ขนาด: MiB Partition &Type: &T พาร์ทิชันà¹à¸¥à¸°à¸›à¸£à¸°à¹€à¸ à¸—: Primar&y E&xtended &X ขยาย Fi&le System: LVM LV name &Mount Point: &M จุดเชื่อมต่อ: Flags: Flags: Label for the filesystem FS Label: En&crypt Logical โลจิคอล Primary หลัภGPT GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. ตัวติดตั้งไม่สามารถสร้างพาร์ทิชันบนดิสà¸à¹Œ '%1' 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 à¹à¸à¹‰à¹„ขพาร์ทิชันที่มีอยู่เดิม Con&tent: &Keep &เà¸à¹‡à¸šà¹„ว้ Format ฟอร์à¹à¸¡à¸— Warning: Formatting the partition will erase all existing data. คำเตือน: à¸à¸²à¸£à¸Ÿà¸­à¸£à¹Œà¹à¸¡à¸—พาร์ทิชันจะลบข้อมูลที่มีอยู่เดิมทั้งหมด &Mount Point: &M จุดเชื่อมต่อ: Si&ze: &Z ขนาด: MiB Fi&le System: Flags: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form ฟอร์ม En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information ตั้งค่าข้อมูลพาร์ทิชัน Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form ฟอร์ม &Restart now &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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 ตà¸à¸¥à¸‡ LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡ <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 ไฟล์: %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 label for netinstall module, Linux kernel เคอร์เนล Services label for netinstall module, system services บริà¸à¸²à¸£ Login label for netinstall module, choose login manager เข้าสู่ระบบ Desktop label for netinstall module, choose desktop environment เดสà¸à¹Œà¸—็อป Communication label for netinstall module à¸à¸²à¸£à¸ªà¸·à¹ˆà¸­à¸ªà¸²à¸£ Development label for netinstall module à¸à¸²à¸£à¸žà¸±à¸’นา Office label for netinstall module ออฟฟิศ Multimedia label for netinstall module สื่อ Internet label for netinstall module อินเทอร์เน็ต Theming label for netinstall module à¸à¸²à¸£à¸›à¸£à¸±à¸šà¹à¸•่ง Gaming label for netinstall module เà¸à¸¡ Utilities label for netinstall module Applications à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชัน 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. เลือà¸à¸œà¸¥à¸´à¸•ภัณฑ์จาà¸à¸£à¸²à¸¢à¸à¸²à¸£ ผลิตภัณฑ์ที่เลือà¸à¹„ว้จะถูà¸à¸•ิดตั้ง 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 พาร์ทิชัน Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: ปัจจุบัน: After: หลัง: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form ฟอร์ม Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. พารามิเตอร์ไม่ถูà¸à¸•้องสำหรับà¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸à¸à¸²à¸£à¸—ำงาน External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) %1 (%2) unknown extended unformatted swap Default ค่าเริ่มต้น File not found ไม่พบไฟล์ Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. ไม่ได้ระบุคำอธิบาย (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form ฟอร์ม Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. เลือà¸à¸—ี่ที่จะติดตั้ง %1<br/><font color="red">คำเตือน: </font>ตัวเลือà¸à¸™à¸µà¹‰à¸ˆà¸°à¸¥à¸šà¹„ฟล์ทั้งหมดบนพาร์ทิชันที่เลือภThe selected item does not appear to be a valid partition. ไอเทมที่เลือà¸à¹„ม่ใช่พาร์ทิชันที่ถูà¸à¸•้อง %1 cannot be installed on empty space. Please select an existing partition. ไม่สามารถติดตั้ง %1 บนพื้นที่ว่าง à¸à¸£à¸¸à¸“าเลือà¸à¸žà¸²à¸£à¹Œà¸—ิชันที่มี %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. ไม่สามารถติดตั้ง %1 บนพาร์ทิชัน 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 ความต้องà¸à¸²à¸£à¸‚องระบบ 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) StandardButtons &OK &O ตà¸à¸¥à¸‡ &Yes &ใช่ &No &ไม่ &Cancel &C ยà¸à¹€à¸¥à¸´à¸ &Close ปิ&ด TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form ฟอร์ม Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users ผู้ใช้ UsersViewStep Users ผู้ใช้ VariantModel Key Column header for key/value Value Column header for key/value ค่า VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: ขนาดทั้งหมด: Used Size: ขนาดที่ใช้ไป: Total Sectors: Quantity of LVs: WelcomePage Form à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡ Select application and system language 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 %1 support About %1 setup เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸•ัวตั้งค่า %1 About %1 installer เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸•ัวติดตั้ง %1 WelcomeQmlViewStep Welcome ยินดีต้อนรับ WelcomeViewStep Welcome ยินดีต้อนรับ ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š Debug à¹à¸à¹‰à¹„ขข้อบà¸à¸žà¸£à¹ˆà¸­à¸‡ Show information about Calamares Show debug information à¹à¸ªà¸”งข้อมูลà¸à¸²à¸£à¸”ีบั๊ภfinishedq Installation Completed à¸à¸²à¸£à¸•ิดตั้งเสร็จสิ้น %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer ปิดตัวติดตั้ง Restart System เริ่มต้นระบบใหม่ <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed à¸à¸²à¸£à¸•ิดตั้งเสร็จสิ้น %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back ย้อนà¸à¸¥à¸±à¸š keyboardq To activate keyboard preview, select a layout. Keyboard Model: โมเดลà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œ: Layouts Type here to test your keyboard พิมพ์ที่นี่เพื่อทดสอบà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¸‚องคุณ Variants localeq Change เปลี่ยน notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back ย้อนà¸à¸¥à¸±à¸š usersq Pick your user name and credentials to login and perform admin tasks What is your name? ชื่อของคุณคืออะไร? Your Full Name ชื่อเต็มของคุณ What name do you want to use to log in? ใส่ชื่อที่คุณต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¹ƒà¸™à¸à¸²à¸£à¹€à¸‚้าสู่ระบบ Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? คอมพิวเตอร์เครื่องนี้ชื่ออะไร? Computer Name ชื่อคอมพิวเตอร์ This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. เลือà¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹€à¸žà¸·à¹ˆà¸­à¸£à¸±à¸à¸©à¸²à¸šà¸±à¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‚องคุณให้ปลอดภัย Password รหัสผ่าน Repeat Password à¸à¸£à¸­à¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸‹à¹‰à¸³ Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_tr_TR.ts000066400000000000000000007112611430147706700223520ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong> %2 <br/> %3</strong> için <br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <a href="https://calamares.io/team/">Calamares takımına</a> ve <a href="https://www.transifex.com/calamares/calamares/">Calamares çeviri ekibine</a> teÅŸekkürler. <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 Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Telif hakkı %1-%2 %3 &lt;%4&gt;<br/> 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 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. Dosya sistemi etiketini %1 olarak ayarla. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. <strong>%1</strong> dosya sistemi etiketini <strong>%2</strong> bölümüne ayarlayın. The installer failed to update partition table on disk '%1'. Yükleyici '%1' diskinde bölümleme tablosunu güncelleyemedi. CheckerContainer Gathering system information... Sistem bilgileri toplanıyor... 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 Successfully unmounted %1. %1 baÄŸlantısı baÅŸarıyla kaldırıldı. Successfully disabled swap %1. %1 takas alanı baÅŸarıyla devre dışı bırakıldı. Successfully cleared swap %1. %1 takas alanı baÅŸarıyla temizlendi. Successfully closed mapper device %1. %1 eÅŸleyici aygıtı baÅŸarıyla kapatıldı. Successfully disabled volume group %1. %1 birim grubu baÅŸarıyla devre dışı bırakıldı. Clear mounts for partitioning operations on %1 %1 bölümleme iÅŸlemleri için sorunsuz baÄŸla Clearing mounts for partitioning operations on %1. %1 bölümleme iÅŸlemleri için baÄŸlama noktaları temizleniyor. Cleared all mounts for %1 %1 için tüm baÄŸlı bölümler ayrıldı ClearTempMountsJob Clear all temporary mounts. Tüm geçici baÄŸları temizleyin. Clearing all temporary mounts. Geçici olarak baÄŸlananlar temizleniyor. 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! TAMAM! Setup Failed Kurulum BaÅŸarısız Installation Failed Kurulum BaÅŸarısız The setup of %1 did not complete successfully. %1 kurulumu baÅŸarısız oldu tamamlanmadı. The installation of %1 did not complete successfully. %1 kurulumu baÅŸarısız oldu tamamlanmadı. Setup Complete Kurulum Tamanlandı Installation Complete Kurulum Tamamlandı The setup of %1 is complete. %1 kurulumu tamamlandı. The installation of %1 is complete. Kurulum %1 oranında tamamlandı. Package Selection Paket seçimi Please pick a product from the list. The selected product will be installed. Lütfen listeden bir ürün seçin. Seçilen ürün yüklenecek. Packages Paketler Install option: <strong>%1</strong> Kurulum seçeneÄŸi: <strong>%1</strong> None Hiçbiri Summary Kurulum Özeti This is an overview of what will happen once you start the setup procedure. Bu, kurulum prosedürü baÅŸlatıldıktan sonra ne gibi deÄŸiÅŸiklikler dair olacağına genel bir bakış. This is an overview of what will happen once you start the install procedure. Yükleme iÅŸlemleri baÅŸladıktan sonra yapılacak iÅŸlere genel bir bakış. ContextualProcessJob Contextual Processes Job BaÄŸlamsal Süreç İşleri CreatePartitionDialog Create a Partition Yeni Bölüm OluÅŸtur Si&ze: Bo&yut: MiB MB Partition &Type: Bölüm &Tip: Primar&y Birinci&l E&xtended U&zatılmış Fi&le System: D&osya Sistemi: LVM LV name LVM LV adı &Mount Point: &BaÄŸlama Noktası: Flags: Bayraklar: Label for the filesystem Dosya sistemi için etiket FS Label: DS Etiketi: En&crypt Åžif&rele Logical Mantıksal Primary Birincil GPT GPT Mountpoint already in use. Please select another one. BaÄŸlama noktası zaten kullanımda. Lütfen diÄŸerini seçiniz. Mountpoint must start with a <tt>/</tt>. BaÄŸlantı noktası bir <tt>/</tt> ile baÅŸlamalıdır. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. %3 (%2) üzerinde %4 girdisi ile yeni bir %1MiB bölüm oluÅŸturun. Create new %1MiB partition on %3 (%2). %3 (%2) üzerinde yeni bir %1MiB bölüm oluÅŸturun. Create new %2MiB partition on %4 (%3) with file system %1. %4 üzerinde (%3) ile %1 dosya sisteminde %2MB disk bölümü oluÅŸtur. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. <strong>%3</strong> (%2) üzerinde <em>%4</em> girdisi ile yeni bir <strong>%1MiB</strong> bölüm oluÅŸturun. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). <strong>%3</strong> (%2) üzerinde yeni bir <strong>%1MiB</strong> bölüm oluÅŸturun. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%4</strong> üzerinde (%3) ile <strong>%1</strong> dosya sisteminde <strong>%2MB</strong> disk bölümü oluÅŸtur. Creating new %1 partition on %2. %2 üzerinde %1 yeni disk bölümü oluÅŸtur. The installer failed to create partition on disk '%1'. Yükleyici '%1' diski üzerinde yeni bölüm oluÅŸturamadı. 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 Con&tent: İçe&rik: &Keep &Tut Format Biçimle Warning: Formatting the partition will erase all existing data. Uyarı: Biçimlenen bölümdeki tüm veriler silinecek. &Mount Point: &BaÄŸlama Noktası: Si&ze: Bo&yut: MiB MB Fi&le System: D&osya Sistemi: Flags: Bayraklar: Label for the filesystem Dosya sistemi için etiket FS Label: DS Etiketi: Passphrase for existing partition Mevcut bölüm için parola Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. %1 bölümünün ÅŸifresi verilen parola ile çözülemedi. <br/><br/>Bölümü tekrar düzenleyin ve doÄŸru parolayı girin veya silin ve yeni bir ÅŸifreli bölüm oluÅŸturun. EncryptWidget Form Biçim En&crypt system Sistemi Åžif&rele Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Sisteminiz, tüm sistemi ÅŸifrelemek için yeterince ÅŸifrelemeyi desteklemiyor gibi görünüyor. Åžifrelemeyi etkinleÅŸtirebilirsiniz, ancak performans düşebilir. Passphrase Parola Confirm passphrase Parolayı doÄŸrula Please enter the same passphrase in both boxes. Her iki kutuya da aynı parolayı giriniz. ErrorDialog Details: Detaylar: Would you like to paste the install log to the web? Kurulum günlüğünü web'e yapıştırmak ister misiniz? FillGlobalStorageJob Set partition information Bölüm bilgilendirmesini ayarla Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> <em>%3</em> özelliklerine sahip <strong>yeni</strong> %2 sistem bölümüne %1 yükleyin Install %1 on <strong>new</strong> %2 system partition. %2 <strong>yeni</strong> sistem diskine %1 yükle. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Åžifreli takas alanı yapılandırılıyor. No target system available. Mevcut hedef sistemi yok. No rootMountPoint is set. Hiçbir rootMountPoint ayarlanmadı. No configFilePath is set. configFilePath ayarlanmadı. LicensePage Form Form <h1>License Agreement</h1> <h1>Lisans AnlaÅŸması</h1> I accept the terms and conditions above. Yukarıdaki ÅŸartları ve koÅŸulları kabul ediyorum. Please review the End User License Agreements (EULAs). Lütfen Son Kullanıcı Lisans SözleÅŸmelerini (EULA) inceleyin. This setup procedure will install proprietary software that is subject to licensing terms. Bu kurulum prosedürü, lisanslama koÅŸullarına tabi olan tescilli yazılımı kuracaktır. If you do not agree with the terms, the setup procedure cannot continue. KoÅŸulları kabul etmiyorsanız kurulum prosedürü devam edemez. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Bu kurulum prosedürü, ek özellikler saÄŸlamak ve kullanıcı deneyimini geliÅŸtirmek için lisans koÅŸullarına tabi olan özel yazılımlar yükleyebilir. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. KoÅŸulları kabul etmiyorsanız, tescilli yazılım yüklenmeyecek ve bunun yerine açık kaynak alternatifleri kullanılacaktır. 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 Çıkış 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 label for netinstall module, Linux kernel Çekirdek Services label for netinstall module, system services Servisler Login label for netinstall module, choose login manager Oturum aç Desktop label for netinstall module, choose desktop environment Masaüstü Communication label for netinstall module İletiÅŸim Development label for netinstall module GeliÅŸim Office label for netinstall module Ofis Multimedia label for netinstall module Multimedya Internet label for netinstall module İnternet Theming label for netinstall module Temalar Gaming label for netinstall module Oyunlar Utilities label for netinstall module BileÅŸenler Applications Uygulamalar 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. Tercih ettiÄŸiniz Bölgeyi seçin veya varsayılan ayarları kullanın. Timezone: %1 Zaman dilimi: %1 Select your preferred Zone within your Region. Konumunuzda tercih ettiÄŸiniz Bölgeyi seçin. Zones Bölge You can fine-tune Language and Locale settings below. AÅŸağıda Dil ve Yerel Ayar ayarlarında ince ayar yapabilirsiniz. PWQ Password is too short Åžifre çok kısa Password is too long Åžifre çok uzun Password is too weak Åžifre çok zayıf Memory allocation error when setting '%1' '%1' ayarlanırken bellek ayırma hatası Memory allocation error Bellek ayırma hatası The password is the same as the old one Åžifre eski ÅŸifreyle aynı The password is a palindrome Parola eskilerden birinin ters okunuÅŸu olabilir The password differs with case changes only Parola sadece vaka deÄŸiÅŸiklikleri ile farklılık gösterir The password is too similar to the old one Parola eski parolaya çok benzer The password contains the user name in some form Parola kullanıcı adını bir biçimde içeriyor The password contains words from the real name of the user in some form Åžifre, kullanıcının gerçek adına ait kelimeleri bazı biçimde içerir The password contains forbidden words in some form Åžifre, bazı biçimde yasak kelimeler içeriyor The password contains 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. 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 Dosya Sistemi Etiketi 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 Unsafe partition actions are enabled. Güvenli olmayan bölümleme eylemi etkinleÅŸtirildi. Partitioning is configured to <b>always</b> fail. Bölümleme, <b>her zaman</b> baÅŸarısız olacak ÅŸekilde yapılandırılmıştır. No partitions will be changed. Hiçbir bölüm deÄŸiÅŸtirilmeyecek. Current: Geçerli: After: Sonra: No EFI system partition configured EFI sistem bölümü yapılandırılmamış EFI system partition configured incorrectly EFI sistem bölümü yanlış yapılandırılmış An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. %1 baÅŸlatmak için bir EFI sistem bölümü gereklidir. <br/><br/> Bir EFI sistem bölümü yapılandırmak için geri dönün ve uygun bir dosya sistemi seçin veya oluÅŸturun. The filesystem must be mounted on <strong>%1</strong>. Dosya sistemi <strong>%1</strong> üzerine baÄŸlanmalıdır. The filesystem must have type FAT32. Dosya sistemi FAT32 tipine sahip olmalıdır. The filesystem must be at least %1 MiB in size. Dosya sisteminin boyutu en az %1 MB olmalıdır. The filesystem must have flag <strong>%1</strong> set. Dosya sisteminde <strong>%1</strong> bayrağı ayarlanmış olmalıdır. You can continue without setting up an EFI system partition but your system may fail to start. Bir EFI sistem bölümü kurmadan devam edebilirsiniz ancak sisteminiz baÅŸlamayabilir. Option to use GPT on BIOS BIOS'ta GPT kullanma seçeneÄŸi A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. GPT bölüm tablosu, tüm sistemler için en iyi seçenektir. Bu yükleyici, BIOS sistemleri için de böyle bir kurulumu destekler. <br/><br/>BIOS'ta bir GPT bölüm tablosu yapılandırmak için (önceden yapılmadıysa) geri dönün ve bölüm tablosunu GPT olarak ayarlayın, ardından <strong>%2</strong> bayrağı etkinleÅŸtirilmiÅŸ.<br/><br/> 8 MB biçimlendirilmemiÅŸ bölüm oluÅŸturun .GPT' ile BIOS sisteminde %1 baÅŸlatmak için biçimlendirilmemiÅŸ 8 MB bir bölüm gereklidir. Boot partition not encrypted Önyükleme yani boot diski ÅŸifrelenmedi A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Ayrı bir önyükleme yani boot disk bölümü, ÅŸifrenmiÅŸ bir kök bölüm ile birlikte ayarlandı, fakat önyükleme bölümü ÅŸifrelenmedi.<br/><br/>Bu tip kurulumun güvenlik endiÅŸeleri vardır, çünkü önemli sistem dosyaları ÅŸifrelenmemiÅŸ bir bölümde saklanır.<br/>İsterseniz kuruluma devam edebilirsiniz, fakat dosya sistemi kilidi daha sonra sistem baÅŸlatılırken açılacak.<br/> Önyükleme bölümünü ÅŸifrelemek için geri dönün ve bölüm oluÅŸturma penceresinde <strong>Åžifreleme</strong>seçeneÄŸi ile yeniden oluÅŸturun. has at least one disk device available. Mevcut en az bir disk aygıtı var. There are no partitions to install on. Kurulacak disk bölümü yok. 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 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 StandardButtons &OK &TAMAM &Yes &Evet &No &Hayır &Cancel &Vazgeç &Close &Kapat TrackingInstallJob Installation feedback Kurulum geribildirimi Sending installation feedback. Kurulum geribildirimi gönderiliyor. Internal error in install-tracking. Kurulum izlemede dahili hata. HTTP request timed out. HTTP isteÄŸi zaman aşımına uÄŸradı. 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 UmountJob Unmount file systems. Dosya sistemlerini ayırın. No target system available. Mevcut hedef sistemi yok. No rootMountPoint is set. Hiçbir rootMountPoint ayarlanmadı. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Bu bilgisayarı birden fazla kiÅŸi kullanacaksa, kurulumdan sonra birden fazla kullanıcı hesabı oluÅŸturabilirsiniz.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Bu bilgisayarı birden fazla kiÅŸi kullanacaksa, 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 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ı %1 support %1 destek About %1 setup %1 kurulum hakkında About %1 installer %1 sistem yükleyici hakkında WelcomeQmlViewStep Welcome HoÅŸ geldiniz WelcomeViewStep Welcome HoÅŸ geldiniz ZfsJob Create ZFS pools and datasets ZFS havuzları ve veri kümeleri oluÅŸturun Failed to create zpool on üzerinde zpool oluÅŸturulamadı Configuration Error Yapılandırma Hatası No partitions are available for ZFS. ZFS için disk bölümü yok. Internal data missing Dahili veri eksik Failed to create zpool zpool oluÅŸturulamadı Failed to create dataset Veri kümesi oluÅŸturulamadı The output was: Çıktı ÅŸuydu: calamares-sidebar About Hakkında Debug Hata Ayıklama Show information about Calamares Calamares hakkında bilgilendirme göster Show debug information Hata ayıklama bilgisini göster finishedq Installation Completed Yükleme Tamamlandı %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 bilgisayarınıza yüklendi.<br/> KurduÄŸunuz sistemi ÅŸimdi yeniden baÅŸlayabilir veya Canlı ortamı kullanmaya devam edebilirsiniz. Close Installer Yükleyiciyi Kapat Restart System Sistemi Yeniden BaÅŸlat <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Kurulumun tam günlüğü, Live kullanıcısının ana dizininde installation.log olarak mevcuttur.<br/> Bu günlük, hedef sistemin /var/log/installation.log dosyasına kopyalanır.</p> finishedq@mobile Installation Completed Yükleme Tamamlandı %1 has been installed on your computer.<br/> You may now restart your device. %1 bilgisayarınıza yüklendi.<br/> Artık cihazınızı yeniden baÅŸlatabilirsiniz. Close Kapat Restart Yeniden BaÅŸlat i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Dil</h1> </br> Sistem yerel ayarı, bazı komut satırı kullanıcı arabirimi öğelerinin dilini ve karakter kümesini etkiler. Geçerli ayar <strong>%1</strong>'dir <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>YerelleÅŸtirme</h1> </br> Sistem yerel ayarı, sayıları ve tarih biçimini etkiler. Geçerli yerel ayarı <strong>%1</strong>. Back Geri keyboardq To activate keyboard preview, select a layout. Klavye önizlemesini etkinleÅŸtirmek için bir düzen seçin. Keyboard Model: Klavye Modeli: Layouts Düzenler Type here to test your keyboard Klavye seçiminizi burada test edebilirsiniz Variants Türevler 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> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice, dünya çapında milyonlarca insan tarafından kullanılan güçlü ve ücretsiz bir ofis paketidir. Onu piyasadaki en çok yönlü Ücretsiz ve Açık Kaynak ofis paketi yapan çeÅŸitli uygulamalar içerir. <br/> Varsayılan seçenek. LibreOffice LibreOfis If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Bir ofis paketi yüklemek istemiyorsanız, Office Paketi Yok'u seçmeniz yeterlidir. İhtiyaç duyulduÄŸunda, kurulu sisteminize her zaman bir (veya daha fazlasını) ekleyebilirsiniz. No Office Suite Ofis Paketi Yok Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal bir Masaüstü kurulumu oluÅŸturun, tüm ekstra uygulamaları kaldırın ve sisteminize ne eklemek istediÄŸinize daha sonra karar verin. Böyle bir kurulumda nelerin olmayacağına dair örnekler, Office Suite olmayacak, medya oynatıcı olmayacak, resim görüntüleyici veya baskı desteÄŸi olmayacak. Yalnızca bir masaüstü, dosya tarayıcısı, paket yöneticisi, metin düzenleyici ve basit web tarayıcısı olacak. Minimal Install Asgari Kurulum Please select an option for your install, or use the default: LibreOffice included. Lütfen yüklemeniz için bir seçenek seçin veya varsayılanı kullanın: LibreOffice dahildir. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Bu, Flickable içeriÄŸine sahip RichText'teki seçenekleri gösteren örnek bir QML dosyası.</p> <p>RichText ile QML HTML etiketleri kullanabilir, Flickable içerik dokunmatik ekranlar için yararlıdır.</p> <p><b>Kalın yazı</b></p> <p><i>Yatık yazı</i></p> <p><u>Altı çizili yazı</u></p> <p><center>Ortaya hizalı yazı.</center></p> <p><s>Üstü çizili yazı</s></p> <p>Kod örneÄŸi: <code>ls -l /home</code></p> <p><b>Listeler:</b></p> <ul> <li>Intel CPU sistemler</li> <li>AMD CPU sistemler</li> </ul> <p>Dikey kaydırma çubuÄŸu ayarlanabilir, mevcut geniÅŸlik 10 olarak ayarlanmıştır.</p> Back Geri usersq Pick your user name and credentials to login and perform admin tasks Oturum açmak ve yönetici görevlerini gerçekleÅŸtirmek için kullanıcı adınızı ve kimlik bilgilerinizi seçin What is your name? Adınız nedir? Your Full Name Tam Adınız What name do you want to use to log in? GiriÅŸ için hangi adı kullanmak istersiniz? Login Name Kullanıcı adı If more than one person will use this computer, you can create multiple accounts after installation. Bu bilgisayarı birden fazla kiÅŸi kullanacaksa, kurulumdan sonra birden fazla hesap oluÅŸturabilirsiniz. Only lowercase letters, numbers, underscore and hyphen are allowed. Sadece küçük harflere, sayılara, alt çizgi ve kısa çizgilere izin verilir. root is not allowed as username. root kullanıcı adı olarak kulanılmasına izin verilmez. What is the name of this computer? Bu bilgisayarın adı nedir? Computer Name Bilgisayar Adı This name will be used if you make the computer visible to others on a network. Bilgisayarı aÄŸ üzerinde herkese görünür yaparsanız bu ad kullanılacaktır. localhost is not allowed as hostname. localhost ana bilgisayar adı olarak kullanılmasına izin verilmez. Choose a password to keep your account safe. Hesabınızın güvenliÄŸini saÄŸlamak için bir parola belirleyiniz. Password Åžifre Repeat Password Åžifreyi Tekrarla Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Yazım hataları açısından kontrol edilebilmesi için aynı parolayı iki kez girin. İyi bir ÅŸifre, harflerin, sayıların ve noktalama iÅŸaretlerinin bir karışımını içerecektir, en az sekiz karakter uzunluÄŸunda olmalı ve düzenli aralıklarla deÄŸiÅŸtirilmelidir. Validate passwords quality Parola kalitesini doÄŸrulayın When this box is checked, password-strength checking is done and you will not be able to use a weak password. Bu kutu iÅŸaretlendiÄŸinde parola gücü kontrolü yapılır ve zayıf bir parola kullanamazsınız. Log in automatically without asking for the password Parola sormadan otomatik olarak oturum açın Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. En az iki karakter olmak üzere yalnızca harflere, sayılara, alt çizgiye ve kısa çizgiye izin verilir. Reuse user password as root password Kullanıcı ÅŸifresini yetkili kök ÅŸifre olarak kullan Use the same password for the administrator account. Yönetici ile kullanıcı aynı ÅŸifreyi kullansın. Choose a root password to keep your account safe. Hesabınızı güvende tutmak için bir kök ÅŸifre seçin. Root Password Kök Åžifre Repeat Root Password Kök Åžifresini Tekrarla Enter the same password twice, so that it can be checked for typing errors. Yazım hataları açısından kontrol edilebilmesi için aynı parolayı iki kez girin. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>%1 <quote>%2</quote> sistem yükleyicisine hoÅŸ geldiniz</h3> <p>Bu program size bazı sorular soracak ve bilgisayarınıza %1 kuracak.</p> Support Destek Known issues Bilinen sorunlar Release notes Sürüm notları Donate Bağış calamares-calamares-2d126ae/lang/calamares_uk.ts000066400000000000000000010165211430147706700217350ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> Ð´Ð»Ñ %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. ДÑкуємо <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> — робимо програмне Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð»ÑŒÐ½Ð¸Ð¼. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> © %3 &lt;%4&gt;, %1–%2<br/> 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 Помилка під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ 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 Successfully unmounted %1. %1 уÑпішно демонтовано. Successfully disabled swap %1. УÑпішно вимкнено резервну пам'Ñть %1. Successfully cleared swap %1. УÑпішно очищено резервну пам'Ñть %1. Successfully closed mapper device %1. УÑпішно закрито приÑтрій прив'Ñзки %1. Successfully disabled volume group %1. УÑпішно вимкнено групу томів %1. Clear mounts for partitioning operations on %1 ОчиÑтити точки Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹ над розділами на %1 Clearing mounts for partitioning operations on %1. ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð¾Ñ‡Ð¾Ðº Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹ над розділами на %1. Cleared all mounts for %1 Очищено вÑÑ– точки Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ %1 ClearTempMountsJob Clear all temporary mounts. ОчиÑтити вÑÑ– тимчаÑові точки підключеннÑ. Clearing all temporary mounts. ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð²ÑÑ–Ñ… тимчаÑових точок підключеннÑ. 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. Будь лаÑка, виберіть продукт зі ÑпиÑку. Буде вÑтановлено вибраний продукт. Packages Пакунки Install option: <strong>%1</strong> Варіант вÑтановленнÑ: <strong>%1</strong> None Ðемає Summary ОглÑд This is an overview of what will happen once you start the setup procedure. Це оглÑд того, що трапитьÑÑ ÐºÐ¾Ð»Ð¸ ви почнете процедуру налаштовуваннÑ. This is an overview of what will happen once you start the install procedure. Це оглÑд того, що трапитьÑÑ ÐºÐ¾Ð»Ð¸ ви почнете процедуру вÑтановленнÑ. ContextualProcessJob Contextual Processes Job Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтових процеÑів CreatePartitionDialog Create a Partition Створити розділ Si&ze: Ро&змір: MiB МіБ Partition &Type: &Тип розділу: Primar&y ОÑ&новний E&xtended &Розширений Fi&le System: &Файлова ÑиÑтема: LVM LV name Ðазва логічного тому LVM &Mount Point: Точка &підключеннÑ: Flags: Прапорці: Label for the filesystem Мітка файлової ÑиÑтеми FS Label: Мітка ФС: En&crypt За&шифрувати Logical Логічний Primary ОÑновний GPT GPT Mountpoint already in use. Please select another one. Точка Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð½Ð°Ñ€Ð°Ð·Ñ– викориÑтовуєтьÑÑ. Оберіть, будь лаÑка, іншу. Mountpoint must start with a <tt>/</tt>. Точка Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” починатиÑÑ Ð· <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Створити розділ %1МіБ на %3 (%2) із запиÑами %4. Create new %1MiB partition on %3 (%2). Створити розділ %1МіБ на %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Створити розділ у %2 МіБ на %4 (%3) із файловою ÑиÑтемою %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Створити розділ <strong>%1МіБ</strong> на <strong>%3</strong> (%2) із запиÑами <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Створити розділ <strong>%1МіБ</strong> на <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Створити розділ у <strong>%2 МіБ</strong> на <strong>%4</strong> (%3) із файловою ÑиÑтемою <strong>%1</strong>. Creating new %1 partition on %2. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ розділу %1 на %2. The installer failed to create partition on disk '%1'. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ñтворити розділ на диÑку «%1». 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 Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Con&tent: Ð’&міÑÑ‚: &Keep За&лишити Format Форматувати Warning: Formatting the partition will erase all existing data. ПопередженнÑ: Ð¤Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ знищить вÑÑ– приÑутні на ньому дані. &Mount Point: Точка &підключеннÑ: Si&ze: Ро&змір: MiB МіБ Fi&le System: &Файлова ÑиÑтема: Flags: Прапорці: Label for the filesystem Мітка файлової ÑиÑтеми FS Label: Мітка ФС: Passphrase for existing partition Пароль до наÑвного розділу Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. Розділ %1 не вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ з викориÑтаннÑм наданого паролÑ.<br/><br/>Виконайте Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² ще раз Ñ– вкажіть правильний пароль або вилучіть розділ Ñ– Ñтворіть новий шифрований розділ. EncryptWidget Form Форма En&crypt system За&шифрувати ÑиÑтему Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. ЗдаєтьÑÑ, у вашій ÑиÑтемі недоÑÑ‚Ð°Ñ‚Ð½Ñ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÑієї ÑиÑтеми. Ви можете увімкнути шифруваннÑ, але від цього може поÑтраждати швидкодіÑ. Passphrase Ключова фраза Confirm passphrase ÐŸÑ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð²Ð¾Ñ— фрази Please enter the same passphrase in both boxes. Будь лаÑка, введіть однакову ключову фразу у обидва текÑтові вікна. ErrorDialog Details: Подробиці: Would you like to paste the install log to the web? Хочете виклаÑти журнал вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñƒ мережі? FillGlobalStorageJob Set partition information ВвеÑти інформацію про розділ Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Ð’Ñтановити %1 на <strong>новий</strong> ÑиÑтемний розділ %2 із можливоÑÑ‚Ñми <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Ð’Ñтановити %1 на <strong>новий</strong> ÑиÑтемний розділ %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>. %1 (%2) partition label %1 (device path %2) %1 (%2) 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 LOSHJob Configuring encrypted swap. Ðалаштовуємо зашифрований розділ резервної пам'Ñті. No target system available. Ðемає доÑтупної цільової ÑиÑтеми. No rootMountPoint is set. Ðе вÑтановлено rootMountPoint. No configFilePath is set. Ðе вÑтановлено configFilePath. LicensePage Form Форма <h1>License Agreement</h1> <h1>Ліцензійна угода</h1> I accept the terms and conditions above. Я приймаю Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° умови, що наведені вище. Please review the End User License Agreements (EULAs). Будь лаÑка, переглÑньте ліцензійні угоди із кінцевим кориÑтувачем (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Під Ñ‡Ð°Ñ Ñ†Ñ–Ñ”Ñ— процедури Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÑƒÐ´Ðµ вÑтановлено закрите програмне забезпеченнÑ, викориÑÑ‚Ð°Ð½Ð½Ñ Ñкого передбачає згоду із умовами ліцензійної угоди. If you do not agree with the terms, the setup procedure cannot continue. Якщо ви не погодитеÑÑ Ñ–Ð· умовами, Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÐ¾Ñ— процедури Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñтане неможливим. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Під Ñ‡Ð°Ñ Ñ†Ñ–Ñ”Ñ— процедури Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути вÑтановлено закрите програмне Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð· метою Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— та Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… можливоÑтей. ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ програмного Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡Ð°Ñ” згоду із умовами ліцензійної угоди. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Якщо ви не погодитеÑÑ Ñ–Ð· умовами ліцензуваннÑ, закрите програмне Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð½Ðµ буде вÑтановлено. ЗаміÑть нього буде викориÑтано альтернативи із відкритим кодом. 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 label for netinstall module, Linux kernel Ядро Services label for netinstall module, system services Служби Login label for netinstall module, choose login manager Вхід до ÑиÑтеми Desktop label for netinstall module, choose desktop environment Ð¡Ñ‚Ñ–Ð»ÑŒÐ½Ð¸Ñ†Ñ Communication label for netinstall module Ð¡Ð¿Ñ–Ð»ÐºÑƒÐ²Ð°Ð½Ð½Ñ Development label for netinstall module Розробка Office label for netinstall module ÐžÑ„Ñ–Ñ Multimedia label for netinstall module Звук та відео Internet label for netinstall module Інтернет Theming label for netinstall module Теми Gaming label for netinstall module Ігри Utilities label for netinstall module ІнÑтрументи Applications Програми 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. Будь лаÑка, виберіть продукт зі ÑпиÑку. Буде вÑтановлено вибраний продукт. 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 Розділи Unsafe partition actions are enabled. Увімкнено небезпечні дії із розділами. Partitioning is configured to <b>always</b> fail. Поділ на розділи налаштовано так, щоб <b>завжди</b> завершуватиÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾ÑŽ. No partitions will be changed. Змін до розділів внеÑено не буде. Current: Зараз: After: ПіÑлÑ: No EFI system partition configured Ðе налаштовано жодного ÑиÑтемного розділу EFI EFI system partition configured incorrectly СиÑтемний розділ EFI налаштовано неправильно An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. Ð”Ð»Ñ Ð·Ð°Ð¿ÑƒÑку %1 потрібен ÑиÑтемний розділ EFI.<br/><br/>Щоб налаштувати ÑиÑтемний розділ EFI, повернітьÑÑ Ð´Ð¾ попередніх пунктів Ñ– виберіть ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ñ— файлової ÑиÑтеми. The filesystem must be mounted on <strong>%1</strong>. Файлову ÑиÑтему має бути змоновано до <strong>%1</strong>. The filesystem must have type FAT32. Файлова ÑиÑтема має належати до типу FAT32. The filesystem must be at least %1 MiB in size. Розмір файлової ÑиÑтеми має бути не меншим за %1 МіБ. The filesystem must have flag <strong>%1</strong> set. Ð”Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми має бути вÑтановлено прапорець <strong>%1</strong>. You can continue without setting up an EFI system partition but your system may fail to start. Ви можете продовжити без вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑиÑтемного розділу EFI, але це може призвеÑти до неможливоÑті запуÑку вашої операційної ÑиÑтеми. Option to use GPT on BIOS Варіант із викориÑтаннÑм GPT на BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² GPT Ñ” найкращим варіантом Ð´Ð»Ñ ÑƒÑÑ–Ñ… ÑиÑтем. У цьому заÑобі Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ підтримку таких налаштувань Ñ– Ð´Ð»Ñ ÑиÑтем із BIOS.<br/><br/>Щоб налаштувати таблицю розділів GPT на BIOS, (Ñкщо цього ще не зроблено) повернітьÑÑ Ñ– вÑтановіть Ð´Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– розділів Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ GPT, потім Ñтворіть неформатований розділ розміром 8 МБ з увімкненим прапорцем <strong>%2</strong>.<br/><br/>Ðеформатований розділ у 8 МБ не обов'Ñзковим Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку %1 у ÑиÑтемі з BIOS Ñ– GPT. Boot partition not encrypted Завантажувальний розділ незашифрований A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Було налаштовано окремий завантажувальний розділ порÑд із зашифрованим кореневим розділом, але завантажувальний розділ незашифрований.<br/><br/>ІÑнують проблеми з безпекою такого типу, оÑкільки важливі ÑиÑтемні файли зберігаютьÑÑ Ð½Ð° незашифрованому розділі.<br/>Ви можете продовжувати, Ñкщо бажаєте, але Ñ€Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми відбудетьÑÑ Ð¿Ñ–Ð·Ð½Ñ–ÑˆÐµ під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку ÑиÑтеми.<br/>Щоб зашифрувати завантажувальний розділ, повернітьÑÑ Ñ– Ñтворіть його знов, обравши <strong>Зашифрувати</strong> у вікні ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð². has at least one disk device available. має принаймні один доÑтупний диÑковий приÑтрій. There are no partitions to install on. Ðемає розділів Ð´Ð»Ñ Ð²ÑтановленнÑ. 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 Вимоги до ÑиÑтеми 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 StandardButtons &OK &OK &Yes &Так &No &ÐÑ– &Cancel &СкаÑувати &Close &Закрити TrackingInstallJob Installation feedback Відгуки щодо вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Sending installation feedback. ÐадÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð³ÑƒÐºÑ–Ð² щодо вÑтановленнÑ. Internal error in install-tracking. Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° вÑтановленнÑм. HTTP request timed out. Перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° обробку запиту HTTP. TrackingKUserFeedbackJob KDE user feedback Зворотних зв'Ñзок Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів KDE Configuring KDE user feedback. ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¾Ð³Ð¾ зв'Ñзку Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів KDE. Error in KDE user feedback configuration. Помилка у налаштуваннÑÑ… зворотного зв'Ñзку кориÑтувачів KDE. Could not configure KDE user feedback correctly, script error %1. Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ належним чином зворотний зв'Ñзок Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів KDE. Помилка Ñкрипту %1. Could not configure KDE user feedback correctly, Calamares error %1. Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ належним чином зворотний зв'Ñзок Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів KDE. Помилка Calamares %1. TrackingMachineUpdateManagerJob Machine feedback Дані щодо комп'ютера Configuring machine feedback. ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо комп'ютера. Error in machine feedback configuration. Помилка у налаштуваннÑÑ… надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо комп'ютера. Could not configure machine feedback correctly, script error %1. Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо комп'ютера належним чином. Помилка Ñкрипту: %1. Could not configure machine feedback correctly, Calamares error %1. Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо комп'ютера належним чином. Помилка у Calamares: %1. TrackingPage Form Форма Placeholder Замінник <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>ÐатиÑніть тут, щоб не надÑилати <span style=" font-weight:600;">взагалі ніÑких даних</span> щодо вашого вÑтановленнÑ.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ÐатиÑніть, щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про відгуки кориÑтувачів</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. Ð¡Ñ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð¶Ðµ %1 визначити чаÑтоту вÑтановленнÑ, параметри Ð¾Ð±Ð»Ð°Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° перелік викориÑтовуваних програм. Щоб переглÑнути дані, Ñкі буде надіÑлано, будь лаÑка, натиÑніть піктограму довідки, Ñку розташовано порÑд із кожним пунктом. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. Якщо буде позначено цей пункт, програма надішле дані щодо вÑтановленої ÑиÑтеми та обладнаннÑ. Ці дані буде надіÑлано <b>лише один раз</b> піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð²ÑтановленнÑ. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. Якщо позначити цей пункт, програма періодично надÑилатиме дані щодо <b>вÑтановленої вами ÑиÑтеми загалом</b>, Ð¾Ð±Ð»Ð°Ð´Ð½Ð°Ð½Ð½Ñ Ñ– програм до %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. Якщо позначити цей пункт, програма регулÑрно надÑилатиме дані щодо вÑтановленої вами ÑиÑтеми кориÑтувача, обладнаннÑ, програм та кориÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑиÑтемою до %1. TrackingViewStep Feedback Відгуки UmountJob Unmount file systems. Демонтувати файлові ÑиÑтеми. No target system available. Ðемає доÑтупної цільової ÑиÑтеми. No rootMountPoint is set. Ðе вÑтановлено rootMountPoint. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Якщо за цим комп'ютером працюватимуть декілька кориÑтувачів, ви можете Ñтворити декілька облікових запиÑів піÑÐ»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Якщо за цим комп'ютером працюватимуть декілька кориÑтувачів, ви можете Ñтворити декілька облікових запиÑів піÑÐ»Ñ Ð²ÑтановленнÑ.</small> UsersQmlViewStep Users КориÑтувачі UsersViewStep Users КориÑтувачі VariantModel Key Column header for key/value Ключ Value Column header for key/value Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ VolumeGroupBaseDialog Create Volume Group Створити групу томів List of Physical Volumes СпиÑок фізичний томів Volume Group Name: Ðазва групи томів: Volume Group Type: Тип групи томів: Physical Extent Size: Розмір фізичного розширеннÑ: MiB МіБ Total Size: Загальний розмір: Used Size: ВикориÑтано: Total Sectors: Загалом Ñекторів: Quantity of LVs: КількіÑть логічних томів: WelcomePage Form Форма Select application and system language Виберіть мову програм Ñ– ÑиÑтеми Open donations website Відкрити Ñторінку Ñайта із поÑиланнÑми Ð´Ð»Ñ Ñ„Ñ–Ð½Ð°Ð½Ñової підтримки &Donate Підтримати &фінанÑово Open help and support website Відкрити Ñторінку Ñайта із поÑиланнÑми на довідку та технічну підтримку &Support Під&тримка Open issues and bug-tracking website Відкрити Ñторінку Ñайта ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° вадами у програмі &Known issues &Відомі проблеми Open release notes website Відкрити Ñторінку Ñайта із нотатками щодо випуÑку &Release notes При&мітки до випуÑку %1 support Підтримка %1 About %1 setup Про заÑіб Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ %1 About %1 installer Про заÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1 WelcomeQmlViewStep Welcome Вітаємо WelcomeViewStep Welcome Вітаємо ZfsJob Create ZFS pools and datasets Створити буфери Ñ– набори даних ZFS Failed to create zpool on Ðе вдалоÑÑ Ñтворити zpool на Configuration Error Помилка Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ No partitions are available for ZFS. Ðемає доÑтупних розділів Ð´Ð»Ñ ZFS. Internal data missing Ðе виÑтачає внутрішніх даних Failed to create zpool Ðе вдалоÑÑ Ñтворити zpool Failed to create dataset Ðе вдалоÑÑ Ñтворити набір даних The output was: Виведені дані: calamares-sidebar About Про програму Debug ДіагноÑтика Show information about Calamares Показати відомоÑті щодо Calamares Show debug information Показати діагноÑтичну інформацію finishedq Installation Completed Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾ %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Ðа ваш комп'ютер вÑтановлено %1.<br/> Тепер ви можете перезапуÑтити вашу нову ÑиÑтему або продовжити кориÑтуватиÑÑ Ñередовищем портативної ÑиÑтеми. Close Installer Закрити заÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Restart System ПерезапуÑтити ÑиÑтему <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>Повний журнал вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñано до файла installation.log у домашньому каталозі кориÑтувача портативної ÑиÑтеми.<br/> Цей журнал Ñкопійовано до /var/log/installation.log ÑиÑтеми призначеннÑ.</p> finishedq@mobile Installation Completed Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾ %1 has been installed on your computer.<br/> You may now restart your device. Ðа ваш комп'ютер вÑтановлено %1.<br/> Тепер ви можете перезавантажити приÑтрій. Close Закрити Restart ПерезапуÑтити i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Мови</h1></br> ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑиÑтемної локалі впливає на мову та набір Ñимволів Ð´Ð»Ñ Ð´ÐµÑких елементів інтерфейÑу командного Ñ€Ñдка. Зараз вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»Ñ– <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Локалі</h1></br> ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑиÑтемної локалі впливає на показ чиÑел та формат дат. Зараз вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»Ñ– <strong>%1</strong>. Back Ðазад keyboardq To activate keyboard preview, select a layout. Щоб активувати переглÑд клавіатури, виберіть розкладку. Keyboard Model: Модель клавіатури: Layouts Розкладки Type here to test your keyboard Ðапишіть тут, щоб перевірити клавіатуру Variants Варіанти localeq Change Змінити notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Це приклад нотаток щодо випуÑку.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice — потужний Ñ– вільний комплект офіÑних програм, Ñким кориÑтуютьÑÑ Ð¼Ñ–Ð»ÑŒÐ¹Ð¾Ð½Ð¸ людей з уÑього Ñвіту. До нього включено декілька програм, Ñкі роблÑть його найгнучкішим на ринку вільним комплектом офіÑних програм із відкритим кодом.<br/> Типовий варіант. LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. Якщо вам не потрібен комплект офіÑних програм, проÑто виберіть «Без офіÑного комплекту». Ви завжди зможете додати до вже вÑтановленої ÑиÑтеми ÑкийÑÑŒ комплект (або декілька комплектів), Ñкщо у цьому виникне потреба. No Office Suite Без офіÑного комплекту Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Створити мінімаліÑтичну робочу Ñтанцію, вилучити уÑÑ– зайві програми Ñ– вирішити згодом, що Ñаме Ñлід додати до ÑиÑтеми. Прикладами того, чого може не бути у такій ÑиÑтемі, Ñ” комплект офіÑних програм, програвачів мультимедійних даних, програм Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду зображень або друку на папері. Це буде лише Ñама ÑтільницÑ, програма Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ з файлами, програма Ð´Ð»Ñ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ°Ð¼Ð¸ та проÑта програма Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду інтернету. Minimal Install Мінімальне вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Please select an option for your install, or use the default: LibreOffice included. Будь лаÑка, виберіть варіант Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ ÑкориÑтайтеÑÑ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ð¼: LibreOffice включено. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Це приклад файла QML, у Ñкому параметри показано із викориÑтаннÑм Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° даних із блиманнÑм.</p> <p>У QML з RichText можна викориÑтовувати теґи HTML, а вміÑÑ‚ з Flickable Ñ” кориÑним Ð´Ð»Ñ ÑенÑорних екранів.</p> <p><b>Це текÑÑ‚ напівжирним</b></p> <p><i>Це текÑÑ‚ курÑивом</i></p> <p><u>Це підкреÑлений текÑÑ‚</u></p> <p><center>Цей фрагмент буде вирівнÑно за центром.</center></p> <p><s>Цей фрагмент перекреÑлено</s></p> <p>Приклад коду: <code>ls -l /home</code></p> <p><b>СпиÑки:</b></p> <ul> <li>СиÑтеми з процеÑорами Intel</li> <li>СиÑтеми з процеÑорами AMD</li> </ul> <p>Корегована вертикальна Ñмужка гортаннÑ, поточна ширина — 10.</p> Back Ðазад usersq Pick your user name and credentials to login and perform admin tasks Виберіть ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача та реєÑтраційні дані Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð°Ð´Ð¼Ñ–Ð½Ñ–Ñтративних завдань у ÑиÑтемі What is your name? Ваше ім'Ñ? Your Full Name Ваше ім'Ñ Ð¿Ð¾Ð²Ð½Ñ–Ñтю What name do you want to use to log in? Яке ім'Ñ Ð²Ð¸ бажаєте викориÑтовувати Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ? Login Name Ð—Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ If more than one person will use this computer, you can create multiple accounts after installation. Якщо за цим комп'ютером працюватимуть декілька кориÑтувачів, ви можете Ñтворити декілька облікових запиÑів піÑÐ»Ñ Ð²ÑтановленнÑ. Only lowercase letters, numbers, underscore and hyphen are allowed. Можна викориÑтовувати лише латинÑькі літери нижнього регіÑтру, цифри, Ñимволи підкреÑÐ»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° дефіÑи. root is not allowed as username. Ðе можна викориÑтовувати ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача «root». What is the name of this computer? Ðазва цього комп'ютера? Computer Name Ðазва комп'ютера This name will be used if you make the computer visible to others on a network. Цю назву буде викориÑтано, Ñкщо ви зробите комп'ютер видимим іншим у мережі. localhost is not allowed as hostname. «localhost» не можна викориÑтовувати Ñк назву вузла. Choose a password to keep your account safe. Оберіть пароль, щоб тримати ваш обліковий рахунок у безпеці. Password Пароль Repeat Password Повторіть пароль Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Введіть один й той Ñамий пароль двічі, Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ щодо помилок введеннÑ. Ðадійному паролю Ñлід міÑтити Ñуміш літер, чиÑел та розділових знаків, бути довжиною хоча б віÑім Ñимволів та регулÑрно змінюватиÑÑŒ. Validate passwords quality ПеревірÑти ÑкіÑть паролів When this box is checked, password-strength checking is done and you will not be able to use a weak password. Якщо позначено цей пункт, буде виконано перевірку ÑкладноÑті паролÑ. Ви не зможете ÑкориÑтатиÑÑ Ð½Ð°Ð´Ñ‚Ð¾ проÑтим паролем. Log in automatically without asking for the password Входити автоматично без Ð¿Ð°Ñ€Ð¾Ð»Ñ Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Можна викориÑтовувати лише латинÑькі літери, цифри, Ñимволи підкреÑÐ»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° дефіÑи; не менше двох Ñимволів. Reuse user password as root password ВикориÑтати пароль кориÑтувача Ñк пароль root Use the same password for the administrator account. ВикориÑтовувати той Ñамий пароль Ñ– Ð´Ð»Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ рахунку адмініÑтратора. Choose a root password to keep your account safe. Виберіть пароль root Ð´Ð»Ñ Ð·Ð°Ñ…Ð¸Ñту вашого облікового запиÑу. Root Password Пароль root Repeat Root Password Повторіть пароль root Enter the same password twice, so that it can be checked for typing errors. Введіть один й той Ñамий пароль двічі, щоб убезпечитиÑÑ Ð²Ñ–Ð´ помилок при введенні. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Вітаємо у заÑобі вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1 <quote>%2</quote></h3> <p>Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° задаÑть вам декілька питань Ñ– налаштує %1 Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ на вашому комп'ютері.</p> Support Підтримка Known issues Відомі вади Release notes Ðотатки щодо випуÑку Donate Підтримати фінанÑово calamares-calamares-2d126ae/lang/calamares_ur.ts000066400000000000000000005724031430147706700217510ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Error &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next &Back &Done &Cancel Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support Ùª 1 سپورٹ About %1 setup تقریبا٪ 1 سیٹ اپ About %1 installer Ù„Ú¯ بھگ٪ 1 انسٹال WelcomeQmlViewStep Welcome خوش آمدید WelcomeViewStep Welcome خوش آمدید ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About متعلق Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back واپس keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Ù„Û’ آؤٹ Type here to test your keyboard Variants متغیرات localeq Change تبدیلی notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back واپس usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Ùª 1 میں خوش آمدید<quote>2Ùª</quote>انسٹالر</h3> <p>ÛŒÛ Ù¾Ø±ÙˆÚ¯Ø±Ø§Ù… آپ سے Ú©Ú†Ú¾ سوالات پوچھے گا اور آپ Ú©Û’ کمپیوٹر پر٪ 1 مرتب کرے گا۔</p> Support حمائیت Known issues معلوم مسائل Release notes جاری Ú©Ø±Ø¯Û Ù†ÙˆÙ¹Ø³ Donate Ø¹Ø·ÛŒÛ calamares-calamares-2d126ae/lang/calamares_uz.ts000066400000000000000000005711671430147706700217670ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Error &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next &Back &Done &Cancel Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_vi.ts000066400000000000000000007100231430147706700217310ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings Quản lý cài đặt tá»± động gắn kết(auto-mount) BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong> Môi trưá»ng khởi động </strong> cá»§a hệ thống này. <br> <br> Các hệ thống x86 cÅ© hÆ¡n chỉ há»— trợ <strong> BIOS </strong>. <br> Các hệ thống hiện đại thưá»ng sá»­ dụng <strong> EFI </strong>, nhưng cÅ©ng có thể hiển thị dưới dạng BIOS nếu được khởi động ở chế độ tương thích. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Hệ thống này được khởi động bằng môi trưá»ng khởi động <strong> EFI </strong>. <br> <br> Äể định cấu hình khởi động từ môi trưá»ng EFI, trình cài đặt này phải triển khai ứng dụng trình tải khởi động, như <strong> GRUB </strong> hoặc <strong> systemd-boot </strong> trên <strong> Phân vùng hệ thống EFI </strong>. Äiá»u này là tá»± động, trừ khi bạn chá»n phân vùng thá»§ công, trong trưá»ng hợp này, bạn phải chá»n nó hoặc tá»± tạo nó. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Hệ thống này được khởi động vá»›i môi trưá»ng khởi động <strong> BIOS </strong>. <br> <br> Äể định cấu hình khởi động từ môi trưá»ng BIOS, trình cài đặt này phải cài đặt má»™t trình tải khởi động, chẳng hạn như <strong> GRUB </strong> ở đầu phân vùng hoặc trên <strong> Bản ghi khởi động chính </strong> gần đầu bảng phân vùng (ưu tiên). Äiá»u này là tá»± động, trừ khi bạn chá»n phân vùng thá»§ công, trong trưá»ng hợp đó, bạn phải tá»± thiết lập nó. BootLoaderModel Master Boot Record of %1 Bản ghi khởi động chính cá»§a %1 Boot Partition Phân vùng khởi động System Partition Phân vùng hệ thống Do not install a boot loader Không cài đặt bá»™ tải khởi động %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Trang trắng Calamares::DebugWindow Form Mẫu GlobalStorage Lưu trữ tổng quát JobQueue Hàng đợi công việc Modules Mô-Ä‘un Type: Kiểu: none không Interface: Giao diện: Crashes Calamares, so that Dr. Konqui can look at it. Gây crash Calamares, để Dr. Konqui có thể xem nó. Reloads the stylesheet from the branding directory. Tải lại stylesheet từ thư mục branding Uploads the session log to the configured pastebin. Äăng tải log cá»§a phiên này lên pastebin đã được cấu hình Send Session Log Gá»­i log cá»§a phiên này Reload Stylesheet Tải lại bảng định kiểu Displays the tree of widget names in the log (for stylesheet debugging). Hiá»…n thị cây cá»§a tên widget trong log(để gỡ lá»—i stylesheet) Widget Tree Cây công cụ Debug information Thông tin gỡ lá»—i Calamares::ExecutionViewStep Set up Thiết lập Install Cài đặt Calamares::FailJob Job failed (%1) Công việc thất bại (%1) Programmed job failure was explicitly requested. Lá»—i công việc được lập trình đã được yêu cầu rõ ràng. Calamares::JobThread Done Xong Calamares::NamedJob Example job (%1) Ví dụ vá» công việc (%1) Calamares::ProcessJob Run command '%1' in target system. Chạy lệnh '%1' trong hệ thống đích. Run command '%1'. Chạy lệnh '%1'. Running command %1 %2 Äang chạy lệnh %1 %2 Calamares::PythonJob Running %1 operation. Äang chạy %1 thao tác. Bad working directory path Sai đưá»ng dẫn thư mục làm việc Working directory %1 for python job %2 is not readable. Không thể Ä‘á»c thư mục làm việc %1 cá»§a công việc python %2. Bad main script file Sai tệp kịch bản chính Main script file %1 for python job %2 is not readable. Không thể Ä‘á»c tập tin kịch bản chính %1 cá»§a công việc python %2. Boost.Python error in job "%1". Lá»—i Boost.Python trong công việc "%1". Calamares::QmlViewStep Loading ... Äang tải ... QML Step <i>%1</i>. QML bước <i>%1</i>. Loading failed. Không tải được. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Kiểm tra các yêu cầu cho mô-Ä‘un <i> %1 </i> đã hoàn tất. Waiting for %n module(s). Äang đợi %n mô-Ä‘un. (%n second(s)) (%n giây) System-requirements checking is complete. Kiểm tra yêu cầu hệ thống đã hoàn tất. Calamares::ViewManager Setup Failed Thiết lập không thành công Installation Failed Cài đặt thất bại Error Lá»—i &Yes &Có &No &Không &Close Äón&g Install Log Paste URL URL để gá»­i nhật ký cài đặt The upload was unsuccessful. No web-paste was done. Tải lên không thành công. Không có quá trình gá»­i lên web nào được thá»±c hiện. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed Khởi tạo không thành công %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 không thể được cài đặt.Không thể tải tất cả các mô-Ä‘un đã định cấu hình. Äây là vấn đỠvá»›i cách phân phối sá»­ dụng. <br/>The following modules could not be loaded: <br/> Không thể tải các mô-Ä‘un sau: Continue with setup? Tiếp tục thiết lập? Continue with installation? Tiếp tục cài đặt? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Chương trình thiết lập %1 sắp thá»±c hiện các thay đổi đối vá»›i đĩa cá»§a bạn để thiết lập %2. <br/> <strong> Bạn sẽ không thể hoàn tác các thay đổi này. </strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Trình cài đặt %1 sắp thá»±c hiện các thay đổi đối vá»›i đĩa cá»§a bạn để cài đặt %2. <br/> <strong> Bạn sẽ không thể hoàn tác các thay đổi này. </strong> &Set up now &Thiết lập ngay &Install now &Cài đặt ngay Go &back &Quay lại &Set up &Thiết lập &Install &Cài đặt Setup is complete. Close the setup program. Thiết lập hoàn tất. Äóng chương trình cài đặt. The installation is complete. Close the installer. Quá trình cài đặt hoàn tất. Äóng trình cài đặt. Cancel setup without changing the system. Há»§y thiết lập mà không thay đổi hệ thống. Cancel installation without changing the system. Há»§y cài đặt mà không thay đổi hệ thống. &Next &Tiếp &Back &Quay lại &Done &Xong &Cancel &Há»§y Cancel setup? Há»§y thiết lập? Cancel installation? Há»§y cài đặt? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Bạn có thá»±c sá»± muốn há»§y quá trình thiết lập hiện tại không? Chương trình thiết lập sẽ thoát và tất cả các thay đổi sẽ bị mất. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Bạn có thá»±c sá»± muốn há»§y quá trình cài đặt hiện tại không? Trình cài đặt sẽ thoát và tất cả các thay đổi sẽ bị mất. CalamaresPython::Helper Unknown exception type Không nhận ra kiểu cá»§a ngoại lệ unparseable Python error lá»—i không thể phân tích cú pháp Python unparseable Python traceback truy vết không thể phân tích cú pháp Python Unfetchable Python error. Lá»—i Python không thể try cập. CalamaresWindow %1 Setup Program %1 Thiết lập chương trình %1 Installer %1 cài đặt hệ Ä‘iá»u hành ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... Thu thập thông tin hệ thống ... ChoicePage Form Biểu mẫu Select storage de&vice: &Chá»n thiết bị lưu trữ: Current: Hiện tại: After: Sau khi cài đặt: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong> Phân vùng thá»§ công </strong> <br/> Bạn có thể tá»± tạo hoặc thay đổi kích thước phân vùng. Reuse %1 as home partition for %2. Sá»­ dụng lại %1 làm phân vùng chính cho %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong> Chá»n má»™t phân vùng để thu nhá», sau đó kéo thanh dưới cùng để thay đổi kích thước </strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 sẽ được thu nhá» thành %2MiB và phân vùng %3MiB má»›i sẽ được tạo cho %4. Boot loader location: Vị trí bá»™ tải khởi động: <strong>Select a partition to install on</strong> <strong> Chá»n phân vùng để cài đặt </strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Không thể tìm thấy phân vùng hệ thống EFI ở bất kỳ đâu trên hệ thống này. Vui lòng quay lại và sá»­ dụng phân vùng thá»§ công để thiết lập %1. The EFI system partition at %1 will be used for starting %2. Phân vùng hệ thống EFI tại %1 sẽ được sá»­ dụng để bắt đầu %2. EFI system partition: Phân vùng hệ thống EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Thiết bị lưu trữ này dưá»ng như không có hệ Ä‘iá»u hành trên đó. Bạn muốn làm gì? <br/> Bạn sẽ có thể xem xét và xác nhận lá»±a chá»n cá»§a mình trước khi thá»±c hiện bất kỳ thay đổi nào đối vá»›i thiết bị lưu trữ. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong> Xóa đĩa </strong> <br/> Thao tác này sẽ <font color = "red"> xóa </font> tất cả dữ liệu hiện có trên thiết bị lưu trữ đã chá»n. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong> Cài đặt cùng vá»›i </strong> <br/> Trình cài đặt sẽ thu nhá» phân vùng để nhưá»ng chá»— cho %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong> Thay thế phân vùng </strong> <br/> Thay thế phân vùng bằng %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Thiết bị lưu trữ này có %1 trên đó. Bạn muốn làm gì? <br/> Bạn sẽ có thể xem lại và xác nhận lá»±a chá»n cá»§a mình trước khi thá»±c hiện bất kỳ thay đổi nào đối vá»›i thiết bị lưu trữ. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Thiết bị lưu trữ này đã có hệ Ä‘iá»u hành trên đó. Bạn muốn làm gì? <br/> Bạn sẽ có thể xem lại và xác nhận lá»±a chá»n cá»§a mình trước khi thá»±c hiện bất kỳ thay đổi nào đối vá»›i thiết bị lưu trữ. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Thiết bị lưu trữ này có nhiá»u hệ Ä‘iá»u hành trên đó. Bạn muốn làm gì? <br/> Bạn sẽ có thể xem lại và xác nhận lá»±a chá»n cá»§a mình trước khi thá»±c hiện bất kỳ thay đổi nào đối vá»›i thiết bị lưu trữ. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> Thiết bị lưu trữ này đã có sẵn hệ Ä‘iá»u hành, nhưng bảng phân vùng <strong> %1 </strong> khác vá»›i bảng <strong> %2 </strong> cần thiết. <br/> This storage device has one of its partitions <strong>mounted</strong>. Thiết bị lưu trữ này có má»™t trong các phân vùng được <strong> gắn kết </strong>. This storage device is a part of an <strong>inactive RAID</strong> device. Thiết bị lưu trữ này là má»™t phần cá»§a thiết bị <strong> RAID không hoạt động </strong>. No Swap Không hoán đổi Reuse Swap Sá»­ dụng lại Hoán đổi Swap (no Hibernate) Hoán đổi (không ngá»§ đông) Swap (with Hibernate) Hoán đổi (ngá»§ đông) Swap to file Hoán đổi sang tệp ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Xóa gắn kết cho các hoạt động phân vùng trên %1 Clearing mounts for partitioning operations on %1. Xóa các gắn kết cho các hoạt động phân vùng trên %1. Cleared all mounts for %1 Äã xóa tất cả các gắn kết cho %1 ClearTempMountsJob Clear all temporary mounts. Xóa tất cả các gắn kết tạm thá»i. Clearing all temporary mounts. Äang xóa tất cả các gắn kết tạm thá»i. Cleared all temporary mounts. Xóa tất cả các gắn kết tạm thá»i. CommandList Could not run command. Không thể chạy lệnh. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Lệnh chạy trong môi trưá»ng máy chá»§ và cần biết đưá»ng dẫn gốc, nhưng không có biến rootMountPoint nào được xác định. The command needs to know the user's name, but no username is defined. Lệnh cần biết tên cá»§a ngưá»i dùng, nhưng không có tên ngưá»i dùng nào được xác định. Config Set keyboard model to %1.<br/> Thiệt lập bàn phím kiểu %1.<br/> Set keyboard layout to %1/%2. Thiết lập bố cục bàn phím thành %1/%2. Set timezone to %1/%2. Thiết lập múi giá» sang %1/%2. The system language will be set to %1. Ngôn ngữ hệ thống sẽ được đặt thành %1. The numbers and dates locale will be set to %1. Äịnh dạng ngôn ngữ cá»§a số và ngày tháng sẽ được chuyển thành %1. Network Installation. (Disabled: Incorrect configuration) Cài đặt mạng. (Tắt: Sai cấu hình) Network Installation. (Disabled: Received invalid groups data) Cài đặt mạng. (Tắt: Nhận được dữ liệu nhóm bị sai) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Chá»n phân vùng Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Cài đặt mạng. (Tắt: Không thể lấy được danh sách gói ứng dụng, kiểm tra kết nối mạng) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Máy tính này không đạt đủ yêu cấu tối thiểu để thiết lập %1.<br/>Không thể tiếp tục thiết lập. <a href="#details">Chi tiết...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Máy tính này không đạt đủ yêu cấu tối thiểu để cài đặt %1.<br/>Không thể tiếp tục cài đặt. <a href="#details">Chi tiết...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Máy tính này không đạt đủ yêu cấu khuyến nghị để thiết lập %1.<br/>Thiết lập có thể tiếp tục, nhưng má»™t số tính năng có thể sẽ bị tắt. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Máy tính này không đạt đủ yêu cấu khuyến nghị để cài đặt %1.<br/>Cài đặt có thể tiếp tục, nhưng má»™t số tính năng có thể sẽ bị tắt. This program will ask you some questions and set up %2 on your computer. Chương trình này sẽ há»i bạn vài câu há»i và thiết lập %2 trên máy tính cá»§a bạn. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Chào mừng đến vá»›i chương trình Calamares để thiết lập %1</h1> <h1>Welcome to %1 setup</h1> <h1>Chào mừng đến vá»›i thiết lập %1 </h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Chào mừng đến vá»›i chương trình Calamares để cài đặt %1</h1> <h1>Welcome to the %1 installer</h1> <h1>Chào mừng đến vá»›i bá»™ cài đặt %1 </h1> Your username is too long. Tên bạn hÆ¡i dài. '%1' is not allowed as username. '%1' không được phép dùng làm tên. Your username must start with a lowercase letter or underscore. Tên ngưá»i dùng cá»§a bạn phải bắt đầu bằng chữ cái viết thưá»ng hoặc dấu gạch dưới. Only lowercase letters, numbers, underscore and hyphen are allowed. Chỉ cho phép các chữ cái viết thưá»ng, số, gạch dưới và gạch nối. Your hostname is too short. Tên máy chá»§ quá ngắn. Your hostname is too long. Tên máy chá»§ quá dài. '%1' is not allowed as hostname. '%1' không được phép dùng làm tên máy chá»§. Only letters, numbers, underscore and hyphen are allowed. Chỉ cho phép các chữ cái, số, gạch dưới và gạch nối. Your passwords do not match! Mật khẩu nhập lại không khá»›p! OK! Setup Failed Thiết lập không thành công Installation Failed Cài đặt thất bại The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Thiết lập xong Installation Complete Cài đặt xong The setup of %1 is complete. Thiết lập %1 đã xong. The installation of %1 is complete. Cài đặt cá»§a %1 đã xong. Package Selection Lá»±a chá»n gói Please pick a product from the list. The selected product will be installed. Vui lòng chá»n má»™t sản phẩm từ danh sách. Sản phẩm đã chá»n sẽ được cài đặt. Packages Gói Install option: <strong>%1</strong> None Summary Tổng quan This is an overview of what will happen once you start the setup procedure. Äây là tổng quan vá» những gì sẽ xảy ra khi bạn bắt đầu quy trình thiết lập. This is an overview of what will happen once you start the install procedure. Äây là tổng quan vá» những gì sẽ xảy ra khi bạn bắt đầu quy trình cài đặt. ContextualProcessJob Contextual Processes Job Công việc xá»­ lý theo ngữ cảnh CreatePartitionDialog Create a Partition Tạo phân vùng Si&ze: &Kích thước: MiB MiB Partition &Type: &Loại phân vùng: Primar&y E&xtended &Mở rá»™ng Fi&le System: &Tập tin hệ thống: LVM LV name Tên LVM LV &Mount Point: &Äiểm gắn kết: Flags: Cá»: Label for the filesystem FS Label: En&crypt &Mã hóa Logical Lô-gic Primary SÆ¡ cấp GPT GPT Mountpoint already in use. Please select another one. Äiểm gắn kết đã được sá»­ dụng. Vui lòng chá»n má»™t cái khác. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Tạo phân vùng %2MiB má»›i trên %4 (%3) vá»›i hệ thống tệp %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Tạo phân vùng <strong>%2MiB </strong> má»›i trên <strong>%4 </strong> (%3) vá»›i hệ thống tệp <strong>%1 </strong>. Creating new %1 partition on %2. Tạo phân vùng %1 má»›i trên %2. The installer failed to create partition on disk '%1'. Trình cài đặt không tạo được phân vùng trên đĩa '%1'. CreatePartitionTableDialog Create Partition Table Tạo bảng phân vùng Creating a new partition table will delete all existing data on the disk. Tạo bảng phân vùng má»›i sẽ xóa tất cả dữ liệu hiện có trên đĩa. What kind of partition table do you want to create? Bạn muốn tạo loại bảng phân vùng nào? Master Boot Record (MBR) Bản ghi khởi động chính (MBR) GUID Partition Table (GPT) Bảng phân vùng GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Tạo bảng phân vùng %1 má»›i trên %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Tạo bảng phân vùng <strong>%1 </strong> má»›i trên <strong>%2 </strong> (%3). Creating new %1 partition table on %2. Tạo bảng phân vùng %1 má»›i trên %2. The installer failed to create a partition table on %1. Trình cài đặt không tạo được bảng phân vùng trên %1. CreateUserJob Create user %1 Khởi tạo ngưá»i dùng %1 Create user <strong>%1</strong>. Tạo ngưá»i dùng <strong>%1</strong>. Preserving home directory Giữ lại thư mục home Creating user %1 Äang tạo ngưá»i dùng %1 Configuring user %1 Äang cấu hình cho ngưá»i dùng %1 Setting file permissions Äang thiết lập quyá»n hạn vá»›i tập tin CreateVolumeGroupDialog Create Volume Group Tạo nhóm ổ đĩa CreateVolumeGroupJob Create new volume group named %1. Tạo nhóm ổ đĩa má»›i có tên %1. Create new volume group named <strong>%1</strong>. Tạo nhóm ổ đĩa má»›i có tên <strong>%1</strong>. Creating new volume group named %1. Äang tạo nhóm ổ đĩa má»›i có tên %1. The installer failed to create a volume group named '%1'. Trình cài đặt không tạo được nhóm ổ đĩa có tên '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Há»§y kích hoạt nhóm ổ đĩa có tên %1. Deactivate volume group named <strong>%1</strong>. Há»§y kích hoạt nhóm ổ đĩa có tên <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Trình cài đặt không thể há»§y kích hoạt nhóm ổ đĩa có tên %1. DeletePartitionJob Delete partition %1. Xóa phân vùng %1. Delete partition <strong>%1</strong>. Xóa phân vùng <strong>%1</strong>. Deleting partition %1. Äang xóa phân vùng %1. The installer failed to delete partition %1. Trình cài đặt không thể xóa phân vùng %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. Thiết bị này có bảng phân vùng <strong> %1 </strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Äây là thiết bị <strong> vòng lặp </strong>. <br> <br> Äây là thiết bị giả không có bảng phân vùng giúp tệp có thể truy cập được dưới dạng thiết bị khối. Loại thiết lập này thưá»ng chỉ chứa má»™t hệ thống tệp duy nhất. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Trình cài đặt này <strong> không thể phát hiện bảng phân vùng </strong> trên thiết bị lưu trữ đã chá»n. <br> <br> Thiết bị không có bảng phân vùng hoặc bảng phân vùng bị há»ng hoặc thuá»™c loại không xác định. <br> Äiá»u này trình cài đặt có thể tạo bảng phân vùng má»›i cho bạn, tá»± động hoặc thông qua trang phân vùng thá»§ công. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br> <br> Äây là loại bảng phân vùng được khuyến nghị cho các hệ thống hiện đại bắt đầu từ môi trưá»ng khởi động <strong> EFI </strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br> <br> Loại bảng phân vùng này chỉ được khuyến khích trên các hệ thống cÅ© hÆ¡n bắt đầu từ môi trưá»ng khởi động <strong> BIOS </strong>. GPT được khuyến nghị trong hầu hết các trưá»ng hợp khác. <br> <br> <strong> Cảnh báo: </strong> bảng phân vùng MBR là tiêu chuẩn thá»i đại MS-DOS lá»—i thá»i. <br> Chỉ có 4 phân vùng <em> chính </em> có thể được tạo và trong số 4 phân vùng đó, má»™t phân vùng có thể là phân vùng <em> mở rá»™ng </em>, đến lượt nó có thể chứa nhiá»u phân vùng <em> logic </em>. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Loại <strong> bảng phân vùng </strong> trên thiết bị lưu trữ đã chá»n. <br> <br> Cách duy nhất để thay đổi loại bảng phân vùng là xóa và tạo lại bảng phân vùng từ đầu, việc này sẽ há»§y tất cả dữ liệu trên thiết bị lưu trữ. <br> Trình cài đặt này sẽ giữ bảng phân vùng hiện tại trừ khi bạn chá»n rõ ràng khác. <br> Nếu không chắc chắn, trên các hệ thống hiện đại, GPT được ưu tiên hÆ¡n. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Lưu cấu hình LUKS cho Dracut vào %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Không lưu cấu hình LUKS cho Dracut: phân vùng "/" không được mã hoá Failed to open %1 Mở %1 thất bại DummyCppJob Dummy C++ Job Công việc C++ ví dụ EditExistingPartitionDialog Edit Existing Partition Chỉnh sá»­a phân vùng hiện có Con&tent: &Keep &Giữ Format Äịnh dạng Warning: Formatting the partition will erase all existing data. Cảnh báo: Äịnh dạng phân vùng sẽ xóa tất cả dữ liệu hiện có. &Mount Point: &Äiểm gắn kết: Si&ze: &Kích thước: MiB MiB Fi&le System: &Tập tin hệ thống: Flags: Cá»: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form Biểu mẫu En&crypt system &Mã hóa hệ thống Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Cụm mật khẩu Confirm passphrase Xác nhận cụm mật khẩu Please enter the same passphrase in both boxes. Vui lòng nhập cùng má»™t cụm mật khẩu vào cả hai há»™p. ErrorDialog Details: Would you like to paste the install log to the web? Bạn có muốn gá»­i nhật ký cài đặt lên web không? FillGlobalStorageJob Set partition information Äặt thông tin phân vùng Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Cài đặt %1 trên phân vùng hệ thống <strong> má»›i </strong> %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Cài đặt %2 trên phân vùng hệ thống %3 <strong> %1 </strong>. Install boot loader on <strong>%1</strong>. Cài đặt trình tải khởi động trên <strong> %1 </strong>. Setting up mount points. Thiết lập Ä‘iểm gắn kết. FinishedPage Form Biểu mẫu &Restart now &Khởi động lại ngay <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Hoàn thành.</h1><br/>%1 đã được cài đặt thành công.<br/>Hãy khởi động lại máy tính. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Tích chá»n để khởi động lại sau khi ấn <span style="font-style:italic;">Hoàn thành</span> hoặc đóng phần má»m thiết lập.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Hoàn thành.</h1><br/>%1 đã được cài đặt trên máy.<br/>hãy khởi động lại, hoặc cÅ©ng có thể tiếp tục sá»­ dụng %2 môi trưá»ng USB. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Tích chá»n để khởi động lại sau khi ấn <span style="font-style:italic;">Hoàn thành</span> hoặc đóng phần má»m cài đặt.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Thiết lập lá»—i</h1><br/>%1 đã không được thiết lập trên máy tính.<br/>tin báo lá»—i: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Cài đặt lá»—i</h1><br/>%1 chưa được cài đặt trên máy tính<br/>Tin báo lá»—i: %2. FinishedQmlViewStep Finish Hoàn thành FinishedViewStep Finish Hoàn thành FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Äịnh dạng phân vùng %1 (tập tin hệ thống:%2, kích thước: %3 MiB) trên %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Äịnh dạng <strong>%3MiB</strong> phân vùng <strong>%1</strong>vá»›i tập tin hệ thống <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) %1 (%2) Formatting partition %1 with file system %2. Äang định dạng phân vùng %1 vá»›i tập tin hệ thống %2. The installer failed to format partition %1 on disk '%2'. Không thể định dạng %1 ở đĩa '%2'. GeneralRequirements has at least %1 GiB available drive space có ít nhất %1 GiB dung lượng ổ đĩa khả dụng There is not enough drive space. At least %1 GiB is required. Không có đủ dung lượng ổ đĩa. Ãt nhất %1 GiB là bắt buá»™c. has at least %1 GiB working memory có ít nhất %1 GiB bá»™ nhá»› làm việc The system does not have enough working memory. At least %1 GiB is required. Hệ thống không có đủ bá»™ nhá»› hoạt động. Ãt nhất %1 GiB là bắt buá»™c. is plugged in to a power source được cắm vào nguồn Ä‘iện The system is not plugged in to a power source. Hệ thống chưa được cắm vào nguồn Ä‘iện. is connected to the Internet được kết nối vá»›i Internet The system is not connected to the Internet. Hệ thống không được kết nối vá»›i Internet. is running the installer as an administrator (root) Ä‘ang chạy trình cài đặt vá»›i tư cách quản trị viên (root) The setup program is not running with administrator rights. Chương trình thiết lập không chạy vá»›i quyá»n quản trị viên. The installer is not running with administrator rights. Trình cài đặt không chạy vá»›i quyá»n quản trị viên. has a screen large enough to show the whole installer có màn hình đủ lá»›n để hiển thị toàn bá»™ trình cài đặt The screen is too small to display the setup program. Màn hình quá nhỠđể hiển thị chương trình cài đặt. The screen is too small to display the installer. Màn hình quá nhỠđể hiển thị trình cài đặt. HostInfoJob Collecting information about your machine. Thu thập thông tin vá» máy cá»§a bạn. IDJob OEM Batch Identifier Äịnh danh lô OEM Could not create directories <code>%1</code>. Không thể tạo thư mục <code> %1 </code>. Could not open file <code>%1</code>. Không thể mở được tệp <code> %1 </code>. Could not write to file <code>%1</code>. Không thể ghi vào tệp <code> %1 </code>. InitcpioJob Creating initramfs with mkinitcpio. Äang tạo initramfs bằng mkinitcpio. InitramfsJob Creating initramfs. Äang tạo initramfs. InteractiveTerminalPage Konsole not installed Konsole chưa được cài đặt Please install KDE Konsole and try again! Vui lòng cài đặt KDE Konsole rồi thá»­ lại! Executing script: &nbsp;<code>%1</code> Äang thá»±c thi kịch bản: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Kịch bản KeyboardQmlViewStep Keyboard Bàn phím KeyboardViewStep Keyboard Bàn phím LCLocaleDialog System locale setting Cài đặt ngôn ngữ hệ thống The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Thiết lập ngôn ngữ hệ thống ảnh hưởng tá»›i ngôn ngữ và bá»™ kí tá»± cá»§a má»™t vài thành phần trong giao diện dòng lệnh cho ngưá»i dùng.<br/>Thiết lập hiện tại là <strong>%1</strong>. &Cancel &Huá»· bá» &OK &OK LOSHJob Configuring encrypted swap. Äang cấu hình hoán đổi mã hoá No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form Biểu mẫu <h1>License Agreement</h1> <h1>Äiá»u khoản giấy phép</h1> I accept the terms and conditions above. Tôi đồng ý vá»›i Ä‘iá»u khoản và Ä‘iá»u kiện trên. Please review the End User License Agreements (EULAs). Vui lòng Ä‘á»c thoả thuận giấy phép ngưá»i dùng cuối (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Quy trình thiết lập này sẽ cài đặt phần má»m độc quyá»n tuân theo các Ä‘iá»u khoản cấp phép. If you do not agree with the terms, the setup procedure cannot continue. Nếu bạn không đồng ý vá»›i các Ä‘iá»u khoản, quy trình thiết lập không thể tiếp tục. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Quy trình thiết lập này có thể cài đặt phần má»m độc quyá»n tuân theo các Ä‘iá»u khoản cấp phép để cung cấp các tính năng bổ sung và nâng cao trải nghiệm ngưá»i dùng. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Nếu bạn không đồng ý vá»›i các Ä‘iá»u khoản, phần má»m độc quyá»n sẽ không được cài đặt và các giải pháp thay thế nguồn mở sẽ được sá»­ dụng thay thế. LicenseViewStep License Giấy phép LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>trình Ä‘iá»u khiển %1</strong><br/>bởi %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>trình Ä‘iá»u khiển đồ hoạc %1</strong><br/><font color="Grey">bởi %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>plugin trình duyệt %1</strong><br/><font color="Grey">bởi %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">bởi %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>gói %1</strong><br/><font color="Grey">bởi %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">bởi %2</font> File: %1 Tệp: %1 Hide license text Ẩn thông tin giấy phép Show the license text Hiện thông tin giấy phép Open license agreement in browser. Mở Ä‘iá»u khoản giấy phép trên trình duyệt. LocalePage Region: Khu vá»±c: Zone: Vùng: &Change... &Thay đổi... LocaleQmlViewStep Location Vị trí LocaleTests Quit LocaleViewStep Location Vị trí LuksBootKeyFileJob Configuring LUKS key file. Äịnh cấu hình tệp khóa LUKS. No partitions are defined. Không có phân vùng nào được xác định. Encrypted rootfs setup error Lá»—i thiết lập rootfs mã hóa Root partition %1 is LUKS but no passphrase has been set. Phân vùng gốc %1 là LUKS nhưng không có cụm mật khẩu nào được đặt. Could not create LUKS key file for root partition %1. Không thể tạo tệp khóa LUKS cho phân vùng gốc %1. Could not configure LUKS key file on partition %1. Không thể định cấu hình tệp khóa LUKS trên phân vùng %1. MachineIdJob Generate machine-id. Tạo ID máy. Configuration Error Lá»—i cấu hình No root mount point is set for MachineId. Không có Ä‘iểm gắn kết gốc nào được đặt cho ID máy Map Timezone: %1 Múi giá»: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. Vui lòng chá»n vị trí ưa thích cá»§a bạn trên bản đồ để trình cài đặt có thể đỠxuất ngôn ngữ và cài đặt múi giá» cho bạn. Bạn có thể tinh chỉnh các cài đặt được đỠxuất bên dưới. Tìm kiếm bản đồ bằng cách kéo để di chuyển và sá»­ dụng các nút +/- để phóng to / thu nhá» hoặc sá»­ dụng cuá»™n chuá»™t để phóng to. NetInstallViewStep Package selection Chá»n phân vùng Office software Phần má»m văn phòng Office package Gói văn phòng Browser software Phần má»m trình duyệt Browser package Gói trình duyệt Web browser Trình duyệt web Kernel label for netinstall module, Linux kernel Lõi Services label for netinstall module, system services Dịch vụ Login label for netinstall module, choose login manager Äăng nhập Desktop label for netinstall module, choose desktop environment Màn hình chính Communication label for netinstall module Cá»™ng đồng Development label for netinstall module Phát triển Office label for netinstall module Văn phòng Multimedia label for netinstall module Äa phương tiện Internet label for netinstall module Mạng Internet Theming label for netinstall module Chá»§ đỠGaming label for netinstall module Trò chÆ¡i Utilities label for netinstall module Tiện ích Applications Ứng dụng 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. PackageModel Name Tên Description Mô tả Page_Keyboard Form Biểu mẫu Keyboard Model: Mẫu bàn phím: Type here to test your keyboard Gõ vào đây để thá»­ bàn phím Page_UserSetup Form Mẫu What is your name? Hãy cho Vigo biết tên đầy đủ cá»§a bạn? Your Full Name Tên đầy đủ What name do you want to use to log in? Bạn sẽ dùng tên nào để đăng nhập vào máy tính? login Tên đăng nhập What is the name of this computer? Tên máy tính này là? <small>This name will be used if you make the computer visible to others on a network.</small> <small>Tên này được dùng nếu máy tính được nhìn thấy trong mạng.</small> Computer Name Tên máy Choose a password to keep your account safe. Chá»n má»™t mật khẩu để giữ an toàn cho tài khoản cá»§a bạn. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Nhập mật khẩu hai lần giống nhau để kiểm tra nếu gõ sai.Má»™t mật khẩu tốt được kết hợp giữ ký tá»±, số và ký tá»± đặc biệt; ít nhất 8 ký tá»± và nên được thay đổi định kỳ.</small> Password Mật khẩu Repeat Password Nhập lại mật khẩu When this box is checked, password-strength checking is done and you will not be able to use a weak password. Khi chá»n mục này, bạn có thể chá»n mật khẩu yếu. Require strong passwords. Yêu cầu mật khẩu mạnh. Log in automatically without asking for the password. Tá»± đăng nhật không cần mật khẩu. Use the same password for the administrator account. Dùng cùng má»™t mật khẩu cho tài khoản quản trị. Choose a password for the administrator account. Chá»n má»™t mật khẩu cho tài khoản quản trị. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Nhập mật khẩu hai lần giống nhau để kiểm tra nếu gõ sai.</small> PartitionLabelsView Root Gốc Home Nhà Boot Khởi động EFI system Hệ thống EFI Swap Hoán đổi New partition for %1 Phân vùng má»›i cho %1 New partition Phân vùng má»›i %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Không gian trống New partition Phân vùng má»›i Name Tên File System Tập tin hệ thống File System Label Mount Point Äiểm gắn kết Size Kích cỡ PartitionPage Form Biểu mẫu Storage de&vice: Thiết &bị lưu trữ: &Revert All Changes &Hoàn tác tất cả thay đổi New Partition &Table Phân vùng &Bảng má»›i Cre&ate &Tạo &Edit &Sá»­a &Delete &Xóa New Volume Group Nhóm ổ đĩa má»›i Resize Volume Group Thay đổi kích thước nhóm ổ đĩa Deactivate Volume Group Há»§y kích hoạt nhóm ổ đĩa Remove Volume Group Xóa nhóm ổ đĩa I&nstall boot loader on: &Cài đặt bá»™ tải khởi động trên: Are you sure you want to create a new partition table on %1? Bạn có chắc chắn muốn tạo má»™t bảng phân vùng má»›i trên %1 không? Can not create new partition Không thể tạo phân vùng má»›i The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Bảng phân vùng trên %1 đã có %2 phân vùng chính và không thể thêm được nữa. Vui lòng xóa má»™t phân vùng chính và thêm má»™t phân vùng mở rá»™ng, thay vào đó. PartitionViewStep Gathering system information... Thu thập thông tin hệ thống ... Partitions Phân vùng Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: Hiện tại: After: Sau: No EFI system partition configured Không có hệ thống phân vùng EFI được cài đặt EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS Lá»±a chá»n dùng GPT trên BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted Phân vùng khởi động không được mã hóa A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Má»™t phân vùng khởi động riêng biệt đã được thiết lập cùng vá»›i má»™t phân vùng gốc được mã hóa, nhưng phân vùng khởi động không được mã hóa. <br/> <br/> Có những lo ngại vá» bảo mật vá»›i loại thiết lập này, vì các tệp hệ thống quan trá»ng được lưu giữ trên má»™t phân vùng không được mã hóa . <br/> Bạn có thể tiếp tục nếu muốn, nhưng việc mở khóa hệ thống tệp sẽ diá»…n ra sau trong quá trình khởi động hệ thống. <br/> Äể mã hóa phân vùng khởi động, hãy quay lại và tạo lại nó, chá»n <strong> Mã hóa </strong> trong phân vùng cá»­a sổ tạo. has at least one disk device available. có sẵn ít nhất má»™t thiết bị đĩa. There are no partitions to install on. Không có phân vùng để cài đặt. PlasmaLnfJob Plasma Look-and-Feel Job Công việc Plasma Look-and-Feel Could not select KDE Plasma Look-and-Feel package Không thể chá»n gói KDE Plasma Look-and-Feel PlasmaLnfPage Form Biểu mẫu Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Vui lòng chá»n giao diện cho Máy tính để bàn KDE Plasma. Bạn cÅ©ng có thể bá» qua bước này và định cấu hình giao diện sau khi hệ thống được thiết lập. Nhấp vào lá»±a chá»n giao diện sẽ cung cấp cho bạn bản xem trước trá»±c tiếp cá»§a giao diện đó. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Vui lòng chá»n giao diện cho Máy tính để bàn KDE Plasma. Bạn cÅ©ng có thể bá» qua bước này và định cấu hình giao diện sau khi hệ thống được thiết lập. Nhấp vào lá»±a chá»n giao diện sẽ cung cấp cho bạn bản xem trước trá»±c tiếp cá»§a giao diện đó. PlasmaLnfViewStep Look-and-Feel Look-and-Feel PreserveFiles Saving files for later ... Äang lưu tập tin để dùng sau ... No files configured to save for later. Không có tệp nào được định cấu hình để lưu sau này. Not all of the configured files could be preserved. Không phải tất cả các tệp đã định cấu hình Ä‘á»u có thể được giữ nguyên. ProcessResult There was no output from the command. Không có đầu ra từ lệnh. Output: Äầu ra: External command crashed. Lệnh bên ngoài bị lá»—i. Command <i>%1</i> crashed. Lệnh <i>%1</i> bị lá»—i. External command failed to start. Lệnh ngoài không thể bắt đầu. Command <i>%1</i> failed to start. Lệnh <i>%1</i> không thể bắt đầu. Internal error when starting command. Lá»—i ná»™i bá»™ khi bắt đầu lệnh. Bad parameters for process job call. Tham số không hợp lệ cho lệnh gá»i công việc cá»§a quy trình. External command failed to finish. Không thể hoàn tất lệnh bên ngoài. Command <i>%1</i> failed to finish in %2 seconds. Lệnh <i>%1</i> không thể hoàn thành trong %2 giây. External command finished with errors. Lệnh bên ngoài kết thúc vá»›i lá»—i. Command <i>%1</i> finished with exit code %2. Lệnh <i>%1</i> hoàn thành vá»›i lá»—i %2. QObject %1 (%2) %1 (%2) unknown không xác định extended gia tăng unformatted không định dạng swap hoán đổi Default Mặc định File not found Không tìm thấy tập tin Path <pre>%1</pre> must be an absolute path. ÄÆ°á»ng dẫn <pre>%1</pre> phải là đưá»ng dẫn tuyệt đối. Directory not found Thư mục không tìm thấy Could not create new random file <pre>%1</pre>. Không thể tạo tập tin ngẫu nhiên <pre>%1</pre>. No product Không có sản phẩm No description provided. Không có mô tả được cung cấp. (no mount point) (không có Ä‘iểm gắn kết) Unpartitioned space or unknown partition table Không gian chưa được phân vùng hoặc bảng phân vùng không xác định Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p> Máy tính này không đáp ứng má»™t số yêu cầu được đỠxuất để thiết lập %1. <br/> Có thể tiếp tục thiết lập nhưng má»™t số tính năng có thể bị tắt. </p> RemoveUserJob Remove live user from target system Xóa ngưá»i dùng trá»±c tiếp khá»i hệ thống đích RemoveVolumeGroupJob Remove Volume Group named %1. Xóa nhóm ổ đĩa có tên %1. Remove Volume Group named <strong>%1</strong>. Xóa nhóm ổ đĩa có tên <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Trình cài đặt không xóa được nhóm ổ đĩa có tên '%1'. ReplaceWidget Form Biểu mẫu Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Chá»n nÆ¡i cài đặt %1. <br/> <font color = "red"> Cảnh báo: </font> Ä‘iá»u này sẽ xóa tất cả các tệp trên phân vùng đã chá»n. The selected item does not appear to be a valid partition. Mục đã chá»n dưá»ng như không phải là má»™t phân vùng hợp lệ. %1 cannot be installed on empty space. Please select an existing partition. %1 không thể được cài đặt trên không gian trống. Vui lòng chá»n má»™t phân vùng hiện có. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 không thể được cài đặt trên má»™t phân vùng mở rá»™ng. Vui lòng chá»n phân vùng chính hoặc phân vùng logic hiện có. %1 cannot be installed on this partition. %1 không thể cài đặt trên phân vùng này. Data partition (%1) Phân vùng dữ liệu (%1) Unknown system partition (%1) Phân vùng hệ thống không xác định (%1) %1 system partition (%2) %1 phân vùng hệ thống (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong> %4 </strong> <br/> <br/> Phân vùng %1 quá nhỠđối vá»›i %2. Vui lòng chá»n má»™t phân vùng có dung lượng ít nhất là %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong> %2 </strong> <br/> <br/> Không thể tìm thấy phân vùng hệ thống EFI ở bất kỳ đâu trên hệ thống này. Vui lòng quay lại và sá»­ dụng phân vùng thá»§ công để thiết lập %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong> %3 </strong> <br/> <br/> %1 sẽ được cài đặt trên %2. <br/> <font color = "red"> Cảnh báo: </font> tất cả dữ liệu trên phân vùng %2 sẽ bị mất. The EFI system partition at %1 will be used for starting %2. Phân vùng hệ thống EFI tại %1 sẽ được sá»­ dụng để bắt đầu %2. EFI system partition: Phân vùng hệ thống EFI: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p> Máy tính này không đáp ứng các yêu cầu tối thiểu để cài đặt %1. <br/> Không thể tiếp tục cài đặt. </p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> <p> Máy tính này không đáp ứng má»™t số yêu cầu được đỠxuất để thiết lập %1. <br/> Có thể tiếp tục thiết lập nhưng má»™t số tính năng có thể bị tắt. </p> ResizeFSJob Resize Filesystem Job Thay đổi kích thước tệp công việc hệ thống Invalid configuration Cấu hình không hợp lệ The file-system resize job has an invalid configuration and will not run. Công việc thay đổi kích thước hệ thống tệp có cấu hình không hợp lệ và sẽ không chạy. KPMCore not Available KPMCore không khả dụng Calamares cannot start KPMCore for the file-system resize job. Calamares không thể khởi động KPMCore cho công việc thay đổi kích thước hệ thống tệp. Resize Failed Thay đổi kích thước không thành công The filesystem %1 could not be found in this system, and cannot be resized. Không thể tìm thấy tệp hệ thống %1 trong hệ thống này và không thể thay đổi kích thước. The device %1 could not be found in this system, and cannot be resized. Không thể tìm thấy thiết bị %1 trong hệ thống này và không thể thay đổi kích thước. The filesystem %1 cannot be resized. Không thể thay đổi kích thước tệp hệ thống %1. The device %1 cannot be resized. Không thể thay đổi kích thước thiết bị %1. The filesystem %1 must be resized, but cannot. Hệ thống tệp %1 phải được thay đổi kích thước, nhưng không thể. The device %1 must be resized, but cannot Thiết bị %1 phải được thay đổi kích thước, nhưng không thể ResizePartitionJob Resize partition %1. Äổi kích thước phân vùng %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Thay đổi kích thước <strong>%2MiB</strong> phân vùng <strong>%1</strong> toùng <strong>%3đếnMiB</strong>. Resizing %2MiB partition %1 to %3MiB. Thay đổi %2MiB phân vùng %1 thành %3MiB. The installer failed to resize partition %1 on disk '%2'. Thất bại trong việc thay đổi kích thước phân vùng %1 trên đĩa '%2'. ResizeVolumeGroupDialog Resize Volume Group Thay đổi kích thước nhóm ổ đĩa ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Thay đổi kích thước nhóm ổ đĩa có tên %1 từ %2 thành %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Thay đổi kích thước nhóm ổ đĩa có tên <strong> %1 </strong> từ <strong> %2 </strong> thành <strong> %3 </strong>. The installer failed to resize a volume group named '%1'. Trình cài đặt không thể thay đổi kích thước má»™t nhóm ổ đĩa có tên ' %1'. ResultsListDialog For best results, please ensure that this computer: Äể có kết quả tốt nhất, hãy đảm bảo rằng máy tính này: System requirements Yêu cầu hệ thống ScanningDialog Scanning storage devices... Quét thiết bị lưu trữ... Partitioning Äang phân vùng SetHostNameJob Set hostname %1 Äặt tên máy %1 Set hostname <strong>%1</strong>. Äặt tên máy <strong>%1</strong>. Setting hostname %1. Äặt tên máy %1. Internal Error Lá»—i bên trong Cannot write hostname to target system Không thể ghi tên máy chá»§ vào hệ thống đích SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Cài đặt bàn phím kiểu %1, bố cục %2-%3 Failed to write keyboard configuration for the virtual console. Lá»—i khi ghi cấu hình bàn phím cho virtual console. Failed to write to %1 Lá»—i khi ghi vào %1 Failed to write keyboard configuration for X11. Lá»—i khi ghi cấu hình bàn phím cho X11. Failed to write keyboard configuration to existing /etc/default directory. Lá»—i khi ghi cấu hình bàn phím vào thư mục /etc/default. SetPartFlagsJob Set flags on partition %1. Chá»n cá» trong phân vùng %1. Set flags on %1MiB %2 partition. Chá»n cá» %1MiB %2 phân vùng. Set flags on new partition. Chá»n cá» trong phân vùng má»›i. Clear flags on partition <strong>%1</strong>. Xóa cá» trong phân vùng<strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Xóa cá» trong %1MiB <strong>%2</strong> phân vùng. Clear flags on new partition. Xóa cá» trong phân vùng má»›i. Flag partition <strong>%1</strong> as <strong>%2</strong>. Cá» phân vùng <strong>%1</strong> như <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Cá» %1MiB <strong>%2</strong> phân vùng như <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Cá» phân vùng má»›i như <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Äang xóa cá» trên phân vùng <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Äang xóa cá» trên %1MiB <strong>%2</strong> phân vùng. Clearing flags on new partition. Äang xóa cá» trên phân vùng má»›i. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Chá»n cá» <strong>%2</strong> trong phân vùng <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Chá»n cá» <strong>%3</strong> trong %1MiB <strong>%2</strong> phân vùng. Setting flags <strong>%1</strong> on new partition. Chá»n cá» <strong>%1</strong> trong phân vùng má»›i. The installer failed to set flags on partition %1. Không thể tạo cá» cho phân vùng %1. SetPasswordJob Set password for user %1 Tạo mật khẩu ngưá»i dùng %1 Setting password for user %1. Äang tạo mật khẩu ngưá»i dùng %1. Bad destination system path. ÄÆ°á»ng dẫn hệ thống đích không hợp lệ. rootMountPoint is %1 Äiểm gắn kết gốc là %1 Cannot disable root account. Không thể vô hiệu hoá tài khoản quản trị. passwd terminated with error code %1. passwd bị kết thúc vá»›i mã lá»—i %1. Cannot set password for user %1. Không thể đặt mật khẩu cho ngưá»i dùng %1. usermod terminated with error code %1. usermod bị chấm dứt vá»›i mã lá»—i %1. SetTimezoneJob Set timezone to %1/%2 Äặt múi giá» thành %1/%2 Cannot access selected timezone path. Không thể truy cập đưá»ng dẫn múi giỠđã chá»n. Bad path: %1 ÄÆ°á»ng dẫn sai: %1 Cannot set timezone. Không thể cài đặt múi giá». Link creation failed, target: %1; link name: %2 Không tạo được liên kết, target: %1; tên liên kết: %2 Cannot set timezone, Không thể cài đặt múi giá» Cannot open /etc/timezone for writing Không thể mở để viết vào /etc/timezone SetupGroupsJob Preparing groups. Äang chuẩn bị các nhóm Could not create groups in target system Không thể tạo các nhóm trên hệ thống đích These groups are missing in the target system: %1 Có vài nhóm Ä‘ang bị thiếu trong hệ thống đích: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cấu hình <pre>sudo</pre>cho ngưá»i dùng. Cannot chmod sudoers file. Không thể sá»­a đổi mod cá»§a tệp sudoers. Cannot create sudoers file for writing. Không thể tạo tệp sudoers để viết. ShellProcessJob Shell Processes Job Shell Xá»­ lý Công việc SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 StandardButtons &OK &OK &Yes &Có &No &Không &Cancel &Huá»· bá» &Close Äón&g TrackingInstallJob Installation feedback Phản hồi cài đặt Sending installation feedback. Gá»­i phản hồi cài đặt. Internal error in install-tracking. Lá»—i ná»™i bá»™ trong theo dõi cài đặt. HTTP request timed out. Yêu cầu HTTP đã hết thá»i gian chá». TrackingKUserFeedbackJob KDE user feedback Ngưá»i dùng KDE phản hồi Configuring KDE user feedback. Äịnh cấu hình phản hồi cá»§a ngưá»i dùng KDE. Error in KDE user feedback configuration. Lá»—i trong cấu hình phản hồi cá»§a ngưá»i dùng KDE. Could not configure KDE user feedback correctly, script error %1. Không thể định cấu hình phản hồi cá»§a ngưá»i dùng KDE má»™t cách chính xác, lá»—i tập lệnh %1. Could not configure KDE user feedback correctly, Calamares error %1. Không thể định cấu hình phản hồi cá»§a ngưá»i dùng KDE má»™t cách chính xác, lá»—i Calamares %1. TrackingMachineUpdateManagerJob Machine feedback Phản hồi máy Configuring machine feedback. Cấu hình phản hồi máy. Error in machine feedback configuration. Lá»—i cấu hình phản hồi máy. Could not configure machine feedback correctly, script error %1. Không thể cấu hình phản hồi máy chính xác, kịch bản lá»—i %1. Could not configure machine feedback correctly, Calamares error %1. Không thể cấu hình phản hồi máy chính xác, lá»—i %1. TrackingPage Form Biểu mẫu Placeholder Trình giữ chá»— <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Nhấp vào đây để gá»­i <span style=" font-weight:600;">không có thông tin nào</span> vá» cài đặt cá»§a bạn.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Bấm vào đây để biết thêm thông tin vá» phản hồi cá»§a ngưá»i dùng</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. Theo dõi giúp %1 biết tần suất cài đặt, phần cứng được cài đặt trên phần cứng nào và ứng dụng nào được sá»­ dụng. Äể xem những gì sẽ được gá»­i, vui lòng nhấp vào biểu tượng trợ giúp bên cạnh má»—i khu vá»±c. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. Bằng cách chá»n này, bạn sẽ gá»­i thông tin vá» cài đặt và phần cứng cá»§a mình. Thông tin này sẽ chỉ được gá»­i <b> má»™t lần </b> sau khi quá trình cài đặt kết thúc. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. Bằng cách chá»n này, bạn sẽ định kỳ gá»­i thông tin vá» cài đặt <b> máy </b>, phần cứng và ứng dụng cá»§a mình cho %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. Bằng cách chá»n này, bạn sẽ thưá»ng xuyên gá»­i thông tin vá» cài đặt <b> ngưá»i dùng </b>, phần cứng, ứng dụng và các kiểu sá»­ dụng ứng dụng cho %1. TrackingViewStep Feedback Phản hồi UmountJob Unmount file systems. Gỡ kết nối các hệ thống tập tin. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small> Nếu nhiá»u ngưá»i cùng sá»­ dụng máy tính này, bạn có thể tạo nhiá»u tài khoản sau khi thiết lập. </small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small> Nếu nhiá»u ngưá»i cùng sá»­ dụng máy tính này, bạn có thể tạo nhiá»u tài khoản sau khi cài đặt. </small> UsersQmlViewStep Users Ngưá»i dùng UsersViewStep Users Ngưá»i dùng VariantModel Key Column header for key/value Khóa Value Column header for key/value Giá trị VolumeGroupBaseDialog Create Volume Group Tạo nhóm ổ đĩa List of Physical Volumes Danh sách các đĩa vật lý Volume Group Name: Tên nhóm ổ đĩa: Volume Group Type: Loại nhóm ổ đĩa: Physical Extent Size: Kích thước phạm vi vật lý: MiB MiB Total Size: Tổng kích thước: Used Size: Äã dùng: Total Sectors: Tổng số Sec-tÆ¡: Quantity of LVs: Số lượng cá»§a LVs: WelcomePage Form Biểu mẫu Select application and system language Chá»n ngôn ngữ ứng dụng và hệ thống 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 %1 support Há»— trợ %1 About %1 setup Vá» thiết lập %1 About %1 installer Vá» bá»™ cài đặt %1 WelcomeQmlViewStep Welcome Chào mừng WelcomeViewStep Welcome Chào mừng ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error Lá»—i cấu hình No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Giá»›i thiệu Debug Show information about Calamares Show debug information Hiện thông tin gỡ lá»—i finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Ngôn ngữ</h1> </br> Cài đặt ngôn ngữ hệ thống ảnh hưởng đến ngôn ngữ và bá»™ ký tá»± cho má»™t số thành phần giao diện ngưá»i dùng dòng lệnh. Cài đặt hiện tại là <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>Äịa phương</h1> </br> Cài đặt ngôn ngữ hệ thống ảnh hưởng đến số và định dạng ngày tháng. Cài đặt hiện tại là <strong>%1</strong>. Back Trở lại keyboardq To activate keyboard preview, select a layout. Keyboard Model: Mẫu bàn phím: Layouts Bố cục Type here to test your keyboard Gõ vào đây để thá»­ bàn phím Variants Các biến thể localeq Change Äổi notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Äây là ghi chú phát hành mẫu.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>Äây là má»™t tệp QML mẫu, hiển thị các tùy chá»n trong RichText vá»›i ná»™i dung Flickable..</p> <p>QML vá»›i RichText có thể sá»­ dụng thẻ HTML, ná»™i dung Flickable hữu ích cho màn hình cảm ứng.</p> <p><b>Äây là văn bản in đậm</b></p> <p><i>Äây là văn bản in nghiêng</i></p> <p><u>Äây là văn bản được gạch chân</u></p> <p><center>Văn bản này sẽ được căn giữa.</center></p> <p><s>Äây là đưá»ng gạch ngang</s></p> <p>Ví dụ vá» mã: <code>ls -l /home</code></p> <p><b>Danh sách:</b></p> <ul> <li>Hệ thống Intel CPU</li> <li>Hệ thống AMD CPU</li> </ul> <p>Thanh cuá»™n dá»c có thể Ä‘iá»u chỉnh được, chiá»u rá»™ng hiện tại được đặt thành 10.</p> Back Quay lại usersq Pick your user name and credentials to login and perform admin tasks Chá»n tên bạn và chứng chỉ để đăng nhập và thá»±c hiện các tác vụ quản trị What is your name? Hãy cho Vigo biết tên đầy đủ cá»§a bạn? Your Full Name Tên đầy đủ What name do you want to use to log in? Bạn muốn dùng tên nào để đăng nhập máy tính? Login Name Tên đăng nhập If more than one person will use this computer, you can create multiple accounts after installation. Tạo nhiá»u tài khoản sau khi cài đặt nếu có nhiá»u ngưá»i dùng chung. Only lowercase letters, numbers, underscore and hyphen are allowed. Chỉ cho phép các chữ cái viết thưá»ng, số, gạch dưới và gạch nối. root is not allowed as username. What is the name of this computer? Tên cá»§a máy tính này là? Computer Name Tên máy tính This name will be used if you make the computer visible to others on a network. Tên này sẽ hiển thị khi bạn kết nối vào má»™t mạng. localhost is not allowed as hostname. Choose a password to keep your account safe. Chá»n mật khẩu để giữ máy tính an toàn. Password Mật khẩu Repeat Password Lặp lại mật khẩu Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Nhập lại mật khẩu hai lần để kiểm tra. Má»™t mật khẩu tốt phải có ít nhất 8 ký tá»± và bao gồm chữ, số, ký hiệu đặc biệt. Nên được thay đổi thưá»ng xuyên. Validate passwords quality Xác thá»±c chất lượng mật khẩu When this box is checked, password-strength checking is done and you will not be able to use a weak password. Khi tích chá»n, bạn có thể chá»n mật khẩu yếu. Log in automatically without asking for the password Tá»± động đăng nhập không há»i mật khẩu Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Dùng lại mật khẩu ngưá»i dùng như mật khẩu quản trị Use the same password for the administrator account. Dùng cùng má»™t mật khẩu cho tài khoản quản trị. Choose a root password to keep your account safe. Chá»n mật khẩu quản trị để giữ máy tính an toàn. Root Password Mật khẩu quản trị Repeat Root Password Lặp lại mật khẩu quản trị Enter the same password twice, so that it can be checked for typing errors. Nhập lại mật khẩu hai lần để kiểm tra. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>Chào mừng đến vá»›i bá»™ cài đặt %1 <quote>%2</quote></h3> <p>Chương trình sẽ há»i bản vài câu há»i và thiết lập %1 trên máy tính cá»§a bạn.</p> Support Há»— trợ Known issues Các vấn đỠđã biết Release notes Ghi chú phát hành Donate Ủng há»™ calamares-calamares-2d126ae/lang/calamares_zh.ts000066400000000000000000005711671430147706700217520ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Error &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next &Back &Done &Cancel Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_zh_CN.ts000066400000000000000000006660371430147706700223330ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> 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. 使 Calamares 崩溃,以便 Konqui 医生å¯ä»¥æŸ¥çœ‹å®ƒã€‚ Reloads the stylesheet from the branding directory. 从Brandingç›®å½•é‡æ–°è½½å…¥æ ·å¼è¡¨ Uploads the session log to the configured pastebin. å°†ä¼šè¯æ—¥å¿—上传至预设的pastebin网站 Send Session Log å‘é€ä¼šè¯æ—¥å¿— Reload Stylesheet é‡è½½æ ·å¼è¡¨ Displays the tree of widget names in the log (for stylesheet debugging). 在日志中显示å°éƒ¨ä»¶å称树(用于样å¼è¡¨è°ƒè¯•)。 Widget Tree 树形控件 Debug information è°ƒè¯•ä¿¡æ¯ 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 安装失败 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>. 设置文件系统标签 <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 çš„ 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 Successfully unmounted %1. æˆåŠŸå¸è½½äº† %1。 Successfully disabled swap %1. æˆåŠŸç¦ç”¨äº†äº¤æ¢ç©ºé—´ %1。 Successfully cleared swap %1. æˆåŠŸæ¸…ç†äº†äº¤æ¢ç©ºé—´ %1。 Successfully closed mapper device %1. æˆåŠŸå…³é—­äº†æ˜ å°„è®¾å¤‡ %1。 Successfully disabled volume group %1. æˆåŠŸç¦ç”¨äº†å·ç»„ %1。 Clear mounts for partitioning operations on %1 æ¸…ç†æŒ‚载了的分区以在 %1 进行分区æ“作 Clearing mounts for partitioning operations on %1. æ­£åœ¨æ¸…ç†æŒ‚载了的分区以在 %1 进行分区æ“作。 Cleared all mounts for %1 已清除 %1 的所有挂载点 ClearTempMountsJob Clear all temporary mounts. 清除所有临时挂载点。 Clearing all temporary mounts. 正在清除所有临时挂载点。 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. 请在列表中选一个产å“。被选中的产å“将会被安装。 Packages 软件包 Install option: <strong>%1</strong> 安装选项:<strong>%1</strong> None æ—  Summary æ‘˜è¦ This is an overview of what will happen once you start the setup procedure. 预览——当你å¯åŠ¨å®‰è£…è¿‡ç¨‹ï¼Œä»¥ä¸‹è¡Œä¸ºå°†è¢«æ‰§è¡Œ This is an overview of what will happen once you start the install procedure. è¿™æ˜¯æ‚¨å¼€å§‹å®‰è£…åŽæ‰€ä¼šå‘生的事情的概览。 ContextualProcessJob Contextual Processes Job åŽå°ä»»åŠ¡ CreatePartitionDialog Create a Partition 创建分区 Si&ze: 大å°(&Z): MiB MiB Partition &Type: 分区类型(&T): Primar&y 主分区(&Y) E&xtended 扩展分区(&E) Fi&le System: 文件系统 (&L): LVM LV name LVM 逻辑å·åç§° &Mount Point: 挂载点(&M): Flags: 标记: Label for the filesystem æ­¤æ–‡ä»¶ç³»ç»Ÿçš„å·æ ‡å FS Label: æ–‡ä»¶ç³»ç»Ÿå·æ ‡ En&crypt 加密(&C) Logical 逻辑分区 Primary 主分区 GPT GPT Mountpoint already in use. Please select another one. 挂载点已被å ç”¨ã€‚请选择å¦ä¸€ä¸ªã€‚ Mountpoint must start with a <tt>/</tt>. 挂载点必须以<tt>/</tt>开头。 CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. 在 %3 (%2) 上使用 %4 建立新的 %1MiB 分区。 Create new %1MiB partition on %3 (%2). 在 %3 (%2) 上建立新的 %1MiB 分区。 Create new %2MiB partition on %4 (%3) with file system %1. 在 %4 (%3) 上创建新的 %2MiB 分区,文件系统为 %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. 在 <strong>%3</strong> (%2) 上使用 <em>%4</em> 建立新的 <strong>%1MiB</strong> 分区。 Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). 在<strong>%3</strong>(%2)上创建新的<strong>%1MiB</strong>分区 Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. 在<strong>%4</strong>(%3)上创建一个<strong>%2MiB</strong>çš„%1分区。 Creating new %1 partition on %2. 正在 %2 上创建新的 %1 分区。 The installer failed to create partition on disk '%1'. 安装程åºåœ¨ç£ç›˜â€œ%1â€åˆ›å»ºåˆ†åŒºå¤±è´¥ã€‚ 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 编辑已有分区 Con&tent: 内容:(&T) &Keep ä¿ç•™ (&K) Format æ ¼å¼åŒ– Warning: Formatting the partition will erase all existing data. 警告:格å¼åŒ–分区将删除所有已有数æ®ã€‚ &Mount Point: 挂载点(&M): Si&ze: 尺寸 (&Z): MiB MiB Fi&le System: 文件系统 (&L): Flags: 标记: Label for the filesystem æ­¤æ–‡ä»¶ç³»ç»Ÿçš„å·æ ‡å FS Label: æ–‡ä»¶ç³»ç»Ÿå·æ ‡ Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form è¡¨å• En&crypt system 加密系统 Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. 您的系统似乎ä¸å¤ªæ”¯æŒåŠ å¯†ï¼Œæ— æ³•å¯¹æ•´ä¸ªç³»ç»Ÿè¿›è¡ŒåŠ å¯†ã€‚æ‚¨å¯ä»¥å¯ç”¨åŠ å¯†ï¼Œä½†æ€§èƒ½å¯èƒ½ä¼šå—到影å“。 Passphrase å¯†ç  Confirm passphrase ç¡®è®¤å¯†ç  Please enter the same passphrase in both boxes. è¯·åœ¨ä¸¤ä¸ªè¾“å…¥æ¡†ä¸­è¾“å…¥åŒæ ·çš„密ç ã€‚ ErrorDialog Details: 详情: Would you like to paste the install log to the web? 需è¦å°†å®‰è£…日志粘贴到网页å—? FillGlobalStorageJob Set partition information è®¾ç½®åˆ†åŒºä¿¡æ¯ Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> 在有 <em>%3</em> 特性的<strong>æ–°</strong> %2 ç³»çµ±åˆ†åŒºä¸Šå®‰è£ %1 Install %1 on <strong>new</strong> %2 system partition. 在 <strong>æ–°çš„</strong>系统分区 %2 上安装 %1。 Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. 设置 <strong>æ–°çš„</strong> 嫿Œ‚载点 <strong>%1</strong>%3 çš„ %2 分区。 Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. 设置 <strong>æ–°çš„</strong> 嫿Œ‚载点 <strong>%1</strong>%3 çš„ %2 分区。 Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. 在具有功能<em>%4</em>çš„ %3 系统分区<strong>%1</strong>上安装 %2。 Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. 为分区 %3 <strong>%1</strong> 设定挂载点 <strong>%2</strong> 与特性 <em>%4</em>。 Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. 设置%3 分区的挂载点 Install %2 on %3 system partition <strong>%1</strong>. 在 %3 系统割区 <strong>%1</strong> 上安装 %2。 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>。 %1 (%2) partition label %1 (device path %2) %1(%2) 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 &确定 LOSHJob Configuring encrypted swap. é…置加密交æ¢åˆ†åŒºã€‚ No target system available. 没有å¯ç”¨çš„目标系统。 No rootMountPoint is set. 没有设定 root 挂载点。 No configFilePath is set. 未设置é…置文件路径。 LicensePage Form è¡¨å• <h1>License Agreement</h1> <h1>许å¯è¯</h1> I accept the terms and conditions above. æˆ‘åŒæ„å¦‚ä¸Šæ¡æ¬¾ã€‚ Please review the End User License Agreements (EULAs). 请查阅最终用户许å¯åè®® (EULAs)。 This setup procedure will install proprietary software that is subject to licensing terms. 此安装过程会安装å—è®¸å¯æ¡æ¬¾çº¦æŸçš„专有软件。 If you do not agree with the terms, the setup procedure cannot continue. 如果您ä¸åŒæ„è¿™äº›æ¡æ¬¾ï¼Œå®‰è£…过程将无法继续。 This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. 此安装过程会安装å—è®¸å¯æ¡æ¬¾çº¦æŸçš„专有软件,用于æä¾›é¢å¤–功能和æå‡ç”¨æˆ·ä½“验。 If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 如果您ä¸åŒæ„è¿™äº›æ¡æ¬¾ï¼Œä¸“有软件ä¸ä¼šè¢«å®‰è£…,相应的开æºè½¯ä»¶æ›¿ä»£å“将被安装。 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 label for netinstall module, Linux kernel 内核 Services label for netinstall module, system services æœåŠ¡ Login label for netinstall module, choose login manager 登录 Desktop label for netinstall module, choose desktop environment æ¡Œé¢ Communication label for netinstall module 通讯 Development label for netinstall module å¼€å‘ Office label for netinstall module 办公 Multimedia label for netinstall module 多媒体 Internet label for netinstall module 互è”网 Theming label for netinstall module 主题化 Gaming label for netinstall module æ¸¸æˆ Utilities label for netinstall module 实用工具 Applications åº”ç”¨ç¨‹åº 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. 请在列表中选一个产å“。被选中的产å“将会被安装。 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 分区 Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: 当å‰ï¼š After: 之åŽï¼š No EFI system partition configured 未é…ç½® EFI 系统分区 EFI system partition configured incorrectly EFI系统分区é…置错误 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. å¯åЍ %1 å¿…é¡»éœ€è¦ EFI 系統分区。<br/><br/>è¦è¨­å®š EFI 系统分区,返回并选择或者建立符åˆè¦æ±‚的分区。 The filesystem must be mounted on <strong>%1</strong>. 文件系统必须挂载于 <strong>%1</strong>。 The filesystem must have type FAT32. 此文件系统必须为FAT32 The filesystem must be at least %1 MiB in size. æ–‡ä»¶ç³»ç»Ÿå¿…é¡»è¦æœ‰%1 MiB 的大å°ã€‚ The filesystem must have flag <strong>%1</strong> set. 文件系统必须有 <strong>%1</strong> 标志设定。 You can continue without setting up an EFI system partition but your system may fail to start. 您å¯ä»¥åœ¨ä¸è®¾ç½®EFI系统分区的情况下继续,但您的系統å¯èƒ½æ— æ³•å¯åŠ¨ã€‚ Option to use GPT on BIOS 在 BIOS 上使用 GPT A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted 引导分区未加密 A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. 您å°è¯•用å•独的引导分区é…åˆå·²åŠ å¯†çš„æ ¹åˆ†åŒºä½¿ç”¨ï¼Œä½†å¼•å¯¼åˆ†åŒºæœªåŠ å¯†ã€‚<br/><br/>è¿™ç§é…置方å¼å¯èƒ½å­˜åœ¨å®‰å…¨éšæ‚£ï¼Œå› ä¸ºé‡è¦çš„系统文件存储在了未加密的分区上。<br/>您å¯ä»¥ç»§ç»­ä¿æŒæ­¤é…置,但是系统解密将在系统å¯åŠ¨æ—¶è€Œä¸æ˜¯å¼•导时进行。<br/>è¦åŠ å¯†å¼•å¯¼åˆ†åŒºï¼Œè¯·è¿”å›žä¸Šä¸€æ­¥å¹¶é‡æ–°åˆ›å»ºæ­¤åˆ†åŒºï¼Œå¹¶åœ¨åˆ†åŒºåˆ›å»ºçª—å£é€‰ä¸­ <strong>加密</strong> 选项。 has at least one disk device available. 有至少一个å¯ç”¨çš„ç£ç›˜è®¾å¤‡ã€‚ There are no partitions to install on. æ— å¯ç”¨äºŽå®‰è£…的分区。 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 系统需求 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 StandardButtons &OK &确定 &Yes &是 &No &å¦ &Cancel å–æ¶ˆ(&C) &Close &关闭 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 å馈 UmountJob Unmount file systems. å¸è½½æ–‡ä»¶ç³»ç»Ÿã€‚ No target system available. 没有å¯ç”¨çš„目标系统。 No rootMountPoint is set. 没有设定 root挂载点。 UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>如果有多人è¦ä½¿ç”¨æ­¤è®¡ç®—机,您å¯ä»¥åœ¨å®‰è£…åŽåˆ›å»ºå¤šä¸ªè´¦æˆ·ã€‚</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>如果有多人è¦ä½¿ç”¨æ­¤è®¡ç®—机,您å¯ä»¥åœ¨å®‰è£…åŽåˆ›å»ºå¤šä¸ªè´¦æˆ·ã€‚</small> UsersQmlViewStep 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 选择应用程åºå’Œç³»ç»Ÿè¯­è¨€ 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) %1 support %1 的支æŒä¿¡æ¯ About %1 setup 关于 %1 å®‰è£…ç¨‹åº About %1 installer 关于 %1 å®‰è£…ç¨‹åº WelcomeQmlViewStep Welcome 欢迎 WelcomeViewStep Welcome 欢迎 ZfsJob Create ZFS pools and datasets 创建 ZFS 池和数æ®é›† Failed to create zpool on 创建 zpool 失败于 Configuration Error é…置错误 No partitions are available for ZFS. 没有å¯ç”¨äºŽ ZFS 的分区。 Internal data missing 内部数æ®ä¸¢å¤± Failed to create zpool 创建 zpool 失败 Failed to create dataset 创建数æ®é›†å¤±è´¥ The output was: 输出为: calamares-sidebar About 关于 Debug 调试 Show information about Calamares Show debug information æ˜¾ç¤ºè°ƒè¯•ä¿¡æ¯ finishedq Installation Completed å®‰è£…å®Œæˆ %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 已安装在您的电脑上了。<br/> 您现在å¯ä»¥é‡æ–°å¯åŠ¨åˆ°æ–°ç³»ç»Ÿï¼Œæˆ–æ˜¯ç»§ç»­ä½¿ç”¨ Live 环境。 Close Installer å…³é—­å®‰è£…ç¨‹åº Restart System é‡å¯ç³»ç»Ÿ <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> 安装过程中的翻译已ç»å¤åˆ¶åˆ°äº†ä¸´æ—¶ç”¨æˆ·çš„家目录下 äºŽæ­¤åŒæ—¶å®‰è£…日志也已ç»å¤åˆ¶åˆ°äº†ç›®æ ‡ç³»ç»Ÿï¼Œè·¯å¾„为:/var/log/installation.log finishedq@mobile Installation Completed å®‰è£…å®Œæˆ %1 has been installed on your computer.<br/> You may now restart your device. %1 已安装在您的计算机上。<br/> 现在å¯ä»¥é‡æ–°å¯åŠ¨è®¾å¤‡äº†ã€‚ Close 关闭 Restart é‡å¯ i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>语言</h1> </br> 系统语言区域设置会影å“部份命令行用户界é¢çš„语言åŠå­—符集。 当å‰è®¾ç½®æ˜¯ <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>区域</h1> </br> ç³»ç»ŸåŒºåŸŸè®¾ç½®ä¼šå½±å“æ•°å­—和日期格å¼ã€‚ 当å‰è®¾ç½®æ˜¯ <strong>%1</strong>。 Back åŽé€€ keyboardq To activate keyboard preview, select a layout. è¦å¯ç”¨é”®ç›˜é¢„览,请选择一个键盘布局 Keyboard Model: 键盘型å·ï¼š Layouts 布局 Type here to test your keyboard 在此处数æ®ä»¥æµ‹è¯•键盘 Variants å˜ä½“ localeq Change 更改 notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>这些是å‘布日志样例</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice 是強大且自由的辦办公软件,世界上有百万级别的用户é‡ã€‚其中包括多ç§ç»„件模å—使其æˆä¸ºä¸–界上最强大的开æºå¹¶è‡ªç”±çš„办公软件。<br/> 预设选项。 LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. å¦‚æžœä½ ä¸æƒ³å®‰è£…办公软件,请选择ä¸å®‰è£…办公软件的选项å³å¯ã€‚ç¨åŽæ‚¨å¯ä»¥åœ¨å®‰è£…好的系统上根æ®ä¸ªäººå–œå¥½è‡ªè¡Œé€‰æ‹©å®‰è£…办公软件与å¦ã€‚您å¯ä»¥éšæ—¶åœ¨å®‰è£…å¥½çš„ç³»ç»Ÿä¸Šæ·»åŠ ä¸€ä¸ªï¼ˆæˆ–å¤šä¸ªï¼‰åŠžå…¬è½¯ä»¶ã€‚ No Office Suite 无办公软件 Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. 建立最å°åŒ–的桌é¢å®‰è£…,移除所有的附加应用。在ç¨åŽè‡ªè¡Œé€‰æ‹©éœ€è¦å®‰è£…è‡³ç³»ç»Ÿçš„åº”ç”¨ã€‚åŒæ—¶ä¸ä¼šæœ‰ä»»ä½•的模æ¿å’Œä¾‹å­å¯ä¾›é€‰æ‹©ã€‚æ— åŠžå…¬è½¯ä»¶ï¼Œæ— åª’ä½“æ’­æ”¾å™¨ï¼Œæ— å›¾ç‰‡æŸ¥çœ‹å™¨æˆ–è€…æ‰“å°æ”¯æŒã€‚仅仅有一个桌é¢ï¼Œæ–‡ä»¶ç®¡ç†å™¨ï¼ŒåŒ…管ç†å™¨ï¼Œæ–‡æœ¬ç¼–辑器和一个网页æµè§ˆå™¨ã€‚ Minimal Install 最å°åŒ–安装 Please select an option for your install, or use the default: LibreOffice included. 请为你的安装指定一个选项,或者使用默认选项:安装LibreOffice release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>这是一个QML 示例文件,显示了具有 Flickable 内容的 RichText 选项。</p> <p>带有 RichText çš„ QML å¯ä»¥ä½¿ç”¨ HTML 标签, Flickable 内容对于触摸å±å¾ˆæœ‰ç”¨ã€‚</p> <p><b>这是粗体字</b></p> <p><i>这是斜体字</i></p> <p><u>这是带下划线的文字</u></p> <p><center>此文本将居中对é½ã€‚</center></p> <p><s>这是删除线</s></p> <p>代ç ç¤ºä¾‹: <code>ls -l /home</code></p> <p><b>列表:</b></p> <ul> <li>Intel CPU 系统</li> <li>AMD CPU 系统</li> </ul> <p>åž‚ç›´æ»šåŠ¨æ¡æ˜¯å¯è°ƒçš„,当å‰å®½åº¦è®¾ç½®ä¸º10。</p> Back åŽé€€ usersq Pick your user name and credentials to login and perform admin tasks 选择您的用户å和凭æ®ç™»å½•并执行管ç†ä»»åŠ¡ What is your name? 您的姓å? Your Full Name å…¨å What name do you want to use to log in? 您想è¦ä½¿ç”¨çš„ç™»å½•ç”¨æˆ·åæ˜¯ï¼Ÿ Login Name 登录å If more than one person will use this computer, you can create multiple accounts after installation. 如果有多人è¦ä½¿ç”¨æ­¤è®¡ç®—机,您å¯ä»¥åœ¨å®‰è£…åŽåˆ›å»ºå¤šä¸ªè´¦æˆ·ã€‚ Only lowercase letters, numbers, underscore and hyphen are allowed. åªå…许å°å†™å­—æ¯ã€æ•°ç»„ã€ä¸‹åˆ’线"_" å’Œ 连字符"-" root is not allowed as username. 用户åä¸èƒ½ä¸ºroot What is the name of this computer? 计算机å称为? Computer Name 计算机åç§° This name will be used if you make the computer visible to others on a network. 将计算机设置为对其他网络上计算机å¯è§æ—¶å°†ä½¿ç”¨æ­¤å称。 localhost is not allowed as hostname. localhostä¸èƒ½ä¸ºç”¨æˆ·å Choose a password to keep your account safe. é€‰æ‹©ä¸€ä¸ªå¯†ç æ¥ä¿è¯æ‚¨çš„账户安全。 Password å¯†ç  Repeat Password é‡å¤å¯†ç  Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. 输入相åŒå¯†ç ä¸¤æ¬¡ï¼Œä»¥æ£€æŸ¥è¾“入错误。好的密ç åŒ…å«å­—æ¯ï¼Œæ•°å­—,标点的组åˆï¼Œåº”当至少为 8 个字符长,并且应按一定周期更æ¢ã€‚ Validate passwords quality 验è¯å¯†ç è´¨é‡ When this box is checked, password-strength checking is done and you will not be able to use a weak password. 若选中此项,密ç å¼ºåº¦æ£€æµ‹ä¼šå¼€å¯ï¼Œä½ å°†ä¸è¢«å…许使用弱密ç ã€‚ Log in automatically without asking for the password ä¸è¯¢é—®å¯†ç è‡ªåŠ¨ç™»å½• Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. åªå…许字æ¯ã€æ•°ç»„ã€ä¸‹åˆ’线"_" å’Œ 连字符"-",最少两个字符。 Reuse user password as root password é‡ç”¨ç”¨æˆ·å¯†ç ä½œä¸º root å¯†ç  Use the same password for the administrator account. 为管ç†å‘˜å¸å·ä½¿ç”¨åŒæ ·çš„密ç ã€‚ Choose a root password to keep your account safe. 选择一个 root å¯†ç æ¥ä¿è¯æ‚¨çš„账户安全。 Root Password Root å¯†ç  Repeat Root Password é‡å¤ Root å¯†ç  Enter the same password twice, so that it can be checked for typing errors. 输入相åŒå¯†ç ä¸¤æ¬¡ï¼Œä»¥æ£€æŸ¥è¾“入错误。 welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>欢迎æ¥åˆ° %1 <quote>%2</quote> 安装程åº</h3> <p>这个程åºå°†è¯¢é—®æ‚¨ä¸€äº›é—®é¢˜å¹¶åœ¨æ‚¨çš„计算机上安装 %1。</p> Support æ”¯æŒ Known issues 已知问题 Release notes å‘行说明 Donate æèµ  calamares-calamares-2d126ae/lang/calamares_zh_HK.ts000066400000000000000000005724471430147706700223360ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> AutoMountManagementJob Manage auto-mount settings 管ç†è‡ªå‹•掛載設定 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. 這個系統的<strong>開機環境</strong>。<br><br>較舊的 x86 ç³»çµ±åªæ”¯æ´ <strong>BIOS</strong>。<br>ç¾æ™‚的系統則通常使用 <strong>EFI</strong>ï¼Œä½†è‹¥ä½¿ç”¨ç›¸å®¹æ¨¡å¼ (CSM),也å¯èƒ½é¡¯ç¤ºç‚º BIOS。 This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. 這個系統以 <strong>EFI</strong> 開機。<br><br>è¦å¾ž EFI 環境開機,本安è£ç¨‹å¼å¿…須安è£é–‹æ©Ÿè¼‰å…¥å™¨ç¨‹å¼ï¼Œåƒæ˜¯ <strong>GRUB</strong> 或 <strong>systemd-boot</strong> 在 <strong>EFI 系統分割å€</strong>。這是自動的,除éžé¸æ“‡æ‰‹å‹•分割;在這種情æ³ï¼Œæ‚¨å¿…須自行é¸å–或建立它。 This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Crashes Calamares, so that Dr. Konqui can look at it. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Error &Yes &No &Close Install Log Paste URL The upload was unsuccessful. No web-paste was done. Install log posted to %1 Link copied to clipboard Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with setup? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Install now Go &back &Set up &Install Setup is complete. Close the setup program. The installation is complete. Close the installer. Cancel setup without changing the system. Cancel installation without changing the system. &Next &Back &Done &Cancel Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer ChangeFilesystemLabelJob Set filesystem label on %1. Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Boot loader location: <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob Successfully unmounted %1. Successfully disabled swap %1. Successfully cleared swap %1. Successfully closed mapper device %1. Successfully disabled volume group %1. Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. Config Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set timezone to %1/%2. The system language will be set to %1. The numbers and dates locale will be set to %1. Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Internal error) Network Installation. (Disabled: No package list) Package selection Network Installation. (Disabled: Unable to fetch package lists, check your network connection) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. <h1>Welcome to the Calamares setup program for %1</h1> <h1>Welcome to %1 setup</h1> <h1>Welcome to the Calamares installer for %1</h1> <h1>Welcome to the %1 installer</h1> Your username is too long. '%1' is not allowed as username. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! OK! Setup Failed Installation Failed The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. Package Selection Please pick a product from the list. The selected product will be installed. Packages Install option: <strong>%1</strong> None Summary This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: Primar&y E&xtended Fi&le System: LVM LV name &Mount Point: Flags: Label for the filesystem FS Label: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. Mountpoint must start with a <tt>/</tt>. CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. Create new %1MiB partition on %3 (%2). Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Con&tent: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Label for the filesystem FS Label: Passphrase for existing partition Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. EncryptWidget Form En&crypt system Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. Passphrase Confirm passphrase Please enter the same passphrase in both boxes. ErrorDialog Details: Would you like to paste the install log to the web? FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. Install %2 on %3 system partition <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedQmlViewStep Finish FinishedViewStep Finish FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. %1 (%2) partition label %1 (device path %2) Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardQmlViewStep Keyboard KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LOSHJob Configuring encrypted swap. No target system available. No rootMountPoint is set. No configFilePath is set. LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: Zone: &Change... LocaleQmlViewStep Location LocaleTests Quit LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. Map Timezone: %1 Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel label for netinstall module, Linux kernel Services label for netinstall module, system services Login label for netinstall module, choose login manager Desktop label for netinstall module, choose desktop environment Communication label for netinstall module Development label for netinstall module Office label for netinstall module Multimedia label for netinstall module Internet label for netinstall module Theming label for netinstall module Gaming label for netinstall module Utilities label for netinstall module Applications 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. PackageModel Name Description Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? Your Full Name What name do you want to use to log in? login What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System File System Label Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Unsafe partition actions are enabled. Partitioning is configured to <b>always</b> fail. No partitions will be changed. Current: After: No EFI system partition configured EFI system partition configured incorrectly An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. The filesystem must be mounted on <strong>%1</strong>. The filesystem must have type FAT32. The filesystem must be at least %1 MiB in size. The filesystem must have flag <strong>%1</strong> set. You can continue without setting up an EFI system partition but your system may fail to start. Option to use GPT on BIOS A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject %1 (%2) unknown extended unformatted swap Default File not found Path <pre>%1</pre> must be an absolute path. Directory not found Could not create new random file <pre>%1</pre>. No product No description provided. (no mount point) Unpartitioned space or unknown partition table Recommended <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> RemoveUserJob Remove live user from target system RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: Requirements <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing SetupGroupsJob Preparing groups. Could not create groups in target system These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Cannot chmod sudoers file. Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) StandardButtons &OK &Yes &No &Cancel &Close TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingKUserFeedbackJob KDE user feedback Configuring KDE user feedback. Error in KDE user feedback configuration. Could not configure KDE user feedback correctly, script error %1. Could not configure KDE user feedback correctly, Calamares error %1. TrackingMachineUpdateManagerJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep Feedback UmountJob Unmount file systems. No target system available. No rootMountPoint is set. UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> UsersQmlViewStep Users UsersViewStep Users VariantModel Key Column header for key/value Value Column header for key/value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website &Support Open issues and bug-tracking website &Known issues Open release notes website &Release notes %1 support About %1 setup About %1 installer WelcomeQmlViewStep Welcome WelcomeViewStep Welcome ZfsJob Create ZFS pools and datasets Failed to create zpool on Configuration Error No partitions are available for ZFS. Internal data missing Failed to create zpool Failed to create dataset The output was: calamares-sidebar About Debug Show information about Calamares Show debug information finishedq Installation Completed %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. Close Installer Restart System <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> finishedq@mobile Installation Completed %1 has been installed on your computer.<br/> You may now restart your device. Close Restart i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. Back keyboardq To activate keyboard preview, select a layout. Keyboard Model: Layouts Type here to test your keyboard Variants localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. No Office Suite Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. Minimal Install Please select an option for your install, or use the default: LibreOffice included. release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> Back usersq Pick your user name and credentials to login and perform admin tasks What is your name? Your Full Name What name do you want to use to log in? Login Name If more than one person will use this computer, you can create multiple accounts after installation. Only lowercase letters, numbers, underscore and hyphen are allowed. root is not allowed as username. What is the name of this computer? Computer Name This name will be used if you make the computer visible to others on a network. localhost is not allowed as hostname. Choose a password to keep your account safe. Password Repeat Password Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. Validate passwords quality When this box is checked, password-strength checking is done and you will not be able to use a weak password. Log in automatically without asking for the password Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Use the same password for the administrator account. Choose a root password to keep your account safe. Root Password Repeat Root Password Enter the same password twice, so that it can be checked for typing errors. welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> Support Known issues Release notes Donate calamares-calamares-2d126ae/lang/calamares_zh_TW.ts000066400000000000000000006735161430147706700223650ustar00rootroot00000000000000 AboutData <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> <h1>%1</h1><br/><strong>%2<br/> for %3</strong><br/><br/> Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. æ„Ÿè¬ <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 贊助。 Copyright %1-%2 %3 &lt;%4&gt;<br/> Copyright year-year Name <email-address> Copyright %1-%2 %3 &lt;%4&gt;<br/> 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 安è£å¤±æ•— 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 Successfully unmounted %1. æˆåŠŸè§£é™¤æŽ›è¼‰ %1。 Successfully disabled swap %1. æˆåŠŸåœç”¨ swap %1。 Successfully cleared swap %1. æˆåŠŸæ¸…é™¤ swap %1。 Successfully closed mapper device %1. æˆåŠŸé—œé–‰å°æ˜ è£ç½® %1。 Successfully disabled volume group %1. æˆåŠŸåœç”¨æ²è»¸ç¾¤çµ„ %1。 Clear mounts for partitioning operations on %1 ç‚ºäº†æº–å‚™åˆ†å‰²å€æ“作而完全å¸è¼‰ %1 Clearing mounts for partitioning operations on %1. æ­£åœ¨ç‚ºäº†æº–å‚™åˆ†å‰²å€æ“作而完全å¸è¼‰ %1 Cleared all mounts for %1 已清除所有與 %1 相關的掛載 ClearTempMountsJob Clear all temporary mounts. 清除所有暫時掛載。 Clearing all temporary mounts. 正在清除所有暫時掛載。 Cleared all temporary mounts. 已清除所有暫時掛載。 CommandList Could not run command. 無法執行指令。 The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. 指令執行於主機環境中,且需è¦çŸ¥é“根路徑,但根掛載點未定義。 The command needs to know the user's name, but no username is defined. 指令需è¦çŸ¥é“使用者å稱,但是使用者å稱未定義。 Config Set keyboard model to %1.<br/> 設定éµç›¤åž‹è™Ÿç‚º %1 。<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. 請從清單中挑é¸ç”¢å“。將會安è£é¸å®šçš„產å“。 Packages 軟體包 Install option: <strong>%1</strong> 安è£é¸é …:<strong>%1</strong> None ç„¡ Summary 總覽 This is an overview of what will happen once you start the setup procedure. 這是開始安è£å¾Œæ‰€æœƒç™¼ç”Ÿçš„事的概覽。 This is an overview of what will happen once you start the install procedure. 這是您開始安è£å¾Œæ‰€æœƒç™¼ç”Ÿçš„事的概覽。 ContextualProcessJob Contextual Processes Job 情境處ç†ç¨‹åºå·¥ä½œ CreatePartitionDialog Create a Partition å»ºç«‹ä¸€å€‹åˆ†å‰²å€ Si&ze: 容é‡å¤§å° (&z) : MiB MiB Partition &Type: 分割å€èˆ‡é¡žåž‹ (&T): Primar&y 基本(&Y) E&xtended å»¶ä¼¸åˆ†å‰²å€ (&x) Fi&le System: 檔案系統 (&I): LVM LV name LVM LV å稱 &Mount Point: 掛載點 (&M): Flags: 旗標: Label for the filesystem 檔案系統標籤 FS Label: 檔案系統標籤: En&crypt 加密(&C) Logical é‚輯ç£å€ Primary 主è¦ç£å€ GPT GPT Mountpoint already in use. Please select another one. æŽ›è¼‰é»žä½¿ç”¨ä¸­ã€‚è«‹é¸æ“‡å…¶ä»–的。 Mountpoint must start with a <tt>/</tt>. 掛載點必須以 <tt>/</tt> 開頭。 CreatePartitionJob Create new %1MiB partition on %3 (%2) with entries %4. 在 %3 (%2) 上使用項目 %4 建立新的 %1MiB 分割å€ã€‚ Create new %1MiB partition on %3 (%2). 在 %3 (%2) 上建立新的 %1MiB 分割å€ã€‚ Create new %2MiB partition on %4 (%3) with file system %1. 使用檔案系統 %1 在 %4 (%3) 建立新的 %2MiB 分割å€ã€‚ Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. 在 <strong>%3</strong> (%2) 上使用項目 <em>%4</em> 建立新的 <strong>%1MiB</strong> 分割å€ã€‚ Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). 在 <strong>%3</strong> (%2) 上建立新的 <strong>%1MiB</strong> 分割å€ã€‚ Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. 使用檔案系統 <strong>%1</strong> 在 <strong>%4</strong> (%3) 建立新的 <strong>%2MiB</strong> 分割å€ã€‚ Creating new %1 partition on %2. 正在於 %2 建立新的 %1 分割å€ã€‚ The installer failed to create partition on disk '%1'. 安è£ç¨‹å¼åœ¨ç£ç¢Ÿ '%1' 上建立分割å€å¤±æ•—。 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 ç·¨è¼¯å·²ç¶“å­˜åœ¨çš„åˆ†å‰²å€ Con&tent: 內容:(&T) &Keep ä¿ç•™(&K) Format æ ¼å¼åŒ– Warning: Formatting the partition will erase all existing data. 警告:格å¼åŒ–è©²åˆ†å‰²å€æ›æŠ¹é™¤æ‰€æœ‰å·²å­˜åœ¨çš„資料。 &Mount Point: 掛載點 (&M): Si&ze: 容é‡å¤§å° (&Z) : MiB MiB Fi&le System: 檔案系統 (&I): Flags: 旗標: Label for the filesystem 檔案系統標籤 FS Label: 檔案系統標籤: Passphrase for existing partition 既有分割å€çš„密碼 Partition %1 could not be decrypted with the given passphrase.<br/><br/>Edit the partition again and give the correct passphrase or delete and create a new encrypted partition. åˆ†å‰²å€ %1 無法使用給予的密碼解密。<br/><br/>冿¬¡ç·¨è¼¯åˆ†å‰²å€ä¸¦çµ¦äºˆæ­£ç¢ºçš„密碼或刪除並建立新的加密分割å€ã€‚ EncryptWidget Form å½¢å¼ En&crypt system 加密系統(&C) Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. 您的系統å°åŠ å¯†çš„æ”¯æ´ä¼¼ä¹Žä¸å¤ å¥½ï¼Œç„¡æ³•加密整個系統。您å¯ä»¥å•Ÿç”¨åŠ å¯†ï¼Œä½†æ•ˆèƒ½å¯èƒ½æœƒå—到影響。 Passphrase 通關密語 Confirm passphrase 確èªé€šé—œå¯†èªž Please enter the same passphrase in both boxes. 請在兩個框框中輸入相åŒçš„通關密語。 ErrorDialog Details: 詳細資訊: Would you like to paste the install log to the web? 想è¦å°‡å®‰è£ç´€éŒ„檔貼到網路上嗎? FillGlobalStorageJob Set partition information 設定分割å€è³‡è¨Š Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> 在有 <em>%3</em> 功能的<strong>æ–°</strong> %2 系統分割å€ä¸Šå®‰è£ %1 Install %1 on <strong>new</strong> %2 system partition. 在 <strong>æ–°çš„</strong>ç³»çµ±åˆ†å‰²å€ %2 ä¸Šå®‰è£ %1。 Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> 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>。 %1 (%2) partition label %1 (device path %2) %1 (%2) 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) LOSHJob Configuring encrypted swap. 正在設定已加密的 swap。 No target system available. 沒有å¯ç”¨çš„目標系統。 No rootMountPoint is set. 未設定 rootMountPoint。 No configFilePath is set. 未設定 configFilePath。 LicensePage Form 表單 <h1>License Agreement</h1> <h1>æŽˆæ¬Šæ¢æ¬¾</h1> I accept the terms and conditions above. 我接å—ä¸Šè¿°çš„æ¢æ¬¾èˆ‡æ¢ä»¶ã€‚ Please review the End User License Agreements (EULAs). è«‹å¯©é–±çµ‚ç«¯ä½¿ç”¨è€…æŽˆæ¬Šæ¢æ¬¾ (EULAs)。 This setup procedure will install proprietary software that is subject to licensing terms. 此設定éŽç¨‹å°‡æœƒå®‰è£éœ€è¦åŒæ„å…¶æŽˆæ¬Šæ¢æ¬¾çš„專有軟體。 If you do not agree with the terms, the setup procedure cannot continue. 如果您ä¸åŒæ„æ­¤æ¢æ¬¾ï¼Œå®‰è£ç¨‹åºå°±ç„¡æ³•繼續。 This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. 此設定éŽç¨‹æœƒå®‰è£éœ€è¦åŒæ„æŽˆæ¬Šæ¢æ¬¾çš„專有軟體以æä¾›é™„加功能並強化使用者體驗。 If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 如果您ä¸åŒæ„æ¢æ¬¾ï¼Œå°±ä¸æœƒå®‰è£å°ˆæœ‰è»Ÿé«”,而將會使用開放原始碼的替代方案。 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 label for netinstall module, Linux kernel å…§æ ¸ Services label for netinstall module, system services æœå‹™ Login label for netinstall module, choose login manager 登入 Desktop label for netinstall module, choose desktop environment æ¡Œé¢ Communication label for netinstall module 通訊 Development label for netinstall module 開發 Office label for netinstall module 辦公 Multimedia label for netinstall module 多媒體 Internet label for netinstall module 網際網路 Theming label for netinstall module 主題 Gaming label for netinstall module éŠæˆ² Utilities label for netinstall module 實用工具 Applications æ‡‰ç”¨ç¨‹å¼ 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. 請從清單中挑é¸ç”¢å“。將會安è£é¸å®šçš„產å“。 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 åˆ†å‰²å€ Unsafe partition actions are enabled. 啟用了ä¸å®‰å…¨çš„分割動作。 Partitioning is configured to <b>always</b> fail. 分割被設定為<b>一律</b>失敗。 No partitions will be changed. 䏿œƒæ›´å‹•任何分割å€ã€‚ Current: ç›®å‰ï¼š After: 之後: No EFI system partition configured 未設定 EFI ç³»çµ±åˆ†å‰²å€ EFI system partition configured incorrectly EFI 系統分割å€è¨­å®šä¸æ­£ç¢º An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. è¦å•Ÿå‹• %1 å¿…é ˆè¦æœ‰ EFI 系統分割å€ã€‚<br/><br/>è¦è¨­å®š EFI 系統分割å€ï¼Œè¿”回並é¸å–或建立é©åˆçš„æª”案系統。 The filesystem must be mounted on <strong>%1</strong>. 檔案系統必須掛載於 <strong>%1</strong>。 The filesystem must have type FAT32. 檔案系統必須有類型 FAT32。 The filesystem must be at least %1 MiB in size. 檔案系統必須至少有 %1 MiB 的大å°ã€‚ The filesystem must have flag <strong>%1</strong> set. 檔案系統必須有旗標 <strong>%1</strong> 設定。 You can continue without setting up an EFI system partition but your system may fail to start. 您å¯ä»¥åœ¨ä¸è¨­å®š EFI 系統分割å€çš„æƒ…æ³ä¸‹ç¹¼çºŒï¼Œä½†æ‚¨çš„系統å¯èƒ½ç„¡æ³•啟動。 Option to use GPT on BIOS 在 BIOS 上使用 GPT çš„é¸é … A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. GPT åˆ†å‰²è¡¨å°æ‰€æœ‰ç³»çµ±éƒ½æ˜¯æœ€ä½³é¸é …。此安è£ç¨‹å¼åŒæ™‚ä¹Ÿæ”¯æ´ BIOS 系統。<br/><br/>è¦åœ¨ BIOS 上設定 GPT 分割表,(如果還沒有完æˆçš„話)請回上一步並將分割表設定為 GPT,然後建立 8 MB 的未格å¼åŒ–分割å€ï¼Œä¸¦å•Ÿç”¨ <strong>%2</strong> 旗標。<br/><br/>è¦åœ¨ BIOS 系統上使用 GPT 分割å€å•Ÿå‹• %1 則必須使用未格å¼åŒ–çš„ 8MB 分割å€ã€‚ Boot partition not encrypted é–‹æ©Ÿåˆ†å‰²å€æœªåР坆 A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. 設定了單ç¨çš„開機分割å€ä»¥åŠåŠ å¯†çš„æ ¹åˆ†å‰²å€ï¼Œä½†æ˜¯é–‹æ©Ÿåˆ†å‰²å€ä¸¦ä¸æœƒè¢«åŠ å¯†ã€‚<br/><br/>這種設定å¯èƒ½æœƒé€ æˆå®‰å…¨å•題,因為é‡è¦çš„系統檔案是放在未加密的分割å€ä¸­ã€‚<br/>您也å¯ä»¥ç¹¼çºŒï¼Œä½†æ˜¯æª”案系統的解鎖會在系統啟動後æ‰ç™¼ç”Ÿã€‚<br/>è¦åŠ å¯†é–‹æ©Ÿåˆ†å‰²å€ï¼Œå›žåˆ°ä¸Šä¸€é ä¸¦é‡æ–°å»ºç«‹å®ƒï¼Œä¸¦åœ¨åˆ†å‰²å€å»ºç«‹è¦–窗é¸å–<strong>加密</strong>。 has at least one disk device available. 有至少一個å¯ç”¨çš„ç£ç¢Ÿè£ç½®ã€‚ There are no partitions to install on. 沒有å¯ç”¨æ–¼å®‰è£çš„分割å€ã€‚ 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 系統需求 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 StandardButtons &OK 確定(&O) &Yes 是(&Y) &No å¦(&N) &Cancel å–æ¶ˆ(&C) &Close 關閉(&C) TrackingInstallJob Installation feedback 安è£å›žé¥‹ Sending installation feedback. 傳é€å®‰è£å›žé¥‹ Internal error in install-tracking. 在安è£è¿½è¹¤è£¡çš„內部錯誤。 HTTP request timed out. HTTP 請求逾時。 TrackingKUserFeedbackJob KDE user feedback KDE 使用者回饋 Configuring KDE user feedback. 設定 KDE 使用者回饋。 Error in KDE user feedback configuration. KDE 使用者回饋設定錯誤。 Could not configure KDE user feedback correctly, script error %1. 無法正確設定 KDE 使用者回饋,指令稿錯誤 %1。 Could not configure KDE user feedback correctly, Calamares error %1. 無法正確設定 KDE 使用者回饋,Calamares 錯誤 %1。 TrackingMachineUpdateManagerJob Machine feedback 機器回饋 Configuring machine feedback. 設定機器回饋。 Error in machine feedback configuration. 在機器回饋設定中的錯誤。 Could not configure machine feedback correctly, script error %1. 無法正確設定機器回饋,指令稿錯誤 %1。 Could not configure machine feedback correctly, Calamares error %1. 無法正確設定機器回饋,Calamares 錯誤 %1。 TrackingPage Form å½¢å¼ Placeholder ä½”ä½ç¬¦ <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>點擊此處<span style=" font-weight:600;">䏿œƒå‚³é€ä»»ä½•</span>關於您安è£çš„資訊。</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">點é¸é€™è£¡ä¾†å–得更多關於使用者回饋的資訊</span></a></p></body></html> Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. 追蹤å¯ä»¥å”助 %1 檢視其安è£é »çއã€å®‰è£åœ¨ä»€éº¼ç¡¬é«”上以åŠä½¿ç”¨äº†å“ªäº›æ‡‰ç”¨ç¨‹å¼ã€‚è¦æª¢è¦–會傳é€å“ªäº›è³‡è¨Šï¼Œè«‹é»žæ“Šæ¯å€‹å€åŸŸæ—的說明按鈕。 By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. é¸å–這個後,您將會傳é€é—œæ–¼æ‚¨çš„安è£èˆ‡ç¡¬é«”çš„è³‡è¨Šã€‚é€™å€‹è³‡è¨Šå°‡åªæœƒå‚³é€</b>一次</b>,且在安è£å®Œæˆå¾Œã€‚ By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. é¸å–這個後,您將會週期性地傳é€é—œæ–¼æ‚¨çš„<b>機器</b>安è£ã€ç¡¬é«”與應用程å¼çš„資訊給 %1。 By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. é¸å–這個後,您將會經常傳é€é—œæ–¼æ‚¨çš„<b>使用者</b>安è£ã€ç¡¬é«”ã€æ‡‰ç”¨ç¨‹å¼èˆ‡ä½¿ç”¨æ¨¡å¼çš„資訊給 %1。 TrackingViewStep Feedback 回饋 UmountJob Unmount file systems. 解除掛載檔案系統。 No target system available. 沒有å¯ç”¨çš„目標系統。 No rootMountPoint is set. 未設定根掛載點。 UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>如果將會有多於一人使用這臺電腦,您å¯ä»¥åœ¨å®‰è£å¾Œè¨­å®šå¤šå€‹å¸³è™Ÿã€‚</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>如果將會有多於一人使用這臺電腦,您å¯ä»¥åœ¨å®‰è£å¾Œè¨­å®šå¤šå€‹å¸³è™Ÿã€‚</small> UsersQmlViewStep Users 使用者 UsersViewStep Users 使用者 VariantModel Key Column header for key/value 金鑰 Value Column header for key/value 值 VolumeGroupBaseDialog Create Volume Group 建立å·å†Šç¾¤çµ„ List of Physical Volumes 物ç†å·å†Šæ¸…å–® Volume Group Name: å·å†Šç¾¤çµ„å稱: Volume Group Type: å·å†Šç¾¤çµ„類型: Physical Extent Size: 物ç†å»¶å±•大å°ï¼š MiB MiB Total Size: 大å°ç¸½è¨ˆï¼š Used Size: 已使用大å°ï¼š Total Sectors: 總ç£å€æ•¸ï¼š Quantity of LVs: é‚輯å·å†Šæ•¸é‡ï¼š WelcomePage Form 表單 Select application and system language é¸å–應用程å¼èˆ‡ç³»çµ±èªžè¨€ 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) %1 support %1 æ”¯æ´ About %1 setup 關於 %1 安è£ç¨‹å¼ About %1 installer 關於 %1 安è£ç¨‹å¼ WelcomeQmlViewStep Welcome 歡迎 WelcomeViewStep Welcome 歡迎 ZfsJob Create ZFS pools and datasets 建立 ZFS 池與資料集 Failed to create zpool on 建立 zpool 失敗於 Configuration Error 設定錯誤 No partitions are available for ZFS. ZFS 沒有å¯ç”¨çš„分割å€ã€‚ Internal data missing 內部資料éºå¤± Failed to create zpool 建立 zpool 失敗 Failed to create dataset 建立資料集失敗 The output was: 輸出為: calamares-sidebar About 關於 Debug Debug Show information about Calamares 顯示關於 Calamares 的資訊 Show debug information 顯示除錯資訊 finishedq Installation Completed 安è£å®Œæˆ %1 has been installed on your computer.<br/> You may now restart into your new system, or continue using the Live environment. %1 已安è£åˆ°æ‚¨çš„電腦上。<br/> ç¾åœ¨ï¼Œæ‚¨å¯ä»¥é‡æ–°å•Ÿå‹•到您的新系統,或繼續使用 Live 環境。 Close Installer 關閉安è£ç¨‹å¼ Restart System 釿–°å•Ÿå‹•系統 <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> This log is copied to /var/log/installation.log of the target system.</p> <p>完整安è£ç´€éŒ„檔å¯åœ¨ Live 使用者的家目錄中以 installation.log çš„å稱å–得。<br/> 此紀錄檔已複製到目標系統的 /var/log/installation.log。</p> finishedq@mobile Installation Completed 安è£å®Œæˆ %1 has been installed on your computer.<br/> You may now restart your device. %1 已安è£åˆ°æ‚¨çš„電腦上。<br/> 您ç¾åœ¨å¯ä»¥é‡æ–°å•Ÿå‹•您的è£ç½®äº†ã€‚ Close 關閉 Restart 釿–°å•Ÿå‹• i18n <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. <h1>語言</h1> </br> 系統語系設定會影響æŸäº›å‘½ä»¤åˆ—使用者介é¢å…ƒç´ çš„語言與字元集。目å‰çš„設定為 <strong>%1</strong>。 <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. <h1>語系</h1> </br> 系統語系設定會影響數字與日期格å¼ã€‚ç›®å‰çš„設定為 <strong>%1</strong>。 Back 返回 keyboardq To activate keyboard preview, select a layout. è¦å•Ÿç”¨éµç›¤é è¦½ï¼Œè«‹é¸å–佈局。 Keyboard Model: éµç›¤åž‹è™Ÿï¼š Layouts 佈局 Type here to test your keyboard 在此輸入以測試您的éµç›¤ Variants 變種 localeq Change 變更 notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>此為發行記事範本。</p> packagechooserq LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> Default option. LibreOffice 是強大且自由的辦公室套è£è»Ÿé«”,被世界上數以百è¬è¨ˆçš„人們使用。其包å«äº†å¤šå€‹æ‡‰ç”¨ç¨‹å¼ï¼Œä½¿å…¶æˆç‚ºå¸‚場上功能最強大的自由與開放原始碼辦公室套è£è»Ÿé«”。<br/> é è¨­é¸é …。 LibreOffice LibreOffice If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. å¦‚æžœæ‚¨ä¸æƒ³å®‰è£è¾¦å…¬å®¤å¥—è£è»Ÿé«”,åªè¦é¸å–「ä¸è¦è¾¦å…¬å®¤å¥—è£è»Ÿé«”ã€å°±å¥½ã€‚您隨時都å¯ä»¥åœ¨å·²å®‰è£çš„系統上新增一個或多個您需è¦çš„軟體。 No Office Suite ä¸è¦è¾¦å…¬å®¤å¥—è£è»Ÿé«” Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. 建立最å°åŒ–的桌é¢å®‰è£ï¼Œç§»é™¤æ‰€æœ‰é¡å¤–的應用程å¼ä¸¦ç¨å¾Œå†æ±ºå®šæ‚¨æƒ³è¦æ–°å¢žå“ªäº›æ±è¥¿åˆ°æ‚¨çš„系統中。如此的安è£ä¸æœƒæœ‰ä»€éº¼ä¾‹å­ï¼Œå…¶ä¸æœƒæœ‰è¾¦å…¬å®¤å¥—è£è»Ÿé«”ã€æ²’有多媒體播放程å¼ã€æ²’æœ‰åœ–ç‰‡æª¢è¦–ç¨‹å¼æˆ–åˆ—å°æ”¯æ´ã€‚å…¶å°±åªæœ‰æ¡Œé¢ã€æª”案ç€è¦½å™¨ã€è»Ÿé«”包管ç†ç¨‹å¼ã€æ–‡å­—編輯器與簡易的網路ç€è¦½å™¨ã€‚ Minimal Install 最å°å®‰è£ Please select an option for your install, or use the default: LibreOffice included. è«‹é¸å–您安è£çš„é¸é …,或使用é è¨­ï¼šåŒ…å« LibreOffice。 release_notes <h3>%1</h3> <p>This an example QML file, showing options in RichText with Flickable content.</p> <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> <p><b>This is bold text</b></p> <p><i>This is italic text</i></p> <p><u>This is underlined text</u></p> <p><center>This text will be center-aligned.</center></p> <p><s>This is strikethrough</s></p> <p>Code example: <code>ls -l /home</code></p> <p><b>Lists:</b></p> <ul> <li>Intel CPU systems</li> <li>AMD CPU systems</li> </ul> <p>The vertical scrollbar is adjustable, current width set to 10.</p> <h3>%1</h3> <p>這是範例 QML 檔案,展示了 RichText çš„å„種é¸é …,並有å¯ç¸®æ”¾çš„內容。</p> <p>有 RichText çš„ QML å¯ä»¥ä½¿ç”¨ HTML 標籤,å¯ç¸®æ”¾çš„內容則å°è§¸æŽ§èž¢å¹•éžå¸¸æœ‰ç”¨ã€‚</p> <p><b>這是粗體</b></p> <p><i>é€™æ˜¯ç¾©å¼æ–œé«”</i></p> <p><u>這是有底線的文字</u></p> <p><center>此文字將會å°é½Šä¸­å¤®ã€‚</center></p> <p><s>這是刪除線</s></p> <p>程å¼ç¢¼ç¯„例: <code>ls -l /home</code></p> <p><b>列表:</b></p> <ul> <li>Intel CPU 系統</li> <li>AMD CPU 系統</li> </ul> <p>垂直æ²å‹•軸是å¯èª¿æ•´çš„,目å‰çš„寬度設定為 10。</p> Back 返回 usersq Pick your user name and credentials to login and perform admin tasks æŒ‘é¸æ‚¨çš„使用者å稱與憑證以登入並執行管ç†å·¥ä½œ What is your name? 該如何稱呼您? Your Full Name 您的全å What name do you want to use to log in? 您想使用何種登入å稱? Login Name 登入å稱 If more than one person will use this computer, you can create multiple accounts after installation. 若有多於一個人使用此電腦,您å¯ä»¥åœ¨å®‰è£å¾Œå»ºç«‹å¤šå€‹å¸³è™Ÿã€‚ Only lowercase letters, numbers, underscore and hyphen are allowed. 僅å…許å°å¯«å­—æ¯ã€æ•¸å­—ã€åº•線與連接號。 root is not allowed as username. ä¸å…許使用 root 作為使用者å稱。 What is the name of this computer? 這部電腦的å字是? Computer Name 電腦å稱 This name will be used if you make the computer visible to others on a network. 若您將此電腦設定為讓網路上的其他電腦å¯è¦‹æ™‚將會使用此å稱。 localhost is not allowed as hostname. ä¸å…許使用 localhost 作為主機å稱。 Choose a password to keep your account safe. 輸入密碼以確ä¿å¸³è™Ÿçš„安全性。 Password 密碼 Repeat Password 確èªå¯†ç¢¼ Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. 輸入åŒä¸€å€‹å¯†ç¢¼å…©æ¬¡ï¼Œä»¥æª¢æŸ¥è¼¸å…¥éŒ¯èª¤ã€‚一個好的密碼包å«äº†å­—æ¯ã€æ•¸å­—åŠæ¨™é»žç¬¦è™Ÿçš„組åˆã€è‡³å°‘八個字æ¯é•·ï¼Œä¸”按一固定週期更æ›ã€‚ Validate passwords quality 驗證密碼å“質 When this box is checked, password-strength checking is done and you will not be able to use a weak password. ç•¶æ­¤å‹¾é¸æ¡†è¢«å‹¾é¸ï¼Œå¯†ç¢¼å¼·åº¦æª¢æŸ¥å³å®Œæˆï¼Œæ‚¨ä¹Ÿç„¡æ³•å†ä½¿ç”¨å¼±å¯†ç¢¼ã€‚ Log in automatically without asking for the password 自動登入,無需輸入密碼 Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. 僅å…許字æ¯ã€æ•¸å­—ã€åº•線與連接號,最少兩個字元。 Reuse user password as root password é‡ç”¨ä½¿ç”¨è€…密碼為 root 密碼 Use the same password for the administrator account. 為管ç†å“¡å¸³è™Ÿä½¿ç”¨åŒæ¨£çš„密碼。 Choose a root password to keep your account safe. 鏿“‡ root 密碼來維護您的帳號安全。 Root Password Root 密碼 Repeat Root Password ç¢ºèª Root 密碼 Enter the same password twice, so that it can be checked for typing errors. è¼¸å…¥åŒæ¨£çš„密碼兩次,這樣å¯ä»¥æª¢æŸ¥è¼¸å…¥éŒ¯èª¤ã€‚ welcomeq <h3>Welcome to the %1 <quote>%2</quote> installer</h3> <p>This program will ask you some questions and set up %1 on your computer.</p> <h3>歡迎使用 %1 <quote>%2</quote> 安è£ç¨‹å¼</h3> <p>本程å¼å°‡æœƒå•您一些å•題並在您的電腦上安è£åŠè¨­å®š %1。</p> Support æ”¯æ´ Known issues 已知å•題 Release notes 發行記事 Donate æåŠ© calamares-calamares-2d126ae/lang/kb_en.ts000066400000000000000000005776741430147706700204100ustar00rootroot00000000000000 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-calamares-2d126ae/lang/kb_tg.ts000066400000000000000000006104701430147706700203760ustar00rootroot00000000000000 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-calamares-2d126ae/lang/python.pot000066400000000000000000000341061430147706700210010ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "Mounting partitions." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Internal error mounting zfs datasets" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Failed to import zpool" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Failed to unlock zpool" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Failed to set zfs mountpoint" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Configuration Error" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "No partitions are defined for
{!s}
to use." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs mounting error" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configure systemd services" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "Cannot enable systemd timer {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Cannot disable systemd target {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Cannot mask systemd unit {name!s}." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Filling up filesystems." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync failed with error code {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Unpacking image {}/{}, file {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Starting to unpack {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Failed to unpack image \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "No mount point for root partition" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage does not contain a \"rootMountPoint\" key." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Bad mount point for root partition" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint is \"{}\", which does not exist." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Bad unpackfs configuration" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "There is no configuration information." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "The filesystem for \"{}\" ({}) is not supported by your current kernel" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "The source filesystem \"{}\" does not exist" #: src/modules/unpackfs/main.py:466 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:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "The destination \"{}\" in the target system is not a directory" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Cannot write KDM configuration file" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Cannot write LXDM configuration file" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Cannot write LightDM configuration file" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Cannot configure LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "No LightDM greeter installed." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Cannot write SLIM configuration file" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM config file {!s} does not exist" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "No display managers selected for the displaymanager module." #: src/modules/displaymanager/main.py:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "No root mount point is given for
{!s}
to use." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Install packages." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processing packages (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installing one package." msgstr[1] "Installing %(num)d packages." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "Removing %(num)d packages." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Package Manager error" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Install bootloader." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "Failed to install grub, no partitions defined in global storage" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Bootloader installation error" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Setting hardware clock." #: src/modules/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:28 msgid "Writing fstab." msgstr "Writing fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Configuring locales." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Saving network configuration." calamares-calamares-2d126ae/lang/python/000077500000000000000000000000001430147706700202515ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ar/000077500000000000000000000000001430147706700206535ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ar/LC_MESSAGES/000077500000000000000000000000001430147706700224405ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ar/LC_MESSAGES/python.po000066400000000000000000000273751430147706700243370ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "جاري تركيب الأقسام" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "خطأ ÙÙŠ الضبط" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "تعديل خدمات 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:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "جاري ملئ أنظمة Ø§Ù„Ù…Ù„ÙØ§Øª" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "ÙØ´Ù„ rsync مع رمز الخطأ {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "ÙØ´Ù„ت كتابة مل٠ضبط KDM." #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "مل٠ضبط KDM {!s} غير موجود" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "ÙØ´Ù„ت كتابة مل٠ضبط LXDM." #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "مل٠ضبط LXDM {!s} غير موجود" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "ÙØ´Ù„ت كتابة مل٠ضبط LightDM." #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "مل٠ضبط LightDM {!s} غير موجود" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "ÙØ´Ù„ ضبط LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "لم يتم تصيب LightDM" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "ÙØ´Ù„ت كتابة مل٠ضبط SLIM." #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "مل٠ضبط SLIM {!s} غير موجود" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "إعداد مدير العرض لم يكتمل" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "الـ 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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "تثبيت الحزم" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "جاري تحميل الحزم (%(count)d/%(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "تثبيت محمل الإقلاع" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "جاري إعداد ساعة الهاردوير" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "كود الخروج كان {}" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "عملية بايثون دميه" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "عملية دميه خطوه بايثون {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "جاري Ø­ÙØ¸ الإعدادات" calamares-calamares-2d126ae/lang/python/as/000077500000000000000000000000001430147706700206545ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/as/LC_MESSAGES/000077500000000000000000000000001430147706700224415ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/as/LC_MESSAGES/python.po000066400000000000000000000370551430147706700243340ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "বিভাজন মাউনà§à¦Ÿà§ কৰা।" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "কনফিগাৰেচন তà§à§°à§à¦Ÿà¦¿" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
à§° বà§à¦¯à§±à¦¹à¦¾à§°à§° বাবে কোনো বিভাজনৰ বৰà§à¦£à¦¨à¦¾ দিয়া হোৱা নাই।" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "systemd সেৱা সমà§à¦¹ কনফিগাৰ কৰক" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "সেৱা সমà§à¦¹à§° সংশোধন কৰিব নোৱাৰি" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chrootত systemctl {arg!s}à§° call কà§à§°à§à¦Ÿà¦¿ কোড {num!s}।" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "systemd সেৱা {name!s} সকà§à§°à¦¿à§Ÿ কৰিব নোৱাৰি।" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "systemd গনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨ {name!s} সকà§à§°à¦¿à§Ÿ কৰিব নোৱাৰি।" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "systemd গনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨ {name!s} নিষà§à¦•à§à§°à¦¿à§Ÿ কৰিব নোৱাৰি।" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd à¦à¦•ক {name!s} মাসà§à¦•ৠকৰিব নোৱাৰি।" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "à¦à¦•ক {name!s}à§° বাবে {command!s} আৰৠ{suffix!s} " "অজà§à¦žà¦¾à¦¤ systemd কমাণà§à¦¡à§à¥¤" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "ফাইল চিছটেম​বোৰ পূৰণ কৰা হৈ আছে।" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync কà§à§°à§à¦Ÿà¦¿ কোড {}à§° সৈতে বিফল হ'ল।" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "ইমেজ \"{}\" খোলাত বà§à¦¯à§°à§à¦¥ হ'ল" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "à§°à§à¦Ÿ বিভাজনত কোনো মাউণà§à¦Ÿ পইণà§à¦Ÿà§ নাই" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "মà§à¦² বিভাজনৰ বাবে বেয়া মাউনà§à¦Ÿà§ পইনà§à¦Ÿà§" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" ফাইল চিছটেম উপসà§à¦¥à¦¿à¦¤ নাই" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "লকà§à¦·à§à¦¯à§° চিছটেম গনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨ \"{}\" à¦à¦Ÿà¦¾ ডিৰেকà§à¦Ÿà§°à§€ নহয়" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাই" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাই" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাই" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM কনফিগাৰ কৰিব নোৱাৰি" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "কোনো LightDM সà§à§±à¦¾à¦—তকৰà§à¦¤à¦¾ ইনà§à¦¸à§à¦¤à¦² নাই।" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাই" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager মডিউলৰ বাবে কোনো ডিসà§à¦ªà§à¦²à§‡ পà§à§°à¦¬à¦¨à§à¦§à¦• নাই।" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "ডিসà§à¦ªà§à¦²à§‡ পà§à§°à¦¬à¦¨à§à¦§à¦• কনà§à¦«à¦¿à¦—াৰেচন অসমাপà§à¦¤" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio কনফিগাৰ কৰি আছে।" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à§° বাবে
{!s}
à§° কোনো মাউনà§à¦Ÿà§ পাইনà§à¦Ÿà§ দিয়া হোৱা নাই।" #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "পেকেজ ইনà§à¦¸à§à¦¤à¦² কৰক।" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "(%(count)d / %(total)d) পেকেজবোৰ সংশোধন কৰি আছে" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installing one package." msgstr[1] "%(num)d পেকেজবোৰ ইনসà§à¦¤à¦² হৈ আছে।" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "%(num)d পেকেজবোৰ আতৰোৱা হৈ আছে।" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "বà§à¦¤à¦²à§‹à¦¡à¦¾à§° ইনà§à¦¸à§à¦¤à¦² কৰক।" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "হাৰà§à¦¡à§±à§‡à§°à§° ঘড়ী চেতৠকৰি আছে।" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "à¦à¦•à§à¦¸à¦¿à¦¡à§ কোডৠআছিল {}" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "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:28 msgid "Writing fstab." msgstr "fstab লিখি আছে।" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "ডামী Pythonà§° কাযà§à¦¯" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "ডামী Pythonà§° পদকà§à¦·à§‡à¦ª {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "সà§à¦¥à¦¾à¦¨à§€à§Ÿà¦¬à§‹à§° কনà§à¦«à¦¿à¦—াৰ কৰি আছে।" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "নেটৱৰà§à¦• কনà§à¦«à¦¿à¦—াৰ জমা কৰি আছে।" calamares-calamares-2d126ae/lang/python/ast/000077500000000000000000000000001430147706700210405ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ast/LC_MESSAGES/000077500000000000000000000000001430147706700226255ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ast/LC_MESSAGES/python.po000066400000000000000000000303001430147706700245020ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "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:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Rellenando los sistemes de ficheros." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync falló col códigu de fallu {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Fallu al desempaquetar la imaxe «{}»" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nun hai un puntu de montaxe pa la partición del raigañu" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "El puntu de montaxe ye incorreutu pa la partición del raigañu" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de ficheros d'orixe «{}» nun esiste" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "El destín «{}» nel sistema de destín nun ye un direutoriu" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de KDM {!s}" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de LXDM {!s}" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de LightDM {!s}" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Nun pue configurase LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nun s'instaló nengún saludador de LightDM." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de SLIM {!s}" #: src/modules/displaymanager/main.py:992 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:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalación de paquetes." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando un paquete." msgstr[1] "Instalando %(num)d paquetes." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Desaniciando un paquete." msgstr[1] "Desaniciando %(num)d paquetes." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalando'l xestor d'arrinque." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Configurando'l reló de hardware." #: src/modules/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:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Configurando locales." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/az/000077500000000000000000000000001430147706700206635ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/az/LC_MESSAGES/000077500000000000000000000000001430147706700224505ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/az/LC_MESSAGES/python.po000066400000000000000000000355361430147706700243450ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Xəyyam Qocayev , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Xəyyam Qocayev , 2022\n" "Language-Team: Azerbaijani (https://www.transifex.com/calamares/teams/20061/az/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: az\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB tənzimləmələri" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Disk bölmələri qoşulur." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Zfs verilənlər dəstinin qoşulmasında daxil xəta" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Zpool idxalı baş tutmadı" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Zpool kiliddən çıxarıla bilmədi" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Zfs qoşulma nöqtəsi təyin olunmadı" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Tənzimləmə xətası" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
istifadə etmək üçün bölmələr təyin edilməyib" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs qoşulmasında xəta" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Systemd xidmətini tənzimləmək" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Xidmətdə dəyişiklik etmək mümkün olmadı" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} chroot çağırışına xəta kodu ilə cavab verdi " "{num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "{name!s} systemd xidməti aktiv edilmədi." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "{name!s} systemd hədəfi aktiv edilmədi" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "{name!s} systemd taymeri aktiv edilə bilmir." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "{name!s} systemd hədfi sönsürülmədi." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "{name!s} systemd vahidi maskalanmır." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Naməlum systemd əmrləri {command!s} və {suffix!s} " "{name!s} vahidi üçün." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Fayl sistemlərini doldurmaq." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync uğursuz oldu, xəta kodu: {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" "Tərkibi çıxarılan quraşdırma faylı - image {}/{}, çıxarılan faylların sayı " "{}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Tərkiblərini açmağa başladılır {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" quraşdırma faylının tərkibini çıxarmaq alınmadı" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Kök bölməsi üçün qoşulma nöqtəsi yoxdur" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage tərkibində bir \"rootMountPoint\" açarı yoxdur." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Kök bölməsi üçün xətalı qoşulma nöqtəsi" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint \"{}\" mövcud deyil." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Xətalı unpackfs tənzimləməsi" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Tənzimləmə məlumatı yoxdur" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) fayl sistemi sizin nüvəniz tərəfindən dəstəklənmir" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" mənbə fayl sistemi mövcud deyil" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "Unsquashfs tapılmadı, squashfs-tools paketinin quraşdırıldığına əmin olun." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Hədəf sistemində təyin edilən \"{}\", qovluq deyil" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM tənzimlənə bilmir" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM qarşılama quraşdırılmayıb." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLİM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLİM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager modulu üçün ekran menecerləri seçilməyib." #: src/modules/displaymanager/main.py:993 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:1075 msgid "Display manager configuration was incomplete" msgstr "Ekran meneceri tənzimləmələri başa çatmadı" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio tənzimlənir." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "
{!s}
istifadə etmək üçün kök qoşulma nöqtəsi təyin edilməyib." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Quraşdırılma tarixi." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "OpenRC xidmətlərini tənzimləmək" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "{name!s} xidməti {level!s} işləmə səviyyəsinə əlavə edilə bilmir." #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "{name!s} xidməti {level!s} iş səviyyəsindən silinə bilmir." #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "{level!s} işləmə səviyyəsindəki {name!s} xidməti üçün naməlum " "{arg!s} xidmət fəaliyyəti." #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} chroot-da çağırışına {num!s} xəta kodu ilə " "cavab verildi." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Hədəf işləmə səviyyəsi mövcud deyil" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "{level!s} işləmə səviyyəsi üçün {path!s} yolu mövcud deyil." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Hədəf xidməti mövcud deyil" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "{name!s} üçün {path!s} yolu mövcud deyil." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Plymouth mövzusu tənzimlənməsi" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Paketləri quraşdırmaq." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "(%(count)d / %(total)d) paketləri işlənir" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Bir paket quraşdırılır." msgstr[1] "%(num)d paket quraşdırılır." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Bir paket silinir" msgstr[1] "%(num)d paket silinir." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Paket meneceri xətası" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Bu paket meneceri yenilənmələri hazırlaya bilmədi.
{!s}
əmri xəta" " kodu {!s} ilə cavab verdi." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Paket meneceri sistemi yeniləyə bimədi.
{!s}
əmri xəta kodu {!s} " "ilə cavab verdi." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "Paket meneceri dəyişiklikləri sistemə tətbiq edə bilmədi.
{!s}
" "əmri xəta kodu {!s} ilə cavab verdi." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Önyükləyici qurulur." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "Grub quraşdırılmadı, ümumi yaddaş üçün bölmələr təyin olunmayıb" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Önyükləyicinin quraşdırılmasında xəta" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Önyükləyici quraşdırıla bilmədi. Quraşdırma əmri
{!s}
, xəta kodu " "{!s} ilə cavab verdi." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Aparat saatını ayarlamaq." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "mkinitfs ilə initramfs yaradılır" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Hədəfdə mkinitfs başlatmaq baş tutmadı" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Çıxış kodu {} idi" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "Dracut ilə initramfs yaratmaq." #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "Hədəfdə dracut başladılmadı" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "initramfs tənzimlənir." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt xidməti tənzimlənir." #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "fstab yazılır." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" "İstifadə etmək üçün,
{!s}
tənzimləməsi,
{!s}
üçün " "göstərilməyib." #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy python işi." #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "{} Dummy python addımı" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Lokallaşma tənzimlənir." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Şəbəkə ayarları saxlanılır." calamares-calamares-2d126ae/lang/python/az_AZ/000077500000000000000000000000001430147706700212555ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/az_AZ/LC_MESSAGES/000077500000000000000000000000001430147706700230425ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/az_AZ/LC_MESSAGES/python.po000066400000000000000000000355611430147706700247350ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Xəyyam Qocayev , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Xəyyam Qocayev , 2022\n" "Language-Team: Azerbaijani (Azerbaijan) (https://www.transifex.com/calamares/teams/20061/az_AZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: az_AZ\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB tənzimləmələri" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Disk bölmələri qoşulur." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Zfs verilənlər dəstinin qoşulmasında daxil xəta" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Zpool idxalı baş tutmadı" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Zpool kiliddən çıxarıla bilmədi" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Zfs qoşulma nöqtəsi təyin olunmadı" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Tənzimləmə xətası" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
istifadə etmək üçün bölmələr təyin edilməyib" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs qoşulmasında xəta" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Systemd xidmətini tənzimləmək" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Xidmətdə dəyişiklik etmək mümkün olmadı" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} chroot çağırışına xəta kodu ilə cavab verdi " "{num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "{name!s} systemd xidməti aktiv edilmədi." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "{name!s} systemd hədəfi aktiv edilmədi" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "{name!s} systemd taymeri aktiv edilə bilmir." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "{name!s} systemd hədfi sönsürülmədi." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "{name!s} systemd vahidi maskalanmır." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Naməlum systemd əmrləri {command!s} və {suffix!s} " "{name!s} vahidi üçün." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Fayl sistemlərini doldurmaq." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync uğursuz oldu, xəta kodu: {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" "Tərkibi çıxarılan quraşdırma faylı - image {}/{}, çıxarılan faylların sayı " "{}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Tərkiblərini açmağa başladılır {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" quraşdırma faylının tərkibini çıxarmaq alınmadı" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Kök bölməsi üçün qoşulma nöqtəsi yoxdur" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage tərkibində bir \"rootMountPoint\" açarı yoxdur." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Kök bölməsi üçün xətalı qoşulma nöqtəsi" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint \"{}\" mövcud deyil." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Xətalı unpackfs tənzimləməsi" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Tənzimləmə məlumatı yoxdur" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) fayl sistemi sizin nüvəniz tərəfindən dəstəklənmir" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" mənbə fayl sistemi mövcud deyil" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "Unsquashfs tapılmadı, squashfs-tools paketinin quraşdırıldığına əmin olun." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Hədəf sistemində təyin edilən \"{}\", qovluq deyil" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM tənzimlənə bilmir" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM qarşılama quraşdırılmayıb." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLİM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLİM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager modulu üçün ekran menecerləri seçilməyib." #: src/modules/displaymanager/main.py:993 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:1075 msgid "Display manager configuration was incomplete" msgstr "Ekran meneceri tənzimləmələri başa çatmadı" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio tənzimlənir." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "
{!s}
istifadə etmək üçün kök qoşulma nöqtəsi təyin edilməyib." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Quraşdırılma tarixi." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "OpenRC xidmətlərini tənzimləmək" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "{name!s} xidməti {level!s} işləmə səviyyəsinə əlavə edilə bilmir." #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "{name!s} xidməti {level!s} iş səviyyəsindən silinə bilmir." #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "{level!s} işləmə səviyyəsindəki {name!s} xidməti üçün naməlum " "{arg!s} xidmət fəaliyyəti." #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} chroot-da çağırışına {num!s} xəta kodu ilə " "cavab verildi." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Hədəf işləmə səviyyəsi mövcud deyil" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "{level!s} işləmə səviyyəsi üçün {path!s} yolu mövcud deyil." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Hədəf xidməti mövcud deyil" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "{name!s} üçün {path!s} yolu mövcud deyil." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Plymouth mövzusu tənzimlənməsi" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Paketləri quraşdırmaq." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "(%(count)d / %(total)d) paketləri işlənir" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Bir paket quraşdırılır." msgstr[1] "%(num)d paket quraşdırılır." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Bir paket silinir" msgstr[1] "%(num)d paket silinir." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Paket meneceri xətası" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Bu paket meneceri yenilənmələri hazırlaya bilmədi.
{!s}
əmri xəta" " kodu {!s} ilə cavab verdi." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Paket meneceri sistemi yeniləyə bimədi.
{!s}
əmri xəta kodu {!s} " "ilə cavab verdi." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "Paket meneceri dəyişiklikləri sistemə tətbiq edə bilmədi.
{!s}
" "əmri xəta kodu {!s} ilə cavab verdi." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Önyükləyici qurulur." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "Grub quraşdırılmadı, ümumi yaddaş üçün bölmələr təyin olunmayıb" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Önyükləyicinin quraşdırılmasında xəta" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Önyükləyici quraşdırıla bilmədi. Quraşdırma əmri
{!s}
, xəta kodu " "{!s} ilə cavab verdi." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Aparat saatını ayarlamaq." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "mkinitfs ilə initramfs yaradılır" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Hədəfdə mkinitfs başlatmaq baş tutmadı" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Çıxış kodu {} idi" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "Dracut ilə initramfs yaratmaq." #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "Hədəfdə dracut başladılmadı" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "initramfs tənzimlənir." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt xidməti tənzimlənir." #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "fstab yazılır." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" "İstifadə etmək üçün,
{!s}
tənzimləməsi,
{!s}
üçün " "göstÉ™rilmÉ™yib." #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy python iÅŸi." #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "{} Dummy python addımı" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "LokallaÅŸma tÉ™nzimlÉ™nir." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "ŞəbÉ™kÉ™ ayarları saxlanılır." calamares-calamares-2d126ae/lang/python/be/000077500000000000000000000000001430147706700206375ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/be/LC_MESSAGES/000077500000000000000000000000001430147706700224245ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/be/LC_MESSAGES/python.po000066400000000000000000000362221430147706700243120ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "Мантаванне раздзелаў." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Памылка канфігурацыі" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Раздзелы длÑ
{!s}
не вызначаныÑ." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Ðаладзіць Ñлужбы systemd" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Ðемагчыма наладзіць Ñлужбу" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "systemctl {arg!s} у chroot вÑрнуў код памылкі {num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Ðемагчыма ўключыць Ñлужбу systemd {name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Ðемагчыма ўключыць мÑту systemd {name!s}." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Ðемагчыма выключыць мÑту systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Ðемагчыма замаÑкаваць адзінку systemd {name!s}. " #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "ÐевÑÐ´Ð¾Ð¼Ñ‹Ñ systemd загады {command!s} Ñ– {suffix!s} " "Ð´Ð»Ñ Ð°Ð´Ð·Ñ–Ð½ÐºÑ– {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Запаўненне файлавых ÑÑ–ÑÑ‚Ñм." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "памылка rsync з кодам {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "РаÑпакоўванне вобраза {}/{}, файл {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "ЗапуÑк раÑÐ¿Ð°ÐºÐ¾ÑžÐ²Ð°Ð½Ð½Ñ {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Ðе атрымалаÑÑ Ñ€Ð°Ñпакаваць вобраз \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Ð”Ð»Ñ ÐºÐ°Ñ€Ð°Ð½Ñ‘Ð²Ð°Ð³Ð° раздзела нÑма пункта мантаваннÑ" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Хібны пункт Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ°Ñ€Ð°Ð½Ñ‘Ð²Ð°Ð³Ð° раздзела" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Ð¤Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма Ð´Ð»Ñ \"{}\" ({}) не падтрымліваецца вашым бÑгучым Ñдром" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Ð—Ñ‹Ñ…Ð¾Ð´Ð½Ð°Ñ Ñ„Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма \"{}\" не Ñ–Ñнуе" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Пункт прызначÑÐ½Ð½Ñ \"{}\" у мÑтавай ÑÑ–ÑÑ‚Ñме не з’ÑўлÑецца каталогам" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Ðемагчыма запіÑаць файл канфігурацыі KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Файл канфігурацыі KDM {!s} не Ñ–Ñнуе" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Ðемагчыма запіÑаць файл канфігурацыі LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Файл канфігурацыі LXDM {!s} не Ñ–Ñнуе" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Ðемагчыма запіÑаць файл канфігурацыі LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Файл канфігурацыі LightDM {!s} не Ñ–Ñнуе" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Ðемагчыма наладзіць LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM greeter не ÑžÑталÑваны." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Ðемагчыма запіÑаць файл канфігурацыі SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Файл канфігурацыі SLIM {!s} не Ñ–Ñнуе" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "У модулі дыÑплейных кіраўнікоў нічога не абрана." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Ð¡Ð¿Ñ–Ñ Ð´Ñ‹Ñплейных кіраўнікоў пуÑты альбо не вызначаны Ñž both globalstorage Ñ– " "displaymanager.conf." #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "Ðаладка дыÑплейнага кіраўніка не завершанаÑ." #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Ðаладка mkinitcpio." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Каранёвы пункт Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð»Ñ
{!s}
не пададзены." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "УÑталÑваць пакункі." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Ðпрацоўка пакункаў (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "УÑталёўка аднаго пакунка." msgstr[1] "УÑталёўка %(num)d пакункаў." msgstr[2] "УÑталёўка %(num)d пакункаў." msgstr[3] "УÑталёўка%(num)d пакункаў." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Выдаленне аднаго пакунка." msgstr[1] "Выдаленне %(num)d пакункаў." msgstr[2] "Выдаленне %(num)d пакункаў." msgstr[3] "Выдаленне %(num)d пакункаў." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "УÑталÑваць загрузчык." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Ðаладка апаратнага гадзінніка." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "СтварÑнне initramfs праз mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Ðе атрымалаÑÑ Ð·Ð°Ð¿ÑƒÑціць mkinitfs у пункце прызначÑннÑ" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Код выхаду {}" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "СтварÑнне initramfs з dracut." #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "Ðе атрымалаÑÑ Ð·Ð°Ð¿ÑƒÑціць dracut у пункце прызначÑннÑ" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Ðаладка initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Ðаладка OpenRC dmcrypt." #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "Ð—Ð°Ð¿Ñ–Ñ fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Ðаладка лакалÑÑž." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Захаванне Ñеткавай канфігурацыі." calamares-calamares-2d126ae/lang/python/bg/000077500000000000000000000000001430147706700206415ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/bg/LC_MESSAGES/000077500000000000000000000000001430147706700224265ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/bg/LC_MESSAGES/python.po000066400000000000000000000312141430147706700243100ustar00rootroot00000000000000# 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 (Жоро) , 2022 # mkkDr2010, 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: mkkDr2010, 2022\n" "Language-Team: Bulgarian (https://www.transifex.com/calamares/teams/20061/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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 "Конфигурирай GRUB." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Грешка в конфигурациÑта" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Конфигурирай 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:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "КонфигурационниÑÑ‚ файл на KDM не може да бъде запиÑан" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "КонфигурационниÑÑ‚ файл на KDM {!s} не ÑъщеÑтвува" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "КонфигурационниÑÑ‚ файл на LXDM не може да бъде запиÑан" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "КонфигурационниÑÑ‚ файл на LXDM {!s} не ÑъщеÑтвува" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "КонфигурационниÑÑ‚ файл на LightDM не може да бъде запиÑан" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "КонфигурационниÑÑ‚ файл на LightDM {!s} не ÑъщеÑтвува" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "КонфигурационниÑÑ‚ файл на SLIM не може да бъде запиÑан" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "КонфигурационниÑÑ‚ файл на SLIM {!s} не ÑъщеÑтвува" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Конфигуриране на mkinitcpio." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Конфигурирай 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 "" #: 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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "ИнÑталирай пакетите." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Обработване на пакетите (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "ИнÑталиране на пакета." msgstr[1] "ИнÑталиране на %(num)d пакета." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Премахване на пакета." msgstr[1] "Премахване на %(num)d пакета." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "ИнÑталирай програма за начално зареждане." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "ИнÑталирането на grub е неуÑпешно – нÑма определени дÑлове в мÑÑтото за " "Ñъхранение" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Грешка при инÑталирането на програмата за начално зареждане" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/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 "" #: 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:28 msgid "Writing fstab." msgstr "ЗапиÑване на fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Фиктивна задача на python." #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Фиктивна Ñтъпка на python {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Конфигуриране на локализациÑта." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/bn/000077500000000000000000000000001430147706700206505ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/bn/LC_MESSAGES/000077500000000000000000000000001430147706700224355ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/bn/LC_MESSAGES/python.po000066400000000000000000000273471430147706700243330ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # 508a8b0ef95404aa3dc5178f0ccada5e_017b8a4 , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: 508a8b0ef95404aa3dc5178f0ccada5e_017b8a4 , 2020\n" "Language-Team: Bengali (https://www.transifex.com/calamares/teams/20061/bn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "কনফিগার করà§à¦¨ জিআরইউবি।" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "মাউনà§à¦Ÿ করছে পারà§à¦Ÿà¦¿à¦¶à¦¨à¦—à§à¦²à§‹à¥¤" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "কনফিগারেশন তà§à¦°à§à¦Ÿà¦¿" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "কোন পারà§à¦Ÿà¦¿à¦¶à¦¨ নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করা হয়নি
{!à¦à¦¸}
বà§à¦¯à¦¬à¦¹à¦¾à¦° করার জনà§à¦¯à¥¤" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "কনফিগার করà§à¦¨ সিসà§à¦Ÿà§‡à¦®à¦¡à¦¿ সেবাগà§à¦²à¦¿" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "সেবা পরিবরà§à¦¤à¦¨ করতে পারে না" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "সিসà§à¦Ÿà§‡à¦®à¦¸à¦¿à¦Ÿà¦¿à¦à¦² {à¦à¦†à¦°à¦œà¦¿!à¦à¦¸}সিà¦à¦‡à¦šà¦°à§à¦Ÿ ফেরত তà§à¦°à§à¦Ÿà¦¿ কোড দে{NUM! গà§à¦²à¦¿}।" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®à¦—à§à¦²à¦¿à¦ªà§‚রণ করছে।" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "তà§à¦°à§à¦Ÿà¦¿ কোড সহ আরসিঙà§à¦• বà§à¦¯à¦°à§à¦¥ হয়েছে {}।" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "চিতà§à¦° আনপà§à¦¯à¦¾à¦• করছে {} / {}, ফাইল {} / {}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "আনপà§à¦¯à¦¾à¦• করা শà§à¦°à§ করছে {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "চিতà§à¦° আনপà§à¦¯à¦¾à¦• করতে বà§à¦¯à¦°à§à¦¥ হয়েছে \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/ca/000077500000000000000000000000001430147706700206345ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ca/LC_MESSAGES/000077500000000000000000000000001430147706700224215ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ca/LC_MESSAGES/python.po000066400000000000000000000360711430147706700243110ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Davidmp , 2022\n" "Language-Team: Catalan (https://www.transifex.com/calamares/teams/20061/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "Es munten les particions." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Error intern en muntar els conjunts de dades zfs" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "No s'ha pogut importar zpool." #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "No s'ha pogut desblocar zpool." #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "No s'ha pogut establir el punt de muntatge de zfs." #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Error de configuració" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "No s'han definit particions perquè les usi
{!s}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "error de muntatge de zfs" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configura els serveis de systemd" #: src/modules/services-systemd/main.py: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:69 msgid "Cannot enable systemd service {name!s}." msgstr "No es pot habilitar el servei de systemd {name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "No es pot habilitar la destinació de systemd {name!s}." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" "No es pot habilitar el temporitzador de systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "No es pot inhabilitar la destinació de systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "No es pot emmascarar la unitat de systemd {name!s}." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "S'omplen els sistemes de fitxers." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "Ha fallat rsync amb el codi d'error {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Es desempaqueta la imatge {}/{}, fitxer {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Es comença a desempaquetar {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Ha fallat desempaquetar la imatge \"{}\"." #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "No hi ha punt de muntatge per a la partició d'arrel." #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage no conté una clau \"rootMountPoint\"." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Punt de muntatge incorrecte per a la partició d'arrel" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "El punt de muntage d'arrel és \"{}\", però no existeix." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Configuració d'unpackfs incorrecta" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "No hi ha informació de configuració." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "El sistema de fitxers per a {} ({}) no és admès pel nucli actual." #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de fitxers font \"{}\" no existeix." #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "No s'ha pogut trobar unsquashfs, assegureu-vos que tingueu instal·lat el " "paquet squashfs-tools." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destinació \"{}\" al sistema de destinació no és un directori." #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "No es pot escriure el fitxer de configuració del KDM." #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "El fitxer de configuració del KDM {!s} no existeix." #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'LXDM." #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "El fitxer de configuració de l'LXDM {!s} no existeix." #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "No es pot escriure el fitxer de configuració del LightDM." #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "El fitxer de configuració del LightDM {!s} no existeix." #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "No es pot configurar el LightDM." #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "No hi ha benvinguda instal·lada per al LightDM." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'SLIM." #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "El fitxer de configuració de l'SLIM {!s} no existeix." #: src/modules/displaymanager/main.py:992 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:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "No s'ha proporcionat el punt de muntatge perquè l'usi
{!s}
." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instal·la els paquets." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Es processen paquets (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "S'instal·la un paquet." msgstr[1] "S'instal·len %(num)d paquets." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Se suprimeix un paquet." msgstr[1] "Se suprimeixen %(num)d paquets." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Error del gestor de paquets" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "El gestor de paquets no ha pogut preparar les actualitzacions. " "L'ordre
{!s}
ha retornat el codi d'error {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "El gestor de paquets no ha pogut actualitzar el sistema. L'ordre " "
{!s}
ha retornat el codi d'error {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "El gestor de paquets no ha pogut fer canvis al sistema instal·lat. L'ordre " "
{!s}
ha retornat el codi d'error {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "S'instal·la el carregador d'arrencada." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "No s'ha pogut instal·lar el grub. No s'han definit particions a " "l'emmagatzematge global." #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Error d'instal·lació del carregador d'arrencada" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "No s'ha pogut instal·lar el carregador d'arrencada. L'ordre d'instal·lació " "
{!s}
ha retornat el codi d'error {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "S'estableix el rellotge del maquinari." #: src/modules/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:28 msgid "Writing fstab." msgstr "S'escriu fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Es configuren les llengües." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Es desa la configuració de la xarxa." calamares-calamares-2d126ae/lang/python/ca@valencia/000077500000000000000000000000001430147706700224375ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ca@valencia/LC_MESSAGES/000077500000000000000000000000001430147706700242245ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ca@valencia/LC_MESSAGES/python.po000066400000000000000000000337661430147706700261240ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "S'estan muntant les particions." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "S'ha produït un error en la configuració." #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "No s'han definit particions perquè les use
{!s}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py: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:69 msgid "Cannot enable systemd service {name!s}." msgstr "No es pot habilitar el servei de systemd {name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "No es pot habilitar la destinació de systemd {name!s}." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "No es pot inhabilitar la destinació de systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "No es pot emmascarar la unitat de systemd {name!s}." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Es desconeixen les ordres de systemd: {command!s} i " "{suffix!s}, per a la unitat {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "S'estan emplenant els sistemes de fitxers." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "Ha fallat rsync amb el codi d'error {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "S’està desempaquetant la imatge {}/{}, fitxer {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "S’està començant a desempaquetar {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "No s’ha pogut desempaquetar la imatge \"{}\"." #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "No hi ha cap punt de muntatge per a la partició d'arrel." #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "El punt de muntatge per a la partició d'arrel és incorrecte." #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "El nucli actual no admet el sistema de fitxers per a \"{}\" ({})." #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de fitxers font \"{}\" no existeix." #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destinació \"{}\" en el sistema de destinació no és un directori." #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "No es pot escriure el fitxer de configuració del KDM." #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "El fitxer de configuració del KDM {!s} no existeix." #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'LXDM." #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "El fitxer de configuració de l'LXDM {!s} no existeix." #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "No es pot escriure el fitxer de configuració del LightDM." #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "El fitxer de configuració del LightDM {!s} no existeix." #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "No es pot configurar el LightDM." #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "No hi ha benvinguda instal·lada per al LightDM." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'SLIM." #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "El fitxer de configuració de l'SLIM {!s} no existeix." #: src/modules/displaymanager/main.py:992 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:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "No s'ha proporcionat el punt de muntatge perquè l'use
{!s}
." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instal·la els paquets." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "S'estan processant els paquets (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, 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:71 #, 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:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instal·la el carregador d'arrancada." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "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:28 msgid "Writing fstab." msgstr "Escriptura d’fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Configuració d’idioma." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "S'està guardant la configuració de la xarxa." calamares-calamares-2d126ae/lang/python/cs_CZ/000077500000000000000000000000001430147706700212525ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/cs_CZ/LC_MESSAGES/000077500000000000000000000000001430147706700230375ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/cs_CZ/LC_MESSAGES/python.po000066400000000000000000000365321430147706700247310ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Pavel Borecki , 2022\n" "Language-Team: Czech (Czech Republic) (https://www.transifex.com/calamares/teams/20061/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "PÅ™ipojování oddílů." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "VnitÅ™ní chyba pÅ™i pÅ™ipojování zfs datových sad" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "NepodaÅ™ilo se naimportovat zfs fond" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "NepodaÅ™ilo se odemknout zfs fond" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "NepodaÅ™ilo se nastavit zfs přípojný bod" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Chyba nastavení" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Pro
{!s}
nejsou zadány žádné oddíly." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "Chyba pÅ™i pÅ™ipojování zfs" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Nastavit služby systemd" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "Nedaří se zapnout systemd ÄasovaÄ {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Nedaří se vypnout systemd cíl {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Nedaří se maskovat systemd jednotku {name!s}." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Naplňování souborových systémů." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync se nezdaÅ™ilo s chybových kódem {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Rozbalování obrazu {}/{}, soubor {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Zahajování rozbalení {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "NepodaÅ™ilo se rozbalit obraz „{}“" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Žádný přípojný bot pro koÅ™enový oddíl" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage neobsahuje klÃ­Ä â€žrootMountPoint“." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Chybný přípojný bod pro koÅ™enový oddíl" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint je „{}“, což neexistuje." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Chybné nastavení unpackfs" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Není zde žádná informace o nastavení." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "Souborový systém „{}“ ({}) není jádrem systému, které právÄ› používáte, " "podporován" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Zdrojový souborový systém „{}“ neexistuje" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "NepodaÅ™ilo se nalézt nástroj unsquashfs – ověřte, že je nainstalovaný " "balíÄek squashfs-tools." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Cíl „{}“ v cílovém systému není složka" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro KDM {!s} neexistuje" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro LXDM {!s} neexistuje" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro LightDM {!s} neexistuje" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Nedaří se nastavit LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Není nainstalovaný žádný LightDM pÅ™ivítaÄ" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Soubor s nastaveními pro SLIM {!s} neexistuje" #: src/modules/displaymanager/main.py:992 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:993 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 globalstorage, " "tak v displaymanager.conf." #: src/modules/displaymanager/main.py:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Pro
{!s}
není zadán žádný přípojný bod." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Nainstalovat balíÄky." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Zpracovávání balíÄků (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, 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:71 #, 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:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Chyba nástroje pro správu balíÄků" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Nástroji pro správu balíÄků se nepodaÅ™ilo pÅ™ipravit aktualizace. Příkaz " "
{!s}
vrátil chybový kód {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Nástroji pro správu balíÄků se nepodaÅ™ilo aktualizovat systém. Příkaz " "
{!s}
vrátil chybový kód {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "Nástroji pro správu balíÄků se nepodaÅ™ilo udÄ›lat zmÄ›ny v instalovaném " "systému. Příkaz
{!s}
vrátil chybový kód {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalace zavadÄ›Äe systému." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "NepodaÅ™ilo se nainstalovat zavadÄ›Ä grub – v globálním úložiÅ¡ti nejsou " "definovány žádné oddíly" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Chyba pÅ™i instalaci zavadÄ›Äe systému" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "ZavadÄ›Ä systému se nepodaÅ™ilo nainstalovat. InstalaÄní příkaz
{!s} "
"vrátil chybový kód {!s}."

#: src/modules/hwclock/main.py:26
msgid "Setting hardware clock."
msgstr "Nastavování hardwarových hodin."

#: src/modules/mkinitfs/main.py:27
msgid "Creating initramfs with mkinitfs."
msgstr "Vytváření initramfs nástrojem 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:28
msgid "Writing fstab."
msgstr "Zapisování fstab."

#: src/modules/fstab/main.py:429
msgid "No 
{!s}
configuration is given for
{!s}
to use." msgstr "" "Pro
{!s}
není zadáno žádné nastavení
{!s}
, které " "použít. " #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Testovací úloha python." #: src/modules/dummypython/main.py: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:31 msgid "Configuring locales." msgstr "Nastavování místních a jazykových nastavení." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Ukládání nastavení sítě." calamares-calamares-2d126ae/lang/python/da/000077500000000000000000000000001430147706700206355ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/da/LC_MESSAGES/000077500000000000000000000000001430147706700224225ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/da/LC_MESSAGES/python.po000066400000000000000000000324531430147706700243120ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "Monterer partitioner." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Fejl ved konfiguration" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Der er ikke angivet nogle partitioner som
{!s}
kan bruge." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfigurer systemd-tjenester" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Kan ikke deaktivere systemd-målet {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Kan ikke maskere systemd-enheden {name!s}." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Udfylder filsystemer." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync mislykkede med fejlkoden {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Udpakker aftrykket {}/{}, filen {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Begynder at udpakke {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Kunne ikke udpakke aftrykket \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Intet monteringspunkt til rodpartition" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Dårligt monteringspunkt til rodpartition" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Filsystemet til \"{}\" ({}) understøttes ikke af din nuværende kerne" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Kildefilsystemet \"{}\" findes ikke" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Destinationen \"{}\" i målsystemet er ikke en mappe" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Kan ikke skrive KDM-konfigurationsfil" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Kan ikke skrive LXDM-konfigurationsfil" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Kan ikke skrive LightDM-konfigurationsfil" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Kan ikke konfigurere LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Der er ikke installeret nogen LightDM greeter." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Kan ikke skrive SLIM-konfigurationsfil" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:992 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:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Der er ikke angivet noget rodmonteringspunkt som
{!s}
kan bruge." #: 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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Installér pakker." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Forarbejder pakker (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installerer én pakke." msgstr[1] "Installerer %(num)d pakker." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Fjerner én pakke." msgstr[1] "Fjerner %(num)d pakker." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Installér bootloader." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Indstiller hardwareur." #: src/modules/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:28 msgid "Writing fstab." msgstr "Skriver fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Konfigurerer lokaliteter." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Gemmer netværkskonfiguration." calamares-calamares-2d126ae/lang/python/de/000077500000000000000000000000001430147706700206415ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/de/LC_MESSAGES/000077500000000000000000000000001430147706700224265ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/de/LC_MESSAGES/python.po000066400000000000000000000357061430147706700243220ustar00rootroot00000000000000# 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 # Andreas Eitel , 2020 # Gustav Gyges, 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Gustav Gyges, 2022\n" "Language-Team: German (https://www.transifex.com/calamares/teams/20061/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "Hänge Partitionen ein." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Interner Fehler beim Einhängen des ZFS-Datensets" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Zpool konnte nicht importiert werden" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Zpool konnte nicht entsperrt werden" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Zpool-Einhängepunkt konnte nicht gesetzt werden" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Konfigurationsfehler" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Für
{!s}
sind keine zu verwendenden Partitionen definiert." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "Fehler beim Einhängen von ZFS" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfiguriere systemd-Dienste" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "Systemd-Timer {name!s} kann nicht aktiviert werden." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Das systemd-Ziel {name!s} kann nicht deaktiviert werden." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Die systemd-Einheit {name!s} kann nicht maskiert werden." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Befüllen von Dateisystemen." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync fehlgeschlagen mit Fehlercode {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Abbilddatei Entpacken {}/{}, Datei {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Beginn des Entpackens {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Entpacken der Abbilddatei \"{}\" fehlgeschlagen" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Kein Einhängepunkt für die Root-Partition" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "Globalstorage enthält keinen Schlüssel für \"rootMountPoint\"." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Ungültiger Einhängepunkt für die Root-Partition" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint ist \"{}\", was nicht existiert." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Fehlerhafte unpackfs-Konfiguration" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Es gibt keine Informationen zur Konfiguration." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "Das Dateisystem für \"{}\" ({}) wird von Ihrem aktuellen Kernel nicht " "unterstützt" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Das Quelldateisystem \"{}\" existiert nicht" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "Unsquashfs nicht gefunden, stellen Sie sicher, dass das Paket squashfs-tools" " installiert ist." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Das Ziel \"{}\" im Zielsystem ist kein Verzeichnis" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Schreiben der KDM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Schreiben der LXDM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Schreiben der LightDM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Konfiguration von LightDM ist nicht möglich" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Keine Benutzeroberfläche für LightDM installiert." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Schreiben der SLIM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Keine Displaymanager für das Displaymanager-Modul ausgewählt." #: src/modules/displaymanager/main.py:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Für
{!s}
wurde kein Einhängepunkt für die Root-Partition " "angegeben." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Pakete installieren " #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Verarbeite Pakete (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installiere ein Paket" msgstr[1] "Installiere %(num)d Pakete." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Entferne ein Paket" msgstr[1] "Entferne %(num)d Pakete." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Fehler im Paketmanager" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Der Paketmanager konnte die Aktualisierungen nicht vorbereiten. Der Befehl " "
{!s}
erzeugte Fehlercode {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Der Paketmanager konnte das System nicht aktualisieren. Der Befehl " "
{!s}
erzeugte Fehlercode {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "Der Paketmanager konnte das installierte System nicht verändern. Der Befehl " "
{!s}
erzeugte Fehlercode {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Installiere Bootloader." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Grub konnte nicht installiert werden, keine Partitionen im globalen Speicher" " definiert." #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Fehler beim Installieren des Bootloaders" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Der Bootloader konnte nicht installiert werden. Der Installationsbefehl " "
{!s}
erzeugte Fehlercode {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Einstellen der Hardware-Uhr." #: src/modules/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:28 msgid "Writing fstab." msgstr "Schreibe fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" "Keine
{!s}
Konfiguration gegeben die
{!s}
benutzen " "könnte." #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy Python-Job" #: src/modules/dummypython/main.py: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:31 msgid "Configuring locales." msgstr "Konfiguriere Lokalisierungen." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Speichere Netzwerkkonfiguration." calamares-calamares-2d126ae/lang/python/el/000077500000000000000000000000001430147706700206515ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/el/LC_MESSAGES/000077500000000000000000000000001430147706700224365ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/el/LC_MESSAGES/python.po000066400000000000000000000255371430147706700243330ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Efstathios Iosifidis , 2022\n" "Language-Team: Greek (https://www.transifex.com/calamares/teams/20061/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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 "ΡÏθμιση GRUB." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "ΠÏοσάÏτηση κατατμήσεων." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Αδυναμία ÏÏθμισης LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Εγκατάσταση δεδομένων." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "εγκατάσταση πακέτων." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Σφάλμα διαχειÏιστή πακέτων" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "ΕγγÏαγή fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/en_GB/000077500000000000000000000000001430147706700212235ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/en_GB/LC_MESSAGES/000077500000000000000000000000001430147706700230105ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/en_GB/LC_MESSAGES/python.po000066400000000000000000000257701430147706700247040ustar00rootroot00000000000000# 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 # Karthik Arasappan, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Karthik Arasappan, 2021\n" "Language-Team: English (United Kingdom) (https://www.transifex.com/calamares/teams/20061/en_GB/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Configuration Error " #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Cannot write KDM configuration file" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configure OpenRC services" #: 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 "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 "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Install packages." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processing packages (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installing one package." msgstr[1] "Installing %(num)d packages." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "Removing %(num)d packages." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Package Manager error" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Bootloader installation error" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/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:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Saving network configuration " calamares-calamares-2d126ae/lang/python/eo/000077500000000000000000000000001430147706700206545ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/eo/LC_MESSAGES/000077500000000000000000000000001430147706700224415ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/eo/LC_MESSAGES/python.po000066400000000000000000000254501430147706700243300ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instali pakaĵoj." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Prilaborante pakaĵoj (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalante unu pakaĵo." msgstr[1] "Instalante %(num)d pakaĵoj." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Forigante unu pakaĵo." msgstr[1] "Forigante %(num)d pakaĵoj." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/es/000077500000000000000000000000001430147706700206605ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/es/LC_MESSAGES/000077500000000000000000000000001430147706700224455ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/es/LC_MESSAGES/python.po000066400000000000000000000375631430147706700243440ustar00rootroot00000000000000# 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 # Guido Grasso , 2018 # Adolfo Jayme-Barrientos, 2019 # Miguel Mayol , 2020 # Pier Jose Gotta Perez , 2020 # Swyter , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Swyter , 2022\n" "Language-Team: Spanish (https://www.transifex.com/calamares/teams/20061/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configurar GRUB." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Montando las particiones." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" "No se pudieron montar los conjuntos de datos («datasets») de zfs por un " "error interno" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "No se pudo importar el «zpool»" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "No se pudo desbloquear el «zpool»" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "No se pudo establecer el punto de montaje zfs" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Error de configuración" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "No hay ninguna partición en
{!s}
que se pueda usar." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "hubo un error con el montaje zfs" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configurar 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 orden systemctl {arg!s} del «chroot» devolvió el código de " "error {num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "No se puede activar el servicio de systemd {name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" "No se puede activar el objetivo («target») de systemd {name!s}." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" "No se puede activar el temporizador («timer») de systemd " "{name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" "No se puede desactivar el objetivo («target») de systemd " "{name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" "No se puede enmascarar («mask») la unidad («unit») de systemd " "{name!s}." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "systemd no reconoce las órdenes {command!s} ni " "{suffix!s} para la unidad {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Rellenando los sistemas de archivos." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "Falló la sincronización mediante «rsync» con el código de error {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Desempaquetando la imagen {}/{}, archivo {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Desempaquetando {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "No se pudo desempaquetar la imagen «{}»" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Parece que la partición raíz («root») no tiene un punto de montaje" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "El «globalstorage» no contiene una clave «rootMountPoint»." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "El punto de montaje de la partición raíz («root») no es correcto" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "«rootMountPoint» es «{}», que no existe." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "La configuración de «unpackfs» no es correcta" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Parece que no hay información de configuración." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "El sistema de archivos de «{}» ({}) no es compatible con el kernel actual" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de archivos fuente «{}» no existe" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "Parece que «unsquashfs» no está disponible; asegúrate de tener instalado " "«squashfs-tools»." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "El destino «{}» en el sistema escogido no es una carpeta" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "No se puede escribir el archivo de configuración de KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de KDM no existe" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "No se puede escribir el archivo de configuración LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "El archivo de configuracion {!s} de LXDM no existe" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "No se puede escribir el archivo de configuración de LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de LightDM no existe" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "No se puede configurar LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "No hay ningún menú de bienvenida («greeter») de LightDM instalado." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "No se puede escribir el archivo de configuración de SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de SLIM no existe" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" "No se ha elegido ningún gestor de pantalla para el módulo «displaymanager»." #: src/modules/displaymanager/main.py:993 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 sin definir tanto en " "«globalstorage» como en «displaymanager.conf»." #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" "La configuración del gestor de pantalla («display manager») estaba " "incompleta" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configurando «mkinitcpio»." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "No hay ningún punto de montaje en
{!s}
que se pueda usar." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instalando los datos." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configurar servicios de 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} en la raíz cambiada «chroot» ha devuelto el " "código de error {num!s}." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "El nivel de ejecución («runlevel») elegido 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 del nivel de ejecución («runlevel») {level!s} es " "{path!s}, que no existe." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Parece que el servicio a cambiar 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 para el servicio {name!s} es {path!s}, que no existe." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configurar tema de Plymouth" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalar paquetes." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando un paquete." msgstr[1] "Instalando %(num)d paquetes." msgstr[2] "Instalando %(num)d paquetes." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Eliminando un paquete." msgstr[1] "Eliminando %(num)d paquetes." msgstr[2] "Eliminando %(num)d paquetes." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Hubo un error del gestor de paquetes" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "El gestor de paquetes no pudo preparar las actualizaciones; la orden " "
{!s}
devolvió el código de error {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "El gestor de paquetes no pudo actualizar el sistema; la orden " "
{!s}
devolvió el código de error {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "El gestor de paquetes no pudo realizar cambios en el sistema a instalar; la " "orden
{!s}
devolvió el código de error {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalar gestor de arranque." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Hubo un error al instalar «grub»; no hay particiones definidas en el " "almacenamiento global" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Hubo un error al instalar el cargador de arranque" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "No se pudo instalar el cargador de arranque; la orden de instalación " "
{!s}
devolvió el código de error {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Ajustando el reloj interno del equipo." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Creando el «initramfs» con «mkinitfs»." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Hubo un error al ejecutar «mkinitfs» en el destino" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "El código de salida fue {}" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "Creando «initramfs» (archivos de arranque) con «dracut»." #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "Hubo un error al ejecutar «dracut» en el destino" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Configurando «initramfs» (archivos de arranque)." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configurando el servicio de arranque cifrado «dmcrypt» para OpenRC " #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "Escribiendo el «fstab»." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" "No se proporciona ninguna configuración de
{!s}
que " "
{!s}
pueda usar." #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Tarea de python ficticia." #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Paso ficticio de python {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Aplicando la configuración regional." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Guardando configuración de red." calamares-calamares-2d126ae/lang/python/es_MX/000077500000000000000000000000001430147706700212645ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/es_MX/LC_MESSAGES/000077500000000000000000000000001430147706700230515ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/es_MX/LC_MESSAGES/python.po000066400000000000000000000326441430147706700247430ustar00rootroot00000000000000# 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 # a1a9b52a3f40dff112eca965c254c602_089360e , 2018 # Erland Huaman , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configura GRUB." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Montando particiones." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Error de configuración" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "No hay particiones definidas para que
{!s}
use." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" "No se puede deshabilitar el objetivo {name!s} de systemd." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "No se puede enmascarar la unidad {name!s} de systemd." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "systemd no reconoce los comandos {command!s} y " "{suffix!s}para la unidad {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Llenando sistema de archivos." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync falló con código de error {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Desempaquetando imagen {}/{}, archivo {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Iniciando a desempaquetar {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Se falló en la desempaquetización de la imagen \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "No existe punto de montaje para la partición raíz" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Mal punto de montaje para la partición raíz" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "Tu kernel actual no tiene soporte para el sistema de archivos para \"{}\" " "({})" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de archivos fuente \"{}\" no existe" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "El destino \"{}\" en el sistema objetivo no es un directorio" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "No se puede escribir el archivo de configuración de KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "El archivo de configuración de KDM {!s} no existe" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "No se puede escribir el archivo de configuración de LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "El archivo de configuración de LXDM {!s} no existe" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "No se puede escribir el archivo de configuración de LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "El archivo de configuración de LightDM {!s} no existe" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "No se puede configurar LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM greeter no está instalado." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "No se puede escribir el archivo de configuración de SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 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:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalar paquetes." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d/%(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando un paquete." msgstr[1] "Instalando%(num)d paquetes." msgstr[2] "Instalando%(num)d paquetes." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removiendo un paquete." msgstr[1] "Removiendo %(num)dpaquetes." msgstr[2] "Removiendo %(num)dpaquetes." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalar el cargador de arranque." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Configurando 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:28 msgid "Writing fstab." msgstr "Escribiento fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Configurando locales." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Guardando configuración de red." calamares-calamares-2d126ae/lang/python/es_PR/000077500000000000000000000000001430147706700212615ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/es_PR/LC_MESSAGES/000077500000000000000000000000001430147706700230465ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/es_PR/LC_MESSAGES/python.po000066400000000000000000000250471430147706700247370ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/et/000077500000000000000000000000001430147706700206615ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/et/LC_MESSAGES/000077500000000000000000000000001430147706700224465ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/et/LC_MESSAGES/python.po000066400000000000000000000261211430147706700243310ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM seadistamine ebaõnnestus" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Paigalda paketid." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Pakkide töötlemine (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Paigaldan ühe paketi." msgstr[1] "Paigaldan %(num)d paketti." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Eemaldan ühe paketi." msgstr[1] "Eemaldan %(num)d paketti." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/eu/000077500000000000000000000000001430147706700206625ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/eu/LC_MESSAGES/000077500000000000000000000000001430147706700224475ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/eu/LC_MESSAGES/python.po000066400000000000000000000264241430147706700243400ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Ezin da KDM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Ezin da LXDM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Ezin da LightDM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Ezin da LightDM konfiguratu" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Ez dago LightDM harrera instalatua." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Ezin da SLIM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" "Ez da pantaila kudeatzailerik aukeratu pantaila-kudeatzaile modulurako." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalatu paketeak" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paketeak prozesatzen (%(count)d/ %(total)d) " #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Pakete bat instalatzen." msgstr[1] "%(num)dpakete instalatzen." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Pakete bat kentzen." msgstr[1] "%(num)dpakete kentzen." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/fa/000077500000000000000000000000001430147706700206375ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/fa/LC_MESSAGES/000077500000000000000000000000001430147706700224245ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/fa/LC_MESSAGES/python.po000066400000000000000000000374201430147706700243130ustar00rootroot00000000000000# 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 # Mahdy Mirzade , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Mahdy Mirzade , 2021\n" "Language-Team: Persian (https://www.transifex.com/calamares/teams/20061/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "در حال سوار کردن Ø§ÙØ±Ø§Ø²Ù‡Ø§." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "خطای پیکربندی" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "هیچ Ø§ÙØ±Ø§Ø²ÛŒ برای Ø§Ø³ØªÙØ§Ø¯Ù‡Ù”
{!s}
تعری٠نشده." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "در حال پیکربندی خدمات سیستم‌دی" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "نمی‌توان خدمت را دستکاری کرد" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ systemctl {arg!s} در chroot رمز خطای {num!s} را " "برگرداند." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "نمی‌توان خدمت سیستم‌دی {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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "نمی‌توان تایمر سیستم‌دی {name!s} را به کار انداخت." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "نمی‌توان خدمت سیستم‌دی {name!s} را از کار انداخت." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "نمی‌توان واحد سیستم‌دی {name!s} را پوشاند." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "دستورات ناشناختهٔ سیستم‌دی {command!s} Ùˆ " "{suffix!s} برای واحد {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "در حال پر کردن سامانه‌پرونده‌ها." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "آرسینک با رمز خطای {} شکست خورد." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "در حال بسته‌گشایی تصویر {}/{}ØŒ پروندهٔ {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "در حال شروع بسته‌گشایی {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "شکست در بسته‌گشایی تصویر {}" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "هیچ نقطهٔ اتّصالی برای Ø§ÙØ±Ø§Ø² ریشه وجود ندارد" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "نقطهٔ اتّصال بد برای Ø§ÙØ±Ø§Ø² ریشه" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "کرنل کنونیتان از سامانه‌پروندهٔ {} ({}) پشتیبانی نمی‌کند" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "سامانهٔ پروندهٔ مبدأ {} وجود ندارد" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "شکست در ÛŒØ§ÙØªÙ† unsquashfs. مطمئن شوید بسته squashfs-tools نصب است." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "مقصد {} در سامانهٔ Ù‡Ø¯ÙØŒ یک شاخه نیست" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "نمی‌توان پروندهٔ پیکربندی KDM را نوشت" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "نمی‌توان پروندهٔ پیکربندی LXDM را نوشت" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "نمی‌توان پروندهٔ پیکربندی LightDM را نوشت" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "نمی‌توان LightDM را پیکربندی کرد" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "هیچ خوش‌آمدگوی LightDMای نصب نشده." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "نمی‌توان پروندهٔ پیکربندی LightDM را نوشت" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "هیچ مدیر نمایشی برای پیمانهٔ displaymanager گزیده نشده." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Ùهرست مدیریت ØµÙØ­Ù‡ نمایش ها خالی بوده یا در محل ذخیره داده Ùˆ " "displaymanager.conf تعری٠نشده است." #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "پیکربندی مدیر نمایش کامل نبود" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "پیکربندی mkinitcpio." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "هیچ نقطهٔ اتّصال ریشه‌ای برای Ø§Ø³ØªÙØ§Ø¯Ù‡Ù”
{!s}
داده نشده." #: src/modules/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 "در حال پیکربندی زمینهٔ پلی‌موث" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "نصب بسته‌ها." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "در حال پردازش بسته‌ها (%(count)d/%(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "در حال نصب یک بسته." msgstr[1] "در حال نصب %(num)d بسته." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "در حال برداشتن یک بسته." msgstr[1] "در حال برداشتن %(num)d بسته." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "خطای مدیر بسته" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "مدیر بسته نتوانست برای بروزرسانی ها آماده شود، دستور
{!s}
با خطای" " {!s} مواجه شد." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "مدیر بسته نتوانست سامانه را بروز کند. دستور
{!s}
با خطای {!s} " "مواجه شد." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "مدیر بسته نتوانست تغییرات را برای نصب سامانه انجام دهد. دستور " "
{!s}
با خطای {!s} مواجه شد." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "نصب بارکنندهٔ راه‌اندازی." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "خطای نصب بوت لودر" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "بوت لودر نتوانست نصب شود. دستور
{!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:28 msgid "Writing fstab." msgstr "در حال نوشتن fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "پیکربندی مکانها" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "در حال ذخیرهٔ پیکربندی شبکه." calamares-calamares-2d126ae/lang/python/fi_FI/000077500000000000000000000000001430147706700212255ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/fi_FI/LC_MESSAGES/000077500000000000000000000000001430147706700230125ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/fi_FI/LC_MESSAGES/python.po000066400000000000000000000352011430147706700246740ustar00rootroot00000000000000# 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 , 2022 # Jiri Grönroos , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Jiri Grönroos , 2022\n" "Language-Team: Finnish (Finland) (https://www.transifex.com/calamares/teams/20061/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "Liitetään osioita." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Sisäinen virhe liitettäessä zfs-tietojoukkoa" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Zpoolin tuonti epäonnistui" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Zpoolin lukituksen avaaminen epäonnistui" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Määritys zfs-liitospisteen epäonnistui" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Määritysvirhe" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Osioita ei ole määritetty käytettäväksi kohteelle
{!s}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs-liitosvirhe" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Määritä systemd-palvelut" #: 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:69 msgid "Cannot enable systemd service {name!s}." msgstr "Systemd-palvelua {name!s} ei voi ottaa käyttöön." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Systemd-kohdetta {name!s} ei voi ottaa käyttöön." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "Systemd-ajastinta {name!s} ei voi ottaa käyttöön." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Systemd-kohdetta {name!s} ei voi poistaa käytöstä." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Ei voi peittää systemd-yksikköä {name!s}." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Tuntemattomia systemd-komentoja {command!s} ja " "{suffix!s} yksikölle {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Täytetään tiedostojärjestelmiä." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync epäonnistui virhekoodilla {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Puretaan levykuvaa {}/{}, tiedosto {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Pakkauksen purkaminen alkaa {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Levykuvan\"{}\" purkaminen epäonnistui" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Ei liitospistettä juuriosiolle" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage ei sisällä \"rootMountPoint\"-avainta." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Virheellinen liitospiste juuriosiolle" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint on \"{}\", jota ei ole olemassa." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Virheellinen unpacckfs-määritys" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Määritystietoja ei ole." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Nykyinen ydin ei tue osion \"{}\" ({}) tiedostojärjestelmää" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Lähdetiedostojärjestelmää \"{}\" ei ole olemassa" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "Unsquashfs-tiedostoja ei löytynyt, varmista, että paketti squashfs-tools on " "asennettu." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Kohdejärjestelmän kohde \"{}\" ei ole hakemisto" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM-määritysvirhe" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM:ää ei ole asennettu." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Displaymanager-moduulia varten ei ole valittu näytönhallintaa." #: src/modules/displaymanager/main.py:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Kohteelle
{!s}
ei ole annettu juuriliitospistettä." #: 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} suorituksen 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 "Kohteen ajotasoa 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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Asenna paketit." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Käsitellään paketteja (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Asennetaan yhtä pakettia." msgstr[1] "Asennetaan %(num)d pakettia." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Poistetaan yhtä pakettia." msgstr[1] "Poistetaan %(num)d pakettia." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Paketinhallinnan virhe" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Paketinhallinta ei voinut valmistella päivityksiä. Komento
{!s}
" "palautti virhekoodin {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Paketinhallinta ei voinut päivittää järjestelmää. Komento
{!s}
" "palautti virhekoodin {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "Paketinhallinta ei voinut tehdä muutoksia asennettuun järjestelmään. Komento" "
{!s}
palautti virhekoodin {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Asenna käynnistyslatain." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Grubin asennus epäonnistui, yleisessä levytilassa ei ole määritetty osioita" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Käynnistyslataimen asennusvirhe" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Käynnistyslatainta ei voitu asentaa. Asennuskomento
{!s}
palautti" " virhekoodin {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Asetetaan laitteiston kelloa." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Luodaan initramfs mkinitfs:llä." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "mkinitfs:n suorittaminen kohteessa 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 "Luodaan initramfs:ää dracutilla." #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "Dracutin suorittaminen kohteessa ei onnistunut" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Määritetään initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Määritetään OpenRC:n dmcrypt-palvelua." #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "Kirjoitetaan fstabiin." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" "\"
{!s}
\"-määritystä ei ole annettu käytettäväksi kohteelle " "
{!s}
." #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy-mallinen python-työ." #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Dummy-mallinen python-vaihe {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Määritetään maa-asetuksia." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Tallennetaan verkon määrityksiä." calamares-calamares-2d126ae/lang/python/fr/000077500000000000000000000000001430147706700206605ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/fr/LC_MESSAGES/000077500000000000000000000000001430147706700224455ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/fr/LC_MESSAGES/python.po000066400000000000000000000372111430147706700243320ustar00rootroot00000000000000# 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 # Aurnytoraink , 2018 # a270031086f2a0d3514bc0cb507b48f6, 2019 # Seboss666 , 2019 # Florian B , 2019 # Arnaud Ferraris , 2019 # roxfr , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: roxfr , 2022\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=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configuration du GRUB." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Montage des partitions." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Erreur interne lors du montage des jeux de données zfs" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Échec de l'importation de zpool" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Impossible de déverrouiller zpool" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Impossible de définir le point de montage zfs" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Erreur de configuration" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" "Aucune partition n'est définie pour être utilisée par
{!s}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "erreur de montage zfs" #: 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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "Impossible d'activer le minuteur systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Impossible de désactiver la cible systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Impossible de masquer l'unit systemd {name!s}." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Remplir les systèmes de fichiers." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync a échoué avec le code d'erreur {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Décompression de l'image {}/{}, fichier {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Commencer à décompresser {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Impossible de décompresser l'image \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Pas de point de montage pour la partition racine" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage ne contient pas de clé \"rootMountPoint\"." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Mauvais point de montage pour la partition racine" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "Le point de montage racine est \"{}\", qui n'existe pas." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Mauvaise configuration unpackfs" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Il n'y a pas d'informations de configuration." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "Le système de fichiers pour \"{}\" ({}) n'est pas pris en charge par votre " "noyau actuel" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Le système de fichiers source \"{}\" n'existe pas" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "Impossible de trouver unsquashfs, assurez-vous que le package squashfs-tools" " est installé." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destination \"{}\" dans le système cible n'est pas un répertoire" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Impossible d'écrire le fichier de configuration KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Le fichier de configuration KDM n'existe pas" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Impossible d'écrire le fichier de configuration LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Le fichier de configuration LXDM n'existe pas" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Impossible d'écrire le fichier de configuration LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Le fichier de configuration LightDM {!S} n'existe pas" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Impossible de configurer LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Aucun hôte LightDM est installé" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Impossible d'écrire le fichier de configuration SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Le fichier de configuration SLIM {!S} n'existe pas" #: src/modules/displaymanager/main.py:992 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:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Aucun point de montage racine n'a été donné pour être utilisé par " "
{!s}
." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Installer les paquets." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Traitement des paquets (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installation d'un paquet." msgstr[1] "Installation de %(num)d paquets." msgstr[2] "Installation de %(num)d paquets." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Suppression d'un paquet." msgstr[1] "Suppression de %(num)d paquets." msgstr[2] "Suppression de %(num)d paquets." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Erreur du gestionnaire de paquets" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Le gestionnaire de paquets n'a pas pu préparer les mises à jour. La commande" "
{!s}
a renvoyé le code d'erreur {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Le gestionnaire de paquets n'a pas pu mettre à jour le système. La commande " "
{!s}
a renvoyé le code d'erreur {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "Le gestionnaire de paquets n'a pas pu apporter de modifications au système " "installé. La commande
{!s}
a renvoyé le code d'erreur {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Installation du bootloader." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Échec de l'installation de grub, aucune partition définie dans le stockage " "global" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Erreur d'installation du chargeur de démarrage" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Le chargeur de démarrage n'a pas pu être installé. La commande " "d'installation
{!s}
a renvoyé le code d'erreur {!s}." #: 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:28 msgid "Writing fstab." msgstr "Écriture du fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" "Aucune configuration
{!s}
n'est donnée pour
{!s}
à " "utiliser." #: 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:31 msgid "Configuring locales." msgstr "Configuration des locales." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Sauvegarde de la configuration du réseau en cours." calamares-calamares-2d126ae/lang/python/fur/000077500000000000000000000000001430147706700210455ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/fur/LC_MESSAGES/000077500000000000000000000000001430147706700226325ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/fur/LC_MESSAGES/python.po000066400000000000000000000334041430147706700245170ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Fabio Tomat , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Fabio Tomat , 2020\n" "Language-Team: Friulian (https://www.transifex.com/calamares/teams/20061/fur/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fur\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configure GRUB." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Montaç des partizions." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Erôr di configurazion" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "No je stade definide nissune partizion di doprâ par
{!s}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configure i servizis di systemd" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Impussibil modificâ il servizi" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "La clamade systemctl {arg!s} in chroot e à tornât il codiç di " "erôr {num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Impussibil abilitâ il servizi di systemd {name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Impussibil abilitâ la destinazion di systemd {name!s}." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" "Impussibil disabilitâ la destinazion di systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Impussibil mascarâ la unitât di systemd {name!s}." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Comants di systemd {command!s} e {suffix!s} no " "cognossûts pe unitât {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Daûr a jemplâ i filesystems." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "Sincronizazion cun rsync falide cun codiç di erôr {}. " #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Estrazion imagjin {}/{}, file {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Daûr a scomençâ la estrazion {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "No si è rivâts a estrai la imagjin \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nissun pont di montaç pe partizion lidrîs" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Pont di montaç sbaliât pe partizion lidrîs" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Il filesystem par \"{}\" ({}) nol è supuartât dal to kernel atuâl" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Il filesystem sorzint \"{}\" nol esist" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destinazion \"{}\" tal sisteme che si va a creâ no je une cartele" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Impussibil scrivi il file di configurazion di KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Il file di configurazion di KDM {!s} nol esist" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Impussibil scrivi il file di configurazion di LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Il file di configurazion di LXDM {!s} nol esist" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Impussibil scrivi il file di configurazion di LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Il file di configurazion di LightDM {!s} nol esist" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Impussibil configurâ LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nissun menù di benvignût par LightDM instalât." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Impussibil scrivi il file di configurazion SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Il file di configurazion di SLIM {!s} nol esist" #: src/modules/displaymanager/main.py:992 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:993 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:1075 msgid "Display manager configuration was incomplete" msgstr "La configurazion dal gjestôr dai visôrs no jere complete" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Daûr a configurâ di mkinitcpio." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Nol è stât indicât nissun pont di montaç di doprâ par
{!s}
." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Daûr a instalâ i dâts." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configure i servizis OpenRC" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Impussibil zontâ il servizi {name!s} al run-level {level!s}." #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Impussibil gjavâ il servizi {name!s} dal run-level {level!s}." #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Azion dal servizi {arg!s} no cognossude pal servizi {name!s} " "tal run-level {level!s}." #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "La clamade rc-update {arg!s} in chroot e à tornât il codiç di " "erôr {num!s}." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Il runlevel di destinazion nol esist" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Il percors pal runlevel {level!s} al è {path!s}, che nol esist." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Il servizi di destinazion nol esist" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Il percors pal servizi {name!s} al è {path!s}, che nol esist." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configure il teme di Plymouth" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instale pachets." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Elaborazion dai pachets (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Daûr a instalâ un pachet." msgstr[1] "Daûr a instalâ %(num)d pachets." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Daûr a gjavâ un pachet." msgstr[1] "Daûr a gjavâ %(num)d pachets." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instale il bootloader." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Daûr a configurâ l'orloi hardware." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Daûr a creâ il initramfs cun mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "No si è rivâts a eseguî mkinitfs su la destinazion" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Il codiç di jessude al jere {}" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "Daûr a creâ initramfs cun dracut." #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "No si è rivâts a eseguî dracut su la destinazion" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Daûr a configurâ initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Daûr a configurâ il servizi dmcrypt di OpenRC." #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "Daûr a scrivi fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Lavôr di python pustiç." #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Passaç di python pustiç {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Daûr a configurâ la localizazion." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Salvament de configurazion di rêt." calamares-calamares-2d126ae/lang/python/gl/000077500000000000000000000000001430147706700206535ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/gl/LC_MESSAGES/000077500000000000000000000000001430147706700224405ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/gl/LC_MESSAGES/python.po000066400000000000000000000265611430147706700243330ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "O ficheiro de configuración de KDM {!s} non existe" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "O ficheiro de configuración de LXDM {!s} non existe" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "O ficheiro de configuración de LightDM {!s} non existe" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Non é posíbel configurar LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Non se instalou o saudador de LightDM." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "O ficheiro de configuración de SLIM {!s} non existe" #: src/modules/displaymanager/main.py:992 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:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalar paquetes." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "A procesar paquetes (%(count)d/%(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "A instalar un paquete." msgstr[1] "A instalar %(num)d paquetes." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "A retirar un paquete." msgstr[1] "A retirar %(num)d paquetes." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/gu/000077500000000000000000000000001430147706700206645ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/gu/LC_MESSAGES/000077500000000000000000000000001430147706700224515ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/gu/LC_MESSAGES/python.po000066400000000000000000000247231430147706700243420ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/he/000077500000000000000000000000001430147706700206455ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/he/LC_MESSAGES/000077500000000000000000000000001430147706700224325ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/he/LC_MESSAGES/python.po000066400000000000000000000403311430147706700243140ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Yaron Shahrabani , 2022\n" "Language-Team: Hebrew (https://www.transifex.com/calamares/teams/20061/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "מחיצות מעוגנות." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "שגי××” פנימית בעיגון סדרות × ×ª×•× ×™× ×©×œ zfs" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "×™×™×‘×•× zpool נכשל" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "שחרור zpool נכשל" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "הגדרת נקודת עיגון של zfs נכשלה" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "שגי×ת הגדרות" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "×œ× ×”×•×’×“×¨×• מחיצות לשימוש של
{!s}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "שגי×ת עיגון zfs" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "הגדרת שירותי systemd" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "×œ× × ×™×ª×Ÿ לשנות ×ת השירות" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} הקרי××” ב־chroot החזירה ×ת קוד השגי××” {num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "×œ× × ×™×ª×Ÿ להפעיל ×ת השירות ×”×‘× ×©×œ systemd:†{name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "×œ× × ×™×ª×Ÿ להפעיל ×ת היעד של systemd ×‘×©× {name!s}." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" "לנניתן להפעיל ×Âת המתזמן ב־systemd בשנ" "{name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "×œ× × ×™×ª×Ÿ להשבית ×ת היעד של systemd ×‘×©× {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "×œ× × ×™×ª×Ÿ למסך ×ת היחידה של systemd ×‘×©× {name!s}." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "פקודות ×œ× ×™×“×•×¢×•×ª של systemd†{command!s} " "ו־{suffix!s} עבור היחידה {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "מערכות ×”×§×‘×¦×™× ×ž×ª×ž×œ×ות." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync נכשל ×¢× ×§×•×“ השגי××” {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "קובץ הדמות נפרס {}/{}, קובץ {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "הפריסה של {} מתחילה" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "פריסת קובץ הדמות \"{}\" נכשלה" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "×ין נקודת ×¢×’×™× ×” למחיצת העל" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "×”×חסון הכללי ×œ× ×ž×›×™×œ מפתח „נקודת עיגון שורשâ€." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "נקודת ×”×¢×’×™× ×” של מחיצת השורה שגויה" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "נקודת עיגון השורש ×”×™× â€ž{}†ו××™× ×” קיימת." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "הגדרות unpackfs שגויות" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "×ין פרטי הגדרה." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "מערכת ×”×§×‘×¦×™× ×¢×‘×•×¨ „{}†â€({}) ××™× ×” נתמכת על ידי הליבה הנוכחית שלך." #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "מערכת ×”×§×‘×¦×™× ×‘×ž×§×•×¨ „{}†××™× ×” קיימת" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "×Âיתור unsquashfs לנצלח, ננלוודנשהחבילה squashfs-" "tools מותקנת." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "היעד „{}†במערכת ×”×§×‘×¦×™× ×”×ž×™×•×¢×“×ª ×ינו תיקייה" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "×œ× × ×™×ª×Ÿ לכתוב ×ת קובץ התצורה של KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "קובץ התצורה של KDM â€{!s} ×ינו ×§×™×™×" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "×œ× × ×™×ª×Ÿ לכתוב ×ת קובץ התצורה של LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "קובץ התצורה של LXDM â€{!s} ×ינו ×§×™×™×" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "×œ× × ×™×ª×Ÿ לכתוב ×ת קובץ התצורה של LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "קובץ התצורה של LightDM â€{!s} ×ינו ×§×™×™×" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "×œ× × ×™×ª×Ÿ להגדיר ×ת LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "×œ× ×ž×•×ª×§×Ÿ מקבל ×¤× ×™× ×ž×¡×•×’ LightDM." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ תצורה של SLIM." #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "קובץ התצורה {!s} של SLIM ×ינו ×§×™×™×" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "×œ× × ×‘×—×¨×• מנהלי תצוגה למודול displaymanager." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "רשימת מנהלי התצוגה ריקה ×ו ש××™× ×” מוגדרת ×’× ×‘×חסון הכללי (globalstorage) ×•×’× " "ב־displaymanager.conf." #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "תצורת מנהל התצוגה ××™× ×” שלמה" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio מותקן." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "×œ× ×¡×•×¤×§×” נקודת עגינת שורש לשימוש של
{!s}
." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "התקנת חבילות." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "החבילות מעובדות (%(count)d/%(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "מותקנת חבילה ×חת." msgstr[1] "מותקנות %(num)d חבילות." msgstr[2] "מותקנות %(num)d חבילות." msgstr[3] "מותקנות %(num)d חבילות." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "מתבצעת הסרה של חבילה ×חת." msgstr[1] "מתבצעת הסרה של %(num)d חבילות." msgstr[2] "מתבצעת הסרה של %(num)d חבילות." msgstr[3] "מתבצעת הסרה של %(num)d חבילות." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "שגי×ת מנהל חבילות" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "מנהל החבילות ×œ× ×”×¦×œ×™×— להכין ×ת העדכוני×. הפקודה
{!s}
החזירה ×ת " "קוד השגי××” {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "מנהל החבילות ×œ× ×”×¦×œ×™×— לעדכן ×ת המערכת. הפקודה
{!s}
החזירה ×ת קוד " "השגי××” {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "מנהל החבילות ×œ× ×”×¦×œ×™×— לערוך ×©×™× ×•×™×™× ×‘×ž×¢×¨×›×ª המותקנת. הפקודה
{!s}
" "החזירה ×ת קוד השגי××” {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "התקנת מנהל ×תחול." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "ההתקנה של grub נכשלה, ×œ× ×”×•×’×“×¨×• מחיצות ב×חסון הכללי" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "שגי×ת התקנת מנהל ×תחול" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "×œ× × ×™×ª×Ÿ להתקין ×ת מנהל ×”×תחול. פקודת ההתקנה
{!s}
החזירה ×ת קוד " "השגי××” {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "שעון החומרה מוגדר." #: src/modules/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:28 msgid "Writing fstab." msgstr "fstab נכתב." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "×œ× ×¡×•×¤×§×” תצורת
{!s}
לשימוש
{!s}
." #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "משימת דמה של Python." #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "צעד דמה של Python {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "השפות מוגדרות." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "הגדרות הרשת נשמרות." calamares-calamares-2d126ae/lang/python/hi/000077500000000000000000000000001430147706700206515ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/hi/LC_MESSAGES/000077500000000000000000000000001430147706700224365ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/hi/LC_MESSAGES/python.po000066400000000000000000000452441430147706700243300ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Panwar108 , 2022\n" "Language-Team: Hindi (https://www.transifex.com/calamares/teams/20061/hi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "विभाजन माउंट करना।" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "zfs डेटासेट माउंट करते समय आंतरिक तà¥à¤°à¥à¤Ÿà¤¿" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "zpool आयात विफल" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "zpool अनलॉक करना विफल" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "zfs माउंट पॉइंट निरà¥à¤§à¤¾à¤°à¤£ विफल" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "विनà¥à¤¯à¤¾à¤¸ तà¥à¤°à¥à¤Ÿà¤¿" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
के उपयोग हेतॠकोई विभाजन परिभाषित नहीं हैं।" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs माउंट संबंधी तà¥à¤°à¥à¤Ÿà¤¿" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "systemd सेवाà¤à¤ विनà¥à¤¯à¤¸à¥à¤¤ करना" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "सेवा को संशोधित नहीं किया जा सकता" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chroot में systemctl {arg!s} कॉल तà¥à¤°à¥à¤Ÿà¤¿ कोड {num!s}।" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "systemd सेवा {name!s} को सकà¥à¤°à¤¿à¤¯ नहीं किया जा सकता।" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "systemd लकà¥à¤·à¥à¤¯ {name!s}सकà¥à¤°à¤¿à¤¯ करना विफल।" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "systemd टाइमर {name!s}सकà¥à¤°à¤¿à¤¯ करना विफल।" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "systemd लकà¥à¤·à¥à¤¯ {name!s} निषà¥à¤•à¥à¤°à¤¿à¤¯ करना विफल।" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd यूनिट {name!s} को मासà¥à¤• नहीं किया जा सकता।" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "यूनिट {name!s} हेतॠअजà¥à¤žà¤¾à¤¤ systemd कमांड {command!s} व " "{suffix!s}।" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "फाइल सिसà¥à¤Ÿà¤® भरना।" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync तà¥à¤°à¥à¤Ÿà¤¿ कोड {} के साथ विफल।" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "इमेज फ़ाइल {}/{}, फ़ाइल {}/{} समà¥à¤ªà¥€à¥œà¤¿à¤¤ की जा रही है" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "{} हेतॠसंपीड़न पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ आरंभ हो रही है " #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "इमेज फ़ाइल \"{}\" को खोलने में विफल" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "रà¥à¤Ÿ विभाजन हेतॠकोई माउंट पॉइंट नहीं है" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage में \"rootMountPoint\" कà¥à¤‚जी नहीं है।" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "रà¥à¤Ÿ विभाजन हेतॠख़राब माउंट पॉइंट" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint \"{}\" है, जो मौजूद नहीं है।" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "विकृत unpackfs विनà¥à¤¯à¤¾à¤¸" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "विनà¥à¤¯à¤¾à¤¸ संबंधी कोई सूचना नहीं है।" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) हेतॠफ़ाइल सिसà¥à¤Ÿà¤® आपके वरà¥à¤¤à¤®à¤¾à¤¨ करà¥à¤¨à¥‡à¤² दà¥à¤µà¤¾à¤°à¤¾ समरà¥à¤¥à¤¿à¤¤ नहीं है" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" सà¥à¤°à¥‹à¤¤ फ़ाइल सिसà¥à¤Ÿà¤® मौजूद नहीं है" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "unsqaushfs खोजने में विफल, सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें कि squashfs-tools पैकेज इंसà¥à¤Ÿà¥‰à¤² " "है।" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "लकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® में \"{}\" सà¥à¤¥à¤¾à¤¨ कोई डायरेकà¥à¤Ÿà¤°à¥€ नहीं है" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM को विनà¥à¤¯à¤¸à¥à¤¤ नहीं किया जा सकता" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "कोई LightDM लॉगिन सà¥à¤•à¥à¤°à¥€à¤¨ इंसà¥à¤Ÿà¥‰à¤² नहीं है।" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "चयनित डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक मॉडà¥à¤¯à¥‚ल हेतॠकोई डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक नहीं मिला।" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "globalstorage व displaymanager.conf में डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक सूची रिकà¥à¤¤ या " "अपरिभाषित है।" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक विनà¥à¤¯à¤¾à¤¸ अधूरा था" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio को विनà¥à¤¯à¤¸à¥à¤¤ करना।" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "
{!s}
के उपयोग हेतॠकोई रà¥à¤Ÿ माउंट पॉइंट पà¥à¤°à¤¦à¤¾à¤¨ नहीं किया गया।" #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "पैकेज इंसà¥à¤Ÿà¥‰à¤² करना।" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "पैकेज (%(count)d / %(total)d) संसाधित किठजा रहे हैं" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "à¤à¤• पैकेज इंसà¥à¤Ÿà¥‰à¤² किया जा रहा है।" msgstr[1] "%(num)d पैकेज इंसà¥à¤Ÿà¥‰à¤² किठजा रहे हैं।" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "à¤à¤• पैकेज हटाया जा रहा है।" msgstr[1] "%(num)d पैकेज हटाठजा रहे हैं।" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "पैकेज पà¥à¤°à¤¬à¤‚धक तà¥à¤°à¥à¤Ÿà¤¿" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "पैकेज पà¥à¤°à¤¬à¤‚धक दà¥à¤µà¤¾à¤°à¤¾ अपडेट तैयार करना विफल। कमांड
{!s}
हेतॠ" "तà¥à¤°à¥à¤Ÿà¤¿ कोड {!s} पà¥à¤°à¤¾à¤ªà¥à¤¤à¥¤" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "पैकेज पà¥à¤°à¤¬à¤‚धक दà¥à¤µà¤¾à¤°à¤¾ सिसà¥à¤Ÿà¤® अपडेट करना विफल। कमांड
{!s}
हेतॠ" "तà¥à¤°à¥à¤Ÿà¤¿ कोड {!s} पà¥à¤°à¤¾à¤ªà¥à¤¤à¥¤" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "पैकेज पà¥à¤°à¤¬à¤‚धक दà¥à¤µà¤¾à¤°à¤¾ इंसà¥à¤Ÿà¥‰à¤² हो रखें सिसà¥à¤Ÿà¤® पर परिवरà¥à¤¤à¤¨ करना विफल। कमांड " "
{!s}
हेतॠतà¥à¤°à¥à¤Ÿà¤¿ कोड {!s} पà¥à¤°à¤¾à¤ªà¥à¤¤à¥¤" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "बूट लोडर इंसà¥à¤Ÿà¥‰à¤² करना।" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "grub इंसà¥à¤Ÿà¥‰à¤² करना विफल, सरà¥à¤µà¤¤à¥à¤° संचयन में कोई विभाजन परिभाषित नहीं है" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "बूट लोडर इंसà¥à¤Ÿà¥‰à¤² तà¥à¤°à¥à¤Ÿà¤¿" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "बूट लोडर इंसà¥à¤Ÿà¥‰à¤² करना विफल। इंसà¥à¤Ÿà¥‰à¤² कमांड
{!s}
हेतॠतà¥à¤°à¥à¤Ÿà¤¿ कोड " "{!s} पà¥à¤°à¤¾à¤ªà¥à¤¤à¥¤" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "हारà¥à¤¡à¤µà¥‡à¤¯à¤° घड़ी सेट करना।" #: src/modules/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:28 msgid "Writing fstab." msgstr "fstab पर राइट करना।" #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "सà¥à¤¥à¤¾à¤¨à¤¿à¤•ी को विनà¥à¤¯à¤¸à¥à¤¤ करना।" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "नेटवरà¥à¤• विनà¥à¤¯à¤¾à¤¸ सेटिंगà¥à¤¸ संचित करना।" calamares-calamares-2d126ae/lang/python/hr/000077500000000000000000000000001430147706700206625ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/hr/LC_MESSAGES/000077500000000000000000000000001430147706700224475ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/hr/LC_MESSAGES/python.po000066400000000000000000000353571430147706700243450ustar00rootroot00000000000000# 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ć , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Lovro Kudelić , 2022\n" "Language-Team: Croatian (https://www.transifex.com/calamares/teams/20061/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "Montiranje particija." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Interna pogreÅ¡ka pri postavljanju zfs skupova podataka" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Nije uspio uvoz zpool-a" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "OtkljuÄavanje zpool-a nije uspjelo" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Nije uspjelo postavljanje ZFS toÄke montiranja" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "GreÅ¡ka konfiguracije" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Nema definiranih particija za
{!s}
koriÅ¡tenje." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "ZFS greÅ¡ka montiranja" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfiguriraj systemd servise" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "Nije moguće omogućiti systemd timer {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Ne mogu onemogućiti systemd cilj {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Ne mogu maskirati systemd jedinicu {name!s}." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Popunjavanje datoteÄnih sustava." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync nije uspio s kodom pogreÅ¡ke {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Otpakiravanje slike {}/{}, datoteka {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "PoÄetak raspakiravanja {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Otpakiravnje slike nije uspjelo \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nema toÄke montiranja za root particiju" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage ne sadrži kljuÄ \"rootMountPoint\"." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Neispravna toÄka montiranja za root particiju" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint je \"{}\", Å¡to ne postoji." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Neispravna unpackfs konfiguracija" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Nema informacija o konfiguraciji." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "DatoteÄni sustav za \"{}\" ({}) nije podržan na vaÅ¡em trenutnom kernelu" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Izvorni datoteÄni sustav \"{}\" ne postoji" #: src/modules/unpackfs/main.py:466 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:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "OdrediÅ¡te \"{}\" u ciljnom sustavu nije direktorij" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Ne mogu zapisati KDM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Ne mogu zapisati LXDM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Ne moku zapisati LightDM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Ne mogu konfigurirati LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nije instaliran LightDM pozdravnik." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Ne mogu zapisati SLIM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Nisu odabrani upravitelji zaslona za modul displaymanager." #: src/modules/displaymanager/main.py:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Nijedna root toÄka montiranja nije definirana za
{!s}
korištenje." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instaliraj pakete." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Obrađujem pakete (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, 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:71 #, 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:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Pogreška upravitelja paketa" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Upravitelj paketa nije mogao pripremiti ažuriranja. Naredba
{!s}
" "je vratila kôd pogreške {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Upravitelj paketa nije mogao ažurirati sustav. Naredba
{!s}
je " "vratila kod pogreške {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "Upravitelj paketa nije mogao izvršiti promjene na instaliranom sustavu. " "Naredba
{!s}
je vratila kôd pogreške {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instaliram bootloader." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Instalacija gruba nije uspjela, nema definiranih particija u globalnoj " "pohrani" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Greška prilikom instalacije bootloadera" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Bootloader nije mogao biti instaliran. Instalacijska naredba
{!s}
" " je vratila kod pogreške {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Postavljanje hardverskog sata." #: src/modules/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:28 msgid "Writing fstab." msgstr "Zapisujem fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Konfiguriranje lokalizacije." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Spremanje mrežne konfiguracije." calamares-calamares-2d126ae/lang/python/hu/000077500000000000000000000000001430147706700206655ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/hu/LC_MESSAGES/000077500000000000000000000000001430147706700224525ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/hu/LC_MESSAGES/python.po000066400000000000000000000326361430147706700243450ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "Partíciók csatolása." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Konfigurációs hiba" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Nincsenek partíciók meghatározva a
{!s}
használatához." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "systemd szolgáltatások beállítása" #: src/modules/services-systemd/main.py: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:69 msgid "Cannot enable systemd service {name!s}." msgstr "" "Nem sikerült a systemd szolgáltatást engedélyezni: {name!s}." #: src/modules/services-systemd/main.py: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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Nem sikerült a systemd cél {name!s} letiltása." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Nem maszkolható systemd egység: {name!s}." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Fájlrendszerek betöltése." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "az rsync elhalt a(z) {} hibakóddal" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" kép kicsomagolása nem sikerült" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nincs betöltési pont a root partíciónál" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Rossz betöltési pont a root partíciónál" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "A forrás fájlrendszer \"{}\" nem létezik" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Az elérés \"{}\" nem létező könyvtár a cél rendszerben" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "A KDM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "A(z) {!s} KDM konfigurációs fájl nem létezik" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Az LXDM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "A(z) {!s} LXDM konfigurációs fájl nem létezik" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "A LightDM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "A(z) {!s} LightDM konfigurációs fájl nem létezik" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "A LightDM nem állítható be" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nincs LightDM üdvözlő telepítve." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "A SLIM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "A(z) {!s} SLIM konfigurációs fájl nem létezik" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Nincs kijelzőkezelő kiválasztva a kijelzőkezelő modulhoz." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Nincs root csatolási pont megadva a
{!s}
használatához." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Csomagok telepítése." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Csomagok feldolgozása (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Egy csomag telepítése." msgstr[1] "%(num)d csomag telepítése." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Egy csomag eltávolítása." msgstr[1] "%(num)d csomag eltávolítása." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Rendszerbetöltő telepítése." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Rendszeridő beállítása." #: src/modules/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:28 msgid "Writing fstab." msgstr "fstab írása." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "nyelvi értékek konfigurálása." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Hálózati konfiguráció mentése." calamares-calamares-2d126ae/lang/python/id/000077500000000000000000000000001430147706700206455ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/id/LC_MESSAGES/000077500000000000000000000000001430147706700224325ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/id/LC_MESSAGES/python.po000066400000000000000000000263351430147706700243240ustar00rootroot00000000000000# 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 # Wantoyèk , 2018 # Drajat Hasan , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Kesalahan Konfigurasi" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Gak bisa menulis file konfigurasi KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "File {!s} config KDM belum ada" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Gak bisa menulis file konfigurasi LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "File {!s} config LXDM enggak ada" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Gak bisa menulis file konfigurasi LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "File {!s} config LightDM belum ada" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Gak bisa mengkonfigurasi LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Tiada LightDM greeter yang terinstal." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Gak bisa menulis file konfigurasi SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "File {!s} config SLIM belum ada" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Tiada display manager yang dipilih untuk modul displaymanager." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instal paket-paket." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paket pemrosesan (%(count)d/%(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Menginstal paket %(num)d" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "mencopot %(num)d paket" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/ie/000077500000000000000000000000001430147706700206465ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ie/LC_MESSAGES/000077500000000000000000000000001430147706700224335ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ie/LC_MESSAGES/python.po000066400000000000000000000270111430147706700243150ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Caarmi, 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Caarmi, 2020\n" "Language-Team: Interlingue (https://www.transifex.com/calamares/teams/20061/ie/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ie\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configurante GRUB." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Montente partitiones." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Errore de configuration" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Null partition es definit por usa de
{!s}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configurante servicios de systemd" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "Invocation de systemctl {arg!s} in chroot retrodat li code " "{num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Ne successat activar li servicio de systemd {name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Ne successat depaccar li image \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Ne successat scrir li file de configuration de KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "File del configuration de KDM {!s} ne existe" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Ne successat scrir li file de configuration de LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "File del configuration de LXDM {!s} ne existe" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Ne successat scrir li file de configuration de LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "File del configuration de LightDM {!s} ne existe" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "File del configuration de SLIM {!s} ne existe" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configurante mkinitcpio." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installante li data." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configurante servicios de OpenRC" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "Invocation de rc-update {arg!s} in chroot retrodat li code " "{num!s}." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configurante li tema de Plymouth" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Installante paccages." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Installante li bootloader." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Li code de termination esset {}" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Configurante initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "Scrition de fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Configurante locales." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/is/000077500000000000000000000000001430147706700206645ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/is/LC_MESSAGES/000077500000000000000000000000001430147706700224515ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/is/LC_MESSAGES/python.po000066400000000000000000000253301430147706700243350ustar00rootroot00000000000000# 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: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+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/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Setja upp pakka." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Vinnslupakkar (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Setja upp einn pakka." msgstr[1] "Setur upp %(num)d pakka." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Fjarlægi einn pakka." msgstr[1] "Fjarlægi %(num)d pakka." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/it_IT/000077500000000000000000000000001430147706700212615ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/it_IT/LC_MESSAGES/000077500000000000000000000000001430147706700230465ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/it_IT/LC_MESSAGES/python.po000066400000000000000000000345371430147706700247430ustar00rootroot00000000000000# 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 # Vincenzo Reale , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Vincenzo Reale , 2022\n" "Language-Team: Italian (Italy) (https://www.transifex.com/calamares/teams/20061/it_IT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it_IT\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configura GRUB." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Montaggio partizioni." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Importazione zpool non riuscita" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Sblocco zpool non riuscito" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Errore di Configurazione" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Nessuna partizione definita per l'uso con
{!s}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "errore di mount zfs" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configura 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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" "Impossibile disabilitare la destinazione systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Impossibile mascherare l'unità systemd {name!s}." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Comandi systemd sconosciuti {command!s} " "e{suffix!s} per l'unità {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Copia dei file system." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync fallita con codice d'errore {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Estrazione immagine {}/{}, file {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Avvio dell'estrazione {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Estrazione dell'immagine \"{}\" fallita" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nessun punto di montaggio per la partizione di root" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "l'archiviazione globale non contiene una chiave \"rootMountPoint\"." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Punto di montaggio per la partizione di root errato" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Configurazione unpackfs errata" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Non ci sono informazioni di configurazione." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Il filesystem per \"{}\" ({}) non è supportato dal kernel corrente" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Il filesystem sorgente \"{}\" non esiste" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destinazione del sistema \"{}\" non è una directory" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Impossibile scrivere il file di configurazione di KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Il file di configurazione di KDM {!s} non esiste" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Impossibile scrivere il file di configurazione di LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Il file di configurazione di LXDM {!s} non esiste" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Impossibile scrivere il file di configurazione di LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Il file di configurazione di LightDM {!s} non esiste" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Impossibile configurare LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nessun LightDM greeter installato." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Impossibile scrivere il file di configurazione di SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Il file di configurazione di SLIM {!s} non esiste" #: src/modules/displaymanager/main.py:992 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:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 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/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Installa pacchetti." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Elaborazione dei pacchetti (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installando un pacchetto." msgstr[1] "Installazione di %(num)d pacchetti." msgstr[2] "Installazione di %(num)d pacchetti." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Rimuovendo un pacchetto." msgstr[1] "Rimozione di %(num)d pacchetti." msgstr[2] "Rimozione di %(num)d pacchetti." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Errore del gestore dei pacchetti" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Installa il bootloader." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Installazione di grub non riuscita, nessuna partizione definita " "nell'archiviazione globale" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Errore di installazione del boot loader" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py: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:28 msgid "Writing fstab." msgstr "Scrittura di fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Configurazione della localizzazione." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Salvataggio della configurazione di rete." calamares-calamares-2d126ae/lang/python/ja-Hira/000077500000000000000000000000001430147706700215245ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ja-Hira/LC_MESSAGES/000077500000000000000000000000001430147706700233115ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ja-Hira/LC_MESSAGES/python.po000066400000000000000000000247071430147706700252040ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Japanese (Hiragana) (https://www.transifex.com/calamares/teams/20061/ja-Hira/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ja-Hira\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/ja/000077500000000000000000000000001430147706700206435ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ja/LC_MESSAGES/000077500000000000000000000000001430147706700224305ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ja/LC_MESSAGES/python.po000066400000000000000000000402011430147706700243060ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: UTUMI Hirosi , 2022\n" "Language-Team: Japanese (https://www.transifex.com/calamares/teams/20061/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "パーティションã®ãƒžã‚¦ãƒ³ãƒˆã€‚" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "zfs データセットã®ãƒžã‚¦ãƒ³ãƒˆã§å†…部エラーãŒç™ºç”Ÿ" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "zpool ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "zpool ã®ãƒ­ãƒƒã‚¯è§£é™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "zfs マウントãƒã‚¤ãƒ³ãƒˆã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "コンフィグレーションエラー" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
ã«ä½¿ç”¨ã™ã‚‹ãƒ‘ーティションãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“。" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs ã®ãƒžã‚¦ãƒ³ãƒˆã§ã‚¨ãƒ©ãƒ¼" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "systemdサービスを設定" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "サービスãŒå¤‰æ›´ã§ãã¾ã›ã‚“" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "chroot ã§ systemctl {arg!s} を呼ã³å‡ºã™ã¨ã€ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ {num!s} ãŒè¿”ã•れã¾ã—ãŸã€‚" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "{name!s}ã¨ã„ã†systemdサービスãŒå¯èƒ½ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "systemd ã§ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ {name!s}ãŒé–‹å§‹ã§ãã¾ã›ã‚“。" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "systemd タイマー {name!s} を有効ã«ã§ãã¾ã›ã‚“。" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "systemd ã§ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ {name!s}ãŒåœæ­¢ã§ãã¾ã›ã‚“。" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd ユニット {name!s} をマスクã§ãã¾ã›ã‚“。" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "ユニット {name!s} ã«å¯¾ã™ã‚‹æœªçŸ¥ã® systemd コマンド {command!s} 㨠" "{suffix!s}。" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã«æ›¸ã込んã§ã„ã¾ã™ã€‚" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "エラーコード {} ã«ã‚ˆã‚Šrsyncを失敗。" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "イメージ {}/{}, ファイル {}/{} ã‚’è§£å‡ã—ã¦ã„ã¾ã™" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "{} ã®è§£å‡ã‚’é–‹å§‹ã—ã¦ã„ã¾ã™" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "イメージ \"{}\" ã®å±•é–‹ã«å¤±æ•—" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "ルートパーティションã®ãŸã‚ã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆãŒã‚りã¾ã›ã‚“" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage ã« \"rootMountPoint\" キーãŒã‚りã¾ã›ã‚“。" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "ルートパーティションã®ãŸã‚ã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆãŒä¸æ­£ã§ã™" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint ㌠\"{}\" ã«ãªã£ã¦ã„ã¦å­˜åœ¨ã—ã¾ã›ã‚“。" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "ä¸é©åˆ‡ãª unpackfs ã®è¨­å®š" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "設定情報ãŒã‚りã¾ã›ã‚“。" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) ã®ãƒ•ァイルシステムã¯ã€ç¾åœ¨ã®ã‚«ãƒ¼ãƒãƒ«ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "ソースファイルシステム \"{}\" ã¯å­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "unsquashfs ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚squashfs-tools パッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "ターゲットシステムã®å®›å…ˆ \"{}\" ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã¯ã‚りã¾ã›ã‚“" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDMã®è¨­å®šãŒã§ãã¾ã›ã‚“" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM greeter ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "ディスプレイマãƒãƒ¼ã‚¸ãƒ£ãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“。" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "globalstorage 㨠displaymanager.conf ã®ä¸¡æ–¹ã§ã€displaymanagers リストãŒç©ºã‹æœªå®šç¾©ã§ã™ã€‚" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "ディスプレイマãƒãƒ¼ã‚¸ãƒ£ã®è¨­å®šãŒä¸å®Œå…¨ã§ã™" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpioを設定ã—ã¦ã„ã¾ã™ã€‚" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "
{!s}
を使用ã™ã‚‹ã®ã«ãƒ«ãƒ¼ãƒˆãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“。" #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "パッケージを処ç†ã—ã¦ã„ã¾ã™ (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] " %(num)d パッケージをインストールã—ã¦ã„ã¾ã™ã€‚" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] " %(num)d パッケージを削除ã—ã¦ã„ã¾ã™ã€‚" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã®ã‚¨ãƒ©ãƒ¼" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¯ã‚¢ãƒƒãƒ—デートを準備ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚コマンド
{!s}
ã¯ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ {!s} ã‚’è¿”ã—ã¾ã—ãŸã€‚" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¯ã‚·ã‚¹ãƒ†ãƒ ã‚’アップデートã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ コマンド
{!s}
ã¯ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ {!s} ã‚’è¿”ã—ã¾ã—ãŸã€‚" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るシステムã«å¤‰æ›´ã‚’加ãˆã‚‰ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚コマンド
{!s}
ã¯ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ {!s} " "ã‚’è¿”ã—ã¾ã—ãŸã€‚" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "ブートローダーをインストール" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "grub ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—ãŸã€‚グローãƒãƒ«ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã«ãƒ‘ーティションãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "ブートローダーã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚¨ãƒ©ãƒ¼" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "ブートローダーをインストールã§ãã¾ã›ã‚“ã§ã—ãŸã€‚インストールコマンド
{!s}
ãŒã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ {!s} ã‚’è¿”ã—ã¾ã—ãŸã€‚" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¯ãƒ­ãƒƒã‚¯ã®è¨­å®š" #: src/modules/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:28 msgid "Writing fstab." msgstr "fstabを書ã込んã§ã„ã¾ã™ã€‚" #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "ロケールを設定ã—ã¦ã„ã¾ã™ã€‚" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¨­å®šã‚’ä¿å­˜ã—ã¦ã„ã¾ã™ã€‚" calamares-calamares-2d126ae/lang/python/kk/000077500000000000000000000000001430147706700206565ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/kk/LC_MESSAGES/000077500000000000000000000000001430147706700224435ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/kk/LC_MESSAGES/python.po000066400000000000000000000247171430147706700243370ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/kn/000077500000000000000000000000001430147706700206615ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/kn/LC_MESSAGES/000077500000000000000000000000001430147706700224465ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/kn/LC_MESSAGES/python.po000066400000000000000000000247211430147706700243350ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/ko/000077500000000000000000000000001430147706700206625ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ko/LC_MESSAGES/000077500000000000000000000000001430147706700224475ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ko/LC_MESSAGES/python.po000066400000000000000000000362551430147706700243430ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Junghee Lee , 2022\n" "Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "파티션 마운트 중." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "zfs ë°ì´í„°ì„¸íŠ¸ë¥¼ 마운트하는 중 ë‚´ë¶€ 오류" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "zpoolì„ ê°€ì ¸ì˜¤ì§€ 못했습니다" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "zpoolì˜ ìž ê¸ˆì„ í•´ì œí•˜ì§€ 못했습니다" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "zfs 마운트위치를 지정하지 못했습니다" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "구성 오류" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "사용할
{!s}
ì— ëŒ€í•´ ì •ì˜ëœ íŒŒí‹°ì…˜ì´ ì—†ìŒ." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs 마운트하는 중 오류" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "systemd 서비스 구성" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "서비스를 수정할 수 ì—†ìŒ" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chrootì—서 systemctl {arg!s} 호출ì—서오류 코드 {num}를 반환 했습니다." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "{name! s} 시스템 서비스를 활성화 í•  수 없습니다." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "systemd ëŒ€ìƒ {name! s}를 활성화 í•  수 없습니다." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "시스템 타ì´ë¨¸ {name!s}를 활성화할 수 없습니다." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "systemd ëŒ€ìƒ {name! s}를 비활성화 í•  수 없습니다." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "시스템 유닛 {name! s}를 마스í¬í•  수 없습니다." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "유닛 {name! s}ì— ëŒ€í•´ 알 수 없는 시스템 명령 {command! s} ë° {suffix! " "s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "íŒŒì¼ ì‹œìŠ¤í…œì„ ì±„ìš°ëŠ” 중." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsyncê°€ {} 오류 코드로 실패했습니다." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "ì´ë¯¸ì§€ {}/{}, íŒŒì¼ {}/{} 압축푸는 중" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "{} ì••ì¶• 풀기 시작 중" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" ì´ë¯¸ì§€ì˜ ì••ì¶•ì„ í’€ì§€ 못했습니다." #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "루트 íŒŒí‹°ì…˜ì— ëŒ€í•œ 마운트 위치 ì—†ìŒ" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage는 \"루트마운트위치\" 키를 í¬í•¨í•˜ì§€ 않습니다." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "루트 íŒŒí‹°ì…˜ì— ëŒ€í•œ ìž˜ëª»ëœ ë§ˆìš´íŠ¸ 위치" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "루트마운트위치는 \"{}\"ì´ê³ , 존재하지 않습니다." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "unpackfs êµ¬ì„±ì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤." #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "구성 ì •ë³´ê°€ 없습니다." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({})ì— ëŒ€í•œ íŒŒì¼ ì‹œìŠ¤í…œì€ í˜„ìž¬ 커ë„ì—서 ì§€ì›ë˜ì§€ 않습니다." #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" 소스 파ì¼ì‹œìŠ¤í…œì€ ì¡´ìž¬í•˜ì§€ 않습니다." #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "unsquashfs를 찾지 못했습니다. squashfs-tools 패키지가 설치ë˜ì–´ 있는지 확ì¸í•˜ì‹­ì‹œì˜¤." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "ëŒ€ìƒ ì‹œìŠ¤í…œì˜ \"{}\" 목ì ì§€ê°€ 디렉토리가 아닙니다." #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM 구성 파ì¼ì„ 쓸 수 없습니다." #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM 구성 íŒŒì¼ {! s}ê°€ 없습니다" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LMLDM 구성 파ì¼ì„ 쓸 수 없습니다." #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 구성 íŒŒì¼ {!s}ì´ ì—†ìŠµë‹ˆë‹¤." #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM 구성 파ì¼ì„ 쓸 수 없습니다." #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 구성 íŒŒì¼ {!s}ê°€ 없습니다." #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDMì„ êµ¬ì„±í•  수 없습니다." #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM greeterê°€ 설치ë˜ì§€ 않았습니다." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM 구성 파ì¼ì„ 쓸 수 ì—†ìŒ" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 구성 íŒŒì¼ {!s}ê°€ ì—†ìŒ" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager ëª¨ë“ˆì— ëŒ€í•´ ì„ íƒëœ ë””ìŠ¤í”Œë ˆì´ ê´€ë¦¬ìžê°€ 없습니다." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "displaymanagers 목ë¡ì´ 비어 있거나 globalstorage ë° displaymanager.conf 모ë‘ì—서 ì •ì˜ë˜ì§€ " "않았습니다." #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "ë””ìŠ¤í”Œë ˆì´ ê´€ë¦¬ìž êµ¬ì„±ì´ ì™„ë£Œë˜ì§€ 않았습니다." #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio 구성 중." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "
{!s}
ì—서 사용할 루트 마운트 ì§€ì ì´ 제공ë˜ì§€ 않ìŒ." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "패키지를 설치합니다." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "패키지 처리중 (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "%(num)dê°œì˜ íŒ¨í‚¤ì§€ë“¤ì„ ì„¤ì¹˜í•˜ëŠ” 중입니다." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "%(num)dê°œì˜ íŒ¨í‚¤ì§€ë“¤ì„ ì œê±°í•˜ëŠ” 중입니다." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "패키지 ê´€ë¦¬ìž ì˜¤ë¥˜" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "패키지 관리ìžê°€ ì—…ë°ì´íŠ¸ë¥¼ 준비할 수 없습니다.
{!s}
명령ì—서 {!s} 오류 코드를 반환했습니다." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "패키지 관리ìžê°€ ì‹œìŠ¤í…œì„ ì—…ë°ì´íŠ¸í•  수 없습니다.
{!s}
명령ì—서 {!s} 오류 코드를 반환했습니다." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "패키지 관리ìžê°€ ì„¤ì¹˜ëœ ì‹œìŠ¤í…œì„ ë³€ê²½í•  수 없습니다.
{!s}
명령ì—서 {!s} 오류 코드를 반환했습니다." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "ë¶€íŠ¸ë¡œë” ì„¤ì¹˜." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "grubì„ ì„¤ì¹˜í•˜ì§€ 못했습니다. 파티션 ì—†ìŒì´ ì „ì—­ ì €ìž¥ì†Œì— ì •ì˜ë˜ì—ˆìŠµë‹ˆë‹¤" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "ë¶€íŠ¸ë¡œë” ì„¤ì¹˜ 오류" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "부트로ë”를 설치할 수 없습니다.
{!s}
설치 명령ì—서 {!s} 오류 코드를 반환했습니다." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "하드웨어 í´ëŸ­ 설정 중." #: src/modules/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:28 msgid "Writing fstab." msgstr "fstab 쓰기." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "로컬 구성 중." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "ë„¤íŠ¸ì›Œí¬ êµ¬ì„± 저장 중." calamares-calamares-2d126ae/lang/python/lo/000077500000000000000000000000001430147706700206635ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/lo/LC_MESSAGES/000077500000000000000000000000001430147706700224505ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/lo/LC_MESSAGES/python.po000066400000000000000000000246551430147706700243450ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/lt/000077500000000000000000000000001430147706700206705ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/lt/LC_MESSAGES/000077500000000000000000000000001430147706700224555ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/lt/LC_MESSAGES/python.po000066400000000000000000000362021430147706700243410ustar00rootroot00000000000000# 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, 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Moo, 2022\n" "Language-Team: Lithuanian (https://www.transifex.com/calamares/teams/20061/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "Prijungiami skaidiniai." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Vidinė klaida prijungiant zfs duomenų rinkinius" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Nepavyko importuoti zpool" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Nepavyko atrakinti zpool" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Nepavyko nustatyti zfs prijungimo taško" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Konfigūracijos klaida" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Nėra apibrėžta jokių skaidinių, skirtų
{!s}
naudojimui." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs prijungimo klaida" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "KonfigÅ«ruoti systemd tarnybas" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "Nepavyksta įjungti systemd laikmaÄio {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Nepavyksta iÅ¡jungti systemd paskirties {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Nepavyksta maskuoti systemd įtaiso {name!s}." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Užpildomos failų sistemos." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync patyrÄ— nesÄ—kmÄ™ su klaidos kodu {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "IÅ¡pakuojamas atvaizdis {}/{}, failas {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Pradedama iÅ¡pakuoti {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Nepavyko iÅ¡pakuoti atvaizdį „{}“" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "NÄ—ra prijungimo taÅ¡ko Å¡aknies skaidiniui" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage viduje nÄ—ra „rootMountPoint“ rakto." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Blogas Å¡aknies skaidinio prijungimo taÅ¡kas" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "„rootMountPoint“ yra „{}“, kurio savo ruožtu tiesiog nÄ—ra." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Bloga unpackfs konfigÅ«racija" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "NÄ—ra jokios informacijos apie konfigÅ«racijÄ…." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "JÅ«sų branduolys nepalaiko failų sistemos, kuri skirta „{}“ ({})" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Å altinio failų sistemos „{}“ nÄ—ra" #: src/modules/unpackfs/main.py:466 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:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Paskirties vieta „{}“, esanti paskirties sistemoje, nÄ—ra katalogas" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Nepavyksta įraÅ¡yti KDM konfigÅ«racijos failÄ…" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigÅ«racijos failo {!s} nÄ—ra" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Nepavyksta įraÅ¡yti LXDM konfigÅ«racijos failÄ…" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigÅ«racijos failo {!s} nÄ—ra" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Nepavyksta įraÅ¡yti LightDM konfigÅ«racijos failÄ…" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigÅ«racijos failo {!s} nÄ—ra" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Nepavyksta konfigÅ«ruoti LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Neįdiegtas joks LightDM pasisveikinimas." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Nepavyksta įraÅ¡yti SLIM konfigÅ«racijos failÄ…" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigÅ«racijos failo {!s} nÄ—ra" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Displaymanagers moduliui nÄ—ra pasirinkta jokių ekranų tvarkytuvių." #: src/modules/displaymanager/main.py:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Nėra nurodyta jokių šaknies prijungimo taškų, skirtų
{!s}
" "naudojimui." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Įdiegti paketus." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Apdorojami paketai (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, 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:71 #, 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:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Paketų tvarkytuvės klaida" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Paketų tvarkytuvei nepavyko paruošti atnaujinimų. Komanda
{!s}
" "grąžino klaidos kodą {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Paketų tvarkytuvei nepavyko atnaujinti sistemos. Komanda
{!s}
" "grąžino klaidos kodą {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "Paketų tvarkytuvei nepavyko atlikti pakeitimų įdiegtoje sistemoje. Komanda " "
{!s}
grąžino klaidos kodą {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Įdiegti operacinės sistemos paleidyklę." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Nepavyko įdiegti grub paleidyklės, visuotinėje saugykloje nėra apibrėžta " "jokių skaidinių" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Operacinės sistemos paleidyklės diegimo klaida" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Nepavyko įdiegti operacinės sistemos paleidyklės. Diegimo komanda " "
{!s}
grąžino klaidos kodą {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Nustatomas aparatinės įrangos laikrodis." #: src/modules/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:28 msgid "Writing fstab." msgstr "Rašoma fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Konfigūruojamos lokalės." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Įrašoma tinklo konfigūracija." calamares-calamares-2d126ae/lang/python/lv/000077500000000000000000000000001430147706700206725ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/lv/LC_MESSAGES/000077500000000000000000000000001430147706700224575ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/lv/LC_MESSAGES/python.po000066400000000000000000000250171430147706700243450ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Latvian (https://www.transifex.com/calamares/teams/20061/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/mk/000077500000000000000000000000001430147706700206605ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/mk/LC_MESSAGES/000077500000000000000000000000001430147706700224455ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/mk/LC_MESSAGES/python.po000066400000000000000000000267001430147706700243330ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM конфигурациониот фајл не може да Ñе Ñоздаде" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM конфигурациониот фајл {!s} не поÑтои" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM конфигурациониот фајл не може да Ñе Ñоздаде" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM конфигурациониот фајл {!s} не поÑтои" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM конфигурациониот фајл не може да Ñе Ñоздаде" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM конфигурациониот фајл {!s} не поÑтои" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Ðе може да Ñе подеÑи LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Ðема инÑталирано LightDM поздравувач" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM конфигурациониот фајл не може да Ñе Ñоздаде" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM конфигурациониот фајл {!s} не поÑтои" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Ðемате избрано диÑплеј менаџер за displaymanager модулот." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/ml/000077500000000000000000000000001430147706700206615ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ml/LC_MESSAGES/000077500000000000000000000000001430147706700224465ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ml/LC_MESSAGES/python.po000066400000000000000000000254311430147706700243340ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "à´•àµà´°à´®àµ€à´•രണതàµà´¤à´¿àµ½ പിഴവàµ" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "ബൂടàµà´Ÿàµâ€Œà´²àµ‹à´Ÿàµ¼ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµ‚ ." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/mr/000077500000000000000000000000001430147706700206675ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/mr/LC_MESSAGES/000077500000000000000000000000001430147706700224545ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/mr/LC_MESSAGES/python.po000066400000000000000000000247221430147706700243440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/nb/000077500000000000000000000000001430147706700206505ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/nb/LC_MESSAGES/000077500000000000000000000000001430147706700224355ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/nb/LC_MESSAGES/python.po000066400000000000000000000253101430147706700243170ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Installer pakker." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/ne_NP/000077500000000000000000000000001430147706700212505ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ne_NP/LC_MESSAGES/000077500000000000000000000000001430147706700230355ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ne_NP/LC_MESSAGES/python.po000066400000000000000000000247371430147706700247330ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/nl/000077500000000000000000000000001430147706700206625ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/nl/LC_MESSAGES/000077500000000000000000000000001430147706700224475ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/nl/LC_MESSAGES/python.po000066400000000000000000000331101430147706700243260ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "Partities mounten." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Configuratiefout" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Geen partities gedefinieerd voor
{!s}
om te gebruiken." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "De systemd service {name!s} kon niet worden uitgeschakeld." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "De systemd unit {name!s} kon niet worden gemaskerd." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Onbekende systemd opdrachten {command!s} en " "{suffix!s} voor unit {name!s}. " #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Bestandssystemen opvullen." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync mislukte met foutcode {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Bestandssysteem uitpakken {}/{}, bestand {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Beginnen met uitpakken van {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Uitpakken van bestandssysteem \"{}\" mislukt" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Geen mount-punt voor de root-partitie" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Onjuist mount-punt voor de root-partitie" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "Het bestandssysteem voor \"{}\" ({}) wordt niet ondersteund door je huidige " "kernel" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Het bronbestandssysteem \"{}\" bestaat niet" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "De bestemming \"{}\" in het doelsysteem is niet een map" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Schrijven naar het KDM-configuratiebestand is mislukt " #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM-configuratiebestand {!s} bestaat niet." #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Schrijven naar het LXDM-configuratiebestand is mislukt" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Het KDM-configuratiebestand {!s} bestaat niet" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Schrijven naar het LightDM-configuratiebestand is mislukt" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Het LightDM-configuratiebestand {!s} bestaat niet" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Kon LightDM niet configureren" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Geen LightDM begroeter geïnstalleerd" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Schrijven naar het SLIM-configuratiebestand is mislukt" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Het SLIM-configuratiebestand {!s} bestaat niet" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Geen display managers geselecteerd voor de displaymanager module." #: src/modules/displaymanager/main.py:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Geen hoofd mount punt is gegeven voor
{!s}
om te gebruiken. " #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Pakketten installeren." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Pakketten verwerken (%(count)d/ %(total)d)" #: src/modules/packages/main.py:68 #, 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:71 #, 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:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Installeer bootloader" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "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:28 msgid "Writing fstab." msgstr "fstab schrijven." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Taal en locatie instellen." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Netwerk-configuratie opslaan." calamares-calamares-2d126ae/lang/python/oc/000077500000000000000000000000001430147706700206525ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/oc/LC_MESSAGES/000077500000000000000000000000001430147706700224375ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/oc/LC_MESSAGES/python.po000066400000000000000000000251061430147706700243240ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Quentin PAGÈS, 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Quentin PAGÈS, 2022\n" "Language-Team: Occitan (post 1500) (https://www.transifex.com/calamares/teams/20061/oc/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: oc\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Error de configuracion" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/pl/000077500000000000000000000000001430147706700206645ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/pl/LC_MESSAGES/000077500000000000000000000000001430147706700224515ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/pl/LC_MESSAGES/python.po000066400000000000000000000337231430147706700243420ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "Montowanie partycji." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Błąd konfiguracji" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Nie ma zdefiniowanych partycji dla
{!s}
do użytku." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Nie można wyłączyć celu w systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Nie można zamaskować jednostki systemd {name!s}." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Nieznana komenda systemd {command!s} oraz " "{suffix!s} dla jednostki {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Zapełnianie systemu plików." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync zakończyło działanie kodem błędu {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Odpakowywanie obrazu {}/{}, pliku {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Rozpoczynanie odpakowywania {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Błąd rozpakowywania obrazu \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Brak punktu montowania partycji root" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Błędny punkt montowania partycji root" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "System plików dla \"{}\" ({}) nie jest wspierany przez obecne jądro twojego " "systemu" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Źródłowy system plików \"{}\" nie istnieje" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Miejsce docelowe \"{}\" w docelowym systemie nie jest katalogiem" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Nie można zapisać pliku konfiguracji KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Plik konfiguracyjny KDM {!s} nie istnieje" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Nie można zapisać pliku konfiguracji LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Plik konfiguracji LXDM {!s} nie istnieje" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Nie można zapisać pliku konfiguracji LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Plik konfiguracji LightDM {!s} nie istnieje" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Nie można skonfigurować LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nie zainstalowano ekranu powitalnego LightDM." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Nie można zapisać pliku konfiguracji SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Plik konfiguracji SLIM {!s} nie istnieje" #: src/modules/displaymanager/main.py:992 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:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Nie znaleziono głównego punktu montowania dla
{!s}
do użycia." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Zainstaluj pakiety." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Przetwarzanie pakietów (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, 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:71 #, 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:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalacja programu rozruchowego." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Ustawianie zegara systemowego." #: src/modules/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:28 msgid "Writing fstab." msgstr "Zapisywanie fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Konfigurowanie ustawień lokalnych." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Zapisywanie konfiguracji sieci." calamares-calamares-2d126ae/lang/python/pt_BR/000077500000000000000000000000001430147706700212575ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/pt_BR/LC_MESSAGES/000077500000000000000000000000001430147706700230445ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/pt_BR/LC_MESSAGES/python.po000066400000000000000000000363201430147706700247310ustar00rootroot00000000000000# 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 MS, 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Guilherme MS, 2022\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configurar GRUB." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Montando partições." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Erro interno ao montar datasets zfs" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Falha ao importar zpool" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Falha ao desbloquear zpool" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Falha ao definir o ponto de montagem zfs" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Erro de Configuração." #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Sem partições definidas para uso por
{!s}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "erro de montagem zfs" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configurar serviços do systemd" #: src/modules/services-systemd/main.py: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:69 msgid "Cannot enable systemd service {name!s}." msgstr "Não é possível habilitar o serviço {name!s} do systemd." #: src/modules/services-systemd/main.py: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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "Não foi possível ativar o cronômetro systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Não é possível desabilitar o alvo {name!s} do systemd." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Não é possível mascarar a unidade {name!s} do systemd." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Preenchendo sistemas de arquivos." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "O rsync falhou com o código de erro {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Descompactando imagem {}/{}, arquivo {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Começando a descompactar {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Ocorreu uma falha ao descompactar a imagem \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nenhum ponto de montagem para a partição root" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage não contém uma chave \"rootMountPoint\"." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Ponto de montagem incorreto para a partição root" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint é \"{}\", que não existe." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Configuração incorreta do unpackfs" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Não há informação de configuração." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Não há suporte para o sistema de arquivos \"{}\" ({}) no seu kernel atual" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "O sistema de arquivos de origem \"{}\" não existe" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "Não foi possível encontrar o unsquashfs, certifique-se de que o pacote " "squashfs-tools foi instalado." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "A destinação \"{}\" no sistema de destino não é um diretório" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do KDM não existe" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do LXDM não existe" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do LightDM não existe" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Não é possível configurar o LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Não há nenhuma tela de login do LightDM instalada." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do SLIM não existe" #: src/modules/displaymanager/main.py:992 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:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Nenhum ponto de montagem para o root fornecido para uso por
{!s}
." #: src/modules/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}, que " "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}, que não existe." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configurar tema do Plymouth" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalar pacotes." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processando pacotes (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando um pacote." msgstr[1] "Instalando %(num)d pacotes." msgstr[2] "Instalando %(num)d pacotes." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removendo um pacote." msgstr[1] "Removendo %(num)d pacotes." msgstr[2] "Removendo %(num)d pacotes." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Erro do Gerenciador de Pacotes" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "O gerenciador de pacotes não pôde preparar as atualizações. O comando " "
{!s}
retornou o código de erro {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "O gerenciador de pacotes não pôde atualizar o sistema. O comando " "
{!s}
retornou o código de erro {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "O gerenciador de pacotes não pôde fazer mudanças no sistema instalado. O " "comando
{!s}
retornou o código de erro {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalar carregador de inicialização." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Falha ao instalar o grub, não há partições definidas no armazenamento global" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Erro de instalação do carregador de inicialização" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "O carregador de inicialização não pôde ser instalado. O comando de " "instalação
{!s}
retornou o código de erro {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Configurando relógio de hardware." #: src/modules/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:28 msgid "Writing fstab." msgstr "Escrevendo fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" "Nenhuma configuração
{!s}
é dada para que
{!s}
possa " "utilizar." #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Tarefa modelo python." #: src/modules/dummypython/main.py: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:31 msgid "Configuring locales." msgstr "Configurando locais." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Salvando configuração de rede." calamares-calamares-2d126ae/lang/python/pt_PT/000077500000000000000000000000001430147706700212775ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/pt_PT/LC_MESSAGES/000077500000000000000000000000001430147706700230645ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/pt_PT/LC_MESSAGES/python.po000066400000000000000000000364231430147706700247550ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Hugo Carvalho , 2022\n" "Language-Team: Portuguese (Portugal) (https://www.transifex.com/calamares/teams/20061/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_PT\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configurar o GRUB." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "A montar partições." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Erro interno ao montar os conjuntos de dados zfs" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Falha ao importar zpool" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Falha ao desbloquear zpool" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Falha ao definir o ponto de montagem zfs" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Erro de configuração" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Nenhuma partição está definida para
{!s}
usar." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "erro de montagem zfs" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configurar serviços systemd" #: src/modules/services-systemd/main.py: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:69 msgid "Cannot enable systemd service {name!s}." msgstr "Não é possível ativar o serviço systemd {name!s}." #: src/modules/services-systemd/main.py: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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "Não é possível ativar o temporizador systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Não é possível desativar o destino do systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Não é possível mascarar a unidade do systemd {name!s}." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "A preencher os sistemas de ficheiros." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync falhou com código de erro {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "A descompactar imagem {}/{}, ficheiro {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "A começar a descompactação {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Falha ao descompactar imagem \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nenhum ponto de montagem para a partição root" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "o armazenamento global não contém uma chave \"rootMountPoint\"." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Ponto de montagem mau para partição root" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint é \"{}\", que não existe." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Má configuração do unpackfs" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Não há informação de configuração." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "O sistema de ficheiros para \"{}\" ({}) não é suportado pelo seu kernel " "atual" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "O sistema de ficheiros fonte \"{}\" não existe" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "Falha ao localizar o unsquashfs, certifique-se de que tem o pacote squashfs-" "tools instalado." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "O destino \"{}\" no sistema de destino não é um diretório" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "O ficheiro de configuração do KDM {!s} não existe" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "O ficheiro de configuração do LXDM {!s} não existe" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "O ficheiro de configuração do LightDM {!s} não existe" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Não é possível configurar o LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nenhum ecrã de boas-vindas LightDM instalado." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Não é possível gravar o ficheiro de configuração SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "O ficheiro de configuração do SLIM {!s} não existe" #: src/modules/displaymanager/main.py:992 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:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Nenhum ponto de montagem root é fornecido para
{!s}
usar." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalar pacotes." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "A processar pacotes (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "A instalar um pacote." msgstr[1] "A instalar %(num)d pacotes." msgstr[2] "A instalar %(num)d pacotes." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "A remover um pacote." msgstr[1] "A remover %(num)d pacotes." msgstr[2] "A remover %(num)d pacotes." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Erro do gestor de pacotes" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "O gestor de pacotes não conseguiu preparar atualizações. O comando " "
{!s}
apresentou o código de erro {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "O gestor de pacotes não conseguiu atualizar o sistema. O comando " "
{!s}
apresentou o código de erro {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "O gestor de pacotes não pôde fazer alterações ao sistema instalado. O " "comando
{!s}
devolveu o código de erro {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalar o carregador de arranque." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Falha ao instalar o grub, sem partições definidas no armazenamento global" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Erro de instalação do carregador de arranque" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Não foi possível instalar o carregador de arranque. O comando de instalação " "
{!s}
apresentou o código de erro {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "A definir o relógio do hardware." #: src/modules/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:28 msgid "Writing fstab." msgstr "A escrever o fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "A configurar a localização." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "A guardar a configuração de rede." calamares-calamares-2d126ae/lang/python/ro/000077500000000000000000000000001430147706700206715ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ro/LC_MESSAGES/000077500000000000000000000000001430147706700224565ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ro/LC_MESSAGES/python.po000066400000000000000000000262101430147706700243400ustar00rootroot00000000000000# 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 # Chele Ion , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Chele Ion , 2021\n" "Language-Team: Romanian (https://www.transifex.com/calamares/teams/20061/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Eroare de configurare" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Nu sunt partiţii definite ca 1{!s}1 ." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Nu este definită o partiţie rădăcină pentru 1{!s}1 ." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalează pachetele." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Se procesează pachetele (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, 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:71 #, 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:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Configurare initramfs" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/ru/000077500000000000000000000000001430147706700206775ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ru/LC_MESSAGES/000077500000000000000000000000001430147706700224645ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ru/LC_MESSAGES/python.po000066400000000000000000000301671430147706700243540ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "Монтирование разделов." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Ошибка конфигурации" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Ðе определены разделы Ð´Ð»Ñ Ð¸ÑпользованиÑ
{!S}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "ÐаÑтройка systemd ÑервиÑов" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Ðе могу изменить ÑервиÑ" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "Вызов systemctl {arg!s} в chroot вернул код ошибки {num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Ðаполнение файловой ÑиÑтемы." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "УÑтановка данных." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "ÐаÑтройка Ñлужб 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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "УÑтановить пакеты." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Обработка пакетов (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "УÑтановка одного пакета." msgstr[1] "УÑтановка %(num)d пакетов." msgstr[2] "УÑтановка %(num)d пакетов." msgstr[3] "УÑтановка %(num)d пакетов." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Удаление одного пакета." msgstr[1] "Удаление %(num)d пакетов." msgstr[2] "Удаление %(num)d пакетов." msgstr[3] "Удаление %(num)d пакетов." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "УÑтановить загрузчик." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "УÑтановка аппаратных чаÑов." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: 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:28 msgid "Writing fstab." msgstr "ЗапиÑÑŒ fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "ÐаÑтройка Ñзыка." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Сохранение наÑтроек Ñети." calamares-calamares-2d126ae/lang/python/si/000077500000000000000000000000001430147706700206645ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/si/LC_MESSAGES/000077500000000000000000000000001430147706700224515ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/si/LC_MESSAGES/python.po000066400000000000000000000445371430147706700243470ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # හෙළබස සමූහය, 2021 # Sandaruwan Samaraweera, 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Sandaruwan Samaraweera, 2022\n" "Language-Team: Sinhala (https://www.transifex.com/calamares/teams/20061/si/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: si\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB වින්â€à¶ºà·à·ƒ කරන්න." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "කොටස් සවි කිරීම." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "zfs දත්ත à¶šà¶§à·Šà¶§à¶½ සවිකිරීමේ à¶…à¶·à·Šâ€à¶ºà¶±à·Šà¶­à¶» දà·à·‚යකි" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "zpool ආයà·à¶­ කිරීමට අසමත් විය" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "zpool අගුලු à·„à·à¶»à·“මට අසමත් විය" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "zfs සවිකිරීමේ ලක්ෂ්â€à¶ºà¶º à·ƒà·à¶šà·ƒà·“මට අසමත් විය" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "වින්â€à¶ºà·à·ƒ දà·à·‚ය" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "{!s} සඳහ෠භà·à·€à·’ත෠කිරීමට කිසිදු කොටස් නිර්වචනය à¶šà¶» නොමà·à¶­." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs සවිකිරීමේ දà·à·‚යකි" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "systemd සේව෠වින්â€à¶ºà·à·ƒ කරන්න" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "සේවà·à·€ වෙනස් à¶šà·… නොහà·à¶š" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} chroot වෙත ඇමතුමක් ලබ෠දුන් දà·à·‚ කේතය {num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "systemd සේවà·à·€ {name!s} සබල à¶šà·… නොහà·à¶š." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "systemd ඉලක්කය {name!s} සබල à¶šà·… නොහà·à¶š." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "systemd ටයිමරය {name!s} සබල à¶šà·… නොහà·à¶š." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "systemd ඉලක්කය {name!s} à¶…à¶šà·Šâ€à¶»à·’ය à¶šà·… නොහà·à¶š." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd ඒකකය {name!s} වසන් à¶šà·… නොහà·à¶š." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "{name!s} ඒකකය සඳහ෠නොදන්න෠systemd විධà·à¶± {command!s} සහ " "{suffix!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "ගොනු පද්ධති පිරවීම." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "දà·à·‚ කේතය {} සමඟ rsync à¶…à·ƒà·à¶»à·Šà¶®à¶š විය." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "රූපය {}/{}, ගොනුව {}/{} අසුරමින්" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "ඉවත් කිරීමට පටන් ගනියි {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" රූපය ඉවත් කිරීමට අසමත් විය" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "root කොටස සඳහ෠සවි කිරීමේ ලක්ෂ්â€à¶ºà¶ºà¶šà·Š නොමà·à¶­" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "à¶œà·à¶½à·“ය ගබඩà·à·€à·š \"rootMountPoint\" යතුරක් අඩංගු නොවේ." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "මූල කොටස සඳහ෠නරක සවි කිරීමේ ලක්ෂ්â€à¶ºà¶º" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint යනු \"{}\", එය නොපවතී." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "à·€à·à¶»à¶¯à·’ unpackfs වින්â€à¶ºà·à·ƒà¶º" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "වින්â€à¶ºà·à·ƒ තොරතුරු නොමà·à¶­." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) සඳහ෠ගොනු පද්ධතිය ඔබගේ වත්මන් කර්නලයෙන් සහය නොදක්වයි" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "මූලà·à·à·Šâ€à¶» ගොනු පද්ධතිය \"{}\" නොපවතී" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "Unsquashfs සොය෠ගà·à¶±à·“මට අපොහොසත් විය, ඔබ squashfs-tools à¶´à·à¶šà·šà¶¢à¶º ස්ථà·à¶´à¶±à¶º à¶šà¶» ඇති" " බවට වග බල෠ගන්න." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "ඉලක්ක පද්ධතියේ \"{}\" ගමනà·à¶±à·Šà¶­à¶º à¶±à·à¶¸à·à·€à¶½à·’යක් නොවේ" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM වින්â€à¶ºà·à·ƒ ගොනුව ලිවිය නොහà·à¶š" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM වින්â€à¶ºà·à·ƒ ගොනුව {!s} නොපවතී" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM වින්â€à¶ºà·à·ƒ ගොනුව ලිවිය නොහà·à¶š" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM වින්â€à¶ºà·à·ƒ ගොනුව {!s} නොපවතී" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM වින්â€à¶ºà·à·ƒ ගොනුව ලිවිය නොහà·à¶š" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM වින්â€à¶ºà·à·ƒ ගොනුව {!s} නොපවතී" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM වින්â€à¶ºà·à·ƒ à¶šà·… නොහà·à¶š" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM ග්â€à¶»à·“ටර් ස්ථà·à¶´à¶±à¶º à¶šà¶» à¶±à·à¶­." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM වින්â€à¶ºà·à·ƒ ගොනුව ලිවිය නොහà·à¶š" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM වින්â€à¶ºà·à·ƒ ගොනුව {!s} නොපවතී" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "සංදර්à·à¶š කළමනà·à¶šà¶»à·” මොඩියුලය සඳහ෠සංදර්à·à¶š කළමනà·à¶šà¶»à·”වන් à¶­à·à¶»à·à¶œà·™à¶± නොමà·à¶­." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "à¶œà·à¶½à·“ය ගබඩà·à·€ සහ displaymanager.conf යන දෙකෙහිම සංදර්à·à¶š කළමනà·à¶šà¶»à·” à¶½à·à¶ºà·’ස්තුව " "හිස් හ෠අර්ථ දක්ව෠නොමà·à¶­." #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "සංදර්à·à¶š කළමනà·à¶šà¶»à·” වින්â€à¶ºà·à·ƒà¶º අසම්පූර්ණ විය" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio වින්â€à¶ºà·à·ƒ කරමින්." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "{!s} සඳහ෠භà·à·€à·’ත෠කිරීමට root mount point ලබ෠දී නොමà·à¶­." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "දත්ත ස්ථà·à¶´à¶±à¶º වෙමින්." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "OpenRC සේව෠වින්â€à¶ºà·à·ƒ කරන්න" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "à¶°à·à·€à¶± මට්ටම {level!s} වෙත සේවà·à·€ {name!s} à¶‘à¶šà·Š à¶šà·… නොහà·à¶š." #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "à¶°à·à·€à¶± මට්ටමේ {level!s} වෙතින් සේවà·à·€ {name!s} ඉවත් à¶šà·… නොහà·à¶š." #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "{name!s} සේවà·à·€ සඳහ෠නොදන්න෠සේවà·-à¶šà·Šâ€à¶»à·’යà·à·€ {arg!s} à¶°à·à·€à¶± මට්ටමේ " "{level!s}." #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} chroot à·„à·’ ඇමතුම {num!s} දà·à·‚ කේතය ලබ෠දුන්නේය." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "ඉලක්ක à¶°à·à·€à¶± මට්ටම නොපවතී" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "à¶°à·à·€à¶± මට්ටම {level!s} සඳහ෠මà·à¶»à·Šà¶œà¶º {path!s}, එය නොපවතී." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "ඉලක්ක සේවà·à·€ නොපවතී" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "සේවà·à·€ සඳහ෠{name!s} මà·à¶»à·Šà¶œà¶º {path!s}, එය නොපවතී." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Plymouth තේමà·à·€ වින්â€à¶ºà·à·ƒ කරන්න" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "ඇසුරුම් ස්ථà·à¶´à¶±à¶º කරන්න." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "à¶´à·à¶šà·šà¶¢ à·ƒà·à¶šà·ƒà·“ම (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "ඇසුරුමක් ස්ථà·à¶´à¶±à¶º වෙමින්." msgstr[1] "ඇසුරුම් %(num)d à¶šà·Š ස්ථà·à¶´à¶±à¶º වෙමින්." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "ඇසුරුමක් ඉවත් වෙමින්." msgstr[1] "ඇසුරුම් %(num)d à¶šà·Š ඉවත් වෙමින්." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "à¶´à·à¶šà·šà¶¢ කළමනà·à¶šà¶»à·” දà·à·‚යකි" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "à¶´à·à¶šà·šà¶¢ කළමනà·à¶šà¶»à·”à¶§ යà·à·€à¶­à·Šà¶šà·à¶½à·“à¶± සකස් කිරීමට නොහà·à¶šà·’ විය. විධà·à¶±à¶º
{!s}
" "දà·à·‚ කේතය {!s} ලබ෠දුන්නේය." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "à¶´à·à¶šà·šà¶¢ කළමනà·à¶šà¶»à·”à¶§ පද්ධතිය යà·à·€à¶­à·Šà¶šà·à¶½à·“à¶± à¶šà·… නොහà·à¶šà·’ විය. විධà·à¶±à¶º
{!s}
දà·à·‚" " කේතය {!s} ලබ෠දුන්නේය." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "à¶´à·à¶šà·šà¶¢ කළමනà·à¶šà¶»à·”à¶§ ස්ථà·à¶´à·’à¶­ පද්ධතියට වෙනස්කම් සිදු à¶šà·… නොහà·à¶š. විධà·à¶±à¶º " "
{!s}
දà·à·‚ කේතය {!s} ලබ෠දුන්නේය." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "bootloader ස්ථà·à¶´à¶±à¶º කරන්න." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Grub ස්ථà·à¶´à¶±à¶º කිරීමට අපොහොසත් විය, à¶œà·à¶½à·“ය ආචයනය තුළ කොටස් අර්ථ දක්ව෠නොමà·à¶­" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Bootloader ස්ථà·à¶´à¶±à¶º කිරීමේ දà·à·‚යකි" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "ඇරඹුම් à¶šà·à¶»à¶šà¶º ස්ථà·à¶´à¶±à¶º à¶šà¶½ නොහà·à¶š. ස්ථà·à¶´à¶± විධà·à¶±à¶º
{!s}
දà·à·‚ කේතය {!s} " "ලබ෠දුන්නේය." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "දෘඩà·à¶‚à¶œ ඔරලà·à·ƒà·”à·€ à·ƒà·à¶šà·ƒà·™à¶¸à·’න්." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "mkinitfs සමඟ initramfs නිර්මà·à¶«à¶º කිරීම." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "ඉලක්කය මත mkinitfs à¶°à·à·€à¶±à¶º කිරීමට අසමත් විය" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "පිටවීමේ කේතය වූයේ {}" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "dracut සමඟ initramfs නිර්මà·à¶«à¶º කිරීම." #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "ඉලක්කය මත à¶©à·Šâ€à¶»à·à¶šà¶§à·Š à¶°à·à·€à¶±à¶º කිරීමට අපොහොසත් විය" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "initramfs වින්â€à¶ºà·à·ƒ කිරීම." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt සේවà·à·€ වින්â€à¶ºà·à·ƒ කරමින්." #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "fstab ලියමින්." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" "à¶·à·à·€à·’ත෠කිරීමට
{!s}
සඳහà·
{!s}
වින්â€à¶ºà·à·ƒà¶ºà¶šà·Š ලබ෠දී නොමà·à¶­." #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "ඩමි python à·€à·à¶©à·ƒà¶§à·„à¶±." #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "ව්â€à¶ºà·à¶¢ python පියවර {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "ස්ථà·à¶± වින්â€à¶ºà·à·ƒ කිරීම." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "à¶¢à·à¶½ වින්â€à¶ºà·à·ƒà¶º සුරà·à¶šà·™à¶¸à·’න්." calamares-calamares-2d126ae/lang/python/sk/000077500000000000000000000000001430147706700206665ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sk/LC_MESSAGES/000077500000000000000000000000001430147706700224535ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sk/LC_MESSAGES/python.po000066400000000000000000000325111430147706700243360ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "Pripájanie oddielov." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Chyba konfigurácie" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Nie sú urÄené žiadne oddiely na použitie pre
{!s}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfigurácia služieb systemd" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Nedá sa zakázaÅ¥ cieľ systému systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Nedá sa zamaskovaÅ¥ jednotka systému systemd {name!s}." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Neznáme príkazy systému systemd {command!s} a " "{suffix!s} pre jednotku {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Napĺňanie súborových systémov." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "Príkaz rsync zlyhal s chybovým kódom {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Rozbaľuje sa obraz {}/{}, súbor {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Spúšťa sa rozbaľovanie {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Zlyhalo rozbalenie obrazu „{}“" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Žiadny bod pripojenia pre koreňový oddiel" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Zlý bod pripojenia pre koreňový oddiel" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Súborový systém pre \"{}\" ({}) nie je podporovaný vaším aktuálnym jadrom" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Zdrojový súborový systém \"{}\" neexistuje" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Cieľ \"{}\" v cieľovom systéme nie je adresárom" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Nedá sa zapísaÅ¥ konfiguraÄný súbor správcu KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KonfiguraÄný súbor správcu KDM {!s} neexistuje" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Nedá sa zapísaÅ¥ konfiguraÄný súbor správcu LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "KonfiguraÄný súbor správcu LXDM {!s} neexistuje" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Nedá sa zapísaÅ¥ konfiguraÄný súbor správcu LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "KonfiguraÄný súbor správcu LightDM {!s} neexistuje" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Nedá s nakonfigurovaÅ¥ správca LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nie je nainÅ¡talovaný žiadny vítací nástroj LightDM." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Nedá sa zapísaÅ¥ konfiguraÄný súbor správcu SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "KonfiguraÄný súbor správcu SLIM {!s} neexistuje" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Neboli vybraní žiadni správcovia zobrazenia pre modul displaymanager." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Nie je zadaný žiadny bod pripojenia na použitie pre
{!s}
." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Inštalácia balíkov." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Spracovávajú sa balíky (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, 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:71 #, 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:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "InÅ¡talácia zavádzaÄa." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Nastavovanie hardvérových hodín." #: src/modules/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:28 msgid "Writing fstab." msgstr "Zapisovanie fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Konfigurácia miestnych nastavení." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Ukladanie sieťovej konfigurácie." calamares-calamares-2d126ae/lang/python/sl/000077500000000000000000000000001430147706700206675ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sl/LC_MESSAGES/000077500000000000000000000000001430147706700224545ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sl/LC_MESSAGES/python.po000066400000000000000000000250741430147706700243450ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/sq/000077500000000000000000000000001430147706700206745ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sq/LC_MESSAGES/000077500000000000000000000000001430147706700224615ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sq/LC_MESSAGES/python.po000066400000000000000000000354131430147706700243500ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Besnik Bleta , 2022\n" "Language-Team: Albanian (https://www.transifex.com/calamares/teams/20061/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "Po montohen pjesë." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Gabim i brendshëm gjatë montimit të grupeve zfs të të dhënave" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "S’u arrit të importohej zpool" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "S’u arrit të shkyçej zpool" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "S’u arrit të caktohej pikë montimi zfs" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Gabim Formësimi" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 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/mount/main.py:253 msgid "zfs mounting error" msgstr "Gabim montimi zfs" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Formësoni shërbime systemd" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "S’aktivizohet dot kohëmatës systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "S’çaktivizohet dot objektivi systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "S’maskohet dot njësia systemd {name!s}." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Po mbushen sisteme kartelash." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync dështoi me kod gabimi {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Po shpaketohet paketa {}/{}, kartela {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Po fillohet të shpaketohet {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Dështoi shpaketimi i figurës \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "S’ka pikë montimi për ndarjen rrënjë" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage nuk përmban kyç “rootMountPointâ€." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Pikë e gabuar montimi për ndarjen rrënjë" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint është “{}â€, çka nuk ekziston." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Formësim gabim i unpackfs-ë" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "S’ka hollësi formësimi." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "Sistemi i kartelave për \"{}\" ({}) nuk mbulohet nga kerneli juaj i tanishëm" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Sistemi i kartelave \"{}\" ({}) s’ekziston" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "S’u arrit të gjendet unsquashfs, sigurohuni se keni të instaluar paketën " "squashfs-tools." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Destinacioni \"{}\" te sistemi i synuar s’është drejtori" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "S’shkruhet dot kartelë formësimi KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi KDM {!s}" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "S’shkruhet dot kartelë formësimi LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi LXDM {!s}" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "S’shkruhet dot kartelë formësimi LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi LightDM {!s}" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "S’formësohet dot LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "S’ka të instaluar përshëndetës LightDM." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "S’shkruhet dot kartelë formësimi SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi SLIM {!s}" #: src/modules/displaymanager/main.py:992 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:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "S’është dhënë pikë montimi rrënjë për
{!s}
për t’u përdorur." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalo paketa." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Po përpunohen paketat (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Po instalohet një paketë." msgstr[1] "Po instalohen %(num)d paketa." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Po hiqet një paketë." msgstr[1] "Po hiqen %(num)d paketa." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Gabim Përgjegjësi Paketash" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Përgjegjësi i paketave s’përgatiti dot përditësime. Urdhri
{!s}
u" " përgjigj me kod gabimi {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Përgjegjësi i paketave s’përditësoi dot sistemin. Urdhri
{!s}
u " "përgjigj me kod gabimi {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "Përgjegjësi i paketave s’bëri dot ndryshime te sistemi i instaluar. Urdhri " "
{!s}
u përgjigj me kod gabimi {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalo ngarkues nisjesh." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "S'u arrit të instalohej grub, te depozita globale s’ka të përkufizuara pjesë" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Gabim instalimi Ngarkuesi Nisësi" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Ngarkuesi i nisësit s’u instalua dot. Urdhri i instalimit
{!s}
u " "përgjigj me kod gabimi {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Po caktohet ora hardware." #: src/modules/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:28 msgid "Writing fstab." msgstr "Po shkruhet fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Po formësohen vendoret." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Po ruhet formësimi i rrjetit." calamares-calamares-2d126ae/lang/python/sr/000077500000000000000000000000001430147706700206755ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sr/LC_MESSAGES/000077500000000000000000000000001430147706700224625ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sr/LC_MESSAGES/python.po000066400000000000000000000264271430147706700243560ustar00rootroot00000000000000# 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: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "Монтирање партиција." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Грешка поÑтаве" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "ПодеÑи „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:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Попуњавање фајл-ÑиÑтема." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync неуÑпешан Ñа кодом грешке {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "ÐеуÑпело раÑпакивање одраза \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Ðема тачке мотирања за root партицију" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Лоша тачка монтирања за корену партицију" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "ИнÑталирање података." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "УпиÑивање fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Подешавање локалитета." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Ð£Ð¿Ð¸Ñ Ð¿Ð¾Ñтаве мреже." calamares-calamares-2d126ae/lang/python/sr@latin/000077500000000000000000000000001430147706700220255ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sr@latin/LC_MESSAGES/000077500000000000000000000000001430147706700236125ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sr@latin/LC_MESSAGES/python.po000066400000000000000000000251121430147706700254740ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/sv/000077500000000000000000000000001430147706700207015ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sv/LC_MESSAGES/000077500000000000000000000000001430147706700224665ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/sv/LC_MESSAGES/python.po000066400000000000000000000351341430147706700243550ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Luna Jernberg , 2022\n" "Language-Team: Swedish (https://www.transifex.com/calamares/teams/20061/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "Monterar partitioner." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Internt fel vid montering av zfs datasets" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Misslyckades att importera zpool" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Misslyckades att låsa upp zpool" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Misslyckades att ställa in zfs monteringspunkt " #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Konfigurationsfel" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Inga partitioner är definerade för
{!s}
att använda." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs monteringsfel" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfigurera systemd tjänster" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "Kunde inte aktivera systemd timer {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Kunde inte inaktivera systemd målsystem {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Kan inte maskera systemd unit {name!s}" #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Packar upp filsystem." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync misslyckades med felkod {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Packar upp avbild {}/{}, fil {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Börjar att packa upp {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Misslyckades att packa upp avbild \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Ingen monteringspunkt för root partition" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globallagring innehåller inte en \"rootMonteringspunkt\" nyckel." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Dålig monteringspunkt för root partition" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMonteringspunkt är \"{}\", vilket inte existerar." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Dålig unpackfs konfiguration" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Det finns ingen konfigurationsinformation." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Filsystemet för \"{}\" ({}) stöds inte av din nuvarande kärna" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Källfilsystemet \"{}\" existerar inte" #: src/modules/unpackfs/main.py:466 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:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Destinationen \"{}\" på målsystemet är inte en katalog" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Misslyckades med att skriva KDM konfigurationsfil" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Misslyckades med att skriva LXDM konfigurationsfil" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Misslyckades med att skriva LightDM konfigurationsfil" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Kunde inte konfigurera LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Ingen LightDM greeter installerad." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Misslyckades med att SLIM konfigurationsfil" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Ingen skärmhanterare vald för displaymanager modulen." #: src/modules/displaymanager/main.py:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Ingen root monteringspunkt är angiven för
{!s}
att använda." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Installera paket." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Bearbetar paket (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installerar ett paket." msgstr[1] "Installerar %(num)d paket." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Tar bort ett paket." msgstr[1] "Tar bort %(num)d paket." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Pakethanterare fel" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Pakethanteraren kunde inte förbereda uppdateringar kommandot
{!s}
" " returnerade felkod {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Pakethanteraren kunde inte uppdatera systemet. kommandot
{!s}
" "returnerade felkod {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "Pakethanteraren kunde inte göra ändringar till det installerade systemet. " "kommandot
{!s}
returnerade felkod {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Installera starthanterare." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Det gick inte att installera grub, inga partitioner definierade i global " "lagring" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Starthanterare installationsfel" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Starthanterare kunde inte installeras. Installationskommandot " "
{!s}
returnerade felkod {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Ställer hårdvaruklockan." #: src/modules/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:28 msgid "Writing fstab." msgstr "Skriver fstab." #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "Konfigurerar språkinställningar" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Sparar nätverkskonfiguration." calamares-calamares-2d126ae/lang/python/ta_IN/000077500000000000000000000000001430147706700212435ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ta_IN/LC_MESSAGES/000077500000000000000000000000001430147706700230305ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ta_IN/LC_MESSAGES/python.po000066400000000000000000000247361430147706700247250ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Tamil (India) (https://www.transifex.com/calamares/teams/20061/ta_IN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ta_IN\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/te/000077500000000000000000000000001430147706700206615ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/te/LC_MESSAGES/000077500000000000000000000000001430147706700224465ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/te/LC_MESSAGES/python.po000066400000000000000000000247211430147706700243350ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Telugu (https://www.transifex.com/calamares/teams/20061/te/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: te\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/tg/000077500000000000000000000000001430147706700206635ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/tg/LC_MESSAGES/000077500000000000000000000000001430147706700224505ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/tg/LC_MESSAGES/python.po000066400000000000000000000362331430147706700243400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Victor Ibragimov , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Victor Ibragimov , 2020\n" "Language-Team: Tajik (https://www.transifex.com/calamares/teams/20061/tg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Танзимоти GRUB." #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "ВаÑлкунии қиÑмҳои диÑк." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Хатои танзимкунӣ" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Ягон қиÑми диÑк барои иÑтифодаи
{!s}
муайÑн карда нашуд." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Танзимоти хидматҳои systemd" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Хидмат тағйир дода намешавад" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "ДархоÑти systemctl {arg!s} дар chroot рамзи хатои {num!s}-ро ба" " вуҷуд овард." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Хидмати systemd-и {name!s} фаъол карда намешавад." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Интихоби systemd-и {name!s} фаъол карда намешавад." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Интихоби systemd-и {name!s} ғайрифаъол карда намешавад." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Воҳиди systemd-и {name!s} пинҳон карда намешавад." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Фармонҳои systemd-и номаълум {command!s} ва " "{suffix!s} барои воҳиди {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Пурборкунӣ бо низомҳои файлӣ." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync бо рамзи хатои {} қатъ шуд." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Баровардани тимÑол: {}/{}, файл: {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Оғози барориши {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "ТимÑоли \"{}\" бароварда нашуд" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Ягон нуқтаи ваÑл барои қиÑми диÑки реша (root) неÑÑ‚" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Ðуқтаи ваÑли нодуруÑÑ‚ барои қиÑми диÑки реша (root)" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Ðизоми файлӣ барои \"{}\" ({}) бо ҳаÑтаи ҷории шумо даÑтгирӣ намешавад" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Ðизоми файлии манбаи \"{}\" вуҷуд надорад" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Ҷойи таъиноти \"{}\" дар низоми интихобшуда феҳриÑÑ‚ намебошад" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Файли танзимии KDM Ñабт карда намешавад" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Файли танзимии KDM {!s} вуҷуд надорад" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Файли танзимии LXDM Ñабт карда намешавад" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Файли танзимии LXDM {!s} вуҷуд надорад" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Файли танзимии LightDM Ñабт карда намешавад" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Файли танзимии LightDM {!s} вуҷуд надорад" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM танзим карда намешавад" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Хушомади LightDM наÑб нашудааÑÑ‚." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Файли танзимии SLIM Ñабт карда намешавад" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Файли танзимии SLIM {!s} вуҷуд надорад" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Ягон мудири намоиш барои модули displaymanager интихоб нашудааÑÑ‚." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Рӯйхати displaymanagers ҳам дар globalstorage ва ҳам дар displaymanager.conf" " холӣ Ñ‘ номаълум аÑÑ‚." #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "Раванди танзимкунии мудири намоиш ба анҷом нараÑид" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Танзимкунии mkinitcpio." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Ðуқтаи ваÑли реша (root) барои иÑтифодаи
{!s}
дода нашуд." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "ÐаÑбкунии иттилоот." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Танзимоти хидматҳои OpenRC" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Хидмати {name!s} барои run-level {level!s} илова карда намешавад." #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Хидмати {name!s} аз run-level {level!s} тоза карда намешавад." #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Хидмати амалии {arg!s} барои хидмати {name!s} дар run-level " "{level!s} номаълум аÑÑ‚." #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "ДархоÑти rc-update {arg!s} дар chroot рамзи хатои {num!s}-ро ба" " вуҷуд овард." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "runlevel-и интихобшуда вуҷуд надорад" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "МаÑир барои runlevel {level!s} аз {path!s} иборат аÑÑ‚, аммо он " "вуҷуд надорад." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Хидмати интихобшуда вуҷуд надорад" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "МаÑир барои хидмати {name!s} аз {path!s} иборат аÑÑ‚, аммо он " "вуҷуд надорад." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Танзимоти мавзӯи Plymouth" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "ÐаÑбкунии қуттиҳо." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Коргузории қуттиҳо (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "ÐаÑбкунии Ñк баÑта." msgstr[1] "ÐаÑбкунии %(num)d баÑта." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Тозакунии Ñк баÑта" msgstr[1] "Тозакунии %(num)d баÑта." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "ÐаÑбкунии боркунандаи роҳандозӣ." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Танзимкунии Ñоати Ñахтафзор." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Эҷодкунии initramfs бо mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "mkinitfs дар низоми интихобшуда иҷро нашуд" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Рамзи барориш: {}" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "Эҷодкунии initramfs бо dracut." #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "dracut дар низоми интихобшуда иҷро нашуд" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Танзимкунии initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Танзимкунии хидмати OpenRC dmcrypt." #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "Сабткунии fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Вазифаи амÑилаи python." #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Қадами амÑилаи python {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Танзимкунии маҳаллигардониҳо." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Ðигоҳдории танзимоти шабака." calamares-calamares-2d126ae/lang/python/th/000077500000000000000000000000001430147706700206645ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/th/LC_MESSAGES/000077500000000000000000000000001430147706700224515ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/th/LC_MESSAGES/python.po000066400000000000000000000246561430147706700243470ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/tr_TR/000077500000000000000000000000001430147706700213035ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/tr_TR/LC_MESSAGES/000077500000000000000000000000001430147706700230705ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/tr_TR/LC_MESSAGES/python.po000066400000000000000000000353061430147706700247600ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Demiray Muhterem , 2022\n" "Language-Team: Turkish (Turkey) (https://www.transifex.com/calamares/teams/20061/tr_TR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "Disk bölümlemeleri bağlanıyor." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Dahili bağlama hatası zfs veri kümeleri" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "zpool içe aktarılamadı" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "zpool kilidi açılamadı" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "zfs bağlama noktası ayarlanamadı" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Yapılandırma Hatası" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
kullanması için hiçbir bölüm tanımlanmadı." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs bağlama hatası" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Systemd hizmetlerini yapılandır" #: src/modules/services-systemd/main.py: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:69 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:67 msgid "Cannot enable systemd timer {name!s}." msgstr "{name!s} sistem zamanlayıcısı etkinleştirilemiyor." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Systemd hedefi devre dışı bırakılamıyor {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Systemd birimi maskeleyemiyor {name!s}." #: src/modules/services-systemd/main.py:75 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/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Dosya sistemlerini dolduruyorum." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync {} hata koduyla başarısız oldu." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Açılan kurulum medyası {}/{}, dışa aktarılan dosya sayısı {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Dışa aktarım başlatılıyor {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" kurulum medyası aktarılamadı" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "kök disk bölümü için bağlama noktası yok" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage bir \"rootMountPoint\" anahtarı içermiyor." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Kök disk bölümü için hatalı bağlama noktası" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint, mevcut olmayan \"{}\" dir." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Hatalı unpackfs yapılandırması" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Yapılandırma bilgisi yok." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) Dosya sistemi mevcut çekirdeğiniz tarafından desteklenmiyor" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" Kaynak dosya sistemi mevcut değil" #: src/modules/unpackfs/main.py:466 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:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Hedef sistemdeki \"{}\" hedefi bir dizin değil" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM yapılandırılamıyor" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM karşılama yüklü değil." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:992 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:993 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:1075 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:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "
{!s}
kullanması için kök bağlama noktası verilmedi." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Paketleri yükle" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paketler işleniyor (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "%(num)d paket yükleniyor" msgstr[1] "%(num)d paket yükleniyor" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "%(num)d paket kaldırılıyor." msgstr[1] "%(num)d paket kaldırılıyor." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Paket Yöneticisi hatası" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Paket yöneticisi güncellemeleri hazırlayamadı.
{!s}
komutu {!s} " "hata kodunu döndürdü." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Paket yöneticisi sistemi güncelleyemedi.
{!s}
komutu {!s} hata " "kodunu döndürdü." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "Paket yöneticisi kurulu sistemde değişiklik yapamadı.
{!s}
komutu" " {!s} hata kodunu döndürdü." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Önyükleyici kuruluyor" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "Grub yüklenemedi, genel depolamada tanımlı bölüm yok" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Önyükleyici yükleme hatası" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Önyükleyici yüklenemedi. Kurulum komutu
{!s}
, {!s} hata kodunu " "döndürdü." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Donanım saati ayarlanıyor." #: src/modules/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:28 msgid "Writing fstab." msgstr "Fstab dosyasına yazılıyor." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" "
{!s}
'nin kullanması için
{!s}
yapılandırması " "verilmemiÅŸtir." #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy python job." #: src/modules/dummypython/main.py: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:31 msgid "Configuring locales." msgstr "Sistem yerelleri yapılandırılıyor." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "AÄŸ yapılandırması kaydediliyor." calamares-calamares-2d126ae/lang/python/uk/000077500000000000000000000000001430147706700206705ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/uk/LC_MESSAGES/000077500000000000000000000000001430147706700224555ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/uk/LC_MESSAGES/python.po000066400000000000000000000436341430147706700243500ustar00rootroot00000000000000# 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 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Yuri Chornoivan , 2022\n" "Language-Team: Ukrainian (https://www.transifex.com/calamares/teams/20061/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "ÐœÐ¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñ–Ð² даних zfs" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ zpool" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ñ‚Ð¸ zpool" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "Ðе вдалоÑÑ Ð²Ñтановити точку Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ zfs" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Помилка налаштовуваннÑ" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Ðе визначено розділів Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтаннÑ
{!s}
." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "Помилка Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ zfs" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Ðалаштуйте Ñлужби systemd" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ Ñлужбу" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "ВнаÑлідок виклику systemctl {arg!s} у chroot було повернуто " "Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· кодом помилки {num! s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Ðе вдалоÑÑ Ð²Ð²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ Ñлужбу systemd {name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Ðе вдалоÑÑ Ð²Ð²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ systemd {name!s}." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "Ðе вдалоÑÑ Ð²Ð²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ таймер systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð¼ÐºÐ½ÑƒÑ‚Ð¸ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¼Ð°Ñкувати вузол systemd {name!s}." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Ðевідомі команди systemd {command!s} та {suffix!s}" " Ð´Ð»Ñ Ð¿Ñ€Ð¸Ñтрою {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Ð—Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¸Ñ… ÑиÑтем." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "Спроба виконати rsync зазнала невдачі з кодом помилки {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Розпаковуємо образ {} з {}, файл {} з {}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Починаємо розпаковувати {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ образ «{}»" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Ðемає точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐ½ÐµÐ²Ð¾Ð³Ð¾ розділу" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "У globalstorage не міÑтитьÑÑ ÐºÐ»ÑŽÑ‡Ð° «rootMountPoint»." #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Помилкова точна Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐ½ÐµÐ²Ð¾Ð³Ð¾ розділу" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint дорівнює «{}», але такої теки не Ñ–Ñнує." #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "Помилкові Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ unpackfs" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "Ðемає даних налаштувань." #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "У поточному Ñдрі ÑиÑтеми не передбачено підтримки файлової ÑиÑтеми «{}» ({})" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Вихідної файлової ÑиÑтеми «{}» не Ñ–Ñнує" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ unsquashfs; переконайтеÑÑ, що вÑтановлено пакет squashfs-" "tools." #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«{}» у цільовій ÑиÑтемі не Ñ” каталогом" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл налаштувань KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Файла налаштувань KDM {!s} не Ñ–Ñнує" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ файла налаштувань LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Файла налаштувань LXDM {!s} не Ñ–Ñнує" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ файла налаштувань LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Файла налаштувань LightDM {!s} не Ñ–Ñнує" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "ЗаÑіб входу до ÑиÑтеми LightDM не вÑтановлено." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ файла налаштувань SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Файла налаштувань SLIM {!s} не Ñ–Ñнує" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "Ðе вибрано заÑобу ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñплеєм Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ displaymanager." #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "СпиÑок заÑобів ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñплеєм Ñ” порожнім або невизначеним у " "bothglobalstorage та displaymanager.conf." #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ñобу ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñплеєм Ñ” неповними" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Ðалаштовуємо mkinitcpio." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Ðе вказано кореневої точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ñƒ
{!s}
." #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Ð’Ñтановити пакети." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "ОброблÑємо пакунки (%(count)d з %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Ð’Ñтановлюємо %(num)d пакунок." msgstr[1] "Ð’Ñтановлюємо %(num)d пакунки." msgstr[2] "Ð’Ñтановлюємо %(num)d пакунків." msgstr[3] "Ð’Ñтановлюємо один пакунок." #: src/modules/packages/main.py:71 #, 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:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "Помилка заÑобу ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ°Ð¼Ð¸" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "ЗаÑобу ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ°Ð¼Ð¸ не вдалоÑÑ Ð¿Ñ€Ð¸Ð³Ð¾Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ оновленнÑ. Програмою " "
{!s}
повернуто код помилки {!s}." #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "ЗаÑобу ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ°Ð¼Ð¸ не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ ÑиÑтему. Програмою " "
{!s}
повернуто код помилки {!s}." #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" "ЗаÑобу ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ°Ð¼Ð¸ не вдалоÑÑ Ð²Ð½ÐµÑти зміну до вÑтановленої ÑиÑтеми. " "Програмою
{!s}
повернуто код помилки {!s}." #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Ð’Ñтановити завантажувач." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" "Ðе вдалоÑÑ Ð²Ñтановити grub — на загальному Ñховищі даних не визначено " "розділів" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Помилка вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð°" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Ðе вдалоÑÑ Ð²Ñтановити завантажувач. Програмою Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ " "
{!s}
повернуто код помилки {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Ð’Ñтановлюємо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¾Ð³Ð¾ годинника." #: src/modules/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:28 msgid "Writing fstab." msgstr "ЗапиÑуємо fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" "Ðе надано налаштувань
{!s}
Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ñƒ
{!s}
." #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Фіктивне Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ python." #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Фіктивний крок python {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Ðалаштовуємо локалі." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Зберігаємо Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ–." calamares-calamares-2d126ae/lang/python/ur/000077500000000000000000000000001430147706700206775ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ur/LC_MESSAGES/000077500000000000000000000000001430147706700224645ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/ur/LC_MESSAGES/python.po000066400000000000000000000247171430147706700243600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/uz/000077500000000000000000000000001430147706700207075ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/uz/LC_MESSAGES/000077500000000000000000000000001430147706700224745ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/uz/LC_MESSAGES/python.po000066400000000000000000000246571430147706700243730ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+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:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/vi/000077500000000000000000000000001430147706700206675ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/vi/LC_MESSAGES/000077500000000000000000000000001430147706700224545ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/vi/LC_MESSAGES/python.po000066400000000000000000000341721430147706700243440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # T. Tran , 2020 # th1nhhdk , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: th1nhhdk , 2021\n" "Language-Team: Vietnamese (https://www.transifex.com/calamares/teams/20061/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Cấu hình GRUB" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Äang gắn kết các phân vùng." #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Lá»—i cấu hình" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "Không có phân vùng nào được định nghĩa cho
{!s}
để dùng." #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Cấu hình các dịch vụ systemd" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Không thể sá»­a đổi dịch vụ" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} trong môi trưá»ng chroot trả vá» lá»—i {num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Không thể bật dịch vụ systemd {name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Không thể bật nhóm dịch vụ systemd {name!s}." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Không thể tắt nhóm dịch vụ systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Không thể đánh dấu đơn vị systemd {name!s}." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Không nhận ra lệnh systemd {command!s} và " "{suffix!s} cho đơn vị {name!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Äang làm đầy các hệ thống tập tin." #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync thất bại vá»›i lá»—i {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Äang bung hình ảnh {}/{}, tập tin {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Bắt đầu bung ná»™i dung {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Bung hình ảnh thất bại \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Không có Ä‘iểm kết nối cho phân vùng gốc" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Sai Ä‘iểm kết nối cho phân vùng gốc" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Hệ thống tập tin cho \"{}\" ({}) không được há»— trợ bởi nhân hiện tại" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Hệ thống tập tin nguồn \"{}\" không tồn tại" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Hệ thống đích \"{}\" không phải là má»™t thư mục" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Không thể ghi vào tập tin cấu hình KDM" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Tập tin cấu hình KDM {!s} không tồn tại" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Không thể ghi vào tập tin cấu hình LXDM" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Tập tin cấu hình LXDM {!s} không tồn tại" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Không thể ghi vào tập tin cấu hình LightDM" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Tập tin cấu hình LightDM {!s} không tồn tại" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Không thể cấu hình LXDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Màn hình chào mừng LightDM không được cài đặt." #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Không thể ghi vào tập tin cấu hình SLIM" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Tập tin cấu hình SLIM {!s} không tồn tại" #: src/modules/displaymanager/main.py:992 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:993 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:1075 msgid "Display manager configuration was incomplete" msgstr "Cầu hình quản lý hiện thị không hoàn tất" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Äang cấu hình mkinitcpio." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Không có điểm kết nối gốc cho
{!s}
để dùng." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Äang cài đặt dữ liệu." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Cấu hình dịch vụ OpenRC" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Không thể thêm dịch vụ {name!s} vào run-level {level!s}." #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Không thể loại bá» dịch vụ {name!s} từ run-level {level!s}." #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Không nhận ra thao tác {arg!s} cho dịch vụ {name!s} ở run-level" " {level!s}." #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "Lệnh rc-update {arg!s} trong môi trưá»ng chroot trả vá» lá»—i " "{num!s}." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Nhóm dịch vụ khởi động không tồn tại" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "ÄÆ°á»ng dẫn cho runlevel {level!s} là {path!s}, nhưng không tồn " "tại." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Nhóm dịch vụ không tồn tại" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "ÄÆ°á»ng dẫn cho dịch vụ {name!s} là {path!s}, nhưng không tồn " "tại." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Cấu hình giao diện Plymouth" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Äang cài đặt các gói ứng dụng." #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Äang xá»­ lý gói (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Äang cài đặt %(num)d gói ứng dụng." #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Äang gỡ bá» %(num)d gói ứng dụng." #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Äang cài đặt bá»™ khởi động." #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "Lá»—i cài đặt trình khởi động(bootloader)" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Trình khởi động(bootloader) không thể được cài đặt. Lệnh cài đặt " "
{!s}
đã trả mã lá»—i {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Äang thiết lập đồng hồ máy tính." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Äang tạo initramfs bằng mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Chạy mkinitfs thất bại ở hệ thống đích" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Mã lá»—i trả vá» là {}" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "Äang tạo initramfs bằng dracut." #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "Chạy dracut thất bại ở hệ thống đích" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Äang cấu hình initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Äang cấu hình dịch vụ OpenRC dmcrypt." #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "Äang viết vào fstab." #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Ví dụ công việc python." #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Ví dụ python bước {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Äang cấu hình ngôn ngữ." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Äang lưu cấu hình mạng." calamares-calamares-2d126ae/lang/python/zh/000077500000000000000000000000001430147706700206725ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/zh/LC_MESSAGES/000077500000000000000000000000001430147706700224575ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/zh/LC_MESSAGES/python.po000066400000000000000000000246611430147706700243510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Chinese (https://www.transifex.com/calamares/teams/20061/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/zh_CN/000077500000000000000000000000001430147706700212525ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/zh_CN/LC_MESSAGES/000077500000000000000000000000001430147706700230375ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/zh_CN/LC_MESSAGES/python.po000066400000000000000000000337541430147706700247340ustar00rootroot00000000000000# 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 # Giovanni Schiano-Moriello, 2022 # 玉堂白鹤 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: 玉堂白鹤 , 2022\n" "Language-Team: Chinese (China) (https://www.transifex.com/calamares/teams/20061/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "挂载分区。" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "装载 zfs æ•°æ®é›†æ—¶å‡ºçŽ°å†…éƒ¨é”™è¯¯" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "导入 zpool 失败" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "è§£é” zpool 失败" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "设置 zfs 挂载点失败" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "é…置错误" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "没有分é…分区给
{!s}
。" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs 挂载出错" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "é…ç½® systemd æœåŠ¡" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "无法修改æœåŠ¡" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chroot 中的 systemctl {arg!s} 命令返回错误 {num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "无法å¯ç”¨ systemd æœåŠ¡ {name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "无法å¯ç”¨ systemd 目标 {name!s}." #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "无法å¯ç”¨ systemd 计时器 {name!s}。" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "无法ç¦ç”¨ systemd 目标 {name!s}." #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "无法å±è”½ systemd å•å…ƒ {name!s}." #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "未知的 systemd 命令 {command!s} å’Œ {name!s} å•å…ƒå‰ç¼€ " "{suffix!s}." #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "写入文件系统。" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync æŠ¥é”™ï¼Œé”™è¯¯ç  {}." #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "è§£åŽ‹é•œåƒ {}/{},文件{}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "开始解压 {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "解压镜åƒå¤±è´¥ \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "æ—  root 分区挂载点" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage(全局存储)中ä¸åŒ…å« \"rootMountPoint\"(root挂载点)键。" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "错误的 root 分区挂载点" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint(root挂载点)是 \"{}\",其ä¸å­˜åœ¨ã€‚" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "错误的 unpackfs 解包é…ç½®" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "没有é…置信æ¯ã€‚" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "你当å‰çš„å†…æ ¸ä¸æ”¯æŒæ–‡ä»¶ç³»ç»Ÿ \"{}\" ({})" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "æºæ–‡ä»¶ç³»ç»Ÿ \"{}\" ä¸å­˜åœ¨" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "寻找 unsquashfs 失败,请确定您已安装 squashfs-tools 软体包。" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "目标系统中的 \"{}\" 䏿˜¯ä¸€ä¸ªç›®å½•" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "无法写入 KDM é…置文件" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM é…置文件 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "无法写入 LXDM é…置文件" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM é…置文件 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "无法写入 LightDM é…置文件" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM é…置文件 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "无法é…ç½® LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "未安装 LightDM 欢迎程åºã€‚" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "无法写入 SLIM é…置文件" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM é…置文件 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "显示管ç†å™¨æ¨¡å—中未选择显示管ç†å™¨ã€‚" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "globalstorage å’Œ displaymanager.conf é…置文件中都没有é…置显示管ç†å™¨ã€‚" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "显示管ç†å™¨é…ç½®ä¸å®Œå…¨" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "é…ç½® mkinitcpio." #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr " 未设置
{!s}
è¦ä½¿ç”¨çš„æ ¹æŒ‚载点。" #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "安装软件包。" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "软件包处ç†ä¸­ï¼ˆ%(count)d/%(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "安装%(num)d软件包。" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "移除%(num)d软件包。" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "软件包管ç†å™¨é”™è¯¯" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "软件包管ç†å™¨æ— æ³•准备更新。命令
{!s}
返回错误代ç {!s}。" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "软件包管ç†å™¨æ— æ³•更新系统。命令
{!s}
返回错误代ç {!s}。" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "软件包管ç†å™¨æ— æ³•对已安装的系统进行更改。命令
{!s}
返回错误代ç {!s}。" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "安装å¯åŠ¨åŠ è½½å™¨ã€‚" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "无法安装 grub,全局存储中未定义分区" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "å¯åŠ¨åŠ è½½å™¨å®‰è£…å‡ºé”™" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "无法安装å¯åŠ¨åŠ è½½å™¨ã€‚å®‰è£…å‘½ä»¤
{!s}
è¿”å›žé”™è¯¯ä»£ç  {!s}。" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "设置硬件时钟。" #: src/modules/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:28 msgid "Writing fstab." msgstr "正在写入 fstab。" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "æ— 
{!s}
é…ç½®å¯ä¾›
{!s}
使用。" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "å ä½ Python 任务。" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "å ä½ Python 步骤 {}" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "正在进行本地化é…置。" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "正在ä¿å­˜ç½‘络é…置。" calamares-calamares-2d126ae/lang/python/zh_HK/000077500000000000000000000000001430147706700212545ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/zh_HK/LC_MESSAGES/000077500000000000000000000000001430147706700230415ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/zh_HK/LC_MESSAGES/python.po000066400000000000000000000247031430147706700247300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Chinese (Hong Kong) (https://www.transifex.com/calamares/teams/20061/zh_HK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_HK\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:28 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:429 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" calamares-calamares-2d126ae/lang/python/zh_TW/000077500000000000000000000000001430147706700213045ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/zh_TW/LC_MESSAGES/000077500000000000000000000000001430147706700230715ustar00rootroot00000000000000calamares-calamares-2d126ae/lang/python/zh_TW/LC_MESSAGES/python.po000066400000000000000000000336701430147706700247630ustar00rootroot00000000000000# 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 # 黃æŸè«º , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-29 16:17+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: 黃æŸè«º , 2022\n" "Language-Team: Chinese (Taiwan) (https://www.transifex.com/calamares/teams/20061/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "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:42 msgid "Mounting partitions." msgstr "正在掛載分割å€ã€‚" #: src/modules/mount/main.py:88 src/modules/mount/main.py:124 msgid "Internal error mounting zfs datasets" msgstr "掛載 zfs 資料集時發生內部錯誤" #: src/modules/mount/main.py:100 msgid "Failed to import zpool" msgstr "匯入 zpool 失敗" #: src/modules/mount/main.py:116 msgid "Failed to unlock zpool" msgstr "解鎖 zpool 失敗" #: src/modules/mount/main.py:133 src/modules/mount/main.py:138 msgid "Failed to set zfs mountpoint" msgstr "設定 zfs 掛載點失敗" #: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 #: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:394 #: src/modules/fstab/main.py:400 src/modules/fstab/main.py:428 #: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "設定錯誤" #: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 #: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 #: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:395 msgid "No partitions are defined for
{!s}
to use." msgstr "沒有分割å€è¢«å®šç¾©ç‚º
{!s}
以供使用。" #: src/modules/mount/main.py:253 msgid "zfs mounting error" msgstr "zfs 掛載錯誤" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "設定 systemd æœå‹™" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "無法修改æœå‹™" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "在 chroot 中呼å«çš„ systemctl {arg!s} 回傳了錯誤代碼 {num!s}。" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "無法啟用 systemd æœå‹™ {name!s}。" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "無法啟用 systemd 目標 {name!s}。" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer {name!s}." msgstr "無法啟用 systemd timer {name!s}。" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "無法åœç”¨ systemd 目標 {name!s}。" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "無法 mask systemd å–®ä½ {name!s}。" #: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "未知的 systemd 指令 {command!s} 與 {suffix!s} çµ¦å–®ä½ " "{name!s}。" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "填滿檔案系統。" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync 失敗,錯誤碼 {} 。" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "正在解壓縮 {}/{},檔案 {}/{}" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "開始解壓縮 {}" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "ç„¡æ³•è§£é–‹æ˜ åƒæª” \"{}\"" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "沒有 root 分割å€çš„æŽ›è¼‰é»ž" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "globalstorage ä¸åŒ…å« \"rootMountPoint\" éµã€‚" #: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "root åˆ†å‰²å€æŽ›è¼‰é»žéŒ¯èª¤" #: src/modules/unpackfs/main.py:435 msgid "rootMountPoint is \"{}\", which does not exist." msgstr "rootMountPoint 為 \"{}\",其ä¸å­˜åœ¨ã€‚" #: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 #: src/modules/unpackfs/main.py:480 msgid "Bad unpackfs configuration" msgstr "錯誤的 unpackfs 設定" #: src/modules/unpackfs/main.py:440 msgid "There is no configuration information." msgstr "沒有設定資訊。" #: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) 的檔案系統ä¸ç²æ‚¨ç›®å‰çš„內核所支æ´" #: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "ä¾†æºæª”案系統 \"{}\" ä¸å­˜åœ¨" #: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "尋找 unsquashfs å¤±æ•—ï¼Œè«‹ç¢ºå®šæ‚¨å·²å®‰è£ squashfs-tools 軟體包。" #: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "目標系統中的目的地 \"{}\" 䏿˜¯ç›®éŒ„" #: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "無法寫入 KDM 設定檔" #: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM 設定檔 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "無法寫入 LXDM 設定檔" #: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 設定檔 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "無法寫入 LightDM 設定檔" #: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 設定檔 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "無法設定 LightDM" #: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "æœªå®‰è£ LightDM greeter。" #: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "無法寫入 SLIM 設定檔" #: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 設定檔 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:992 msgid "No display managers selected for the displaymanager module." msgstr "未在顯示管ç†å™¨æ¨¡çµ„中é¸å–顯示管ç†å™¨ã€‚" #: src/modules/displaymanager/main.py:993 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "顯示管ç†å™¨æ¸…單為空或在 globalstorage 與 displaymanager.conf 中皆未定義。" #: src/modules/displaymanager/main.py:1075 msgid "Display manager configuration was incomplete" msgstr "顯示管ç†å™¨è¨­å®šä¸å®Œæ•´" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "正在設定 mkinitcpio。" #: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 #: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:401 #: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "沒有給定的根掛載點
{!s}
以供使用。" #: src/modules/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:54 src/modules/packages/main.py:65 #: src/modules/packages/main.py:75 msgid "Install packages." msgstr "安è£è»Ÿé«”包。" #: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "正在處ç†è»Ÿé«”包 (%(count)d / %(total)d)" #: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "æ­£åœ¨å®‰è£ %(num)d 軟體包。" #: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "正在移除 %(num)d 軟體包。" #: src/modules/packages/main.py:725 src/modules/packages/main.py:737 #: src/modules/packages/main.py:765 msgid "Package Manager error" msgstr "軟體包管ç†ç¨‹å¼éŒ¯èª¤" #: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "軟體包管ç†ç¨‹å¼ç„¡æ³•準備更新。指令
{!s}
回傳了錯誤碼 {!s}。" #: src/modules/packages/main.py:738 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "軟體包管ç†ç¨‹å¼ç„¡æ³•更新系統。指令
{!s}
回傳了錯誤碼 {!s}。" #: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command
{!s}
returned error code {!s}." msgstr "軟體包管ç†ç¨‹å¼ç„¡æ³•å°å·²å®‰è£çš„系統åšå‡ºè®Šæ›´ã€‚指令
{!s}
回傳了錯誤碼 {!s}。" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "安è£é–‹æ©Ÿè¼‰å…¥ç¨‹å¼ã€‚" #: src/modules/bootloader/main.py:614 msgid "Failed to install grub, no partitions defined in global storage" msgstr "å®‰è£ grub 失敗,全域儲存空間中未定義分割å€" #: src/modules/bootloader/main.py:782 msgid "Bootloader installation error" msgstr "開機載入程å¼å®‰è£éŒ¯èª¤" #: src/modules/bootloader/main.py:783 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "無法安è£é–‹æ©Ÿè¼‰å…¥ç¨‹å¼ã€‚å®‰è£æŒ‡ä»¤
{!s}
回傳了錯誤碼 {!s}。" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "正在設定硬體時é˜ã€‚" #: src/modules/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:28 msgid "Writing fstab." msgstr "正在寫入 fstab。" #: src/modules/fstab/main.py:429 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:31 msgid "Configuring locales." msgstr "正在設定語系。" #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "正在儲存網路設定。" calamares-calamares-2d126ae/lang/txload.cpp000066400000000000000000000152341430147706700207340ustar00rootroot00000000000000/* === 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-calamares-2d126ae/lang/tz_en.ts000066400000000000000000003134141430147706700204250ustar00rootroot00000000000000 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-calamares-2d126ae/lang/tz_nl.ts000066400000000000000000003133031430147706700204310ustar00rootroot00000000000000 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-calamares-2d126ae/lang/tz_ru.ts000066400000000000000000003117121430147706700204500ustar00rootroot00000000000000 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-calamares-2d126ae/lang/tz_sv.ts000066400000000000000000000055401430147706700204510ustar00rootroot00000000000000 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-calamares-2d126ae/lang/tz_tg.ts000066400000000000000000003113671430147706700204420ustar00rootroot00000000000000 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-calamares-2d126ae/lang/tz_uk.ts000066400000000000000000003134251430147706700204440ustar00rootroot00000000000000 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-calamares-2d126ae/lang/tz_vi.ts000066400000000000000000003232261430147706700204430ustar00rootroot00000000000000 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-calamares-2d126ae/man/000077500000000000000000000000001430147706700165625ustar00rootroot00000000000000calamares-calamares-2d126ae/man/calamares.8000066400000000000000000000046741430147706700206160ustar00rootroot00000000000000.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-calamares-2d126ae/settings.conf000066400000000000000000000221661430147706700205250ustar00rootroot00000000000000# 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 # - zfs - 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-calamares-2d126ae/src/000077500000000000000000000000001430147706700165765ustar00rootroot00000000000000calamares-calamares-2d126ae/src/CMakeLists.txt000066400000000000000000000011711430147706700213360ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/branding/000077500000000000000000000000001430147706700203625ustar00rootroot00000000000000calamares-calamares-2d126ae/src/branding/CMakeLists.txt000066400000000000000000000006161430147706700231250ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/branding/README.md000066400000000000000000000214601430147706700216440ustar00rootroot00000000000000# 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-calamares-2d126ae/src/branding/default/000077500000000000000000000000001430147706700220065ustar00rootroot00000000000000calamares-calamares-2d126ae/src/branding/default/banner.png000066400000000000000000000134611430147706700237660ustar00rootroot00000000000000‰PNG  IHDRà@¿¤Ï pHYs99Ù“FãIDATxœíyœ\U•Ç¿÷½êêY{5¬ B "J\ø cQEEYÆÙDÆ4ˆêg1ƒŽÃGg41 I%,âIK6&’IX;K§;ÝIoõîüqëÕò꽪×ݯ»ªÚóý|ú“W÷Ýwï­¢é_sÏ9W!‚ ƒÈæ…,c®SW¡cž¾P² A†ƒ)¾.¥*Â%¹(AaèQ ñu)E.¹ ‚ CbНK©‰°Uì 01à&à¤b/Dáo•¤øÍ ÑÅ^C&%õm (`p,ЀÜýÀÀÿç$û®æoG8 ¨jšä¿µÀ_'#œÇËDàÃ÷¶Oåyö£ÀXŸö#À˜ÏM!2Ä·±˜ëðR Öp¬Ø è#§·ï ùÌ{€ÙÀòˆÖ0Ø Ø>÷~ÀÀ ð×€+î½±ø»|î½ XĞ݋ù"“ÉhŒà7$:€5ãGI±æ!z‹½/›¢‹-Âåæ‚üðp5áÅ×åù×rþâ;ÐTËsÿXàŠ€{×,¾àï¸ Ø<üø%ðÕÂËì7ÅšW„ˆÌ}ߊ†ñT4ŒïÕ3ÅvI—“OþŒùÃÜ—uo^p=›€ÖÇ KØyqþ…Ü/UÀ ƾ7äN Ù/jŠ5¯ ½d0Å÷ä{vpÂm¿CÙTÔŸØ«g‹)Âå"ÀÇ`ö5'yÚ[ogcö^‡“ɵvWF¼¦G1nÒë#·ÝÀLÌöÁ£}N>áiû ÁƒïböÓà p±Ü6Eß³¡0‘ˆ¯R4\yaÿ·7Œç¸¯á+À¿3€…ÀëÉþ+h}-4n!Œ±˜ô%ð•<}ÎsïP/×ÅšW„~Ðïˆg»‚q‹ÿ@ÝÇn£fî-Ô̽)o÷“ïÙA¼a<M»Ð@[•ß?Àæ…èÁârà/`,ÜLÖçc‚†ò±8#F;¢_ZÑ9>Ͻ‰Àç’×_,Ð÷Ô<÷~ìó´9…—ÖoŠ5¯ }$Šˆg{Ø(^ÿþ"ê-íàÞésÅ·³i Xwíd,4ª¾²ÁáR‚ü³§­¸è 9ÆAàŽ}ª€émm²­Ø ì 9Ooˆb>‹\—¼—;0©EÿZ ßÌïBÏ:à#˜¨ïÀQä¦*UaÒ±j<ÿ¾ƒq“[ÀÔäÏH  Ø‚I™ò#ì¼HŽéÒlžN¾žKöxø ù½‚ ôÆþ<œhÛωßÚ€Nxÿ$¥qÅ×eÝu“QJs(a1<–èÏ-BºÔør]Ï+1é?Q0 øp:PÐg;æ* v”óˆù‚’LàÚèýâ1ÏÄ‘±áÓÿ¿ß&¯‡cRŸüæx³p=pœÏý€Oc¾xôv^€ÿÄÿKÈMÉ{Ë€Q>÷|ɧ]„<ì?м¶¶¦úb¿{Q]©ÊáX•$çîòeŠogÓ.Ö]7Ù¸•bt,ÖôË †ÁáRwA_àÓöëÇ¿ 8‹`1Ôµœ\K¼ØóMñiûOÛÏë_ŒçuCÏÇ_½\H°À_܉¿øœ<†ÝÞÎ;‰`ÀÀÅø‹/¤½‚ „¤iß~pœ¹û4¯õÞ‹:âyÏwÒïÉà“ïIï&v6íâ™k''_i”Ö(ú/¾.íŽ.u>ǧmc„ã_Ú‹¾ù„¤óMõiû6ð§<ÏìÃì ¿îsÏ+ÀocÜ÷…xãjî+c÷aÞf‚ÓÊFcbÜí-B’ýšðŠð@¤Yñ´sïØ[rXâ ã9òÎ.ž¹n¨´ð¢ µ'ZYÈà¬R`¿’‰ÞÀœ¾r<ÆìÒq•ŽÁX©oxúÇ0•·Je>?Þy#ïÀ”ê|ÑçÞiž×aöq?™g<0î㱘—~¼Š)Ò€±<ï÷é“ù^ÂÎÛ„±€Çë|î0y¿ÝÓþ3ò—êÁÃÖWþ¢­Ù ™ýšS"Ü´õÙm1ß ·ý–ž–&tw:ÜÇu=ygWV¥He+©ÑÊÆ´”8F®û¢Ëý çõ­À1iEŸø<3®„æó p'°=¼Á§ÿnàGÉë—|îEB‡±FÁ?«x?¦÷^ŒEºÚ§ßð~Ì»˜Cn\ÀD`­gì˜qAB²iÛ+ZkÖGqsE ææÕ·F=çž»æ¡*ÒEû*ÇžN7zÇD<¯¿~is¯-ÝÑæK4žºŠÛ#1I) °ƒ©úä%ªý» ˜ £}¤s‡3iòy¦ª„æ›ìyýé4ïúôÿéÈ_? xÁ{¦}å9rßWØèõÞÐ|ŠÜ4¥YׇH~± „業۵ÖÇ1ÂëaÞ5a @ÍÍ«#­Ñn‰}”±¿t¢›ã¾¼:+âyýç'eYb^«,ÂÈ©_(}ÞïÓ~ºO[_x“ Tœ‡É5¾ ø,Æ5ì·ÿ\*óOvàdç9¯!;e§SCÛÅO€!>p_ˆj» ë€ÿÈsÿ:LùPABðü¦­Zë áõˆ°ë’®˜<;^1yv}VF_K)c OžïÞþDW]Ò¯ýôÿ©ï ^ý·«H9Ĥ\ÎËßü(NלÎ#f‡qzºè9´Ÿ˜¥iO(FÆú”Ž4àû¾™”ºƒ9Åçíg&ÿ}!àYãz¼˜‡q[?îÓï.`‰§-*¨õw>¯ º‡Ü:É…ð³€G'`öÞˉ±˜êa™>«r£È?ƒÉ3^>H넲a݆ç;¯v° e)â÷}:rCP;ŸFàztkΨ†@c ÷V„µ†Æ>i&Ï||X–™µþÊz¿'RW=Œ©(}ñ…ÒwAƒÌoÜ»sîïfLZÏW0yž_ÇäžîÃì½.Ä”ü9þ'êø•R|ÈõùmõÚþïÏ|ã0‡d²‡Üƒ TEê}ž×aߟ_›ßïWÆók«Æäû“ÑÖŒym>ýÿ‹\Š üMóô³u¶KÙÁ~ò^z&|«yÿCÏ›XX7BÚ}>3B ¯Ò­ÛÿÄ[ÞãñqêT¡ •¼6?dýôA_ȶJ™Ç“NAjÞƒ±v/œ’3™\ èZŒXy‹1œ)Ü0#êßÿµ…ùuxðs¦v±·&±…‰D~cuG1ßXàÀÍÀ)ž~Óý¦`ÒœþJ°kþRLQKÉ[0ž‚¹÷ÿÂäûóFmÇ1曘JSîçàµöë’ëÞ‹)1ù9`¹9̘å·0¢éŽ—oÞ ˜cï%×#°xcÉÄgŒ+0_d6Q¼óœ¡$øã3tVNm²²n˜Ä°•7>§ºã¼{> ¯I=ç‚ ”‘ÉŽŽŽ6 »n¼]9aV×°³/KùóÊPºÓÞ£r„Õ]§÷_<÷5PÞ¼l¸w ýDD øqKóOÀ7éÛ‡Ç%¯‰³¾²SÉj{ˆ~ "š¯¸*dÿÏ`J.z©Ç|© 1Æb(øðaàï)ü9¬ÇÔ{~ü¿saÇ{#èùös{0ÑçÏ`NŽòãAzWŸ[†O¬{V(ea%…W)…e)œ–·ý£9Ïj ë¶MÄb©ç\ñ¶¬Œ±’mµ5Õto"T„´ÖБ€.'àÏE¦ÒªÜ?*qKSN%að‚®¼”ƒ :“»0iI>ø LÞëç3^#j}¥…´˜ç£#¢ùa,ǰøŒXH8ñ…p_rZ1^‡BìÜšTè _á>×VL>x>z0ÿò*õfˆ¹aȲ·Ù¸‰µv²¢žGÓY9†¶qç>ëÔO$öã8Éä`×}¯rVØicEcÄ5ÃüMµ»M*[ÄÜ®•–ñ0K|¡üLðÐÇ0nØ/ÿ‹±˜öaܾ˜ò‡Ïaöû>Ž©@õJÆnYÂó¥—mÐìÂHÍ%8°é!Lq‡B§¹¢ÛßùÄìe‡ÙGÙИ`µ0¢³ ³öBïoÆÂô+£™É¯“cÊÝ^C¸Ïuæœã|§n?†ùŒïÇÔÀîðéã—æ&,YºL7<ÀÞæfö67§DØIŠ(À[ïûràóöÞ¿˜ŸŸ,ÂqÇ!_å, tå,W<ÝoìngW`ÝšÏYu 3ºË u$aQö}3)7´ ‚!K–.Ó cÌ>n}uuª²TwWí{ÍÉ¥Ç?t3Í3®Ærº©^ÿšæ~£W_“Ã9z*‰kÌAgnå, Ë%ºVŠÚšj3Çö'|#¤]nï”Ùµh ¨–*”&žß‡Wtñ…`½ký&æ8ÚòVÀúˆR¨*Ë!è:««Dxnú4ݲ• •š6•‡ûq½VÝŽ£cmÙÊœ¾´û݉ðýûSâ9|çã™ð!”eoy˶hXvej ¯Cî¾poD¸3=°Â‹•yâ(;Ð . ñ…àgçs±ÖêÁb¯c(a+¨²‡²î¦QŠ;´æk îÔÉâ½½ÖðÑÓVñ«Í ¹³Ðë¶A}ã‚ÐO–,]¦ÆÔP_mıµ¥5G@mËFk‡ŠÖ7°,‹º_\žÃ9ÚÔJ\s(†àà,W€ ‘mk4Џ¥ƒ¢ ¡¸û¾™”ã° ‚17\q¹p÷…»:»¨ªªJŠ®…mLjÅb(KaÇbPw"ÔHó§Òum¬·¶¤ö…!78Ëïla¿à¬¸åîù¦sÔfæÿf¿&ÕßäðÐ¥#¾P‚°^Œµ~39Ž5³Øk*(…ª´]¡QCÚ­Ø0}*¿Ù² ”ƒ5m:ôãú¡”kyõ¥­Ø‡ ô…LK¸'ÑØá#°’.ie™´"Ûvd0×±ƒ{yß‚¬q\—´:Ô„µg#ÔŸlÆ8zj`š¤]ÒZÑ|a–TëQfyXnÇ’q=»”œ ‚ ÅgÉÒeºfä(,eQ=b$ʲ°mK)´v°lKY)1µ›wcYÃ~Du¶¡í8œ1쫚%»/üö÷;:‘r5ÊR@evVɉ/ˆ ‚ ,YºL׃²õcjÐZc[¦N´B¥öwÝêWv³)#Ÿ)Â~è‹`Þ@þà¬7¿· $°^ýÕ×îþoRãKR|AXAȃ_p–_å,÷ÚnÞµï¯T®¾%pLmW ¿¶¹`pVÛ‹™à¬%Ÿ u˜ƒÊP㘖*]ñ ÂAòà ÎÿÊYîu¢úº'ÎF«`yé™»˜ÄÆU©ÂAÁYUÓ>G)j¿¸¼+U+Yl#³ð†¥RÖnºB–2AW¥Œ° ‚—|"ìdD8»BZùp#JÇ!Ú|ƒ®cÎ(\¾ò` ñ)çÅj¿¸¢ËR¹‡2xdÐp»ã”Vij"À‚ BAn¸âru×+oùJ «|¥ãh:âcòŽõ¨YÄÆ,_iYÍ[ˆOO¯½qeäž”*Qé ´F¾¦´ÅD€A„^àŠ0à+ÂZk³¿D">Â÷ùM±‰T´¼Áª&ØaícI;  44§†Æ'ÏŽ×Ý´²K)Wt’ÛÏ| ôÅ$KAèÞò•Îr´ÃÁ×w2î¿ÀîjG£Øý‘;izr9ŒŸEUU% c˜¿p‘oå¬ÌCïÜi¥TºrÖeg9šÛÏH[¾%_ó@XAèAÒ­-HtwQûâÏi9ó*jŸü>>t+mmm<²ö×TÆãX¶E]]G„µÎJwB)ê’å+°ïî…qÈŠxÎÌR*iD€A„>ã'ÂhhkoC;NFz‘ɶ,‹C--üöчQ–…Rd‰0xNTTR˜­ !®­®¦{ûã](Å»|J?èÊ‹° ‚Ðo2]Òu£ÇÐÖÞ$…W)lÛÂRŽv°m›DOJ)ÖÜ¿"µ[W×à/ž\c3nºhïìx¹aÚ¬©ƒõ^£BXAˆW„µÖŒ¨ª VRxµv°,ÛÔ¶lPÐÕÙ à+ÂZklÛF)ÅáÃí n‚º‚*gÙ–õPmMõŃÿ®ûް ‚K–.Óõ£«I$ÔŒ…mÛhG'­`#ÀÚÑØ±±˜Í¡ÖV W„í³c´··Ñ~¸3Îâ=gŸäa€rb`A!RÜ}áÚQ£©=Û²Q®ð&­ZÛN\jmeÍý+’m%OÉË &rþž¨TN",,‚ DN˜Òm͆á .œÃøO²¬@n¨«- m“B‚ BäxËWºE;2ËWBº4ÀÈQ£¨¬ªÌ™¾&›(™Q”¼Ü³g7J©Àò•å"¾ ,‚ ™å+Á¿rdÆpÖÌY©çu*›7Ö»mËÇIÞÏ®œ5å” e#¾ ,‚ 0~"ìZÃÞÔ•]GÃ+ÂÇBVéJWħO>¥¬ÄD€A„AÀáBǾøüFFŒ…W„µ6.ê çÌMöM[Á§MTvâ „%‚ "a‚³º:;¹ÅR´ãi¨¨¯¯ç’ù ²®L‹wOŸR–ZV–‹AÊ—Ls˜ƒRér“®u»î©'8Ø|9—Îcû¶­œ1ã, »֌ӧ—­Ž•íÂA„òÆ{¢R¦g¦)›j”ÌN¦.Í|÷©e­ae½xA¡¼É'Â[ÚáY3N/{ý*û7 ‚ ”7aö…3Eø½g1$´kH¼ A¡¼ [9ëÜY3†ŒnI’ ‚Pt¼•³ßÊYC‰!óMBAí Ÿ÷Þ™CJ³†Ô›A†^ž}Î,Ñ+AA –,]¦Ý½á¡ÈÿÖžƒýšÀIEND®B`‚calamares-calamares-2d126ae/src/branding/default/banner.png.license000066400000000000000000000001501430147706700253760ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 Adriaan de Groot SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/branding/default/branding.desc000066400000000000000000000243551430147706700244430ustar00rootroot00000000000000# 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. # The option must be set, to have the log option work. # Takes integer as input. If < 0, no limit will be forced, # else only last (approximately) 'n' KiB of log file will be pasted. # Please note that upload size may be slightly over the limit (due # to last minute logging), so provide a suitable value. uploadServer : type : "fiche" url : "http://termbin.com:9999" sizeLimit : -1 calamares-calamares-2d126ae/src/branding/default/lang/000077500000000000000000000000001430147706700227275ustar00rootroot00000000000000calamares-calamares-2d126ae/src/branding/default/lang/calamares-default_ar.ts000066400000000000000000000010121430147706700273250ustar00rootroot00000000000000 show This is a second Slide element. عرض الثاني This is a third Slide element. عرض الثالث calamares-calamares-2d126ae/src/branding/default/lang/calamares-default_en.ts000066400000000000000000000010101430147706700273230ustar00rootroot00000000000000 show This is a second Slide element. This is a third Slide element. calamares-calamares-2d126ae/src/branding/default/lang/calamares-default_eo.ts000066400000000000000000000010371430147706700273350ustar00rootroot00000000000000 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-calamares-2d126ae/src/branding/default/lang/calamares-default_fr.ts000066400000000000000000000010441430147706700273370ustar00rootroot00000000000000 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-calamares-2d126ae/src/branding/default/lang/calamares-default_nl.ts000066400000000000000000000010371430147706700273430ustar00rootroot00000000000000 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-calamares-2d126ae/src/branding/default/languages.png000066400000000000000000002477621430147706700245040ustar00rootroot00000000000000‰PNG  IHDR@•)#‚bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEÞ‘e£iTXtCommentCreated with GIMPd.e IDATxÚì]gXÉÖ>Ý=y†!ç$¨ A,Š9ç,&ÌQלbÌ †Å5cB‘ J ’s†É¡»¿WW÷†½»÷»aÞ癇ªêêîªêÃÛçœ:U€ *ü›‚$I¸úª©i‘`¹ß9Ý‘TŠ $PÕ¨ð¯@jÒÕïÊ.ŸúWÏA^}hìÿâ}Ch]›ÌB5Š*¨P…ÿ8-îðV?ðôŸùݱ¹ËoÀ+kÿêù±’+“ˆ¶4ð$ÖªÑTáE5*ü™@6\y¿6£„7 LéT&”ÈÅÎVZÛÆ¹\Š˜³—Es^ME›;ƒDާa4¦R«¬_T  ÿ¡Zà07Ãr¹m,N¿»ÕϘŠF¼NËŠŽÌèÕI~8N ¾¡ik.å²2ëuÎÓœ ’$aÔîdæÖè< @TÄ ˆË©G§Jeo»þúõ=C/æ°¦Je%ç7}#ç+ÎeÓƒ#3˜$©"Uª ÂŸL~‚€_Ýjƒ®’T<Ü䛉Ë%²’:! pâq eå…œ) 6wgi½0&êe¹ïÝÔêNÄ hÃv&Ïä‹ä·òêCl‡®Âf/»k.åD½,_!‘ãщùMGN<.јs<×/V\H×7]Í™7d{‹$I¾3yPC›ôxI0zþ‰ÌþmTAE€*¨ð§™ÀJ‚þS¦†ú®Œ9ÐÓÙãAž~Ù1)Uáyü©\&åycsk5O¤X›YGë (&ìIdÖFÚìL¹¨-ØcàÇc‹tÓ>ÖÞgÒ1›v‰ò˜¨©bqQ`êî[9%UM{ N,'.³™t¿ædÀÆø |~ÛyDy…À•jŸkwþº*¨Pþ4>” [@$UÈI——”–]•; `ùp›;ýõ¦Ä¬ózÃ`s«I’¤Ôó¤†I(dL¿åÑ ã½Uõ-Çi,õ6m5š®w]éX_«ùçCÜ—®Õ-£22%¡=ÆÓ˜¡” ‹kÚ:ê¥>Úì;{F€¹dÙÛwÕé¿ØÇnõK±2T¯–‹ZU>pª Â¿HØÀH’Hy°Ù/"íä´~ùôerÚz€WšŠÞ¶ìî¿%á(LÂ哆'”Jçkië&lžÜ]Ž+d2‹¸Xk 2ŠyìAÛ£.½(ߣ Õ¨Bö4WoÖ72™'ñ¼îÅ¿+¾ëõ'0.‹zÍÜwfèÄýon7´I¨T?ª Âˆ°u.í0 $Ù¥uaTÆQ*K³×ÇJ¾Öû2Þe±Tó«óWR1ä…ÎÂZ…|™!q‚DH\ÑQŠàÈ ›ªº¦"ÿòæIK©Lõ6œ Éæv¥§™ú‡×GÆ9йº+Zë+Ö Þ‘ÜkÇÕôW 6úæÏIæzì»$ÑÙ–Ö– ÕÃS  *üsx—ýÃr' êFѪk•pæŸÈ4ÙDc©Çk35e‚f'…¤½DÛܱ›Xª˜¡” üzZêrél’ 4h„  £oÄm †jÖµJ»)eb ƒÃßS0U!æiñE “u—ß;d”´ž]x*Ë´§¥v"«Ûêí5-ôÔu;næ;|,oéZî~2ÇqÑÒ6W=¼ÿA`ª!Pá÷‚$IÐõ˜A3ö™µŠf=p¢¾ãÀ¬„ÇÅ?ª‹ØO_Ó"±!Qñì=ÏÇÉ©"‰üÝ8‹µŽzõVý¨£Ú, …Ò“JAã£ÙYê³kqk*´MtXÒUk7&$Ìm*Í´84=5åR]S[O‹3'È2„®^.S’ÖÞöÚoÞ—Ô[òDøt‚„Á8`w^ììû³ýˆuú Õ%vmJVM#NÐ.Ð75ÔeôÔKÙ¹s‡êª ‚ ßã—+«»Ò Of²Fïy­5tG’úŠsÙ¡Dúÿô|„sPÄ;§©,ëþ?=§¯8—M›z0•n?r³ßæ@pdFïUrÖì¸ñA$I I¢ ݑČŒ-¦.:•ÅØÇZù=uܾÖÎîPÙ$¢îùù#àVr%5!¯‘Ö¡q"ë¢rµ]fE2¿ÒB‘¡;’áw>a}7ÆÓºLàÖÜŽ>3ÿ›üµ³óU¢‚ ÿ­Xx2ÓeBØ›ØÉáo[ýzÞ4ýPj€û‚¨îÎ3ŽÆ;M ·øÑy)/Îþæ5ÝDõXxå!ŽÓ‰Í¬¥EÆSÿV½“{‡}“ß}ë#ånj5õ¯i²®ž˜ó]™óÌcHB^#³°¦ª’ÿ<¨|€*üݨn–ܨ­oˆ¶7QëMàŠ¥Ð€ ¨BÒN¤wÌA’$”}‡ŒúÿôüѶw |WßÛ6jw2mèÄ-RЬë¿>îFJvqê´­726½º²ðd–OdlñÔòÊêû9emSqœ`ŒÚ|ÙcÁù«.äxx.½yïdôãwÂÞœ8ì\¡ð¥ ¼ß?Òfcmæg^CO.jíYVU÷»û>sIÌ?‘Ù C‘#½zõ:4ù@j_ ­’ìÆçµª$DE€*üC.“Ík¯ý´×7ôaΓ™}/¼(£N (†T7‹ËÔØÌ¬I#×`êÔ6DcèŽ$úúK™a¶&moO0öôè½AÔT>ººEŒ,fsƒÊàÔ´K”&†J½tNà2±KVQcØÜQî±6ÝÝv—æÎ ½˜3*@JþÊ^}p}<ŽÙù]{ ó^Àœ–Å2AÓ@PÊï]òöºÃ„Ï+ø<žNEŸ4ð¤7šøO¤¨b0è|£ü©1…—#fu™ëG!1—WCø®ãWNÌR ¨ŠUø3ðôÎHÚ?(zô~ce‚–úì÷q±™uI’@Ô’AÅöÆnõÛö¶°9 £±ø I;¤¤…TNlxñàz¼B*LmÌç!ŠUSPhU¢´5Õ|·`°õ¹Ûë½#8zÖ™/’{cÚÉ^$À¨ÝÉf—^”qGMÛ1—–ð‰[!¯¼1tG’epd†!I’`ç8zN܃ ¨- §JÕpŠàŽØ•Ì¿óI#!¯‘:d{kÄ®d‹+ñåt€àÈ ½àÈ #€…#¿˜ð Çx\+­iÂeQ-Î,uÑiAÿ¯ŠEí¿ëÌZvâß70×F½t/­fÜÉâQœuûÒaBØ­5—r5‚–^†+‘A*aU  4†ŒÛ·.,€ÓzÞK=4œ¡®¿ˆ×T·qà¶$£‚©ÎMø9 @IeŠbTRÔÞf¨´“E……2Ž-(T&·sÒ£kò ž'¥‚‚G7­¦Î2.‡™ŒÑ˜]³µt*Æê»áåb_øü샬K1¯«¬'Î9 Ofj-?ŸÁ¦SÎUñú®~ @e©a)A?Äl"u¸ô5 uƒ ýôüÖEå®»Ÿ{í̳ҡJ‚<Äãñn\~U¾!èHÚð²Ñ•‚Òº'3§äK^ä60~N©š¦¥Á}SYÓ`» "uɲ³ï¾™øÀqâ;-°srÇ Ç ”ÅæþîçPP-`µ‰äÞ‚úâ}­eï8R9N¯©­Mͯ>r?­šrE%¬*TáÏÀäyÇaêÁÔ#†â$IüLãh¡T a’Nã uúWZ‰+¤ÀÕÐ"Õhh_W€úÜÇA(dÇ" ò/‹1í M6 ï,kã·kšÛ5‘$ ŠUUU= 4Y¢Á½ÍgaTúèÃ?§ÍøXÞ+ä)j,ÊtS=î\.95h[â€ìË!$ ¢” [6]Í]Ò´ÆÜÔäøo“WT Æå⡵-¢ÝöÆj1*c§˜ß¼­‘/[g¦Ë ‘òë‹ÚÅòC‡îƈÄR‹6$£³^aTÚÔºV)»³®ÄsÊÚÔƒ#3â}×ÄfNÜÿæzlf-kþɬuþ?=|"óÎÝÔæd}æµ~øTz—K uáÀÍq7Xê:Ejjjá7³f®‹ÊEn[¬VªðgàsIq°ÿOϧy†ÜÒ‘µ7-`1è)6ûV15¸€b uSG5 Eè$Ó{Ú[éR1¤$p"!¯!tŹì^ÞzL¸5¤ò‹f†Ò•‰$8ñèSÿ%§³ìvÞÌŸBâJÿG[üöÉ I¥q´rn­óº²yr÷4+½õxð^¡;x¸âÁ¥åÑ¡žÇq…ô™¨½­ËJêúÓóëŸ%íĸµÎ+ÙL—-Û3Ó±A0‚$ð_"º>¶0Po¢²Ôeb©,èÒr¹ ¥HOƒaðd›ÿȤýƒf{w7`IÊ1Á¨´ëÿÅ(˜›V[jÂÓ`¥D`f É¸8¼·‘¸¤š×L8ÿüÒÞA|LmKDvßúˆ’$ Î3!›^!áw>¡$I‚ç²dktJ’$Ì8œ†í¼™vú-‡ïLFZÚe…T …±©ù8 úrWÀ,nZ«-M <ÊDZ“çŸR ªŠUø3ÀÔ2WÊD+( N4CÃÀÝÛ^{楗夋n€š¾M‹­áPXAå0)€ 4 :ûî)F¥/‹ùî%uÂR~Êä–(¤B¿ó©ƒAG uÓÕ¼ !ÅH }®^IðF\VåjŒÆ èjI€ž[Þ™mj—åêéèeµ+ebEKIš¬“00*£TÔRùEÈiL*Ò_Gõ¹Ïâhão:… „‡½~=€'1AE,€ X×ÿ‡oèÃîC¶'­hÿ¤ ½I’¤¡?˜öàزA”Zš¬ßæ„9•b¢¯9ÃPÁ©'%ú œ—[?Ž Hj@_5úü)ÅþA2LŒ‡$¼¯›¹ü\¶Su‹x׋ìšyAbÛ®ÐÉ”³PÂ\½É@’C“-ô9+|CÎ(¬Ø_^á¾ÀRŸÝ¦’RªðãtØHHÜÛSM3ÐÝÁ8øH°ÛÌ­SzT±è.’)OÛ[èÎhÈÏU4‰qAnë¨ÍÌ-¬Þ’”ãބNrÑ.öyÿøäY…T¨¤28¨D¦¬â2©!,jH|FaqG8ÙÏQïg‚ï±¾V}“öªúZ^)¢ḭ̀é‘ k¨Å¨%q…Ñ ác:cúè\ÝV½p™ˆ w4·‰)dÂø;oªz|Ý?…’ t˜à8P Ê&;~€+Ç%reKæ‹›ëŒ î1¨^TøIF’Ð9B¸P êÛ¤³TtySî„k<ú;éILµ™ÛùUy ó´Õ–·‰üêüq†J1qµTF”Ö‹Ö¸ÒŒPÊ"0 Åß¶œà2)NŠfQèl[B)G2žFµ÷4ã2•r鎚ƶц’á³{á{«ö€j?4þ&­5å9`lá /w_t›Öל~GV Sb¬£âÓ&’$Á%¨ˆ  cp(Û¦ö”€´ó>ü&ÐøbõÅξҠør¦ëœS†Ò¶z%ð1*SXü)Ïþ‰Ì  +Í-oÛI’dŸCsz5û¯©|÷&#÷DÈ™wÓÞ—6÷PHÚq’`G?Ï®×Øpâ‘!+dIû­:’6zç©;[N?ý¼ÂT‡Ù²ýìs°äJB‹PÊ©:šêÀC)4®D†Ópœ`{-¶Pb”7ÇÌôίh;-¶¶-œà?¨ ºýµ'Ø(•¡‰ãÅ;ä¡”hùŸëæ©«k¸G.t-¾~z>8¹;cnû†+ï9 Ú"#SüÍÜæ½QCtÕéÏ e¢0©¯zµ'ðì¨=)ûnŒ.•Êtžï4ÀgÕýD”ÆìGWÓ¥Ìhõ©ï†—mèË6=S ¬JTᆱ…ó߬³â\62ãpæ:çæ½ò.æ2+ss ´-È*á©9¹z®¥2ÔxN.3ß/ìZ§+•ãœsqe“© µøÄ‘±Å:å"i[}&‚ 1€z¹õCckÍûT¶&«°v“†$îí߈a(±x´ó,GëÓ‡Jþ}¾£®µ0iÿ æô¢ÖáT:G‡ÆÖ’-;ûN=ûm|w 3'¼¢Q|!®,HÖÞx óc¥ìVr¥}uM­+¿*/‚/Vøî¾õ±FgµäçfD®¾˜ë¥gl±—K|(kÙìj£ÂT×Í¿ÿ™¬çIÝÚëŠÞ*¥B˧Ùõ–r1§0ÕdZšZjâO=)ñš¶èôtþåúuà Ù¹-!A’$Fg“N¯1 -Ýê—£”ü”2ÑçÎÊâÖ*…JU  ÿfxs FNt!×_~?.»½ÉNÖÞD¡q´PB)Gjó“FìJ¾ì`ÊU4‰ŠšÊDtGVm«´KûË,i•ää~Ë8;[Š,¼B¯6æa³œ^8M=+µzl¾K)¬ëøÀ¾ŽÌ0¯€o¢;¾G ÑoÿrhzB‡°“ŒR¾hªaï@ëH–uaÁ6€œ¿D—ÜHú’ŽùêVO†ð\zÓ‘À•ˆ—ξ$œÄ/Ý3åÀ[·›k½:HR[FPYšL¥DÐiÖ#…ޏYkv­‹ÆR)J¡éuæý}}h‰II€ËE„JêT  ÿ&9ñËF¦º¬|…„ﬔ = ´™ÊÖì×ÖÖ¦ÅfPˆÄ½ý…ù¿l%Ï-í-:8§W—&äÛ]Ï8;[ ~&H6ËI€Ñ˜‚bȯ´¦.l8öÛmú;Öøþfó•U}ðß3$@Ôú6)ëò © uý’òŠÊ‡ûb ŒšÚe©(…fv?­FoBØ›Á\-½Ý€ Œ•|*CeÄÝÕ.+‹<¥D0`Ôîä‰Ëi‘œe˜ömÑÑI¬³úñ݃T‚øBµ  2R^˜ÀÞÍÚݼ{ÐXš‚sÆí=»fHêÔå{ßLïgÝTÎôhê9y„^÷~…/b˜‰­–CôÜíG¬ûTñú Þkúáá¾A{X:fÆ£—¯ËyrŽoèÿ(G×kùmYfa}ýá¹½”Gèô/K¼´BÓÒí©¡&£QÞÞ4”W‘3VÔXã89¬/‚bh­‹(…6þíó;<¸Ü¡V‘†Š{NصNÒV§Å×6¹zG°¾Û¬ã …4I.n«UVçߘ´ µrv´Ó£²4o|.þøI!VÒXšé™ç» ^a¢mãµ­åsêv¿a!Ç ›aJAóBùßÓ·‹÷ÀÜ1k›üîíƒA.Røõn5µ8N †¡-矗vã‰äÚkÇÚ—¥µPJê„1Óúš·À=€x—OχYcì„8N, ¿£³¬—qS\Nƒ¸°FPÂÊë#¸VuŽQúi€_¯†¾òð\¡Lªð/3)hlR!æÉ \9L)á룺¡R*Ü HlVIë/“RÙ+AÃÐVuS§p¶ž¥;SË3Qc)¥2r>Þ»QÚ ¢v3 ûb塘šû‚¨#¸B’õáö–€}ú…HÚjï> ßz1ÇëÉû³åb—FAÓ±¼²,w]û¾þƒFõmÈkKpÅ`¥\Ô§øéÑf‡Ñ›=¥Ì:£¸õï¶€Pê·û»õì,L¼ÙðÛc‚¡]šæÃ›`ä «vè˜)÷°ÕV@닇`À¨PÜ’À’ ùšZZ%³ùÉåR1t¬ƒþ¼6_Ëü&-#Š®¦ûôVrå¢É~f²¯ïµ.*×4)«ˆ™rt|ñWë§UP  ÿ à2  Å(wxåïV³´Íèy·6Hª[ÄLøò‘# q´˜€àr ¦iév_.jɯÌMµî?ÿ¤–Uï]®<\.öWHê9W–uME_[Ý'ÒséM»žv{‘oF(d\@P\®$(@tŒÆ|D¡³ZÏ,ù²eŽ|WÝYßcüN=Ÿ"ãù&Üìá+!ì—‚>’?-&2’£mo©Ï¾9ypï¿:+»ðd&• a>I’9çCÜߌœºç‡õŒ íLãW½ß,™ €:ƒÕUgÜšÞàe¯§¸B¡1eŠïçArÊÚRÄMe/`>à*‰ü/6Õ¨ðGáuüãÎÝ•@ { ƒ÷7ÖŠˆ/_r †R”R!€Ë%"@ … K:0B¬×½ÿLKïÉ3êbþ&€/†ZФ¥Râ8iߥ.s{Á¥I-%o㜽=Ò52ÛÑY-ð•O›ÆÒŒñ³€»’¹Žv\ÔPMÂeí71 ƒ!W°÷Ú®öï½zà›¿¿FwSn®¤­.G«ßÓŒû¹÷®`Ùþ±°!bö7õW˜¯Ý ç|ÞØÄ—™þ=cX™~7£±öbTfÓ¯Ý9˜ ×+ÅH@R®üžEþVŒÎ:Ù*ü`çlØïÝ÷íÏnWgúß­}|ûŽ-$‚Q%²ö&ŠÓÔ”^Óè9qO?¾HQ'koÂØ:šš®Û€õéQXÛ´Ci+Å-•~϶ùýÌ5²?Ap\.iˆØº†_õ~’Û¼³çH’„æâ·KEÍåy—W¸?jn¬w”‹Zõ$ *†Â—:‚Nù"Þe9¯L '•£}´¥¶´\”rŸ$ºqÆZ IvßúˆÕI©Á‘ÈÆ™ñõíºÖ•åa,åWæ£TºÜÚ€#X7ó‹6ñÓ]x™Hé·9a“Û¼³·§xëwtm ø›Ò[ÒZÍ*ûðÖJÓ²wÀÑE“õz³±~¢ëœSzÖ–P¬÷·\<ÎyÆQæÉýì4-]¹+'{kL=˜è:çÔÝ»’­¹”«Ž}Y‡Ì ´À{ó±ðŸ3Ì ×Ð^>«î3»[µsômôUæïÿž ßÔ•î4­³ï]Ýž‹‘»¾Éܱì¿Bž=¸c‡ôõáèÛô•¶Õ —´ÕžB1êi\.9ÌÔ4Öa3°| ó^™-ŸSoôœ¸'SÃÂ¥”©iŒ{,º]×*Ôl)~{`bøÛ« ¼ºI»KNg™‘¸Ò‘ÆÖ4¢SÑâCÏkøðr¬ÿº§!4¶Æ3 ÓÏkÉ5±¬½a2d­¶¹c6•‚J¹>…ÎvŽI.³0îÙ—'j,-D¤ŠÀåùŠ‚BÌŸRмÀkùm_ž$l(¬Dq'¿Ö·ÌZ&4 €bTäG/7¯å·MP*£º­ú£¦R"Päg$œ·/…ÝÄ—¸B¥c1Û²ßüÃ×§eÚ ™«fd·m҈ؿcfæ5y†Ž­ï˜Í‹Ç »rºµ4sµ‡ŠÎ>–n_VVþÈÂÖéUUAú OÕí‹;ÃsU~Pļ鸺IÏÃçÏ_°°0Ñ?•ðàjtUê-[µýø¯Û.³"Õé\}óOö²¬¹6ä>M«Lÿ%ÃPiÖÛpó øo§ëÜ3ÌkÛ§°º›©·à8nºöA§Y kYâþ_᧯ >™¿¾FÖ…o°K‹º¾~¼»#à-@-|ì,ß4lç,jAÇr£ ±5'Êbæ õ»¯£W7‹1ŒÂÇ5r¨"òöú5åÀ[äæZ¯ó+Ïg 08)Lµ¦R$M='s¤üªH†w-û³³2)z—úåèY;÷õè‘”UdêÙËæ} (¦ „X¦¤õ4Siæt¡µ4óÉ’]¯NìûiÒÎèl)‚bJR)ïÏ+ÍtÈûyƒi*ÌÝ>.n¹ E†üÉÛó«ðß oOHÖ0s~kí5^ÿévÿÃï^?!*éòùcà´™×TL˺¹Äµ•8‘¥ˆšÊPŽ-é­¼Kœˆ~ ~kQÚk P£.¾Ê¨äž- à¹r2¥¥$¥ÐÙÄäуñk7cP)¿XÚfdÞ­õ„ïšXLʯG­»udz⢥Lºöþä­×Äå÷¨\؊йº$ÇÀ–|}d\FŸE—M=Æ6©Ú©À1†ºA»ÿOÏѤýƒþ‡uÇÒ¯ïÒÐ €,"ÿa×@¯BÎU!@ŽÝûÚ´¦²ÌŸ®¦S¹~è«Õ4bò¯³ñìvØ»`;¬kw >éÍf~U^IyÒ¥k®sN5òʳo[Xrôó‹“í¾¡1Qs—‰I=Û>Š;û–Á踠VÌù2Ó>“ˆ”#£qÏe1GS†"@fdL“^Ý|Ž?caåé÷¢'G”OÉáÏeÓ¨ö6抧ñ“”G—„}+1_FNæ[…½“‡²Ã§Öå·/…RUV„R˜êxßžºòŸ¼Ç`'¦€ÍÀ®áîLÜ\ëEú¯ÛÿäÞ9õ™àÀÖ5?‰Ñ˜ß øí¸s0a G›Ã˜­1rïBRFÓ0@±ê£Á.5_×#HK}‘|p·u/¿K~ü|ó™—{ÓNM_à2+325X.æõð[ûäqò¡Ã.nëTIIò¿Õɬòþµž`¢ãÁ¯cW/n.ÿ™¥mÖsÉé¬A(…¾“ÊRŸðž=Ó0ëe‹Ñ˜Ûi,±W_ cö¦x($‚}uY)üò¹ºÅà^ƒ·'.¡ÐÙ—å"Þ…Šf±'£5S)î€S¼U“µ7í&”ò'|±b$FcÎG)´Ýt®ž/궆FciÌ€p[kpoWçž¶ƒC64~xñ¼*ý®ÝÇûaZí5ß6$ld1ÞD÷ïÇGuœßÚ'v¶&ú»/ˆê¶óf>ŠŸ_ô§kužÅŸÞÏYvöêb¥9TØPrµ,ñ¢É?z½ ¶@a€SËPJ*ƒ]4fÚ—onø†>ÔSˆÛ÷ÉÚ›ÎJùuw›Ë߯Áqs›w–¥nÒsÙ«×i'YÚf—å"Þ\ç™Ç,å¢Ö-õ“Ž•¾½}ËBo“Oæ@ øë \yÐmÞYg\&:À¯Ì}‘ôt¹6e.åÔK- *K}sî»ôSR^Ý}’„Y†~ÊÒ.QîPÊ%RX#psœv½ßæ„U8NP0:K —Kè)ͦÞ+ïZ¹Ÿït$mv㇗#uíüÞÙ Y®gä:r$ ¨††™³UŸîFT\!A›+?j{­¸ã“ßìeÐËg蓦‚*•­q — ¯uú©tŽ&®”S«›ÅŠUíËzŸÛê™cí6ð+:ö÷G¹ M­ÃöÙ^óÑÕyæ±Ýk.åjã8"(¦b–ŠÚþ×°ã­ 0jw2‹¥cá‡Rh¯[ÚåhM¥Ldm¢Ã$z˜kP)4öpºšNù±GÅf…Ù¿Jy1£sAÑ"Y{Í}AT¥L¸K!Ä3µLN“$ù©¼A$ghËE­Ku…uù™‰ËH”ÆÖJ ø•LMc]*K=hr€méºqv8®TLÆhÌÕæÎ~ÝuË™šÆý´l<û¿.hæy/»ÉÅe¢]ló±[|ÓÿÍotÿÙà½òîaB)?$ò×Iùõcs"pœø]š~i½p9.…÷2ÑÙ:¥ÇYW>¥²5·Ì(ð/;?359ŒÙzUÔ\¥kðâÐ\çv^Ù»£ÐÛ®fäð„Wš±¿ßÆó¨,Í>$IêëµkÜý"®”µ0µL )aå°WÈPWoÙÌ~rqK¥‚$ð †ËÄ/Aï ê =ZJÞÒ?&8ëKFôrõ؉+$×y"¹ Ë‡b·àóæ-•ù(F‰ÑÑщÏ)nh·T²¤íÍÝî§ÕXsú“¸òcYié A7Q¨Ì …ÅŸÕÔMoKÚêrM#™šÆ¶®%ÛÀÄ|ø`}>…ÎI& |3IàA œ¤vhïôzÖÊ…­uégf'ÜM­éAãh &qEubnµ•XŠ·‘$9ËkŸ¶¶6SrgøO}Ó'2®‡&P7sšBâÊaïËÛæMGSÓÑÔ°pÕÙvýƒJü1”2¡„MÇ'‡EV•äù¢Úmºšî©—¢=z0i%1.Ö„®aP’|`hV{íáÓ2AˇœËÎì¼™ÿn‚· :ï`Ü~aci©¯÷Ȯʃ÷ _¯c‡»Î9e@’¤ˆkä0š¥kifbl¼êô7™—®t_pÉS.âµ/j]°þY¨š¾_!6‹U?½¯™ààyv •É­íÛSOÚwÃË…,ms5*K]ˆa¨ü;“õDçy½¦zˆ (3°·ÕÔÄü&œ¥mÖÍØÔÜÃPåo»öðt8°:úÇ/\¹ˆ®¦Kñë®ÃëðôÿSψŠ} áÀeâç+«Ër–ze]îã¥Ãw&?­ÈKªWJ½)t–Kþ/[Û ¢ç„]sKãÏôÓ㤉j·¢"£,|¦­zµ;à•©6âuÔ²zßUw|@£1;÷!ü„Rh*‹žwjC¼Eßy®ÐC.lEõºðërbm3“Ÿ[±}Èl¯Î·ci›” tÖG"¾˜Ôx‡é (¦&j*[‹ Ø]06&u¸tå#Pø¯yè)n­Þ£—ûôÊìI"A"$I (F“8EL‘‹xv…öFüšÄ~/zÏ¿0_ÖÞ40åÈhFÊ_5íë:c÷¾îS[U±¾½®°§N7¯Ÿº™íØ:¥‡|BØÃêšš¼² w[ßÊ^ÝÆöÒ3_y2i–R.vzžÓ0¾!Ѹœzµ«¯*¼{ó›ÆÑâ³u,â(tæHs]ÖP' uelfÝöêw±^fÎâ‘.‹6Oî^Øá7#Û*rŠÊ“£Š`“Ø­.%é—p"„Š2JSar×Ò.QKU ŽË_\æ^½ùZÞˆ_bn]ù.Õ~ÄúUŸ…E’îà<-<•©a£nÒC—$ðâŽÉ”ÆÖŒñ³­|}¨ck{’ºº>š°§ßÇ‘»©ƒ?Ä]úÕ@ÀöËiûŠËªÔFŽ9•À•ïxe™;¿8ÅÏ”÷ô]ý~as$`øä©€ ¥¿¦PèìŽ÷†IÅ€TÊå$IJµ²¾ëãŒõ4µåI—¼¸&=Îe¿¸¾Ç WÊ£Ò³ ©ÉºqÀÖD/€OÂp¡š’EÇÈ©ÛgÿCÏæÈš˜–Ϲò›|𘟾Ÿ<š÷—½¾œ¦ ôÛœ ;çxúßíßÛ}ë#5èHšŽˆ¹a7(® Ù[\+ðl®«Ïl_¡òþ‡ãQF­.[ÏÒ¡¥¶Ôäí§fËN2éÔªVŒ´åiX¸ÄT¥ÅÌBP¬&÷zh=[Ïz›BÌ·µ˜{ÁÐuÔÜë÷ã/ $JC*ƒsQ!øZ÷Ÿ¿Ï2 xáñkOérivú6n>(…f¬ëÐ×ÊÂkÒæ–¢”õ6Cæâ8¡£THœäBžº§ÿ¡™ý,ªÚøíÝä"°è˜Ulf-G.l¶”¶Õk~¸³sШL®¹´­^Ç jÈOáÿ”~§A’¸¦½‰ZKgÙü™gÝn3hÙÿõqþ„BZäíîܨ›a‘¸µÊP)ò>= “Nž41°½®0ˆ$pÿºÏ¹ë@ £1õ3ÿäÞÃ,Hò×qŠ$ލ\ÔêÕ×Íöî¾ §|+×C45÷$Ç5¶Éœê Ó(¤íŽééé[p…ÄA1»—¹ l¿Ðû®¢ÆÏt®q÷Qþëã–Ù Ù‰Ë%£uìý.g_©¢²µ®×dÝ{j¸xuñ;#XÚfjs‚¦í»ŸV3>'éîÞó/KZ«ŒÙÚ¦ålSÚV¯TˆÚæ9M ¢sõ´¿è·ö‰Ià}$¼£èG©öÂÞ }ë@Å›ûÌôÅÒÞ)Ïbn»ÌŠœ¡” m9ú6/ò+Û5q™ÈZÔPj»oýü$:GûIùÛ˜{Výï»1Þ HÂ_PWØcðŽdîíQÿ/2nãä=±6çñƒ´W±ŽÂÞhZ.^lè2"Ô¸÷¸åfÞÓç»]mì66´×´Cs*…Ì;Oä¤%^u€•ç³µõÅ'ä¢ÖÙ¥¼%n½ì×Ì`)ßzr¾Šÿ“±%òŽ[×2Wžõbùá‡þ_“I'¾ÿyóB)•Y9ùþÜy,5bbŽëÐà‘jFö¾ŽƒÂ4M. ügç$ô¶RMßf ׸ûf³nN¬ 85•ÙÏíé\ýpY{“ñ“­~/õº÷«×#pû´Ci³E %<ŒÆ<œ‘™ÅvsŠÓø1E)´Ã’n÷º‘TåƒË¥R~ýuïe7­§…ë‚dHÛj¬6íŸí¿ow’ÎÕÃ'dviÓýÍé\½ sç¥>Ýõ?'†/Î,¨º|áNÒm«îº†&j.—æ–óý(4æM‡¸LtTÔT>†Bc÷Ã0”*~8y‚`JÈE¼üW©yá³¥[ÖÖÖŽ¤±4ëóãkD2¥¯LØ\ÁP7WJÚ÷KyµKIó“w»•±ƒ–µça ³^-ÅoM œKsN;=ç CÃ`Éà¡Ç´m¼–ª9´êZ8Ž\7ξu¤»Ñ]MK÷D5}ë}’Öª"gïAkf˜çº]¹‰©cÖC·›ÇMŽže(ÇÐþRß^&åvŽB+ßi‘¶vvºc<©ƒG˜ZÌ{2`ÈÈþ(…§çÐ/…¥m¶ÃÒeÀ#¦–ɪ}¿|2é>háskáÑu<™}aìÁyZÖ}Œ 6žàmÚ×Úfª½“G®«•†Îÿ—ŒÏêo~_X_ÂÔªä%ßínÜ{ìÂM»h žµÁSÇÞËôeÛ̓Cw3Ô †øŒœÇ±²ëÅ4vðbÚš[ò‚ÁÕ[ó2r~_¹°UMª \v.9÷Ã{ººî¯¶éØõͪY”W´4×C€^Ëo¯r³µä'?ñý"Œ”—±¹ï{sÄnøZ¦û‚(ûàÈ ³?£½9)¿ë¼c7¾xl‡….sœ´Ì*iÕí<æ¹ôæ…W$¥õ ×9§.8M=ðÀaÌÖÞ6Câ4-{³×E宲úiÀÖDc€Û)U”›I•º‹Ne%Z.~‹ãÀ~ä†'–Á³N=)±tšz ±×ôÃî .]»÷µ1@Ä£âö£65¹/¸äý™‡í‹)P[y>û‡þæ—öv¥O?ýü\ÛR÷Ã~Ÿ¾áïŸÈØâo®¹ðdæ7ùkq7¿;geôž?ôÙÆ?¹óc·Ío¸=6/›úÃr3¯©éf^S\ˆ+é·ö‰#€ÏêÎA)ƽǩѹzȸ})½7]Í3÷XtUwâþ7næî[ûù­}bç³úÁ´«¯Êí§xk›×Ȱ5ÑaÉé,£«¯Ê©žËbúO9ðvÔœãéô/î6½2î»áå¬À- ýÇíKÑõYuße]T®–JüÄܰÅõ¸¶Ž$ =ÇïÑ{þ…í‚Ú‚åý†Œûµà¡è÷ÛÁù‡ ûícCýÆöæ•g=O¸yéŸÑgwŸ–ÿ} –NëÿMÙŒá.]éÛ+< SÝÊ=èÐÈzžôSÈï/ ·ð›_~0*¾|ŽŒ6¡œ œ˜”jí%§³Ø † ˜ŽHüûF A5˜Z¦Ï4 ­bk«*Œpœ`ž‰º™¢nÜ ”³þsú{T¼÷~Ò‡yÈoØøÛæl€Û ÷`Ñkòv·+LŒ´ ¿ÉÏ ÿâÙ_4z^WYصƒñí‹ëNâ=Þ¼“øåš{¯„3Kz“{;êÌ8’^<„C;¿lºççz˜l¸:€ïšØ>«ôè³8šëµü¶¡û‚K†3§i ØšÈî³8ÚÀkùmƒ¹ŒÍ×ò #›ôÝo5!ìÀñ}k¡ÿÐq_4õЇݽWÞõ¾3™Õé¢Áq™q8͸‰/eø­}â;7"ÃrwÄ Xt*«›û‚K÷¿1ûqž¸—Ò^[Ð8|g²…Îf BÕë9@MÖÞHÞÙà“YR'ÔB1jRq~V§#QqëÎ_¥LtHrôÁówî6ðeÈ©'Ÿý$‚¶øÜÂêУÑ/.á2Ñú‚œ·çŠ+f¾þØ„z­ºm'áÕ]$”rŸö†²ÓŸóRS)LµõšlÚÅnòÿ‘Kf:CFüÖ=íÆd2×±éH„B,SJ5Ø4Ž'Ñv¡èÍË=£Ý¦‡· JJÌ<'oI x§êQ,,M€ã+þÃ÷Õëx—¥mVVžtiõ¿ºÏ¶ÃBi&õʈÿÅ ðQøÃ]ëæÁ–ð/ZPø°ní1ÀqB×mvD…Á ¢0¸LY{ùS†œY<Ô¦Úÿ§ç£õE‡P*£ÂÉÉérqEà ¥\z'5bâ™À- mµE‡AÍP”räâÆ1‡n½®êù"íÓr…˜‡öqw{R×*Ak«*‚ð¦ íù<»Á¦¡ªh‚ %â–*}GË“­c~#1|xðä©ÎåŸ #ê*i­>¡iÙûHò¡M"fþeßúÐFm˜ö}?Q0s÷<¸ºùÇZžïšXJÓ§Du;Ï‘.æzì숮-ÄI÷öéõuÖ^ãÏ5”  ë‹B”2±¶¶MŸ…Þ½ËïÝ8„®¦+ZÞÍH­dÞÆ§q™Ówxºö݃ͮSJ2žF§2¹'IBijè<"8q_à­­{C]o©R*4ÔDZuÌW>?»†8gÏ*S £q´jD ¥+0ó![ÏjIà%­U’$»)¥‚¡…±Jͼ¦¦“$¹©<åzºçâËçEMåúý‡Œ>š[ÒÐ*lü¼Æd_©(˜},=:õÅ]£O÷õs_5AÐég‚Lqœ@\fz…RyÙ—C–ÜýúeUAº‡–•ÛäW»{,¼ íég‚{†ÜÊm+ϾúéQØÁ«¯ÊÍ÷ŸŒ~E¡³‡ç\[Y0e£7ÜÜûF¥þËY»s×›ÒÖPIgÑ)ùUy‰ZÍ…¯W±è”B~{{«´­nÔ„ýo˜ê¦=»©w÷MÚ?è‚ °"O9¾â €ß_™LóþÖZ›ö¦óEÑõ¡l€Ý—÷ÿØ_³;øwõkÞøß^2w^°QêÓk'Ú*r¶„_€!Û“zû­}bºní1xþö6`Ú”suÅ67g¯žv½³/‡lY<Ô¦ iÿ Ýzû-›8îÒr«S¦§à宀„în..ggïu´Ðížá˜•1qVÖ…3O.r»~gƒÏµÔ“ÓfŽ tYŸœßlÑÒTPÊ'¥žš5WÍÈa8×Èa¡ ®hBa€s{½wvŸÞcÜ]n Þœ|`hÓ¬-ß‘Àƒ}1àr‹i7bSÁ…>ìõ[ä0±o7 m¯#ïŸ]ˆ)kýQre Éˆ§sõ„5S¶I˜·~NLWÓòʲ¦œÓ+—c`[(n­v™ÙÏ"ÙÓN»NÔ\á2dÌä;ñ»û%Jù ¢‚wÉ#ÔM'ª›: 5U< [ôš~8ˆ$ðÁ 1¢B"pçèZ˜ârÉžø÷õ@àׄ %\©0t²œ©mÒÒ^?EØPòöÃí-£h­ÕÚݼ;}5(‰+>Ë…+¤Ú(…¶ÌÅJã ‚Q˜_÷ãìî}Ò%¯²öÆ‘$I´û¬ºÎ/ôþEG £1Õ?I#I…¤ýü8Oãçë¢réƒCÂ_6Sµ§²ÔÍLuX@e©SšÆJ€Eã6üÇk€J`úëPðð=ô]ùë—sÀ7ðÒožwñÀÜ¥ÍPηFÝl4‰ä¸ià?è|.º Ö¶3»þØšhD›9ÕoÒC¬cë;ÙÔ{Úäk<­<ŸMç2ͬÌõØB6Ý\pëµf_ÆâèU–VV¿Ü\ëå»|0¼>þ ¼VÜ­”ðç3µLN,f×ù Ïqˆ»åÍ“» ¼–ß"qåŒ>Îv›Íwùájͳ~‚‰ûßl«,/s´´²:xcg*‚ pyóyð[ûÄMÊoØbjÙ-wÞ@˱™u㨚ýìþ­=r1Odé3µi¤»Ñò÷|ãŒ×/EMew/ürF¹o„lÿæ>û~‚eãÊÍ}f¾FtH§OǪïì{çgX=Às|Wý“‹ÜêÒS^€‡Ï€®òèPÏúÎçò{k›±awaÑ”8}3Íun€Ö.ÿᲘµ 1¯ (F(åt×9§P Ubck¿¾E(a}‘©WÀàþ\«Kíõ¥t…ý4,\^t7S„ÏîÅþ™Ô´\ á»1 Ü’ÀñnÀÇIû^S˜jr’ @îÆüðϰb¤mó£ŒÚKÒo¡bȶñç¾™ŽüçñI€K…ùÙ—CÖØ XŠ7|ˆS„ιsÓ¦Ôyþ?=-j.o·T7 v¹xhÁ¡«éâÖªò’çKìF¬¸ÂР×PTÖÞ´@ÒZ}²"åê'ï•wµ¿ Ù²m‡TÔTVËÖ±¨¤1Õ¯¼Ú‡ãæ6ëøôÖÏiÛÆlíu'|öZK}NE‡å#¤²5VKÚj™M?ÙÏŒ7/fø¯û¦ ÆoøÎÇHåhéâ É”#³·8NÚÇeh(ÒÏI²B‡³i„$”òÆw¥þ Æl= ¬/ZCWÓ!Ê.\ß°mwúc ò IDAT:¯,Ë$6å#ÛqrØ=@Ð…’¶ZÛ§w&¾Èm°ùu»û,ŽVwžqôCöË~íu…ÚoîF¾qœ¸;ÀeVäxaãçh¦–1™ù rÒâe¡ ɯâÔ¶JŠÇLœ¶‰Êä´Õ•[9ÊV{vS¿Ö’´‘¥ñg”OÞønŒ–ýÅ'Iét[`*Ñîæõbìô…7º>¸ý ¾&¿_ãÀÙ/›xž¾™ðÃã)GÇGñʲ7¼¦!j(>Ì+Ë:)å×÷“Ê•z¯v<çØn÷ ÔmÞ¹ª€õÏ ém4~W@Я¯c<Æ Fn˜‘«ÿð>݌Դe‚¦»ï‡1$¼šJ “rdôÄ— ÿÇÞ{GE±líû»'2à 9'‰’“dÄŒ9bN¨˜³"&—Ë}’xwªRÂ× Xx‚Áâ4=Š Þ²ôT¶Îûì‚Éù/Œ8†ößòn¬?ÞSÉ.ËuÔÅÏ~×ÏLWúù¨w_´%)´æók/¹¨™mì5îÚëí!y³d…~H~lÒËcÀåÚÊâ­%ïhš»|8·è¼Ý°U²’§‡H§‰»‡‰KCPŒªÒw =šv`d ˆ  ¥Ðʾ>9ø 0òi~«@R«mŒ©dÂol]Ë·¢†yÿ`ÿÓ8AâþËn¬¾òöÛþÃ×ÞøË aûZÎÅ%¯ŸÜ„Ý·‹è7Ÿ¤“´T9ÓX•SÇ ½”ÿM€dçøÒ9z•ç_U’êFIÍÅ)ÚC~Iv}úKPîöÔ-}5—ø<)BÙÑnIei>üpnÑ3 Cå8ñ¯d‚€ëŒ8%|(F%HWbJ0yÆ;ÅMe¯Q*=GP× 8+qÿ-HIà Añ’g‡Öƒ—QÕ4&@<€‘Çh[™°QÁÕÇó¢$\SgBP§Ùô–Bà¸Ç¦‰½ÏöÛqõ’è¨ÛÍ“ £1˜Õ { ݆‡µW~<·òlî +Mþég¥3H•B_ÏÎoUÀº%¶Ã¢_?:åW¶õ¦±y¬È Ÿ¼šòÓÓ^ .ÉMyæ7ÿs[¯ Eèû—žÎéÛÔÒfÉ6°VépéJêÄj¤JáŽRh¢âRíaA.´‡o³G·–d¼Ø[S°ß}ö KÛülÊÞÐ}CÀmÖqª¤¥ÒT×>¤=eohÛ®sËÿoK€n–8N¨DŽŸ--uš ÀTGMä4‚$ýu94¹¾&ƒ¥Î¤:\ºAhâˬ˜4Š‹»¥¦»žãšį×ò««ª[%;þž AwZ}.Y1Òæý©ƒ1ñwïÞ=ÚoóÛ]@!¥¬CÚVC”––¨db-EG{梓ÙhƱÉoô~v™zàzìÜU Ä0ä‡Ð‰oóš¸\â¡’Šz˜3õm¼÷¡š©Pªì¥’‰I…¨Õ ½¨Y“Àå­R…ª€ÆÖê¶ž‘|9:@&µ¶«p¢ÉjÀ"FjZúm\%ghYû– jòc¶Æç‡ü\¿FŒ#6í!Hr€õš+óŽ;÷ËÁhL¯ºìK/¼®¤V6 M:šÊ—¥ÜÚŠ+¤³x–žÒöÊœýî3–<=Dú,¾¾XÔP2ŸÊTųò_þæÔ«í …ÖÐS’è±öœç]ùfç•Ýðȵ2~Ã8’ÄÊÚëú¿IËâ5ñe.-_S×í9¿Y%/'T ½†¼çwfÎcê;™}öôÉû$;¡%GÚVu9á^'s.[ʯ[%k¯]<þÙq•Th©®o=»4íÆ®»5€;wïÝÇå.•­U×”ÿê¢ÏÂKûÿÕ}õnü©NÝÙ³2mW:cT†O_ÆÃqB_ʯ3¢±yΙ_[tÌ?ÑØ¼"IË·FŽqïv’$¡ªEbAa°M•-ŽÚï¾´èb4–»LÐ`Ó&’›ê:ô;#å×°¼ü´SØ®eí•b4æ™÷ǧH'옄b4»ÑKöùá8ñ«óцÏO'®Ü~:ÁÅíËŨÉqKÌI’47ò=âSÂÆ=$¡â'^?s¯/hvyôðÁ‹Çû÷ð'úÙi«B=Œ£'¾ÚÆP]xa¹w-ÇÈa…Á^G’d¼½©æò««}’ìµÛBûôZ1exÀQ_[-éoCñè~î[Æ pß‘7I|ïyên*“³?tèÐXu}›”Bc‹›ÊÎí»Wl 𹂱u-—ãrI¦°¶ð1ŽÌ sŽüß–[›?†¡"'œÙ&RXa]Qïß}i•Ñ(¨¾\IìëgÒ¸ëfQ‹G/Í© %¡ä¦_ÇfPVJüÊY6ÌúC £€AÅ̀㫽C©‹ HÅ"z×Rp¸+y7£ÆfáÚí¹T5Y¯·õ-1~r`$‚ Hêþ9žóÎî¯ÿôø‘ÏÒ›*¿î­qr‘§"çÓ¥áüªœ‹æÞ£G/jE[œOÆÚ ¯+•R~È©·Mà{€«T U Z«X¦ª£0ØsÄMå¼".,5–6Øùý`S`Ý÷Ï ©kQ¯¬êSªcß÷MMÓïëÓCè«ynÏÓ ®d›tºM$W÷W¸þk¸' Òåºs~™÷SSßÉÍ U§(¤iîÑ1ªŸÇÈÍSÜ =F*%í~ë–Î&Ù:×A¶³t,l‡ê;îØæÙt:Wo¼²£Šã„¾‰÷˜“oí¿?Ü5Ç ;ûùÕÏŸ [?þÀ ~óÀYçé±W“«|´˜%’Ö*«Ž–oZ:+ÙÐy€R¡_]íƒë»„.WÓ6ëûáÜ"_ CIÛá‘M¯‡Y‘ò.ë=­½KÛÄŽÙ^_¾QTW¬µvŒ]cÀêĵى‹B¦¯}¸o˵|Ñù¸aêLª"`uâ¥æâ²øáæõ]î%†%ÏÏ“ò+ƒ†ý!Á× ¨,¦ŒØƒÞ{_ ‰ï«A1˜h fœD¨_XíÞë 0ºß,3¹“Ž+«´=ÀØÖ+A@_Ы]¤04±óºàñ)Õ8NÔõ³¹A©·< ›¥&[|2m*ŒmýÇ%uÅÙܾ4 Ú`å1°J—Îí“vpÔiÞ‹2_Þ˜H’„»¾sèŠä=ƒ VžÍå•Õ‹œtV&IåxÀг¹I9—ÈV'm+ÿ°¬õkê0C÷‘»’võšìâ;ÓeØâGŠÆ=*Usï6­¼´dubf­fÒÎ~=Šõ¯U@*°57ë!€JÛ`ÛÉ%m{^{ s ´ªz™š}€?5ã-€Oû3~‘4UŒH>îÆfRK» Tm qûQ=.]pöe…ysáÛ-*…”-jøÚ'hMb4¬Húø‚=†ýß@-èÒg/çÝoïPŽýR#Œ³3æHØLŠI›Hü ¶HØ·Òk.ß_ç¢Èhh)©é׊b™4LûìË ›:ï×§eÔ¢jáðÒz1wÓÕüPPÑ(žm¡ÇîÙŽÒÔ$®‚[é54èÚ¸¿rÝ–era£¼æÃƒô›i5®€‘$ÉÀ(ŒJ S©¥éðòÆÇ¨Iøð¢ÆÒ˜Ž¦Êä'ÑïÆïIDСèòÛB)@½°Ü·‰øœüèÚEûQ›^ê9öokøVA¡³SW²¬y$Áå!Fg- öu{yaϲ?eæÀ¨ *‚Q°yÇ>`$Iâ‚äø,IèðŠ89`Ù¹…¨ÅJùÍ…üŽ‘…$ÉÅŸ§«Ã©Ä”‚q^çW´W~,” ^c¸epuetuÃÛ§9ÉuB˜] ÷]t%œÀUxìLçšýᆪ\¦¸¯·y@gP"”Æâ¥V¦\ˆÀqb†¡òƒsÆîJ;ÕÑT~]XWTPh+Nn˜xÇ{ˆh,ž®¨¡dpw@®±ÓQ}ñ¬CsÝr½"ηILâ7V‹›*l 徭T)î?ŠÜ×]'’$ÉG|næí>;ÀgI’´³_„yà¬yõ•…æ ªÝñpfÕ¡—ß|3ßyéƒ6Fs×-æ{6ðe:â¦rø·ªq3?ýÀ³äò/5ÂB;cŽ|t…ØÝøSÐÖÚs{Þƒ®àäߥžã}³ÌÀy ‘ ¶h¨R"XòdKP·¥ôE×ß6¿îþ.jpeUŸ'ðÄyR¬G_gƒÚd88ǵ ÆŸéð¶¥°|óˆrXPòì0®}‚Ü\çwº‚ ÇÛ² jy ý'LÓÞØÏ8Ìßû-÷ú“{»SX€q|v -ÜΑ}]ûU.l’"(%šÊÒØ;=ļîzrk÷é»·p¥”iä>òh[yÖ–’´¨E¿~|u|ÇËÿîà÷_ºn¨K 6õ1AÖwßÕú´‰+q‚|íj©)1ÖV[²#€-ìP*JêD T ùáÐË€½«®]vzÞ@‹u&å^/vÓö©Ž>!Nº3,ôØÂúê+ó^±½¹ÿôQ€ ‚7yMsq¼sÙ¦iá‘ÆÒ6ÇÆo=p0>Å¥mÞ€ H0Žj ©À[ÒZ%ÌÉx³’ÿ-÷ʺÝg~u¿Í E±+4ŽŽ‹ÇÌ#—ù•E+¨«þæµëfÑ0mÛ@ 3WûSÏÊœGM]xX.ly šØTøv/.—˜»Ú µêËÅ-ꢺ¢éO?<®kß÷ŠÛÌ£Cœøˆv)¬é ïEàJ’ÀŠ3K¼pAÀ{þ%amáE¥TH†°’¡¡ß"Wèozª?Y7Ç^òËǧÛÊ2ˆê‹ÏÀ!B%Ç[¾¦uƨD)$M]K­K„@PHhlM’PÊÐ繚= Š«0Åš@̢֥vMfr'°/5Bµ›‘¾ec'NP7°=Ø^žµÁî[ÝV/R]¯WÏö††>—BgK‚׿2– ›_¶•gê£TƯl]‹¯„RŠôíZŒÐí3*9† ˜@ÆÑ‰]ÞëPê­RÞÙ~d§±AÀôÛ·o‡qyÇnY{]bÖÓK[š¿¤x);Ú $Í•Æù/JÛjoÕ$½ž¿ËsÞÙÝé˜É0gÉæ?íË8N .SÌð˜wª¥$㌴½þYîµÈì¿:Ò>I ‰/£ø,½ù‹\ÔüáͧZŸ?»wùæ¸ßKÙú7õ=»߀þ&ÿKÇïåÇG`TãâÅó¦÷WÉÄOÅ¥>T5nPGkÕÊ´#¯ŒO9¤·¹j˜¹E¥µÔÙØ8*“[šòæÅåE¿~´(©)ú¿ €ú†ÁîLj…'²¥ Õ„¥mf 1‚IÃz”ú7ÓjÚQ!p‚P%¤TTµH]E2Ü5êâç›e b5:åER•T…“8†¡üAnú•%!jé4¨m•6ÿÂ1rè«P¯ßä7“§7Nº¥iá9@%îÝÏ}ŸV/ßÁµÙqÜ/„RfLa¨C)´_( õ=ra[ÜX¶ó➥ÇÔxÆí;^n ZË1°ˆÒ˜'ÊÅù½ƒçéZº®ÍøÚÖ²¶ËgcïñÓ(tµå„R~‘ÁÕ_¿Æ§âaVƒ”_·ž­oQ‘:ë I’y¢úâÍïÒuq•B„Qé qC©€ÊàЙšF&8NèE½Ø(4ø¨dBÊÇ K÷_yš;SÒRÍ vÔéä $TR’Àß)èUVz¬6ž¥·¶°¶°ÿ•C.äÝÚRªµNV7´×PHÅXUú5)‚R”„RÎh*xÕA¸”’b‡íå9Ð,‹\Ø5Ði⦲‘(…vÃPŠQ @ÐI+úZÉÔ_n õ]teùÝ›ñzŸ®®ŠQ7°}ÝVòΗKÚeÂÆsocþ‹5aó"·”›Ai€uj<“e*™¨žÊäÏÒkƒGð$Ž‘Ã$žUŸA\§!®jåWf¯$pÕ·™Giy¥þn_.®a„J!çW}®A)´ÓV·aJœ<¸å/‡‘ïqø')¥BIGs…ü¿»d4}è28z} ,f]RpgËþ–â”u'f®Ï>7ÿ@ŸE×ft4—ÏÒ²ö Ï<9s@B¤ïg}û€¡T–fã›'w·ø,½É°6¶‡ÿóiÍùOá N|ü¼ûvÑ⨋Ÿ³¾¿6ïØð¸,ñÄØw®óŽ}4ûH¦<ók«ÕÏÏXq&çDì/UߟûZpDŽúÃwFŸÝkoüÝù%'³ÕÜgŸHvš¸ûҬÙ ÷‘€WÄ…D›Ð•GÿÙºšúMk8«hø¶m›ä£‹à<)vBï±[_-úõ£¡ËÔ†£ä>‹¯ï»™ZMóŠ8ßOßuiê;™ô[q7bÈ/ÉnÆÞDzŽIÏyg_Û„®üh4»cé©ì –ýæ÷™( Ýš¼*tkr¤¾Kh«ë´C3¾°¼üž¾K(i0CØgѵ{î#U.SXgì5wŸ}âiàÚ'XðúWWL|&‘^ç? ˆNâ]KúÖ×jÀ"ÒfèjÒÈs,¹ôTö$€ñ»Ó§{o2ö¯t™z€t?IšÍ&]§Ú{\Ì «þ e^Þ[Y!Ì)kwì´nŽyï8~[ºûHÒÔo*é6ëø8ï—ÇyŽ™úM%&î.s¿-Õ"$‚Üq£p¬ýèè\ó ÙÍ1× æœYá`?jSšyà,þ -I“z \’hA:OÞKÚÚTRÐlä1çÔI}×a ¨gpœèñj^ÿJÇvxd­Ýˆõ¤ÿª#ö^ú-Ê[ßoú„·`ìwØt,¾|ËéyÞã´ëÿlú·l…KH©r{WÜz—‚¡šf:jk–·î¡Ÿµ#•«É¦Õ4òeþ§{âÛoåj²¨íujç­"š·5Ïoz_³ç«Ï:ÀcÓF,ÚËúzJ•~ƒN•³…Æ_ )yõÉQ˜º¤{9Ã4õçÄä]UÓ6{"n,Íѱ ²–´U;N?jéú öß¾ggŽ>1‹Ou祧¶(û:éþ©óí©geV{Æ]gpõ[UrÉ#W€ QÝ—CƒÆÍÎrбœào,}žÛH õ0(.®ª%¤T÷ïgœë`Ê­éZÒÖ·Ia¸kÊʳ¹Áûf9¬»”§Z:ÌJßXKM±ãfÅD[ b¦Ì,iƒÔ¢©¯­VÇ™3/,÷>rà~±!‚.fýáZÒ7·‰&ü;ïjÙ¹ü[#u»©Á¦Ò¤‚fê×:qÝ‚!VâÜòvîÒ£ßîüÃÐ*§‰»{õ ìO²<-3QJ0 ¹i‚}‹:“¢¾=ulMaºnîµÈk†6˜Ì(ãWf{ì>}Ïïm^³fgªaCCƒÿ[.©eB2¹úµçÖ„”Ùq”SãáÆÓ_áÒö¤î{5Ú;”\5jÓýµÅ­Ôµg³ÜÚ+>r5ÍÝ⦲Ùw„žsûœ|÷†R*4Öw2ÇÉÆ$'H:AÔ´H„64¦i¡î¾ý…&¶¦²Œ¸ ­ÝåÂq]9÷M -ä·ë³8_žo îq\Ÿ3ÎD?‡gr4Sßg›‹ê‹yjZ¦(SÓ¨nú`§ GS._ÀÆ• #£t¼ÞÖ·lÕ¹OÜŒìB &ÏÐÀÁ„“}|‡¬ßä5Ñ£/fª“¡ TŒ®–Ÿ¼{ °çüjX7»Ó7£†}8±Ä¦±à Ê`ƒ¡OKÝ‚µcìz8C—ô‚'GKaäö­úª2QC‰[Ï’€jcëº'[‚Ú¢ŽÌ‚ÝË.üï@€õ—>ßR¨ˆÐYýÌMÌ5ZÊD¼g9¿׊–i1­i³&öNñ†F,C‘RMMiª£vkF?óØÝ·‹¢ŠkE»,tYÉ\õÁÌó8 6Mw=–NŠù›ïù©Ñhý±'óâV†µ³ï®êªJ-Q}±£”_s íä}û†¼?<ÏMp/ùŒùCÞí …:·½ Sã{‡uY?weݽ£¤º¬M,`ò¾ ÜÔÇ^ÊŽ6»S'–›{eÅ̾O>ÖFŸ|:Z%ïÀS~¿‹Í¤¶ÿü¼óÎÁì‘áÿÖqåí7dÚ>g þržîAjê7µ°£¹bHkIz¤~ýÕ-˜Ôÿ=?¸LÙ¯ÍÔ2ŸvhÜI CIŸ¥7´Wd½åYz‡ÕfÝåõòŸ{yyíÿK¹qœ@0 %ÿnO(dÝ~üú¼¸±t‚ë°ØäÝ×]~t¦ëô] Ýš<£2ûùr’$•Œ $!C1z%×ÄéÅ•Í#£¬ Õ%]·sYnÒl\!µAPÌ VÞÝzÍsÞÙ âú’U*EÊäâ\S—í¸¼ƒ-j( WÉ„ú„JA¡±xM)'T %Fc,mó'ý|Þ=¸o«ôÀœ$ðe6–·ï<8ô&í}·ºàCÒH\!ÕĨ  3×Ù){CLÝàWw¦Á -Iƒkó“–"(ˆRhIkN¡±*iêZ©$+”=¤¹®cÿCоލ®¨®òh,M”¥köîÈø"€'>Úg}ÌÙØÑTa ®¯¦cömôà éÑ“:CÌ.‹ G"ïÀÖø|ç;‰Ï6*¥ÂÁT&‡+4J©fë÷zhmÛ;:~OÛÔ pug*ø.»å,¬-ÜbÔ>$IT“n£·Vªi™~Õ¶òØðj[ßOÿ«t€?'[#õ5,:æâd®Ñû˜C‘Sš,ª+›A9~+½¬ Ù»\-4Bƒzkïb3)sgô3æap8ÄQw”¡úîV¡üX7ø”×~ò¿£le3(­LMÃû(¹´8'Yëýñ)¥…w·Þ«xs*ñÓÕUÏÏsÀïÀ`ýx»VŽ¡!m¯!UàtÚÚÄâ×ø4Ý‹y\úâè½Ü++»ÁoûùßöS)h­uC),{×dòGÏ›=2NŒî9þþwzaÞÈ?üÝ%˜šÌ0vžk1iï;Þ÷Ë×qýœ&îþ2ä—äž>ðòñM˜Ö׌|¹èÌÀ²ütçēҿ9Y.9™=£³,̓fíJ+jÔ ŒÝà‡ãÕyRl–{øÉÈO×V·ˆêŠúxÍ;}³ÿæ·$-•³ ïï®TÉDw¾3 (÷¯ö«ð¸,ý^ƒ–æô³yä_¹ÿÉûRPv´ÓI\¸BúàH|çä9÷hÖÂò¬‡ç™Z&jf®#Çöãš8?U):ìš‹“—ÎÚûº'.ðä@S¥«ï€ZŒÆÔ“´VéhZxôËš%ª/Þ¡¦cT&• ¸t6OwpGž…Çà;É€t’ IDAT•®CÈS 3×Ú¶|Åx.vø²}ú†§2Õý¤íµ†ÊŽ6Æ·ºòžrKøu¶^¯k„R´ \ÉX;®îLƒ uÏ}+3ïǨŒÀ¡ÓU2±MЈ1$FâÆÒ™J‰`¦¦…‡ƒ¦•÷sk«ãÇÈ¡^)8ËEÍ\…„Oëþfßš:ªBü½âèlž¦BÒnË%Z5* öâ8yVœÉ±ºqóö=EGû('ß!›I’°ÑíÝ?A13AuÞâò²²•sfQ®îL…ÀµOôÕyÇp…4„׫O ‰¶žýg¢Tº…´½fR¡0„ÿPú· I’0«¿EeÌT§R’$!²+*Œ¥¾º"b°Uþ–ÉŽŸ†ö*™hŠ÷7Q‰¤ªÊw_Úüì´Ú'í}7Íeê+ '¹Íègþ`Ré¡Teí~2ÎiâîK/ç…\},R¶^{Ü©Î;}·t|lµd~úMt¶EÆï䘻ÿæâß-w—”ð³×Ëœè:wäÚVÃ_o퀂²ß ƒköLøáú›‰°iö:8u§S·3ÀE¯WÊ+©j\ŠPòÇ1‹®=9óWþ&Ù~ÿ»Ç5ãôƒ?ü  Å¡ehèW*ù[ =–í÷×dmµ(‚ -O êYÎ:á‡ÿö#ÖNJÏÊ}1È’ñó»7œÞÒ­ÆÀÚeø„™‹Ø÷vIÙ_ ë´Ìþ†™ñ)Õ(®”Q¨tv3Àç›æ‰ë¿ô®Ê¼».lô°Ù†Ê”ÒŠÿQð¥è³Ûþ°‚ÔF1ŠXMÛô/1Âhñ4mH‚Éàê}Uˆ[ß/‹YWZaì®4¿Ôç÷ÐÙÚ/²Ïͷψ›ðìÎzÿ7 1ã'چĨ hÌ:hKÒ,€IA¦EWVõÙÇ5vœÁàêK;èݫijš^—³Ï/ÔÖ±ž@çèrqÛ«íÓœn½:¿WH@)¬/>•v`äá”Ø!žy QÚÇx¼rÕyÐzn©×+B¥Øv6ÿ^+wc@mêÁ±×1ºÚ;’GÞ‚MWòXí×ÓØÚ9W׸ÄE¸?8¸Ö±äÜR¯˜±aÓBèê:JÅhR~½õ»ÃcçœãÚºD¹BÂ? X÷R•ìþf£;öÍvyÏÔ2=‹bTA:¯GÎÜw3jÔß&§žWÊ„¼Á#Æ9'DúÆ-+/I‰rÑÌmP¡R€¸©l\}›L@){(¥7 s÷¤¤ý²æŒ–ÖßYï­ÿð‰Á\—´æâÔd€+ŽüïÀïÂ_¡~KUÖr1\ Qjˆeª(…f'i¯Ÿ°']àÐ\·Ÿÿª6¦~S½{Ýjý­IŒ½Ík¢#j+6csŽ~è¼áµÃ˜©ZΓbíÆlámI2¬.ùd-UàO3KÚ’ª¯9LJíì#™´5ç?Y­{î:vWšUM«„Ccó†—½9uàþûZŒ×Ë/‚¥c±è惧í]Vn¢ó?NœzVÆí»ñSPÔ ­ñù†1s6ƒÇœSš½ÇÅøšÍvôY’À IêÚ¤Un#¦ˆ¾~ü]ç¦ÐÔ·'êâ8A{4K{þñc*òÒî+¥üޱãÒŒ3EG"ïÂì:fqÖË\.fèÛöÙ°ÿRTÏ$ín©¥¦eš¢RH¡¹2ïd¦º†]]ÊÓoz¢(ö5#n €7;úä9Ø3?ø=ÏÊ›b´«\=“Éž ÌjË'wJ4um¿±Ë‰ŽRh´Ÿ£äVðdÂÆ>¦Î¯0 ­$¤ ¼xwÒ >²t-nHùõàèê½öû|-_’;H\¥ø³ñÊáé²à§ñŠãºïFö¼ŽÆÒ@M3÷#‡æº}X0¡³YÚ«qŒ@!nµjøVdÚééÀæb]Pç9ïØ÷•Ó:Ip/ðHË:5«oѽ˜Ž^#¦ [öoÀÿ–Qá{k§ó;”^]õ[ýVÜeÒÔ4K¥ü:÷²/Ÿá81 ÃP9W*hGжî=šþ+ï{Ê„Sw\ÉpõЏ8|ÐÉIƒ,;pœ ¯{²keÜK…TÐŽË;øLMcàVZµáþY‘Gn¼³u?™ïà躹· ÇøÎ‹ŒÉ(…^ˆ ¨IÄžÄ™Þ .ïÐdÑÊ¿Ÿ”çÍÒþRѰô~r¾Í­§)÷Ù'6EÎ&?ý¢|IKÙÇ6M ÷[2~ãêe‡_ôYtíÔûãSÎ š8NP|]‰]~è©=+ø*©P¨ÆÀH'è}×?ߟü­÷Ù;)bÿUv¼80òó?Ò~t½gÙé0*ІtMãÝéÂëJæ×¢Ïû”â6WpðžiŠJ*šCci‚‰ˆ]6lÔ8šš¶Ù|…¨•YZݧìàgãj¦‰’Öªó§5pUÔÞ<^!n‹jm¬ëÒ»—ßÛÇ7~Çw";ÎK)h1ÁÒ›õ âùt .ªû²MÝÀvfcÁ›DÏ9¿îPI…LWrŒºòyNà Ç;c«©¤"ÅçJSË×ôD3§ gFZj»Ìü§ÛÀ2ª·Bgˆê‹7ùH*•.k.|»Š®®/¿¯'F¥û=L-XŸpûþW*KÃNÚVkNa°óu{ˆIÝ7ì9Öµ“wû¥4W¥LèŠRéµO¢s°­«gì†ã7c`Ñ„hˆ™êÄ÷^pù¥¹Â[T÷EïÌórǹƒ,ó»V D÷þlmÛ€U+öN C`mð‰žÕÄ÷¨Öó{ݬI"H\ù÷69ÿîzs]•¡R¨«ä=€¸G¥Èò3É.$¹ïrm€D®’þ0øé,äo A´Ý:híC†¸¡d ‚Q€ÎÑÑ XŽ`Tj§”ˆ"@UÊ„@’Bc™ %¡Ð¾HÛkSŸß{ê2eÿ±~ý.šëVð8=„‚v˜ô`Áÿ^à_M—O² ÀAG>Ü˰µgBB1ÜÔÁ'\.lç=ÿ\€'Ñîò¯e«1 ŽÞmAÕ§µ¸J¾ìxü³P€ /Ó•Zû·ìzföU q†1ØŽ”½W’ï^¡¥g´ŠP)æeo™3ТEÚ^‡ÈÅ­ (•®ÍÐÐOSJ~tªÀP„ô[q—›•žü@)å+:ÚöÉø n€ #&ø ä&6.UÉÄ×zŸ1ºÚQ}ñjŸ¥7õ\§Ä&©”ÒF\%[A’D™J.¡8˜päÞg*Äm>¢†’ELžQKkð_ÕÆç—yKHÕ Œîá'”rñ§Þ6k‹Ÿ‰bòŒ“¾¾¶UúIÜXº‹ªÆýlg®;®µô݆ª¯¹9¸J¡A¥³Ù8N ÂÚ»@È;Ú¸'y@m©~“ân Ü1Ý)‰_õ‰éfovåâr¯“Ò¶ÚF n¿Qh ª-œ8rø°ÂO §c4æÂþκ|AH´m,Þü¼$ðù½M9ó>”µWè9Œ¢«ë˹´l‘Œß¨m0¨½Œy)J™CºÅúï’¢ƒÿœÊT_£”‰¯àrI4CÓ0ØÀÎwxê¾al $I.›IhQ™Ü†ü¢ Ñpóe§>Ô±·ÝW[ ' O©2ÿQUB£[$i­JŽ<4¢#Žþ[Ç CÓ …Bgµ¶•g:~®à-aÓS¬Òv I‹¡®5ê­ö]ZØTð:¶£©œà9dj˜f$ïXª×;dÇЮJ.jÖ7–nyr/>9xý«ƒ8N0‡úM„Ï¥ÿ¼ùo'NŸßñ“8Ž ½¾²è›oH訌·OïF>½GÅ~ ­(¬/HW×ašêjꆪʊj™°±ÏŒƒï5Ó_¶,~zÄæS§ÍÜ×Þì´ª>ç¡¢ßfë)J™Ðd@°_vm«Ô¬‰Áþ"4€_€$Jq™¸N[[û‚5O 5*oëvvv*“C é×o/‚>y“ž)¥‚'ŸpÎX_;»å+¶Y͉y¾5øªÝˆõ•Réó#2ïù—¢å¢f‡ìsóý‚¢^ìÃÒ¨ú6àJy›\ØhãÞwÀõþK °áè,Ø¹ä¿Æ-€ÆäJeJI’$ØXoCàrœ\Ú>Ÿ…¤\ØlD¨d¥¥_¿ðq…T‚`òäB6l‰—Ì&t%†QhIà$€–µ¯¢µäÞ½lÒ²ö]P—ûèBàÚ'®ÜÔü%éÍñ­Ç軄ŠPC·Lv¬³}ób\ÌчO|Ü"¦Ú‰a(áqÅ„uEH’<kóQãáážÛCvÜ(ôuŸ}b6•ͬF§´âmÍ“¤t…ýÝìŽQ %vȳïϹ» žw«6=†5ãRAÚ^G!pU÷.›Ö|túÖÕµJ«Trq è¨T8ù“²hl^­Ä®˜ ±+®þ[ÇŒ›¥fÉ›Jý¯ÂúbãÉkŽ<³3uðœ–9š bÕÙœ0qCé(®©óM6­ì{wŸ$¼GHǨj\éžÍK¦ ÷4¬W¨ˆ&U@!†¡â¸ë›¡]Ð ÑóC2pœ°ñ_qûŒ êÓ¹¨Ù¨úýžáEž'ž”†. í%þ_mþgí((FeœYâõ„­g}TXSpRIÕ&I‚Àq‚Â5²Û^ž)/ü˜âñ%;ÙK&hx;jèÀó9o°t,øÝ{SÅ2$p 0Øx[é{KIó·Ö§Ïž‡äe%JZ«Ë8†ö1º 9 (EMË´TO“)¼å§Z0Äê[w[$‰$íêßúæõëꔜ²Ë=‹Ã•鈤 H…ŠÀèêÚ5>6¼³³! AP0õ›mYön~=\.¡‘$ µ­RF—˜š†[Kr’w¹‡ŸÌY÷Ñé_~$ÀŒ¿s"Q7´³$TÊ¢ÂÛ[">][=§äé¡1¶-u\FÜ„›q±¿xáJ©Þû·O\ \©’ 5ÌÝã”|ÅëÄkÇqœ@œÃ¶[IZ«¦pM]–¦Ä9!n,­#I € uE*9þ´‚ €QM€ b\)5 Y÷h €±žåÀ™ÿ+5£ê†ö%#½²þ)pÕ¿+«gÔw“=Š]]‡néþxûáaϧý~òÈ*J€„HߤO××Ó²ò©‚b©*©è¨‹è”ìsóçŒõ3©ûí9ÿÍaÃÑÙà€ü& wO%îîî2[K®” ¦hýíö \ûDwbì;Ó˜ëH`þpzÎdßÑû •’hâË(ÿ?þ”v.½ÂÚBº\ØÈSÉ;tŽ%¬‡ƒs\›9†v+…õÅIà€LÐpA±÷ð“ó†ü’<80òé®Y‡3GMÕ÷4FahzÍ;}Ö+â|hRAóõÖ²ŒvË~ÃÜ<û$â ‰©ã„q‘OV'n˜u8s‡‘çXŒP)ôâ®HªêÙ0Ÿ]Î×Qvð±»µºT–¦¡”iQèL®ÿÊû‹(tv¿Cé°úü'ãšú&m¥DÀÎû&ÀºÜM Tò­ºìj†Œ¸!µðÇoÛ´îùHš÷Ž\ÔŠÞ{_ëþâMÊR¯ˆóQYÙyººv Fc íÕÿ!‘‚ÖeYsá³/¨9¡Rx:OŠ]å4q÷’¦Â×'U8in¸Bjì=ÿR¿K'*eæó×_ø,¾~}ûéÇšK³´1 %Ù:b¹¸-ÈoI|SÃ`Óæ³%l»‚öÊœyŽvìá··­GDNSÓœwìq©AÚÁQ•ÉÉå(:Úgvc°1;S0¸úÆj<㞆:»:ïíZ¯ˆ Ç·ž~¾Ž®®S0kZX.ƒ«?‚¦¦ÁPˆÛlŒ›K¨~^sO>Ѷ 0A“4Wì÷Yzó!×ÄiXí×öã÷¤J)lq@PŒÃ6°ó~ù©‘JÁ~XÆþ¥µ^/ûbÅ* •„5ËËDš;Î.ï‘Å¥ƒc¨ñŒ7ì<·âÿi ó T= g‡Ÿ-«ºÈÒÙºVjC{íS‘c7¶A_Ïáà5÷äTi{­(àJ9 àe%u" ÿå7/·–¾Óeë[ÿ’sqÉèÜ++¢¯¯õ} z¿çÐdéX FAH’PSIôžq·ä<ì¸QèØT–3Ÿè4#².ÌÖ×`ðÕ lß# ÂÚÂáqYžíÉùS:—þw3j´üWÞßÐóÛ^ qÛ¨oÕ5ë£'õ&çÍêù&§{nféX€\ØÜ®¥NÃÿG`Ué½?½öµèâ?]Ày3&DðLéý‚¦aܹê]JÕWl=Ë™CûVwŸÀT–æz‹w ½±ú¸²ƒ_TVÓúdÕ(Û÷ê†vƒPŒÂàêïíhkXªï4è ®”œ^ä‘oâ<¥Ð¼q…ô™J.!¯o½ÿÀ¡½}ç™8¨œÍ¹“º\hô,ôXÁ\Sç—Wðí#ŸžpŸ~ðØ®›EœNö–$ 6­>þFãÒKäÀýb÷Ù'♆»éê:•¢$Íd}›ÔHMË” 03öePó—$gŘ2~Ãøþ›ß Ýšìƒã„3Àø•éÈëì‡?”©ÿÀÁr*“«$”r-5‹±»oÑÊDØØ]i#¯%ÜzLcñ$(…ŠŽvIm«´£ÿæ·îÛ§9)t LRì …¸U=ýÙí;ÃbRà8Á8b®Dür$!U%O2ÕQë0×D _傪O ¦x¿áÌ/²¶U‚Œßö|¶Œ_™Ò­¦úw§éV¸ç9 Tw+MR›CW\þ•ÓüãÄןŸ„Iƒæÿ<¨ÑGÿ~þ‰Q>°ûï[—>”´in‰/XÜ\[ajdfyäüîkg_”#_•Ëø 3ôÍsl ŒûGëÓg2ÞÇÿõ-fÑ'æÁŒ%ÐËÎåÇú#ÿ¹h¦> úBƯoÿôzøž…pn݉žãk/oÀ”aÿ–²ù­¸ëdd ·*?ýñ,¥„ZÖ~‰4–æn6›U÷8:°òÏÚÍq" ù E½¸^›ug,IT5-S¥ÐΪëÛLkÌÁдð|œqbÆÄnÝVÌõÄ×Y–\}‹C•·Q ­ÅoðÄ|YŠ·5/ëÇßu|§°]'$mÕ HŒÊ’ÀBgsð±åÎzÿ‹ÃbRk¾df ë‹™t´mý¡µô=@ÝÔ)SœnÞ/jø:ˆªÆ -÷ë7täéÅžÏqœàxÍ;/ª-J¨=Ĺ®¶^/PÓ6¿Ž È7‹Üã <¤æÃ*¸LÙOÜX: tì‚A%ƒ°&ØvëûæÞºzúFc‚š–éÇœ‹K<–ŸÎ‰|r÷Ê\!å’(…‚+©iô~ÔÈ‘SwLw*»+ )ˢ å×Áåu­^¾Eýý]_æ”ó]Êßß bp 2—Ì7"b°UÓÒØ1y÷Þø×§e/çÍøXÚ¾ûøãÒÃ+ÏæŽ‰½ó…ñÏ€€Ž†ÞêV¬ým§Âº#ÓaÍÁßs¡ÍÞÒï/_§M£C àg4|~2·(ýá[.¾,eÔ~¸»RP“7»¹©1«K/ÖF?K8N`8N`Ý¢~77!Àûxàøo3ýž<Žhפ;OÌÂÓ=à‡ã­»þ$IB×ýØwù°®?` ›ö÷e¢t—·ë~ôç%ØweG®K÷ñ’Ù¡p>ê䟶ãµ 0سÏq«[0e@\~ö{¦•q¿)½æï[/>¼úáúÇ/`íñM¿Ë{íñ¿5‰9T&gÕ×Oï8L-“sænçdüz ®”m`Ò°Aþi_Ÿ1d%t­,&¸]Ìàê'(%ü,™ ¡OË×Ô7zŽ7„…úLÆ0TÜý½Q±¥±y›¿¤×h˜¹žcëÛ<Îýø¾/‹NYÏbP´ÿè=ƽý±u­žRìwT5ûLžñŠÅ æÜYïqÄòNrÒ]ÓŠ¸¦Î Õõ­“UŠŽô¦¢·IT&'vÍ’ð~›&:´9y\¢sô>ªi™þ:`ÈÓ‹=Ÿø,¼hB¥³+ØúÖ% ®þ6 s·CLM£stu q[qSÁËIš‚ôŒÌGÏÂæI’`Ò'ŒÇ5qª¥st<Ó—1ÁÕÖCVÌ¢2¹ Å _ýÇ-ßue¥÷‡¯n·§âZ½| Sö†nt?¹±­ä—[èÜ}w7¤ºÍ<!n(Y ” Ë) öÚÒçqÓ¼÷üúõëAaM„ÊÒà);øB¦–1jëèqiœ¯ñÅ &„Ø-×Ú*>Xk˜8—ÜÛ1iÝ¥‡Îq}³ôT¶{╸ý2AMÓÜ#uBØÄKO“sHÛkež}Ÿ&Dúž°²â‚²ƒßn×?¼ù[Îs7›Çtï Á¢•¾MI_§’ Q­^}Þ¼Š >ôŸZ¦üÕä8~mñœÉ‚PápÕ¨TÐ Š'zÈÿVù¼¹#C:ƒÚÜž¢ÞX[ÅR):ÀÀÜ^~ƒ¿ÃÐtT±w¾P¿Ö‰¨A:ÐÞ¡ †‚TCþ7ÒßYW6=Äÿ~¢Lß̲ IDATôšÆ…W…—Åû˜‘BãÚKSö† ¢Í…˜Ågz¤{•Š@GìHåÕeP¸¦ÎøÆI.íCÜ TÝ“eߨgúËF9¶M0‘“$ sŽ~’•ú*žªÆ}F¡±V½;>­±¨FD‰ºôkoo§Iª3ØÜqß2níÆhL„cÔ{|Ö©Y‰Ç¶Â¢‰[àØãRÖù»IlŒÊDMÍÌÅ7×ùõ0˜Ú‘ª)–©ÐWÛú¶~¯F@ô€&€È ŸÔ“Þç³äm ®×Kõv÷`>†¡ª˜S‹ :âøm< :‰-—IÕÅ¥„º­âÍŽþ| CÉÈÃÓ!vùåÿHŸù‡°¥%´µ æzÁ¹’ðß>Íq ‚ VÔ‚È•8'HÝš)AÑáÒ[éTŒ_Ý,±ÀP1Ôb6¶ä™G¥ ¼©¡]fÛ,” u8ôº`Gú­ô+gs–y-šjۤػ/­úµmÒvCuÎÃõšNfܪÅC{‰+Ŭ£J-*B1ÒÛ°v «¾¸[rYw)ÏT¦ÀÕ…Z•9˜r{œ c®86ðe0#ļ>¥°™ÆcÓ¨sZViÛëZZš"¬)h•´U×V¼=3 ÿæ··ŠŸ£èöî ®oãYÿéq‚ +¸&Î9WÒZ'n(Q”½:1«÷¸O~eN2®”ê˜Î,¬+ŠC» ±-Å©6ê¶ûr./³²¼<£1]8†öãO/÷—[~h:xò+s¢Xºæóâöà1³VL<8ÇUnºò!KϺxþ¤Á÷îÝw¥Ð:Jž6¼ðÉýÞK™6¾£nü‚ㄉ‘Lj"ÿ¹ëŽŠ"Ùú·»'3ÃsŽ’1 渠¨««®9'0'ÌsÆœsÀÅ5 ¨ Hœs“ót÷÷aݧ»o÷…ó¾>ÇãÐ]UÝ]ÕuëÖïÞû»ÎA—râ6,ßs;ð­;îé;øÑç2\+‹¿ÀÕ kÏd’ òóú‚'{{LرŸÐ¨8…†‘Æ3ï‘RŸù$¥&%v €Ç¤}¿4ç½Ò ^¸wèåðÞÒÿB®°VL©oWüÜ"R¨µ‚$ípÃ!íLØ—{~(+Š{玅°¢$l'ý«8j7äþ~5ôêwø?G|¯î{?††üúÝ{ù-‰Ñ•·UhdBÛØnðçK EÊvà1¾¥Àwúau%„±Ž©Ë¬ŒË ãò* !üøJxý!¡ƒÿ[ ¿ž!åÌ›¿ôn§¾.û¯ô]MSļˆƒv®Àe选5X›Xýo¶À ÒylêUA@Жý\ ÈÁžÆ+CVLý²ªY–æSœ¹"*-ñ¨Q¨|ǤaŠêÄy íÊ[íõ1{C£ ÙleZjQ{*E}Sß&OÛs§@çCA›Q¤F­%n¥µ%R1ä}M‹|Ô7•ƒ®¾ª¼ÏcQwc(òùcaÛ®¸¤jJ|Z=ïx|Éy*†\`а+ç~-Ï{”ZëRT'ÖÛ›÷'ÈsLvóÎûš‰\“d(‹o†(EŠÀ¡ÁÇjDÐÚ¿¸¤jÝÊ·ÇëÙ÷¹¬‘‹@-cˆ± m›`{ýçGZy[uŠRÔ$íÜžJAH={?kµ\0k_Ä‚1ùvXéqèå(•¾6ŽÙô°cP¬’´ *Ò¹Ž¦:$ƒo¦KãH«?Ý“µ•|,!´*åѹÞ*çu#é\c×Ì«KV/iÿ¦_Ȭ1’¦R çu¡Ü e€Ó(¨EÿõÏ­$ ­‚ (…¡£¸pêàA—¿‹’t?¢ßù´‹ m³£W‰(t6Ž 1xó›1L=s¬0~ß䂇;'>ÞÓ„RéDv¸úÉ¥¨Ñ¡ÐðÞÆj€ü/iÿsH£ x›XÑ821¿uàÕוâ’k^'æ·¸½Ëmé `ŰwžÚ-Pl'Á±È¿~.Èàk7'^ýÿBø«¸ ®øG(ç{ðÎWu¨¯BÃuè¾ö6§™*”ª»ŸozpoE{­ …ÉaÚ9¹óà»Â¯ªYjNâZ.ŠÑ¥6Žî…µ!] îi¢5Èš;c ñÜ6ÌÙEµþ>ARþ™éïôÁ•ýºÝ‡ÉûòóO.àe#ºÿ°46‡az=‰ç~æÅ2·¢à»mý¼Äÿ–ïH¦î³üb– 'Èd¾~Ž‘”ׂ8›s_\yY1¬ºEþîaj]á@#å¦9%ú\ÚÙ~®ñǯl–ýàlι»x”ƒÉŠ‹™¯dJíÑö&:Xnµè³'™u튕†8`Ä£‡™ë3}lÙÖ: JK]»b:Ú:ÙíÅŽ[¹ U"äIZôràÏ•*´~S‚¬f¸Yqë·ÝÊkˆOoüéMN ÝKïµu²Ÿ$IXs%;ÕÇx¸`„}—Q•6–HÏ- »í:vëAEúÀm7p-Üï´—|,еöfäÄmÐøÎ>óB-k_Ä5ï‚ôWr¿Ò¨8 âàž¦¥†°QKÛtôìû,Tip9ÏÌ¡Òun€dÅ¥,L%l°¤ëš¶aJ{ § hˆJÔì¥g×§ÛÜs}¥ßG·wÊ4 ‘‡Ÿ™§·ÈZ’mŠ W^Îb‚2H’$gŸøäøèJO¿A_r:S(c*èòýÒ*¥¦­EÉ›YÖg¬ HGPŒJ,»;A«”éÒuôH d³ã3éáÙû.íL8$ŽůrškMué –özܩٷ9˜êÔT+=,rÚ“7CÁ âú—S+fxã8¡sà~Ñäòf™ˆEÜ 58)¶1dI‚{™&{Xó´‡OßëµùfNáôAÖ7*œó"»iÔ·UgŸ• öÜ)˜«Ò +.fžëgÞçúÛ*+;#¶ÔÏY/'Hõ§âöá€ôw3|;ÐèqglÞð­1yC`óÍœ+.\Ó—ÙM†Îfu/Gþs¹JKÏ(†óØÔÄU¡Îo>·Y—~?9¿µŒ¥oÕ.m.³©*/½0éÀÇMqë’¾î³c‹ CW_:Q™|}§¾{îGôËÀ;„œ‹Ž±ÃM–žå]&ß¼D£’òT¢&3øñï:çiÞPx#ó›rÛ/í‚ís·|Wî¼ù»òcCàÚ³h˜9²ÂòxsâY÷õ#¡¤Ð +÷Uˆ9»öVÍ÷žAZ:O½ø§ÏýoA48i T㤅³;Ø>ÿËIr3ìˆ<d]ˆ¡H¾!—>çd|‰5ðWŽqŠÀP„®ÅÉ—‹FÚGE\ÿÂdÒ0›A‰Ø6Å=› I>†"j‚$¡M¬‚ A­%ÎÒ©XÙ¬Á6¯{;òs–‡8F0¨˜ÃžÛùWY§Ôà’›«ü´…u’Q5m 饗³–_ÌÚ$’kòXÔ †šÕµ+0'X‚›ŽQq‚üšë•·V èýcJQÓ2’ÐŽ9·qÒR*‹Çïr>¹=‘©6îR ”3—3Íy¯¢P´CmêPëQàZ¸¯–6õš{vZ'`®Ñªdêö²OK˜4Ê83>#4õÌÔ©g¦ÊžÝ»†á h«©é\¾~[:Zqmž€ßâh@£!ºNeM›¥s Ù†|ΠɥGçxo’Pèsè*\«&Ë«j¾·âR:-ÎÛ…ÕYáQ¿”zv³—"(Nar´JÉ(]C³í*I«¾ ðÿà ¦ÁI6À7•ú›&º>Ÿd•Û9á{JäšËt*Z¢«C)5ă5W²­;7yK}æ2?'=#o[]O »beÈâ{Xó(7r>ã8ÀeRS¥JíÆó¿–ûpé:¹fLa­äb³PyT­%ê48±Ö"4Ú²†µIÕs 8tÕ@w#Š ãÀ)¨‡AÓÎØ¼ æbÁ©¤bˆ›NYÄeQêÍ8aM"¥ß0oÙçRA,‚ÎP©‰>gJƒb«ßóØÔvœ Ù9U¢ó8Nè&åµð>— Îãi¢Páw+šdÆíR5ßÚ¥Tªµ­6îËÙ†¶Úæ‚7AY‰xý|øyŸE7Ž­M8à3óÔ¹s—®&qíxž•çÜË«î8÷ð$ôs5!(–Àà™J¡]ûpjÊ–_Î\7hxÈa C '¨f=CûÌ)‰Qjð9æúÌõ:LÊ& cÈ•ZÔ˜Gy|¾Ï²@êðpdиC³½žïŸá±…Ç¢JçE¥×­¸˜Y§Ï¥×9˜êüÒ=£Ø|´k¹àYz$âeÏÂ#ª“~+…Á¡Róå¾F.ì (VÈâê© ]ú¯Öªå4'PA€ü{ÛÒ) î1qmîùy§ÒìD"a!´ª$-Ë*+ÊÙ)¯Ø«ŸÜZ÷Œoè:Ћ p_†®I)Ž(FgQI’ I’¾mÏ·¢šÿ°¸Õ©g¦’ý7¼˜®·Hòì¸Yצ ¡(¥QÐÚÄýë9LJ%I’‚ È¡Ù^@ ‚ŠÏgÒKÚíæJcø/=íõóaNgØšöõîA (…öþÐ}o¿ZA •¸…µüçÁŸmï/èúˆŸI¼ýõáÿ ˆ" ’*µ#NÆ—ˆR‹Û«öÜ)ÈLøÜ ãM%S$SoeP±‡Eu’{p€MÇTt :4U­ò÷õeú‡Â¶s-"UŠ"<[cvýž;Æ&|Æóuã#"&ºÞ–©ð±B«caÀ*o•¨+58ÛÒ€µp÷4“(‚¬fP±Ñ¯²›šà ‚º>I«gnº™ƒ+Ô¸“ŽÝŽO¯÷o—ª× ó6^6}Íé©­Gù9ëmw2ãTó94­H®)Ýs;CÛ7ýÔÃ>b¢ëþªf¹A «ÁåU¡Î—% 핆षÓâ’kŒÛ¤jw EîÝ‘’¦PáÍb…¶(¤·Y̓äãÍA7½üYûŒœ› $I•4h-N^T÷ùárykÕTž•׳9SFÛ¤DM¹ìdÆ‘,Þµ b@€k”°îÚlst.~j¡o2€kÈê¤^ãÖLVi'pÍ­¸äj]EÁÞ–‚w‘AkbI\{DPñyÕ•³Go-9û™]ÿ  l-ˆR+Dóè\Ã[÷¯ÆqÂúÙ“ûþÕcÎ캿·)ïÍAeúZaU–oŸE7zß{ü¬Ð{@¨YSÞËÍ=gGEÄD_G’_ý²OXé5õÈ܆Ì'TÒÖi•I×Oóm{QS²KP‰›X*Q³­sÐ QMŽ5€ûÛ_°ô,CÔ’6˪19}^úñÌëÿžìÚgó׫[äK=,òZö0ˆy§Àöø“âQ§ž–èX°’HÌ›„ÊéMBe·N(A†ã"Uj‚´kKŽ$‚$F£ Ô–\h$IR½ít±Îí€oy£t0M=˜U!©Bk¯ÅIZÂç=S’±*øÈ£"Û|úƒ îGŸûjbZ«Pãë ¹ô: îÏa?8Låk¢Ø£¯ï0…Á3æ ÝúnÄ»½ƒÛum|ï(u—¤Ô28¦ÎCT’æf׎:jŒ£±¾È[Ê··V~I#pm¾žm¯¡?N ×1u‡Ré•Þ3ŽÏ¹»í6J¡%$%ÜŽš4ÈÅÇwØ´µ*qK°&»T«³C‘Æf‘ÊÖÖ˜í‡  Y;Î¥ðõ—–>2žàbPYðå$8˜r´ƒ=€à‰3iØ‚v©zýÖÉn“»ÞißLÏñé ÑG-2âÑ»`±S }‹¸ô»™úÌ”à¾á:LŠ/AÝd ÛÏ-„›«üêl ô.zz¹cÓ¶¡mÀè)‹óï7H99qÁòÑNU‚|³%ìr«Â¨Œµo’S¯fåÅ(Õ¸®S $I·¦ºê³.šìžSÎ¥±u‡¥_Zä·uñØÅŠöºº> /ɽ·ýµŽ±CÑËW¯çì^;ÏÊÔgôˆù3'ˆë Oi•Òñ±k¦± mŸkd§¢øZ¾Ï&\d Ø‚â„£º žÉX¾]o7ÿYG\~Ù;f…‘ÛЕ´õ`Ê©IÜœ¸ ÑžSƨôÒOçf λ¿-˜É7QëO…îIæü×0À®ŽìåÈ_'ÊÖœJÕwûºÐi¨V¡ÆŸ0¨˜²³hŠ~Q¨q#+CVI’ð$­Þ1¯JÌÕaP 2yÚèŠkZä˜ðøS]fU³Ü•‚¡#ÖtgsÎ'±BëKA;& k€©¥QÐå^=Úà€»B¥ °4`íÉ5ÑB©:‘I£Ôjpâ5…‚>êüc(¢jhW,[=‡KÅ·å’Ó‘÷Š” A]<‚Qîj;îéã†Zâˆï¹S€!(vWÞ^Â(`š,ù~icS³§°*+;çî6éà-oÎö,øig­kx£µ(™Žaô‘w ~gXÏ•ÔØ¸Û\ ÷Ñ„V͸ñ¦J½Ú¿ôæÛªà±‰=hl]IòáÑYzþì¶ÒÔý4OÝ,T"aÁŽõáç3†<¸ɪ³pc(Úª§SY<¬¨N‚$hämÕ;Ù6J•¨™¼“\ã¸ûÌç.GKsîn;8yþâ,I‚6€‡nsعŒƒ-bÕö#ìŒ j%Lcý¹>óN¨©£q¤¯©¸Cp’¶Zœ”{Ûñ•’ß…&6±Ú+µ¤=Ɣϸ®Páe*¼ÿW  Xã–L¡Qé0(r.“BV·È›e*m¦‰.#D‹“î$ ÷¨”J'HkׯvEÚ+Eƒ“™flZå’³ŸŸœïó†¡ÊÈ;á™z¬+®—–S0d †"$@O{ݧï Ûf©ÁIá×ÛþÞ7sRÕÛN¼ŽÏÿçWA@%m¿ª5&êZy2h˜€cæ²JÞV}ûêùÄ·¦ÞÁ; JªÔè"€ÖÓ˜¼=ôÒÜ~Üj®QHÆ¡Fmïyç6‚R™|Ó •÷ôs³sŽßײjÞul[ƒzÎŽZ°ü~°*ËE±\£â$ÙÂÐ5×1Ð8ÔªE8AjŽ=.æjUrFeèvº,ñ‹Rž A)ŒnbE¬ý¢¬¹lxfMõ¿j)-¸ ®&MqIÕsª[å ΤbhóPçŠ.Ê!7K.Ù*Ri„rÍíe!ŽŠN ¯‘NCgëëÐP‚$|6U-PÆ2é¨ÔD Š"wùlês& Ã@lÄ£/Äq’„΀ûP?‹æm1¹³µ8iÏcSuQ‹XeÖ T•/ýÁAqäQÑx©Bë@¡ ¤‡œ1}Ì+.fî3Óc¦$¹ªM¬Æ{;ð=>µÝ8ô°¸öÂÒ^×  ôùIؾf¬ uÖ¬êT6àwæ¦ûýð®c›¿ Ϫƒäöw‰]"&º* ÷JÒUx¶½|â55ë›ÙõK;·ºF‚Ö&ܲ2á?œ1ØF rrb>äg^8¹o„¯ Ð@7ÉÀ¶w—ºÝTòîm…½óaÚ@ë6èÄ÷ “@1@ÑÓƒpro@í§;ÝÏ]òëñ®Ÿ]?ÆŸ ˜{ÎSµ¸Z>½ßò;þ× `§pêÆ'xô 5ž«§C«ÕâÄû&‘ræºñÎç1 ÅO=-~&¡”¾x”éB»_¦Ò^êÄ¡qAP‹ª¾[\;E¦ÂõW‡:¼ó¾Ö¾²Eæ«Ò]¡tˆ‘.cÀèÞÞÌäà QkI? †J·Lê¡ÝûZ SŸn•¨`×Ïî³öLp·â¾}›Û²÷úëÊ3Û,»ñ¦Ò\‹“ MùŒ‚$IæÎbsñÐâ¶u׾̀³µâ ÞvºÂU¡Î¿îŒÍ;^Ú Ep‚Ô¤·¯CäÔªPç3ަ£hwWIÁptý·­¯ßXN ¼¾âÍù2(ëºVñöâ… µ ´jÅ:QMΟ™§ì$¡Ð4,}sè½à*ª’´Hhl=L#XKê cèýýŠöZk¬N=ý³âSßk ”kæú;:×ÕÏ1:§n̈Ë·Uû¨e¤óYºŽžTX™!@1*ÚÉUö[¡%‚Ü éÅ©‡Bg±»=tôéT–.£Ò‘ÿªtpÕµâH óëk •–•U!¤},j³‘*µ¶~Žz¿I翯¯˜Êàk'ênáP^ ? œ ;~vo€–¯ÊtgU[êÜÝ9"V^Êr*µ³D2uÿmSÜ‹;AÓ’7¹-{¸´o@þ퇮ÿm¿§¿â×ôu™½óacätUÄõ/E}¢s\”Â[‡A É5?òXÔ‘['»%~¯Ýð MölŒ¼ðßÕÅc;`þÊíàçEhÕK‚:”Bs@)´xCåÏw |¯= C}W<¨RKZ±”Sß§îù“X>zò¹ñ¶ªNjœ ÝvÆæ-dÒ±Ð&¡ÊÈÓš7ÃPÍÎØ¼=mõýM7s[ÂÎe¤KäZ1ŸC›wåeE⻼nO{þ 'èÛnå WiðÆ×9Ͷ޶ºY‹ÚX[cò èT´˜IÃJl ÙÑ/²{=J­WJ•jÓœ*aíº«Ù™ Ñk«~8½¨§zëd€ØÄê´g™mvÆìt‹Ú0kˆmúñ'ŧ_ç4ÏYw5{xiƒ7àÒg?J­¬m•Ó 8t§¬ !îlΙ[Ñ$;sñyyUe³,³ V²dgl^ †"‰(Š`i%í‡.½(¯.¨•ôô²á­O«·MÌkéË ¢ñiõï]ÍJÿ•~Üyí l¹¶#dAÁ3bà8AÉ5Ø®ÛCË$ÊæÆú>IGí6r²Í¢Ï„a•ICP”$´JŽ 2ËljÒIS *JÔ–æ;>e<6¤óŒ6ÍôCô’Qöµ}Ãnù/¿ie®Ï| ¥Ò»©'ìûðSʽ#ýæ¬ØööÉnÂ;wîpQŒ¢Âq \õ@0Š£1»„³ ¥Òµl:¦‘©p‚Ð(Õ\s7–yŸ‰¬Û )T­RòN«”Ì;—7o˜­`zÄ9šŽ^BP@oiîÝ-ÿ=#ÈŸÇ—lºû¡ö}U³ü¼ Ÿqxb eé­î¾èCßøòtýmç4Òÿا±>ñÛ‰’û›úüa¶õ–ú̧íRÍ»ˆë_.yTtbGlÞ/Nf:/·Mvû[ì•“OíËlŒìHlmĦèqè£PÙ_\/Ö(P 5Nÿ«íÖVfuÿ¾“\Ûv$Õà{uù+·C³P‰ô]ñ DÖ\~IP‘¯7MUËÐ5òXÔß}!»’ô¾TY¿­ºß'ìØ“kØåç6mxÇ '×PƒÖ&ð»Bø8ŽC™k®dw…¢³O|ÒïÓµ ÇAZò«¿ÔÿÎæ¥d«D]ß,Tþìm«»ÂH—¡ÐjÉÈý3<úÌlÓðùã:Ø:Ù-k€›AŠÎ0Ñe슘è:È´Òö¥“-Ç…‡8~Ϋcð¤]¢öm—¨³g ±õ°æ D˜½i¢ëh_;þ& æmÒ€¡A8 –‚w4ã 9½¨gm×3é0)`Êg Ü #J /ÁÆËG;­ð±ÓõgÓ± †<úÐðÇOÐð¥R8ÍH—~CtÁp»8!¾ï IDATw+Þp¡\SºcŠÛ*w+îh‘\ºé§s=mxc-ô™¤Jí-{vÐôA6¹8AHÛ¥êyj-¹'á?K›÷üÖ™káÊË :]G®¢½V­’´mé5÷ì£!aþÿ`µH¦&…UYóœƒ×^3t°Êà>20·wÑè¸F¹Ï%xÕƒ¼”gÕ’¶CwÖ÷­œ¾á ®V;zä­[èÆ_`‹‰.£ìZ|º;¡U3Äõ…sÇìNêà笗Caè”߸xr_Ÿ£<#šJÒÒ7tï{… n¢¢­ÖÆ1‰Kª¦Ñ¹FsämÕ¦î^:,l/ÿ”q¥4ÖÎÁÙÇÔ'dJ¡ÏÞøeÜÜõg) ¶Íæcó|þi,î-ª~glÞ`*†Ž€˜ˆ‰®Yímy ×é+øgÇ…'—aþèŽ|¸óN¥é\ ëˆB¨(½¶¿)Ÿš~'¡0' \<:²Þåg·ß)ħÕH+i÷ÕãÐØðxùh§/ I`bô¿²:µ´¸¤j‡—_šß«Ô¸Ž¥+tÏt—ÃqÝ—?ìeZÙR C§þ]äï&W8l;œÍ6f«Ä-©¸JU¿ïÌ÷ÊõßðÂLÚT:_ÞZÝ £2„|»^›’W,»;KT“³>ÿÁŽ@zXdqõæíe¸FåMÓÑ+=jØ®ÝÓ<šƒw&ÙÕ¥…ÉšËtL…$®©àš¹búÛo{—Ûb[”ör%®QºZeŠç€‰{ïnè+x”Zkñ"«9°E¤RX±ê¸Lj¦1›¨j–¹”6J]H¨nVÜäµã\êÿ¬?’^Í€ !×ÿccv.cºT©õ¼ºü÷I…â’ªÙuí V»D½„M§˜ÈTÚe»¦ºk‰¬8lóßµS]z¬~ü~?ewÁÖþ·¼Ëw®„+÷SG­óÉ5”W»~ü£ºïr›©Eu’þ8AÒUSk AT¬5<ÄñýÍ·U»EyÓØz‚+§½ço¡ñjPsÁ» ޽†M/IanàPtpÔ§®6?·éÏÝr¡·F.‚1Û_éqèš³ÏÊ\us¥gé0(Å“û[LÜÿÁ!ûí¯!SSY4 yóú¥YæÍÕé—^V„àIb(ÒjkÌN­j–Ri 6—I‘LdóÚvÐ#c·! ­úå§³ÓÛ;Ζ}QC0: :rôËãó}zÁfÐþ´þÏ·À¶u»ýú>ü4xüßâ¢k°hÄLØ:Ùí5tÛ¡³soÿ%á0ôˆú¥4èô¥˜9ß$8á81ÃÐv[‡‰ð4½Þ¨Y¨ SjpAÂÆˆõØÏ×4ýyf#ââaÒ­6:»-„YþÕ-òé 5.`Ò0Mm›±1b3 yô³!½Í*ò³OüÏ„ß×ZZ£PÙ¨ÑJÐùW䨗žBeqïÊ[kÞýQ¡+¶ƒÏ¬Óv²ær¶©OÈwËù-Ž6”4–Ä)Újî¶•~\kàÜÿ­°*+ö}¿9'Óx×bîߣq ®ˆëòo’~õádzBv%©/ÏÝ„«ùÒ–Š«$IlF1êD¦®Ù¬g:µùRÙº§t mµ•|¼žùâ†=Ž1 ų+DÊÏù•ŽÍ¹/VÚΚ?mÜgcýNH­øüëv&ßôoÛ៿^8j«ÊÀÂÚþwï4ä:¼~vì6µ¨4\<¾æ-ßú·:6¥¨Í>>­~†"ü‹ÏËSç ·»ûÕvü~“HådÀ¡•Ñièüˆ‰šÝÓ:®ý£ð€o„ß¿Ëìó0öâï„ÀÄ™á0õpŠoê³›W¹nu0ô{u_e¼…îFøCÕ{Ú@ëR(·¡SÛ¥)[Q Ç h-x¸³[¸®:¹Ž„ï‡e'^†2uÍ(9qÎû7öó[³`ÑHû™¾³ÏL’4]*yv¬fäöÄ2™¬áÎú¾O–_Ȭ~tý8¥2éªj°[kýãt+'œ‚ðqaÍoÎßî:7wϘh)€‡]8Àá¥û`öÓÿÄ AÇ æóÌF_·ñ;y–ž¼§(ª³<ŽÝŽú[ƒâä<^W̉\Ô¥èÆ%U£^îiéI†Nž¼½Öùk¡€¡!VhèUÍò%)Em[¤Ô=­n‘ù ÷1!5šßçÁPÉ5ªêùŒ¤üÖí™å‚ÙmRµB©þm+×ÃëÆÆýÏú/Ár©0 %ÃCE¦|¦Š 4øŸÝº=zQYþÃû‡ ûæÜ¥M—¿[vö3þéûPL}Ç ~‹®Œj+M=Qéä%gRsïê]zÈ­çÜóS–Oœÿ|,ý§ ™Ž¶††'UÝ_Ž8 ËîZû/¾ž:¤7ÔýQ]ë‰ÎPu§è›óŠöšR ‰}míékÚ ë#ïœk)3Är­Ñ‘GÅû:µÄnÌâüËàÔÃ8 Ò6\û’¢Tãq³Ûèat 3eøøïÿ/G'“ñ_>Ro€_ÿéÀdëBàê'²¶1 _H8N Ö=µäpyô]qùÕ "IR¬QJ9RR¹Þ¶º²6±òKß*d24´ÔU8,»ûÎuôZFeZѹ†ß$§ Ðu<´ å:ý°z ‰k¨J¡êq÷Wf™ V%iã3ë´VÞ^;£³>__é§ö˜´oªRÔø¶«×û~Èsr¿¢éËs `ûñX8¿KzæRÎ?`ÝÓ˜C‹d×n=NhÕyTO²36Ïö~ü‹+ª¬~£îÏK{}ûÇUgÞhbnÿc—½}·^%iMó_+L¸{eÒ£«íz³ŽÚ6{iŸ#þaqîþ‹¯_j/K%pµÂ+>mÎògÛ']˜Ò;“PjÞð¤ Ü'ì¢ ØøÚàÊË s'¨ ™ñ|is¹Î›ÜfŽ‘Û.ß¶‚ãº'ÙòÁý–_Èd’$Ù-ü¦Jñö[ÝktŽ)‚Q»„ŸjÀÆ×f"^tê­•‚ÒIo$”i†nÉ[ý¹C¨9õèÀ<*BÄ ñFŸ¯…_òËéØAeûŸv`Ò‹0¨çwð•çÿÜRš—õçÅ5UOþðš_ÿŽgñ2£±ÎsMïTTÕð¨Œß|?GìHÚ†ÑÙ§Å"ág)Å箼¬Ð£QÐŒBcKê Glì†ësit®¡HÖR‘×oÅ=GqCÑ5B«>RüËá1T&7H’ÚéŽ@BgnEÕ¸ZQ“t`dhòáÑ?$5´U({qu©£³×£TúB£Œ@)4)®V¬ ´ê ­JÞP~!S‡Á5¦¹éVÝÃC x…«$=dm5ögN§ZõB«Nɸ²X»u²[… âs¡U}üy€åq ½—É7ßnä68ìä|ŸŒÆz:N%m-Ízt¤¾c@â³+;~Î,èK‹+EÊ^ ´ªGY÷÷vS‰Ä^>ËG; ÌìÜ£è<#ÉîÅÁ»0 mI=ýólŒJ¯oÊ}qxÑHûVQMÎ@PMþãý½ç‡­í¯g×ûù¡Yž ­ºmh›“|xt·Ѷ)îB¾ï¶µrDO‹ë…™G¨:zÛÌ{†N2*´ÂÐ9«d×+Þ^ôcÙehd‚Q ÷Àµ´*éË—;\ɸ²xý“‹;zaÚö.B«¶…ãOŠ9}ÝXa0e­ßâè1áç3GnO\>>òýÒ°sÎ+6†Ð=ÉkC÷$/^rö³%@ÏyÝ]C7oó™yjΪ1NØõ}n $ŠÜÊêZQä O‰÷´c!¶ƒl¹=Ñ«‹‹R«’á ]“XB£ô¸ô¢Üè~D¿—•ÁÛx–ž÷ÛË>Ùø‡Å¹zX¤§gß§ÆÖËîܸô^puÉ­„è·òQuàŒˆ¯&@·ðó}f¨Ë˜MÛ¼gœüqÜÞä;H—@ ¥2ºUÚ‚‡;ÒtøRQõ—ÅþKcíÞ%|*¬ÊZòâ~lïWgÝxSi£Qˆ_ºxÇ Æ´)†JKÞoÛºyí³ÌÆ`Gÿ ¢­šZóùÉ)C—±ûÏÆé÷YxùLIú‹u¯oŸI|ÿñAÈ‘GE:=çž,ÌI?&¬É>{óò½áÛÞ™I’ŠBäÝÂ) ™OÎ7dÅ'8Z¾€FA–@MÙ퀶IÕÛã’ª=¼zn‚û·~ËÒ¤aЙ°ˆ?`‰ÚÁEv2¾dК+ÙS6ÝÈùùØãâ¾T†äeþÆ*}õU…ûÙge#‚†]‡7Ÿ¢~)uØt#gÊ¡‡ESn¼©40<Ò?®€/Bó±yùüó‘GE“n¼©ìàæ½>¾]ø‡ƒci=>·9¼þÒPT'ö,o”x¾/hõ}‘Õè 0të»Ýº:Œ‰T*e>‹AI¡1¤9`äöÄ-ÈcQ[™­$´ê¡qÉ5‡žïP§kÛs?kvÙYq3…ÁŽÏ¸²¸öë÷ÿã„"µ\\ª•‹ÖØö¤§UI¬<¦tmå \ƒ¨bƒû/Ý¥éè7¤ž™zóÝÞÁ·iTLDcó¥,=‹¼Ìkaçu˜Ô&c[Ïe:Fvãf¯²Ð1q õòô²ÏÂ뫨,]?ò+³öä99>ÔZ‚‰«z+¶]l;pÞ›þ³—«b&ŠR!`Ù]]q}áÐ+ƯÇ0T¾é§UiçgoJ¡JÜÔ#põ“Sž“¬Ÿv$Õ@£sµ*)+öî£+ ȸ¼ðNò¡à×j-Q¸~ÉÔÐ=õYx}-®Q9•òoÁ&tÖU•´}¶Ó«£gÿäîlÎ-ù^¹)‡RŒ®Ýu¼P‹ÑZòþŠ÷ôãóýœô˳ççüeÙ¤@Ë_2±Ü¸¾ªdêÉù>uËî®’5•]bðͤÍy¯÷ ½¦ÁI^{Ù§-âºü#~KbŽâårŒJ]ýêtàÊû,ÿ¥±}ÚËRqÍ\óåmÕ{®¾(öpŸ°k]ZFN¤´¹¢ˆÊÖ›¡’´LËÔ#ë3ïPêæÔÕT-iÎ}Àgæ©Qâºü5ºV^£j?Ý=×à ['hÎ!ëÓXü9•®•·”_ÈKº§ûŸ€Ý‹ÊïzŒz|qœÐ×£2¸— ã÷gZï×çÿ¸bþäZAcP*Ý kÇ:'xyû¤jUR& {Íà™¬Ó1¶Wž0})ß¶çä‚Z‰§´¡hfä†ù܆Nàš¹ÄaJÆ=K_ k*7X8eÔO&MÕsè{8ÔÏ\j™ÿðåG?µT0ß-èDz֪‰ÞÓŽ1˜4Œ$3ÓgýjeÀ¼$‘køŸËÆOIüËX€¨_J=ÃÎe¼K+iÙ.UÇ”7É¢³*„/×\ÉN~—Ûìâæ³:ñÖÎØ¼+.f~x_Øö®ë~GÍÈ,|¨i•ßÌ«E¿Ém‰Ú—Ïèp.½(Ÿ•Pš[/PÆ0iXtV¹ðVb~kʦ9g<*b <÷§Ïø6·ÅëEVÓ±£K’vß)üøKzëœ*Ñ'¨2aË#]ÆÜ—;Ô%lëßhij¨Á5 Ç ý¶ú²I ©hÇãÍA5·Öø¤ÐYgÛêËúÞÿPÃ{qtú!=»ÞKè\£M9/®‚LÒµöž6öÇŸêASõÒ¹f®Q:»AÇØaŠÑÐV‰ÚSÜPä k.$97õìì}ǀфV݇Î5¼¡‘ C>ç4ŽÇÌ…dé[QZн¨L^ôŠõÛ³‚Ö&LIÜ7ìW}¿é0á×ø—<1KßzÅ?¾óîi2×è–¸¾`¬´½ñ¶V)}–°­ÝWãFRè:T­Jš'ªÍsÿC ÷·kŠQxר [$\ódkɇvRrêÓËÛWìs5raîð&‘(…–¾ÁZÇÓëÀé$…®ƒ’$¹w6£*q1ØÃè{õ ƒ+m/O¿Darz~N|úÞeÌ&nG|6†P˜œF­B2Õã§H&À¹%½Tû£nÎx»¯—[1ŠQêàoD>_Zð«¹ï˜)øöîé/¾³Ï|ÓÉM{;I#5Ó9‹ÓGíep÷ +3ž¼ýž1°àyK¹Yxd4 @)j.o­Žœt0ÅP\—¿;ïáž%é—w¹ìyUòõñaÖg<>+k.wfèšprâ6 còÍ•EÅÛ‹$k8Q«’Ùñ2ù€Qno#‡¿v ÙÐK«”MôóžVðpçI‡Þ#G¹yõŽÚ9Õ#†ÂàÜC© €¤¡è„V!Á5rÑBŸ€Á ²cV÷—µU#•ï.ÓoykÍ2°)I‰šü3Kßò”¬¥ª^ÒX‚ýÛÐÓŸ W€¶ßò;ýÔÒ¶•´Ô9dƒBÐà@cñíwŸ¼itíégŠQP N" F†ŸÏP:ÀÍP*o­’2xÆàcÇžã-~‡YOïÝÈ^±ë=ÏÊk~ØÔ‘ñòÖ«º²–ò¥tžÑÆE#í»žï¥œpYFU­˜:ôà´s•ØF¶›[‹’IÖ±EÕ¤™>+¢]ªñ«n‘»ï¹oÓO=~ÈNß Z¾}/±°ÒÞ¯AàÆ›Ê~饂d NÔûÚóg©%ôw3ØZÜþSm«¼_LbuÊ£ÔÚ~¡~y†Ê/½(¶KÕR•ç$àÕ-²é»nbP19E4 ”N•1ÁwN®qLÈl¼hÀ¡•Oh=ÆÃF·(6±zï³ÌÆ `ÆgÒ@ñgc°:ÔéÁŽØ<_•ïceÀ:3s°õj;Ž‚ÿ²Â¸ºlšüª÷?ÖÙat[>Ÿß­á(„ 镹°^ ¤éqè"¸×qœ ua§ÉE[qœÑéüÜ=Ñ íî.R™t°¨ÉñãÃPMNÀÀö„Aõõ ]è½zƒÇ Ì~àœÈ¦ÜçW?y|xôM¸‰ãŠa(°síLØzðœÜ»Â7vD¨ä=ÜóÌ6pê†ê1^ŸX<íåiÈJKAÀ*` ]-Ôå?Þ¿ÙmÜ¿QwîÀ°îЪi©Åí PZµ£¤¾0oìÚë½_^Ý6÷Ìù‹CÆù[¼¶ ˜²A»S—Bܵ“0if8$ ‚ˆ­ YÑ—Ã{WÍÄ;x…®C=zí|ßÁ#HÀ’›+pœØníÿê¼ÌZCP¬>ïÞÖÌùQé»Þ>¾1L-ðôìz‘(…¦\0yäšcQç÷rÍ\SÀËkê‘!Ù ê³É^/Ù@Ä_‚NçâÞÀû£¡±8NÜï·ìöæª1[†n}GÇ0týÐ%ð4½Ûx4v2¡Q=|»o„ÃP"xgRAaâ-„ĵ6ï?egóíz·*>û–7JÚ†ÏØhVúüäS¥¸)D%nQ: _úA1L«’aöü®ˆ)£³±w{NØ÷a/7âÕxQmîTŒJwÃÕrò?­þn Ò*¥ù©>ã1M-h© N»ž½?ªg׫ØÑ§ÿôÅ£j*ÖQ•Ϧ*;ÛACA¡+¾ÃÐö77v§±õˆks¯»xû0«$I;”ÊP~³ “$B¡1eS‚,›˜|³,Šò»?dÑHûs=æ ÓÕIÆyT´À«×æï¾4W׆?…­Æ©Å피lB_‹+Æ8]¿Þ»eñ(‡…®aU*Uhyos[w”ÔKØ.Ìf·—Ç¢.§Ó°:äî‡Ú6ËÞ3ÍÝíÀLO.½I‡A)Á0Tó¹L°@­!(zÚ%Ý"€Éý­6zÛê."HrG\rµ¸¬èýÕ’ó[L×\ýr®Y¬ÞhÆgnÚ:©G¸ G0cu…Z.lÉ«Më4xÐÚ$*FaãÌ‹ ²Z(vƒ›L¾ù`ŒÎ~ìØô²ƒ|²Kø‘$ ó'ôï:Gþ}ü›Øß³ðbÚ˜¯·Œ& \¯ 7sch°äf?c{G]+Ÿw;göÑ|U§;–xëÁkðìQL·ðë¼^Cçð,½§ ´Îñ1ðîûî°uLœ|s›~uÔwðÛ%®Ëwñ™uzŽl I\)nê³dßíc®c·nÖ(DQ\ ·­yÙieÕº#ê^˜ÏÌSë)L®ÇÔyØÊKYA“f†C£@JZël´*9‘_Xæ‚ãÝwö?ÇМoãã1o¸ˆmdw¸­,e™çO»1ø¦K*Mä­¤;\£\£2ë9ïbŸÄ„Û#¨,ÝäÁ?…ÉåmÕZ¥~UdaÝ3xSCÖ/¼€ew÷ ªÅÕŠ"ÿÅ×&{NÜ5WÒX‚I‹ívÜÊíÿW&7¼3ɳk S¢&oÕ³éù¬øÅÙiÝs™$ ¡]Iâj¸†²;™ìð8£1Q@qÚùY2B«ŽdÚ ^tpÇÔù4€ž]o{&ßL]ü<ªoѳÊÞ\Xôô GÇü£!€ › Y EHA IÐ*ÅäÁùúÅ¿žêÇ1q\•÷ìÌò çO«e‚¹ žïjÁUÿ™?r'/éfÅýG¬“ð‹3/ÉIy_õ!&À®G¯h£–¨e ¬(ï?"B«îÖFœF­œ€bT¿1'L½~£íáâõñøøïŒÙ#Vhé“ö¡:‹‰kT*èŒE}œðj ŠÑ†â¸F $k¦wĤB¿•|OÆ—ú>‰œ‡ XˆJÜ4^ÚX‚#(–'o­ôë²EýRêv.À$ ¢³s0Ae†ÈöÊŒo&çºñÎ×,ô™ÇT)mn=_â÷G/]Vr že4®“*µ®Æ<úÅaÞ&¥MQ%ó†ÛEph—@ªÔö¾•Xí0tùì*5.%HÀª[䯶Æìu<6M†a¨œÇ¢,v³ä^*µ8@m«bÆÓôz€s; ¸ôK= âNª"íoª'H™J+—Ûì›TóC‘#.mÈΟÝöcÚ½µÃ0TäãíÕÖPµÙ?,.a\äû•áZåÈãñ%C÷k’E=ç]¼êwF—Çý¡Ÿ·}$À‡—ç!hhÈ7þˆî&þ‘ëãì³2‹ùQéa6æêš\ÝŶü õ0ƒo©cìpVÙ]r„Î3ZHÕÑñòìqq°§1pñyùïÚìO»`dèÏpüI1ÈìŸ;ý°úF×ñÓ³ëµ`Md‡uR¥ÆÎ5|$Áãê ‰Cõ…Mq IDATæÐÙzÍÐ#Œ°ô,sP í…Î’sL—¾´àuúå%9FnƒgH›J_kd‚§f,¹ÌÐ5ªl’æá8ÁøXØj}åe%E%iIVË„‹ÔrA•ÉS“NãäœI(eŒ ¾‡Ðª 2¹`í÷ãÇæùÎßu(*OP–ºÒØmð +磃]œ{›ßËAO¤UJ+Ä Åcuy\'3Îèçoœ õ‹¦öš³1ªÈÚÎ9hxphÏq³V›½ÆIW‡V÷W'oÕ—·«{ŒÛ¶á7-¿¾§UߟÏvjÁr*“'Ÿ7ÜŽ€'âºü9~tq¨Èyß“mdŸÔÇ£€Ð¨’ÔÒVgŦ¼:5ÿßÔ.^ÒTªÓsæ‰Õ†΋J'W?y  –¶+@Y™tU‰ (E-©ªM½#‹yôzQð®äñ¹w·}(¬þ2ÄÀ9¨ ½ä£ñÚ}—wâÓný7¼˜Û)ôZP MܹnEÅ1éÇD1ŠVÚ\ÖÐRøn¤¢½Æ òÝ¥µb…V¡’¶Ù>xô„QÑ$5±wvû· Aâ5KÏÒ¯¼Q²lø¶wWŒzgä„9ÁO·奞™úŠgåùìUìñ8ÿð;‘¾sÎ=l­ü¢UJ¡½<=EÞZé>÷Tú.çàµ5Ž}Ô(…6,tOòCçþ¼ž3Oì÷}&ƒÃã{ܽ3õpŠ]þ?¢skòï—#(‰«äÞÓŽ]î³èÆþ“§/nm“¨ÅM' í²<®‰zåƒJ¼OÕâùZ±{šÇº–œÆ6±Ú¬ªE¾õiz=·¬QöÍKÛ;N't[Ī Zœ”1i”D€–¦T06ëŸ?nìÀ¢¦ºï¤SQÐh c E|µÚn*t¤Kk¢QÐçËG;uÇAÓ©ØÃ~¦/¾Œêiòš‚!¤@ªvKøÜ˜qþײY ·Lh÷2SsßqÌÒÅ‚ë“Xý”‚!è8sŸS=^w%åé¢/¸Ö{÷ð@ïat®a³‘.c׺ñ.Ó`ÝòÇÑ«ý¯÷÷êadéÄ2ø?öÞ2<Šu[%íÝéî¸7Hˆ4‚»Î‰{p¸{ ¸w'‚k$âîîÚn%çG„ sµ×½{¯uî=õ<ý$]ý•ßw¼Ãļjчþûƒ<’º÷4MÃðNm@µ×Vý­¬»šÂþZsëKÔÛ­"+wCŸ ãsü–ÝËßr#UÜ2îľõ¹»_iû€Í ް?‚ AL{ZÂ¥ágvRäd^†YýíèKo f„ÜN¯{ø¥ÔÍ£sS½æ’aNôÆk)k….=A“Ä*}»NC?^0iVS,ˆQôÆ_DZVÝ|Þœ…a(½Ú_õÊÐÔâ:†¡ªæ¢yIì™w)B{(l¡Ý‡ùH¸¼è٥ÛcGŽ™Àf ! ¦~ìßÁhÀŠ‹Iªû1e£mMx„Cù£Ï¥_n½Ž¿8?I.ÍÓ|91ñKѧ«/âÎÍúìÎKU¯é¬iß{Zo™ó²šœ¯–íÿ}s»èÌͧÝërcžT¦ódY#ŠrÓ.¿N¬dÝ4+ÞeÈÊI õõ/>FE†FÇ¥ÞŒ>:ú¸˜Ç(«–hºº[ë9v´Nw±Ô›¬#){Sþ?dñüúñ;NoæRZ_ðm—e—qJ›€ ZÏ¢ýµ†mí»ùC Š1k²¢z‡¥Í¼{xñY¡•{å„i³Ó<&PÀŸ3F÷›q`†§àÝ…5ÅI(pŽ`¿¾€%x¹-0¯ÓŸkU$=]däÚSûêú¯ †wÜ6$8ÊIJóèm4MúݵÆgÖ9& ÈFYE¦£ÇÄãqŸ—þâä­Îó®ÊfÎSbonš¾!Gdãuµ6ûã÷þªÜÏáïœ,EéC·GuÕ)·+ª †O>ø¥ƒ¹×°S„V!î¹öÅæ×IUâÀõoÃHÒØÌsÈÑNý§ ŠêBž™÷pyiü³½‡Â ÓfMÙûÎ`É´ÿ[e÷1ñ;»ô_{F5Mü‡e£W¼V›ñ¾§ZR©ÕHk ôºªŸ¿ëÄ<Ÿ²gÑ/`P·@’ßuتmòª\¡•G‘- 6ô÷2Uî ÏàÞzøâ@mö'ÛÀë¢ö Šé8~ïÅVß?8§bȼ}»tÊ/›®£—¾ØâŸç3íèIYúHA2&-Z2ŽÀmLÈŒ†üoãØ"SÅä™ g—7¨;¿¸~h¬º±¼Ü²ëø†1ƒrŽïßú'¡––[tU=aXà䂯_GýÇ‹‡:Nl¹°+o c²ëR”’ál.X¼nŒë±§âF×Ë´ásØ­ìÝÑäÀ©çyqy u‹;ôïä¨ý;”~ÈíôšÄ‚FŸƒÏr—Ïò¢æŒsQª‰û .¾ŽâÉK†9]ÿÕŸ· :ú¬ƒc9ë —ÈU„1G#!+ÇÂÖšp?Ìh¯¹}ÉÆN/‡SÏóô>gÔ¦ (biiÀÑV+ÙÄ;—wÚ°û ÀÚå?‘ßœ…}f·~ïº8\deiÑY¥%½HŠæ4ÖU¿ˆ>:ºõºâ?ßïîcÛZvØ€mQœÌùßNÌó©þÐ\?5&Íkª[öšv¬Z+«ëžvoK.IR¿e÷>Š ŒŸm ˜Ùv›×R0 ŽGYÊš‰£,6Ëlk“wMíH5»ö¢‘Å…\FÁŽInó1 m¥ä*QŸå·-VN HãgE†îZ ‹×ýsYeRÎèå'ŽÓ¤®}¯þCFãZvh¦'}øQ¶‚ÀIX»d˜SþêKIÃ…\Æe}ÓaN»†#Or.W7j²œ-;åj‚+WWMÅìð ¾¶7¢Òj:Äd×írÍ`Ÿ»ájJÿˆWïw%^YÜ$)GÇ~óSÄv¾þz¦ž:•ÌñãaKV\Ht~ÿéëgœÉsÕ7µr¯.Î ùzfVï…g_Ý9›øøèX—ñ`ê¡/9½;¿ŸÞÇv6@Èíô3þÜw©5eö¦×nD«¬¸%ôñŠ \-Þ#ºXDï½—eŒãÊgã¹ó9hŸÇWøÜøPÌzY'ÕN•«‰ÙÅ5J/—ñŒ¢aë©çy»Ç °ÓÁô¦mQ‚¤Õ°ÃÂæ%4®K+Ù<¾Ã)#÷|ÀÜVù-9›àó-½x¿FG&°XfUÄ–%0X­ÅÓm•À¤ƒ_ŒêŠÓî3Ü]ÿN`Z”ßÏñ CUj-ÙôžÏGV^LrÜä‘sçòr í–"Ye²À‰fj½\ûÑTÄ*Qèdfüy   9õ"o¤>Ÿ¹c²û†]?õùF ÔŒi®Rn«üÊJžƒJQ .?nôþÅXè9à6„,mÏ7uªÕ)ž€o_ãŠC$†"üʵT¡!ÔÍý`XÍ4Sô“oå¸FK‚(µ$88+¯RŽB3›‚€IQµ²Â@ДljPh“]Ü;fλ:qÝÕ”.4M«Qà ÌS=:;;¨Ïlýú5Glñ–Ô©¤½MÓ³Lx³º/º9‰¥gä‹1Ùdyƒªž (îŒÐXLKP­Ig ÁæÝ—^–ïÓµsTÄea’z¹Ö•ÏÆQ §(:µ©Áf ö‰ù+˜8&íïeú-³T:ú}JM )o˜Çt—)u3øÆG>“VkÉå§žç­’«‰L#n×'ß*¶×J5õ2í¼®†åJ ¹6¥HBd•É»¨´„ƒVIû(Õľ”ÂÆË®–zñ…ÕJïÌ2Ù4AÄ4MÛ8™ þTjÉQ*-ÙÑDÄ–ø¹V”Ö*÷p˜X»·)Õ:ðîåf„Üù\jzñuAyA•|ÞáGÙ½Fv±X=ÈÇlƒJûa¡÷ŒÓn ß¾ǪåY ®pwüÅùÒGU?MuU-¥›™”Ÿ6àÀ ÏëfÜŠ*FÆù·£—LG.?ÿß*À䤄/μý. òÃrkkS€~r¿ñ¿E œZ~Š*‹ÿbÒv›ßmÿ%õ+ÌÑX»ýîÁ/cÇo›ö“Ô?¯pójrfôµ½"æ3¯*Ô$¤•H/qY˜÷ÏÙVW£EÑèçÌZ€’‚‡¿¤½•Þp-AÉÍÅìÊ#œ~&¥•jò·Ø…7àG¯sM@ÔÎqÁ;¬´2âvöko©PhT\ݨý¦”FxÝÕI @~•bï­¨â™3ûÙÑoŸøí8ù,—õ%){—»“åãGý—ßYÛýL@GË…½Ý[IúoùÀ¾#*$`í«c«/%™T4¨FPZ[Àa̹¾ûXDŽÀŽ[é6}78°æe0IR¶÷ =Íí@Ó@UÔ«–\}WÈ=í ¼M©Fåj¢|91Ï眳…`ŠˆÏX¯Ça¨p¥Éq·V½L¨Ôk±Dß§T›?‰-ç\}W8øUb¥#@LV/ücɘ˜¬:‘…ÕÀVå7h[¤ðVTñ_áK¸=4•…n×>nÁHï³f¨œÒÓ:v¨¯¼Nªê¿x¨c‘—è@_“Š¢‘¦¹¦õÆ#M4 ¡¾æ’¡¾æ!½MKI’bäW*¢Fvµ¸4ª«…`œŸ« ??APÓ!Ì’›²¿8¾¦;‘Z,‘ZÚµ¯ÃØüLUC™/ߨÖôÁ—r2æë·ÓLŸËaÇ#ƒnÁ¥€¦¸F9hÃÕ”Áai_e*BïÛÙ™”±ˆíhcÂûJÔ.©Š KëTïûz˜¤´MLMïcÃaáL=£@£#¯10ÄVGRŸÇù·+¬’¨«p íI’ôU…†8¡%¨È™V\Ù ÞÇaa)óÚ‘(u’ÊFuKCn‰RK¾oPèæªu¤Ä@µ\GR7¥*béÈbÞÕ÷EÃs+äãQv=ÛTÌ­•iêÄ<†V©%Û õ5ÿXV§ZHÑpŸÏÁwÒ4D•7¨Ëó«â·)Õ•S{YÓ Ý0&މ(šN·7zPceÑh[p‰olÓØ©ë`ž‘­Q[¹rõ£|¿ýú–üµ°`Ý‘i0ο ÿ”òàÙþ…â¬cÿ æwÑ/elÓ—ówÔÛ¿T3¸unýl¯‘¿Œ Ûrù_ lZrU¿”†<üZÑ[¥!-ËÔëp å mΡ‡«aƧ̺:Š«âeoxleû]ÁÄ~^ ¾Ý÷CqÒŒÏÁó8,,ÿ¿Úÿ4ävº‡‡­¨f¨¯y9†¡ºW‰•iõê¶&¼ƒ…ÕŠyC:™ý›~Š"$¬™ýì.‡¥yf—Ë—¾N®Þ~äqvbïANq¿;ÞÍ÷ùí\¡IV™¬õ†…Lq'[¬˜¡Û£üHо"Qh÷«êK;ÇdÐa$IµëSïFhThý>fÔjD<&½àTÜè×ÉUÁ|6~º¡¬pSϵ/¼`hœ 0~_tÈý™ž¡øY^AѺë2m!IR‡6^O¥UZäjbãEIö¦ü/Í|‘PÙ b_|]¸G¦ÒT)LPVÆdÕy^ÿPÜ7¡ ñ‚·èâ–©Ýãò¬ cËÔ•¯«>—7¨*õùÌÏ'ŸåN5×gk «•KꤚÉ…¥\Ml:‘°hˆcÆáGÙ!¥µª m¡\MìÙz# Ï)—½½ò¶ÐûmJõz©’è8¤“Yáß=·9ì)ùìM%µª­ŠŒ!)+U•D}7*£–”)uC@ò×Ϋ¡LNã·óó@?š" icrÑ®NÖ³úÛ&I õ¿«¿¿«Áð×±¹¤Z^µwà¡Q;?öšFølœjNx1 õX1‹‡8Œ[~!iv~•âÕ™yÓæ °¿vða#x’».èèWËè½îJ²¾ƒ?wzo›¤EXR«Ô ¹ŒOÛ&t…„gh ¥c`(Éçà~í k®‰xLÉéyî&fxçSɯ’ªL ²UŸ*’~Q#ÕœÞ6ÑMr;ýfT36­XB rV¢ÔíØäQY{¥›‹!}çS‰E€q,"ç„JK¯å²<7ã*8¸NÙÇ¿©)ŠVœ^ÐIål‘õ C‘ Cûy˜¨6¾Ý™ÁÖG‡NNÀ0ôËìãßœYHŒ5ø¬/ä1&T6¨#žlò/œu,Ö¬F¢Y°l¸Ó©žîÆe³ŽÅöÈ)“ΦH]†‡½ñÙ]s½ëÇíÉÕDo3}vjF~…†"´+x"£¯ƒ#Fïþ<²A¡c*b¯»¾¢k±}Ÿù¼v&B ÏZßçK31ðà÷¢Ö‘Ðò«%ø%r!Œèb™ÝÃÅ`+Ž!´L©ãkÚp|~;\,õ$&BÖg’¢-AM=‘3 í>|»ï‡SÏóVÕJ5`"d¿Y>Ü)»-·ÅýÝñ[¥LEú˜^» e}?OSzR`;ˆÏÈf31`âhf—œúÙªÝ0Æu£©˜ýQ¥!ÍŠk”§?Ê6HO>úÃñµ…zb=íj)øÅ•¿SÊjgÄØP[ôaWŸÖvÎ7u*© ° S£—€ÖÃF4öÙ–€>7Wv­UjÈYÝÜ'›ü¸vðHSÖ—’$Åþ¡ü/­F_¢Ô±'ôm¿déy@л Õ¥âÅg]S;R}=LÂ(ÒߥÖ|ºSölWx†WSì¯v¬T¥óXû§«×¦±®#:«¨ô穽mn›ˆX/²Êd‹\-õ¶ªu”=˜Ð4ýp¨¯™»µpAÒ6Ye2,¥Pj_/ÓŽ47àŽ™âÞYÀÁ¿åVÈ·Ÿy‘×¾²A=wõÎ{§{tó˜×µýlþ ‡á/«®)5d$ŠüãwÝ–ÜCü\ ¯Ñ4­`3P¼“£~¾—x¬JCêYr© µN^g¸:bS¯ o‚˜<Ž29]þØþzãá3×?ŽÛýWïC,x’ûqÅ€Ð(Üz,´©¦®a'MS°úRrÿS/òD8†›‰É1 U™íuÄXÈz—×Üì5蚎 ààÞ<Þ3¥HòîÈ“œ[ÍV³˜ÃÄÜ}ÄÉ…’¿™ý;Q~ír\-µ¦"öΉæsN¹¼Eg§i𖫉º¢j%@R´’‰£ŠNúTµT#f`ˆàuÄPèæbH0p„Öè(Qf©ÌL®"8g^ä‰\§´îÅÄØ®¦„30ô (š•R$Á,}RäUyú-¸vqÒ˜N}Ü›(ùuääȈ»2Þß°$I Ë)“.H ߈ ÐŒ ™ûe;Eêê$%)b¾%<Ø}7ƒ«ÐCŠÓ>ÝÎ)“n!Ôò[ÊÚ"½êì/'{,t´0/cnuvŒSRÌ›;$I œ&}{ÿ(,1%Ëëïp€ÿÑK~ÖÕÖÿûz˜%©ïŒtsŸ˜.ÇaIÀÌ~vçíLxÛ8Ú¶Û$tï}š‰¶˜µuR­~f©,tÇ­ô?óôŸÅUˆw…gŒËkØl*fÇyÚŠvaJ´–¨p)E˜(¨ˆÏlÝoô‡¹m ,‚¢ñ…vE蓜)$I H’â¾M©×(ýEH”:C¿ë“Ð'9 8†€ŽhŠ~øö>„sE·µEdP_‡iFÎGÉèmz€oâ8#íëk[iy†9“#œ$›§·‰¦È¤N#ìäj9gñ7ç”$L´VPMã(Òzo•²ŠÃÄ?6fM\^ÃÊãÚ/²5ámÌ(•Ø÷ ËYGÒ"+n.IÑ€¡IR´¼¹œZ®"Zq—Gžä ©hP¯ço5nÝ×í@©µ¤ì;z5 ãÉlV€†&VÊÀP™ˆ•¥#éÞ}‡<ð%Î!·Ó…@±hþ±¹Þ£’•].ßÐÊ¥ä2±Q&ö~ñPÇRa€£ˆ®^®Ežlò¿Ï7qR5–Û§Æ}z³ëTøöŠ6úM$ -‚a(IÚ“ƒ£¦iÐúÌEÕŠ©j5ÙΔ߽e²Í,•ºí½ŸåÞ¡0hÀ£ìÄâå+Ι„¼ç o ÎðXxJ'G}Ùóø ‰Rgd®Ï/ølÜ¢N®Åz›$a(!W¨\M·¢Jö‡¥QRá¤ÇÁ÷œ{™ŸœZ,Qq˜XàþÙïöÝÏ,®“j-ÌôÙ¡K†9‘§žç-RhÈwKÎ&˜ ¹¸4± Q»úç¹w>—:€SA•Üìü«‚Ý2ñàÔó<åì~¶—V_NîUÝ] ~L¯Á#¾U8×Ë4ŽL5€ÜØ3Ó¯÷ßòá©´¾ºMhï>u;—¦éóÎCV¶ÊŠ3¹-®Æàt#´J“É” ô6ÍMúPóþy{‘µÂSÕ— žTî1é >K`¤šœБ”ä°0ªyÿ¡àãÿ8XÄgè1}lMx™þŒîxÛ‰Ÿ›ŠÙ\!—añ­ùÙ çßNa Ç\"à2"Q©°µÿj’`á`‡H_±‹µ÷<G³5ZRÇea·v•Ú ‡,æTñæéð¥F0pÔÞÙBßÙIÿN7ƒ;í­ôrx,ÌÒL̲ÿù\7ï0¾¯‡ñ2ñM­%Q…†déqƒ¼L¦ïò¸½r¤3­%(”ËÆLlMxÅôïúµ7¼koÊÏä³q›¹˜7Ðþ»µp–—qßH•bkÂKpðVÀìí5~ù†Úxæ]Ä®ð c€ÙǿΠàeâ\ZV6B#©Žx¼Á/W®ÒÚS$€r Úa4E‡‰éí Ï0yø¥TŸÐ(æ—¤|8rp†G}µD­ßÜóÓr[µŠzõÌïÚ#êfgÊ ™+Ø"ó.@Ó WK=<*­†wñuÁ…»X»¯ IDATs¤èz!Qø8¶|>MÓ…{§{ÜUhHŠ*à0ÈfH¢¢kZZ‡¡‰¡Mß1Ñ¡¢“« ÚLÄVâj…":Ç» ³£¾:±™˜Ö×A|ÃDÈõ÷0Ù¹aŒk¯yíÓ›]2tZ‚Ò5ËÑ܉fâ @Ð4h>ììM«µ¤Aª»LERô/]ð¦nìñ= úkc¢y!C~+ÃObËYeuªž ßó9xyE½z­±ˆ­°0àˆæ°k…-ÅæÔÏêîlPjiÀq!(zŒ)?(£T6ïCZ­ƒ¿ÖÑœP#Ñtò¶—˜N·¢ŠÿìæbàÝÉ^ü¨¢^µàÉ·r‹fY|è먾¼A]ckÂ[m"b-7°Íêol…†¼ê`Æ?’W©À…\ƱEƒ®Lléa# E”Á;L~_iÍcᆽÝc¿f×Ú1ÙýuGáV¥†p¹ó¹ô_}ûÎŽúÅ5c£B'ò±wv4|«lPÏëö×ñ¾û™Ü—ÛbBÇ<‘VdÍâˆÌ)ŠÆCQ oy‡uÍ÷Aq&M‰ëK3±æj3:÷•6% „F©m.ßA) oÛÑï— ðÿH °¤ð XÙ˜æÀ?Í+º`ñç,’¤zÖ˵­¾Ø¨cSAyôZðéÖ®f‘$ŹUü­4mKµú ~•åÅ`jÞvø[ø}àîýPœ»¼|íÀáêF5×@ÀD1 •€˜ÈEÐÅ?ÑBÛòžŸ÷—‘ÒDFûâa?0ØáÜiû{bì6¨¯‚©˜£8ÿ*ùùˆ¤‹O>g§u]tëKv©7ÓçÞ•X•mhlšYW[³{XÈÇé ^£¡)ƒ¹'ãFEŸt¦Ç’pyEuííTúÕʈ;›"‰÷s×Û#v~úÀf`ù2ï‘;kåÅ$ÎÇøl…kGßb>cG\RfULFÕ==>§„É!@ÓÖ˵[+ÓpHоtôë…¬2™?”¬éü~gxÆ…5Ê¡Ûn¦ÞN,hÔêHZ¡Ñ‘KnEŸJ+–ØÝ?³Túô~tY×:¹–¯ÇeŒ­•j®¼+ôSh—í„C3K¥q M.­WÝK+Í,•1\, *«LÞ«Q¡ã|H«™—×0qÇ­ôH ÎÍZ™¦KV™ÌÝÖ„71&«îÚã¯åÝåjÂÀ€3€¤èT™’h¡ˆé•·…OT²£Ž 8ïøèkÙ»ÄüÆqŵJ±¹˜ãû6¹êEïŽ&­rqeǧÖg±kñÅ_Q"~Y—»<}Í5¿{ÞKšÿ^}WˆLéeó QDNæpt™óž·I¸ýc€»?à#SNÂõÓóaá`‡y§šVÿPÓçÔ©S7²Ÿº°îû¾)xÜü-š ¥mßÁû7]aT?»¶Ün?󼵂»=& ¾~¿™~äëñ/ïžßØv(‚á1 %=':öðêÞ‚®~ßSï‹'÷ƒÐk¯~»ÿÔ„àæµâ·¿ÕÕă‘÷o³Ä?/‡@ÐÂÉ sÃÁæ7}Pþ¦d _q1©#Ÿ›e–Ê¢ï¬í^OÓ4œ~‘ϯ¨Wu‹ÎªKz¹-°zßýÌ.·ŸEÇÇž Ò­»’ldoÊïV\£x<É]>ëX,×Ê€PP­Œ½ø—oÝ©çyC®4Ó“ºó©D—×ÀÄQ_𦣷Œïð ÃPÝý˜R<¹ q¦JK5úµ7|œ^"f `fz؈˜õr­+Š"\1q£A¡sUjw>§Ìõ9áåõªJ Éå³ñüžîƯï|*ÑO.lS%ѽݿŽóo—|ãCQ¢jåVGn˜ŠØò¢j¥sIr1G,îø)½DæÂfb´½)/*¯Rá£Ö’\Q¡HŠLE „ÇÆßÓ4m®ÔÖz\F•·(åcFm?•–Y&`ão;ÚŠˆ¶÷|ëŠi°õÀåÿWå5áëfðêüÇ,˜ØNÜhê8ñ1½¦½_{£ôvÿ·^œ‚q¾·Ù{/sn~•b”‡pÒüAu¹™—ÀÁezëï{®Áš©!â[¹ß¥7… ákºÿËÅ·fŸ­S4žb MqgÒ¤FqéÂú‘«ÝmDº®‹Ã·*k 6 Ûu,F1ÆåÆ¢ÄÙz–Ê—Œè0úäó¼.µùñgPœ™ƒ`Œj‹èËÉI¯×]I™XxƒÍÓ‹æk>½°Z±<&)wŽw»WmD3Þ$U=/.,pðêè²ÕƘK>xŸºŸ'2ŠÓÃj¼öyÿvØ(×¢;ïd8¾þðYcp¸Š1 ­’[8+]-õbÍõ&þ]ç&Qhõ¼G,½häÚëbLè˜'ÿÇ \ÿ–'-K71²q—¿ØP l^6‚]ûeìíËg`ì´9ЮÛƒNÉøÌì ‹}ÿé†åWߺžy–¹FZš¦ÅØü5ñæ6üw]WÔë©àß÷G⇠£_Ǧ¤¤<ývv¦|ú‘¯íëeêÑFÿÌ´Ÿ‚ì›`ë4áW…p*.ŒÏÆk÷N÷håL_t:þ—…ïþ_ë{àÂM¹µöoÃkÚ1=´f‚ ]0wRòÍUuÿ.ù·7Ú8þí­g&ú„}<0l_VZ§´%£i`3p×èHªF¢I [ÕMòowQjH+EMÁŒÁI`p…y„JÆ«'u#bkÅ] þßun_sêÝHÒ(Rö?uÌÞîÆn&¿<¯³r{KQôbß9µÁ‡‚~ ß;m,>ωù–’—ú¥‹oØ$?¸Ñy àjß”õ\÷fšª¡Ü²Ow¸“ÜÞcš±ô\Â×Çqg™ûŒøo V~õj3ŒÁy–üä]Ü& k»ÙBK7Äeغ9(“#ˆ ö¿ÜøÃø;å×”ÅÄh êÊÒs &8†&$ån(`ñ{u4Þýs!ÝÅ×ÜG_˦XrE…Ž®—k!¨ ¿êÐLÏ‹.݆÷Ì{“¤¨)Ø9~_ôŸa«ºµº”~=ºwúðîVV™ÓÁÂ{X_¸õ?-—ëO€¡7!þMØ6&ß ÿãaûœ;4=ç°Èbökoþ”W¸0¹B©V)aMq˜<±ÚέË[«ºå¸Zww¹dÀsUCùZvΧ“ïo£°pT}o]+^ÓŽ!T²YNÚ¸ÔéYûÛþê <޼'æù¨à´Ð­¥ÆžØp,¨ÅcJÈ|ÒÔoåXØX4Þ+š1}-síO‡ýÛ&a{..ÿ÷'A0 %‹kŸPœ-Ó)¯']_¾…oâ°™«oµŸÁÕÓxäuYpC4a ÛÂg”¹çÔPqóL‚øÎ¹hlÕu¼UŸMï…žSŽ0<§õÙôž³+<wè¿ØÜeèZÓ‚*y+Ö m‘¨Ûèí¦–]ÆYù­ŒÐo¡ñöœÊv»ËÊmLˆÅ³¸ ¬Û_w~ž¦_FN[Ò;æø„(€-7RÙîãv[¹Þnét’× rââ2|ƒ³Ûèí.n£·»¸ ]ëÜËýÍJz»æõRÖ½à±03@q¶@Ð~Ô–Ûž³fµœk[ 0tŽ·J«¨-I¨yž®ö^ð>¥Ú´ë¢[‘(†…°…&sïݺz¯çÚA$I¡7¯cp„B£ü—Ÿá˜Õ>ÿÒvÏ·š.¾våÂ#–ÐøÒýõ~IN=Pyuž…FVÃ5ÒcýÃíËk¾W!šé6Ô×¼«‘«Ø€Ïôìêdðvλ=\ Ës3.µŽ{|ç2õµUvs1¬Œ;½5==uŸÏWi©ù®ÛE’”øá¿;i÷¶ì×)%‡³RãÖ·=æá™žï“o® apçêó¿ÍnÂÇÝ‚ÝæýÓ×½añß7ˆßº|ò1ì=k~ø¾}õ Øzº-¹g+¶ñq[·xÚÄŸ÷qáM#Löë7\Ñ£ï0%¡–/°ñêëßkШz=˃+++;a(Ö>C8ðEßÔáŠ-Ò³ŠëŠ~wNH3,ij‰ðËb9ð ¯UF]~ªè@ænÿ•´`L¿9peûß“‡,ºøÛõ‹Æoû¤{ÖüÏH‚p˜8JS$Åäéóçžø&íéNŸ|–˽ôX,«ÈrÉHçXÐÊjóæŒ›ç1.d:S`hÍ5lçPšðTá;çÒ4Žº|xr}-¡’Þ½Sa†3¸â:E½ëè a«àIRˆÏ´£+išnÏØJJRh€A#,±A1| …bb´6pÕ®s›“nmëAÝZô2âÁ÷q»¦§ÜZùøUÔAš"IØè”’pÈšÚÙAñ4MÉ1w°J© €ß¶ÓÛ³q¬ÙqíXË6úÉJö} „J¦ƒ&j'(þtâè[äòí‹âò~±tJ‰–É×'›ùÔ~Yo?ßCÏ¢=önGOK€!ÁQƒd U6†¡”ãÀ¥ŒŸÇÚé*•4:ê EI϶í¾›¡WQ¯¶2ÒcáB£zñPÇŠm7Síëå:aã’á-j–žK¦K»Ö—¤7Äž››ð(¶VnÜÉ;užÙ®©ÓýW?7VÔµÔ«{nÈ÷Rû¡yOœÖg”éñyÙë®$ó8LŒÅçàamD²^nFdeã{3[ïÜ"ßÜnKî4Æ;úöVzeY—Rs£¦*¤>›ÞÛ«d ›/~Nÿ|xÔÁØg÷ÁÁõ{ £wæ–ö\û­ßÁÝz ú|n‘o}ÈítÁ㨴¡Zy-ßÕÍëõé] Ö ‚£Ôþ§—ÿŒµ´ÁðE‰©Ù—SsÊž Úi3§¿š"´É„Z:D-©dØw]Ê›§åVÈûP$Ñ•PÉö±…¦Ëµ|(‚ ^c{X%€¾F^·p®å"œ-¨,þt-ÀoÙ½Pµ¤ª7M‘«;ôÇÕ·zþ5§žÐ³rŸE‘D [d6_§’}U5V,æžy½j³?Zs Ú1Æìùì]“ñ!hòø?Nk¤Õ3™|ý8/{q$EÇ &åöºñ©áfq Ú ÷t4yFÓ4®;¨ç†wÖ$I1=&˜Ôwó‡kvœ¿‘eÁâ3ñîö}¬ösqܳ¸ k÷q»'mß´Æ‚$´-n]üõ.Ë%`ÜU}ûÎÅ>öMÌSÌt¸ty×…aM3+ @Ó¨¤8Y=ïdœ±Ûèí+&ì±i¹¿\Ck¬"ËÝoÅãí$I‰#6û?‹ÜÓ?o×…eß¡YyößòáÏúÊ’c¤N3³ öé»AÛ"W­éÌü–^¼ïÞ‹¨+rað6¥zÊ—¤ì}-Å~ä«]t|ÆYYmÙ`GxÎíÍÁC¯CÏ »Ü»s­ïæ3µ²º3Î<ýôõ‡{»Â3Œóžt]tË5##}/¡U(+ ÓϾx=E€ë£Â6ž}?1¹áó›'‡½¦­•×^˜9ŸJNø°æ¥ÀwÎ¥Y$E£izª¬"ëM@i‹»0hÔ¯PK c°ÙŒæøÀ“~?ô¤D0†/Š¢¬®ó/Oèàõ½tÅ™îªúèµþuÛFÃý*#.çU*ÖsÄfdå*“ŸßÞžá©!¨AµYQÜÆìp#²˜«¨-:Oj•0±ªÍùt=ûóÝqŠÚÂîõ9Ñ7TÝÏɇç*k‹>MÙ™y E•uŵE~%ß{N92¾°°èrYq¡ó”žÖ4ÀçÃ£Šš•ØqEY8Ê%I =<Ë+ËÒ›§ª/[Jjp 1ÔÊêª4äz Cé†òœÁ¤Ns#ü}æ@ÐþŠÚµç_ås€¦)’"I ‘T—E0|¸•W±øL¼^iYÙE”Éé¥j,ç¡8s[BbR IRfawÞa°ùÞLž~ä/ïîyœ­÷Ÿ¢üþc`T ŽP¤‘VŸ””¤Ì×)%‹0©À0”BP¬c dƸsbâ»yãúnŸÞÛæAÊ-Shš‰¬=§P„–dòŬþ^¦uήšþwnÖ¡¸ós 5²šXJ§¦H’2,ýz'ÈÂsÀÕôûÛª£ü‘ѽS‡½_sê났Bqæc–À°7[ÏØ³9;Žû¹¡8“¢I _Ó=^hÙ¡îØîMom{ŒŸðõ̬¤æÓg3¸Bœ$)6IR¬Ø3Ó¿…Îñΰ5r]aä¥ÇåñºøÎ:}—PË÷g½¾yZ UÔ¯ýöêæG—¡k…ŸCÇ?ãÙž¯Íþ¼ÑkòÔ1{>X7ã»JêÔÔ£¯eüÚ’ÌÓ½\Ç„ŽÑÎgÐÃü¯·®»šbàe{BY[l›[ß ¬-BA¯‘]–™[´Š"4O¿œ˜¸ÄÆÆv$ÇÀjÑŠ½×mî¯ë±Åp/yCõ—?úu¦ª/ó¼tù¢ˆ$)±ZZý cpNÄŸ³ÖÑ¥ãXooï¸ÜJy†1?aLŽÅÙW¨BC˜œMýeÖtïä6—PI9Å1·8}6½wDPl«)Í£àÁÓµò:ñ3–Nm«äþÑ‚`8™ðþÎב›Ó<&¨ê<÷7&òtûëŽ-Æ`µïõº6': mæ¾ëÂ0S¢A߯oZtö‹#­ Îowô çZkc>\Ì7q¸º}Óš…8‹Ç éðnGϳZyý~B-? ÇÅqšÐºMíÎ=\ߣŒÁÖj90ax¯tœÍ§išâØøOwV5–:ûM¼±ò͵{=eÙÃFé½L`PIÏ(j *?›ðÃP²AZÝzžôß4ÛäÑ ¬+þHjU,€mÝŠµòú`XÛ»~QTç‰1;Nlá<ÅÕÍkëÌ~vJ )„¥gÄí¹öÅYŠÔ]õ²7 Zý‡sNÌ·¤é€˜™šlãˆÌƒyÆöƒºuzØqìŽÃÆÎÝÌ£ö ZslÜtŠÐ¶»•¿ü? !ò¡)šÅPE™w•==5ýÉ&MóSDp&§¾Sç®u‚ÀœöÚ{Ñ¥6ž÷~À9z»¥eéÙ“ƒ4ƒ{ DÖ^ÚŸ‚TTz­¥Ó0¬ ¹d›¸•R$ABÎ<Oªå_tJ‰¯N%)ïm‘¶&CÒ­ Ž‹öû³_Úî=õð¡z™JY_âí;ëtŒÏ´£þ«žýðr[à.œÅ{Îàˆn` öô{[ÌPœ™p}÷ƒ]áR§epE]¾œ˜¸ÂÂg䙳¬¡(ÞÃoÅc|n²”uÅ[ø&h ýwqôM/¸ùíü¼¾ŽÝ†aJ3yú¤º±Ò6ûÛ›}©w6ñhŠ®•×-_<»…2Œ ³lÐÈqn8G/-õóÓ‡C‚£V×Ë4­>3“'Víº½J#©* ãÞ| ËX#Ý£{·]wMíøD`ê .ÌI!WéPœ-ðµ¶²Œ:pí­@#­гcÖ¾ºZQ'ÛFªåez殆jQœ ŽàÀ‰y>±Ûf÷N$µJt«žÌ'5 å§£c#n­î{n‘oL^iMQ:%‚bŠTäÄ+1"Ôòà;{gÞ¿t(—PË«YæË­…ÑÇ'9ÇùT¿îjJš¦8<Æù§ƒò$zþù:õîÖNãG ¹db_Y×€¦Î”„Z¨j,/š>ªW0Mê¼FîüÔÊX¢‘×:R$í˜Ûg-ŠáV^Lòhª`AQTç‡FîîwœŸ  Aj4@ïq‹_4–$óŽÚv걋¡³?ïupàC`£ÁY¼æ€ $‚ –s—¡…ÛÑ裣ßÈ+²¨ˆOéhšÌ_û§‹2îüœ7òª<)Eêâ1 •¦&DƒXÏøK÷o2­îlóàïqyÁPŒ¡"uêýo¶÷$®¯èú´ù="äÕysø|žeì™éŽÌöRÏ>ÇÆXüþÒÒÔ{÷ÖõPDíDńީÑÙÜŒÔiº4”f ]†%t™=gó%,6§üÿ*À_b€˜†¦iÅXj¯é'ó¡;Z~V‚€ËÐ4õ&Îøòb‹N)‘&\Z0P§”ÄÂà [ÆE´%ÐÑ$Aû·7Ì`ðõU#®vo¹­zÖ=»´Ñ\Q·MQS0.æøø`š$QŒÐTÿª¦)PŒ¡ì<÷ŠSàêˆ.‚ƒ…í»·c“+€PbÛNU:òG ìâ_¿±…¦)a§†keµ½™|ýåߤ` Òæ¾kj2#Gh¤UIòê¼Õ®¦X¨+,kíÙ‚àLƒ+Ìpóê™)q¿½Nù©"gqñïcH¢¥ÚEKP“¯¯ÕÊë~„TÑÊÒ3ùTU˜fÔeþõ©Íʃ£÷¥U­Tʺºy]9>ÞëËÉIžI7Vؾ<Ó¾íÿU€m²F¸ÇCS¤ÇÀrSåþL¸´€ž¹x#ŒÛÍ¥ir©UYͬœ1no4£´VIc8C--Ooï£4FÒì)£EçΜ>¡aÕŸ§­«ïË+¸ YÏ2™*Z;>^]óÒÔã—ç.“ƒ™Êê: Ÿãmsîíè4çè —ïäh/xê—D—Å3› ONñ]åhžãU‚ c÷$­*ûçCçðˆ#Gm84Ï1eÞñÔy¥¿²Tu$jJô×rœ:|«ÝÙ÷Ä9i[]ŸñSf9èëxaêwÈÍî‚ àµ!ÎGW“×+fSÿ_¸ö÷¿½¦)ïÕ53纴sóf†ÆL¹Ÿµ„©¬ÞF§ÓZǹèÆ¥×߉DUÊÊJŒa½uÖûµ*ëïwãj[ù53—°÷§~‰^þé@bZŽ “«Éõê©·¤¸Nx¹²º¦˜ÃÓly{b梻bËró Ò¬¬¬ì®¬î×·ÿʨズ“ÕKç¬;?ŽÄåòÌ++ÿlÜÎ<)Q‰ÏlØ©¡Â0 H ZrARˆ¶*«Q™E{‘^Øè1ÙÓô€ßhË: C)—ÅáZ„BºÉÅÅ%¤¤^t­‡‘Šè|Ç< C)¯ qLŠÄ7««©>”*Èt™‚ØM*d·CFeJå„~Ÿi»RJªþŸ"×ÞðXË (òŠ$’’O)æó[ÇS‡þ«ïÎ5• ùxeõÊ›Ÿq0:3€Ç¡Ÿ\±Å£üöét«Ìì‚'ÖŒ ég­Qè¹î» ¾hËÜic–÷4æ±ÖíX?bä¨]‡æ9Ö~wºbG¼(n¬Å× 9½ÍTËÜm5»ÝØöÞÌ™UÎx}ëiçy'åA~>½Æ÷3xzô~áО&<"¯ªÃpŒ»àj[›)')¯ÙÉÑT•QÕ,&’òšÓÏ.ï+<ó¤d¨µ¾rÕà^:EçÚû‘¸T¨òþô¬q_·cù™ôý6ÜÿqÖç'íKBînñü¡væäX±iÿïê߾Уþž ðÖÛ*‹Åma`ËeÓNR`$ETfÓ×N°IÌü°z•¿÷ý? 3UÁÉuÏïÞ™í_Ù,qŽðï7çËÂ[{éÓ>Š¢JÏsŒÀ0¿ò¢Ü¸¼Q´E,#:ÚDrÌ@=ž§D¿°j¬ÕA`ÞñT½¼‚ÒíMoøÒ¶º‰Q3eæVÓ~Ú‡ôäÀfëƒ}ïo}Ó3JÚ,æí¼â"n.Ç™\mmW·T+™àµ¶ý`ÔõjàÀAiõmR•üOÉ–S‰ÃRÑ®‘ [úS„m-~ŸEQ¤¹’–™¨©Œõàêñ¾»£{ë %zŽ£ @­1ïµ®²¶¹"íœïÃÞsN ’Ics;X*Úg’ksYî)j*×á9IG| xêÕÏP3q"ߟžõìG}š²ÿz+ ÿ¿t›ó;û [âD…ìôƒ ;þÖ(x›ù<û ÿ¦ÎiÞéë¤\RðéúºËRuúÁd$z£û- ¸œ…ìŸÛëO%¿ù#ë;‘çÀgÖâ?ݦ1­àÑ«"°›¨¡ï0Ø0a÷ÀîJEY!˜˜Yÿ~¾·*yZªrqQÏ S"ׯ‰X1{œ¼Ö)n[9öœˆ7¿h$%lú7ýšúÞäeäþ¥æƒßJ Õ ì] Ûóý¶ü°­Gö¬†5Û:9ZùM ÎÓúÝ=eµ`ªg ˆñûwEå 3zü[ Ç^Û«gž ÔÆl_2ÁÛ§¿QNFJ×ÎÎþ¬¦glYt›¾íäسââÏ`1†Ý¸ x†=é)§çÆwúoS(Š‚û7]àÊ‹rlõ…ŒCÛ®e'_}YÎö=–ŠD$”ÙG'Vv{KD$”™†ÆìIÎoVýЬ­W³×„ÜÍ_L¤j¼³ôtzòç þäìòv€v¡¼ÇÅç¥3¾À´ÍW²Vî¸þ™çü–{æIÉØý·ó¾†õÝWÝ2ÿwúò}ÛÿmÑí=f’ã¬Ð$‚øíxl5ÂŒÝÄ@âßyOpLž¡ßÙ‹¶]Ëž±1â“›D†#KN}à­<÷qbPTŽÏ¶kÙÓÛ¥Ø×&$IþËqë^,5n¹ag·}ùXéRÖ Äþ蹋ӂ·ôñ=3 à9绉¸¯ºuÈlàÂku­åo¤iQ§ßîó?vÛ=¹õ›ßŸµûOmÌWOÿ[sÙvlÀÅžSvgý«o]}YNs]¹ÍeqÄÉVLÏvÜf±ëòëkþÝ92õÀ»–Ãü¨ðø²¡+þÞzD,ýcïËq×~úþY{æÀÝ—¿IÆ·÷üáý×/„þvBÛ¼äGíÕž´/é³×†¸õÕÍâî(Á6=ãÚOÚqÇvüÖî«n©ü¬M{A˜×†¸˜“ƒZM½|©à˜¼á÷#0-¥°%X™E`¨É­ÀIRK…)1ÀX°>üÓ|:†ì“*ȉœðœìn`_R/R”7ˆbõÔY95sM.£N‹Çz’WݱGª i,:Z¯Â¦g»Ûªß{œ^µ]¨¸½Ñ}á•åS [üN,êcòu‚ ѰÇÅ6|‘"B‹ÇüˆTfs‡ìARù#úèŽÌ©êЩjï$)JUG•¥ )Šjé3zh½ÞG7l}ø'C ö©‚°o*ò´8‹Z:dc„RÜÛ\WùñÒ‘÷ßλ(”à>ÆZœ¥5-’Árœ´²1àÆŽuÑŽxQÐÌ—9i¨0>µ=ÿàìU%mób–ªn8ÍÓ‘´Õø«èÛù&†ŒzógiÛwÑE.!—\løü|¢n¯‘K¬ìz_®¬®awÔäžm-û0Ëz„ÿú×ÁCºƒgì€%kvýTBú™4e71pWÇrgò©Ù–_‡ ûº¸,GdM‹iÞ@% ãù‰!£¾IFe71p\ØÌ*‰?µþï²™û¿Õüw!†ÄåO é?ÖE?`èš1äXZ£®nÙŸz{trû¼ãiXFÊË“4–²ÚôñCæ;˜ð˜ëvo6~+é]Šìcø2<¥ …~:®„aªÍ‘Ír Ÿ|¬cÜ|[M­m 3üƒ•¼FN]ðsQ,?“Î>±¨ôË\Þ{3—~>,„§né&N¿¸Xü%GôÐÀ×J »м6ıË^_¢G^:)ñî©­ ’>*(‘!ÇIÉ«½ƒÈ[o«è'2ZKRÅÙ77ÿ!÷Þœ€ ê ÍeüF5WƒTÑ·+<¤åÊ‹rÝðåðrÏÀz5±zÂÆ#@Jj•içæÕŽÝ¨¤ÅcJÂWõ#Ãï‡À¼ñ€ HÄÙ÷Ä\B.YÊâéŒH;7ÿ³9æ¶"jkõ‡»žïnŒ?ÿ¼ÌüúË’¢7†“ÕØþåZ` (PH䄵@¢8"‘OøÒ)[¯f»À}tÍŽ,èíMTú“õ m¹¡ '¡¨VpbQwm¥M+ÇZVSbœ€¸SKmöÏí5e‚«á5{BÃ:üfUðG0hès C©ÆúwßÐW…M¯ÁPÄ&»‚?Ž )ãüjAßV¡ÜôvrõÞ¥#-r¹ƒ/V(™ë*mTWf¬oìµðÅŠwCziŸŒÌÀ¢£g¹–ACí8LìŽLArœ0gJÁlÆnÔ2õ^`xâa“¢(è37LÓiÞé¡Î Îõ°ñ ÇI¦¨¡ˆ¥ eç«› Z¬ à¹îF¿¥W½û¯¾ë>ý`²šeí¹olË,†.gôõ1tšwZÛfìFWÇòø’嫺ÝÙé gîý–zsÇ¥=ÿ×1À¼÷O{jÙz—`L¥¼-¡‘Ý®O=À¦²xz7µy).‹Îoâ°h0— G>L.Mß}ùí 3—ÑÓ^¿ˆOfrµ†æUu ëϾ]šùþõËg)ù&KO§÷Þ~æÉ»Üü’µóv\¾)m¯ÿ˜WZ·­ßÒ«{ãc¯¥öšº[ ÀmE”kl‡K,3¢Æ’xççì.<+µvœÞX˜>vwâQsù#º’ZòÊ=ýWFm¬ËO~g¨Áé]PÓ¡qèúÛ}u™ãÇkø³þ¾Ú7˜T3´35•½BiŒS쀰›‰×ªRo¯èdN'd¢¢¦²Õ6¶ö€‡Û½Dá«ú‘óÆwÆÅlÊè€Pù>ѹ×g?bØwR6†¡Š¥#- míGþ•cû—3@Š@ ±X!AR«å rr_v€¤¨Y479M÷ÞÌÆPDŒ¡H‚af¥Ð1"soLÞ%­3qv‹P_Ì!¾Zc4‚¤(‚ iE鱘@Kǽ{gÁ0”š7Ô¬CG•…wˆñw«Ç[oÞè^`¤ÁÙ¿tÙ"â(‚Ôïgã;Ä,Ÿ ©JAÕ¢("#)˜BQðdÃ$Û—k'Ø”Îè±kí›–zÊB†@‹P>](Á|‡˜.:4ÏqÇ(g½|6Ã1i2Ðà.>/[CQ”>”ꩳë'ÚäզǞJ99cNʉ©þ1›ú˜¿bûŸ¢ë‘‹Á6U {h ‚9™ÿf/ÈVÕcƒ«gC·ÐW±­Ê~uýÊqkÕýÆœ‘Oߟ`ò´O“Å ¡z~c,¹pZIÃøŒ ' í'n‡KGùUÙ3øUÙ[KR'}X4cq—tT6`(«…³xº[ýÏg·•}¼%4-i.Lº\Y]³òÆÃî€ÆhâÁ‘us—É,UÝ·IL÷1µ§¤½öé#ûºV;#`éÄE0;ô½ À®ùÇí‘;ß0wGìû?ÎüfNAiLŽ£LÐôDÛnàUQSÙ×¹Z½›ò_oïÑw€GÃx‚bM‹†™åÀSŒÁ~)n©[÷ñþj‡ž)å×é"¢ooÌ#EMe)„BÊ“¶×rØ ¬šPH[Û+?SùÀØ}f.H¢Š:jóMyƽÐ1A‰zR~}ˆB&¼9xìÔ¹JÚjÙÏûÌbZ¡ ó…¥ãÚZ[—À% £õ2aó\·QêÂú¢»²Ž†4 Ѱ1Pi‘ šž (ÍU†“¼?êï͈€ $ìøŒÄe©¸T¨5ÊY¯™ HÍšw=QŒ6€ HÎÞ_*Iç+i™Å\[ëZÜuÒ¢÷ðÙ5¢ï¢‹¾v¶i$Š/˜Á7§ÍØ6n~Ñ+L<ç¸Iï:FÛáR!¯¥8Y8óPŠ×¡{L®Šêÿ/ìÜX“#Ý6ݾzÏl€DN°4$ëÔþ¾IyÍþ¹­“ú:ÎÕVeUOtÕ_¤ÍcþÒÈ—ÙæTvœ'’Ñ”âGYØ Cqœ ª»2Šuï(_óp’Bq‚ì!RÕ"~Çf`JA¢]°ö—C ¡Ðî&W34ÔL†“õW_–sf”ã$Ú•¯bN&(‚tï¬$I¡ >ö p1ôlì’ß%`?²ó7hÈÍûŸî0$!©^¸ñà¸Ãôý±½f¸×Z’º‚$I„Îæ!ç—;çK¯‘¸|5‰Ëƒûÿ²UUMýFgF£MçÄb§òm‘Ÿ Žšºš™ÓÖ[ñ™MMãI,UÝ3%ñ§šºM)k)Ié»~¢ÍS¦’úE53级»9aCy£h¨¨¥ràË3+êô6œ¡¬ÝEt£1šú-¹2F.j[£aá6'ã²ß‰óË Øj¸\¢ö}7r²Ò×ymˆ›Û…žðÛm›»ùwÝà7ì[4ÿ/űs2RX$.ØQ“k$¬/*!dbm¯ q_´œïµíCÊ£K·˜\ Aú……Cc )hEPL´jöÈòŠ·WG:銌.‚®L®V;Fg‰ƒÉڹ8Þ±¯GäÜa6‡û¸Ÿé¨ÍË•SR!ìíÒÑÈÁžùéŸò§ãb¾†ÊZ ?(„­íRAÓ¾áËÒ9&,ž.Ùª™95‚Š¿¬:‹[‹ÒÙ„ÿc xšïÊîkž±cV[iZo§9G—)ëX40”5Ù½¦í±'’‰Ë„Ú#† ©Ø;OÉeáÙ{0CXW4ž‹û-½jg®Ëý-ú2‚IQàºüúlGí 6ߊÉÕˆîýËÁ=¥E¹.¸\¬ÌTÑžVR\´H$QpÿjÆô—2ÀæÆ ’áNPr ´UY@hlá•åôT˜Ÿø2·­{ŽjÆíP8³—zØ£¢M'»× ]gôx¬¥Â˜ `”Vܦ(—CWøPÔjØÍ׺,Ø 5ÙÑB)>0:±Òõëv<úPëð•DÚ-Bšë*÷•ȉ¸.< ùš¹’@:[ª)„R¼–Ã@«)30¾HNÿ\Ág¶‹C;Cî\A5„=*îãKÉ‚ Ýe Òw£/AR²ï™÷š¿ùâ¦ÿíAP³ƒgä°½¹è/[Í`®²¶E8‚ Tׯ  R9¥ò‰¥ªÿb¤›õ•G^OœO{+¬/ÔÞñitõ‡{& ãKcªÊ°é©ç.G qœÀ¯/í]Iå¥üz1EQ¤©¶Ré¥ÎÒ;ý¯atf‚ÓØåïH…ì×';”ÙM D Ë&uÔä>üxeuÿÔ³s¾D$ÓXʲmb¦Ö½¢ÚÊ>¶¼(·¥è-ëÍ¡q/„Q¾ {Ö£×Ñ<çD^‚!Û_Ñ\—ErmÇüÔì·dÀ¿KZ R‚bà úNrײ0ÉÓ.®J‰ ЙµO˪Ÿ‹§›ZúêÂS¯ONF®sSt­+4³¬íÚè‘?ZwM2„ÆàÐb~Jʳ(|ápsñ‚aæmt¶J·M_Âî‚ôw/ÆÝ½Er:[ÝPBàR¥³0’TTAWL<Š"°N@ ’À¿ù.Ë?ƒû~Qòh[»=ÁåbõÐØçöŠL/—!S6Š_#2ÈcÕM#&W ;èëø êÞ³#âæÊšœ;;æyž2‡"É*aCñ†o¾¯Rã÷$YÊ:7Ò•T÷æÜÙ±†­n4OÜ\1§ß’+RÏÎD¤ª­,=(ù䬹 ‚jù[3@Mí¾`©§l¥¥ÂðɈžïòšEåjÊ£ùb…GÀdÛ \6=½ Fð)(*çyZaës‚¤Þg–µc5‚ÐÐØ‚C\ý$Š Ýl4š{™ª–2ièÈ»ùÉÓëVT7‹­•˜4{mŽMzq«á†I¶uxÌw‰¹ÍwBc æÇä {TWÞ(žÐ%Õál&6+änþú=ѹãÛò-}-ÕHd A@](ŕ˄,%&¦"ˆ¡‚ Øê\ÆS¾Ÿ’œß²}ëÕìaãËN'æ69kpÆRIÖ´HTG;ëm“á䬰GEË ‚äÉ$WAP4ms&†¡¸ÓÆ0D7)·Éð/ZIS•Žº÷Û’OÎê‘ Èo™Þp¹4¬Ü›g¹R3zQÜ«Qóöý;7ÏhX¸é ê ß¼‰½È7Yu‹ÕkÚžrq[¤µê3‹§›Åøús$I!s¥Q…OÃÆpÔ ÷Ö¤ßÛá¹"â`Þ½ — Qu3ç)¿¾ÑqFðùŸ5ýêÓÚÈ-žy ®æ¦²z⹃›ÚßDü‘¶5ïAÚVú!ÌcM¬Ÿ÷æ=~}É”Îÿp?uè^{hàënæá¼ð½×Œƒ^¶c4SÏþ9ýÒó´„îkŽºÑFAmþù·¡ã§½Ú;h–‰ó˜½ƒ=nÀ¦gægž”ôVbb½óîÍײõÞX’pzA4 (Š¢(rÛ4{bæ¡.CŠP‰Ë …LÈ%R:Jg‘Š ‚R€b µSËCWìIŒÎĦï!å×o¿¸oÅøi£Üo *îÊM Ñåöù¾F‚P.'él($2‚Ð1±3Å¥„ºrg"ª˜—wŠÇ=Û9 ÆàpÎ]¼2NYÛ‚þ&æè#Ucǹ¨u  ˜›´½.àÜÓ5~U¶3KU÷ÀÙå}…’Öš“ eõo2E‘ ÙTWå ¨+À)’ø Jg}@iŒÚ¦‚7&§Ÿ”`€âRÃPjÏlêoÍêÛ¤‡EÛ­ÉeNÀPä†"Ï8,ÚN©‚8Ža¨øÀ‡á&ÚœU :z·—¯Ÿÿ8ëW+FY|”ãä\:†JÛ…ò _zlp±T»ØÃXe)Cwmj·íÕç&¶—1OWµ3³¬~<`×Ì#ôÔXáí2Aú$u~ÅhË=]R† Þ.TèˆdøRX>{ É›c -*šÅ/üÑýÔÚž÷Sku0ÉJqAqÐqÃD›XmΑ ·dÐ98AÝóî¡•QT+t­i‘ì%¯Ziæ:J‹q‚ò<ÿ¼l`YƒèLNìlÊ­Ê„@hzùYFý@‚ ™ÿ[º†Ÿìô²!ä€FC¿šÀ(HG]!Þµ£$¡#Î@BAgÈ»3ýbÚÊÒŒP:3XIË´¨ôÅY¢1÷…±\ÔºÌÐÚiCÁãЇra+ ÐΔ‚€b‰Ë»ýP+êÛ¦m¼œ5*÷<#‡%-EÉ=h,eš¤½6ÕuÜW\"n;6`C—ÄDu¥%ìžØ¿Ž˜ A¢.‹#f(Ä|¶šå’͇bJêkû¯¾KNˆù]ß1 •Í›åãǯþ¼¬¹ðm!—àÉǧDɾõ<㋎v§k7WªË„ÍoAú~ýŽA«FóÎÔüß|µ9,™ IDATh‡¹ ‚ QŸà·® ¹/÷ÿ%“ HzÏÉ@éL½¦‚$»Oqçn¹­Œ™F¸£¦µg †¡8Ímk¯Ètp9߯©C¶kÞÓhl.Hk9|årÅ‚…õEJI,¦c¨¹¨¹\Æ`Û¹NÓ;µö(ICi Gàà¿*›¡µ+Í\ºÙ7æIê™Ö²4.‹§;2ìQ‘ ‹§Û EéÚL®–QAM‡¢Ho¹¨]CYÇB/zc1Èß?8ëã4ïôÖ¶æ†@™ …x–V:Ž HÖÔA“þØÇÃÐfûB\Ú1OIÛ<Ãjè9“«õ–"Ici[CYã#À¹[¯0…D@)Ä¿E˜'I…A±æ¯­M:jóH-=# …¤µïÕ— ¨É%p™¨…ÆRÆéNÕúß*Y@TŠ¢àùÃa0Ü˸Š~tOöÇÀ0T 7¾Ôe¼ß½ÍÕ¤ÙõA³r>–êœèJÆ ðéë÷Þݹ8`Û;‹"ˆXJîýÕaã—ºè+f0}œu ˆøÊ,)4¶`Ô¾èìÀÀ³Ï£BýG½ºvïEߺOqºj&}Z7úì’ÀÕ¯@݇ìõr»øj̦þݺ®@—×õ/uÉÇþç4ýbú€ ¬<÷‘÷.õã”–‚$¥ü’jƒ ¨œ,ÿ ™l¹¸ÍAiùG=†÷ÑÉ={)Ò[ÔT¦¶ÿv¾#Aé_r0œZâôäÝ«AÕÕïoVC—d` ¶œKÐâ÷öôœò’ db>ϰǜ©Ëwß{›’Æ5ÛÙŒÙpQݵŽ"-qîîq_uk—”_ï­c?8é횣üNºr‰SNÚ‹F5ó¾ ÚÊÒ¯÷[rE´ÐÇãÕéëqÚ,ž¶ÎÁ;ùÆ&ÙT¸.½:]ÜR¹˜ÁÕÜáàè\—™ÖÆTVÈ…Íäô!ÝFËA€a(ÕkÆAdíþ¤}I³*KóîÏÜh|Ù*šDZ­eiÓMLLîE¯·QnRASö×öˆ_›Iô³uŸí3áÎîÈ•—, Elx†=B,6yõU…Šï³–Y‡S¬šõív+k›+Yé)Ç—x̺&ëhÚÀTÑŠ_1}à^߀ÁQ» jÒ»P¤¾°¥î"†¡âñ{·W}Úڎј[4m½FÈ…­¥I¹Í¸’¦ék&O‡´0Ô°K¨Ùq#‡ÇÕµf!(¶©¢e:xºÿýOSO!}4E‘ÁªFޱ2a³yA€Ðî1„Àåâ :ÚZZ1IÕ­LeM-B.9eÓÓÙ@Wã±&v¹¨¹|‚b{Û›O‹®j–èË-ŒöŒ¡¬CúÙÄß*Ï-l,Ñ(kè­!¨+ØÍVÕGÓŠZÙ$I!f^¿rYªºûóϹø&£“^Å7«L‘J– ÏÅž~¨XÚZšæc;f-×}Õ­cÉǧDŽÚõƨ$;y/©J‡ÍÛuÉuYäú5?“¶×³+ªªº.‹ »;iõÀ­/§Ö~¼ÏåhšîÝv-[?îeòsoß³®Ë";$íµø•Y"›¡ ?Ûå}÷Îîàæ=UÚ^÷Kph˜“«u:;: húÁd¬´^Hàu×ÃÍå.Š ÈÖiöxu³xõ¤-7i£¼û*|‡˜gî=uÕ²K‰&“<ì4ñ>¶ÀÝÍÏGì"ߨ°iøÍø¢“2ίè‹kXº"^®½ö´䔚r'ÒÐÀ—µZ™êëém %m¾Ê…˜Ö…^Yã*›u8³7êKmfOÎ:œÂ²3Tɨm“ÈJ„—§¶Ï½—)¥¦D‡ ɲˆYy>ã~o3Uù‘½Ißc©«ÂW¹(˜—wágR`îûŒ£i¼¥1rÎ.ïK)è“úæ¡´½Ö[Sϸ K"'lz¶£îÓãW–C§[^WNWRE`ÙÌC)ܒ⢹R~½‡õ¨µk/êwjÎÚóÂú¢ÛúÎ"¥üGus—˜ÄQÓ&¯ý˜ÕWÛ~ðîÙ›Ï);[¨Ýõbö—&Eû[¥Å -ȸó¦Ð€¥¤R«¡ÌH)+-žimmrm­ëˆŸ=G$zõUÅ¡V¡|"IS_usº§ÑÚ鹿1A‰g›jËÏÕoâÚ 69½f†„Ó9¼ºô‹‹·8þrxCYýN[ùÇd®ž_Æe¿#>Ñbc®íQ·pý¥¥è­0ïáa' C¥3B’•k[„g*’®C´ZÝÒuîÇðeŸ¯¾,g¾xo]{UvKE»^ËvÀ]¹¨m<ÍEõE˜žU߆GÛ=gßûvouAš·ƒ³Gµµ®s¼6Ä ¨Ï~&ëh2дñ<ù1|Yàüi>ï_>^«nÑï~Õû›ö$.¿%0¨ÿÒ‘?ͬ&—IÁdÁ•3Á0géæßI˜ÿÍ24ðõôÊ´{ûW,_6Ô¿S€c1'Áê ´íÕĦüÄ&½Ž6ÓQwçÜ®ã‹Öíõˆ ?scræÆî?î±úö¹¨5pÄ@w¥˜k瘸N¨úûXÃÊ£‰µ;jr‹Xªºv­œ’³~ǡŠ1²ª©A±Å4ûtuÚmY]ÆÃ ^ŸÌoÌ}±uИé©©©¾Âú y{c*ÿQÛYCTAšÐ©…-ÈÂÀ‹µ‘X¶ŽúüKéö0­Vi{ؘ†ÏÏGlÚ2Ñœõƒ¿â;ïä«Ô´H¬Ž-êÓèõ˱¼D“ÎæV¿ØíM~™3–n¬1+ŽýÚÔ!kxyý“ÖÒTùÈohüÖFsqK%¥¢oG½Ú?¢ÃPrvèû!†ìñûçö $²EjÜž$“ÚÒÏtÀ¬ìz ÇõÓ¯Ýåúo'þ§KpLºv‚Mµ÷IÅBFtИU'G¿ñ(áÚ«Š¾/²Ó%2BC“´©†a÷s¬z[é´žXìÔÔ‰ ûÔô­ÎÄyB—ñßÐÀ×ʆìž|‘¼}ápóŠGêÈƼ:¦o¹x„ENž†vƒñÝÄV3È5•y‡Ædœ=wAƒÆâö¦sxQ0ÈÕ28Ïß¿„ËEy¥¯#v[𻨵/€•'ï¤PH:ìÏÝ;rE@ðì²W7X ]6§‡‰ê»Ø×áŸÙêFK1 -;ö pÞÅ\¼àÓû—‹¼7' o¯ü´kûÆÕK}¨sú˜µuaXÚ…œÂ 9¿*ÛAQ5û§-…ï$ªú¿T'3˜¬NümIÌYº¹›ñ}-qÿˆ!~/•ÿÑýûºÇwûßNûÀÔ$èçùP“•ÀB0:î7Úÿ:×¢ÿÔÒPÎË£,5ýW$E (©VóŒ™^¾· EGYs›Ë³i–LÀ0”<¶®Éìö ¡®Ì¨Iˆ;RqGÀqV(“¡¬N‚`\ ÛlÇm®FUv–½Ýz•é8 ¿€1ØK:!NºÔ²ß8ß™9ô–Âw 6žæ Íß÷uÝÉ8¼b?8/¼`±òÈ“‘rQôœº·MÝÜåñQ¿áíÿ‰9ìÎIð÷YÑýû¥l9·ƺè‹`´å0?q»PÎøK˜ìíË0ÖǶº’¨ï£ Zº÷P\—ñ°ÙPUQ F&–ÐRœ"½²Æõ¥×“pø*kÖßäÚZ×Hè’ ¿üwwR¦ðßI·‡þ˜ß‹GG`óT»/˜…2Hâ3ëéÊÚæ`ªÍiX4ÌL©¶E´«´àÓÞGê6ãrÉëܪ?€ ûÞú*k›¯AØâ¶2&&än¾Šçº¹LªÀÉ õõõ'ÃOòq7T~]zè·˲ÊÚ—Ù —¤CP_t‹ÉÕšu0p5]Y×jJcä2ŒR’ÀQ‚¤ ºYBg¨híÏÝê²ðì Š$€­f  PŸùh•”_cxÝ·EO-c©éñ ùÔRçU“ÞIM¹/¶„G?Æe¢ÛÙÑ2E˽ œqñy +åþiŒÎ§§½Ç’Oyˆ+$%2AsAÖ kÕ-]ÇMõ0,ýwaН™Ö]ÿÑýÿ ö@Æø$CJA‹ÆÕ—åNý<}ãKËäjÈI\Î[‘¥ò)GTÈLh ŽEžà©¢g³®4áìÓ¶²ôrQÛqaCñ~›QþÏÝVƘðÅ € )ì7T ¥(²ÛÁèCI=ãþVâ.›<Ηÿ;ççW–?› ä¿*ëZ9‘ )þÅvïûrxÅ~¸œeÑZ’Nc)cƒMCtW‰m°ô°ßidèc [Îíü¦®¦¹.>ü*¹zßN:úû¬€ÍW²Ÿpäæo(ö-îtgŒzS©‰Òè@þ@Fò;ìÿ;àĬ·ÿÖº;yî7ÿ~–Ñ ‘qŸ~wŸ‘‰%ü]Ëß‚³æk‘‚är¹ë¦ìW^]^ôx¼‡Õ.O{­*w[M¡ýA±Y­B¹Ë°~VÇÔ•‚¾‹.¶··ïµ3â]n«+]-µÚߌKÖbr¸cŒæ¹ÎmóÔ!F;ë•uÔièc©E#p©#ƒþ{ÒÈE­€ ÚcˆoZGM®æ²€¾¸T8”"‰d5%:N‘´ åp+ ?ŸÆàØö˜°¥ÌÄÊ¡WÏFLàR@·×ÈB…¨mˬÞø=‰Q4†Råëà!‹‘§³— =¶]ËîÛ^•í®eç}`é þóû7ÂÚ+?­œ8w6Bc$.ïŠn@àŠfdG|Ä0”øW2Ò~¤¥±.í?6v|‘‹N¬\ñ¢¼°¬A´ç{F9aÔ\…¨]39£`à÷íå¤Ë—´×V Iñ£@¯í`ûûÓ³B›ŠRdÑwZ=eŸ’–™‚ ê9ñÃU•è_â3þ”(@g ¾o4ÒÓ7_¾KQ”rú……ûZË>D!‘ÁÿPYð6§6TÖÑÀ{{dÂq~uÎq +·ñÚ)-YöÃgªïäþÅ;Áÿ|†•OðÛ5AjhêÁ‚±sáyf½Ne“È>P0ëpÊÐØ‚ÁszQ}æ†!k¦ùAØ£¢±]Ϩÿ&`ÿ¸«aëŽÁÜQ³!4¶`Æ’SæÉöêåÿ”¿éø·Ešª‹î T´÷ðtÍzøz›÷æ„ò×ÁC®iq„şŨž:{oÐ,‡4Š¢€$ÝèÐwoLClgïž•‘J¢ÆãÐ3Ë‹>ë |Ÿ[Õ±ú‚ŸËçNÅMöÇZX’…G^|óÁKb£oÆÄ@Vå»ÈU.^Ã|€ÒRa’.‹Ãí[KS÷õ:{à­€þY=§ì¾ÊPR£{PÈZ?Í¥‡±Ç¬O¾K×6°xÚ·óvŰÎhiçõžÙš}íâ> +÷*\*¬¸öª :rq GËŒ“±|“{Õž¡¤:A±/\„BPñï( ú¸ì€Ðئ6å˜UÞ®ÂãÐU˜ A(4Õâ”hë‰÷lÛÿ¿/žƒ€S›¯d¹ÊqÒäûãñ„½IŸ¹ú¶! 9 A®Ëäe=§îÍR·è7HC…=½¬Q4]ÃÚ#‰_•½Ásý£Oêª*í®Ë"}æMMü˜ø8ÀÜiX²¶E!.“¸\fk¨‚ã21Qúù½‘÷–õÕ9õ…yYR\*DI\N'’ÑsòNEôä‚AR«aËÔI…Œ ¶:(Ämã÷$:¤¬®Ub²xMàR.Ùå¶2fÎÛ{gF½·õèã{Ê<#bù>·•1ŽŸ<3NÚ^_ÜãÝõ#w¾É !u *›’<6íÉ•e]«V#[—¹ÕéµF‹9z ¨Š$ðþ=ŸÙØm»–½mÏlâ¶÷7“¿[4Gø*éð¸ôø ïÕÚÆv’¶ÚÝ×_Wèµ åÀÑ4Á 5+ýÂbÞV« ØðÐÿuNÓ:A¹I(PŒA»³Ù£ÐÙÙyb[mQKNaÅËÏ ©ß)†è2JEÔJÚ^«ºíZ6}¬e‘í•™*õZØP,+ªh°Ä¥B!¯-’] (vAÆ›þ޳B` ”ß`—^¯eàâÃB1:ÊV7eªèÄØßÔ³ºYÌíÂBdt%Õ£¸L<ŒÄåQoCÇK]¼Ç”u4ö7•¡ý–^õ— šü…õElems·!Û_™P©Iâr£ý·óØÿNH(6];«¼=¨‘/{ÚÓD¥¿H¢èß*G,m?ÿ©AmÛ~€²Â¨ÿظa(BC‘ßïoó"ÎöÙÅQ7<À¯ÊÚAçð"ÚÊÒëëë—Zêq‹¦YÁPRÞR”|¨ôÓ›ýrq[fä:·'„LU•›¼ÎatVñ‚9ÓŸhª0«JêgdMsøUÙ#˜tTÆâéŽÆ%‚8Ay§âJÆbtfAKvFån‹üÜCÍ̹'ϸWÍœ#ï{¨šöÙ‡b4ïÒÌW›•u,“+¿t÷­Íúãwö#4Ë!ÈtÀüÝ핟¦6æ¿~›™øp“PŠ#¯ƒ‡¬¤±”o‰šË“ 59m¯žå²Tu’O™3bWâЖâäõ4&gZõûè@Q7âï„oŠÝêy•"/éJª¿(ÄmEå‰=UôìV¥D4|~îÄäjE—%^­Ósè˜WG¦dç\mÈmJŠ F²Tõ|?E®58¹¤O"‰Ë—08jÇ*ßEŽ´º4ŒÄ¥vq/“éÿ°¼¿!LKŠ„êªÏ_N|2 ¨î¥d¨É.•‹Ûñ¦‰ G‘ʉnÉöÞûš¸DÐïÙÎkœ-ÕBAèMù¯Cc †wÔ©H¿°p:Æ`‡E­v^x¡¤¦ ³ó8E2—ËãÒë¬ ]&2UtˆdÄ€# z§êö¹¥¯çSÁ1yöL—©eçýÜÙBm‚§§W&KUï2E(ÆÑØ*BÞǀ¢Ò„BA«†µ‡'SEUÖµÖ ä”ÆŒ¹ôpHpL €«g“ÀVÕûÀ`ó2Žmš)U5ísR~½!—D0¸Z7e‚f¾wŒ‘Ûô:Ã¥õmRÓö¶æIË„Çã 1Þ7¯êàñ$IÉÇöÕ?¾cfÏuöF*“¥ rÜˬÆuA¢fÖ3€ H¥×?Ï -˜@$õ¦]}!C5êMeo€c ÕBc ÜyWeúåñŸ´Þ/Ütô~á0‘ÿÑ÷•åºc‚õCîæÛU6‰0ÿqÖâœÛûµìŽÓ2u˜¼~ÎúäãS*·„ïe£,[³o혧m?hâá£gf\ö‹(Œ;r†Äe“A–§_^µuí›F€¥‹æí³që“yÕs„¿2S)räÄé3¹ú¶ù"E‚¾½çÖ~ÞËP ¤ ²È̪ç†1ã&,#HªômèøÃ=¼&7u¸(ýâⓣnjšzvN˜Ú]˜³wá7}Ø9ØH>æ¤ßgÜH¦²Æ>\Âß~Û€«oûPÒZ½:än¾>‰Ë')$/€l©ÈÞ¬ʺÖÎ /Ä(ëZp4M¾„‰'¹úv‚ô‹‹ÏÈD­e(ÖiáÎ3r“u4¬±á÷— Í¥üz¹‚ A,1%}mGMNmÎíÀh€QKB‘ë×r4  ÷œÍI(B!î†Mþ)¯#°‹ç,è4g±+±§TÔ!þ\Á÷8ö°ÈæcFf€«›{¸ÿ8ë†ù'ÒÌ’ ')hPç2l‹ä"‡ÁÛ^†hñØ‹1[Ôk˜ïîܪæGɦI¹Më÷ÆäÙ$õêÍ……ò¾NØEñî¥Ô(@;ÆäXИJòá½uŠßæ5o$Hu`3:=#fO|pÍxkâêËŠ†~VêPk ÊP“,i!ó̯Ú*j*ÃôLläªJ ôÚÑI¸ûª[ãë2„W¥Þµ»'©­ZÐŒÊM}I\vCª B PØXêŒb´œwa3˱ӳÀ»§6µ>üÓ«„Wòd ²nlP¸¯º•.4áf:J4­A®’:†à­M ÿ’–CFÿf-AC ídøL€_¼MòÖ]ÊÜÇ+~Ùt%û@bNSÿm‘Ÿ©°é)yÕ‚±¡÷ ¯ù6ÝQÙ,Žx“Û¤zìAáÅ–Ù™êViQe“xatbåh‡¬òö×5-’[IÝ ¾•—Ô¥ï.5‚ÉΪaŠÌ€RèÌÀI‡ÆÔ<ë‚(÷ún…}ó¶A—ávÅë.ík«Þ0{ø ø|k{34cÖŸÚ |¡V·–@Í—o½Âÿ∜ԥ<ëõ;¾‰Wxw‹gõ—냾Žõ>^>p1àÔ7tÔäiAn†¦¤œœQœ“5ç'þ?\Z~ÍbЂӱIE3™<7=SûœÛâ–JE(Þ'…Nœï¾"’¤18 Àâ®ã ÊQ7þH@ɼ²2ÖkCœuSAÒúºO/÷™6LË(¢(ŠÐ2´º#m«]8;ôýÝkk]ó²oíÀzMÛsN!n³\³jÅÌÈ„‚U¹/Œàofööü®„'”ßQ(p ÀÂ'ÁL-ræX¯éë'ÚmÇ€ÆÆZœŠŒÒvúH']µ[ïª9LìØæ©v§—ŸI¿ó¡¨M{Ã$[þ®Ÿw2hè£V< h–ƒÒÖ«Ù½›² ïò[TE2\¨Ì¢i:˜ðnø6=·7&ÏàË»I ÈWÙ^Éù- Z„rÓ  6kÿ„–ú{íëÊ¡åÁÿ²oëCgÀçŽåˆX*3f1ø‰ª5^EÃÚ9vËs¾6PJó°«/7’¿2¥Bc hk'ØàŽÓ÷ž~0ùAôF÷@C—).sõmºà ÂeqÄÕšy†=> ôz`î26=/þÒLÏ5wœJ_œMqœ¾GKÐTeY] ¯›é¡(Æø¢èøú˜ß2tÌä]>— çWeãU è°Þ: gRZ±”¸«!{¢sg9ûž0k+O÷Ù´3dJăT!Eàº$.§i˜8°á»Màø7)ž•¢ ‡›Oü¾þ5øŸÏ@¦z=ÿ¬>‰ñçÀkh_xvïú»¼Üït–›@$ ÃP¼Kñ¦ëï7ß¼¯ÊÞÿíQþü¢c}fñU^džOV1ìé©¶4ЕÔû¾Ïd½‹;(¨ÉA)’\VôôØ3€‡1á0vê¼ÿ* ’B™t½ú²Bz}ëÄ­×>;{P¸ ªYbÉÇY ;ÆdÐÌ@ƒ= ±C¦À ’Ï¢c”– S¢ ¨œ¢Zá£åg?-fþ °óÕ8Š€Mü§†ì›§ÚU<0 †‹ƒ»)ÕÌèÄ*ƒÏïãY5é±lž‘y`ﮢé^ÆÂówöÃ"Ÿ€ÿHß­‚~KÇpq™0Jˆ p­Çл[ö‰~fnëô)ªépkæKåVÑ(T™’ø Ž“=×ܾ“þFŠK¥{oæjÕ 5Râïš±Õ øÓëú·V~v!qyð»÷-¥„L”ÇVÓ{t!Þ—‰+î&•‡íÛ¸dmà½»Ï’î›Ø: jó³ÎEDm§³U²p™ˆ‡b4s}5ÖÈ?˜Úÿ0Àÿ»1Àëàâiþ‡æÇõùÛxwZ ^CÿÃ^ü¿áñä~$`*%rÛ€ ÕåÂ5†¶…èý©_êˆi,žöt®ž—âÍþaw¯Ÿû¯mO;ÞIDAT3?¾HáÉf`µ§Ö9 vÜÈ9Ëab&<}E!ªÿŠI"Ê,šP]™Á cJQ^ìÁsz #³GÊqj4‚ ‘‘o*½À— )”ÁÀä8ɯlû™úÅÃ"9¿Å²º¾9®¤ÖsòºÓ™…Umª.=2^þiê"ÇüÝÆ#³áàš?Î{q;þL:ÿû±mÓ ÙIñ$.W44j_€é?û ~.ÔŒdVÁçôÖ£×e Ÿdmâ<æ†* j:BflmºC*¤æ,ž®¥1RSNÎhqYäiçáÚš~yžUµãH¹$ë«6t¸­Œ™Õ^–îÀÖ0T–‹Û>g\ö«VÒz¤‹ ØÒöªl2»Â•lÊÛu‹¥âÒëJZf¿ ê zЙʨBÔvöã•ÕÍN¿Á©`,¿ú3>¤×ˆŽºá$5׊üô }ç óÚ+2{"­˜gäÐ(¶Ú´‹äÙÿ°¼Êÿ±rëêÉ?ußæeSþ²6ÔV<‡Ô7A/ýÎ~\ë{,UL¤)@x|™Ëê ThlÁÔë¯+ú-9õAñ<³Þ `õ…ŒÇ³Cß_ŽÉë•Sû¾Z`ù™t»E'?$øKÕ}›×lræIÉ>€ÒzÁüE'?´ÉÙv-ûJ`dö“Ø÷Õ†þç3*·^Íþ&ŸÛʘ±}憕Ì:œÂˆlûI;N¹ùE·\¸÷›[™Ó¼ÓŒ/Únv¯ßžžY,:ùöµ6üÄâo¼$\GÜêþ¦_ô¾>¾§¸_ðånOAßpÅÍW²¦x®”³æbæOcöG¿èöö\9ðM½þD‹îëÕ2ØžO]w)sk¾þïÞ³õj¶©×Æ'£f‡¾_ðŸÿÝ—ƒÿYˆ_Ã,ÿàÿÍò6¯Y'æmUD«@îâd¡öXAX1´C‚‡]ØçLx|™Ù»‚–·Ê,Z¾š=WŽ“#šrödwƒ/²ûJäÄZc-NÀ’Wß+X_Ó*Y¥¥Â œ?Ô”[´‘ÅÀªr賊ë…V³ºñ¢<A‹ùCLßM©ñìàa:ªÌ=½ÍT#†õÖmv[5V&l>.ëh²É½»Ká4ïôZ…˜¿%;:@³‹!<޽\EßΣ£® ‘ÉÕ:”rbjêí¯F¶V~žÌQ7º„K…ƒHB> £³_ú é}=6©0PÒVczæã¥%16=3Çe¢mrQ«5ŠÒCRÏΉøzP[MÁêë'o:¯AâòÕ¸LXkdå¸åþ6¯¯ q\)¿aeFàr{¶ªÞ•·¡ãŸ†ÜÍg$|jä1hmXo]Ýwù-mºj¬–# z ’žŸÏa¿Ï v:®Øòƫҧ¸L”ûîè¤q?Ÿ¨7•#ŽÜH¼)n©ŒÈ¾¹Ùÿ˜‚ QïF (­<1dTÞ?³ù^ÐHðÿf)­J`-Iû‡â¶ƒíBžïwtaŸ3cÜæ 5+ëo£á£¡Ìx¦­ÊŠp¶T›j®£´^¦ “) bjZ$î29™ ‘8Š ÑB î­Ä¤Ås˜´‹æºJ Ít”´ÚÅ ÿÿ~ûÒKÚ‘ŒXÞ&”έêÎèqÍÅRíW‰Œxò%ß IQÝcè8¯ qÃA—8÷|`aX7þ]Ö1} G>‚¢KqIG«\Ôš|ñy©-ärÉd’$®1yÚ’ š¶Ý}{MUUí6CY³J!j;ðús£ÞØÝ‰Óõ…ï”yꇕ4MŸã É=‚ M.£YÜ\Ù÷Fbå>&Ws KU7P!æ÷UÔÌðø2D.l݉ÒTtÌ.0Ø<-a}ÑZ‚ iõmÒ^jÊŒ§õÕåq‘O3××4 î|,nyº÷f®;üù,n^Â`2ßИJ"¿ß"Qƒmf 0~*å×_¦+©þÎvoí¥OêraÛq”ÆýÏLþü§üçJ]Õ (È;™òà‡) #î¼ùÿÚ;ó (î,Ž¿>æž0\"`„("¨àÀ"(Ѹ1&Æ+&ºRã&Zx.µh0$ºFŨ1†D4ÙÙ­¸QFÔ‰*r)‡ À sß=}ï ƨ1Uf+[©êÏóúý¦ºû×õ~¯û÷~ßhNçÀ¬ÉQZÐÞwÈ7© €rðiÉÜÓ{ôý>÷ªLÞH6€àg½Å¬ñý~©^‚ ,ÏPþ7ê›×ºMm)þ‘C7¿3#f×çËÛ ã Ðj1Ÿß6“X½¿¦¸¢üàKG.Å¿æèn+Àe~´×ÖuâÂö7ßòòÆ`†ôX0‘dßÑí/}—½ùB`]wsz«Þ-æyp+‚£¦ SvÝ1z¼ŽåKO µ5\ °W_«•<7vÄ´¢Ãl£ÚJ³¼táä(>³@sX­wˆpTÖä–;yŽ} díպĄ¡¥þ¡ùš÷3\h4Eå•\Þtä\ãVíMsFÒ @'@òòC¢áƒŸævåŒì­@yþçõÊ;¿b€çyˆN],k>µ×{ŸJÚ+k¿çX‹dqz;ÛE|ëë æWLžÙJ)Þþ¨ï£B(ð+„E¦Á¤Œ¯ëÜw M|ô^ÞçÏ,yl[­féožCgûyGE£Hî?_®Ž¼AØt¢Mß4P w\Dœ]a¸T‰‡‡…â…s‡´#¨è&Aq£9ŽáQ çåêÈ–å—± 8–jÇ%Jí}ƒ<ï hÉÑüñGhýoÕu­{œjXï' Šážc%cÇ$”-fëIHQ|ë„-ÝÖ–Ö¶m÷_ÂÄó piïB¢ËLèOœ»M•Ô4b`hϱ}7•×dh^ÇpÑéêÚæ«“ó+su?Ö¸ü—ª½á£f˜´ú?×çüS;ùÞ¸à lÍ:ךì-Úê11êUÙ[´³E‘q÷ûPàDLüâGÚS&}üØvI~{¢'üéÌG™{dü;ë†rožË3:ÈÁŸ½5†—ö£[W¨ÑAÊŠ6ã? H%YÜvsÁôžT! üÉaYE0QG“ªÑ)¢/î]Tåµé+­ û’–•I•çI‡‘ò:Leh&”¬y' j´½¥©þ«Á±YŠp,â~ɳû#(¦Æ$ò@–å0““ áXZ$—àᎮ†,é1%-+Ÿ|õfç\†pà3 Ï÷Rl_Ž¥Å: ̲v®Á$c(Ÿ¦™ÐÄ!1re凞M\sjŽÛ¢ÏähoÀºƒµP@!—FúGÕÖí^e²¹3¦<;`-pV£n[DDävMQúíoV§ìñ: Ÿ€oK‡ûñxIC8S*ksr¦D—œÜ0qGOðæ8±Bð͹ޱýCv—å%oÅ0”Üøj¼N$UZ8áé ÀŸœ´õ§ý\ú[Òam©<$JÁQDVHºL⬑K°„òÓ rÊm9Xw¹’\ñÙõ~jë6´œ±µ_s5v8XT,û‡²OÌl¯M½CòT˜ÑàËF9€ X3ÇÒN‡ítƈˆùùÙñ•s?¼ªtoµŽ\QKÓLôƒ×¿ò¥¸bU`±ÍbZ¶¹ìRÕŸó%µŠ‹‡Ü¾« ‰‹ô»Úëo°‘½+F„wß߉0 "ð§íì~;‚bû€÷:º/ýýýúqMÙ›µ/$«VŠ©k¥Ë,Ó7žv§îŠK•TɲÑTaVvÃ)¯½û$é4!§kG1Ž»7JiÂÁ“önè0¼S«“(x{g=wí˼úÔup‚´˜CkÆz§m8ûCrl Y¸o%¯ TE¹,Èö$–aدµKC¹maí R¦Î.l¼Em êîÉÍ|†_ÑiÙ—‘ê-ñ%C{\ú¦Úë_®°öJŽæÍäZ´©†×ÔC{¯“öØúÊýÔGL@(š‹xûÅø¯ ¢¨ôÌŠ†¦öУ–,&]æ/ÂúÇ©þuôÂÁ¢oÒVÏì¦}5м mð»F'¤þŽY]Z3Ñæ$v ž±;g¤!®Ÿÿ½×Òq+¾ÿÚcíJ}>-eÜ•+åt:¿cirZÕÖ;§œ-¥HKx&h~uÃÝ·q©Ò¦ú¢áfë±R½Hó~ÆŒa³7ïÄÄ2ärIyG+¥ ¿N—E¿ $oª:磟N„ª>.ËK.zâÉÁ„[ ðdø 5Âh'ß5w5[Æ8C‘ª¼×GÑϧ=eçáÚñϺbÙ¦·od›å§”ýýÇ÷¦j›ü2£ ºÎцǨ2»Ùæjã9fƒJ!ŸëðP±¹/įÅgÅzyé+Ò§Âx;ÁžQÈe?¶Þn9(´ï@ƒ7·ÞÄârÿyKVVU~»Ë#ô† ü¡$/?$‘(SGô¡u¯"P%6ægdzGÊòazÖ`YN¼xוAj©iÜ¡:Œ\u\2$*PŽ¡ÝnpK¯oÚúÝÍðk­¶ðÏÞ]ƒa¨7ëƒ û*i†åñ½Ë]¾*…žñîYizbå–¢Ž×ród—›­¨ÙÐåÒîÌ¢…ÞøÃØ^öí̱_îâ%]ùìû0û7ÿ{͇lK³~Ý[AªÐ!OÈÈf¨¾¨ÌÄIEND®B`‚calamares-calamares-2d126ae/src/branding/default/languages.png.license000066400000000000000000000001421430147706700261000ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/branding/default/show.qml000066400000000000000000000044121430147706700235020ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/branding/default/squid.png000066400000000000000000000201711430147706700236420ustar00rootroot00000000000000‰PNG  IHDR\r¨fsBIT|dˆ pHYsX•X•Ùm7ÓtEXtSoftwarewww.inkscape.org›î<öIDATxœíy°%U}Ç¿§»ï½oófcö•e`†d ¥¢(Á}IÔ²RV“*£–eEC”XFMR©TÊŠ•ABÀ2„RRj©,ƒÂà 0ÌÀ0ÀÀlo7ïݵoŸüÑ}ºÏ½·û¾»ôÞ¿õxsÏí{úÜÓçûíßYÞi†xö#¸qü[ç"ˆ4Àn¿è>|/èó(AŸ€ ˆøB@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0ZÔ ‚ghÇu»þ]}fæ‘ zðÑ€JDÄ2€ PX>&Þþ']}fîå§qú¹Ç1ž«T*"P€ðdÁP0¯«Qƒ2Â`A'H3d„7Üüeš5•4BW•èˆ]%H!tE‰Ž`ÉR]MÂ.ý›I©‹ÔHt% WXÃoÙugÈR]EÂGüMé X¬“ ¤º‚DÜÅ/ H>tõˆŽ‘Å/ H6t刎p?`Í $ºjÄ’´¿è$,Ö, $ºb„;–²;¿`L qÐÕ"<éFü""dAWŠèŠvâÌ7u2¤@W‰è˜NÄ/ Ht…ˆŽèFüâ êĺ:Ä’ô"~ñÆba±NÍ,®Ð•!ÚÒø :™@\¡«BxÀ}¿H^ÔÈb]¿Ä/(’ ĺDÇô#~™@¼ +At„âé%a‘fb]bIü¿ X'ˆtˆ¶!~™@ôPíî0K´»™‰>ˆ0ÿÖ d0,ê^GAC@xãy×o|“5¿åõ99¹ …L "ȈÎh#~¯ÃÝÞc¬Qü2h  –¦ñ»¦KÂwëU”êdaC@´'ñ»o½A&.d„;¡‹_Pª+(ÖÉ€ €pÅhsxâuš-êñ„Kÿ„%~ñFÉŠ†5ω>¡ dògmSsQcIŒ&Í-~¦æ0¸f[ËeZ'(d!RX>6ÿíÃØðù‚å Q§cÂÿùŸ¿»¿ù†7ïjɧl02€(lÚ…ÍwüÚ²5¹äfløÜ}‰0°Ä¿âê÷!7¾ ÝùsŒl¿´eGâRL ÈB °i6ågPGWÚiI00Å/ÐF&°ëއ0²íÒ–üËd¾C0nâ$Áš Rümd6™€È‡LÀ_ȤøI20Ä/M ù¼dþAˆ_SüaÃ.ÝJÙÓ„Dï@7âÄÙ¢¿ÀÍäî™@øL/âÄÑ¢¿@6·î™@ïøH?âÄÉâ ~AÛî€A&Ð+d>2rñ»ú¿Ï%7cýgïŠtÅ Ÿâßñù»ú¿@™À²Ýos-™@oøÈôÿ~“÷|Ù—¼F¯ü@ìV özç_yõû}9ÿÑ{¿Ž7ô–òÊd]Cà3S|Ë7ˆUw ‚°_æè½_ÇÑ{¿ÞRžæÓW †2™@Ç@ÚL )â·gÈ:† ÒbI¿H,×É: @’n‰ÓfƒdKC0I5¶âoÞÕ1 å:ÈÚ@I5Oñ7§ÇNüU®›ƒƒD+d!‘4p}PbÄß ™€;d!’4Ú‡ØI¿½³™@ d!“$H“ødD@L *ñËk.B¿âTÈlÈ"" &…øÝŠ`A¸–©;ñ‹äJ¨’ DI¬MÀUüZ$â÷.Sk!Ý"û½¦×e22€¨‰µ H˜âÿAìÅïFCÑDÖ#2€wSübßOñ{¥ËÝ¬Ž Ä„¸š@ØâÂ3ÕŒš@Œˆ› dEü"Ÿšan6š%ÈbF\L€iÙ¿ Æ³eôtà2õÀ·€ÜV}ø«}ç5rÉÍ<ûÊ®?·é¾‚ÜXÿۛɿ ÆÔ‚êñ¡A@L™ºÿk¾E½ìS˜Uñ‹ãuÎP©{|0EÄ?»QTñ ²`d1'©&tñ Ònd i&ñ Òld !)&6ñ tÎP5:80a$ˆ¸›@ZÅ/¨é32€„WH»øE>i‹ÈHÜL +â¤ÉÈJ\L +ñ»ì&œ4ñ j)12€µ t-þ’)~ñ׊:g¨%Üh)p™zà[€UûF¨çíOü½íâÓqzâ/jœàÈ%ôVšÐb2aG$~H_ƒ£f ±‘@JËHüh¿È_O¨ ¤ˆ M€ÄWñ ’h42‚â÷mñ tË’2&bÝàw$°”øHür>uîAÜ!H)~™@'âoHh9¢‘n¶í^2=†âè 12€Ó¯ !~7"—÷\Óc,~AL€ÆRN¯c^âëÒÞvŸñ<>@ñ‹ãë€h1½ÕÆ´X„Ÿt $Müí"/¿ Îcd¡SH¢ø»Ák "(ñ êÜŠb@†Xʲ ~Ï÷Ä?¿@7âg41¼Æ²,~IüAAèP»ýA@iŽ2/þ†?Sî^üÝŽAÄ)  £ˆ‡”ëŒÄ/½«<¢ŽÈ2ÌÔý_C¹ÎÀšZ7‰?œòÄÁ¨ qTŽ!ÕQ‰?ÜòÜü‰ 2y¥ÑHüá”G$×#42€0ƒÄRyš“£22Â&¯ÃªµdÄXy¼ò‰¢;@@4S€µyÝ*‰?hñ‹ô°M€ €hAS€ÑœÆ&Èm’ ~îúÂü>q¿Àà@Í»˜¾B@¸¢2`TãPššaRÄÏäÒ?â.~¯ƒ!}’ž( ‘L€Äß}yÚžwé|¬Q2¢-¼«ø{˧‹òjdÄ’( v1oùt[ë#h• €èašèxGâoŸOâ—gú®W2¢c€!ÉÜÞwM'ñ÷T´NÁ°6ÙôѶ (­é®Ç“ø{*OeújdD×0Cªó@Lû||,ÜðÅȈžT9ò-ˆÄ¿Dzïâ—íÛȈ¾P9òªóÚkÓM€ÄßGyÚ-îËhC¢o Š)K¯cöÒBIü6^â—ÓY›ãÚB@øBAáj¼±)û%4Gé]C]Â7 ª¹¯€À/¡5ä•ñ3¼øŠŸÉ+GÕèNjqÙ¶»“¼B¸ó{á»)P@øNNã·m»—Ê««ô‹ €s¡Ge‰H )y´Ë+©â( DSÌiB/’"þvD’Å£2Óš‘$ñ{¥»½çç:Ð,‘T (Ž ¤AüÝæÓm™Tï·|  BA±L y‹±R(þnËÓÅ_ö  3g<Û7‰ß ÷ÝY}€ €a- ÄïE ›„“¡£0  r(¢m'lÛî°Êƒ€ÅÁ`.Ví6žî¥½Ý–Gñ^ ì+dDd0yP‰¿Ÿ|ú €ˆÇ<Þ'ñ 9¢;ÐïSˆ<ó'ñ{B@Ć‚ ¨bŸA(±"¯ eÇa‰ßȈؑSZÇHüÁ@@Ä’œ‚%ŸB䉿s؉ɩŸE¯æy¥8øyˆÔ¡×uÔªµV­xüQó•ç|»â¾s óø€ÒÑÖEr>î÷X¯üí÷ CEhùjW'ë6;w:”Ñ+º®C×kök/‘{©ÜKlqKÚˆˆ=š¦1½Vó>(fbN‚ø ‚ªªÐr9÷7c&椈  „ªªÈåó‰1s’Ä CQÓÚìœ7‘ÇUü ÕôzÔe ˆîaJÃÀ ô†ûá$~W´™Ù¹¨Ë@=Á9‡®ëàÜúk€ř6ñ€žŒš¦B×u+¥µ-›"ì<Ýû\ÝåÓmþQ¡Å¿ˆÑÆ jêõº ˜ÉæÝ·¹}{¥·?…ûîݦÇ-1%%TEµM€1æªp¯ô¶yw™W/çˆê©@tš#çý^B~´|Æ+½—sÄê©BQ[M Û¼—HšôM¨ @¤ŽNº^¤=äo†©DUUšæë'Ù¾¢ Šª ^ïl¡›Þ»÷ë»IO©¦“H ‹w~©Ga nxÏd¨Ïß Í™€) À9¸aH‰é]àÓ)´€È ŒÁ|æ–aX/Ò·´·[¨ @d 0Å—î@ .‘=Ä ¥1ì—¡.‘IÄ@¾½X(Ca¿ uˆÌÂÀÌ;|Ý´A]‚h2´‡ý2´ˆ à,îIÓ"ŸNˆ~ `q8ü8Ø«OŸzlæ5 Zô 0¸ šÆV›.ß|°q7ˆ¶ÌIdê0pd/ØkOS¯ ³@i¨ë@~X¶|ù`ãÅÀÖ«€uD]âÐ1µß»t]ÇÉ'pìÍ7pâÄq‹ETÊ”JEhš†|¾€ññq,›˜ÀÚuë±aãF úVþ^`Ï<ÿbøÀ9Ø¡_í½8¼0ºØ˜t`üâ÷ƒ_ñq`åÖàʘªE°g{ònàä¡®>ÊWl.ùø ŒTÀt07;‹çö?‹—DµZéøsŒ)ظi3v^x!6nÚIôº°#O€=ô àäÁ>3bÀ®[`¼ëKÀð  —¸öÛûÀ~þ@étYF€ko¿öV@Ë/ý ±¸¸ˆ_ïy ¯~Éu ±V¬\…k¯»k×­÷©tžÔJ`?¹lßýÍw` õw|ìòø›oR™~ʾ}Úß|Wn…þÁoƒ­Û™¹~²/x¿ÞóXWwü¥`ŒaÇù;ñ–k¯CÎë)H>Þ~î@ð0÷&”»o›<Ø)Ê—|¹÷~`j`çˆ;ìÈo Üû—@y>ü¹šÃÜ ŸÃèõ”YàÜÀžGÅ ÏïìËWà]7ß‚ÑÑÑÀÎ!ÜØÔa°ÿøØ™SAžPÛþ{P>ñ¯€’½gž²ý?6ïü†¾ôÁ}ˆaþ-ŸÁÐ;>›90 ?ý¿Ÿàõ×^ ü\ÃÃ#øý÷¼Ë&&=O°Ó€ó'Àîº-ñ@îð#à÷}è³?–4Øk{¡<ðåàÅœcìñï¢øËï®Á9ÇÿüE(â€ÅÅüøÁpæÌ™@Ï£Þþ§vG 9ëUhß¿lò•@²÷B™zºa€m»2ÔóF›zê~ ¨–B=oáè^Ì-ßÂY[B=oTìÛ÷ö?ûL¨ç¬Öª8yâ8Îݱ#°hK‚øQ~þOÀ±)ôRä÷|úëÏò½bõcPþç¯r°w WŒ:ƺ³ÇŽF_ÿLMNbßÞ½‘œûÔÉSØûÄoË?˜.À©CPž¼+¬;¨Cyà˨UÊÑ•!ØS÷€½áóhhÅIäû.æfg#+CÐpnàÑ_ý †¼‘HÈìæLOM’·„±(?ûNw‹{ ?ý Šß½^úÌOµõÿâkõÂø‹bñøK˜›‹¾Nø9tð &'ÃÃòÂ0 <ùäoù~ 8‡Ÿ?ìØóP^~,Ô òbtÿý8uò¤¹3¬Ïß3êåé6Ý×FûïÇÂü<ÎÌŸŽ¼^üüá†ýÏDaɼñú똞šôý;ú>_¦ø½Ð§ò³G0øâC8=s&–M@QÒ3m¥<ñý¨‹`3røxùÜcvn££cŽºH¾033™™™¨‹àœãà¸æºë}Í×ß?æu°ò3ǾYõè?D]„Ô£ÔŠ8õðam Àòy ¹-ö›Ã/¿„«¯½Î×_Ù±`}®='’É6œ²7Ú¬ÖjÐõÖ$dŒr¹Œ™i}PŽîóµpDrX[=ÀyVN¥R%€Çû;àk`ꈟ¹ b¸26hL8GµZhZö–fÅìì,üÔ¬¿]€ÓÇüÌŽHŠ¡c„—lñ‹]7©;à/‹ ¾æ§ûè'ÕEÿò"G:œ‡npŒÕjŒ™Ïé#ú£Z­ÀOÍúÛˆxñ-*¯ÖT+‡õ˜~P­VQ( (´ e?†ß.rÑîoFDKU1§þšÅ/¨T«‘.©M~oâësøÐrÿ2#’c(¡Î›Äoµ/Ó€j¥Š|¡%c{ øÅÀÀ üÔ¬¯»ó[|Ë‹Håü8*ȹÞù9œmppÔªäryêôÀ²eËà§f}0ÖžïcnD’˜ÎŸÌ{SeÌ·2Ãepsv —Ë‘ tÉò•+ã;Pßx™9LdŽ×Õµïüv‚$~ù˜Z­Fc] ( ÎZ³Ö×<ý}6`aÆ–« ùµ™öGiý娞Àé›Ú0³_*·ZkÛ9Rãü£1'ÑÏeâÑÓ'`ÞÇ»—¦+Ôç4žÙ WãlÍ|~À³ÆÌ bVE0Æì*…Åvv`aá Þ8z4êbج[¿ù\Þß1]ïA!&Àóغñ+0òCVÃcö5cD#µÓ˜Ùpá4Z‘ûîå4bóîÆ­|Ä8»œÖøØ)9­Wò´§ïï+¿(¯¹ç½åíÄwdv}Ü®g»ŽÍ#!ªUa ††‡cgÕj÷Ýs·½¢1j¶Ÿ}.üÖ«ï5^¿à&ãþ†)½rfÇÍ©?Ô®údlº[ó»Íg2ô"~óÁœ¥R)vÝ|>sÏÛu1Ã##زm›ïùú¿' Ó _óiß Ú-Fnó~ÐlxÜ„bÜ£†x ƒ0ó8p«[G±†ãìî€Á!§Ú•ã¬1UL‹IyøQÏ|ùÔwÜFU¶¥²zJ믴¾³ëÛõ5hÕ±]?°ÓaýæG¹T†Q7üm}þ\°sWhéhÇÅ—\…)¾?…Ãÿÿj»?cÝΫ¨‘Ù+>…úðJ€½vŠq³KÊÌrŠN8¿aÀnVº}œý9€sÃÊGNçp~Ägå<ü¬çÊ_‚x„'LÁô5(Ö]ªGQÏ"M¾ õØuip•J7h•½ý742ŒK/¿"ÜzmbÕêÕ8ûÜsù~ÁÄLAå–;#[X^³‹;ßÛ>ìa*Šåv藍)¼÷ûÅg‚ û›á#+QyÛ_ùžo§Ì]üqÔVϰ¿©ë‘æRg¬.G¥RE¿ÏÚó“ìĪի#9·¦i¸î†·¸-x@+¶¢òî¯ºÌ ‹>ºS7þ Dï&­â·¿ïî÷£vùÇËߋ҆Ëqú²OÂOñ‹YÎ T«ñ1ÆÞzã;122òyk¯¿ãããC½õ¶ÏÜTæÆªsÀ ÃÐBš0 £8qówP]c6<Þ½ø™s`ìÅ/¨o½Êä!(Ó¯~.¨¬:§nú;p­ €t'þÖÁU˜}©º¸ÁÁ ‰‘Ëå°nÃ9ü²¹Él\yõ58'àAHõÓ·Ý~G'0Ö_cpê+{½Œú蜼ùï¡Olv¿hhðIüöP`äâåÕÏ»¬8õD°c)¯Û“7Ý ^v¿S—ýˆß®;fŽ·¨j>¸†«¯¹;.~Mýt€€ ºz¦7bøø>(,^)Ÿu!N¾û›¨­ÍžøLAmÛuX(×0tr?|ÝçÃé ?ˆé¾ž \üöt«E\Ö bëöí˜?ÐÔÐR.~ Ã0°pè ,ßóÏœ:èKžµñ ˜¾úÏQÚp©ó½¹S`Šßz­(JlL€µM÷ øÝo÷¢Zë¡ö³ÏÁåW\…ÁðÏC3À4S§&Q˜<€Ïý7FÞÜ ±4¤ê…q,œ{Nïúêƒ L².~a˜™žDáÅŸbùÁ10ýROùÔF×áôEÅÂ9ïWµÈÄ/×kœLŠÅ"<¿/:ˆJ¢c`ظi3ví¾+W­  „Kœÿñ½ûBjÕk5LNM¨È•¦0öê#>¶“/B©{;i}hJk.BqýeXÜú{€V°‰¿Î9f¦gP®”00}c¯>†¡SÏc`æ0À½WÜUÇ7¢´îb,n¹•5Z•(‰:BñËÇÆº®ãµWà7Žâä‰ã(‹žÇjª†U«Wc݆ غu;†Cž]a{ž ×Ó¦¦¦Pç†Ùh8  †üÂIäæA­•ÁêUƒc¨ÆQ^‰ÚèYfwMƒDh#~Kø}UëóNëk¿Ó¸“)~ç³33(UÊö¸ˆª‘;sjå4´Ò< ðÜ ôáU¨Žo€‘±DkæÁ3µê%~}-9ãÒ(~»ºR ~7P*Q©”Q.—¡©*´\ccã‹Í÷ˆÄ@×uLMM¨s0Æ­†&™$`«Q‘ø{ƒsŽÙ¹YTJe;Z‚UÏN=A|IÆðuG ®N¬©X¹r%¦§§ÁºÙÐ8`62!hn‰ŸKâÄ’\fŸ¶QH!> "LCj°"7¤™I†“Î%ñKiŒ5+ VÜ` X>19Ì¢T.Yâ‡mº¶³ÚFÊ­Ï1pë3©µ~8¸%~§>Å9…§6Ôwòo¼&.iR½&¡ž“Š¿»w‰ªiX¾|9fffÁ­ÝNÅ„7ÝùE«àÒRºóoS¶¦58}yÑ"í; È°ïü¼)ݼa5¥I¿íÏ'€ñ‰ `Ž¡T*ÛQ•³~_Ü­a7C˜07ë‘ÉÊd€óÎæÔ‘}ý`Ö% Õ“ðr3ÑÉ.iR½&­ž“†¿‚ôR-‡å˜apGØV+3Û›¶‹M'Ò­–gÞ$šÂ~qgñc§Y¯¹8'kÈ5Ë… ¤ð6a­r||;r© É᜜K)ìwjÑü—Âþ†ú¦ÐZOö \ªSæ¨òN@ÌzN±˜SÑr9LL,‡¢©öÝÉnPpéóËé€~6÷ùc㤈@ˆ¿©ÏÉš~'¹/:66ŽçÎÏìÚACŸ’ø³ë¸³…Vh­O ¡N]Ó¤zMz='ßwê5§aÙ²e˜›ç†Ó‰4o±ïȨš†¡!»ŸjwC)ì÷\>0 R©Z*§°?ÄnÀRhš†ˆñ@û./âSšç÷\.B¡Ð0@óüéBó}óÈÐT¬0`†¨£Á%cÝW.…ýr³‹4¢•œ¦œ£V«9Ý-¹Q×\ ûëÕsLIT@FQUä ó¶˜yįyÁŠöh O w´\` µš&­pF÷à’&=fê9¶hsgæ£.C_†z]·^‰9LµÒì0Öi”̉ˆ0ëÚz(“îêv‚0;…ê9æhǦ'£.A‘¸A@‚ üƒ € 2 Ad2‚È0d‘aþä‡êok\IEND®B`‚calamares-calamares-2d126ae/src/branding/default/squid.png.license000066400000000000000000000001421430147706700252570ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/branding/default/stylesheet.qss000066400000000000000000000046031430147706700247320ustar00rootroot00000000000000/* * 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-calamares-2d126ae/src/calamares/000077500000000000000000000000001430147706700205265ustar00rootroot00000000000000calamares-calamares-2d126ae/src/calamares/CMakeLists.txt000066400000000000000000000056731430147706700233010ustar00rootroot00000000000000# === 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} ) ### EXECUTABLE # # "calamares_bin" is the main application, not to be confused with # the target "calamares" which is the non-GUI library part. # # The calamares-i18n.cxx file -- full path in CALAMARES_TRANSLATIONS_SOURCE -- # is created as a target in the lang/ directory. This is compiled to a # library (it's just the result of a QRC compile). add_executable(calamares_bin ${calamaresSources} calamares.qrc) target_include_directories(calamares_bin PRIVATE ${CMAKE_SOURCE_DIR}) set_target_properties( calamares_bin PROPERTIES 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 calamares-i18n 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-calamares-2d126ae/src/calamares/CalamaresApplication.cpp000066400000000000000000000220571430147706700253140ustar00rootroot00000000000000/* === 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(); 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-calamares-2d126ae/src/calamares/CalamaresApplication.h000066400000000000000000000030761430147706700247610ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/calamares/CalamaresWindow.cpp000066400000000000000000000517011430147706700243160ustar00rootroot00000000000000/* === 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 ); QHBoxLayout* extraButtons = new QHBoxLayout; sideLayout->addLayout( extraButtons ); const int defaultFontHeight = CalamaresUtils::defaultFontHeight(); if ( /* About-Calamares Button enabled */ true ) { QPushButton* aboutDialog = new QPushButton; aboutDialog->setObjectName( "aboutButton" ); aboutDialog->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::Information, CalamaresUtils::Original, 2 * QSize( defaultFontHeight, defaultFontHeight ) ) ); CALAMARES_RETRANSLATE_FOR( aboutDialog, aboutDialog->setText( QCoreApplication::translate( "calamares-sidebar", "About" ) ); aboutDialog->setToolTip( QCoreApplication::translate( "calamares-sidebar", "Show information about Calamares" ) ); ); extraButtons->addWidget( aboutDialog ); aboutDialog->setFlat( true ); aboutDialog->setCheckable( true ); QObject::connect( aboutDialog, &QPushButton::clicked, debug, &Calamares::DebugWindowManager::about ); } if ( debug && debug->enabled() ) { QPushButton* debugWindowBtn = new QPushButton; debugWindowBtn->setObjectName( "debugButton" ); debugWindowBtn->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::Bugs, CalamaresUtils::Original, 2 * QSize( defaultFontHeight, defaultFontHeight ) ) ); CALAMARES_RETRANSLATE_FOR( debugWindowBtn, debugWindowBtn->setText( QCoreApplication::translate( "calamares-sidebar", "Debug" ) ); debugWindowBtn->setToolTip( QCoreApplication::translate( "calamares-sidebar", "Show debug information" ) ); ); extraButtons->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-calamares-2d126ae/src/calamares/CalamaresWindow.h000066400000000000000000000023151430147706700237600ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/calamares/DebugWindow.cpp000066400000000000000000000254231430147706700234560ustar00rootroot00000000000000/* === 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 "CalamaresAbout.h" #include "CalamaresVersion.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/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Paste.h" #include "utils/Retranslator.h" #include "widgets/TranslationFix.h" #ifdef WITH_PYTHONQT #include "ViewManager.h" #include "viewpages/PythonQtViewStep.h" #include #endif #include #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 ); } void DebugWindowManager::about() { QString title = Calamares::Settings::instance()->isSetupMode() ? QCoreApplication::translate( "WelcomePage", "About %1 setup" ) : QCoreApplication::translate( "WelcomePage", "About %1 installer" ); QMessageBox mb( QMessageBox::Information, title.arg( CALAMARES_APPLICATION_NAME ), Calamares::aboutString().arg( Calamares::Branding::instance()->versionedName() ), QMessageBox::Ok, nullptr ); Calamares::fixButtonLabels( &mb ); 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(); } } // namespace Calamares calamares-calamares-2d126ae/src/calamares/DebugWindow.h000066400000000000000000000041611430147706700231170ustar00rootroot00000000000000/* === 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 meta-windows (Debug and About windows) * * 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`. * * The about() method shows a modal pop-up about Calamares. */ 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(); void about(); signals: void visibleChanged( bool visible ); private: QPointer< DebugWindow > m_debugWindow; bool m_visible = false; }; } // namespace Calamares #endif calamares-calamares-2d126ae/src/calamares/DebugWindow.ui000066400000000000000000000111741430147706700233070ustar00rootroot00000000000000 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-calamares-2d126ae/src/calamares/VariantModel.cpp000066400000000000000000000126651430147706700236310ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/calamares/VariantModel.h000066400000000000000000000074761430147706700233020ustar00rootroot00000000000000/* === 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 { Q_OBJECT 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-calamares-2d126ae/src/calamares/calamares-navigation.qml000066400000000000000000000052251430147706700253320ustar00rootroot00000000000000/* 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-calamares-2d126ae/src/calamares/calamares-sidebar.qml000066400000000000000000000102061430147706700245770ustar00rootroot00000000000000/* 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 { id: metaArea Layout.fillWidth: true; height: 35 Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom color: Branding.styleString( Branding.SidebarTextHighlight ); visible: true; Rectangle { id: aboutArea height: 35 width: parent.width / 2; anchors.left: parent.left color: Branding.styleString( Branding.SidebarTextHighlight ); visible: true; MouseArea { id: mouseAreaAbout anchors.fill: parent; cursorShape: Qt.PointingHandCursor hoverEnabled: true Text { anchors.verticalCenter: parent.verticalCenter; anchors.horizontalCenter: parent.horizontalCenter; x: parent.x + 4; text: qsTr("About") color: Branding.styleString( Branding.SidebarTextSelect ); font.pointSize : 9 } onClicked: debug.about() } } Rectangle { id: debugArea height: 35 width: parent.width / 2; anchors.right: parent.right color: Branding.styleString( Branding.SidebarTextHighlight ); visible: debug.enabled MouseArea { id: mouseAreaDebug anchors.fill: parent; cursorShape: Qt.PointingHandCursor hoverEnabled: true Text { anchors.verticalCenter: parent.verticalCenter; anchors.horizontalCenter: parent.horizontalCenter; x: parent.x + 4; text: qsTr("Debug") color: Branding.styleString( Branding.SidebarTextSelect ); font.pointSize : 9 } onClicked: debug.toggle() } } } } } calamares-calamares-2d126ae/src/calamares/calamares.qrc000066400000000000000000000004621430147706700231670ustar00rootroot00000000000000 calamares-sidebar.qml calamares-navigation.qml calamares-calamares-2d126ae/src/calamares/main.cpp000066400000000000000000000126611430147706700221640ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/calamares/progresstree/000077500000000000000000000000001430147706700232525ustar00rootroot00000000000000calamares-calamares-2d126ae/src/calamares/progresstree/ProgressTreeDelegate.cpp000066400000000000000000000075001430147706700300370ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/calamares/progresstree/ProgressTreeDelegate.h000066400000000000000000000020531430147706700275020ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/calamares/progresstree/ProgressTreeView.cpp000066400000000000000000000025461430147706700272440ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/calamares/progresstree/ProgressTreeView.h000066400000000000000000000015461430147706700267100ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/calamares/test_conf.cpp000066400000000000000000000046371430147706700232300ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/calamares/testmain.cpp000066400000000000000000000431601430147706700230620ustar00rootroot00000000000000/* === 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( { QStringLiteral( "g" ), QStringLiteral( "global" ) }, QStringLiteral( "Global settings document" ), "global.yaml" ); QCommandLineOption jobOption( { QStringLiteral( "j" ), QStringLiteral( "job" ) }, QStringLiteral( "Job settings document" ), "job.yaml" ); QCommandLineOption langOption( { QStringLiteral( "l" ), QStringLiteral( "language" ) }, QStringLiteral( "Language (global)" ), "languagecode" ); QCommandLineOption brandOption( { QStringLiteral( "b" ), QStringLiteral( "branding" ) }, QStringLiteral( "Branding directory" ), "path/to/branding.desc", "src/branding/default/branding.desc" ); QCommandLineOption uiOption( { QStringLiteral( "U" ), QStringLiteral( "ui" ) }, QStringLiteral( "Enable UI" ) ); QCommandLineOption slideshowOption( { QStringLiteral( "s" ), QStringLiteral( "slideshow" ) }, QStringLiteral( "Run slideshow module" ) ); QCommandLineParser parser; parser.setApplicationDescription( "Calamares module tester" ); parser.addHelpOption(); 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( { 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 "execView@execView". QVariantMap m; const QString execView = QStringLiteral( "execView" ); m.insert( "name", execView ); Calamares::Module::initFrom( Calamares::ModuleSystem::Descriptor::fromDescriptorData( m, execView ), execView ); } ExecViewModule::~ExecViewModule() {} void ExecViewModule::initFrom( const Calamares::ModuleSystem::Descriptor& ) { } void ExecViewModule::loadSelf() { auto* viewStep = new Calamares::ExecutionViewStep(); viewStep->setModuleInstanceKey( instanceKey() ); viewStep->setConfigurationMap( m_configurationMap ); viewStep->appendJobModuleInstanceKey( instanceKey() ); Calamares::ViewManager::instance()->addViewStep( viewStep ); m_loaded = true; } Calamares::Module::Type ExecViewModule::type() const { return Module::Type::View; } Calamares::Module::Interface ExecViewModule::interface() const { return Module::Interface::QtPlugin; } Calamares::JobList ExecViewModule::jobs() const { Calamares::JobList l; const auto* gs = Calamares::JobQueue::instance()->globalStorage(); if ( gs && gs->contains( "jobs" ) ) { QVariantList joblist = gs->value( "jobs" ).toList(); for ( const auto& jd : joblist ) { QVariantMap jobdescription = jd.toMap(); if ( jobdescription.contains( "name" ) && jobdescription.contains( "delay" ) ) { l.append( Calamares::job_ptr( new ExecViewJob( jobdescription.value( "name" ).toString(), jobdescription.value( "delay" ).toULongLong() ) ) ); } } } if ( l.count() > 0 ) { return l; } l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step 1" ) ) ) ); l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step two" ) ) ) ); l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "locking mutexes" ), 20 ) ) ); l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "unlocking mutexes" ), 1 ) ) ); for ( const QString& s : QStringList { "Harder", "Better", "Faster", "Stronger" } ) { l.append( Calamares::job_ptr( new ExecViewJob( s, 0 ) ) ); } l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "cleaning up" ), 20 ) ) ); return l; } static Calamares::Module* load_module( const ModuleConfig& moduleConfig ) { QString moduleName = moduleConfig.moduleName(); if ( moduleName == "-" ) { return new ExecViewModule; } QFileInfo fi; // This is kept around to hold the path of the module descriptor bool ok = false; QVariantMap descriptor; QStringList moduleDirectories { "./", "src/modules/", "modules/", CMAKE_INSTALL_FULL_LIBDIR "/calamares/modules/" }; for ( const QString& prefix : qAsConst( moduleDirectories ) ) { // Could be a complete path, eg. src/modules/dummycpp/module.desc fi = QFileInfo( prefix + moduleName ); 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; } else { if ( !fi.exists() ) { cDebug() << "Expected a descriptor file" << fi.path(); } else { cDebug() << "Read descriptor" << fi.path() << "and it was empty."; } } } } if ( !ok ) { cWarning() << "No suitable module descriptor found in" << Logger::DebugList( moduleDirectories ); 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, fi.absoluteFilePath() ), name, configFile, moduleDirectory ); return module; } static bool is_ui_option( const char* s ) { return !qstrcmp( s, "--ui" ) || !qstrcmp( s, "-U" ); } static bool is_slideshow_option( const char* s ) { return !qstrcmp( s, "--slideshow" ) || !qstrcmp( s, "-s" ); } /** @brief Create the right kind of QApplication * * Does primitive parsing of argv[] to find the --ui option and returns * 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() << Logger::SubEntry << "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 ) { // This doesn't get a SubEntry because the jobs may log a bunch of // things; print the function-header to make clear that we're back in main. cDebug() << "Job #" << count << "name" << p->prettyName(); Calamares::JobResult r = p->exec(); if ( !r ) { 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-calamares-2d126ae/src/libcalamares/000077500000000000000000000000001430147706700212155ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamares/CMakeLists.txt000066400000000000000000000214411430147706700237570ustar00rootroot00000000000000# === 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 CalamaresAbout.cpp 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/Lookup.cpp locale/TimeZone.cpp locale/TranslatableConfiguration.cpp locale/TranslatableString.cpp locale/Translation.cpp locale/TranslationsModel.cpp # Modules modulesystem/Config.cpp modulesystem/Descriptor.cpp modulesystem/InstanceKey.cpp modulesystem/Module.cpp modulesystem/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/Runner.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 utils/Runner.cpp ) calamares_add_test( libcalamaresutilspathstest SOURCES utils/TestPaths.cpp ) # This is not an actual test, it's a test / demo application # for experimenting with GeoIP. add_executable(test_geoip geoip/test_geoip.cpp ${geoip_src}) target_link_libraries( test_geoip Calamares::calamares Qt5::Network yamlcpp::yamlcpp ) calamares_automoc( test_geoip ) if(Qt5DBus_FOUND) add_executable(test_automount partition/calautomount.cpp) target_link_libraries(test_automount Calamares::calamares Qt5::DBus) endif() calamares-calamares-2d126ae/src/libcalamares/CalamaresAbout.cpp000066400000000000000000000050021430147706700246010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2022 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "CalamaresAbout.h" #include "CalamaresVersion.h" #include static const char s_header[] = QT_TRANSLATE_NOOP( "AboutData", "

%1


%2
for %3


" ); static const char s_footer[] = QT_TRANSLATE_NOOP( "AboutData", "Thanks to the Calamares team " "and the Calamares " "translators team.

" "Calamares " "development is sponsored by
" "Blue Systems - " "Liberating Software." ); struct Maintainer { unsigned int start; unsigned int end; const char* name; const char* email; QString text() const { //: Copyright year-year Name return QCoreApplication::translate( "AboutData", "Copyright %1-%2 %3 <%4>
" ) .arg( start ) .arg( end ) .arg( name ) .arg( email ); } }; static constexpr const Maintainer maintainers[] = { { 2014, 2017, "Teo Mrnjavac", "teo@kde.org" }, { 2017, 2022, "Adriaan de Groot", "groot@kde.org" }, }; static QString aboutMaintainers() { return std::accumulate( std::cbegin( maintainers ), std::cend( maintainers ), QString(), []( QString& s, const Maintainer& m ) { s += m.text(); return s; } ); } static QString substituteVersions( const QString& s ) { return s.arg( CALAMARES_APPLICATION_NAME ).arg( CALAMARES_VERSION ); } const QString Calamares::aboutString() { return substituteVersions( QCoreApplication::translate( "AboutData", s_header ) ) + aboutMaintainers() + QCoreApplication::translate( "AboutData", s_footer ); } const QString Calamares::aboutStringUntranslated() { return substituteVersions( QString( s_header ) ) + aboutMaintainers() + QString( s_footer ); } calamares-calamares-2d126ae/src/libcalamares/CalamaresAbout.h000066400000000000000000000016251430147706700242550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2022 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CALAMARES_CALAMARESABOUT_H #define CALAMARES_CALAMARESABOUT_H #include "DllMacro.h" #include namespace Calamares { /** @brief Returns an about string for the application * * The about string includes a header-statement, a list of maintainer * addresses, and a thank-you to Blue Systems. There is on %-substitution * left, where you can fill in the name of the product (e.g. to say * "Calamares for Netrunner" or ".. for Manjaro"). */ DLLEXPORT const QString aboutStringUntranslated(); /// @brief As above, but translated in the current Calamares language DLLEXPORT const QString aboutString(); } // namespace Calamares #endif calamares-calamares-2d126ae/src/libcalamares/CalamaresConfig.h.in000066400000000000000000000021511430147706700250100ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/CalamaresVersion.h.in000066400000000000000000000015171430147706700252350ustar00rootroot00000000000000// 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-calamares-2d126ae/src/libcalamares/CalamaresVersionX.h.in000066400000000000000000000007211430147706700253610ustar00rootroot00000000000000// 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-calamares-2d126ae/src/libcalamares/CppJob.cpp000066400000000000000000000013231430147706700230750ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/CppJob.h000066400000000000000000000021411430147706700225410ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/DllMacro.h000066400000000000000000000030141430147706700230610ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/GlobalStorage.cpp000066400000000000000000000074421430147706700244550ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/GlobalStorage.h000066400000000000000000000131431430147706700241150ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/Job.cpp000066400000000000000000000032241430147706700224340ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/Job.h000066400000000000000000000113661430147706700221070ustar00rootroot00000000000000/* === 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, see succeeded(). */ 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 Is this JobResult a success? * * Equivalent to errorCode() == 0. */ bool succeeded() const { return this->operator bool(); } /// @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: /** @brief Signals that the job has made progress * * The parameter @p percent should be between 0 (0%) and 1 (100%). * Values outside of this range will be clamped. */ void progress( qreal percent ); private: bool m_emergency = false; }; using job_ptr = QSharedPointer< Job >; using JobList = QList< job_ptr >; } // namespace Calamares #endif // CALAMARES_JOB_H calamares-calamares-2d126ae/src/libcalamares/JobExample.cpp000066400000000000000000000012431430147706700237470ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/JobExample.h000066400000000000000000000026461430147706700234240ustar00rootroot00000000000000/* === 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 { Q_OBJECT 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 { Q_OBJECT 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 { Q_OBJECT public: explicit FailJob( const QString& name, QObject* parent = nullptr ) : NamedJob( name, parent ) { } virtual JobResult exec() override; }; } // namespace Calamares #endif // CALAMARES_JOB_EXAMPLE_H calamares-calamares-2d126ae/src/libcalamares/JobQueue.cpp000066400000000000000000000206561430147706700234510ustar00rootroot00000000000000/* === 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 { Q_OBJECT 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; Logger::Once o; m_jobIndex = 0; for ( const auto& jobitem : *m_runningJobs ) { if ( failureEncountered && !jobitem.job->isEmergency() ) { cDebug() << o << "Skipping non-emergency job" << jobitem.job->prettyName(); } else { cDebug() << o << "Starting" << ( failureEncountered ? "EMERGENCY JOB" : "job" ) << jobitem.job->prettyName() << '(' << ( m_jobIndex + 1 ) << '/' << m_runningJobs->count() << ')'; o.refresh(); // So next time it shows the function header again emitProgress( 0.0 ); // 0% for *this job* connect( jobitem.job.data(), &Job::progress, this, &JobThread::emitProgress ); auto result = jobitem.job->exec(); if ( !failureEncountered && !result ) { // so this is the first failure failureEncountered = true; message = result.message(); details = result.details(); } QThread::msleep( 16 ); // Very brief rest before reporting the job as complete emitProgress( 1.0 ); // 100% for *this job* } 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 #include "utils/moc-warnings.h" #include "JobQueue.moc" calamares-calamares-2d126ae/src/libcalamares/JobQueue.h000066400000000000000000000063051430147706700231110ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/ProcessJob.cpp000066400000000000000000000035261430147706700240000ustar00rootroot00000000000000/* === 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 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-calamares-2d126ae/src/libcalamares/ProcessJob.h000066400000000000000000000021651430147706700234430ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/PythonHelper.cpp000066400000000000000000000270511430147706700243470ustar00rootroot00000000000000/* === 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 ) { #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wswitch-enum" #endif // 49 enumeration values not handled 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(); } #ifdef __clang__ #pragma clang diagnostic pop #endif } 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-calamares-2d126ae/src/libcalamares/PythonHelper.h000066400000000000000000000045111430147706700240100ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/PythonJob.cpp000066400000000000000000000405621430147706700236440ustar00rootroot00000000000000/* === 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; #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdisabled-macro-expansion" #endif BOOST_PYTHON_FUNCTION_OVERLOADS( mount_overloads, CalamaresPython::mount, 2, 4 ); BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_call_str_overloads, CalamaresPython::target_env_call, 1, 3 ); BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_call_list_overloads, CalamaresPython::target_env_call, 1, 3 ); 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_FUNCTION_OVERLOADS( target_env_process_output_overloads, CalamaresPython::target_env_process_output, 1, 4 ); BOOST_PYTHON_FUNCTION_OVERLOADS( host_env_process_output_overloads, CalamaresPython::host_env_process_output, 1, 4 ); #ifdef __clang__ #pragma clang diagnostic pop #endif BOOST_PYTHON_MODULE( libcalamares ) { bp::object package = bp::scope(); 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 ) // .. Logging functions bp::def( "debug", &CalamaresPython::debug, bp::args( "s" ), "Writes the given string to the Calamares debug stream." ); bp::def( "warning", &CalamaresPython::warning, bp::args( "s" ), "Writes the given string to the Calamares warning stream." ); bp::def( "warn", &CalamaresPython::warning, bp::args( "s" ), "Writes the given string to the Calamares warning stream." ); bp::def( "error", &CalamaresPython::error, bp::args( "s" ), "Writes the given string to the Calamares error stream." ); // .. YAML functions bp::def( "load_yaml", &CalamaresPython::load_yaml, bp::args( "path" ), "Loads YAML from a file." ); // .. Filesystem functions bp::def( "mount", &CalamaresPython::mount, mount_overloads( bp::args( "device_path", "mount_point", "filesystem_name", "options" ), "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" ) ); // .. Process functions 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( "target_env_process_output", &CalamaresPython::target_env_process_output, target_env_process_output_overloads( bp::args( "command", "callback", "stdin", "timeout" ), "Runs the specified @p command in the target system." ) ); bp::def( "host_env_process_output", &CalamaresPython::host_env_process_output, host_env_process_output_overloads( bp::args( "command", "callback", "stdin", "timeout" ), "Runs the specified command in the host system." ) ); // .. String functions bp::def( "obscure", &CalamaresPython::obscure, bp::args( "s" ), "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." ); // .. Translation functions 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 string" << Logger::Pointer( preScript ) << "length" << ( preScript ? strlen( preScript ) : 0 ); } } // namespace Calamares calamares-calamares-2d126ae/src/libcalamares/PythonJob.h000066400000000000000000000036421430147706700233070ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/PythonJobApi.cpp000066400000000000000000000253271430147706700243000ustar00rootroot00000000000000/* === 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 "locale/Global.h" #include "partition/Mount.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/RAII.h" #include "utils/Runner.h" #include "utils/String.h" #include "utils/Yaml.h" #include #include #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; } static inline QStringList bp_list_to_qstringlist( const bp::list& args ) { QStringList list; for ( int i = 0; i < bp::len( args ); ++i ) { list.append( QString::fromStdString( bp::extract< std::string >( args[ i ] ) ) ); } return list; } static inline CalamaresUtils::ProcessResult target_env_command( const QStringList& args, const std::string& input, int timeout ) { // Since Python doesn't give us the type system for distinguishing // seconds from other integral types, massage to seconds here. return CalamaresUtils::System::instance()->targetEnvCommand( args, QString(), QString::fromStdString( input ), std::chrono::seconds( timeout ) ); } namespace CalamaresPython { 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 ) ); } int target_env_call( const std::string& command, const std::string& input, int timeout ) { return target_env_command( QStringList { QString::fromStdString( command ) }, input, timeout ).first; } int target_env_call( const bp::list& args, const std::string& input, int timeout ) { return target_env_command( bp_list_to_qstringlist( args ), input, timeout ).first; } int check_target_env_call( const std::string& command, const std::string& input, int timeout ) { auto ec = target_env_command( QStringList { QString::fromStdString( command ) }, input, timeout ); return handle_check_target_env_call_error( ec, QString::fromStdString( command ) ); } int check_target_env_call( const bp::list& args, const std::string& input, int timeout ) { auto ec = target_env_command( bp_list_to_qstringlist( args ), input, timeout ); if ( !ec.first ) { return ec.first; } QStringList failedCmdList = bp_list_to_qstringlist( args ); return handle_check_target_env_call_error( ec, failedCmdList.join( ' ' ) ); } std::string check_target_env_output( const std::string& command, const std::string& input, int timeout ) { auto ec = target_env_command( QStringList { QString::fromStdString( command ) }, input, timeout ); handle_check_target_env_call_error( ec, QString::fromStdString( command ) ); return ec.second.toStdString(); } std::string check_target_env_output( const bp::list& args, const std::string& input, int timeout ) { QStringList list = bp_list_to_qstringlist( args ); auto ec = target_env_command( list, input, timeout ); handle_check_target_env_call_error( ec, list.join( ' ' ) ); return ec.second.toStdString(); } static const char output_prefix[] = "[PYTHON JOB]:"; static inline void log_action( unsigned int level, const std::string& s ) { Logger::CDebug( level ) << output_prefix << QString::fromStdString( s ); } void debug( const std::string& s ) { log_action( Logger::LOGDEBUG, s ); } void warning( const std::string& s ) { log_action( Logger::LOGWARNING, s ); } void error( const std::string& s ) { log_action( Logger::LOGERROR, s ); } boost::python::dict load_yaml( const std::string& path ) { const QString filePath = QString::fromStdString( path ); bool ok = false; auto map = CalamaresUtils::loadYaml( filePath, &ok ); if ( !ok ) { cWarning() << "Loading YAML from" << filePath << "failed."; } return variantMapToPyDict( map ); } PythonJobInterface::PythonJobInterface( Calamares::PythonJob* parent ) : m_parent( parent ) { 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 ); } } static inline int _process_output( Calamares::Utils::RunLocation location, const boost::python::list& args, const boost::python::object& callback, const std::string& input, int timeout ) { Calamares::Utils::Runner r( bp_list_to_qstringlist( args ) ); r.setLocation( location ); if ( !callback.is_none() ) { bp::extract< bp::list > x( callback ); if ( x.check() ) { QObject::connect( &r, &decltype( r )::output, [ cb = callback.attr( "append" ) ]( const QString& s ) { cb( s.toStdString() ); } ); } else { QObject::connect( &r, &decltype( r )::output, [ &callback ]( const QString& s ) { callback( s.toStdString() ); } ); } r.enableOutputProcessing(); } if ( !input.empty() ) { r.setInput( QString::fromStdString( input ) ); } if ( timeout > 0 ) { r.setTimeout( std::chrono::seconds( timeout ) ); } auto result = r.run(); if ( result.getExitCode() ) { return handle_check_target_env_call_error( result, r.executable() ); } return 0; } int target_env_process_output( const boost::python::list& args, const boost::python::object& callback, const std::string& input, int timeout ) { return _process_output( Calamares::Utils::RunLocation::RunInTarget, args, callback, input, timeout ); } int host_env_process_output( const boost::python::list& args, const boost::python::object& callback, const std::string& input, int timeout ) { return _process_output( Calamares::Utils::RunLocation::RunInHost, args, callback, input, timeout ); } std::string obscure( const std::string& string ) { 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(); QString lang = CalamaresUtils::Locale::readGS( *gs, QStringLiteral( "LANG" ) ); if ( !lang.isEmpty() ) { 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() { // Going to log informatively just once static bool first_time = true; cScopedAssignment( &first_time, false ); // TODO: distinguish between -d runs and normal runs // TODO: can we detect DESTDIR-installs? QStringList candidatePaths = 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() ); // . if ( first_time ) { cDebug() << "Determining gettext path from" << candidatePaths; } QStringList candidateLanguages = _gettext_languages(); for ( const auto& lang : candidateLanguages ) { for ( auto localedir : candidatePaths ) { QDir ldir( localedir ); if ( ldir.cd( lang ) ) { Logger::CDebug( Logger::LOGDEBUG ) << output_prefix << "Found gettext" << lang << "in" << ldir.canonicalPath(); return bp::object( localedir.toStdString() ); } } } cWarning() << "No translation found for languages" << candidateLanguages; return bp::object(); // None } } // namespace CalamaresPython calamares-calamares-2d126ae/src/libcalamares/PythonJobApi.h000066400000000000000000000053111430147706700237340ustar00rootroot00000000000000/* === 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& input = std::string(), int timeout = 0 ); int target_env_call( const boost::python::list& args, const std::string& input = std::string(), int timeout = 0 ); int check_target_env_call( const std::string& command, const std::string& input = std::string(), int timeout = 0 ); int check_target_env_call( const boost::python::list& args, const std::string& input = std::string(), int timeout = 0 ); std::string check_target_env_output( const std::string& command, const std::string& input = std::string(), int timeout = 0 ); std::string check_target_env_output( const boost::python::list& args, const std::string& input = std::string(), int timeout = 0 ); int target_env_process_output( const boost::python::list& args, const boost::python::object& callback = boost::python::object(), const std::string& input = std::string(), int timeout = 0 ); int host_env_process_output( const boost::python::list& args, const boost::python::object& callback = boost::python::object(), const std::string& input = std::string(), int timeout = 0 ); std::string obscure( const std::string& string ); boost::python::object gettext_path(); boost::python::list gettext_languages(); void debug( const std::string& s ); void warning( const std::string& s ); void error( const std::string& s ); /** @brief Loads YAML and returns (nested) dicts representing it * */ boost::python::dict load_yaml( const std::string& path ); class PythonJobInterface { 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-calamares-2d126ae/src/libcalamares/Settings.cpp000066400000000000000000000335731430147706700235340ustar00rootroot00000000000000/* === 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() { if ( !s_instance ) { cWarning() << "Getting nullptr 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 ) { cWarning() << "Using bogus Calamares settings in" << ( debugMode ? QStringLiteral( "debug" ) : QStringLiteral( "regular" ) ) << "mode"; s_instance = this; } Settings::Settings( const QString& settingsFilePath, bool debugMode ) : QObject() , m_debug( debugMode ) , 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; } bool Settings::isModuleEnabled( const QString& module ) const { // Iterate over the list of modules searching for a match for ( const auto& moduleInstance : qAsConst( m_moduleInstances ) ) { if ( moduleInstance.key().module() == module ) { return true; } } return false; } void Settings::reconcileInstancesAndSequence() { // Since moduleFinder captures targetKey by reference, we can // update targetKey to change what the finder lambda looks for. Calamares::ModuleSystem::InstanceKey targetKey; auto moduleFinder = [ &targetKey ]( const InstanceDescription& d ) { return d.isValid() && d.key() == targetKey; }; // Check the sequence against the existing instances (which so far are only custom) for ( const auto& step : m_modulesSequence ) { for ( const auto& instanceKey : step.second ) { targetKey = instanceKey; const auto it = std::find_if( m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); if ( it == m_moduleInstances.constEnd() ) { if ( instanceKey.isCustom() ) { cWarning() << "Custom instance key" << instanceKey << "is not listed in the *instances*"; } m_moduleInstances.append( InstanceDescription( instanceKey ) ); } } } } void Settings::setConfiguration( const QByteArray& ba, const QString& explainName ) { try { YAML::Node config = YAML::Load( ba.constData() ); Q_ASSERT( config.IsMap() ); interpretModulesSearch( debugMode(), CalamaresUtils::yamlToStringList( config[ "modules-search" ] ), m_modulesSearchPaths ); interpretInstances( config[ "instances" ], m_moduleInstances ); interpretSequence( config[ "sequence" ], m_modulesSequence ); m_brandingComponentName = requireString( config, "branding" ); m_promptInstall = requireBool( config, "prompt-install", false ); m_doChroot = !requireBool( config, "dont-chroot", false ); m_isSetupMode = requireBool( config, "oem-setup", !m_doChroot ); m_disableCancel = requireBool( config, "disable-cancel", false ); m_disableCancelDuringExec = requireBool( config, "disable-cancel-during-exec", false ); m_hideBackAndNextDuringExec = requireBool( config, "hide-back-and-next-during-exec", false ); m_quitAtEnd = requireBool( config, "quit-at-end", false ); reconcileInstancesAndSequence(); } catch ( YAML::Exception& e ) { CalamaresUtils::explainYamlException( e, ba, explainName ); } } QStringList Settings::modulesSearchPaths() const { 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-calamares-2d126ae/src/libcalamares/Settings.h000066400000000000000000000151561430147706700231760ustar00rootroot00000000000000/* === 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 Returns whether the named module is enabled * * Returns true if @p module is enabled in settings.conf. Be aware that it * only tests for a specific module name so if a QML and non-QML version * of the same module exists, it must be specified explicitly * * @p module is a module name or module key e.g. packagechooser) and not a * full module key+id (e.g. packagechooser@packagechooser) * */ bool isModuleEnabled( const QString& module ) const; /** @brief Global setting of disable-cancel: can't cancel ever. */ bool disableCancel() const { return m_disableCancel; } /** @brief Temporary setting of disable-cancel: can't cancel during exec. */ bool disableCancelDuringExec() const { return m_disableCancelDuringExec; } bool hideBackAndNextDuringExec() const { return m_hideBackAndNextDuringExec; } /** @brief Is quit-at-end set? (Quit automatically when done) */ bool quitAtEnd() const { return m_quitAtEnd; } 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-calamares-2d126ae/src/libcalamares/Tests.cpp000066400000000000000000000475011430147706700230320ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/000077500000000000000000000000001430147706700223205ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamares/geoip/GeoIPFixed.cpp000066400000000000000000000013351430147706700247510ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/GeoIPFixed.h000066400000000000000000000022241430147706700244140ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/GeoIPJSON.cpp000066400000000000000000000042401430147706700244610ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/GeoIPJSON.h000066400000000000000000000022261430147706700241300ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/GeoIPTests.cpp000066400000000000000000000175431430147706700250240ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/GeoIPTests.h000066400000000000000000000013011430147706700244520ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/GeoIPXML.cpp000066400000000000000000000037771430147706700243660ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/GeoIPXML.h000066400000000000000000000022421430147706700240150ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/Handler.cpp000066400000000000000000000102611430147706700244010ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/Handler.h000066400000000000000000000047531430147706700240570ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/Interface.cpp000066400000000000000000000017561430147706700247350ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/Interface.h000066400000000000000000000055341430147706700244000ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/geoip/test_geoip.cpp000066400000000000000000000037541430147706700251770ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/locale/000077500000000000000000000000001430147706700224545ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamares/locale/CountryData_p.cpp000066400000000000000000000372321430147706700257430ustar00rootroot00000000000000/* 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-calamares-2d126ae/src/libcalamares/locale/Global.cpp000066400000000000000000000042401430147706700243600ustar00rootroot00000000000000/* === 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 ); } QString readGS( Calamares::GlobalStorage& gs, const QString& key ) { if ( gs.contains( gsKey ) ) { QVariantMap localeConf = gs.value( gsKey ).toMap(); if ( localeConf.contains( key ) ) { return localeConf.value( key ).toString(); } } return QString(); } } // namespace Locale } // namespace CalamaresUtils calamares-calamares-2d126ae/src/libcalamares/locale/Global.h000066400000000000000000000050711430147706700240300ustar00rootroot00000000000000/* === 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 ); /** @brief Gets a value from the *localeConf* map in @p gs * * If the key is not set (or doesn't exist), returns QString(). */ DLLEXPORT QString readGS( Calamares::GlobalStorage& gs, const QString& key ); } // namespace Locale } // namespace CalamaresUtils #endif calamares-calamares-2d126ae/src/libcalamares/locale/Lookup.cpp000066400000000000000000000044071430147706700244360ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/locale/Lookup.h000066400000000000000000000027621430147706700241050ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/locale/Tests.cpp000066400000000000000000000423551430147706700242730ustar00rootroot00000000000000/* === 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/TimeZone.h" #include "locale/TranslatableConfiguration.h" #include "locale/TranslationsModel.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include 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-calamares-2d126ae/src/libcalamares/locale/TimeZone.cpp000066400000000000000000000320021430147706700247070ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/locale/TimeZone.h000066400000000000000000000144741430147706700243710ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/locale/TranslatableConfiguration.cpp000066400000000000000000000057251430147706700303350ustar00rootroot00000000000000/* === 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 "TranslationsModel.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 { // TODO: keep track of special cases like sr@latin and ca@valencia QString localeName = locale.name(); // Special case, sr@latin doesn't have the @latin reflected in the name if ( locale.language() == QLocale::Language::Serbian && locale.script() == QLocale::Script::LatinScript ) { 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-calamares-2d126ae/src/libcalamares/locale/TranslatableConfiguration.h000066400000000000000000000066571430147706700300070ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/locale/TranslatableString.cpp000066400000000000000000000030241430147706700267620ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/locale/TranslatableString.h000066400000000000000000000031631430147706700264330ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/locale/Translation.cpp000066400000000000000000000141271430147706700254630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #include "Translation.h" #include struct TranslationSpecialCase { const char* id; // The Calamares ID for the translation const char** regions; QLocale::Language language; QLocale::Script script; QLocale::Country country; const char* name; // Native name, if different from Qt constexpr bool customLocale() const { return language != QLocale::Language::AnyLanguage; } }; /** @brief Handle special cases of Calamares language names * * If a given @p id (e.g. en_US, or sr@latin) has special handling, * put an entry in this table. The QLocale constants are used when a * particular @p id needs specific configuration, **if** @p language * is not @c AnyLanguage. The @p name is used as a human-readable * native name if the Qt name is not suitable. * * Another form of lookup maps a @p language + a region-identifier * to a @p id, running around Qt's neglect of `@region` variants. * * Examples: * - `sr@latin` needs specific Qt Locale settnigs, but the name is OK * - Chinese needs a specific name, but the Locale is OK */ static const char* serbian_latin_regions[] = { "latin", "latn", nullptr }; static const char* catalan_regions[] = { "valencia", nullptr }; static constexpr const TranslationSpecialCase special_cases[] = { { "sr@latin", serbian_latin_regions, QLocale::Language::Serbian, QLocale::Script::LatinScript, QLocale::Country::Serbia, nullptr }, // Valencian is a regional variant of Catalan { "ca@valencia", catalan_regions, QLocale::Language::Catalan, QLocale::Script::AnyScript, QLocale::Country::AnyCountry, "Català (València)" }, { "ca_ES@valencia", catalan_regions, QLocale::Language::Catalan, QLocale::Script::AnyScript, QLocale::Country::AnyCountry, "Català (València)" }, // Simplified Chinese, but drop the (China) from the name { "zh_CN", nullptr, QLocale::Language::AnyLanguage, QLocale::Script::AnyScript, QLocale::Country::AnyCountry, "简体中文" }, // Traditional Chinese, but drop (Taiwan) from the name { "zh_TW", nullptr, QLocale::Language::AnyLanguage, QLocale::Script::AnyScript, QLocale::Country::AnyCountry, "ç¹é«”中文" }, { "oc", nullptr, QLocale::Language::AnyLanguage, QLocale::Script::AnyScript, QLocale::Country::AnyCountry, "Lenga d'òc" }, }; static inline bool lookup_region( const QByteArray& region, const char** regions_list ) { if ( regions_list ) { while ( *regions_list ) { if ( region == *regions_list ) { return true; } regions_list++; } } return false; } static QString specialCaseSystemLanguage() { const QByteArray lang_p = qgetenv( "LANG" ); if ( lang_p.isEmpty() ) { // This will figure out the system language some other way return {}; } auto lang_parts = lang_p.split( '@' ); if ( lang_parts.size() != 2 ) { return {}; } QLocale locale( QString::fromLatin1( lang_p ) ); auto it = std::find_if( std::cbegin( special_cases ), std::cend( special_cases ), [ language = locale.language(), region = lang_parts[ 1 ] ]( const TranslationSpecialCase& s ) { return ( s.language == language ) && lookup_region( region, s.regions ); } ); return ( it != std::cend( special_cases ) ) ? QString::fromLatin1( it->id ) : QString(); } namespace CalamaresUtils { namespace Locale { Translation::Translation( QObject* parent ) : Translation( { specialCaseSystemLanguage() }, LabelFormat::IfNeededWithCountry, parent ) { } Translation::Translation( const Id& localeId, LabelFormat format, QObject* parent ) : QObject( parent ) , m_locale( getLocale( localeId ) ) , m_localeId( localeId.name.isEmpty() ? m_locale.name() : localeId.name ) { auto it = std::find_if( std::cbegin( special_cases ), std::cend( special_cases ), [ &localeId ]( const TranslationSpecialCase& s ) { return localeId.name == s.id; } ); const char* name = ( it != std::cend( special_cases ) ) ? it->name : nullptr; QString longFormat = QObject::tr( "%1 (%2)" ); QString languageName = name ? QString::fromUtf8( name ) : m_locale.nativeLanguageName(); QString englishName = m_locale.languageToString( m_locale.language() ); if ( languageName.isEmpty() ) { languageName = QString( "* %1 (%2)" ).arg( localeId.name, englishName ); } bool needsCountryName = ( format == LabelFormat::AlwaysWithCountry ) || ( !name && localeId.name.contains( '_' ) && QLocale::countriesForLanguage( m_locale.language() ).count() > 1 ); QString countryName = needsCountryName ? m_locale.nativeCountryName() : QString(); m_label = needsCountryName ? longFormat.arg( languageName, countryName ) : languageName; m_englishLabel = needsCountryName ? longFormat.arg( englishName, QLocale::countryToString( m_locale.country() ) ) : englishName; } QLocale Translation::getLocale( const Id& localeId ) { const QString& localeName = localeId.name; if ( localeName.isEmpty() ) { return QLocale(); } auto it = std::find_if( std::cbegin( special_cases ), std::cend( special_cases ), [ &localeId ]( const TranslationSpecialCase& s ) { return localeId.name == s.id; } ); if ( it != std::cend( special_cases ) && it->customLocale() ) { return QLocale( it->language, it->script, it->country ); } return QLocale( localeName ); } } // namespace Locale } // namespace CalamaresUtils calamares-calamares-2d126ae/src/libcalamares/locale/Translation.h000066400000000000000000000075131430147706700251310ustar00rootroot00000000000000/* === 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_TRANSLATION_H #define LOCALE_TRANSLATION_H #include "utils/Logger.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 Translation : public QObject { Q_OBJECT public: /** @brief Formatting option for label -- add (country) to label. */ enum class LabelFormat { AlwaysWithCountry, IfNeededWithCountry }; struct Id { QString name; }; /** @brief Empty locale. This uses the system-default locale. */ Translation( 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. */ Translation( const Id& localeId, LabelFormat format = LabelFormat::IfNeededWithCountry, QObject* parent = nullptr ); /** @brief Define a sorting order. * * Locales are sorted by their id, which means the ISO 2-letter code + country. */ bool operator<( const Translation& 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; } /** @brief Gets the Calamares internal name (code) of the locale. * * This is a strongly-typed return to avoid it ending up all over * the place as a QString. */ Id id() const { return { m_localeId }; } /// @brief Convenience accessor to the language part of the locale QLocale::Language language() const { return m_locale.language(); } /// @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 Id& localeId ); private: QLocale m_locale; QString m_localeId; // the locale identifier, e.g. "en_GB" QString m_label; // the native name of the locale QString m_englishLabel; }; static inline QDebug& operator<<( QDebug& s, const Translation::Id& id ) { return s << id.name; } static inline bool operator==( const Translation::Id& lhs, const Translation::Id& rhs ) { return lhs.name == rhs.name; } } // namespace Locale } // namespace CalamaresUtils #endif calamares-calamares-2d126ae/src/libcalamares/locale/TranslationsModel.cpp000066400000000000000000000065761430147706700266400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Camilo Higuita * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #include "TranslationsModel.h" #include "Lookup.h" #include "CalamaresVersion.h" // For the list of translations namespace CalamaresUtils { namespace Locale { TranslationsModel::TranslationsModel( const QStringList& locales, QObject* parent ) : QAbstractListModel( parent ) , m_localeIds( locales ) { Q_ASSERT( locales.count() > 0 ); m_locales.reserve( locales.count() ); for ( const auto& l : locales ) { m_locales.push_back( new Translation( { l }, Translation::LabelFormat::IfNeededWithCountry, this ) ); } } TranslationsModel::~TranslationsModel() {} int TranslationsModel::rowCount( const QModelIndex& ) const { return m_locales.count(); } QVariant TranslationsModel::data( const QModelIndex& index, int role ) const { if ( ( role != LabelRole ) && ( role != EnglishLabelRole ) ) { return QVariant(); } if ( !index.isValid() ) { return QVariant(); } const auto& locale = m_locales.at( index.row() ); switch ( role ) { case LabelRole: return locale->label(); case EnglishLabelRole: return locale->englishLabel(); default: return QVariant(); } } QHash< int, QByteArray > TranslationsModel::roleNames() const { return { { LabelRole, "label" }, { EnglishLabelRole, "englishLabel" } }; } const Translation& TranslationsModel::locale( int row ) const { if ( ( row < 0 ) || ( row >= m_locales.count() ) ) { for ( const auto& l : m_locales ) if ( l->isEnglish() ) { return *l; } return *m_locales[ 0 ]; } return *m_locales[ row ]; } int TranslationsModel::find( std::function< bool( const Translation& ) > predicate ) const { for ( int row = 0; row < m_locales.count(); ++row ) { if ( predicate( *m_locales[ row ] ) ) { return row; } } return -1; } int TranslationsModel::find( std::function< bool( const QLocale& ) > predicate ) const { return find( [ & ]( const Translation& l ) { return predicate( l.locale() ); } ); } int TranslationsModel::find( const QLocale& locale ) const { return find( [ & ]( const Translation& l ) { return locale == l.locale(); } ); } int TranslationsModel::find( const QString& countryCode ) const { if ( countryCode.length() != 2 ) { return -1; } auto c_l = countryData( countryCode ); int r = find( [ & ]( const Translation& l ) { return ( l.language() == c_l.second ) && ( l.country() == c_l.first ); } ); if ( r >= 0 ) { return r; } return find( [ & ]( const Translation& l ) { return l.language() == c_l.second; } ); } int TranslationsModel::find( const Translation::Id& id ) const { return find( [ & ]( const Translation& l ) { return l.id() == id; } ); } TranslationsModel* availableTranslations() { static TranslationsModel* model = new TranslationsModel( QStringLiteral( CALAMARES_TRANSLATION_LANGUAGES ).split( ';' ) ); return model; } } // namespace Locale } // namespace CalamaresUtils calamares-calamares-2d126ae/src/libcalamares/locale/TranslationsModel.h000066400000000000000000000050411430147706700262670ustar00rootroot00000000000000/* === 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_TRANSLATIONSMODEL_H #define LOCALE_TRANSLATIONSMODEL_H #include "DllMacro.h" #include "Translation.h" #include #include namespace CalamaresUtils { namespace Locale { class DLLEXPORT TranslationsModel : public QAbstractListModel { Q_OBJECT public: enum { LabelRole = Qt::DisplayRole, EnglishLabelRole = Qt::UserRole + 1 }; TranslationsModel( const QStringList& locales, QObject* parent = nullptr ); ~TranslationsModel() 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 Translation& locale( int row ) const; /// @brief Returns all of the locale Ids (e.g. en_US) put into this model. const QStringList& localeIds() const { return m_localeIds; } /** @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 Translation& ) > predicate ) const; /// @brief Looks for an item using the same locale, -1 if there isn't one int find( const QLocale& ) const; /// @brief Looks for an item that best matches the 2-letter country code int find( const QString& countryCode ) const; /// @brief Looks up a translation Id int find( const Translation::Id& id ) const; private: QVector< Translation* > 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 TranslationsModel* availableTranslations(); } // namespace Locale } // namespace CalamaresUtils #endif calamares-calamares-2d126ae/src/libcalamares/locale/ZoneData_p.cxxtr000066400000000000000000000435771430147706700256120ustar00rootroot00000000000000/* 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-calamares-2d126ae/src/libcalamares/locale/cldr-extractor.py000066400000000000000000000212151430147706700257640ustar00rootroot00000000000000#! /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-calamares-2d126ae/src/libcalamares/locale/zone-extractor.py000066400000000000000000000051721430147706700260170ustar00rootroot00000000000000#! /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-calamares-2d126ae/src/libcalamares/modulesystem/000077500000000000000000000000001430147706700237475ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamares/modulesystem/Actions.h000066400000000000000000000010461430147706700255210ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/Config.cpp000066400000000000000000000063671430147706700256740ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/Config.h000066400000000000000000000114721430147706700253320ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/Descriptor.cpp000066400000000000000000000117431430147706700265770ustar00rootroot00000000000000/* === 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, const QString& descriptorPath ) { Descriptor d; Logger::Once o; { bool typeOk = false; QString typeValue = moduleDesc.value( "type" ).toString(); Type t = typeNames().find( typeValue, typeOk ); if ( !typeOk ) { if ( o ) { cWarning() << o << "Descriptor file" << descriptorPath; } cWarning() << o << "Module descriptor contains invalid *type*" << typeValue; } bool interfaceOk = false; QString interfaceValue = moduleDesc.value( "interface" ).toString(); Interface i = interfaceNames().find( interfaceValue, interfaceOk ); if ( !interfaceOk ) { if ( o ) { cWarning() << o << "Descriptor file" << descriptorPath; } cWarning() << o << "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() ) { if ( o ) { cWarning() << o << "Descriptor file" << descriptorPath; } cWarning() << o << "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() ) { if ( o ) { cWarning() << o << "Descriptor file" << descriptorPath; } cWarning() << o << "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() ) { if ( o ) { cWarning() << o << "Descriptor file" << descriptorPath; } cWarning() << o << "Module descriptor contains extra keys:" << Logger::DebugList( superfluousKeys ); d.m_isValid = false; } return d; } } // namespace ModuleSystem } // namespace Calamares calamares-calamares-2d126ae/src/libcalamares/modulesystem/Descriptor.h000066400000000000000000000105251430147706700262410ustar00rootroot00000000000000/* === 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. * * The @p descriptorPath is used only for debug messages, the * data is only read from @p moduleDesc. * */ static Descriptor fromDescriptorData( const QVariantMap& moduleDesc, const QString& descriptorPath ); 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-calamares-2d126ae/src/libcalamares/modulesystem/InstanceKey.cpp000066400000000000000000000016271430147706700266760ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/InstanceKey.h000066400000000000000000000047731430147706700263500ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/Module.cpp000066400000000000000000000102321430147706700256760ustar00rootroot00000000000000/* === 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() ) { cWarning() << "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; } m_configurationMap = CalamaresUtils::yamlMapToVariant( doc ); m_emergency = m_maybe_emergency && m_configurationMap.contains( EMERGENCY ) && m_configurationMap[ EMERGENCY ].toBool(); return; } } cWarning() << "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-calamares-2d126ae/src/libcalamares/modulesystem/Module.h000066400000000000000000000122651430147706700253530ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/Preset.cpp000066400000000000000000000042421430147706700257170ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/Preset.h000066400000000000000000000052431430147706700253660ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/Requirement.h000066400000000000000000000031651430147706700264250ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/RequirementsChecker.cpp000066400000000000000000000100161430147706700304210ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/RequirementsChecker.h000066400000000000000000000033031430147706700300670ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/RequirementsModel.cpp000066400000000000000000000054671430147706700301330ustar00rootroot00000000000000/* === 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 ); beginResetModel(); m_requirements.append( requirements ); changeRequirementsList(); 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-calamares-2d126ae/src/libcalamares/modulesystem/RequirementsModel.h000066400000000000000000000057021430147706700275700ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/modulesystem/Tests.cpp000066400000000000000000000111451430147706700255570ustar00rootroot00000000000000/* === 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() { const QString path = QStringLiteral( "/bogus.desc" ); { QVariantMap m; auto d = Calamares::ModuleSystem::Descriptor::fromDescriptorData( m, path ); QVERIFY( !d.isValid() ); QVERIFY( d.name().isEmpty() ); } { QVariantMap m; m.insert( "name", QVariant() ); auto d = Calamares::ModuleSystem::Descriptor::fromDescriptorData( m, path ); QVERIFY( !d.isValid() ); QVERIFY( d.name().isEmpty() ); } { QVariantMap m; m.insert( "name", 17 ); auto d = Calamares::ModuleSystem::Descriptor::fromDescriptorData( m, path ); 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, path ); // 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-calamares-2d126ae/src/libcalamares/network/000077500000000000000000000000001430147706700227065ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamares/network/Manager.cpp000066400000000000000000000234441430147706700247730ustar00rootroot00000000000000/* === 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 #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: QVector< QUrl > m_hasInternetUrls; bool m_hasInternet = false; int m_lastCheckedUrlIndex = -1; 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() { if ( d->m_hasInternetUrls.empty() ) { return false; } // It's possible that access was switched off (see below, if the check // fails) so we want to turn it back on first. Otherwise all the // checks will fail **anyway**, defeating the point of the checks. #if ( QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 ) ) if ( !d->m_hasInternet ) { d->nam()->setNetworkAccessible( QNetworkAccessManager::Accessible ); } #endif if ( d->m_lastCheckedUrlIndex < 0 ) { d->m_lastCheckedUrlIndex = 0; } int attempts = 0; do { // Start by pinging the same one as last time d->m_hasInternet = synchronousPing( d->m_hasInternetUrls.at( d->m_lastCheckedUrlIndex ) ); // if it's not responding, **then** move on to the next one, // and wrap around if needed if ( !d->m_hasInternet ) { if ( ++( d->m_lastCheckedUrlIndex ) >= d->m_hasInternetUrls.size() ) { d->m_lastCheckedUrlIndex = 0; } } // keep track of how often we've tried, because there's no point in // going around more than once. attempts++; } while ( !d->m_hasInternet && ( attempts < d->m_hasInternetUrls.size() ) ); // 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 available won't get confused. #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_lastCheckedUrlIndex = -1; d->m_hasInternetUrls.clear(); if ( url.isValid() ) { d->m_hasInternetUrls.append( url ); } } void Manager::setCheckHasInternetUrl( const QVector< QUrl >& urls ) { d->m_lastCheckedUrlIndex = -1; d->m_hasInternetUrls = urls; auto it = std::remove_if( d->m_hasInternetUrls.begin(), d->m_hasInternetUrls.end(), []( const QUrl& u ) { return !u.isValid(); } ); if ( it != d->m_hasInternetUrls.end() ) { d->m_hasInternetUrls.erase( it, d->m_hasInternetUrls.end() ); } } void Manager::addCheckHasInternetUrl( const QUrl& url ) { if ( url.isValid() ) { d->m_hasInternetUrls.append( url ); } } QVector< QUrl > Manager::getCheckInternetUrls() const { return d->m_hasInternetUrls; } /** @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() ) { cWarning() << "Early reply error" << reply->error() << reply->errorString(); 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-calamares-2d126ae/src/libcalamares/network/Manager.h000066400000000000000000000113711430147706700244340ustar00rootroot00000000000000/* === 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 #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 ) Q_PROPERTY( QVector< QUrl > checkInternetUrls READ getCheckInternetUrls WRITE setCheckHasInternetUrl ) 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 Adds an (extra) URL to check void addCheckHasInternetUrl( const QUrl& url ); /// @brief Set a collection of URLs used for the general "is there internet" check. void setCheckHasInternetUrl( const QVector< QUrl >& urls ); /// @brief What URLs are used to check for internet connectivity? QVector< QUrl > getCheckInternetUrls() const; /** @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-calamares-2d126ae/src/libcalamares/network/Tests.cpp000066400000000000000000000111521430147706700245140ustar00rootroot00000000000000/* === 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() ); QCOMPARE( nam.getCheckInternetUrls().count(), 0 ); } 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 ); } } void NetworkTests::testCheckUrl() { using namespace CalamaresUtils::Network; Logger::setupLogLevel( Logger::LOGVERBOSE ); auto& nam = Manager::instance(); { QUrl u( "http://example.com" ); QVERIFY( u.isValid() ); nam.setCheckHasInternetUrl( u ); QVERIFY( nam.checkHasInternet() ); QCOMPARE( nam.getCheckInternetUrls().count(), 1 ); // Valid URL } { QUrl u( "http://nonexistent.example.com" ); QVERIFY( u.isValid() ); nam.setCheckHasInternetUrl( u ); QVERIFY( !nam.checkHasInternet() ); QCOMPARE( nam.getCheckInternetUrls().count(), 1 ); // Valid URL even if it doesn't resolve } { QUrl u; QVERIFY( !u.isValid() ); nam.setCheckHasInternetUrl( u ); QVERIFY( !nam.checkHasInternet() ); QCOMPARE( nam.getCheckInternetUrls().count(), 0 ); // Invalid URL tried } } void NetworkTests::testCheckMultiUrl() { using namespace CalamaresUtils::Network; Logger::setupLogLevel( Logger::LOGVERBOSE ); auto& nam = Manager::instance(); { QUrl u0( "http://example.com" ); QUrl u1( "https://kde.org" ); QVERIFY( u0.isValid() ); QVERIFY( u1.isValid() ); nam.setCheckHasInternetUrl( { u0, u1 } ); QVERIFY( nam.checkHasInternet() ); QCOMPARE( nam.getCheckInternetUrls().count(), 2 ); } { QUrl u0( "http://nonexistent.example.com" ); QUrl u1( "http://bogus.example.com" ); QVERIFY( u0.isValid() ); QVERIFY( u1.isValid() ); nam.setCheckHasInternetUrl( { u0, u1 } ); QVERIFY( !nam.checkHasInternet() ); QVERIFY( !nam.checkHasInternet() ); QCOMPARE( nam.getCheckInternetUrls().count(), 2 ); // Both are valid URLs nam.addCheckHasInternetUrl( QUrl( "http://example.com" ) ); QVERIFY( nam.checkHasInternet() ); QCOMPARE( nam.getCheckInternetUrls().count(), 3 ); } { QUrl u0( "http://nonexistent.example.com" ); QUrl u1; QVERIFY( u0.isValid() ); QVERIFY( !u1.isValid() ); nam.setCheckHasInternetUrl( { u0, u1 } ); QVERIFY( !nam.checkHasInternet() ); QVERIFY( !nam.checkHasInternet() ); QCOMPARE( nam.getCheckInternetUrls().count(), 1 ); // Only valid URL added nam.addCheckHasInternetUrl( QUrl( "http://example.com" ) ); QVERIFY( nam.checkHasInternet() ); QCOMPARE( nam.getCheckInternetUrls().count(), 2 ); } { QUrl u0( "http://nonexistent.example.com" ); QUrl u1; QVERIFY( u0.isValid() ); QVERIFY( !u1.isValid() ); nam.setCheckHasInternetUrl( { u1, u1, u1, u1 } ); QCOMPARE( nam.getCheckInternetUrls().count(), 0 ); nam.setCheckHasInternetUrl( { u1, u1, u0, u1 } ); QCOMPARE( nam.getCheckInternetUrls().count(), 1 ); } } calamares-calamares-2d126ae/src/libcalamares/network/Tests.h000066400000000000000000000011571430147706700241650ustar00rootroot00000000000000/* === 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(); void testCheckUrl(); void testCheckMultiUrl(); }; #endif calamares-calamares-2d126ae/src/libcalamares/packages/000077500000000000000000000000001430147706700227735ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamares/packages/Globals.cpp000066400000000000000000000062521430147706700250670ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/packages/Globals.h000066400000000000000000000030361430147706700245310ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/packages/Tests.cpp000066400000000000000000000203441430147706700246040ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/000077500000000000000000000000001430147706700232265ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamares/partition/AutoMount.cpp000066400000000000000000000112571430147706700256730ustar00rootroot00000000000000/* === 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 hasSolid = false; bool wasSolidModuleAutoLoaded = false; }; /** @section Solid * * KDE Solid automount management. * * Solid can be influenced through DBus calls to kded5. The following code * handles Solid: if Solid exists (e.g. we're in a KDE Plasma desktop) * then try to turn off automount that way. */ /** @brief Boilerplate for a call to kded5 * * Returns a method-call message, ready for arguments and call(). */ static inline QDBusMessage kdedCall( const QString& method ) { return QDBusMessage::createMethodCall( QStringLiteral( "org.kde.kded5" ), QStringLiteral( "/kded" ), QStringLiteral( "org.kde.kded5" ), method ); } /** @brief Log a response from call() * * Logs without a function header so it is simple to use from an existing * logging-block. Assumes @p r is a reply or an error message. * * @internal */ static void logDBusResponse( QDBusMessage&& r ) { if ( r.type() == QDBusMessage::ReplyMessage ) { cDebug() << Logger::SubEntry << r.type() << "reply" << r.arguments(); } else { cDebug() << Logger::SubEntry << r.type() << "error" << r.errorMessage(); } } /** @brief Enables (or disables) automount for Solid * * If @p enable is @c true, enables automount. Otherwise, disables it. * This throws some DBbus messages on the wire and forgets about them. */ // 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 ) } ); logDBusResponse( dbus.call( msg, QDBus::Block ) ); } // Stop module { auto msg = kdedCall( enable ? QStringLiteral( "loadModule" ) : QStringLiteral( "unloadModule" ) ); msg.setArguments( { moduleName } ); logDBusResponse( dbus.call( msg, QDBus::Block ) ); } } /** @brief Check if Solid exists and has automount set * * Updates the @p info object with the discovered information. * - if there is no Solid available on DBus, sets hasSolid to @c false * - if there is Solid available on DBusm, sets *hasSolid* to @c true * and places the queried value of automounting in *wasSolidModuleAutoLoaded*. */ 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(); } } if ( !result.has_value() ) { cDebug() << "No viable response from Solid" << r.path(); } } else { // It's an error message cDebug() << "Solid not available:" << r.errorMessage(); } info.hasSolid = result.has_value(); info.wasSolidModuleAutoLoaded = result.has_value() ? result.value() : false; } std::shared_ptr< AutoMountInfo > automountDisable( bool disable ) { auto info = std::make_shared< AutoMountInfo >(); QDBusConnection dbus = QDBusConnection::sessionBus(); // KDE Plasma (Solid) handling querySolidAutoMount( dbus, *info ); if ( info->hasSolid ) { cDebug() << "Setting Solid automount to" << ( disable ? "disabled" : "enabled" ); enableSolidAutoMount( dbus, !disable ); } // TODO: other environments return info; } void automountRestore( const std::shared_ptr< AutoMountInfo >& info ) { QDBusConnection dbus = QDBusConnection::sessionBus(); // KDE Plasma (Solid) handling if ( info->hasSolid ) { enableSolidAutoMount( dbus, info->wasSolidModuleAutoLoaded ); } // TODO: other environments } } // namespace Partition } // namespace CalamaresUtils calamares-calamares-2d126ae/src/libcalamares/partition/AutoMount.h000066400000000000000000000027121430147706700253340ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/FileSystem.cpp000066400000000000000000000044521430147706700260230ustar00rootroot00000000000000/* === 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 ) { #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wswitch-enum" #endif // 13 enumeration values not handled 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 ); } #ifdef __clang__ #pragma clang diagnostic pop #endif } QString untranslatedFS( FileSystem::Type t ) { #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wswitch-enum" #endif // 34 enumeration values not handled switch ( t ) { case FileSystem::Type::ReiserFS: return QStringLiteral( "reiserfs" ); default: return FileSystem::nameForType( t, { QStringLiteral( "C" ) } ); } #ifdef __clang__ #pragma clang diagnostic pop #endif } } // namespace Partition } // namespace CalamaresUtils calamares-calamares-2d126ae/src/libcalamares/partition/FileSystem.h000066400000000000000000000036051430147706700254670ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/Global.cpp000066400000000000000000000025511430147706700251350ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/Global.h000066400000000000000000000060061430147706700246010ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/KPMHelper.h000066400000000000000000000023451430147706700251720ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/KPMManager.cpp000066400000000000000000000055321430147706700256610ustar00rootroot00000000000000/* === 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() ) { } KPMManager::~KPMManager() {} 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-calamares-2d126ae/src/libcalamares/partition/KPMManager.h000066400000000000000000000027411430147706700253250ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/KPMTests.cpp000066400000000000000000000067161430147706700254160ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/Mount.cpp000066400000000000000000000101441430147706700250340ustar00rootroot00000000000000/* === 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 "utils/String.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( std::make_unique< 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; m_d.reset(); } } 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; } } } QString TemporaryMount::path() const { return m_d ? m_d->m_mountDir.path() : QString(); } QList< MtabInfo > MtabInfo::fromMtabFilteredByPrefix( const QString& mountPrefix, const QString& mtabPath ) { QFile f( mtabPath.isEmpty() ? "/etc/mtab" : mtabPath ); if ( !f.open( QIODevice::ReadOnly | QIODevice::Text ) ) { return {}; } QList< MtabInfo > l; // After opening, atEnd() is already true (!?) so try reading at least once do { QString line = f.readLine(); if ( line.isEmpty() || line.startsWith( '#' ) ) { continue; } QStringList parts = line.split( ' ', SplitSkipEmptyParts ); if ( parts.length() >= 3 && !parts[ 0 ].startsWith( '#' ) ) { // Lines have format: ..., so check // the mountpoint field. Everything starts with an empty string. if ( parts[ 1 ].startsWith( mountPrefix ) ) { l.append( { parts[ 0 ], parts[ 1 ] } ); } } } while ( !f.atEnd() ); return l; } } // namespace Partition } // namespace CalamaresUtils calamares-calamares-2d126ae/src/libcalamares/partition/Mount.h000066400000000000000000000073411430147706700245060ustar00rootroot00000000000000/* === 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 #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() ); /** @brief Mount and automatically unmount a device * * The TemporaryMount object mounts a filesystem, and is like calling * the mount() function, above. When the object is destroyed, unmount() * is called with suitable options to undo the original mount. */ 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 bool( m_d ); } QString path() const; private: struct Private; std::unique_ptr< Private > m_d; }; /** @brief Information about a mount point from /etc/mtab * * Entries in /etc/mtab are of the form: * This struct only stores device and mountpoint. * * The main way of getting these structs is to call fromMtab() to read * an /etc/mtab-like file and storing all of the entries from it. */ struct DLLEXPORT MtabInfo { QString device; QString mountPoint; /** @brief Reads an mtab-like file and returns the entries from it * * When @p mtabPath is given, that file is read. If the given name is * empty (e.g. the default) then /etc/mtab is read, instead. * * If @p mountPrefix is given, then only entries that have a mount point * that starts with that prefix are returned. */ static QList< MtabInfo > fromMtabFilteredByPrefix( const QString& mountPrefix = QString(), const QString& mtabPath = QString() ); /// @brief Predicate to sort MtabInfo objects by device-name static bool deviceOrder( const MtabInfo& a, const MtabInfo& b ) { return a.device > b.device; } /// @brief Predicate to sort MtabInfo objects by mount-point static bool mountPointOrder( const MtabInfo& a, const MtabInfo& b ) { return a.mountPoint > b.mountPoint; } }; } // namespace Partition } // namespace CalamaresUtils #endif calamares-calamares-2d126ae/src/libcalamares/partition/PartitionIterator.cpp000066400000000000000000000061531430147706700274220ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/PartitionIterator.h000066400000000000000000000034111430147706700270610ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/PartitionQuery.cpp000066400000000000000000000052301430147706700267310ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/PartitionQuery.h000066400000000000000000000043351430147706700264030ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/PartitionSize.cpp000066400000000000000000000150571430147706700265460ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/PartitionSize.h000066400000000000000000000065441430147706700262140ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/Sync.cpp000066400000000000000000000021601430147706700246450ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/Sync.h000066400000000000000000000016541430147706700243210ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/Tests.cpp000066400000000000000000000164361430147706700250460ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/partition/calautomount.cpp000066400000000000000000000031431430147706700264460ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/testdata/000077500000000000000000000000001430147706700230265ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamares/testdata/localetest_nl.ts000066400000000000000000000005601430147706700262270ustar00rootroot00000000000000 LocaleTests Quit Ophouden calamares-calamares-2d126ae/src/libcalamares/testdata/yaml-list.conf000066400000000000000000000002361430147706700256110ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # YAML dump --- "cow": "moo" "derp": 17 "dwarfs": - "sleepy" - "sneezy" - "doc" calamares-calamares-2d126ae/src/libcalamares/utils/000077500000000000000000000000001430147706700223555ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamares/utils/BoostPython.h000066400000000000000000000045101430147706700250160ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/CalamaresUtilsSystem.cpp000066400000000000000000000224421430147706700272030ustar00rootroot00000000000000/* === 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 "Runner.h" #include "utils/Logger.h" #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 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."; cDebug() << 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 ) { Calamares::Utils::Runner r( args ); r.setLocation( location ).setInput( stdInput ).setTimeout( timeoutSec ).setWorkingDirectory( workingPath ); return r.run(); } /// @brief Cheap check if a path is absolute. 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() ) { cWarning() << "No target path for" << path; return CreationResult( CreationResult::Code::Invalid ); } QFile f( completePath ); if ( ( mode == WriteMode::KeepExisting ) && f.exists() ) { cWarning() << "Target file" << completePath << "already exists"; return CreationResult( CreationResult::Code::AlreadyExists ); } 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 ) ) { cWarning() << "Could not open target file" << completePath; return CreationResult( CreationResult::Code::Failed ); } auto written = f.write( contents ); if ( written != contents.size() ) { f.close(); f.remove(); cWarning() << "Short write (" << written << "out of" << contents.size() << "bytes) to" << completePath; return CreationResult( CreationResult::Code::Failed ); } f.close(); return CreationResult( QFileInfo( f ).canonicalFilePath() ); } QStringList System::readTargetFile( const QString& path ) const { const QString completePath = targetPath( path ); if ( completePath.isEmpty() ) { return QStringList(); } QFile f( completePath ); if ( !f.open( QIODevice::ReadOnly ) ) { return QStringList(); } QTextStream in( &f ); QStringList l; while ( !in.atEnd() ) { l << in.readLine(); } return l; } void System::removeTargetFile( const QString& path ) const { 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< qint64, qreal > 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-calamares-2d126ae/src/libcalamares/utils/CalamaresUtilsSystem.h000066400000000000000000000332331430147706700266500ustar00rootroot00000000000000/* === 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 Reads a file from the target system. * * @param path Path to the file; this is interpreted from the root of * the target system (@see targetPath()). * * Does no error checking, and returns an empty list if the file does * not exist. * * NOTE: This function is now basically the same as QFile::readAll(), * splitting into lines, but Calamares may need to change * permissions or raise privileges to actually read the file, * which is why there is an API. * * NOTE: Since this buffers the whole file in memory, reading big files * is not recommended. */ DLLEXPORT QStringList readTargetFile( const QString& path ) const; /** @brief Ensure that the directory @p path exists * * @param path a full pathname to a desired directory. * * 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< qint64, qreal > 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-calamares-2d126ae/src/libcalamares/utils/CommandList.cpp000066400000000000000000000135331430147706700253000ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/CommandList.h000066400000000000000000000045531430147706700247470ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/Dirs.cpp000066400000000000000000000076521430147706700237740ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/Dirs.h000066400000000000000000000034531430147706700234340ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/Entropy.cpp000066400000000000000000000060301430147706700245200ustar00rootroot00000000000000/* === 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 ) { constexpr const char filler = char( 0xcb ); b.fill( filler ); b.clear(); if ( size < 1 ) { return EntropySource::None; } b.fill( filler, size ); char* buffer = b.data(); 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-calamares-2d126ae/src/libcalamares/utils/Entropy.h000066400000000000000000000024141430147706700241670ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/Logger.cpp000066400000000000000000000150301430147706700242770ustar00rootroot00000000000000/* === 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 #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(); } } QDebug& operator<<( QDebug& s, const RedactedCommand& l ) { // Special case logging: don't log the (encrypted) password. if ( l.list.contains( "usermod" ) ) { for ( const auto& item : l.list ) if ( item.startsWith( "$6$" ) ) { s << ""; } else { s << item; } } else { s << l.list; } return s; } /** @brief Returns a stable-but-private hash of @p context and @p s * * Identical strings with the same context will be hashed the same, * so that they can be logged and still recognized as the-same. */ static uint insertRedactedName( const QString& context, const QString& s ) { static uint salt = QRandomGenerator::global()->generate(); // Just once uint val = qHash( context, salt ); return qHash( s, val ); } RedactedName::RedactedName( const QString& context, const QString& s ) : m_id( insertRedactedName( context, s ) ) , m_context( context ) { } RedactedName::RedactedName( const char* context, const QString& s ) : RedactedName( QString::fromLatin1( context ), s ) { } RedactedName::operator QString() const { return QString( m_context + '$' + QString::number( m_id, 16 ) ); } } // namespace Logger calamares-calamares-2d126ae/src/libcalamares/utils/Logger.h000066400000000000000000000226701430147706700237540ustar00rootroot00000000000000/* === 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 ) { if ( s.m_funcinfo ) { s.m_funcinfo = nullptr; s.m_msg = QString( 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 When logging commands, don't log everything. * * The command-line arguments to some commands may contain the * encrypted password set by the user. Don't log that password, * since the log may get posted to bug reports, or stored in * the target system. */ struct RedactedCommand { RedactedCommand( const QStringList& l ) : list( l ) { } const QStringList& list; }; QDebug& operator<<( QDebug& s, const RedactedCommand& l ); /** @brief When logging "private" identifiers, keep them consistent but private * * Send a string to a logger in such a way that each time it is logged, * it logs the same way, but without revealing the actual contents. * This can be applied to user names, UUIDs, etc. */ struct RedactedName { RedactedName( const char* context, const QString& s ); RedactedName( const QString& context, const QString& s ); operator QString() const; private: const uint m_id; const QString m_context; }; inline QDebug& operator<<( QDebug& s, const RedactedName& n ) { return s << NoQuote << QString( n ) << Quote; } /** * @brief Formatted logging of a pointer * * Pointers are printed as void-pointer, so just an address (unlike, say, * QObject pointers which show an address and some metadata) preceded * by an '@'. This avoids C-style (void*) casts in the code. * * Shared pointers are indicated by 'S@' and unique pointers by 'U@'. */ struct Pointer { public: explicit Pointer( const void* p ) : ptr( p ) , kind( 0 ) { } template < typename T > explicit Pointer( const std::shared_ptr< T >& p ) : ptr( p.get() ) , kind( 'S' ) { } template < typename T > explicit Pointer( const std::unique_ptr< T >& p ) : ptr( p.get() ) , kind( 'U' ) { } const void* const ptr; const char kind; }; /** @brief output operator for DebugRow */ template < typename T, typename U > inline QDebug& 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& ); /** @brief Restore the object to "fresh" state * * It may be necessary to allow the Once object to stream the * function header again -- for instance, after logging an error, * any following debug log might want to re-introduce the header. */ void refresh() { m = true; } /** @brief Is this object "fresh"? * * Once a Once-object has printed (once) it is no longer fresh. */ operator bool() const { return m; } private: mutable bool m = false; }; inline CDebug& operator<<( CDebug&& s, const Once& o ) { if ( !logLevelEnabled( s.level() ) ) { // This won't print, so it's not using the "onceness" return s; } if ( o.m ) { o.m = false; return s; } s.m_funcinfo = nullptr; s << SubEntry; return s; } } // namespace Logger #define cVerbose() Logger::CDebug( Logger::LOGVERBOSE, Q_FUNC_INFO ) #define cDebug() Logger::CDebug( Logger::LOGDEBUG, Q_FUNC_INFO ) #define cWarning() Logger::CDebug( Logger::LOGWARNING, Q_FUNC_INFO ) #define cError() Logger::CDebug( Logger::LOGERROR, Q_FUNC_INFO ) #endif calamares-calamares-2d126ae/src/libcalamares/utils/NamedEnum.h000066400000000000000000000215561430147706700244100ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/NamedSuffix.h000066400000000000000000000052511430147706700247420ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/Permissions.cpp000066400000000000000000000056561430147706700254100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Scott Harvey * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "Permissions.h" #include "CalamaresUtilsSystem.h" #include "Logger.h" #include #include #include namespace CalamaresUtils { Permissions::Permissions() : m_username() , m_group() , m_value( 0 ) , m_valid( false ) { } Permissions::Permissions( QString const& p ) : Permissions() { parsePermissions( p ); } void Permissions::parsePermissions( QString const& p ) { QStringList segments = p.split( ":" ); if ( segments.length() != 3 ) { m_valid = false; return; } if ( segments[ 0 ].isEmpty() || segments[ 1 ].isEmpty() ) { m_valid = false; return; } bool ok; int octal = segments[ 2 ].toInt( &ok, 8 ); if ( !ok || octal == 0 ) { m_valid = false; return; } else { m_value = octal; } // We have exactly three segments and the third is valid octal, // so we can declare the string valid and set the user and group names m_valid = true; m_username = segments[ 0 ]; m_group = segments[ 1 ]; return; } bool Permissions::apply( const QString& path, int mode ) { // We **don't** use QFile::setPermissions() here because it takes // a Qt flags object that subtlely does not align with POSIX bits. // The Qt flags are **hex** based, so 0x755 for rwxr-xr-x, while // our integer (mode_t) stores **octal** based flags. // // Call chmod(2) directly, that's what Qt would be doing underneath // anyway. int r = chmod( path.toUtf8().constData(), mode_t( mode ) ); if ( r ) { cDebug() << Logger::SubEntry << "Could not set permissions of" << path << "to" << QString::number( mode, 8 ); } return r == 0; } bool Permissions::apply( const QString& path, const CalamaresUtils::Permissions& p ) { if ( !p.isValid() ) { return false; } bool r = apply( path, p.value() ); if ( r ) { // We don't use chgrp(2) or chown(2) here because then we need to // go through the users list (which one, target or source?) to get // uid_t and gid_t values to pass to that system call. // // Do a lame cop-out and let the chown(8) utility do the heavy lifting. if ( CalamaresUtils::System::runCommand( { "chown", p.username() + ':' + p.group(), path }, std::chrono::seconds( 3 ) ) .getExitCode() ) { r = false; cDebug() << Logger::SubEntry << "Could not set owner of" << path << "to" << ( p.username() + ':' + p.group() ); } } if ( r ) { /* NOTUSED */ apply( path, p.value() ); } return r; } } // namespace CalamaresUtils calamares-calamares-2d126ae/src/libcalamares/utils/Permissions.h000066400000000000000000000064261430147706700250510ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/PluginFactory.cpp000066400000000000000000000005321430147706700256470ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/PluginFactory.h000066400000000000000000000057221430147706700253220ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/RAII.h000066400000000000000000000052011430147706700232500ustar00rootroot00000000000000/* === 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 Blocks signals on a QObject until destruction using cSignalBlocker = QSignalBlocker; /** @brief Writes a value on destruction to a pointed-to location. * * If the pointer is non-null, write the last-given-value if there * is one to the pointed-to object. This is called the "then-value". * */ template < typename T > struct cScopedAssignment { std::optional< T > m_value; T* m_pointer; /** @brief Create a setter with no value set * * Until a value is set via operator=(), this pointer-setter * will do nothing on destruction, leaving the pointed-to * value unchanged. */ cScopedAssignment( T* p ) : m_pointer( p ) { } /** @brief Create a setter with a then-value already set * * This ensures that on destruction, the value @p v will be written; * it is equivalent to assigning @p v immediately. The pointed-to * value is **not** changed (until destruction). */ cScopedAssignment( T* p, T then ) : m_value( then ) , m_pointer( p ) { } /** @brief Create a setter with a then-value and assign a new value now * * As above, but also assign @p now to the thing pointed-to. */ cScopedAssignment( T* p, T now, T then ) : m_value( then ) , m_pointer( p ) { if ( p ) { *p = now; } } ~cScopedAssignment() { if ( m_pointer && m_value.has_value() ) { *m_pointer = m_value.value(); } } const T& operator=( const T& then ) { m_value = then; return then; } }; template < typename T > cScopedAssignment( T p ) -> cScopedAssignment< decltype( *p ) >; #endif calamares-calamares-2d126ae/src/libcalamares/utils/Retranslator.cpp000066400000000000000000000151001430147706700255360ustar00rootroot00000000000000/* === 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 namespace { 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 { TranslationLoader( const QString& locale ) : m_localeName( locale ) { } virtual ~TranslationLoader(); /// @brief Loads @p translator with the specific translations of this type virtual bool tryLoad( QTranslator* translator ) = 0; QString m_localeName; }; /// @brief Loads translations for branding struct BrandingLoader : public TranslationLoader { BrandingLoader( const QString& 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; } // This is working backwards against m_prefix containing both // a path and a branding-name. Split it in path + branding-name. const int lastDirSeparator = m_prefix.lastIndexOf( QDir::separator() ); QString brandingTranslationsDirPath( m_prefix ); brandingTranslationsDirPath.truncate( lastDirSeparator ); QString filenameBase( m_prefix ); filenameBase.remove( 0, lastDirSeparator + 1 ); if ( QDir( brandingTranslationsDirPath ).exists() ) { const QString fileName = QStringLiteral( "%1_%2" ).arg( filenameBase, m_localeName ); cDebug() << Logger::SubEntry << "Loading" << fileName << "from" << brandingTranslationsDirPath; if ( translator->load( fileName, brandingTranslationsDirPath ) ) { 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 namespace CalamaresUtils { static QTranslator* s_brandingTranslator = nullptr; static QTranslator* s_translator = nullptr; static QTranslator* s_tztranslator = nullptr; static QString s_translatorLocaleName; void installTranslator( const CalamaresUtils::Locale::Translation::Id& locale, const QString& brandingTranslationsPrefix ) { s_translatorLocaleName = locale.name; loadSingletonTranslator( BrandingLoader( locale.name, brandingTranslationsPrefix ), s_brandingTranslator ); loadSingletonTranslator( TZLoader( locale.name ), s_tztranslator ); loadSingletonTranslator( CalamaresLoader( locale.name ), s_translator ); } void installTranslator() { installTranslator( CalamaresUtils::Locale::Translation().id(), QString() ); } CalamaresUtils::Locale::Translation::Id translatorLocaleName() { return { s_translatorLocaleName }; } bool loadTranslator( const CalamaresUtils::Locale::Translation::Id& locale, const QString& prefix, QTranslator* translator ) { return ::tryLoad( translator, prefix, locale.name ); } Retranslator::Retranslator( QObject* parent ) : QObject( parent ) { } 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< void() > f ) { connect( instance(), &Retranslator::languageChanged, o, f ); f(); } void setAllowLocalTranslation( bool allow ) { s_allowLocalTranslations = allow; } } // namespace CalamaresUtils calamares-calamares-2d126ae/src/libcalamares/utils/Retranslator.h000066400000000000000000000123721430147706700252130ustar00rootroot00000000000000/* === 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 "locale/Translation.h" #include #include #include class QEvent; class QLocale; class QTranslator; namespace CalamaresUtils { /** @brief changes the application language. * @param locale the new locale (names as defined by Calamares). * @param brandingTranslationsPrefix the branding path prefix, from Calamares::Branding. */ DLLEXPORT void installTranslator( const CalamaresUtils::Locale::Translation::Id& locale, const QString& brandingTranslationsPrefix ); /** @brief Initializes the translations with the current system settings */ DLLEXPORT void installTranslator(); /** @brief The name of the (locale of the) most recently installed translator * * May return something different from the locale.name() of the * QLocale passed in, because Calamares will munge some names and * may remap translations. */ DLLEXPORT CalamaresUtils::Locale::Translation::Id translatorLocaleName(); /** @brief Loads translations into the given @p translator * * This function is not intended for general use: it is for those special * cases where modules need their own translator / translations for data * that is locale to the module. Tries to load a .qm from "sensible" * locations, which are the same ones that installTranslator() would use. * Takes local-translations into account. * * Note that @p prefix should end with an underscore '_' -- this function * does not introduce one by itself. * * @returns @c true on success */ DLLEXPORT bool loadTranslator( const CalamaresUtils::Locale::Translation::Id& locale, const QString& prefix, QTranslator* translator ); /** @brief Set @p allow to true to load translations from current dir. * * 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-calamares-2d126ae/src/libcalamares/utils/Runner.cpp000066400000000000000000000164501430147706700243400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #include "Runner.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include /** @brief Descend from directory, always relative * * If @p subdir begins with a "/" or "../" or "./" those are stripped * until none are left, then changes @p directory into that * subdirectory. * * Returns @c false if the @p subdir doesn't make sense. */ STATICTEST bool relativeChangeDirectory( QDir& directory, const QString& subdir ) { const QString rootPath = directory.absolutePath(); const QString concatenatedPath = rootPath + '/' + subdir; const QString relPath = QDir::cleanPath( concatenatedPath ); if ( !relPath.startsWith( rootPath ) ) { cWarning() << "Relative path" << subdir << "escapes from" << rootPath; return false; } return directory.cd( relPath ); } STATICTEST std::pair< bool, QDir > calculateWorkingDirectory( Calamares::Utils::RunLocation location, const QString& directory ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( location == Calamares::Utils::RunLocation::RunInTarget ) { if ( !gs || !gs->contains( "rootMountPoint" ) ) { cWarning() << "No rootMountPoint in global storage, while RunInTarget is specified"; return std::make_pair( false, QDir() ); } QDir rootMountPoint( gs->value( "rootMountPoint" ).toString() ); if ( !rootMountPoint.exists() ) { cWarning() << "rootMountPoint points to a dir which does not exist"; return std::make_pair( false, QDir() ); } if ( !directory.isEmpty() ) { if ( !relativeChangeDirectory( rootMountPoint, directory ) || !rootMountPoint.exists() ) { cWarning() << "Working directory" << directory << "does not exist in target"; return std::make_pair( false, QDir() ); } } return std::make_pair( true, rootMountPoint ); // Now changed to subdir } else { QDir root; if ( !directory.isEmpty() ) { root = QDir::root(); if ( !relativeChangeDirectory( root, directory ) || !root.exists() ) { cWarning() << "Working directory" << directory << "does not exist in host"; return std::make_pair( false, QDir() ); } } return std::make_pair( true, root ); // Now changed to subdir } } namespace Calamares { namespace Utils { Runner::Runner() {} } // namespace Utils } // namespace Calamares Calamares::Utils::Runner::Runner( const QStringList& command ) { setCommand( command ); } Calamares::Utils::Runner::~Runner() {} Calamares::Utils::ProcessResult Calamares::Utils::Runner::run() { if ( m_command.isEmpty() ) { cWarning() << "Cannot run an empty program list"; return ProcessResult::Code::FailedToStart; } auto [ ok, workingDirectory ] = calculateWorkingDirectory( m_location, m_directory ); if ( !ok || !workingDirectory.exists() ) { // Warnings have already been printed return ProcessResult::Code::NoWorkingDirectory; } QProcess process; // Make the process run in "C" locale so we don't get issues with translation { auto env = QProcessEnvironment::systemEnvironment(); env.insert( "LC_ALL", "C" ); process.setProcessEnvironment( env ); } process.setProcessChannelMode( QProcess::MergedChannels ); if ( !m_directory.isEmpty() ) { process.setWorkingDirectory( workingDirectory.absolutePath() ); } if ( m_location == RunLocation::RunInTarget ) { process.setProgram( "chroot" ); process.setArguments( QStringList { workingDirectory.absolutePath() } << m_command ); } else { process.setProgram( "env" ); process.setArguments( m_command ); } if ( m_output ) { connect( &process, &QProcess::readyReadStandardOutput, [ this, &process ]() { do { QString s = process.readLine(); if ( !s.isEmpty() ) { Q_EMIT this->output( s ); } } while ( process.canReadLine() ); } ); } cDebug() << Logger::SubEntry << "Running" << Logger::RedactedCommand( m_command ); process.start(); if ( !process.waitForStarted() ) { cWarning() << "Process" << m_command.first() << "failed to start" << process.error(); return ProcessResult::Code::FailedToStart; } if ( !m_input.isEmpty() ) { process.write( m_input.toLocal8Bit() ); } process.closeWriteChannel(); if ( !process.waitForFinished( m_timeout > std::chrono::seconds::zero() ? ( static_cast< int >( std::chrono::milliseconds( m_timeout ).count() ) ) : -1 ) ) { cWarning() << "Process" << m_command.first() << "timed out after" << m_timeout.count() << "ms. Output so far:\n" << Logger::NoQuote << process.readAllStandardOutput(); return ProcessResult::Code::TimedOut; } QString output = m_output ? QString() : QString::fromLocal8Bit( process.readAllStandardOutput() ).trimmed(); if ( m_output ) { // Try to read trailing output, if any do { output = process.readLine(); if ( !output.isEmpty() ) { Q_EMIT this->output( output ); } } while ( !output.isEmpty() ); output = process.readAllStandardOutput(); if ( !output.isEmpty() ) { cWarning() << "Some process output left-over"; Q_EMIT this->output( output ); } } if ( process.exitStatus() == QProcess::CrashExit ) { cWarning() << "Process" << m_command.first() << "crashed. Output so far:\n" << Logger::NoQuote << output; return ProcessResult::Code::Crashed; } auto r = process.exitCode(); const bool showDebug = ( !Calamares::Settings::instance() ) || ( Calamares::Settings::instance()->debugMode() ); if ( r == 0 ) { if ( showDebug && !output.isEmpty() ) { cDebug() << Logger::SubEntry << "Finished. Exit code:" << r << "output:\n" << Logger::NoQuote << output; } } else // if ( r != 0 ) { if ( !output.isEmpty() ) { cDebug() << Logger::SubEntry << "Target cmd:" << Logger::RedactedCommand( m_command ) << "Exit code:" << r << "output:\n" << Logger::NoQuote << output; } else { cDebug() << Logger::SubEntry << "Target cmd:" << Logger::RedactedCommand( m_command ) << "Exit code:" << r << "(no output)"; } } return ProcessResult( r, output ); } calamares-calamares-2d126ae/src/libcalamares/utils/Runner.h000066400000000000000000000065241430147706700240060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef UTILS_RUNNER_H #define UTILS_RUNNER_H #include "CalamaresUtilsSystem.h" #include #include #include #include #include #include namespace Calamares { namespace Utils { using RunLocation = CalamaresUtils::System::RunLocation; using ProcessResult = CalamaresUtils::ProcessResult; /** @brief A Runner wraps a process and handles running it and processing output * * This is basically a QProcess, but handles both running in the * host system (through env(1)) or in the target (by calling chroot(8)). * It has an output signal that handles output one line at a time * (unlike QProcess that lets you do the buffering yourself). * This output processing is only enabled if you do so explicitly. * * Use the set*() methods to configure the runner. * * If you call enableOutputProcessing(), then you can connect to * the output() signal to receive each line (including trailing newline!). * * Processes are always run with LC_ALL and LANG set to "C". */ class Runner : public QObject { Q_OBJECT public: /** @brief Create an empty runner * * This is a runner with no commands, nothing; call set*() methods * to configure it. */ Runner(); /** @brief Create a runner with a specified command * * Equivalent to Calamares::Utils::Runner::Runner() followed by * calling setCommand(). */ Runner( const QStringList& command ); virtual ~Runner() override; Runner& setCommand( const QStringList& command ) { m_command = command; return *this; } Runner& setLocation( RunLocation r ) { m_location = r; return *this; } Runner& setWorkingDirectory( const QDir& directory ) { m_directory = directory.absolutePath(); return *this; } Runner& setWorkingDirectory( const QString& directory ) { m_directory = directory; return *this; } Runner& setTimeout( std::chrono::seconds timeout ) { m_timeout = timeout; return *this; } Runner& setInput( const QString& input ) { m_input = input; return *this; } Runner& setOutputProcessing( bool enable ) { m_output = enable; return *this; } Runner& enableOutputProcessing() { m_output = true; return *this; } ProcessResult run(); /** @brief The executable (argv[0]) that this runner will run * * This is the first element of the command; it does not include * env(1) or chroot(8) which are injected when actually running * the command. */ QString executable() const { return m_command.isEmpty() ? QString() : m_command.first(); } signals: void output( QString line ); private: // What to run, and where. QStringList m_command; QString m_directory; RunLocation m_location { RunLocation::RunInHost }; // Settings for when it actually runs QString m_input; std::chrono::milliseconds m_timeout { 0 }; bool m_output = false; }; } // namespace Utils } // namespace Calamares #endif calamares-calamares-2d126ae/src/libcalamares/utils/String.cpp000066400000000000000000000175711430147706700243420ustar00rootroot00000000000000/* === 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 ); } void removeLeading( QString& string, QChar c ) { int count = 0; while ( string.length() > count && string[ count ] == c ) { count++; } string.remove( 0, count ); } void removeTrailing( QString& string, QChar c ) { int lastIndex = string.length(); while ( lastIndex > 0 && string[ lastIndex - 1 ] == c ) { lastIndex--; } string.remove( lastIndex, string.length() ); } } // namespace CalamaresUtils calamares-calamares-2d126ae/src/libcalamares/utils/String.h000066400000000000000000000073001430147706700237740ustar00rootroot00000000000000/* === 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 } ); /** @brief Remove all @p c at the beginning of @p string * * Modifies the @p string in-place. If @p c is not the first character * of @p string, the string is left unchanged; otherwise the first character * is removed and the process repeats. */ DLLEXPORT void removeLeading( QString& string, QChar c ); /** @brief Remove all @p c at the end of @p string * * Like removeLeading(), but at the end of the string. */ DLLEXPORT void removeTrailing( QString& string, QChar c ); } // namespace CalamaresUtils #endif calamares-calamares-2d126ae/src/libcalamares/utils/TestPaths.cpp000066400000000000000000000165551430147706700250140ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/Tests.cpp000066400000000000000000001044571430147706700241760ustar00rootroot00000000000000/* === 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 "Runner.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 testPointerSetter(); /** @section Tests the Traits bits. */ void testTraits(); /** @section Testing the variants-methods */ void testVariantStringListCode(); void testVariantStringListYAMLDashed(); void testVariantStringListYAMLBracketed(); /** @section Test smart string truncation. */ void testStringTruncation(); void testStringTruncationShorter(); void testStringTruncationDegenerate(); void testStringRemoveLeading_data(); void testStringRemoveLeading(); void testStringRemoveTrailing_data(); void testStringRemoveTrailing(); /** @section Test Runner directory-manipulation. */ void testRunnerDirs(); void testCalculateWorkingDirectory(); void testRunnerOutput(); /** @section Test file-functions */ void testReadWriteFile(); private: void recursiveCompareMap( const QVariantMap& a, const QVariantMap& b, int depth ); }; LibCalamaresTests::LibCalamaresTests() {} 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::testPointerSetter() { int special = 17; QCOMPARE( special, 17 ); { cScopedAssignment p( &special ); } QCOMPARE( special, 17 ); { cScopedAssignment p( &special ); p = 18; } QCOMPARE( special, 18 ); { cScopedAssignment p( &special ); p = 20; p = 3; } QCOMPARE( special, 3 ); { cScopedAssignment< int > p( nullptr ); } QCOMPARE( special, 3 ); { // "don't do this" .. order of destructors is important cScopedAssignment p( &special ); cScopedAssignment q( &special ); p = 17; } QCOMPARE( special, 17 ); { // "don't do this" .. order of destructors is important cScopedAssignment p( &special ); cScopedAssignment q( &special ); p = 34; q = 2; // q destroyed first, then p } QCOMPARE( special, 34 ); } /* Demonstration of Traits support for has-a-method or not. * * We have two classes, c1 and c2; one has a method do_the_thing() and the * other does not. A third class, Thinginator, has a method thingify(), * which should call do_the_thing() of its argument if it exists. */ struct c1 { int do_the_thing() { return 2; } }; struct c2 { }; DECLARE_HAS_METHOD( do_the_thing ) struct Thinginator { public: /// When class T has function do_the_thing() template < class T > int thingify( T& t, const std::true_type& ) { return t.do_the_thing(); } template < class T > int thingify( T&, const std::false_type& ) { return -1; } template < class T > int thingify( T& t ) { return thingify( t, has_do_the_thing< T > {} ); } }; void LibCalamaresTests::testTraits() { has_do_the_thing< c1 > x {}; has_do_the_thing< c2 > y {}; QVERIFY( x ); QVERIFY( !y ); c1 c1 {}; c2 c2 {}; QCOMPARE( c1.do_the_thing(), 2 ); Thinginator t; QCOMPARE( t.thingify( c1 ), 2 ); // Calls c1::do_the_thing() QCOMPARE( t.thingify( c2 ), -1 ); } void LibCalamaresTests::testVariantStringListCode() { using namespace CalamaresUtils; const QString key( "strings" ); { // Things that are not stringlists QVariantMap m; QCOMPARE( getStringList( m, key ), QStringList {} ); m.insert( key, 17 ); QCOMPARE( getStringList( m, key ), QStringList {} ); m.insert( key, QVariant {} ); QCOMPARE( getStringList( m, key ), QStringList {} ); } { // Things that are **like** stringlists QVariantMap m; m.insert( key, QString( "astring" ) ); QCOMPARE( getStringList( m, key ).count(), 1 ); QCOMPARE( getStringList( m, key ), QStringList { "astring" } ); // A single string **can** be considered a stringlist! m.insert( key, QString( "more strings" ) ); QCOMPARE( getStringList( m, key ).count(), 1 ); QCOMPARE( getStringList( m, key ), QStringList { "more strings" } ); m.insert( key, QString() ); QCOMPARE( getStringList( m, key ).count(), 1 ); QCOMPARE( getStringList( m, key ), QStringList { QString() } ); } { // Things that are definitely stringlists QVariantMap m; m.insert( key, QStringList { "aap", "noot" } ); QCOMPARE( getStringList( m, key ).count(), 2 ); QVERIFY( getStringList( m, key ).contains( "aap" ) ); QVERIFY( !getStringList( m, key ).contains( "mies" ) ); } } void LibCalamaresTests::testVariantStringListYAMLDashed() { using namespace CalamaresUtils; const QString key( "strings" ); // Looks like a stringlist to me QTemporaryFile f; QVERIFY( f.open() ); f.write( R"(--- strings: - aap - noot - mies )" ); f.close(); bool ok = false; QVariantMap m = loadYaml( f.fileName(), &ok ); QVERIFY( ok ); QCOMPARE( m.count(), 1 ); QVERIFY( m.contains( key ) ); QVERIFY( getStringList( m, key ).contains( "aap" ) ); QVERIFY( getStringList( m, key ).contains( "mies" ) ); QVERIFY( !getStringList( m, key ).contains( "lam" ) ); } void LibCalamaresTests::testVariantStringListYAMLBracketed() { using namespace CalamaresUtils; const QString key( "strings" ); // Looks like a stringlist to me QTemporaryFile f; QVERIFY( f.open() ); f.write( R"(--- strings: [ aap, noot, mies ] )" ); f.close(); bool ok = false; QVariantMap m = loadYaml( f.fileName(), &ok ); QVERIFY( ok ); QCOMPARE( m.count(), 1 ); QVERIFY( m.contains( key ) ); QVERIFY( getStringList( m, key ).contains( "aap" ) ); QVERIFY( getStringList( m, key ).contains( "mies" ) ); QVERIFY( !getStringList( m, key ).contains( "lam" ) ); } void LibCalamaresTests::testStringTruncation() { Logger::setupLogLevel( Logger::LOGDEBUG ); using namespace CalamaresUtils; const QString longString( R"(--- --- src/libcalamares/utils/String.h +++ src/libcalamares/utils/String.h @@ -62,15 +62,22 @@ DLLEXPORT QString removeDiacritics( const QString& string ); */ DLLEXPORT QString obscure( const QString& string ); +/** @brief Parameter for counting lines at beginning and end of string + * + * This is used by truncateMultiLine() to indicate how many lines from + * the beginning and how many from the end should be kept. + */ struct LinesStartEnd { - int atStart; - int atEnd; + int atStart = 0; + int atEnd = 0; )" ); const int sufficientLength = 812; // There's 18 lines in all QCOMPARE( longString.count( '\n' ), 18 ); QVERIFY( longString.length() < sufficientLength ); // If we ask for more, we get everything back QCOMPARE( longString, truncateMultiLine( longString, LinesStartEnd { 20, 0 }, CharCount { sufficientLength } ) ); QCOMPARE( longString, truncateMultiLine( longString, LinesStartEnd { 0, 20 }, CharCount { sufficientLength } ) ); // If we ask for no lines, only characters, we get that { auto s = truncateMultiLine( longString, LinesStartEnd { 0, 0 }, CharCount { 4 } ); QCOMPARE( s.length(), 4 ); QCOMPARE( s, QString( "---\n" ) ); } { auto s = truncateMultiLine( longString, LinesStartEnd { 0, 0 }, CharCount { sufficientLength } ); QCOMPARE( s, longString ); } // Lines at the start { auto s = truncateMultiLine( longString, LinesStartEnd { 4, 0 }, CharCount { sufficientLength } ); QVERIFY( s.length() > 1 ); QVERIFY( longString.startsWith( s ) ); cDebug() << "Result-line" << Logger::Quote << s; QCOMPARE( s.count( '\n' ), 4 ); } // Lines at the end { auto s = truncateMultiLine( longString, LinesStartEnd { 0, 4 }, CharCount { sufficientLength } ); QVERIFY( s.length() > 1 ); QVERIFY( longString.endsWith( s ) ); cDebug() << "Result-line" << Logger::Quote << s; QCOMPARE( s.count( '\n' ), 4 ); } // Lines at both ends { auto s = truncateMultiLine( longString, LinesStartEnd { 2, 2 }, CharCount { sufficientLength } ); QVERIFY( s.length() > 1 ); cDebug() << "Result-line" << Logger::Quote << s; QCOMPARE( s.count( '\n' ), 4 ); auto firsttwo = truncateMultiLine( s, LinesStartEnd { 2, 0 }, CharCount { sufficientLength } ); auto lasttwo = truncateMultiLine( s, LinesStartEnd { 0, 2 }, CharCount { sufficientLength } ); QCOMPARE( firsttwo + lasttwo, s ); QCOMPARE( firsttwo.count( '\n' ), 2 ); QVERIFY( longString.startsWith( firsttwo ) ); QVERIFY( longString.endsWith( lasttwo ) ); } } void LibCalamaresTests::testStringTruncationShorter() { Logger::setupLogLevel( Logger::LOGDEBUG ); using namespace CalamaresUtils; const QString longString( R"(Some strange string artifacts appeared, leading to `{1?}` being displayed in various user-facing messages. These have been removed and the translations updated.)" ); const char NEWLINE = '\n'; const int insufficientLength = 42; // There's 2 newlines in all, no trailing newline QVERIFY( !longString.endsWith( NEWLINE ) ); QCOMPARE( longString.count( NEWLINE ), 2 ); QVERIFY( longString.length() > insufficientLength ); // Even the first line must be more than the insufficientLength QVERIFY( longString.indexOf( NEWLINE ) > insufficientLength ); // Grab first line, untruncated { auto s = truncateMultiLine( longString, LinesStartEnd { 1, 0 } ); QVERIFY( s.length() > 1 ); QVERIFY( longString.startsWith( s ) ); QVERIFY( s.endsWith( NEWLINE ) ); QVERIFY( s.endsWith( "being\n" ) ); QVERIFY( s.startsWith( "Some " ) ); } // Grab last line, untruncated { auto s = truncateMultiLine( longString, LinesStartEnd { 0, 1 } ); QVERIFY( s.length() > 1 ); QVERIFY( longString.endsWith( s ) ); QVERIFY( !s.endsWith( NEWLINE ) ); QVERIFY( s.endsWith( "updated." ) ); QCOMPARE( s.count( NEWLINE ), 0 ); // Because last line doesn't end with a newline QVERIFY( s.startsWith( "and the " ) ); } // Grab last two lines, untruncated { auto s = truncateMultiLine( longString, LinesStartEnd { 0, 2 } ); QVERIFY( s.length() > 1 ); QVERIFY( longString.endsWith( s ) ); QVERIFY( !s.endsWith( NEWLINE ) ); QVERIFY( s.endsWith( "updated." ) ); QCOMPARE( s.count( NEWLINE ), 1 ); // Because last line doesn't end with a newline QVERIFY( s.startsWith( "displayed in " ) ); } // First line, truncated { auto s = truncateMultiLine( longString, LinesStartEnd { 1, 0 }, CharCount { insufficientLength } ); cDebug() << "Result-line" << Logger::Quote << s; QVERIFY( s.length() > 1 ); QVERIFY( s.endsWith( NEWLINE ) ); QVERIFY( s.startsWith( "Some " ) ); // Because the first line has a newline, the truncated version does too, // but that makes it one longer than requested. QCOMPARE( s.length(), insufficientLength + 1 ); QVERIFY( longString.startsWith( s.left( insufficientLength ) ) ); } // Last line, truncated; this line is quite short { const int quiteShort = 8; QVERIFY( longString.lastIndexOf( NEWLINE ) < longString.length() - quiteShort ); auto s = truncateMultiLine( longString, LinesStartEnd { 0, 1 }, CharCount { quiteShort } ); cDebug() << "Result-line" << Logger::Quote << s; QVERIFY( s.length() > 1 ); QVERIFY( !s.endsWith( NEWLINE ) ); // Because the original doesn't either QVERIFY( s.startsWith( "upda" ) ); QCOMPARE( s.length(), quiteShort ); // No extra newlines QVERIFY( longString.endsWith( s ) ); } // First and last, but both truncated { const int quiteShort = 16; QVERIFY( longString.indexOf( NEWLINE ) > quiteShort ); QVERIFY( longString.lastIndexOf( NEWLINE ) < longString.length() - quiteShort ); auto s = truncateMultiLine( longString, LinesStartEnd { 1, 1 }, CharCount { quiteShort } ); cDebug() << "Result-line" << Logger::Quote << s; QVERIFY( s.length() > 1 ); QVERIFY( !s.endsWith( NEWLINE ) ); // Because the original doesn't either QVERIFY( s.startsWith( "Some " ) ); QVERIFY( s.endsWith( "updated." ) ); QCOMPARE( s.length(), quiteShort + 1 ); // Newline between front and back part } } void LibCalamaresTests::testStringTruncationDegenerate() { Logger::setupLogLevel( Logger::LOGDEBUG ); using namespace CalamaresUtils; // This is quite long, 1 line only, with no newlines const QString longString( "The portscout new distfile checker has detected that one or more of your " "ports appears to be out of date. Please take the opportunity to check " "each of the ports listed below, and if possible and appropriate, " "submit/commit an update. If any ports have already been updated, you can " "safely ignore the entry." ); const char NEWLINE = '\n'; const int quiteShort = 16; QVERIFY( longString.length() > quiteShort ); QVERIFY( !longString.contains( NEWLINE ) ); QVERIFY( longString.indexOf( NEWLINE ) < 0 ); { auto s = truncateMultiLine( longString, LinesStartEnd { 1, 0 }, CharCount { quiteShort } ); cDebug() << "Result-line" << Logger::Quote << s; QVERIFY( s.length() > 1 ); QCOMPARE( s.length(), quiteShort ); // No newline between front and back part QVERIFY( s.startsWith( "The port" ) ); // 8, which is quiteShort / 2 QVERIFY( s.endsWith( "e entry." ) ); // also 8 chars auto t = truncateMultiLine( longString, LinesStartEnd { 2, 2 }, CharCount { quiteShort } ); QCOMPARE( s, t ); } } void LibCalamaresTests::testStringRemoveLeading_data() { QTest::addColumn< QString >( "string" ); QTest::addColumn< char >( "c" ); QTest::addColumn< QString >( "result" ); QTest::newRow( "empty" ) << QString() << '/' << QString(); QTest::newRow( "one-slash" ) << QStringLiteral( "/tmp" ) << '/' << QStringLiteral( "tmp" ); QTest::newRow( "two-slash" ) << QStringLiteral( "//tmp" ) << '/' << QStringLiteral( "tmp" ); QTest::newRow( "multi-slash" ) << QStringLiteral( "/tmp/p" ) << '/' << QStringLiteral( "tmp/p" ); QTest::newRow( "later-slash" ) << QStringLiteral( "@/tmp" ) << '/' << QStringLiteral( "@/tmp" ); QTest::newRow( "all-one-slash" ) << QStringLiteral( "/" ) << '/' << QString(); QTest::newRow( "all-many-slash" ) << QStringLiteral( "////////////////////" ) << '/' << QString(); QTest::newRow( "trailing" ) << QStringLiteral( "tmp/" ) << '/' << QStringLiteral( "tmp/" ); } void LibCalamaresTests::testStringRemoveLeading() { QFETCH( QString, string ); QFETCH( char, c ); QFETCH( QString, result ); const QString initial = string; CalamaresUtils::removeLeading( string, c ); QCOMPARE( string, result ); } void LibCalamaresTests::testStringRemoveTrailing_data() { QTest::addColumn< QString >( "string" ); QTest::addColumn< char >( "c" ); QTest::addColumn< QString >( "result" ); QTest::newRow( "empty" ) << QString() << '/' << QString(); QTest::newRow( "one-slash" ) << QStringLiteral( "/tmp" ) << '/' << QStringLiteral( "/tmp" ); QTest::newRow( "two-slash" ) << QStringLiteral( "//tmp" ) << '/' << QStringLiteral( "//tmp" ); QTest::newRow( "multi-slash" ) << QStringLiteral( "/tmp//p/" ) << '/' << QStringLiteral( "/tmp//p" ); QTest::newRow( "later-slash" ) << QStringLiteral( "@/tmp/@" ) << '/' << QStringLiteral( "@/tmp/@" ); QTest::newRow( "later-slash2" ) << QStringLiteral( "@/tmp/@//" ) << '/' << QStringLiteral( "@/tmp/@" ); QTest::newRow( "all-one-slash" ) << QStringLiteral( "/" ) << '/' << QString(); QTest::newRow( "all-many-slash" ) << QStringLiteral( "////////////////////" ) << '/' << QString(); QTest::newRow( "trailing" ) << QStringLiteral( "tmp/" ) << '/' << QStringLiteral( "tmp" ); } void LibCalamaresTests::testStringRemoveTrailing() { QFETCH( QString, string ); QFETCH( char, c ); QFETCH( QString, result ); const QString initial = string; CalamaresUtils::removeTrailing( string, c ); QCOMPARE( string, result ); } static QString dirname( const QTemporaryDir& d ) { return d.path().split( '/' ).last(); } static QString dirname( const QDir& d ) { return d.absolutePath().split( '/' ).last(); } // Method under test extern bool relativeChangeDirectory( QDir& directory, const QString& subdir ); void LibCalamaresTests::testRunnerDirs() { Logger::setupLogLevel( Logger::LOGDEBUG ); QDir startDir( QDir::current() ); QTemporaryDir tempDir( "./utilstest" ); QVERIFY( tempDir.isValid() ); QVERIFY( startDir.isReadable() ); // Test changing "downward" { QDir testDir( QDir::current() ); QCOMPARE( startDir, testDir ); } { QDir testDir( QDir::current() ); const bool could_change_to_dot = relativeChangeDirectory( testDir, QStringLiteral( "." ) ); QVERIFY( could_change_to_dot ); QCOMPARE( startDir, testDir ); } { // The tempDir was created inside the current directory, we want only the subdir-name QDir testDir( QDir::current() ); const bool could_change_to_temp = relativeChangeDirectory( testDir, dirname( tempDir ) ); QVERIFY( could_change_to_temp ); QVERIFY( startDir != testDir ); QVERIFY( testDir.absolutePath().startsWith( startDir.absolutePath() ) ); } // Test changing to something that doesn't exist { QDir testDir( QDir::current() ); const bool could_change_to_bogus = relativeChangeDirectory( testDir, QStringLiteral( "bogus" ) ); QVERIFY( !could_change_to_bogus ); QCOMPARE( startDir, testDir ); // Must be unchanged } // Testing escape-from-start { // Escape briefly from the start QDir testDir( QDir::current() ); const bool could_change_to_current = relativeChangeDirectory( testDir, QStringLiteral( "../" ) + dirname( startDir ) ); QVERIFY( could_change_to_current ); QCOMPARE( startDir, testDir ); // The change succeeded, but net effect is zero const bool could_change_to_temp = relativeChangeDirectory( testDir, QStringLiteral( "../" ) + dirname( startDir ) + QStringLiteral( "/./" ) + dirname( tempDir ) ); QVERIFY( could_change_to_temp ); QVERIFY( startDir != testDir ); QVERIFY( testDir.absolutePath().startsWith( startDir.absolutePath() ) ); } { // Escape? QDir testDir( QDir::current() ); const bool could_change_to_parent = relativeChangeDirectory( testDir, QStringLiteral( "../" ) ); QVERIFY( !could_change_to_parent ); QCOMPARE( startDir, testDir ); // Change failed const bool could_change_to_tmp = relativeChangeDirectory( testDir, QStringLiteral( "/tmp" ) ); QVERIFY( !could_change_to_tmp ); QCOMPARE( startDir, testDir ); const bool could_change_to_elsewhere = relativeChangeDirectory( testDir, QStringLiteral( "../src" ) ); QVERIFY( !could_change_to_elsewhere ); QCOMPARE( startDir, testDir ); } } // Method under test extern std::pair< bool, QDir > calculateWorkingDirectory( Calamares::Utils::RunLocation location, const QString& directory ); void LibCalamaresTests::testCalculateWorkingDirectory() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( !gs ) { cDebug() << "Creating new JobQueue"; (void)new Calamares::JobQueue(); gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; } QVERIFY( gs ); // Working with a rootMountPoint set QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-job-XXXXXX" ) ); gs->insert( "rootMountPoint", tempRoot.path() ); { auto [ ok, d ] = calculateWorkingDirectory( CalamaresUtils::System::RunLocation::RunInHost, QString() ); QVERIFY( ok ); QCOMPARE( d, QDir::current() ); } { auto [ ok, d ] = calculateWorkingDirectory( CalamaresUtils::System::RunLocation::RunInTarget, QString() ); QVERIFY( ok ); QCOMPARE( d.absolutePath(), tempRoot.path() ); } gs->remove( "rootMountPoint" ); { auto [ ok, d ] = calculateWorkingDirectory( CalamaresUtils::System::RunLocation::RunInHost, QString() ); QVERIFY( ok ); QCOMPARE( d, QDir::current() ); } { auto [ ok, d ] = calculateWorkingDirectory( CalamaresUtils::System::RunLocation::RunInTarget, QString() ); QVERIFY( !ok ); QCOMPARE( d, QDir::current() ); } } void LibCalamaresTests::testRunnerOutput() { cDebug() << "Testing ls"; { Calamares::Utils::Runner r( { "ls", "-d", "." } ); QSignalSpy spy( &r, &decltype( r )::output ); r.enableOutputProcessing(); auto result = r.run(); QCOMPARE( result.getExitCode(), 0 ); QCOMPARE( result.getOutput(), QString() ); QCOMPARE( spy.count(), 1 ); } cDebug() << "Testing cat"; { Calamares::Utils::Runner r( { "cat" } ); QSignalSpy spy( &r, &decltype( r )::output ); r.enableOutputProcessing().setInput( QStringLiteral( "hello\nworld\n\n!\n" ) ); { auto result = r.run(); QCOMPARE( result.getExitCode(), 0 ); QCOMPARE( result.getOutput(), QString() ); QCOMPARE( spy.count(), 4 ); } r.setInput( QStringLiteral( "yo\ndogg" ) ); { auto result = r.run(); QCOMPARE( result.getExitCode(), 0 ); QCOMPARE( result.getOutput(), QString() ); QCOMPARE( spy.count(), 6 ); // 4 from before, +2 here } } cDebug() << "Testing cat (again)"; { QStringList collectedOutput; Calamares::Utils::Runner r( { "cat" } ); r.enableOutputProcessing().setInput( QStringLiteral( "hello\nworld\n\n!\n" ) ); QObject::connect( &r, &decltype( r )::output, [ &collectedOutput ]( QString s ) { collectedOutput << s; } ); { auto result = r.run(); QCOMPARE( result.getExitCode(), 0 ); QCOMPARE( result.getOutput(), QString() ); QCOMPARE( collectedOutput.count(), 4 ); QVERIFY( collectedOutput.contains( QStringLiteral( "world\n" ) ) ); } r.setInput( QStringLiteral( "yo\ndogg" ) ); { auto result = r.run(); QCOMPARE( result.getExitCode(), 0 ); QCOMPARE( result.getOutput(), QString() ); QCOMPARE( collectedOutput.count(), 6 ); QVERIFY( collectedOutput.contains( QStringLiteral( "dogg" ) ) ); // no newline } } } CalamaresUtils::System* file_setup( const QTemporaryDir& tempRoot ) { CalamaresUtils::System* ss = CalamaresUtils::System::instance(); if ( !ss ) { ss = new CalamaresUtils::System( true ); } Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( !gs ) { cDebug() << "Creating new JobQueue"; (void)new Calamares::JobQueue(); gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; } if ( gs ) { // Working with a rootMountPoint set gs->insert( "rootMountPoint", tempRoot.path() ); } return ss; } void LibCalamaresTests::testReadWriteFile() { static const QByteArray otherContents( "first\nsecond\n" ); QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-job-XXXXXX" ) ); auto* ss = file_setup( tempRoot ); QVERIFY( ss ); { auto fullPath = ss->createTargetFile( "test0", QByteArray(), CalamaresUtils::System::WriteMode::Overwrite ); QVERIFY( fullPath ); QVERIFY( !fullPath.path().isEmpty() ); QFileInfo fi( fullPath.path() ); QVERIFY( fi.exists() ); QVERIFY( fi.isFile() ); QCOMPARE( fi.size(), 0 ); } // It won't overwrite unless you ask for it { auto fullPath = ss->createTargetFile( "test0", otherContents ); QVERIFY( !fullPath ); // Failed, because it won't overwrite QCOMPARE( fullPath.code(), decltype( fullPath )::Code::AlreadyExists ); QVERIFY( fullPath.path().isEmpty() ); // Because it wasn't written QFileInfo fi( tempRoot.filePath( "test0" ) ); // Compute the name some other way QVERIFY( fi.exists() ); QVERIFY( fi.isFile() ); QCOMPARE( fi.size(), 0 ); } // But it will if you say so explicitly { auto fullPath = ss->createTargetFile( "test0", otherContents, CalamaresUtils::System::WriteMode::Overwrite ); QVERIFY( fullPath ); QVERIFY( !fullPath.path().isEmpty() ); QFileInfo fi( fullPath.path() ); QVERIFY( fi.exists() ); QVERIFY( fi.isFile() ); QCOMPARE( fi.size(), 13 ); } // Now it's been written, we can read it, too { auto contents = ss->readTargetFile( "test0" ); QVERIFY( !contents.isEmpty() ); QCOMPARE( contents.count(), 2 ); QCOMPARE( contents[ 0 ], QStringLiteral( "first" ) ); // No trailing \n QCOMPARE( contents[ 1 ], QStringLiteral( "second" ) ); // No trailing \n } } QTEST_GUILESS_MAIN( LibCalamaresTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-calamares-2d126ae/src/libcalamares/utils/Traits.h000066400000000000000000000044701430147706700240010ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/UMask.cpp000066400000000000000000000012351430147706700241020ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/UMask.h000066400000000000000000000021611430147706700235460ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/Units.h000066400000000000000000000060511430147706700236320ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/Variant.cpp000066400000000000000000000057571430147706700245030ustar00rootroot00000000000000/* === 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; } QList< QVariant > getList( const QVariantMap& map, const QString& key, const QList< QVariant >& d ) { if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.canConvert( QVariant::List ) ) { return v.toList(); } } return d; } qint64 getInteger( const QVariantMap& map, const QString& key, qint64 d ) { 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-calamares-2d126ae/src/libcalamares/utils/Variant.h000066400000000000000000000052121430147706700241320ustar00rootroot00000000000000/* === 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 #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 than getString(), and a single-string value will * be returned as a 1-item list. */ DLLEXPORT QStringList getStringList( const QVariantMap& map, const QString& key, const QStringList& d = QStringList() ); /** * Get a list from a mapping with a given key; returns @p d if no value. */ DLLEXPORT QList< QVariant > getList( const QVariantMap& map, const QString& key, const QList< QVariant >& d = QList< QVariant >() ); /** * 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-calamares-2d126ae/src/libcalamares/utils/Yaml.cpp000066400000000000000000000200671430147706700237700ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/Yaml.h000066400000000000000000000055121430147706700234330ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamares/utils/moc-warnings.h000066400000000000000000000017731430147706700251420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * * Calamares is Free Software: see the License-Identifier above. * * */ /* @file Turn off warnings on MOC-generated code * * This header file exists **only** to reduce warnings during compilation. * Code generated by Qt's MOC, in combination with Clang (version 6 or later, * I'm fairly sure) and the plenty-of-warnings settings that Calamares uses, * triggers tons of warnings. Since those warnings are not something we * can do anything about, turn them off by `#include`ing this header * before a MOC file. * * Note that not many files in Calamares use MOC directly: mostly CMake's * automoc does all the work for us. */ #ifdef __clang__ #pragma clang diagnostic ignored "-Wextra-semi-stmt" #pragma clang diagnostic ignored "-Wredundant-parens" #pragma clang diagnostic ignored "-Wreserved-identifier" #endif calamares-calamares-2d126ae/src/libcalamaresui/000077500000000000000000000000001430147706700215535ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamaresui/Branding.cpp000066400000000000000000000471721430147706700240160ustar00rootroot00000000000000/* === 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() { if ( !s_instance ) { cWarning() << "No Branding instance created yet."; } 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() ) { return ImageRegistry::instance()->pixmap( imageFi.absoluteFilePath(), size ); } else { const auto icon = QIcon::fromTheme( imageName ); // Not found, bail out with the filename used if ( !icon.isNull() ) { return icon.pixmap( size ); } } return QPixmap(); } QPixmap Branding::image( const QStringList& list, const QSize& size ) const { QDir componentDir( componentDirectory() ); for ( const QString& imageName : list ) { auto p = image( imageName, size ); if ( !p.isNull() ) { return p; } } return QPixmap(); } static QString _stylesheet( const QDir& dir ) { QFileInfo importQSSPath( dir.filePath( "stylesheet.qss" ) ); if ( importQSSPath.exists() && importQSSPath.isReadable() ) { QFile stylesheetFile( importQSSPath.filePath() ); 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-calamares-2d126ae/src/libcalamaresui/Branding.h000066400000000000000000000236741430147706700234640ustar00rootroot00000000000000/* === 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 Look up image with alternate names * * Calls image() for each name in the @p list and returns the first * one that is non-null. May return a null pixmap if nothing is found. */ QPixmap image( const QStringList& list, const QSize& size ) const; /** @brief Stylesheet to apply for this branding. May be empty. * * The file is loaded every time this function is called, so * 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). */ struct UploadServerInfo { UploadServerType type; QUrl url; qint64 size; operator bool() const { return type != Calamares::Branding::UploadServerType::None && size != 0; } }; UploadServerInfo uploadServer() const { return m_uploadServer; } /** * Creates a map called "branding" in the global storage, and inserts an * entry for each of the branding strings. This makes the branding * 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-calamares-2d126ae/src/libcalamaresui/CMakeLists.txt000066400000000000000000000067071430147706700243250ustar00rootroot00000000000000# === 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/ErrorDialog.cpp widgets/FixedAspectRatioLabel.cpp widgets/PrettyRadioButton.cpp widgets/LogWidget.cpp widgets/TranslationFix.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/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 UI utils/ErrorDialog/ErrorDialog.ui 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-calamares-2d126ae/src/libcalamaresui/ViewManager.cpp000066400000000000000000000430021430147706700244630ustar00rootroot00000000000000/* === 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 "widgets/ErrorDialog.h" #include "widgets/TranslationFix.h" #include #include #include #include #include #include #include #define UPDATE_BUTTON_PROPERTY( name, value ) \ do \ { \ m_##name = value; \ emit name##Changed( m_##name ); \ } while ( false ) namespace Calamares { 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 ); #ifdef PRESERVE_FOR_TRANSLATION_PURPOSES tr( "&Yes" ); tr( "&No" ); tr( "&Close" ); #endif } 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 ) { 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" ); ErrorDialog* errorDialog = new ErrorDialog(); errorDialog->setWindowTitle( tr( "Error" ) ); errorDialog->setHeading( "" + heading + "" ); errorDialog->setInformativeText( message ); errorDialog->setShouldOfferWebPaste( Calamares::Branding::instance()->uploadServer() ); errorDialog->setDetails( details ); errorDialog->show(); cDebug() << "Calamares will quit when the dialog closes."; connect( errorDialog, &QDialog::finished, [ errorDialog ]( int result ) { if ( result == QDialog::Accepted && errorDialog->shouldOfferWebPaste() ) { CalamaresUtils::Paste::doLogUploadUI( errorDialog ); } 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 ); Calamares::fixButtonLabels( &mb ); 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-calamares-2d126ae/src/libcalamaresui/ViewManager.h000066400000000000000000000226041430147706700241350ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/libcalamaresui.qrc000066400000000000000000000035501430147706700252420ustar00rootroot00000000000000 ../../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-calamares-2d126ae/src/libcalamaresui/modulesystem/000077500000000000000000000000001430147706700243055ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamaresui/modulesystem/CppJobModule.cpp000066400000000000000000000054471430147706700273460ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/CppJobModule.h000066400000000000000000000025541430147706700270070ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/ModuleFactory.cpp000066400000000000000000000102761430147706700275740ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/ModuleFactory.h000066400000000000000000000024771430147706700272450ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/ModuleManager.cpp000066400000000000000000000355401430147706700275400ustar00rootroot00000000000000/* === 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, descriptorFileInfo.absoluteFilePath() ); descriptor.setDirectory( descriptorFileInfo.absoluteDir().absolutePath() ); m_availableDescriptorsByModuleName.insert( moduleName, descriptor ); } else { // Duplicate modules are ok; other issues like empty name or dir-mismatch are reported. if ( !m_availableDescriptorsByModuleName.contains( moduleName ) ) { cWarning() << deb << "ModuleManager module descriptor" << descriptorFileInfo.absoluteFilePath() << "has bad name" << moduleName; } } } else { 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 ) { const auto steps = Calamares::ViewManager::instance()->viewSteps(); ExecutionViewStep* evs = steps.isEmpty() ? nullptr : qobject_cast< ExecutionViewStep* >( steps.last() ); if ( !evs ) // If the last step is not an EVS, we must create it. { evs = new ExecutionViewStep( ViewManager::instance() ); ViewManager::instance()->addViewStep( evs ); } evs->appendJobModuleInstanceKey( instanceKey ); } } } 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-calamares-2d126ae/src/libcalamaresui/modulesystem/ModuleManager.h000066400000000000000000000135251430147706700272040ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/ProcessJobModule.cpp000066400000000000000000000025241430147706700302330ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/ProcessJobModule.h000066400000000000000000000026211430147706700276760ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/PythonJobModule.cpp000066400000000000000000000022061430147706700300730ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/PythonJobModule.h000066400000000000000000000023711430147706700275430ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp000066400000000000000000000135331430147706700306050ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/PythonQtViewModule.h000066400000000000000000000024231430147706700302460ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/ViewModule.cpp000066400000000000000000000053751430147706700271030ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/modulesystem/ViewModule.h000066400000000000000000000025561430147706700265460ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/utils/000077500000000000000000000000001430147706700227135ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamaresui/utils/CalamaresUtilsGui.cpp000066400000000000000000000143421430147706700270010ustar00rootroot00000000000000/* === 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 ) { if ( layout ) { layout->setContentsMargins( 0, 0, 0, 0 ); layout->setMargin( 0 ); layout->setSpacing( 0 ); for ( int i = 0; i < layout->count(); i++ ) { auto* childItem = layout->itemAt( i ); QLayout* childLayout = childItem ? childItem->layout() : nullptr; 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-calamares-2d126ae/src/libcalamaresui/utils/CalamaresUtilsGui.h000066400000000000000000000065731430147706700264550ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/utils/ImageRegistry.cpp000066400000000000000000000067331430147706700262030ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/utils/ImageRegistry.h000066400000000000000000000016651430147706700256470ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/utils/Paste.cpp000066400000000000000000000133321430147706700244750ustar00rootroot00000000000000/* === 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 "widgets/TranslationFix.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 > 0 ) { cDebug() << "Log upload size limit was limited to" << sizeLimitBytes << "bytes"; } if ( sizeLimitBytes == 0 ) { cDebug() << "Log upload size is 0, upload disabled."; return QByteArray(); } const QString name = Logger::logFile(); QFile pasteSourceFile( name ); if ( !pasteSourceFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) { cWarning() << "Could not open log file" << name; return QByteArray(); } if ( sizeLimitBytes < 0 ) { return pasteSourceFile.readAll(); } QFileInfo fi( pasteSourceFile ); if ( fi.size() > sizeLimitBytes ) { cDebug() << "Only last" << sizeLimitBytes << "bytes of log file (sized" << fi.size() << "bytes) uploaded"; fi.refresh(); // Because we just wrote to the file with that cDebug() ^^ pasteSourceFile.seek( fi.size() - sizeLimitBytes ); } return pasteSourceFile.read( sizeLimitBytes ); } STATICTEST QString ficheLogUpload( const QByteArray& pasteData, const QUrl& serverUrl, QObject* parent ) { QTcpSocket* socket = new QTcpSocket( parent ); // 16 bits of port-number socket->connectToHost( serverUrl.host(), quint16( 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 configured with invalid URL"; return QString(); } if ( type == Calamares::Branding::UploadServerType::None ) { // Early return to avoid reading the log file return QString(); } if ( sizeLimitBytes == 0 ) { // Suggests that it is un-set in the config file cWarning() << "Upload configured to send 0 bytes"; return QString(); } QByteArray pasteData = logFileContents( sizeLimitBytes ); if ( pasteData.isEmpty() ) { // An error has already been logged return QString(); } switch ( type ) { case Calamares::Branding::UploadServerType::None: cWarning() << "No upload configured."; return QString(); case Calamares::Branding::UploadServerType::Fiche: return ficheLogUpload( pasteData, serverUrl, parent ); } return QString(); } QString CalamaresUtils::Paste::doLogUploadUI( QWidget* parent ) { // These strings originated in the ViewManager class QString pasteUrl = CalamaresUtils::Paste::doLogUpload( parent ); QString pasteUrlMessage; if ( pasteUrl.isEmpty() ) { pasteUrlMessage = QCoreApplication::translate( "Calamares::ViewManager", "The upload was unsuccessful. No web-paste was done." ); } else { QClipboard* clipboard = QApplication::clipboard(); clipboard->setText( pasteUrl, QClipboard::Clipboard ); if ( clipboard->supportsSelection() ) { clipboard->setText( pasteUrl, QClipboard::Selection ); } QString pasteUrlFmt = QCoreApplication::translate( "Calamares::ViewManager", "Install log posted to\n\n%1\n\nLink copied to clipboard" ); pasteUrlMessage = pasteUrlFmt.arg( pasteUrl ); } QMessageBox mb( QMessageBox::Critical, QCoreApplication::translate( "Calamares::ViewManager", "Install Log Paste URL" ), pasteUrlMessage, QMessageBox::Ok ); Calamares::fixButtonLabels( &mb ); mb.exec(); return pasteUrl; } bool CalamaresUtils::Paste::isEnabled() { auto [ type, serverUrl, sizeLimitBytes ] = Calamares::Branding::instance()->uploadServer(); return type != Calamares::Branding::UploadServerType::None && sizeLimitBytes != 0; } calamares-calamares-2d126ae/src/libcalamaresui/utils/Paste.h000066400000000000000000000016111430147706700241370ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/utils/PythonQtUtils.cpp000066400000000000000000000017451430147706700262350ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/utils/PythonQtUtils.h000066400000000000000000000014151430147706700256740ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/utils/Qml.cpp000066400000000000000000000174721430147706700241630ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/utils/Qml.h000066400000000000000000000056621430147706700236260ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/utils/QtCompat.h000066400000000000000000000022071430147706700246150ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/utils/TestPaste.cpp000066400000000000000000000042631430147706700253400ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/000077500000000000000000000000001430147706700235455ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamaresui/viewpages/BlankViewStep.cpp000066400000000000000000000040221430147706700267650ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/BlankViewStep.h000066400000000000000000000024661430147706700264440ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/ExecutionViewStep.cpp000066400000000000000000000142531430147706700277100ustar00rootroot00000000000000/* === 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 "widgets/LogWidget.h" #include #include #include #include #include #include #include #include #include #include #include static Calamares::Slideshow* makeSlideshow( QWidget* parent ) { const int api = Calamares::Branding::instance()->slideshowAPI(); switch ( api ) { case -1: return new Calamares::SlideshowPictures( parent ); #ifdef WITH_QML case 1: [[fallthrough]]; case 2: return new Calamares::SlideshowQML( parent ); #endif default: cWarning() << "Unknown Branding slideshow API" << api; return new Calamares::SlideshowPictures( parent ); } } namespace Calamares { ExecutionViewStep::ExecutionViewStep( QObject* parent ) : ViewStep( parent ) , m_widget( new QWidget ) , m_progressBar( new QProgressBar ) , m_label( new QLabel ) , m_slideshow( makeSlideshow( m_widget ) ) , m_tab_widget( new QTabWidget ) , m_log_widget( new LogWidget ) { m_widget->setObjectName( "slideshow" ); m_progressBar->setObjectName( "exec-progress" ); m_label->setObjectName( "exec-message" ); QVBoxLayout* layout = new QVBoxLayout( m_widget ); QVBoxLayout* bottomLayout = new QVBoxLayout; QHBoxLayout* barLayout = new QHBoxLayout; m_progressBar->setMaximum( 10000 ); m_tab_widget->addTab( m_slideshow->widget(), "Slideshow" ); m_tab_widget->addTab( m_log_widget, "Log" ); m_tab_widget->tabBar()->hide(); layout->addWidget( m_tab_widget ); CalamaresUtils::unmarginLayout( layout ); layout->addLayout( bottomLayout ); bottomLayout->addSpacing( CalamaresUtils::defaultFontHeight() / 2 ); bottomLayout->addLayout( barLayout ); bottomLayout->addWidget( m_label ); QToolBar* toolBar = new QToolBar; const auto logButtonIcon = QIcon::fromTheme( "utilities-terminal" ); auto toggleLogAction = toolBar->addAction( Branding::instance()->image( { "utilities-log-viewer", "utilities-terminal", "text-x-log", "text-x-changelog", "preferences-log" }, QSize( 32, 32 ) ), "Toggle log" ); auto toggleLogButton = dynamic_cast< QToolButton* >( toolBar->widgetForAction( toggleLogAction ) ); connect( toggleLogButton, &QToolButton::clicked, this, &ExecutionViewStep::toggleLog ); barLayout->addWidget( m_progressBar ); barLayout->addWidget( toolBar ); 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::toggleLog() { const bool logBecomesVisible = m_tab_widget->currentIndex() == 0; // ie. is not visible right now if ( logBecomesVisible ) { m_log_widget->start(); } else { m_log_widget->stop(); } m_tab_widget->setCurrentIndex( logBecomesVisible ? 1 : 0 ); } void ExecutionViewStep::onLeave() { m_log_widget->stop(); m_slideshow->changeSlideShowState( Slideshow::Stop ); } } // namespace Calamares calamares-calamares-2d126ae/src/libcalamaresui/viewpages/ExecutionViewStep.h000066400000000000000000000031021430147706700273440ustar00rootroot00000000000000/* === 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 "widgets/LogWidget.h" #include class QLabel; class QObject; class QProgressBar; class QTabWidget; 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; QTabWidget* m_tab_widget; LogWidget* m_log_widget; QList< ModuleSystem::InstanceKey > m_jobInstanceKeys; void updateFromJobQueue( qreal percent, const QString& message ); void toggleLog(); }; } // namespace Calamares #endif /* EXECUTIONVIEWSTEP_H */ calamares-calamares-2d126ae/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp000066400000000000000000000016721430147706700320540ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h000066400000000000000000000023001430147706700315060ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/PythonQtJob.cpp000066400000000000000000000027641430147706700265030ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/PythonQtJob.h000066400000000000000000000023761430147706700261470ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp000066400000000000000000000061531430147706700304260ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h000066400000000000000000000033721430147706700300730ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/PythonQtViewStep.cpp000066400000000000000000000122231430147706700275260ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/PythonQtViewStep.h000066400000000000000000000022551430147706700271770ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/QmlViewStep.cpp000066400000000000000000000157121430147706700264770ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/QmlViewStep.h000066400000000000000000000070461430147706700261450ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/Slideshow.cpp000066400000000000000000000174501430147706700262210ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/Slideshow.h000066400000000000000000000072611430147706700256650ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/ViewStep.cpp000066400000000000000000000025751430147706700260300ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/viewpages/ViewStep.h000066400000000000000000000156401430147706700254720ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/widgets/000077500000000000000000000000001430147706700232215ustar00rootroot00000000000000calamares-calamares-2d126ae/src/libcalamaresui/widgets/ClickableLabel.cpp000066400000000000000000000016511430147706700265410ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/widgets/ClickableLabel.h000066400000000000000000000025221430147706700262040ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/widgets/ErrorDialog.cpp000066400000000000000000000046541430147706700261470ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Artem Grinev * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ErrorDialog.h" #include "ui_ErrorDialog.h" #include "widgets/TranslationFix.h" #include #include namespace Calamares { ErrorDialog::ErrorDialog( QWidget* parent ) : QDialog( parent ) , ui( new Ui::ErrorDialog ) { ui->setupUi( this ); ui->iconLabel->setPixmap( QIcon::fromTheme( "dialog-error" ).pixmap( 64 ) ); ui->detailsWidget->hide(); ui->offerWebPasteLabel->hide(); } ErrorDialog::~ErrorDialog() { delete ui; } QString ErrorDialog::heading() const { return ui->headingLabel->text(); } QString ErrorDialog::informativeText() const { return ui->informativeTextLabel->text(); } QString ErrorDialog::details() const { return ui->detailsBrowser->toPlainText(); } void ErrorDialog::setHeading( const QString& newHeading ) { if ( ui->headingLabel->text() != newHeading ) { ui->headingLabel->setText( newHeading ); emit headingChanged(); } } void ErrorDialog::setInformativeText( const QString& newInformativeText ) { if ( ui->informativeTextLabel->text() != newInformativeText ) { ui->informativeTextLabel->setText( newInformativeText ); emit informativeTextChanged(); } } void ErrorDialog::setDetails( const QString& newDetails ) { if ( ui->detailsBrowser->toPlainText() != newDetails ) { ui->detailsBrowser->setPlainText( newDetails ); ui->detailsWidget->setVisible( !ui->detailsBrowser->toPlainText().trimmed().isEmpty() ); emit detailsChanged(); } } bool ErrorDialog::shouldOfferWebPaste() const { return m_shouldOfferWebPaste; } void ErrorDialog::setShouldOfferWebPaste( bool newShouldOfferWebPaste ) { if ( m_shouldOfferWebPaste != newShouldOfferWebPaste ) { m_shouldOfferWebPaste = newShouldOfferWebPaste; ui->offerWebPasteLabel->setVisible( m_shouldOfferWebPaste ); ui->buttonBox->setStandardButtons( m_shouldOfferWebPaste ? ( QDialogButtonBox::Yes | QDialogButtonBox::No ) : QDialogButtonBox::Close ); fixButtonLabels( ui->buttonBox ); emit shouldOfferWebPasteChanged(); } } } // namespace Calamares calamares-calamares-2d126ae/src/libcalamaresui/widgets/ErrorDialog.h000066400000000000000000000046521430147706700256120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Artem Grinev * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef LIBCALAMARESUI_ERRORDIALOG_H #define LIBCALAMARESUI_ERRORDIALOG_H #include namespace Ui { class ErrorDialog; } namespace Calamares { class ErrorDialog : public QDialog { Q_OBJECT Q_PROPERTY( QString heading READ heading WRITE setHeading NOTIFY headingChanged ) Q_PROPERTY( QString informativeText READ informativeText WRITE setInformativeText NOTIFY informativeTextChanged ) Q_PROPERTY( QString details READ details WRITE setDetails NOTIFY detailsChanged ) Q_PROPERTY( bool shouldOfferWebPaste READ shouldOfferWebPaste WRITE setShouldOfferWebPaste NOTIFY shouldOfferWebPasteChanged ) public: explicit ErrorDialog( QWidget* parent = nullptr ); ~ErrorDialog() override; /** @brief The heading (title) of the error dialog * * This is a short (one-line) title. It is human-readable, so should * be translated at the time it is set. */ QString heading() const; void setHeading( const QString& newHeading ); /** @brief The description of the problem * * Longer, human-readable, description of the problem. This text * is word-wrapped as necessary. */ QString informativeText() const; void setInformativeText( const QString& newInformativeText ); /** @brief Details of the problem * * This is generally command-output; it might not be translated * when set. It should be considered "background to the informative * text", or maybe "the reasons". Write the informative text for * the end-user. */ QString details() const; void setDetails( const QString& newDetails ); /** @brief Enable web-paste button * * The web-paste button can be configured at a global level, * but each individual error dialog can be set separately. */ bool shouldOfferWebPaste() const; void setShouldOfferWebPaste( bool newShouldOfferWebPaste ); signals: void headingChanged(); void informativeTextChanged(); void detailsChanged(); void shouldOfferWebPasteChanged(); private: Ui::ErrorDialog* ui; bool m_shouldOfferWebPaste = false; }; }; // namespace Calamares #endif // LIBCALAMARESUI_ERRORDIALOG_H calamares-calamares-2d126ae/src/libcalamaresui/widgets/ErrorDialog.ui000066400000000000000000000070271430147706700257770ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2021 Artem Grinev <agrinev@manjaro.org> SPDX-License-Identifier: GPL-3.0-or-later ErrorDialog 0 0 425 262 Dialog 0 0 Details: Would you like to paste the install log to the web? Qt::Horizontal QDialogButtonBox::Close 0 0 0 0 buttonBox accepted() ErrorDialog accept() 248 254 157 274 buttonBox rejected() ErrorDialog reject() 316 260 286 274 calamares-calamares-2d126ae/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp000066400000000000000000000016211430147706700300630ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/widgets/FixedAspectRatioLabel.h000066400000000000000000000014161430147706700275320ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/widgets/LogWidget.cpp000066400000000000000000000045521430147706700256200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2022 Bob van der Linden * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "LogWidget.h" #include "utils/Logger.h" #include #include #include #include #include namespace Calamares { LogThread::LogThread( QObject* parent ) : QThread( parent ) { } LogThread::~LogThread() { quit(); requestInterruption(); wait(); } void LogThread::run() { const auto filePath = Logger::logFile(); qint64 lastPosition = 0; while ( !QThread::currentThread()->isInterruptionRequested() ) { QFile file( filePath ); qint64 fileSize = file.size(); // Check whether the file size has changed since last time // we read the file. if ( lastPosition != fileSize && file.open( QFile::ReadOnly | QFile::Text ) ) { // Start reading at the position we ended up last time we read the file. file.seek( lastPosition ); QTextStream in( &file ); auto chunk = in.readAll(); qint64 newPosition = in.pos(); lastPosition = newPosition; Q_EMIT onLogChunk( chunk ); } QThread::msleep( 100 ); } } LogWidget::LogWidget( QWidget* parent ) : QWidget( parent ) , m_text( new QPlainTextEdit ) , m_log_thread( this ) { auto layout = new QStackedLayout( this ); setLayout( layout ); m_text->setReadOnly( true ); m_text->setVerticalScrollBarPolicy( Qt::ScrollBarPolicy::ScrollBarAlwaysOn ); QFont monospaceFont( "monospace" ); monospaceFont.setStyleHint( QFont::Monospace ); m_text->setFont( monospaceFont ); layout->addWidget( m_text ); connect( &m_log_thread, &LogThread::onLogChunk, this, &LogWidget::handleLogChunk ); m_log_thread.setPriority( QThread::LowestPriority ); m_log_thread.start(); } void LogWidget::handleLogChunk( const QString& logChunk ) { m_text->appendPlainText( logChunk ); } void LogWidget::start() { if ( !m_log_thread.isRunning() ) { m_text->clear(); m_log_thread.start(); } } void LogWidget::stop() { m_log_thread.requestInterruption(); } } // namespace Calamares calamares-calamares-2d126ae/src/libcalamaresui/widgets/LogWidget.h000066400000000000000000000021571430147706700252640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2022 Bob van der Linden * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef LIBCALAMARESUI_LOGWIDGET_H #define LIBCALAMARESUI_LOGWIDGET_H #include #include #include namespace Calamares { class LogThread : public QThread { Q_OBJECT void run() override; public: explicit LogThread( QObject* parent = nullptr ); ~LogThread() override; Q_SIGNALS: void onLogChunk( const QString& logChunk ); }; class LogWidget : public QWidget { Q_OBJECT QPlainTextEdit* m_text; LogThread m_log_thread; public: explicit LogWidget( QWidget* parent = nullptr ); public Q_SLOTS: /// @brief Called by the thread when there is new data void handleLogChunk( const QString& logChunk ); /// @brief Stop watching for log data void stop(); /// @brief Start watching for new log data void start(); }; } // namespace Calamares #endif // LOGWIDGET_H calamares-calamares-2d126ae/src/libcalamaresui/widgets/PrettyRadioButton.cpp000066400000000000000000000050361430147706700273730ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/widgets/PrettyRadioButton.h000066400000000000000000000042041430147706700270340ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/widgets/TranslationFix.cpp000066400000000000000000000031521430147706700266730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "TranslationFix.h" #include #include #include #include #include namespace Calamares { //Using QMessageBox's StandardButton enum here but according to headers they should be kept in-sync between multiple classes. static std::pair< decltype( QMessageBox::Ok ), const char* > maps[] = { { QMessageBox::Ok, QT_TRANSLATE_NOOP( "StandardButtons", "&OK" ) }, { QMessageBox::Yes, QT_TRANSLATE_NOOP( "StandardButtons", "&Yes" ) }, { QMessageBox::No, QT_TRANSLATE_NOOP( "StandardButtons", "&No" ) }, { QMessageBox::Cancel, QT_TRANSLATE_NOOP( "StandardButtons", "&Cancel" ) }, { QMessageBox::Close, QT_TRANSLATE_NOOP( "StandardButtons", "&Close" ) }, }; template < typename TButtonBox > void fixButtonLabels( TButtonBox* box ) { if ( !box ) { return; } for ( auto [ sb, label ] : maps ) { auto* button = box->button( static_cast< typename TButtonBox::StandardButton >( int( sb ) ) ); if ( button ) { button->setText( QCoreApplication::translate( "StandardButtons", label ) ); } } } void fixButtonLabels( QMessageBox* box ) { fixButtonLabels< QMessageBox >( box ); } void fixButtonLabels( QDialogButtonBox* box ) { fixButtonLabels< QDialogButtonBox >( box ); } } // namespace Calamares calamares-calamares-2d126ae/src/libcalamaresui/widgets/TranslationFix.h000066400000000000000000000016251430147706700263430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef LIBCALAMARESUI_WIDGETS_TRANSLATIONFIX_H #define LIBCALAMARESUI_WIDGETS_TRANSLATIONFIX_H #include "DllMacro.h" class QMessageBox; class QDialogButtonBox; namespace Calamares { /** @brief Fixes the labels on the standard buttons of the message box * * Updates OK / Cancel / Yes / No because there does not * seem to be a way to do so in the Retranslator code * (in libcalamares) since the translated strings may come * from a variety of platform-plugin sources and we can't * guess the context. */ void UIDLLEXPORT fixButtonLabels( QMessageBox* ); void UIDLLEXPORT fixButtonLabels( QDialogButtonBox* ); } // namespace Calamares #endif calamares-calamares-2d126ae/src/libcalamaresui/widgets/WaitingWidget.cpp000066400000000000000000000030131430147706700264700ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/libcalamaresui/widgets/WaitingWidget.h000066400000000000000000000011151430147706700261360ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/000077500000000000000000000000001430147706700202465ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/CMakeLists.txt000066400000000000000000000034201430147706700230050ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/README.md000066400000000000000000000562071430147706700215370ustar00rootroot00000000000000# 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 either Widgets or QML * jobmodule, for not-user-visible modules. These may be done in C++, Python, or as external processes (external processes not recommended). 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, if required, is placed in the module's directory. The module descriptor file is a YAML 1.2 document which defines the module's name, type, interface and possibly other properties. The name of the module as defined in `module.desc` must be the same as the name 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) Note that process modules are not recommended. Module descriptors **may** have the following keys: - *emergency* (a boolean value, set to true to mark the module as an emergency module; see the section *Emergency Modules*, below) - *noconfig* (a boolean value, set to true to state that the module has no configuration file; defaults to false) - *requiredModules* (a list of modules which are required for this module to operate properly) - *weight* (a relative module weight, used to scale progress reporting) ### Required Modules 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 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`. For Python modules, manually add `emergency: true` to `module.desc`. A module that is marked as an emergency module in its module.desc must **also** set the *emergency* key to *true* in its configuration file (see below). If it does not, the module is not considered to be an emergency module after all. This is so that you can have modules that have several instances, only some of which are actually needed for emergencies. In summary: - in `module.desc`, write `emergency: true` to make it **possible** to run the module in emergency mode, - in `.conf`, write `emergency: true` to make that specific module run in emergency mode. ### Module-specific configuration 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. The name of the configuration file for a given module can be influenced by the `settings.conf` of the overall Calamares configuration. By default, though, the module's own name is used. Modules that have *noconfig* set to true will not attempt to read a configuration file, and will not warn that one is missing; conversely if *noconfig* is set to false (or is missing, since 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 one job, but this varies a little (e.g. the partition module can spawn a whole bunch of jobs to deal with each disk, and the users module has separate jobs for the regular user and the root user). By default, modules all "weigh" the same, and each job is equal. A typical installation has about 30 modules in the exec phase, so there may be 40 jobs or so: each job represents 2.5% of the overall progress of the installation. The consequence is that the *unpackfs* module, which needs to write a few hundred MB to disk, gets 2.5% of the progress, and the *machineid* module, which is essentially instantaneous, also gets 2.5% of the progress. This makes progress reporting seem weird and uneven, and suggests to users that Calamares may be "hanging" during the unpackfs stage. A module may be assigned a different "weight" in the `module.desc` file (or via the CMake macros for adding plugins). This gives the module more space in the overall progress: for instance, the *unpackfs* module now has a weight of 12, so (assuming there are 38 modules in the exec phase with a weight of 1, and *unpackfs* with a weight of 12) regular modules get 2% (1 in 50 total weight) of the overall progress bar, and the *unpackfs* module gets 24% (12 in 50). While this doesn't speed anything up, it does make the progress in the unpackfs module more visible. It is also possible to set a weight on a specific module **instance**, which can be done in `settings.conf`. This overrides any weight set in the module descriptor. Doing so is the recommended approach, since that is where the specific installation-process is configured; it is possible to take the whole installation-process into account for determining the relative weights there. ## Global storage keys Some modules place values in global storage so that they can be referenced later by other modules or even other parts of the same module. The following table represents a partial list of the values available as well as where they originate from and which module consume them. Key |Source |Consumers|Description ------------------|----------------|---|--- btrfsSubvolumes |mount |fstab|List of maps containing the mountpoint and btrtfs subvolume btrfsRootSubvolume|mount |bootloader, luksopenswaphook|String containing the subvolume mounted at root efiSystemPartition|partition |bootloader, fstab|String containing the path to the ESP relative to the installed system extraMounts |mount |unpackfs|List of maps holding metadata for the temporary mountpoints used by the installer fullname |users ||The full username (e.g. "Jane Q. Public") hostname |users ||A string containing the hostname of the new system netinstallAdd |packagechooser |netinstall|Data to add to netinstall tree. Same format as netinstall.yaml netinstallSelect |packagechooser |netinstall|List of group names to select in the netinstall tree partitions |partition, rawfs|numerous modules|List of maps of metadata about each partition rootMountPoint |mount |numerous modules|A string with the absolute path to the root mountpoint username |users |networkcfg, plasmainf, preservefiles|A string containing the username of the new user zfsDatasets |zfs |bootloader, grubcfg, mount|List of maps of zfs datasets including the name and mount information zfsInfo |partition |mount, zfs|List of encrypted zfs partitions and the encription info zfsPoolInfo |zfs |mount, umount|List of maps of zfs pool info including the name and mountpoint ## C++ modules > 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 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 The interface from a Python module to Calamares internals is found in the *libcalamares* module. This is not a standard Python module, and is only available inside the Calamares "runtime" for Python modules (it is implemented through Boost::Python in C++). A module should start by importing the Calamares internals: ``` import libcalamares ``` There are three important (sub)modules in *libcalamares*: - *globalstorage* behaves like a dictionary, and interfaces with the global storage in Calamares; use it to transfer information between modules (e.g. the *partition* module shares the partition layout it creates). Note that some information in global storage is expected to be structured, and it may be dicts-within-dicts. An example of using globalstorage: ``` if not libcalamares.globalstorage.contains("lala"): libcalamares.globalstorage.insert("lala", 72) ``` - *job* is the interface to the job's behavior, with one important data member: *configuration* which is a dictionary derived from the configuration file for the module (if there is one, empty otherwise). Less important data is *pretty_name* (a string) and *working_path* which are normally not needed. The *pretty_name* value is obtained by the Calamares internals by calling the `pretty_name()` function inside the Python module. There is one function: `setprogress(p)` which can be passed a float *p* between 0 and 1 to indicate 0% to 100% completion of the module's work. - *utils* is where non-job-specific functions are placed: - `debug(s)` and `warning(s)` are logger functions, which send output to the usual Calamares logging functions. Use these over `print()` which may not be visible at all. - `mount(device, path, type, options)` mounts a filesystem from *device* onto *path*, as if running the mount command from the shell. Use this in preference to running mount by hand. In Calamares 3.3 this function also handles privilege escalation. - `gettext_path()` and `gettext_languages()` are support functions for translations, which would normally be called only once when setting up gettext (see below). - `obscure(s)` is a lousy string obfuscation mechanism. Do not use it. - A half-dozen functions for running a command and dealing with its output. These are recommended over using `os.system()` or the *subprocess* module because they handle the chroot behavior for running in the target system transparently. In Calamares 3.3 these functions also handle privilege escalation. See below, *Running Commands in Python* for details. A module **must** contain a `run()` function to do the actual work of the module. The module **may** define the following functions to provide information to Calamares: - `pretty_name()` returns a string that is a human-readable name or short description of the module. Since it is human-readable, return a translated string. - `pretty_status_message()` returns a (longer) string that is a human-readable description of the state of the module, or what it is doing. This is primarily of importance for long-running modules. The function is called by the Calamares framework when the module reports progress through the `job.setprogress()` function. Since the status is human-readable, return a translated string. ### Python Translations Translations in Python modules -- at least the ones in the Calamares core repository -- are handled through gettext. You should import the standard Python *gettext* module. Conventionally, `_` is used to mark translations. That function needs to be configured specifically for use in Calamares so that it can find the translations. A boilerplate solution is this: ``` import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext ``` Error messages should be logged in English, and given to the user in translated form. In particular, when returning an error message and description from the `run()` function, return translated forms, like the following: ``` return ( _("No configuration found"), _("")) ``` ### Running Commands in Python The use of the `os.system()` function and *subprocess* modules is discouraged. Using these makes the caller responsible for handling any chroot or other target-versus-host-system manipulation, and in Calamares 3.3 may require additional privilege escalation handling. The primary functions for running a command from Python are: - `target_env_process_output(command, callback, stdin, timeout)` - `host_env_process_output(command, callback, stdin, timeout)` They run the given *command* (which must be a list of strings, like `sys.argv` or what would be passed to a *subprocess* module call) either in the target system (within the chroot) or in the host system. Except for *command*, the arguments are optional. A very simple example is running `ls` from a Python module (with `libcalamares.utils.` qualification omitted): ``` target_env_process_output(["ls"]) ``` The functions return 0. If the exit code of *command* is not 0, an exception is raised instead of returning 0. The exception is `subprocess.CalledProcessError` (as if the *subprocess* module had been used), and the `returncode` member of the exception object can be used to determine the exit code. Parameter *stdin* may be a string which is fed to the command as standard input. The *timeout* is in seconds, with 0 (or a negative number) treated as no-timeout. Parameter *callback* is special: - If it is `None`, no special handling of the command's output is done. The output will be logged, though (if there is any). - If it is a list, then the output of the command will be appended to the list, one line at a time. Lines will still contain the trailing newline character (if there is one; output may end without a newline). Use this approach to process the command output after it has completed. - Anything else is assumed to be a callable function that takes one parameter. The function is called once for each line of output produced by the command. The line of output still contains the trailing newline character (if there is one). Use this approach to process the command output while it is running. Here are three examples of running `ls` with different callbacks: ``` # No processing at all, output is logged target_env_process_output(["ls"]) target_env_process_output(["ls"], None) # Appends to the list ls_output = [] target_env_process_output(["ls"], ls_output) # Calls the function for each line, which then calls debug() def handle_output(s): debug(f"ls said {s}") target_env_process_output(["ls"], handle_output) ``` There are additional functions for running commands in the target, which can select what they return and whether exceptions are raised or only an exit code is returned. These functions have an overload that takes a single string (the name of an executable) as well. They should all be considered deprecated by the callback-enabled functions, above. - `target_env_call(command, stdin, timeout)` returns the exit code, does not raise. - `check_target_env_call(command, stdin, timeout)` raises on a non-zero exit code. - `check_target_env_output(command, stdin, timeout)` returns a single string with the output of *command*, raises on a non-zero exit code. All of the API functions for running commands set the environment LC_ALL and LANG to "C" for the called command. ## 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). `CMakeLists.txt` is *not* used for process jobmodules. ## Testing Modules For testing purposes there is an executable `loadmodule` which is built, but not installed. It can be found in the build directory. The `loadmodule` executable behaves like single-module Calamares: it loads global configuration, job configuration, and then runs a single module which may be a C++ module or a Python module, a Job or a ViewModule. The same application can also be used to test translations, branding, and slideshows, without starting up a whole Calamares each time. It is possible to run multiple `loadmodule` executables at the same time (Calamares tries to enforce that it runs only once). The following arguments can be used with `loadmodule` (there are more; run `loadmodule --help` for a complete list): - `--global` takes a filename and reads the file to provide data in global storage. The file must be YAML-formatted. - `--job` takes a filename and reads that to provide the job configuration (e.g. the `.conf` file for the module). - `--ui` runs a view module with a UI. Without this option, view modules are run as jobs, and most of them are not prepared for that, and will crash. calamares-calamares-2d126ae/src/modules/bootloader/000077500000000000000000000000001430147706700224005ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/bootloader/bootloader.conf000066400000000000000000000062511430147706700254050ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Bootloader configuration. The bootloader is installed to allow # the system to start (and pick one of the installed operating # systems to run). # # Take note that Debian-derivatives that use unmodified GRUB EFI packages # should specifically set *efiBootloaderId* to "debian" because that is # hard-coded in `grubx64.efi`. --- # Define which bootloader you want to use for EFI installations # Possible options are 'grub', 'sb-shim' and 'systemd-boot'. 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). # # There are some special words possible at the end of *efiBootloaderId*: # @@SERIAL@@ can be used to obtain a uniquely-numbered suffix # that is added to the Id (yielding, e.g., `dirname1` or `dirname72`) # @@RANDOM@@ can be used to obtain a unique 4-digit hex suffix # @@PHRASE@@ can be used to obtain a unique 1-to-3-word suffix # from a dictionary of space-themed words # These words must be at the **end** of the *efiBootloaderId* value. # There must also be at most one of them. If there is none, no suffix- # processing is done and the *efiBootloaderId* is used unchanged. # # NOTE: Debian derivatives that use the unmodified Debian GRUB EFI # packages may need to set this to "debian" because that is # hard-coded in `grubx64.efi`. # # efiBootloaderId: "dirname" # Optionally install a copy of the GRUB EFI bootloader as the EFI # 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-calamares-2d126ae/src/modules/bootloader/bootloader.schema.yaml000066400000000000000000000016451430147706700266630ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/bootloader/main.py000066400000000000000000000674131430147706700237110ustar00rootroot00000000000000#!/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 get_zfs_root(): """ Looks in global storage to find the zfs root :return: A string containing the path to the zfs root or None if it is not found """ zfs = libcalamares.globalstorage.value("zfsDatasets") if not zfs: libcalamares.utils.warning("Failed to locate zfs dataset list") return None # Find the root dataset for dataset in zfs: try: if dataset["mountpoint"] == "/": return dataset["zpool"] + "/" + dataset["dsName"] except KeyError: # This should be impossible libcalamares.utils.warning("Internal error handling zfs dataset") raise return None def is_btrfs_root(partition): """ Returns True if the partition object refers to a btrfs root filesystem :param partition: A partition map from global storage :return: True if btrfs and root, False otherwise """ return partition["mountPoint"] == "/" and partition["fs"] == "btrfs" def is_zfs_root(partition): """ Returns True if the partition object refers to a zfs root filesystem :param partition: A partition map from global storage :return: True if zfs and root, False otherwise """ return partition["mountPoint"] == "/" and partition["fs"] == "zfs" def create_systemd_boot_conf(install_path, efi_dir, uuid, entry, entry_name, kernel_type): """ Creates systemd-boot configuration files based on given parameters. :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"]] for partition in partitions: # systemd-boot with a BTRFS root filesystem needs to be told abouut the root subvolume. # If a btrfs root subvolume wasn't set, it means the root is directly on the partition # and this option isn't needed if is_btrfs_root(partition): btrfs_root_subvolume = libcalamares.globalstorage.value("btrfsRootSubvolume") if btrfs_root_subvolume: kernel_params.append("rootflags=subvol=" + btrfs_root_subvolume) # zfs needs to be told the location of the root dataset if is_zfs_root(partition): zfs_root_path = get_zfs_root() if zfs_root_path is not None: kernel_params.append("zfs=" + zfs_root_path) else: # Something is really broken if we get to this point libcalamares.utils.warning("Internal error handling zfs dataset") raise Exception("Internal zfs data missing, please contact your distribution") if cryptdevice_params: kernel_params.extend(cryptdevice_params) else: 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.makedirs(files_dir, exist_ok=True) 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) class suffix_iterator(object): """ Wrapper for one of the "generator" classes below to behave like a proper Python iterator. The iterator is initialized with a maximum number of attempts to generate a new suffix. """ def __init__(self, attempts, generator): self.generator = generator self.attempts = attempts self.counter = 0 def __iter__(self): return self def __next__(self): self.counter += 1 if self.counter <= self.attempts: return self.generator.next() raise StopIteration class serialEfi(object): """ EFI Id generator that appends a serial number to the given name. """ def __init__(self, name): self.name = name # So the first call to next() will bump it to 0 self.counter = -1 def next(self): self.counter += 1 if self.counter > 0: return "{!s}{!s}".format(self.name, self.counter) else: return self.name def render_in_base(value, base_values, length=-1): """ Renders @p value in base-N, where N is the number of items in @p base_values. When rendering, use the items of @p base_values (e.g. use "0123456789" to get regular decimal rendering, or "ABCDEFGHIJ" for letters-as-numbers 'encoding'). If length is positive, pads out to at least that long with leading "zeroes", whatever base_values[0] is. """ if value < 0: raise ValueError("Cannot render negative values") if len(base_values) < 2: raise ValueError("Insufficient items for base-N rendering") if length < 1: length = 1 digits = [] base = len(base_values) while value > 0: place = value % base value = value // base digits.append(base_values[place]) while len(digits) < length: digits.append(base_values[0]) return "".join(reversed(digits)) class randomEfi(object): """ EFI Id generator that appends a random 4-digit hex number to the given name. """ def __init__(self, name): self.name = name # So the first call to next() will bump it to 0 self.counter = -1 def next(self): self.counter += 1 if self.counter > 0: import random v = random.randint(0, 65535) # 16 bits return "{!s}{!s}".format(self.name, render_in_base(v, "0123456789ABCDEF", 4)) else: return self.name class phraseEfi(object): """ EFI Id generator that appends a random phrase to the given name. """ words = ("Sun", "Moon", "Mars", "Soyuz", "Falcon", "Kuaizhou", "Gaganyaan") def __init__(self, name): self.name = name # So the first call to next() will bump it to 0 self.counter = -1 def next(self): self.counter += 1 if self.counter > 0: import random desired_length = 1 + self.counter // 5 v = random.randint(0, len(self.words) ** desired_length) return "{!s}{!s}".format(self.name, render_in_base(v, self.words)) else: return self.name def get_efi_suffix_generator(name): """ Handle EFI bootloader Ids with @@@@ for suffix-processing. """ if "@@" not in name: raise ValueError("Misplaced call to get_efi_suffix_generator, no @@") parts = name.split("@@") if len(parts) != 3: raise ValueError("EFI Id {!r} is malformed".format(name)) if parts[2]: # Supposed to be empty because the string ends with "@@" raise ValueError("EFI Id {!r} is malformed".format(name)) if parts[1] not in ("SERIAL", "RANDOM", "PHRASE"): raise ValueError("EFI suffix {!r} is unknown".format(parts[1])) generator = None if parts[1] == "SERIAL": generator = serialEfi(parts[0]) elif parts[1] == "RANDOM": generator = randomEfi(parts[0]) elif parts[1] == "PHRASE": generator = phraseEfi(parts[0]) if generator is None: raise ValueError("EFI suffix {!r} is unsupported".format(parts[1])) return generator def change_efi_suffix(efi_directory, bootloader_id): """ Returns a label based on @p bootloader_id that is usable within @p efi_directory. If there is a @@@@ suffix marker in the given id, tries to generate a unique label. """ if bootloader_id.endswith("@@"): # Do 10 attempts with any suffix generator g = suffix_iterator(10, get_efi_suffix_generator(bootloader_id)) else: # Just one attempt g = [bootloader_id] for candidate_name in g: if not os.path.exists(os.path.join(efi_directory, candidate_name)): return candidate_name return bootloader_id def efi_label(efi_directory): """ Returns a sanitized label, possibly unique, that can be used within @p efi_directory. """ if "efiBootloaderId" in libcalamares.job.configuration: efi_bootloader_id = change_efi_suffix( efi_directory, 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], universal_newlines=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" and cpu_type == "loongarch64": return ("loongarch64-efi", "grubloongarch64.efi", "bootloongarch64.efi") elif efi_bitness == "64": # If it's not ARM, must by AMD64 return ("x86_64-efi", "grubx64.efi", "bootx64.efi") libcalamares.utils.warning("Could not find GRUB parameters for bits {b} and cpu {c}".format(b=repr(efi_bitness), c=repr(cpu_type))) return None def run_grub_mkconfig(partitions, output_file): """ Runs grub-mkconfig in the target environment :param partitions: The partitions list from global storage :param output_file: A string containing the path to the generating grub config file :return: """ # zfs needs an environment variable set for grub-mkconfig if any([is_zfs_root(partition) for partition in partitions]): check_target_env_call(["sh", "-c", "ZPOOL_VDEV_NAME_PATH=1 " + libcalamares.job.configuration["grubMkconfig"] + " -o " + output_file]) else: # The input file /etc/default/grub should already be filled out by the # grubcfg job module. check_target_env_call([libcalamares.job.configuration["grubMkconfig"], "-o", output_file]) def run_grub_install(fw_type, partitions, efi_directory): """ Runs grub-install in the target environment :param fw_type: A string which is "efi" for UEFI installs. Any other value results in a BIOS install :param partitions: The partitions list from global storage :param efi_directory: The path of the efi directory relative to the root of the install :return: """ is_zfs = any([is_zfs_root(partition) for partition in partitions]) # zfs needs an environment variable set for grub if is_zfs: check_target_env_call(["sh", "-c", "echo ZPOOL_VDEV_NAME_PATH=1 >> /etc/environment"]) if fw_type == "efi": assert efi_directory is not None efi_bootloader_id = efi_label(efi_directory) efi_target, efi_grub_file, efi_boot_file = get_grub_efi_parameters() if is_zfs: check_target_env_call(["sh", "-c", "ZPOOL_VDEV_NAME_PATH=1 " + libcalamares.job.configuration["grubInstall"] + " --target=" + efi_target + " --efi-directory=" + efi_directory + " --bootloader-id=" + efi_bootloader_id + " --force"]) else: check_target_env_call([libcalamares.job.configuration["grubInstall"], "--target=" + efi_target, "--efi-directory=" + efi_directory, "--bootloader-id=" + efi_bootloader_id, "--force"]) else: assert efi_directory is None if libcalamares.globalstorage.value("bootLoader") is None: return boot_loader = libcalamares.globalstorage.value("bootLoader") if boot_loader["installPath"] is None: return if is_zfs: check_target_env_call(["sh", "-c", "ZPOOL_VDEV_NAME_PATH=1 " + libcalamares.job.configuration["grubInstall"] + " --target=i386-pc --recheck --force " + boot_loader["installPath"]]) else: check_target_env_call([libcalamares.job.configuration["grubInstall"], "--target=i386-pc", "--recheck", "--force", boot_loader["installPath"]]) def install_grub(efi_directory, fw_type): """ Installs grub as bootloader, either in pc or efi mode. :param efi_directory: :param fw_type: """ # get the partition from global storage partitions = libcalamares.globalstorage.value("partitions") if not partitions: libcalamares.utils.warning(_("Failed to install grub, no partitions defined in global storage")) return if fw_type == "efi": libcalamares.utils.debug("Bootloader: grub (efi)") install_path = libcalamares.globalstorage.value("rootMountPoint") 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_directory) efi_target, efi_grub_file, efi_boot_file = get_grub_efi_parameters() run_grub_install(fw_type, partitions, efi_directory) # 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)") run_grub_install(fw_type, partitions, None) run_grub_mkconfig(partitions, libcalamares.job.configuration["grubCfg"]) def install_secureboot(efi_directory): """ Installs the secureboot shim in the system by calling efibootmgr. """ efi_bootloader_id = efi_label(efi_directory) 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-calamares-2d126ae/src/modules/bootloader/module.desc000066400000000000000000000004461430147706700245310ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/bootloader/test.yaml000066400000000000000000000002621430147706700242430ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 rootMountPoint: /tmp/mount bootLoader: installPath: /dev/sdb branding: shortProductName: "Generic Distro" calamares-calamares-2d126ae/src/modules/bootloader/tests/000077500000000000000000000000001430147706700235425ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/bootloader/tests/CMakeTests.txt000066400000000000000000000006101430147706700263030ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # We have tests to exercise some of the module internals. # Those tests conventionally live in Python files here in the tests/ directory. Add them. add_test( NAME test-bootloader-efiname COMMAND env PYTHONPATH=.: python3 ${CMAKE_CURRENT_LIST_DIR}/test-bootloader-efiname.py WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) calamares-calamares-2d126ae/src/modules/bootloader/tests/test-bootloader-efiname.py000066400000000000000000000036621430147706700306340ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Calamares Boilerplate import libcalamares libcalamares.globalstorage = libcalamares.GlobalStorage(None) libcalamares.globalstorage.insert("testing", True) # Module prep-work from src.modules.bootloader import main # Specific Bootloader test g = main.get_efi_suffix_generator("derp@@SERIAL@@") assert g is not None assert g.next() == "derp" # First time, no suffix for n in range(9): print(g.next()) # We called next() 10 times in total, starting from 0 assert g.next() == "derp10" g = main.get_efi_suffix_generator("derp@@RANDOM@@") assert g is not None for n in range(10): print(g.next()) # it's random, nothing to assert g = main.get_efi_suffix_generator("derp@@PHRASE@@") assert g is not None for n in range(10): print(g.next()) # it's random, nothing to assert # Check invalid things try: g = main.get_efi_suffix_generator("derp") raise TypeError("Shouldn't get generator (no indicator)") except ValueError as e: pass try: g = main.get_efi_suffix_generator("derp@@HEX@@") raise TypeError("Shouldn't get generator (unknown indicator)") except ValueError as e: pass try: g = main.get_efi_suffix_generator("derp@@SERIAL@@x") raise TypeError("Shouldn't get generator (trailing garbage)") except ValueError as e: pass try: g = main.get_efi_suffix_generator("derp@@SERIAL@@@@RANDOM@@") raise TypeError("Shouldn't get generator (multiple indicators)") except ValueError as e: pass # Try the generator (assuming no calamares- test files exist in /tmp) import os assert "calamares-single" == main.change_efi_suffix("/tmp", "calamares-single") assert "calamares-serial" == main.change_efi_suffix("/tmp", "calamares-serial@@SERIAL@@") try: os.makedirs("/tmp/calamares-serial", exist_ok=True) assert "calamares-serial1" == main.change_efi_suffix("/tmp", "calamares-serial@@SERIAL@@") finally: os.rmdir("/tmp/calamares-serial") calamares-calamares-2d126ae/src/modules/contextualprocess/000077500000000000000000000000001430147706700240335ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/contextualprocess/Binding.h000066400000000000000000000044641430147706700255660ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/contextualprocess/CMakeLists.txt000066400000000000000000000007731430147706700266020ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/contextualprocess/ContextualProcessJob.cpp000066400000000000000000000122331430147706700306600ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/contextualprocess/ContextualProcessJob.h000066400000000000000000000022511430147706700303240ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/contextualprocess/Tests.cpp000066400000000000000000000126061430147706700256460ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/contextualprocess/Tests.h000066400000000000000000000012251430147706700253060ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/contextualprocess/contextualprocess.conf000066400000000000000000000052311430147706700304700ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/displaymanager/000077500000000000000000000000001430147706700232465ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/displaymanager/displaymanager.conf000066400000000000000000000042461430147706700271230ustar00rootroot00000000000000# 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 - greetd # 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-calamares-2d126ae/src/modules/displaymanager/displaymanager.schema.yaml000066400000000000000000000014021430147706700303660ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/displaymanager additionalProperties: false type: object properties: displaymanagers: type: array items: type: string enum: [slim, sddm, lightdm, gdm, mdm, lxdm, kdm, greetd] minItems: 1 # Must be non-empty, if present at all defaultDesktopEnvironment: type: object properties: executable: { type: string } desktopFile: { type: string } required: [ executable, desktopFile ] basicSetup: { type: boolean, default: false } sysconfigSetup: { type: boolean, default: false } calamares-calamares-2d126ae/src/modules/displaymanager/main.py000066400000000000000000001151631430147706700245530ustar00rootroot00000000000000#!/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 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 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): import configparser # 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 DMgreetd(DisplayManager): name = "greetd" executable = "greetd" greeter_user = "greeter" greeter_group = "greetd" config_data = {} def os_path(self, path): return os.path.join(self.root_mount_point, path) def config_path(self): return self.os_path("etc/greetd/config.toml") def environments_path(self): return self.os_path("etc/greetd/environments") def config_load(self): import toml if (os.path.exists(self.config_path())): with open(self.config_path(), "r") as f: self.config_data = toml.load(f) self.config_data['terminal'] = dict(vt = "next") default_session_group = self.config_data.get('default_session', None) if not default_session_group: self.config_data['default_session'] = {} self.config_data['default_session']['user'] = self.greeter_user return self.config_data def config_write(self): import toml with open(self.config_path(), "w") as f: toml.dump(self.config_data, f) def basic_setup(self): if libcalamares.utils.target_env_call( ['getent', 'group', self.greeter_group] ) != 0: libcalamares.utils.target_env_call( ['groupadd', self.greeter_group] ) if libcalamares.utils.target_env_call( ['getent', 'passwd', self.greeter_user] ) != 0: libcalamares.utils.target_env_call( ['useradd', '-c', '"Greeter User"', '-g', self.greeter_group, '-s', '/bin/bash', self.greeter_user ] ) def desktop_environment_setup(self, default_desktop_environment): with open(self.environments_path(), 'w') as envs_file: envs_file.write(default_desktop_environment.desktop_file) envs_file.write("\n") def greeter_setup(self): pass def set_autologin(self, username, do_autologin, default_desktop_environment): self.config_load() de_command = default_desktop_environment.executable if os.path.exists(self.os_path("usr/bin/gtkgreed")) and os.path.exists(self.os_path("usr/bin/cage")): self.config_data['default_session']['command'] = "cage -s -- gtkgreet" elif os.path.exists(self.os_path("usr/bin/tuigreet")): tuigreet_base_cmd = "tuigreet --remember --time --issue --asterisks --cmd " self.config_data['default_session']['command'] = tuigreet_base_cmd + de_command elif os.path.exists(self.os_path("usr/bin/ddlm")): self.config_data['default_session']['command'] = "ddlm --target " + de_command else: self.config_data['default_session']['command'] = "agreety --cmd " + de_command if do_autologin == True: self.config_data['initial_session'] = dict(command = de_command, user = username) self.config_write() class DMsysconfig(DisplayManager): name = "sysconfig" executable = None 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 {!s} implementation classes.".format(dm, 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-calamares-2d126ae/src/modules/displaymanager/module.desc000066400000000000000000000002361430147706700253740ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "displaymanager" interface: "python" script: "main.py" calamares-calamares-2d126ae/src/modules/displaymanager/tests/000077500000000000000000000000001430147706700244105ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/displaymanager/tests/1.global000066400000000000000000000001251430147706700257300ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 rootMountPoint: /tmp calamares-calamares-2d126ae/src/modules/displaymanager/tests/CMakeTests.txt000066400000000000000000000007631430147706700271620ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # We have tests to load (some) of the DMs specifically, to test their # configuration code. Those tests conventionally live in Python # files here in the tests/ directory. Add them. foreach(_dmname greetd sddm) add_test( NAME configure-displaymanager-${_dmname} COMMAND env PYTHONPATH=.: python3 ${CMAKE_CURRENT_LIST_DIR}/test-dm-${_dmname}.py WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endforeach() calamares-calamares-2d126ae/src/modules/displaymanager/tests/test-dm-greetd.py000066400000000000000000000017101430147706700276060ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Calamares Boilerplate import libcalamares libcalamares.globalstorage = libcalamares.GlobalStorage(None) libcalamares.globalstorage.insert("testing", True) # Module prep-work from src.modules.displaymanager import main default_desktop_environment = main.DesktopEnvironment("startplasma-x11", "kde-plasma.desktop") import os os.makedirs("/tmp/etc/greetd/", exist_ok=True) try: os.remove("/tmp/etc/greetd/config.toml") except FileNotFoundError as e: pass try: import toml except ImportError: # This is a failure of the test-environment. import sys print("Can't find module toml.", file=sys.stderr) sys.exit(0) # Specific DM test d = main.DMgreetd("/tmp") d.set_autologin("d", True, default_desktop_environment) # .. and again (this time checks load/save) d.set_autologin("d", True, default_desktop_environment) d.set_autologin("d", True, default_desktop_environment) calamares-calamares-2d126ae/src/modules/displaymanager/tests/test-dm-sddm.py000066400000000000000000000012021430147706700272570ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Calamares Boilerplate import libcalamares libcalamares.globalstorage = libcalamares.GlobalStorage(None) libcalamares.globalstorage.insert("testing", True) # Module prep-work from src.modules.displaymanager import main default_desktop_environment = main.DesktopEnvironment("startplasma-x11", "kde-plasma.desktop") # Specific DM test d = main.DMsddm("/tmp") d.set_autologin("d", True, default_desktop_environment) # .. and again (this time checks load/save) d.set_autologin("d", True, default_desktop_environment) d.set_autologin("d", True, default_desktop_environment) calamares-calamares-2d126ae/src/modules/dracut/000077500000000000000000000000001430147706700215305ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dracut/main.py000066400000000000000000000025041430147706700230270ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/dracut/module.desc000066400000000000000000000002261430147706700236550ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "dracut" interface: "python" script: "main.py" calamares-calamares-2d126ae/src/modules/dracutlukscfg/000077500000000000000000000000001430147706700231075ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dracutlukscfg/CMakeLists.txt000066400000000000000000000005171430147706700256520ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp000066400000000000000000000121431430147706700267500ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/dracutlukscfg/DracutLuksCfgJob.h000066400000000000000000000015701430147706700264170ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/dummycpp/000077500000000000000000000000001430147706700221045ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummycpp/CMakeLists.txt000066400000000000000000000004671430147706700246530ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/dummycpp/DummyCppJob.cpp000066400000000000000000000112261430147706700250030ustar00rootroot00000000000000/* === 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 "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-calamares-2d126ae/src/modules/dummycpp/DummyCppJob.h000066400000000000000000000017101430147706700244450ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/dummycpp/dummycpp.conf000066400000000000000000000010261430147706700246100ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummycpp/module.desc000066400000000000000000000015501430147706700242320ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummyprocess/000077500000000000000000000000001430147706700230005ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummyprocess/module.desc000066400000000000000000000004651430147706700251320ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypython/000077500000000000000000000000001430147706700226435ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypython/dummypython.conf000066400000000000000000000010441430147706700261060ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypython/main.py000066400000000000000000000067321430147706700241510ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/dummypython/module.desc000066400000000000000000000003421430147706700247670ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/000077500000000000000000000000001430147706700232105ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/dummypythonqt.conf000066400000000000000000000010331430147706700270160ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/000077500000000000000000000000001430147706700241315ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ar/000077500000000000000000000000001430147706700245335ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ar/LC_MESSAGES/000077500000000000000000000000001430147706700263205ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ar/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030441430147706700316230ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/as/000077500000000000000000000000001430147706700245345ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/as/LC_MESSAGES/000077500000000000000000000000001430147706700263215ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/as/LC_MESSAGES/dummypythonqt.po000066400000000000000000000034111430147706700316220ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/ast/000077500000000000000000000000001430147706700247205ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/000077500000000000000000000000001430147706700265055ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027011430147706700320070ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/be/000077500000000000000000000000001430147706700245175ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/be/LC_MESSAGES/000077500000000000000000000000001430147706700263045ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/be/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031641430147706700316120ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/bg/000077500000000000000000000000001430147706700245215ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/000077500000000000000000000000001430147706700263065ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030721430147706700316120ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/bn/000077500000000000000000000000001430147706700245305ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/bn/LC_MESSAGES/000077500000000000000000000000001430147706700263155ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/bn/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021741430147706700316230ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/ca/000077500000000000000000000000001430147706700245145ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ca/LC_MESSAGES/000077500000000000000000000000001430147706700263015ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ca/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026371430147706700316130ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/ca@valencia/000077500000000000000000000000001430147706700263175ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/000077500000000000000000000000001430147706700301045ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022321430147706700334050ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/cs_CZ/000077500000000000000000000000001430147706700251325ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/000077500000000000000000000000001430147706700267175ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030721430147706700322230ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/da/000077500000000000000000000000001430147706700245155ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/da/LC_MESSAGES/000077500000000000000000000000001430147706700263025ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/da/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025671430147706700316160ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/de/000077500000000000000000000000001430147706700245215ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/de/LC_MESSAGES/000077500000000000000000000000001430147706700263065ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/de/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026011430147706700316070ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/dummypythonqt.pot000066400000000000000000000021201430147706700276120ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-05-27 11:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/modules/dummypythonqt/main.py:75 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:85 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:88 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:174 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:177 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:181 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/el/000077500000000000000000000000001430147706700245315ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/el/LC_MESSAGES/000077500000000000000000000000001430147706700263165ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/el/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021721430147706700316220ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/en_GB/000077500000000000000000000000001430147706700251035ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/000077500000000000000000000000001430147706700266705ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027031430147706700321740ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/eo/000077500000000000000000000000001430147706700245345ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/000077500000000000000000000000001430147706700263215ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026771430147706700316370ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/es/000077500000000000000000000000001430147706700245405ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/es/LC_MESSAGES/000077500000000000000000000000001430147706700263255ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/es/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026031430147706700316300ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/es_MX/000077500000000000000000000000001430147706700251445ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/000077500000000000000000000000001430147706700267315ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027551430147706700322440ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/es_PR/000077500000000000000000000000001430147706700251415ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/000077500000000000000000000000001430147706700267265ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022201430147706700322240ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/et/000077500000000000000000000000001430147706700245415ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/et/LC_MESSAGES/000077500000000000000000000000001430147706700263265ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/et/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025571430147706700316410ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/eu/000077500000000000000000000000001430147706700245425ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/000077500000000000000000000000001430147706700263275ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025661430147706700316420ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/fa/000077500000000000000000000000001430147706700245175ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/000077500000000000000000000000001430147706700263045ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027451430147706700316160ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/fi_FI/000077500000000000000000000000001430147706700251055ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/000077500000000000000000000000001430147706700266725ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027571430147706700322070ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/fr/000077500000000000000000000000001430147706700245405ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/000077500000000000000000000000001430147706700263255ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027631430147706700316370ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/fr_CH/000077500000000000000000000000001430147706700251125ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/000077500000000000000000000000001430147706700266775ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022161430147706700322020ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/gl/000077500000000000000000000000001430147706700245335ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/000077500000000000000000000000001430147706700263205ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025601430147706700316250ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/gu/000077500000000000000000000000001430147706700245445ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/gu/LC_MESSAGES/000077500000000000000000000000001430147706700263315ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/gu/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021751430147706700316400ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/he/000077500000000000000000000000001430147706700245255ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/he/LC_MESSAGES/000077500000000000000000000000001430147706700263125ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/he/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031241430147706700316140ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/hi/000077500000000000000000000000001430147706700245315ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/000077500000000000000000000000001430147706700263165ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.po000066400000000000000000000033311430147706700316200ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/hr/000077500000000000000000000000001430147706700245425ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/000077500000000000000000000000001430147706700263275ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027651430147706700316430ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/hu/000077500000000000000000000000001430147706700245455ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/hu/LC_MESSAGES/000077500000000000000000000000001430147706700263325ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/hu/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026171430147706700316420ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/id/000077500000000000000000000000001430147706700245255ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/id/LC_MESSAGES/000077500000000000000000000000001430147706700263125ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027041430147706700316170ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/is/000077500000000000000000000000001430147706700245445ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/is/LC_MESSAGES/000077500000000000000000000000001430147706700263315ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/is/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026201430147706700316330ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/it_IT/000077500000000000000000000000001430147706700251415ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/it_IT/LC_MESSAGES/000077500000000000000000000000001430147706700267265ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/it_IT/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027451430147706700322400ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/ja/000077500000000000000000000000001430147706700245235ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/000077500000000000000000000000001430147706700263105ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026211430147706700316130ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/kk/000077500000000000000000000000001430147706700245365ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/000077500000000000000000000000001430147706700263235ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021711430147706700316260ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/kn/000077500000000000000000000000001430147706700245415ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/kn/LC_MESSAGES/000077500000000000000000000000001430147706700263265ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/kn/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021731430147706700316330ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/ko/000077500000000000000000000000001430147706700245425ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/000077500000000000000000000000001430147706700263275ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027671430147706700316450ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/lo/000077500000000000000000000000001430147706700245435ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/000077500000000000000000000000001430147706700263305ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021611430147706700316320ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/lt/000077500000000000000000000000001430147706700245505ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/lt/LC_MESSAGES/000077500000000000000000000000001430147706700263355ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/lt/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030041430147706700316340ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/lv/000077500000000000000000000000001430147706700245525ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/lv/LC_MESSAGES/000077500000000000000000000000001430147706700263375ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/lv/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022371430147706700316450ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/mk/000077500000000000000000000000001430147706700245405ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/000077500000000000000000000000001430147706700263255ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025261430147706700316340ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/ml/000077500000000000000000000000001430147706700245415ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ml/LC_MESSAGES/000077500000000000000000000000001430147706700263265ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ml/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025421430147706700316330ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/mr/000077500000000000000000000000001430147706700245475ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/000077500000000000000000000000001430147706700263345ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021741430147706700316420ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/nb/000077500000000000000000000000001430147706700245305ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/nb/LC_MESSAGES/000077500000000000000000000000001430147706700263155ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/nb/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022061430147706700316170ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/ne_NP/000077500000000000000000000000001430147706700251305ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ne_NP/LC_MESSAGES/000077500000000000000000000000001430147706700267155ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ne_NP/LC_MESSAGES/dummypythonqt.po000066400000000000000000000033121430147706700322160ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/nl/000077500000000000000000000000001430147706700245425ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/000077500000000000000000000000001430147706700263275ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026441430147706700316370ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/pl/000077500000000000000000000000001430147706700245445ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/pl/LC_MESSAGES/000077500000000000000000000000001430147706700263315ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/pl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031601430147706700316330ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/pt_BR/000077500000000000000000000000001430147706700251375ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/000077500000000000000000000000001430147706700267245ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027511430147706700322330ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/pt_PT/000077500000000000000000000000001430147706700251575ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/pt_PT/LC_MESSAGES/000077500000000000000000000000001430147706700267445ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/pt_PT/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027141430147706700322520ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/ro/000077500000000000000000000000001430147706700245515ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/000077500000000000000000000000001430147706700263365ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027261430147706700316470ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/ru/000077500000000000000000000000001430147706700245575ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/000077500000000000000000000000001430147706700263445ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030651430147706700316520ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/sk/000077500000000000000000000000001430147706700245465ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sk/LC_MESSAGES/000077500000000000000000000000001430147706700263335ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027541430147706700316450ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/sl/000077500000000000000000000000001430147706700245475ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/000077500000000000000000000000001430147706700263345ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022621430147706700316400ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/sq/000077500000000000000000000000001430147706700245545ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/000077500000000000000000000000001430147706700263415ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026531430147706700316510ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/sr/000077500000000000000000000000001430147706700245555ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/000077500000000000000000000000001430147706700263425ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031741430147706700316510ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/sr@latin/000077500000000000000000000000001430147706700257055ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sr@latin/LC_MESSAGES/000077500000000000000000000000001430147706700274725ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sr@latin/LC_MESSAGES/dummypythonqt.po000066400000000000000000000023321430147706700327740ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/sv/000077500000000000000000000000001430147706700245615ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sv/LC_MESSAGES/000077500000000000000000000000001430147706700263465ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/sv/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026631430147706700316570ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/th/000077500000000000000000000000001430147706700245445ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/th/LC_MESSAGES/000077500000000000000000000000001430147706700263315ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/th/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021621430147706700316340ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/tr_TR/000077500000000000000000000000001430147706700251635ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/tr_TR/LC_MESSAGES/000077500000000000000000000000001430147706700267505ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/tr_TR/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027021430147706700322530ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/uk/000077500000000000000000000000001430147706700245505ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/000077500000000000000000000000001430147706700263355ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000034221430147706700316400ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/ur/000077500000000000000000000000001430147706700245575ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ur/LC_MESSAGES/000077500000000000000000000000001430147706700263445ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/ur/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021711430147706700316470ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/uz/000077500000000000000000000000001430147706700245675ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/000077500000000000000000000000001430147706700263545ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021631430147706700316600ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/zh_CN/000077500000000000000000000000001430147706700251325ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/zh_CN/LC_MESSAGES/000077500000000000000000000000001430147706700267175ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/zh_CN/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026771430147706700322350ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/lang/zh_TW/000077500000000000000000000000001430147706700251645ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/000077500000000000000000000000001430147706700267515ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026541430147706700322620ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/dummypythonqt/main.py000066400000000000000000000200661430147706700245120ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/dummypythonqt/module.desc000066400000000000000000000004261430147706700253370ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/finished/000077500000000000000000000000001430147706700220375ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/finished/CMakeLists.txt000066400000000000000000000010701430147706700245750ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/finished/Config.cpp000066400000000000000000000162371430147706700237610ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/finished/Config.h000066400000000000000000000107661430147706700234270ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/finished/FinishedPage.cpp000066400000000000000000000110401430147706700250650ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/finished/FinishedPage.h000066400000000000000000000016351430147706700245430ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/finished/FinishedPage.ui000066400000000000000000000072121430147706700247260ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/finished/FinishedViewStep.cpp000066400000000000000000000037631430147706700257740ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/finished/FinishedViewStep.h000066400000000000000000000023061430147706700254310ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/finished/finished.conf000066400000000000000000000034311430147706700245000ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/finished/finished.schema.yaml000066400000000000000000000010751430147706700257560ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/finishedq/000077500000000000000000000000001430147706700222205ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/finishedq/CMakeLists.txt000066400000000000000000000015171430147706700247640ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/finishedq/FinishedQmlViewStep.cpp000066400000000000000000000036131430147706700266210ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/finishedq/FinishedQmlViewStep.h000066400000000000000000000025221430147706700262640ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/finishedq/finishedq.conf000066400000000000000000000027401430147706700250440ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/finishedq/finishedq.qml000066400000000000000000000052151430147706700247100ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/finishedq/finishedq.qrc000066400000000000000000000001631430147706700247010ustar00rootroot00000000000000 finishedq.qml seedling.svg calamares-calamares-2d126ae/src/modules/finishedq/finishedq@mobile.qml000066400000000000000000000066211430147706700262020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * License-Filename: LICENSE * * Calamares is Free Software: see the License-Identifier above. * */ import io.calamares.core 1.0 import io.calamares.ui 1.0 import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami import QtGraphicalEffects 1.0 import QtQuick.Window 2.3 Page { id: finished width: parent.width height: parent.height header: Kirigami.Heading { width: parent.width height: 100 id: header Layout.fillWidth: true horizontalAlignment: Qt.AlignHCenter color: Kirigami.Theme.textColor level: 1 text: qsTr("Installation Completed") Text { anchors.top: header.bottom anchors.horizontalCenter: parent.horizontalCenter horizontalAlignment: Text.AlignHCenter font.pointSize: 12 text: qsTr("%1 has been installed on your computer.
You may now restart your device.").arg(Branding.string(Branding.ProductName)) } Image { source: "seedling.svg" anchors.top: header.bottom anchors.topMargin: 80 anchors.horizontalCenter: parent.horizontalCenter width: 64 height: 64 mipmap: true } } RowLayout { Layout.alignment: Qt.AlignRight|Qt.AlignVCenter anchors.centerIn: parent spacing: 6 Button { id: button text: qsTr("Close") icon.name: "application-exit" onClicked: { ViewManager.quit(); } } Button { text: qsTr("Restart") icon.name: "system-reboot" onClicked: { config.doRestart(true); } } } Item { Layout.fillHeight: true Layout.fillWidth: true anchors.bottom: parent.bottom anchors.bottomMargin : 100 anchors.horizontalCenter: parent.horizontalCenter ProgressBar { id: autoRestartBar value: 1.0 anchors.horizontalCenter: parent.horizontalCenter } Timer { id: autoRestartTimer // This is in milliseconds and should be less than 1000 (because of logic in onTriggered) interval: 100 repeat: true running: false // Whenever the timer fires (1000 / interval times a second) count the progress bar down // by 1%. When the bar is empty, try to restart normally; as a backup, when the bar // is empty change settings and schedule it to quit 1000 milliseconds (1s) later. onTriggered: { autoRestartBar.value -= 0.01; if (autoRestartBar.value <= 0.0) { // First time through here, set the interval to 1000 so that the // second time (1 second later) goes to quit(). if ( interval > 999) { ViewManager.quit(); } else { config.doRestart(true); running = false; interval = 1000; repeat = false; start(); } } } } } function onActivate() { autoRestartTimer.running = true } function onLeave() { } } calamares-calamares-2d126ae/src/modules/finishedq/seedling.svg000066400000000000000000000006001430147706700245270ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/finishedq/seedling.svg.license000066400000000000000000000001441430147706700261530ustar00rootroot00000000000000SPDX-FileCopyrightText: 2021 FontAwesome SPDX-License-Identifier: CC-BY-4.0 calamares-calamares-2d126ae/src/modules/fsresizer/000077500000000000000000000000001430147706700222625ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/fsresizer/CMakeLists.txt000066400000000000000000000025271430147706700250300ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/fsresizer/ResizeFSJob.cpp000066400000000000000000000221101430147706700251070ustar00rootroot00000000000000/* === 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 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-calamares-2d126ae/src/modules/fsresizer/ResizeFSJob.h000066400000000000000000000035771430147706700245740ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/fsresizer/Tests.cpp000066400000000000000000000063361430147706700241000ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/fsresizer/Tests.h000066400000000000000000000011571430147706700235410ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/fsresizer/fsresizer.conf000066400000000000000000000036171430147706700251540ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/fstab/000077500000000000000000000000001430147706700213455ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/fstab/fstab.conf000066400000000000000000000060551430147706700233210ustar00rootroot00000000000000# 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. # # With kernels 5.15 and newer be cautious of adding the option space_cache # to the btrfs mount options. The default in 5.15 changed to space_cache=v2. # If space_cache or space_cache=v1 are specified, it may fail to remount. # # btrfs_swap options are used when a swapfile is chosen with a btrfs root # the options are applied to the subvolume which holds the swap partition # # The settings shown here apply only the btrfs defaults; these # are generally the right ones. Commented-out lines show other # options wich **might** be applicable for specific situations. mountOptions: default: defaults,noatime # btrfs: defaults,noatime,autodefrag,compress=zstd btrfs: defaults # btrfs_swap: defaults,noatime btrfs_swap: defaults # Mount options to use for the EFI System Partition. If not defined, the # *mountOptions* for *vfat* are used, or if that is not set either, # *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 asynchronous discard support and ssd optimizations to btrfs # and does nothing for other filesystems. ssdExtraMountOptions: btrfs: discard=async,ssd # 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 # Options for handling /tmp in /etc/fstab # Currently default (required) and ssd are supported # The corresponding string can contain the following variables: # tmpfs: true or tmpfs: false to either mount /tmp as tmpfs or not # options: "" # # Example: #tmpOptions: # default: # tmpfs: false # options: "" # ssd: # tmpfs: true # options: "defaults,noatime,mode=1777" # tmpOptions: default: tmpfs: false options: "" ssd: tmpfs: true options: "defaults,noatime,mode=1777" calamares-calamares-2d126ae/src/modules/fstab/fstab.schema.yaml000066400000000000000000000027341430147706700245750ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/fstab additionalProperties: false type: object properties: mountOptions: type: object additionalProperties: true # we don't know which FS exist properties: "default": { type: string } btrfs: { type: string } required: [ "default" ] ssdExtraMountOptions: type: object additionalProperties: true # we don't know which FS exist properties: ext4: { type: string } jfs: { type: string } xfs: { type: string } swap: { type: string } btrfs: { type: string } btrfs_swap: { type: string } efiMountOptions: { type: string } crypttabOptions: { type: string } tmpOptions: type: object additionalProperties: false properties: "default": type: object additionalProperties: false properties: tmpfs: { type: boolean } options: { type: string } ssd: type: object additionalProperties: false properties: tmpfs: { type: boolean } options: { type: string } required: [ "default" ] required: - mountOptions - tmpOptions calamares-calamares-2d126ae/src/modules/fstab/main.py000077500000000000000000000415671430147706700226630ustar00rootroot00000000000000#!/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 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: You need not list your root (/) partition here, but it must be set up # beforehand by the initramfs (/etc/mkinitcpio.conf). The same applies # to encrypted swap, which should be set up with mkinitcpio-openswap # for resume support. # # """ # 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("mmcblk") or name.startswith("nvme"): # Typical mmc device is mmcblk0p1, nvme looks like nvme0n1p2 return re.sub("p[0-9]+$", "", name) return re.sub("[0-9]+$", "", name) class FstabGenerator(object): """ Class header :param partitions: :param root_mount_point: :param mount_options: :param ssd_extra_mount_options: :param crypttab_options: :param tmp_options: """ def __init__(self, partitions, root_mount_point, mount_options, ssd_extra_mount_options, crypttab_options, tmp_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.tmp_options = tmp_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 password = "/crypto_keyfile.bin" crypttab_options = self.crypttab_options # Set crypttab password for partition to none and remove crypttab options # if root partition was not encrypted if any([p["mountPoint"] == "/" and "luksMapperName" not in p for p in self.partitions]): password = "none" crypttab_options = "" # on root partition when /boot is unencrypted elif partition["mountPoint"] == "/": if any([p["mountPoint"] == "/boot" and "luksMapperName" not in p for p in self.partitions]): password = "none" crypttab_options = "" return dict( name=mapper_name, device="UUID=" + luks_uuid, password=password, options=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) elif partition["fs"] != "zfs": # zfs partitions don't need an entry in fstab dct = self.generate_fstab_line_info(partition) if dct: self.print_fstab_line(dct, file=fstab_file) if self.root_is_ssd: # Old behavior was to mount /tmp as tmpfs # New behavior is to use tmpOptions to decide # if mounting /tmp as tmpfs and which options to use ssd = self.tmp_options.get("ssd", {}) if not ssd: ssd = self.tmp_options.get("default", {}) # Default to True to mimic old behavior tmpfs = ssd.get("tmpfs", True) if tmpfs: options = ssd.get("options", "defaults,noatime,mode=1777") # Mount /tmp on a tmpfs dct = dict(device="tmpfs", mount_point="/tmp", fs="tmpfs", options=options, 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) luks_mapper_name = partition.get("luksMapperName", None) mount_point = partition["mountPoint"] disk_name = disk_name_for_partition(partition) is_ssd = disk_name in self.ssd_disks # 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 # If this is btrfs subvol a dedicated to a swapfile, use different options than a normal btrfs subvol if filesystem == "btrfs" and partition.get("subvol", None) == "/@swap": options = self.get_mount_options("btrfs_swap", mount_point) else: options = self.get_mount_options(filesystem, mount_point) if is_ssd: extra = self.ssd_extra_mount_options.get(filesystem) if extra: options += "," + extra if mount_point == "/" and filesystem != "btrfs": check = 1 elif mount_point and mount_point != "swap" and filesystem != "btrfs": check = 2 else: check = 0 if mount_point == "/": self.root_is_ssd = is_ssd # If there's a set-and-not-empty subvolume set, add it if filesystem == "btrfs" and partition.get("subvol",None): options = "subvol={},".format(partition["subvol"]) + options device = None if luks_mapper_name: device = "/dev/mapper/" + luks_mapper_name elif partition["uuid"]: device = "UUID=" + partition["uuid"] else: device = partition["device"] if not device: # TODO: we get here when the user mounted a previously encrypted partition # This should be catched early in the process return None return dict(device=device, mount_point=mount_point, 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 libcalamares.utils.host_env_process_output(["chattr", "+C", "+m", swapfile_path]) # No Copy-on-Write, no compression 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) libcalamares.utils.host_env_process_output(["mkswap", swapfile_path]) 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") tmp_options = conf.get("tmpOptions", {}) # We rely on mount_options having a default; if there wasn't one, # bail out with a meaningful error. if not mount_options: libcalamares.utils.warning("No mount options defined, {!s} partitions".format(len(partitions))) 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, tmp_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-calamares-2d126ae/src/modules/fstab/module.desc000066400000000000000000000002251430147706700234710ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "fstab" interface: "python" script: "main.py" calamares-calamares-2d126ae/src/modules/fstab/test.yaml000066400000000000000000000006561430147706700232170ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/fstab/test2.yaml000066400000000000000000000012011430147706700232640ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # This test shows how btrfs root would work rootMountPoint: /tmp/mount partitions: - device: /dev/sda1 fs: btrfs mountPoint: / uuid: 2a00f1d5-1217-49a7-bedd-b55c85764732 - device: /dev/sda2 fs: swap uuid: 59406569-446f-4730-a874-9f6b4b44fee3 mountPoint: - device: /dev/sdb1 fs: btrfs mountPoint: /home uuid: 59406569-abcd-1234-a874-9f6b4b44fee3 btrfsSubvolumes: - mountPoint: / subvolume: "@ROOT" - mountPoint: /var subvolume: "@var" - mountPoint: /usr/local subvolume: "@local" calamares-calamares-2d126ae/src/modules/grubcfg/000077500000000000000000000000001430147706700216655ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/grubcfg/grubcfg.conf000066400000000000000000000034631430147706700241610ustar00rootroot00000000000000# 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). # # TODO:3.3:snake-case this key keepDistributor: false # The default kernel params that should always be applied. # This is an array of strings. If it is unset, the default is # `["quiet"]`. To avoid the default, explicitly set this key # to an empty list, `[]`. kernel_params: [ "quiet" ] # Default entries to write to /etc/default/grub if it does not exist yet or if # we are overwriting it. # defaults: GRUB_TIMEOUT: 5 GRUB_DEFAULT: "saved" GRUB_DISABLE_SUBMENU: true GRUB_TERMINAL_OUTPUT: "console" GRUB_DISABLE_RECOVERY: true calamares-calamares-2d126ae/src/modules/grubcfg/grubcfg.schema.yaml000066400000000000000000000017051430147706700254320ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/grubcfg additionalProperties: false type: object properties: overwrite: { type: boolean, default: false } # TODO:3.3:snake-case this key keepDistributor: { type: boolean, default: false } prefer_grub_d: { type: boolean, default: false } kernel_params: { type: array, items: { type: string } } defaults: type: object additionalProperties: true # Other fields are acceptable properties: GRUB_TIMEOUT: { type: integer } GRUB_DEFAULT: { type: string } GRUB_DISABLE_SUBMENU: { type: boolean, default: true } GRUB_TERMINAL_OUTPUT: { type: string } GRUB_DISABLE_RECOVERY: { type: boolean, default: true } required: [ GRUB_TIMEOUT, GRUB_DEFAULT, GRUB_TERMINAL_OUTPUT ] calamares-calamares-2d126ae/src/modules/grubcfg/main.py000066400000000000000000000261631430147706700231730ustar00rootroot00000000000000#!/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 get_zfs_root(): """ Looks in global storage to find the zfs root :return: A string containing the path to the zfs root or None if it is not found """ zfs = libcalamares.globalstorage.value("zfsDatasets") if not zfs: libcalamares.utils.warning("Failed to locate zfs dataset list") return None # Find the root dataset for dataset in zfs: try: if dataset["mountpoint"] == "/": return dataset["zpool"] + "/" + dataset["dsName"] except KeyError: # This should be impossible libcalamares.utils.warning("Internal error handling zfs dataset") raise return None def modify_grub_default(partitions, root_mount_point, distributor): """ Configures '/etc/default/grub' for hibernation and plymouth. @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) # If there is no dracut, and the root partition is ZFS, this gets set below zfs_root_path = None for partition in partitions: if partition["mountPoint"] in ("/", "/boot") and partition["fs"] in ("btrfs", "f2fs"): 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"] ) ] if partition["fs"] == "zfs" and partition["mountPoint"] == "/": zfs_root_path = get_zfs_root() kernel_params = libcalamares.job.configuration.get("kernel_params", ["quiet"]) # Currently, grub doesn't detect this properly so it must be set manually if zfs_root_path: kernel_params.insert(0, "zfs=" + zfs_root_path) if cryptdevice_params: kernel_params.extend(cryptdevice_params) 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-calamares-2d126ae/src/modules/grubcfg/module.desc000066400000000000000000000002271430147706700240130ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "grubcfg" interface: "python" script: "main.py" calamares-calamares-2d126ae/src/modules/grubcfg/tests/000077500000000000000000000000001430147706700230275ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/grubcfg/tests/1.global000066400000000000000000000001201430147706700243420ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- bogus: true calamares-calamares-2d126ae/src/modules/grubcfg/tests/2.global000066400000000000000000000003341430147706700243520ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/grubcfg/tests/2.job000066400000000000000000000004061430147706700236640ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/grubcfg/tests/3.global000066400000000000000000000003341430147706700243530ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/grubcfg/tests/3.job000066400000000000000000000004621430147706700236670ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/grubcfg/tests/4.global000066400000000000000000000003341430147706700243540ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/grubcfg/tests/4.job000066400000000000000000000004321430147706700236650ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/grubcfg/tests/CMakeTests.txt000066400000000000000000000013561430147706700256000ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/hostinfo/000077500000000000000000000000001430147706700220775ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/hostinfo/CMakeLists.txt000066400000000000000000000025061430147706700246420ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/hostinfo/HostInfoJob.cpp000066400000000000000000000105531430147706700247730ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/hostinfo/HostInfoJob.h000066400000000000000000000023311430147706700244330ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/hostinfo/Tests.cpp000066400000000000000000000041711430147706700237100ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/hwclock/000077500000000000000000000000001430147706700217005ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/hwclock/main.py000066400000000000000000000037111430147706700232000ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/hwclock/module.desc000066400000000000000000000002501430147706700240220ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "hwclock" interface: "python" script: "main.py" noconfig: true calamares-calamares-2d126ae/src/modules/initcpio/000077500000000000000000000000001430147706700220645ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/initcpio/CMakeLists.txt000066400000000000000000000007201430147706700246230ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/initcpio/InitcpioJob.cpp000066400000000000000000000051361430147706700250060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-FileCopyrightText: 2022 Evan James * 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." ); } /** @brief Sets secure permissions on each initramfs * * Iterates over each initramfs contained directly in the directory @p d. * For each initramfs found, the permissions are set to owner read/write only. * */ void fixPermissions( const QDir& d ) { const auto initramList = d.entryInfoList( { "initramfs*" }, QDir::Files ); for ( const auto& fi : initramList ) { QFile f( fi.absoluteFilePath() ); if ( f.exists() ) { cDebug() << "initcpio setting 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 ); } } // If the kernel option isn't set to a specific kernel, run mkinitcpio on all kernels QStringList command = { "mkinitcpio" }; if ( m_kernel.isEmpty() || m_kernel == "all" ) { command.append( "-P" ); } else { command.append( { "-p", m_kernel } ); } cDebug() << "Updating initramfs with kernel" << m_kernel; auto r = CalamaresUtils::System::instance()->targetEnvCommand( command, 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" ); m_unsafe = CalamaresUtils::getBool( configurationMap, "be_unsafe", false ); } CALAMARES_PLUGIN_FACTORY_DEFINITION( InitcpioJobFactory, registerPlugin< InitcpioJob >(); ) calamares-calamares-2d126ae/src/modules/initcpio/InitcpioJob.h000066400000000000000000000016131430147706700244470ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/initcpio/Tests.cpp000066400000000000000000000016751430147706700237030ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/initcpio/Tests.h000066400000000000000000000010001430147706700233260ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/initcpio/initcpio.conf000066400000000000000000000015461430147706700245570ustar00rootroot00000000000000# 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: # - the name of a single mkinitcpio preset # - empty or unset # - the literal string "all" # # If kernel is set to "all" or empty/unset then mkinitpio is called for all # kernels. Otherwise it is called with a single preset with the value # contained in kernel. # kernel: linux # Set this to true to turn off mitigations for lax file # permissions on initramfs (which, in turn, can compromise # your LUKS encryption keys, CVS-2019-13179). # # If your initramfs are stored in the EFI partition or another non-POSIX # filesystem, this has no effect as the file permissions cannot be changed. # In this case, ensure the partition is mounted securely. # be_unsafe: false calamares-calamares-2d126ae/src/modules/initcpio/initcpio.schema.yaml000066400000000000000000000005341430147706700260270ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/initcpiocfg/000077500000000000000000000000001430147706700225445ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/initcpiocfg/main.py000066400000000000000000000173031430147706700240460ustar00rootroot00000000000000#!/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 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 cpuinfo(object): """ Object describing the current CPU's characteristics. It may be be considered a named tuple, there's no behavior here. Fields in the object: - is_intel (if it's definitely an Intel CPU) - is_amd (if it's definitely an AMD CPU) - number_of_cores It is possible for both is_* fields to be False. """ def __init__(self): self.is_intel = False self.is_amd = False self.number_of_cores = 0 cpu = self._cpuinfo() self.is_intel = cpu['proc0']['vendor_id'].lower() == "genuineintel" self.is_amd = cpu['proc0']['vendor_id'].lower() == "authenticamd" self.number_of_cores = len(cpu) @staticmethod def _cpuinfo(): """ Return the information in /proc/cpuinfo as a dictionary in the following format: cpu_info['proc0']={...} cpu_info['proc1']={...} """ cpu_info = OrderedDict() procinfo = OrderedDict() nprocs = 0 with open('/proc/cpuinfo') as cpuinfo_file: for line in cpuinfo_file: if not line.strip(): # end of one processor cpu_info["proc{!s}".format(nprocs)] = procinfo nprocs += 1 # Reset procinfo = OrderedDict() else: 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 get_host_initcpio(): """ Reads the host system mkinitcpio.conf and returns all the lines from that file, or an empty list if it does not exist. """ hostfile = "/etc/mkinitcpio.conf" try: with open(hostfile, "r") as mkinitcpio_file: mklins = [x.strip() for x in mkinitcpio_file.readlines()] except FileNotFoundError: libcalamares.utils.debug("Could not open host file '%s'" % hostfile) mklins = [] return mklins def write_mkinitcpio_lines(hooks, modules, files, root_mount_point): """ Set up mkinitcpio.conf. :param hooks: :param modules: :param files: :param root_mount_point: """ mklins = get_host_initcpio() target_path = os.path.join(root_mount_point, "etc/mkinitcpio.conf") with open(target_path, "w") as mkinitcpio_file: for line in mklins: # Replace HOOKS, MODULES and FILES lines with what we # have found via find_initcpio_features() if line.startswith("HOOKS"): line = "HOOKS=\"{!s}\"".format(' '.join(hooks)) elif line.startswith("MODULES"): line = "MODULES=\"{!s}\"".format(' '.join(modules)) elif line.startswith("FILES"): line = "FILES=\"{!s}\"".format(' '.join(files)) mkinitcpio_file.write(line + "\n") def find_initcpio_features(partitions, root_mount_point): """ Returns a tuple (hooks, modules, files) needed to support the given @p partitions (filesystems types, encryption, etc) in the target. :param partitions: (from GS) :param root_mount_point: (from GS) :return 3-tuple of lists """ hooks = ["base", "udev", "autodetect", "modconf", "block", "keyboard", "keymap", "consolefont"] modules = [] files = [] swap_uuid = "" uses_btrfs = False uses_zfs = False uses_lvm2 = False encrypt_hook = False openswap_hook = False unencrypted_separate_boot = False # 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": uses_btrfs = True # In addition to checking the filesystem, check to ensure that zfs is enabled if partition["fs"] == "zfs" and libcalamares.globalstorage.contains("zfsPoolInfo"): uses_zfs = True if "lvm2" in partition["fs"]: uses_lvm2 = True 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 uses_lvm2: hooks.append("lvm2") if uses_zfs: hooks.append("zfs") if swap_uuid != "": if encrypt_hook and openswap_hook: hooks.extend(["openswap"]) hooks.extend(["resume", "filesystems"]) else: hooks.extend(["filesystems"]) if uses_btrfs: modules.append("crc32c-intel" if cpuinfo().is_intel else "crc32c") else: hooks.append("fsck") return (hooks, modules, files) 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")) hooks, modules, files = find_initcpio_features(partitions, root_mount_point) write_mkinitcpio_lines(hooks, modules, files, root_mount_point) return None calamares-calamares-2d126ae/src/modules/initcpiocfg/module.desc000066400000000000000000000006211430147706700246700ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Writes a mkinitcpio.conf into the target system. It copies # the host system's /etc/mkinitcpio.conf, and replaces any # HOOKS, MODULES, and FILES lines with calculated values # based on what the installation (seems to) need. --- type: "job" name: "initcpiocfg" interface: "python" script: "main.py" noconfig: true calamares-calamares-2d126ae/src/modules/initramfs/000077500000000000000000000000001430147706700222425ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/initramfs/CMakeLists.txt000066400000000000000000000007241430147706700250050ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/initramfs/InitramfsJob.cpp000066400000000000000000000056671430147706700253530ustar00rootroot00000000000000/* === 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 { m_kernel = QStringLiteral( "all" ); 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-calamares-2d126ae/src/modules/initramfs/InitramfsJob.h000066400000000000000000000016221430147706700250030ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/initramfs/Tests.cpp000066400000000000000000000035741430147706700240610ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/initramfs/Tests.h000066400000000000000000000011471430147706700235200ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/initramfs/initramfs.conf000066400000000000000000000027651430147706700251170ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/initramfscfg/000077500000000000000000000000001430147706700227225ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/initramfscfg/encrypt_hook000077500000000000000000000007521430147706700253600ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/initramfscfg/encrypt_hook_nokey000077500000000000000000000006311430147706700265610ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/initramfscfg/main.py000066400000000000000000000057471430147706700242350ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/initramfscfg/module.desc000066400000000000000000000002551430147706700250510ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "initramfscfg" interface: "python" script: "main.py" noconfig: true calamares-calamares-2d126ae/src/modules/interactiveterminal/000077500000000000000000000000001430147706700243175ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/interactiveterminal/CMakeLists.txt000066400000000000000000000017031430147706700270600ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/interactiveterminal/InteractiveTerminalPage.cpp000066400000000000000000000062371430147706700316010ustar00rootroot00000000000000/* === 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 "widgets/TranslationFix.h" #include #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 mb( QMessageBox::Critical, tr( "Konsole not installed" ), tr( "Please install KDE Konsole and try again!" ), QMessageBox::Ok ); Calamares::fixButtonLabels( &mb ); mb.exec(); } void InteractiveTerminalPage::onActivate() { if ( m_termHostWidget ) { return; } #if KCOREADDONS_VERSION_MAJOR != 5 #error Incompatible with not-KF5 #endif #if KCOREADDONS_VERSION_MINOR >= 86 // 5.86 deprecated a bunch of KService and PluginFactory and related methods auto md = KPluginMetaData::findPluginById( QString(), "konsolepart" ); if ( !md.isValid() ) { errorKonsoleNotInstalled(); return; } auto* p = KPluginFactory::instantiatePlugin< KParts::ReadOnlyPart >( md, this ).plugin; #else KService::Ptr service = KService::serviceByDesktopName( "konsolepart" ); if ( !service ) { errorKonsoleNotInstalled(); return; } // Create one instance of konsolepart. KParts::ReadOnlyPart* p = service->createInstance< KParts::ReadOnlyPart >( this, this, {} ); #endif 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 ); 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-calamares-2d126ae/src/modules/interactiveterminal/InteractiveTerminalPage.h000066400000000000000000000014261430147706700312410ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp000066400000000000000000000040231430147706700324620ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/interactiveterminal/InteractiveTerminalViewStep.h000066400000000000000000000025131430147706700321310ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/interactiveterminal/interactiveterminal.conf000066400000000000000000000012341430147706700312370ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/keyboard/000077500000000000000000000000001430147706700220465ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/keyboard/AdditionalLayoutInfo.h000066400000000000000000000010201430147706700262720ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboard/CMakeLists.txt000066400000000000000000000013211430147706700246030ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/keyboard/Config.cpp000066400000000000000000000452241430147706700237660ustar00rootroot00000000000000/* === 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 "locale/Global.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; } cScopedAssignment 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; } cScopedAssignment returnToIntial( &m_state, State::Initial ); m_state = State::Guessing; /* Guessing a keyboard layout based on the locale means * mapping between language identifiers in _ * format to keyboard mappings, which are _ * 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 */ { "en_CA", "us" }, /* Canadian English */ { "el_CY", "gr" }, /* Greek in Cyprus */ { "el_GR", "gr" }, /* Greek in Greece */ { "ig_NG", "igbo_NG" }, /* Igbo in Nigeria */ { "ha_NG", "hausa_NG" }, /* Hausa */ { "en_IN", "us" }, /* India, US English keyboards are common in India */ } ); // Try to preselect a layout, depending on language and locale Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QString lang = CalamaresUtils::Locale::readGS( *gs, QStringLiteral( "LANG" ) ); 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() ) { guessLayout( lang.split( '_', SplitSkipEmptyParts ), 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-calamares-2d126ae/src/modules/keyboard/Config.h000066400000000000000000000104111430147706700234210ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboard/KeyboardData_p.cxxtr000066400000000000000000001064121430147706700260150ustar00rootroot00000000000000/* 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-calamares-2d126ae/src/modules/keyboard/KeyboardLayoutModel.cpp000066400000000000000000000143741430147706700265020ustar00rootroot00000000000000/* === 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( CalamaresUtils::translatorLocaleName(), QStringLiteral( "kb_" ), s_kbtranslator ); } XKBListModel::XKBListModel( QObject* parent ) : QAbstractListModel( parent ) { } int XKBListModel::rowCount( const QModelIndex& ) const { return m_list.count(); } QVariant XKBListModel::data( const QModelIndex& index, int role ) const { if ( !index.isValid() ) { return QVariant(); } if ( index.row() < 0 || index.row() >= m_list.count() ) { return QVariant(); } const auto item = m_list.at( index.row() ); switch ( role ) { case LabelRole: if ( s_kbtranslator && !s_kbtranslator->isEmpty() && m_contextname ) { auto s = s_kbtranslator->translate( m_contextname, item.label.toUtf8().data() ); if ( !s.isEmpty() ) { return s; } } return item.label; case KeyRole: return item.key; default: return QVariant(); } __builtin_unreachable(); } QString XKBListModel::key( int index ) const { if ( index < 0 || index >= m_list.count() ) { return QString(); } return m_list[ index ].key; } QString XKBListModel::label( int index ) const { if ( index < 0 || index >= m_list.count() ) { return QString(); } return m_list[ index ].label; } QHash< int, QByteArray > XKBListModel::roleNames() const { return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } }; } void XKBListModel::setCurrentIndex( int index ) { if ( index >= m_list.count() || index < 0 ) { return; } if ( m_currentIndex != index ) { m_currentIndex = index; emit currentIndexChanged( m_currentIndex ); } } KeyboardModelsModel::KeyboardModelsModel( QObject* parent ) : XKBListModel( parent ) { m_contextname = "kb_models"; // The models map is from human-readable names (!) to xkb identifier const auto models = KeyboardGlobal::getKeyboardModels(); m_list.reserve( models.count() ); int index = 0; for ( const auto& key : models.keys() ) { // So here *key* is the key in the map, which is the human-readable thing, // while the struct fields are xkb-id, and human-readable m_list << ModelInfo { models[ key ], key }; if ( models[ key ] == "pc105" ) { m_defaultPC105 = index; } index++; } cDebug() << "Loaded" << m_list.count() << "keyboard models"; setCurrentIndex(); // If pc105 was seen, select it now } KeyboardLayoutModel::KeyboardLayoutModel( QObject* parent ) : QAbstractListModel( parent ) { 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-calamares-2d126ae/src/modules/keyboard/KeyboardLayoutModel.h000066400000000000000000000106661430147706700261470ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboard/KeyboardPage.cpp000066400000000000000000000101771430147706700251150ustar00rootroot00000000000000/* === 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 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 total=" << model->rowCount() << "selected=" << 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-calamares-2d126ae/src/modules/keyboard/KeyboardPage.h000066400000000000000000000020561430147706700245570ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboard/KeyboardPage.ui000066400000000000000000000074471430147706700247560ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/keyboard/KeyboardViewStep.cpp000066400000000000000000000033711430147706700260050ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboard/KeyboardViewStep.h000066400000000000000000000024711430147706700254520ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboard/SetKeyboardLayoutJob.cpp000066400000000000000000000316541430147706700266300ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboard/SetKeyboardLayoutJob.h000066400000000000000000000031561430147706700262710ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboard/Tests.cpp000066400000000000000000000034301430147706700236540ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboard/images/000077500000000000000000000000001430147706700233135ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/keyboard/images/restore.png000066400000000000000000000015541430147706700255110ustar00rootroot00000000000000‰PNG  IHDR@@ªiqÞ3IDATx^í›Á•¢@†ßÜ!˜d#€½ÌuÄt#P"6Í®^"#X‰`!·ÿ^fvÑmw©Sï}gì¯Êj«mžÎç³÷Èñì}ˆý~oKÀ¢²)àõõõ“€‰é!ñ›(=ûá\À’h‰TÌWÀbÖ·X¸¨˜¸Êú#TÀ”(,,\¤€5±!ÄÇä Y?ÜÄâÁ³ã¬¯?èÑ/NDw+tøˆkì‚°ž¨AItÒøXÀÊ»NÄ D Ñ; = !Z,ÞV¤ð‡˜»àïÈF义"ÄÔ¶€”È<£ ×6Txpíɉ †+ßVèˆïh~½ )’âÛœ~ «†XAC·ÆÅÓ 3EI—&$ðèWC«!óH4DN¼îi„„BC€Ö¾œbG¼§ß@Ür”€¦itEä ÕÀe‡ý¿fî![@’$⪠è7[ÆOénX †„ŒHtH­†c§XI9Ή]];;ÄŒ Í…mŠÃÀ˜F3À@ü4tXZµüj0…âjM¥8”¥w)”_.Gt·‡°øžt ‚ûTÆæ/Š÷ÎÔ˜ÊÄÅ£W@`J@ÏØO%k`o)‰0¡‚ ž%@|ð«²5) »[Šãe$èkà™IÝ-UãP¤älƒ[E‰€ì¯³?p”Œ³w×ÙTM8:Å*H‰¥#SÅôDÉŸ @ÑîÔAé—ŒÏ7ŒÐ0R[”à3®èôDÁŸø6@ÅL-->æd_G@Çhtñ5+r[Æâ["71 æD˨„–XÎúšh™7Ó2sã0ÿÿù‚8šæŠ*d-þhRÀ‘ÈF^W9 "BÆ%ÌwâïÈ+¸¸Mjþªl Û" €‹ÐŸ“hM™¶¸æ]a˜…>1˜y¦‹·q$¶8oˆ…µ3AHˆ\”ìQM¹‹CÑ#9|ÿ¯Äó+—§Âñ†,œ,žÿ§xî åX¼BsÛ\QD‹ÞóB4߈̉ÐÍv‰¼¥×ævÀ'RƒàÂTyB¶kþ¢ù<üëóÿb=Ë 7…ÒIEND®B`‚calamares-calamares-2d126ae/src/modules/keyboard/images/restore.png.license000066400000000000000000000001421430147706700271220ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/keyboard/kbd-model-map000066400000000000000000000107441430147706700244100ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/keyboard/keyboard.conf000066400000000000000000000015571430147706700245250ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/keyboard/keyboard.qrc000066400000000000000000000002531430147706700243550ustar00rootroot00000000000000 kbd-model-map images/restore.png non-ascii-layouts calamares-calamares-2d126ae/src/modules/keyboard/keyboard.schema.yaml000066400000000000000000000006741430147706700260000ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/keyboard/keyboardwidget/000077500000000000000000000000001430147706700250525ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp000066400000000000000000000116421430147706700305430ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboard/keyboardwidget/keyboardglobal.h000066400000000000000000000021761430147706700302120ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp000066400000000000000000000246611430147706700307710ustar00rootroot00000000000000/* === 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" #include 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 { "-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() ) { static bool need_warning = true; if ( need_warning ) { cWarning() << "ckbcomp not found , keyboard preview disabled"; need_warning = false; } return false; } if ( !process.waitForFinished() ) { cWarning() << "ckbcomp failed, keyboard preview skipped for" << layout << variant; return false; } // Clear codes codes.clear(); const QStringList list = QString( process.readAll() ).split( "\n", 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-calamares-2d126ae/src/modules/keyboard/keyboardwidget/keyboardpreview.h000066400000000000000000000032631430147706700304310ustar00rootroot00000000000000/* === 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 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-calamares-2d126ae/src/modules/keyboard/layout-extractor.py000066400000000000000000000060221430147706700257460ustar00rootroot00000000000000#! /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-calamares-2d126ae/src/modules/keyboard/non-ascii-layouts000066400000000000000000000010041430147706700253420ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/keyboardq/000077500000000000000000000000001430147706700222275ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/keyboardq/CMakeLists.txt000066400000000000000000000013551430147706700247730ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/keyboardq/KeyboardQmlViewStep.cpp000066400000000000000000000034121430147706700266340ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboardq/KeyboardQmlViewStep.h000066400000000000000000000024071430147706700263040ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/keyboardq/data/000077500000000000000000000000001430147706700231405ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/keyboardq/data/Key.qml000066400000000000000000000124161430147706700244070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ import QtQuick 2.15 Item { id: key property string mainLabel: "A" property var secondaryLabels: []; property var iconSource; property var keyImageLeft: "" property var keyImageRight: "" property var keyImageCenter: "" property color keyColor: "#404040" property color keyPressedColor: "grey" property int keyBounds: 2 property var keyPressedColorOpacity: 1 property var mainFontFamily: "Roboto" property color mainFontColor: "white" property int mainFontSize: 18 property var secondaryFontFamily: "Roboto" property color secondaryFontColor: "white" property int secondaryFontSize: 10 property bool secondaryLabelVisible: true property bool isChekable; property bool isChecked; property bool upperCase; signal clicked() signal alternatesClicked(string symbol) Item { anchors.fill: parent anchors.margins: key.keyBounds visible: key.keyImageLeft != "" || key.keyImageCenter != "" || key.keyImageRight != "" ? 1 : 0 Image { id: backgroundImage_left anchors.left: parent.left height: parent.height fillMode: Image.PreserveAspectFit source: key.keyImageLeft } Image { id: backgroundImage_right anchors.right: parent.right height: parent.height fillMode: Image.PreserveAspectFit source: key.keyImageRight } Image { id: backgroundImage_center anchors.fill: parent anchors.leftMargin: backgroundImage_left.width - 1 anchors.rightMargin: backgroundImage_right.width - 1 height: parent.height fillMode: Image.Stretch source: key.keyImageCenter } } Rectangle { id: backgroundItem anchors.fill: parent anchors.margins: key.keyBounds color: key.isChecked || mouseArea.pressed ? key.keyPressedColor : key.keyColor; opacity: key.keyPressedColorOpacity } Column { anchors.centerIn: backgroundItem Text { id: secondaryLabelsItem smooth: true anchors.right: parent.right visible: true //secondaryLabelVisible text: secondaryLabels.length > 0 ? secondaryLabels : "" color: secondaryFontColor font.pixelSize: secondaryFontSize font.weight: Font.Light font.family: secondaryFontFamily font.capitalization: upperCase ? Font.AllUppercase : Font.MixedCase } Row { anchors.horizontalCenter: parent.horizontalCenter Image { id: icon smooth: true anchors.verticalCenter: parent.verticalCenter source: iconSource //sourceSize.width: key.width * 0.6 sourceSize.height: key.height * 0.4 } Text { id: mainLabelItem smooth: true anchors.verticalCenter: parent.verticalCenter text: mainLabel color: mainFontColor visible: iconSource ? false : true font.pixelSize: mainFontSize font.weight: Font.Light font.family: mainFontFamily font.capitalization: upperCase ? Font.AllUppercase : Font.MixedCase } } } Row { id: alternatesRow property int selectedIndex: -1 visible: false anchors.bottom: backgroundItem.top anchors.left: backgroundItem.left Repeater { model: secondaryLabels.length Rectangle { property bool isSelected: alternatesRow.selectedIndex == index color: isSelected ? mainLabelItem.color : key.keyPressedColor height: backgroundItem.height width: backgroundItem.width Text { anchors.centerIn: parent text: secondaryLabels[ index ] font: mainLabelItem.font color: isSelected ? key.keyPressedColor : mainLabelItem.color } } } } MouseArea { id: mouseArea anchors.fill: parent onPressAndHold: alternatesRow.visible = true onClicked: { if (key.isChekable) key.isChecked = !key.isChecked key.clicked() } onReleased: { alternatesRow.visible = false if (alternatesRow.selectedIndex > -1) key.alternatesClicked(secondaryLabels[alternatesRow.selectedIndex]) } onMouseXChanged: { alternatesRow.selectedIndex = (mouseY < 0 && mouseX > 0 && mouseY < alternatesRow.width) ? Math.floor(mouseX / backgroundItem.width) : -1; } } } calamares-calamares-2d126ae/src/modules/keyboardq/data/Keyboard.qml000066400000000000000000000206511430147706700254170ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ import QtQuick 2.15 import QtQuick.XmlListModel 2.10 Item { id: keyboard width: 1024 height: 640 property int rows: 4; property int columns: 10; property string source: "generic.xml" property var target; property color backgroundColor: "black" property var keyImageLeft: "" property var keyImageRight: "" property var keyImageCenter: "" property color keyColor: "#404040" property color keyPressedColor: "grey" property int keyBounds: 2 property var keyPressedColorOpacity: 1 property var mainFontFamily: "Roboto" property color mainFontColor: "white" property int mainFontSize: 59 property var secondaryFontFamily: "Roboto" property color secondaryFontColor: "white" property int secondaryFontSize: 30 property bool secondaryLabelsVisible: false property bool doSwitchSource: true property bool allUpperCase: false signal keyClicked(string key) signal switchSource(string source) signal enterClicked() Rectangle { id: root anchors.fill: parent color: backgroundColor property int keyWidth: keyboard.width / columns; property int keyHeight: keyboard.height / rows; property int xmlIndex: 1 Text { id: proxyMainTextItem color: keyboard.mainFontColor font.pixelSize: keyboard.mainFontSize font.weight: Font.Light font.family: keyboard.mainFontFamily font.capitalization: keyboard.allUpperCase ? Font.AllUppercase : Font.MixedCase verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter } Text { id: proxySecondaryTextItem color: keyboard.secondaryFontColor font.pixelSize: keyboard.secondaryFontSize font.weight: Font.Light font.family: keyboard.secondaryFontFamily font.capitalization: keyboard.allUpperCase ? Font.AllUppercase : Font.MixedCase verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter } Column { id: column anchors.centerIn: parent Repeater { id: rowRepeater model: XmlListModel { id: keyboardModel source: keyboard.source query: "/Keyboard/Row" Behavior on source { NumberAnimation { easing.type: Easing.InOutSine duration: 100 } } } Row { id: keyRow property int rowIndex: index anchors.horizontalCenter: if(parent) parent.horizontalCenter Repeater { id: keyRepeater model: XmlListModel { source: keyboard.source query: "/Keyboard/Row[" + (rowIndex + 1) + "]/Key" XmlRole { name: "labels"; query: "@labels/string()" } XmlRole { name: "ratio"; query: "@ratio/number()" } XmlRole { name: "icon"; query: "@icon/string()" } XmlRole { name: "checkable"; query: "@checkable/string()" } } Key { id: key width: root.keyWidth * ratio height: root.keyHeight iconSource: icon mainFontFamily: proxyMainTextItem.font mainFontColor: proxyMainTextItem.color secondaryFontFamily: proxySecondaryTextItem.font secondaryFontColor: proxySecondaryTextItem.color secondaryLabelVisible: keyboard.secondaryLabelsVisible keyColor: keyboard.keyColor keyImageLeft: keyboard.keyImageLeft keyImageRight: keyboard.keyImageRight keyImageCenter: keyboard.keyImageCenter keyPressedColor: keyboard.keyPressedColor keyPressedColorOpacity: keyboard.keyPressedColorOpacity keyBounds: keyboard.keyBounds isChekable: checkable isChecked: isChekable && command && command === "shift" && keyboard.allUpperCase upperCase: keyboard.allUpperCase property var command property var params: labels onParamsChanged: { var labelSplit; if(params[0] === '|') { mainLabel = '|' labelSplit = params } else { labelSplit = params.split(/[|]+/) if (labelSplit[0] === '!') mainLabel = '!'; else mainLabel = params.split(/[!|]+/)[0].toString(); } if (labelSplit[1]) secondaryLabels = labelSplit[1]; if (labelSplit[0] === '!') command = params.split(/[!|]+/)[1]; else command = params.split(/[!]+/)[1]; } onClicked: { if (command) { var commandList = command.split(":"); switch(commandList[0]) { case "source": keyboard.switchSource(commandList[1]) if(doSwitchSource) keyboard.source = commandList[1] return; case "shift": keyboard.allUpperCase = !keyboard.allUpperCase return; case "backspace": keyboard.keyClicked('\b'); target.text = target.text.substring(0,target.text.length-1) return; case "enter": keyboard.enterClicked() return; case "tab": keyboard.keyClicked('\t'); target.text = target.text + " " return; default: return; } } if (mainLabel.length === 1) root.emitKeyClicked(mainLabel); } onAlternatesClicked: root.emitKeyClicked(symbol); } } } } } function emitKeyClicked(text) { var emitText = keyboard.allUpperCase ? text.toUpperCase() : text; keyClicked( emitText ); target.text = target.text + emitText } } } calamares-calamares-2d126ae/src/modules/keyboardq/data/afgani.xml000066400000000000000000000050571430147706700251160ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/ar.xml000066400000000000000000000050621430147706700242670ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/backspace.svg000077500000000000000000000030711430147706700256010ustar00rootroot00000000000000 Svg Vector Icons : http://www.onlinewebfonts.com/icon calamares-calamares-2d126ae/src/modules/keyboardq/data/backspace.svg.license000066400000000000000000000001541430147706700272160ustar00rootroot00000000000000SPDX-FileCopyrightText: 2019 https://www.onlinewebfonts.com/fonts SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/keyboardq/data/button_bkg_center.png000077500000000000000000000103011430147706700273420ustar00rootroot00000000000000‰PNG  IHDR–ÄÚ^ÇsRGB®ÎégAMA± üaPLTE   !!!!"!"""###$$#$$$%%%&&%&&&'''(''(('((()))**)***+++,+*,++,,+,,,---..-...///0//00/000111221222333433443444555665666777876877887888999::9;;:<<;==<===>>=>>>???@@?@@@AAABBABBBCCCDDCDDDEEEFFEFFFGGGHHFHHGHHHIIIJJHJJIJJJMJJNKKLLJLLKMLLNNLNNMOONPLLRONROOPPNPPOQPPRRPRRQSSRTPPTQQTSRTSSTTRTTSUUTVVTVVUWWVXWVXXVXXWYYXZZXZZY[[Z\[Y\[Z\\Z\\[]]\^^\^^]__^`_]``^aa_bb`c؇ˆ pHYsÃÃÇo¨dtEXtSoftwarepaint.net 4.0.173nŸc %IDATx^íÝë›EGñö‚EDE X4€ˆ¢\ï¢(*H(¢hDð üמ_Õ©žžÝÞížÙžîzáy•ð<éúLÏ—ÉÞÓœ«²æ™ážê뙳Ϝ=süžè¯¹7wÝ}÷]wÝõ5º“¾šûJêúrÛm·Ývë­·Þ’;}úô£/ÐÍ©½½½›èÆÔ©SŸ>w}êºÏF×v:ù™èêÜUŸŽ>EM>7|ûí_JqlÜ{ºè‰ù@NW~?qk—°É]¾û:§«þ®æUºšûªt5÷UãJ0]ÝÉwE’BTÞ„^©+Z‘&XÛj¯}3ŽòÅoäÒQ¾üõqñöúׯÕËõ¯ŽË¯NH”#®ˆüËwýÝÓüúpîâ܇r'N4û^;yüÑåì|´gç“;:õÜûsïË]tÑF,][²t­³t ²Æß®aÖøÛu€µ…§Ô’hSÕAÖ꺽—$¯J^˜¼6yyòòÕ)©÷¶½§Ó»{k69®=¯=‘<4òTòLòœè]mÍ`ûnÃÈûÐuu`¢HiŠD‘‡^bw Ü0Q$*E¢ÈÓ-³&{"EE¢H‰"?,UC®'RT$ŠD‘( èO‰"Q‘(E¢HT$ŠD‘(‰"½õþÿ?zø;X÷u©¢mò‚9ãÀF¼/1°Äªo`™UÝÀdwÍ30U$ŠD‘(Ò‰"Q$Š4E¢H‰ŠD‘–NoÁŒ˜¨H‰"Q¤)EbV ½e5ÕÀDE¢H©i;ä-¾¥‡¿å›¢»~bÕ7°ÌšÊ5ÙÀdÕ60U]W ‰"Q$ŠDE¢H‰"Q‘(E¢HT$Šdµï’(E¢"Q$ŠD‘¨H‰"Q$*E¢¨°\Ë ¬óŽ4‰ŠD‘(E¢"Q$ŠD‘¨H‰"Q$*’Õq˜¦H‰"Q‘(E¢HT$Šdw˜¦H‰"Q‘(E²&þèiŠD‘¨«®á¯X;˜¨H‰"QTX?X‰"Q$*RE¢H‰"Q‘(E¢HT$«ãªg`°z>ºH¢HT$ŠD‘(Ò‰"Q$ŠDE¢HÖ€keÖ6‰"Q$ŠDE¢H‰"Q‘¬ LT$ŠD‘(‰Z±*ØŠUÕÀšÕGûkXÓù,Ä6® ¬óY ‰"Q$Š4E¢H‰ŠD‘(E¢HS$k膉"Q‘(E¢HS$ŠD‘(‰¢Âšj`¢"Q$ŠD‘¨H‰¢Âši`¢"Q$ŠDQaU6°–ÕqU0°küðgXÓ~•D‘(‰"Q$ŠDE¢H‰"Q‘(E…5àšj`¢"Q$ŠDQaõº–Xbu\• ,³Æ»f˜¬É†?ÑÀZÖLÃ9°k›‰ŠD‘(Eš"Q$ŠDQa•/!M‘(E¢"U$ŠD‘(‰"Q$ŠDE²:®Ù&*E²º0Q$ŠDE¢H‰"M‘(E¢"U$ŠDQa ¸Xfm30Q‘(E¢HT$ŠD‘(ÉÚÁÀDE¢H‰"Q‘¨kþ‰ŠD‘ª«ª5å+ØH‰ŠD‘(E¢"Q$ŠD‘¨H‰"QTX½®¥k×®¬~˜(Eš"Q$ŠD‘¦H‰"Q‘(E…5ÕÀDE¢H‰"M‘(E…u<×艊D‘(E…µÓᘨ«®uX£]3 ¬i¿0˜D‘(‰"Q$ŠDE¢H‰"Q‘(E…5àšj`¢"Q$ŠDQaõºf˜¨HVÇUÉÀ2«ºVekYÇsM=°k›iŠD‘(‰"Q$ŠDE²ÚoÿØÀ5z`š"Q$ŠD‘¦HVÇ5ÕðGLT$Šdua¢H‰ŠD‘(Eš"Q$ŠDEªH‰¢ÂÚæ‰E¢"Q$ŠD‘¦H‰"Q‘¬ê&«¶Öü‰"UÖ€kÞ5廲H‰ŠD‘(E¢"Q$ŠD‘¨H‰"QTX½®©&*E¢H‰Šdu\Õ ,Xã]³ ,±úŸHQ‘(E¢HT$ŠD‘(‰"Q$Š ëx®ÑÓ‰"Q$Š k§Ã=0QÖ’Ã?[±&˜¨H‰"Q¤)E²Úov%Q$Š4E¢H‰ŠT‘(E¢HT$ŠDQa ¸X°z]Ë,±:®'RT$ŠD‘(‰"Q$Š4E¢HÖd‰"Q$ŠDE¢HÖL‰"Q$ªÃªc`ª:¬ªÖ”oÕ'M‘(E¢"Q$ŠD‘¨H‰"Q$*E²:®©†üÁêÂD‘(‰"Q$Š4E¢H‰ŠD‘(E…5àš}øËÚéÀDE¢H‰"M‘¬%&*µbU6°«ª5å'(‰"Q$ŠDE¢H‰"Q‘(E¢¨°z]S LT$ŠD‘(Éê¸f˜¨HÉê¿a¢HT$ŠD‘(‰"Q$ŠDE¢HVu“UÛÀ k§®ÍÖ²–þÁ¶bU5ü¦ýR$ŠD‘¨H‰"Q‘*E¢H‰ŠD‘(*¬×ì+¬^ײK¬Ž«’eÖd‰"Q$ŠDE¢HÖL‰"Q$ªÃªc`ª:¬ªÖ”Ÿ[‰"Q$ŠDE¢H‰"Q‘(E¢HT$Šdµ?P‘D‘(‰"Q$ŠDE¢H‰"Q‘(E…5•kÂ%Ö€köá_*«×µäðeí`ø£&*µbÍ?ü#oØŠUÕÀšòcWI‰ŠD‘(E¢"Q$ŠD‘¨H‰"QTX½®©&*E¢H‰Šdu\³LT$Šdõß0Q$*E¢H‰ŠD‘(E¢"Q$Š «ºÉªm`…UÙÀZÖx×[±æþOdÓþ4kE¢HT$ŠD‘(‰"Q$Š4E¢HÖ€kªáXaõºfþ,±:®Ù¦)E²ªXaU6°–UÇÀTuXU ¬)?‹?E¢H‰ŠD‘(E¢"Q$ŠD‘¨HÉjÿ‘E¢HT$ŠD‘(‰"Q$ŠDE¢HÖ€k‰%V¯kÑeÖN]Û LVmÃ/¬ù‡ä¹bU5üæQ$ŠDE¢H‰"Q‘(E¢HT$ŠD‘(*¬^×ÒƒÕqU3°`õß0Q$*E¢H‰ŠD‘(Eš"Q$Š «ºÉªm`…µäÀDEªV¬ºÖaÕ4°.ëx®I¶Æªcø[g-9üµ¶UËð°êþAVëaÕ0°>Vëg->°CXKì0Ö’;еìÀŽ`-9°£X ìHÖN]G>‘G³þk©á²–þ0k‘á`-1°1¬6Ž5ûÀF²æØXÖÌÍšw`°æØ&¬¶k×vÛŒ5Ûð7dÍ5üYó sÖ,Ãß‚5ÇÀ¶aÍ0°íX;X—åA£’BJ")$…¤RBJ¢t—Rñrºv Úwõ?îŸK¥¿$(ÞÆ¥xÒG>Ë'”Êפ¯æ)_$Y¾&>}‡JùÆ¿(¾C8wâÿÿ }q­³t‹•U³Ü­XíÞÞÞM{e±§R­õº¨Åžšîz°*t%VßS¸¬+³ªs1ùŽëµÃ]k“çZ›|¿«yë­]°teX%®`UèJ¬í]Û…+³ªs5ooîJ°® ذ+`£]ÍÛ®7§qyÃÆº`Õè V…®ÄÚÈÕþî\™U«yg—°#\[¹šwƹ|¡ØÎµºac]°væ¶+XÇs½² WbÕäʰÌreØŒ.Yµ¹ k®€mëjYu¸€%Wóß6©.å7þN­%ÊžúË:¨ˆè¥—~O….X=®}°³gΜy¢ù]ÛùUÝ_,ŽŒò/Ÿ;Ÿ§s›õ›TãïŽ]Æ?ï/ÛßÇØ´sçþlvÃ^$)IEND®B`‚calamares-calamares-2d126ae/src/modules/keyboardq/data/button_bkg_center.png.license000066400000000000000000000001541430147706700307650ustar00rootroot00000000000000SPDX-FileCopyrightText: 2019 MarcoPellin SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/keyboardq/data/button_bkg_left.png000077500000000000000000000126551430147706700270320ustar00rootroot00000000000000‰PNG  IHDRKYëª sRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarepaint.net 4.0.173nŸcIDATx^íÝIgÇq@ @ –ˆClg±³8‰/ã}<gŸñxŸñØŽD¼ÁÁ n à•€78æ@("G8‘(CñÿU÷ÓýtÕ÷©¥·zf9|eâ»ë“§ªž~ê™îO$IÒH7×ÖÔ'­/Y‡­ëÖ·¬_Z¿µÞ¶Þµþi=¶¶¬¤Éð@F•ý…ê3Öëšõ#ë×Ö{ÖûÖ+}a7®^M»®VWƒ]z+ùVZáA 3;p7‚¾n­Z¿°þb}d%7,ôÕå¥dya!Y˜›Kfgf’™éédzúR2}i*™ºx1¹89™LN^°_»éŸÓ.¨ó¹.œWçr?ç:ëýïVçΞMÎÙïwÒ?[g-<ÀadêSÖAë;ÖŸ¬­tÄ\]^Nçç“+3—“KSÂhø;Èó: ¨ç ¼t gÏžÉuæŒ:ëôiש\§N©‰\| ƒdé%ëÖŸ­ÿj­ÙP^œŸKf.OÛhiáPçmT0XZL˜*Ë£á÷“¸¾a}×ú›µ¥Q´º´”Ì^™I¦luN/ÂRÃ+eÕÀðÀëÖFú¼µfýÁz’Eºh#I–",|ÕÚHj¿õ3Kw´ôt››½ÒƒäGXаT,`ˆP¥6’îr“Öï­-Ýæ—좭»˜ BXаa©˜",EXª_0„(« õ9ë›–æHéhr§\6ÂR„¥KõÆhý€!FQm¨/Zß³ÒÓnei±u‡»”‡r–",EXªI0 Õ†úŠõcë#]Ä5WÒiwÉ&­K–",EXª)0D¡ÚP_µ4ÿ lÎÔEòc,EX* å",a)ÂRƒ‚!L¶6Ô¬ŸXOt!Ÿ··%½#*c)ÂR„¥ÊEXŠ°Ô `ˆã׆ú¬õ}ëßQÊÅXбa)ÂRå",EXª_0rµ¡4=Ð]ïƒÖ5ªj7!’jC)Í£þn%K Ée»ë–b,ÅXаa© Âh„¥KÕC(Õ†ÚgýNPzë23s9ÅÚ­`EPštþÔÚÒ—&œj·‚… ”V2ÿ•NæfsP.ÂRŒ¥K–",5n°––Yô~¯5;·Óof†±a)ÆRŒ¥K–'Aé͵&=;{¥µFXZáü«•,.Ì{P{`4ª´ü¿µ•eU3€5l°)ÄR„¥K,‹uÈzGëåUWìxå a)ÆR„¥ÊEXаa©Q‚ùPJkç[éÚ”]«ZX{`„õ5ë–ÍÔݨò#,ÅXаA¹K–",5 0kÅúP<çæüQ5°éiÆR„¥K–6˜ƒú´õs«õDÆNA]Ü÷ÀzsXÚ{ðNºª`§` k,„¥·65 ³·6]¬~Àºo¶³1–b,EXаa©a€9¬ZÉê²;³–b,EX­K1–",EX*U¦èzÕ¾Ò—­_ kyq!™µ‹ûv›œœL^ïåô`ôäÉ“ÉñãÇ­ciÇŽe{­Ók¯e;švôh+ai#Ù{éê‚]¯t'TõÀB3ýñié¿þ‰'è‘#G:½úê«Á^yå•`/¿ürOºi} ëÕüü\zÍ6XøÂOX*å",$ý×÷‘Fõmëã«ÚŸB¹âÓˆÒj€N'Br’‹\„¥=œéŽ+n0A隤S.4¢\uQü>ÜIX¿–ùææ³X.ÂRŒ¥K–",•‡šššJŸ¶¸ /aé@_xá…äСCÉsÏ=—<û쳕zæ™g‚ K»‚íN¸h׬ٴØÁt깕ÅÒÁƒ“§Ÿ~:Ù¿§}ûöUê©§ž &¬wo¬]M–lÚ  ü°ÁêÏö Kµ t1ÏB9¬_|1‡”€¨Ö?4mèb¹K–"(a)ÂR„ÕÚó¥©AJé”;pàe#а·Þf±âÓ<Š ^zé¥tDUÅR„Ce±ÒM²‹‹ó€˜î~n.å§k”.¾‚rN(¢Vº/]§áÂa)ÂR„¥fÒ† ¦‹zJ×)Ýé|¨Q‚å°bÓ…®Uº ”áP„“-ƒ5%˜V 4K÷¡4ÑÔ¼ˆ€²E@~€˜öFe§ šQ»‹z•‡"$W+0w ËÓÌ\X£SÅXKY¬8ÀtÔ)èC¹SÐaÕS„Cbiú˜›±ûX:5]ð±ê¢ÀZL±bÓŠ§Ãr`îmM(¡‡ `µFW,`ºf¹eË¿^…"ŠpBV<`š˜8Ùƒ¥‰¨[U(‹p(‚¡:XË=Xq€ ëäÉî°.–"œPäW€Õ<˜Þêœ8q<‡¥·8nAŽ€(¡ÉÕÅZ^lß㛞žNß<ûXš6øXãó°–R¬æÀTXãË`µFW,`u°F¦J°â«‹¥'áP%Xq€énXËE8áP]¬µ«ÉJ«y°A°áP„C•`5 FXÙ©CY„CN¶,MZSˆAÁa)ÂRõ°ÊˆúN(Br!V,`eXuÀáP¥<¬eCŠÌ¡UÁ'`ÅV«.áPA¬Õ«_0EXаa)ý€U=,E8áPA¬•«y0-ÓÔÅR„Š€(k­ƒX¿XŠ`B…Xy°.Ú¨Á|´–Ö³ˆ"Šp²e°â+ª2º\„C`ÅV†5n°ÖÕU+0--—aL•b­æÀºh£#4-ÓTÁª¦‡*ÀZI±b«ƒå"Šp¨R¬XÀúÁR„CÀŠ ¬_,E8ᄬñ‚1Z ,„åö¶—E8ÁP]¬«>V`ZZKN(òë`­Vl`EX:«œŽ.¡ɕÊ LkZeXãó°V;Xãc´^°ªXãË`ÅVk`ª+°ºXŠpBÕƒ¥ÖÖ|¬8ÀúÁrE8T+60--÷‹¥‡"*‡Øìì,b=ÿüóˆCE8Ù<¬«ÑaU]ŠpB’+ƒÕ4˜ê‚•aÕS„C”¬xÀ´´\†Up¨B¬k=Xq€ ‹ö”Ö8ÀºXײX̓ÕÅR„CÄŠ ¬,E8¡ˆB¬˜ÀæææúÂRŠp(+>°~G–áP„“-ƒ5l°.Z]0ÂÒÇ4ÖÁºÞÁŠLÏ‹°Æ ÖźîcŶT k`ª+60=á©‚ULUŠX +ÿSa„å"Šp¨ÖµJ`y´Ñõƒ¥‡"*€UÖ‹6j0Õ/–"ŠpBV<`zvØ/–"œP„“­ƒuã†ØrK?PN8Á„" ¿¬"°<ÚèÁô„'„Uut¹‡"$W+&°2,áP„C”B¬°ºXŠpB•úك˜´ÖÅrE8T/ÖÍëi1 ‚¥‡"*‡˜‡ ‚¥‡"œlˆ•Gk,„¥Ú˜"$—‡u£]`ª «˜"Š `ÅV«.áPa,;¨[=Xq€éAkU¬q€õ`ݺÕ*°ÕÚXŠp( Uˆ ˜‡ÕÅR„CL¨B¬ÀúÅR„Šp(릩8ÀÔ X.¡'`Ŧg‡„¥Þl¬ƒu»X ­ kÜ`=X·oÇVk`ªVL`zV«˜"ªV,`u°\„CX×rXMƒ©~°áP„C°nEÖ/–"ŠpBu°î¤8ŠLZûÅR„Šp²õ`ݹ㰆 Ö‹V lm`,áPä—Ê ,„åááP„C’ ±bÓ³Ã2¬q‚yX]¨ÀTU¬qe°nGVk`бRaŦg‡u°á„"*‡µn(ëë+°k}a¹‡" ±ªõ¢ l,E8áPˆ ˜žf±ô…U±áP„“ÍÃêBŦаF¦É•Áº30X/Ú``eXuÀáP¥R¬[ÂJq„UÖ‹6j°*Xuч*ÅÚØpXq€éAkU,E8áP¥X1ÕÅR„CN¨B¬~ÀzцÖ–"œP„Cb5 ¦ô µ,E0¡‡ò°´X«ìûêý‡"œl¬V<`ÂÊ~W˜Ãj¬‹e(wï:¬ê`½hÃ+Ã7X+°•°F¦*cÅV«˜"ª2VÓ`ª–‹p(¡XÚ¨ ÖE˜žJ×ÅR„C•úÛÁЬ_,E8á„êÁÚÜtXq€…°ô}a”pBN¶V<`7ÆrE@~ˆ X–‹p(¡ÉÄŠ¬…ÕûÕÈY¬q‚b5 Vk`*Œe ››wsXM‚i'MU,E8Á„B¬MøwOXñ€ÕÅR„Šp¨ V<`·úÂrE8Tk4`y´20í¤éKE8T+°–žJE8ád+ÄjL›CBX£S„äêbÀ½{›9¬&Áʰê€)¡Ju°îÙÁß¿/¬xÀª`ÕE#ªV<`·ka)¡‡ª„ ˜vÒÔÁR„CN¨R¬r°<Ú0ÁT?XŠpB•Áº›Ãj¬_,áP„Cu± àþý{9¬&Á´9„°šë`Ý·ƒð@Xñ€e±TS`9¬q€uÑŠÁ桮 †X±€UÁR„CN¨ZXMƒ)m;ª‚¥'áPX›9¬¦Áê`¹‡"б àÁƒû9¬&ÁúÁR„C…X¯¿.¬Ñ‚uÑÊÁ²XM‚©VL`ýŽ,á„"œlˆØz«.áPäÄŠ¬+û{eEH.ë^k˜`ª.˜öh•aù¿_áP¥:XR¬9¬&Áªbùÿ®, Uˆõð¡°â«ƒ¥|”²‡*ÄŠ ¬.–òAÊ"ªk˜`аT1ØF_X.¥(¡ ±bKù(EÕŲƒÍb5 6(–òQŠ"œl-¬ëד×íà K5¦­’ƒb)¥,Brµ±®¥X½ŽXª.˜",EX* 6,,—RA©ÖøÀÍ6–òQŠªŒØÝ‘`)¥¨ÊX1€i_é(°”RV%¬¦ÁF‰åòQŠêÁzhJXаT`ŒF`Ú*9j,å£ÕƒõÆK–%ظ°”*‡Ø8±”C!V,`ãÆrù@~A¬ÀšÂR>’ËÃzÃjL›p›ÂR>”jc]OÙ–",EXjX`Ú*Ù$– b½ùæ#ÄR„¥>d´a€Å€¥‚X1Å‚åB¬XÀ¶ V `Û «i0íXÞVXаa©ai÷ß¶ÃR„¥K LXÛK–",5(ضÆR„¥K ¶í±a)ÂRýÝßXаa©º`jÇ`)ÂR„¥ê‚i÷ߎÁR„¥KÕÛqXаa©˜ÚñXаa©*`;K–",U ö`gc)ÂR„¥ŠÀv<–",EX*¦Ë»#±a)Âre±´UrW`)ÂRåÚµXаA¹v-–",EP.]Çv%–",a©]‹¥ÊÅX»K”+‹¥­’»K”k+a©=¬@„¥ö°–Úà DXÚÐvêÔ–ÅÒž3gÎt^ìV¦^¬ûÉùóç:@{XÃÒàÅ‹“{Xe KwÄË—§{€š‹˵¸¸Ðy±j+>êøñãé‹ÝÃ*I?ðäæZ{X%ipr2Ž‹|ôXjii1}±ª)0amÅŒõÖ[:‹€1`=NÂ"â‘¥i„›B4 &¬è£ ô³;ôBcè­·ÞH?ñHwŦ±Þ–~’•^h,i‚:=})9r¤kœ`ÂzÛ}b½ÈXÒèr›Û²XãÖo¬ä¾ÍgèEÆ–fô„¥ŸaÖ¯tÃJX¿ÖæÆ:¾¸ØÒ²ÍÔÔEÄ5˜°¾m}¼qçvò¦ÝuèÆ–ÏŸ?ßsýrX>Ú°á„uÓúàÎÍ›é-š^\Œi;ÒÙ³g:0Y¬ª¹ÏÆ¢ütuŸSzØzOÓ˜çZ”ÀÜzA¸•ñsß0àÓÀ—­_YéGÓ‹Š9­¦ÎÏÏ%ÇŽK~ÔXê‡Âº»~_Pìéò¡ï¾ti*ýFs4*¬kÖãívÝòÓö€Ò')QúT8÷Mé.‡õiëçV²¹¾=æ[ÃHgõèQïž ×'’¤¶b}xçÆô_оÝ#•Eqe7ûX_³þh%¶á]±j„¥Kù`>–ú®µµ~ëVúÐ_¶ÊB¹K9°Ë;d¥ú÷wîèR„¥K ,‹õIëÖÿÖoïìÑ¥²P.ÂR,ì%ë¯7mtmÇ}ÝKUÅÒèúŽõñ›k<²áGÉNаT!–ö ë÷Ö¶Yç4ÂRU°”ÞýKO~¶û¬¾j„¥Ü$5‡å}Îú©µÕ:·×òM¿– ±TlŸõ;+ÑJªþôì´²H.„Rm,5iý]`÷înྫ…¥ÚXº;~Óú@“ÕíòhÕÂRm°ÏZß·þ‚í‚ù—_e,Õû‚õë‰Öëw#âPm°¯Z¿°þ³ÛNI…0¡Ú`_±~l}$0]ô¥NøN QŠjƒ}Ñúžõ¾•N+vÃÛ")« ¦I«î’ï L×>ÓGŒ*µÁ4­Ð SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/keyboardq/data/button_bkg_right.png000077500000000000000000000135031430147706700272060ustar00rootroot00000000000000‰PNG  IHDRKYëª sRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarepaint.net 4.0.173nŸc³IDATx^íÝIoiÇñH2Yg2Ùͱ=v–‰'»gá-ðX7¸`^ Hp@pƒã\X„Fp„ $†æÿ­î']õÔï©zªíªzçðUâØéªç“Zž®®tÞ}útØs[Z±>°Þ·~f½g}ÅznÍZ_´>a †Ãa/ ž<|8œ¶ÇPöXkkçֳG†Ï?¾óäÉðKÏžÑGÖß èOÖO¬ïXϬCÖ§-9¨¶Ÿ™ºfTÇŽ :zôèº;f±ì“'N OŸ:5œ;sfxþܹáÒ•+Ãå7†÷ïÜÉPs€ÿ4¤ßY?²[{¬N¶¸Á†®7ß|S¶ÿ~Ùo¼±!½þúë¥øs–}ðàÁìììüüðÚÒR†Çø%Û… î†ôkëkÖŒõÉ6Ñ X}£…zÆ€à±^]\®Þ¿ï¶¸ÿÒo­oY§ÛB“X¤°Ha‘?À6sp‡ž]XÞ½u+;Ö'‹?X_·ö¶‘hƒƒ5),RX䪋€;hë:oǺÛËËí#Cú¥õÔúÜFÖAÛ´5),RX¤ÔE ±¾ÛVîÞuÓΤ?°F !¶1ÖËæ:räHv6eZ2Þ5a½e­ë¬™Ãz¹ÀX‡ÙÓ§‡&[sµ/[ŸÌÃz¹ÀØ5™ËÝ´ùgMCb·ü†õ…iÀÖËÆz_¹t)›Ÿ“ÚïZÛ›‚ RX¤±Ha‘Â"5ˆ®c=.Ø3žVÒ¿-žìhfX‡†[ lÁΖ<}2$¦ß³> 6ÆÚ:`Øx û—õMë31`9¬­µ…±KŽa·8KÖN+<¬­ÆA|–ü£Å<¬râ*°º#5ˆ.c½™VýÜ:P‰uø°Â"…E‹)(—DW¹y×ñLÿûVpÒjX‡íÙ»Â"…E‹)(—HWqùçÌìlvµÖþjq%VîŽc¬­ Æò¯ÚsI"žGf—w*°¶.[×Q{ò½rï»ã Š+¯¥³£‡Õ ),Rƒé*.$r=Ì~oqŵk낱¾\@´­ëÅ%êÂÖ58rDa‘Â"…5ʇr)(—Â"5˜¶ãì8?7ç¶®ßXÇ=¬#ÃW`“¸DÍ5ýñT‚kù/ÎŒc¬nÀÐX¤°H ¨Íغ8vgö¿²v ¬W`.ÆÌËl¶uñºä£Ö4`‡$i,ÒX¤°H ªÍ®-.f/äÔ­O&°6,|¦ÔX¤°H ªØy!w|U‚=÷V G*,RX¤±Hc‘Â"E ‹ÔàÚˆõæVÛ¹Ã'{ 4åÙ° 3ù^ñÏ'),ÒX¤°H ®®/-ÅÖõí ‹MÎoß¾}ÁöîÝ[Ÿ1ØÍ Æ8rgÅ[Û»wïúíÚµ+ØÎ;ƒ½öÚk/âkð › ,n¹â…Zƒâ5ÇÙÖ°òh<&ƒÛl`¬ëø¸Å¥çw[Ç¢;vdßç_k3±Ln¨3,®D|µ3,â÷ìš› Œ{&Æù÷þÀÈ nÚêÅfcOàU ñAþ§ƒíÛ·ÛÈGËcñõfØ%YGîq_…x¿5,W)»-ƒK ¬ÜLþƒÖ±HaÇG@R‹»¨Ç¯^ÿ¹,RXTÜÓcݸí|üÊχa‘ÂbwdÀ©‚qŸþxbúq§X¤ÀŠgÇ:°æ¯)„Øxv|×Ͱw,þŒù)‚õŠE>¿îß?zz‘XrX´wïž).ï´Ö;ù`èI ,)¬ü× pº ˆí%‰E¬ÜôW\ÛK‹+¬4À’À"kÏòy¬þÁ’ݲx®DJ`ImYy0&§ ”±úK‹é(‹i,RX¤°h“aÊ^³,C¹i,RX¤°hÓaU¿È«°Hc‘Â"…E›«°¤±ô±ú{ÃÊ]ÏÚ [V¿`¼ÙGÒXwSÆ"…E›kš;{i,RX´ ±ú£M†Õÿ¶É°úãMƒ’Å Œµ‘`ÍîÕÏÝ£5äW¶ë4Öa›*,RX¤°Hc‘¢Z¬¾Àª°úË¿˜+±üï"™,Þµ- °J¬üÊ·¿¼"ÖFƒ5ÿÏ QX”T[ùË*cu¦Ï”oŽn ©Ã¢üÀÚÈ_X±ú‹Ær帑ùï°Žó±úkŒEùAnTþc°ŽdX©€°Ô ²¡ò݈üÇ`ñ>¨i€•°úó³ˆÕXhjÄjFùAO›ÿXe¬*0RX¤°HA¹˜a`5EË|šüÇ €"V¿`'Ž¯Æ¢Ôëx†U¦Ñš‚‘¢VÝ[@åS8*…£ cL¬„Õ) |ÕXýƒ10Þ¸§„ÕŒŽJ!¹ê±ú b5ES8*E ‹Á±&`e´iÀHaÑXäÄR8ª&XÌmR‹Â"&” ‹• X4ù0U)U5Ö‰ì Ôl‚¶‘`°ÈG©Já¨ê±&`e´nÀŽØìé†X.&”ÂQÕcõ Öé o
ŽŸÆ:eP³É€±º«ÆJìÌ™ ¬6Àȇ¢z¬þÁæ kü狎JÁ„ŠÅâ_30>i ‹N(…£š«?°h,—ÂQ)U V*`±HᨎªëL2`¬˜Ïÿr)•Âñ‹ÅꬄÕ)$W‹ÁŽ°Ò››XMÀHá¨Ua±‚©€±š¢)Õú°ÖVFk677WE G¥pTñX§3¬TÀ¢°Há¨N¨8¬¹dÀ¢±Há„R8ª&X}ƒñ‰åÑX.…£R8*À|¬Ý»weƒau6AS`óó9,>âIᨎJáøUa±‚VFkVÂê,«_°ùùù2V×`uX©€±š€‘RÅcíÎé°Ú› UUbuV5¿.°2Úô` uX.…£R8ªfXi€-,Db‘ÂQ)Uƒœ`MVD[XC,R8*…ª ‹Llaa¡)œP Ç­« k°2ÚúÁ X|NƒÂ ¥pT (XÜ*YÆ:ó+°–KᨎJ!¹ª±¦+¢mX%V—`õXi€­ÂjŒb±ä+¬Œ¶Q`†u¶‹N(…£ŠÅbS‹Â"Já¨b±R;{öl–Kᨎ*+°ÆX¤pT GÆšËV0°Ÿ¢pT G¥püغª±Ò;çcµF ÉÂb¬þÁ$V[h Šª°ÎËcõ V‰ÕXV*`µX¤pT G5 V `QX¤pT 'T=Ö¼!K¬)œP GÕ«O°ó¶ìh,—ÂQ)U‹Ž°Ò+`ñÙ2 G¥pT Ç­+„uþ¼ÃêL`õV‡• Øy[~ « 0RPƒ•X« )U3¬C:Ÿ X%VW`M°ú»`Ë~ú¨Ë¥pT GƒÅ@/\+ °h,R8*…£j†ÕX-Ö‹N(¤ªÃJì‚-ÿé£GñX¤`B)¿¬.ÀÊhE°ñ¤pB)•ÊÇ®ƒÕ7X Ë¥pT G¥\a¬³t!°‹¶l‰Õ%X=VW`E4¬« 0ŠÅb/:¬¾Á"°Há„R8ª&Xë+¢…ÀÊhe°‹¶üZ,—ÂQ)U¬Àa‘ÂQ)U¬>Á¦Â"…£R8ª0Ö9º˜ Ë~҇)•ÂQ)¿¦XTVD ѪÁXn« 0RH®ƒ¼t ¬ÀXm¡)(ªÃJŒubuƒ5+£uV‹E G¥pTÓbm$X­,‹ŽJᄪÂÚ³¬ót)°K±X¤pB)Õ4X}±Üh,—ÂQ)UÖåË`¹ú+`ñ±t G¥pT ÇY|ÖF‚Ñš•°ú‹ÁJŒe—°Ú#EkO6˜–KᨎJ!¹ÂX%õÄê¬ kq¬4À*±Ú£¦Xi€E`‘ ¥pTqX^`¥…åR8*…£j²euVD˰l9ÑX¤pT GÕ«O°E[F#,R8*…£b¯°Ðââb «/°Ÿ;ªpT '”ÊW…µ´V`%¬>Àâ°úëJ«-4EuX®¾Á*±º‹ÅꬋŽJá¨â±.•°¦+£5cµX¤pT 'TZZZ*aõ¶d…åR@*…£ªÃºzUcQ×`±Hᨎª+°Ÿh«pT G¥pü˜Å×aMVF›lÉ–SÀê,«o0‰Õ)( c].aõ Æ2$V0R8ªX¬½{÷dºzõj k¦ÑÚ»jÄr)•ÂQ5ÁºvMcQ×`QX¤pT GÕ«O° Z,R8*…£j‚•ØU[N4)œP H‹5ëïÖ‹L(…ã׫O0–ñ‹–V8¡ŽJåã)Oko6 k×®•°º› U`¹ŽJᨒ« ëúuE]ƒñØ« 0š+07ˆÕX V`‹À"…JᨦÁꌭëš-£Ë¥pT G5 VŸ`°Hᨎª ‹]¿~½„Õÿìq,R8*…£ªÂºqCc‘åj ŒÇ~ÅG–+• ¥€òÕa¥Æã°š€‘ÂQ)$W Vÿ`ãc–ÕMá¨Åbõ ÆÖÅ㱺k‚Õ'Øu{êõìñã0)•ÂQÅc-I,RX¤°h:°"Z)• U…Å{j1˜·Þº!±Ha‘¢õ‚Ec¹Já¨Àò/ÑlÛ¶}¸ÿÙGXi€]·¿ß‹ŽJá¨üY·mÛ–2h°Òó¶,> _ᨎJáøq›dþ³ÂÀbf„ÃJ¬„ÕÿGÚÇš™9V€Jì†=V « 0RP³xA¬<oü|óæ[I±š€‘ÂQùXìn;wî,@ñ57b„°h:0 V‰åR8*…£Êc¹3a~ËbŽÅÊ‚•X)•ÂQ9,æSy¨ÑÁýP†á°R‹Æ"…£R8ªü.è°ø•7P]^ž@Õ‘Â"…EӀݸ~=‹N(”ÿÁê –Û——o–°úã±ÆXGa‘‚ ¥ˆ­j×®]%¬ãÇg2¨)(—å _q»iÿ|„õáàĉ%˜ªŽÊ‡òU.ð¸iìí·—“[¶åޱþœa¹ŽJá¨òXîéÅÏá êÁÂh ‹Öö¶­Ë;Ož€õA« 0bª?¨»ØÒ8ãä·ª0RX¤°hZ°[¶nc¬÷KX Æ¥ÿ8Ele¼“?P!,RP.…E ‹¦»{û6PôS‰åR@*…Ä1Š3ŸÚ¢ˆï30‡•*؃{÷Ö{:)€Õ¸¢Àû÷±õ¸òPü +˜‡JŒ?{¸ò¨ÿX_•çα$s"OŒÙÝØ’òHy¬íÛwØñëÍlEnÝz[b‘Âr),RX¤°(ŒŸ{üð!X·Þ°ø1èP`„RH¿rµãP£4)(—Â"…E>”«ŒÇOþdͶŽ[ÙÉÂ'P“)(W)ŸÂ"…Ea°«Ã;·o ߯~lmkËmIìžÓx±”Û¶pÊ¥°Fi,RX¤°HaQlõþ} èÛÖ` ŽKûöéãÒ¨=Ù–¢âûÜÙݸ—ÍS âÎÛÔ(E‹4),RX¤°ÈãgŸ¬eÇ«­gVþFMÎÅ–²Ü̶Øbö+—N¨ˆ”Oc‘Æ"E ‹|(—¢<ë2žŒþÆ:”a=xpXìÞðþ}Õݬ{÷Tw†wïÞyTLaò¡\‹4),RX¤°È­LvÁZŸc)R(t' œr ‹4),ÒX¤±Ha‘Â"…Eüñ;HþÃzÔp8t[–Â"…E/7Ø][ßñYðWÖn똋¯ÇÑ­¯%°^e[•=qÎØ;(µµÁ¸Vöhu¨ÿYß²>QƒµuÁîÙúŽ·ªß[§óPÖÊŠÂ"…E Ë¥°Ha‘Æ"…E‹4),ÊC½½¼lgÀìC¹Âð5«°U½Àzvc¸jã5ú…µÏ‡c=Ȱ¶*Pwì þüIvuá¯VöÔ¦kë‚ñ8ãÝ©Â÷­Ï*(këñûµÕ·ûýÜ:‚"kë€-ß¼™=ÿÏÔÿh½T%Öꪵ5Àx!bŠÆXFSX¤°Hc‘Â"E+¶nÏG[Ô¿­Y;b¡(‡õò‚ñõêƒn×û§õ]k{(ò°&h/ ¯Ð SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/keyboardq/data/de.xml000066400000000000000000000050771430147706700242630ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/empty.xml000066400000000000000000000047471430147706700250340ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/en.xml000066400000000000000000000047471430147706700243000ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/enter.svg000077500000000000000000000016011430147706700247770ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/enter.svg.license000066400000000000000000000001541430147706700264170ustar00rootroot00000000000000SPDX-FileCopyrightText: 2019 https://www.onlinewebfonts.com/fonts SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/keyboardq/data/es.xml000066400000000000000000000047471430147706700243050ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/fr.xml000066400000000000000000000050761430147706700243010ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/generic.xml000066400000000000000000000047471430147706700253120ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/generic_qz.xml000066400000000000000000000050751430147706700260170ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/pt.xml000066400000000000000000000047511430147706700243140ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/ru.xml000066400000000000000000000050071430147706700243120ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/scan.xml000066400000000000000000000047501430147706700246140ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/keyboardq/data/shift.svg000077500000000000000000000017671430147706700250140ustar00rootroot00000000000000 Svg Vector Icons : http://www.onlinewebfonts.com/icon calamares-calamares-2d126ae/src/modules/keyboardq/data/shift.svg.license000066400000000000000000000001541430147706700264170ustar00rootroot00000000000000SPDX-FileCopyrightText: 2019 https://www.onlinewebfonts.com/fonts SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/keyboardq/keyboardq.conf000066400000000000000000000014231430147706700250570ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/keyboardq/keyboardq.qml000066400000000000000000000263511430147706700247320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 - 2022 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ import io.calamares.core 1.0 import io.calamares.ui 1.0 import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Window 2.14 import QtQuick.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami import "data" Item { width: 800 //parent.width height: 600 readonly property color backgroundColor: "#E6E9EA" //Kirigami.Theme.backgroundColor readonly property color listBackgroundColor: "white" readonly property color textFieldColor: "#121212" readonly property color textFieldBackgroundColor: "#F8F8F8" readonly property color textColor: Kirigami.Theme.textColor readonly property color highlightedTextColor: Kirigami.Theme.highlightedTextColor readonly property color highlightColor: Kirigami.Theme.highlightColor property var langXml: ["de", "en", "es", "fr", "ru",] property var arXml: ["Arabic"] property var ruXml: ["Azerba", "Belaru", "Kazakh", "Kyrgyz", "Mongol", "Russia", "Tajik", "Ukrain"] property var frXml: ["Bambar", "Belgia","French", "Wolof"] property var enXml: ["Bikol", "Chines", "Englis", "Irish", "Lithua", "Maori"] property var esXml: ["Spanis"] property var deXml: ["German"] property var ptXml: ["Portug"] property var scanXml: ["Danish", "Finnis", "Norweg", "Swedis"] property var afganiXml: ["Afghan"] property var genericXml: ["Armeni", "Bulgar", "Dutch", "Estoni", "Icelan", "Indone", "Italia", "Latvia", "Maltes", "Moldav", "Romani", "Swahil", "Turkis"] property var genericQzXml: ["Albani", "Bosnia", "Croati", "Czech", "Hungar", "Luxemb", "Monten", "Polish", "Serbia", "Sloven", "Slovak"] property var genericAzXml: [] property var keyIndex: [] Rectangle { id: backgroundItem anchors.fill: parent color: backgroundColor Label { id: header anchors.horizontalCenter: parent.horizontalCenter text: qsTr("To activate keyboard preview, select a layout.") color: textColor font.bold: true } Label { id: intro anchors.horizontalCenter: parent.horizontalCenter anchors.top: header.bottom color: textColor horizontalAlignment: Text.AlignHCenter width: parent.width / 1.2 wrapMode: Text.WordWrap text: ( config.prettyStatus) } RowLayout { id: models anchors.top: intro.bottom anchors.topMargin: 10 anchors.horizontalCenter: parent.horizontalCenter width: parent.width /1.5 spacing: 10 Label { Layout.alignment: Qt.AlignCenter text: qsTr("Keyboard Model:") color: textColor font.bold: true } ComboBox { Layout.fillWidth: true textRole: "label" model: config.keyboardModelsModel currentIndex: model.currentIndex onCurrentIndexChanged: config.keyboardModels = currentIndex } } StackView { id: stack anchors.top: models.bottom anchors.topMargin: 10 anchors.left: parent.left anchors.right: parent.right anchors.bottom: parent.bottom clip: true initialItem: Item { ListView { id: layouts ScrollBar.vertical: ScrollBar { active: true } width: parent.width / 2 height: 200 anchors.horizontalCenter: parent.horizontalCenter focus: true clip: true boundsBehavior: Flickable.StopAtBounds spacing: 2 Rectangle { z: parent.z - 1 anchors.fill: parent color: listBackgroundColor opacity: 0.7 } model: config.keyboardLayoutsModel currentIndex: model.currentIndex Component.onCompleted: positionViewAtIndex(model.currentIndex, ListView.Center) delegate: ItemDelegate { hoverEnabled: true width: parent.width height: 18 highlighted: ListView.isCurrentItem RowLayout { anchors.fill: parent Label { id: label1 text: model.label Layout.fillHeight: true Layout.fillWidth: true padding: 10 width: parent.width height: 32 color: highlighted ? highlightedTextColor : textColor background: Rectangle { color: highlighted || hovered ? highlightColor : listBackgroundColor opacity: highlighted || hovered ? 0.5 : 0.3 } } } onClicked: { layouts.model.currentIndex = index keyIndex = label1.text.substring(0,6) stack.push(variantsList) layouts.positionViewAtIndex(index, ListView.Center) } } } Button { Layout.fillWidth: true anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: -parent.height / 3.5 anchors.left: parent.left anchors.leftMargin: parent.width / 15 icon.name: "go-next" text: qsTr("Variants") onClicked: stack.push(variantsList) } } Component { id: variantsList Item { ListView { id: variants ScrollBar.vertical: ScrollBar { active: true } width: parent.width / 2 height: 200 anchors.horizontalCenter: parent.horizontalCenter anchors.topMargin: 10 focus: true clip: true boundsBehavior: Flickable.StopAtBounds spacing: 2 Rectangle { z: parent.z - 1 anchors.fill: parent color: listBackgroundColor opacity: 0.7 } model: config.keyboardVariantsModel currentIndex: model.currentIndex Component.onCompleted: positionViewAtIndex(model.currentIndex, ListView.Center) delegate: ItemDelegate { hoverEnabled: true width: parent.width height: 18 highlighted: ListView.isCurrentItem RowLayout { anchors.fill: parent Label { text: model.label Layout.fillHeight: true Layout.fillWidth: true padding: 10 width: parent.width height: 30 color: highlighted ? highlightedTextColor : textColor background: Rectangle { color: highlighted || hovered ? highlightColor : listBackgroundColor opacity: highlighted || hovered ? 0.5 : 0.3 } } } onClicked: { variants.model.currentIndex = index variants.positionViewAtIndex(index, ListView.Center) } } } Button { Layout.fillWidth: true anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: -parent.height / 3.5 anchors.left: parent.left anchors.leftMargin: parent.width / 15 icon.name: "go-previous" text: qsTr("Layouts") onClicked: stack.pop() } } } } TextField { id: textInput placeholderText: qsTr("Type here to test your keyboard") height: 36 width: parent.width / 1.5 horizontalAlignment: TextInput.AlignHCenter anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: keyboard.top anchors.bottomMargin: parent.height / 25 color: textFieldColor background:Rectangle { z: parent.z - 1 anchors.fill: parent color: textFieldBackgroundColor radius: 2 } } Keyboard { id: keyboard width: parent.width height: parent.height / 3 anchors.bottom: parent.bottom source: langXml.includes(keyIndex) ? (keyIndex + ".xml") : afganiXml.includes(keyIndex) ? "afgani.xml" : scanXml.includes(keyIndex) ? "scan.xml" : genericXml.includes(keyIndex) ? "generic.xml" : genericQzXml.includes(keyIndex) ? "generic_qz.xml" : arXml.includes(keyIndex) ? "ar.xml" : deXml.includes(keyIndex) ? "de.xml" : enXml.includes(keyIndex) ? "en.xml" : esXml.includes(keyIndex) ? "es.xml" : frXml.includes(keyIndex) ? "fr.xml" : ptXml.includes(keyIndex) ? "pt.xml" : ruXml.includes(keyIndex) ? "ru.xml" :"empty.xml" rows: 4 columns: 10 keyColor: "transparent" keyPressedColorOpacity: 0.2 keyImageLeft: "button_bkg_left.png" keyImageRight: "button_bkg_right.png" keyImageCenter: "button_bkg_center.png" target: textInput onEnterClicked: console.log("Enter!") } } } calamares-calamares-2d126ae/src/modules/keyboardq/keyboardq.qrc000066400000000000000000000004621430147706700247210ustar00rootroot00000000000000 ../keyboard/kbd-model-map ../keyboard/images/restore.png keyboardq.qml ../keyboard/non-ascii-layouts calamares-calamares-2d126ae/src/modules/license/000077500000000000000000000000001430147706700216705ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/license/CMakeLists.txt000066400000000000000000000007201430147706700244270ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/license/LicensePage.cpp000066400000000000000000000137001430147706700245540ustar00rootroot00000000000000/* === 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 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-calamares-2d126ae/src/modules/license/LicensePage.h000066400000000000000000000047471430147706700242340ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/license/LicensePage.ui000066400000000000000000000113671430147706700244160ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/license/LicenseViewStep.cpp000066400000000000000000000042401430147706700254450ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/license/LicenseViewStep.h000066400000000000000000000023201430147706700251070ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/license/LicenseWidget.cpp000066400000000000000000000144371430147706700251330ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/license/LicenseWidget.h000066400000000000000000000023041430147706700245660ustar00rootroot00000000000000/* === 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 { Q_OBJECT 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-calamares-2d126ae/src/modules/license/README.md000066400000000000000000000021341430147706700231470ustar00rootroot00000000000000### 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-calamares-2d126ae/src/modules/license/license.conf000066400000000000000000000050511430147706700241620ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/license/license.schema.yaml000066400000000000000000000012711430147706700254360ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/locale/000077500000000000000000000000001430147706700215055ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/locale/CMakeLists.txt000066400000000000000000000025201430147706700242440ustar00rootroot00000000000000# === 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 LocaleNames.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 LocaleNames.cpp SetTimezoneJob.cpp timezonewidget/TimeZoneImage.cpp DEFINITIONS SOURCE_DIR="${CMAKE_CURRENT_LIST_DIR}/images" DEBUG_TIMEZONES=1 LIBRARIES Qt5::Gui ) calamares-calamares-2d126ae/src/modules/locale/Config.cpp000066400000000000000000000450261430147706700234250ustar00rootroot00000000000000/* === 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/Translation.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 ) { Logger::Once o; 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 ) ) { cDebug() << o << "Loading locales from" << supported.fileName(); 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 ) ) { cDebug() << o << "Loading locales from" << localeGenPath; 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. } else { cDebug() << o << "Read" << localeGenLines.length() << "lines"; } // 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 ); cDebug() << o << "After filtering" << localeGenLines.length() << "lines"; return localeGenLines; } static bool updateGSLocation( Calamares::GlobalStorage* gs, const CalamaresUtils::Locale::TimeZoneData* location ) { const QString regionKey = QStringLiteral( "locationRegion" ); const QString zoneKey = QStringLiteral( "locationZone" ); if ( !location ) { if ( gs->contains( regionKey ) || gs->contains( zoneKey ) ) { gs->remove( regionKey ); gs->remove( zoneKey ); return true; } return false; } // Update the GS region and zone (and possibly the live timezone) bool locationChanged = ( location->region() != gs->value( regionKey ) ) || ( location->zone() != gs->value( zoneKey ) ); gs->insert( regionKey, location->region() ); gs->insert( zoneKey, location->zone() ); return locationChanged; } static void updateGSLocale( Calamares::GlobalStorage* gs, const LocaleConfiguration& locale ) { CalamaresUtils::Locale::insertGS( *gs, locale.toMap(), CalamaresUtils::Locale::InsertMode::Overwrite ); } Config::Config( QObject* parent ) : QObject( parent ) , m_regionModel( std::make_unique< CalamaresUtils::Locale::RegionsModel >() ) , m_zonesModel( std::make_unique< CalamaresUtils::Locale::ZonesModel >() ) , m_regionalZonesModel( std::make_unique< CalamaresUtils::Locale::RegionalZonesModel >( m_zonesModel.get() ) ) { // Slightly unusual: connect to our *own* signals. Wherever the language // or the location is changed, these signals are emitted, so hook up to // them to update global storage accordingly. This simplifies code: // we don't need to call an update-GS method, or introduce an intermediate // update-thing-and-GS method. And everywhere where we **do** change // language or location, we already emit the signal. connect( this, &Config::currentLanguageCodeChanged, [ & ]() { auto* gs = Calamares::JobQueue::instance()->globalStorage(); gs->insert( "locale", m_selectedLocaleConfiguration.toBcp47() ); } ); connect( this, &Config::currentLCCodeChanged, [ & ]() { updateGSLocale( Calamares::JobQueue::instance()->globalStorage(), localeConfiguration() ); } ); connect( this, &Config::currentLocationChanged, [ & ]() { const bool locationChanged = updateGSLocation( Calamares::JobQueue::instance()->globalStorage(), currentLocation() ); if ( locationChanged && m_adjustLiveTimezone ) { QProcess::execute( "timedatectl", // depends on systemd { "set-timezone", currentTimezoneCode() } ); } emit currentTimezoneCodeChanged( currentTimezoneCode() ); emit currentTimezoneNameChanged( currentTimezoneName() ); } ); auto prettyStatusNotify = [ & ]() { emit prettyStatusChanged( prettyStatus() ); }; connect( this, &Config::currentLanguageStatusChanged, prettyStatusNotify ); connect( this, &Config::currentLCStatusChanged, prettyStatusNotify ); connect( this, &Config::currentLocationStatusChanged, prettyStatusNotify ); } Config::~Config() {} void Config::setCurrentLocation() { if ( !m_currentLocation && m_startingTimezone.isValid() ) { setCurrentLocation( m_startingTimezone.first, m_startingTimezone.second ); } if ( !m_selectedLocaleConfiguration.explicit_lang ) { auto newLocale = automaticLocaleConfiguration(); setLanguage( newLocale.language() ); } } 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 ) { const bool updateLocation = ( location != m_currentLocation ); if ( updateLocation ) { m_currentLocation = location; } // lang should be always be updated auto newLocale = automaticLocaleConfiguration(); if ( !m_selectedLocaleConfiguration.explicit_lang ) { setLanguage( newLocale.language() ); } if ( updateLocation ) { if ( !m_selectedLocaleConfiguration.explicit_lc ) { m_selectedLocaleConfiguration.lc_numeric = newLocale.lc_numeric; m_selectedLocaleConfiguration.lc_time = newLocale.lc_time; m_selectedLocaleConfiguration.lc_monetary = newLocale.lc_monetary; m_selectedLocaleConfiguration.lc_paper = newLocale.lc_paper; m_selectedLocaleConfiguration.lc_name = newLocale.lc_name; m_selectedLocaleConfiguration.lc_address = newLocale.lc_address; m_selectedLocaleConfiguration.lc_telephone = newLocale.lc_telephone; m_selectedLocaleConfiguration.lc_measurement = newLocale.lc_measurement; m_selectedLocaleConfiguration.lc_identification = newLocale.lc_identification; 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(); } auto* gs = Calamares::JobQueue::instance()->globalStorage(); QString lang = CalamaresUtils::Locale::readGS( *gs, QStringLiteral( "LANG" ) ); if ( lang.isEmpty() ) { lang = QLocale().name(); } return LocaleConfiguration::fromLanguageAndLocation( lang, 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::Translation; Translation lang( { s }, Translation::LabelFormat::AlwaysWithCountry ); return lang.label(); } QString Config::currentLanguageStatus() const { return tr( "The system language will be set to %1." ) .arg( localeLabel( m_selectedLocaleConfiguration.language() ) ); } QString Config::currentLCStatus() const { return tr( "The numbers and dates locale will be set to %1." ) .arg( localeLabel( m_selectedLocaleConfiguration.lc_numeric ) ); } QString Config::prettyStatus() const { 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-calamares-2d126ae/src/modules/locale/Config.h000066400000000000000000000176531430147706700230770ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/LCLocaleDialog.cpp000066400000000000000000000056141430147706700247550ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/LCLocaleDialog.h000066400000000000000000000012741430147706700244200ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/LocaleConfiguration.cpp000066400000000000000000000317571430147706700261550ustar00rootroot00000000000000/* === 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 "LocaleNames.h" #include "utils/Logger.h" #include #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; } static LocaleNameParts updateCountry( LocaleNameParts p, const QString& country ) { p.country = country; return p; } static QPair< int, LocaleNameParts > identifyBestLanguageMatch( const LocaleNameParts& referenceLocale, QVector< LocaleNameParts >& others ) { std::sort( others.begin(), others.end(), [ & ]( const LocaleNameParts& lhs, const LocaleNameParts& rhs ) { return referenceLocale.similarity( lhs ) < referenceLocale.similarity( rhs ); } ); // The best match is at the end LocaleNameParts best_match = others.last(); if ( !( referenceLocale.similarity( best_match ) > LocaleNameParts::no_match ) ) { cDebug() << Logger::SubEntry << "Got no good match for" << referenceLocale.name(); return { LocaleNameParts::no_match, LocaleNameParts {} }; } else { cDebug() << Logger::SubEntry << "Got best match for" << referenceLocale.name() << "as" << best_match.name(); return { referenceLocale.similarity( best_match ), best_match }; } } /** @brief Returns the QString from @p availableLocales that best-matches. */ static LocaleNameParts identifyBestLanguageMatch( const QString& languageLocale, const QStringList& availableLocales, const QString& countryCode ) { const QString default_lang = QStringLiteral( "en_US.UTF-8" ); const LocaleNameParts self = LocaleNameParts::fromName( languageLocale ); if ( self.isValid() && !availableLocales.isEmpty() ) { QVector< LocaleNameParts > others; others.resize( availableLocales.length() ); // Makes default structs std::transform( availableLocales.begin(), availableLocales.end(), others.begin(), LocaleNameParts::fromName ); // Keep track of the best match in various attempts int best_score = LocaleNameParts::no_match; LocaleNameParts best_match; // Check with the unmodified language setting { auto [ score, match ] = identifyBestLanguageMatch( self, others ); if ( score >= LocaleNameParts::complete_match ) { return match; } else if ( score > best_score ) { best_match = match; } } // .. but it might match **better** with the chosen location country Code { auto [ score, match ] = identifyBestLanguageMatch( updateCountry( self, countryCode ), others ); if ( score >= LocaleNameParts::complete_match ) { return match; } else if ( score > best_score ) { best_match = match; } } // .. or better yet with the QLocale-derived country { const QString localeCountry = LocaleNameParts::fromName( QLocale( languageLocale ).name() ).country; auto [ score, match ] = identifyBestLanguageMatch( updateCountry( self, localeCountry ), others ); if ( score >= LocaleNameParts::complete_match ) { return match; } else if ( score > best_score ) { best_match = match; } } if ( best_match.isValid() ) { cDebug() << Logger::SubEntry << "Matched best with" << best_match.name(); return best_match; } } // 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. return LocaleNameParts::fromName( default_lang ); } LocaleConfiguration LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale, const QStringList& availableLocales, const QString& countryCode ) { cDebug() << "Mapping" << languageLocale << "in" << countryCode << "to locale."; const auto bestLocale = identifyBestLanguageMatch( languageLocale, availableLocales, countryCode ); // 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; const QString combined = QString( "%1_%2" ).arg( bestLocale.language ).arg( countryCode ); if ( availableLocales.contains( bestLocale.language ) ) { cDebug() << Logger::SubEntry << "Exact formats match for language tag" << bestLocale.language; lc_formats = bestLocale.language; } else if ( availableLocales.contains( combined ) ) { cDebug() << Logger::SubEntry << "Exact formats match for combined" << combined; lc_formats = combined; } 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" }, // India has many languages even though Hindi is known as // national language but English is used in all computer // and mobile devices. { "IN", "en" }, { "IT", "it" }, { "MA", "ar" }, { "MK", "mk" }, { "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. return LocaleConfiguration( bestLocale.name(), lc_formats.isEmpty() ? bestLocale.name() : 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-calamares-2d126ae/src/modules/locale/LocaleConfiguration.h000066400000000000000000000061261430147706700256120ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/LocaleNames.cpp000066400000000000000000000046061430147706700244020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2022 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "LocaleNames.h" #include "utils/Logger.h" #include LocaleNameParts LocaleNameParts::fromName( const QString& name ) { auto requireAndRemoveLeadingChar = []( QChar c, QString s ) { if ( s.startsWith( c ) ) { return s.remove( 0, 1 ); } else { return QString(); } }; auto parts = QRegularExpression( "^([a-zA-Z]+)(_[a-zA-Z]+)?(\\.[-a-zA-Z0-9]+)?(@[a-zA-Z]+)?" ).match( name ); const QString calamaresLanguage = parts.captured( 1 ); const QString calamaresCountry = requireAndRemoveLeadingChar( '_', parts.captured( 2 ) ); const QString calamaresEncoding = requireAndRemoveLeadingChar( '.', parts.captured( 3 ) ); const QString calamaresRegion = requireAndRemoveLeadingChar( '@', parts.captured( 4 ) ); if ( calamaresLanguage.isEmpty() ) { return LocaleNameParts {}; } else { return LocaleNameParts { calamaresLanguage, calamaresCountry, calamaresRegion, calamaresEncoding }; } } QString LocaleNameParts::name() const { // We don't want QStringView to a temporary; force conversion auto insertLeadingChar = []( QChar c, QString s ) -> QString { if ( s.isEmpty() ) { return QString(); } else { return c + s; } }; if ( !isValid() ) { return QString(); } else { return language + insertLeadingChar( '_', country ) + insertLeadingChar( '.', encoding ) + insertLeadingChar( '@', region ); } } int LocaleNameParts::similarity( const LocaleNameParts& other ) const { if ( !isValid() || !other.isValid() ) { return 0; } if ( language != other.language ) { return 0; } const auto matched_region = ( region == other.region ? 30 : 0 ); const auto matched_country = ( country == other.country ? ( country.isEmpty() ? 10 : 20 ) : 0 ); const auto no_other_country_given = ( ( country != other.country && other.country.isEmpty() ) ? 10 : 0 ); return 50 + matched_region + matched_country + no_other_country_given; } calamares-calamares-2d126ae/src/modules/locale/LocaleNames.h000066400000000000000000000025461430147706700240500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2022 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef LOCALENAMES_H #define LOCALENAMES_H #include /** @brief parts of a locale-name (e.g. "ar_LY.UTF-8", split apart) * * These are created from lines in `/usr/share/i18n/SUPPORTED`, * which lists all the locales supported by the system (there * are also other sources of the same). * */ struct LocaleNameParts { QString language; // e.g. "ar" QString country; // e.g. "LY" (may be empty) QString region; // e.g. "@valencia" (may be empty) QString encoding; // e.g. "UTF-8" (may be empty) bool isValid() const { return !language.isEmpty(); } QString name() const; static LocaleNameParts fromName( const QString& name ); static inline constexpr const int no_match = 0; static inline constexpr const int complete_match = 100; /** @brief Compute similarity-score with another locale-name. * * Similarity is driven by language and region, then country. * Returns a number between 0 (no similarity, e.g. the * language is different) and 100 (complete match). */ int similarity( const LocaleNameParts& other ) const; }; #endif calamares-calamares-2d126ae/src/modules/locale/LocalePage.cpp000066400000000000000000000162051430147706700242110ustar00rootroot00000000000000/* === 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; } cScopedAssignment b( &m_blockTzWidgetSet, true, false ); // 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-calamares-2d126ae/src/modules/locale/LocalePage.h000066400000000000000000000026371430147706700236620ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/LocaleViewStep.cpp000066400000000000000000000051511430147706700251010ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/LocaleViewStep.h000066400000000000000000000026341430147706700245510ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/SetTimezoneJob.cpp000066400000000000000000000055411430147706700251170ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/SetTimezoneJob.h000066400000000000000000000011661430147706700245630ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/Tests.cpp000066400000000000000000000464441430147706700233270ustar00rootroot00000000000000/* === 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 "LocaleNames.h" #include "timezonewidget/TimeZoneImage.h" #include "CalamaresVersion.h" #include "Settings.h" #include "locale/TimeZone.h" #include "locale/TranslationsModel.h" #include "utils/Logger.h" #include #include class LocaleTests : public QObject { Q_OBJECT public: LocaleTests(); ~LocaleTests() override; // Implementation of data for MappingNeon and MappingFreeBSD void MappingData(); 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(); void testLanguageDetection_data(); void testLanguageDetection(); void testLanguageDetectionValencia(); // Check that the test-data is available and ok void testKDENeonLanguageData(); void testLocaleNameParts(); // Check realistic language mapping for issue 2008 void testLanguageMappingNeon_data(); void testLanguageMappingNeon(); void testLanguageMappingFreeBSD_data(); void testLanguageMappingFreeBSD(); void testLanguageSimilarity(); private: QStringList m_KDEneonLocales; QStringList m_FreeBSDLocales; QStringList m_availableLanguages; }; QTEST_MAIN( LocaleTests ) LocaleTests::LocaleTests() {} LocaleTests::~LocaleTests() {} void LocaleTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); const auto* settings = Calamares::Settings::instance(); if ( !settings ) { (void)new Calamares::Settings( true ); } m_availableLanguages = QString( CALAMARES_TRANSLATION_LANGUAGES ).split( ';' ); } 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() ); } void LocaleTests::testLanguageDetection_data() { QTest::addColumn< QString >( "locale" ); QTest::addColumn< QString >( "country" ); QTest::addColumn< QString >( "expected" ); QTest::newRow( "english (US)" ) << QStringLiteral( "en" ) << QStringLiteral( "US" ) << QStringLiteral( "en_US.UTF-8" ); QTest::newRow( "english (CA)" ) << QStringLiteral( "en" ) << QStringLiteral( "CA" ) << QStringLiteral( "en_US.UTF-8" ); QTest::newRow( "english (GB)" ) << QStringLiteral( "en" ) << QStringLiteral( "GB" ) << QStringLiteral( "en_GB.UTF-8" ); QTest::newRow( "english (NL)" ) << QStringLiteral( "en" ) << QStringLiteral( "NL" ) << QStringLiteral( "en_US.UTF-8" ); QTest::newRow( "portuguese (PT)" ) << QStringLiteral( "pt" ) << QStringLiteral( "PT" ) << QStringLiteral( "pt_PT.UTF-8" ); QTest::newRow( "portuguese (NL)" ) << QStringLiteral( "pt" ) << QStringLiteral( "NL" ) << QStringLiteral( "pt_BR.UTF-8" ); // first QTest::newRow( "portuguese (BR)" ) << QStringLiteral( "pt" ) << QStringLiteral( "BR" ) << QStringLiteral( "pt_BR.UTF-8" ); QTest::newRow( "catalan ()" ) << QStringLiteral( "ca" ) << QStringLiteral( "" ) << QStringLiteral( "ca_ES.UTF-8" ); // no country given? Matches QLocale-default QTest::newRow( "catalan (ES)" ) << QStringLiteral( "ca" ) << QStringLiteral( "ES" ) << QStringLiteral( "ca_ES.UTF-8" ); QTest::newRow( "catalan (NL)" ) << QStringLiteral( "ca" ) << QStringLiteral( "NL" ) << QStringLiteral( "ca_ES.UTF-8" ); QTest::newRow( "catalan (@valencia)" ) << QStringLiteral( "ca@valencia" ) << QStringLiteral( "ES" ) << QStringLiteral( "ca_ES@valencia" ); // Prefers regional variant QTest::newRow( "catalan (@valencia_NL)" ) << QStringLiteral( "ca@valencia" ) << QStringLiteral( "NL" ) << QStringLiteral( "ca_ES@valencia" ); } /* * This list of available locales was created by grepping `/etc/locale.gen` * on an EndeavourOS ISO image for a handful of representative locales. */ static const QStringList availableLocales { "nl_AW", "nl_BE.UTF-8", "nl_NL.UTF-8", "en", "en_AU.UTF-8", "en_US.UTF-8", "en_GB.UTF-8", "ca_AD.UTF-8", "ca_ES.UTF-8", "ca_ES@valencia", "sr_ME", "sr_RS", "sr_RS@latin", "pt_BR.UTF-8", "pt_PT.UTF-8", "es_AR.UTF-8", "es_ES.UTF-8", "es_MX.UTF-8", }; void LocaleTests::testLanguageDetection() { QFETCH( QString, locale ); QFETCH( QString, country ); QFETCH( QString, expected ); auto r = LocaleConfiguration::fromLanguageAndLocation( locale, availableLocales, country ); QCOMPARE( r.language(), expected ); } void LocaleTests::testLanguageDetectionValencia() { Logger::setupLogLevel( Logger::LOGDEBUG ); { auto r = LocaleConfiguration::fromLanguageAndLocation( QStringLiteral( "nl" ), availableLocales, QStringLiteral( "NL" ) ); QCOMPARE( r.language(), "nl_NL.UTF-8" ); } { auto r = LocaleConfiguration::fromLanguageAndLocation( QStringLiteral( "ca@valencia" ), availableLocales, QStringLiteral( "NL" ) ); QCOMPARE( r.language(), "ca_ES@valencia" ); } { auto r = LocaleConfiguration::fromLanguageAndLocation( QStringLiteral( "sr" ), availableLocales, QStringLiteral( "NL" ) ); QCOMPARE( r.language(), "sr_RS" ); // Because that one is first in the list } { auto r = LocaleConfiguration::fromLanguageAndLocation( QStringLiteral( "sr@latin" ), availableLocales, QStringLiteral( "NL" ) ); QCOMPARE( r.language(), "sr_RS@latin" ); } } static QStringList splitTestFileIntoLines( const QString& filename ) { // BUILD_AS_TEST is the source-directory path const QFileInfo fi( QString( "%1/tests/%2" ).arg( BUILD_AS_TEST, filename ) ); const QString path = fi.absoluteFilePath(); QFile testData( path ); if ( testData.open( QIODevice::ReadOnly ) ) { return QString::fromUtf8( testData.readAll() ).split( '\n', Qt::SkipEmptyParts ); } return QStringList {}; } void LocaleTests::testKDENeonLanguageData() { if ( !m_KDEneonLocales.isEmpty() ) { return; } const QStringList neonLocales = splitTestFileIntoLines( QStringLiteral( "locale-data-neon" ) ); cDebug() << "Loaded KDE neon locales test data" << neonLocales.front() << "to" << neonLocales.back(); QCOMPARE( neonLocales.length(), 318 ); // wc -l tells me 318 lines m_KDEneonLocales = neonLocales; const QStringList bsdLocales = splitTestFileIntoLines( QStringLiteral( "locale-data-freebsd" ) ); cDebug() << "Loaded FreeBSD locales test data" << bsdLocales.front() << "to" << bsdLocales.back(); QCOMPARE( bsdLocales.length(), 79 ); m_FreeBSDLocales = bsdLocales; } void LocaleTests::MappingData() { QTest::addColumn< QString >( "selectedLanguage" ); QTest::addColumn< QString >( "KDEneonLanguage" ); QTest::addColumn< QString >( "FreeBSDLanguage" ); // Tired of writing QString or QStringLiteral all the time. auto l = []( const char* p ) { return QString::fromUtf8( p ); }; auto u = []() { return QString(); }; // The KDEneon columns include the .UTF-8 from the source data // The FreeBSD columns may have u() to indicate "same as KDEneon", // that's an empty string. // // Each row shows how a language -- which can be selected from the // welcome page, and is inserted into GS as the language key that // Calamares knows -- should be mapped to a supported system locale. // // All the mappings are for ".. in NL", which can trigger minor variation // if there are languages with a _NL variant (e.g. nl_NL and nl_BE). // clang-format off QTest::newRow( "en " ) << l( "en" ) << l( "en_US.UTF-8" ) << u(); QTest::newRow( "en_GB" ) << l( "en_GB" ) << l( "en_GB.UTF-8" ) << u(); QTest::newRow( "ca " ) << l( "ca" ) << l( "ca_ES.UTF-8" ) << u(); // FreeBSD has no Valencian variant QTest::newRow( "ca@vl" ) << l( "ca@valencia" ) << l( "ca_ES@valencia" ) << l( "ca_ES.UTF-8" ); // FreeBSD has the UTF-8 marker before the @region part QTest::newRow( "sr " ) << l( "sr" ) << l( "sr_RS" ) << l( "sr_RS.UTF-8" ); QTest::newRow( "sr@lt" ) << l( "sr@latin" ) << l( "sr_RS@latin" ) << l( "sr_RS.UTF-8@latin" ); QTest::newRow( "pt_PT" ) << l( "pt_PT" ) << l( "pt_PT.UTF-8" ) << u(); QTest::newRow( "pt_BR" ) << l( "pt_BR" ) << l( "pt_BR.UTF-8" ) << u(); QTest::newRow( "nl " ) << l( "nl" ) << l( "nl_NL.UTF-8" ) << u(); QTest::newRow( "zh_TW" ) << l( "zh_TW" ) << l( "zh_TW.UTF-8" ) << u(); // clang-format on } void LocaleTests::testLanguageMappingNeon_data() { MappingData(); } void LocaleTests::testLanguageMappingFreeBSD_data() { MappingData(); } void LocaleTests::testLanguageMappingNeon() { testKDENeonLanguageData(); QVERIFY( !m_KDEneonLocales.isEmpty() ); QFETCH( QString, selectedLanguage ); QFETCH( QString, KDEneonLanguage ); QFETCH( QString, FreeBSDLanguage ); QVERIFY( m_availableLanguages.contains( selectedLanguage ) ); const auto neon = LocaleConfiguration::fromLanguageAndLocation( ( selectedLanguage ), m_KDEneonLocales, QStringLiteral( "NL" ) ); QCOMPARE( neon.language(), KDEneonLanguage ); } void LocaleTests::testLanguageMappingFreeBSD() { testKDENeonLanguageData(); QVERIFY( !m_FreeBSDLocales.isEmpty() ); QFETCH( QString, selectedLanguage ); QFETCH( QString, KDEneonLanguage ); QFETCH( QString, FreeBSDLanguage ); QVERIFY( m_availableLanguages.contains( selectedLanguage ) ); const auto bsd = LocaleConfiguration::fromLanguageAndLocation( ( selectedLanguage ), m_FreeBSDLocales, QStringLiteral( "NL" ) ); const auto expected = FreeBSDLanguage.isEmpty() ? KDEneonLanguage : FreeBSDLanguage; QCOMPARE( bsd.language(), expected ); } void LocaleTests::testLocaleNameParts() { testKDENeonLanguageData(); QVERIFY( !m_FreeBSDLocales.isEmpty() ); QVERIFY( !m_KDEneonLocales.isEmpty() ); // Example constant locales { auto c_parts = LocaleNameParts::fromName( QStringLiteral( "nl_NL.UTF-8" ) ); QCOMPARE( c_parts.language, QStringLiteral( "nl" ) ); QCOMPARE( c_parts.country, QStringLiteral( "NL" ) ); QCOMPARE( c_parts.encoding, QStringLiteral( "UTF-8" ) ); QVERIFY( c_parts.region.isEmpty() ); } { auto c_parts = LocaleNameParts::fromName( QStringLiteral( "C.UTF-8" ) ); QCOMPARE( c_parts.language, QStringLiteral( "C" ) ); QVERIFY( c_parts.country.isEmpty() ); QCOMPARE( c_parts.encoding, QStringLiteral( "UTF-8" ) ); QVERIFY( c_parts.region.isEmpty() ); } // Check all the loaded test locales for ( const auto& s : m_FreeBSDLocales ) { auto parts = LocaleNameParts::fromName( s ); QVERIFY( parts.isValid() ); QCOMPARE( parts.name(), s ); } for ( const auto& s : m_KDEneonLocales ) { auto parts = LocaleNameParts::fromName( s ); QVERIFY( parts.isValid() ); QCOMPARE( parts.name(), s ); } } void LocaleTests::testLanguageSimilarity() { // Empty { QCOMPARE( LocaleNameParts().similarity( LocaleNameParts() ), 0 ); } // Some simple Dutch situations { auto nl_parts = LocaleNameParts::fromName( QStringLiteral( "nl_NL.UTF-8" ) ); auto be_parts = LocaleNameParts::fromName( QStringLiteral( "nl_BE.UTF-8" ) ); auto nl_short_parts = LocaleNameParts::fromName( QStringLiteral( "nl" ) ); QCOMPARE( nl_parts.similarity( nl_parts ), 100 ); QCOMPARE( nl_parts.similarity( LocaleNameParts() ), 0 ); QCOMPARE( nl_parts.similarity( be_parts ), 80 ); // Language + (empty) region match QCOMPARE( nl_parts.similarity( nl_short_parts ), 90 ); } // Everything matches itself { if ( m_KDEneonLocales.isEmpty() ) { testKDENeonLanguageData(); } QVERIFY( !m_FreeBSDLocales.isEmpty() ); QVERIFY( !m_KDEneonLocales.isEmpty() ); for ( const auto& l : m_KDEneonLocales ) { auto locale_name = LocaleNameParts::fromName( l ); auto self_similarity = locale_name.similarity( locale_name ); if ( self_similarity != 100 ) { cDebug() << "Locale" << l << "is unusual."; if ( l == QStringLiteral( "eo" ) ) { QEXPECT_FAIL( "", "Esperanto has no country to match", Continue ); } } QCOMPARE( self_similarity, 100 ); } } } #include "utils/moc-warnings.h" #include "Tests.moc" calamares-calamares-2d126ae/src/modules/locale/images/000077500000000000000000000000001430147706700227525ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/locale/images/bg.png000066400000000000000000005260221430147706700240570ustar00rootroot00000000000000‰PNG  IHDR T_,ŸgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs × ×B(›x€IDATxÚìýçwÚÙ–6Šöy¿qι羧»ßîÞ±ªœme $DÎ9ƒ$DÎ9£œ%2ÊY²]{×®;×Z€,»\e»Êµ·ÆXƒ1~aÍùÌô<ÿÆÐÄ8†ô/])ÞÄì¨Ô7®q'f>ásÞ¿Œ–._AWEðW¤>ûWp3 m|Dè†ïú"‡`H³´‰1y€®Žr _ä+àÌPá)Ã_è÷“³4,t151î—9Kðùp~à(˜ÚÄ—ø øL¸ £²]õ¥®,š" _ñ¥ö^Ã"ìˆ/÷ùl}rDèd±Ïgé’°ÆU‘/óùÈ"Éü4Eð ݨ¿šEþ’ ®ò˜€¤Ÿ0à éöÖ}H‚½Ðý¿ðÜÆ,yl=ù€ÿ¸óç½ð’þe@Rüw’P&‰¦ú² iø$=€¤ô’@Òo’~Ò¸³»y3¼Ž*õƒ{nƒ¡;+ѵ’ï[Ïì|r÷Q<€¤~d$ÉýIzI é$=€¤ß1Hú|ðH‚£`î ý1 énrè6X¹wÝ€=7còEêåÓLmœ©Mt­8 –/ô_ÕzÜ!÷â§;hé$ý $‘‹cxI¿uØö’@ÒHzIŸÒð1Hâ§6Cãª(Eü¡Lҧ܃¤Î'¿!¼’ü‰üj ÷ˆÝð"C……Õ†£tUö!,x‚Wîº=Â;Yš8Scjc,-AQwS 'Ý6I_Â=€¤¯&“ô;Ip£’ é$=€¤ô¯”IÿGŸ¼‹$Ú‚ÝN«Ü</ªèzE‹†#7PÄ^&ùŠV~å½ ’>X]‡@ S‡²>$t“ÒÄIŠˆ¡Ž£)Â|GÛ ÷*Uêy†„ž!‘gP躇Åx‰<Ã"òˆÖ< ÑÛ†%^ª,H‘FeÁ1y˜¦ÄàIc´¾"A~\ˆ!\…Ä—zI éó¤àï$É@ÒHzI é}9z¸Êè Ï8î`ù¹»ñ jQ¼ƒH.§FÐbt-üOpü1œ5AoÆÿD ƒ£OÒ”¡±žÃÇ¢"OiáN¢•ËAÏSwÀÍÇ€'’F1H"&©ÕHÔFmx”h?¶a'„ô‘Àô+C ’REFå!@6€oè(K Šm˜ocËír£_¬õ¨'ý2ƒ—#·M˜ƒ¾P–ŲGtÓA½9dsÅÍθÂè§IC;U䓸Æ$žQ‰—0k,œ‚ÒØ†ä ÀÁÄ ‰4€ö|ÒHzI éWè’|I é$ý@ÒOvá°.Ñ'¹†ÌßAWÇØº@ZtàŸô6\ð÷Ùï ’…ÑC`LT1* ‰¼"ïÈG‘øáy¿Ð3(òR$d¬åA†*B•zùvø&ÎÍP…¿¨«¥o¡¥{3L(ÿÁ™A IæÇ³±^X^Z GgOËô‚eûp‘.‚À¥.1ȳÙ'¿–üxbÓ?—7zIÿ*=I ’Œ é$=€¤ô’>±ôwšo0tÐÅ9út?ÏF MF0Hû= Ýh ÜÃBCäjÃ<]ˆ¥ ²T†Ò?ÈwöòcRŸ|2ªµ&¥QšÌ£šŽOº2:k’©ðÁ™‚%òôql/è¦a*†2H“û ¯/ºK¯Ûüs&WZc‰k¦£SŽÄÜâV¥RËçªÙl9_¨$Òk¥'Yhlïìï4·+µdfuk³x~x¸ßlneKË+ùÅålfn3[˜¶‡D*ËÛØÏ6Q†Ô:ijPEÎa¾u“¢24ÑnÓÄ;ýÔìw©ýái2ôˆ{zQÅžqE='@\JCµ?uT<™ÐÙfXšp/Ï)ÐCñÅô܆7<;¿°žË77²¥By»\­–·«¥êÁÎîÎv­T¨ìÔê¹­‚Ùux•R¥R¬TËåÃæîÅññA³™IÏ&ãéÜæf<žr8¼ÉXÒïÄ"Ép(¥V—W×W6*…R£Z«–*¹ÍÜ" ¥¥Õ…ùeX¥|ñ°ÑØ\]Qì|¥*´Ž¬ÃçSªå¨"ÌÐ㺅“Ú3ýžtÚO¦ô€¤ X¤±Œ*<õy3ƒW ©"è+ÈëŸõt=€¤ô’@Òï$u{Ç®ÞäV±‰‰S2$Âжº…XðD¡H"ï õS¥>š"ð„¢ê]hÚ™ØÜ*fæÖfçÖšµÆnc`ÁþÎîánsfvÅdÌ/®\½>=¾:9Þ®l E€G—ÇGGG'ûûG»{çG‡g‡×'ÇoÎNàÍõj}qaÕj÷N™ìÉÄ €’ÜV®R(.-®–‹¯72È1÷r¬}\GÏ9 ôµ:u4 ¼Z?éôD™êKƒŸÕí(ô¿ªØM“HºpƈÔ?"ñ =ý|÷¸ÌÃS{¹*ŸÚœ4Xâ"­G5é·{©Ì €!|åb¾TÈ•Ä{$>ç ¦Ýþ¤/”9=8€ÃÙoì\ŸŸã<;<„³[Ål~¿Ñ(æò…­Üñþ>œëÓ“³ƒ’g‚Gü'p*áÉÅÉñåÉÑÕÉÉÕ)<9†?ÜZÛ(låÕêâüÊúZvqq=Y „gE:ߨ"ˆÆâP¯Ò=IµVô’@ÒW ’ºlSª»yJ”hIâ;Ç&²3£¢Hý/ÙŽ!¡[9QLÆ%Žažùɨá1Å0ÈÔçs¥ËããZe{·Ñp°¿Ó(pr°~tp~xxq|/–‹ådj±V­&€¯\ïíîîÂóü À#xr²÷öðÿîïì4kõƒfà€‰+Ž/ŽáñòøÀæ ™ƒ%br$tV8Ÿ~Ò©C ¸C÷¶ûûž®³ŸïìçÙúZñ\`²{8ÖÇ£ÆAsL +ýÎàBbfÃY¶ûçE†pÛú×lzfõòôøíåyµ¼=¿°îô%`mnäà0¯äÁób¾ ÐpuyËá‰UKUx„Yptp pºà¿à 9|8äÑÉA'í §7ççð¥ß_œ¿>?»>=½:=¹<9'?\]þøý›ß\ýøúâ‡ËÓ³ýf21«4ºGÄî}@gò®«­Š©¹½ÚœL$óÔéU¿7Ëø’~óL|ŰÀI•ú!>i/?ù'…,‰ü7EìCø_/åöÛnÞyób×’øð”¥k”¼>D„’¬¿¯LR›”dæ$=€¤ô’>$±ïo6ꤛ„‹^ åÛ¡‰0ÄK¶ý%ËÞñsÕ5Ïl·²õr ÐÀÆF>_¦ð§£‰ùõõìÂÂZn«îü:8râø[pCÔ|xØÆ èxý £Î‹÷,€Mf!HÑFN<‘'ð¿G»»oÎNÿq}y¼Ó£}3 Ì£5,ò½`Y^2&9¦q±¯vKt¥Ñ+RYƒ‘ÌìÜŠr"@˜]Þ˜Éc(<ƒ÷3úT4¹øã÷Wo/NâÔ·ë3óîмPë¥ð§xJû¤-¼¾–Ý©5ffWœ¾øÒÒz¥T®+{&‚DG€{PÒèx"=÷×>>97 Π¥“ý½Óý½‹££Óýf£R©W+…l~a~9•šM§ææç–ÖWÖs›Ù|6_Ê6×ÖÁ¸Æè)­<…m`\ñtT? °£ôžÌ7&óÑp+U›–)Úš¼CÝôÝÌLˆS =TxCÁðIú -¾ ­²igÝé¼³£q¦ð§ ÉZŸfè<¦k+Û˜„Þúsa.&“Wþ¼üð›ï g’àfæ›_]Yß\ßÊndɹ)kX¬ó°•†2Ô®Ó%:ÍL é‹Z¤çª¸¥x“@jmgް"ñU„‡¥AùtÊ_u†—…Iº:~ÃÏ®KñŒ)±)£°Îq ­ÖÃn¨ôû‰L¢ÓÄGåQEð/ÆÚ ½"€G:Æ>"5Õ~C†‹l#z$O:¦’‹ÎpŠœ „]àŸò&f†6D±†ÓçŸ'=€¤ô’þY@ÜCpf(8EáN£.éJ¡«#ýB_/ÏóŠçƤD>µ9±±žOήc‹…\¥R¬r¥ji»±]ÜÓªsíî¾¹8ßÛ®6·· z¸7?D@é¾<>~{qŽÛ·w>Càgô„|ûv¹ârùyb “¯cI_ñ‡ÆåOùê|7¬|1>ÑÇšîg£5ÄÔ.Ì-\Ÿ ¦Ÿ“c€q©äŒÎh AQ£Zëü`ø¯ï/ÏgÒs Õ€òƒÉ}v²¼²±º²u~txzxðn2ìòõZú¨èÝ#½>=­•Ës3óJUP;üø œ«# ÷;áPÜfóêžH«ÔL§’³¹-@ð9ð†ß\M[“?‰A’"„àg¨£¨ø¢ øb+¾è <*LqŠØýtÜô’aêaN‰´n\Ÿ_X¯–ª»ãý½«À:goÎOv÷±Lq+÷úüô¢íÎLt°B§É|ð÷çåB9“YÜXËîl×?7€#LV.TVVÖSéÅhlÆáðNO»B¡D&=‹&­V×[ó|L÷œ>ù—Aåz¥è•>øKŸ4K]â>qò“‚¼¹8Û©n/Ì.l®má&ñ6C8o·^;=<¸óûIÓôéþý?4Z‘f£OI_‚N#5ŒÞnz•ºÙv¹¬3L[lÞ­õÍó÷—×g§dbîOÆ9œÿzÊdj¢ñÌÙþnµXœ›]:?Ø«•+ÉÔüÚÊ9-¤HþãõÕõé1œ‹+ÂVØÇd>BëÐfœú}€¤›ßÙBévºåæ `ˆÀƒE‚Mqg§Ü¬O™ŸŸD†ÂOZ¤éÖþ#a »›n÷«aÛ&0Ë|¢ûððÖYX4‘°ø-þ¥hz=‘Y Å5–¸ÈRM'êȘ2„Z q1tp‹½ϨHêpF0š2‚‚Çð˜<<®Œp-cò™Fs^¨! ÐÏsh¦žàÌÂÂøæ\®b´'¿£{& :•YÇ ¢\¨nn6Ösó káè¬ÕöSW0‘˜Ég‹[›…b¡´¾–Ý.oß)6¨–«ÜLn®göv/Ú]Ûƒ*Z-.®• ¥Æv >§^© xsz‹¥9ÒÉ!–î›É½=£(zFåNWxvv)Ëp¥¦¦¢R(tè®g ‰¥ÓƒÖY÷¯%9¤.ô ;¨>'u¾ñþŠ$N­NýûõåÕéÉ >.Ô½¾¿}vÖ¨n³Ú¿>§:½‘j©üú ½.Á›ó³Ó”1‚'¯Ïp©±5?xçóxw/M›,^¥Þ1È6¾dš†…7bœú½d’ÞGñu§I…‰×•ø†øöQ¼T‰ïfáWFe>Š tó ÿ?oɃ‰o€o‡mˆŒÞû]òm„Dè¬c%cØ]ÃuÏ(MU„¥¦¤Ü”l ö®²ÿ»Ä”špÍ3UA†Ü©3G<¡¹IGœ¯q‹ôA¡>ÈRâ\‹< žL8‚Kx÷Ș<4¦@D¬"ŸÎ‘Y\-&gsLÄ”¿“Oúx_O:ïéÜèÈCp]Xú”Á9?¿\XY/›| ˆÍN‹<4$òÒä>¹)6éÊ,®šÝ\®*ÐGûùîQYp3ѳ´‰÷U?e@®Ü'¨7ÜðIzI é«Ï$Á•‚‰J JFh¼Ñô€'Dpƒ,K„* 0Uþr©Z."æÃFµÞ¬í|HtØlN9(º—tC/]OšÜT.[Ø®l— åB®¸°°¦p™ìÚF­TäšáBCûû¯ÏNß^ž¡¾™£Ãf½®Ò;¨ÍúÚVff)‘œ››_©Wk§û? öÑØ?ÿúü0“Zo6,úŸW‚ÿz%úï1…£‹'gšÛµ½Z-Ožìí¾=¯ß<ØAÌL'ï|Ë{AÏþû¦Ï¾ÆENx KáÇ«ÓÓtj–Ê«tæzµúúìøòø1­À®Äa²¥ýf³Yo “ƒ*§»õre&=Ë“N<Q£&4ø$ú-×ò[‚¤iÚí@ "WG0G÷8ø~&Å|?1†*6N¢äøC­' ÄpAÆýðŠÐÉB`åÖbt­{þWƒ¹>2“„1æ2Õ$îŒ)Â`x†¸Àgk£,-à€ ]ÖÛgõÖ”b*Î5Ä%Ê󡃬XG2ò†æ’™µÍÍ"Ä*ÑäRzv-3·ê Θ\išÜ?(tó´~»&_6»ÓkŠ®ê확µÒV¶zÐܽ:9lÔMˆŽ9Hïþ,Äé’;„BbÊdæs‹+ù)ÏNVý`´'S³ëáÔªÅ;+ŸŒŽ]`¨±õ/IA^»ÜÖI§2ÔQ–P© &âú É‹r€#•ÑQE[ê‘oŸv&öê;¤‚Ü¢ÃM`Ç lÛÜ,è-q*öp„0ìJâ/‡J¤×sÑêúÐg¶&û@Ò?+HŠ<€¤ßHêÞØ7f™³4RÕø VÆÒcÈìÒ5‰C`Kz,†Œ« »3xúlumk»T½Ûst&¦T¨¬­fÓ3«T¾©Ÿ©çÉ­O†åÿñ„û”ª`I¦%jç8W;ÆÕò–^šâÿø#•ÊÕéM^í¤G¨43E\ÙÔ¤%°¸¸Q¯l<ªWkG-ŽÄý{éï9C­ÇhîêÕé67ò…|I7øK¿ô¯Cšç4CϘrÒìÏof/QÃ5¡Mãr°ßéÿÁFë 0·±µWo\c@Ù9€ CÁÈúÊúÁN@ÒÊòj293;»°S­¶²j½åéˆôÃ4"rwÄ Íu#¤wGÛ~“rÛí–³‹“pÁ£"2D 22°STExúM`©ÓžYÙdôkú%ËÚÏwÇpΘ\³±gPà—û†EHapDâ£HcpÔ¤êD`âíZ& g m…Ï»-5‹ôñ IŸ`iârSÌê‹&Wm¾YùT”*vÙ|3³ €––—³¾È‚Ζ0Ø“49"¸SFƔɻ(›NM:Òbcô%ÇÑ˱½bšû8–^Ö´Äà%V‚ñeÙD„¯ øc‹ÑÔr$±œœYvgF„Ž!8dû9ËöŠmïã»)Øþ0ZÍÝÉÏ—IjW[ ‰É_Pnkƒ$r¹c8ÿTšÁøR>_½r°‡+Ñhᱡ1ˆjí}⊞"ñD¦#œ%7O*}Z+7jKW…©$} ó’2I ég€¤NôsH­O¡¹ØËÒÄÀ04 ¾1­´Ì ŒIT¼£¡§" >CeŠè-ᙹÕB¾¼¾–½j'îäxÀÜüp}qy|lqDÌŽÈÎvÃêNüO˜&4Íί®¬åÌ6ÿÄ´ÇHyƒ)®ÂölX¥ö›»—''?\_þøÃÛ¿¿~{~†‰”Ž/ºz¨ßm s†Æ¬KÁO*ËË+›¾Pš-3÷1 (ÚWŒ)ðåÏiz¥ÖÜÜ.¿>=9?<:ÚÝ=ÞÛÝÚØ\ZXÜo4þuRGï⤫ÓÒ»}ÚÕx~âõõüÜ¢Þ`ކcjÙí ùýQ“Å«Ÿò2ÅæWŒI°_p ã…àBú-·»oõ–Æ0†Að¿4XÊ WIl 'F‘¬²wXìU[’è¢Ñ– Ç—w›Ç{{əم¬Ù“¡¬Á³Ù‚f::3·Q(TVrØ2 §I÷œÖšajÐøn i¥ÓÚ?ý…eÖè\P[g†8îGùd„Ýÿ˜": ö¿à8±MØSklm-·¿³kóÎ0^ÅD°l/׉{ #ãê°;¼´´š×X“=ð¢ÜÏP‡G$~ƒ#S)ÕjÕÅå­f­±ºš“ƒ£à§'ãÓÏèÓ/XÖŽ*%EÕ0äi õ´xîpûÛ𤋆´'uÖ=¹œ÷û§–#ÄD$·¨ÔH“‡ÀÐq”n§/UÈ•ööI§c­R[]ÙJ¥¡´Ç—\XX39b#@Vp¢€€©¸E©s‡œ}Çœþ¬ôטF˜:òÙ?9íH9à €¤ÎÑásû’~â&Ãûå}{ù$}E™¤..“d‡ë¯ónwŠÈCæSÀÛ9‚‹õj½ÙhZK£ŠjâV††…ÎÙùõB®´°¸1;¿6¿°vzpHFœî6¾à¬5øÚƒ]ˆÉšµze[¢uŽò'r[…¼¹>Ûß¹>>øñooþ~}oÛ$ÓÚ Ó¾Drá•}ÔQÔéž¹·ã‡tíl×ÑªÕ •vÉÄn‡£³t±ù1Uû’i8À+‹Ü}lóË1M?C?Â6åÓ¯¨•β0;_-–Ž÷÷~²ÏéŸ'½›B»>=Ù\Ûü_êSj¦ç’ÉÌêÒòüÌÜWûŸ/Ľ+©¯ÉCt%†G­ Í­Òo›I" O ,À ¤¯Q"@¬‹ÀÆÔרÄ3åʘ=³]x\æ¡,Éô2‹Ç„HKß4÷›Í…¥M¸¥wQ#ÝÛóÓ·˜’ô ñ{ÁI;®o×'3cD!¸K¤…xP¦&ÁÖ„Yê["É'f’ºk…mƲ(]“zh'Uâä;ø.¦Ò'›Šã«FWfËìp4 ƒ€0vŒoÇPøSa *mgëa[_±mvÿ\4¹&ÔGÇp{“­·hÖñ4>ÑkcÝäîôî|H’úÁ—p38{zäïÐtHŸ¿i$Uœ9E£ŠG 'Væ7c©¥™¹u0e6wŒ+3;}±å¥B¶T)VJyx¬î5®@š¥pÍÎo¦ç·¤Sñ1Dцˆ‘TÛÅÙŽhO²ƒ‰?fòKÎÐ:÷£7ŽŠ[Jƒ€ñϸDmEj¾\¦êŸ$…@Òo’X1.ôÖÔk ©ñ ¦Q£@L؈ÈE†’ƱÎ߉¦×¬þ<ìFãl|§ÚÉnv–”·KÅ Ý¿:EÓã$ #§ãkQ§‚À‘øBé1Á”ÝËe*D¢ˆ4í‘˜Ú @¢hlN 0e·òõ*„³ÛX‘£;it¸…1÷Zjmvv9YôRW¤/m¬ç’™%®Âñ˜¢xD¹FDH† ÌРÀñœf|Á0=ŸxNÓÿŸß°à»vkµëÓÓYxô—¬Z,{<¡ýFÃë§}¾`R®w¾bLbîÑcÙAÉ;ê¶÷š¤_$uîvªGiŠ È[ÊY½s©¹Mod1’\¶ºSb](_Fc\Z¹XyƒáÎêZž%wè­‘dzeqq}c=Œ-x‚—?=3·zŽÚ{É­~pD@<¦˜‚'këy“3EWøh(Ër’Ø]%$TÈV”¹¿gëãAùÃ6"!i;†f¶³ÔÊh:54"õˆ=£høÎODfp>‰Lº‘:#žÉ„h°DâÁmt%¸p/ HÄ3¤léÏ´t PÐ&ºò(¤öKx’H’ø$ñŒ)™yV45Ó9c÷£Ÿ1ÝÖ’hˆ;>¤šŽºsË+ÙÍ͂˗–hœg°1V`Ê®1ÿ~£Y)Uövv®OŽßžÖ*5®ÆšôéÃÈ…sKäTÜ/ÈÃþà|"8IRÉý|²¿O~pñâï {Âç ë`8@±€˜)b7 %H2CêK‰è=€¤ôY®1lNØf` ZòìmmîíÚé¿Û=ŽG‚©(. 1Õ!ˆ G¥8Ïý<ÜúXy-LSF)òPß3$ö¢¨¼!~”çL3 opfk³°¾ºÕ¬7N66²ss«¹­Â^£‰’:G7É B– .²•åb¾OÎÛ½ ŽØh˜r#©2ÀI»»•ÎŽ{u±¼°°¶º²ŸÖØntUÙöÛµB®XÊásÖV³ù\)=³´¸´K,˜ìÑÿy%|>¦ûŽ¢þË ê%cjHè€sÛŽ‹Š=úÏöœfèåXzXÓ/ÆÿýB ÐYwªÛÿ²…¶ŸL/Áão®s[¹ÿfô›!õ·Ãšgô©a‘{TÚª¯1ßi?úÇð낤Dkà@è,äË?\!OÜ3çð¥Y2ÛüüÆ»ÜÏQ8"ñù¿¿†Ûum-›žYTô×Aùÿ~.  ¦zW&³r¼»¿[Û)äJpÛ_aŸz÷ÿAsîU§?ó‚>õ‚i…ÝDWGÞI]§è¦êý^‹ô™¤[W¸´×ãBÒ–&¼‹HzOLjÏëÅ[\J]\8!DéÃY¢q5.M¢äS”èU·äù´]dKm|üe’ÌG’IÂ}…@’!¡±¥•ææsJݹµ~A£4îû! MŸÐÀ¬qý\ûˆÐÚËœèg&-Äafý8Æ&ëhw¯ÃòO´´é¥>¶iHè{†Eº* JpuQª,à’®Œ0µró-üŒ‰ÐÄ "äü€ÚÀø<+#XuØßá¨ü\-á­OÓ¥ˆ#•ûñ—Î|:òô’>S³c’à$S¥ÙD'±ß&Ø· jmI&]bDÒÚ2óËù•õR¡°½¹Už™Ïª¦“=lkÓá&l0LüÄmhÀÅ:ˆ 0†½=}+Sæ°z“rƒG¨²ëL>ºÀHåêÌöàÜÜÊüÂj­²}|›1ˆ¬·—gß_žƒ_ùñoom®àÿóÊ”5–è{Ä0y†z®âª~õÔº;©wë;‰äœÉêhÅ—›TF·ÙtÖžªÿÔ'ÞÇžîãX ;D­ÄHaê8"¬DæèaN>¥ª{Æ4}ϸfÂì­”J„ðúaÝ‹®OO¿¿8_ZXz2Àïg™àf«"c”* â1ò[ ¤¿{U„Ò$Q€ø¯Ø¶ù¥­ùÅÙ… ¤| q» °»t‰’@{áØœ~:¨´§¼9?=ÞßÓš‚ÃÜ©gTõ šv€e¤ò¦bË0gR¡÷Ì/lä²å¹ù5償«tr•®®uPà†o‡ý‚àˆ×QÜ’º·°›˜à—Ûº)…:u7T®"äšöÒÞp#á«–¸JéÛä“wþª½Xí?'oëtRßi?zŽùXD•øy4ŒÉ!x cSöI𨠒"¤9~3  ʼnÜO»àVì瘿ÖŒ ¦WW³¸®ºÛ·‘À6aJC³‡åRU1áÁ0õqm,•/šZYYË ˆnDì¦+#WÓÒ{µ ïÅI¤«;Uóó|ÚM¸©wÑ&š9Ÿ»´'4gàêÃTAðhp¥¾`é$=€¤_Î|‹f­#.ì6ö E’†%Á1EGg´ÝðˆÉv‡%Åt"3·^.V›õ:’h½>ÏåJjSØáMú"‹ %*« ݉LÖæI’Áôrý<' 0©†?(©ü)·?µµ‘Û.W›µ:^ ¤@rÐJ#+|“ÛÌÃxÝîŽMÛÑخãÃü’9=È™ÒLúm®ˆÍÌd××¶V×¶Ö‘ZØA2÷€ŠîlT«k\‰‘%³òmCB·@”N"væÖ¬{× ûǶ‰üš ëç Î@Y€¥ RE6…Ñ»¸¸ÙaþDlïÇGoÎN/Ž›»‹ ë›ù×g§à)ÏAêx«”ªydŽ­p¼bL<¦jQ´O¨ú^ºqcêeÂ+úÇcF¸Ù†Dnp½t%jÒbjbcR4‘äoX—>êýüLÒyÕ[Ù]{Ýä{¥ºòí)×;¢»ûç·þäú«÷ã˜íI• ž¤NR佊¹?s¡±\L&Ix)1åf| )p»PL(öÊyFŸ¤Kír£Ê E碉…Í*÷5IÒšÁÈüSt¡§±…·ç'ߟs¥Xri}£X.m»Ã‹¨LŽbK2àyGô÷}-àã&ÌøÄ60:½®Œ"þRtÏpôRqûtørt š2.†d¼ˆ ÇG é$ý\£îÆ›T]Š¡Ž \Ïé¦>¾N”Êœ²ú§½ âI¸³Ã–‘±5ÿ¬‰3TQÔp tÒe®æ¤f*ÑóÕñxÄFµ0¯®ÉÕIgNˈõ´ì™DfÃ]ÖÙR,¥ÿ%Ëò’iéçÚ!tá›Üt4-5žD;ìÔÚÀåìÔÉä|$6+VÛ K ”YXXϤfW—ÖVW·’©ù)K@3á¶8B «³ºë_äsöê¨ïû+\#íbµ\¬È!¾Á#‘{Xä~ɶ=§OrÍüi¦Ü¡7‡,®|o³V;;ØÛ.Žš ðˆ¯q|,i-ÀCïªæ‚\˜›—õ«ûè:­9:*õ€@ @iw­OùóBü_$1ÔÑaqÀìÎè-Q‹_·Èv¹¹•ÍÜéÛE¬9Ç­‰ÌN~u~~t7ÛÊê–+83ȳ¼bš¸ð8ý‚1ÝDZRш¸&GìluH<'œ:’É„ØNÄ8ºøIÍ™ù¾nÅ{©ÆoOl%ïý“[ßûS½21ÝÖ*·u´ä>—VÚ8â.ñuuÐwš·P»:ºpREìéãÚPÃ"ÍølLÿ„¢écêå¯É³y’¶¨Ñá(=¬)Op¶Q­aÆù}xrÐl^Ÿ¿9;¹8<´”œÙGóÑN±s@¤>Т‡ˆáGÝÏñ3Heàˆ°fŠƒÁåçób Áá îl‰¾‹àWŽáÔ ¶ƒN?€¤ô‘ )V+d':Õ¨™µÎ‰\Ã"‡æ.¤ç³€ovÍk„$Ž ¸™tÏufV1/KKv ¥…å>od!–^ñ…gö;Hzbw¿¶}}zŽáQÏíhͱ^®ý9Ê/½=?þþâ¼ÈÆFÁî›vZòõsmà0^Œ¸ ›Ó›„°`Ç5† —ÇG[¹j©òæütvnEªµ³tNoPÎ÷—àx.w·«Û¥ÒÙáá& µ0·r´Û„ç÷Žú²Jø骥íJ©M.Ò%vBÒ3,öŽÉÜÖP02—žYšŸ_ÉoåÎÐhxDTÈ;>ޭ׋Ùì^£A&òàÑûH¨ÿøHk0ÿ¡Gü’1 €`X`£É|pÏД¡VáF÷óªl¿U¹€$š<4&q{ÃpßÆÌ®x­² Ží5Ü¥'GáÈìáHíí6jl×·6‹ëùÕÕììÜj,¹è ÍhM!‰ÎG“8áÚI'bmD<•N¤˜?•ƒ_›š#lõ¼‰™,¢ÌÖáîl±‡&ó³´qŽ1ó™àéþFNŠ®ŽQÅhÞ…®Š|âgvsÙÿü…þvoI ©›é1y3¨UH¿! Òl8"B-AT©_aJ,­–¦< ãŠGPMǦݙ@t1š\ Æ‘½5æ´! ’nz6G•áA‘Xì:øö>®¦g4Ã0ÏDáÇÅV¡Æ“Ë_Ÿ|~šœY£Šœ¯8Öa¾eÊmÔvÊÙȯ­åE:ïã1㣱ɧôé^Ž­‡5ýœ>ÑÃ0ö2jÛSªÖóQ-¬ãúï(š^¦¯´ ³õ¯h*‰ÆÁê¢ÑÔñþþþÎÎÛ‹óze;‘œÛßië–=ʼnzµ¶²¼¹¶ž-äJxœm‘§r !) 1.#bÏ{Òhö­­¬U‹å‹Ãƒ£Ý]øäóÃ#·t„HnЬÊ~½ëì½!]`UžDÛÏÐhLaÙDHd ìhª0ߘ”LeèêxW¿ö× ’f ‘{TX¡H}<ÇÀöœ>õr\hi}=·ˆIªåj©PÞ­7êÕm¸ á íî%’‹,©å%}¢Ÿc†{{;¾‘‡ÕÐDçâÒ[åg(ƒB#ÒÍ «É _¢[—Ì®ÿ,zè¯$ý2Vžˆ£ðð\ߟ‡¸’>_)‡ÌÕ#—/õ²ïXZÒ•…¦Ù¿(³=߇/e¦0¯„6"ñŽË¼‰Ì*\ô [”*˜†ûçÕ¸öÕ¸î)UõݰêÏÊ¿ jžÒ&‡°º£7¶Éq ª½&8ïÖ'AjÁR/aX@?àÞ…ÄdÂÀI|Ý4¤Ÿ!‘á5úH¡Yâ¡ã„Ú›0nþù_‘âaÑðVÒÿò%õÂ'°@Ò¿,Hz§“ ÙæÏ%m Ô‘-õA3$tôólÏ™–>ž›" ÂVODR³ë±Ô*Ké-äË¿:‡À÷êøèíùÉA£ 8 ^!Óû¸@Ž µ‰1eâ›iïS{QבØMÁf¾ÚåôD§ñ….u˜œ)»oFb ⎟~®m€kRLDz%–\ò…æcéµ@|ÙYd«|¨]Zà@öìé!¾uˆg}26ñœ>ù’9õ’1©5GÖÖsÙlie%;mü¥O<ÆÑ²ù¿__þøöºZ¬§=ëk›ç¸ôF†‡$i9l6UF÷ŸzE`•^^Ñ'ú86ØBˆt+j!Ú4©¯‡cy2ª£òŒ£S¦1ÛíîãfãÇ7×oÎÑ”Ö{{qr²0¿²0·°ßhœŸ<£w(%_í£É6Ös¬®x2µϬ+TYÀ`KOºfG¤a®!ÕÖÜøJAIͶé¶1_"®ªô@Ë<›ŽÄÌÎø„%èðÆcÉùµÕ­ÕÕÍÆvýÇ7W°›*ÇcªLZáÞ~6nšv%¯NŽá/1Ãd³¾³¾Q‚à1w£æ¿Î¼Ø­ÆÁŸçɾnô¾^I’éÒëh ‹ti4,•}:íg‚¤NÃòÎjëWá a âÓ÷vb±ºD‚™:†@,p( &¹q¸m$¾Až½—D^1L/é“):ÀF/Æ £B«Â‚`÷ h|Á´¨•#+Mˆ×»˜ nåÉ-ŠŸ Í1¢,Açá¾EEÕ@xBŠ_é%ÞçI !''É3ûÑ/G`øšBˆN•øA«Ü½< é_$Ýε$Ç$šÁÌ.ý|Çw£†§ã“OÇMOǧÍ„kÁĪ|:9& À¦Â<@´'m±íRõ×ççG‡Û•Úæf¬9D3T)’BR ZÄn‚@’*ÊÓG¬”Ku!6$òÁG¡½!ñp-Cœ)ªÐ>lÌ‚;ÖA³3hésº—i Ç ¢š[ØÀSÐ¥å•EhA¾M– ô¡õü^£Š/Óeî¶ù%cŠ-wd· d¶¾ «㨵SO ŽÌä¶ò†.gf–ÖÈè&v;þÇõåÉþžÂèyDQ÷0Mý\+œLLÕƒÍ&)W†(Rÿ¸Ì-R;{éúoDχøyNgò5f›/3p„j¥fŠÊRüù%›)Ô-Í/¢|Õ¿žXÛ‡AÒÙáa!›­ ùléòø(›-ò•NšÈÊQºøö~¾‡&÷³42 ÐÖûšARª[¸ƒŽ· 5¢úGDža¾]5HϬxéÍl¹X9ÚÝ»ÂjÍÕRÕìŒõ³¦À)¢PXìîåÚ„Ú@"³’šY°E ¹ò›ó³b¡l°ÅÁzДáŽfÙ§6ñ|e é$·C»d·<0¦ h-òúšüòߟTûù™$ô½ÚiBxÿXûºœaN„$û–z÷M“C×àbú¦“š)aœÂt䈌,ŒÌaçˆÐ5ȳ½ŸYþ™õB¹Tc²·³»¹Y\^͇“«T‰‡§E|žpc0ÚŒä-Å™ºUwwA~ Ü0[R†óËjš¿èÊò° 2ìpãŠ0.leîíTûyßÛIˆE=ó•gC@Ò×’î $¬œk‘¹©#ðæGT½Pã™_Ú(·Ëåúêj>»Uº8<ÜßÙõGÀjc-w/Ï5 põsmT‘«t3dªÀJ /”h‘#¹M©MHäÀxQd!‘!š§P¨Ê¦I •R¹^1Mˆ*P†Æ% dA©RÿŽcàÓ0r¾`L¿bM½bLà"Ý$ÄU€ZP«`)®6èÌ/-gÑïÚžÒ¦^2MO¨úW4Ù­•kHjíðhkm=•šÝXϲŽơ0®o×”»ÁäN$ç#Ñ™dr1™eЧ^ÒÔO(ÚW¬éa“Š‹p8ëƒû ¢còаÀ:ÌÒôŒk{hªq®Š+™öj˜Gc‰5ºI‹Å™ŒÏÄóKKëÅl¶V*= ¤;«Q©l‹D)ï ?ïï×·˫٭­ÒúF‰‡¨ó‚„5§mâÓ_-HºK4¯%ýIÈáʃ_ãÍçJpï½9;9ÜÝÝ­ï(‡CV}ß kx6î©8a‰x–e^š … ý³z*$ÒF„vðÁ£òP[•%ùs ¾n”ú*ênëauÕªêȘ"8" ŒHY`DSF0ðwƒ¤[çç—€¤4aQº÷gc¯œ .•†Ó*ˬÁ1ËÆ©¾£=øv1-œDȉ©iÏÁ©¢¤ú†òúç+–Y1Ìe‹ˆp KB¸Úv=™^fH,Ï“`KÁ¢r5È3Q¿Z„EDî4Q~l!HÂ>¥GCÊ`láñ‹fMÞIþ¥¢®uDvß— úxŽÎ5E‰$ðéLâ_$9@ÒWšIê²Ýq¸Da_;ÁMÍÈi­®eÇDvxÛ˜Ô§4§d¦S¹`ëöóì°ùŽAT&étê:Ú#­þDÄ9DS9¼ŸŠŠa« ¶®"ìA!,÷€ÐCAc;>x…‚g†Dn†Âë ,dæ7£É¥ {Rf ÑenšÔ5€¾×9ÀwöpìÏÓOiÆ^–‰à'‰!˜Ì¬VËÛÛåÚN­Á:¬ËÓÓZ©¸S­¾>;%œ¶€W›MòxÐl‚Ç:hîÂëkË[ƒ,#[ÎEìAL$--Õ–pÂIÄù!ëìXlß~½V/—w¶«¿¾üáõåÛ‹s2ævŠ©á.ONJù|­\>ÝGp÷Š—ýË­ÃÃÂææQsÂâ¿_]œîÏ/¬­¬d Ùr³Þ€պΒXÚØï$½+êÜ’¹E·J+Õ8_Ò'GE§/=7¿¶]®žìÇ’‹ýœé2 õÁME„ GåADxˆÇ¡Á¯`"1"ÅQµ’º™?ƒEú-ARê¾Ö¢e?«U“êzl„àX›a‘®ðK&bVß¼'²¬±f8Úè¸:Šg}¬{»˜Q¹í^_NÚhà[P;‹Ø î¥Ftq¶:ž­K½? Öº7”Ó)_dY:‰næÕ¤#‚]W YªÈiõfÀ@‘X‚¬ýæn¥XÉmWV¶Âñù`l1–YuPézÁ´½b;^q=5&õªÍI•9&Щ"WÛÊTùáÃûyNØíl¥km5{qLH±¯ŽQk¹¸-ÐÀvÐeÙDD:—¹'ÉôìÆÜÂ&¼ 3 qÙÓ“+Ìý…Í­½Z €àÛ‹³4Øß¨äóÅlöûóSÔó¹jà±Ò-š}oM“y°üx'Èxm¢%È€Ïá8.¦@pßËœ`‰M,¡^g´'R ÁP<O׫5ÒN(pàKó›[Íím"D|ãq[ë_ $‚,峙̢vÒ=3³¤4º¾c6sUhžrÄŽXÕq”ˆ¢“¯û}d’º¬ŠÔƒmIW¬êíãÚ_2&”þíJ œŸb"§Q‰ZY+ºÀ®¬ÛÄ+Ô’®SÇà>äºÒH¿gDºdºH#[ªpL †° Ò-aª# ¤ƒ†NXˆ¬^r}<§Á–Ìg+—ÇHÏìÃ÷ç'K+…QÊÁ …²¶þ$ô†q®q. Ä{Èe B†­ºÔ­ICB§Òf躾ê˜MšÔ3ŽqKX¢‘7¸Oz¸Îg ËcÚÔ#Š õß.Î;”¤eÉóãó#L pzR.”yJÇûU<ÏäÊL8Òï¬Áž2¹36ߜܣËH‡8–Ò S¥º:ò¹Ø¡~ò‚³` {,Ã6¤î¤—nPQ›‡ý¦–ª‹·BS”ò6z"®LÈHS.4pÙ¨ƒ$†6)5¥eÓ©nfµ¯-=€¤¯4“tÃÕ¦MŒÊý\ KáÒšãóKy¬­ˆzбìë±jÂÏ’ZšÍÝFS5é§ð¦¨Bë”3Œ.NØâÏhÆo(†—,k?ßkpÔl!rËMñµõâÛó4°E‡‘¶%ªšÑ°Þª¯Kƒ–˜`¨ÿ¯¿2þÜ/{LÕv§Š6oZ9ëå{Xì÷Rn{×ýßÐ ¶pÊÁ–yÁ4 ,Rcp\Š”¹PIW…ûùH7I[èƒq“;‰át&®M¾Ïöq¡5X¨£©ÙûG%±¨b÷(r:Á¬üG7Às8óÁزÝ?cr‚9Y¨UÐä»”%­A“½ÝtfÙâŠ'R+jý×çˆEéòìúäøÍÙ1<ó¾µUò„æ ¼¤à|?Üo`º$±>‘æû™¾“ˆR%ôÜ]Û'Õ ~HµÕÌCÊT8Ì&"Ǹ:ÁÀŠ~mÉ¿î´$IÌääc£Mˆ'cŒÐôÿ’†ô/™Ij .ñíVw Ì ©=Õ·kà³kÕm€)áØÜ‹qÝ·C ±Ö5Â1>¡¨9Jg8>ŸÝ*žîïÃÆ‹$–ýÑE€2CøÛ:$pŽàÒGí Åvjˆñhy%;,´BÒŒˆ™ù0 z,Þ €xÛæfqLìh]j-_bÉlM™;;9?<øáú¾‘¥ôôóì}k/Û4Ì3i¦|µKc Èõž1!R>úñÍåñþà›ù…DzÙœQO^S4lc/]ÿ’¦yJU>–Sx“CLeϘìѰì^  ÉÿÚ+ qµƒ õ¿à7(›_XEgU“^¦Ôúœf|:>¦jLìÖ íîoh œ„¢Û ÀAŠÈÝËšd‰&Ó©¹³£ƒ\_VŠ•õõ|4>ouEóÙâéá‘\kóú""åÔÓ ƒ¯ãŠõNw(‘Ȳˆ‚ùâøèâø¸˜þÉ¡Òáai+{²·ûúüts#M.´{Ó[ì[Š^jðÛs½|7CÝÒµm»¨ß Hº]æ&8‰ êИ,@CÉT_ωӮÈ´„î[ ˻նˆGé4i}£ÿ«‚¤w+’éZ2 ’Rÿ ÎR÷qz{z·';ƒ ÎÐ|rf½XØ.—·v÷^Ÿ8‡]sŽó³ÙŠÕ›æ¨<ƒBM&´„Ÿ’nU‚n󀃧gj“ÃB˜ô64Õ˜èJÕ“Q5‡íŒzŒ"¡VÔ‹ †q€ï`È=ã27ÄŸþÈ]b§IOÛ¢˜ŠL»SFKhn~íõÙ1ÄWVí5vŽöÞK·†%½ÿq}a$ðFRH1¶í¡?!´p±ä2WåE…<©oXè„uC|±ëŽ@Cu $µ¬¨¾ 4Ñ1%ÒA‡!4D´ÖÄÒà;àŒáFo¤q [†" ŒÊƒBÝt©kâ܉ Äÿ#bÙ2 MÖm­›ô×€“@Ò×’X]ÂI¨ˆgSO'<Á9‡ÎâNKõžÅ¥Íõ<]l~LQóÔîõµœf*øíˆF7:@LB‡¤³ö<¿8>$tÐÜõEæÇ$Î~ŽSMÁ>_^Ù:ƒÚhdæÖÇeN¶Ê›™ÛX]+èm©a1ÄL®1±]g‰Î. H»'Á–N/,nüíò¼V©A$TÌ—1 ãÞåÉñòÒCâzÅ4÷²-ý\ë³ñÉÇT­Xï<ª1>ñÍ0À ‰­Íüùñ˜€µÕ¬ÉVOxébË“1ýSšáɨI\Qu/h†çcúGí>ãþÇ3îw#ªºá)UóhDõ„ªz6ª~9®{4,ÿsŸäÏýŠæ„r2 Ÿ¡` ‰"uÒHw¶oá¤öÓÚ¢n0sOGõO) *G£ŸòJµ®G#Êg£š!öijQÕ£õ£aÕw5ü6øUß «¿Rüu@ú]¿ÎÓè'+K+û:œdÜ8õOŽ“Àîç66övêhZ§Ñ¼»¶’…ÛÏ­àðÀb2TÝúö¿Ä$ý† ©{`‚u+·'ÆÑV‡ ŠŒïå¸?ćÃùfáÛ,Ãðù£2߯–Iê†GR~Ä7+  ¾+_’ÃÑÔj¹TÝßi^ Bÿ34‹zøöüô‡«s€gHàe'—/¥fV –…‡fZ{8ÖA<\Ö•*E³ Ÿ˜IêüZ.†¹’©´xjÑy+CC;]åÒÞN·")¥õE—^8¨~ rÇ&™ÇÓ+ëëÅZµ~ØÜ=‹z|O.(Œ¾`lΙÛÚ*@¬ÁR³Ö(æKÈ´kÓX ÷'vÓû˜ý;E:8Ÿêv ¾B“yøv8Eû—IÎ$ÝÖþC›óeDáÇšrÍll•Žö÷ϱîŠÞšÿ2.óln•j•z"³!4Déò[fªB¸[?4Žºô¢L}eô¹æAm/ô©H¡¹¢asgC9¿ßzöí$}m éFœcH‚]¤p{Xì}Ŷ¾b#•Žiˆk~EŸìaNF+—ÇÇ©ôÒKºqLhqú’¾`&=»²µY*˜àL ñ¦GøfªÐúU;Ä· sô,É´Ù‚¯ËÌ®†ã Ùl©T¬ll\þ4@C† 5ÕrLƒ|;**[„OÝ…¶;ž¯ƒ“˜7M'xpO좎«¿ *žŽM q<®µÐ$qØ´hß"ŠNØ*C|ÄG@ðÃøïÏ}Ò¿¼brTV»cmó]É”> ¸‹2ÉT:‘*çó{5D¼y¸Sß.UĆð3º«‡‰àF[—êw–IºëÚ]¨ËˆÞwJ­îŠ{ºƒQ JW€ëÐÛküs,2|7$rÁ!ð&¾ HêÚ5­[R[Át…P›£Ö’€°ê¨¹÷ýÅ)Db­1.$¡66{>[œŸ_„ç Ö(Kîø–¢Cs'Œé¾ÍÉJ}8¶AE4-ûÉÛ­Ž"]Ÿí(îãAå*ø.Žžpv®&ÝÀe¢J}¨€ç É}cŸÒuçb©•ÌÜÚÆFŽè5àù˜ã7çp¼¨í¯TtÞjBú\ÕíƒÃÝÝõµüÆz.5³ÆQûúx¶1E°$±¿$H¢H¼ô6HêFHlmÂ]O$†D^•)–Ë Ÿ¡‘䃫ãcx^.÷%ÄçGGð¿þðÜêjþ`woc³ä‹®èl3LM‘CÈ×]ØD•‡Çñ0r§Y‚ƒ ‰¡˜ïê$ý+$A+“Ô%Ó!j°Å¨Ö«‘Iû!L„ßÏwÒ¤.ÕTH¢<Ÿ;fæÖjÕZv³PÈ£i#¸AÏŽ¶ÈÇóó×'hK— ••µÜÚFaf~=žZ,æËpsã…:oÎÛäY ºðdlR {‹ҩX×1"°Éô>¶Ì2.± qMt‘9ml7`3CÔØ¨ÖcÉE oZnô+'ýK4»Øk¯RÞŽ¥W¨BÛsú$à$§?s~Ø’E#·\ª¤g–·6 k` 6 ¥BÕžÓ["ó‹ÙÍÕuÌôxõúôä-"{D½M—'G׸ßমàXhúZĬ¸q¦.ÙmgïÇIȽ¡¶nÒNê)rD89,rõ±Íp†©²UâÃcJ¸ÍÝ´éÚ$(Œ9Ÿ7æ ÏÚÚþs¿âϘ>äÇ·×ÇÿÔ™$¸O|//,Å" §Ë·0·¸8·´]È»® Ùg¬MKhÕF1Îþ°›b-åD&‰4Ѱ6üÜLRªCI@ö>< '¢4™"OÔUcH³ÛsjtÜ’à•¥©Íq£=eñÌlo×Áìüpuþ·!±H\ CçWçþhÚpõ ¢ÜËã“R¡¬6…û8–~®¦ Þ±r¾c?±'‰ÞnÜn Ä`Æ(8zìã9,žt³¾s…Ãïsiƒ¹:9A‰7™7k ˆÞÁP×·ëû;»³ ›#Bç+Ž“© ¸CóÙly¯Ñ7ñÕ"Ê›[åJ¹¶²VôÇÖøT¶c"xzI © ’ 38BpԯɬaWƒY¡HýS…î!¡{ Öà„‡¦@\ŽTÔ·dïašžÓ&žŽêë‹1 Gn{FQp'e:—?”^\\_YÞ‚ývrpˆ±7òó ë¶M8­œð ÕNõT`Âå*]C¼i0m±{Lâ¢É<£R÷P„à$ ò¬x>ÎÝÇ5³äXc"3[n§‹­#<ëßþ‚9-1øçæ7K…ÊNmç’¤|ê;Ïiºô o ÆvöÕ›s”¯Þ­í”ÑÔQ EZ”«??¯—Jûõík”F:«W¶ÁþbŠmTþÇOŽòÙ¢5~ú!¼¦·û`Xúû3IïÉÖ$Ñâ¦ÉCÃ"7gAHw!~ià’‘àx«ÍSÝÒGPIäìøhDÝ7®˜²x!ò#u·ßoé­3´Ü½:3n•bqa~ ¬Õê†ûj©ÿë†&uª¦ÂB}€­òqõQÆïpºíPß­ w.÷ÓäAT&@=Ÿ{‘ÆmÉ´H·³qRÞyØrw"µÐá spœ`_ŽvîÑQ­RÓMŸPµßè`;P%ž1©wTJ´2‚¤‹£<÷×Ù_íD]·,ÉÝsþ~Ô¡tïräˆà§gG¿V‹ª6·ëk(ÂQ˜Ó®¤ÛŸ~‰g„;1Ø—Îý$<:Ç¿çúìÌf"¹ Õ:ŸRTß ©ž‡„dèÚ£»ïf7߯g•úxú"òœu$u÷*ÐÕk*Q¯ýÇ:*´nläëÕB)_VOø²Ùb0:gv&ä¯Ù›]ؘvÆÅzÏgSÙyq’Õ¾Œ&õH!_d¡¯ìÕw!VßÛ…)žYe«Ã=l SÈ$=€¤Ä3Ì«„hàÅÞ>ŽuDB|2?]æç¨ÒɈĦHܽ<ûâ„tÁ}6(pöóh!ÂF;à›—Ìé— Ó³ñ ŠÀ äüàpúÛ³S@'•Rena]9áLÑ|GQ?Õ?£a=§O=Ÿ|Á˜zŶôó€„ ‘ø‡Ä~*n £ê¾o€oÃ’~$ÖÆ³õ°,¯˜Ó°ž3L4©kLì:^0ÍOÇ BK¨õøC³_Ú`‰<Õ½bN½Ÿ›U^¡Æ™L-­¬lÎέÉõ.¡Ò¶Ž…À ùrv+ŸÏª°O¢é™Ì|>W`'Ñ8L¶0ËvyÇ­ÏϯۼI8F8daìšüÿ0Nê”óol„.É1"él4õŠªàwD”’w¨„»[zQc X±pêãQýãR3‘ßÌ Êß)i^µ ÿo^"‡ÓHŠ•×g'Çh®eÓê se&ºúÆÕžiDh§â¦—-7jÆvcvaÓäL 4Q‰kgg©¼JSTl =l+’J¡c@=¬i¦Ì¡›OX£úé°TïYŸŒêŸÐŒý|¦:GÄ.L2é†Ç<ùOšÆÑ† cþ´–Cå?¡ƒ††9ƒˆlIèÂËÑÏEÝÍ ¹‹"r’aK³dŽGTýzå°[þ:¨zɘ|A7>3~;¢ùcŸâz¥ê—¿×?¡jþ:¨@Šëb Cb˜ú™úA¶aT0ý×>Á“)…?ÕÇÔ?Q>Q ° ,™•%µ>£éžé_±¯?¡z *¥íùÅÍhbis³°×h~Z_/h-ñ!ýÓ<À·#°"rõr¬i“Fá¦Oöp¬pCS%”+Âæ “¤ùˆi{ûДòƒB/E údè‰ø8"9h7R8á[yŸÝ?'Ÿ ΃£€0¾ý›½z:Œ-¤[YÉ/¯f}á9åDH¬¨MžÊKÛ{ÙÓ}ìé~޹‡eúfD àé/ªÇTícªæñ¨î/ýÒo‡å}kÜøˆªûÓ€ê¿{dêW¾¤O¾`˜ž#‘8”÷ºÅ^Š4Т®iu9ü,‰uI³$IHú(÷†e/IµŽøÌÎìéaN>²ÚüföüÁßW "ÚJ¡i·VÃÜâHTøûË‹ë³SdЛ;€Ÿ$j‹?” E猖ÐKßÏ0ñ̃B7î2‰´»L’ï‡ÿ§I\c®>Ü3LMâÝî™ßu& yÄV§v„葉ŒáXjIü¶[‘ö;¹­‚×âL<›@IDœ~FO«1o·„ZI?x7¡¼yXä¢)¼nÝ®ü¸j8¥ð-X#I*á…DéxVæy!ÞƒÓ‚‰ #hÔ\êâ» ÏÀ ï9ÓòŒ>ý-Åøœ>A™Åj;ü~¸·+DŠk—¨ëµo®®nZažÌLáÚþqÕ«QCbÒ›C\¥³k8‰ÖÍ€À‡3(òŽHüTYpL¦)Ãí¦L}:QbG2¦ŠPdÁa±Hä‘€c2ôp›!½la³y$ÝnÅ”6霕O§;\*4ÔpæÇž1‰;ž^^YÉ2åu;Ǥî$HÕVosÐwÈ0›Û ã…»?ñN»q;ÃÖ=€¤¤ œðœ©KЕá!>*œ½d¢a±Ýúž»Þ#›Š°â>€ ‘>,4Døº0G¤áwLæçêbãX¡Í 'éÁbªÂ"cÔàHi®&ØËµ÷pìDþ¼ŸïðH«‰¿é£J½Œ6HºI&éRÈBꢰn·Lnz™e¼$N“3µ¶–ßÚ,Bèî .ð´a Ih˜‘®‰v„{™-Õ—x 3i=üegÁÝàæ‡ßX¢ä$}U )E”{™Sp« ò,¾ðÜÙÁþùáÁÉ}QÈÉAk ã3´Â†s~ú·Ë³b¾ ¨¢k¥I=}\$v;„©FñvêL&cm©æBõÓež¶u˜oOͬž!×~øúôx~) æi˜#tA?ŒmB«ky@9—'ÈežÁ÷"6&‰fæVFÖæ4 Ÿf½ lÁf’Å#0h0 åÃŽbÉ¥¾µ—cíçZ_0L`¼–—sð¶ ,òöü´Z®©ôŽ>º ‘ÞÉÌ­Õ·g˜öi¯Þi<™Ù•ï/ÏöÍl¶”Ë–+¥íÍ­r4µ.1Ɔ„øÍôÝ_¢'}`Þíg¤û˜ˆX_)4ŠFäO©šaº,OzÉ“ßEÒááv±X-ÁpïÖLjÿwoqa5ŸSê*ƒ3)æ‹€Ÿ¾¿<¯–·—–7ç6˜2VÂÂ*fXT¸Këþ—˜¶ßHzŸEúý¤;šx MÔ¢™V†‰%µgfWëÕ:"6Ü®“»ÅáIö0 ¯XÓ¨’"õ"²{T"‰wX|îm%îÎì²ZYØØˆiÀ1ºæBÉõI÷,Sƒs šh‡Óõi|CR2™äé‘<\+¥K òcÊ0xÙQYˆ§â+ëÈ&” ÕJ¹V(Tá^Ý©5ÎÐNÜ;jî⨑ë’Û_¯aš¥³Ze[®³ÐUO†Äÿñ˜ùbT%Ñ:íîh4š^Y\:Þk^žìî4a¯A(¢0ú|‘ù¹ÅÍÍ­jº¨5¶+µ|¾²¸œ›™Ûœ™ßâ¨Üý<\¯‰Ì";/€A¸åS±Íâ—;ÌæÊžð¤3¥žŽ™½³ÁØÊ¤38$"á%B0’"ÆíÛd’\Ë@m‰;ÂDs\îg+=6ßÌ~³ù·‹Óß\þðú¢Yoj­©A‘Ï» PÅÐDÛ¨(Úµð+Z´XèÊÚáÇÜÑEyIÿŠ ¾$¡“Òαa‘«‡5="tºƒ3¯ÏO> vAKHhì¼%WeÌŽˆ' FæÊò­9ÞñôáFï>\G#A?Â5`€ ¥/•YËÌ­‡â‹î@Æž…O°å Ïõó‘ÿ8šÎ \/“¡]jðÌÁõü)&X¯Y.Uuæ`à P{†x–o†ÔÕÒöÙ!¡±Hˆ¤[ŒÛݶ®Mz|3Å‚Jo¨Á?DWøXJ]榉"­Gm YÜI_x‘ ‹Üt%ꥈœdJzXŒ—Ð="vÜ4xvÂI¥õqû3€$zÐhèï4“dœ“0Ì·s©Q¹¿ŸkLC“Ø77óàõ %×=”öøuÛ¥2‹S¶€Õ^\\Ëeƒ>Iïí)ŒÞažen~3_–›"l5â à¨ý¾è" ßw£T‘½Q­½9;‚r3[ÅB®du'ûØæ!¡‹&G¼tEpi9 î“£òýuHÛË0¤ÒK!6k;°‡——·$:Ï”5ÔËšüC¯~6a`ƒ'°?÷ê;'¨›á ™^~1æÕ QÂs†I õ‚ €¯>ÂÐÞÆZöÙ¨rLl1Ûýss‹ Ä®Ñ<Ýo•„.„M¾°°>Â1€ecѬ7––6R™åÍ<øøõõܨÄù’cÇ\2Èyw&?`¾HºcôI2 ‰HýƒG?ËøbXÀ“0ÉøáW;éÖ!ö,lnN:´]©æ¶ò[¹õÕ¬/˜áèÇES¾`&™Y ÇçKõÞã½ìiDš,ƒí"h‡„úSz-@Ò¯l‘n5kco‡{ü\uÀîËL¦À®OŽwª5žÒöÇ *BHx‹á.4¶î'¦JYïös­©_>·zflž´Ã›žrĵæ(K‰ÉMÐØ© O:ÒÎ GÇùZœ ‰üý|Ïßœ™ÛHÏmAœÙÜ Çκòëjrgý† ¬e½ºmu…c‰Y0¹»õ}Äå}ø·%ab¤Ãfvâ^½N*õD÷ü¸Å¾vrÏÇ¢GøœíJ=»YÜÚ,F’Ë®àœ;8ç‹,„ËáÄRjfe‡š^dºñ5%—xvnƒ.h`¨Zå0€,t¼MÞe»=:—èdáÎé¸z¸6ŠÈÁ¹žÑŒ¨úÇ£<:mzŶ=c˜å:Û6$Be ÀLtT" 3±æO‡‘Žd˜Xº8)Ùÿ.2I?Ùöú$I`/P&iæÃ#ß_3H¢#[×XÞû¼‡c·yÓÿx}QÑûöÛ›³Ó‹£#0-T˜uSžõ,áÎG9›¶ÞêüüºÁÈ̬¾Á2´° ³[%ŽÂ N5$T,T$†@c"–Xă°göß jW•-w<¡MâfLÔmÀPø©¥½íÊáîîâRvu5{ØÜÃâD-^GøŠR¡²±º%Õû¾R8}É3ü ^ „3ƒ,ƒÂà•}ýì)@Hà{ÙŠÐO.]v\5|Ä©î“5®ÍÕµã½æ)ÖÁ¸9öý–­©Ujý í_ûD£ü‰—c*"J//mV›vÆùj7_ e Ô »oû;²—Ý¢5Ýö3AÒ¢ø|ÇäÁ~Že„­¡±å4¦´R,]Ãé=ý*qa®sœßÜ<@ºå‡p‰Ë…ÒÌÌr1_ª–*b'·”‹Õx xtvvMk ò­‘«tÔ`:U¶Od±û×I?û\}V‹twà_G],òÀ°Ð¥·DÕ:ìñãý=¢4²¾žeˆ§Ÿéx6Šѧ‘~áAHÝ"©x§$ B‘ø†ÐÖVü4xúý]œPA5ú¥åG »Ì{\¯z:¶¶žW[ÓBÔ=ÉÖFŒÎYÙdìÏ )/¸aðÊÁèüo¯|s –ð«Òœ&­¥°§šµ:„K¢srtH&ì:¿ó`g§´µU+—Ï1l"î'Ѓˈ­þx<;hé(œ`Œ{ø>‘8”^:¾»‡çéã{E>*"Ú¾é"ïkö6!ZŸƒ™ îØ€¤.Þ„î³tçŒu‚ó{:¾ H"_Ì›˜¥bqS\¹ìü ôûÄ&[“ôLÒÐÉÔÆ†…h6M5€½qvtØ Ýèg!ø¿¿×hzü‰ÿ÷ãå˜àÎë³ÓsL³ßö÷Á¥]"úÃÖ_íd· DP”]_Ï׫õ®ÎÛ—4 [j&ìûGXúû‹S_dîiÉDñ¢"ö¬kKË»æÛ‹³«Ó›ÜY{–v;&¹ÁûtTû—~)¸Õ7§§ðN‹3öç~Å‹qã Æd×:,pðP¡Me ÷CxŠ9B9¸:=Ù«ïˆ T}%ã¨Ãá ?r\]Aá>ør³=üdX:e Ëõ.¶Ä‰/À{šMÜ›…Գ៾Èâ3†ePà¦}hâ¦u·üâLR—hN&©!‹<½týð˜Po47kµƒFl±S_aJ LóùÃæN«èyÐb’ÜÃLó kÓŽ°ÒàVOz7Ëù2_…$YP‹[‹¸%ö®^Þ¿8H¿ ’~’Äïg¨/IjC|DÿËþ-Õ¨1 å4az}vŒÌþ¥_À0nóÁ¶êL2²>¢ÆÚMH8"ò p­Ti gŸt&¯ŽÉ-Ghša¼=?=ØÙU™"ƒ|Äi}|d4²Ù’;¼ø˜fîãÚ•“‘Jq{L#D=×8ÛDªõàüþÒ+L$çá9|ÂÑî.@®|®ñÙK¦¹37$p>3 ò,¾Y;v“ìv’¼ÅêßÇÞä#ŠæO}òÅ¥õb¾éH œ4ifÄh©5+{«×Î$ù?$1}H>ç帑Ɩ|‘F¥šßÊ&â©×g8©Ž#¼¯ªÖ7Lnc}cmsaam·Þ¸:9!Âæ§‹ïœc¡Jˆ€=´bÂËS:9S#HwÙ?ŽšQP×¢‰ÿÅ1ß?H"Œ>­LÒ;l[ïÄâ">þõA ¨…èÊ ?¶’Ȭ5jõÎ{ðûË3döOýŠØÅ(‰Wµ2ˆ¬›ÙþÔ8É:3X!À2¦ \C|["µQY{€·Å¬_—˹¦Ìé—,3Uì Æ—!Æãi¼`F ¶¤@í¦‹¦ÍÎèþÎÎQ³V-äV–×ffWy*û>ãüûcÖ0S]ÈHÿÍ×É×ú¾´î)" Ú!De_z6öwµ"3:SÀâJ ómÃb/M‚…á©n ª,„›ÃÐB¢LÊð¨<„m)Z˜¿Ê7$tðlS` É^žˆV¹ðà ¹½]Ê媅âæúÖv¹º¾ž³:c©ô\âƒÆ.™—„°¿Z©¯o”¤“ñ‰~ÓTÚ¶ÕïgÅìü/ÙV`ÁŸŽHÀô1Á·c’TÈ$}Þâhùf°‰cLèçXÇd¾Ažy\bõ3åbû*öIÒ÷goÎN\ÞÄ7ƒŠo‡”ÑÄ®¯¬ùûÕÅ›ó3x?`¦£½ýwIܯ  ¦ýâëó“õÜsª\3åA)„}Ò÷ƒªÔ¡øbޱ@·鿚øŽ^¶õU?.š^YÝD_³¹SkÀ~Øoì„¢³/Çuß ©ÆÅ–Ji{aq%µ °MÏhˆÓ™x‰ÐŸlófÎQí 3ª]¶½·gÑÄü[g³ûÁF£ÙUnÛ'utD%€Ã,ø«}mÃê¼ì&`¦Z¹6¿°¡3ÙJO/Ç 2†‚}*Ág¶§ãä^‚«@ä0 OÒ/`÷!{•©E™gÔÏÖÙÞíê߯/·K%Onš²íTkpi DþŠ 7†•ùÍÍÝZj<>·°°ŠZtë;û;»äö#}`pãå³EžnƒéA¾s´Umù …¶nX°#¿GÔ9|žqÑŽË‚„¶øŽï˜Q +ßÎýꙤÝ׈4 Ô‡pè [ï5êSl¥?_ŸžÌ/¬¿bNôp¬Xž6Hʬ¸æ’ú¸4z'œØû4E¨çxN7iÍ‘£vÿbÇRA|ج×eÏŸT<¥;Ÿ«4j¼¾Åÿ÷KY$¹ôã÷×o,,l¬¬dIŸ"X¡z¹Ü¨”àüᙆöé$ž˜#œ¿/BW·ì5ÕBðâTú矶;:l6v,®•oØ^è“ú_±Í£R/º2ížà»z8ŽA žÀã(j¬öõ#jl'C•x†…Ž—Œ©?ö)23K×''GÛ‘ŸÝ¨V‹[[{õÆÅññëÓÓÕÕ-¶Ô$Ó:67òD[ >Ûc‰…@d–)s¾bY†DîÌ炦&1¿µ´z'L ¥m3¹£;9Žùº‚8dM´“^Ÿ´:_Êb¢N@EY*¢Î9„)ÄSDÚ ÷D’Ÿ’ºáQ·zw–/ggH`Äé_Dñɵ£`HÕb¦b¨#xŽ3jhºˆ¶Ú%Õ{aÓíŸLµ¥”4ó‰Í÷i"æ.8¢¶ÐœÖQY`‹~<Õ?¥ª#ñù¿_ž¿=Gå­R¡ ^j~~§r¾ O<§û™Þ¤Xíˆ'fçVggW’©…ÅÅ5¢¤ó± S àüÓAZí“n>½5þdÜ4*ó¶¤H¸4†€æOƌü©™¹µ«“#O =Ê›|1¦ùvPùjÜÈZ¶6ó¤âÿ›Ï…:_ÛBxWrÁðì®ÀìÅÑìœï/Î|{ýýåé%üÇõEµ¼=L—Ë‹¹ÒÕÉq·VFGV¬ù½¢]UKÕhlv¯±ã ÎŒ‰­áÄR±P]XÎM{æP×…ÄÇ ;«%pô)ˆ]Ã!»ÿó“"] Ì ö})Mg7²…lN¦6ÿñÙø•£Ö™!~ZZÞ8ÿzÜÃÃÝZ ÂV@¨j=·•O&ç–—ÖççWáF‚[UQÑ\ )̬¯#^P–Ñ·ZRt©O)´u÷u1t–>=Ä·³Ûº_=HJÝÉÇÂÆ*÷~¶¡¹<‡5ÐYF¦Àbð| EäL Çô§qæí*ðûn?î—I( ŠÈôÅnw`Κ[XÚ7¶[GEØN>ÃæM?„m2®Bz#˜éF«§c±ïäþ;£Ò@Ç<& =l¥×žƒðï¢  ~ELð¨7ùÿý)·—a\ZÚúþ┄OËË›/hºGà ‹3 ¾¶Ž&T?Ü~£±²°PÊæ¼@ÒÚ'Ç—8z<9ø]JádR9Ÿ¨ô‘·O`ýF!ÐAsW?üŽ¢ëEÂ2.ŠÈõœféýØä8ƒó|m`LâRLEBñåb¡’Í–=¡yõtDg‰¨&¥Be~q“-·{ƒé7ç§¥¸4`[à±õðdvtvt«ýc;µº;4ÇQº M†pÉXãiå0S&ÌO©ŸLgˆý)&úW#r£ª£È_«Â4·%_ÓÖ±1fºÿyg}¤¿-Ã@x;cTExD›R¾ØJf!»°œ‡e.ò qF+ãÞ"‹ÿ¤LÒ_扶Ha !JÄ^…È~žŽj<þt<9ovÅúÙ“½ÌIÃbß Ð;(òQ¤XBÓ’’bg‹ô³EYvÃ쎾¨­%Ô‚PT‘¥H<ð·¤7ü}R‚1^›j}r·V½fªã½,Ó€ÀÎÔ&IsD ØÜùŠ9=ÄJ¤s[Å k¸‡¡LÑ<¢èžOöó¬ƒ|[×úlÌÈQØ Ó~ÉëôÄgg—HŠ¥Å<ÙîR:yo¦wÿ–bW»¶M¥T¥‰-Ç&FÑp¦—4ZR‡ɘˆQ6h˜gë¼¾ùÙøDËôEïög ¹R)_&…œ”Ú­í°žAs”p|KP2‰"´‰4.ƒ94a j&=‘ØìþNB|¶°ßÜu{BÓïnﮟ.ÆïßÒÐn#'ØrðQ[›…åå L¿‰€àÚZV¨õËýC"4ÀLh^‘z”2<‚@RŒVý2œ„ýb”¦Ç?¢hŸP”ß JŸŽˆÇ¸Ú¦B¦š*¦ãɹ½FŒø× u~| ¶¸Y«Á=suz ×ý¯/_Ÿ^žEã³ãJ†h2Y:Æ9iƒ¿’M)_$%:m‰¿ÜO£P!¡˜„kâ;¾BútÛÛÆñòhœ’Lˆ<˜c&Fx(¨²@/ÏÍT…&\sc²À õPòuQ¶&B‘€­÷ÓÐx`䦸ЦzÏùü éŽëd’qüÓqÓ3šÁäˆÂÆ*m±œàb=Ü!»³;ýŠmz[÷Ú–°ôm³vOÂŽz€gÇvÛœƒ|s~Òm…Z@Û.À@"µë/ý2ýt`¿±?Y¤b%›79b•M¦wºüI¾Ü ïDQ¡P)vªÕ£ÝÝNÙî·öÿÅA Ây8³¾¼œ][#-_ZåÊ»/ótÌðhÔøŠizLQ¹ýIÂ]÷úçb‚ØCã5p-ðP€¡=«3/œ¢áÇï/ÎÀtÜœðÃÃz¹\Êf/Žï ~ßËáI(cO^ itæs£=ý‚iéaÛúyŽ^žãËú‚eßÁTúºPâkClu`Læ}Åuôð\dØvHèEbÉÉùËO)ß­‰OÝ¢}o‰½|pê]oNbcš*"šJ.­á÷ÿøýå¯/~|}pºÂɵ1E3d~HêÈŽÞÄåíQ(DØ“"æ+¾ÀP{r„7%Ñ8æç–®NŽ~¸¾ôz‚ú ûêò†Úè¢ò'U“>@Ç|µcTŒˆ¶ÀÁcIj8§D•:Dk#'²˜­áÃxK‹;x˜ÞŒÝ7õ»T—îô=«c:ÛÉv‚ó«D¼-»Ç‡Ã„:¦Å„lㄺé~ œÔ˶ pÌ}¬)Àø=¬ix…­À㌎sˆo™™Ûøûõù?¼ýño¯ÿñúâêäëHŸ ]Ûs¸kÏ®ÁÆÍÔÛÇX Ò·ë Íö±‘~-þ"D¸J¤`% Æ:¯X–>.R(ìçX¾Ñ<‚}r;1;Vog»!ÒyŸÑ§ÁyP0K,À‘¶•)u&ÓK³s+“Ö`(: a+X„J©²ÛhfÒ³‹óË'ïïàéÌ®·!÷î¹Å Ý»„D‚cxfk3?¿°nóe¸ºÂßÇwá2|d —‘¤bëÆûyd?7½Û¸-i Ýf~8?½¬) G;HSüÇcÆÿç?ú¾r%“{³Ž~cj¸ç76 Ôƒ{fa~U¢2‡£³ùl±ZªrE®Ìüþe|ˆ©+*×8Ÿt…íw5æØæ'# ÝÜH¿ !Ñ¡ Ì,©Ù¸¯ $½Ë‚ض€ ðð3i…ÄÄÁˆÔG›(Ð˵rµ€•ðD2‰¦×ƒñ%“3)Ðú™ Ä„@<]RNÅä¦8Uìz(ÈP’ùgR8 aÛ]éÀOI›$½ý~O*‚H?›g[Æ&ˆ4Þ`ª3€õoÏN¯ŽWД]!ÂÒ-ÖÖåÄmÉ0ô}º—= @ôû!Ž:À”ïÞÿ8£°ÿã›+0ÞÔ¿?ãMYCo°*€¡¿]žÿãúâïW`dövšP:‘œ‡­Æmg§Œu—©£N‚|·^‡£(nmUòùFµ õ똬]}€cȜɑègOi§¥ìÖÉÁÒsDý(=zxØi9'55¸%ÀËœ´ez:œ5`ö«ÕÜÆÆ^£Î‚wA€IDATqúsVPˆ~„Úë“#€ezKLdªLQƒ-N¬¬¬æ·¶{p}»Þ¨5à±RÞ.ªðº?¶ÌÕ†úøN$ú¦ ÐIíH‹¾ëŽ8`×zkaO°««]¼ÞU†Cú†š¨QEHeNlnƒ±E­9fófœõtThŒ³†Û÷ƒ$IéŸÎ$ÝFíÙB,´N•øQkß9À53Å‘Hb»T®U¶w¶k'{»Ä|ÃåPãxðìQs·Y«7›à‡6×ÖÄÊ©öT?×:À³ òlƒ\ë<áÛ…®A‚~Ô} RW@ýh“…‰Ìû°Ð‡AØÏXíÞþî&ñûVçtã7kq÷ÁÐ[€/‚j–ˆ3>0*´>VÒUˆ¡/„á°>šÖÀ9H¤‘ÄnJ[a{TæG jc„C3Z¢Ð¬;tú¡È DgDª¶RÙj‰ÊêöÅ——×ÁØ‘iÞf†=Û´º–Óš#m`ˆo}6>1(t3Ôa­5%šˆÜÄ '~¬+éäÙŸÒŒb»T¨Ü")Áß·õ„# ˆŠü~$+pR„öp õ_ÿøöÌi‘¹@Ôáç;•ò^½†ù'÷ÞC‚&WËÅòÚÚxzÜä~׿v׿`ïÁ–«–ïæf¡Z®nmäJ…j³ÖŒ¤VÙšP/Ç6(°ÓÕ‘îôK`µXô ³JB@&ÕX³›ÙìF¾V*o¬çäïŸ{ø½c2€òoáFýMEKÿon}} NµÆ•Lx|1Ç¥BQO¥ÙRÓ{ÅÿýR0a Áëð'ÉÌ l®Hr™"öâ ò9@’>…Hxa;¨¤P¹í+Iï‹ÜÝÝm=„- ¶ÁðbHìã©Ý¾ÐŒÞÕ[#ÓÎÔòòÙfW\¢ó®¯åÕShr âr§?5;·— ¯dæ7•æ$‰}†P ¸-ªuÇÈà ƒ ‘Œ ége:ï=œ› žWÂj\ARôÁœâ™)‚i–Ìfq%̮Ĕ=îÌÃï·ûf˜ª U†(²0ùd˜ˆ’2nZFZ]¡Ä¯Àõ²M$Éü`(F…Ó3³k×hòã>¸½=ð»€ËÇø“Tü±GgÐfÁlj¸µ0‚}sq†x´±‰¸<9©—J¥\îã‡Â¾ž¾@‚›µZ%—kno6›°Î~Ý!‰í×gHBªYßm^-öêõS4ñzp¯xÀRÖ;H·Q©67Iìçâ<2DÖ)Æ^¥]Ÿ¿=?y}zŒ ;¦<@z\'§Ž1ŽGEÃHrµ‡55,´cý]R§»¾w±Ú2)-¡ u‰áŠÓ;«ÕôLîóvއQ H„ &=\G?` ¡ ÜTyü g¶Xïè5!Oeø}ù­LR·p1!§"Ôƒ<ë¸ÈLZ$Z×üüR&•™Ÿ‡ó‚ÏÔq÷ ×ÕÉ æà•iÌÿ îóh·¹±ºÍd×7×W×àÚ7«Õ•¥‡'ª™ò2¤Ž1‰ƒ&qŽK¬}ÇGØËsôq‘LìÏþ||ì8ODŸ/Ö–L0ß…¢Ú%§»U"TFFáa‰àθÜÇPøhòÀ€ÀMáN$b §†"ñJcòÀà|â¢Eü¤€ˆÂv‹uϣʗ§k{:6ñí°òÑôUÑCS 25c|£@aaˆ&êW£²gÃBí¤«X(~4£ZK‚s/Ái\X\Wý,U€Ð¨O„çd\Œs\{;·‚ôVƒ©j©rØÜ;oíçý÷Á¾ÃÝÝå¥R¾Œ ç{„Dx']à*c" è´¶Dkw›ÅÏ•¾BAUÎI]Ç“™µF›Óòú£Å\þoW`8¢‰ùÍì­Ôôo’òþdóÛå* ¤Lf)›±»C#LÅ[©Ðš¹ÒɶþÛAéóQ%]<ý’¦ášèR'lìv¹-ù‹AÒ­4 yE—Äù­AÒüMO´ÃÔyÆÀy_º |b +ü‘KeN2%f‰ÚfvÆff—±äjxÛµSkÀn‚{¯ÕtŽpqX†0¸ÍÞ „FDTq¼Íª×Å[ÑÊaã ’Œ3. ¿K€òÚk%¹qJ¬‹:Y"†BSzØÖ— Ó ÆÔK–å%ÓŒújn”Œ—‡Á¥µÒ¤kŽŠ­1E«C €Ïø¼bN¡pWêëGaªe}- ^í}÷?¸êÌìòãùŸû¤™¥T(½;§†gP0[[;³µºZ+—gõµkÉx¥ÍÕU@H*„ßäǨt‰Y¦ê¥2‡R6KØU>ÞªÔËe@H¸|ñ‰¼'¤V ;ú‚œ:]Ý’¦dìï TÎW,ó¸"0*ouÚà6›È»ˆo1ô8*Hƒdލí¢{½Ð3¸GËOieRP1 `ɨ ugÓÛsðI¿ã"ñŒ2!žLu„‰Eâ OÊ7<ꑽþ”«ßÝË$ÝÝ·D€×FDÞ^Æ„nÂYÍçN÷›×§G¸[â„ô©ïíß›9è~Þ)Ê€[}}~ÚV(›wzòýÅùß.Ï•òÚê ¨uR‰9) Õy´¦€Í‡ÆH)Œ^ªuò ¬É/#s€N½ªÝá„òí¤Ï‰àÊœw’hÂÉy†„.€b[$Ñc\Í‹q}sÒl‹º>9ræž3-¡xÉDÄê•x…î!¡s€ï€¢Ÿç¹q&‰À)?Éb»¸–Hb¹P¨6¶Q£ß¯/¸¾€õëËVOôѸçó£ÃŸä%#°æNuSîí5¶všñÌæV÷B•åˆÈ»c{DÕM;bÇû{W§è “;þ|»Tª•ŠÉÔ<`‘a¡ °6žÏô⺡«—cýŽ¢ÿcŸ¬—®LˆÔohF¤0MN{“é¥X|.J{ÉÕå͵խxr.™ZpùÁÈìÊÊÖÉþa0:ûŸOX}ãêÅÅõs¯‘š÷iûÎ)äÊ‹‹3s«ÑVšÛUod ™~e¸=õ–ìv–?³â¸„JëA½†¤šÊ¹Æ<ÌP¸üI_8"–˜ƒ|‰ÚÒËõ$åò•|¾˜Í.Ì/¹Ý!­Á `n·V{{~ú÷«Ëï/Îv«ËëÁpJ©·SÙª^æ·ét#~®ÆmÒÙƒ‰U³Æíî¹iMhgÈîS"!UØ}FGÚäJrÕÖ7.¶jM¡ÍüúÊZµXtùR…B™$ ÕÚÞN“tªž’ ‰óÃÀèÅ\Ùž™vÆ(üé¿*… rÌL9ìzw—}oǯ-!³&J s 3Ý8þÞ³{ÛnŒm+˜îÔËnÆb°À;}?î#Dk´ey‚$ç=¦˜\i8:ØP3ó[bc Þ¶®Ÿï‚zŒÒAz‘àB$ÁßâÔ¸]3iT¶Áª¼›„hËw'ÒKèƒM€]ÿ=>wo\r¥‚uêu3²Wþu(0È!iÐ`GPlº«ÓÓÎäü×0d¿°V,èù‘¸íhw«@àºìlo:‰îGGõ¨`}=÷_ÏùO¨š—ôÉWLÓs¢/†Ý„±ŽgX„äí(xáÞÔ>,öêí€ûÇ K°MîKÎn&f6ùIGZeN0^ŽÚÏVù™ ]æe«C4 @)dk@PñQGíÞ¼Dò™­»iHê–Ä&4xI¼øïâ¤_Bp¾—´é ø Pj[aLL[ý§û»×s¿Ó¥û3¯úÁ» }8m»‡FQÆâØß./®Q5µ~u|ðÃÕÙ߯θº¸8:ÈnýÑE¹1H—XibëßB“ºh2ߊücD˜ÐKPÄþÜ›¬4'„®>®}\bÓšügÄë‹„# 'ä÷E ^7Y|¡Húh·IÆ1ö;<µ÷ɘ‘·¬­Âžo°îï¨Fµ):¿¸µ¼’Ÿ[Ø %VäSQ¤zÁG™ƒ|çêRrõ²§­îäž¹ÆBig‡dXŒ#¢Æ~ÿÞ#§‚ džßP`·†3«%À^uít€)6ù‚3Ø8EÀeÁÀ+®î¤ÍÍâ”35È5ÿ÷K±Tç „g××óùl 3ñWH„d2{¾RðÔžacÓTb ÄœD‘ˆtôs¦ûXSê“ÿ¥_Æ“NƒÉôÌ’Ë“kíRM¤²ôÓÕxÉïS}7(’jVw\nôs§ÄZCb`h',Áj±B¤âŽßË0ÛÂIõj­^Ù¿]ÙNgížè¤=>†Z¦̶šý½NèC•#ì~èØ•‹Ü4¾a6=³‡9¥þ~uŽaÂþÏg<–Ĥ7¹ggW©ÿ–±HãIcÜ p€¡NNˆÐ^ÇPÖ+e¯?øõɰtgßIWuæZŸ…h»ãÑs €{+k¸JŽêJ£HÍ7ÀPø¥Æ`<½¸±žKgV잤É…€»QÛÙ\[Gää¤c¬HÀpoDîuuS7åÜos„z—ÇQjL"¥¥—55"F˜t ‹Çñ@„­ÃB'\Ž1ÓÑ}7iÔ¡è>öl šŽ¦c(#:8®QIk÷J¶Ê 8¤nõÐ6"‹¼ªïhÉèHÌͯ¯¬fWÖò ˹xf ,•;¼hrÏôëÂ÷<¢hàX†±t—/<“ËO°Íy·›óÙž¯®dÿ÷sþªZ®rœC*:´)ä’s¹Ãfóæ · u¿N´‡ x€Q9—« Aj¥R½Zým‹ïï&0eÌ~)›-nm}$H:i××Á¡åÖ×ÑPÈѯ4Ì ·S¹X™°E¤z/E`aHrƒO¤vM9RöÀ<ÜF{š¥ò³Õ>¦Ü v¦c“xÀ-.mæ¶JµjM6zŶJô×§G?¾¹ OàËçJðÉÅB¥+mm ùJ­Z_XÊN:S"]ˆ*rSÆP |™å/p>©Uw"z·Ù·ïD2-œ$õ9öî°óß`’™ Á%aŠÔðâùøG: 'úÍÅ9ê½=ø‚\í ()oœzÆ–‚=²e§W'h†¢Ín—ªÛåêòâŠÒè"jö(ÁÓJðu!_tim½XÊåz·ÉY]ZIÏNLÚl6/ƒ§š2{š;€Æ.0Éy‹{uØN²¸“Ö¼²]Þ֚ЉP©X«?àûËSœ–ßIdV•S¦Â@mo{É0=Ÿøc¿’!6ƒ½.åQ·ø~;ÛõcÌôú^Ôx°è%x}µµ™wzbphXñˆôñ!A·»'>i Ò„&Àp£bç’›F"Eâåkƒ››…¿]œ‚ [^Ù Åæ{Ç”B…õÛÑó™?œ±:B¥ì²ìÆfµ\Û©5"ñE®ÊMA¦Ó=&ó  ¦+›á ßÞܦ ¬ñøÌõÉáo_#a£”— GgžQ=têv€=ÅQ8}>3ŒŠígNô2Œ*£›'3;}ÉýFóꔰߟU:C ͽúÎáÎ.r,1;m y‚³jKbTŽ*ÄÌ›éGá¤îNXR¨•ø¶þ”H> ÇçfÑ´zÊÿœ¦ígjc‰yÀ"§‡_U÷(i›%m€ÝÁÍä6·&§=½ãÊ¿ªŸ3§ŸOÀuoM6}6¢í¯‡L²k&£U\Csj¨­!JW†ÀÍO83kë…XrÙH/-mÀî€]æõdï Q;;ØoàÄÀÙáÑ-í°û¸•I»ñîvµ^.ïîœìî4ÀÎ,/,Ù^†À0È™ä«\£"E앺‡„.4’)õÃ6“ù[]’÷5GvSØúÄÔÎy1û–V ™…Ü´w‘­Cæ—!b¤¨ äH% × Zäã$‡$Ö±A¡»‡my2ñúT2½ fꇫs\G9ûÓýƒfm'Ÿ+[½³/ÆTCX±ñ9}òù¨öù¨Z¬¶WJ•·¨¯èîèÓ›³S¢PôÝ <™ÌtHbwªe° ‚’“܉{„ [[à,vëuðÊ¥\œôÉ×7ÝF¤àç<œ¿öpwÛƒ“6ýïoÈiÙA_‚Nf6‹T K³ fŽôW¼ûã½>CŠï³ókO|Ga+»»]»:=¹Àœ|õj½±Ýˆ“Ë–`#ó•7gÇëkyžÚMLÃmÜËšîe<4ág&mUåÂ-þC¼>E-P¨ºwp°‹š8«˜|‘EŽ ¢×ß9‚(éƒD¡™Í Óû$DqÂI¨Ç«ÞÀƒH$<‚‰;°‘Fk±ˆ5ε4¹ýëOJ¿óì&€ýæÎõ€•Ó×HC£–JÏëL¶Ü9"° °M= c8:¯—²¹µ¥eØÙ-ÄÕ8i[]^C¼‹UAЈÐîîéá-Žñ vn3P·â{B™H4¢qç?šÉìŸ;ž^•O™2'…o~4¢~NUÒ“4ÑÔ“Ù_ûDƒ,Íêò& j[õ]¼ˆˆ4\u¸‡¶+Õb¾4?¿:@Wþ¥—¯™ti&<3³Ëðk÷›M€JoNáP÷ꕪÙ¦m;ŠŒ1¡!ÂÕùJ©†oʃK¬ÔxÐØ bKóË,¡ñѰlnn%Y‚ÿÚÃTðøöÌìJ?Óð˜ªó„ç·²e½-5"D)%X`ý¸Öçã“E‰äx$ZÒRaD¢%sóÃ|ó 0µÌé—L3Ü”¡ø’f:üŒ>ÉR¸d:GnåÊ-AóÕÊÕv:íþÊ,!1Lé Ä…J‹ÉÓ˜ccRïâÊ‹êF'}$Tb·õIØ­<ØÃ±?¡ª{ƵGÔÿóJø—ÙŸ”L©Åáå³Å_3“Ô¹:Qx'·Ú©J“~0(°ÿÁy›,ž—£²'£šW,3ì^ð‘½,Ñ£h7ʤÓÚçÂI¿-Hêæ†î ¤1e„©ìi¥)òŠaÖ˜B‰ä„"h ï£t‰C6WW7WVÕêÚâ"à$2öÜå{ößM'ì×ëùÍÍz‘Å£ðìàŒ…"}žFc&5³º¼r¼·»µ±5?¿¼²´æð&D:ˆ€QlÐÏwБ&h·H&ºäAn´ÙÉül;'%ü¿¤ëˆ¦K¦åÒöo/!ÂÙÜ(ˆ‘QLªBZG¤€ü}Œ«‹àÈ8€Ú29 H^‹}<<Ÿ£DÄÙÒŒp§VW²-ÛEPà!2VߟŸ®/-C˜Y—ƒ4‰íù˜þ½²o¤SÖÀn£D¬o±^ŸGâ³ìÿ¥_.R;ÀcY]qÒ2ÆÓ™¬o ¹°°z°³Ó!w5 ¨ªì—À7õhnoŸ~…,ðÊ[[(ÅØî©½•û©36›„:ÀÐ^½¾pÿv£RÙ.•!ÓýóD ÛÛkKKp!ˆlö¯v H¾t¥X™™YúñíU%Ÿ¯är×gg$ @î.x܃±Š¥a#omý‘ùQ¡åÛõ÷ÈYz8—¨®ÅÀ|ÜÕNÞYgøGêäè ¼z½J¬p5þq™§ëÁ»¸èvÓ\ø¾”É'Q%'‘9Vò_ÿFWFXØA”Av<µŒÌ¦R ` âB¾†[ëšíÂöÛÁIQâfHcœhaÓÚ]A?f2ûægæfÓ³›këg‡~T©žª‹o B S´2Ìû÷7ÍÎ!$ ³ô÷Þßèø€ˆ ¾VkëùTfe~a}»´=¿°aõ$‡ØÆ?õJÌöðß®ÎIÿ5ÑH:ØÙ…kY.UWW¶Þ8G6Í“™ùr³Ê膓ŸÌ,Žñ&¾íI´™Îm´;})Ê.RÙ(ÛЭ³Ä“!šÔ­ž;<©xr±˜/Ú8?<º<<È®­_x½a*ßh¶‡„*ë?®¯È;ÚE½Õ»µ¥ÑË–N×Ë¥ëc´£ÂÉ âa² /èSt™‹-žšY¼"1V;É«/Klý<š’“xD†°j*Šh±D®ŽùѨΜ ÅæâižÜl².Ovjut#½'¶×hX™˜öü¥GðÇ>ÅSÚÄ+¦eDämhz+Þ&¤øi¨t›U22® ÒpSœ´W,Óü©Ç£:±ÆU)”?,]ù%‘ÉÃPx‡cæ=tc`Ú,ºyP/Wç—#‘4OfúvPþ’aºPÅ<¨2ÜϱÀiai¿lðkIݹ@Üú§Á‘j¢:[bÄÌìZjfMe ‹u®df騕i; ‚\¤YµœÏƒoØXY©•Ë‚&@ðå°ýÁzܪV‚óÈ®­B:y§‡’¼g·^'l—'­k¶ø`§™jÂ;.u Pë¢/‰µkÄøÒ`µZñdЧQeÁQŒ{(¨f‡ZÂIž© :ü³3óëžÐKXéÎ~žÐO?×Á×…Òs[Ë+9¡ÎßϳòýÛ¸ÜËÖF„(㫘Š$3k‘û#³ìÉQ 8a‘½Ý[½|p¾¶¹]Þ¯o£ÖõB%’XdH¬èÿ×s.XžJ±|ÙÍ»äZ·ËÕ)[dT0ý‡Wâ'…\ïòøS`ßÊÅŠÃ}< ÈMÈa®ËˆßÑ€ƒÓž]_o¶óI_UOÒ9N}ÛB¿I«ø.è¤ÒP¦†W÷U x„;y¯VûãiäÍp×1‹ÁåÉɯUk;ìž<Þk¹øpû]žžbtpÜfìð@ÞÕêZÎìŠC´¼²²‰¶öǵñ´ÂÎ}”þ€Ï©WëËË9›o–¥ôA<"ñAø¨­µÝ2-§Ûd(„²uvHYÿm\†0u‰Ë\K‹‹?þøý¯¯Þà éÎþJ‚’Àîno¿Ûxåﯯª…üõ)Úœ»µ:n㨢DÅî.@™óöÞÇtéž|DÃZk&³óß×ÉÛs”âÛ ¨èÇ7W…\‰)³¼¢©'¬A›;¦7ù•·PieˆM£|#•k|AU~×/µ¹ã+˛֫µxrÖÜüK:ý‚*ÿã+áÿý-û?ž!ôð˜ªeJ¦Q­MèÆ²!¾ ų1=Sj[Y†`wÝꎙá1¾!žü¦_ô§^á(ϸ´¸ÑmÒÁ½›LÎÎÍÌ6ë¹Í,üìZ¥ÆRº_2§G„ŽÿîQ˜]©Z1ߨ”;Ãp€k«YÀpSöè¨È6„8¼¨ENê{q”oeþQ»ØKšþÙ¨Æd ÷ÓÕ ƒ ¢ÕCŒJïB‚‡˜#“™Ÿ²¸ û”=âô&Ø ÏßEET“x,¢E×ÞòüTºim‰cGP\.Eô›‡$…iu57åˆZ\Qø1àónhE¾¼i¾>=ÍmlÅ¢I°\hl¡¢ÃÕåÕr¾˜Ïæé&]bµe\0Ñ3®~4¬|L5ÀU¦HРiBbhãƒ<;‘’”¦éï1“Dì1¿!]ž>ló¦‚ѹÙùu·/åò%—6àv}GIÍ BD.E®ù|qk K%C< 9§7öäèü7¸¢C žÞG]ÑÍGÜ饅Û°ìÆFaž¤Ë½ƒW?ß ÷j›‘ÜjÐt0Wšr¥æsk륕µb$½ÆÖ„…¤g"0,‚›ÜÞDZ>¦M=¡Mõq­\µÏ`K¢K®À\2³úãõùúzž.u<Ÿh}s [[[¥B¾²²š[ZÉBtñý9²9陑ƑL/‘ž¡{åâø‚¨õååKÇÑ!TJU³3wšÞì¿8>|wÆŠT7ÜÁô½j¦?`z¤ëDùvuzâ ¤þóñ¸Ç'qÔ»æœâæêjeî¿>tt9¿±ñ«ˆ; îUF‹³³ˆŠ©Ñ@EƒFc§íÚÈ=y†Y‘>>Šëà{pv° [[°ް Ö—=Ÿí¯†ï:ÞÝ=ÜÙ٫ׂ³Þ.j8V«T>¢ƒ“£ï/ÎþvyFx…~yª¾9C!ÍÚzAg‰Óåhlk@€„Vˆ H«ú¦»_X–‹qµ“þ ±Íjã¡rÍ"µ=•š+æ D7øk«%ß ’ºMdv}c¯Þ ÃwÁÎŽeü¢‡s§«¼¾Tã`I¦!ý¡Gòß/…ýûSÞÿï;öÿý óߟ ¾”ýÏ+á<ã¿ÓLZCVWT¡wÍ~? Ðj¯±Û&Ÿ£KÌ4±…!µ¿¤Oüi@õ_¯ÄOÇ&Ÿ3ÍOÓÏè&@HÔ2¤¶tfÂ;£‰y@cϨªï†äžÉh;¹¾c7qh‚KݹR>¼ Ž¥¡4x¾Q³n»?ÖÛS3«Íj¹Q©ÜLB@^­³¥–ÿz%{Å4SÅ’Øàh#! >íÍùiµ\™¾V¾S§g–àOàu’Ã[]ÝÔLºWW·îŸß6!ƒ•BpÀq—ˆØW5óO9¿H"‰OÜ9w+ýÖÝô ²Gç¸zH¥^©¬--c˜õe_»)D&•\ŽÃsÐhìÕj€™>^'ø¤+Éô ¿ªÅ€Cš…¶¶Š¡ø’Ê“zûù.$ßK¦ÞÚ•]ò·Ü|+$"u#Ô“„5A#T‰¿c{É0RùF—;RÉ—°ˆÏÁ¡Ö¯$£Í®­íá·n´/ ‰Þ»×V·D*]<=Â1PùS#¼‰Q¾‰«pp‰Îãôg–6­îSjùnXñ¿žp…*$>ÆÌÜ›³Ós̘¸¤¾]o6ÛåmOpN¤u3%f–Ò%Ÿ ™\)«;c´Å2›Ã›ÌmæÕ»;ž£œ/=’ÅR‹È=àÛ´³ý`/í7vqïÔê,©å?_ˆGx&«+6¿°v¼Aœm²oÉ AäÒÒ&SáêáXÁÄÓ”Aì ˆLM@Cé_]/¼A¼J§¿<Ÿ›_hœ³ókvo²‡¦æH¦qù~^Ê„Å@%@fÅ­lffi~a3]P™"4™ÿ9ËÚ/@#Ù ts·ù…uÉ{Û–;£ìLM‚硆Åpê¦mVw8‡€;›ux¢P%¹É…išë³“ýF&³ÀOü¹GðhXþÝì»!ŪîÍø‚>ÕDZ"mK©gTêÅ“Þ(ß@oZHs#u$}Çÿ­¬ûë.·á…®,O—Ãy@!`?Ï"Ó{çæWáFÝm -³÷ :&î[0YL7|¯@ikˆˆ1 p×ÜÝ&?mÊÏ1T:;:8Ù;X^Ék-Éq…“µÌàHŸ3,›ExÛ~cw~a=•YÑš£ý<ÇÀA9Y Ñ–˜™ÛØèîñòw¹ÌVî v´:#[­¬èɽ8jQ©}ØâÁ ึ¸Ø¹' ™\¹“F:Á¤Û ‹ëÏFUOFµÿßoÙfgô¯/ÃêçùùU·/¾°°Z-U÷vš·tKÙìÖê*a÷ùÚÒ×I‚[®ôsİ÷YÂøÃd< @)çó°Á¯p8p,¹ Ò_…™'÷ˆ÷!½g¿]_Z{$óè×OÀ=Y¼³,U`H„‚üv¯R‡v5ÑÑ–Å*ˆpÀü©MàFÂØåÔ’2ùí œÊÖ.-®üp}IJò¤•‡lѯ$‘ü9"4Ëç;SÓ µÏ9…×®î&»Ä†éþ!L,q¸»_.–sÙÂÖf¾Cóõj •Žpë÷áveÛìŒ3ÄÓ cg»öúü”PË·(çQ/ö–éA-;;«k…|ùpwt8Á…ß©5övvá++›³s+§‡ñÄü_û%bµ Ç£ï;üvnW‡Û‰àªÿÿìý÷WbÛÖ5ŒžòþòÝvï}ï}Ã÷<ÏI;W6DD2* €  ¢’$ ¨˜s ç¬"ÁPa‡³ï˜sR¦RË çÙ»µÕl”¥¸XkÍ1û£Þ§ÿÞ$àiàTßžž@B—ú¢FŠO ù7E“Š  hxòÇVÁ³.y+{²…3կעRhîF¨y²Òm5=ÀšÂ«ÊÆ‹ð+,Å-žØKê¬ßà½\ýzÓDú??Hª–‘j.fs˜¿lï0µñôÒqÇÒò¦gß÷‹~0î×jº¾½=ˆ ·×ùa›D;J P«yñÕ7xƒ¹InþR@ :på£ÃQý¤ªÄ? gÈÚÂÕgÖ Fç³9žÔð¬[ñ¢g´‰­nájºúufǬ—|&G¸«ä£]²<«l0Ì›oÎÙê±K6‘X_^¾Š‡. žÜÂâ&}@ý´KÒЫ˜0Ì%cI4T==XÅ;[û«k[‘Pô@ÒÑ{§ÏfÃ>ß!æ„}U ‰’àþ¦b1À(_ $-S$Ø‹µ+…0îÝÛƒ 8 .;ê|}x„ÂõÁÁþÖlO„ÿÁ ¾ÏÇkC §ˆô™_^ÝçÉcm²ÑÄö$9ædÔtöqÈÔ IY’/¦ntõë[9“Oºd¼Aµgo/‰z÷<ÑP–ÁY©@¶Þ¯$¡]ÿø8°¿?€Z¼™ ÇÇ:'a+eðHö1¢’àDö(ƒ¤¢ÉÜÕ?A¦ØÊr7Ï, #¬©;V\Ï0L ú¼Á Õ¤5æk®*KV4cAå9,ÆŠœœ‰¨zC”ÑH¨M'ÒÛÛ^Tƒs¾;µàøùìÄã N[ü¾0u9Ž‘@{zjÙ àór‡‘ *ñÄ`Vœ^f‰=íИsÒèVjgä–ž¦•«mfO6³Ô¯èªïÛÅÊ)ûooÎÉbAöóªøÒ–Å$ÕšqH4_±x,±ä^:H&“ácPWQ+0Ñ¥ÂÜ7“ˆ(_‡ÀÒÉäÙ÷„Áî'cñT<[Wù±Wò¥w#’ïNJ&“ó‡Vd |1Ð$yr•©hVL /Tž‰¶‡ÉÅ"ÑTBcŸmçi‰Ò?SŠ$§+‡t–!…%<‹Ìvˆ"j½#ÍezÅq¶ª¿XÀó¹·¹™M&‘vÌǽÕú*±PI*¤R_¹ˆ(ñ]fÚ¾Lør{߈Ùi Kl+2p‰ƒ%ŸÅ; ªÖH‚ˆô—^¬nŒ@’ñ[»„¦f®î9Mõ#Eú„"~Ò!|ÞÞÿ¢…ÑÃú=>¬âŸ)Þ üóeA9Õ^0˜‡áˆƒAçaMY1I³ôûÛ׿ÿüú·óÓBî`o×;muóÅSm 騤5‰ã!F"°vÏ.2âÿ¿ÅIÌ~ոƚ¿•DŒ$ª½ÞÃtæäfe0ˆ\éDjqyscs÷î÷èbõðð—³Sø°¿ÿös&s8Ö6vsé 1¶„ºº¶Ëë[y:¡Tgì¶C‚»„Ès©“£A¹i@ýú—½ã/{”:ÓB[×y=ñˆ~ƹ”G¥²žŽ9€`7—ÀPL³H¥Ò!2²x| Ö·{eoÏ·³íé±›éü¥‘·÷@vÂêši Fä ³.7lfÙdz}}woÇs˶wYHt£T¥† ŽÌ1€×ãÇ|C·´‰©¦ JÒ†l¤\Ĭùm]ø8^¸ëÀ§è‘ÌPðhMËØÜÑglb뇠ÀÔ…üË Ñ ¢ã/Úøú¶n|¿~¦â9hé²Â,ÿ*Þ;Gå;b\Øz™O ’Þ³”A“¶‹HBWd´Í®£ü$—ËWZï¾Äï$™„Ø¿4×öþ“€5•J•ë\RÄñ^þÈÒòf$A­Òbžœáí\-!«åGGÿzs¶¸´Ý3 Ř„£5ÕÊÕ¼¢*Íð[oËEÈCÄ£V¡ÂÈiqeçSçúD§÷qïR‰H$ˆ"—tI¾·½íÙÝñbÛ–\gÑé»VáË™@n øÂ$;ºßžtpèpRá+Ph¬çú„ý~¤å/­Mn <ŸÇ(ϘNRý¶Û0Y;ð÷™©³âRÈI¾ϾZoújE…}v­™©XXÚN'Ò«ëžÍm¿×Õ˜×:¦ö ÖéƒpÔÁ×C@ÆÄm¬ëJšAJö|] ‘Œša0…ßµŠŸPd?4ñÛÙb©Š/ ÅÊý½“üñg~¼î’ŠUŸÂŠ(_.ðxà·jÄš»Ã—__Ÿýz~z˜Î†üa§kyLcëÇzÓ?´ üí¿±gØ:³œÏ nãYñxRgßÜØ{°æ2ž&àÝ’§’¯a¯i“Ü¼ŠªúcéKô£Û§!jOlA¦-sFëâòÒêëbö³}!èmlz¤ãÖvÎ8 ¤n¬rΨȽ“9²ùŠm0Vy¡ÁNŒ¼áÌ€–žÓÕl±Ñ½´“ާ޲ˆõ {Ï·¼ÿ×?)ß¼b eÚD,NºQ¾}¯kvyye>c6 {}Ùx¼€«køàq?/7VV&¡¡áûŠäôÂM•¤^ü`wôx⩉Iý¢{)OÈãÈ£FÉCüˆd’É£\–ÓÁãqœËMö6¦¼‰=ALSÑHàÌ͈ôÂ/Äk"„Ĺ}‘†ñDɬkÈ98±,Zi°vc67] À™ÑÄ3ÈpP’c¥Ù`!sGœJ=šÑhæ›Xƒ¤9–b¾*­„ÈI×ÊO¿ $½ßhC‰ð¹ºDÖÎ>ƒÍ¹~Ž‹¦åüCbw9L’¥bÝôÆUZR2ƒüø¢×vX>Š%åÚ¿>e´Ñ¥RÕ´kn5AƒZ¿œ•÷ú××§¤Û~ŠÄÉ :|?ãZíàŒ×.ë“Y‡TÞ°¥ƒ7õ]»To]"Â"¨NSÈ“ßúÔ›4*f‰(* #áÄk« H$±;'´6±\'žQ›héÿßOXƒ#F¿?|r|Dj]÷–E…ݨXôíîÖñD¿œ`ö…/Û$Ï`£X(É<$öqxV±Vò;*ßoêcÀíÞÝܼ—×Û£À½;;_JRá*›ð¼Tøåüì ŠÀWû­{{>©Þd_‚UIø|g…<ööñŽÍ¶òMBÀ£vžBô_°€‡£½ßÜÁ›äIô’=ܪâA®˜ËJڼ⾢ŠÿöŠûÏ—½Â!…Ùl_Y^OÅâåÏ®S|ÇJÒ¥T&†Ù°éÞ«ê{R8¶:eëÌD ®H-7ÛKS†ÙîþɧTY+KÁkû$Z¾xª‡¯üûK–{q·ÒÞù`wì. ©~ÆçƦdÕ³iyU«èÅÚžMŒifþ×=}FJ53΀]\UCüy ÐF7Vz$þ 5WΊDjë8ˆY €$Ôô˜¶¸6²É Þí°þJ± GÅ ÃàÈ´Ö0«Ñ;Ñ8$OÞ=€o‘LûCÛ£O¯³©å¥µp \YÿX_JgšçM±ÅÓ€ÐÌÁ­ A7©«GâlãNIG&÷··ƒ¾@!wXzì@… šÉÚfçæ—svŽtfŠñé¾¢•©laO!2\c`Eƒz’àµü!ô@`ÍA \[šØ14¹À—Û–×<ó+Žl®à§^±­…g K¬¢±YÎð O†¡@ép-l§Éí"*Êl ³bqèþêJI—l‰™É;UhbKL;Û^Ÿ7ˆwè{/(,¢XLDB™8š=¾eËùw¶Š!.Œ¥‹h nv~}P>ý¤F }T® ž=‘Ü ·8fWâÑ8öO¯oìëÍólÑä7Í´ IÆì™D žÕL2½°¼ÝÉQEÂQ<,L¼K/:VŸÔëò¯ƒêå ®†‹3¤Â—ÙÚÜŸ_X[[ÛqÍoXf–“±ä9¾…ÃÃfHÊòzá4Ê_¤$!ö÷ó™Ì×`?B& ް˜äA*GÐãäDºf÷½b€õ‘†g2ùù;‰GXG4ì÷£íé‹Þhܻ̯­ïH•ºõõóRéø‚qÙc‘¸ßÊç*Ê dPôu ÂxniͫЯ@¨låiH‚tŸ%1N\‘`øK5œ#}rÑX8ކ"Þ}_ÀÌçÐìÕy©xr|üù÷€$rçÂ>_Äï‡'<„ïñø×Ö·3©t,ŒÌíáâ:g×$JSwŸúI×ðÓ.ùÓ.Y]þ”"þÿ|G´!Õ¬ãüC]í/ Ð~ Hú°Úl2M|]ì3 €2Ùw§åSüžoË¥·'¥‘QC+]<ª™ ØÎ™¶¸"}cœŠ !fä§KÌçG.¬ËIÇ.qvÚ eµ[dîì76²¦dÆT¤3ñHìIY”3Ð¥Åu™JÏý©}ðï}Ï;òQ½wßœCA"8$ßÉX®ÿ+æD§ÀŒíkí¶ëA[î&Å­Ž~ã+šT<<º¾ºÅHsä#Ÿáêª(§ÃÇ™_’ë–W¥cÝlikôUöœ>ÚÞg  -´!™ägŽÌ׺iW‘JŠ¢iHêBô¯YÑø<œy8MÆS¿œ–ãÑ$¥_×Î×Y«FÇú´mžŠÀâÊüX:‘"Dº×E‚5æ¥6žž"´"Q4Ù\Uˆrñ“VŒî^I"Å3,ú²^îÓxöH?™º—F˜E#QDL̦2K‹Ë!¯5Ä‹…kgÜJx¶ ÀDþýä{)æ!‹€\bu}ÿY·ìUþ„2üC»äÇéKš¼¥ÔÆT¼¢ÉþÑ,ü¶epjz>ŒbZ—£ 9”_¨jÖWêÜŸlX¸6Ü—Ç ¾Ý]xñA€Rƒ•Ûß`Í×ÈżÂ%ÿÈe‚º0;;q\ÏûzpQÜþâezýš#2îˆFƒ.ï/19ó…éð„§p÷sdóŸYÁ¼~¶°X8ÚÜ#ùgwaiã÷Ÿßƒs$ó]阱^`…$s„’< U<ÃÁ|rz¡wÐ ²k’è}£{;»‡™ôa:›Ïeˆ/tM¡͵áIB~$Ó§_jà^ é‚cˆã]‹™Þ½cJ´¹ mù—³Ù]å?›E=½e‰#F“ü,Y¹¹¹ô}޾ûc¤B•¿–Ž'% ýÓö¾Iý d€ó’ñ$[ jîp¯š²·°T =#mìÑÎ>ä÷ÝH÷y¦Úhs×|‡†ú>¶Ü©7ÝÊÕµñàÐ4ôªD J˜jŠ)ï׺*G"®ÙÅþaÝÓ®áݲ'éó.ñœ{ãu)sîîúFÔÖv¶ª•=@ í²˜6NˆÛ¤tƒ9 ÛÛÛ¸Úš8Zƒõ áÉr)>æ„å”N$MV÷„Þ%UY¸b …-o§KþÙÔÿœ¦háh:+m+©½Õ&ù?èFG(Ì\å" ÎŽãÚ½²îñx‚;»ÁÙEÈ3ÑH¼»orʸ°°´ýº\ØGX#GøE¹6uxIÕa6·²æÏuÙRWMpö‹“.U’* Ó"‘k¤ÈÒΛRëçÞžËxç¾B*#5 ´vÚõ¤]ðCÛÀOÂ6ò¿i` ˆÇS±žx¸f*wÈ£®õy…®çòÊÎw­ƒ-ì‰föD;WÓÈœxÙ;ÖÀ{IW½¢+ HûGL€MÉðD¹Úñ'\ìÏÆÒ µD¨ >òÔ¹}ÝK°X òGåµpŒ+úp޾¸é¶ÀV²³¹yPå¢}=ÌâZ&yŒ¹"‡7XÜ”Ž3ñ¸K†~þëŒJ¸‘µC4c~|üéqñ:•|â*ñ¦T\YÝýÛ«>\Û\4Ÿu¯[g–°ScHpL¦V1‹’Éíßâòì2VçªlÜF©ƒVšÈÚÎ׳óiç隣ŽbD¥ñìîŸ`Y2ÕuL<ØUBIUùÝéÉ—jå>¤ÝVý1xnûû÷ ï {‚Ý<åÿøA럈G¡@H6fÓ8C^{p éóƒ¤úóDcwÇÇ««;ª Ëœ{-™Hk ®ÿÇÿÝÒ'Ѽ.rÉìÖ¶gymwdj–6 k`N¶ó °½!6ñŸÇbE¤Ñ†õ#ìö¹t"íóGÌŽM•vÁêZßÛ¶ `âøà°tƒùyÜ“ÑX!›‰£´>õ?šE/{O©ò.þ˜fz6Že3Ô œeÍW#;Ô®+#]î¸aîv÷ åEêY‡hueë÷7¯³Ét>›«6ïßJ8BK1Šú}¡6ðh*zÅP¿èyAS w-"J#~´¤*YÑ,pßÔƒ¤NüV=ƒÆæÄ·òï;‡ –X˜ÑpÄYáøR%ùòë#´–9/Á½`JmÔAûU öyŽJ‘ ƒ$¸)äÆmtÆ0𮥠-­<=sÐàõø ´KF|åc濽â?ë–Ã#ô‚&AyÖ%ýë –jLWÆd£Kï ßñíïòº–0‹-ɦ¦çþó•.2Pt/{ÇÙ3_fibM42ÕmÜIxP‡”¦\ ™8.;Å~¾Ù.bûö!+ëzÇø/˼©½öìì ÷eq ùëÉH„@¯v‹l[€Ý¯S„¿é€>×-¢Ÿ©Ã_bL çŸK&Ë»Š›ŽuvP_ë"™SÜ;{{RNÆ¢‘é;Ä×7­ƒß´ ~Û:ˆMxú®Õ_ÏOí |9Ÿ d†¿7‰~¢È[yÈy˜ò5„Rò¤Ñ"¶52Çû†F—[®"M‰Ê¯qé;›&ggÌç!Ú¤óÿ.í6ò“\omg³Ä½ò^Ù R Úñº7 eßÚòîìxmŽåÝ]ÿÛ“Òy©ð9£Çª$]ÊtÿrvòËùéÛÓ²Ù2÷?¾£ÉÔVÔÃuDd'^,diƒ}•>hnåOc›Õе29èR'GîZXñe³elùóiö ¢žðî¤t†‚ãñíë’XÑ¡¨xÔJáM´r&^ÑG¿iwò'$cÖn!šáBúŠ„3^k»©mt1-UÁp6J¿ñ‡ö!Ù¸9—ÊÀ±·çÛßó“‘´ûÞDø•Í=¶h¢§_ýE Ë©³_fÊêÁÑø©ê@ÎÖ+Ö Éí¥$Y»„&¸Â¢ñù ã’mvsiu/K¡ZÑQþZù‰Kÿ1Î*”Œö*Â90¸ü ©ZI¢ ¡G¨¢ŠŽ­µ!u ÌŒ¡ié¸=ŒÅ#ñû"Á¥€Î9»ú”"~IW¶°ÔͬñFÆØ«^Õ­ýL¾Ô13[B“k—ŸÃ“Bö4„u ! $à·°ÆÚ9jjßGjŽG'GùiÛ µ_ÛÄ{Ö=ò¿ŸñxbM2–@±ñKlNÙD"Àž )ÿõI878=²w–¾iõî“IßÞ¼ÿ¼‘{eép¹àÎÞqÞ i øózO¾\±ÖðMÇãÄ$äóAlG4)Ü¿~¬ÃS2‡›ë»f›Û1» [ϿޜÁFeai‹+Ö5³ÇÛyZÀ:]xÈš¯kçiš˜ãLÑÔêÚîQöi^ÀÆT<ŽÇ’޹uŽdº•3E™ÚyºÎu`š­¨hÔý7Pl 70T*õôìÜÊÖÆö‚{uBk0Y­Î­õMµÆÜÐ%üû3:§_žM¦þ8I5­£ nBÃ3‡šô5«»ý]¤}~úÛ9šgAS²:¡¹ÃÏüü=$Õ÷¼/éÔ%l~~x^*™,óÿxÅù®M4ãBòw¤èäÈ 2ñûv·vW×}¬aEh¡cé-´½ »z$žÜáõ†9E4𬫀2ŸÉy½AµÞµ¼º³·ëCFi7lê°¯¤â1âB ×¶”?Š…ãZ“»ÀGŸ®•§m`Mv Ít<ÒÅ”]¦"ÝÂìámX†ä ºEæ¶ 뜉XblÊ.’i”jS<;Pi:›LϹ×[ÙcŒ: xÙ)ýÓ}–b¾"wtQ³yÏrîn•¤E’¨B \dö°­Onå›…rS(Í$3…Šááõð·Jq€TZɘ­‰5Ñ%DèÑ’>#HºDK‡¸ ‰Ž”GܤΩS`¢ L³õ:ãü9¦©Ý{þ9—ƒEº´¼ÓÌPB(lãLZ…ü¬kxRg;L'k¬¸Ë— ÏÎÎÑuL^BÉGb}Rý?ZÄÏiJÀIs ›ï°õ^2– ‡c‹+»£Z—ZïÄ4óüçÏÝR)ØHdøz(Ò—6Nl©™Ìਓ/„Np]‰> 7±h•ï ÕùÃL†0ßKw{®àƒ$"/@À/M·"UÃ6ÃIãNN4xô)¶ý]ßÊʖݱHaËèüQždª‹?ö¢{ä)v½„¬•*4£Cd†í"L{ŸîÒ§±ΘXi#oJ¥h862aoçN¶óõÌñÎdÏ ©JÊ+c.Á)/γ¦WXÏæMöŒ*ý©SúS‡ä‡VÁ÷Íýß·‰þÙ"ú{W5>]::ü"·ƒ¤Ú¯C(m8ЧaïÕ+-`±i¤×‚}^K7µ~µ )—L¤³ä"`Zëò9‚#G!wß\\Ú|Ú!$}.çÜúy‰ý*²×Ù€g¿ËEýÞ³ãCu­[daH=X¥ ¢#y$3MhÓÍ;Ý[FûêÒÖÔ«jfŒvpÆŸtI¿mtqgŸcÞ\ù=—ò \Ãb’¤ú¯×gÛÛž^‘¶™£¡ Lt‰´ùj„ñ[Ò}B265Û3dý©K.1ËÕ¶!…a©oûs©Ì}ÁnùgÀhqKUæ&Æ($T¢‰0좊Ә¹ªeÖÅI^rä]¼ BªM·õ Úàj3åó݃ö¶>s#[û²wŒ%œŠEâ„Z[M®··Ä2üçÅÜô•µ½q½‹.Ò¼d¨;Œ½ì’{k›òÑûkõµ1\ÛƒÏb¡cf[ï0<<3ýÓ ±Ùç §ãi,Ãvô€,è O[[˜£æÚ¸ÚÆø+úˆÙ2{vœ].•Žn”J‚Ì6oÿþþµ3ADo,IRifŸRG¾o“4ÓGƵÎ|6÷ÛëÓªüýqí‡?+ÃæYz#}|¬ùõöòy¢šˆ&˾œŠc‘èø§Rhçözádö·¶ü{{_VXò–NeKTêú§·åÃxVng}½ðåçð/Ô4P.ûý¯üI¶«cI®¶BF„úeœIª‹­`ƒ "®KªûsB8mïÓ¿bªŸ÷¨š™ªA¥E1å¤ h›ÙêÆà$ú0äÿsUE_ ’ðL2*wzêY;mñõ­\ jp¦ZØ“€­^ö¨zGÿó¿‰*JD¢§…ã;Tó¹$r«€“Š]c¢©ó€à€$R(Z_Û^[ÝŒ’I¤Þàa³Á*R¨­í ùÈ„ƒ'5<í×:Èœ¶¹6`?@Æ ˆ‹vø¦Œ”j³Î8k³/f²°õñí [äùë²·ò§[yZÌiU7±§ÚPÑ 2ßhfOüØ!¡òF½Þ :dº^ÛÎ0‡l#†Ó}L±¦>£ë›^Î0R§_CHõÛ·#¤ f"NÍÓ†ìí|Í3šŠÚ7µ±±w‚'Eï/м~ñΔ³ÃÄ5$ê?¢ ZD<ÕÊlô ŒjË¢ÚwMÃtÚ·»{^*}%ÏC6™Œ…BD°ðÑO‰H[ÿr~òóYÙh[naMPúõaH¸ÃÖlóLLœE*µh·šéÛ ¨B6ÛÞ{–¾‰£mbM4±Æ)ýÈE!o¨a<†ŒiÁ‚7Xq~C-ŠÀÔÙg€ÀÚŒ2”heÈ»ùÊ–\1nÊ$’ÿŽ•¤zéÄnÛß?|_žÿѯV±>iEËá^QõÁ•¤Óês%¢1¿7¸²²½ººcYRLØ)ÜñïÛ¥Ïiª§Tå šɸÃåÞ”ŽÛ5Æùl2ýö¤„NdÓÏ»o7öª†Õ§{Ëë »¶9röÓ@J†Â±ùáI7Ä®ž^âÊìX Zhì@m”Î~};_ûœ¦xJâJ4®¹µS@'ÄŸ'v׊P2©ŸžIÆâ¯ËEŒÂ‘¢R"–0Ú—Ø4´Ž©}צU}1‰¥p÷Hœp}†vžfTãLÇ+ãåÅûÝÙÃl2•Œ'—·iý$‡QÚ¡tÃé´ñGW.+=aðFWº±6G¹ÄÂêá´ÁºÈDé×½bŒýÐ.¥öMŒiœkk{Á@4›Ê†‚Ñ©éùî>u+SõEö¢gŒ‚·ÑxýBÁÒ].ØÄmôz·Çª!ÕÁ£Ç þˆmXíê“[ff×¶w¼óÜö¶çî>VÄâÙúÃfÛ"K„€QCï8<ƯzFä*}6ýùìä. TÐë‚nZ•ií££w'¥ßΑúöäã‘ÿò³ZøaB)6|Í8)›Hx¶¶¾øæ}‚å¡}¸zDìù-9úšœæª²À$!!Ð;·Ûr©< 5oò/þ)à¾ÇíìO¡FÖ&äŠFZÙýÓDî¸& WQè%R5²Š9ò<Àã´­¼©Îé®ÄΥT[U“¶ië¢xÑ ö#qÿ…!sUè“'ÍÀn„['z±Ò,1¾ê‘s§ÖV6â¡p")|Ávòǃ¤U3@êPzôþ=Â@(µ-c'ÈâušèèâébÜ¿”¿ûÌIx(ô^sX5S*ÿzs~ÎhsO»†Ÿu+z`º…¥†}‹*2·ñu/zÕo•õ h×7öóëÍ åwÃÌñ6ž¦ôÞñ½Õ ­HwÇÆ:ÃNªÈ><…fÔ¥³ÜaK¯ØBEV8fê AxœºFxp;ú´/è£MtÅŒk9ÉIØû PR±„\eø©™ÛÉ–›í‹ÉX¤œ,¯ìÈ݃æÉ ~âï.ÜÊ@ €àdàäÛ9ãƒ+qg¦m±*U€ÚX©ŒÑêfŠ4¯=C°MŠ”¸°Ú¸?¾úñüËx.ÏF´ ðÚvv£jÅ—Ôðªwüi—ÀkOÍjõ>¥Ž<íFÚ•¸%8•¥zI³•‘æêÌO®;ÜwieÞñÊ£U Oƒ?Èá:ûµíÜIɨÕë äÒéÃlÆë íìx±BÛÝúk¸€”ˆ&Ƶ޶òûö¡'ÔDÓî–r'µz;DäŸÏÎîX—"«’pŸ!ÂÜ®èCÆ~‹÷ôHùÔbljH„;}Õ•¤ƒÏöö×P¡IÅbžºZKŒ’a÷±¯[\z,£Áà]n.6Ìøwwï)žü©…‹b¡p<BD l øˆƒ_¤ò‡ PϦÒVçÄ=,J‡:œ÷8*aãs9LZÛðÆ!r]‘jfPaí±Lé]+K£“VÖ ¦’*“Ò¤ž?dkdOHµÙx4“Lxv=ÙDòM©ô¦jìú§ $•°è*d„¸÷¸ÊËð†±pô0›}S.Ÿ‹5ìL¶Xˆì>o@c°k,3ÎÅ­­½l:sÇé*ä݆ÏùÞË¸ÚØ,²±éÙÚö©õsÝ2ùZÚùúvžöQØ€‘œÂ×v@N|M#CÝÆÓ¶ò´âq—Ö¼²¼îuºwé°É ÌèǤŽî¡6gíY©C{¿áCÓÄF6´¡‰"@Œ98ZùÓè;†Ž>];oª•9:¤2üaØä"¡èé1"rÙÝí}Ù¸õ%UÒΑ«í[›s•&2v ,½$_ÉÂŒؼá ç*‘uë¢òáI7ý‹îyžÔóî:a›Î¬®í.,n¶2pq°øx¥ŒDJ\=¨óhã­rU‹2 †hÎØvš˜µÁ-kìmçkÚ8šföD [݂̓ŸtÉèÂ×fæx+¾?Ñ‚˜Ëšv¾¶³Oy6t3!ÀŠ˜Œ¼Þtt Ñ<W¹ô1•02ÅFRÅRê‚§‹2`îâŒMϹ7¶·½™ìbóäß”K?Ÿ–ï’eÂ`¸üÖ–‡3¨ý±CòŒ¦ß%0:äMÆBA@Þ¨_|ŸÖ ©1˽­­¯g\¿åÇã1¼–ÉOþ“TpÈ¿·WüÒ— Nöl8j*\„‰…oF"€œ¾–¦lyÙ,b›ÕÉÁß~‘‰ÀÉû*t_òjcîyØï?H%BÀ¶ DzÉôGŽýKàu*š(#%äâïoÏ!˜9ý0‘Ã÷|!-áwð^¡ ©« L3¤¨HÄÄ¤Ñ eС•%±²‡-L©õýJÒ°‹64Ó9`êPÛìó¥#ä¼óºT ò’„¡ò¯øc‚$,ºÇò’äõc=LÄsum[oš]ZÚ øBgD³xü¶\‚ÿr¸V(,)3,Séww÷¾` ·/ïZIªÎ°Ü7B3¾Dó´Sü´kä%}à24´pÝ‹…µjjDlü™º…:¼a{6•ùõíY(Sjça‹íAV63téŒ`lž¯šÅÕG+Wæ˜0¯g6Z7GfìÕÑghbN±ÄFñø†ñÀ{ï_¯ÑE {‹µ..o±*¡tjnnõ ô·*2ׯKEØRá}4Ó³ô~õ¸Î5¿¸åóÂ#4ìÐ3jÔ‚‹ƒ…gG !䌸¹Ê%Ò‰c£×²æ9˜@ƒ}÷.* ‰¥X \N©oØGà pCä输&wXՇĤìäžìqA9c .±ÖîîÇדá€MwgÇCã)›iÕ„-K&¢‰mÏ \ÛF›¬s^O ŽâNS¡T)cÜ­’ô )à äú¿7 šYh6Rh&"‡Ø'Ë ‰~Å^´ÒµÅ.l°Ït‰lJ§Þºjvl°Ä–Ö¾iBˆ£‹ªé•L*3ãÞiåbëÎnè·ó“w'hœ>ˆ¹—÷—×—!”ùûb‘fÀ¯ˆF¦¿o—´ñ4}Ê€‰"0ÑÍOºUb…ñ0YÇñ½¤Ô³5BÑ@à+ÇF5rîIU£ï¼T:H¥ç£ê@ò'Èœq¸È}Qo¯ŠJ2ÕÙ’b"`Mßþ~:‘ø\Z+#ŸOc›<ö[ñ0¹Ýß½„|ŸÒ©X,׌F³‰¼I:?Âc}°‡&c1ø{ÉTÞ\=&BógEDœÀ– ¥j‰á§Ãt&ìïxZèÃÿßïº]s«Ùd:ŠÁ'*ßo‚õûŠ0á!½´¼=ªq0S?uJŸtÉ~ê’=ëVÒ„ºÞ!ã%”í‘k˜ŒáYì¡é ü˪µöB *±°B2ç‚ iØ…oe®îA[w¿ffÆýóÙI*†êW[u„Ï ×å¼T|wZ&¹.ƒÌWt½?H":Ì¡§ Þ¶¦ÀVyóûMS+ßÔ-²rbH]ˆ#vªË™DrܸØÖø1³ [§(GUP$%U*¼C¾W…7e4¢ù¶ŒÄˆí³€´¦[¹S¬ñ¿…d¸S/èãOº”?vHèJ¾Ü¢ÒºXb3[j«çØrW¯´¦Ç¸ðàJàÜ„F˶İYÚxº»d¹!èWÅ+_/›ÏÃõ{Z²»VÚ¸ˆ¯ý~£­rbŸ$Õj3ä5`\VÅŒe­tãÅL6ZáèŸÊKêKw$rU*@# ”¾)Ñø:<Éíï8’éo;F^öN4s4­\]Gÿ4Md¢ Ú:úô ŒñføÎ€©?ݯp8æ6%“‹½Ã$qêaï]Þ@_$¹»EV2°€½TÑ‚éìÓ·²Æ¤£æÆIDƉÖÂ"¯ÕÈÓ’Š'ÙƒZ€VÝ8©ñµkçó‰@Ru£ªO'’‚]¨ö׫„ÄEŽ¢¦Ùøc¸[qI|K>ÇUÎ_m·]ºþ×þ¡ÚóCJ’ýÆn®Ü=;ï÷ú|û>ïž' =@–†xRÂ1ç^oaª™èÙYñÈ.R“‚(ùCû Ý±±ëƒ„$bNLF®`Y!]ãÏ"ÃXO‚©\S+* á¥rÅõè˜ü0¦¦VÄÞâÁ` kÐÞ½ïÎûÙúA×NõÖP]íÌOñ HŒûûžÝÝ/Rª“Ia£¸\Ò`}ÿR)À N¾2%n€•È Œª_wç'& RN>¨Ä1€Dy\="þ<ð ÁÕxð†þóI9›L dú§]âçÝÒç]ÃO(Òo[D=Ã6Çä“8œæ³«æð+ŠàU"·ä³¹ÓãÂ{šÅ¤PK —Î8]«½‚‰ݲÝ#Ïhh6…"˜FdMbP ¨!D“%T&ö€ªÚz.ðÇV IdéB#Ø ê&|kIÝâ ƒ,H'ÉÉ’ÍÃλ¤õÝ<¥|T¿¾¶‘ŒÅ“‘(njæÉ³þàá=¸ ¯Ë¨&l˜¶wõŠ:{xýÒõ•5ò˜¦­.‡k~~yɽt˜N½=9©ˆA¿ïóu $=Va¹V¾&ZõD!&X*Yóì Å‹‡“P»mM40¤.ø]òt›¯Ö“¬°‘7³Ô‘ilš;¤¥pF(,™Õ¾Ž§ŽáC%bIOBù4ÖJ@Ôu¢Êx©çý•€¤*Y);$©–®õQ©!$ø1>|u÷.!ÅJ¯ ;Í"¦cßt#U49e€å9±øµe»$`D2~{ÛÇi_öŽ·ñõݘdÖ#qÐÅöŽ~sO¿zgsë—³S’Ôú#ÒÜ*ˆ²dkç¥Â[diy°º¸´²¸Ëó—óÓ“ãügƒ)‚Ä1}jv(5¡$n…ÂÈ¥Ó*‚;" ܺü½¸‹>h5Dõ°Ïõû¸Ógòûaˆbîs$$ôaâÔ†l¼àSÄãD†êó7³Ê˜•'çP£Ÿ^-à!ñFÌîBþ¤…Béº _‰ø8UóöO'q^;½8. !:×cxÎTÊ 1¼ÁÁç½×G(àD÷ ¤P âäS*’·îìÓä ;0 ÛM¿Ìdu®´³FþúœóÏ&AcïˆJã\_ßË":<ÿ¹jµ“ꊅwht âÀzrŒØ¥£<¬Óh86apuóÇáµp¦Ð.&²Ð¦I¥h„)¡õš&ï)›`–Å ÄdŠÐ™6&!]Êú*5;„kCâ_ˆ¡:wØ6<áTL:(<5•«r»3èÉŽŸ¢œàÐ9ã úüçØãúž$¤€‡°løÅÿõ_m#£x·óbñÝÙɯ¯Ïþõæ, ÐØCíÌ‘&ºì%UBcKºÙ”D>‘ŽGá:ž¡Ú‚ €Õ~>;É%AVfuUQv’?®ïß“„æa£€S"lX†zžÈÌH-c»8ªF—žiÂ(—Q8F\¶Â…qÄÕ@’°Â8“àÅ$‰œtÿ°þ9M…XÆB3½"5ôž§IC$qG¯J¾'”\}ì.0®'diåiÛ9ã[›Þ×¥û UC º\Ó O{Ô¬aǤe]61×Á×ÑÄì çh°H§Eã°×:™U+4ŽâŤ*H²ÃÎßÁM¼o‰òª‡‰Ìí}ºF¦’¡—4ÕSÊp+K!™Ž…c€Îá„ómœ X¨4±­2Ô¦p_2÷ø·I5ùîöD˜ŸÏÊo**ZJDâ+«;“úî º·o”Ê‘ÿý9½opԻ熣HQéoÞ5¿a"ôŒ²/ÀCá0Ä™ºâ2-„±½¾Pò›ç*iÒç*`Ü…Ù!=‰é;0ÉÀ6røz„x !še^žxúRãu©TÈë…«}S«—Ø×§b±³+fŽ$‘.a¤EŒ„CÒ¦zŸ1öè5¤,¶=¬zÌ=Ö›;Àt@®ݾêÉüw|P±[¸Dì#cpõô¦¹6–ò]…(Èu²DV¤Š8©_ßÌÑ=ü]‹èi—|T;›I¥rïNÊp¼)—ÐQ*®oî#…ý\n{Ç#·tq”­ÐÆÃÁ軓’\mka(_ÐU Lug¿H·ày#c¸ær½Þ‚G‹”KÔAtVlÌUÀWÃò2Sb§ h™2çMñ/xrØ>6a ùüÞÝ}±Âð¢wüM6:aÊÄ£ÙTÒnŸíåŠw¶vq§ÿð^ˆõ_oÎ ÙÔà°úþHg Ç£Á€Ä_ÎÎŽ2éåÅÕ¹ù“Õõ¬½ŸÞ§ìékèÅÆÝ£Ï»åO:ŦdT==¥› O‰G´FëüòʶÏã/²>O`muÓ³»W;/aþL<3È£W&k,ƒ ^ ±p¸vV.¬%R@ºAÅá&°bQ† W±;q\µ†5||7É8pó 4Y š‘ž¦ Ú0g¾VCªPýoI„¡ri<ª*¡bé§ 7›>Ã÷í2Åä̹ð)2ÙL2­³,µp5¨:d¥ Œm\ @:X€WX“3Ε­m[îÀàÆÅϲåó“:¼¨$H¤ö)U¹zX„4l¾Fé7"‚SÝÔ«Ô[GÔö9÷¤p†°0ãl=‘ükk·}$TB Çöû<§JsM¹ÀR,ð”óÓ¨”X«-]ÛnëÁ¾~Ï©’ï^Ò¥²14b}¥=Té)$S…;l6ÙH¹ˆ&•º%Èb;X#Üq"„ û›F£Oáœ[ÛÜÜsήNêlù?^ñþÏÖ¼àþ³Yð}›èûVá¾àþï»;hT†Àd´å? ­Äþö6àEÌÌF‚Hæû´0.i=ì[Q¼Ã^NŠÙ~Üý)Ænà×å2ìÜ™j¥ÿj]ü½†TÝi‘ó¯o³b‚CÿªÂ$` z•Âr"?éÖ¥0° ÒŽp§àç!'?/•N>ËŠx’ÔÆøüþ\R…4 öõºáüO6™$ÊÆðþïN‘â¯çgðR‹×¥R}ÒÚƒTF:jù¾]ÜÐ; -rÿ²*êì×A†ÙÁÓµr¦`o +ŸÒ”Œq½eù0“{]*œÁŸ_ÜtÍ­ïïú&tÎg±lܪ5Í73O(ò—=ª—=ÊW½ª)r¾tÚ`q·q&˜“aÝ–™Š«’¼¢ir ÕçrdL[ØÎCíåë7‹Ê(îŽçó7‚$\Iš£Lt¡¾G mãMQQ Ñ53UÝ<•§ü¡Mô_/¸üÁ±t1K¡é6ªÐBÃL|¸w ½ªŸ:ÄO»¤€‡þ×Oœ¿5ôµ²”ô©Ù4Oªka)¿kú®¹¿_oÊ¥½9ÿýÝùïoÏ~÷Ž_ÎN~>=ùíÍùa*q˜Œýöúì÷7çoOJs ëƒ#ú1}ß ÇüÞÐO«T˜~>-/®l·°T­\¤x×%0cÖ«…3EG&ž˜º0h…í¦™£áHM +»g…<ÚÙCÞ`YøGóÀâ&ºâ]‰„T¸Í,5à*H‰ Qð!0¶pµÍìI Ćôž¿6V]ª^¿·Œ®ÀÏCîçÆ[¹½ópÿ¨¿½“ðp{$NÜz@N¹Ø½k Gó‚¦Oå’©w§§pÅßž -él8 îõûKÅj—Šp ò™¬L©ù_?öü³EÔÈoìUöòåÊ1½P:Õ@—½ «uá¼v£®ª>!vu°Óð…‘\¾ÆÞQÔû˜n`Œ?é’×&iè‘‹•Æ­-Oéè0 dâ ¤¶½}JfSÏÞ~{z,NºN»V, Èó ’H R±ˆ¿ÝñãIØœà¶÷é©hªËAd 8¸Iâ{€¤z» â•]W­Ì©‰iwñðàän¼æ¶FYC†g=cxNÁ‚t(ð†÷Š9étoîòzóÙŒev“‚6l—ÄÞIËõ“ê*ÕÉDÍÁê"¢šD›±1±¡4b’Æ_eÿÒ ü»W’È5ÄQ-Ö$aîW, Á¬òèÙÕ‘ÃK«òx ¨âDÔxöh+M(†ÂgX$·–ãÂrøkŽô ©£¡ÈW&,‹ÐX.ë¬û…îÄ_H±YS½"ôuÙã &°»3ÄúÃL6Œì{Bn÷ŠBéÎ?â$ï]2{ÄF …ˆ˜!A`¨ÚÓ© ø1ïÎÎ×£~„ì0)éÏ_µÒ&>=À ¤XBèä©$ÕåããKὌUP¡÷ÁkôÕã ùý~¯—T@k¿X)à{—‰ÅByww[Pð â÷Ãð0q¾"óe››ûªI›hÄÐ'Õ ëø]ŸDgw®˜l‹ô>å¤Î>¡sÉÇ­ªÉ™—ÝÃÿh–ÝÔ+ïd)»¸ªÅåÍw'¥_NËÇÙ\"O'Ò뛥n¾³¢11Ìžkãi!õ"Ó¤ȈZy:µañ %j±x<í8K°µß¶J»Ó|$Õl€ªD(ì[»ñŒ*9zÄQ\r!à“¤é›\Я°å©–¹Ê%´ƒˆÌì‘B´ýø¨ˆu’°¢ ááÖ4—‰ J¦Æ—ôQîàD*ÙÞØJÔ€uà@Ñ…ù%—cö4´¼´º¶²^8Ì•ñø‘Dòí{tÓ3- ÅKúØ+úx'o²³ùu "®R85wVåºHÔÃ!6ÂCçƒÎ]†fÖÄóåSŠ”ÊÝÞòäS‰Õ¥uÏžÙ\ FëìA:özÓo]øÃËþ€'Ñ5öŽuòñh›ØÎ@v6óõ´¤zâöý…pÜXƒÔA˜t–ÕÊÀüÝ›ù£d<á^ÜPLÍôÉÌL4sµ}úV®¦©æ ƒÁh.ßY[‡0—‰E%ãŽö><dÞ­¾$v—•ðHº2¨uQ¶½Œ–ˆ®¦‹<Ÿdή&kyõïþ[W’*Í5Å|gŸŽ£X¤#vbç Ú)"”½H&æú•NR®^‡‹r7§ ¦k:I=á· #êd)FÇtdš)DTF:µŒMÚº‡þÑÀë—LÝ®1KJÔðbϯ˜œéä!ŠX¿JÉ„‹ Nµ©Gf´Î³%F÷âο^Ÿ¾)‰.)À-ä2ÉpöÅOÄ)ù`†›dq`-œã†Ô¸¹•%óé„yj­½«\ÏxÎ;PÆÝü¯$Õ57HŠCÑ(Àbèõûk µkÆß²Yr©!§’a7H‰¯¯U+Uç¥R ây<þÈVw¹\ØçƒSº¯+IB €ÜC(××*zJ•ýÔ9ü„"{Ò%Ò5ò”*EW>§Ê¾m>ï–ÃþþµºF[8“íí,""ŒÎS>‹ã¬³³_ˆŠ‰wtRgêš(ýÀ°H2©rÍ­Ã& FÛ™ÒݯZcõîû ¹œwo?‰>â’& )ûÕƒ$ò‡òÙÜÞ^à(“›[Ú}ÅÖ2p¶MÐd`$+ÑI"Üþ;Ç^” ¤N¸³Zóî=—ðÀü‰Ž"ÁÈÎŽ[Úå ¶¥VßQ‘Â6ëÞŒEâÄþ¼XÜ\]…}"è ±ÄH. V#£NÅàa•¤r‘…*V¨ðQu·VD™¯÷”¾Ÿý›‚¤új|Þ6®¦G:Û¯ZàŒÌREöÑÙQÃÊèôÊÜò¾J7 Æ©³uÜÉ…ëŒÛÜØµ ©9töO 冠×wz|t^*"G±ðö¤ F™Â‰Ú†~¢HŸv 7ôHˆBÝ ÏóÑI!ï÷… ~Ò1ô’¦ìì3`û¼ Yÿ-W·ÈÊœtÍ­Š”¶)ã|Iv!’bÝö™Š¢öÖçFº:®8#Š£Ç%hríÌ6ìÓ°Á׬X?©ÍV ¶#çïê<m˜N/èñìmmŠÌW…j`Ž´ÆÈëÃL† Ùwbj˜ãöè">.ÈUÕùÁò ¿UÄìÒ,Vñíí=¢0MIò®ù÷ö.¹‹ÜQˆ öÁþaý7­âföD+·ÒÒBú«#] ÿ–Í>c_Hü}l ÿ G¿¡™9ÞÀkdL¼b¨›9Sm|]{ßtç€ ·À*i SæjåLR…æV¾¡…£UjçËÈ=¢âïknÄÈ„í›Ö¡î~-WbìÐwôñ¯WÒNœ·ÏWÔ®ó8ž¶šÇá…3ò¦¾™bƒåO0Â)!ÝHlNðˆ iö}bæb5™® %$¡$¶w Mm<}_ßÞR×Äžü±Cü´Sü„:òìåÅÕ_ÎO1]úÍ’d3ËKëm é?ZÅ´þÉÑI+„ÈžAs ; N$Ät- ï“*ú+| Ë-$r0ƒì·0Ƭ´?‡l˜Æ4 ÷ï»6)}`rHišÐÍÈÆŒÓ܄ƶ³ã B‰p(—H”iaÿ»T’ˆ?¹Tp}.•eKÌý&:6å ¾6p‹éR O¬¸x©’y{·² „F¶\/zÇiçÜd?§w»ÔÅ#œ‡Uõôà<–·æ6ÓÙ×ÅBù¨B)Hâä5—ʤé¥å]4Šìu—šnh·ÝÔ™®£ã,\=ê•þ;U’j"ݳÚyƒc{k'k¶[hÞØôýþóù¯g¥p0&™pÁ¢£‰±b{m_VB¯÷nÃ0éQ5±§šè#"™Æ5뎆ÂAÄ2³ÜD—CvÛÄofŽ5öª ¤HÇLùÜÁM³ðh9\«/iòW½c}‹¦»DVº´Z‡vöH\ ‘A£³Ì-lð$Ɔyß°~eu›QÖÖoºŽ¢û™ȯö67á+l®·/“Ê|S2ôz?ƒú"¢Cb;;ñª2SS'ሃð_€3ÐxüW"H]½DD©Õç¢Ñ õi<½¯K5Ñ›Õ;?Æ. Áe ûýðñÌ/ž#Í‚PÈ»·GÔ#ïÎa ç0m]ø¦Eô”:ÒÁ×c*f°T[Zb;]jßp¼g{›xßqêûæ]óëO)ÒVަkÀ€}¸m=UÓë m0Šl¾W⢽bÚ\:ds¸ÕŽ`P¯Ž‹vv5!AË­S`âI #jëî^ —μ;-®èz #£{~i‡+³¶õM÷G,ù…îÝUÚ»Pª 6 =5LfµÞ×càƒ±½ö¢’n̤/Êæ(#Ä8ÉŽiݨÛÕÄšlc*Fupüz~¶º²ÁÒ.ú®]¢ÖÏzö½›ÛÙDrueS °õˆ½?¾u>H;Gv°¯Ã_GMÇš¼!3$….â/Û+O×N›g–V×v{ûÆ¢¡(•722n<Îf ÐTyåY'pïsX46†uM`5/̯$Õò-X<Ñp¼ƒ;ÑÀœ€×ZŸfŠÐÜÑÔÉ:©Aûú¹ÊkïÑû*ˆ–D˜þLõSŠdgÇG\Hï^*¯RŽŽÞ dÈͦXD³„’Â’K'R´)ؼQÓm¸¾éörGô‘Ç¿#Hª µÕnh+k´{Ь5¯è1ëùumŠ¡`$ŒåÒ¹ƒL.›ÎL˜Vz$µQ€›‹ID´ã¤Ôg·uôŸv+Ð1òïÓ7²§šùT“~wR!!]í°õ@вº¾KéÓv˜Rbùà¾/©ôjÈÂsþ•.`ƒGAHW½2ß«$]…Q¹XvY•“`G˜á±DS!ðç³2jzý4¾â›Ö!4NÅŸµxv÷×W·åc–Nþ$*#I]U/÷÷Ò ðó4’*{OͯjEô‡±à òozÅœ`ia+0ÌŽiTžjÒàˆEâìÚSëìÞOB »3¯ÃR„8BäƒÝ>3Hª&=ùx41-©ˆÇîûûÄ.÷Zú6aC‡qÍÑŠ}¾ˆÏ0,‘¿dHð‰ˆ_(2‹žííC\â"Ü©z÷§»Vùlöò#\róíî~ ´zm»»wa#¡RÒ =œ[Þ5üŒ¦låi©Øø™p«ßÖ©…Êe†lžJÜͯw丄™ª¬eù,,dÚ½¯ëîS{÷}X¤àð¦â"6³ÏÚ¿éT2¤3té .”÷\|pR_éhÎß!Òã¶Ø°Uè…wµ’t7S QVFQ™ÎÛ äñÜaÓȤÝï ä’)«}~@2ù¬Kü¢gþ Y»÷O?ëi I{4Í]jCº*í‹äÝ äû ©ÞÕ|Vµ}IIiÈN´¾¤kL ›ûmÎåL*5:is/¬Ç‘„Rø(“¾o}˜(±BÆpþ¾EÉ¿H"³gEêaû9+ûŸ<¾ÅÅ­Iãrï•"0ÑðÌ‚J¢î«¢Ûø@yÝV'W1‡uüLÇ¿ )Õ:çQ6™Í£œö…X¡ö¹\:ë˜]ãˆõ¨PÜ;ìÄ“nî[FCÿIw+#-VHf2Wc”*²4±§„#Ͼ?—BwÇÁ£“Â1 ¤¹B$ßrÔ…àŰ:˜O¤³ÂÓXœëӖŽ=ÿëRqnq‹-5·p<¿èV´1d‘P¤Òe ¦N…ãób!ŠNMÏÓE†Ž$´MXHNƒ:hëàM./o¼)—^0˜x],¾;)]©k¾‚´•£ÑÒG,ä?Ò¨H° ìD¹|à9srJD‘Ž˜£Š‚Xñ©iI¤bAb@·[L¨jîlD"ˆd! ¡"ž‡ôIpœ?z‡³-Uø‘2EÀíãÕ>X#µ àÚý}RÞƒk•y$ÃõK¼"Àñpß Åêv×/\aÍKUæoš›ú¢–Fq@pdþÚ¶b:ÏwÚ®Š(r®(ì_´°•]2ÓÊÓ)L‰H„Ìù_ª âÆüò.Mdì01pÄæ(’ ÎÞ[Xh.{…óØÁ–HæÖœÝ.·ÛjººµR † s®õˆíýæ‘qƵšŠF~sšO§D2ݾàþÐ.L‡dDfDõ´¶ñµÍHÒŠ†ú.Ê}îz}Ì;}¶K•$ÕâµS98 Y]ڛؓ#“Ž™Q6nµ;W¤Êiù˜iwÇ›ÄNCð|¡»?¸(ïL&%N}~T—‘ªÎ‚°‘Ä‘Yfv‘7¥âÖ¶Ÿ'³¶rõýFØ{h¸°„²*Å›]¹wJðœ÷ˆnÉ6»=e^eHl@ÒO]òiëb!wð8'C¡gw7[5ìƒoj¦çžSe­\-TÅ8i¾þѺ‚ÿ ’®mê×÷ÖI]Z3[ ¹ƒ§áKô&ëÂQî æò›J$¥c–§Ô‘®1+^7iÍ«.o5éÑŠ›,R‰£‘5Ù'·Ì/mcÉ€˜h8î˜]obª〳›z•;Ûž2.àÃMÏ&á9Ç£q¤Ï˃ûŽG‰y®ü÷BÔî3q†t~ª¸Ôª 7IÝ"ÉœL&â÷“^Iñs©Bך5„D\®£#7Œ3’ØÇ”ø»í¬¯CÈB„›@à“¶Û*“w‡‡q,ƒtI.ø.±>Î1@%Lô&oB|y!éùà>"iš ]¢KþXÝ.<ÇwüAÂ-…š¼ÖãöõŠui9\@.oIäSC&ÏŒiß¶uðuˆJWeE'eä¢$q){ä®2†ç`ÁÊýá²Öº©Œ3Ã¶ÞÆÛßñ¾½Ò¿*Øqœ;ÜØØ÷xFÇÆs†–ÇÙꄯípÝÔãa·Zˆ<–?¬UwçJ•û2'é½´¯&C¬˜'q _>3®›—¨,Jµ9¦bqçì*H݆D3')ýzºØÞS‘²W‡gÉ0dØCÞ}Ëìô@Ò¥Lz‚½(UE[­<u@ÛÄPIT¦P 22nž28²É š“BSµÞ»K(ÁÏ@Pöï ’n(gX,ç ãÞë OÛ×$ã.–Ĉ§ žÚº‡ìˆL†ï&QˆÀ]j"Ö07fXИYC°iYÚûõ/{Gƒú` B õ>>’B$£žËr÷Òvß°¹½Ï@©â$FݰäUâùŸ éÖ.^òÙq]êl`ŒHêM)-‹Û5¿ Fϊǰv¶·=îÅÍIãBW¿¾iÕd«®/&ÕFTjÍqÔãj¨š@0FôTë\휱vä6®QíÜÒò–Ïüùôö€Ý…«‚ÿíâ©[ØãMl 6¶õÈê@‰µ­ÏHᎭ¯m¾9)îÄrEÆX~¿o?Qe(|¶zÒ5Î…ÂA: §äßÛ y½¨«åó­.-Á?‘{Vèþ¹SmÎ1Ï|>Žò¯}æàƒäp"J©áƒx÷öŽJQ¸öú|H´é‘B(6-Éd’9$Š”ð‰.®Ÿ¹Â-ˆ`ŸÝcl'zm ®3|Ýßó÷ItO(Ã|mg?q1ŸÁ%‰ù BR\›4ÚXí•"Oñ“‹JDE=x¦½Ï8 3D‚áÛŸì6xdw­<éÓŽÌFY˜_p"°òòëUüDg à×Ë'ÒÔÅFo•÷ÿK­%Y©]pMæ{‡çz$³´A›Ö´°½¹e³Í9sªñéÞñÇ@=€IDATŽ ÒÍž®gÈÞÊEDZTÈÁ#º¤¢ÄƒØ^Xü ÞõÞ½ÃU’®â$â={g;_×ÌžbŠ´áPt}}Oª2.¯ly÷éD 6]ÏÎÞÝW,$y°ÚëýºÿÝA|ØqJD2oìÖæŠñ!¡ÈŒ\cèó'HºiÕÔªÅpC»DöÖ>cC¯¢…§íäM dÓb¥‘Ö§ZÛØƒ¬öƒÂá!a&¹—v)¨°oÁb°®Zà»Ä ¯× "{øù6ž’+‹kí(‹ÊHs ëËGlœ0ÌášÊá¸ÖÉk2YÏ~`Lëø[ÓÐóÕËÞ±6¾®Û€Óv·#~$¹˜:Lß4è öw'åbZõž(ØóRÑ(Úù`ƒ_ʤ»ÂÚ`5_[Ø„ òøöö Ÿ½•«ÓvD’^øñÌùÇÔúqgRÀWdy¥-ˆ_Q@¸sÅëö`dMŸËÉT¥Úô¦\¾EéÜ#À|ÀKﳯ38g³±PéiƒAìZS_é„@ýËùi8…üÿE÷ð7mÒfŽÂ‰3_Ôê3‹W‹IüñUد$}p;®ŸeÆ5{3G72a½Ý1‚ÌÙ|¡.Þø÷9ò­0ÕX¤€·ø£‹ýãKœ:"ÇÍSleHä"4C yD¡È{è$]BH½E‡g”ŽdZ0¬Ñl#j …¯ib(ÛXJ­-\mbÎ;Xò¹v¾–*4cA£ù÷(,ÊÊ{Öã{—ÈnI7à$Ò7E‚Ý™.2˜g–6·DÒJ¹L&O-®xÌÎ-±QÈßï¾-\øBÿ ’® bÚØ!°´÷CVªÒ륃l>›…[ùëÙI4œ`jaùXìKª)»rÒæ¼TÄél~iuÒ‡Dx+ nYtXÏFZ¬—EìÆ!{;wª•;ÕÌ[[ß;ÍϸV{†Ÿu‰rƒDeŽLÿÔ!}Ù;ÚÈkbM¶ K¢©NþÔ+ÆD#k²«ß Ÿµº¶æ—öd“³-\ͪª>l4Í,¸W‚¾,R‰¹oõ>”g{;ÿ†¤ EÎQ&C"1GC¥ýýû±‘êXÕ„X]Â¥pA`}%±379H“1Wõ5CEܺIþOÁy"%±ì.âZ&ûÛÛ¹Tê䣵£ˆ?ıBÿ}Ïï þz~–¿Î·æ˜[¹_GG”~}ü(–>‡èað0®ý øà€:´¹Ö$‰mõæ¡X)z^0:'CÙ,_ÇÂU"87Þè !!1d.þØ*ol¥rŒ._¼þ¸ƒ;ZyÁÇoËÅzQû Cæä(Ý ¹›*F­Š^¤ÈiåIô² {À¥LÓp ’`»&—ÍÁÛu Œ€™È¬~U±æúŠÑCJdwI—ù_ÕˆŒZœIÇ­ì±—=#/hò¦ÞÑ;†Zè2÷Â&™œDûúÑá]ÚCµáá$V¢;H§¿x% çG¿¾>K'’ÉXâ!•¤+ ©^Ô„H`*å“ñ$u@pI¯¢á+]l^XÞþ嬌áÑGÅVø£ÉX éæaçíâÁ\áÃL¶ ¤¹É¯J æóg…Âo¯Ï΋Åt<éÙjL‹T,g0[/YV­$ÙþIïÑ0‡çz„¦A•!ÒS9 ·{å¬H¼PY1›L)'g~ètpT/i²Žrcc¯tDžô±p|Ò¸ÜÆ7`§nšß—Ð}¿Ž-J ȶ°';xSß¶kMn´ô-3ËÒ1…£ìäŒR8cjýü´mYgZèj_öŽ72'ÚyS½ƒÙ¤kw7ˆ‚oþèm¹ Å& òq»ÍæŠü‡iÔ8CgùQÌ긗PP:cAµÏ p]kK9"@E¾ÝÝ–)‚Op ?¹¾ãÉÔzˆ°dàƒ±ØkSX^®²zM¥Žðš‚ d—KŠ‹õtÀG'Ü b¼×K¤Æ‹0mE:¢›à‰ÝGÅ<ÈòîôdÞ½þÿû®›)PçRiÈ®é¯ïFàÃfm…MÃ]:îÚµˆÇ£u ¢õï‹î ‰GÙTf~a¶6Zÿd [ÝÌÑö)üW )ÑÅprFæÄšeÑä2}xŽC’FŒQpôV*IËwn·Íc+¬÷ž¾1¯Çw-I"s$R»ûÕý2#Mh  ¢NÖ®RIA7½-²äX@±nØ …8ÜSë0µóµ=âb­Mi)^˜½Þ阻ò¢j'Ç65©Ìê_Áƒ$¡1oå"_fWjæZ8ê¡¶@ê ¥½˜Ì7¹2%1l"ó,hol¶%ºØ^›Ä{äfáÝ*IuÃÌ>t©£™=Éž™_Þ›[ÜÑÌõ Ù“Üq­q6—ÊKp’î3Êqz| q' *ó‡_$,˜ ?¨ÖX¶·ö‘•àc€¤›ä4a÷Ë--\m·ÈŒDNEè5wØ ÆNòŸÒ@ôŠ’Úê\[ý˜q©NsÜdé”$R׊ž¸±±ïó£á„DízÅšlï3RUU'ª`)þIÕ4“á@î~Þ%ÞÝÞ‹…#ÑP]Ûê°V$ÎÒ¾¤+ZXãÞx+sì e¸“¥ô{CgˆÇûÜá¯gåh8Æ’ J‘­«ØÅTæ?* (à@ÕG±’®çÝŠ§è™ÐÏFCÑòñfÔ›f·6÷Haé(›ÛØò.­î™›,$3è¨Záº9Ê%ü ý ’ªl$ì»×#mgïoï¼;-Ÿa°é2ŠupÆ^ôŒ¶°Ômœ‰ÝÊ¿7ˆ¨¼±h$zV¸ƒ Øh_ibO!O7ÌW«ÎmÔøà³=äûÝÁŸjaŽR¹Jää\7Ù—o%c‰Ãl¶„Þ d ›4A²©´ß<@v~¨áK,kˆwf±ŽmSÓ]¬d(½X„ÍæîiÀ…3c,¨µg?)NB…+Ÿp š­Ãr©äü‘ ®Ï÷BK±èƒ=T}L»pl½3ãê&…ç\±ÉZÐç;Â-Åd†ÇÙ,¹h‘8ŠžÜ³ª„ºlÇù_ÎO66öžwŠþë9kDmF#cX³ê2›ý‘ç"¾G„G”XW¡¢f8LäCáMHEêðY¦ˆô)j¤Ó\ Œá–T@/Mä–6gæ6V×vÏQ Rˆc€Jêé%J¿¾K`Žºæ—÷ms;-ýfl«@d“¼Ð]@Ò{»*2¡šE.ióÙ´e¶xxð~Y4ÿû›3ÈÛŸv·!‰–Ê´]¯ÔÉ’a„TñðX¨WP»:ŒÌ[…0B&—ÉõHçh’Šnpå}®À¼ýX¸é¨ªÛ +6g4É,M:ßÂÑôÊæ„êå¿´r'aŸë2ÓÅø öÈB ½ŠÜääª bås6¢á þ'Úî’ê”ñªù ÙV¶Ú½´³±¤ š;û§)}ú>Ù4gP#ÑïîúŠGï×ßq¥ÁÞÙ )ß«‹ÿh ‰vìÎ¥ŸÚÅÿ±¥ow×Cüb?I% Óuû‡ Ón§{·WŒä[8“MŒ1£m©ÞëÁtÅSìy—ô{:°cà ¶oKX}Žoß,å΋ÉøïÊ%ø_µa©Kd!óX~bž‡?AÒ…Z:žÆ‡,‚Ÿ„LÚ0m-äråºÛ‘KeFu³Ï{F™ê~¹yqygw/ Dê¬!ýðyCþT;_ß)0aÖ—‹(l¡Rg§ÀÜÌŸ28Cþp(ÚÙÚÉÆã§U²·ª­òžµ½IÑçË•SºÎµã°Â¢»†åV(¤b1Ølö.í68B>l½h¤“JWüÔ 1äóQ<Vg¼JŠÓ° ú±¥ü½0 Y,U¶Ö×]&“)N´×®wø€pßœœÜ7V>Fɾ’˜ÚLÐÒ?,DH ‹«¦ÿÏ´ÿóC6j† sV<¾*©E '’h0=èFíÄjRO±É%“èÀòÜ÷G+†gP®~ðzP‹tgðGqûÞ'ŸÍæ-aq¯š ùlî’äŽ×*;A ³,3 ‘Ê9VöõH*Á¥@- ;¶ÛêI,L¬éñ+†Z9aÉ¥’åãê§8D{ŠcnU1agˆ í},Õ1S/r ¸¹èA®t‰`›6@¸æ/ÿ±Ië¶sÁÛ MZ¢¼˜Ýè`±öÏúƒ„;n !UkÍ“š7‡ˆ‰#ÓÔOlÚ§g¶]Ëþv®vhrÑäÜü CæbÌ1ÑÕ +×iÖ “¿ÏÅæ¢IÂ54,Å éÓì ÷­$Õ“0•j²ØžÕ¹&Ÿë˜¢¶ò´/zTB¹Áhs¯¯í’Þ*Šþ‡w]¨à©ÝßÞN@þBí6ÀpÎbåô7Mýÿû)SožGêw{Ïû‚$R]pÌ® åF½eI>ålãéZ¹š§Ôù¸ýô£+IdWƒÈ¾±²âÝ݅JHŒøð0àõîll¼Ç‘¬Æ)Ru¸¤}Áî “Ít˜˜òY¬²ˆÛÁ =â?§Û.@6ó±¶öO¿¤ˆÜó G™4ýƒë Ђ¯dÌöªWÝÆbˆ´ó )^õQ‡[àó…æ7³É´{eŸ7âèY±|‘ƒ†ì“-}Ʊ)ë¬{–É»“2©]wŸ,Œ²y<®u—…F~fok«&ùCøÔ'Wª uf2ý}b¿]+‰ÁІ­ñ¾”G2šÃl_È(ˆOíWj|@ÀIˆN~0÷˜Ð“͆¼Þx(D`î- $€pyßœ”r©´T ©§!³Ø—Èc\xߎhE’þ×!F'¤tû‰ÁvàÛÛ«·x«¯áÁ[Á_Aæ}~éCD¥–\/ÂCxpwÕ±P{ ôãñ•âþ‹ðI' s­,üÅ·8P9;<û6O„ª« é>,FäÔ養¬-\=S ‚g8DŸaMËÖÈK𢉥¦„Té²ÍÕÊ+·ÎÐ- oVÅ)é›Z˜]‚iÈâ¸Ê%®Ò½¹†OçXôô.0.Øß•A±^Ù<}>‚;ÜkJD„'ŽÕˆð˜ì2[sôáÙ®!gÄ…ßsž28cžÝõø¢ÙTæøàˆ: gI¬,™¤j%Ê]=j0m±]•ÅäÔ@’äkIïuÜÐNàÆTªÙ6ž¾‹?!UÏrG¥Ÿ*´P <õKª”90¾¹¹·±¾ EOðª»{-…$L!¼{”Dâ6ä ç¥b<–à Mýï'¬o›xÑp” =:H*Vp’Õ±ú}»ôI—öÎ6®¦‰9ÖÐ#›u¯½.Åj/ÈæÑ(œ!Þn­®Â¶Q_¨÷K¿â8ÿ<<Êæ4æ•vž¶£ÑIÕT@hÚà“)jü;‚¤§]RÁò`çx[.ÿúúàQ2–X\Ùi «šØ“OºUOºzóB>—­qùë™"d“ûùì¾O̶ðô!Äè˜[¹S³s+gǰ)fs`åS [àŽ†B¾ÝÝ|ÝPä=³*“_XÍ9Š“ø³Çæq׆˜r˜8[&‚ÅHlMï5XNšHT)¸¯¦_g©vÎ,æÆ¥‡1åkhÒªÂÍP¸Ö z{Zþý—wû»¾6ºxHnX^Ù†¨u‚k!õ^uÁeLá(ÅLí»˜4Çv%è½Ï¸ˆÿXþ )a_?üJòL»››1|s3µç­IøÓ.÷Æ ÂüËùIùèhym¯gÐØ%´¢É_ù,ìŒ>èbä9}g§Ž÷hIñ‡¶!·{õ4Oö…|"ÿ©SÚÊÓ MË BšeÕËÌÞìAހĨ C6 oK—:¹£K<Õr—ÐØÂ™ìèÓÁ[ ¨Wf—½ïN s+¾®!GMà€¨Š N,N,gæ²]«ô¢Qïð,Ý'½²YšU…ֶ±hZcÛšq{ 3;XÑÆEÙKžT<=aY¨—Z8SÈwK>WÑIªïÖû˜~`0í«I5œTcp[¾Ž>C'Š-›!ãëuÛû Œ±nþ˜Þ2Ùp.™&½Þ»wÇ!Gñ’¨‘¸?¸ÔWQ…NË»{~çì…-Ÿ6Ï]HÁ>.HªöøÒ‰ÔÂò.]¨{Ù£jd޽ ÉxÃzÀ—§=Ž[Ë„Òñ8ìUĪÒ2dkõ!I’ZêvŽæÝNcá([¨~Ù£lïÓ#ÃIâ¸ã’fÿI¤rx±;!?Τ~{{×mwk[£³öð•=“Þdk’*Ðël«ñXê¼X|wZ:­X7^šÊÆÌ‰Ì¸ÎÙžÀöãFH_1Æ%J}6?/?ÿ6 ;èõÞ·PÁIiìØ _ûûèM>z$Ùa‡†hDˆÙíà Wd±Ôˆê5ÚÖ׉;â'dD‡éôùƒLWÈoð(›»—}tÅt á†DÒûéL>ºNaUÿúúd{Ç;2fLÆ’wyÛ{·Ûªó ðæoOŠ^_ð9UÞУà j'õ.Ô¬£Êm<+áô'C:Z7”ˆÒÉyq~s©LÀžÔÙùƒjX´,©ÌŽÂÀEZz0³øÏv™ÿGÛB3•7Ö'R™-³Crý+ªøY—ôŸÍ‚fŽqŒ¦;ûô¹I¬²)Í»»¾ý=ÿþ¾?yÁܸb!èÓÔOºä¬‰föTkò)u¤­gP=®ID¢Ÿa¢þZsÀãÉÝ“¸}ÉÀRØ,k’<Ÿ¢'HèÌp’°1û°ñûCŠmx¸VtÐãúaƒ·Ÿ_9bàþöv&‘€Ï~uN­ÆÁ¿Ý9BDÕûúÏ{Rȼa¥ž+Skìkk;Heíà ÖöÍÄ㿞ÀmˆG?w¹5;9x2v÷1=Ì‹äá¼(8UéíÇØàn(A½'ÇÇwgÜŸa+è†nI+Sáó~=?MÅ“bµó[Ó+Åꆈ]3‡äÍ ~0b¼72\²µð j­½|˜KÇÊ)'@ ²®ðªÓþ·!$¢„_ɸkË5 ‚â)—{%Ά^U+OÓÖo„„ÑvAˆmŽ¥˜ÓÍlkíÛðÚµèÍ$3jËz/AtóT±S5½ Çfæ¶7·ý‹«>L@2ý•ßšrޝDªŠD ·bâ‚¿ÞÆ›"ZSÞm™ÞÿZÛmuM·Z'±rÃàSú§»¦vN¢ Œ¯èc]¼q¯'x€¼rO««â8wgGF •`÷@L‚”O¤¸ gûËù©lÔ †œþñÛmõ“n¹ƒd<±¾±ï˜[Ç^xÉÒcOÁ (†¹Q,ƒè )rÉ«ê$CH…ü¬yÙá”Áõª{è›Fî<¡ë¦€wuæ%Øà² 2Ï…¤PïþÛK¤=¡)$åОpÓÆG…7IĦš*4£2§žt«úå&½eÞ9»r˜Éþ|Z~S.aŠ*,c ¶€/$µ=íéàŒJ”Ó»Û{ñ`(fyƺ…ÃÒ¯;ƒ‹yvvÂAH¢²õónžüªÿ-’Ñ(ìˆnŠíEÖš,䄽ØúkFHï)ôânc-ZÄsd\ãä:°BJ2þºâÙÍ ä+Ddá ϋŷˆwˆ³ø ;À¾Âd^¤|Ë‘ÚYÚ ú|Œ¨dˆ>oØç»övà Pƒ§âZP8o?Ð]ÿó'öŠD:fù÷Á ¶UXæ%° IýîÿáæL¥MO:n3 C0aµÍµÒ% ˆBdÆÜp2P\c3/Þ8ÈlÏù MV.íÝ•,%ªqF:ø:¦|¶[hîè3 ëÚÀ¢ »ºÅޱkÒº¹±šXbÈÈ€íK—:‘¶¸uÑñvÀÀÚHˆb%E^[•Ü‹x_Ë’£ò—»_¦¯vÛû‚¿5®ûy8gœ(›`KSét–Å‘ ÛÀ°nxÔ´³í øÂ°ïú¾{‰µ„õj!àC[Â'I~ÿùõóŽå„é& ÇIøSã ²"YûH[`MÖöÝ·'%؉áøíÍy"8ͽ;-¿.OQÄÌŸÁÞ\,¾)3É”jjæ?_pþÑÀûG#_>n;EšoY‘ÂÖÞ§ï²!»xœÀr‚eŒˆÛªOåŒøo’ªZb X{–8Ì@œêA©•6dobŽ÷JtÈ·míý&ŠÀ´¼î…§ëM©Dö÷üÞýàêÚ®Õ±¨5ÍéÌn£mQcB,Ñ—]Cós‹§ùCRØ;)¼&òçÍ1ùzk 2ûS^ªvØ!dÿ")ª6J 2m­E"N­Ósúø¥¶|TÛ®Nc}½M7 ‰ T"tõSB"p*Œyï’š^EZ$Ô$"ä—R̯…è«ntWµŽê_@D…'äî<úÓØWઢ:€¶x(Dãî{ûàYGâ­ ùÒÝ2Xžÿzs o²¶áeˆ-°“: "§X‘^Ü× P²FuT³t¡¾‘5ñœ¦À|dÃÀ¨ø×^ ¤k–´†s€Œ”ö¯R¤¥˜‡t´”KÌae`Μ‰hB¡ZÖ*$Ó#´äìÅu¬ÚAœF0"Zò9lÄDäæpÁ ºåF.ä²ÀöA†~þ{‚¤› YÈu碙À%xÃv¾®‰5Ù'3ol ^ðîžoν¶±±g².ˆd:ï¾vå;:WÎK%ßÞÞ1®–~‰×ërqv~5¿“?åƒAÒÕüé±¢0Ñ@‡ùֶǽ°á^ܘ›_sͯMŽy÷ÚÒòÖÖÖ~,KÄ’h/?ÓÉVþÏ{h}ß.1à|±xúi·ª³ßÐ=h©H™áQÇn‘Vf­þGI5ãÚ- "Dͨ·bÉçjåNAÞ/àã ©Ýî•ýÕµýùŽy¡®ø¾]ò”"ù{ÃÀ“Ρ¿5 üµa¾þ£Yø·&Q_ßœœÔ÷ã¾ BÂ|AâZ¸ÛtÛ‡ª§9B’‹Wå¼ao®ˆV÷Å;vCйá¹6"¬òù·—GxëðÙ“‘È'šË{ôš©À5<Æ~Dpqà›€ó L¥"?¬è aUÉrµêÛÝ=~Ð-& À¬ f»_“­ålÄh!†Áßåz,…ËNHÙÈï¿£òg…™”JÁõžáþÝ<¼r_þ~mÚ4Š>ï’<£Ê_ÐF¦-‹¿¿;G‚¡xÿÈL3× )-K¯èî1°’˜òùñE‹kgT·ÀÚ™2W g’&F]¼ÞŠÊ|•Xíf¿72O0MÙ`Ï š³S-ßäk[û»$U†ùQ˜;(ˆijaÉgÑ»ÉQL<(ñ‹ª¾cõ òÜL¤-<‡ÿ ß$de7ú]ƒ…£ÊP?žþ[nçHBî¿-HºÖ±¤¾ÝÀÁ;l9Ϻ½ ¹z&Mü|vòûÛóH(ÒÞ+.À"'oª¿ºä75¡?R»í¾5ž_ÎOÏ wJe>$=&-}]D×Ycp5týÔ.ø®Eðm‹àU·D ŸæFh’;†`{ne*:¹£mlU+kôE·üMŒÑÆÞ±6ÎäÂâö»“’cvÍl_š˜vwð5í|E`¦bË6XÃT!€$çÓ ¤“JÒE=©ªíæfWtÑæ‰ïa;OW©«K}Šɸ«¯{ɘhbM fWÓÊ™laO¼¢«šcŒñ—=ÊVƈP¦YY^/~ñÇ ‘y³ÙÖi|”9¯Êd%V0Êñ›d2ЧÒ`38rt7ÿ“bUb‚aŸº³ÀϽ®@.• x<Ÿ‚rþ)n@*ÞVÒGÕb<ØEØZ¯Ëå<©DY*‚µ¬·c PÓ zÀ”´âqïîîi•ôsm@¸P;‰5¾ãXe $Â}¯Zn’ a­&4{OXCF)O±ÌD½0avßQ/þ½FÞñq4k¤ËŸÓOºdãºÙ½9%Ã}fÇeÀH²ÃzGäk‰ƒD†–ïU<ÁWÎc—¡á¹^‰£¡¥£T@-pÍT‘™*$¢Ø¶nܵ¿æÀÔ¥Û-:j߇¿ÛÙgà.WÂrçEö4±½§içi-ÁÑ…¸ø¢£©f›»D•’ƒŠS9D&tªøg¨ï5ém+9‡ÿæ é t²`‹7ÛËÞ±:¤­L•Zç:Èd~;?0Î¥°†§ Îp(ZÀQ.wvu€ ³+"RÙìv;Â/°"ø-]xg⥠@rCÉ=…$à/’sÄÍP2øFd“à¯ÃWˆó×ÁûX¾D;ÁdÈfÀï‡çàf¢·ØÝ$‘fk4E“½ê}ѣК—~÷ñ±²¹½½@ÿˆ³S`å(’°ŸÉ¨›£˜ëFƒ`ó´!e@ßʬTý9ˆt5λ.D­šX³ÝN{àÔýiJ¿¡~Ú¦ê}»Œ­KLÕ(ÇSÔÜ7ÈJDáf"½79ªêÙÕsFs-îZ>ùÇI—'1w•‰…˜™£­<ý²^¡fccÿ(›;/;\Ë?µ ´ÒÅ~oàõêI'XÐÏášø …`‘ÃJ»åHcߥò' vJ„Ñ×°‘%¢ñd`!K OÎSEVÊÀ4<«U@ðøÌ¤ t'tÝy[.nãHA:qNH [ùÓ­\m¦?v+Ú²T$šAáý/PµÅý*ÊHùƒÄ\~(éŽ>²µ4mK¸¤qÇ!81ØIBRO…y´ÄãàN)‚Ñ‹W,}¾8<"ó$. !Ê6VG¬q¥o?ÏúÁà WÇ>+ˆÃ¨…Š§Ûš„°æнu‚œõä¤ú?MªŒ;“š\Á^™D"„ï…=’N¤Þ”oi¥U¼“ööîÂ@Ê(ñ8Ò¬Ã&D×¶ö··“Ñ(¼må=µ€oS‘H!—;Ê8\+LÁ½lpÄ 7ïïùÎK…“ÇŽÝï›8æÒ™ò’5ZXÜxÑ9ÐÐ=¤™ž ø#F=?ùíüô×óÓß~ ±C œyÚ%A{Ù;ñ¼w¢…g  Ùñ§î׫^u`zÚ¾ò¦T€„‰LÆ„wV@ün8–Vv9R oÄÑÎ7ô ÙYUUû?f%é&´TûI•Ž2"°÷Ø& óFÛ¢ufA:jæKõÜÁIϲÁ9/±Öâײ Ã&É=¬¬ÏÀ'Ý`ñ[œãNòG鵆^ewª•«içkm®õÍ-_s²{ÐÚ3„tã r§ãà‰ÛmwŽ ªEˆð>ð‹>q«„ëúˆô)8 ·ƒ¤zAÌG2Ñx„ùÑÄðþˆ éN‚ÌáÙv¤Ä0ß#qP­ÌÜÄšÕºr©t"šHDãëüÜüZéƒ5Õ|>—L†ªµô6Ýn?àM`I@ŒË¥R‡Ø"y%V¥˜<Ò|^B¶\››»Šqã«.áßú5³ÆÛy“p41Ç_vË8ƒ“|ñÔö¶çM¹ô)˜u¼¾¾£T›¼žÀÏg'ÉHˆðPÑ;œÒÚd*ÃàˆþUþªw¼Kh¢UW8kq2¬…(0Óú§v÷€ê¡H4MƉXÂï †ƒ‘T, >¬Ýµ:ªuNÜ|-,!6’‚u×”òÿI—–F'„¤ HBrmÔA[wÿ”jÒêš[ÝÝñÀööö¤ü椌èG_Ù…0m=ÛÛÙd‘ïï3ûÌÄÅòD)«2…çžïà¶FÞóøà ‚i(qÂA©YˆYoý‹{[D ÇU‚sÍ ®l®Ç}§ŠºõýDT&Á¾r§Åbé«×ºübÏ0éEb‰/‹BÄŒx²Ö V¼¼ÉÇóu©¨3»ŸSeLu'_×Î×S ¶ÙM×ÂÎÔ±^‰;WVDãFà õR˜º*üX?ã¿‹ ×vŒH–« ¯Ï‘nIõç 8„.™¡Lˆþ  é=ݪÑ%¸ýøCðC«6¾¾“?¹½ãýý·7ÙdzyyÓï ~°2\ánã9áÒZìw¥ƒǃÁîâW û÷wÏ.ç‘ùëÞ®10úFîÿý¤÷¿^ò^ÒU\©‘'56±Ô,u+gò}ô eø?åÈÇ­d¶³ß;pßr¥£üúÚ®ÁèJFgÇyïöÎîæìjUÅí|6•9ÊæLö¥.þT+O‡íåmðôÓ¥N&uФ.šØÑ-²¶²Ç‡ÆœüaKWßTWߤ@f14ÐÄ<±Æ5·æš[RXÆu®L2³·çPX:ÌDãÏvÛÍ išCÄÜ0-©‚ã  î«ÞÑV†œ50昙OÅãÇ_#˜ô»ØkÍ =lS'Ëö=´ô¾‹Èñ1ü•_ÎNK‡[ë.ÇìöÆÎqîà´p×ÙïškJ+M5#lÌŒ´ÁÞ ¡ÎóbáM¹X}ÏÃ;H†'µù;§ÝîYD§W8/N+õlÒ¢Êcõ ãzŸéKu‘L"yãqÕ*˜ü‰n׎*bM@·põ’Év/&ýÓkGùà·Þ”J ‹?vHšXÈd`ºcÀÈ–Ú¶w‰X’#›i03†5-l¢7}­ëBªpŒ58„µn¬Nt‰ÜÃýj@RÕnBV—ÀÈ[ù³’ôH8 ¤e¸ˆ?¯Z” I8ÍÏ{Æas=/bƒ¡@ø •>ýàð~Ä!$ð¤háãߟ}CõóTjgc#‹5Zî‹·ÒY‡k™+o¢IþãïI»€%œ€TcwÇou¬²ÄÆW õ úø úèsšò%Mñ²[¼¾¾ûóÙ bsc#¢Z [ÂÇ|´âÁAО›_…£ïÎNr8‡+†z˜sJÂë/ge›s¥“?Á’˜hBE`në7¡RŸÐÜ-¶ó•sJÃj{¿©‰1ÖÑojå雸Z8ÿQÝüòòzGÖÝ7:5=ׯobŒjÍ ÉXÒë ·°Õ°ß³* iñOt=H˜Æ¬ö…-‰.EFp Z¸š:e/)‚À¾çíIùc„§ýAä›ó÷o´‘dàÑÏóñHŒ<ç5TDägP3?œžý€Î4ËRÓØâ~¡|a~©xpxrçɦ L>öÂ~ßëRñÍI) [ló µe~aÝëñÞ—ˆÆ?ˆ½*$•££x‹Rb1‚“<š½8‚lY?ŽÝ\Ķ3p†Ñp4ŒÄB1¸>Çx(•8{e³©X"Ÿ;¸pPÆjqÜ-"ÉÞåþÐ8éýËHroˆ‰ë,á°/ÐñÚÚî«nBHŠÀH™aµ²¥ö½ÐooNç—=È©m؉4Ñ LÃs¾×Œn°j–öÊ¥þÑE– ™¡¶ ¹6¿&„ ÝØ cx–Š*I‚¤Ç»¼ÑeØ (ýÓ<ÕÑ &Žñ¬I‘Ò’ŒÆÏ0D¨)ÙßV#!¢®'!޽½Ç¥L’” ÍúýÅûs!ù½A¿7ÅáZ][Ûñîî“ø ‡÷öƒ:ËŠÚà^^ÝGÉxÒêXÞÜôä¹;GPlìþrvq³ð¼¨l* 'ƒÞ‡øs,³­:?äõ$øÝÒq›XeUO/ŠÕ³zû¦tÂM“Øáí{#s‹{K gª•§iåL4±Õ¯c‚³ÁèŒj–’¼¯è5{½ÞÝ]"3s_ V’Øh ΟÚEÿlxIÔšæ& .½y~k˳µµ¿¼¼ÅO=íü¶UôÏÑO”á'éóŽi£­œGhà^z5jà¯ç'!ŸhxìI{ÿ“NñÓ.Ù+úh3süeâE·ìïÌ‘ üºŽÏVk*èõùö< ‹ºi§FoúC×F†"†e÷ž‡p#2‰$s@ùC wƹtIg’©\* !â Iű*,%c rêçäaGOT;}µBøŸ ç¾ÏI›Wfâñx0xi¡€ÇÙ ¤k/é*J¿žZán: ¶÷ø2ë¨ÆÕ%˜¦‹í}J[1ÇYà«–2W—ÈŒGÒ–°D$âæ2‘µ[0±¢š^œX8EZ°(öOµr£EÁŸ é’àjbdä© {®‚¤Ak WÇ•CÈÛ“Òñ‡¦ú Ø–êÖê**Ì`¶]`ÿSÌ×HŠøýé»MÓ\ç{@œbI\# @<‡©”nz6ƒ^ÁÔÊð7Í"X{&Ûb;[ñ÷¦6öý£÷ל¿¾dß:ÀM¤2Eë&©R4D£|È‘­ôû›søæúúÞÚú^0Y]÷,-ïÍÌ®ÍÌo9Ü»áPT¥sMÛW$êyH˜sÕÆRW/ ø/&òn›g¢º1“üµÐS ¦“„@RÆ.GIÔá*8 â&$—/écßµð3.ÒzDKrþÈç XìîÑIëa&ûö¤|ö¡²%ì¾ÉH$èõ±˜ÞÝýÒI R±ÂøŒ"}Ù£lb޽ )žR‡ÅJ“{q#ç³¹í-O¬ý[£¨•­¦ hŸvÉÿÙÔ?¡·fRÅûc2ÜøÎÌÏ-ÈTº.¦ôû–W½h`»§mãNÁ…}Ò5òm›ä?_õKT¦ß^ŸesWé€ä} .¹óSF½ivƹDPî##wT¦ýýíëµõíï›8sîõßßžŸVH'ÿĪÀ+]H"b‰^ã;  õ*þ wÚn#ó‰gÅbËÇçpç´ö¿½ÏQéîpBïzIStðuÈ)vÈF—8»EæÎD瀧FÆè+¦²šV®RDÈ{¥Î,’D(Å}xŽ9² Ñ®ñG—„cóôáBžIGsp¸Å¦Z¼1 ý ’þp Û ÂcD´5s´B…-O"Ƀä²äc" Ç'ê¾ÿÀaoJUƒM°­®í¾¤Šÿã)ë›æþ¿· Žig‰ŠI6ÑÝM½ÊçÝòçTY[ÑÊVýõŸ)‡‹sú¾ ‘)zÀYA¶t| ù|>oÞ½$•«b¨Ö…•ÕÝ\:÷î¤ôö´ô¯×§‰hJcZèèÓÁ2¦Úˆ™31 ªع°îÀf=X8žU2û''é&ém¬¸m uøŠ…dÕE‘¸+Œ=Ss¢‚«k.씎òÞ ®šâÁK8ö×ì'B¿7¸µåÙßó½.ß(åZûu2X _‰2òÝN ÿÛ›³…ÅÍFºòc 6’6:šX}RýÂÒ6 €h?Ÿ•®-.אַí«&í\ÁèêÊœÏÛ“»z;ÖÏ AˆD[i¿6ô=ïiåLvôéaháj™“CcŽ¥•=—{[cr[g–vw}&›{o× ¿UàïÂwâ‘ø”Îêr-t³%B©>Λ“2Á+²[Ã6 ¹Õ¾°½µaô@/5Y²£l6#}HÌCòììã¼?qϽ\…,Pü~ÿþ~")¾Ÿ“¿)Sñ„P6ý¼[ÑÆÓ’ù_´s Ù±™šòüé™Í­U0ÝÄžêLS…Fd2h…à 9ŽŠ¨N¬±mO˜×úNž uâK¡:–œþpü$ýAÚ $’¬MìÉQíJ~¿-/D¬Ï££Ç“‰Çkb¬ŸH¤Œ ¤$öxaIH 3É”jÒú¢kè?žsdúý½Àa:ƒè¸ä E©|Dèif¿ìq/nò$º'ƒîÅõÓã„Î|•› ê ÓÞë‡8§È³©„¨NHÜ.µÝ>×Þ+ù®Uø”"™4ÌEÃÈÖ*—Î u™H|fv£Of¦öë`Á#ßi‰ƒqa©H œÝ7ȈÜZáAªøÿ!½Û®"¤j¹¨bÍFÞmZ¶‚ Î9|ÔÌ´qÇŒ5ÐFi<ÕQ&y÷{‰Ï9Üô¢¸Áî[{N°|_žÆWþØ>ø’&ëá«^u‰$ Ã1n¿nˇœ;èõúööR±X&‘ø` ã¬PÂ3®3H¥sÀØ%0A„¥ L¿b¨©ýÚ€™±¯¬í)& ‘Ž1hhçªÛXJ~Æïñ•Ž »(‘'ùîe$@H}ƒc?¶‰šXjØÞ(†.‘"4u íõìÜÚYñø —dÑļ{}oׇ²‘ËÄpø¼§kY¬Ðnlì>ëà?oç<ÞRþ¨x-ô|r"½Hø Ñ ”¿5.a²#xa öî8þ¢>ÇÿÖ<$¿Çˆ“L,f2õλ!AÄæ jžuc¿Œ )TîTÄG{¿qÊ´üÛyyqÕÓ3hnæê»–^‰£wØÕ1`¤ŒùðU £Ó«²©y®b–‰\oðä÷ˆíܺôéOô'Hº®Ý&vtZ^1't¦Å·åÂm^TòƒƒÄcý ‚Â’Â>š[y4µÃw§åÍ-ïí‚ÿzÁvÌ­½-‰Ì Ÿ_ÎNgç‘@Ùsš²>ÊÔCV}zœ£¹Tæü¸ð¯7g¿¿{ýîôäM¹ €Éç @X¯±Go._!Îéo¯O“±„Þ8'·öô}ÛÌÿg‹¨ƒ§^ߨä„͆c••Ú7ÑÀˆ6ÙÆÓWåBª8NWÐÂ-dEÑD6¬3¶ô‰Oðu©PS"¸ vw<€¶·=ß7ñ™c©X< ä’I2ˆZ®éGcû8‹Ý]8ªÞ†,ÞL¹n¬äOœôòûázÖÌ=k—–Àër1à ÷L¼¤«Úûtàq…\±Kdnåj‰Ö.ÖìЫtî½.—ööCÒ‰YšÈÔ>€šðB¢vK¦–øŠYþˆ±‘FȺfÊ\õÕåëCþ ’þˆ•$ÙÙ ž÷ŒéÌ‹¿œ–oÑe‰‡B™x¼R:ªÃûŸ$Áâ=@Ò#U’Ȁ̡fzöÿ~Ê¢òTÑpŒè┥´±¾'Ö»·¹ý“.ÙìüúiI¤Àn¹l.™q-MYE2íЈ®ƒ)ùþµuyyëôø6jD|ø£‘PÄb_è“è`#ü‰"{NS¼ É˜jºÈ°µíýùìÄï 3„Ú—½h‹¢  ¹ÖîA+mÈŽê²1d.Ò8ÃHèvzò ÙH]þDëùß«’Tm¨¹ÉP'À£N¡•&4<¥ ?ïzFŸ„ãKÛÂ7u ˜ÛúÍ­|c: ÍÍÓn…Rm$Hºx¯à]óç³SC¿½> ;4Äw4u0Ú7ç^ëd+þú’÷÷—¼ÆéêêvµŒ„@R"–”OØzU€Ë›˜£Ï¨ÃÝü±Ý/@êŸOOneŃƒ³R)ŽÝ~ˆÞú-3ÿ¿ÿ|>®›}BA; ¶%‡Ý…PÙà>¢ù Ak[ß4£n‘YüÁa£ Ú¨X—¿£O¿ûC«@¥6æ3é·åR­ñôÊv±à÷ú)<ê]# K!SEÖFÖÔШ½„õ‡.з®ñÌÛ…Å»¹¹¿¿ç#b’!Ÿ/‡ÅuÐ@Y"‘K¥ÐdF,–ÅÈâƒÔ5o5µ÷„Ëž"<¤¯Ãåß—–öû°]7~ŽˆóÁ1JYˉXœ>0ñ¢GÕÁ‡ç#$ù„Çv¾Ž02!Bv˜Cæåµ½ŸÏÊXÄ MgÑÅ5ï´}…=8Å‘š{%vÄ:R,BH„¨Ò=há*Ü\%H»#Bú$ýá@’’€¤YÂkkaO̺·~{}rSŽX¯Ã޶÷%E~”rÒÑQ*‹ƒ…ÃÃÇIÖß–“±D_ù¿~`P8*ØÎð¼ü9Á^O0‰ÿþî\cœû{“н°y†ó@9_¨­wøY‡¨9ÜÔ-þësÖ7Ü!…!¸­H¸A˜!Pÿ­¡ÿI÷H+o v‹6ÞTs¬³º¯g MKÆfºú4-<lHðŒAnT…G¸Å†z@¨øÁ®©zܪ‹„ [ª€¤¥?2Hºb_ˆR—ÈÖÕ¯)¦ÞÀÆúŽÙ¾8ãZ_3ÛG&lùô Â8¢¶öKuÜ!McÏp7Oáóx¯mC°»»uÖlv%ãó‚{9—Jþþî ìÙƒ²©§íýß5‹žSGàv72F¿o—´2凙l™€x´Žß”‹ë›Þ®¾©&ÆüØÓ.Y3cD2jšu¯ç³¯‹Åk!8‘áX{LÍøâº~ìȳïçŠ ¬ ŠÀØ#¶õè¿~xØÉÅììê°Ûâ©mÿ ’¾jD! û0ÐÅ3­<½dÜ‘K¥oªU’ K»‰…ú)d„¾½=2Ëóñ RjÈ6âÑx;Sþ×Ü6hŒ³g¸ýQ4¥"¾Ûß,-ïàˆŒæYàûéìêêŽß>=FSÐp¹²©4~¹¥†DT $*Ó_…|-чíFZ…Æ6®Rjd (0·ð ](¿·!Ë!¼EáþÚÓ8• µ¥£ë@Ò½’Tóô&‰.qõKµ‰H´Ë!aÃrñ¬˜S*¼…²ÙÃtæ(“)ä3éƒt*‹×(qW¹/°O½>wø?ž²¿i|ß&ü©CÔÖ+åŽQ8#?uHê”61ÇÛ¸S ¬‰N¾¦3ùM‹hsÓC´ U!oøÓfÇêwí²vÞžÓû¡CúŒ24 ÕìïùñPÕñµ‹p’wo/~ƒÇ-þ»»¾nþøKºª£_O"$ ‰‰Mo!õJgTbHt‰“”šN’ÌdïšáÑmãkŸRG^t ±úäë[¸ÈúúN*”kŸÒF!7€¿ŽÚ|HÑØÒÎ7Pû¦fç7k¬¾B¥ðáŽy­¡‰4p£¼X-ì‘oÂDü~€·ðºÈ¬+bUy0€®B^o,òÃ%ÅC»!ŸÞ¾Æ–õ°Ò Ü÷(&ÉöõvÀãŠPf0K,ðOêìtþèÒò¡l&" 夣©WÕÈš„P‰H™RS>ÛÞ§¨M†OáùìZ†Æ]¥üa0;+jƒ5»£áøÞ^hiÍÓ¯°µð4ð&ðôbrÒ<ë}TCèâ—"ü ’¾nÔ iÍ@ »ž·pu’ñ™ƒt‹ ÞDƒ8)`·@)Z$ ‡Éò¥4ë§£É×L<ž€¿õHo‹*I'¥L2Íÿgﯯø:'ªUéêDýt<Û§ÏTëœppD“ÿxÉáÇÃ0döØ®¡pö¡Á"ÒÝózü´þI´I Ö*fÊf»‡¬ýÓ°ÁÅ”š…¯¨n4Œ¶.–|þ}x´xGxô'Hº$1Gæ‘U°Äñœ¦p:çì@Û[¾ŒÓY¢VUg®|Ll(pð-Ü"?ðú¨Ü‘oÛ¥nZؓ͜©FÖDSÝÂÑtòuÍ,„Zùº ÓòÚÆ>sÈÔÂN•Î/lÖ$F x`"MthŸÓG™ê&ö$¼Õ+ºò»VÑOíBɨ)Ÿò'uK cúRØçƒ­ý´X¼©+¿55=ûc§´…3Ù9`$C¨’8 ·ÛÃxLZd¥-€Ôá+š£D˜ÉÉÀæÊ¤¤„Ü41Njçkc?Q†ÿóIÃáv-|¬™ºÃÜÝö´³Fš¹ÈLp¡ˆuhWû‚6ÒÒ;2ip½;-àx_•K*Û•×øk`Ÿ`Çú÷¬ª! {ñîî}¾X00€QÀã!Sºpò©T6‘8Æ$³"œ¡ S:‘ùýáWU_á?yHw™s¼0ÃÁIéQ& àéuÎö‹'~hü£©ÿÛAK¯¼›?ö¬køi×HÍBlMÛ;û Ý"3>… @’cD·˜Š¥vvý‰h|qy'àÀÓøö¤8»°ÙÌ}FS¶r´Ýƒ6øÅ&ƼÀ‚ºÅø{35ÿID$sõ Ù;ú§{„º½]ß/ç'ù[o˸¾}œÍúööb¸õ–®±X¶j3ùh½62ÿÿH½6’`å2Ù>ñäÿõ·öæÞaŒ§Ç5~üÅ£\&£™vNhì µå¯/8ÿãûÞïZú{Æ\óë¸wFZ 0æ,VåPVKôËÍ ÌÉž! ëåÃ:§ã.'wÐêFúÝxríáðè¿HZz<´P¼@Ò©Í\rTKnP?º°5–¯«op`­Lƒcüî¤ Qê¿i•PÆN¬ÎPÑzàLuðõ=ƒ¦x4{*WnkfO5±'~è åÆh8Šþ±]ài!ŸŒ¥¤ãÎÞAÔ> öë[8Sm\M#cüŸ­ƒ?´ æù|ö ^˜À:œ`µKÌeôO<ç‘K¥¦œ—Ž×W·ÛØ£­\]÷ ÂIè­DXp5™cÎùõx$¾ººŒÅïh w—‚SÐë­J•sà b@¢H0H„ŽNpÿŽ £Ô[$]­ºü´½±1ðÏÒ½¸ð˜Â›ŒFžý\"±±éé`ÿõ÷§NÉ‹nùóî‘çTôõUïhk¼…=ž4¾®³ÏOlUÌ7@Ùΰ‹6d›^ c\ñtGý×&Q S¥7/º·˜Cúgôñž!$ºÛÁ×ÁÉW±È©Œ¶,~q–äŸ éß$©–±íù,”ÍÔÇPXÆ_ˆ;4ñm#ï¯x´>µcn-ˆ`ÉàSRÛ¿£`¯·åR2`ß9·É𦋭½ˆc4ËQ.AŽN²".3¬A¢…Ÿ>×¹oÆóß$ñ³’„ I²9äË6hý¶eÐju¥ñŒ\¢B!À5ïÕ»¤Åh³D{1jô¶vöhGƒ¶l’€J5¸oÀ¢£O À`Ùê¦Ïµ°Õ3dêè7tôéÚyºŸºFº¸ãÛÛÞ7Xž<3ð¶‰Xrw7 PXžt«Z¹SÍìÉvîäóŽä+ÕÖrþ¸¾Ôz^.CF]]!CÖ:U0’¨uó¯c-\M;ÚoðØZÿt+_ß;d¶º¶¶w©Dê ?I¦þ¨Æ¼"Q϶õéÛú¦)¦.fx¿ÕÆ×5³'{G¿mêåË÷·wà¦1U±2ê…eœPˆˆF}»»ñP¾sLX­ÎîþIÄ ¯à$;¼håé»ô¶™9ö濞s&´ößyƒ¤«ao>H§ å«zý$:¥âñ¶å&îæ@ý÷É;d“ÉvgŒõçÌ=s´F€»ÆHóJ^/\´ Ç³³±/^ «ëû?v ~ß9LÁ©ÄCReDð9¯Uø•è7ºÌCD¢’UöJ¦^±9ONºúu}(©ø‰ªxA¥àd€"0¶r¦ºŒªXŠZò¹øðiß?AÒ $q«œ¤\EÞ361í~s³ŠÝÕG’‹µ‚;¤V+Æ(Û¡PM)û‡æà„SÉD(ˆè—>„øtÆë Å#É\*ýËÙ ‘‡!ò¾·¾3P† ˜Š']sëãZÇð˜…!Ô<¥Ê©ýZ†Ø é8C6Ç”ÏÃ@ IhaÉÝØFq¡^äðQàÅ—IÕ‚€8]⤋µ£Ìw© ÉõÒ8éÓ?H")d¦‰1ö¤K>¦uä³dƒp||Jù÷÷ïàKŠˆ„N±¸°¢7v²O(2dn óxè93~P(ï3PE¦Îs¿Â®ÔÎÓ-È:™ÉLw Œ¯ãMÌ1ñ¨ÕâXñyC神á*²ÙÝ ŽLÍõ N· Z‹²ê;‡%*sÃ)b`gŽÄî÷ö²xæ”ôªàƒ^rãA­CôèÆ¢ñùÅí‘ÉÙ¡1‡Tí:è¢iy)M¾)~9-auéóâ1ú­Âñ›R!›L¯¬{-ñ†m]‚i$qÔo  ”>ms¼g`jÚº EH[ `*Ì`¢õ`¡E@Hžím£Áýýx8tš?pº–Ú8ꎼ"dƒÍ¬…£¡p”2µý»6ñÓkn¥øx+R,8‡Xâæ°òm-ïBlÂrÂZ©Œœìà3¢ŠG"ð¡àÃñcS1ùþÃ#$xV 9xÞŽ.õ‚ëÃxÐçÀ «WxqZ,þrV6ÚO®Ñ4©B„›1%®B†cÈf‘NÇ‘…sC@#õõªÁ¢“64C™ûe&þ°Io]F£>Ô£aË&xÝÊÕÂ{Ö £,pî>Èö'Hú“¸Í­JÀ¶i"d«³‹Ûÿz}š¿³Ê-ÚƒÇIZåñ1#‰D«×Vÿþ°\Ã>_—â¯æ‘XwøäM¹/ޱòÍmµ qðTÊéZÑœª ;[¤yEW62'Ñ8’;B…‰…Ž=ÀkXÌì‘…« æãqÒ×PI‚'– ľÎ~›\CŽÊ1èè©ÃO§ˆ49¦v}üÕ¨€$å"_,i8ÙÂÕ*&)1ò|&se$7zRø¼Ì¡o›…Ϻd/ã”êÐCæªñɰ"%j ´÷Ow S–u¯/rZ*¨§—»„fܳt ÌT¡©…§{Þ;þœ¦ì䪖·Ó‰yØÎ …7¥b*ž¶Ïnqe–¦º¡WX {e ›t€ ±PÙ©¦Òx+¿¶¾«P›9¢‰>‰Æ`v‡‘L25¿°Ná*_Ѥ­½rµÖUÜ30ý2,sZ]ÅUË3ÜËËfBÀëà0Oh bÇHéÔï ¤3¯KÅób‘°¸à”‚^o2)bñLB †GøÂ’¢ËY¡p”Ik¦]4¡ž†ŠIv4$¶µð 4Á9·:¤²µ±¥1ŸÝÀ²º7ŸI³w76àŠ‘¾i`ð™Žr9C°ç³Y°RÑhϬÔÈ—ä2R•×… Ÿ+«;}CSÚiW,#’¼äáË&’D”¼€¹ž¸ {tZDpžÃ!•öÊ,[Eè„HÁUÔàÞC6*ˆ%‚ú怄bËüÒ.®Ö{¹Ã–f®#$s;_ QV‡hÆŽÔÞçãDãþI0¤e"&Ù+q 6±P¿±éùåìäø¡Êú°0·’Ùqm{Ü`g;öÊMevì;ûá8ˆhL¸Á? ùwÀj¤IžR¤ÿöþ³«‘lÙ†Ïß|¿½_î}ž{Ï9{ïöåñ d—È#‡yƒ¼Ã{/ïðr˜2ݽO?±Ö’aªŠ*¨jÇ9* D*se¬3æü‰®m!s24¹ yW‹Bz& ‰¡pÁ?E_Äü¾ I`¨$ÑÐ,CîDÜú(•ͯÅ;­¨×pž×އAðë°Ú!b¶‹&qDv>eNÏ®žIåÙÞãòºZÉ$’œ^ý·írÔ›—Yæ¤+ܵ—«ñbµÏš· ðG»¥ö—ÜqOxþÄooÏÎYF¼ŒøËŠ)ìUì€Ä·‰3öM#TYvwˆÂ|r²µ•˜°E¦g×à…rØû‚588áˆs„J_›Äàö··°?-¾­†ÈðÏWâï;7í·-} ½60³=8jòY§¦'¬ÁížÇDpX®nc2) hRd:Ãu¦süšúÒ§Î¥Rq\08Å“œÛGŒ•Rl{W¦máè`a Ö¤ÒÝ"2KtS¿žW±Þ’Û®?¤jûé<ɲóy8Nßÿ©Ñ,êÁ@½äîn|k ¾Â‘Ç!èËù ü¹°Q©–4"e“ãýý)Ïôí}ÿëGÞÓNÙÜÜÊ/§pyá¿Ê‡ùd üq]œUmñAà .tò‡Ÿ0‘Áˆ|Š'×xø‘¹FǼFÊD^xFVNW¿C>äýíç×ø†ú"k@JÖ&œÀ޶¡+ =‚¤Gï6X¦Íü ¡Ú’Œ§ÞTËŸäòý…@Ro]p@&÷°9!TÁÓ‹@Òý¸M$ÛÆjú{%¿;«nmî>ch`3†g?ÿ.\ña­£ËçЖÕw!Óé¿HªË[GÄóÝRKás­ª&f¹Ú+Æ)µ±|íed¼ÆxˆÎ#a3Ìâ¶d™H^Ögkåä °Í—ŽÓñøöÚÚG×-áìïçréà¿ZåíªŠÍ¨&$µêƽêQ/„¶©™§ Й£ÍÓG$Ñ¥¶W|Ó )ùîo¿¾ÖŒhýX˘‘Ù±†Á1So”Ù7žFÚÖc–е¨^rFµc>õ¨¯U0ù‚©5ŒX[[%ä³V>Ù?øõâÌâ}Û,iîhåh_± ü±.áH'hfvíÝiõ߯Ï~}}úëÅé¿/ΰK(…l>A¹ÜHc¯¿¸"R»»H°c{»LøÑõð~6›M&áÅ›jeÂä~BSµòGñÓøã]}önñ¤ÑŽí&>­~ ´F•ÈòÒþ~&KÇPn7Δç×êËàˆ œ‹ "WLygxòq¸•ßµ+è’ÑÅ¥·• \®­­˜Û73`˜ gOÈà0Z®¥R!›0ûzúÆžt¼` 3^î[åCõ×Ëðx ñ ÁV’ÈP6@"¡Úöº„dkÎK'¹L^:8õ”5Ü£œÂFC—oø‡µÜ~I`Ôgá¿ÅÃc,…vŽgLCdzå·_Þííÿ*I€cb[›%ªýÿ@±ò Õü÷2‰Ä vR»OÌ…‘ˆ%——7’±d|7™N¦¸²ñWìašÄJ¤Ï` ¤¤ C€hw!ýË‚$¾…3ÉÈ\›È& žM/ì"V6žƒ¯LµŸ¡ò³5A u šéã5Ø?F÷*BB¿>4Ó£öÂò†g ®FÒÝ,0†§W Qº„m!¾  @ðÌÌüÿy.èè5uˆH?Zá¡ILƒcýröàbi+|—k, x¸Rû žÑê^„Ǫ|r,ö!q,Œ°úC€h!œ$«á¤§ÌáîÞ‰ÍÍØáþ¡Áî”XZEÆ6!üEû‹ž¡¾äŽM:ˆ´4™°ƒÓ3LxþÙ¦xÂз &ÚcAମpxz©Xï}º/Wc8Å ÝÍÍ]lÅ…Oテ¤ñŒ}!•:ÌæØbýSæËTb†»âO«ÐøÏ朞—¾ "¹©Y N5¶µõæi¦SXí!5ø1å3Ù½l~}mçÛ6é¿Úä/ÙÃñ4£ª ‹›}Öv®á'šòÿ<å|ßÖÏ—ŽA`$ŽŸ?ŸŸÎήþßçÂÿn–µ 'ºú,t"Ù…ü(¯š«¥#*e‘A %ö …«­×ÄUÚ®•pê›NfÅû Î?V·¾á#HzIŸ’ă³|Tº c#O€zHXÇ­!L-’ü©ò‰‚%ÈI"™nlkûx¯ðà é¨P äÍÓO7.¸b¹P*™mþõÕ-ø§vÄ)R™^°Ñ`^$žºÛÚµ w†f!40dq$žíê³sÕSžÈÖ m“Öe‡« ˜½ËïªÞ2¿º‘4yVzO³y.¡Ò½8ìè×Ñ‹4å.µ“JÑ•nL$â©7§5Ê ìÜéXì£ ¢üÛÓj>•fŠ ˆhÜg¦õNb+r?!œòt”cLÝë!¡j¡YgŒØ=óRƒ›ÞÑ3Ä Ö´!èc¥"b¦‹E¦ÑddfõäàP3@6œŠš  =8ÿ:åŠÑÃ|îÝùÙ»³SØ$ ”–ÌÚ…è«&DYí7ñ“Ú¦ƒ¿Æ&zrBä¿!nd“I¸ªç6Éy’Û[&³ó§ö~øÈeÀ…´WìÁ&¦rff‘¸"ÖxÓ''HV§Xü"é„Hd]z£q¼ÕÕƒ\îøQéÖ¿nØÑÎ`õµr ÏYz,|:Ië5ª†Ýúqoìkð%{¤™3òS—ò¿šúÚy†L2Kæ N‹'ûù‚Ý=CO4qÇpŽ1…yA^½³ÃÞ`(ÏT„‹ØH~ˆl´~{‡Èh÷̽­–0‹´ˆ¬¼èlBá\…¼ç×Mò$ý @5)€:nŠ)4BÉ1:B§xv½ô‰ÌćIeœµÄ·¶ÉøîF«S<®‚tÌÌ>ãý {ñ„fÐŽ,¼©”]Þ™—=Ã4ì „Rઠ$•M_V’þ ‰ŽÄ lMˆE2¹:ˆh½eÓù|&?h™ÛÚNÛü« ¥—©ò± tèþŤÚ/F™J7ºÈÚ|©ô"m7`®lrg;QÅòiÜ^ùðº%þÄg¥“`hºG2‚­Èp`.EàG[C<¡Ú!‚è“"WW2Úlï5w!„„U­ke$tô¨ý4™›&uµIìØ0ÎQoØ:½µ×O_p&z”d.ÚC´…'½`jº¹ª “kiaÉïûƒ³‹K›±¤/´Ä”Z:{­€ Ùr«XmÁâ^_Išs!Yû0¤¡ª¸æZ<Ø_š›ïè‘}ß©àˆ¼Üëþ'6 &š8ƒÁðÂÏg§¤As¼·‡dÒâñ½l¶\Ÿ8û$Òt£ºG£ž!)"f0’# }Â:‚³œ”Ä–&_¢ë÷§IïΪRñÿ}.üïr,Œ·‹&ÛЋM4‰±[R;¬Þ.‰ù'šª7:·°» jÏaB7,ƒwg•ðÌj›p¢£×ÒƒEã°V\ø¦âɲ6îÑ£ ÛNsÔî&þ$GaCj¨Iz83»&PYŸ³G:Ä“l¤€Ó­‡íµ=‚¤¿]» ƒ$DþÇï°ò þ"±`¶aÜX]ÙJì&¦À*ü]ÚmUˆW¹á$~<’hyo®­eêÒ០• ÙÍ¥Ò¾à¬@>¾¶¶-R[ XB‚]CžR]í)½ñ Ö@ý/ ’(…kXlt¹ƒ.wò Ó|¸ 7@’×3àWOΪ&¦Yð( †HP Lo/¯%•㳜+Š&ŸkÖßÅO‘ˆFJ;$M1dŽïhºPYjÀN™ŽíÂJ(¿grhA\*ýr~ºµ¾ñŒ&oæwKí TCBšÔ54¿&›®EvØqµÞ8jo7€$©½G寯®Î.LH"?¬4½ifu=±µqVÓëK«±©ÀÒˆ94阦!lw] ›8ÑBíìŒ|Ó,HG¶×7ç—¡ù`di~aÃæš¨ R ÷™é½c ƒ}m}»ÑD–bÔ½o.jÉݱíUÓÂÁðåuµº¹ºÚ(¦@ašóri/›‘(FÿÑ"{ÅÅrØ¿©%É7\oœ!Á,•R&ž¤BT¬ò™ à$2Ãq‚[xwIlHÐ@c(ø‡Éh%§oðˆÀ;Ÿä„O‘ГÉ|:}—ǿϧw Ç#Ó+­ãeÏHwQñÎV‘¥EléØºûä{ÎÔuðÇ}Á¥­ÍØÂâz*‘9ÅM7ØPΊ'&çÌ+Þ<¡(ÍÐÔÄ®U’¨1¥îAÏZ€£ötK<¥U¤™Z^݆¥REœ‡C2ÑŸè·qüÞÕèGô·—š­wÂdV½íͼ±¶!Z¸Àaåî1âþ ‰2T"¯wÖ×s‰ª‡?t\›UÁZs©X,½» ñ÷“šT>º°´N ŠUæÁ8lixÍO¦Øp½÷ÖZÈ_$Qð1ñ$—K48ÍÓ“ ¦%Õ8Ia@ìëQûùº`tag{;­š˜ÁŤpc1éRí!Bú¼¨h7Sã{êkÉSŽ,èWV·!©}wZÝXZÞÏf>?%"é„»Clg°X ~аÉêf÷¾`£b!ö–q±Q½B¼±úTÞn¹§S:E“¹YJ[å0ÔÚkk˜ž0_pFáE³ÀÌ”;C6ÕÖ 0ËMXÛ½wzn³E>€¿^œb·…fþ$SìAˆfLÝd ùU±T>šÄú”ièäbÛ»¿ýök*‘õx K‡p‚)·w÷[Ùª)ÀIÍü±Á°Ç?ÿî´B´¾¨å °éMµrЇ¹nZv”k~ÏF ¤â oÏ@ ÈjàEl{ðÍ­Ï üÅÕ•u‰r‚&zÅìèµ`³BKî`BäáO´ð†‚¡¹ƒ ’2BN aÒÉÑÞ^]“q³Ë‘ò÷„¢ •ÚÝÝK§áç÷óyìÇw' kO®‘Û é#ø•|*µŸËÁϯ,,æ3iÀ|õ¤kN…oªH÷A5èzB×Kt.¸ÉDÆ\1º†¬³b°ÆÇT ´]ljŽ ÿ¾CÉç39\«;<-êӌ›…&d8@8Iáë£þõˆAlÚø_ß ¿™o|ÅãËÍédæ¬tBFg²©œHƒôZ;{‘¸6E'è#qû$}HêC ér^@Gšn¨îÝ)±´pGuãžD<…äSO>¡Øþ •$[ÙT*“H@ªWKI¿L2GeÀ‡¹ßÄöö5—©_?,ìMÏ.÷i,MÜaä+„n•‘=þvBñ_$¡®"ÒIBî²)"Ê…KpàÃ8 Z4Øf•^<-*½ðjc€Ÿ’$‚?ÁÀ¬yÁ [¼Èý=Jw›È4n Û=³SÞY®ÄÀ ÌL/œãɯwg§oOË'…Âa>Gé`?±½Ëïü‰¦zÕ3Ô!6¢-uÐúmb{“ÀüŒ=ñ’3Ö!ï‘Cvëà+mͼÑ=C|…EnpÊôv©Î.5LõzFmÑ¥ÕݽÜÞˆmfÐ2#ÐúÈŒyKÙ{dv£kviiv›gñ•ÀÌ©«êÕ˜mºç³ Ü,…ç9Ë00hͤ’°UÞg=#Ý2S‰?ø*$<ÝR;$ÖýZ[dz²m„üJ¨×Œa㻉Òáñoo.H3…|Q‘xR@U2–<ÈcFàÑ{EáyÉÂ.¹½Mô÷ÉÌüâÌL¹^﹂“;<Ì¥R“¸Ÿè†§¬‘gÌÑï:´/XºïÚ$b©îu¹Hq’ Oe,Þh)…;¤{™  ¨rƒPõP“è‘M$ààÇàHìì$°GdD€Š*Qãlq,ƒ´¹²RÂÜÞZ™ŸŸDQ;¾Px¬$]—@äheeÛ\Ê&s°TþçõÙy±¥¦ç6¤C&–ŠmMÀò£õÙ‘!gD 4ÏͯãI4Ø)ÞV+kk1¶ÜAÃã\¢¬]c&„qJƒ¢[/sÔÞv‰cÔ:=0âVúíÞùL*‹¼¨kZMÅØn²K<ÑÙgí’˜;{-D‹îá I éï ’HÆO0{Áíj!Ïóæ.Êw*&Qárë£Ôõ ßËf!ÎBû á©ÑÛagcÂýÙÇò-2º64 ²°3„$Öv‘±…?öŒ®áHôƒ£Öç]ýß´õÛ!ÿ¡SùC—ú ]ûŠ=Ô&oá¨ú¦£‰†#Ñ…T,…íÉö*G‡Xh±tVÄ"¸OwŽÜì‹ѸQ‡°xxøËE•§° ¯7™“ð¸É˜èb(ÜØØ$XŸŽ¬‘Û(™J<ムQ~Ø^²é2Ü‹nùM:E—{˜J/—ƒ£Md–ê]½¶hšNÁˆzÈÙ¯µvðŸ2´ßwª¾ïTJ4æHtyØè*&_0Õÿj•þ³¹÷ŸÍb»+üÛ»7'û·«FU*,ˆ€õÍG•¨ßÚ«"L/4‘„u)»Àe¼(aÇ}])ߊn&6h ©ŒZoÉd áБÜÞ†(´ E×,2ª7æùáu6•‚óDLó:i‰ºYð ŠlÆÉ î%ÅúøÛß*ÕHf¥âQa`ÄÕ%Å›DvÈ ì\dd¡«× ½Gííì‡îA®ÜX=9"L8Äà.žÄcI‘ÆÕ"´`—ÃZO«ÇyhRwW¿«³ÏÑ)±µ‰ÍÏÙã¾ð žó?!ÙâÁa©†¶‹û¹‚~Â×ÄCó (°ôÙ(¶/±A?‚¤¿c%‰¤òµà‹›n,Åš aKu¶L*}QA5ÒòÇ@R›¬Ýô,ŸJÁñÕB2rÇ£¿pÉ$ÎÝ#DÌ|&·»)­°ãÖU‘ÂÔ°Æûô{þ ©¾º"ÔT?õ¢>ÆôvÌp×ù:Œ/I3N‡ô1Iu„4ËAÉÆˆ‡ÙNØ€qéX‘zNR‘kJ»h²™7ªó@vË—ÿÕ®ø‰¦yF×¾`~¢kìÖý@Ó6÷èÇŒžÙ™ÅØÖ.D ЧF‚¾¡j§jc$? ±~{;‰ ÑjbZ58Ò–ôr`Õîá+5¤K%âú£Še™:%føà,•O11XfecQÉpT<„;›€´à §R¡O;B„‚‰&ÞX«`^wˆŒ€ÿž0ôð_õ 6s‡;E£4Ñà§vþàüüÚ¿ßœßöPy2ÞÓ±‹4eö2™•ùyê*ݨ,5¸A_»hwÐ}>|]©¤b±ØÖÖ^6{ŒÍt;;Ç{{E¢v‡÷hs´·¿…~…ÂO ´Hø+ð)âxÁ‡…¯ðÃù<üE@¹Tªüwí»:ÙËæû4Mö´“• ‡ð¬ihx y<3å®—Üq‰ÎuPØ# 6¸¼ÿ¾8Ë$Ó|•½E„fÜà'‘›ÕSÅ:ŸDïç©§ä#~§i`, RÛS‰Ì›jþîñþÁÉÁ!æk£ÓH'3§'Ǻ1_‹Ð` ’1Èð…ø>‚¤GôP ‰b&Õ&€PÓÍË»`óxB×N‚8 ”Zßk!R(@¹ÿ0ÈWI¤†„œ½ww‰UøÝþ.òðªVþýúÌîžé · Fኑd¨±×ö·IÑ,u¢pÓ¨„|S„Ûm IÃ4–/÷#„¤ Šð8Â{æÝ¢5„Q+šÖÖ9­ÏÞ*œdô™v¶?ŸŸB869¢“öð”oÞ^1r£H>ðè¼\$å¢Ê·ó÷aëßÞ^ Œ ¥ibYƒ¸ÈÎSµHÓa£°àÆZ"}CÂÛà"iƒ<˨è j&ÃîàÒT`ym#™Ý²ÌH‡Ã=ˆhèÂm‹£ ýÉœ€QyMkÛÄ:wxv#Ÿ),.o‰T–§¬ÁîÈ ¦ÖëŸûíÝkØ–ª·/*È‹nêpÖÊ6¨—ÛY[«¼$=È“Kt˜Rñxã˜Æ®ß]HÈþ¶Pˆmn^Ó!T'âÛM„w·¶‘I[ò_hövs³xƒzõ7i·åSÙöÀ÷ª6ÑbéÉ.uO°ÜF˜&±ö ‚f€&…•f Ï®ýzq†Øñ…ýL2³±¾£÷µ '‰-,Q4'sØ}KŃÃ7ÕÒ¿/Nûùõoï.NÁ?OK'™d=¹ÿ~}žN¤«Å¥Á¡s¢+?vÍ-âð#¤ôVAÒ#Hzâv}%Q“nXN&€Œ¥äÎfþ$]bœ_…èsQ.#Oƒ“Û·š;ëë¥?[% ðT’;;™Dâ´yðáöð*ÇwS“¶`ŸÆÒ!1BCõÚî’ä.zÞþÊ•¤ë!àjˆz²®á*ò_ïIÅ!@Ep4ø1]¸†ÞËÖ$ð ¨paß_IÖVÁ„vÌ÷ºR$d‹w§ÕŸÏªoO+oNË¿œŸV÷³ñÝs´<Žïbç÷‘ æèèíY5Y|Õcèìµ°”*@N*ÿÔŠF¤€t}†ƒ¤(þ_Tg‚ïÀ6 ~—¡ð´Kœ‡Äà— „ZØ¢<¤"ÅÅyîÒ&¨{¡ørbȧdþå•w`±OïîÀVêÍÜÑç Ý”oî·Ÿ/®µÛÈD ¤cL >Ì篃$üRŽÍ•$AôeŠýlPÚ s#»w¯µöY vìÃÄÎN!“¡¨NEl܆¤ âO’Æ#ùLæ´þþD ‚F>®üÍÒ¥B*+V™^ö ¾âŒv#q8UGÇ[I¾ÉA­·p·ÌÍ”;üáåB6oŸŠrú'Øý“/˜úW즵ԬwõÛ#õøooÎÉáñÊêΰÉor„ç7àÙÝѡɩ)߬/8ß%ÖŒ¸¾íhŒ½âŽ#$¼@=t¹C I éaÛmW“T~­ág!©bg—ÄL—LÐÅ£ ƒ}ii³r|tQ.^ëî“ ³½¾NfFîÃIúú ’Bˆ¨k€sÄIô""Å/§ Á5ù¶Sõ¼gžóÌ¡FO? $‘õ¹^G¹'ëð ’>õS¼/$áË<ÄDºA6þ oíÇ]"$lIÊ¥LT.Eò<¬~ó^6V¢hC5!ÂÆƒ !¶µu\—¼¯lq¥Ò¯5}Ó&{Å&)8«¾xê8 ™¾Q ‰ 5úù¥x ª‡Áÿbä$ŒWbŸÞ3€ƒC”ºpã’_÷B'Ó…|]mºi øiRWk¯­Ehi[»û½fØùzìÙdö¢rÝÉ‘¨'gðý~>_yq à"´ñEÊHår6‘@Snµú„¹Ô|¾€Çñˆå ¯!ÙËbÊ|8Ž ÒŒ«Ý}Ì߯?Sù»úÝâ2^ñ¢RZ]Ý©íb3–žÇƒ½È½›€$ÌDs2'½ßÌ”ZÐà'{¤™7e'-´>K{¯­«×2³°….þÁmjFªwô Ø"3+îÀOd/“!Ӭř(¢„ä%ww/*R"üZ*x|BP`¬¿¹Î$’q?>†§&]}Ú3Ê$6hí…$…ºûìxŠ% _Ù>¶Á4z©˜Bý5¹“ pôú—w|¡EÊÒÄ6peÆÍ­x>“GêGé,Gn4Ú#¹|¿ÞùŠ;ð«”ÙÆJè!¤oÔªF"h:¤/…`AÒß$ݘ “Y66v3e°£X[ãϺÿzÕÛ«6² aâä‚Njw÷ôÞÅgI¹PüëÖ±‰õÁ´éàÃ^”KžÀìO]ÊŸèȽ R%2n 7‹[o´ w‘ym°%AÅÂnŽ@êO²A}”鳋IJÒ­!‰_«!!Aí®~»xxfÀ¸ ›åjÃÜÂÚ®•^p³ÉÛÙgjÜ¡éuH^ßVÊç¥âœáËÇÇÜ©¦Ì=·ÆòñÑëjéu¹¸°¸Á‘M¶óG_pF›ø“mbS[¯¡ðpÔ5Ç’zë–Òñ.Ÿì LúeÏÐ+îSIÈ!ò,—ÌT×­©£~}jNXNBLvlÒEƒîbƒyYÿǘã ×õú`FÌn7VWçÓåìïÒ/Ë%“7¥Ò裡è âåÞX¾êq ˜^\kÞQ—"‹åðøí£f’¤Je¹r+ò!f;ÚI°s#¯ô z#÷‚z"ÂT¢ùM4Ñ©˜êì³Ùg ™üE M5ÆvSâ»Ã;wZ:±NÍðfz/š0h⎵ñG;DFšͺ2±¤ŽºX†^CœŽj9¶¸q=‚¤Gô¥@Òµ9 ¼©„ë.刻ÐÝoï;Å“ÿϳޙÙUâšI"€ŒØööGCáíÿÛðMÈä HÒé¯ù¨CÖHætÎnd‡åº^$7ãÖ@3ÇðŠ;ŠÜ¸Ð¼ë™ù'ÂHD_»ñÞ$Á®fkBZó‚β ´GÂÌýì§ñ/ ’–|.4í¯ :—KG‡+ë)®†pt"×®[ Np?jóvKƒ/™Èü|Z!‚+^«g˜ƒÛÚzbõο\œm./F£ #&ï¸%`wGõã^¾ÊÚÌë’ØØH‘Ï_/ ÕÄc0šñÓž®>›Xã1¼þy›3Øš@` YKk§hÒ\úííy# ¦ÃCx0÷s¹ò> 9± Å•ñ±ê’C @í¶»MÕ)+·£#Ô+Ĝ뛽B„÷÷“;;ÙºwÛ5É€ƒ\.“Ln­­`º¿-¹½“K&~½8ÿå¬üóYùß§çÅ£T,ÏÊ ¶¡±¦Ÿ„fßp ï.tù½ßbuFò©ôyñø× Dtý÷Euv~C9êgÊlÓwIí]HÊI—Maé Ãsu‰säÃTúpfïCúLJäÖBÇe$¾Ò–MgÏ1¯™J`ˆª$<#;W¤#?ÖˆÍpR:{@òÌNÒ‡‰Aå«”$òÀ§ØËfáÞ'’ _c››H]ý¤ð»° à¿ R•þÞJÜe±÷㻉âÁa6•±y`k`âŽîäb¤ · XL ¯lTOrC¶ÙÓ7¹±¶óö´Œ®´ò'ž±F›xxä P‘ŠF*Œøê‚“T'ºnÍÖx‰Sû#HzI_$5VA®A%œøXD‹¢ßúÏ6•}jºrŒÔ½*ù}¡Åùåt"Y<<¸(—Þ'P:8@‚o»»©8àE!“h•O§cXËàÄ>€J_ðñ¾¢ÿ[¯$áú5ÅRO^\Ú|Þ­ú®KÓÙk†]Ò\@"FÓ~ózçîØU„‹ŒÆ]+fÏJïÐ4·ædù›·?’ìð_lMˆ¡€-?PCHXÆó† ŠÎxæßÓÞkÕMWæC‹ädÖ!l“°2‘dvá#¤{Š’‹6ZÀIelRÄ qØl`A¾=­èY^Zkåšø“íbKW¿ƒ!ŸêAünØZáÉõ¶Óãƒ7§ÕÒÑ1úuøÅ#@h Ïfr©Dfzn“-·³dv®ÒÅ’;i}vDístË‘Le·ÔÙÙo‡Tž£öpUSL™£]bëØÚ{ͯ¸c/zFLÎéŸÏ*Åz…8{ YElëA®ïÎÁ¢üb3XvòAŠI~¡³ŠÅŽÞ+( I|!½€X Pïû~«67—ÉMkÀ®ŒFßSÉÊ@÷ï,ºRˆT&Ì,-mxóýOW¿ö"{F$Š×ÛJé¼x’ˆ¥ Ù|&•]^ݱzæÃ>±ÎÃÚšù,™uЙ_Ú†$_xI¬™¨\¥U4à09¢DyÊð'àÁÜÙØ8ªcÄêgt°{ÚiÝó''@ˆ  s/›}…‘rºomm­®Âµx„èäïùH£²ZENŽ;;ðâæÏ$Ý^߈c[·ËÀò÷³(¡Ú¨px´¼¼%ѹ:%6¶Ú‹[º5$œ¹!„F^} ¤C~‡wÞá]èQ8:%v4ª¦Â£jšš"¥@{+6ºrAÒC¤;üù!ê¸b8Õ;:¡îß$5ìýÓõ$´åS¯Ÿ±†û5¶“ýƒÓâÉÎVüŸ-²ïÛeÿïSG¬ùŸw¯‹WçbHDƒ¨\ÄA!¤² ÒÎú:¤ì— éóœñä6)•°['šâÆ;ùzzRÄnth¨÷Z*"¨ôîôW°’g¥âë«®édúi·ú%{„VÓñÞŠ>±äÓ’Âlþz9s¤¿…€ü’.ÒàTÔB4䆮Õw#ÜdâKOÖS¦!K_”k@4€IDATK7Ã=9¾ä’ITYL§vç#ïKqwc£øþÞÙþßTÊçÅ£“½|*–˜žYœðv G^ö ß©æËF“»qüìÜòʇ¼…ØÙlzS)AÖ‘Ëä—¶\ÞÅÕµÝór¾ K‡ïgó©x:K!-ãr‘Md/Pé pF©Ž>ãØÏæR»;X@¤|^*‘'½tïšzBc1Š&Eq¡ ‰î!¶ìg³¨8MÒ¤‚¼j±xˆ37xϛҲ„IêI©ÝÝl2Y::$ê •÷ÏúýåqÒA~/:³"5Lµ‰‘Çîˆ!Ä«ƒ¤F•¯šÕ´.„ ‚þ.©³»Ï”ZI…ž=POAu·`£ÆÃGt÷ â}ǰžZw¿ÖžG0ܤ7r~bÉ DÇÁäÇ ¦¤E»ûmt5w¿¢¦$¹™2û÷4ÝÒÊ„Ú×åÒËdõc—²£"3´×‹Õ©q7­Ñ餀€Ÿî£;GŠäĺBðE¥ôî´ ÿ„ƒxªìlÅææV§g—Ç->¥Á¦´½J½]¢6j‡‹K›¨nŸÏÁ¾˜N$0Ñ í ÷ö;…£¯¸c´~;û×’.[c/ìÓ¡L#qÑù—ö×Ô6ÿ8Ýv=$Q*ðKlÛë2ñuo}#f ×aÔ!S[Sîø®Së Γ²b•_"° xpëPøðj|Xg®Óº¹ØGÍ›ëDã“*r‚C‚–g'G‹ó+Ú»a̱³¹”-?Fšnø'ìý¨'þ¶ZþõüôM= (7`…ó"LµyÕ£ãÚ˜*Au‡‡€“Øñã3¨ÊÔVZH§þè„Éåœ ¬.¯TOï‡*à=kàú¬þ9ðkôYáœ$A,úèdbm"¯PØÝÜÜËfoÖù/ïYýo:ß^ߌmm¨À„$ûoxú~¶Jã¥+ÿq`kûT¤wÀú ±”n. ¨¤«Á‡ê»‘Y<„únÜ/oÊ\ʬð]JÕƒÀ­á$yAÒG·rql¼~À7ÿƒ† v”TÖÖåibŠk‡b(Ý üºÌ ÈI44û÷IJ3¨1„%¹áÒ1dÎ6‘Yfpæ3ùŸÏ*¾ÐbwïÄs¦ö§.Å€~òíiõ&Uó ŸGBm×¾!Îç%©Dÿº||t¼·ŸN¤¶6w]Þé`h!¾“ØÝ‰Ï/¬íår€œ`H'Ò#Îoۤߵ+~ìR?íÖüØ¥ù¾Cý]»²…­7ŒÙívS¤ÖÙç÷G~>«âjµxb˜4ñÆiX1Pu#[ès%Ë.AlçlåF9œû ¤¿$H¢ö»pÔ~XÃl”Û©‰-lyF¦ÀB4ÄÉ&)+ìo3o¼?º¹±KÆaÕÁ-ÞÏåö2$² G,†À¦FúÚC$ÀâðWÊw—¨×G«8(ì# ]U†ÞóëG¸’zrëäD©^g¢þ·Š% b±ÄêÚöëÊ©ÅæÕáQ¯û(UOå–?8ÛÌTüßç¼oš„?µ‹-V/®}nóäädoosuõëóù+G.wˆ¿~‚ ~Ó8åÖ.ÜtøŒ»˜”ýÑOZ·æHÅ·¶ éÌÑÞ\¨T,–Çs|T±ê3>U½«`.W ã¼ê¸’id.=ÈïÛ=óí"cIÁ[AR=fN×BC¸V›Ð<ªiŸêoå0ÌBœùØ $ AÒ‡¶†Y†´>$Ïе¾ùðß‚Kª A©GôÖƒOý5ä¿H¢0Îjä$Ò¿hNö¦‚‘eÈw‘Ö…ÚúŒ®nc«0:¡pIÖ!ˆ¨‹AÞä¢\~S)ýûõ™Ñê£ñõ¯˜?´ËìR¶rõ4ÑÈšºWmŽÎ,//oÚ§¢šGfjNtŠÍp ]²>[W¯¹™7ö‚©Ú­þ‰6ð]§êMf±yЮPD9ÜÖV¢Sdììµ]×z¯í>Ë ¡’ =Ñ»—”ÿΕ$*…¬¦Kb銈 !ºÜË"óÈ:*ÿëƒsK1gp —ßÝ=Ê)¤'ÄkáÍ/nž—KU\@Úþéx–å~6{iIûe¬ÝqÃ÷„pò>o,çÅîßø¡»ëù^ÜÙŽõ*F‰ü3¶µëvŠû{éXœLQÜsÔ´ŠQȨÑû߯zŸt«ŸÒ¾iS|Û,òxƒÕº¯ígRàÓ騿&ÜA2„œ0ÜSøšM&!}Tz FDÃpà ¼QÞÿð)–J,)^«DâÛ1&ûT‚ƒÜ¬VÂn½ÅeLáÊàÙ=X™›++dˆïI~‚%ý¦ZÝË´cÞV‘ 6…T’‹I”Ê ïºˆ×ußa«ü¬+[ow?ÒR~¡Æ_¤Ý6Ô#=AÒ\="ÿ×±ÎIšù¤Ctùzú‹Vóþ°•$rMc©ý ¬wÜ!6¿`¿êvzf­¯íÐE#ß¶J #¶t"óî¬zm6é¿Ýû9'ê·¯+¥Í­ÝØNÂìµ²uOéÚ—œá¼6ñÆšy£€~^qGÚ£m‚±&ÎPÔÄS!¥W–“Á‡‹t`]ý¶Ž^@N¦áä+öÐ?š$ÁàôYéqW†LÁv±©&¢½œùÿÜbÏDlI®ý ÿ~°ã¯ ’°ä4Š­Ý2—PíÜØL‡f·8joÿP˜¯ñwö¹èr7]æv‡×ß”‹Áé.©³½×Ú&2¿âŽkÆüë뱚Q–"„}ˆ” Þ·o} ±‰Ï® Üј —‹î^ßB®ƒV‹#ðÛÛ øÝÙ™Å)—ïçóSÈgJaàŠ9R¥D<Å“OþØ5ÐÌjæÿЩje)réô9– øÔ˜Pk•bìt,Fê7GãØÿ{íÛp›ÔÛÛ5y¶;\aøÅ½\n}y9‡uCÿ.¬¨t"ì ãñ“gEþâe²ñ¨‘é9@x€Úáëa¡/Ö—–Ž0§ªü‡d>Á\YÝîuõÙ{®q’n >uíø¨@ßÀ|Ϙ0„J–€hóу…‹ý¢ÇJÒÝ3YŠ)ŽÚ'š~'Iéùâ@ç¯ ’j&¸Bà Mb¥õÛ°l’¹[2ù‚eø¦U¶°´q^: G—ÿó…èŸ-½BùDb7qQ.sxàw·¶ ù+ß7擦C8ºØÅ×uð†ž1uÍüÑ.8“~+%†ÔÉ:2±:§á £[ê¤z šð zò⪒FÊ÷ÓwÊ™™8s£³kÍü Z¿£Gå#þD÷`mß’þ>·÷¯$aë±0Üʹuy5ö°°_ÈæÃ³›6ß²l$ÄðdÒ¹T2ËS¹Z“3[nsúæa›TMz+°Wm¯­ï¦÷ó° ‰˜u|i•¿OÚGa“Ë¥³*½i{MøŽ˜w77ßœV*G 0No*å@xéK×Änƒ4†;ú#M=ntVŽßžV‘¢Ò _ º Ú‡4à—)ð;J1¨QÄ,ø•£BÒ^]åÿŽŸ~ñ0ŸOc¸h%|òð)-½R[ Ð-¶µïŒàòyLðMtà?ZÀ¢'€Aù<™ö%†Áð†D¢RÇRgØ„þkmi ùc Gr%÷rù!£¯M0‰É×,óè„ü§ Q®.¢ŸéB6uô,O4QÞÝoƒ¨+œýx9ÿ9ÒzIïIrd´÷¾ ý’îÉIªaÑÐlÒ¡÷íZŸ…«²MÚ£‘Èl.‘ˆoï¨ ¶o;T?v*h|½/8°æu¹¼Ÿ…X¶ ±éô=¤È»‹¯¼=«Bjb©Ÿtk^²‘§O7®±°›ÏÍ ƒM°T+’!&õ°º1W‡m¼ž›Žp•í%KçpzËG‡8É;Îer<¥­Cbe*ÜðõÆùý§ÛAÒ§‚¤0O«uõ9úõîÊñÉE¥‹ç¢óÛ¡¹­LfÏ^‡e ˆµn¦Ôæò/&ãéýü^ùîP¤fØx¶WWOŠfûI•¤õõ/*ö¹¢ó¥ØvœÛ?¬u|×,l¦KçfæÿýæâxïÁDÆÏŠ'{Ù‚bÐõ#]ßÊoŒ¿âŒ<ïVi‡¬‘ÈÜÉ~áÝÙ) l-ŒHô€à½;;{]©|T+~žˆhßå†V‹E@Ì_°&wvR»»”ÄÿÃå<æY¨”‰ÇiŠœÏ).Pe1çi lo*Ú\^Žmnn,/çS)XL†ƒÓØ\YA8S(àNÊx„¨@ÄS?ÅðWXù¿û²!”ÍÞHezÎ4ÀžÂRº‰Ï„8ºIˆn‚$ü¿¨#¡ñ£y‹ŽôÃA’£ñÿA6è¿HzŸÀ#Hºg»‰‡çh}VvÝ䙩˜bÊ,¡èêAaïßoÎÞTKðB;êý¶Cýc—º£ó‡æÈ  '÷3T‡Ýî ¿'RŸ2´m lâd)§ˆ‚šIÄÔ]ôµv ¥—‹…!Jx£á¨9XÁeÄ;›ùFÙÀxõøð‚ŒyCK-"]æbª|Dº¸_ÝÙŠä6ƒÛGôé ‰˜Ø#§>£ÙÕŽûˆÁSWï¤pÀÎè3ÁÖûŠ=ü]»zĨœ:/á)ª+Â<°M&°4bgÿ_ˆ„tSÅþÖ­$Ý“\bs…ÿ÷þšêM†P“K&>??Æ”í¢®ŸÄc)ÕˆYÁóÇÚE-ü±§ ýwmR¶P½µ¾ùï×ç?ŸŸ½;«>ûõâ¬x°·¾²šŽÅ/ÊåÒûq7Jã¾Û]ŠI€²ñø.Ø\NÚ~.5ŠBi€{à'iw7¾…JSghÒ¶BFí—Ã_LâÙÉ¥ÙÙ3¬ƒ@š}zâ[[ûÄ;²AÅ~U¤âqOKssðcðƒ\n{}ý>r Ç-¾=-OùfÀB»„öÛ´OpÐ$æ:`º€ .quµ±SÁ¥ÄÌ{È#HzI2D ,\’° ,_2w¶‹ý:§'8¿µÿííÅ^®00ê}B×=éÖ>§«&,¾|&©„'ÈŠîÓ\‡ˆo%Tš^²‡:Äæn©ƒ…)Õxª"Ly‚6b ›Àè7Ÿx{…zð¬8Cæ|Ñ­4;ÃÖ‰ìd2‘aʬ]}ÉPHkšêýCaÉð4!»}"áú$}NH"×™„Wö€&µ· MíbS§Ä G‡ØÔ*˜láO¶ '¿ïhéX˜_>Cε·èñ m›ƒƒB*Ç\ÝFËͼa/ßZ[»¿½É)&•QÓ­kxBxÁà"“ªFOö çhªîðavÖ£ã³22Ê5;g:Å“­ÂÉ6ádG¯©™;ò߯D­ìÍ )œžŽÎ›í¾‘1»aÄÒĵ2ûã;1OÇû JHWÈÎXUrg9”Å…„Ù°â9Å­¾¯iqƒÔ PG{ûèv77…<Ÿ‡›qsu• ÜepŸ¶®ÂÞ‡ Ræ„KžK¥S*“ ŠjG"ô\±û8À×L2cq†_²tm‚I:°­tõY°…­Rè›!à‘rbN=9Çц︻=‚¤Gôg¬$EáܺP%) Ð×å%±8lZ­‚qšx|Ê7^.îî&Ù2ósÖà3†þÇNå¸ÙOæ¸Ä}M©å“BÒÏg•¡I_ ´KbÃ5¤F„tÙ»Q1º]—¬ö §`ÍÁÎTN=chžÑ5…láíi…˜]3ú-´~Sád+]€É”cQé0™Y~¢ðã#Hú|N)&áÒ žððc†rc!{G›`Be°ïlîT?6áUÅIÄ$ôJ]Ýô‹T•`//¡Jj>ý+IdÓuzfþ³©¿;òŒ®û¾]:ižzW-UåÁI¸µW,dó"µýg¤Kbê’XÚ…Ïͼ‰§tÍ+–öy·ê‡vÙ7Í’§4E—`è»V‰ÕîûíÍù›jå¢R¾(—)ÅŒ€c[Ûvry„¢êdmòÕrnx´aß±„ øZÅrJ[b¡2À£ý}øû¹\&‘HcÌ´±²²<7ßÚ‚×ûxøî+€ãöâa£q, ½$úP9ŠëMýïï ’*øÚ–ŽwwOhÊWœQZŸ…©˜ByK¿ ^ˆ‡goÕCsåú°@ëãkƒdNûX<‚¤GôIµ¾’@Ò,¬Äã1UÈ–œd ¹‹Öù½±‰3j´G/ª¥aSð Ý™â˃É>*ì½;«ž—Ë(ÍÚÞþ¼*7ˆ_/Î7Y2@-v<Ñ@T°Ã×&Ho=Þ/,Ž„ `ëíA 5ß+Î`‹`R>8•Žgþ}qº¾kÖ  dÏh|]€°)ô)Þm ést’êíQ¬‰Ä'yY 7Sájâ ”¦d<жüAßÓr2@n£]óý#Q &™ÉÑù? íÑéÎgr"•ùû®6ÞèSº¶‰¡ …fßžžÞÓEäêüüI2–(&%Z[<žâ©œ­¤¯†FeEÆþx+oì%{è)Cg´GœÞÙ§Ýê¶:œAZ¯qäM[<Ø?=>:+ÿrqz˜Ë”ö÷~9?û÷ë3 ÈkèøøÝiåu¹xzr|²_È¥ÒD«‘kŒþ1‹¨ü%R׿ì\"QH¥òyTaJ$^WcнÏêHEÀÇ\uEu ƒB\Š•¿ð$æG5&Ї‡–ÀO4m‡Ø»IgŸƒ¡ð`ã&§ ¿…o‰‡((…ØþK„ôXIzIÉvÚׇgi}V–ʯšœ ÌnkÍó=xF¬†“¤öv±yÜ:ýÛ¯ov¶“}zw3¬?ö´{€.öæ!ùÛÏæ }Gú"Ÿ¾Uœ¡PžW :ÛD“t™Y…ÔÊHwRÁ~ßÕ+OaìªlâŽÀU‚Ò§s.-oʇÜ]}v$º£ò õ …Œ!Ä_DŒ?¡˜ô’>ß–„Rì­KvÕH÷’hýŽÑ¤Éæ/ÿ(=åŠE|±xŒ§œÒxrûK –Ilk‹4zþh³Üµ2O¹´ººó’¥G Ü‘i]\ÍÆêä67§Ï>»d˜`zv5Y* ÔöVÁøK–ŽŒÊvŠMMÜÑWì§wþ׋S—oî‡.5Àµ5÷}ß&yÑ-£q5å˜ZoÖYF'\£6¿?D]žÛÔ šUZÓ¤Ù=4æPéœ^]'[^>Ü'äÂÆûw9…(¿è¸²ÆNNö³Ù¥ÙY$¨ ¸|w—(!ÁWž²ÙR½Š ÿ›À,%Ê14à`ñͶ±­øï†àO¿­VÖ×¶;yDÀ›é2‡z2ª‹vH¬ ¹“Jf®—‘>Ë¢à$=‚¤?HâcÔÝge(¼FÏê»jÉÙdØ$¡G8iª»Ï¦Ÿ@RÿkrNÿÈì›!Mü¾Kóm›Ìœ¿(#“|:}F î¤J‡G:Vßs¦¾]dÂŽ³¨×F•‘îâFw+ø ¡"q†Œ±ƒå®.‰¥£×Ô*42Ñ蜗!÷MN-g7ņ jî€Ox›ÂÇÇA’ÂÅÓ?‚¤OIbt'aŸ–rªY`lç G§Ί'Ÿ4þÓ¸“å±µ-¥ó œ•k²×»5 ë?˜“<ÙOǬá¶©ºÄ“Ï™COºÀô¿/N‰ôÆý-ô>Ùdz{#ÆL*zÒ­î›Ú…“/8#‰èÌ:6ž+Ï̯µò†ž2 Âq¤ÆyÎ4üÔ­ý®SóM›ê¿›åÿj•ýÐ.û¶UúÏé¿Zú¿mW}Û®þG‹ì-ŠoÚßuª~èPô)‡ò9|«˜F}ŠÝKŽ …t,vòpÌôCã|n}m„­X„¿ ‹ @1µÜZ]%grV.ïe2Y\Fjñéº øMS¹¯…¡Yb/·7¿°ÖÆ5ÀMiÅs3–©…7Õrxnë{Œ)Ÿè‘¥hÙ,~´›ö’AÒ_$uI¬L¥›;èŽp5~öjQõ¨ý,2r¡K€`zµÎµõØÆfB?ìQ8[„F$o i"KkuFŠû‰4ûIÃ>’þýúlÂâoáŽt"Bå§¾ÙM»µ¹v³õVS)¬W’0䊴 'àÇmÄ)\@B¢®HGn!`0Fú‡ÑÄ.­…º@c…ùc8©’ä é“CR½ïFÝ,,þ®ô´÷Z;…co´rtøyµJ tx˜AJÈd¸¢>” 7A!ù|uŽâ»››â‡å«Ž]÷q·¸ß¬~1O‹Õ¶ç¬¡ÑÄ –ž!Ò/ίd©œ?\>©«•v¶b4¾æ9CÓÉÓõH­m¼Q¡Ê¶²ºó¶Z&eØ•-®ég ÝsÖ`g¤•?Ö)6vḬ‘tKmt©½»ßФóûít©ô½†¯VšÄÜ)š|Åþ±K1ivþûõ9„šd,¶³±agg}dÜûpœ¤ò|§  ßÜ‹J°,4Þ¿ _á$S¸ÈÔ¸ŒHŠ'’;»D^üŽ‹ùAP>Aö˜à…Ö$»oä)]‡fŒ€k Æðë2àÍC£kþ9{Œ!sàÙÔ…øÚËø’AÒß $é!?ˆ*¢Ë¨!%²tIlð6H¬K;"ŒvKí{»ØduÏC¤[\Þáª\b+¸WÜÑoÚ”ýKñðx/fÏËå;n$[Svõ]I×.×û˜IW¨Ü¤ØË`¤æÃ‰n†ÂóŠ=ÒÙç ÉÜ4©³[æDª¯$qàƒ+¼’Á@ß01 óõ¡ñ¤»””AÒ½BRÃ} ã^›·«ßÞ. gßž–?jÜqǼŸ0g!}§d'‘Ý+—J¥àý÷÷ö÷©-|=ÆœßJƒkýWƒJ¨V.9½sÿhSv÷™—|Û*ý¦¹ohÒ{´·^*>”­V >^]\œžÁŽ'åcDÇ!¢¾Í#á€ÕµAc Wë`HÍmBcg¯…ÞÉ¥ó]ÔÁT¸‰bŠ ¨"ͳ~[W¯¥™?ö¼K®PŒ§#ÑsŒƒ« ì¯!Aªt€Òvvˆ:’£,²)$ Ðm/›%(j{u [ñt;Äíà¬ô]30¹mlóêÞ'ZÞÕ»éd^ZêbâQÍïps Íëmlî2DÃ?Ò4ͼ±®^4XÊS9÷òxèÖ7\õT»ØÌÙIa¾¯ :ß$}€Wú5@Rÿ#Hz‚â'õnþÚÓmDTí‹ Ç¥ÿ. ˆr;† €hš&ì3¹LN3iïµ3´²¶‰Œßv¨ä:[.•ÎÄw)„>Æðc¿\œÚ¦¦Û„ã$Q¬íÈ­¢d7Ü ƒàǺ¥vH‰ÒÁ xá©]dê‘[åCþ!ë¼Î4£žˆ$êQ"º|Š¥òrÔ>dTãByØõV¨õÝd&½g‘<‚¤û‚¤†2’éj™”¬¢7Õjñððá¶ðâ>¶èÊ]5.}@8BÅS;»Ùx+åÑÆ‰-ÀÐßÅÆ)~újP @’;°ðÏ6U»ÐØÊÉÒ~סzÎÐøƒs°_>‰‡Â‹€D÷3™“ý½2 —fåKIžìÄÿ¾8ͤ²Ò!O³À„„?p}—ˆÄrêWS{AÂ’„Uô’5ø¦¾§4…Õî#Pm+\Q´Déƒg ¸³oO«ûùBtzqgsç¸]^XHlï‡ÿ­i4\dꡲ!2Ö¢¼I¯kæ'ðëÙT*Ž9vùtæ0_¸ BÂeνƒ|׊•Ò›jùФZÛ7­ò¬!ìI`A,û>k¯ÎýÛÛs@±Óó›Íä†Ù)6±ðœ) nÊ×xôÀ×?²"ù\tuÈæ½:Ý_pË~¬$Ý~\¹ªq‡½ð/8ÝV/Ï4c®M°[jƒ†ÇßïGíjÝlµ›©@Cpt™“Öok¿ïT÷k­©D*¾µIDö>î×}„*IÃF?š&•¤tÍýç*0"úÚaâ5]Ó Ð…èj{1ª@}t“wmm+½¶‘ N¯Ï-næsy©{¹ýÍ­”?ºÆQMuõ;(au÷ ª¢C¥J΀ÞM !s1,¼ÔðÐÞÐPš}IŸ’je$¸_XðÝÛ!±¶óG¦g9¯îîíz'KZ<[¨v&ØÈkíÇÕuBº„e`®ðÈU.™$Þ)…L6¹ –D]!lOUY¾Üv~Š5/FÌÁÑÄ+îÈ ¦¶™3ü]Ç“g’)Ø5¤U9>‡@a6™Ìb 3ˆ»»ðÙ« ±%ìIwQ.&âÍ8Re©ÜX?6È£ ä)™4ÝR?à¤6®lâŒNâK‡…Ò¡>…~{cóK‰"ðQDrh_'ÁÉWOÎìÎ¥cñŸÏÏà†ÎL/ŒLºì®àîÖöñ^ÀSb{ûyrßá¶ÖÖòét•“Pê ŸÉ$vwábÛÛÛðÒ²:AsÄÄ„§g7¼¨ñà ßUñ$@át"ßM¸}3¶©È¨% R›_ö ¡A¶~ÀS:.àuK"­û°°—Må-uõ9!]!PL\Õƒ-€È©ÀAÐ*‚;jÿ'E¤k•¤†ý—2}‹ n8iÖŒ¸=FoN=?‚¤‡­$ET“³òñYØuÈQ¿ú‘F´t»Ó?ŸNRCËãÊ!À̈Mt™v/ž‘ !N±T¨E…§ÆlêQzÈ8鿚¤6Wô··¯c[[)¬€\ù N*H1°Èе’´µùÿëcPÑqñ þÓ~–öu9˜ØVí.7]2·Ã·’Œg—¶ Æ0Káèî·xBË[Ûɽ\á¬xòóY¥-¬®Ç­žEÀ|t©«VX@JßÈê68j/zzuÁ‚lX!ÔñXIº'‰I ©£wrÜì-îïße¢í³KJ„ä K”È>`5¥Æ…*•*xð› ÁQnó„§‚|Oqýड1÷Eqä§Åã™… f¿éû.U›`ô'†¡K8¼¹¹ûP·ÆBi¸Ã§ƒ xq?›Mb;¶³º…QÓ¡àñÿ强µ• LuË\ØeÒ¥4ZcBK)éC>Ó)1· 'i}ö&¶ÆQNš¦v6wÈ \TÊK ËýríÒÜâeaé!ÕñDØi>N$<½±²6Í¥s;[1çTð»fÞ·Í¢Pd±´¿¿¾´@ç‰"UŽÚÙØô|¼·‡šnÇ1ã»›[¹d:ŸBLpâK r¯«Uø­íµu¤0ŽkrçeXTǯ«ebÔ?ß<ÃÕ5@ŠNwäy·Œ.¤‹†~êÖüHÓ|ß©yÊxQ ¯(=H$»ÉÂÓ§ñÛ< ¯V..àAÄ«µØ†gÅÃs½#sb|ôŽÌCfÈB¿ë}Hð_EHa\H£†È5 T€¥”„#ÔwÞ'ó’>$ ¡f w ЫôÂ-‰ôO÷ÔúM-Qxöv§2ôÑ{LIBŠÔltaAm`;ÄÑ"@xT ျû„¡çÉ' Ùü»³³ÝÍMØÎoˆ¿] ðx¯¬nõHM€±à)EÙ¤6ØHÜnGj:šSé¥ÉY«öô d#AéPP2âi]}H ¹— øta±ÖÛ,²iép€Öç I¬¢ÉN±Q¬u…gÖ“±L>+¦“Y— ~†!suõCÚ„«J¢¯´Ý.ÿN W’ é ‰ØÈøhýå 3ŸJç¯/J({xóFÆ[=U³µ/•núÔ’& |:"³”à Υ¢å~ òq†çËŒöè·í IÏÙ#¬¾‰í­øö«põ=Éèlíð1S»»uã6Â’S:9ØŸtLC‚yN£öÇÍ¡ jO…§’&utI,LÙT«`œÓ7²´¸òËÙ)¼\ð_/ÎFÇ-ÿõCg$)ì? "uœì¬.­ŽXŸ¶ñ8BE'G)O¶±uM,ÍO]Ê:ƒãnlf²y/|8K$× Ðd!F3™Œm¬o­®Â ¸Vç•á 9`ݦP‘2±¶²îñ͸½Ó»ÛñT"}^*ÁJNÄ’3³«“Ö@¿Îòœ®ú¶Uþ”¡Åí›éý6–ÂÙ£B5¡Žr8Ðq±> ¥n©‹!s@œ©y ;r9F#¨‘1j"gHsò¾ ÉÉ¢ ő͒…*)5â!DXD|SÔ=  Šú¯ÇvÛW’xˆ¿‚®/GQG•ã>( +'f{‡¢ø<Nú“€¤Û¹J HfÂmÀ²ôWsäÀP‰…­aõwˆLÏ:›+tzr´¾¼9ЇAR '•Kº1o o¢[êèAž$53µšs…p±nºHç3M-Fæ6WVc{¹=ä£yp˜LduÆ™Ž^ d™€u2g§ÄG‡Ä&T;è’IDBR âvgŸ½Ml~ÅÁëN†§Wÿçâôu¥˜Iå 3±ÍöêìwÒån–Ê/4„ô¦Y.Hêÿð|R×K  ÓC ICé$Í>8ÅíïPI"“ÿpûä:s>Tüb ©¯À‹<ö3¤B¶¢DK·®ükón¹\7§‘j£òòÃC%„“–—·:x†ç,C›ØØÂñp‘éa4¸ß÷aaçÎRìœK©îòÉÁá„5ÜʇG’x56jÜJO‡‚¤dÝR[åƒM¼‰—LÑâ9Þ+”v6·zåC?¶g§çáó6*_ßh–PGµ¸¼¸ò¿¿g|×.ÿ‰¦þ±Kõ¼gðg¤‰;ÞÌ›Ðö‚5Ä왉̔ö‰îåN€ÔJÏ0”„5°ëŸŒ“D͇dáhÑ‚€ý3à5˜§Åƒ!¦*ÈÑ s 'ý AÒ%ZB É—õLݲãò¨­`Tð²®V¡‰&‰Fçö2étìRaöô$Hp××wY2s›ÐD“ê9e„„ETµÒø wg¯Õî]üõ¢ú“OùàMd¬ïöé½Ýx q±PhpvË\/ÙÃLL«‚§ºG‰FÞè¨ ïh™¹Jû¤-â /ïþöóù»ÓÊæV22·=ê˜ïQ{ùŸb4@“¹Xj T”F S®ÆÒ, .°Hà'»¥N8OáçʬýÍA¢›¨¼°’aÃS댰I †é—ç&­±ÃBòøÃ\®||\úº¢5-€€=2‹‘\å H0“)ýl2Ãéû¾KÃÚž²ùJËÎVì jÖK×™¢öux[H“rÉdrw·–/a¿°“ãý\Áá™næ ·Œ=˜Ä{¿@ÚUbb¼9a/‡-^·ŠL¯Ø†^Õ¤Lcjg«ÿÕ"ý¶µotÂAu÷¤ËvQ.¿®TΊÇ›÷ÿ¾êëê5uöšº%uÁˆ|“!sy[Ì’Œ¼Ïàá“}„Öû'œn«/ rãÑk6Àêoï`Ðä^QNÌ`œ"Ÿèáõ—I„µM áàôåì…ôµa4¢ò6 L¬Þ!ˆ¿\\œÜ1B! g¥¸°´Å”!•L£®ƒ ÅA¶»¨·›0Ÿü¡åßÞœk'ˆ/5b»I÷mB#‚/¤[‡îæéãD.¸ ˜f€xR…W"m½–œ1ù g{+žKç’‰Ì~.TØ[^Û˜Ó¤°=êÉi®ÆÛ…”Z&˜R $g(kiýVºu÷áa£cÔ@?|0¨ôgIµ$äæ}°’„€ÛÑćÝåÿ|Zù:x…¬RÂR‚¥K”!¿²46éÁïíÒéd,Fê._Àõ¶œMeÙ}£ßuhý¶VÁ$tñ¨ÅÙËÎRP؈Téà!cµX¬¦4‹ !€–W69ý£¯zt€3è¤~\ŸØx_Ômq 3•nˆ|]”{ý,%¢¿äŒ=aš¸£þZ9º¹ÙETIzªÙ!"uär{ÙœÕænekàÒu!m'.Ï ÖUÝÊi ÐRG¯ùKÿ¼S¢œ„~~ƒ_Sâ>::ÚÛ;ÈçãÛÛñ­-øÉ[‡à®ø‹K‹ëíí4MìCÿŒ®…XÔ!—éãÖ rć¦Ò$‘õžF¸2Ta°¬£š”+_‡:|m˜ØN׋ÑÛª5YI‚àÆ u ¡sЇ’pBW ²T>ƒeîpop’rlš… u¨NøÜZI¶ËˆTÛ¯]=J7è{ £»Ï.üs¤Fª|}q„…úHÏ@Ð8µtQ*.¯ÆQƒV"÷*åýAÒûp'UL‚ÑÄw–ö~½8;kpYúèñóYÅ蜆èCü"<ìã Ñ__žþ…`ú’7Ζ[vwo«•Ú;¿.á¥þXG¯•­ò`:Q=B÷7ç n+FÃôOŒºˆõ ÊJežÒ!p°¤šÄÄ–Û8JGÌÖ£°3ä.‰Þ3¿¸g§üsÑÈB&U˜_Ü2ºæO›ØÞ-C‘ˆ­ñótÁ††zä¾YΟ $QJ*âá9X–¢Ú×Ëâã5ƒÛ+ÄmÔ´­Íÿwò s³K¿œŸ¾fE§„Ù!ùTŠnþjjFT"-ÂtÎ%“‚÷íá×ÑÞ¾P6ñM›ŠŽkr¼d|×®Ô ;÷rùñoA~€'2t%ãq8˘22{])y Ϻ=#t©Q[pñXp[¯í6éÑKå†ET`àg;N*\Ý}Ö—œÑV¶>ž!\æò½oÍÛ³jlk›ÁWr¥#O»•ÍÜQØÉh7õ9<‹§IÔ>&‚JN@*/{ÿñRÔ§Í$S–º×€;;p}ö°‡ÉGiæ(ÜŽÿÐ!{ÙchN´ '_±‡›9Ãzcds3~PQO¯õÈ]} k%ùÐ%ß™ —ÚÙÔVX£]’b’6T¦š×Fôï’.9Iäqµ5×ÐÆ©;Âù0^ºÌ=\[\‰ÉGÃ,•—X)õ I44ËÕ†:{Íp•Л?Ä2v”9OÿÉÚm%%ŠÌцc!OheÈ:‹¼)´!Á#HúHº¼˜µMÎJÛЫwº‚ßÖëÕÇfpŸ¢ØZ*mÏØ#¯x“}6xœºú½öV‘å%wògŒ§´/,mRcáh 9>y].¢+Xº×§¤TW;‚5õg»zÍ\m+Œ©&7j~¦ÒÓÕçlZš…–V±¹Cbíì³w¡égvHìÍB“rØsrpxR@†¿\œ¿©”^WÊÉDÎá[QOÌàádÄïfªüLU Gƒ2¶‡éØþ©*IðÄâYHî†LÑ„ñ1Õ%±6F´œæ"³L ƒ¤žavzñçójéèðkVtH ¹¥âáíL"q¼¿Ú0¸þÕÎü3¶µu„û5’Î1GGe°ü³UÑ.2#oµ^sW¯©…?þ¯™Ë3'ÝŽË÷š‡‡ ,0é¹\é¸önxÖÉ&UOŠ©xzÌè‘È>AHš ÿ=”í[M‡PÿKU}â‹ R)Øùžt è'‰8Ó=oÇÛÓJ.™` µßµ)”´‹ÍLÜÀBR´µj7%Uâ¡P€x“HSj{ÉýÇ þ”;ðºZ®]Ø!:)¤µú1(Lj&[à_-Š6Á8 ¤.‰å{D ²æ³{ÿ¾¨þŒ$3U#¾f™ƒXGÄßé9•kˆ³Ñdš­ ÐdînÙ• ‚*5⤇ª$QÔÊ•H8!¶†®,¸Ýš‰éÕµ„Å»ØÖkƒÔ”`SRLúÌ0{$Í@‚Í´wtžüïƒèëÏíþ éf¿ï3·BóåmàiÃl Ú/™*OK1çAÒG*IuTg&©Pœ‚•÷‚=üS—ª_5žŽÅ yPŇiŒdP9O¯¬ï:¼ózZ“\•C6äµF£³ë#¦€Ë3û+²:$ "üüñÞþôìòÀÈÄzZ¿ùãjx§ Åñrð…´ß‘pÃMGÀN¨ ŒØçÍî¥ñ(_ãÃ5jSáæª}ß²/²>nŸÕMø–V¶Kûù\"~Q­Àæ}TØÛÝIÂÙ®­Ç•cáŽ~·t$jö®:ƒÖEÑൔ(ú·I†( ñŠì=Xú3àeãÑb<*ìaãi𛤓$?¬4R/{†´Ã¶Ã|ÿ‡‡)˜1}¼··ŸËűaêòZ>ÍP¥T ö€ ‹B¡ÙûØö®~ÔÙÂiASôÀIÝ}–ézŽt"“ÌÀsúÙ-*xÀáÒm®®RÕ¯ººò±~wV=/—Œ¶P+ÇÐ-™ìÂlb´*îïRy% ‰¥„a¦RSD8Iæü©[£Ò›õÊga>4q†}‘ßV+ñ‘þ ]Û!6!KÔ_ó`‹ÉËù~Cý˜ôô N¢õšþ«©O¡5 Wªt''q¤ÿ/ß™|F!gfWŸ1t-üQ¤rÔgmæ1û&–WwQÎOë']½†‚TÓƒ¤¢[g™k›`Ý[ºGå냞ðúˆmž7àéQîÇ­¡ÀkmÐû¤«Tß­´#׿Úx’Þ‰éŕݥÕXhvSgœ³å6´h?gHí*'‰Ip’¯¦úý@ ‰ªÌ!ih¬I®ä½lI80a-Ò@[ 7îp é£í¶Ë}3£‘'®ÔÞ.2=gZØ©zÂé ÌLÏCýåü¬‚çŸomÃaÉü“7•Òéññúzlm=¶Ÿß?(ìA 0«xpЄj‚“ó“½ýáIo3IÇ¢¸ ëÑÕA™YÍA@ %š­=™ 9 Oãõ—³éüÆFÂZjQ®•Í=½gÄ8ú´N¡Ú10ì\\X¶{çÛ£Bµ½[bîQØy*'wÀÓ%÷ÈG#s‹;»±Œ;¸ŠãK€túa³U¾û šþñAµ·‘&,už.ÊPzBBÊ ×jºhL‰Iº»ûMÜQ‘b<C3n_ÍŠëÊfÉÔ©Xìð÷Iàˆ?h%©¡4R-î,wï\FDšÄò}—fÄä+žžÜkØ­Ng âÔq²p¼¿ïvß‹í&¼ùvÁðæPw¿ hx©ÒÝ{Ó$©D¾hpö Í둅蟆^ådW"?ãöU>?==>2[=­=êçLC'ä`ˆàêÁ¨Aýå–ÐpÅ] üªýhÁÇlâO4±Ôs3‹Ĭé©C½==Í¥’‰],(z÷BJ gfÖZù£íb#  $ªÉCk"“«ttô"B'Ò('è« ôェ—e$tÂ_[¦>+Ã]K&2C–éö>'O!(CPIºÁ¦Txn¶z0;+9™Ý‹ù}›w…qÉcûÜŽÛ_$!©zocYŽ¥öhB¤µz_ï¶úm¸$'Q"@¥Uõw¨$Q£¹µÆ%à$ô¼! Q—ÄÚŸxÑ3ø´{àûvi¿j|suã¼xü?o.^W+%L¿h a—ž Ø˜ó´xrVD†PXzî×ê/C ª7ÕÊ^.ß§±>g "Æ·ÜU#*Ökà&`õÃ65Ÿ'¡½˜Çjš¹üB˜óÒå.ºÌE—:iýŽWì‘V¶®Gnoá£ÑúÑÜ]F$($Ê á`Lç –jÚ sâ’Ë<ôÉlî? ' “EƒsDø»5ƒ´Pà•ÍÁš0¸½šÚ6*{>›äoÓn«%R5µID‹& “xs·±¹U0þ´[ÛÒ£–(Ǭv_|{çuùä—‹³K´êAEÄ‘ñ}rpÁó  _>ù”aèî·" Y% dðÖ”Ð0= 3W"ãzšRÓ’£ÆÁ¬´PH»›y£¸7E&GÈßâhëÌMli‚i Œ¶)'Ä…ª}Ý'³¹ÿd I>ÅRmH€gw7ã ®êÍ³Š±ÈÌâŽqj‰‹o ¹8ü†§DjÄi›[¸Càì»jùK(Þ±Ü_“»»¿Hª{¿@%)›Hìnnæ3ÙŸO«™dV¨v´ŒÝýÈÐQ”D“?ÑÔÿ\õäs™O‡‡Þ@"”OÆ3©ì”wÚd[]¢±&î8M‚R–rŠ}•SüI7@Ò%Nª·º¦:z­­¼!¯/|uÛï²H:+—~û÷/s3³¯èÒ»Ôm‚I¸2€u0G›L„„¯m—'?X?“ZmÆÏRLuõ;ÚxC koªU¸•€PÏ‹‡ÏÛ¸ë+k¿œŸn!4yx÷rßmvμ`4qG_± 3FœÒe«}¡çëÃÆgXE¹&Q†H„ýö)ÿ"dž„ù0¿´ÍV¸XHî$Pç]E$}TܸA' åÞµ¿³Ï% om§l¾’.GÑÿ¶ ÙB ú="àFʇGùlAdˆ6x€JÒM?ù›–a éc ©‘ß;Ô€.ƒ8xK,­‚‰§týO]ª6޶›¯³¥ñ7•2DÔ‰‘TËûù¤¡ð¸^TnW¡œ2gçV›Øº»u-‚‰v±©KbíØ;û4)Rƒä §(Á¢£@À”™k*ÞDÞ-fbbZ(,_ˆ#÷õ× ™­Õ^1’£„¹)Q.ÂM†¯’áÅø¬à§Þþl ÉÅ aÀF6ï2ܦ¥•˜Ö=98HƳȲôÒy&ÚP „w›Ø$TãÛ»¿œŸ^ös@å‡ÄïÄIª {—J‰/’Ò±XMã—/JEH0 “VþÒÔAM7k‡hâK×ÂÖÄc‰×•ò'Ö`ˆ®wéd_7dêât †!/ú±[û’=Ü&4B]zÖëÒÉþ'Še\‚¤† WÏ@PÇ;lLýD×;>;-~LO²f¥R*½®”6Ö6<Þ0#JSÃÃN—ÖÚ‚íÆÒÍs¾TÙE¨Å×ÖkªLAqìJ'Ã#æŽÙ¿šDÏÚ…‰ÝÝ“½½ÕÅåR£ˆèSP‰ýä$<³Fï7½âŽwˆ&[ù£‹"v×6OäñuõtÅèRGé DVˆhÖërÉá[ÀV^¬îúj é–éWÌ‹Ô%´Îîç÷¼‘Û@Rôo[IÂË2L²M‹wmÔ¹Ä×"§—ÿ@D³“ÆŸvÔoðøÿ é£í¶†kuY#­wß‚lÔFña]"AK¤$ó”ixÚ=ðŒ&Ɇý¡¹B6_„}4–†Ôóy·ò]ÉîY^Þ ¶D7Ú.GçåâÎvŒ-yÕ£kì\…•Ö;)tÙg,S ޹¾¡@·Ô h Ρ]4‰?Â4EÆo,&}øàÕUCàÙFúl 7"ªÝ2ýd™®üÊ5ïdª«Û7èüÔwî¸Æþ\ ‰”Çá¦ûiR”F³.XŸ‚Ó©Üaá¯õ“éQÞåXJM' (ËÍ‚I…ÞVH'_S*_Eα&}\«_Öߥ†TFÆûûÙìîÆñóz¨7‡÷Ì&””9¤%žÀ| oµÀP1 @’±U0þ}§rsc÷mõN ‰X°!Ãפs Ä1ù?O¹ÏY†—œaxÃn$!fÇl7éÖ Hõ™©O_i—•¤+0LÌÝz”î'ÌA®t´ÎTO>¢–DØÓ±íÝáQs+Kþ”>ð„¦náBô`Õ*Ó—†’›ñí'o¸<H U£ GZýb©ž#Ñ=íVþØ¥nbþ¯{–WNOŽ7ÖÖJŸ(ô@>ÎE¥œJdeC¾&¾©G1OY;\m©ŒñÞí­÷Ún®ÊµººIeÏJÅ\:7hôµ 'ºú,\B»’¦¿4HºÏçp}ã‹ ºÍè¢<‚¤‡IõîÛ4U¿¹(ÂN#x`ÅÐ6!„$+S‰ñ«˜1ÐL™'({=eè¹²ÉõÈY±×wñ´>:{ÍýñZÁvëûb÷'ºŽM·Ÿ’p4ÖœÈkæ%H ß±îx}Ö“‚}´±éö×€½6§n™M8ø`›ëýc¶å¨_ qwB‚‹ù¨æÅË„ãvá„aÔQȤNëþ¯_z‚¬NÇ·¶.*€Ul¦Aºo¿K£ Î!ÃQÁ*ˆxä̧RêSäñöMµ¼±çÊÍÏY†¶) ãžãýÊöêE;AµÛJùmµ‰.u ŸÐ¾íPÁ#Ö*˜d*œ/šØC,¥ë ù0/0TK–.w²Ï‹¹$]&ÕÙhù!߯oÚÕBÙÈñ^á}÷´ˆ|ªÛ›;4²YáÌ»$fºÜqsŠíά)$T#ÄTn>¶Tǧä¯ÕÑå.HÛÅÆ—tYls+ŸJRí¶ê'Bó2žÞÙNˆ4®ö^.&!þ¤ýØØéÇû@L]·%Dt[ ÞvI,2½seuçäðP3êcÊmª1l“‡Ø?xdXKàHM˃õAGƒÎÓ\‹Å³“®E¦ NÉÇ«çZ_A'émf?õí¶F’»ž:°´:ÎÉÿVB†Ï9àMáZÀÊx¬$}It»0U­!…¸>"°}2‘]¥g]ˆíHìÕˆ0]Šæ“Ñ(ÇЯµ ½¶©éT<]Á‘å¢RF)/‘Ö=ºþ úW=þùî>ë –¡G9… ³ºÈ‡'>®=p!]cÈ¢¡™kÞ#·Vn3 D_%ƒ²‚ùwË~þ+w€šú¾o|_%©¡˜ªÑ·¥Ž6¡ùC Oÿüž9€ÒáÑëj9¾ãö6ñÇ!)‡Ý· ‰FNQäÂOä•Gá  Š8úà6Z¿½£×PƒïÈØ/„5JOév»ç0—I,Æåðã½}ª(~GíSH' ÙœjÄû’kDò­Øo`pµù;0r+ˆ¡²šÏLÀ©öÈ-³ €º†L`des3šY7˜g†­³½C!"jE9T~ÍJGêX½+k ­i†©ô’ %_¾©Åpo4ÿ><ÔöxÌë3ÛmïÝjk¶$$}î{!4ÿ’¾HºMM¤†–`iÂcƒøùºKó Bcâ’ù8$àá¢Ëí"ÓKÎè3Öà´W,M¯ÊìðÌlnÄ×#Ó‹Èyêj²©ðoo/TCH4¥‰3y5–ÿÑ¢QÓæÕª_aÒN¢KØg*Rdk”¸þÌ4£3ס(¡œì¯æÝ6M±¯P}Hä!}„ñhN’êZ]“„0ÝÊVë'—ææ¶Ö6ëö o'6WVÒ±ØëJåk·Ø®ŽÔíí¥b1øú€U4òqà ‰Æ#ü•ÊÑÑ{§÷K ›üÿÿ8;ÿsqÈÛJy?Wðæ†>õ°«K0ôC—ò)CgÖfww¿Ha]uT)„ûŽI$!Ž.QÖaÂû'Üh·Qqb¹¤:ä®oZå“ϯ¯ÏЇ· ý—Ë©x¼_=Ù"0Ò½#HzUŸê½ˆÛ³\m˜ŽŠ©~Â.€]† .ÀakÂ4ಉ®È¦R©Ã½ý1“W(mÇßUѨÊÝ ;ZÀ‡‡ÃæÐSö8wÀKøC$1ß’®ê$‘Sò¢í×»"3«ŠaO§hB58Õ¯u§Wýá‘Æ…}lj´ ñ삈„îø×I8¿E`Ž¡ô² QŒR:ølÍçë y·uõÚzG殡[u‚X0è@Òµ­ö!@’ÔùØnû:•¤÷UkÄóˆf¨òÝÆ}&4&"%à!N´Èãº×Ü*œ´ôM›ò›vžìmëѬ­n_ ªé!5É‚„”Ϋêá©f¾ñ»’n}¢nsô‹àùA\C ™*$ÃÚF2Þü|5üº05>Zµ·Ev5·@ú+U’®áBbVC ÙÃwàÆ!à«óÉèÇôX0Båà iÈíœíç’©"þò¨Djw7ïçr§ï‡_®¡­:Û^¯ çT´×v˜ÏÇ·¶n-#ÝT9‚zØäÓŽ8——7Ö‰”ÆÿjêƒÇí§nÝKîìîbMb¡õ[»ñäj”£A°Ú¨<„Û—&Ý«’á(]îâHœy™˜÷W’Ðûc­ü)Tª‘:±ž¸ù‡nƒD9y˜Ï–n!º!âv¹œM¦úµ¦6‘6~Ž6qr³ÏØ}km¿³w0¬š¬æïYèêµÐ$6ÄÒú ioA({ÎÔÑLl7“L3Å#O»”Ž©èÚÚV.•…³º#d‡äÐìœyÆÅ×$!©$É]<ý‡+I”b бt¹›­r®­í&“ÙfÞ8\6¡Q¬qZœ3Ú 4™+ €Âס"v8@ Ipç­íVô1âaÁGp“¡.€w9mwÍ盕$m¨SlÍÖ‹ˆ=a’0sÃ]¨fi§ß”ÆýÝ+IW n$É=êÇJÒ×I7Ÿ Òôä Ñ³+ hªÔD&ð¹uº7iêczšk/™[ã/Xz¡Â¸¶¶}Q.Un¢Hy´·Ï•›šø“T%‰“S ¹_p'8êÚ$IôÜ’Ɤtÿk²v–7@R°SlãáeÄ@âÀaÊÀ¿iMóƒÖEôñU~6™Ò­óúÿ í¶‡Ií¶ß$]9Fæ$5¾Ã>ÚH`  lLZò’6\7’°¶‰&¿iWÑÅ£+Ë[¤AƒUÊ[›»Ý}“­"s{)ŸBx«¡Þsy®Xas¡Á ‘ ÈU9œ[ÜÚ\Ûž˜zÁÔ¼ä »K6Ïb·ÔÖ£pÀ0±X¡©’iL¢3I©xc¿'¤à‚÷,byU'æØŸ¨’tÃ@:Ú »í’X¨ÔøcX0„½Û•)Ç1kÉA|`Ê?§’DF²ÆâÁÞdˆÂ™ Ô‡*IâáYŠWNœ@àTÛc“®õu‘Ú¸³Kl¦I,]s§ØøŒ9Ä_=+q@sížbqðòÛSÔ››_ïÓ9šùãÄì… |A,eÃv{ƒ“t53!z(D4!¤‹2ž’*€¨Œííç3Õh Clfõ[¬îÙÙù £c®“¦!–2P½ÍýIûUIª»ÖSð(BHl\]¸ÁåºàÜUƒM´ÝªƒçŒ T1H²5V’`•ÂŇ;Õ3ÐYöóKk b9ÅC8yzŽØç5ÆéþáP>··µ…E]kº=‚¤Gô•@Òíd—ºÞ#é^qHSL1…”!úmÿlSÛ¯ÑDw‘(ÝéÆ}G¾`Ð_ðc%{Ò#bÙøQÔÖä.!¬²á¸WvJ‡éDæÝiù¼x’K$²™Bvoaq|Š_TJêAìä400:çLÎy¡ÆÕ"4¶L½æAcÀæ]p‡V5ã~–ÌÙž;¼& õ pªk}'ýé@Ò]ò¶ÛFÿ0]7Ý2Gg¯ùÛ6)W¢Ï¥RïÎN¿Èè.ÞäÓiÀ%ÈýéJœüŽ£m¤ösX($vvHAë>~ý PØ\]ÝÏfO?r‘Áò7•rdz…/7³eÆaSxzn†Èôú~¾ðóYåM ·Âä$ðâäàP¨u1nH š¹#L¤OèŠn€D.ò+€$؃ùx¼ =YÚHwŸ­£×”¹`íýÐ) ‡f½8+R^¶peGª-m"#Æv5„^"Ÿ:ÝÚmš0„žZÒ7A’ ^ s ?:Ž,.¬éìC/Ǥ¨8Ý%±tŠ'è½ÃžÀl|;Q=>¡VÈÎVÜZ€ P;æ~É|ÅX`”S3ßEcÿðš~q»yYCH°ÇkM³Áéu†Ò‹c B|ØïòÎ9<ó‘Ù5È Ù2˰9dó̪`*=D«[Ú¹…wk·‘¿Û[¯$ÕáNÝ—ðû†£L•¥†Lò26ÖÚX†¨¨6Žm0¾e¿‘ÙPÝ©É_ªâ¡ËÒXÛ¦@’hxN@dˆZŒ˜PtâèR=1˜ÞˆÌm[ç¹(é Þ—Bþ’`c~IŸ ’Þ3m$w³±²>KázÊž°Eã»I8!ý|vº—Ík&Bßµ«àñæø°©µŸ¥öÑÈœº¤înΟÔ5¶SÏ8h •NNONNKÈ­6­Ý­­·§U·oº“7°½{{vJ&eÈÆS<<ÜÏïíïŸ! ™“D, aeÒ13»°YÈc½­–6ÖwÄGÌâ - 4SLñë¾Nú ƒ¤+&. 9IŽêI­ÂÉçLP6¼0¿X9>¬~JnoçŽ tÏbZrù<à¤{z’ õÈD¢É|Æç"IrgrÉx®üϧ•w§UHàÑ ì¨ §9Í‹+kÛŒ>3]kÛÕ.6ЉVÐ4•»?”“Áû9I(Þ*¢c“8† ­Á.X‚]j{”('ö2é‹ ª«­íl*#RŒ½d¨[øã]}hÌ–« a^÷gL-‰jÓm.Œ Q€’Œ.uJ¬z.+IX¿ ƒÉ]/ê•…e£cºY` ßÁÎÙ¨ {ä m‚ñ6Þ`'ß0bôö’îíéFœ?t*;…£Oèúö^3nŸÊ ©ÁÀ5G^“WAÒÕ>8Ò:ÂsõÁaû¢Õ»( âV)ñEðÐú ©%4½º²ºmqE-Ss2ƒ[5ìëÜL…“ðÑ¥ödŸú Ó°aÁ¥Àjà˜ŠÍ€Q‚ª 8ë{¹½…åøÂJ¼$ÊôWpÒÕþÍ1ä+ÿ^¥]s4~äólhvkܹ FÍõ®~”ýâŽÓ%¦`d™2Ŭžgâñ×ÕʸÅ÷ÿûÏÎI‹ÿ·_>®Kø”ÐF{†ÝyÉw ã¿(bs+x«“d,Œ¥fæ6¤C>[»¼„;;€$ªÇDbû6«iüŒ¼©–ÌÎh‡ØŒ HŠ©v‘‘ÜJ´u Fd@úŽ:I˜†\÷çI͹åH]ÛËnÙæÚú¿__…k{TÈZÿÙÜÿŠ¥•Œó”6bõH«I„?uxª’€N˜éà ©IaÔ†Ós¶ ÇY}ãù½©ÀCfïX°<££ÆœK\IÌ=NþD׫†]°þö]ÞifßÄ+îX›ÐHÇRËuûúÈÒU™å oN·ÕmèÇØD<w-{BË<®DtIbæÍVyiR—lÈ¥¼fßä¸5Ê’Yž±†‡Œõ(Ò‰…'´»ßÖ£p×áêªPq mŽ*rÒ@J›ãŽÅX,³±•̦ Êñ–ÚÏׇø õ$JÇ\@4õp%#¢+Ñ+#ÌB­±ùŒðÃ=ˆfãé‚Ä»ƒ[/àkC©)q’,bTk¾©{wÞ`©|Òá°'´>éZâi¼=H ¹¦&Ï¿J$''|s¢å¢õGI_ULò$=Hz?cér< Àv±©]8ù¢gˆ¯4ïR‰“½‚;°<0êôÛç×7…\!]YXÚ:Ú;˜]ÜæªÏX£%W×vÊÇGåze¾æ’ÉØææñ^¹Oûg6×w®Ñ?)+%¢¶WÂyvµNï ö•sä(‰à~§pø)k¤Yhê–9 ׸ˡÓkAÙ¡4€¤é¿$Hj¦dÜk¢à ZŸõÛ6¥@:”ŠÇÏJ'_b¦¬Z,"GÛDâüPL"Xd{}=‹áüâ'×`±U*€v77/*•{r›>üë((•2© Oana7‚pÑ!6ò Ó÷ì>|HL BÁpF0ˆ (†58É;ŸÒ5NWðçÓêëj5“L)´ÏiÒïÚ\éx&‹F™ý¦ÒKCb’.<¸ôi=”H’»¸º™¶“Œ.6V’DÈGÂ×%±vôš:ú¬îÐÊk}¦ç6;$æn™ Uµübf‚LhÞYœ¾ùT2£ñt Ñp><ÈÓ ¿Ôd‹°Ý4‚¤«5¤ÚÈpÿÈ´7ºnššãÃfË6C®'"0¸!EéÕ¹8rËóžá'Ì¡þø ) °ic#ˆÁŽ>+K>EîˆÐp;¨Þ «ñð I~¬4X¤£ÓÈ}À—¡twöÃ^à…×dÞ¥&žw)P& I„2ÁRºdÞM°ÎaªÈÀ-q,Í,Åô–yl¨f*ž~])—±Jòƒ“r©Tjw·Ñ²ã÷Iû¹ÜÎæfrw÷°P¨bœt÷C ÄL<Ž`Ö†}ð8’Óy%j¿ V$*bÞ~"Øe»»˜d1¹Î\Dƒ“8\Ko(àŸ>.ä £¶:MÜÑçL½Ú`||vr4lòuJl€`2G­Bð™ )Œ]`#}ãµv[ïÈ<² ‘:¾Áþ<ðà»KÇ{oOËpËÌîùŽ>;™“ÅN¥x’W<.ér'_í 8Z&Z‚GÄä}qƒ€$2ÝF䣮P09ºoȯ5Fþ§¦ÖQºœ Ær—€*º¥6—oÁî™— z¦ç‚×»ÓJ>›—è½t2WaH2æ]cL¾.ÇC£aÁž`hv+¶ÊiaÿHôäàps+݃¦•‘wÀçn¦7!Œc—VòÑ K:ˆù \f°Ôþ‰K593½¸;`š­5ÅâV¦Õm¾ÈiGíó=˜á—kÈñE·¤#Ó\Ê_\_kù ±{ \(î©$Í6êFRnZ|Äß ˆCzˬl4‚[“”Ww¤n¡ö£«â“׸ç7ÝÐ#˜ÐöU@Òe±Ëæ"ï“ÎäavœKåÂÐ#Hú¢ é:‘,eÌ¿†GŽ…3Ún©££×ÒÎlaëz¤fÈÆÒÉì›j)^iæ;Ä–ì1åˆ÷dÿðMµœNfàEõä¸qˆ€¤£½=I„ç‹,ð×ÏÛÿŽöö_—Kp°»$bi›g¡[jgÕ"cÍÔúê¼+Z6h Z6$®áGÿb éê&7}éURãq»`kyÚ­0˜ó¹ŸÏÏ*Ç'hK¤t<~ ’~o¨D¦÷N‚s»»« ªÃ½½…ééB*…ª¡Ÿ^ˆú”ã6x§g¦‰3Ø.2áÙigW¯Yøu+I7õ`ñV¹Tá‚´,…«½×Ò!eJF[#mB$dÐÆ5[}UôYª±í~ÃT3¶îe‰âÓA’6„_Ã5¢KbÁ^%6–ÊM !Ä „§°Jõ®ý|á—³êÆF vhÀOŒN"½!6ò¸ôÒåS¨Î¤ô X£ö±5Ä%:Ä»aïŠAšf§ˆÛuÎr !ñjôñ°w‹jr¯ÚùÿuŸÅ½˜Næ½%â©L2 bãkÔ{=2¹æ:%h ˜)wa¹ê×ÙˆÂdœÞÞw-‹§»z­l•Ëv‡\¡õÇ"ùŒ=*ŸØŒÇ²™TžÝìyèã õ!ÙØ´@o‿w0d°Ì9k¹Lá]µdr¯Ð>>ùH8ÄÕf ô GJo·P`­œŠÎlÚ×ÕkKõ¢uÐk €Ú ¨Ý@ Õü®S õ @ö/ø>6 ¤pýò".|\€]“SBPuiÊkJŠIö•*IŽÁÞÓ-uÂ6ù¾kžÚ8xãy¬$ýIAÒ•àX×j£<’–rÞv>eèZ…Æþ8]2±²ºã¬2ú­hEr"» jÀ•‹§'ÇNÿÒŒánÔùõìˆ*QAP€ È<ç»–®ý•@R#N¢²1쾉,ühËs¦V¢]š_://*•âÁáCmÿÈY6‘ˆïìTaÜV°<)ÝjdñuŠI—Ô¢½½Ý½löîÃn°†÷ö`¹ÀªÞfRûP³oÊåd<ÅîŸxÅ%Î$øÑóH Î<,é éºVž'g(ý,U€Ww:"€£q}<€6:$ÈU «ÑZÛ…ãf›ÿ ÃЋJÉœïàÂ÷¹¨“òé Iƾo‘Þ‘yøŽ|rvèÁKéFXÇ(bÁ‹t­m“lpj?·gøj× ®±]bGÞÀ*4Û¦UáÚ’  6Jäðºð4:ÛYЏMzŽ"öEà຤®N)æ?¡wÆÓÚ0ÅP† k`rÚìšU»%{wïXxz¥ŠÃ#²=>9ž]Øl[$ÑeŽ:žh»7‚{ÁT4¦ù½üþÂJ¼o £…M¨8XF®È„¿ HH¨"þ Rt~þô„k‰&÷@Öä oÀ §±³“ÒgpÀÄ5'Ì1Â13ˆ•Áý®àÚÄÔ"|@Ä•;úF¢<]ÍÏ„˜ÀéO-¬ <-f²Ã•‘Xù†i6rŽºŽ«á¹D”wV¸ŽPk*ˆ#5¨Ëgó­nï¤3[}£QÄ|Ò7¥H­ YÑ1±‘¥°ŽÀÐx ‹í˃$Ã4iåŠî¶é ¿Éã$}µJÒUw„=‚°‹’îná#GHì:ÄænÌÔ¦õY›yã­ÜaÀIdºu;©NJc‡öL,–ŠÅâÛÛùüy¥èê¼\†ãSkKµ?tr´µ¹«õÒû­-BSÊ݃‚£‹ ¹è@=oœÛ!ëMµGhÀ›ú‡±Tü£¤žMµ^ ìÄ¥üËð¤K¡1˜²Éä/g÷’'¢|d ì ›=ÙËÿö?¿üÏ볟Ï*å“_/N>?Ãݽß*ìï'±kÊ]ÖeÖ§ +Ž/tþTïí«ÏY†nLâM9Þküp§„ƒ_*"½¯’D!$Hô¥#Ñ™…]‹w¾†(;HÒÃB•Â(rg3Ü0>…GSË¿ýò:YhãÂfÉÑ~HÒ†»eÇ Û9|íÕûé#ñn«·ºð™ 7q[ê[ÔÃSû™ÔÒò¦+°¢ vôÚ™J/8”Q¨áQB¤‘AľÃ1GxxÅ#ðuV2º»> Ø¡ñßE”±°MêµÏ Yg1=²2\µÒa³X46b øµ“íx ‰ojæM¶ Æ×7bïÎ*…½I[xpÒ§Ÿ uö¡ÉA¸€”Zìõq3ܼC"±øâ«MsÒQ„ŸàÂþã×Y>µÁ1<;†Ziˆ x,•îà~n~)fõ®HGÂt…›©ð*Ǧ͞eiF¤õ3vÍ« »Ôª;’‚}CAÚ+k±&‘£Y`A¬¸ÄˆÍ%ÑóâI:Ǩ( ¤…?Ö?6'›AÍA¬Zyu°î²­V{¡ÇàIMî£É½Ýr¯'¼^ÈN‹ÇÃöÒͬՓt5ÙñPØÙ´ˆª½¥|mÍL¦[ò5@RIP 4Ý€K¢ù÷ bì#Húƒ¤÷ÙÓòꙬà6Á8™’e£R¶·&؆G)ò'ºaÈ胈_9ùˆGÒ)&Òž–J°o%¶·w1k$ Íî.äúŸ±aJ‡ ·{dÈgê%oüwâ9¾Ž·-4Ù~€w€PµùŽK>àƒá¤?HÔó–z&Æ#Ó~‚“hý¶v‘ñI÷@'wÀj÷–È8÷­SW†êøŸ—D±26]¯b0q^)½;;]\XÑ›ôÃV•ÎØ«áöêzåá`ô¢\z]­üŽ8‰4|á`±íe2gw¨ ÕmyNà’zÒëjõa?¼ÿ›je~a&kLâ™yìµ|C÷,¬¤/ü5Ûm5’µö*¯zr¦zržÛîèŸBö‹¨~Äí¤ÚàÅŒÓ*4 æL,^>ÜDæ„*s3wVž< zÓp†!Ücb¡A?) R$"BüøOcJb¸7qG^ö~êR;²©Ò~þxÿ`Ìlâ 7qGá:ÅfxpM^¿Þoï–á&I¿ƒÞš!Ä€_Pü³öÜd{&4#ôÔžf¡ÅX†°sV:ÑØxTcãk ’F„;àá©],…§«ÏÞ&œtùæßV+¿žŸ†§WÛã ì1€`p»e²ìÒ¯ REq6®äAއ8IDL²Ñíº}s†mð\Æt湎~d¯K„î>Òån†ÒËÂò'06Šà#LÑÏcÑaÛüÌâ.|Òv±¥ÖX$zÂd%hÀcÔÆYl¼f(=4‰q7^Ȥó€“8šhbdßtº½¤yá‚™ß\÷E·øúDìþ‘°Î<‹¯C¨‘/ßa©ý}Cáʸ³³‹»Ù-¡­I ’|Ý}_©’äõ'ž¯s´k_E~k²›ƒ—?ð>~÷#Húヤ:V¸6'U·Kœîì5Á3CJ¨Ò.Që¦õY_rFåzW6•=»[¦Nv HSòù£Bá°PHÇb°Õ¬I?½Tðë¼X\YZóz£NwØæ C³3³Kß´X9ÙÝ Éœ©‰;†Õ„ñÐÇÀI¨JÉvjÁˆà$,RŒŒK±ÎÞKö0ì+tÁ@r'þîôÒ5LåÀO¯ñ@^åOÒñDЧR†Æw“.ïŒ\o}Ú­ü©Kõ}‡òÇNøªú®Cù¯Vùwm½Jíh6™Â0å‹ë•°×—#$‘¯ä¨©`ÜIÅbŸ$M ë@¼ß[ºÅc¬¾ñvá­ß á€ɯ>Y…\µ „‰úØêAXª.Z¿ýUÏ rvëµ4qÇÅ{>Ù^[Ý^_ÛˤÜÞh§h¬±”jòåWú+ÿíg³¹d¢rtpŽ$—`?¼|xK&Oö÷¢Ñ9NßX«prqòD4QîïªøI‚+£‹5ubæ€òo<œ s‡ÈøŒ©A“ÎÌ,”Þž—±ìíi®á~>Ÿˆ§67vV–7¡ÅÙ¹ÕååÍt2UEɇ™d:2½Ì•ŽýЩ|Îо`š¹cí¢IlàjÆ Yc‡hòyÏÐ÷íR“Ùu^‚·=}S­À××ÕÊE¹|†aÓ—àúPðÍA.w˜ÏÇ67w66`%¤ãñÝcìòQÂ)AÁÝËd6–—s©ÔCÍîUñav„Ÿ3 ˜kŒšÚ˜%ƒ1Mð‹F¤€¤zO-Ð*q*F£ùLa*¸J“¹yµs#ÚKÏ2l…KJJO·P ªGÄĶ„äSA’ .C/HEâ§ÐéVxu¦éâþÁÚFrܹ0l›´Ì°äÎWìávÑ]fo¹Jk|'+ çZ€ã‹ñXªÏ‘¡Ôn XßÂ0&À ‰TDƒXh˜Æíéš0<2Ú0úEØøû]}¶ÜñIG‚&_ }|XØ+dóNß"Sá '2à7' Jmm*®6@%x‡6‘UȈ€´§¥V]'‰\[Â×Á<*¿7º1³°+Be_½ÒƒG©t!Â2ÄÇTþäÙTW¯…ÖoåéC5ÐCL¥jŸ=Dñ¦)bP­Fá¤ZÑõ[é8&Lí:“ºÎ%Âl- ’"°:„“|]®6f)Õ ¥xt-'§ØWˆ§«`z@Ýï÷¦R†ÄÝ<5ßÙk…‡uÃ/{Ãô_°’tM#¸¦ÇÂ<3d»¥¶.‰¹E0þm›T$ fCìåòsókÃF_—`ðÛ¶þÿzÙûßM}ÿh–þwSÿ?šúÚx혻_gÿ¡Sõm‡ê%{ˆÌ7ÑêŽý#+@¬g ÿÕÂUë-Ùd"½ #s³KëÛŽ©ðæÆö&¢=¬_Jùø8ŸNö[bg'¹»›ÞÝ=ÆK 0S!“¯ÅƒƒëVöu§6êdªØbe/—Ë$ ­ Ô½Aùõוrtfå%KW.E6gõÕˆü@àÉú=@Ql¡ùp¥×è^š]Üá¨Ü¯„V΀—ÐVdÖº\BUžpMusЄ©.„-«§x÷òš@¼u´¢põþJ‡Äê -ÿrVyWE%ÌŸO+KË»°ðž1tÍÜá6Á­w2YzS-S×ùÝiÅîY@âXz VcmŸ’:ÑBEÝgG§-Zâ©o½šRÓC‡ö>ŽÒió,,.oç2ÙË4ï™ûºØ»Äðëh»ÄæÄWvtd»›ƒX…ÎKà*`›<âÝFÁ\Ü õ¨ý}ÃáµT`z‹‰¨ªæ(×0'/Ñð,j×ÀWÀ5u«Z ™ì•ÈÞNæ te!õÜæPmÐŒpž0É=wžhA­MndRS]BTÈÑà"‹g¸5àn0B¹u©á$Œ)kåÉ:z#­½,k¼¤¸~è–{h×d±˜Aœ¤HŠ~A„Ï]zñð\ïèüUí°à `=ñÐììRbc+«š\à飢k 8Ìz# ¸ÞÑyøH°òˆ©òç<' é÷ItNñÐ#Êi(ˇ±Íd $õj­©dê¬Tütú*HÞÃDéU¦R¹dò5Öý»uÃÖ§¨Â´¼²ÓoðvHìX/ @’³¿f»í/…EA%”„fúlh§a Ó&ïèýO´µ«^rF`_éê%Ž¡>Z“O™C/zF]Ñ¥$_rP^Ø ?URÜ1q¶‹ÍMœafïp'Wóüÿ~Î{Ö­ø?/„4ÞœÛ϶Ëhg}–dügx&à ^ŸÊ%© ]ã$]¢"ü~~÷O·‘ñ"%p|?ï^jež—Jkk;ÝâÑœ‘n¬LÍÁlʃ§û}@A<°C³”>Wp5ŸÉ/¯Å‡¬s¸eãÇûz¤^ˆRÈ[P'S×66ø±Á±nm­ÿÔGŒlCðÍÐIð¨" ÓkžtL”Y<<|].y‚Ëͼ‰'4Í3úÀšv`Ø]=AÍwr»ĸ‹L™Y”ˆŒÄ$¸N™åë§5¦¥QçG7ùOnØðG s|>¶ÊÓ*´p•ÎÍ8¶Û».AŠGgÕ «pÒÛ)6Ò¤¨xƒ~÷rVŽªÊ² )ä‚QH  t~’$p×**#EÈOÂn+ÔWÖѹv $‘‚J¸ÙD?h¢€n Kía(œDb€C^¨tËÌ…¢ø:t‹‰äºðŠx÷µÅ%î€$+ö· 7ÌíG>2_bˆòH?ÿ9>…ŠpMŽ¢¨×º¢¨UEšWXº3ÖÉ»FÜ<ÄTÙ‡·£5OfœñÌâîÆVR6:ÃV7NQ†Ìð¢ØS=ð,+]èÝ+IBT—{ŸƒíÖ€‹Þ6ph£•Ú›xcŒ¾‰íírù¬½m/›Í$“ŸÊI¢6-øõäî.lf•đڈ=" °þöælv~£Slaȧ8Ĭ·Ê÷[`Lt“•O†™QÒ†±ˆãž“”è[D¦oÛ刲*w`;½¿æJ¢ÂGLú`Sa)=µéÿRÉ¥T$`ñÃfÐ"07 Œí"Ó+öàÝ:ဃ+›üï&±Ã=]::¬ž<ä8[&_™ŸÏ§Rw¼¦ŽØæ&@«ØÖV|k+“H¤ x‡2ñ•nÓ}|LÈ"––6Û¸†ç=Ã!!QD/—ªÀÍ Iò;$ÌD|ÐÖkë3xK‡‰x–«ñ[ëTÏ ôµÎTÃRb¦| "?UCú¼$¤ö[†(*IöYa™ÑdÎ&Þ„@a[Ø8­iÇÍ/lö馞ҵ߶J_Е¡Èâ›jM$ý¢\žtD»z-°¤Û…“=Jnß„j~dÚPß`P5æèÕ9È ©ú0äH"®‰?É–ÛVVwÏJˆ±GIfàUqœŠ§ºøºµ©:°ÀvØ@sX X!LM c&8\d”Eô¨Ü¸šR+_¡}™~øMî¥ÛB·l )剻•åašR—»nº¶ÝÅ®ê’-„LsôÓ7ßz,&‰*IDLòñÓ•+Žº5jácá>é¥ÔBÃQ»¶plI7$njsß}M~Ü–à6œ,¢'Öxõá£Ôá64–ìe»Ù¢6úœ9¸GôGI³]}6¦ 6„õ¨|ð§[¦g¬A»{¦ô¹[šµŽÅàø DmùtÕNK¥ÆÝ±q›,"?¸í­Oao[9Ä‘ Vˆ¾/ƒû ’nX—4PtëÚ¡ÄBa+Œ¥dã!èV~(ªÕ„Xµ‘`]c}©ÔLyݰÕ\t´·òF›yc|¥­»wìû.u·ÐÏdOON $]T*—ë\£öø@6m;;€¡Oö÷‹ûû{ýA’J ô¦ÈÌrK÷©"!×°žú ¼4Äøò飕$¦Òëld’Ùë42ØÂ8˜€¤[k7v ¦ÝÜÿ™ªí)zt`÷åx¸ê©ñ9˰¸´ù¦R†KzQ.³{æž3uÿ÷¹¨­G߉¿=­àJRÑåÇí`{»`¢‡(-]mD8%hpHS$ [5%Ô¸T£¾å•Àµ€n¯,ƒ£ãÊ œ,£wžäÁ‚í¹êâїꈂ5fø¸ÖàÃÕk„ P¦êmQ®6Lœõ ¤#‘l:ŸNæ"sÛöÀ*«ñ?¥wIŠC°ºàOÜ(OÜc]ƒÑ¥¯[ꢼS®á*j»¯+nÏ]ÅI,äêQÃ}ÃÑã½ÃõÍC寪„¯NÉÕàÒ¸*&yÃÄ7ò©8é@‘*†;ÚÝï |=ª}Ø7b·—›ãB¼¿¢Œ“²ñ{Ij7Qiô™Kæ”èÜvÏüAaÿ¬tWFQãEc4͉§Û>okDYþñ1À,ÈþaŸ+¤ÓÙd2ƒn0ê:j°I9>=9Öû¤³”hHMŽ>¿/ð§I·k^ê)‡êÚľ6áz­­ øp)‚gãAèúÛM`“)¨DtÈžÛÅÆVþx»ÈÔ.2>eTƒ®ÃÂ^õá@`‘ã½½­µµL"q÷_<Èåâ[[ûÙ,a°‘ã¡Hßg?W°º¢OéÍÜq„Y»fÏ|iû»ƒ$¤¯£ôš=Ë›[I£kž£ö ]éz%‰hCdóšc6€¤{öú©ùöŽ^ «ß¬ pTÎV¡ñU~w;ñî´J\á:‘&¶þ‡)W¢ßXßz].¿­Vr©¬jÄOë·ÃÂ&"&dY ê.‡d}¶‹ÌmBKåm›{uîÍÍÄërémMt"'Ê£›yÀñòÚÚN ì’zOJ>änbYJfš4Ë0S'‚I6Øæ¬ÏÖ-›Ò[Œs,uŸ ’¾äjüÒáÐÀät"‘]ÛHñuH5›ÿé/¢ï“SQü02¦'4Ì|ˆ¾‰Š !Xº½#—1ð£g{Í’œ²æÕéGBCh~9æ oPö«nt‘û)dKB¯ÛüÕ€‘!rÃÃ$rwq;‚¤]æ„›‡‘ýXl¡Z¡.ÂPúG싹LÁâ]븢w«Ü"â6lÏxÆ2Š]“HåVbkLN:"¤aÿ©]‰ýL~Òix8 ’øëCžû°M"š"l˜ðÎñímø+å+Dâ†xp(ò6 L\lV@1gù5Þbô†wlô/’ÞŸÀÕ‚r »üNôšF%u`lt‹æ~ã庆“º–é’X;%V€Ý‰յ,#•Ë€¶wÖ×áõy¥r'lô#aù¥âñý\®±t`Ø_á¹€E83·Êîû©Kó„®G Ëx  Õ/qk†§4"¤z%)ô»HÔGÕМ]î–‚ÎÀªzb6§:H uDé †k ^bî› ø ›£]âÉo;Ô&{ø¼>/¨åu¥|X8ÐŽ¸þÙ$líQÚ\á`xž«07ñ†HªÒ–4‚#ò)éP`mm;¾µYž ,llì”÷4'wv FÚ†¯xòÿŠ )»*nlÆ•#~¬<9Š.÷ô†ú†Ãä2¢'¥—&GªÖ“®%›wY€§rû ®Ñè^^^Û5˜¦•ãÓ %aãhk~s*±ÔÈj­ÖÑÖ׬T?ÊòùB ‰.û(Hš¹Hj̯(£×|]>ɦò4©‹]›J5rØžHÂÌñË)l‘!eÐ:./æ„ñ w-&ݵ݆%øÂdæ –×Dó¢ ‘•'xß-„k§ñ3SŸ<æö’¢’t³/Ëÿ(ßàlWŸ%QÂ@VîÔCᙵL*ûm¬=›D´Ÿ}º'Éún§W§™Ž s¤“B¥ƒ¯+•Å¥ ZïD«ÐLœLNªÓk·ö°?|¹þ\ é}µ%šÄ"šù¤ršàö.ÉcK¸ªýÃÑÞá(@¥‘©Sbéì³v Æ`z[ߨnKloïe³w”“('vvb››€ªõ%tQ.¿©”ßT+ˆ,õ*ðxðêhßd=§k~ iÛEF&¦³=˙Ԯ?†¿_»Lb£bCéåkýáÙmg` v}t°O×¥t¾&HjØ/K’´>ËKΈÉ5;aŸnNÒD£pãÞày7¢¼uQ.ïí‹|ÙÄ 8X}ãŒ~+‘ëÄ-¶º®ô€¯]b·zþýºZ:<8H'3ñX2KìîäR©£½=Е¶××!Ñ:ÞÛk¤9V‹'{ÙüÜâÆÂÒ&Gáè–:y>ÓÔR2‘ÛÏï/®Ä§çwlþU{`Íî[ƒ®­ÇÕã6òEµu÷Ù:¥n­q:›Îîì$5ÆiR|mMwÕT‰á¥ÓÜ• t“ÜÈI" é!|Ã!Mÿ Íb¡™«Gí6Ý$5äWaB{ecw©åµØAa¿w0@“¢iÜÖ¼1ë×’ÄHʔƑW®jr&Êmí¤…ú Sí|Êx'õ.& €IDATÄEcüŽúø7âF1ån†Ü;/ÄA3Ľ´©»%í&é6ÚÈ+I¿C»¬ Ñ`T<4Í­%RÑ»´f©^/ìj¸-DÖEý®Ò‘I¥ß–‘Róg%ܨ¡)›E#ij Ú˜ê&/ü•ØÖ€'T¬ÂE¦™ÙÕ^•‰!™l'Ñd¼{ùj%%]蚈٭¥¿Hºö¡$ †î»P´XPX€8%ÆbÙ…Õ¸Ðj»$æ6‘™.™ØÝN¿FFa=TÊ`‚ãöÚBÒx¹"\­ˆ”Æï:Õ-ü±±‰£r»ƒËžà’Ý»àô-Z=óðÂèœõGVWÖv"3ë²á\Ø®>d ÌÓ»ä^õDdie{Ò>Ãp³txdküè@ O“Ûˆ©L–ö°Z‚·V­ã$ƒ¿HÄV?_6™^š_7:¦'³½§½×Ò%±wI]RSYë/\NR®'p™JÒCƒ¤k¦ßh¨‡5ìŽFçw=áM’þ¤é9{lÐ(dò.· wy}i)]¿ÝÖèŠomcE¥ ®BílÅùÒÑ–úŸ¯„Ïh2ýˆ}w'^¼c#øíoª•øNB ›|Ò­mLBÈ&솾Ic€¾¶–~wÄÊϰCON-z#ë²JÅÏUúúÊœ¤Ú…"ñª>EnævöÙ˜2{ ¢™;8bô!……zù@¥7•ÒÒòf—x‚£° ¦ˆh'!ÿr±¡aÊÓ)± ÕŽx,õËÅi±žïQÀ½î¢ÐÒÎú:Ä ¦Ñ~[-¿êÑ¿d· CöÈmÑ™µèCÍüÉg=£OX#OX£M|ȬðضKìt™n+RåÅ#LºÉȘurN¦ËŒ©½<È<­™C ‚í²™œtË\t¹»‡´h¯T»ÃuáÇp­û’L¤:‹ùž÷‚‡Z„.t’Êú¡òªnCúÚ‘k ¶$RÚù„ãòFG‰ZR½Ôçg©¼Ý²©1ûÜñÞ¾Õ³Ìðõ`Ë9bjKÉÕ¦Ûp¡Ž´Ûˆˆœ9SéÓ™f·¶Ó6ßKí§<„.o)È‘wIZ4©ˆ4r°—ÂIÃsH]æ ÎPræ×þÞ-íÐl·Ô‘â:n é!@ÙÝa›çjü£ÖèTp…£öÈÆPLÕhIÑWQuôš ª²|hÀRëʤ2çß|þfvrpÜÝ…Ììã¤/jqŠõ*÷s©dùð Í e£†QçE¹ ‰#dŸÕãã!c@?tù—†,Q¾fª[jïè³Ó¤xB{ À¥¼¯uµ¹˜›ó\Øñ¤{fQJRƒ6ZRB6 —ÔÕUøáÚ¶ Ç[“<•#O6ÉÃÖ«Å"àï­ÕU¢'YþàˆmnärŃx [¬Lcü_?²¿m“~ß&ÿ¦¥_=h…ƒur—¶€-@Hëë;ÌÞ±§ C»ÈH´"ÉöVcÃ\åCÜŒ„¿#H¢1ï80»Ëe ã,­ a è]ˆÃ_¢’t¥ï†Ï¤]8 ×–.µr”®—ìÑgt­Ñ<Çò•˶iÉééÑÄcŒ~4ƒÆ 8IS£þ°°n›`Üá™y]-¿/a#‹ê7îáëi©øæ´’Œ%Ûø#ͼ1H ;Åfé {k3ΔٞsPk¯_ï4G¾•IçœH€§ ³×Ú!6“Ý£ Bli¦Ô£ˆsÓ£&Æá>ŽÚ+ôÁ7-žÅ¥ÕX![ˆÅ2þèºÞ4ÃðUéHX¨ âyCÀ²>@|ä=\s¡Jà(VKíDbñêˆÖ»c×-±? Rñþ½<†PDjæM#q[2¶H4¥?é@3qhýcËWÔ׫•” Õºõ¦éíôòJŒ­öÐdn¦â­±Úë¡4’9I5?f±!ÄÇ–;TÞ[Óýª‹HÕÕ®(}J% ¤™:ÜA“~t™ þ6duUÍ›mÑk¯g|–;k“äwy~AÒÃ$\Bb}@2„Š/>¬«ö‘$ƒ¤™±‘H*Ó¥ö@x…Ì’Üsoƒ´,ŸNŸâ$þK[ÁC"¸¶²66n^^Z_[Ý^[Ý,AXð ÿíýåwcI¶îžÿô~x/¼çÜ;öÞÝ» “œF‘Åh1“Y²ÅŒfff”Ì U½»îŒˆ%yY†4əٹÆX#‡+ËiKZ±fübÂó 9:"[k›ŸNŽvöÖV6ú†fžŒÌa!ƒ0F¥Õ@™(¥Ëc½%ñ˜,qhB™¤*AÌwI„“ î;»“ÃÃÓNOž¥H ±[|ì–že¯ØÐ»¼´ éøàÙ\c ÷ ¡íãã­ÕÕ…ÙÙÍÍ;V)Ê$ÍÎ.ÎÌÌMNövÏŠ½­ç7¶é Ïò÷z]رµ¾ùñäè‹#°– {{ÿóébcu¯îø9²!Eòfb[k!î¤Yz¹ê¶çîkf’Jû jØ{´9«§_BÔii¤¯I$;hƒ¼ Aƒ)J Û’¯îz‰kttúÓÉI…œúòâj§?[#í„OUhŠð ¤^“$í•pÚ¯—yÞ‹]]¾ÔþÎÎùM:&GHIr÷ãé)šY^hNf†›$®·Ø–§Aée)=³³KG¨ÛØŸ˜\ütz4=³è äÚF¾9-´\íÄG‹3W*þ”¯ü-@Q¢ÿ½´]l§e’¬éF¥™ûÊC.tÇêš±’ ’jC*3ú¨Ð”àêŠ[(567·šÈMÉìIKw_ºoÖÔÕ‡|âp‚^eKRšn£›1c‰GrÖ-×»3”d<Ök ¾v”»«I¨qÛJAù°”îAì¥Q -!GÛ‰s·5º’RKì ˜LÒW*·eÄvtI.mw'™ É,«–ÝÒ›Î~BöIÅG«G’Y€¤íµµ³*g’HŒûprÜß7èí ìÀ^ˆÜâæ§§çã©Djpia™²¤8<$θû;»k«ÞÐGí«W¢l9„$¥¯˜@Ó›ÊÆ“ö Jn£ôjYìÿ™7‰ï’l±|ߨ¥#Ó¨òÁaš£…h/ü;ßÝîMííŸ>AÉú²&‚öaMn®¬,ÏÍ!õ¥¥y¬M’ ·µùïomÁµ½¾¾±´tZ8|Ï7þGú?ë4¿sŒéÜȧÓãÃÝ/jE"ÔÛ?˜Ÿ[ÒØzß\H8{—’[I…ù^c’_’®h—…ÐÌI>j¾\á÷iHª$Ñ_$lF°ãFìd‹#¢uA\êyÕìÔÙüHN¶´¢È-þxZÜ\ßàk½{drjÉáÉ5©C"Tk‹ãI{ä1úVØ&Òu/-.>=)Ї埃Ìj¶·ç&§NöúÆ_ó,¿ñˆžz¹‡¥ìÖ‡õƒê}û+Kk½¡¼P×ÃVuËLAdu*ïhëÍ[»s*G\íFÞ#Æ5 ‰ Éeƒuö1Ûeÿ<”ÎB¦üôò¸´ü™ÚoÕÿ†@ô»Q0ýâ#Ä@Ò3M·]QCv^Ö­¿¸ãR߃! Û…›”o »·¹559{rxðˆ¶¤rÜYHZ_H‚Xy°½Œ&ð×p.Ü^ß\[YŸœœ=ØÚùp|TD9 þÞpýq~:=5/7ûyšwONi‹Öɽuòž:eoƒŽnþFu IjÆþíx¬»¢ù†‡ˆ•ýûBÂq’*˜¢<ì£IÕ‹½M"-¾wW23rƒ¢ñC›µñ ãÂÌ \óSSp—w76€¿±vö—"ì¨ò»¾_sdwwœ%sÈ s³ g¤ÙÿK?áãÉQ:7Ü(u¿ºP0r.‹bsÀ/t Ý3"ÝdªðÌ™$ÒôsY*-%JɃ{_r’¯¡“tó±ÍÙפð[`/ö(œ½á!mw7ÊÚûÆÿ8=¡ î“0I ösXßâšØãé£kRéLþËATá…;11÷×??Âr:?*–ŒMŠp¢þ†‹dkmíÓéÉÀàxƒ¬ý½´¢b£Ò dnOàeŒXÅâÖÚ†³+ù C/*1ëB ò.¹-¦t¤àO‰9ÄÑÅ› ž1Š(Mãè¢l]gŒAØïà8Q'ëæ©=–¶h·?ÛéËÄRCÖŽÄ;qg½¼û÷f·ÂÈõO¬-¯Ã¯;?:üpTÜÙÜš˜\ðE‡³8-Þ_ضƖ (Ž. ,(²$ͤè2ÿ ·8­rÆì7PšZ3¶ž!}ÙÐs"ÝȶrC—ßIùç-°’ìWƒÜC8††õ¢Rk¬Å™ð„FÆ¢™ KWžê㦼Ûâì–+b’„“( Oâs‚~@*ºÙ}h;78JMˆQª/YjÏÝ7“t$‘´Pë ò¯ÖEä—ÂMèÝ"ôDý+w?KÀÄÀd’¾‚ÀUAä{M·õø$©zÞ œ[$ž¿8.>z4 ö8åïll¼$‘ëüè9ÃÏÎâ߈²Y'‡…2U¾¼Ý½O§Ç¹üH*;¼¾ºQÜß?ØÞŸ‹¥ÇìÝé®`<3LŒj\ÉÆCKnk°`÷¢OwK¯ô$þh™$*6áã)dspX%±i8Á×É»ß4Ûã©Áó£Çw&‘lÐêÂÂÎÚppµÑ%³oû±—O0$M אָ®,®ìo­oînnì +À»ûà›/Ž ÁhþÏüZàn¢ReѲò9=Þ_̽‘ ®RO+í@_Ñgú¼tU¸![6å|!U’è®MJ$J"Ef)1ÆÓøÚ–¢‹§jŸ›ýãüä„vƒÛOôáîîØøl"3ˆ ¾‘ö8{úççWŽÐ Gí/ír{“3ÓóÃ#ÓSSóçÅâÅÑÑÎÆæ)€Hápynnceµ¸·ÿçÅ™³3N&ÚñsKo“²XêãÉñÞöN—/epáßÂúqy3urI }Tˆê˜ ©-©mËËéfS@-˜œHõÍÄ2S±Ì¤»g@dæC‘D ëñGúçf–6V7 »{k†ÖØ/\'_ãÅ¥½"¼ª£+ªîÜë¹·º´šËùb£bc©‘©|õJ¼G¡¹<%‡tó‘´·-UnÆ "XRkBhŠ)mqSW^ÓÖO¨int+¹ÿ½ô $=/!‘MªQÙƒÝîP£=¼6À>–&”韆Ïdo{wscKÝšåã¶9ˆ½’è¶$¥7˜!ò¡HÀ’T¹³Þظµ»kˆÊíIOdd{wiqMÛšm6ÅËz•pÝ’4Áë„ݪ³l5lÏ ™ Ú Yá(]9ì]P¶­©,j¿‚Pîb éeÄ$+Ô’î¹y—3Iõò.ž>ÄÓ…ßKºàÕíKÃC{Zxüð6œÌàÄ_x>µå/f’`+Yœ™9ºÜ;÷ïÞ›ŒH¦ýøYZÂû=ÅÍXÈi‡Nš}ƒÓ [‚Q½¢»Iéci]ÚSöé†'ß$]Eð’®1IwcÿTâñåÒ5~टY掞ć“£G䓈ÄœïWÏJM»÷lqƒï_š_ÜÛÚ>/¢öí½ÍÍ#2Ö„î/‚§»×¼ZØþ8?]^\i»^ó]ªe¾1"ÄãK%鸇Ý}‘ÐiøÒ%Àl)£CÙªß+~>°'©‚“®;9Ü—óª Iä*Ü$9rØT‡´`û8-^@U¾¦sttš,'š²ÑÁ§“£½­:‰»AÞ…Ò6¦p‹#Šª¢ÀXú0[—¼æ;~e[š•mp¾Í“¨ÙlQ©#ÏýóâìÃñ1À–ά“"Éx¶&ÿªIÑ ìµ¾º~¸»ci +ͽ}<ÿxrN ¿uBÌä"€SÍØ9ŽgŒ9zú`MϬÀ][cáäP,3LŒÄ2ãS“‹Ã3"ʳ‹‘{·7·Î …Íõ¿þø°±¶é õÍÌ,’ü=ýtWþ~òá6œæ>žììLL-DR£O–¯Ô+(T¢FÃ.=æ¨GgZlI ÃoÎБÃ`—’Ø®ŒgQ7ÚÙW#nÛ²Õ Gð !¨JT72ÅKcTdйzû;ƒÃbìå‚ô®¯f’¤WäH¨@`A¾9áö ööûGæßJ{{££p²™ƒŸ˜•X‚KãóûBR>Y I•Ç…{YË\y).ïµGÖV7£Ù¬0y%FÐtçH2)õåGޤgÊ$]ÿ¨ï¿H®RæÈã“P’˜‚ÓÓ‹œÜS¬ï¶ Žþe €jC‘”\žŸ2+âþ•/þÒŠtmË×>Å^°ÅÂ)ÄxÅw½¶¡ U#*µñ@“Äv9 ÷TNú~t’®™JR±> $Y(ï?¶ÚKë§&Skwìù$Ò´877÷A ¾ö<»»gxxb [â”wÓ{úÚ’oøtrŠö½nvÔɺqé’È&ôÐ2I*2¡S2û´fZÜy•;§Ð«£ÄÏœIªÐq¨0 ûF2IØMr IÕ{i”„…Âá7µÀß'½åÛÆ!L‘¦1bÚøá¸¸°°ü3ÛÆÑú‰°'&§ö]ˆÒ¨b®ñ~ÕˆÛåØ~ãÚßPwöÿõ³D¦íHf†] “+"ÒõÀºåhƒ¤ÂÞ¨êý­ÙéìJÀ©ÉíI¼i¶‡ã€ÚÀ4ö®t³ r!xjüh›·¦à÷Z:sÖ®2Å3E¹š@ƒ*Ш ™MÀКXbhì_`©¼í=iWwBlð¶z’›kýùìâ9ÊÝÖJŒÏŽp›TáãñÑéááÂü ВĪ‘y¹ºˆ€LÑSšYÜ™”¡뉦¥9ÅÑ…•¶˜'<¢nÍãáƒLÉè#WB¾¹§J‰ ˜ØÛXJÜiJnnÔäŽÚ½Q—’>V× Êm*”I¢Cõ²1¢p ñMDlIØ<ýr{Rd‰š;³=‘¡îà`01jlÏPbf†$ÝÍ„:çmià$ø¹ÈÓØ7uõO.{"cð‹l·A*~7µô|yÛ` ék{·H¯—wAD`kÃSŸñ¬ì£MˆjßâììÆÊʜ̞îFrÁ­ÕÕå¹¹''Ï(ËT‚'¤Îg»Xr Nìz+†#f€{•„¥¾Ý‡:S~ïT¡»]~û€€Ú|S «N ÁÓ× èþ©Ñ¬±ô|:=~®|òÀ7óÓÓ‡;;«öîïÿëÃ…ÎÒ­5º—çæIYíA £¸D#ÇGg¸ÊöQ;™ö3z鎗ãäC# ôÈLåøæ”Õ;´µ±=:±,µ¡~™“â¤ç-·ÝÀy/I-½¥ùö ™ôFm+Æ(êjñ½µÃÃØÌöö?¤ØÛHZ]^{ÍwayÏ ß@f'aýF4Q…;ç\¸Ú[ãÃÕ4oÐ]/m{/éx+u7µ`e7B2ðÕ~{gòôð Õ›úÛÞb ,/®ô Löó-ÎX³ ~Q¼Q…š¨¤Ø…kˆqP¿6KÄ[rJŒºjP¦„£‹’¢rÔ ðÔÉ:áWÿµsTöŽX·?=11wqŒì{‰äÁ¿ðƒƒ=€¤ÙY"Fõj®*\€Ûz£ƒ™ÑYND)À#‰Þ—.<5³28<ˆ ›:s‚Rÿþå/?‘®zW#"á–ð,ÅIX?‰d•šír°ÎBc)nÓtXÊç4Ò 88¶89µ,³%ß+ct|rin~uvfù´phíÌ5¨V|Í<’°@eOY©ð»®~`jXUðÁ9{‡Ô­9>²›¡R®CRéÓìGX˜LÒ÷Iu2” †Xà dq/äSD’àÚ^_‡<)·U;™¿bcuumiéìiÙ¯[P í¸pVƒsäìôœ³#$7z”&¯@ÛÃÕݰkþÛCÒõNDš`MÅã3¶@§ž8©(ü Æž`ú|ï¯ìø»:?OÝÙ‡f’Ú¯êEKó‹g´F!Z‚kfwˆ­h‡?Út” ¶Ôñ0§ñÛ2IdcXÒêÖ¾ìÀ\09)4§ñÔK¦D¯¸•÷ ¹/I¶´ìŠK᤟lïXÛÑ‹llñ7ÂÄ—çº"M¤·ÉÑ¡?Ó}ÓÀ|ÎîL“ÊR¿È¹/-µ#ƒ <þF‰Y4ªzÊ:IUª®£$ºÍq•!Ÿ1™!Ís¨™Ç’‚[õ-ûh”‘9È+OON//-­Ëí)¶ÞfÄÕÓßtöä;‚CJ{’_:Ù>#$ágÉ–©Sxíž<°Øøä Rè2/gnƒ$ê¥;s¨ÖØw/H21ôU!É ‰§ ±Ô~¾Ö³·¹ÛØ£3IåG—ˆn£*Iõ3I++8ªWÝ#cq(Ã‰í¨øÇéñìô¬Èàkl ˆ-”‰7™˜¨6$Ut‹_¹ÊßpÛZ}¾LÒm=Ý—Qï*6RÀ¦Fȶ&U—kVØiv6·î35y„ûŠ6ñ=yøýúxzœïýGhddâôq€ÅI££3R÷kž^=>ÅžV×<<„ãøòü<ò"­jgn[)ìî®âž¤ÓêwAAÂ2•[Fg°^á…°‹Gp¯4©T;“TG$ݵNy_^’r%GUÒM‚„Žññ™µåµ/Baß}84ÏΟ$ù€ž¤ƒ¸GƒƒãÿýF862_߿܆64X´ŸL‰´(m/žX^”ßvcO6¢BWÉê™z’pл"’DÉ ÂRÉâÎ¤ÊÆío’X-½"œIºbZâ ýI)¾1ާqQ2z·þÜdù{½©IÞžÊO†“£±ÌxwhHíJ ‘•Ÿ‹Uyx†GnR‡XšJ&á²OnTõ ÀÓôƒÌCéʤ±uF²Ù{/õÔHº…z?GÂJ?Q¶&Ô  ð 1ôm¶4’ÀЇióWöx)%M9 Q?Ü’€—ÇC­K±\ÿdW`­E¡lµP ®o­ÿQ£*k£3ÆfE&éj‡ÀÁ‡ã£ÏgÇ[ë[# no°¾5‘ÌŽ/.¬¬¯n,̯$²c<­ÿ­¤›GU$1$“ÆŽÜØøB05%sd/XêP”e˜²î`»gn[ZÙòDˆîú¬j¸G¬? ttIò©’ìN&ˆu‘ú5MOü?^€–I¢ø½QÙÓ¤ð‡å,miÚieȸüM÷yewDd I‚}jŠÁVyáeŠE9’ª4_€%ºˆºW­¤“£ìèö¥v·¶Î:í“lhw77Wæç¶·O«P«¨ËÍNLîìT{ž Ä!ñ½P4Ëjñrua’cÛ²OÞ¾7$‘_ä@p"_”3%Í]ü¦ËœDm’Õ‡$úê[©&nx k%&§ÿóÙIñ}ÓgpO×ÖùÚö6±I~hPL©k{ÏQNŒOܯ_›.δ±ºáêŠ7)º`Ó‚Ý”61”»m¼ô‹gn‘ÒÓmd€¹dÔ•}öé¶Ë‰6ˆ·ˆ-‚bc€‹í®ä“¾AH* %Pœd§|KÊ“PˆWP;v¥ösÔ¾Tnüϳ“¿>žþÏÅéù¹èšUØb2k Þ/OŒ¤ÇÓýÓæŽŒØåàÆ¥3-wdàw¡Üƒ­R ÒkHA®Ž‰­ð%XGQh¢\iÅ¥:|°ð=ÀXD»¼\Í)RîR›Î óêhGçšVO‡¯OlŽðŒÑfÄmHe¥¸äoøî±}srÞ-îí­//o­­–*È×òIû…ݽÓÃÃí­ÍÕõžPƒ¢§^Ñûks{½Ü+0 {+ñpu1~_e_&€¡&]ÄæÉL·ØÃSPaKÒÝl.=’2@ý €Û,=*18`ðîT,'Q-ê-á—~]ú—Â, ’[ʵ˙W¸ÑƒzËt[9™„~,A1*£‰;—¥b*z.Ï.Î\îɺÍë ËTæ)`Ko³1ÂÕ¹ú*ÐV\8¼ŠnÀ8’žGºØ’4ë£D ¨FÜñßM&£+pZ88+>²£¨ü¯6–—‘,2q¢­' ;;H nuµÚ}â¥ëðÃqqtd’­ìjPùB‰5õÔöí{@Rù˜%Æg8N!›Eü˜ð°D>ºðIþ_»°ÀOªz=O×!‰ÚÒÐÑ?˸^îyÕìHç†?žß§ž fossnj ðÍK.-Ý¿ƒé°m­n²$‘ÂDþáýW `ÜŸç§cãs\µ·AÙ+¸ ’J¡ŒÄLrÁÊK1V^rà‡°T½åíŸ.\%$JÆÚ™ƒ·Ð¨ê ¥Æ×––I%#ù-CRßM UÙRÓ)‡ÅqC7j©ä©½B}ïÔÔÂîÖÎÒB;úxR<ÜÛ;ØA¢;À çEôäÂÚÛXÝJæ&|±!O°On‰àN4ÏQ¬K€rÃ!8š’KÌqœŸHRs0øÙÏ HRö6ÉYù¥áé%$1x®œ£wþXÑÈ:@ÃÆ"k’Èsãæ¡`#Ä{ųM—Ï~;X÷²œI"’Të)ö³ÃÑéhme­ÅâûçlPx¸ÚÂ;}Mœ¢ð!‘6)\"_4(½MÊ.¾!"µ&z¢#šÖ\Ù²Fd- k=F9âq]’­—¿Ô‘G øº0]X²¢”\y]·£y·¹òøNSÍk´/’¤ƒ PÖ–Øv3‚Pgü‰@!î\鸓¹Qlã²þí@oæVCPœI‚øŽ·û¥7öÂo‡ÿ…ʽæIUÚØ’ba†eþZi×{3™üptôh@RAjYYX€£zŒ«–F~^;Õ»ª9’&åmõ*ŸG·ò1¥ªå¶ÒYºIío6Æ©™‘‹gHh¥læˆ-QÙØ’~ÉJ…ü€$z•GŒ•âp2©÷½¤C n‡ ~tp¯!|`ë"¶Ö‚¯aoØ\Y¹Lº‡¢é§Ó“•¥Õ÷åÜÌÜÙCÜvö.Š…tv´^ÞA ygÚÓ2Ó‡û|ã$«/(]å–ኋFÙÕþJcµkŠÛÏ I¨ÊGÍ&•ÏéíO¦ÇTÖˆÈJ?ñ~ÓtSã95ÖN*bX¯UÖêäžFy§Pï3·'ú¦††gÒ}C#³K H¶ kH?žýõñ¼°·Nwúý±Q™%T/먗u×+{°Fs‚kDœlÄ5Äø&t+y¦Geiú.üEHºf§“%¡øO´Øš|J”"n;u\ÏòbHräÓ>Œ°K‹3Ú+yŽ6Èl¼š¥WGì`‡fkÐøœ¬´:ÉŸ¨Éërt°²f ä!‰L·)܃´vŠ>Ú:l,¼Ä@RµômýMJN)§ù¨ÍZ¼¶5JÝÃÃSn*~?ȳ}{{ynŽt–T©q{g}}qv–®xTmíÊÓÃýH<× ëlR&’Iz9H’`H‚[–ZXXXk Œ Kæ_ܺ^’®%“¨Î¤:i×[3þx|¯uE”ñf´½ñH"8ûùüÄ`÷eÆmìLBŽÝå™ ;:Ï>Ÿ÷ Œ×IZë^ÒÕ{½' ¶®&7Ž­ °Ô~¸ØÈ55s¡Ê ¿ØñìÞmåzÜ ‰‰‡­ I.» ¾Hº©¸Yêï)éëQ.ŠÅü5RdññÏõ+×õ3ÇñŠïVÙ‚¾è@";šÎõLML,LLÌm®oïïvûRáÔH 9¡t¤}‰ CGÎî4uf|‰±Þø˜¶-Ã7ĬÞþ`j¢#8¢ïÈkÚr†Ž>SG^ß–QØ“2GÂØ‘è}m¯É¶¶ÇÔŽOëT";#¬\×C]zrêGW—•Vxê³o ¦‚³3‹Ã#ÓíÞ„¹5lïˆLOÏŸì-ÍÏ8>FyÖíù¹¥ÖîØÏÚÿýZñ·:ÍÏMz±®srrîü¨¹óbÁíͼwŠ‡Ý¢¸P˜ºª]r) ûµÀg©|ˆ],±ŽÀ ¾#'4%TöxG ßØ™YÒ*WNÛÞ_Òô"¥áGæ“î“I*´¥‰73žb+ù¯YÓ,tVŒ)J¾ã7åY²ÈÕ¤4£Wñ:ÿ&Ù\“«l’»úåî>ô'¾n¸­èOwÿíÁôŠNkY»BB \f½#Á1ÚÎ\™ŒÅÖûB’)ÌÕo1a•#’ªÕ“„CR?œÐj±g‘Ã3ÚÌ+ä/\»Ìн½¾yöém²Ém¯­­//ÃɾJ CG¥º0ÙéÕ¡Ù*4n£üÄîÆF‹¹»FÒäs äY‰|Õ{’¨L’=ÃÖøU½D</hCÍz¸¹,_†™o¼îkôLå¶ò¸Ððv¨^á…ƒþÐÐ$Dð‰Cž­$=P¡+ª®,­ú‰¥¹¹ÕÅE8ˆ£#8î:º@ vû|ÜI1?0Ñ ï¬—{‘p³)!¾:݆O´}µŽÚðx¶´õ»‡É{W@°EñþìGa–~¡€ÞWMí™ÊÆí«BÛ9"¦ŒïWæ›ïI껳“/oðÄÍ£B\qF žŒúÃ.ðZ#éü˜©ÙýFØþ^Üþ^ä~ų5JÛ4vƒÈfm ;=Yµ3žÌއ“#k+ë‘äP(>Ô78eêH78=øzdl>ž™lõåí)•=¦°F$fø~;‘ÊMLŒÏŒŒÍ$sãöî«¥p­Ô _J‡ØPÞëÆŽ¥ËÞ$—•’¶n}à=vsÿ½Éü_uú&™+“^[˜?/ííììds#Çok½¬³VÚþ^Òþ÷“DïY]^;)~:=^_Ýлãl„ï(Í{´£D­~—ÂEo˜É’9  ì1Ð+4„[q RåN³µa…#Ѩ‰ڳɾ¶!%»: ù¼™$zô ”)0%M¾!9VEBÈADZธÄŨìõ–<ƒ7NÐ¥âú_8?œiTx‰n).fJ³ÊW\âo ÙRœý£ýeqe¢æV,•;?>µ¼¼´añ ­—溄¤ËÖì\Ùs˜<0 $U/“„>adÐKt­ÄVT\‡ø{p½¼»Fè Çû?ž<)™»ÚÞÖÖÊü¢‘î«CR…Í@©ã‡tC§‰ 5Ó€æü0ñðáajÍ #‘·B7Òr”{j$]ur/0Aƒ*ÿ‹¥ JLa+©´Åp^0_÷DF=¡!>:„d¶¨ÐÅ!–&,³'£™)ØççWƒÉQSGFb±u4+gˆ”6´Ý–ÞªŸ½:ú^Êù¡|ê¸â¢nBÔ¤Œ´ÂU=ï„mo›-’§Á4:ƒ­ž”Öª“vÔË»àÉ‚ ¾®ß›] sïâ<œ( ŸNàÐ8<2«v&¸ÚP‹#)CRÔ”‰Â™Û3´åAÕëaõòtat 3ÅÅdD&sd,]}ma‹§ßéͪœ”ëFIy2Wr67¤d2š _b|wk§34Ê3&Ï ns‚ Õæ_ IVìi£ bߘLe&©IÝð8†ß”’’‡Ä‘¡ÚÝ™f(§7Kk¨ý¦á-Wïp{pTáDGÛç‚$¹+O&0K “Iª2$a¤‡—äá„7ÅVûàaSÛüÛOð©%ÛÛÁööêÂB• ‰üØügfÖáZžŸ_[Zz^ç8òöaã<Þßóúâox–Zi·äÂ!y €òÞŒ¿­l±”§6`´ã"5n¾~Áý}¤ëD*n§ €4Ê»úúÇþ8?½—}Y n.)w>4ù‡œqO ø0ú`{kbd\ª4çsƒžŸ_GjR·½8*æ&¹-= Ê^¬¸“,[c–ú5û :ÁF"µç¼Ñ‰þ‘m[ÄkšBJžÞå-¯¡Þ]n«,QQɼÁ­ê.Hº¥Q©4fO9™”-83Qf¨rjŠõ6)=ð.$¶¾Ì#}¨{Œ«5iÃ,mw…Çô­©prlffy`dN#H¨Ðˆ»”ô1X£‹çÅÂèØœÔ®Sø€´àŸ ­) gˆ¢´LÒ¥àÓ¥~R)gAo»¡þ†*ÂëÇ5D¬w„ŸY'ëú…mþ©Áøß †_9¶Iwƒ )ŒsK>*p± t ZEúžÁÉÕåõ½í“߯3´¥¤¶ê.rdé­åך£a÷’>< Ö<Ó·¥Sù©6ÿ[’ۓͦ´Ø^†¤üCîO„$ ÝlÔ8oN„S“#c‹[²A%Ê®X 9· CÀ>¹³ïúˆiäéÑÐbÅ HJÀO¯—u¶´ö%ó³mÁá&]L|Eå({ÿ7C¾àb½Î²šÀ «ªlb•‘–rT¤qúc2I®>ÔQÏ@ÒKBÑ·EÚ-¤Õ,IÆ‘”ÞwBW49p^,$X!JH†{seeqvveai{m­ðBÃùgGG+x êü -ç7¹ÊƆÆù2Ûo\3ló¤àlwµeû%¼Û*ìÜé²%Uõn{ $‘¶¤ј¨—w¿8‘Üç³Ó­( ›¹ééÙ äY»Œ×Uá±²X°0>ŸŸf²¯¤Ÿ>~ÜÇRLµ‹€õ»»ð7;ëëKsó‡Û##2cwSI- ÷_–¶G®Oí‘®m–ÆOµo£?Gëç!°]At¡ƒ>jZxÉLÒ]Ú3gµêA©l@Ä;`{&ŠÛý÷ÿ·×·yJ¼ñ*0‘¶ž1D=—ªEe9ìŒøÒT$]Nl6ÄYÚ0-¢Ñ6KRjMˆÍÑ&u°QDÓÁhxžô÷þ¿þÎʤr{›Èêaceå ——À–çæ¶VV¶V×>LðT Èx *D–¹#ÛâÎáý•J’•†üÉElÂâf&±KKp¡C‚X!…=LR—mX’€ü+®h8RJÕ ¬D¨õçFÝï\Û¡û-ßΑÚU–¡ÁOe´»^åoÒ†¹†8¬–&„` §”JŒ’-sW­Wx=þÔîÆ¦Ú•lÒ„Ef ÎÈë,õ°±Yœa2Æá{x´ ÅtEh[FåÊèÚót¹æÒLjÌ6$%×[‚>-®ŒŒB¥4b;½u§ôiã¦I™#÷,å6 —i"µ@ÉÑG[ÜYSgãfª”>Ï–+]À'ò{F” IÞ  P°«w(‘›QºÐÜ>M*÷Ð%ˆ:œ4Až&H$ìpôRY6^IàŽ£ö—ÅÅo’+ ‚uVá»~) €êCÕ&é. ÜQÆ[|4O¨“uÿγåòcX©ì3öÛkk[««G;~–&n”IZ}H"ÿü¼Xü|z<<4þ–g|/í‚UĽLTRá©’ß›ÁíãËm(“„r“5’Ž×ÍÎñ±ÙÇGmÁ.×Â.Žgf€\IØpÏÞøïù²FÞÛÜÚY_¦ßÛÞ.[¬ÿyq6?3+3zê=x’1Ž7Ëœ¤áÙQPýyÒzR–œáíJÝ gôŒàR; ‹z lÔ‡àb ©rqª;†~vtûS ³óõb'ÏP¶<£p.½çIhN!el•J=Âx?&r}tf*5 ÝxGŠ …Mˆœ¨n1ÖB Ìxô› Ô{IÇÕé~jÐ6HÝu·Úâ™›žY˜Kg‡:zR2“Ojò5«»Þ‹œ ‹OlMˆ¬™òÊ‘–¬ë òp´A…%07=ûáä¸72؈LjcÈ1 ñ³-%Ÿ… ½¼,)–Ô#IŠÞ/Ò–´&n,õ@DÂßV²…ŸiŽ)¨IvYªË•å¡Kâ¾™$\Ücå”Ò3&xèì¨6 ’J|–…§}ì}7î˜7õ$Ù3@å24µ„2„<Ôn–*çÍܯf5éÊF7ªÜ.YjAE΂h£¯¢­¼FáÛØj?IÕÎ$§$šxz&dÒMí#hk’¹çfÎîe0r„7³C¬´Kv²—‚$`𥹹õåå‹çÈ$v÷¶×¶æf—dºÎ¿×x:Ô ‰«lÉŠV¤§îÿvt]Oþo£ª·Iٙʎ<Xqe­€»°wvggvv7 @LKºzco9ú'G'‡tÛA²€IÇ÷ÇÓ“ÕÅ¥§Nî¡ XÉf#µ§J'iê‘)k²4Áp uûª\)žu÷£H${lR2tÃâliz#êP»<¾øk®‰oJ>$]xeHºMe ¢‘¹â¢õRÛV¹4FúŠ`mp5fäæ–‘2™1 ¸Þìï™žšŸœ˜]Y\X??.œ çÅÃÕ¥•¥ùÅÙéÙ±Ñ ƒ½þ-N•‡à2ä!‚ŸÓ êU[¼;k+I³3‹*[´^åÇ*‘8(Ù.Ó`¥~¬ÌeI±Ô7,q”:÷í7‰—bxV)"Ñ>‡ÜuÑíªJ”&?P>‰h‡ŠmÔ…Û ËÎxÎ Bð,jü²õ7¡ßø")HjH˜-;˜Ø24g™ÜCËm÷šOvÐK¨uƒî4&Ðò‡‹2IÈ)¹êþüÊ/`éPI/3pKçw"2ÁÕ!#¡ßx…É»±¶~z¿Â|ÏÖêêæÊÊËäè´2?¿±¼üôLÒiápk}Ãäô¿æZ^s­o…n²=àR™èg’n“,5$ÁJžùp\|Pr‘øåm­­­-.®...ÍΖ“”['OŽGF&ë…¦âÞ.ìRÅ[„>諌žZY7Î ÆÅ–Ô•­ÑžƒÇ“:b”l ´áeÏÀðì?/N•øF4'EúL1$õàˆ”c ©â€ŽÍlmu÷ãÜöËCÒ5»ë…4T*Û±Q#rp‹y†²ÛÒðÙ ÊGÇŸDÛëöÏó3DEGÒ½P^xÄTdok;™ÈsTÝÄR|Ù@ŒçŽ‘w¸^Þíè}8*àÙ…ý®@­Ì+0E‰Ì7Úß™ 3Œ«º‘7ÀÍ >ƒ®|ƒÒ+±e¯åu¾Ð)½7<Ü[q;w‰}¶RéI§èš–eg7‘%ÁVû„8á’¼¸4ËYÙ¸-À‚QMŠnx·e6*K¬’<Þ½Zn—ϯ¨û–Þ 5û†3„hÀîKÅÅKR#ÓåF©³—®œ”V–»ú9j,ŽGPI°“¤Ÿ°¼ .º!­äî߸ÖÙÙÅ“{t&C’õ¥¥mlHòb×ÁööÊÂÂ>N_=’Î …ù¹åw|Û«f×{qk­´Cˆ=0!aOuÇó)U’¤´$»EŸzDV<&Mª^·7ýéy’<´ÐÈ»‚íÛN …ÂÞ¬®§Ü\ÓkË« ÛÓûëÓÅáÎîÍjI''›+˻エ[¢Æ‰ZÒ¥'W©#XD´3ŒÑf}HçŽ÷ Î ‰£ÂÜì’Üãhñž‡È»ÍÙÿÔ&¶;H*ÿ@eëÀý§Ûª‘IúâÖ^vÀ I<€–"ÓmøFb‰Õʺ`ÍðQ8ê#mF‰;IŸR±ñºŠ)¬ê?.Ήì{í5߉Ӗ¸¡Û^êIÂ)$ ìŠF³ÿóñœ •/2ðF؆5ÛÂØ ‡á²4õ£Èæîq}2†U#n«˜»Ûȹ¢?²¢Zu}ÁßçØF—B-‹#àú&Òþ–;²Bkº‚åμ‰øáYsû†=CJWþƬÐÿ"­ûr/.»VÊH>TÏ€ž"¢-‘\Å7àÔz¦Ù”Ù’Mê0[ih ÂýöFG<áa;íêÄîzIj豤®Tö6©m@}ÎKíÇMv} $½@&‰ÖJ‚žââ'ãziÛÄäü‡ã£âý2I°«m®¬TIé.5¥¥gù¥I‹ ËRw­¤«N†ÛpQ<õ ÿ/ I¥nÂ&eôR€$GWÕ¯$•Z¶±¢„Â34žO.:¼Ù­mohUhöM†·ÇEÏseQÿ?zó3Ö?µ—Å@QÛüXؤ‰>Ól†Hzšd©è–A @êø·ÈóÈÙ70q^,œ %mâ¶–Ź…ÅÙ¹,o󦳸 CZû‘ô$=»íÑØMGþyq–JåëDŽFe/œãXµ¯¬XCÊ<]@e8ºS;[âN‹‡eµ‚µ•õhbÐÙÏN£H˜LÒwI׉RwÄ ò^æ­—wOO£É_X3åV¸ûdúr{mmwcýÓééÝ] BÏŠŸOOF†ÇÄÚözI{­¬‹ƒ)Qž¹4†Ùjd©ÉWwŽ ~:;¥ õ3Á¿-ìm︼™FUÏpÙô}’îsã IDÿšoN¶¸RæÎ–‹Ëìi‰ã^$½Æ£%ö@*®1aî꟞]m óLI®Ö[’ÜÙW&BÒ =2¾¼³µÓ){„Ü I,œIª(IÒÛÔo¤¥«8…_(>9iÛóɾ™HfÊÑ3Dr?Wzæ)‹A2ñƒˆÉRê½îÞü_ŸÏ[½ik{â¯}ìxÃOŽ’¹©¾Á™Xv‚oˆÖ+úöìÚêV¦i!˜ˆª)9´eð“ô4o,m2T¥tE6 v;ÄIa®&ШðþÆsüÔh´´†‡‡&·×7?žŸàÞCÊôê¸8?·(UÛÝm^çUÛØ“A0š›žÞ^_^³6øÉ«Kk"½·AÙÛ¤ò"OJ?÷;…¤L#:id[ýÃðîàœG±*e’è–m”<’¸ýãcq™œ³VæçÉ”~õ8‰È#a,+BŒÊdúXRg­¤“« òqù£dçé"JG,”››_ýp\üx\,.!^ªÊêû‰eC-ìv¥ž$¯ŒéIúN ©ÂŽ^Bé%ð\v«ñZÖŽØôÔû-¯LJe ÁýâúÒj8ØÿÒÚ;ÀÁóøxwrtÂÞª•¶ÖHº`§ê(óÚw¢6¡¦c}qñ¬xDû](azpŽÕɺ`±UHÝRoÉ#媚I"I™3Ë1¦ y»w@n‡—‘”:²÷/·]ÎRFѹ+ëôw…F¥VÔ‹}T,„S“Mº8Wççj‚¸¡(C:Ü%X†£'>žœÓwö³Zü$Ý0ÝFëIê«üÝŽìM#‚4s;g¹þJAÉ0ó °8›[°*]Y¾)YÖΗlð¸†8RöDž|kXj¿Üé),!…ÙIÎϯ,-®ÆÒ£½‘¡¾¡; ˜Ü¤6©CÈ CU:3¦Î>©=Mzõa]Â.R¯èF_\uf ©zå¶KJ¦$_‘rßábWj@¥4YÿV¯¨Û{ƒÙÝ­§Çd!VYÖ––áHúÐö[âCr[*û)=I£c³k4óô¡F•—Ýâ“}Ç”%„G¬h0DŠ4AlãøPH¢ºMÕþ߸ö³'tÓ“U+jynŽðky<—TéQ©ôv’£‹sóî ßòVÔG¥‘àäfN‘ÚD­Hjä³c`©rÑ™þJàýîllªmþ÷Òxd Xãïžnë{Iï6’I‰ ʲɜdëÂJG<–×9¾HþlÚxâòF¸_]\|P—$Õ-wrüçùI¯/ÜÚ“ºßqÔµâvXHoùöNOä.ί¹2Ÿ£Ê¥{¸AáE»’ùŠ–\"üÈß'¥ô8H* ]Q½72[ZaO‰ÍQ±5qHº‘G1š SG6•ŸðEúyŸ?GHgQã‡' CR·eˆà[kÔFæzîŒÑÛB‚$6ÈL‘ÓÙ²‰ î¿Y‰‚½ûçfqJ“ÊJ4×SæÎ>sWŸÈJYÛŠK:³Bkª¥5ËN;ò"K¼gyºP¢§FâIå&––VUÖp4=Ö?4íöfFÇæÖÞÜ[i·Ú•ˆe'mž>”URc4Ófi#ðñM !‰B–¨@c2I/“I’Ñ Q2Ó–¢Ä“ôa®6ÀÕ Yž_Øö¿Õé¹ w*;üñä˜tIØoª'·Mª0Ûkk‹33§Åbñù~ Þ,Q& ×7þ·Fk³1ܨê^ŽE]¿ßr[“Òƒü5mY¡åRÌ÷¹DïCRyøŸ¥ö5ÉÚ/ŽŸÖNtxˆÔ’VW—ææv76à¾Ãƒÿ,>!,ÞÝÜŒÅ3 }[M³é–¹VÖ}úÂcŒ*´Y©Il™%´³¹'º÷oÄ÷‹£b41ø^ì®—wóˆÆƒ(‰IÞkn†¤¯®“tÙš‰Èå]ÈöOþëâddd&?0~¸³‹²†·d@ Iå~¸ãƒÃÕ¹ÙOÇ8jò•î7Íö_ÙV¡Ú½·±v½èLœ«†GgšTž&¤›'N8å}¼$ •ÒLmŸ±q›lå."ô‰!ßž46½o¹rÜCÝÖ¨*eïì Ȭ1®6ÔØ‚ûD–ßœ„Çùhƒðd)Üý”ª¢”6ŠÁÚCö4†¤HydífH‚ÍÁH kf1Ùd½Ñ‰xnFåÎ Ìé ÿ?©½Br*[‚hªåˆ£s qbRCý/ Ið‹:Â#{Û;ýà …ݽ‘޵žñàOC¤#ПïÄÖ®ÌêÊf27Mn¬nê[“–ÎìÞÖN";O`­"`éÎ'rSJgJåH;{Uî¬×Ý Ü`°»×€IOI•ʧ8Ÿ)ÄN:<уÆ,µ~Ø}bYj…ŽDjö ØÀ–fg hø¢º•Ið»à‹çýáõö·w\žÄkAß‚ˆ£ö—OKß#$•·¥NâQŸ©Ða«Z& ‰¶³•Å çã·wvö·¶kÛÎÎêÂpÒÚò2€øäÈÈÓˬ„r>MOÎq¤Öÿx§ü…m}+l‡—¢0²X§öªÉklñ<ƒ}Û;úx|Šö×I; 5cÙ,&™¢+nÓ>ö½›aõÀ@Òc ©¢ÛäjSJ¦<ÈŸ-KÂ]6?öÇÙIqïüèÖUýH"ŽÎScc$«TÜÛƲ°ì±×ø ~ᇻ{I‹ +<·AÙ{.<Œ$‘QÎ}`)ñ-y®LÒMDÄ«©­jÛrj÷•Þž/C~€voÿÎÖÎþÎŽ³§ úášà–D¾@\@RCB¸­rGfljy|jYîBmL<¤›¥³)H0‚7 ?º©Å϶ ‰/edŽÜèäòöƶ¡£Ÿò»Å‰%bƒ2L—ji—êØem™ò4¦¡ÕgêîS·fÇ'—‚©‰fCLhŽáùØH“:Рò±Õp‰M!žÖïòæú‡çZ‰FU¯ÜC,mPj‹Ì1¶6ôZÒÛ?2ÿñ¤¸¹¶5;»ªpåÐ$­)!»Ÿ\8I÷ ýwK·Ut³•2‹iÒœ!8ÄÖø!®½¶þÔhÔXºg&&«LHå8»&r']^F³H¥Íò‰¿—üœXjè¿ê (£ oPíç¨Hrì{ƒ¤;%®Ò3JTô$±5wâöhrðÃÑÃ~Dõ0haf±ÑüüÚÒÜk¸ãËssÀÇO¼Ý¤AûkÌÎ,r®ÿûwY¨£ Ä.äPkK•Õ~É;B&ÇêîÝÍ-,‡qó‚íÓÝ|#lãb?)ˆ茊 G¤k’¼W“÷ÙÇ9Þ0ôPHº>ÏtÕï¶DH¨Æåhƒõ ÜŸÿ¢GÓÓ!ivb‚d•àçÀ½8:ºMÓ‹°þç³ãÕåU™±ç½Õˆù4GÒ×»ŸI7-à²#YéÃÄ8•;/¿6õr;$eHëŽÔk÷÷ûãÃ*Gœf&”l.‚É\y.ò‰ +J¶f š¤_žXRº2|s’«'å¶›C\9“D&Àfiü<}'„²ê¶œ®£xòIQ9¡$ûfû†Ô­}x<8{M]){Õaíªö¹ˆª¥¸Æ8ÏoÒFYڨȜº”.0¢.%–&ˆ qƒ¬–„ÎF•ïµÈ¯*•ŸLæ&øäâ;8:Œ¥iMÕ«¦Î\Ghh`d~tbQfO7›â¨d½Án†¤ê@ÒMs‘¥;Ny.ÆáÎÂÝ$}…?5¨3™¿þùù`{çem÷¶¶`×\_Z‚ ¹“>$nï¶÷$kvsq‘"ª° V’lUZn«/&‰;{h)ñ'e,î7݆â#ßÊlPõ¼n¶çûÆ>"1Ò½ûßß‹ããµÅE\ºE•\Ø0€ŒÉ.òôì:;;áxKÖú ÇöVàDCņH3Ù`h4D) þ/Oø™mšZ¸8¾yšØnanQbè­‘tA|#K2ÜRÎ$]×D¦"*mæ¡w‡¤Gd’èf£¥M%-D6â‹4xÐæÕâ{+ê”üK +œv÷^’ÊÕ4úXÀm%i@·dv¤^ÒQ‹:¾ý°Váõ“e,-wª8¾PϽMLòºååGg¯‚.ãØžkqgÎìƒ †£K¬‰‰©…tß ¿4XZ6È“»p¹M†^ŒYVŠ…ï@š±¾ü%™·¸-ý_†$*‘ Ÿ‹Ôžãè Öp;pVŠØ•Hm4ÏóTó ëºö~!•LÊ\Ídiïü’/>¶r>)]¶£C^Ä8E&0ÇÅÖ„¦°,ÎÑ…a6©@lX¬æèÄäÒäô2|%žfRØ‘¼J“:ô^t3y8ÝÖ Û›g÷Ý&U4°¸HzÝÊíÕwÈ™>`ån¬®ÛÚë׿¸›Z¼5â6´Ccït‘-]Ê—qmJ3 C³ÿ­¨ÍÚÁá ¬öñä(î{#tÁÇ]´è@/uæ!ÂÏ'@]*wS‰|tÙÙSÏ@Òƒ Iv™X%Hh·#+-d33OiPj=ur¤(+Òõæ&?n,xU’»ö·wFÆf»y±)X¯ìeiB4ÇÉËío£ƒ$ÑUUzÖMl¿Ô /Ic—Pəîvéû–ÛÔ ¼Ù˜P·æF'–BéIl+žÂ?‡úE$éÂð4‘Ž1>’ @-" I¼R&éÆ(G‡¤RÄ2¶Æt‰4!ñÔ’¸Ô•&:s¢[ö:$]7ù£ý™»êŠœ¹´D.¥©yÆxGpøâ¤LM÷´¸ÒÚÖŒ%!¢@pùh .ÌÒ &®>ð_@<šbð>áp…©S4¡al’^’®[ð[O©†c<œ0ø•cmë Ÿ^ ÜF/šàÇj_Zºx‚â6üO™üØk¾v8všä"¬>HËôÛ„¤3¸½ÙÂÏ,ÖÁëy+p~ˆ{&“H&‰@ÒÙó)`QÉž£âôÔü{ùW–؈£õ³Ôþy7™·çpL¯0bB›(:ÀbPûÞð[uö.…®oo»[ÛFWø•e"ù¸Ö†eHóåÙ-½ gÙÉ;I“½“é@rjplIÛÞ‡X™3[áf 鹞ˆxIVtG¨š>Ì‹ðT [a©/|õŠ®&`jOY;Ó]þ¾LßäúêÆé½à^’J‡ÆÃ§¨Gsff©Í——˜£°òM„“.­Éî˜A¹ ’è<4-lÔ~¤på„–ŒÀ‚dŠ.1€¦µ³_lÜ&/¬|ü曑‰Ði{}}y~ž4Œ?Åút{c«A⪑tq4A|Kb-×ñ%e é>=ITd 6ɤ3I¨—w¿:'&f'Ýï,^Î$=;$]GFgþ»^ÿVØÊRzÙÚ °Ò §5™+NÆöÜ5+ÖØ5aàŸ;¿žFÚ߇w××?Ö mmPxxº 9“ý> v‹ONAÈŒÊ Á=Ç7%–DnpvmeÓØÙÏ3%eN&“T%HJ™GlK‘Áx¬yˆdU¶: ´Çä–ˆÖ%G†§‹»¨kí Î`ŹÝ÷σ¾<$•µ¾N°ÅÅQ!‘c©{Ùš2ÕÉT¸“]Ï(ß§'©¼ãÖÙRÄX(=%s`çV¬c)Géê+Þºw{·]—()/¦‰ùþÒÑ;lóWp”kM§™ïÀÚêÖÀèÜVTÃÓ¨€·o| 7e’heE¡%ÁÖøy†0ü š£AeÊF+ÓR'@(2YËÒ¾á 'Ñ+»´4&JM‰±ë[ãÜH{p8–›V¹²<#Š ¨ô‹%ÚŒÉñ‰©%]{†£ ³uáþáùÁ‘…‘ù™Ù… ^C bñ{· $±Õ~…{î:<ð7ÔE¾~òCø#CmQe±J¥ˆóºÙÙÑ=/T‘T0<ùðgbÈß<‹-Éîææ2©{ŠsüÃýí©¾ûµÀÍQû¸%' ¤6® ’*Éw7ÝöU2IWÚ·q2 i¡µô¾—´·X}ŸNî»g|8=Ý\^®$`?‡Þpÿß-\‚!êÈnéÀÑ™‚Wøƒéù:ÈéC¯…íÝþÜÙaK^7´9ìög~áØQ&’(Ö`Ý]š¡É°U>¬“ETCgÿüÂ:w´ÌL …3­n%å¦ÜVH‚» 4%8ÚšX,®¦–À[I—¾5904»²¼¾¸°¶¹¾  ×iá/•Czoз Ie…I@¥³"mqy2Ê4b‰KJ}Ü9ÚTG†.¡T‚¤¶û@¶9JÚÓ#csÃã‹ê¶ LÿÆsÀ‰ jcìDU8AI¯ú9”L “S´NÖãò¦·wÎnRÇ9/×–W[l~¤B©EFèøN "pÔ-C\BsZÓšëšd&øxxGˆ¢åö¦ÜöìZrg"*Üq*åàJº&(6†zÂk›Ž‹(ctti/s„¯G+Å-H¢Kv÷.Ž Û»JKø¨B4:õQV髹ÒÜM”ý"$‘Í£ÉmH` ¶''Î ßW9Ó*×­¬›-É%9Ø+T‘A–̞銌µG`sHâ` [ž1ÎÑÅxzÔ–ƒÝ3$é)HºW&é6¥,2¹CéدÈHÒæ_ÐÉFjËl®íìníÊYR/§÷n—¿_^ê -c-ŸDP _6ú•&òM(í902¿¸°nhÏqt–&¤o˨œ(]߬ÕË=]ÿQæ9Z±ïÊ×$²Àw6){`{#8H»ÐßÀ9¢D’ž’ˆˆÆÿšïêê‰_ŽK†nǨp{qnnqvv'ö·¶ v¬,,¬--ßvw׊{Š{´—çæàçœ<$‡ß ›4P2¤Ä_À‘qanÉÖ©•v¡<+ÊÄñÐDŽ¸â ¯h’–I¢ˆkka«"ß{qG½Ø5<<ùéì¤pgÑHG.ÍÏ#1¤'goTÃZZ\VXüï$ÝBs õ!¨ $]éÐ/õÞ¡š²Ð}%h_œ_ù„:«öoh¢:*ds£ïÎFŠ0²(%ßùm¹ëz¦¥”@Cºa¸ƒÏ /U’`sŠàê~ˆzÆ&Ì´ ;”…ƒûщd¦Ô­YNYóQF.)°¤+ÈL„QOŒÿ™Á}Ó”“¹8/ I”·ñ}¯Ë†V¼[¼—u+]ÀCOOH uØíÖ–—·×ÖèÙ„„ÊÊ7¨·µµ8;»¹ºZØÙA:È·ŸíÈÝßÞ^˜™9ÜÙ9))èÜ]›‡ÃâlD¿³¹é ek–ÿ®×ýʶ¾â9_óÝoDmurG6À/ÙCR7IÎ$U$“P¶F¨‘tÊMþƒíÓÃÂÑ-9I8“TÕ¹ÈÝÍm·7õ+¿]D2I¨')ZQn“9Ëóÿh‘H½âÙW—×>Wî|ÇÅþÁÉ߸ö&U/õÉ&è&£’JÓmŽ›ôÎNÆ–äÙkmb;2œhÖ‡•ÝoD¶®ôöÆò–©ÎÈí7Iå‘7€øXj¤QÑU+óò 2•RÞ¦Å%»’{–Û® £•;/9á2Qrcñ}"½Þ-sfaCW¹rCcKÉþ5ÅÓëå]J$aU/ï†/ใűùE¶ôR ótHº|)”N :ù:p5Î-•`¼çË<Í•¦%R_·e,ÝJgåit£j'ü/®>ï„£ 8Cv%½——ª§IÕ_Ô+ºø¦Æ©ô5ê"^Á¨88ºQUמoh‰Æ;ûBéICg?qY!eQ,¥+gèDTœ„Ú*I“æ³AR^^Ïp‘Ÿ£hr­:$©QH‚;þˆ ’74øS¯èU›½+óóOO {H‘ö`{{ea.ºmÈÚǤ¤1eqff ›N=þ“k¨„~Îþ>„žu܇tü%Ý[¸>´Eýl¹ë ×ôŽo'l­—u6*=°Ò8?OÂx„å¸à {›ƒJ>£ü<IO(·Ñ¸‰fR°N†¼°ä홤BÕ µ£íîÁÏÿˆJf{ŽÎäkQ*·‘~^ZOÒ»’¬–ZQëÖò$)·%‘T W«7ùZІݸ£BóåIÜeJ”76\3ÁÈ>]¤[?Ò=‰ru´CïÄí†mv8 žÍÕÕãRÞè‹6ΰƒ#A«•€›Š­”X¶-ãvïûHО‹££SR]çßêt¿7;j¥pÂ4äh‘/úQØ (^$‰GE~˜¤§d’è7,ÎiTö°U]™Üðç'Ž…$²$þ8;ýóütcu½'˜kRt±5(_+  )^*¬è`‹}Åw§²c@Þ§”ñBÛaáðŸgK « ²¶Fe/O¦·lßI_h}ôIw˜àÐ w罤³QљΟé»ü}A •.Ž {[ÛÆÖÄ[‰‡¥ ‰, "QA«ðÞ·ÜV!-t'H}tDºlKBjŽÈÅVî@ºX1òŠjåM&gŽKW’ÜD&_aO]‘ #HDýYþÂ~kª Wñ²Xi-OE…jåmŸõâDÑ›­™»ûa¹Oͬ Žz[ÊÒÝ/µ§({? BkÚÑ3ÍN!A[K¹ß¡rÛ3@(3Ælƒ>ÌÕ…á!Ä_„M1ˆÇ^hÈ!,_íCl϶ "F°ËÞý/"†·ÉVûÝ€ -æžÍÕµ'(sÑakmíž=F×ii{{}y`hsy™^PƒÐCjm_Þ÷¶v}áÌ+Žé§& ¼B€9Ôu¤ Ry#ÄFØ7Ñ’¢JÚ7IŸ1ôär[¾tˆ¢Ú’Þݶöè_| þ/IGŽÍíP4¯±õr”ïDm Ê^\zHˆpk&渒H&Ì‡È ¯¿AÚ–ë‡sù§“£'ÅÅ…åtvDgÔˆ;JâWÒHår[U=Hº$Ad®—uþ½Ñªq„¶Ö7Ï‹Uiz{Hº1r>ép3Ãáæú¦¹-¡qÅiuazóÐ}3I·ø{VnúÏI%ákìq›-'bè‰XZe,׬«~&‰ô5ß&XIÏE_ÝÎTŒß¸+PdFtÛ¯¸þq߮ˉÆhÕn`Ì4îgJpˆé&+iwòMIŽ>ŽÛ’2HÅ}HJAøÃ&¯A,ª›¹jÌ’“Ò:ÇzUË,ŒI*´=:À:V´ ¥Í{\ ¢É‰³9lÑ•€Ðç³@tàóÙ1–2Û['›Üco‰Ôäîææâüüþææe¼8<„¿$àw' Šûû¶¶à×ißð]M*/ éCEáÉ𱡴-M›—ÌÞVì` 鉙¤K©¡R[Љ©5òÏóÓUªIÖsùÑW,ý¯lóOlÛ;l–Np›N¦8$ Ü`äI*nXð 0õŠžZI[sKGo8gpß‹œïÄ­µÒ.61rQi¤r*½Ô¸Í@Ò7Iá:I;WÝóNèê fˆ•Ç7IÓcc$OYq=—EÁêòšÞiTÁ>'“¼d¹Þ§'é%#RYlˆ¦w¹ªéH‚v–½ $ $=€é’Ew%ïI×Ùèz‹žLXá|#É ¤°$A²NÖQ© w8á&'ê2€]bv{*$Éœ}Ør.¬p÷Q-PŽl¹í€´+É\¥Ž%×½¯jµ"Ý IbGVöÀÀteþ_íÃwÇRCýùápg÷èà`se®§<Õ°S®á(SQqÛZ[ƒ¿übØ\Û`Ë]?5YX*/–?FÏ q“ßÂF7.Z’ž’ÊmImð½´Kiõo­oÜèw[ HBêû»2]çߌï%í àepu¸Oß’$ÞïHÞµƒSÙê¼,ŒI|­Ì[#éÀ\/ÖÖB²Ý¤öúÜI_U€Iúp¸M éëº]Q`…ÓÃo’à˜Ÿž^œ™Yœ¥.øzffceåô Þ´3dawkÇÜ«WöÂ=áG@úíAÒU¹ÜÕA‡\…2þ·I_Lµ=1“t¿ÖzJ>¡ÜTîÒ‡pÖ¤ìQ¹HGºœ}rÚ×¥qÁ§ŠIJ}¨:¦ "/={¶¥µÌ÷•“}ƒ/uUBÒý!w2µD ~N´=Û7þ¯D$ikuÄ-Û_ìÙ]__YX([— ÜR±¸»±±03s°½}G晜7V×ÙŠößxNžÖ_&$Ú@öž6# $=$•ڒ¨-IÙÉŽüy~Z¸Vq«R¹íÃñÑêÊÚÕت^@.ì÷¸ ©£é ’ä7¤ÏKg?«ŒÿWVž+“DtD‹û{Z›w‘ýdÙ% Y…ØsÔ(ÉM˜§²«"iÒOzm”úêH/I_Uq›è]a3®h½¼›oÿ­ÁÚÞ“:+R†$ß$]7š|FH"ª‰ÌÈ;aKíù\jó©Dò²ØoÍç“êó£%d•¶nTÑMVóºñqc éæ^%ú… ni³$Ò+ßü("Ññˆ4Õ­i±ýÖZ I÷Àˆ{¨’<$Y$…XHpž-!At¡l<2Ä…ôÇ%Žì·–I*ï¤! ÉH*{”–ÐòâêÇÓロm ¤Ý ¤xôäCîoWr¼vD¬ °ÓíÏÔÉ:›× Y I_’.Íž¬)>R• 5*½¯šu{>?°¶´°¾´´ÅÙ·VV–gg×pÖðY¶«‹ã£ý­öžÔašp¤j¯åýñS»’î>•}1?Í@ÒW†$\Q•ãǵíÃ2Ї~j²zü™ãT_Ûï&“´¿‚f‡·ÝézE/Zn‚¤Ì#⌲ ÁC£ÊßâÊÄÓ#¾p¿®s¸FÜ.0ÇèvòëI"\¬ ×w`£’LÙ|Œ¤>ÏÕIt1Ix#ð‰ñ (ŸD]†úO|a‘ÆðC.ôý|S öNáíÏ×mÜFK³dÈõNÜéô¤þ8EO/lupUÕMâ.1e¬²µ¾an ÿƳÃ!†è?‘ZÛCmÕHz.H¢ëó¢žÌÖÀ+pƒþÑhæÉKó Ž]#R]% [OW…A„tTœ›Y½¯›]X"LŒ«è½Õ÷É$=1ãË@ÒWoÜFˆÕ¦85ëƒÿÕh ÆO ‡'‡UË$•”žRÑ;yæé¶Cxк|éwâv8ŠxÒ¸]IrJáï¾gKøfØØ?ì,µ2O¢ûÎúàXÿ«,ˆ 5|-@šG†gJhÚréþYgï`“6& Í^0ô@Òm[Âãã@’æë@ÒmoçÊ[Cù€”Õý|mïèèìÿ\œn­­­.,loѬí/Ò„x|°om ~=ðF„LF‰âþ•þÜGuÁ3ô,tuÈ”X'pÑ-T#é¬ز™ÇGGÏAHä'üy~O ¾á;Ýlµy9çsÕÇp¹HúA2I®~X¥l¸õ5ëC¯ízGpsmý¬ðœíÛDÏP./8>Æ ‡p†<¥ÆPœ%}FHÂWØXÝè½5ÒN¶ Sq²,Ð*…ÿt湆Çð€;NIèaú‘»ûJ÷±¶!¢[d&CÌtÏ¡¶,–êH:úà£HõÏ4¨#qMÈ2å¶ï’ªñó_ ’èS<øÖÜ0ÒL ‰Œ¶$ñÔÞÁá)€¤ÅÙ¹õ¥¥‹L#¡¢ÌÁ@’?œS=j‹¯FÔÎjÁòǦxùxô`e é3IW&ÝlHd‹x¾jv TîÅù…‹ã#âÆð”Â+lHŸOŽÇF§å­uÒNJoÝ–,Õ*=Hú ¿´Cs4~2OÃÓ…Øÿ/k~`‚´žxZ#Waw®§§»ë{ëkŸNONΊ‡'‡È ùãÉ1DÈ“Ãùæ{.õg„$rªÜXÛ`+:je¬¯“¬•¶Á“û‚Þ°´†ÞË<ÊÖÁ‡Ý÷’oDÅ­„‹Ã]æ>GVº£«uM¤<‘1_lLjOñM b;F5›ÚHb éE ‰NHBk†gJÁ%Â*Wìñ>'¦æÿýïÅm¡øÀ_\,ÌÌm,¯Àc\¼É“«Jôùô$‘¬Xd†n–²«QÕ û.=|›àI/ I׋nB,›aº^áý…eÑš;÷¶6Ñ\ä£ÖÏ &$Ø`+ŠÄû$î÷dLÄÅÛ@9‡T:t2™¤3“”äh" rül6D¸ÚÀ+~«HÛµ²´rV,<šË!ýÀõáøèÏó³?ÎNŽövóÙþŽ®@[wØæî±¹{¥j—ÕÙ339³¿µy¼¿÷çù)|ÿe¸ë yÏ›I::Øšz+lmPö`/D¹ƒ¶ I"kº^Þ D2é¾_8ö–Ž¡'ÞwôÃ}MªòòºW4¦Oþ³õqdcp˜škÒF±åJ~Ä)I $U5“Dö0u{k`ÄQ!Oºl… I‚  ç÷fW«7õ¯Ï–ææ×—–Ξì.T®˜Ü=â„ÝKŽ÷÷»z“¿sLõÒΦTU¡‰ä 5öÏ@R• ‰®ÊH’I¸ƒ;ÌÑúç¹~cûFΫ[{ÕÇ“£ÓÂa»7ñ–o¯·Bâc ±íRU¥2F3ô£ô$õ ÍI® m±ÍÆGhTöü£Ñ0>>{^,><+³×糓O§ÇKóK s‹kËk#Ã=þ¸\ßö[£ö§ý/lÓ¯Ôeþ©ÑøŽc(í&‡§ÛŦÝWBüÀ³BáâøéðÙ!©¸GúJ =ïĸQ2H* ë$5£Mò–²“£ ã¶ëÜS>|…{Zæ£÷·L­È$Iíé®ð¨Õ;À5ÄŶ+å•ÿ¤’_’ðî•Ó´öµùGZý#-î¼Ø–­p„ÿ„÷A™«õÿÂuØ;b}¾ØÞØ\]\ÜßÚ:}ŽÿÞææÚÒRqïV±œÃݽ?/Ζ—YŠÖwâvŽÚÆÙ€Ì—9ƒ'šÏ0TL’¬Bƒ>amð­°«pŸЖ§ð²A:ìU[k&wð5ßY‹«l\®ºZ“%oÇ[ÖI?D¹ ýü$¡ž_4㦠ÖË=MŠö¹ù¥»3IGWS>¥%wüçùéôÔ¼µ5Ø(±³eîæ–ŽßYúÿªQ¿¸`ÖË»”Ý O£]ðŸïDí¿óœ¿²ÌÿñNùK½"Ÿúp|TnâDS,@Ü›› {ò<$í¿¦ób!xÃw5({Ðckº4n+CÒ{Ò¸Mv\2{ÊM‡• ,$—µAY¥¶ó­ Õy‰ 'ÿL ¾™˜”_Ò÷áÝÆ@Ò¿$a­È¬ÐŠ„MÉÒ7ÒI'´ ‘¤FU/[Ù•ïŸü燳ÂîÞòÜܳL·AÔXœÈ÷ßösà¼uq|tz°gsù~fY9?ªª‰ ]'0Ïd’¾)HºšK'íÿq ™q»ÅáEå¶B¡¢ÜFz]ñµW,w)ØØ.ŽŠ°.Ž ƒͪŽW|'lEÈ M¡\ï&$’~1<8üñôô`g·¢Ãh ¢ÉþÖ–ÖÜñ÷÷ªzYq±¥çï#ñÇ@ÒW$ ½³ é¶'¦X¤»IêžšœþtzLñjõ RáóÙÉç§pj‡ÿ »\O?ímmo­oÌÎ,˜œ¡×<Û[Q[“ªÂW3"¤„WU$ö/YM3ôCB’Mº¹Ÿ'ßÞØªJ‚Ex¸» qæÆŠ€r"†Ô …'GkË«““Pqÿ˜éÓééÉÁ.Ò7˜Þ ÝJo¹ýPú¬„ô CRîÞ߆ÂëÞú¶/œI"šI°–ØšP¬ÝlïZšƒõûЧ³SXWg…ýâîN.ÓŠdûúÇ#‰þTfxbb6ñ‡slEëï3œãßðÝ /¬d —‘úîëtP„t×z` éǃ$1rØL¾{±¡?ÎŽ?œ•ÇÍH¶ò¼XüŸçk+k£=ÒböÊõ]gÀ퉻»®®DsKç[a+KÙÃnéåh<}>X{ˆ–´X~È -ÂÒeMâÕnFâD9Ú0GåyÅÒ¾µÖɺ¹2›ÞäþÏš¡Ü¬v‚‡Ñ$-=’ö$¡¦òf7¶ ¤³¥¥×õJÔ&~ZgÀãÏAÜúH  9$ÔWdMº{rý# úöÏ@‰U¤~ïhëþÂog ‰¤gƒ¤–^X—pGH7 Æm—-ktè'†ðÞ9jÿ[¡ËÙøóü¤€¦ñב˜$.=µ' 7Kþy~vv¸ovöþG­Nr?sl¿ñ¯ø®÷’.¼ñ‡¹úP“²…$*-ñüké[ƒ$L$°WE‰Ý#Š,–´„„+™ø ®ËÛ·ØÙWµ½í‘™$ºÞ^WIܱ½ö­÷2O#à À_¾—´×K;±Xjƒ…/`bëhÂF 2Ô]’{¹"¨ýå7Î@ÒIs –4rÛDhŽ0–\½ÂûNÔ^#l}+p½:ß Ü5’TGSûa5r´È¶œ,9>ÉáUw‰G¥VHø| ÑŠ‰0úÉ¥Ó3p^öðÁ²ÔÀú¡…÷ ×ò;ÛôFà4ZÛí­Þ¶ÎƒQ I…½=8ĺ:£¯yŽF¥—‡D1âV´»ü $E®ýð+àÓ”> ¢ÉB¢ßœP8[;ðv<ÑQ–.ŠòpÔ#|¥‰ðí $1ôì!‰*¥Ýv•úðnË¢ýÌ«•õðÔ]ËssÇ'Å=”^]XXVã6¯µÅ%±Úõ·zC£¢»IéEêÉ(Ep×!ªÑ°Õ1.ÃiíçÍ!}Ã-ÕøËÁ÷Š<ºÿØÊ;XµëÑå¶Ûö 8ßãÄR{žî¢A¤åe¦ÃgôÓFE·ƒ½1©®³^ÚAÚr©ä~Î!¬p5Aêap䫾¿ÍLÜ‚Ë;bƒc4ÎTgˆHõòFϘIº2ê‚ Ýp+Ú3Ê—Ð’€ÿ—« ¡®Zª 8íÙ«l”LÛ>I?T¹M’` 0¯7dyk„+V¾©cpAIJŠÂa½e$$OI[u²K§/@ߥ´NdÄ ”Daiü,•§Q…F`Í×J»þÑ omïýóâlgmýTØÛû|zŽöÕŠÛ=<}躣åÍ™¤GAyáÔ ”ÙŒjŽ•G' ’=ÙÚÖšvöäë”>ÔShJ)%$üiÓP‰)·1ô=@’ [I£uò¶¼}z|=´»Kss¬ûŒž$X ©øçùI?ù^ÜŽct´ô£“|{'$à‡7/Aa-Í7 Ç'Àš÷¢Öƒû¯?>n­®ÝVn»ÍØ"óÁÎî¿>]XÚ¢¯šÝ¨‡Ú)ýßx)H’>’Ð:1 Ù=鵑RªqàB+@R "œÝ)_t¨Ý?`ëα4A4jŠ ÌI¬™~'1Ä@Ò‹†¤+~m(y“hR¤mÙlÿiɇœ [kkëKK§ÏѲ]~싸Ïé¬xØ×7ÄQ´5({!™eË·]¹ëç;´$îIwÌmIÊYSö6V]’jZ »;ÇûËss’H˜%_@>?*Aíò_ž‘’Ó‡ã"Ò;?6µFÞŠ;Q³9eû}k|xJ&‰rÇ3%ب5>ƒT圽¶Ž¤ Q–:(4‡§/Š…t~‚£õÕ)zT~à9…ë&”Šé÷ç$’HzétÙ`‹JøqXÄ,yÛòÜì)ö"”ÙÝÜ\[X(ìî>¢Öv„‡/ÈU>¡'¿Xø|z2;5Ó¬r¿u9[š‘;N˜Û²’’2Wþ‡ƒ$4–‘XQTEÙ[yªë¥9éétÇÞCÆdÐÆƒ ©¿º‰¤+“tóxù}” oÓæ¸?$]ÿ±4ui"D‡º[|o„.…¾mvjz~jêŸÎ/ŽÊüÉ!jÙ’®'ìËJô8ØÆáؤö½8ë­¥ËJöúãÓ3COOÖ–×ÌNŸDÓ–ïEsr A5“á([ÿ^§û{½ág–íµ°­Ií/)¬¦î¦Ç•ÛÊ/ËD¾.JrÄ@áZ¹Wl ÌÍ.‘°ÿ餈u/·ÿuq²¹¶ÙŒºX“Ô=Hb é*$ ¾!H*Û‘FXêÀ{q«§'üùìôpw÷´PØßÞžŸžÞ^_H|'‰ú‡çæ°–æF†Ç“ɼ§7¦·yù*÷;¾õÐÍFεhÅ—Ÿð’auÿ I¨q;NÅSGÙÊ·,ŽÚ·É ]á”` ‰¤¯IÏz=’®rR–X?•§d¸ÚÀ{©ç7žóçFãßk[jx¦Öîd$>(7z~ã˜ckÖH¼xxÊä½n¶ýÎs4Ê)§üz"Hd•»¹†X™I²fú5ëq+’#{iÖKϸãŽîÔáU…@µÂBáÃQq{}ËÚžAs…Täg ‰$Ú… nµÁo ’Ðá%HayüµsdöÏ'ÅÂÞþ1–‘\]\|¨Œ$š¼8;Õ[Ú^7©jù†·<ÃkŽé5ÏòŠgûcÅomPx±(N„_Vп2Ú÷ƒC’är¶+Sº²”¦­•Š)•ªšRb ‰$’žIWI‚Vw3DZF/¨’öŸYæ·‚¶wB÷o\çQüÍk»^ÚÖ$m{Õ쪓u5({°‰!¹eB qéÉÒÔ òÏUnCçUgD$¤Òy“$[ȨXTÊ“¡â€!O¡áµwœ7Ö6:}i•Å_/÷@ü^âI $}Û„ì#ðÊf©ý¯šízk÷§³ã£}j´í÷Y’¨± ümHåìäÄã ü½Vó3Ëò;ÏùVØ^+ëjRöb1ûp3Ñ´%RWÇLHHú‘!‰žœ/¥ú¨4’À’Vºò¨Gɲåª:ìÆ@I $= $Ud\(N²Qúa|c¢b£ÂÓ ëäh‚_e‰Œ¡&U/Wã0ªWxá/[ü {¼Å‘$‰ÙRb[æ>b“Dº‘Ú ü¢ëO(M$©”!³£vlÒ/ÛÜí˜ØÞØ‚ˆM¶÷>ž±Äæ7|WƒÂƒ½&†[3Š2Qn3¤LÙl•ÎÏÄf膤DE»¹G2 $sÚÞ3´²²ÎNã³#å_Æ@I $}ût'‘\}ƒxÈÖ¥wŒoË,!\¯ô5ª|ld²äê *¿Ü1µ¥¤VÔõL„ ¤÷óµ|$I!HšâÍÆb (·&ƨùèT³1ÎÖ„ÙÚGí{+j{ÍwjìþÙ™EÔ™ztO 5©º[z¹%qpzé>Ë$’¾$!üót‘÷’N«ËÿÇÙéþÖ€ÑúÒÒÚÒÒ=[¶×—7W×N ‡ŸÏO?Ÿ:- [\ï%p³(«H¤‘Y“bÊ@»Rz•n3ôÃCR®¬ X:¨e„–Œ¡³aa½'6!¾TNb ‰$’¾HºÖÁC%‰ -Á’¥öLdЫK¬¾!T¯ì}+ñÔʼ¬d0'2D¦ˆàÒìù^2ô’ÞIÚä&)0Åø¦ØmÓ©åÒ!©EÀÑWjKt…U½ï$µ²®w¢6®²kbb£c3Íêî:äÈÄi¤$=Äd’Húv! Ïÿ#Hbi‚l•g oà_Ÿ>üyqvqt´± ܳz·H–î8ÚY_çËÌ¿ÔÊÌO>7˜Ïµv…êÅ.x<]O¨R^HâK-ÁÜu… ò5I´W>«epCšÈÚK>’Hb éû‚$ÙU!%Ú)1‹¬oM´úòÉÜäÆÚV2?ÉÇBlMÝŸ0žIÑÕ¤.‡~ˆ0’1Z¯òÃK=98HæÆm ƒ+\+m÷Gÿú|±±º®´øœ¸ÈE½xÚ°NŽ“d é$i¾>$]Q’´¦aUð ‘w¢±Ê¹03ÛÓ^š›Û^[ÛXYùb×vqÿàÓñ¡ÆÔùïT¯ÓýÜ û™ez+pÃmÂa;}Uj‚=Wñ`\÷bd éZÑ$ç³X × p3Ä@Ò÷IúØþ@ÒAOâÈñM‘‚bl¨ÂÒÀsŸûxR<-žÏ‹…£ýƒ¿>œ Í áfC ¾M|‹ ÉmTó rÛHª´õ½BHH:õQ-.¬Âë,"%ÌÃé™Å&y‡Î Å´ä4 ‹TN. mŽ` $1ô¢!©BI²Id)»}OfùÿýÆ£‡Û[€JçÇÇwCÒáîÞ?/NLvÏÖ¨ßp­µâvÔoˆæ/¨J«:nU½£Ç¤ë T>‰š˜ÍT4r1Ä@ÒIºï ’*sÔ„ m,¯Sôªl¡Õåµ3ÀŽ=4s°³ûùì¤opªY*V¨uÁ–~$½<$U(s^J"ñ Ž&À×ù×W6>ÈøÎE±8<:[#j«‘t½w6({KÛA‚ætûà3I $}5HYè™4÷¬ÌÏý~¾ã‚½þíµ5RPûâ\ÛÙááöúšTeˤr&—UÙ°."|ŒüÓ é‹OÅ I°0à-»òÔG_÷‘è uÒ‚TékÙU‹’Hb 黀¤ëÇE¬ÁHA’а`«zúú'N‘¨ïáÎî§³ãí-­#T§ð" IÔ–”yqH")m"õàÒkQG 6x^,áâ¨0>1[/k¯“yð [û S%ñU•í N‚× ÑÿI¾è§àÿFô=‡¤¤À·—IJ4ªüÖÖàòüüÿã?Ù CçñîÖÂôôi¡ðEH‚§÷>\ŒþÚ °»{ź.¶Æ ”Cª<.Üóyþ! >ì ¢;–_^&ôg³1J.êoL18MVm!1Ä@I/IäÂò’—™$Ž6\¯ðvø2ÇØ½BñÖúv2=$³[|‚¤û+ =’pwDžÒ"±㑤åÂïe^–ª§Ã—?Ú? ö)Çûs³KB§FÚ„Ä%zNf¢çt9¬SŒ•eG{K¤)‡ôil’Hú:dKÃ-ãh‚FG¯×ŸüÛ{e/öÇéÉÜÔôêââ§Û°ŠÒ^8œfI¿óÝe/¡Ò)'û Búa!‰xþÑŽxÓ0¿ˆ¯ñ¨p´Qé•Ví#b ‰$’^’H& ×™c¬Aå«—uzÙÂÞþÞÖŽÒÜûNàè\ ±rãö=Óó„$c´¤^›-O±Á_6¶øk¤Ý:W|fvéãÉÑ)99<ØÙÜj¶¾¸Ù”&xLx9ˆ—½{ÖDáîçhƒ úá’¶:ÀÖ€´$¥ÛÊ@I_ ’„Hq;úNØö·ZÝ{‘;ŠÿëÓG ¤…™™»u’wwÿ¼8èz×l~%hãêDè ÖªŽ ¸Mû¡M3?,$á÷Þ‹ü>øì–^’^,"]oÎÀk5ÃR1Ä@Ò3@WÂCõ¨˜Å7ÅÀ"*ÿ[Q»Ê’zëd¬?oâ"ÔÉpßZÛ£!‰oŠ6#$ý#"èfбµÁZ…WãŠeò“'‡Ž xƒøpr´¿½“ïŸäk±€lÎŽÐt3n*ßÞÜvvEë%®zIWãÃA”R .í_Ü’`óml ÏüyrÐáëc©CðKHb é¥CÒU¡ $€1?[jÿ¥A[ÃÓwvz§'¦÷67‡úúVÏ®UÜ!‹çGG‡Û›öVß{‘›¥ö!×ìíü Ÿ’Ø` éŽGŽ#§‘ˆdðSP†XSÁ~,2§Äø3‰å3¢ òn¢ÿÉd’Hz $`"§wÿ$PCІ%A}mM¡íØÇe’šQž! ¸†Ð Ñ¥OïŽ//­}>=:CHûG…ݽO§ÇÎÎè/l+rš“{ÙêrV0'ˆòËý;.`çêBXÈN„ç ëjù+’HzÙT®µaw[´Y-7Mš¿¿4 ÓSg…ÂÂôôäèèîÆF…ž$åæv°??;Žf:w½ØÙ¨êÅ•ò8lt‰°GD^’Hz–¢y H»ÕÇ)ŸrjóaËRRþQš`“ªž_¶ÚÏVûàB_küõ².ø-Uʇ1ôA’>LVZYŒ ðZÓ°õ£ÉyìU ±_Q‘­^¹ ~E³1ïšlM-»'³¹¾ùá)!‘üy¸³ÇUvÔˆÛá‰ÀU¶(éÔ–Ø*L9¿3!æÃÅÖYš Ÿžœ‹'‡‡[ëësÓÓ· ÿŸ"ÃÅåù¥±Ñ©6oœ§õ5becç'> $1ô„Z"–”Ø´uå CBk¦\q{$I‰Ô§>Ül £?uèO¬’ª—uÁi»j¾!Š·çþªÕHâ2Té6}Ù¤XÄv£:¨qÆT¶P½ÜóVÜY‹FV$´d|qV,lmu{ü|™µ¦ÙòŠgc«ý°œ„%#Û‰€Q¹§ïÊEþ“Ib ©J®gßuD¢5W!HŽçÞÏûV®’ד­Hb é‹$y¬Ì7I $}$¹&ë¡IÑÑ(0üÚÐb4»±ÔôøÄ䨨Êü|aw—. yzpHæÞñ ?³mïDmµ’6®>D†?K|¹kñ=W–¥)7™–)nµid ‰$&"Ñ{’’š ôµ-[î–ŹۧI $ÝIæÏUµæu}h.ÁÁ@I?R& »Û¦a diüïE.ÔPϑǣ©؇dkuumié´X$v†§‡‡…ÝgkïÏM†FUO£¢«NÖÙlŒ¢ã¬íJ³öÕñ¢ qˆCjÅú8ßœZÓÓm7NÛ¼091ô£@Gøº™$z2I„Õ’¸š^–Ìý–¥~Ó íèìÕ\±hâãéÉæêÊþææÞæÆÞÖÆÄèx·' 5¹ÙªÎ:…·Ié…wQIô/H’ %«LackRféÝq·7ÛÔâoP‡xÆ8]iã3I_~nñÏäã’Zªu#Hb é¹ ‰Ü~éW<.ŸÄ@IwBRìŽé6éã"0I $Ýq)¾ ƒÛŠöífcŒ­ ÕŠ[kØÊP0ÖÞá+Lî6o2‘-ìîŽêŒn½É­Ò¹šeV¶¢£NîiPtgàNÒì=IøBå6¾9ÁÖE¸†˜ÀkT‡ø¦¤ÔN4[oÖUzz& ·µf%w]ˆG\]H,·²·)0Ä@Ò7’IBäì¿ÏÙà¡ ˜$’n[Q|ä߯s”ñ3'²$ÐÈε¸ÊØ’0ôïIíÛXU2ÁÑøÙ2çOuÊ÷EOo0“Îwuù¤*³ÑÒÆâ«®îƒ­O§ÇÓ"uÛak½¼»ÙAV>¶ôõªY¹'‰Â Ôœ”Æænib—(©Zã6¬= ¶ÚŸó-—Ÿ­ösÔ>!zØú®&´žOl$’^ ’ð>§rç”î<®ÇåHb é‰ì *Ù?Gäh*®Àµ¿AO®ÒÖÉ@I_’¨Î$ätkŠÕɽï…ö&~‹@j´X[µFçÂìl<Ù÷ó{±«ÝïóÅfææ§§\íZ±ë÷f'ì pž”AœTï/ï¯%=$<†cC)%r•sH·9*<’ZšT½Àm w¿ìê%Çú™®>©ýXN2ç¥<Ás&“Hb ée3IrGZ3Snc éy2IðÆÑ³‰fÅ%¿ñoœùF¥·z‰$’^´'‰â$<¢/ÂÆÎ|S¢QáUhìáp¼££W£wƒq³½ëç!K¨DÓ[[« ó{›áXîßZ+÷ðôQ$&i£4"¡*I $ý{d’*’Ið–áUqu¡÷"'WéæÉ?Õˆxb­ÑìâKzskßàòüâôøøÑþÞ§Ó“ñ±ik{”«îmR‡¸†¸Ðš—Šk¥7RP»ÍôçÙmI’X˜N*Î@øÓÀóAÎ@›®=ˆÆ²Ó­ÁQ¹3'¶Uzª3Ä@Ò÷IÌtI‚¤g¿ã’zHb éß§Ü&£[¹á¢¬? “ZyÏ;IG½ÄÁêfw—Çßë g3¹H$%ç¦g6VW ;ÛG»;£ÃmÞ¤Êꚣ gVéÌÜ‘"ºçÄs”Ûz`_šBsœv%àÝay44×ÊÓEDÆp»``d®Õ?Ì7§d $1Ä@IÿÆ$n“Ø.>V%"1Ä@Ò“ß@’ö[É$Ñ“IÄè€ÔÝPéÍmRõ¾âÙ^5µ°D:¾ÔÔÖî‰FbW§ÉâN§²ý}C_ÒëO·ybj«W` ËíI…#u£ôÑCŸç§M·õÁ"‡›Ø¬V\<=b£ft…Ùj«% ´¤¶D‹ i‚3™$’Hú~!‰Ã@Ò!IŠ!É‘[ÓR'I $}«ôÕ·oèLªà$œRBr‹ºp“Ò['n}ÛleI,l‘A(7‹äf¡ÊÅS´¾nv¼uÖ*zYÚ0¼#‘9E ‹~UH¢ú ¯Ý>9 áqà"m¾S`.L/9’Hb ‰¤çr›)·1Ä@Ò3Iå/¨Ž"×O -¨>{ð KíoPxj%u’¶:‘ë7–ñ5ÏJꆨqÛšcÍŒ«íÏ_+“”¿1“|Y^ÄDØŒ!IŽL3ô¦rF'‰$’Hú ‰É$1Ä@Rß=Wvi-W=CãúØÙB%c EjC„« ñtáFyw¬b«Ð„ ˆ M·=‡'¹¬j¶$t¸0$…àwÑ̰ ’Hb ‰$’Hb é>)%*«„ p"K’ô* M1±5ÅÕ‡U=|S»¿¥éµª§CFU½Û(N‚‡Íå$•Ä$éxÄ@I $1Ä@ILHb é®.¥KTB³ýD âJí91ÆÖøE–]Vûº9É7I²’ß<’îþ²BÁ3×éHb ‰$’Hb ‰¤'HºB •¨DÑü ¡)ÎQ`£#÷왘jC’¬IÈà–¶PŸy“` ‰$’HúƦÛHb éû‚¤Ü·’h3¢eZÊá]¿O`J²5!‘5#»æ¬ùôPûÒT¥½$’Hb é[Ë$YHú IõoIñªf’šž’*œkaK£‡¤g­ $1ÄD¤3Hjb ékC’œ)·}q%ñt!ÜfwõBR~…МÀ¿¢ !É!)ÍnñWoïDd¨&$¹û¹è#ª$¡O ޶bkªJÏ3‚$KÞ…Ø–©Æ¯€Ÿ wΙ“Õ3”æ!$Eªõ,à‹¥öáêdõBR–ÝÒ+­ÚÏÇ©šð)ŠHÍhã‰Vkãù·ˆH’ø’ªõ8ó U…¤ï>"!HÚ†µjŠW’Ì("U-\ —]+íÛª‘XÕŒH’ô8óÜö ÿt+‚õ —8›%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/bg.png.license000066400000000000000000000001421430147706700254660ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/locale/images/pin.png000066400000000000000000000140571430147706700242550ustar00rootroot00000000000000‰PNG  IHDRóÿaízTXtRaw profile type exifxÚÝWYr$) ýçs$6é8¬sƒ9þ<¶²]¶Û]1óÕEdB Ä{BP¦ÿó÷0áÇDb|H5F‹ŸW¯œÑ»ºÞdýzŸ{äæÑÁ9Ôn¦|ÆgÈÃÛ„kƒÊG¹‘ÓÃr]ÍG¡›–öÞIÈyËÉEÚw#ª¤÷®Þu=—+ç×­´«ùmÞ |J-Àc]oÙ¸ýd<or‘¯„˜Õ'äÃòÚ÷}ù¶Ì3úÖøœÜ=aFh|ÙAákðÄï »‡Gü±ÃŽ‹Ø &cô½ºì#'¢ØtÕ``änM‹( O@;­¢(b³­ ¼Ùj J%%+çF™õUWªpÑs焚¹²[2q‰•+ˆ!p†Bƒ“Sל€³ÊÝ81?|¡eW—½JË0»©Â0_̯:_)fŒ:!"+¬àϸ†“¹ùÆ(BãðÀ·úí»øA¨‚Á°`,0Û²U”@o±åÏã꽅Ȥv"Øp†°‘\ H61'"à( (Ãsvž  ¸ÁIö»Å$ž¶1'ÑË#O1rˆ.ºnÔeå}@ü$/ˆ¡\ð!„R4äè¢!ƘâLr9¹äSH1¥$IS'^‚DI"¢’•Õ!šTT5g6†2teŒÏ.®øJ,©HÑ’+§új¬©JÕš7×&Zl©IÓ–;™ŽLÑ}=öÔ¥kϱ6Üð#Œ8Ò¡#?X;¬~*/°F‡5^LÍqéÁ¤&¥«‚f: “30ÆžÀxš  yrf…¼çÉÜäÌ*cS†“arcMÆ@¡ïÄaЃ»7æ~‹7ä·x㟘3“ºÿƒ9ê>óökmžsu1¶wáÄÔ:ì>ôwɆ%ÏC-ÿ×úWTœäÃ:kW!˜×(’ùl Û Ñ3á²ÇX‹—¹WjÇncNƒ9ê=¾ŸêPsû™ê¦À¼E9 wœï:{É«³›àZC/3EýHÒx}dÛõ®Å¹­«8­ý´{vˆÏ¹+çÌldXùÂÒÎ]z.â×›ñæŽ~ÓUD6fZŠ„þ5dÌå˜6ÔSXÂupÇÁ¼¿®rãq ·8ð¦\Õ|ÙèõhÖ˜ZÓ£ce˜cÝÞº\5Á›ÙÂ]!o™×¬²›¹©¨Í9¡WZ•ÛPò ʇgæÉÅ;ÔꤢG. ™ç©9{¤]Üýyãm•„âÍ{Ç|ØP$hÍc±GiסNîʦ*óaÍßap÷AÃÁÏ" Šßpˆ“yàå.H8އ齇a‡©o’oعÚ÷úF¶Æ V—eÿÃnåp¨Å bûXGÜt›R‹ë½¶³IØxvÎÇ~0[½1òq~îþ¥;D¦ÖÍ ÀÛáWl?ç5×éêÔ3ˆ¢RSrÜžÝYÂ9|}‰H3‘¬o~{ÙYwèÚ{¸óZ\¨÷WË©Vý¼wÌ ‰ìF`ò{v">‚B¿âñHØžVÞŸ/ýY+î»Ý:ÎZzìtÇÓ˜y²ö»÷“Ãæu_,výŠýϬ_Òy„ꉙz“é=¾¼×›ˆËw{òÇMûBý‡(œÑÑü/&­Ì™5>ó³gzTXtRaw profile type iptcxÚ=ŒA€@ï¼Â'°´Y×çÖƒ7þ?Vb,¦ÁÎëN[Jì†ÁàÆéTýŠhéU뎀¿SN͆^4E¢Êè‘ÌÑøNöõ¢bR©@h„iCCPICC profilexœ}‘=HÃ@Å_ÓJE*ŠvqÈP,HqÔ*¡B¨Zu0¹ô š4$).Ž‚kÁÁŪƒ‹³®®‚ øâäè¤è"%þ/)´ˆõà¸ïî=îÞB½Ì4+0hºm¦q1“]ƒ¯ "&3˘“¤$:ޝ{øøzåYÏý9z՜şH<Ë Ó&Þ žÞ´ ÎûÄaV”Uâsâq“.HüÈuÅã7Ηž6Ó©yâ0±Xhc¥YÑÔˆ§ˆ#ª¦S¾ñXå¼ÅY+WYóžü…¡œ¾²Ìuš#H`K BA%”a#J«NŠ…íÇ;ø‡]¿D.…\%0r,  ²ëÿƒßÝZùɘ—Š]/Žó1 wFÍq¾§qøŸ+½å¯Ô™OÒk--rôm×-MÙ.w€¡'C6eWòÓòyàýŒ¾) Þ=k^oÍ}œ>iê*ycÊ^ïðîîöÞþ=ÓìïWXrœô¤hDiTXtXML:com.adobe.xmp 9N"gAMA± üabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEä– `IDAT8ËÍ’1NA†¿çÙq2³+9Šä† KDâ)¸@š´q㫤áPPs¢\ 7XȆ†.ìàÙŒÁ^擄ly1  ù¥'ÍHÿ{ïŸÑÿ¥Œ1GI·›‹H-"uÒíæÆ˜£'•R‡™µ9«ÌÚ\)u¸Ù#›—ÌÚ¼ a´³Ãxoa–Bá+ޝ~rz}MfíEÂûõÒÍØa:ý8ÚÝåËÁïlŠ–Z:ôÍ+>¼éñ+¾;÷Öcêº>è¬Ì‹OãÁ«õFrû¯ýoÆ©my’Õa1Ÿ†é26ÄHœâd¾b¦-okÀÃ_‰Mƒ„“ɲ¼G¼ß²¯Ÿ ´.Š*5xOS–ÄÒs4ÎQÌf-ok€Vê à¸øA¸¹!–%Ñ9¢s4··ÜÕ5'IÒòniÅÀ¨×‹ßúýx™¦ñR$~‰Ÿµ^³ðW˜žé_HΞò‹èí¢+ýVk|IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/pin.png.license000066400000000000000000000001421430147706700256640ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/locale/images/timezone_-1.0.png000066400000000000000000000273521430147706700257560ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈiCCPGIMP built-in sRGB(‘}‘;HÃP†ÿ>¤";ˆ8d¨â`ATDpÑ*¡B¨Zu0¹é š4$).Ž‚kÁÁÇbÕÁÅYWWA|€89:)ºH‰ç&…1¸ÜÿžÿçÞs½ÌT38¨še¤q!“]B¯¢>Œ`Fb¦>'ŠIxÖ×=uRÝÅx–wߟխäLøâY¦ññÔ¦¥sÞ'ް¢¤ŸtAâG®Ë.¿q.8ìç™#š'Ž …6–Û˜ •x’8ª¨åû3.+œ·8«å*kÞ“¿0œÓV–¹Nk ,b "Ȩ¢„2,Äh×H1‘¢ó¸‡Àñ‹ä’ÉU#Ç*P!9~ð?ø=[3?1î&…ã@Ç‹m ¡] Q³íïcÛnœgàJkù+u`ú“ôZK‹=ÛÀÅuK“÷€Ë ÿI— É‘´üù<ð~Fß”ún®5wnÍsœ>išUò88† ”½îñîÎö¹ýÛӜߕ‹rµI[‹ý pHYs¢¢EÝ1¢•zTXtRaw profile type exifX…­Wm¶Ý& üÏ*º‰å$Îéºü¶ßWò’¼¤µï56`@šÑ§øçïþÂA%·ÔX´Þ3Ž6Ú Ãæû×Ý®ë}¬\ŸÚõ‰ÛsK(O—»[»Ëb¨ç·^æ(óc}Ò§…ôèeægÀzf&ÜøûE¢žîúÒžFÜ7}¨¼_ê¤Ç’§ãµ”çÏ÷”g°ë8Ïé}ExÉU¢¨¥æëªwŸzÿ ÿ†k©ýîûZGº«ž•À!Ì{)_ýÄùÏ]úÖû}?Íß8ŸìéQ¿ñe|„›O îüËÅï&®¯+¢ (å;sžÿÞ®{ÇmµÞN)g Ç;çtœpy½^ë8ƽ\çÀ©ÙòäbNœ«ŒB@e§ÒŠ+»ÄU®²°ÄFA‚’hQ½ê´ Z@©'œe“ÔQ½*°\ еJ¯k)×¼ãšoÅÌ^Е +xå‡gúYãïœiïu\TŽ3}¹¦CQ,ã w®è@Ê~ààËÁ/çÿÛq€­@/7+ ´<ï!&—7nÕ çŠ~Œò¡’ÄŸà"ÌÍXL©@ ÷R¹tHJVNµÑ…™‹¤V-IHéÌw¤\}‰©Ó©†6®½ °ÕVk þHSpȸrcæÎšx°õÚ[çÞ»ô#r&Uš°tQbZµ)kWQÕ¡6hTh >dèÃŒ’a"ÃX†þ†šI³Î6yö)S瘶@ŸÕ¯¾déËœ¼:d»‹«·() Ñ‚£‡„ÆÛàÚ®»mÞ}ËÖ=¶½¢ö úÝù¨•5º:ýä5Ô&‘—!Ê‘>˜1jˆËA„¦ƒYÖÒäfy‚‚ ‹äƒMòr„- ñ.¯Ø½!÷%Üë—p£_!—tÿr Ð}Û'¨ùÉsëBìŽÂãÓ\}hµDj'©Ù—Ê9­µ}Útk©ÚFYZtÔäÊb05 v,©Ùçò`,¨A]—Ëð®#Êt8WÔ#b…—`DW/S5jM±Ž©b!»°­>ˆ”{®ƒ±~ÝÝ6WZÃ}Y± ¿Èc=ª\Ƽa`E‘8™Ftî`ñÚC¸qš'e>~B": š/Ù¾{EÅtZ›ETÄX|ï-°GY4 !ß—Ô%µÊV`S…OæZ9Z‰Ì½ô>ßÁIÐÖ9×Ô;¥¬ÈW]\pMsODÌ–9|Àò·—ÆøõŽ0¼nÏè—eújÇÏÊb|xqÑ$)¬Ù1'”>V䍿°Ûº(™ ~±ëUFN=ŠšÂ(‹1TŸÍfë3!¸Á'$dÓÛ<3¬DôTãÈŽ<²|;¸áíæl²­3˜{ž: {Z`ÿÙÍÙi³yân×QQÄX+m]ò^gG&›«›zX&€]'ýµ¡é2÷äÌ?ôÓK™¾ìØÉVQw,d]*Aœ˜ ÑØC)²yÞ”ޱÅa¬“ÀGÝ-$×@&ÙZcá²»¢DfÀ¥Ö8!¯ÈØ›õb?ô"%P’C6ÔÄ›mΣ Py$‚0¡ ÙØ Ú&œ.­,ÿÕIéOYx´º¼#a2íH"ÝgG ªÃ‡4¨–A+x Ùh«`3‹ìÄ~q:9&Á~Ñ£u'™B€ÐFôFÀ]Ú[á¹æ»!hÉÄØ¢BúÐÚÕ13#;)’ ˜!¡%zñ]‘ z…Ø#{’:¾ÞØ!ógÁj}=Zº>ÓÒôçâú³j{’Ä2ƒQÂв ql;_-H´ØÝ0Žü=R‰§ÖÕê hÈ>ðŠã˰Ë0$Å€y'Å#+×µ¡kšî:‘·ä 9áÔ83xÊíxåH¡È,ÝÊ%…Þ.)gë)عC ùHá!E&D€ô)Ô/ÒoKáÊô_HžíàÓÙŒà_ßðA¡¶H>Š„ >|ú²ûE=l·ìpO€× ©uìˆ:rvki2±|:Ôvéõa5öì Q}Vš½>ùþ}ºO¯ùr‰/9¾HIœ täñpož®ŸîyÒ7CûHRNÿ)® ý<ûQ´ezTXtRaw profile type iptc™=Š1€0 ÷¼‚'$±UèsPÊÀÆÀÿ…éP[–­\ì~Þ²mŠÍp0Ù9œòRF”'vÍŽ„ÿÉ*6Y‰]"Ä  ›JHëänïÌ?ð\JÈiTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmpX…íXÍnã6¾ç)í¥EA‘¢~, R‚4Év ÄMm¯IÙj$Q•èHΫõÐGê+””¼Ž¼›z{è-`Ÿ4ä7ßÌPߌÇ}Mè—FÊWy•˜þþ‡iä,1öhQ_ñuþá¥áË—éË ™yq~÷Q_Ö%—ÄèË¢j£>1 )Ô³^†¦1@äSbþ²¸7®Dà ×r-núü›çgFܰ,z¸~¿£PVb®¥¬#»®³:ÇÍ ÚaB„!Æ@!@»­$éAÕ¾Ó#Ç5oi“×2•¡m’ŠLLSí;rµKoz¹ í¾• Εáªdb„€0À!œú«ÝÅbï]µÖP­EE {RCÛB°,V]5œHÑ< Q$¦æ0´ëÐ F¼Syt+(ÑÝ0€96ÇVùž¬àˆ…ÇÀŸ1-×¢«þÏ+tÏrÙÈN4OwÍ]ú+§ò8Ï[à=ÓƒR­l¶ó/õ .…ðA­‰f;q]òßFk4‹|4Œ¡{#BåðvZòÌ™y°EפZq5&áázþ¦\3yÄÌÑŠw1Äg óì)Åf‡,­ÈdG~¹RrUïYõÍðžo•}{ˆîÖ\%ùÂB&üúõx¶RÄ\Õ){ªýˆëÌ}ìá0 ÓÔÿ?Õã^hÜñ5P RŸaÀ}×SÕ¡0 é¿]O §ò‹áçõ¬æz,7u]ä¼9îGÍÿ nâ¿_rŸÂFï+QoÕð\Ë»®:þ àÈp›S^µGcO!ã±L>èúžwuï€û‹ÇN_ùw r r r r r r òŸ rïÿºà•ºèuæÅù_þ[¨Ÿ{ûHJ IDATxœíÝëoœW~Øñß9Ïmî3¼sHñ"‰–lZ–µ–w]¯7Ù[»HºhÐM» ÐKš è M Í?°¯“EÐI›Iƒ6ÛE³Øl“lÛÀí&¾ìÚήe˲LùBÉEŠ9äùÏóœÓ²½7=¶.$‡C~?€‹&Ÿù†%~çœç9Jà€›þ̯$)üÜØÇþî­•êÆ ›KÜ•¹§¿vó·ÖDÄvcî…îöö/‚@,‚@,‚@,‚@,‚@,‚@,‚@,‚Àáát{zÁàP0&4a£êZ1š?ú¸sü­ àÀ»*WCS]{§²øòå­Å×a»ÎZwˆ`pð=óLTÙœ¿Q»yu»U[³"¦ÛÐ3Ün»mvöË^mpàìЉϞò3ƒZ;^Ô®—QÊúÉõÀ‡ xsÉ+v¢™¨´«ëíT~Òë´kjsñ•v«²Rî?þÉ‘tßÑ(²å(ÏŠˆDaGÛ±:²F”¶·®‰ˆˆu\mÒZ)¥=W”¸† ÀAF08øÎë´O\ªÝ|s¼0þè¤$%?~:Øw$lVm«±éÖKóN"?n7a6o¼^ml,]ë¥ÍÈF¡k´µ1®ãk/=”÷S¹¼›Ì'™ÑÀIå~ÕÚñºý]°+‡‚ ÛJ{ÉddÚº¹¾5k«¶SO+ÐÕ•KÕÊò›IýZÆñ2Ûksÿ祅¼)ï/+ü4%"NvüÇú§ýøÈìÏõ' c"†•ÀÁC08øÎþ3/ãG³‰üØÈÆ»/¬×V.Ím¼ñý…äÈ‘¼ŸÕÍò[ÕäàLʈNm×Þ©n,ü`AâcAOfRG›L=2¤’^"mňÚÃï€=C08ðfeµÞijY¿úbcáåwWæŸ_ÙÞ~»ôÁ'];÷a—P£3?3 Í<àe3ÉÌPÞÏ $3ÓH[QÚ²º8¨ÞÜÜ7:2;ûŠüÅŸEòc+ŸqevUËܰyÆÈÙ³Î`âÑİ—°åíÐÙ¶ÙÚ®é vB=™ì?ú@nâtÚr‘ã"J1FÄ €ƒ‹`pX™›k¿÷ÏJŠÅä ;Z°áz®½Y=Q ¥}Ò­ÑbÒ7Óõv˾4£¦5C3}Ù±‡sAnDˆvœPDߊBp •ŽÙÐwF´rKa³aÝ\&ãfr®£¤ÕÚZ~­±¾\wÓ}ƒÙá™ÙÌÐL_fèxôã[ŽÀáA08lLmõÝ›C³S5?1~Ê­®Œv:µ(HåCÛ‰*H >ø³:=p<íeúÓɤ¥‡Áà0r}h&Q|¼UYx=Rö†2Z; ãø¹‰ êL~êcV»A(F8˜ p¨ #³U]Y²¦ñ‚VþæðÔÇOyé¼#‘±~¡Ø—z £Ý€s‚ÀádªóϯUE¶¦ÎþÃS™‘'2#'ÚJ¹V»Žâ1©üîöÐ5Å¢Ûl¬Úµ ±Æjc;¶¶±5¶V¬hþx@„‡ÒY/=­2Ù±¡Üðñ¼LK)­MØÔQ½":í°¼À{‡J±x6¥‹ÇþÚÈ#_œÒÚó¢V5h7·ëQ§–é4·uÐ_” =Ä–$ÞC08TZi×Í&³Åta² \Ï„í– Úͤ(kÇ/Yˆˆ~ˆ`p˜èLáø`¾xfH¹žQJ[6ÜFùšçú‰(3òpëƒ;»ˆD„`pˆ žü…´r½'í´jkó[¦ÝÊ9A&JäÇ#¥]ÇHG¢FU¬ÕÆOä5ç/@08<\‘ö˜›ìKoÌ?û’„’ò²}Ó& Ãäàq<öäHXß6Õ›s¡Ÿ+*?•×ô€ÃA‰ˆ×iTWÛ•åïÜXx¾44úñG3}©dfL9ž'QØT®ŸQ©¡“Ž›Hk¶$p Áà0Ð"b·¾[ÞZ²ˆ¨5wñQí·£áÙŒ¤‹fñB5Ñ?1”-Îκ~ŠŸxÁà S"‹g¥sìÑlé{¿ß<ùÔPaų̈¹¦5¶­Œ¹\µÕŽ×©u:Íò ?3 º=4ûÁààëïw±§’*9•ÿ쯕ƒÔðÉôÈÉ>'HY‰:amãúv¢¾U÷³£¾ŸÖbÄv{dö ‚ÀÁ·¡m4Õ¨tšJgúgO÷{"PÚï8ŽkÅŠ²ÆxµµyÈ x‰Û‘ø€C Ô^~õ—ó“T\/xàf£RˆZÛ… 3Ù±\²ïH"Q(&Âvµ-"N·§`?!tVD:"l-¼^oUÖVÝdv[;¹­Dv0›Ì—mx¦/U›Œ¬ »=,û Áà00"¢üÌÀ1ßK…¶Z_­l¿s¥""R,:'ÒcxÙé±tÿDd#£”úà¼g=‚Àa DÏ |ë&Üáñáþ‰Óe×ékV+o5œ„ypôøöH®ð\_e³PÞ,Í®¸®Rœô Áàp°"§®¿Xu¼t¨lçdßPêSM%ßšžÏM\š)^{r½”½œð·Î•VO_É„Dà°#ϘHÏTZ•j˜8âqóñ‡?½üÅDöÁÿWÙž½~s±ïúöèb³´õtÍŠo±Áà`8ý…/¤Ï|É/ØvµOÙH' ™šé$[ë‹¶}cþF󯾶ÞÒõfô¹4)‘o“«×7ß ŸuÿûÊüò /µ–Éf‡²W/Ï.ˆlj×*nbà‚@O›ýÌlæ¿8u*™Ñ'3à.•íŸÔJœN[êͦ”Ò9Y.¼öГ}o¿ûZÐ|(ñÅþa3º]V‹så³²}?èd§Ý壩Da %ÆrÊ3?‚`гŸ:™ýÙ_>úoú‹Á¯æô1¥•ÕúÖŽ”’>‘G­u¥Y“f)ü ÛßVâ¶½TÞëŸ8rºÝésRYÈ´8° €ŸF0èUÞßþåãÿjìxâߦ²z@D¤Ó‘°^U›AÂfª[©kÚiåü Êy¾õÜ@¼#Ç+§­5Ú˜`K¤U=POžˆ´2†Xàö½çË_vþÁµ2z4ñ/”rü0´m­ÅQ¢L¥œ¾^ÛöË[å¡EÏk{Å©•¥ÓÍǵ¾ØT³álµ›NÝJ䫬¶F‰%ˆC0è9__ÿôñÓù_óSÎH£.•Rb1‘ˆÒÕjfiuiæ|‰ ‚ZÖõšé…ËG_ð|¥Óé­ÁV+½ysé¡·ÃNª-’›T›'!ðá=gæLöˉŒsL”(?°)¥ÚÖ”ïú•ãÖ¼é½ûÖãß õT&×è+ n‡m¯iÄkÖKC×kÛ“ec›Ž–LH,ðÑ=åÔNM Ž9§]O%•±FL§-¶Ý’¦ˆ’t¶50Tœ?é:Úö Uðü0Ój¸[͆®z‰ÜŠˆˆ–²p‡=eæÉ#Ÿ÷5¥[¿’’ R&)ÖJ§%JÙ_.Y;UÝÎ/”–Ï'R6Hg7¶šîöÆÍÉkbµíîw@o!ô5ö@ðÄvÅ ­²›A¦×zbED”8ž8™BÔïyd~ =^¯û¥ÍRæÚ•‰ï5«éí°Ó_ëö7@¯á0S=c扙ñýp®/k·TóæRòÚ¶S;ªvtÃZÉ(ã¸â¸žIæò͉ñéõ'ŽL->Y«:7êö÷@¯a…@Ϙýü±OyžžôñŒ‰2J·t³¡·ÃŽ´¢Ði‹²*là'¢œç›„ˆDZ^*Û=vâ­Ï ­L_}ûSÏ7“›{6´~ÿ}ÞŸô&‚@ÏÈôEQ’r%~`“~ŽzÖZi7MmífúíËs½”ï¯ôŒ_<×W?ª”h?°Éü@{$kÙòÚÐZ"mRÊI…{5¯äß;ìÁç>zÁ gT7;¯šHZ¦³Ñj¶Mi9³uíåÒ+åÒ»óÑW¥ÒéºÈ¬•/_TÙïüi_ntfÜMRnÂKF­«Ç>5˜>ÖÞ»‰‰@ïã&<½L‰ÈGnõ™™ùùÀ9ùócg~qB;ÎŒõÓ6—.¸+sOíæ…o­ÉÌ À~Á= zÙýà¹õæˆâ”gîÁ Á Á Á Á ç084´VJtÞ'±F‰R<ÆГž»xÓšb²Óª•Cqö>´5*j5¬ö:œäè9°ÿÜÑad¸sóó™p8¹pI.üÉj·fè„ÛÖ¹¹^þÛà>9Â)ìb ;Œ¢JäHB Õ {(+åò¶ˆ˜®ÍÀ=p»=ì¶ÙÙ/{õ|æýÇ~f¢[34Ê×Uíú÷¿½ðúÿÚÛ­9¸[€¯>œÖŽÎö§‡ŽŠvö~#Fm·¥|oï_€ûC08Œ¶¢¼P+µ÷[1%]x]v€îöp8pë 7 b b b b b b b b b b b b b b b b °ËLÔ±Vu{î…Ûíà kÔÖÜí¥‹¥VyÑkl¬„Ýž€»E0ÀNÓZÄŠ©-_òK—Ÿ}=Zy÷Jec¾*"¶ËÓpWØIZKuõušQâ5Ö¶UdÌÆÆ‘ºÈ¼éöxÜ-‚v Ûº¼ðŠSYxíuLlÚj©¶võ7…•@"`EÖ(µk‘m¯•.þ墈°ªèiN·€ÝV˜>ãjIÌd‹³9¥Ô®>­HkǺnÂÓJMºN:¨ 8«²±íæk°›x¬*ì$­%Ñ7©¬X'ì”7e~ž­H€žÆ–$Ø1ZšåÎÖÒy·¶2ÿfÔª7D¤Ýí©¸ì-R[»ì®¿ûWkÅ+sÕêüš f‡GÎK¤G&¾ÿ_¿Ýí¸[ìc$wä‘v§SÏ7 ÅÏŸ/'³ÃÉ©\«²œ‚ÐsØA^ª`‡f>­}rT‰VÊu×·a«ÎÏ€žD0ÀN2FÏ7Žø""J>x¬*OWô&ž’{@)ËÓ’=‰`‹`€½ÀŽ$@"Ä"Ä"`O°' Л±`÷¨÷~b„Ǫz·»‡ñCìHô(VÄ"Ä"`/XËý,€žD0ˆE0À^P<% ЛØ V±% Гx¬*ì&­¥Sݨ6knÀ½ `Ycõ ÿé‹ÿ¥Ûsp¯Ø’»E‰zü÷Ý€ûA0À.Q/?ý;Ýž€ûÅ–$ØmÓüãŸùJØí9¸_¬08ðÜŬUJíÙcM›aé^ü­Ï/íÕë°›Xa°ïä'?Õç§“ƒ®ã»"­û¾^E®y93Óz÷mºµ¾úßÎÿÁ—6wûuØ+€}§0}jºÿÈ™Ç}“޲rß+Ö%Jû;1Û‡©n_ü½óðÏë»ý:ì%‚À¾£]ÏS^>áx#¢T¨´ÞÿöI¥­³ÓÝÞÚÂÓ¿;÷¯´wíè‚À¾£"m 7 Åc+ÅÊæÐzesj]¬ŽYiÐ"r!`w/ž]XúùÆW¢]{ºˆ›žì;fÒ'ß~pæá—þþØÑ §m:惛–µD‘cŒQÖD"ÆÖnÎúlæéß–oü=bp`±Â`ßI: ½ºªÒÍGÞ}ã¼ûÍzmp«Y¬9º­;­LÛukÞ©ÿé—–׸ôÚÏÿy§¿ÿç±Þ†Õªöüo<ùû»qmö#‚Àþ¤ímÏL0aº³¶ôø»ïÿþý›´.'üÀZuDéh—îÏR¥ç~ã“_ßk°? „N{¤öÊ÷þÆGQEa¡¹Ó×·Jß|î7Ÿü£¾.ûÁ`ŠDÄe$ºãƒÛšõbE¬RâDòõ‡[´ÜûÔŒŠžÿͧþäž/@#ì;ííõööê[VcÃùÉüï…¶Zéd.È Ÿ¼ËS£µ˜Ncîùÿð¹ïÜ÷ô(‚À¾³”¾qqºé¿YÛzë¶÷1Ü-íx‰À+~67|rüοHK£Rzùû¿û·^܉èU€ýç™g«"áN]nú3¿bŒ1Öj­>:B´–êúÂÅs¿ÿKÄàÐ#àGi-åå‹ç/üá?}¾Û£° ð-kóß{uî[¿þÝnOÀ~±KÏ*€ÞÓnl¶‰~Á¢¥Ó®ªõ…7¾ÙíIØoÐ"f5|ûÛ¿^êö(ì7ˆˆ£ì]žÑÀá@0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0€ˆDÖªnÏÀ~äv{è:#â% ÎÙ_ýÚ¿´V·>ýا(c­ˆHØièêòÅreõâKksϬìù¬ì1‚Ĉç¥Ä˜ö¬5þí>Ã*¥‹R¿yéz}ëÆ«kÃR’¹½ž€½G0Àû¬X%ÚþÔǵ–¨QuK •ùWž¿yùéÕ.L@WpÜfeÅ„µ›×ˆÀaC0À‡Ò…mÝ®oTê×ÊÝž€½Æ–$ˆ¥%ŒêNuåíJõú¹s×·Î-v{"öÁ1¬„ººüV½tñŸ[zãÛoÈO>: €C€-Ip;ZKk{Uµ¶V®-½ñí·…XRü-&ê8íÊÚvåÆù«"ïŸÍÀáC0ÀO°êFy±Q^|ýâ ®u{º‰{àGi-íê†ÓØX¸qõ»¿}^DZÝ €nb…~BØ®ÛVeY‹gnÏ@· ð^þ½_ú­ÔÀô±Äì§ž<ùT¶ÛóÐMlI€eŒ|úß}ï_‹ÒÆ ÓÍÒŠÈ÷^ïöXt + pÆt´:Ͱ¶¾ÝíYè&Vô´¾Ù¿>™Î‹Žrcï7Pm㺙D¿ÖJÝ͵ ÝHEÞýO @ï"ô´t~âèø#¿pÒKd=1boûIÚ(#ê®VTµãE^º/Løç»¸¶—q½T.-·þ¬ììäÜô îap@I¦of§O<{:_˜ Ckq­1Êv– ºëkš&j5Z"íÂÀôV JÔèØÅŽÏ¾ùŵ•KÓòJuuyürdÝðèo}âæÒø¥…Ë?sQ¬¾£p°Æêv£ZÙZykEä–'8 FiíØµàjëÕƒ©™Ÿ2¶ã—K£WúGV?…¡{ýÊSoØ; †÷N{Žª¥•Ågö`tö-‚ÀÁ`µÝ®Lo¼uáÈ ŽÛr6Jï¼S­ôWrùµ‚ %J¦Z}Ö¶÷ŽV LX“°¾Q“µµênÀ~F08 Ì­›²”kÓ™ÙT¦–Yž]z$Štçí‹§žI†}-6lëÎöÆVyí¥Ýž€ýŽ`p0h-bD”j«âäËM»þ¹0tªbÝV¹4zncýÁ…;ºAU_¿m.üà•W¿ñöLÀ¾F0èiÖvT§Vö£°å‰µV”U+W†¯´jºUÝ,”š­Dc«4º.Ö‹Üä]Sõî ¿÷\zhhtjhmcnNÚ»û]°ÝÕ©§°ßŒÿäprøD¿qƒÝ©[#Ö(é$¬ø"Žùé|ÿ#£üÍþ;º¨µ¹xÁY½ôçsËëçž“ÅÅŽÜzROK:¬0èi7/¿°*—_X»Í¿²òÞ›"GŽ<™“gcû´VýF‰ÒV‹D­j¹à—e&(t2c~iùÜri‡Ç`ßãà6½Í¯>îΜ´wûþˆUNè&£Ñ‡tmê±~5vblG W pAºÏÏ>x2 ógË7œÂ¹¯Ÿ+Éì¬ßí¹ØkN·€ÝV˜>ãjIÌd‹³9¥î`K’µâYñsÚO÷:u?¯]•lØúŠllD{02û÷0Àí(±‰Ü° 2C ¨|¤êí¿þR·Ç`¯±ÂàÀ»ë†÷Y+J´Md†ÂD~"Ÿ91Øj´ÖÛÛKÍ]€}…øPFDI&:Ƙ©¢7Y<òÚêËo.ŠÌq>àÀ#àN#éþ)å%rSŽ—èO<žøË…—ç®t{,vOI€;eŒø©¾(äL>( ŸÉO v{$vÁwà 2ƒ¥ÔQÏKw{v[’àdЧ´ëµ&3“áòÂw_/w{v OIpàÝóS’âX+~²`Ryó€mg¬nÖ ¦Æ €ƒˆ`pàíx0ˆˆRÚZo¬îzÅl¢l"㠦ǭU7;q}ö ¶$À=ÒÖ*??ù¹ ™>•Ê‹îÐÑùÖÖÂÜÚÜ3ÕnÏÀN à~#"bƒÜ¨¸Av(5ò@ßæÕ&•Î=¿zñOWEÄvyBî [’x»±%é§X+Ú ¬›Héd~"§”šÈ M7ÜTª]_¿Îo€žE08ðö$DäýÅíú6Ñ?™pý̱Dft$3~Æwû†œúÊéºÈ+€žÂ–$ØŽÒ6[|He†ŽI•øÉL%žûŸ ¯ `ôn€ÝbŒ(íšÔÐ1“Èék)ß‘]\á`ç ÀîS‰‡›1"6b+ '±% Ø}ü z+ b b b b b b b b b b b b b b b¹Ýö=}Ÿï­˜¸]B0À‡Q¢ÚÕuÝ©o¨û¹LkkU«zÓîÔXì‚bi‰:5¯ºve¥|åÅ׃ÜhÝšèžÂ¡ÝªÈŠmKDˆ@O! ޱQ¤$jU_ùú©v{$ö›jàCqDXR¬0@#â8ŽGeÆþÒLÐ7ظ×Kµ;5»¸}þšÌ͵wrDvÁ±Œ8NÐIL÷ûg O‰R÷¼ÊP_¿®‹åÊÿX–¹uaµÐCø0JÛ 7*AnÔ¹çkX£ÂvÛ5 m €žC0ÀG1æ~¯`ÅF¬*zïvˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0;Gu{€F0;CÉ­ÿŸˆp  ÀÎ1"b»=ÀNr»=p@ à@b…@,‚@,‚@,‚@,‚@,‚@,‚@,‚@,‚@,‚@,‚@,‚@,‚@,‚@,‚@,‚@,‚@,‚öÜz“Ûí gXQ"殿,Q 7 ðQ”¨í•K­­o®zA¢&V«»½D«qÓ˜°\» °køÖ*6¶+¥7þìüÖÍÖòÂÈIDAT½]ŵ"óí €ÝG0ÀPZÏOµDÞjv{ö{jàYkîz+½Ž`‹`‹`‹`‹`‹`‹`‹`‹`‹`‹`‹`‹`€;Ôh6m·g`¯¹Ýö;¥¬U®Ÿ8úøøäã_ò£Nó®ßlio¯ÛkÕsK27×ÞØ-|¥m²oª0ôpî)eì=­2ÔËWõèFéWd®$"¬TzÁÅñ“ýÆO÷ßã׋„a]ÛTBíì`ì>‚îˆ1÷óå÷óÅt7=ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆE0ˆõÿ³F´%„ãÝIEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-10.0.png000066400000000000000000000242561430147706700260360ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈáiCCPsRGB•c``<ÍL ¹y%EAîN ‘Q H 1¹¸€7`d`øv D20\Ö ,aåÇ£à,Z¤?±H:˜ÍÈb'AØ vyIA ­b'Ø@3ð…9Ù>@¶B:; ‰’Zœ dçÙñ¿åÏg`°øÂÀÀ<!–4a{;ƒÄ„˜ÊBþV†m—bŸýÁþe;T’ZQñÓwd(H,JK3ƒ4-áÓrÞHá \Ñw€k10 I 'BrØ6„£G³ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/ IDATxœíÝÛ]×}ØñßZûrî—¹ß/’ÛD](Y–äØDŒØNê q)ÐIòTô_0Œ¾´E (h‚¶-Œ¢H‹F©ÇŒc[¶lZ%‘”4C‡s¿9sîçì½V†¤HŠ[ÎÌ¥ïÇÑs.{ï™§óµ×ZJÚdà…?yñ_OtŒt‹5¶]çy8-aPñ+ë×?~ç¿þÉD¤~°ç>ô“¾‡Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á RÛƒÁ*¥Dëƒ8€}æ¶óàÖXT Ö´ʉe´‹QÚŠˆˆ1í<5€}ж`°ÖWµõ™je­¹ a³¢cé¡Xª§O»¾òÒŽÏ©ûÞ ´%"€Ã¥mÁ6õòâ¯~æÊ…©©7Ãç¾ã¹é®UW¼•D×ø ?‘Έز E;I/ÕÙ“Hhí8íº$©mÁ°zåûåU‘òíou¢§ç=3õQãÆÌ…zÏù7æS[)·²R ´[´­j±£çè×_3ýžd®_Z­†HŠ˜@Œ ¬ëg”K‹«­v”£ï™aoßâ$FîΓ`º°/Ô£_r Ôð«oÄ0Þ¯ýd6°­U¿iñ‚FÃúvü|<•òÒùdf°ËIå]GnD(q•vcV;J™Ðc­f¼¾ysúÒÿçÿWDêOô§žR‡%î¥DÄ>ôñ7ÞÐùW3 5˜³Ö(ßÕÚÏöæÝGú½X6Ö*ÍV£Pm…ÍŠV*T+[Ó?ú7ï‰H󀇈’íÛ«càpROú€/ªCùa¼§çtÚvdLkÓÑ-?\»ù÷K"bo?íŠHð/øÂpŸôÜ«óØog»†OLx™þIVÜzq1,­N½+"+ããç½z*ól–M23ZoÕÖLeóÆòÖÜ•‚|öÑ¡ †Éowç'_ûŠÒ6Ý,/] •«+N¸2S•cÇÜF"¦cô¹—cÙ!‰ç‡LyåC‘é/%RÃï.‡ÎB‡Y‰šËM™›«=éŸø¼8 Á &Ïwe'_þf¢{´§ºtåªÄÂn¼ù§»¯ØÕŒ¯Ôr½—èJ†µMKtH~ðìöݹFeÁ4+Nraægó2×5<üª;Ï™z³}jŸå‰Cºÿ…îÔȹ¯uŒœëln­WJ×ß»õÓÿÖé˜8—Ë ½4”èp¥¥3ZÙ\³²R·¶a³g½xnØsãI­c­ÚfXéKfŽ¿¼äÅÓb%L§«KצÞ|W˜óìÊ †î¯gz'¾yLÅâ™Þã=^,+Åò† ËÕ¾s›É“¯ŸòS=#‰üаϹÚóDD·š•Õ0–s]?ˆq\Ï:éÇM¤m+v<ß„¡ñª7\ù@`WÚ JD´l²¿wb²êÿWRƒÇ&c©^Ïñ&l5uXß”Xvøh|øÜ`ºÿô˜›Èx~"gD$¼óF?Ýåˆ{'î9“uÝt þö·¶YÑJ[&C{о`8ý†ßëT‡[•¥ pýâ’ˆ4ï}ºZ¸1«¬JwÿÚ¸Æ×µÝ'¾‘-)Qâz^RDk#ÆDœàaÌíŽÐûù“_Xmûd=䆽~¼s$Õw&”bADl<Ùçdzýq1"µõéV}íºÑ®ãy~r;DäñbÀ~kÛCcáƒb«U»\,Ζî}|èKÿ´+êèN¾ô²Ÿìì¨,_5[ËW ±\_ÂÏôúŽk×%xLm †µµ+²=‡a{˜`x8qòìKvŽŸ2aØÖKñÍå6*kÓ+ªÙÕsü¸Ž%Úu9v¡“žy"SFDäèùq*Ýwl2–îu•Ÿ*®^{kñj­¼t¥ µb1Þ{ú¤Í@qÄißxÒã'2ÆÚ 0Ka¢±µVJwôRÏvN|¥3‘êQÚñÚw9[Û‚¡ÿX¢#ÛÓûjnèìh,߯´8¡X%®íyyÔuü!?Ó§“Ù>Ñ^¼]—`Ú *“H&;Çò±t·§Å»½ÉÚö– ž³ã_bíSàkëÆm^"h/Š5¶j:´V9^Ü8J³¡ðh÷NÏŸP®u+Äðô8°`p\ÏŠ±ùYFi«­QÊ u­°luþÊ»"RK0m4òÚÜé¾c_ýR¼k<㸾1A<1—Ÿ˜üõóë˳ˋçnˆuÛº81ÚŠжê!·Bñür,_I}ÿÙ¥Ùø\u¹¡Wn?K0m¤ƒf¥YY_uü¬+™Î„ã¸6ß9Ûß?2ÿJGÏâs±Tã‡sÓ/^3&<ø^c”µÖ³J¥uð™óŒQVDDk¥Œ²V[«DD”ª;éüZ¦ÕH׫Õ|]«@+íš;ã~|!súÅŸ|ÝóJÝÙ\£OÛä»…Á²{õöóÎ~þ2î•8•Ï <3ê%rɃ_MU‰5-§U+l,]þßÓ"ò©_>pŠó—7—¯NßLt¸e •#bÓÍ` a¡«oñ¹\ÇÒ‰…[¿ƒLóÁ÷z±b²äq¥i6:êF‰µF‰R÷Oš6"âú› Ç­Äl(¢¥æŠòLº¦wø#'žùù·ÒÙ¥|.?Û5zôýgM +•JwY‰–Dr)7|dêŰåUæoN¼uãêà•™V±9s¥"Âp¦S?üÓ+Ç^™ë?ú‘Úfÿ©úÖÙZÄšŽxAÐQðJ5ž÷ÇO>{é÷Wæû~}ù×C?H&³Žcœry¤pg„Àצó×;Žúåë¾WË-Ýðcaâæ3oÍN¿ú± ÓlĶšµd)[êèZ?³¹ÖwSÂpQ‘bqbí½‹ú/[õx½Z,U‹‹ª¶ñ޹sp@6¦~±µ1õ‹ÆŸÿ£ùÚæüxyíh!Õ}4ë¥<÷Á©ÏV\S.¬-/¬üjcuèzg×L牳~O;nðÎOó/kÕ‘M­·o;²k• uhŒ²J<åÔ3ZBÇuÚX93W,Œ­´šéF"½‘J¥‹¿Ø* ´³}³‘£´Ý\=¾¬”QÚ±JksßèÁ°™K±)"—ÇÏÿÑL£|ý™ÜÀÉã~º?寒Z¬¶"FÄj[ÚœX½rièGÆÄ‚tv1»UÌ뮣š­\Mk¥D¬h¨Z­ëÊ¥ßùVFqt¨[ÍTÃÑ¡cmtÉÔ{i¹÷õ÷?ó ÔÅ&>Y‘‰`‡pö'~}v||áè‰ï ÇS½"ÞÝ'­ ·—IÕŽµFßý@¯´ÙþÞ†*êÓýöÃÞß±áíãyÔ7­”Jr{©S‚8LffêÓ3ÿvjï|ÄÃc¹;A0ŸmÙü,r64 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "}~ƒÁˆ¨PÛ'}ÀÓìó öŒ`©}Á +"b­Um;€¶rG^ÿgƒw¾Ñõæ§îùWÚ½ç±ÊÝï+wž¯Õï>¯œO^ëX“7Ö¸J)+–©ÀaÒsú|ºéÞ£^çv=ÿ-/шڞ ¬ÔŸîøÞ˜í×u>ìµÖÞ>†¶Ö1?‘M‰+ôp˜¸=G¿þ¥xn°[{1ó™/Œ¥û»âÃM¥Ô¾|¬·V)‘Û1¡ÄŠùÌó8x*–îïKtö;n곃ÁŠ5J#ÖÙŸ3Ëíñ+ÂÈp8e•Q¢ŒHt3°J€H€H€H€H€H€H€H€H€H€H€Hû ƸÖe÷ëxž¼}-JÕÎîw†ó×úq‰àsÂÝû!ŒXñMµÚµ¥¬k•µ6™î cÊåÑ‚£\k”µÚZµ÷s8Hû "bµ­W‡¶D+%ʨÀx«šžëÖ¼Ðxa"VŒ‡Aº©–ˆÙ—Sh¿}›Ã µUZŒhmU½:Z,WŽ­…¡k´^Ktv¿sÜOÌåM/`žðôhÏ*IvûZb„Ãåٛ߸óïÔso¾’ïºÞ#Êp{ð8€eUhå…½#S“G&ßÿýñÉ·¾O¬¤i¿ý™Ãð(Ö¨j9SXšüéúòètÐÌÕµVJ„f³ Ç õüì«Wæoš«AhiÑÂägàð;˜1­X rç(b8lŒQÖŠk”Zëím`€§A2½˜™øéÉDj9#J·)QÃc¿:;ùìÅ?¹tZ» GäoIpˆY±…ñ›±Å ^ܹ¶£DÄÕJ”(G‰Òû¿d‘a®p89Ûÿè»ÿ‘õågæ «Ç—Œ‰Jo?æ6ë[V•Ö­èý¿;É‹¥E;Þ¾ÀÞ˜fÅiÕK® ‡ü•¿u÷N$·\˜ýI³¶¶ïC¦^Ë熟‹eû“bÙp8DÂZyéªf^<ÿ3?«»ÿÕ¿üE;®`àô·G3ÏôX뤔„px˜©7ÿÕ;;yaÛVI²~Z[«”R–XžRm †˜ï©íÿÇÄgàiÕÞ}´Qlõ<½ÚwK’ U»Ž à`´qƒ§´UDðk_0X—Xžrí›``Be# ÀÓ¬3’cí;ôãaYW`—Ú ¾g”0‡xª1‡@¤¶ƒRš[€§œ»ƒ×(9ý†7¨íäµwYÕˆ+eÙµ xŠ=2ÎýI"žK=“é>ÒgŒÙÙ¨²V+'+N,!J,ÓŽ€§Ó#ƒ!–Iú©ŽññüÈ—” ÕVŒÙõÅx² ɘÒJkW©Ð>þX±<Í &ˆ+WkWD‹(³½ò‘½=¡Y‹ˆ5{[ I1 V íúVÂF3¨•ª"FDYk”ã*¥|M­%ØË~ ¡ ]/™ñ´8»=€6yôÊG·®”Wò³ë¿öED”jÙÔà™a?‘®¼:s+(-]3Fïz5$å¸/üî‹~º7æ°+p¨<2®\ù~SDfï}ììÄ¿v?s.?|Ú¹uñ×+«W.”÷p Nzhr¨+™'Á2¬À!²«èÖ8ÊóSâÄóýé—&öx aiö÷[ÕR+Üë|ûj—Á*#ÆøñŽT¶r´»ûDf/1÷ëÕ™­…«+6l2û8Döt KšX¼£¿ûùßßÛe\JsïЪ•ZF½ À¾ÙÛœ%ÖKæÓñÞ#=§Ï§÷r¨9çÙÒòû+&xÌÍá´Í‚a{T7–4~,?˜ë{elOWrñbPºuí½V½0Ê»†»»&Xm½tW:=pd¬ûÄë{™Ë`çÔÕ›¥¥—e‡}XÆÔˆK'–ìy}xO‡ºx1(Ï]ºÖ6b]ƒ1޲êž%P•¶ñTW&Ùyd´¯ïlj×c{%7[^ººl‚&£ À¶«`Ð:´êÞ]™7ž ½tv8ú[{e¸xñ?›«Ó—[Œ2OÜ.GÂOo°fÅz©®L¼wll+&Ùlqk¶´xmÅæ2OÒ®ç0X«ˆ#~,gÜXv´kàÕÁ½\Ô•+ßom­_»Ô,¯²‘ðí2ü‡?¬ÄƳ½¯k`Ïsb+Ù¹òÒGË&äÎ$àIÙ]0˜àÓ·$‰ÜžËc‰üXúùßØË…MMu¶ŠkSï6«kŒ2OÈ>,«ú«m,Ó—Me‡FÎ};¹û}ÏÄóÉ[åÅ—Œ±Ìež€ÝƒõÖ퓜xæH*wjo£ ov¶¶Öo\j–Và Øÿ+6žíÏ$»ÇúÎ~cs¾g¿9_^ûpÉs€ƒÖž`#~"cœD~¼cðÅž½iæÂX³¾|ëÝÖÖê~]€ÚU0X÷!û0|êEÚ&³ƒ97Ý5>0pnOs›/­~´À(p°v= •yD4ÜÞý9Ñy4~êüžFæÞškÖ6/7JëÌeЮƒÁXýèïVl<;”IçƆ_}#±Ûs‰|?¬Uêó••k‹¬± œ=ÌaØÉ[ø‰œqùc±ÌH÷îÏ%²([Õ­•[6h<úv(û½ý¯~õ¸ŠíäMʺI½ÓÔ°b“#¹Fyc|xøÕµ¹¹·j»»T§Õ Ä%"ÜšWDäܹ?q‹1ÿ•ìØó“J}v (c­Š%?ÑaÄìä¡íݟ㙎cÁä—¯ËÜ[óûråÚÎ©Õ J:ú©Îc¾Öj§·üì|:Õ6–É5¶VÇÇÇϯÏÌ\¨ïæb¬6íÃð #~2ºÉî±ã_ê<˜sØ«OƒÒ–G.™º F$Ù5š•DþÈøøùø¾À¾»/R©Å̉gÿÏù‘·'ÃÐ1û;±½ûs<Ù}"yúåü>@›Ü-×i©t~±k`tþËÃG>øJïÐåíV¼}=››ìÍ9rìØoïhE¦»2+û{5án0¡g×—OÌO_=õWÖ„Þ™~ü²Ù©Þýžæà'sa,Ó{ÒöŽåîyXÝþÒ·¿œÛ_®ˆx"âË… ±°Vw?u@msßð0L6çn¾ö¾VbSùRW£ÞQ~œÅvÄIvgEë×_þ÷%ëheRâ(åX£¬ÖJÄ«¬vDÄj­Ä*e”Õʪ¬¸.{0ä¾`°V)ÓŠSWÏ_rÜ–cM,ÔÚîûh?–1ºóè˜Ø@ÝÁp¶ÿÑâˆUòÀ9µ(¥­(mµRáŽN¢E¬£T_ßY÷Ô©ïìè=.ˆùÞ>ðôzè->®«”HÜ(݆ՒîœÃO>âCü^>·ÑÚ /Ùßýê?þVÁ‹=ú`Ö¨¿µ°¼¹üO.-_þ/•=œøÜøŒ9íþCûã_‹1Ö~²©œ#ZL`­ˆl>Xm•ô¥]“ê%:‡wvG¶–®õ†®º¹|Yª"­OøÂ{*&kUñb©Dµ:PRÒÔÖ¤Z©ôZzøèÏŸWâ„…µ®ådº‘X˜=94»k÷ƈ¾s¯Ó$;†âìøøøù5v£ž‚`pýšwôÔß¼ÖÕ»v|m±ãz¾«Ü³<7øQ"SÎM£R‰­$S ˹®ú@y+ö?Ö{®+gwK;¹‰là'z5GžýP`Ÿ×LÝÁé<5ÕÕ÷Θ[Oîô]aKŒ1¡cz<‘ÜœÈvÏœ›ýjµœœ+r3é\µqvàb©xtÉ*£ŒQÖJ ]¯â+§þɃ2Êõkžsïc÷2"ñ®‘Ìʹsìú€/Iøq)%ª¼5°Y*äVŽ?óÞד™Õ¡âêØGµZ¶ö°Qc”mŽQVÄŠÕ"ZYeBm­ØF`d«´•_7¡Û ©ç»6N&Ò­Ž•üÇÖªÐqÅY]½ºµylYI  ëý…Åù±k«+ÇfõŽZg÷G½]}WGLè7›tcû¬¸±”®—–”ž¯,_nµírŽˆÈââ·%=XnhÇæÝx.ë8í»}_)Q&ôƒ å¬®/~XÚY·Æýô_ñ•QÙŽéžÓ/\øšë®ù®[ÕbNdšJ´-oõë•ÜÆøä»_îê-LÌß~Ïw%l4tÝÖ&S¥C¿Q÷‹ë£ ýÃïNžùûßðÜ0Ü\X1cN=ÿÃó#×¾Õlú‹«#+w–mUʵ6ld]]º±6ýsödÀÖíá„¿³[·Þ.éØðŠØFÂOå:/®D¶ÿÊïÇ7GŽýø…á‰Ëg·Š™µf#÷Àˆ€cÄ~Ö\„ûùvscd­¼5¸)Ö³Ûò@éPw÷\;þñ7µSLŽON¿ÖÑ3ß»póôU%Új­”R-åúe¶ÜòâÍg¯ÞºõìÕ˜W±ý#³_®×b­f|³w`íŒ ìF"UÊ÷MŸ7¡WXœŸ¸©×j·jš5o}}ùèL¶c¾+×y½ßkŒXëx9§´6_ïP™¥©í. |ÎÜwÿQyñbU9ùEc«Ú应Ÿp”x6™YK¿ÿr®ck¤¸‘­n Ô{þEÄmù¾WõƒÐ5Jô6<³¢µUÛó"^nµ­Öº¶ k×ÖWƦâÉty£c±°~ü–ˆ+&Œ‡›ë#+k+·šÍΚ„ñ \îÛX_½¼4wüªëÆZ¬¯ŽÜÜZYZ_í¿²¼p⺵éV*½’iÖRõÕåS3[›Ý¥Ó/þèë#Óç‡Ç?z©«û£#åòàL¹à;Õ\bºøñOXb_HŸš°P]½Òì´é¥jØhúñT—OăV¦±±Ú=»¶8ðÑÆÚ©E¥·[ÁeýÄjúØ™¿68råÙz=¾^)õ•ô=1±6ôÃZ¥·Ô¨w—WN}¸¾~tNYç¾ÂP¢­ ½Ðß*e”X×Ôu¤›ÅÂèêÊÂéµÔ£gÞúJ¾se¨Xœ³¦¡ŸýÒ~¯wèÚsµrv®VÜ2A«^«Ä–­H³ÕL” kGn´¤[‹S…õñغÌÌ0ù_8]%ijê͆ ×.O|T-wŒ½ðR¢k¼§aG¶5ÙR,¤Uàø^÷ü áy­¶M~°Æ5«#"©Ìr&Ûq«·T\+—‹"VŒ(ÑZ‹1®UžÑžg\ãjÝt¬¤L½š[Vªé·ÂdS‰ÕkK/Ì®,Ø›V…¿RÆZí8OˆøÙþ“§‹§§¯È…r»~6à°Šbã¹àIDAT^ifÆfYpÒùuåø)'žêp\ÿþ¿î+Q­ Ó(nô.®.Mm®­kݶmB‹£ªÞØÑ·ÏNœzï8ªÞXYœœÍwLwg;æ»jµtU‰g[µL}c­onuqbºZ*­Tseqp~q~òz£ÞSÑÊ(+J‰ÒJ‰ÒŸìg§\?UÞœ]ܸñvQ"ïŸ>Ÿµ†ªÝš{·ä¥zVµ×õ“]N,yßîÐJDZÍT£Õè¨k¥å`?So$8n])Õj­­™VN NžýÉ×Fg^hÔݵ­ÂðºÖ¢ZÍt#h¥›J9zæå~ebòí¯-½QÚ*hm•ö®X£\¿éj'pŒq¬öSªQ\vÒCã³›3—‚üá€'nG·Í¿ýŸ×ƒ³ßøYX¯–2§ŸçúcÊõ˜íÛ“¶ç,ìä³´–0TFDÄq¬Þ=Ñ”¸fmùÌÜúòñkã¡ãck«S‰jim«Ø·®ÔöLŸÌ«ØþÇujIÏ«ç'pED¬”üg^üëoÔ«^5•Ùê³ÖÚ©¾þ×…µ¾¢Ö~6ëw·oƒ àÚñNÏË—PY®:ïœlÕ+ÁЩ—’¹±¬‹ß†ÐnÅë¹:l‚X«°:±©Ö¾l¤lµµEDÂf®qó㯽k•Qʸæa°=¯áVÊÙõfCP)õlŠˆx±ŠK6Ó‰D¹ÇŠ6bÅSs«+­×‹ýdúÇ^Ûû…O—Çû«ùÆT¸vý§éÌÀ¦uÜœöSÇ[±¾ Ée“éϼô“?Ì¤çÆŠ›ƒÓõj®ºó½‡e¾¼«Qb•SŠMœ¼ôåL®0Q.öÜ(6ÃДÔÚÒÀôÌG¯¼}ëãc¬ßZŸ^½qñïoþì?-Ⱦ” ðtÙÍm6fcöW›‰D÷švTR»ñ7ž–GEƒRZ‰ÒÆQ­J±0pcs}tÙšDøÈ9û<-B‰(cA£šZÝXúpcýÈŠ a&7Õ}òùË¿•Í­ n,\_úxãjqúÝŸÞúå\Üß+ž»¾/sáR¹™Ì.û"®rý.ÇMjkC±ÖÜýRúÞÃ[ Z‰ÖêÊøRqãÈrhãæÁ%ZäÅ—SÇOÿíë®Wð*¥Á‚ìj0BËöû>ùR¢¤Vê.•Kƒ[b=£”U¡Õ&ÛôþôÿÝ7»'žœ¿yýïæßþ³!𶧉¼õÅ+Xµ¾Ôpt¥YZ «ÅùBck±X+,k[Ë-ÇKún<åÜ}PJ”£·' «G|·èξk#ÇO]û–çV½åù3×$â6£(&lIЪ‹±M1æ/ÛTÖÖÕïÆ¬-öÎçF^XøðÖ…¥·ÿlu÷¿àóa¿æ(‘ï*ùî'ôýÏ+c£/ýÃ×’Ã]bÍ®þJ¯œ’?0ôÞÄV±g­¼u|]ìÎÿÚo¦S/ÌË«×ç”ïî`þ+ae³Þh-~0sá/6ws½ÀçÍŽWIz+ò=+ßûäýÂ¥v0ú³fšs3¯_ÕZ©Ç›s¬Å†¡­Õ«õÝ¿‘æ^®ø¢Ú¯`h›íeQwÙÆÜ™¸`ô£_à‹Š`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`‰`é‹ ê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"Dúÿ6©2éFIŠIEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-11.0.png000066400000000000000000000411731430147706700260340ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈmzTXtRaw profile type exifxÚÕWQ–ä& üç9Áq$ïå9~ Û3;³3“ÝÍæ'í׆ÆD•TR§øëÏþÀ‡)sª¢½Ö2>uÔÁ†NÏ÷g\wÊõºßŸ™Ë3únº (£ }ŒaÆÉ°‘a-Ã|ȳ¯.Þ\½ûp›pŸY§Ì6uö9¦-^eA&V[ºúË‚R@)¢†D #lÃ×vÙuËn[wßcÛ+k«®_`ÖøbêÌÓWÖŽø«¾,AGNäpƸ×Úg¹S­|˜;œåÁ a)‡›´è0 k˦Wî¾1÷S¼%é?Åÿˆ¹t¨û/˜K î#oŸ°¶ìIŽôDáÁ4DßìC7dd ÌšeOó)æËšl<î»éi5Ÿ;Ã)šmÑRW¶Y9€¸byãnìéýt»$ùïÛôS}å‚c]¶esœÔbŸ_Žç°ÏvMyçËøÙÙÂw¸Ÿ_1a®+_}¤¾á${rߔ×’Édcò#…GN‹©Õ]'t^‡‰9Ï«šz;¼U¯}Ç\\»…6ÑD°y(¾Å"óØ!E!,¼zÉÇm…ªv„×]ÝšóÛô³¿jᴑ목•Æá\½QÔ¶iÀŽfß‹}à<^›û’ÀtmÑÞmä}ŒŽ¾­ì®±4UíS/Owø"(Ïq Îg’d_U‹@t§"ü цÀ²Zª®÷h{ÖÔ`à ³ÝÆqÓËKQ[}óS™s5l5vtäiõ B ©÷Âè”]ò»íW åÈ=„¢´ƒnÑ©°±ÉbD¢K#Bü "¦&D¨®p«‹´²†E.DzAf¡:Fñ1EëòïåÛ®aXAOBv•¹ Œs:®MÐn+ƒ®¨%€™;Š ¯ s¼OX»ºû”x‘¬%!„ÍúŠ+rl¡T¸«#ÎUàÆÜTLÚnÐÄÊEÈÖžýŠ?>›~Ãßµ_/D¾"ÃÐAƒ¯°VDì€'o[[[»Ö±ÁV®½PÐubEÓ'pÆ€3 ƒ×„SY^Ä̈È<·5W«IÔô¿FéÒ ³[ïe:»ó9ê†#º"° ˆƒ•EQÊÌgó!sc!nžæö ó( 1Ö6NYAtT¿709 :ÖaU­»¬ÉË&f7qøÅ©-KÓ‚éD&te©V[8ïÉqÖ*) Ô¾;Ñ+ ªƒ§šC¹Ô9IµRL§Å‚f—N€÷‚.W¿ÿr›~õ…¢Ÿ{wÂ_˜’ÁröLˆÛI¯ð8$ð<ºš7 ˜ & \øcÓIkU-mÃé+rÿ9 ôŠÀ Y‘qüQO¦_sG! sšÀ±Å%vÈ1Aê>ÐÃE¡~ìIk >fwv¼sãÉŒw^œŠÀÀ€S50’ÁpT+§~oc×׉d3ÿÏ R¥\cSýZÖ»žøë. ùoâ]Šy½™ ‘`Ô+4 bu©t“ÎÛë£d}õô߈Èg á¿âÚT‘ e]h´“1t#GQäKGYºXçWZƶûäÈa}÷Šƒ¢ ûÒ' 6ÊËjezTXtRaw profile type iptcxÚ=JA€0»ó Ÿ”lã9fóà̓ÿ•ÛJ‹œ×=e+DŒðÈXä7›êè´ ‡¾ò…  ­ºÉîà•Ø9»p9F=|‘ª<ðxF0ÄÖ€„iCCPICC profilexœ}‘=HÃ@Å_?¤¢;ˆ8d¨NDEµ E¨j…VL.ý‚& IŠ‹£àZpðc±êà⬫ƒ« ~€89:)ºH‰ÿK -b<8îÇ»{»w€¿^fªTÍ2R‰¸É® ¡Wч~tcZb¦>'ŠIxޝ{øøzãYÞçþ=JÎd€O žeºaoOoZ:ç}â+J ñ9ñ˜A$~äºìòç‚Ã~ž1Ò©yâ±Phc¹YÑP‰§ˆ£ŠªQ¾?ã²Ây‹³Z®²æ=ù Ã9me™ë4‡‘À"– B€Œ*J(ÃBŒV)Ú{ø‡¿H.™\%0r, ’ãÿƒßÝšùÉ 7):^lûcíšmÛvã<WZË_©3Ÿ¤×ZZôèÝ.®[š¼\îƒOºdHŽ éÏç÷3ú¦,0p t­¹½5÷qú¤©«ä ppŒ({ÝãÝí½ý{¦ÙßhÇr£µ6´iTXtXML:com.adobe.xmp ~bS™gAMA± üabKGDùC» pHYs¢¢EÝ1¢tIMEäÉ£„å IDATxÚíÝwp]×}àñß9·¼þðÊC/$A‚¤(’%Ê’iÉ–‹+îvÜ’8ö:ñNÊ$Y'»›8ÙÌd&$;»³é±âuâdËMq¯,+Õ(QÅ&v @ôòðú-gÿI±,’@òû™áÞ{x8Ü/ï=÷¨ÍŸû§/F3m5QZ®¥´'†¥éÁGö|ïK‡À’Òÿé¯~*ÞГ³œhp±Çi† Á€`@0  €¥N ®Á€`@0  ‚Á€`@0Á€`@0  ‚Á€`‚Á€`@0  K"\‚Á€`@0  ‚Á€`‚Á€`@0  ®ö5{%¥Nÿ·%baàf†À+«Êì°øÕв£& ½j5?6^™=Ä7U01a NüSª…qîØËÕÒÌà!m¹Ç–‰Wž•òÌÌyŽ–¢08q9’‹]tÁ Ä5]ÉšJ~´("¾ ƒ¹ÂؾCù‘%¥ôÌ»o«ìzèˆqâÄ2’h\!¥é£L°Ä&võiËŽDD)s•Á $ ªª8qØÌ ½xpfàùˆ‰7,“òôQ)N‘DS¯|óó) ªFX⎿òÝç´åXÒyÛúH*ç*¥ÍUƒQµâ˜*Œ=}tnx߯$~µ 3ÏŸzDu~‚Q®…±}2ðÔWŸîÞbI¦³ƒ›ltÎ ‹ †À«H­8=Y-¼ò]m§%?²‹®snªIŽ¿ü­§EŒÎvßq«Ïž gƒ‘0𠈘À¿:/å™Á±ùÑ}ÿ6øìóŒ*pƒÈì”Üš÷ÈäþÇ·š0°ë—ßµÖgm‘×Ö4œ ¡_ &ö?6úÞpèWü V*^yˆ‘¡m/±ºv)Ï 3²À b|ï¥ý¶ËÔÁ'Qº~Ù[V»‰zëä×Oìô¬Ä˜@UæYùáV¼ë‹Ï9ÉúíûÛ3´íëÒ±éÒÔ÷.b¸5¬Ø"zð ™Ø÷£Çf·ï«§C1 'ÔæÏýÓ£™öš1ªÌ¶k…‘JaòðüèîÃÛ¿)-ë”±Ý?`€X$Õ,íw~Rfo“ÜšûßÛØ»e™¶£ÚjïÿØÝv4(m‰o ÝD}Ög:ËWþÏ/?”ª&‡â ÝRœ8$‘TN,'*WfD€HP+Š„FbumR³ë:ú{´í¾ ¢vxSÚ6v$©œh]"šÊµÄë»VTçÇ&7ö ‰†eÒu×gÄŽ%Å5Hqò0# Ü *³ÃoèˉÖe:û{µÑç¹­ª1"JicÇê”Òvc}Ïozáßò«™:²U´%¹5÷‹˜P¼ÊœÌÝÆ7 %"Ú‡A)Q¢TúZD¬xý².7^ÿ‹ÕâT ”¶«Å‰9z?6&¼ŠøåYƸÙg‡‚„¡òJ³¦Vž)¿:ãU EˉµÖµ¯¯‹fÚµIJ~dWÌ+Í­w¢éµv4ejÅéÇçÇöû 'pƒ })Ïû^qºPšœ7&øN~d·Tf‡¥iÕ}¶ÝDRiKœhoè‘Zq*z•A;šÞå×*Äp#ƒïUÄŸ8T¬&ÆË3ƒ#~~t·4,«DR9qbñkŇæG_c ½JĈ©*mK%\bÙN9yVׯ¶–Jþ¸XNLNœV;?²£ÔJ/i;ò’_+IyfPÜD£”¦ŽÈж¯KÇퟒX¦Cr}ï”tg¿|ÿ×ÕÿrPäŸþW%ôkràÑ?dd€ëœ›l7•“J~T¢uí9Ñ–Q›>óµß‘B5?ZšÙ5V™yDŒ‘‰}?:çE,7.ÉÜ*IæVʺý¡|ñwºå§où ßó# \§Òíëå-?ÿì~øw¥®ýÖû’M½}‘t«­”Û²"a$Óæ8±L¦Z˜¬ =÷5é{ï“dn•8±:±ci1a(~e^*s#2¶ëa‰×wÉá'þ¬ÿ—Þ#ˆ¼Â×§¦¾wÊìàv9üÄŸÜÒ´òí·Æzrv$yjÍ-"¢D7^oê—½¥qíþà~¿Z˜S–SRÚŠ(e%E‰^©¦´mVÜ÷ŸÜd®·Û+Í%æG÷ÕÁ\gzÞúy™>üŒØn\V¾û7ïK6õöFÒ­Q¥msrý©`XØ©MK$™Óv$µÊˆH ”he‹ ?4¡¯´åŠMY–;­jåÙ º{ŒÑ®#«îÿ’Ì{QzïY‘éÜxG,ÛÕdGë”(1gßÐèœ},7!"bøsrƒ7±Œh‘P™0T"FœxFÅ2íõÉæ>]˜82ìÀÒfG’Òÿ3-£;ÿE²ÝwÜoX¶ÊM4F”²Ä¯Î{ÚrmGe!DDÌùvz>³(LX"F´ üJQ—ç†kÚrfD´®§†E„X–¸dÓ*)Lì—©OH¦³ÿƒ©æÕÅ©#ÞÌ‘g&´z•ül<Ó!ÑL{F[nÜŠ$mˉœ/N„‚ •Wš cûÆ´ív´®)¨•ŽÏîÙ“Þ¹G;1)N’T®Ñ–°Lç&)Œí“•ïþÏ·¤šûúãõ=YíÆ$ží´œX#&Taà% cû& ãjÑL[K²¹/©íæ CP+‡³ƒ/Œmû‡o¹ÉziXñ6»Z˜ðŸ~öïäŽ[ß/Ú‰H´®UFw=Ì KPóÚdlÏ#bGS²òþÿº%™[¹6šn‰*í1FœD½å&êENDR¹¬ üŠhíØn\”Rç†Ð«˜âÄùùÑ}“ÅɃ’íþ„h'êÛÑ”tY¶˜0`ô€%¬mã‡däåoKǦOJvÙ&—÷¸ñzK”~í.HÆœ¾ÊÙ8ñ¬‘¸ÈEÖ0„'ùÑ=³Ó‡·~]ÔŠçcÛÿ‘®·Bò#;eùÛ¥½®}Ã=ñú®&ËM1g¯Y>ƒ9Q §±Ïüz ÕühmnèÅý…Ñ}¢,‡Ñ®#]w}V*³#Ò¶áÛ“-koÖµ&µå\ñŠì³ŠB^ÙÆLÕJ3â&¥®}ƒ(mÉìЋŒ>°„õlù ¼²äV¿ë=ÉÜÊ^7ÑàˆÒWuWS«½ÿcwÛÑT J‰RZìHÒŠ$›Z¢™¶•ó£¯îqõ¢,K´‘ºÎ¢µ%Ñl‡TçÙ° x³Ù‘”ôú¯Ä²£bG“u™Îþ÷§ZÖô8ñ¬%J™«~ý…¿”ˆ(ešRZKªeuVÄ8n<»ÁŽeZhÒq“MÖ “e;V'Æfx“%s+å#_Þ/|éA©kß°!ÕÜw[¬¾'¥-׈\è ÝHè×”(m´eË©š/ * jÊ+Ï•½òdIÄËMgÃ0¹^oîØËTíˆÌ½*©æµbGRëÂÐÛÅôožl÷f™Ø&þÞÇ¥qÅÛÞžhê]M·: g.üü& Taâ m9ñ0–íô%Ö-[mý½[) óÃæ'žÛ]šÕ–Ûœé¼3M·v¹É¦ºÊÜÈál÷f©ëìßËv,·œØ¬åD å™cÌðkê{§LÚ*˶|Ag»7¿?ÙÜ×I7ëÅ+3/HÏÝ_hOæV½=‘ëk´œH(—ÚµùÍ #– S­kTëZGDª'¿­k³¬H¢S‰'–ËM”‹¦¸‚õXF6îåð¿ÿ±´møàæDnÕ†xCOL]åFl¯s0\œ͘…¬0: jåJ~lŠ©.OºíÉì–¡mÿG{ï} ‘ë]IµX"oü†höµ~ÁЯªòÌP!?²sp~tOÈt‹Ó²î'¥e݃2ðÌ_˲-_ˆ¥;6¼?Ѱ¼Ù‰¥y“vO¾FÁ Ä˜@¿&ÅÉÃc³CÛ8}øééêü8³,BûÆJCï[åøŽïJãªwlL·­»=–íŒk;òfµÂµ%Æ*¨•¯8/Í NæG^yÙv“ÓõËïÚúÞŽgþšÙ.¢uý¥eÓGdôҤ¡wË}©ÖµkÜd“VJ›7þ*¤¢-D”¹Â`P"J” -a ½òl!?¼sßÌà ÿ~ü•ïJªe­tÜþÉŸrâu-~e¾""ûøίyíOÈñW¾#n¢>ÒлåÁdnU‡M¿i§´¬04ÈÂЗ A­(åÙc¿Z½²S™ñ¦=µ3Ù´²~õ{ÿ{¯ËtÆë»ýZ1 *Ÿ_àL‰ÆåRšc jEé}ǯmHwlدïÎh;ò¦®úêé·k]\0£DÄxå9)ŒïžÞqÄ+Í4™°RM4-ïè¼ó§?èÆë-+’Œ8Ñ:[;QLöŒ~€Ódº6‰ÏHqò°4ßò^ÉtÝöŽºŽ«"É\Tik Ü4èÌcø‹ƒ } ¼’W+O*¿4îäÌx¥éZºm}w¢qy—_1ÊäcÉ\C$ðÅ®XN¬""JÄ(~€×4ôÞ#Ú‰ÊÄÞJן‘Të-ªk_×fGÓ–ˆZ’w=7”%– ¼¢Ìl¯'_ÖV¼èÆ#SÍ«s‘TS}$Õ*­˜Qºì)ZÅ|íèИP)¥…“ Àkš×> J[2uô9Yq߯w§šûîMæúÒÚŽ(YrGÏç\’¤D)-ÆñJ:¨Å”ÕT }/H·mn³#ÍQˉ*˶D”±N•¥Ä˜¸¾…ÛF„hNY¸gÙ[ámÉÜÊõ±LgDÄHèW–Úû4Úvý3‚! })¹f±¸²š£¶+ÊF­l÷ÝuÚrCQbD$”0¬-T%\ŽÀ+‰(-¡_U^yn¯_É/Á%¿F¿O·ÝºÜ‰¦E”»8uÄ ÂŠ5=ð¤˦ƒLûFßM6W•Ræä“Ný J*£Å};""µÊœˆ1rä©¿|"¨–ìûÌöl–dÓÊ_²’v´©å•ÛrãʯÌÚ¹¾ëÜT³oÛ‰ÊB\¥äZ¼ pCÐza5@]Û­r9ÿ ÿF²âQ'ÚòtkçÖ[]·œ°#©\­k­)m™¥úÆ€ëÝìÀ Kþ=f»ï'ž1¾žŸk-ί·•(£”&ˆ‘ÐĽÙéь€ó–ƒˆ .ˆ`@0¸¸é£ÛιÕ)Á@DD”RR™;.bÂSÕ`3,ÀÒÒÔ÷N‰¤›7g:6¶º‰†ðüÞ¡_‹X‘¤>¹‘3Á,1–mG¶yåüÛœxý-ñlWLY¶Y8ˆ])m9þÉm`‰1&”Dãr™xõ±'k¥é'kÅ©“Í}N,ãj;bÄ9yÛÓ×=^Úû?v·Mg/n¸ª(QJ¼Ò´ñÊs'ö=6Ô‹W? Æ÷$ݺVŽ<ùçb»‰^y¶¨”ŠkˉkÛµ”ÖoH1p†X‚¦o•©Ã[EDįäåàcÿkoûÆì­ëØpg¢iÅÊHª¹Þræõ>ÓÀ]’€%nbÿE)%Ú‰ÈÞùïÏÍÛ±½<7RS×ð*!‚¸Î{á’[óÑ–»7ô«¾œ\™L0ßûÃ7ô8ž`@0  ‚Á€`@0 €`@0  ‚Á€`@0Á€`@0  ‚Á€`‚Á€`p-Ù¢”¥•¨sÚÁ,þeŒˆ¨×>TJ‰¨…¿,=‹3,5F¼Òœ ƒÚ¥ƒaêÈ3ÏÄ2í3J[ ÇýJìý'*A½ÖJé×>wªJ”zícuò¹µÒ´ñʳL°´^Õ.Œ½zЯ†µõ/vq‘=òÊw^¸û?~_&<¾gœhP§¢AüܹÁ ê¬EiQÚ¥X",5&ôuu~bdÿÿ`ÇæÏÿs Ø…ƒÁ‰¦åù¿ý´Tf‡9à&¡´Vn¢ÁÚö•{§€›ÔbîrD0  ‚Á€`@0  @0  ‚Á€`@0 €`@0¸ ¶ |ùµgGåŸû¹kú¡_•ЯÊÈŽo3ÊÀ’£$ô*&·ú݆h¦-ù7}  ”um¿¿ Ę€y– À+;–Í ï°D”º`0´÷ÿÔû"©\U]ø1W+JªùQ¿Z˜xxüÕGC¦X:´í©–5ËÖüäïeµ¶/z¼n'›z;¢™¶š¨k·œA)%ÚrcÌ29Ä”K(,7H5¯n2&Ì]ê±¶˜0^ã³ZŒ CcBŸé– ¥ÂÅ,Kx=ï’dD Á\Ç^¯`P"bÄF ÎÇn“ IÃy{A wT†óæ‚1ìÜ «F Î_ †EÏÁp¡``Õ3p}³÷0uy¯ªÔÉdà p#ƒ1¡„^YÌeœ-PJKà•à ¨ À J‚ZÉŸx~\´žV‹=Ó ”Ô “•ÚüD!nØ`%&¬Íï{5Õ¼z·Yô]Ô‰3¬anä`X8üWZïùÞ—-€`8—1¡Y÷á?:õ±_ÉËìÀó’lY+ÑL›\Íݪù1©§eà™¯2Àu Ú7¤¯"J.2 ýªˆÒbÂ@B¯*bB©U£†ZÜhE´ÕJDüZI &™Ž~™=ö3\?Á`Œ¶#Ñl÷í·™0X/"bÄh¯8s<ô_mmÂPA ¼ Сˆ9ë9þ£-7L4.ÿø²{~‘Ù®Ë`8½Nü±œ¸~ü_™ùñÜ”ª¼ºãþGw½ðà·g&{Ç´öµˆ%Ú£.¹š!^ß㸉úÓ\çÁðZ6,Èî®ÍOLVJéZ±ÐX4ÆE”ÄâsѶÎýí‘h>z©ÐÚvM¢qŇ{¶|®ÿ`1&‘Á§¿*^yn«WžQJ%"bB;è\ñ܆¾?üÙ®Þç6ˆxZ.±Kt¼¡Çu íL påÂÐ ß ŒÑ×då+ #gÿçG÷©ÎOL‹Yx½ÐU)'ò^-:x‘²ºôUI¢-ǤšW½¯ûîÿÀ,W bZ;_ìé[ÿð]Ù†CM&¼úh°¯ìigÃÀS%é–5Ï{¥é÷8‰z±,_º}ßøðªÁZ-Y5&^:”IJ]n$ÕÜ#"G™nàr(1¦fµt\—mÛwÛ]ÿø±ÆæW:•:ÿ¥KW¸ÃÅk%?¼s«_š›cÎz}e”X¡È¥o›¤,[¥ZÖÜÙÖÿæ¸&P=ϯ\Þ÷øÆxb<¥TÕjïy~EKûþ†Ü̆ÖÎ}ë#Ñ™Ø5 †…c}ú|Äѧ¾ÖŠS~eþŒ³ –Up[:vwEcs±K!QJK,Óá&›VÞÆ WJ›ÐT­¶îýwt.ßó@:{¼ÞHÞ]±vûƒÑX©©8oO5µŒ¾%̉ç\"t%wIZXó|‰ÍïxÒM6uÛÑTˆ„ah‡+Vo»µkÅ{F†ºŸ=¸ûmÛƒ á]ìÚ*e9:ÕvËmmýyqä¥o1×Àe0¡¥ Ž'8¸áIÛ)ÆægëçšÛvŒ 7íŠDK™ÐמұJ©ÐTÈwÌi^“3 bĈZÄ‚æ¹á]»©ÖÖd¶ÒÞܾ§g~®qê…­ïÿ›R1[ C7X̪µ£Ò­·Ü*"ÛäòvnH~µšÀ+›0HˆºÀú`¥ŒÒž¥­ZBëÀV*T–]±óÓmãã#c¯äçê&ççJ‡+¥äœWKW´6ç=À·Úû?v·M‹¾£Qj¿:??uð‰ÝÕÂÄE:;´=È.{wsﺽ÷®Þ°ÿʪ„#+{µºªRfQßP)-¶×ÑL›;uh뿸ÙÍ}N2·ÍkÛív¢uîù¢AëPÏ϶O\ýòÔäŠa1‘P)£œŸížƒHp¡ïuÅ·U Ã`QË?ÿÄñ¦‡÷®þ×ãGW¿\«¦*»Ïëy£AÛVºumŸ\ê:(à&±ï‘ß?Z?ðBe~Ì»Ðå?aèž—®žJÂÐ ÅhcŒ^js·Ë?Ã`íWóùÉOì®' ÛýTÇêgóý¥Jµ3%¢”íD­X][têÐÖA~=‘ɯëܵÜx³I¾.ÿ¹~…g”Hà/úѳǶ?a¼¹’RÁ•o§-+šiëÎ2§ìùîo?Yœ8´Ï+ΨÅ*;N`-öõm‘…•Äa­lŒ ¼K=Á~xeÏ\ÆúãÁ§¿RÈvöOX‘dÒŽ&/¹ñÛ…£Á¶¢éSÉò›œ°ë¡/>ºþ§þ$š²ÝåV$^ìx»¡±ï\~h•ˆÈ=«÷ níÒÁxff`ÛÌüØÞ™0¸àÔB\X¡_›¨.âr¤ÓͽôD´®-gG 9ënGo‡"ÊX¶o]úFHê´·@DÌ+ÿ÷—ÞøÉ¿øh2·ª æD²IDATM;Ñ FÊ5{×7´ìÙb+Œ§òÍ“Ç;÷ØÛ5dÌùï¶t궪ƄådӪѹc/]òÝ„AMÌ"=Ÿ4ðôWæ²]›¦ìH2a¹§5ƒ Ôò¾§×‰ õðÀÆý¾—¬-f@øÎÎôDןæg“µE®¿æ,pšCÿï°÷¿ñ=íD>Ët¤•¶Â³³oçªýÙÆ¡ÕS¡íëëmN‘La¦aòà¾öâÙ×oä0ðÌW'*sÓA­dN.ÈðüxõÐÞþïÚwÛ·Ê¥†¢Zü’fb8ËÁýQ~þøž©äGKržUÐÕªíÜ}Ç s­ ³Ý»”®Ä,§”M×O6Øö¹{¥é7ú˜xq[à•Ë"'ߌmޏëÕ£û·ìñ½Dí2_Ž;&gÙ÷ÈïÆ÷?RóÏwÌ<óÕ‘l÷¦ËÇ-7.bŒh-jᄺHœ÷kœeÎcï÷gh݇þèQe¹ïqãY}ö±³1Jö¼²âàáý]ƨ°ZµÏ»HY¿o~æè¶§ƒj¡ú5ÇžU;ô+Nè—À+9WtƒZÑ jׯλ~%ïú•¼xeËHÈì‹°ëÛ¿±¿4yè¿:o.´Qs¥âxŠ‘7á ƒˆÈà³;šjî{ÒŠ$[”Ò¡˜ÐÈÂî FŒ1 õcÂ…Ï£Œ˜0ôM%?ZXø4€Åx囿º}ã'þ<žhZÑo¹Is¹éØoÒû6»¿û[»Ed7S¼¾v|óמìÿÔ_$âõÝ}ÚŽ†JŒˆe±³fø€› ª²ÿ±?y¤’ã«Dz>ÖÞ3ØlÛ¾‹†Š`nr…áírôÙ¯»6|ª¡ñh법Oß·vãÓ›ïyðïîEkÖ…žg3tÀÍarïĉ×ý½ý`<ÓÐÓÔ;Ò§•9*V r|û7Äv_ýH4yÇ‹ÚR~¹¨/¸–K’€›Ìг_1Ó#Gö• AXºH, ÀMÊv¢õf[œ –“Hº…ÑnpJYÖbw*”¶ígþFRÍ«$™[ÉX¥m•Ê­ÌtlúØ]W–ÂøÉtmbt€›œ-"¢”–Hº9’Ñ›6j;šŽ$›ÿmt×Ã’é¼Mf‡^d”€›9DŒˆhq“v¦kS¯åÄn¢á¡ÁçþN2ý2;ô#܄ιK’I꺎 mõËïþôŠ{¥~vè%ÉöÜÉHÉOÚ•jî«ÏôÜñÁU÷ÿö†òô€d»og´‚a²\‰7,Kf:ûß²üÞ_~›¨…».e»ï`Ô€›„}á/QJ›hº5¢íÈzíD“‘dÓ¿ŽîzXz·ÈÔÁ­Œpóà J7Ñ Ó­ëz-'þ17Qÿ­Áç¾6öÞ#“Ÿ`€›:N>0š’ds_«åD?íij/{þë{W¾]&<Î(7{0ˆˆXNÌÄ—gµ»ÛŠ$“c»~¾iÕÛeb?ÑÜôÁ bD[®‰eÚ–Ùd»‰ääþý؉e¥óΟ¥”˜0â׊ÖJ2üÒ?3ÊÀÍ Ñ ´e"©œ«m÷íD“v¼þûÕù±…¯ž„~M¿*& aàæ †”2N<«Ó­ëzœhúg*ùãSJé@Œ 1¡Wž©yå¹''÷3ÈÀÍ ŒIHªyu&Õ¼:#"æDL¨âä¡ <38(" 3psƒœ„SÿZøP‹RJ‰(›!®_š!@0  ‚Á€`@0 €`@0  ‚Á€`@0Á€`@0  ‚Á€`‚Á€`@0  ‚Á€`‚Á€`@0  ‚Á‚Á€`@0  ‚‚Á€`@0  ‚‚Àëêÿ ×qUj–OIEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-2.0.png000066400000000000000000000125701430147706700257530ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢HIDATxÚíÝùsw}èñG’eK¶$K–lmGû~$k³$k;G^d[¶µXŽwÙx·£}±]CVâÄI ¤()0!-”†èåB:@$ÎvïL§ÿŽÁýáþ¦>RH[hÒ„I0–õzÍ|ælÏ‘fžï/Ï{žsÎbõ#Ïæ·Œ}{"~ýÝéøµwîúôν>º=T7x+Ñj€` Á‚A0€`øðYz탹öÁ¼ó÷ÜÁp( †Ó/MôÝø_Ó}×ß› £`vibówæbsoÎÇæÞ˜ëžúÕ|×Äks]ÿ4ß3ý«…ÞÙß.ôν1¿tÛ3ýëkK÷ÃÿÙðý¿ ‹÷~7‚îaÕ{?ŸÛ0ú¥«mç^žn<þõSa<Œ¶Œ½4Ú|ò›ÃMǾ>Ò0ú•Ñá§÷7ûÚö­Gžï Ÿë _ÛÝ|ò[Í'¾Ñßtü…áý}áû޵žùÎÕŽK¯N·_øÁÕö ¯Œw\þñL÷ä/b oÍ XJºÎ¯«Ø9SVŸhÜ\½«*»¢gcve|cz^]ZF~4-«´}SBbRÊCÿgñƒ·,دY³vCJx»vù~JZJ~Ó¡œÒÞ«e5û­©=ðXiÝÁ'Êê†n׆±ÑÁ`ûÅNÄæß #ámÁ+ņ͕)ë7&%¯ïö%•Å ²Ë{6•÷$¥n*IÊ«?œiÉHÏ«-Û\³+º¥vOdSéöÜ0ª ZhË­ßß•S½£-§2Þζ-Ñîü­ÃÛÃ×¶µŸê+j;i;y´fàá£õ‡þr°íÜË“a$,q˜YšÞ¹7&£Ã‚îIkÖ¥%­Y—žº.mK–ڽAvE,%Œ‚ÒìÊxUZ^mñ–º½-aôäTõµ´é*ê8Ó]Ôq:VÐ4Z»±°)3³¤-%|mmNÕŽäÍÕ»’7FšÖ§åÖ¤…õ‘‘žÍ g4¦äF÷mÈ× ÁjÀ=*ucáòmxПN~vyOFbrJâÆHKFVYgÆæšÝ …­ÇŠ;Ï%o?›ÃòöÕû>¾ggÃòíÎ/üë‡þýõÙe[êöU†Ûm#bCøwš‹:Æ*«öÜl)éºPYÜu^0À½.Œ…åÿ0–oŒ4Y¥Û?tÛäÔMÁº›‚µY©ABrd–´ù#AaëÑ  ùp°¥nož ׬ Ö¥ç.GÅÒsÅçƒÊ]óAÍþGƒ——¿áãH°’¶žJãƒÊþ¹¥‡) ‰I©)ù×çD6§•e¥Ô¤m®Ù]Ør¤8Òv²2Òz¬,¯a° «¤cÓúM%é©YÅé›Ê»2#íc%U{nvÔ<Ûßpø+û¶~î@ÅŽé®òSÎ0ÀJUÐ|,±´ïRJqïÉôœšø–ü­ÃUÅ]ç»ÊâGGž<yú\ÝÁ'Æjo¨¼u¤öÀ££Õ{¿p¨ªÿúhÅιѪ=7Ž5ŸøÆ¥Îv¥süç“ Båî… ¨ãtUÚ¤e—9•ñôÂæ#%…-G|$ V‘¥_>J¨~: ³Afñ¶ y}VžWdÖyÃI‘¶“Eµ*í¹¼£´ç’`€Õ"953HHLú/Ïo®Ýäo^[Ô>ÖT{ðpYl¼³¤ûBúÒ `•Û\½3qKmEdۉ܆ƒ[r£û“¶y>ˆ?eçÀj—SOÈ©ŒånÈ.[·vCvPÒy.Èȯ·c€å`'¬ßT¬KÛl‡À½$-·:È(h¶Ôî ªúoÿcq1¸°Ê¥çÕ™ÅÛ–î&¦m©ÚP¼ýlQ¤íTq8 ö¬RY%íÁ¦²® ªÿZ²1}nýÚ†Ã_n:þõKÕ{¿0Rµ÷ó‰ö¬2 IÉAÑö3AjfaBvEoF¤íd}ýÈ3CÛ>÷÷{¦ÿy¾wî©èðí¡ºÁ'¬d9•ñ »¼ç¿Ý&»²7Èo ÊâãAÓñ‚Ûÿ1È(lLÊk8˜_=ðð`Ç¥W¯†¡0¿öN8ïN÷ν>Z †[‚Vv0ô%§çÖ$EÚN.?Î,j 2KÚ‚ÊÝ Aõž›AÍÀ#KO'nÈ)_WÐr$­bçܦÊÝ×"a(t7Ÿüæ¹îé_M áíò¸o‚!–—W°6·a0£íü+AbÒÚäÔ¬Hzaë‘Hi÷åHEÑ¡§ZF¿¼«ñè×F[N½x¡ãÒ«3=3¿ž‰/¼ýï‘ðŸG0À} ¯~0È,jY_ŸÜS³ÿ±Cá~sy|²;Œ„á†ÃÏ]j9ýÒÅmg¿w¹kâµ™Øü›sñkïÎį/Ix÷CCA0À}bKÍž  q4«zßCíaœÙ~åç:¯þtrû•ŸLtŽÿl¶wöõÙ0fú®¿÷»Hxç`€¬nðÉ °õXáÖž küµ©0f–ö—Âàú{ÓŸä,ÂïÏ»ÿyfzçÞ˜|ÿW’¬(9Õ;ƒHÛ©ÔèÐí]—<¿|á8{ð‡›¿3Ó=õ‹ñî©_>øÁtŽÿìJíÇ÷×ìÄ…Û`¥h8ü•`ca㆚‡cí4¿öö§Š…ðýÓaÌUîšßQÙ£¥jÏ_4Wí¹Ù\Ù½©¸ãLiQÇiÁ÷ ¥%§¤ç볊—/¸¯É(hÈ êã—~ôàû?…úibáý`Ø~åçó¶...a(,OÅî… Œ… ¨}ÌJÀ½&«´#5«l{Á¦²Î¥HH+î<[V»ÿѡֱ—Ntÿ|)f?},üG0ä7Š$¥¤;›+AN},½ õP_ÅÎùcuŸ8Ýzú¥sÝS¿œ{ÿ§Q?‹3 ‚V¬Úƒç×zv²íü÷–~)¶ðÖù«G‚î[õ#Ïä·Œ}{â½~‚`€U Ï @0‚ À} á¿MÈ©ê ÞŸøÒµ –XåÁ[ zcaÓÆÌ¢ÖŒ÷§%#£pkj8Vo0¼3Ý;ó›Ù¶s/Ÿm¿ðÊ©ö ?Xž¶³ÿp¢zÏÍXUÿ S€Õ ˳ðÖllá­¹&Œˆ™èÐS#uŸH´°ÚƒáÏ:̽>¾=T7xK0€`ø` Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á@0‚ €`ƒ`Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€` €` €{&–¶ýŒ¦wîÉè°`€• á6]¯Mo;û½‰Ö3ßoýÜw?õ„ÿûjåî…ý»æ¬¬à`è»þÞL뙿;S¹ûZ´nèvNô3˜ºÁ[Ù%Ý—ÒKº/Z XéÁÐrêÅ‘ö±‚†ÃÏŸÅÔúRP{0(í½j1`ÅÃØ‹'‹:ÎÚs Á@0‚ ÀJ †Sa0´ŸŽ¤çÕ'dlý ¦1ac¤9œ‹+>N¿t¡|Çt<œÆŠ3ŸvšÊû¦¶F¶,.Üv"ÁjÀ †¥‰Íß™îýíd8ŸÁLvOýr¼nðÖÁÚ_ °Òƒá³žÞ¹×'£C·‡ÂhH´ Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á‚A0‚ €` ¬¦`è¸ôêdóÉožm:þ™/œi<úµ±ò¾éåñÉ««(¶ý꩚‡·Tí½¹þ#gÏõEgÖµŸ¶°ª‚áÈó'ªJ¯z2ø¨©=øÅ ¤ûbPÒuÁbÀê †‡Óíe ‚ƒ`Á ÁüÙ‚¡æÀc‚ÆÃÏÊo:´99%#uMJÆú˜Ô¤µÖ†c1`5CçÕŸNµ_øÁùö ¯œý¨Ùvö{gª÷ÜÜUÕÕž`5CüÚÛ3±…·fców>|îÌöÌüf::ôÔHÝÁ'­¬ª`øøé{}2:t{¨nð–`Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€` €` Á@0 ‚ƒ`Á @0 ‚ €` €?[0 ÀG¨x8·ñØ×/ǯ½=[xkyâ o  ò%—÷MUF‡o6ýêñ0N´_øÁ¥ØüÁ«Ü•ß.ɲŠ;Ï­©Þ÷…äªþÉuƒOn £aªïú{‚V³„„¤  ùpPÙ=ˆ?4Œ~)(í¹’ß|ò['â×Þ ÀïÙXØ”ºõ¿ÚÙ3ýÏ a4à÷$Ô =ÕÔ~á‡sê% X¢ÃO7u\zu^0¿'-·&¥áðWâÝ“¿ð‘$à?µ¥Ý ZN}ëTßõ÷f|éXVÐ4DÚNnlýòž®ñ×fîÆÕŸÜë¡Ð|xù¶°õhftøé½]ÿ4¿ö® ·Àj7÷/‹AvE,)Ò>–yf kâµ™» ‚îq›Êº’K{¯Ö7áRÏ̯ïZ(XÊû¦²·~îdlá­Ù» ‚îqÑ‘§ó[Æ^ÿ‰¯· `ª?ôl ßž¸¿ˆ$`¥È` Á@0 ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á@0‚ €`ƒ`Á @0 ‚ƒ`Á Á@0‚ ‚ƒ`Á @0 ‚ƒ` Á@0‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @0XÙžù¿ÁÐóÿ/X\\üDó“p¢#ÏX 6•wÙ=ksë¤ç5Ìø¸ÉoM¯Þ{³¢õôK‚îw¥½WËû&;·ýÞ…¶óß¿üI¦ýâ®vOýjæÏ ‚s‰Uý7úÂƒð‰øµ·§ã ?±…wÃyoJ0Àª †7&>ÉÁzßõ;³ýýô枇üPÏÜ[–p pCüÚ™ƒ·þöÉ+ß™ûùÄ÷g~yìùç¿[xcV0Àý ;f+w_÷ÌüújlîÍɛ޹7'v\ÿÅÜðí¿}êì·ÿîøË¿9ñÕg¾Ñ;ÿ¿'Üg [Ž&DZG*vÍ·Wî^Øþqn×Q{à‹»[?÷ýɾwfûá#û{åÑ»ùÑ$ÁwÉ–ê]áìNØ\Ûÿ‰&§zWBtøvë0Ê•žÁ@0‚ ‚ƒ`Á à.ù7ÙÆŠþÑÛ, %tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-3.0.png000066400000000000000000000371771430147706700257660ustar00rootroot00000000000000‰PNG  IHDR T‰=»È pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/ IDATxœìÝy”œWyïûgïw¨¹znu·fY–,Ë#² œâ ÁÄ€$@BàroHr“s‹$g)œ{’¬É2@ ( ± Û€À#Æò,ٚǞǚ«Þaïû‡lÇ—mIÝ]=|?kõ’¥~«öS½V—ß_íýì­ÀR—¼ìmŸxEvå–mŽ› DÌüŽ®D…•™Òñ{þñîÁG¾q`~çJ·º @SM4E`ДÛê,qVÛ(vM¹/´=“’ž­™Ë·w¦*õª=póž’ˆ4žùÞé7â9¯ü €³¤å¹[´¥¬Ä"Z+%b$¶¡rÝÀ[±ê‘ ÙíA1wÃkºV_ÜqU6¯ýØh#bR6ŽœzÍšTÒ®Jft—5Ö|`夣TÅZÝk|¥MŠS)ÝSc'ÓS§ê':º“ùØ;>RšØý•½§d|¼ÜšŸKÀ‹SF)e”mÒn)‘JMgª•Î’5éЊoD…N[î`o2]ÈUÊkÆl”Wo¼çªöîÂ*Ï«¶ûžûö8j¯+­×&3*+ÖZ¥•#≉mìzâ9®kDìSŠˆ(-bŒH2#•Ž.wJ.ÍL(G§EÄZñŠÛo¼f´\V§ŽÌp=åä;î§ÓFW¿s¾ˆHÖÚ(”hfLy¶aJƒKx©øŸ&°x¨÷ÿÃ6÷ØÁПžˆsÝ]ýmݹՉv¯ÏÕ’Jçœþ0¬gúÖz‰UqqÊÜ45mïñw¦VÕN}Õ`¯žÉæŽt_tÅnèZ1}©%q¬ƒz-9^­¤‡+…üÐèðÊ#Zb§½g²/×6³2›+®Q:JOŽ¥$’âû‰z»—ˆ³J¬N$LÆKˆ'¢D)kEÂP5\×$”:··Û§Ÿ­‰"ÕpQZ['ŽTEªab*­\DZ¾ã‰¯Ä:O=4 Uªåh½±‘­Š23ÆDÙ§ïºåÿ»åÈŽ;äxt¼Ýét콟½wZh )f€êúß¹>±nKGZ¥fAdÝ©Áp•u³ïÞöZ÷‚l>^©”J‹V %:!bµ(•›Ò®¯\%"JÛ#ö«•BtŒ¿±³ï;3¥Blj“G/~ðÀÞm·¯­ï›éì¸$•Ž;²ùÚÊL®¶²«w:X¹áT5¨»¥zÅ›xìØ‹îÉæN®ÉwŒ¬ïê­lÒŽ8§o¯­ÒZ=}“þL³çÙÄÙ~a­k$0ƆQhmPWåjEW ÑpµTûaÔ#Ïõz´ç%×õ×ÉX‰=eŒ¶Æè ŠËRíŽ\GòÑé)§æ¹Þ[òî¥ÚsVº®ßÕÖΈÈÁr_9þ†îwtöy—fr×~üŽ¿¾ãÉíÛ·;»wïŽDDvìØá{¯©fòYßËŠH#éÚ„©rY¤Û`òÞ8¸ùÓ¥@äôõ,e`Ú¾s»Û÷~#;Þ˜ÎeÖ‰·«ßƒZì'ÍL:ç ø¾J»ž8OÝ»?õHõ¬?lB+›ïìsò}f lÔÛ’©©T2}_W‰cѵŠ;ã'LÖuÅSJÄq¬ï8‘ïûQ{&W_•ï<¸±83xtäÔê‡ëµü˜HÕ8ŽIÎÅkVJ¤Z–™‰!y¤:ÓW:ò’ùD:‘ôÒmÝîê¶îì»ÓÙL·ŸŒÒJ‰zª Z\ÇG¡Tº™:ü¨7^7©}©taÃù—e~ßKªnõT£µvYkå›JÝZ¼æý×|½RÌÔÓy§ï²_¾lØ[£¶]½æê'ÉD#yã}é_J¤Õ€Öâ§DŒ(W'³Õ«r2ósrð7_ž9¨Ý7>Ѩȑá'Ìà­Ÿ¸•™KX€JC%•]ÛÖ–ï²/K¦U—R¢ríJLì†#ñþÒT<–ȺyÏ3ÉDJ§GœŸz+b#v¬P—u÷'®RZ”“¶Ùdºžmï©oˆBi” Þx"gçùû ”å'Lº{EykgϾ ­qœs\gô¬œîmhï–óW¬I\é'™§–5=+ýôðACªÕbx4Š”Š·Ñ¨ÅãÝ«œ­é6õ%ÏmkóSv…R¢ED”‘8¨™QõšíÎ;>š¿¬w­ù¹â¤j·±Yûöõ¿V˜ˆ.«’‡:úÛ¿Þûƒ|»tŠzÞ•J[E¼×[ëJµ$åá£ñ-ÙÞx§ˆìŸ«Ÿ ­D°@lض¡m¦0c§MÕD$ºqç/¼îò×v|6•QýJýçïªR§1 R êqà¥t:‘P?sÓob‰ãz?ÓP¼°)yɵŠ-•§ÃާSɌۛHJ§ãŠVê©§xêy¢ÀÖ&GímOÜ_úìšÍùM]}ö©œ¾$lÈŒ5RsÒ‡2…¶ày¶'×=MËS"a QµdOøæò”¾³2­ô¹ßÝ5~ί€ˆÀ´ÈöÛÝàðTçêKV]í'Ü«ÎW?—LëL虉ayÔÆvóÚ õž§R/ô<ƈÕzyþ.[{úþéykæû¶V±#G‚›‚@…ýœMÉ”se"%§·zUÏÿ&øÜçiÔ¥Zž¶O4jr*6ñƒ¥iùþ‘G¦Þý·»Ë³ûªXX–åMÐJ¯¿>ñÊw$³kßß»Z¿-™Ò«##~P³:Û¦rJ+1‘ÔD‰u\I>½¤gƉ æäØ`ãñ¶®dOWŸÚâz’WZž™y°V¬µb”­”(k$6±­‹#¢¥Ä1ÆFq Ó墘 >7rT}eüàxñÞ]÷ÖZú˜'ô0óä]K{G´!¶ñÏgÛÕu=Î˼„Ê)%≈ç©Pik´­}yÁY¼+¶V²ÅÂx0ºnsâçü”Ê>¼¬ˆ‰mÒˆc1&V‘ãZO)«ªEœ5û´–Øõ´R:Q/ELŒUÿmc_â ˜¡úM¶'lñ«`^1Ã̱×ýþë:/xEöÊdFÞŸÉéíÉ´´é§š”Ÿ»Ö³ÄŠ­×lÕO¨”vž3CcE‚Àµ²I¤œRÖ‰BU·±4ÂÐT\O']ÏæëU)Š¿?y²þ¾¾óÖûZôJh9f€9V*†9-æ]©Œ{ë‹/Jœ08ޤ¦îx’J¦tJ-Ó>„9¡D%Ó*Óä{â'´ï86?3n6j±£]I…õxÔOêö°f‹ÆØ{´–ûM îzôÇšçêXP À»ç°¼¨ý/gZ>„Q·Šde†#¹žôIgÔ•®§<¢Âü²V¤Z2'Nê&œB2£6'’’xºmˆž…Ö‰#‰§Çãê¥ÚŸë¬¶wÏï)´º.*>áæØ?xí–K_ÓþWíÝêúŸ9ó. m0x8Þõ‰_ýÆ»Z] ‹7/ÀûÖ_Þñä©ÃñßWв™…Ö²V$ ìèàÚW[] ‹˜{ö ¿ýoO EŸkTe¼ÕÅ,g&¶á£Ñ†Oîju-,N« – ë­Xs¸§ßH¤ÔǯÕ-7ÆH\œ°ì»¯ø¡ÝŸúѱV×ÀbA`æÉÉWòk×èH\è'e»$Íc$šµwjüþ×þä»¶º0Ý}hrõ%çOµõ¨Ë½„êQŠÐ0‚ºßwá¿þë|çG­®€Å†`ž}¹zùwFŽÊß7ª2ÒêZ–kÄTŠêd£1Eßg`¾íÞmô¾Mvö'³ê"ÇQ~«KZʬ•¸Tk;:¾¸{×¾¸Õõ°Ø0ôÀøî½åƒ„/LÈî8’0Ž$ Ò°FØxuöÙ8êÐt?[Î3 @‹øÑ™Þ ú&³þšéÑð«¥éú_OÙ¥)»/h8• ® ZKB;⊈¦ßá¬iDZrðÁ¡Ýûï<:ÚêbXl¸ZK}àŸoì|ðá‘꽿·¶nûöäº {ÜM—ºI?oýâhùšDÚÙœír®êì‘—¹¾Ó­qNŒ>#&–`ä„ýÖÄàÌÿt¤ãÔÉÁé`lHGÕ{D‡ EÄ´ºF*°í½mh›ÓNw§óþE«/l}2+«:{ô ®'ÉV—·˜D‘¦ÇãS3#r¿ëË´çÙz,ñ”i˜ãÓ£êž/ð–ƒ­®€…ˆÀ,.úMzåö+®øZ&§Ú[]ÌbGÖÖÊq=hØŠˆ[÷|ëjG‰R’:yX}ì3ïÝõ‘V×ÀB䶺g`Çeíðdq"ºÓ÷Ý_ôŠY†—H;Jϱ¾²ÎÔh\.ND?N¤½[üdôªzŲå*MÐô ,&ûöÙwëÿÒ†{â8z¤V±mÙ6½ViEOËP"J¬ˆ¥RY®Uôž©çSû¬Ü?õäÌáSûNE­®€…ˆÀ,6*òÄ ì©Ìfü²“ðû’§Ûó—÷yƈđT±¥8¶clÍÆÊ#ÊZÑ¢Nÿ©”­Š’0Žu{:¥¯é]å^Õ³>»e²X`æØ ¡€ç`I°H]÷šN†N}äpíÑtÖY—Îz» O0F$¨Ù±jUÝS‹î«ÕGËSш/—íJ®Kç•é¬í÷’¦»^13ÇŸ¨Ýáû~”Îy½m½ñ9uM½b~ÒµjuÇ196Üê×ÀBC`©ÛêÖ¯ö¯Þ6œu3ណ^¯-‘’¶V×5ŸŒ)L˜ïŽœ°_zøöã7íÙµ§ð—ûrzûÔgf¶íØÖÖw^ׯÚL4²ç_î$,ð<Ø% XÌvоìáËÖ¬½¸ë†ó_ÖöÛýëœó—Í,ƒ™6w²þû_þƒoíiu9,Uô0‹Ùn±#}#å©Þ ‰UGªÍ_L«|«ËšÓãòøø©ø«?JÜ¿o߾哘w`±;&æøžÁ©W7âgÜ«ríNŸv–örÃZYJãƒßÛÿ…Âßþö·ãV×ÀRÆVŒÀpõŽ«S’®â„Ù7|4ø‘5­®h)‘¸¹³ZÑîÞ½›]˜c` ˆSq:nÄ6êÎÒL£ÅK·“¡Q“zµÔøÊ±ÏŒ´º–°ÜâþBD{E$ŸÊúGı&–%µ\G)‘„}´fœv~w½Õõ°€¥`·ÄQ¬‹™¼ãuö;âP¢FÍT Sñ”µ²df¬©ƒ½¯0ÖêZX. ÀpÉu—¤SiÙšëp×&RNÊõ•g"UžŠöž u[ŠB ãHõšÿ0#¶ñÀîOïžnu-,Kz'`ÙXÑ']:hëtÇãÐÆ•†õÆëwÙWÞÛ3ú…òLb*‘Mugs&ÛÞez”R‹ï %R«ÈD2‘YZK­XÈ Àðèo«Äõ­_;|_×}½›sýžoóå™ ³£'µFâøžF-}e¥Ú>­UqM:fI›iuÍgJ‰H£*§ª5]lu-,'œÃ,ãûÆã㟠Ǻ»¥»­7}•2}|ú¡Á#ÒÉ5I‘0²ÆÄÉT˜w<ñZ]ó™PJdfÂ>R2·´á5§‚\{}ÀOÆéV{¦Ll«A`ƒçù–µãc;ɸ 'N8Ñ­Ÿ¸5Y: ß´Êâ[Ç  ©m;¶µõŸ—{ýÀ¦üõ®o7y¾›J¥´N·©n×sòAÍ)U*îL*veóQ·Ö‹gã¥DŽ>üÛ©áGSž;<5ÑÞ;ܸöµ½¼¬Zíº*—mϽ>Û5âƒaÐØîȬOê†ë9¶Q-êÃûª“»ÿvw¹Õ¯€Å„` I$‰¾ó2W®Ûâ½Û÷•j4¤69ß5yÀ0ÓѱY9ʸ^¥«Zv§µÉæÃÞÅô¹A&¯/X·5ñ§®ç8+BgrÓ•kÇÛºý×eòê<­ÅÕŽrDD‰86 ½ß®–Ô°«ÔXi:8V«ÛÇœ8þ¦ˆìkõë`1!0KH*‘RA]…•‚L˜¬Jz¾¤ûÖ¹¿Ø^•ÂЉÜ¥‚†®…SL$MçbÌ ÏÇ‘FÃÆOÆ·UJõº»öäîÏïžiu],v` Ú³gO¸gØ4нþç/¸"Ûy¬ËJ¶–ÊNõvö4Ö¤Ò6o`Z0FŒR¢”õìÙgÏ&súËÆcËVÌL¹è=ì*Í„ßØõá[Çç¿r–&°„m}ÝÖζþìµ/9ú¶Î•Å Å™Ì`®­4L™œã*½ÐƒR"AÝÖu[NçT›ï«„‰EâX$¨›)±*%A›'M NU+jhz$:8vhjÏäXãøÏÿqYvŠiõë`)!0Kت-ër=Éó]j‹Ÿ\Ïw²Öº¢I9Ž]P‡·Yñ|ILÇ÷OÙc=îùÀúAÍ›mÜéùÉñ0–òá'Ǽû“wËâìÀ`Q!0KÔ›v^»¦w ýÎ|§z¥1^XœqÇ£PLyEg2˜hë ûÒå)½pvJ ëR+ÍØ‡*SÁ—¾«ü½õ›º’â…þè¡òäîÜ=&4/0ï ÀÕ–Õ›ÓyuCG¯Û­µµQTé6±DõZbJ‰øŽcýf{’Î7¥D*E;=5}²4|vß§ÇîßuoíþV À¥Ý¤tyžd«eUð|åø •k]Ï òŽk|ÇÕJ-„À D¢Ðũƭ÷{òŸïùç{Ž·º$ðŸt« 0'La0~pz8þj½lFD¬8®õO¥•X+Æ£BÓsX39ÝqdŸüï{þùžÃ­®ü4f€%*NdÊÊ1SJßÄÖB'PZ©LÞ´;ޏZ;ó2½`­Ø8’Øq­ûì k¬„ÄÅi¹}fÂ~äëtóƒóQ83`‰Òõº ýêLN¯ñ|m=_%\Ïz§oÚço)RÐp‹Ã'ÒOt÷ÏÏ´Ig[Ó¨Ú‘‰Áð{Vâ»ãºóÃO¿ï¦ýóV8#`‰š‘ê“©ÉÄg<_w·uyk­Õ¡¤%ãùâÏå¸ÖеVŒˆ²QèÔFO¥„S«•£Ñ“‡‚ÛMhµë=¶ïþÆÍ÷~ö»3"œ›ÀB¶:Ì•«íê•}kÓoßpyîíù.o«ë‰J¦$=—½ Õ’351Ú¾76‰j­’›®–“‘‰`è±Çï¨6fdì!Y'Ñ¹«Ì°Äõôôd_óß~á×Ï»T¸«7ˆ"*%ÊõÄÅà`Ã@Wƒ†[œ™L|øÞ_ücÊOï«V¦JÇîþÌ=C²ô€Å†%IÀ7>>LŽô v­nM¦&3Q,Q:ÕDÒ&S™¸ÃqÎý}Àef&“'Ç»ž(Ìl>h̪Ò3ßT¢D´(å,€=™À™"0KŸ*δ×M<TÊþÄÄhæ˜ã„ÉT:hëî3~:kÛÎyeU&ô&’åÑâdÏôl ° T‹¹ÆÄpz£!eÏ«¶gÛjýÉTœu\›´V¬Rg¿<ÑZ1SÞ©r!11>²fhrÙ¬´·KŸò´o‡O\q°4µöh¾­ÖÛÝ®êè¶=~BçDD”ÝÞt÷ÖÖ*í‡bÓñlZÀ,ŽHµÖ?Y)·6Ò°Ö>ûµ³eƒºª•‹RjÛW®¬+ô*°„°$ X&´2ªTØ81:<ý ëÕ3Z/Hçl›ÖgŸŒ±RœQ…±Á®Ç‡/ûI­´njK XF;S#—œ¬ó·*uW”HN^¥“â需1bkgºTðGK3©‘Ác¯¾³V_]`Ÿf–°Ìí˜jqÕŒR‰šÒÊœÍ"¥D*%U:qhÝ}3Ó/;Ш÷T ,Mô0ËŒ¶V)'zâÊ»OîÿQ¹àLƱ5gòJ‰êìú;º +Â0Ï®H,a`ÒÚªÒÌyG¼ò®£zï)ô´5/}ªÁZ)EN4‡e€€%IÀ2¥µUÅÂú©0÷xÞOÇ}E&w>{ë¤8–H+q”þ™­Wm©(Å©ñ•ÇâÐ1,G`é"0˘«#ë¦Èý¨^{`jݦ#¯Íä‚^¥”­V¼‰â”;æ'ë]=¦ÏõÔ3﵊iÌL·)ÎlTâžÑr&°¸€åÎjk‚¾òøÈÆ#®×H5‚Ž ec7ŽT¬T1×30xI"VWÜ(Ta£îGŽŸ¿' ò fXÚ D©X×kçM;°ö.û¬-5·8}ðxafß%kÏ{•ë* j6œïØW*l:ÅìKÀiV[+~üì2’ ‹¥K†eHK¾mo²8¥Êí]••µJç°5ù U¥€ùC`ð‚¥m©péàÃ÷]pS*5’44*E¥}fX ^”ÖV‰$M½¶vZÄ­!/°¼DF´%ÂÑ ,'Ü )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hÊmuÎÞöíÛÝBŸ×[)'Ô[nÓêšÀÒB`±5oÏ®Ð6ÿ§3Ó}CS]ówÇïnuM`i!0‹˜ÆAÛ•)w¸îIÔêzÀÒC`±Ïýî­"òq±"·¸°€ÅÍŠHØê"ÀÒÅ.Iš"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ<ÖwežIDAT )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hÊmuΚںc«ç&i™ÂÚB2ßæoïê³—º®ø/v½RJ2¹`źMÇ®ÛzÅmoX½g})úÀKB`™ 4ÏÞS˜ýqlã—ö(%É´É÷¯žº¢ÕáK\§ìEh/ŽÀ,2»w‰»7~sjTzö÷¬=ýÕŒë)ÎÕ»2m£yixQô0‹Ð¾]û¬ÓŸÏgSº­Ë½VDL¥ïo4ìþ ¦f)µâù§”k#§^M MŒnVÚª§¥ç = ,j`‘Þ3n{óǃ†rà þáWGþäæ¿~àoÖ]ÜWHå¼kW¥ôóü†kǤ]ÓVªÕ(ÈWÃ0Îih 0°¨€EìÁ›÷W~üpøC/NÜç«Ôñ}ßÛW\õòõZ¹ûMd«J©?¡ÒÏ~ŒÖ¢RÙúŠdfª«\N• k¦µŽ àyq°Ø:ÔØ}èб§ÿú|ÛIùÂ5ï¿æöm×uÓ®û_II=û!Ö¨¸^ÉUfVL+eæqU°ØÐô ,Qw~úÎáñSê?JSö¡g/8Š# ƆRF½qíN¦§ìÊ3¡A o àÙX’,aßYZ{~"•H»¯ð|I6êºtòhÇžÂdv¤»gz}{ÏкÎîc}ƒ]µzº\«dÆD‹gÄj+Žˆ’sìo`I‹K’€%lÿMw—6myÓ¿û©øB¥õ»Jgjz<=ºbeyMÿêêÅÚQZ©²Ôª#å4’vm²áz_«æ åB÷ÄÄÈúÑ8jk(mµÖK—X†˜a–¸w(¶­Ù\bwe:kz;º+«ÒÙz_"))­EE‘„cƒmz~¹sõ†ÁíÝ+&.éèÛÒ½bpCOßñéô`.Ž£¨ÑÈÕ”8g~v3 ,jÌ0Ë‚®dsÖëèVÝÚ‰ºÔ‹ÓzÒÄÖ«ÉÉd*hϵ×Wz¾øJiñ6•HÖÖd²µ5Ý£åÕ›O:¶ò'Ç÷¿æ¾Foh)±Úžîw0­~q`€¥Ï&3õñL.1íùnRDI2%¾ï[·^uŠ~"èOgãvíüôŒ£µJ”I¤l6‘ªeÛ;NÕ'ÛöL„m•®î¡þâÌÀhµÔ?Æ^†‰ÈÕ‘V*RÖº6Œ‘­-˘Xä À2ðÝÕ#8ß½=w¶§sªCkq´'“;åôÐ/B‰‰ÜÚù[÷¼©½3\áùÖo4öV‹Ó¹ƒµJzª\ìN¥+yÇ RqäׯF6žœX;ÕÛëŽcÙv €EŒÀ,}ê=;r—5ÙÖâQ•s;žnDx©'<[k¥«¯¼9‘P¾Ò§÷]M¥#?•ž¾RdZŒ´JÖŠé_sbjbtÅCCÇ·<4>¼yÄ(}æ½`A éXâ~ùC¯_·ê‚ÄÖû¿‘Ìên¥Îü ¥”¸žr›Œ§ÃÂÓÿíù&o/mhëZí%§íä`ç‰ÂÉÇŽÓô Àâà °ÄuŸ—ÚHë«iñí<ö'+-*ß^_›HêȦ†òImO½ñ·ÞôÀðÛ³·Çîڵˈ3,pÌ0KÜkcóöl‡ûn×kÍ®kÙöúº•õËðzi[:qijƒ}åÖמç»kó'‡÷ ³Í 3 ÀW)©‘TΦ3jC«>ÎwåeÛds&§6Šh#"RšÒ?)Lôýá‘{ZTx ؽXâö|¯tµ~- $ju-J‹£´xÚÏKêÍ«¶¦®juMà…€%îþ/|oòäÚ-Ó£áÃvt X+â%¤£½3Þ*"ÉVך#0KÜþè kû×%oÈu:«Ò)j®'Z;²qûû¶olu- 9z€%nÍæìÙNûÖTFúÊ ÃÓ”‡¦g0f€%.¬Øé8”A·º’ŸGbQ§ôè`«kͱ­*°Ä•L0Ñ»ªs2•q/ð“Ò×êzDD”©WíÄø |ùÎOÝsg«ëÍ1Ã,q«j«âS{+ÕB0j]G¥u©§ì·Nnju-à…1Ã,qǺŽ9k{We”«§uû“„y`j,:æùªÝOê¶ù®'hHujÄìšœŽþÇW~ÿ¦“ó=>83 iÓsGËöízã©”Ó¶Åu.½Áû•5ôŸæ:ÕÊùj„¶Vl£fgŠ“öߺ}dç퟼{h~Fç‚]’€åÁÈîÝæH$‡DÿâoþòZ?íÌÛ®Iƈ-͘'÷…yðáý»îþ§ý¥ùœ+°ìô¤µc{]oþ–$†=i¿ôùß½éŸækL0;hz–¶PÄFóÕülŒŠ+wÿž[âÛægD0› À²s¨!¢‹q<·‘ÁÄ**Üñr!9¸ÿ‘ o;ñ;5—〹Á’$`ùÑAÃ-Ä‘Ôý„¤æª!h8Å'ºà¦FcõØØ‰žc~î!6Y`"0ËÌ«ß{í:Ï5WøI'9WaÁ±µŠ?}êä+öºN66jfœþÎK’€efÓ+:.u“êrÇ™Ãm••(íX-Öµ""Ú²…3‹XF6¿js.ß^žLé•s:c¬(å2³À"Ç’$`™¸ò=Ûû^ýÆüzV:ÿ——9[Ž$"§gtäY)B‹Xúô[>üº¤ÞÝÖã½7‘’9?°M)«|ßdR©±l®)Îíh`.€%îõzýšõÛÒÿ£{¥ó+ž?Ç3 O±VÙ8rêQœ ç~40— ÀvãŸÝصfƒ~G{þ%®—!=‹1*œ™Îžˆã®ªV4<°˜Ñô ,aÝ}îE™6õëéœôÌWX±VÅõjfJóÀ¢ÇÿÍ%L…[+óº,ÈZ±AÃ-NM®85Ÿã€¹A`–°£Í©£ï׫R3Fd>™X×Ü;6¸íˆ™ûÀœ¢‡XÂnÿäíÃí׺QÓc}úªdF.÷ªÏõÄŸ«1­Õq©Ø6ac?ž«1Àü!0K›Ýõá[÷‰È¾íïßÞ½ê¢Î—¯Þè¼;ß!7z‰¹ q$a'‚¹xn0ÿX’,»?½{â_~÷ëß rWJ¤æ`yR©Æè`Ïž‰‘ ŽÏþ³€V`†X.vîÔXÿЛÓyûþDZ¥f{×$kÅTJ‰‘'yÕƒ°«ªÅ²*KX&nÔ\œëöþï\»ºx¶g¬[)ù£ûºâëúªa€¥ƒ%IÀ<ºú}¯ëض-=ßãnÿ­Ùu[ü7eÛÜW©¹ø­·ÊL޵?91vɉ9xvÐBÌ0ódÇŸ½ù¾µê}¯zããxëŽÅ¡Ý;½»»?}AÇ {‘vljä¸<òĉoßûñ{k³5îö÷lo?ÿ²èm]ί'3’‘Y^Šdb‰KÅÔñ™É•‡¬qÙG€%†À̃þËÛÖoÕÜÞ£_§•2‘„ÆX3POßÜÖí^šmÓçkGÄO™A×í]¹ñ¯®ûìÿð¶Ê9ë¼ù#o¸pý¦ÄûºV:oM¦ÕªY VD$ŽÄhG´µ*îxðè—íž?oT¬žÇó¤À| 0ó ‘T¤óúe‰äSÍÆžxJDú×{ov=qõSË„²mzåÊó½ÝNìø‹k¿µëCwÎrHõÿ|î-Wæ»ÔG;Vè—»¾$Î%,X£â™Éä±é‰Î±QƯ¡´VQ˜¨ ­963¹eXk¥8¨ €¥‡ÀÌõÔ—}êë§t 8ë]Wµ?óöôE~ByϽ6“Wýç_šþ›ñSÉ7¼ÿsoþèðq3|ó¿›1/ïê1oô“Nþ¥nešH©î ú¥ig[>o[û‘ ˜<±å[ÿú¡›÷¾„‡«Þóô%mÝî/mX¨Uý‰éñö'†Nlx´^óÅ™µcqÔU{zÉÑÓO©žý°$€ÙaätXxfMÎo|êÍ/ïYå}¸­[½ÆOJúL·2ÕŽrں傶n}A%nÌw˜7ÿÞ¿ßøå“ûê÷|íÜúˆ4Yÿ³mǶ¼çÚKÓ9Û~&»›*%Òh¨Za¦}ÿ©ƒ›ï9uâÒC&Ê„""§gÀrD`f‡•ÿœY‘l‡wq¦M½2™–ô¹’æºâv®Ð¯ÌÔõeíé'7}ë­÷~¤ú¯_ýð­w?÷Ú _¹f ‘p^¥µ’—:®5b«UgfèÄê;‘–ìMXÙØ±bY‚~˜¿úçoÝ ÝøBdzbg10#ñ̤v\7ù+»ñçO>^:i”‰óYÕÖ¿9sIÿz÷½Ù6çŽs&ϪÄñ£¬Ÿªù³V(X2 ÀlÛ)zņèÍýÞ拾êÌ>éJ‰Êµ«5¹K½ÿiŒ)m¾(*Õ« Ö$b¥é[/ŒOYðØ—ïš#ç¡ZEfÔ»WJ$ Üraºm°RÙ0Z)m ]U­é[/ŽÀÌ’‘ÃáÁzÙìë kÅÖ«&|é×[ j©±ÑáÍâp "V[3—%€%„ÀÌ’»¾1z$Š‚‡âhîîÆ­Ôm=ŠlôRÓ¨ÙÒè`fßäȺ1œÀ™âæ˜%ƒ÷ß?U)8?©er®–%Y#¦\étF§^ôZ+Ò¨ËèÈñàÓü°}—vèYgŽÀÌ¢DÆñµ+‰¹ÃÛ¨–íqk­X{ºGá¹” ê¶4v"ú‡/ýöÝi”{G´¢Áœ9>qfÉŽ7œçûrm"-Ù¹Ú)I)Q®+Ñ“ÔÿmÍ’v·ÇOû¯O¦¤ÛZ±J‹ÒZt½bG¦Æ¢ÛÿpýsSSSµÕì†Î˜%+·xWfrú:×=gA‹nëRk.xYò ã£áî½?ÿ«‹¯éÿ¢ÖõÆÄUí:i%º; ÍýGöÆ~ç/¾3."IeôÜì,`–øé°ËK&:æúí¨D¶Cmó’‰õµK{‡?ñίýo9½¼Ðˆˆ–­[]Ù»7˜Û*ÀrA0 6^}®kb ežÿhmâj9œ¹äÝ×eä?÷I5„0›˜aÎѯþù;²=ú­©6yO"% ™§Å?Ž«Û×oMÿV:ÛÐ~Q>3?£€å†Àœ#“Hž×¾B½·½K]:×Ë‘žM;âµuÉ–ò´wùü ––$ç(“rŽ£^ô\„ÙfŒ˜jI;Yþ‡ù,൸©Ìç˜ÆˆTKöÀ¡Gªÿý+úî#ó96X^ À9Ú÷ƒÉcA­ñ“8žî¥~öKDÄ‘(8¨Û±Z)¾{ð`ô·_þoßúálŒ Ð = À¹Ñ—_ï ¤³ªÏÄbµ>·=’¬)Ì1­uR”¸ÖHÃÆ¦h­kN5êîñÉÑàÑÑ“?ºé£wËûç«Å,Wà\ $3]‰ò]Þ;ÜÙùm²C‡£+íþ‡ŸpA`ëå[>23òýO|ÿ”ˆ4ž¹ò/ge<€D`ÎÁ¯ÿñU[Rý×S2Ÿõ+%’H;©FIûïýJáÜŸàÜ€sÐÞ¡W&RÎ%g™žóÀ(´Qu¦ú/÷ýàdmv*874=giÕÕ«RJ…iÉžéù ÖŠ êv¼Q“’‰Ežî|ˆc%õš$Öô­™§ó¢^3 ÀYèH+­<ߺr†½Îa ñ©ƒÁߊö&:{앎«6Yk ¡‰b»¯ÖUç¨l€3B`ÎÒÔ •2Õ³y¬ãXÇq£©OüÙáO÷ˆ|þoYµ¶^0Áíÿçö£"Ír©gÀœ¥jt2Šã®J‹œéIŽ#ÊYûêWuôår*;}xhè®/?6=7•œ=p–~鯸 •Õouݳh7PJúÖ¤ßY»\:»ü‹¦†Ûþ£{ÓyŸüæÎoÎÌ~¥gÀœ5å‰R)±bEYƒR"•’­O7îËwû¥ØÄ&/þH€ùE`ÎÒáGfŽ%®ÊÝÑÖå]äùgÂ@B¥í}¹¬»ï–züó‡n=DX Ûªgé{ó½qqãÂ@ê â‚R"¥999ü_>øÝ; `!#0gÏØÈD&6±1gvn[IÅMø°à€³´uÇVÿÑïŸ:trõ³•¢x)³ ƈÔÊR¯ÃožU:÷¹+«V´6F´_ÖA÷Ôäé;Îê‹¡g Æ']%"Ò¶%ëIØ/%öDzÿ…Ç…ÏhBüÃÔ‰1ÊØQq¢*I¶ô¿yòÕÓ7&J'Ü#g~%ìé›…¨“@û~àYË‘¨„bqkŸÝ§úÛ»Ú¼qâµnVfÌ1å=õG£s®‹e©H{ÑH¥W3÷,Ñ«3&›í DV·l Nr™üP<î\né°»¸Ók íPÊÄ´/ÆhÉ•iÊS -K©–އ»BËÎ+ÚÈÊÀ2ªÔ-ôÞ=?3&SÔ…¨“ÓÇFÆEäWI§Ujï˜Úvé/%ÏŠLùÝf`9iÒétÓnIŠu%±®Dçª+QÞò‚³tõìùˆYt ¾Œ¤ÓÆ÷®7Ý{^ý0ï @³â[@UUQTEaP…@UUQTõ7•ȇt³(RIEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-3.5.png000066400000000000000000000022301430147706700257510ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<)PLTEh‡@x¯I}»L}¼L|ºKwµHk«A®ÿha¢=}½Lªõ`X—Cn­I¿þr]Ÿ;„ÃO`¡@l­FìÿŒÿÿÿA=,+/W31t§G|ºK|ºK{¹Kv´Hk«A|ºK…ÆQˆÈR‡ÈR‡ÉR…ÆQ¿Mi¢Ex¶L„ÅP‰ÊSƒÄOPŒ>v·I¾N‹ÍUƒÄOs±I~¿O†ÇQV™íÄ3mõêô™T9*œš8R_뤵ÊjÃÅC/Û9U¸pìÂõ¼`pã 0MÖµ÷ÁŒªço±}]ý‰d^{¾$™vºˆ“Jt ß›t3Ýâ(÷rs²#‘µQX«ÍŸ|ñÖY‘GŒˆÈÈÈCq“é>¨tjg=;Fs¡,N|›à ƒF¢Qœžxì³ÏˆHx]/Ü0 @“1妬¸‘rª 7W±ªªÃj1«Rª3•¿%ëf:Äq\ëW Ž•H;^¸:abñ|ÞM¦ßÔñ<6öņŒÉó"âì9ÜæØFÛ’¿”‘·wuf²fEŽû×ëZÀG}ç¸&‡»ƒcÝžï-çºnÿàžtçp¿ã¦“Êq3¢Äm”j~y>ô«+gT<^ðT"ãÄ“ƒÕâl¸¸0ößVŽ>Z‘µ–FUr)ø¿cS5Àz1Â4Y_¡»={èö;²#;ÜtGZiíX£¢ò܉…òòø«1ëÏ,ÍÎ{Qi¬cù‹ã"ì?ü³¯ÄDdå¨Ôdí° —ß#,€¦!0Mæ&rùLçÈ ›êH…~µÒXž*×V&¦+Ås'§Ÿý̲\]{¬ˆŒ‘±ðø‘ß)·¸l!0M§Ãši¬Î-×W&Ç—Îþ«~÷¶½‰‰‘ìè áN<9|<æu(‘ 8[ _œ“£49€Í`}Ô'÷“îÄ™‰X4!áõuvõ u¼«½/~O¦]ÝO:·)G‰ã:él×ùcúó¿s®ÕE\-F€«§~ìß}ä¶¶îÌ?jëÒ{Ó»MkIˆ’œãª¬Òâj%"JD)‘zMjKÓ_zæ—~ëÉ¿f¯°µ8­.Øjö>ø`v÷ý©îŽýo¹vÙåÆT—ã©6ÇUIíˆV—ÃÂk\O<gwz[r¼æ<³pâDԲ⮸JwýøÞd6ãuÆSN’·ViÇ•¸‰Ä#¡Öo¿¯bIÉ+‘þl[ýÅ—?æb+êXp•Î=y®ñÒFO¤wQ¾û|£fŽU‹‹…¥`ÒoHÆ‹©„ë)×ÚKS’” |§ñ„_o÷{÷õ±ÓÅV_À• 0ëpèÐ!/·-¹3 L÷ùÑò…Å[,/š¹ZÙŒ)åVëUµº8ã?³4ž\š33/ =7;}ë Zû»$ª¸CwuùÆ…z«¯à;!0ëpq`ÀÙ{kzÈK9ÄFÕd6’tNß’H;‰0Ð3Å…Ú‚(LåÝé¼loë¬çÚ;{+»Û{ä¾DÊ;™ºc`lâÈ„iõµ¼–UÖãèÑàž>òüLûÌ‹‰Øùû{v$þi[—{§(¥\Ob®çzÖÈ¥öge%ŠLµÜ¥÷$ú±>\ÊΊȳ"Bh›# À:9rÄýÜQóÊ—ÏÎ ß»ódd¼s« óA`kÕJ£f"©È‹i×ó”çÅ$æ8â(%’H«1’Þv×à³'?Whõµ¬…À\;óêWƦžûË“O—ŒøÓ{z|èdv(o­z}”Àˆ}ù¿Þ‰‰" e *sQ£4?kCõâɧž_û"{9€¦cJÐ\6±‘YqÌþÂÅ‘´ãH<•—xªÝIv VçÏ xNe\D  ét« p¥. 7–Rù¡ûwå¾§]%Mư…8JÛdûvq¹}™þýýÅÞû§ÆÆþâ›21ÑVWŽeU&Ë ÞÙ™íݳÝKäõLïÄSÊq“Öúâ&Ùî¥Ó¥êÒdiCðLI¶"cDie¬Ž)'‘R6qK«K7&°U9ž¤r}6™ír2}»ûûîú©îV—n<ô0[”£´Uùî(£¸JéžFáè^Yhu]àÆÂ°…iq$–éŽ2=ûÜTÏ®[ûîzø6ᾈ `‹s”¶‰¶>Ó±ýÞd<Õ¶£÷ö'[]¸q€@4$ |Ïtw§º÷= "^«k7pˆ"_ÕW'u½4Ÿ°µj§´µ¥[]¸1€€KØX¾WGµ¢®— ²ºZ—‘‘¸Œ<oum`k#07G7.ÊóŠ•¥sçrƒûSÝá`{¯í9Ìjh`Ý À–§E†jçŒ_ZX°ÆY.N_uÚú^ºgoïíÙ{ºül««[¿<[žQÚÆRåܶ‹í#©LTùP.–ȰJm¯.Žå륂‘gZ])Øz À Àqã6Õ¹+ë%Ûßklà›°nýʪú•r²{·c¦G"¢DĶºV°µ€ëÁ4ÿŽëY§­ÏFQÃkfCÓ¨•m]7ÝÞnúöu ¬h¦‡vâÓ‰¸QêºÜkQª ¸¤«óãsÅ¥ñ—òÝC~½0å+s¹.±Üh @}`°xÈ9HÌD¡­k-ªygÓùÕ(ÏQP±Ö¯ïY™9é{1¯’ð+Í;/¸‘€&IÞÖÞ{î' EçÕñ‡Ÿ%åkk›´ˆˆ‘FyyñÔS¿qDŠÅ•m·~°Ã8x‡Ä{w‰Èœ0% \%ÐD³SfYœì™(JÔ$Öp¤–jêbÆÊZ+bâ=ý÷ÊPÚ³ËÓ¥³ÎW¾Ñ»èxBXë@`šH{Ö‹'ü|¦m¦ßX7˜ºóŒæMe0F/mÛ‡îÎÄ3Ýw¯œ{ºÐ°vjW÷ˆ•>¿(s¯œB¸J ‰g+ÉLǨ﷥k•LÙ*ÕÄí8¢ÓN&‘ÉÅrÛcM÷W¦N‹È˜ÀU"0MT]uêÓc»ÏÌgn³Qà'*§y'5FåÙd¾G‰5ñza.µ¦pã"0M´ëV¿+™?~g£±Pœ>£¿^[‰¯dúnÛá¥:’¢\«µQÍ\í´Q-:åùÓNiþ\(Œ.€u 0MÔ1vuõÎ}WÌU²9ÿ/žø“^ÍöÿÜãîÈ%“Æ©×ûJ¡MÍZ9)¬.Ùâì‰rueº(° ‰”rl*­©ŒlËæbÿì'þÕ½åzõ•>‘ÓñJ9¹X, L,Í8çû]µ ]guy¥$í˜d¥¤jŽ3·™±gʳ™Îö~ýád:Ÿ¬ò‹¡qu,‘^×Àƒ #ùµ0ª/:ÑÕ(keN*w5àfA`šÍZe­\ê PJu©šH¬ë©D./¹ûc«g0»Ô¨èÖ=:ì—ýò‰ ýoV·ÅÚw=p –Ì_uƒvœ(ÑÞ—èùÐ`y~l&ªÎ.ŠˆúÀU"0Í©”u¥^Ïžô¼(‹×Û*%û~Cêì6ÿ8žV·ç;eG&ûßµ ƒ•àâ„úF×ÈÂò…Wç¹íw(“̈¾ÚeXµÇIÛX2g ¬+3Z ` @i­U­â­®. ½Z©ô/$¼“ÝK3“Yœ›{àá‘uö;{)‰»®(c¬­×m½\ê-–ïÿ`ÿ]]a,Õ©´8ëzÐE)]Ûð“eߦa¢ŠWIa9>½4ß{ìâôžSµr{Yt<\wX#N,iùmñö¡{†üLïÅÂÜéñ»2p³ 0M”ÎÇbÝÛj»ENUK™ÂÌÔýgˆV–oŸœ/}Í÷'–ºúJ#ÊQ27sçËÅå‘­­Ú]ÜŒ‘D¦Ç¨í‡bµT{‡Ðô ÖÀ46ùŽÚ޽w¼üP¶}ñ…ÒrûâêêÐÜÜÌ»OÏNÞ;Ú³íäöxºkT»Ë—ö_ØÀgz-¢•£ÄuE ` @³Y­•´w•nÍdÏl¯”ôêÔùó/NM¼ï)¿6Xš›¾çœˆˆr"­×»Q@“€f»<¿H)%±¤I{ñ(]¯–—ç—3~£¯ì¼þ €Íg]»È¸2ÖZ%Ö|+ØKÁ¡{[yÿðîo~(—aH)ßáV›O)@UVtae1uºRö±¯÷hmÝd¦ÒßÙuzŸç-¦ÞøÀf”$ ‰ªÅdqüÔðs+Ëɱžþó;º ·&RQ^”¿‘\ªVû'#“öµ¶LK›h¢¾a¿·sÛø굋çNÝùµ™óõgòÝ ¹ÜÜžÒjf¦°²g2ðÛê°Y€&rãÖÍæý}Û'noë^Ü5züЗN½ø¡'sùó§Ó™ ½™Ü…ÞÈäüÈÏ5„’À&D`š¨´jÇ—fÓOY+w§ÓµÞ¡á—×ˉ/–WöÎWÊ=«Ö:F$Àfå´ºàFvâ+§fêáß™™_80[«wL†S.º–b‰¹|G×ùþ0è,ùŒ¯T“–VUJLÐp‚úêüܱϟ6nW‰ ¹‚•…—fâÝ?0;}þÁº¬Qé|ç±þdf¡·R,Ì‹tUZ]$ÀZ @“Eõj E"%Vk'‘âê¾¹(è¨Ô5­•⇰Y€ëD)k_ËJb¦\ÙVTj¥ŒKb›h2k29bŒk$2bEkmOÿ³;£È K…}Ó&Ì4>€ÍˆÀ4™5ªÚX½h#SWÖ£¬5 e:ö¿to<Û6>–®•‹{æ4k€MˆÀ4ÙÜ+ŸYœ[|æ©.?ë,ªe+Z[™›3;o}¨û¶û’¿E/¾ûìÉ®¯4ê=e6p› h>#33ÕÅ·¼è:Îü†þ¾žm‹šàëÅsc‡Ÿý®ÚFOM2ÊÒÖM·ºàfµ8¹ÚU\ –Cßotö]¸¿«ëø°_s[€Í„' El¿{ü¥¯ÌþO³þ缘qGN¾·½s´GT¸¡Ó’´ULsëF`ZäÈ#GÂLWfxÛÎøí‰”ÎdóµÁ᣸±ù4ë%€Í‚À´P2›¬Õ«ö¬ãZOJb`ûò¡Ûn?òÁXl9ÙêÚD„uVýÚ貉µ¹3óP<¡úÇÆ¬mx…•ޱZµ³¢D_[òRb‚†ÔWççŽ}þœ°¥4¸JŒ0-¶m¤mHi•QZI¶=ì¹íÎ'´³û¥!+!÷(h)–UZK ìNýˆvt¯ˆˆ‰lT«Xa.>Ù¨¹a«‹à×K µTX‰B EDW¹‰¤Š;*Q7°6Tܦ •èaZËÞö¡}‹É´ÜOª~¥EiG9™|µ/“]Î4jRB×·6½¾ÑzÀ5"0×É¡OòÞ³ë=êĉozhù §¦vÞwËJ¶Ã¹Ç‹©v¥D¹®Ä2¹z{ÏüöZ5\©W»WŒõŒˆ’K#J®èÙŸÀ®= @ó¹ÿ»ä<«~ÂÑ¥â'îyèñgþƒ,ŒÕ"‘’9TJ6!o ðÚ'•®më8wOwïä¾¥…'굎Bqy׬8Ƙtàj˦l © @“þ‡‡Ûóñ’is>ëp:je{¢ã_ù+•.E’v<çθ‰øƓҫ”¼)8®8ƒ;Ë·  î·´4êXµäÔ–o=±4`Z,£ y @“ h¿¿³_¿¿­[ïqq2yÕkûãï·""J$¨«ªãIÌuß~?*¥D)Ññ¤ÒÖOéÀéì™»;•Ñeí±¥ù[æDÒ{C€æ`ù ÉÝ“H©>ÇùÖ”#¥•h­D+%ñ¤¤¾]XñR7Fl­ê–æcsÓ©SõŠSò\q:{+Ûú·Ým¤ìŠ2LMMAÓ3Ðd;ïÞ&3î@<­†WbWóÝ0°VQ¥™ ½Ï8ŽuóõmÙ¶¨;™ŽÚ¼X·QÉÙwâ^/>ç•V;—ŒI‡oêkVJ°®ÃúêMÏ`= @“èºs¾7ª®ä{Ü;ãqu©Oá ½ Aî˜HEÚ÷Ûõ0(±N¾£ÖŸo¯o‹'MNkqD”h-N¶-èIgký¹|q «Å•ù½“êÐJ‰õ.«$€õbJÐl>yiNióï…5VÀ"0-´ÿáý±ãû‡ÿô®ù“Î>õî÷Ϋ(5êNabtÇ…Åî©ÕùÔdmùìxµpá٣ʴȣÑõªÜ<˜’´ÐñGûò¨HõÕÅÎ>*õZ`PòÆDQ¤L¹”œœ>»ý›§^¸ãåå¥éÅs¯Ÿ~öø9‘#akª7° ,]ŒŽ¥óíÏ»qÝæ8aÜqƒ¬ˆŠÄè0ŠœF¥”š}y×S3gó/–æ^­ÿòèÌÌÑj«ë7>° Œ¿\;U,ß÷Õ(Ún¼X¤ã©RZÄLäDF¯•r¥ùÑc+Ó?5sôÏ[]/¸y€M — ã·¿ëØwדÁÌÄÎWæfn¢¬/"¢”RbQP™]™9úgK­®Ü\ØéØ œ[b‰Þ;;ܘÉç;£0h4j]%¥´(e”‘È–gÏ,,dRäË£€ë† õT­s/œ½{|a¶mNëH"㱚`ZŽÀ4ÑáŸ=ÜZ7µ8Z,ì|Wg¯Å3£Ï‡Ó£O¼º”¹7;°k¤3–ëëpÜøvÏKyÖ:Q1ð6Ð$ÿëàðýsé¼ì$Sr”î4F§n9”:þþ¿óÞÉj%¥'ÏîºØv„^<)J\óÚžk‘­xZÅ£K¯´h‚þËì§ýO8nòÝɬs«vÅQ"¢”H:ÝFQ8s¡í©ø\÷ã¶šõ/…KÙÀJ¨]w2™áUk]Ño<ð#—ÿ®æ>M`¶«†TíÑåÉà‹ÝÛ½]ñ¤³[©K«;ŽÕ‘±Q¹˜.­tÌÄâ‹™0Júa C«­¶JDr -qÓÑuºßõVA-_-;º°ü‡¿6}ùêòŸ¾ü'—ÿ­ÖøX$€æòþÕûèïeÚâ?ùZ`xMµì.ŽŸz¢«Tºúé’çYoi¾o®RÞ±ÜÞ9Úsû}_û‰‹ç{^>{âð‘ų''#^PÊ\j†Žku XQG\]YÏ'zóI"ÇÚ¨ª£òÊüé¯ýÖ„¼qûh€+À”$ ¹ldUd­’·äI¦‚®Þms·¯¬$/*©D ß­¥3•žZÙy¦QÏÔö|öûü† rmKCÛ¶¿t›1÷Iêío<†¶¡Š¬¯”‰Yqµ•7O`Ó(z••Éc"r^ à*€æŠV.Êé˜g—SYÕaí¥öÐWõR!>¯œzn`{e R QäUëUÕØuë™wU¥«ÙÙ©Îé´vêAǪèdèyîÛøßq^¡ ¢@´‹šuàÆF`šËž~¡ú¥D¹'Šï­TRsõjb©¸Ú?!¶˜NgVâ)?ÛÖQß‘o«Üµk_¬µ±BââÔxÿÑù‹÷¼â×Û*õF®áj«^kŒ¾rZľulàÊ€&;ñµäÙÅ©žÿض}ÿ Nb»ÎåçÚ‡v½zo÷ÀÒ®¦|ß©*¥m¥›,®dÏ/ÎŒ.ÌW;+&LÆX{),\ Ét¬gÀM½·?”áZ*v¦{ßÏ|[Wi¯Ö¢ ËésÓž/:–vNAWUY׊}­×ÀˆÖ,NZ‡À4›ç*íÅD)ׯÓÅ”ˆuÂ@ùåRöÜØ‰»¾<7u焉£µRꪧ4h¶ ´""ZU\Ú3sæ¸þ\2Sh[™š.†źVk£XÀlFàº1⇹ÆÌ…»ÇED´ÑZ­£‘àú!0×mÒoºëU›ÛÛwy€Ë Àu ¬e(lIk"0XÀš @“)Ò¿¶,€5¬‰À`Mk"0XÀš @“©À±Fi+bZ] ÀU#0XÀš ÖD`š®."‘p»€­ˆ'k"0X“Ûꀛ“–(RFÄÇ 5K®€ÍŠÀ4™RŽ}ûkughäå‘0t¢¥ù½Óa#ëÀfD`®›KÀ(e“Þ|fçž ckÕü§Wk™­Eµ¸@€·!0×™¶JùQ¾6ynß‘(ÒQ­Ü]ÖZ)‘· D´¸îŒØ(ïŸú®cÆ*ëºV1 lV %ŒhGD‹eØÔXVÀš Àõ`4 `K"0MÖðÂز ÖD`°&€5€ë†Û l=<ÁXÀš ÖD`úãHð IDAT°&€5¬‰À`Mk"0Xh2¥|«”µ­®`= ÖD`°&ÐdʬˆˆµJµº€«å¶º` sîúñJïöbÚÎMw•æ'{ªÉ„ÿzWʱ~¸Ú¥´›P*²B'Øb ÀúÙƒïŠv VÿM*kã»ëõÂÂLytâÌÈ©JqÛŠã¸V¬QiíˆËZ!.€-ˆÀ¬Ÿéª%Ûºã·d²6nŒ/½õ}}C«wÎÏM[œÙzµ°sQ‰kĘK_¸üE怭‚À¬×þý1J¯ëH,ðº1:ˆ" ©0¿c×Ô{Úº–wœ=Ñxbiî®É|û©Þ|~¦G\‘J¡}µXع`Âtð­°9€õ:~ÜÍž™•ÅøX©Ø{ze©ï‚_OWV–†ç‰•ŒÒu§VÝV1ÒÞ5Ý704vO,&W—ò“㣙oWS+ZË[¡µ"ÀfB`®Á‰çzN¹ÞÀ§#çîj£ÚSÖÚ(#µJûò¥OqtàL»çäÌøÁ3""M†bc‘Ööm«&)»Z%"±š~°)€k0úÍüjÇÐöѶÁ®v­Ã7€7X›ˆ"›ŠDD4#` ¡÷¸Au<°Q¥fº‚{ÉÈwšn¤%ŠÕÖõ&ÚâÞ|F”aïÐRà„Õ™ºŠ¢²5þÝKFD‰Š%KéÐZ¦%€–#0×`ñô“5k£B”Ñt;Y±åÒÞÙxj9³1X?pmÂÀÖËA­mäAµÄŒ6V%SSíLK­D`®‘®uÛ¨Õ7ô VlàçjFÕ\k  u À5ªÛb#²aUì[÷T¸65¿­â(õ­>µ±Ç¸à™ÂE_B¿j­RÖÇ "Z¥¢ZyxY‰k"e”èåø†à €kTX:W‹¢¨l¢ªã×J: µ!·–ÕÖÚX$"âXmÅÄ7´OàJ€k´<öLà—.Ö‹O‹ž9í—fWDîFŽ6ˆˆˆM{@€ïŒžkpˇÿIO,Ñ~¯ë¥ªËæÆ¾òkßyèR«³#N:“Oeón2¯Þiö( ”RÚjÇ¹Ž•\p TmÉ~½$3Ïû5=!"ű/>]î½=v>ß1œŒº÷¤;‡F¼DÎY1"JiG»ž)/LÕÅsgb™ÎíÉ\oÆ8Ú:âŠK©XÚzaÅj6p-ê+ÀµQrø°#GŽD"ò¶ûm÷ýýÁt¶sXk×D~¥ø¾änÝ•ìÚÑé¸qguâ¹ÅÕù3_µÖOi72~©z®î¼ûÐ}hêo9þ¡/ùõÒº«ÓZ‚J!VYõå?ý™¯È; u|Œ0×ÆÊ‘#áZoN?ó§Ddú¯õÞþá3±™þ¾¸Ê$–ÃÕÉågÿsQD–.¿¼çáùŽù@ÙB! JJ$¦+€Ö`„ØŒz{Ó½=ß×Û¶}瞮݌¸nb}÷*# à±J°ÍÍUæŽýÁxyîd£$ÐTÌm6©‡õP>ß—ùˆÔë#®g]=“wí9øØ»b‰…”1ê;Žh«`Ýa6¡G=žÎèÜûåDÒVêÒºªJY§­³º³½ûøö¶ö¹á3§njéâãZkC%Ö(QÚ*å^Ú9šNip À&tü¶‡U[©0‹«6í|k¥D%R’1ÒÝ¿pOiõ›§ÿæÜ§•8Ö„ZŒ.eÇI$½tz0ݱ3iuÌ•pÍ­"ÞØ„ýÑG£OþîG?33QÙ¶3õ¿:®J¾ñ}kņY5þê±Ñ/ê˜>¬åˆˆÈ#"j`àP¼˜2¯ööPÆkÛkU´â:ÀÖG`6«XtK"©êÖJô¦×­ˆ_·óçO×ÿõ©gW>#"FŽyÓ䣙™£U©–Ç^Y9¤/}àêÐ ´ÐÏþ§¾? µW©Ô§ÎïÛ{àήÄÁdVoWb?O:wz1•xãwŒSX²ßüåüÅûD„¹F ©œïüÍràCƒý;sÿ|`Gú'·ÜëˆýÝL›ó‰xB}w"å :ŽZcPÉà]·,{™ìøÅ¯xO€«Å²ª@ó­9’÷©ÿáë/(Ç Ü˜{(×éýT®ÓyW<©²Ž»öàßåÆçí#wÄé®ò-çq}ò·µ€›= @“}üWïh4ÂØìñ‰É§eÊ—G_ï%0""KÓµ? ýx¶­Û}·Ö*~%ÇTJT2­¶õíþÀ'øË‚4 ¶¿/žt»¢À«•£Ü´ 7°~ä#©öäÎXÒ‡"’JIÒ‹‡ß5‚d÷ŽÛ~ý韚:õÖQ‰u‰\Y`ÑZT6¯Þù=½ÿÖFáÉöÞøÏÅ“’ª–̳ÿ×ß;zì±êñãGŽ”7ôÀM‡¦g`ýôoÿȇÛúÌ¿Ìäœ>Qb•–t")~ÝK+þÿ}ì³ÿõµÏ>ü¾{Ûྞ÷eóúÌä{µ£ÖÕSdHˆï¸¢µ#nàK­Z–ÑêjøÄ‚ýôýÌ_=»qWn64=hèÐ@ÊFA[·s[¾ËÙOJV»âºžJ)­ï|hØ¿ûwß÷G÷>¸sîeÛʸ{´£ÖÝO¤”ˆãŠ£ô¥ž$Ç/‘”¾DZÝëyÒÓ±cäåÑoŒ.nÜU€› S’€£÷Ü{o¦#þ±xBwØ7ìz µ¨TVW2•Þo­hk¬ãÆTFiÕ´Q¾X\¹™œóÞÔC"2*—{&®«$Ç1Fb^L·¹qzë›Z‹8žêpcªÍKèl3ˆˆµ"ñ¤t´uÉ÷>üËß{{3Ïn\LI6މ÷n›êê‹÷$RÎZ·¾GHiQŽ«×Km|áÜ“çJ­® l-`M<;Q¼ÿá=nL} –+^ñ¨™”]«D©âB4—ÎæG/Ž^ Z]Ø:˜’l0홤vijßù£×…R"ž§3ùžDLú…°® Ø@)G;bq›M’”•Ìèžž§ïèïZ]ØZ ÀºíGïÚ!Êۣݖ·/|‹‰%$OÙ~ìW¾çP«Ë[ Ø@ÛF’®«wl¢¸ ""š-¯šzG—»«Õµ€­…}€ ÔÖmsãî`«ëx#¿!õ•Eù//µð›¶fçZ]ØZ Ày辜ãÙ[ã ÉÛÍÒ¿ D‚†,—Ôó_ý¿zºÕõ€­‡)IÀ¬%«Åeç•‚=ÞêZ^c­H…cçž_~¡Õµ€­‰}€ 211ar‡zÇÛ31íÅõ»cq•luM¢D‚ºDÖq^zéó§O´º°õ€ 4qdÂ䇆.¶÷¸=±¤>อ¿Ç´£Ú½„jÄ»žf¼ÒêzÀÖÒò‡àFsöé³ÅáwÌerÎmñ¤Ú¡Z¼d’vE™Hú]G–^øì™DÄ´¶"°•ÐÃ4ÁŸþÏåg¢OU‹ö|«k êâ7ªòx:{\ à*€¦8.­x^Z‰þ¤Q—Š´h”A)‘F]f.žSŸýõæ¤ÀUbJÐ$'¾|"ìÚ>ÙÞïíˆ'ôn­¯ÿý¦”HˆÔåÕ¨û–—. ®w `k#0M4úÔ¹å}ï;Neå]ñ¤äZQƒëIÚ‹ÉPG.šyî¯F7Í’¯`k`JÐdµŠYµÖ¶lu"%"J«íÊSûäÒ-nÃ[ ;=78+"®gu{÷ÿøøÜeŒ4*E[+,×ÿä>ùùÇ[]ØÜ À{ø‘‡cSǧœ§}:øñßù¾l* *í¶l7¥DâI•Œ%ÔAkå ˆHØSK¡÷ç­ª l`ƒ©DåþÛ>Øuø®ïh9ÓO®Íùp<)yk[\—ºôg­ˆµáѓϭ¼ÚÚŠÀV@`6X"«÷ïÐÈv&Þ§±Jm®žYqDÎ?÷©¯Í¶º°ùÑô l°?ú¹¿z~yÖüa½j§µÞ\aADD”ˆUÑæ« lJ`ã™Ó/Õ_¨W“­ž†ôíh­$²ºç–ßÞÞêZÀæG`š`÷]¹[c oÚ„¿ã+%¢ÄÙ¶÷®ÁÞV×6?Ðñ”Í*G2­®ãm”ˆ_—0 åé~âL«Ë›heMB+ñZ]Ç[)©We²´ä›˜˜¨·º°ù±J°Áþοý¡ɬúp"%éÍÖÃE"õZxlìXéT«k[# À+VüœˆévÜÍu…˜•ÅðÏæ'Jÿââôų­®l Œ0¬´P›®W½cº¾3W-Ûáù¢ÀV KöÙ™1û‡ÿéç?ÖêzÀÖ±©~nOüöç'^©þEi)mu-J‰ ñç¦ÌŸýBé§w.ßùx«k[ # Àûéßù½í}ÎÇÓmÎ-JDZÙÆ–Wí‘Ò’üîc¿õØøcòX «[Ø@½½½éT»|¼½ÇýD2-ñV6=+%Ò¨ÙÙ™óѧ?õ?ó\ë*[Ø ?ü°“=<˜ïp~0‘jmXøåÆcN¬ÕU€­ËiuÀ⮿wË}ÝCî¿hïvïÑÎæ¸·”’„(SêØµãxGowuêÄTØêšÀÖ²)j€ÁûêŽ{síú'SYiku-¯ÑŽhÇUÃÙvïÝ}{Ó½÷}ì@0tßppâ+g*­® l `ƒÜöÁý½™¼ý®dFõµº–7r=OçÕötN¿×‹©ïqµnëÞuêÌÓg ­® l~,« l¹‹•åÈ7³­®c-®+N¶CÓmr·ÕÕêzÀÖ@`6H"áxÖQñV×ñN KæÄÂ…è÷uIŸlu-`k`•$`ƒ„‘²Ê¨M±6Ò[)%R-K©°hþèŦÿüèï Z]Øa6HuÙ©G‘]³™X)‘(cŒˆ¨KÿûÒ—þÕ´eX/×ÖKæo¦N‡Ÿ#,€«Á°AÚ{mÊu%ûíÞSJ¤^•raÉ<&ÖÔ¼¸íUV'Smú`£jç£0|^‹)h7öT^ߢõÆ„ùË!Å–ìKó³æwÿË/~öøFÜ< ÀéÜæt¹qxÛJ¤Z‘Âò\ôÛGÍ8óÔj¹}ÄÍŽx|Ç~矗ƒ'Ž|iõ‹S_~ºüwÿŸï{ppOòWÛºÕÝZ_ÛýiE¤^±¥â²ý\iÉþÆWþhå¥k9¸9€ 0<<œHÆÍmñ„;øÖ™EJDêeY-ÔW?ý 5qùåE‘üü~ñ܋疦ŽLÔEDþèþ«?öoú…½wg~=•“}ÚYÿ=Z¯Ø™™ñð·Êsê÷ÿøŸ~f~½Ç77öa6À¶ïÞ—ÛsGúû3Î{õ')±"åUóüÒLø—Ǿ|úMîãß/­N¬¾i÷åW¿2v¾÷¶íOŠöñ¤ Ѝ¸(ѯ÷<\¿!µ•9ûÿ}î?^ø•¿ùÝ'–¯åÚÀÍÀl€tkoO÷ý©¬ó>¥¿õdï×m©V²¯—ÿþñ?;ö·†ƒ5ØãŸKtë'¬í˜ÑƘÕçz—+õJxâä³Õóô|ýÌú¯ €)I¸‰tŒ<”óRQšè*~«¿B¥¨Ý¯J¿v.Z)‘jÉÎ.L›O}±øÇŸÿµÇGE$ºšCùãå#rü?‰ˆ|×O}W÷êùÛ¹Nû±dƹ'ž”ìZ#Q(6 åôgùÒ3×vQÜD:wÝ}g¾÷6å$6t9a¥´ üÀ©5žÌšh^^ µ²šY˜¶_øü¯=~Í›¤}ýS__øú§ä·~è‘ï}lèÖø^ÜÎwÆþv2#o.F$ ¤T\öFE„åSÀ5#0à¦KäÚbùm]®—ÞÐÀ`E™Îìd{&/;ô›&ù߆Ælä¹>óÈFEdôá_úžW†¸‡’ÝùÖÏØÈ.^/¸9±Ó3nBú£¿ˆ8KV®ëg^I‰heQÑÆ.,ðÈ#ºw›éÛûû^\¥^?Ýå~†FÍ–+åè›§Ÿ8ûꆞÜ´a®‘ ­ÍæW:’éÚ€%¢D5©6jÂKªâFžëÃå§’µbü£&²Q¥¨¼˜´+%* ÅoÔÍxa>øý±cáçÎ=WØÈ󀛸Æ(K-'3¹åþXü³½mƒw¼·mûƒ{DÄ6«.pã"0à&´Öÿí¯<,£l,^H¶u\ÜOmöõGqUmÔÃÒµVøN"/ámà“ÛäÒˆÁšSýXG¾÷ÖÚûîŠg»˜’Ö…¦gÜT¬e%ÔÊêkûµÝ*Édçò¹üòN×ÇŠˆ_“j£ªžœŸ OmLµow¼{Ál«Ö³íƒï»ã‡}ÄØ°VšyõByìé%cÚ”çÕ¢¹¹Wü]ïùdz`ÿtû-ƒâ9FXè¬7Úʹ EUëÄ®ù×vë‡z[ÿùîT¦²Ãб"õª9u~4øüÓ¿ÿåå¨÷Û:r$ôÿäißÔŤ;nÙ—èܹ«cÏûkÚñ´1Q´-¬^²½ÍIä2^2gƒJ¡iå€7s_=)#OŒnı>þ÷vß¶}Oò½©Œ“¿Ô`ÅÚhæØß,6}†‰#X‘·<ðµ“|¨}ç=yc¢61"ÖDV{®(í^]CÀ·A`ÀMäH(c^ëQ}ò×;;ØÖãÜ÷ÚkÖ*‰ïÛÏœ¼Ö\¡D6ZGÅ¢ !ŽDäRWƒsy1$cD4mJàÚð4\¥‘‘ž!'®?OJBD$Š$,­ÈsåûãÇÇÏ^¯::¬TæÇ_,/ž)p+€fá)¸:±t*8ÔÞã¼_DD)¿&奋òèo|â3Ÿž82Q¿^…Œ}ñ7%iœ KóM]• ÜÜ À•s~ê7?ðž¡ý™G’•{íEkÅ7VU¯{5‡ym^z$Ù{[ßÕ, p5 À•3‰6/éxÞÈ_TZ<Ï“äu®ÅÛ™{Ï®üà]÷¥ò}ô"€¦áA¸r6•ÉÍ6ªj6™¶ÛÅŠX+âŤ=Ûì;ôÑC©£Ÿ=ÚÌ‘§k鷺‡d¬›ˆezö§;cbÙÁ4¸ •RØp]gQYµýµ§ô(4«…`F'²9¹ÖÀàŒ<ôÉa~£7±tÜI¦ÚcÆñ®¤²:žèsâ¹îx¶;‹§¯h’Q–@ÖÀ\…óÏÕçvß;bbw‰1‘H½=õ©_™ú¿W_ziuN¡\Wfðî”¶™ÐhÇQʉ;:æéDÊu½L¤´2b M ຠ0W!×#9ÇÓÛE]Z!©Q³ ‹ÍSDDLz¥dî–.íf.íH­ÄŠˆ#ˆ1W7` ­ºæ­ÀÍ‹À\¡û>q_®m›þ¡ÞÎ÷‹\ê_C37uÖ¾ºQçhßu(›í=Ø%â‰ØËÉ€ Eàÿoï^b#»Ê<€çœûª[·Þ®*—íö«ÓÓ„tI'?3ž³Sì Ý`–R·R–1­uV;—‡.¶¸¨g2noK­^ø~‡ˆB"¢È#]ɘ+EŒà>€À°Oå’H[I:Etk9’’DJ©¥g—® [+³²“ÒÞ_<;RžÔs£ «RzÛ’+.´dEKL¦q„¸/ 0ìÓÎj¿‘Ó^¶l‘í»ñZÂóœ‘A4|7 Å;ý3­’¥™"ŲúnÄIqaç¸&Œøpî`x8¸ `Ÿ®ÿÐÝ\»ZêêÅæçn^ ¾xäSÎøNä†.V«q7ˆú® }7ÒL››©²Ò„uàacUàn Ã°OKKK-Ñ ]ÿÂw?V¸ìÅ5{´Eôæ°åT½vá·ÉÆ´ì^ÏVšLO<œÕuë®àΡÃ0¤³_;[ÈŒXïÏE: x¸Pܾ“çH#f~"),©‘gâPÆŸb¬*Ü t†tü½N)‘Ò1-–Ï–äɳþ•ˆ®S£¸°èdÆv’¹c±‘ªŒ M¿uÖÀ}€}ªV«zv:›µ,=¥›¬¢$Žš,M¦+ÃÖ²2ǧ³£'æ­Ü”ùVX84ØÃw`X*•RÙl–:î1¥«˜ˆHñ8òÍê—ªú0Å 3ir]'†—y¸ÏaIÀíœ#q¢q"ÛédG§GŽušñƒ½NÔ·ÝÓ->WýHá›ë+êée¢n_lQ+=( NinŠ Ë$Å‘<ÔËǸ ·sžbãó†§úáXñdÂÑÊNFd5´fÖ[è¿~ñ£þË{•˜›û„)fN4+?+e0ae§óšisR¸¯!0ÜNµªÇmoÊÎNa"ŸË—õSv’M#á¤XºãpQ[ª þü‚!¦NŸJæ¶sÇl¡'nµ69Àý`ÕjUŸz2sft¶üw¡'e}Ó-_ÑNëJy½øúÅŸ/Õ¼A5Æ÷–œÒÉy;?™äL{ ÀAB` ú¥ª>9Qzlü¸þ­ò´~6ðdËÎèËfæŸ{BpnçŒ=‡hŠëœqÎ;ôý  `€Ù#)å©ÖW½—,[7±LeÆ<-ãDDqL|½ÛŒnìUçš}ã†~ãÕ‹’ä{L§ls¡q&ç$Þ™¸ xcà3WüÄ̯v~ÚÿyWë¿dÙb~¤bœfüÖÐ!¿¯êõøçÿú¹çö,T«ÉÆÊÇ· ñÊf·³²#{ÝH’ÂLp:쩪Œ‘ }zÍ­Íß?¿B8†„À O‘\¦åÞlu63*¦OKÅO¶ëÑådNŸ""ÖnÈ¿ú\ûYÚ×KøSòÚ2­Qkþ#ß(ÅV†:¸àA``ñ©E+Kú‡L›ýU·¼^µÛz›„jÚ)–#Fî/ÿñ…ÍajǬìʶFÿí€ûÀY"K=!cùD¦ s]gAù˜~J¢0P®»_'"F·ï0°‰…s¹ää©“©òô¬™Okš… Ðp$ 0 ÐsÐëu/å‹ÚÌèLöQÆXȘâJ±°¹#¶ò†÷<íc9ÒÄÂÇs…?ü˜]˜VŠ ÆÑY€#`€NÜ‘™d"È•Ìé„­2õàF+%Öþ|áâKoÿø™¥kû*”žÈ›ÉrÞ°3‡µÀQ³çüx€ÿϲQV‚ubI½ÝÍøj¯np®z+oøÏýÇ3K5Ú«»P%þÈeÌn=ixܧ‚VIDATàèÁ ÀΆ¹^wËëÆ[×zÿ”.X3ÁŠÅqëäm?¼ŒNü߀À0ÀùóçUw­ãõ[á•vÃÛ #)<7f…’üäçŸ~òë_ü‡O}–nmz~;Ñ[?„ÿÅßxtà·€ÁäŽë_éµýÿtF¬ÅÝíð EÜÍjÕ“š_™ãŸ%"ûm>§ÓrŒ˜¢ˆ+òø­ßgzË`Ìá‹ðŽÀ¦g€=d´Œèìzéf½÷#&˜ÈæD6•MŽù}%ý®Œ©\&Úü_G1„tñ`¾_*_ŒŽýâT®YÜÙ*­'lÏ)oÍ´w3µ?>þ[F©à`¾ àí!0ìaÓÚTÅ(ç+é¼ç†Ôiøk«+üõæVt5_¶G¾úÌc_i·´×8SL1ÅBŸù[×Ú×~òŸÜ »^’äjŽS;öæ–CfÂjŒ =H–®¼®ÓÐ4Éâ\ôðvö0·=Ò ïOfB×☽Ëë…i:f¾ÌG3#üdZ¼¯Pˆ1"FJ© ?bþÒÿò™©ÿ©½|ñ§W‰‹;Ú͘¦âض×^îvóÍ\áÊLÏ-n5vŽmv{“MC(ŽÃßà°a4Àjµš¬½ºÚL¿»pÍ"ݺšOØsJJÙ¸é/+Å’šNÓâé^[v¶×úW…Æó•ãégJN×ïòKÍ$SÅ㓺•¶öqÎÛÿ ©0È÷Z»3[^¯Øé´Ç7Z6ã(åkBò}ÕbŒdè‹ÐknmþþùîÐaØ–Ñ嘙¢‡Z ïòÍ•neb.yztÖx¼ÓP—ëÝè’iK¹sÓ¿Rž2?+iÍ`)+!ÿpi,ýoýZtÇ/éœ+F3"¢(v!b *€w^>nOýì{¿¹ÞßXý¦ÑMÈ„Û ¶Z;QK3ittÚø¨iËÈïõ.…ûãß<þϹ8"ŸÒe,™’Ú Ñ«CáJH€a 0ìZz¶æ§ éF2g9ÉŒ1ôTÃÝõ[-ÿÍV=ÎD‘6ÝÙî½öíÏmjiŒ3E¶M±ßBßUR†œ898Z°$ `ÿÔΛÞew7øÛÊ„3K\•ëk=ƒë¼X([ïÑ öîHs[aŸ1ÍW1“DD7ÝíÔö•Wbß}0Q˜µyA { àh@`Â…óúDô*-Ÿ8ûüÔCÉÅlÑ|(]ÔËé<+rÎãš…*}¥2¶n󻎻þÒ+«¿úÍh½Û¬M[NiF‘M–Oš©B;Ë•bž_r•2â{} S’îPýêZÿô£•Új­ñ‡~+l»ÍèÒîF|ÙsãL·-»­P¦Ëúû™Ÿ ìâ#aP4ÜfŠéº™`†iêNÁ0ôÀ£D ”ÂLI€»„À]8ÿô…>½^}²º²ÊÜÔìBeÎHR_*'Ot[AÇm°³æm³ôÈôXªTPJ2Î#" §so`O `ùß—{DÔ{ý‡¯ož9wæ×+—Vøü£ói+)ÆÛ 1%•qÝ)cŠ3†aGpt 0°·ö9Ðæï6»D´>û¡sþÈ™œNÜÆÉÌpÔ`Æ#À! ÂtŸ˜Üëë¸ ‡MÆXƒG „À!0À@ 0Ð ôÿ:ÀÖIEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-4.5.png000066400000000000000000000054071430147706700257630ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢ ×IDATxÚíÝ{l•õà_½ ^Ådât8— È¦‹:T@ÚbOï=—•yCDA;.-”+½ƒ$t:§L'ˆ· ‹åR@.--EÝE³l.·sÉÜ&J÷–¹ÄL¦‘ÄÒçI¾9ïÉûžs’Ïùçýäý½ç„Àa/Ù8"\uÏ%áæ‡Ç„©+ÒÔ_Ž ôUG<0Ÿ“V¼xD¿É^1àÆG÷Ëšw¾  /ªÛµm‰pã—x^Þ’{ÞüywÌ^Ëœ¹:«pÖš¬+Ç—w”¤ )yv|˜ñtf(}>{hisNrâC£ONŸ8쨨,LªÞ§zGÑúò yK£ý“',5`c÷Œí ¶„ÊÍùavS, M~à½f<•æ®ÏI»eùذü­ÂÏþx]XÔUîŒ>ãš{G z›éO¤§Ee`øÂíEOÕ¶Å_­Ø”OõŽøª†Žä‹ºRGóQãžÔ»õ»¯-h-˜:á¾ËDÇ÷JÄqóZr¿ùá1G6î)>P"¦®L?3z¬˜ÕuÇÓãO™¹&kМµ±“§­L?úÚ¥£„ ½Íœ¦ØiUÛ ï_ÔU¼oñÞâýQAøw´½?ÚîþüD…boekÁ’èø¥wo/Zu÷‹…OGãšÒçsÎ,mνÀ¬5Y!:á¿0:¹ÿÝÁ ÂA¦§H|òéôlïoèH¾½~ÇÂíEëê;’^ü™²Qßžø rsþcQiH”®ËvÃO/?6Õ8BðÐK É Zóg6t&?ú? ÃWšúÝÉjvÅ·ÏßW2gmvÿ‚ê Cvå}ðM6ýÉÌÊš³‹kvÆ7ÊÂÐ3‹ºRûç®Ïiœº"}è5KG—Z|ñÁ~Æø&I6^|tyK^A]{âÍC\ö×ïN¾Qßž|µrS~ÝÌÕYÇ( ð V°ð¢0ùÑ+¼–Üá wµ.~éP_e(ɯç®Ï™8»)v´Â½@Ysöªm…7t¦ö5îIuÿo¾ö°'µ¯¬9§lúªÌcS–$@¯Qº.ûì»¶”,Ü^TMEÕ‹… jÛâ[zNò¿¦« ŸÔ¶%öÌ{!·túªŒþG ?VèÐ Nî}åêðÜ?o ¯wW…—»ç‡îî÷ì5±U«Ûü[]{â­è„ÿµh~߸'õá—- Ñëß™³.;sÊcãNš¶2#Ma€^¤gyЀ'†!9§†3bß ™e?#¦œ}DT†Ì}!ç‚ò yß_ÐZpNÕ¶Â% É|ÙžkvÅ3suÖðóo<+­jk¡À ·›ôÈØðÐׇGÿrSXöÚµá¶ÇÇUÛ_û韶}Ù%Iûî~±hãí«2NÍ*??MºpvÕá»ùƒÃ€‹O w>;þ‚ºöÄÖ¯rCCGòÝêEkf<•9d²Q nnY>öŒÚ]ñÕ‹»¾ð>…·kÛoFåàÃE]©žx~;:~KT\КÝô'3¾3åñqi–]*L8Üœ2ö”#æoÌ›?¬0Ô·'ß/ßW1Cn¼jká’ò–Ü)³›bç^½ä’V¾wsøÉsW†iO¤ G£KÎíW¹¹`^}Gò¯]zÔUÜ]±9¿òÇ÷]zÒm+ÒLüù˜cjv%´•顨æ"ÀálØU§9¯%/YÛ–xeÑ,KŠöý¶¼%·lú“'ßñÌxW ¯8-cP(kÎI«ÚVXÑЙüûÜÜüvÕÖÂûf7ÅK ú YM±Ñu퉽Ÿ- ©Õ¶%:çoÈ»õ–åcÖ¿”ôE“1öøŠÍùkvÅ_®Ùï\¸½hë][ JJŸÏ>ïú.ïßÚ]"$諦®H“sÌœµ±ï•5çœ9w}î·ozhL¿†Žd¸}UF¸lÆ9B€¾¬äWãÃý¯O©P±)?ÌZ §Ž$࿎x`¹ÿ0^†$% Fï%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-5.0.png000066400000000000000000000535211430147706700257570ustar00rootroot00000000000000‰PNG  IHDR T‰=»È pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/ IDATxœìÝyŒe×}'öß½ûöWûÖ[õÞÍ}‘iIå‘,KŽm 홌­À“ñž™Œñ8ùƒÈ$ñ$ƒ‰ƒÌDHgÆ ¯’-K–ìE‰¦ÈæªÞ·ª®ýU½}¹ë9'›l’Ýd³»«ÙõøýM°ªÞ»÷Ü‹*à~ß9¿ócp‡~öþliæ‘ýŽWDúîžœwÖΆí ß¹ðÿéâÝ=9ÀíöàÞ…À7„À7„À lŒù°Ç°!0Ààc°p‹à†à£¿é·Äú°pï¹QºxŸ¬™Œ0o;–CÀ¶†À)Z[†ˆHÚ}KZ‰$%L’ÚÊ(K±LE&Óñ¤PÂP"´± ³1D‚’8'‰›úÙºïeÖó®×É%‰÷Ú¥V®Tò3½|gz­Ö®ªNýˆˆH˸™À t²Oþ¯?›ï¼èö;¦ÞŽ »ÞIàƒA`€ÇJ˜4q´åÆv¹²XÖB[®”‡'w»NêEq®tKuZÝÍä Õ™b%Íæ‚QmdBÆmdÚn/U—ÆÏOì¼øXy¨¿ÛvŒv³Q·W‹¥pÚÏë¼JEö_nÆ‘Ó6†t9nG·Ò¨ýhÔæuùxÿø?ûù/Íu;±¯zfš¥˜Ë–3ÉÊB£G?,^¹&LÜ`àiÓ³¦v¿0ëåâJ!¿¼«4M„=§îåºÙ\2*-íJ‹%³á$½ÕâÉ 'ÚRŠl¡OX6ÙD å ÑDy¨v8 9ÐÚÚõóñX&1 G9¶£rD¥ %qÄëËv¤;’¼îy¾ûY×¥bų¤E™8¤U!MŽtöâÚÃAÇè5"Š>ä[ð&þ°p§|ù_ýÔ¿’}¸×(¥+ ¥f«VîEýœúñ/¼ü'gƒŸu]á%©ÝÍ£)!µC†ŒÒ"&2¶ɾz£é¶­õ g7Ë£áNÛ&÷VÆ“&§‰‰‰-[g,i,×5"âÍ?Â8¤¸¶–þ•í¨+‚­š2"®/«3ñbãk_}úxxûwàÖ`††å{G'vñox‡{£â _¯v/ÔWók…a>’&N(--s…pJZd3³!"Ò¼+ °`ÎÕh¶ F„¸õPmÙäXŽvˆh3Ó»ÚÇ™ÍÙ.9ÓÖ„°X+¢82½ŽËÝÍ~›ˆàCƒÀ#ê‹Ä²IæŠjœ9¥B¥134Ö[Ñ&µGùZ˨Ys˜µ´,ãdrªd;ÆâÝÛ"11߸ëí‘Äoÿ¾1DF“b¢(u­]'[áWMb½˜ ûíÛÀm@`€a;Æb&kóS{&)]Šfˆ6WþR&gôCZ“i·ìÕŒŸ–¼ŒÉÞ‘pp ­É!Ão„cH“!c •šÄ(S#A}f¶“ÄÔÚ5ùJc5y¥Q«ýµU Ç~íxŸ°ƒÜ``8.IË"É‚Þ\úsm`"f6’ˆHH¢Êp2M×üŒ!¥X‘‘òöþ6´2&Ž8`&ÒÊè^G7‚N:OZ¶Ujœ §.1s¯ÛŠ–« í?=¾þÜe:Fš®?'ð¡A`€t)V)¥ïªxÆ]Y Ñs\•s=—òÖÆ` ‘J)NDè†÷6§"²le¹>åØ8ÙLÞ~8ìǃŽùK껋tŒ°*Ü“``¥u·ã4…E C†™‰µâÄõtÎñÈãw.:2Dͺ\ ·FšL¾¹žñ,ûÖþ.Œ&ôE+‰Eè¸*ççU)“ã<‘´,G%rªÓH¿ÑW¥å]î6âÅ• ž?þÕãéí_=ÀÖ@`€á¤›Ím>¤MZkVDÆa&‘¦FYIf"­Y#’8ýÕ+Sϱf‹åÎt¿ëÔÃÀ´l'Íz¾*¹žÉ|ó³ ö2&çfTVm±ÑŠ£nK®4V“¿Ž‚î67èÅc¿ùõ­ºw £Œ6$cDÔiyËÕü%× ÊÆ(˲Øä ª¤”ˆû]¯ÖëfjýŽßÎøÝ’ŸëÙNœÏæÓ!Ë2. âÍÚ‡›¯ƒ6f³ÈYHcŠ#ÙmÖŠgVv¿2wÊ>ÓX^ùó×ÿðßž%Ô(À6ƒÀcí¢\'{ü™LÁ?×\Ÿ¸²¾v`içìs÷ç ÍÑ$"ÓëXK,„v\í–†z£ë÷I+õ)„q——/Öw•‡ÃÝRÇ2ôÖ¥)¥I,úB˲µËÄ,¤q\7Í%1GÕ•ÊÙµ…N´š‡VH¹)K#„ÐhYÀ½†Ntj”LÉlÎ ¸U™hÞ_éôjkù³Íš¿bI•õü¤¨”ˆ]Oå-›œwÇ"2¤‰I02†Mr/ ­fÔ·:ýnfÃr¤) uö¨DDíVq~}åÐKíæ}K†Ù©0«ÆÒ¹>2ãŸssñ”m+ŸÌfã6ÛV¹±©æCåaÓDô“TŽ“æ…$ûÚ÷M& E? D[¥F KÛ–†H‹(²[‚YÄqf#ŽÊ«§_ý±²‰™Im¥´£‰ˆ„1ïžRDF§˜j€m ÆÊ‚lËç—ÎÜhe´~ÈõLVÃoT' ×5¾ë)ÿï3šLšR…*m7åz§•YF‹v«¼èçëyaq}mæôòÂÃç˜ ÉÕé¿Ç`„ 4 ¥‰ú"íw”tј ¶%™ ¯ÐÍmT½•¨ï›\ÉW{–­ü°/º™l2”ÉêÂæ–©o1ÆJºë)ßqz»T"CM-Åì„ÚÈÔ¶—(—¾÷Z#AÄšÓ4qm)î7Væ,G®…­õv«ÙªnéÅlûgv¾üÙlÞ̦JSÐõ×êmnKI~±’Û®q¯·.HHfË&«4D%Ëf‹…d.TÔ°JÓFYêŠuÁ¶ëžN‡ƒ«ïÓÚR)§iO˜$ÔqPïFAs#M‚z\[Ù¸|î™%Z?Ù½‹·àŽC`€!ÈX–•29‚(_èV´&…f|“’äÞkY,-Ûd¯~…&  tjÒvÇ[O“JK¥¥ˆ‰ˆ qÔÛˆ[«¯¯%q°B­õuR: …é[+ª?7÷Õ”ˆÒ»pÉ[Æå“ÖJe‚¯dòfÖË+¤±…$‚,ïÓ‰˜7›1C¤5+Û2NZžßûZ³vß"“0D‚Ò¤+zµK…ç¿úlwõÂúݸ6€  Œâ°ñ-ÛäŒ&"Æq¯cm¨”t6¯*,Í~ßMˆnxUÄ‚Œl6¼Õf£°¸±´çR§ýÀÂÛ^ÌBY™²·û‰|8ê¬,´k‹Õ—5&'qÔð¯½ö­ÞÖ_-ÀÝÀcx<-ùyYv3ì IÔkÛëõ o¡<LaÈß ‘š1¤–ç†~T[;|Š--¢0ÄA¡'…øíïÐdÛÙcû²Iyê~¯»sv´Õšy¸t–ewåd#?ùȹÎò‰ ¢7g5ôÖ^9ÀÖA`€Q_1-rGžï÷¸a;A^JåUF‚™lZÖÚðÚböd¡g²ªtíNIF³6Zª8*ÕC«*•Š™™¤"AÌ×{ÞW:!´IG}[wŒm{ÌóGµµ»棠8¶ÿS ví!£”•´k€Ã“Õçÿ¿µ»zCîåIÊM´÷–Çôa!•kÛd[69ÄD½¦µÖkÙͰﶲ¹þ¨Öœ ¡4µ‚µ/uêÓËÍæž*2òj§fóæ®Ë˜TÇI+±í,K骔ڰœÄvK¥$¨ ‡õ…(ê®×Ã~«)dÞ»pg!0ÀÀ°ma•†ãÉ\+ÆÓæó¾!Ê—Ôh®Ðff"6œÄ”XYí¦^íw+µBemÔñúîÚòCsF[ﻄH²mdqZØ…ÉLи’4/?®TÏh•ˆ¤V :KªM´b-)®I°MÝp›I€íæ¾Ï><èy-é(«´64vêpЫl¤éX_ÜZTxËñ›Íd†vNù£»´’Æ.wè@«½øbçΜàîÁ  Œ]G{…œ¸ol*zÈ/´¦”²2¸™`˜È°Ò××FOuÚcK½v©ÙhŒ6æÎúÙ4)‡|‡?ýÒ&GÚÂÉä3*é±§"ïNànA`€1û`¼köþ‹_Ì•Åìÿ‹¥ùÝFÏ›^×­n¬Œ¾tîäOgºù"çNÐ[ýÛ¶,Ìæ½Š„`&A,„–,z&…§y€÷€‡%Úð59ÁP·m­Ç‡o‹†È2½wÓÔé3÷lº¦ë3¼f``ÔDcjÖ^µ.«”“…K3ß+V3¥rg·åW+VAÏ©ÍzcuüÕµ•‡Æ£6ؽàF``œy.·Ô‹žø}¿\N•%q!’œHiwl¡ZJ' ûãmMR«ÄÑL–ÆÔÀ{C`€'ÂDáP_„S-2Ú0 J•§’4…ÁT‡Y³š•bMDÄÌLôVŸ6!˜‰¶°þ`B`€±ûh³L~3O4AÊhöÜuhd~<“o—˜ˆÚÊzmcvuvÿ G˜™ƒ^¶Ón 5¤ÐBÈXv;£-•d–(¼F·îD…Rߟ|~6WZœŸjôsѰÚ%" ûVóÕ¦0={îÓ¾ŸTˆDª”Œ˜ 3§±ì7…¹¹ó÷?ßÚØ»fŒ£ÞÆÔÁhxç}ûù±ý¨ãª¬mWH&óÆ|e§¹Ù缾î/ÐHŸJåp§ñ›e Æ7äú;+ÃõCW.Ì¿xúÓÏã!4ÀG ÛѶm¥~š¶lCÄlŒykËTf¦‰©ÖÃÕ•ük+W¦^pì%Ëvâ’VvDz¥µ‘ÒJ²l4—‡W÷Úvýõ ˜i±¥YƒúhøHB`€‘á\aXdóT’_§¿‚6d¤ª‹϶ë#«¹R/ßïù=?S*5v¸~Øh2ý~¦5>}r6ŽWšÕµÙU”Âãš>l 00Öæ­Úè o䊴Wˆë7c‹ú:^[9éç—F ¥I!œ$æHËËË£½ŽKŽ%I–G‚=ÉôFG¥2Z™åä‹_ü1Š¡à£FiXg™-;ŽL"„›Û¤¾1"%Ò´ïÈ©Ÿòsñxšp´º=m9I^ Z‘VD,%Y‘NÜ^×´¤UŸ8úè}¾QŸ[˜ûÄ)A‚´6o†!°\  K²ð2ìxY7šap3”Ùdå3Ò2.3±ãhgrWï¨JNSR~Ž"b"C–ENÆW¥|±Wé4•ßMR(¼Þê´­x™–'œDªØOÂ0±‘Á ŒK§­U·˜=™É…»2Ù¤d®³€HZ$‰Œ¼ú5 æŒo²o|uÍ+™lÛ¡b·-a¤ÔøäÊcŽÝ+5ÖVÏŽL-ΗÒRgêÕ™3 —>›Å€¥[|™w Œ$HÈÍD9!µ{'Š ˜‰X’ÈUÙv”Ç‚™ÖÞb¥³«\I&¥%LöúB¥VÍâÌÎj»>ÓØì(®Ñ0``Lìâbe8ž²lrè–' AÂÏRV2Rša!RaŒLkUk9Ž)uݨ°çÀ™7«s¶½~12a—‚(îa¶7• ]p}*K)äõ–#]O·-Ddüœ. qã§{CDÌĶC63S’ɦCÙ}åâC/µ–Õå4è¢lK 00TJJk‘l†…ÍĦƱÙÜ0É1"aa,æÍ:†^×]kTË—*ãÙl4’ÍÅc,ˆÞ+pCdYdgóÆNb“ˆH–M™\^W”JÒ$¦(ˆ¬f+&u²P(¬_yåìËK[î<ÕEY¯Œ»Ó”="NÓÔëÖÄ"ÎiMJk¥)§LNèe£J&ŒårºÐëjçÄ3?ýûž·‘{ü©¿ùUi³ô2iéýÎÇLd;lçKf˜Ù6¤»mnE¡Õ“ÒÈ\©39³§!Ò‰ö_<ó{'’»qî4ù’òßøDvtíffëQ¤UØiÝé• _êú¹•¡^'ߟ:{Øñ2KíÆŽóA˜ëLœšmÕ¦—/œ<ú§NfcxçÞ•'ýœ¾©Ð åæR&¥HI©<ËVBi ¥îî´OõµªÕÝú«Ø 00r%Ê+áŽ|)žÕ#†´ªSšµ²8úƒ…ÞôjgÃÞòç=¿æ÷úñåV=ßkµ¦ù¹ñl®:ÕÜ88×hŽ®í,/î½xz×_N6v•†Z]OçoæüR²ÌdÉscn°6éêÙôßÿÑÊÞÏïý½ W\C'O^è—~û§ÿΈ¥~~m÷Ë—åÿÜïý‡þÍúmÞ€;FªŒŽcÙ׊ óÖ ¥7žç™µm„­I³!qý§ü(œh_<}ðÏ2ùöJœ°Õ^­®¹¤Ó|Ònæb""!˜u²‘Æ¡W7Dd i­I A¶x.Ѿq!ºÞ÷‡g¼_¨Œ‹_Ê©µ*ÅŸ<ñå'‚G¿46Ù­™xçúCK˜u€ •’êÔeWý\Zt\ã3Š#lT˯/]ÞÿB§9Ñ‚™èúOõiœI.ýÉèễ¹º|I“‚µ6&[¸0´kÿß~²2R},)í÷¼¥æzù\®Ô›Èæ»Ó¶­óBÞ ¤‚ˆ¾ô[?½G$V6ÔúâמþZ¿±ªÿ$›×v§m–â˜Ö÷=9ö¥BÉúç~V7ϵŸýGDt™n4`€-†ÀÃó_Žg„%3ë+™ Ù¼*¥‰_«UGÏ,Î9Ýoïh "zŸì ™Í×½Ek6 쩯ìÙ±çì¹BsVHc)et¿ëmœzå‰g,KÐÐøüÔØäåû‡Ç7r3”yçê¨/>ý…g¸¿aÙ¼§¶ýoO}婯ÿ_ÿô¿NDß$¢„ ñ?ú?¿tÄÏó¾$á¾±¢=MLO#0À‡O?ñK“ —&sv&zÅñÃJ»V\I’b«Ýœ\k·w×$»Fˆ”ß7,\‡Öl2¹jnöÐw?19S}Ìó£Q!˜ 11ù¹pxzö¥=,£…2u™HDEýu“H¿yRÇÑ“ÙÝïx|¨±®Çν޹šL’Í+!Óú7ñ¿__2' Ù­¦›;K¿~ ƒ¸C`»ãû~î+G|,û÷òÃÁ‘N«Üýl×qúùF­4ßïíhØRQúÞ•ÉoК&I‚‘$fsùRûqØÏ¶ˆR‡™ß¬S0Ä”ñ£ÑÝû~ÂËè, #… ©i£¹×X±»Woâ𙥋æ×Œ2Ù°E?\>q"xçŽýú×.Óæ2$€lkÙ]_;ò ïKiýJšR²² Nn¬:ÙIÅr—úï\Zô^´f“ñ«9?×ñ“8õ;…@“e¼Lßq2=§Ó_©.·^šÙ³òB¾•?lÇdlGeÞy<Ë"‘É›‘á&õ{Çž>Þ%¢ã„šØ&`Ûšž~"“ÙÿèþÜÐùûœL½ì§ã3­å‘W‡[ñ µU{.Y×4•ZJ#Þs9k. Ÿ›ÙýÒÇF'‡¢Èmt[ÅÅnÛiû…îH¥Ü›rüpÄuÓÒµaáý&!ø];2!,À¶ÀÛ–{øã³™ÑÊþLÎÊ alÛ1žë…9c‚=Ãc§f.¯®.ŸimyçùfuïJj²Éæ\o%ä¡g._êít=Ïs °ýìÝëf&ŽîÏƦ]?B(›Ø]“’Èèæjòï^ún÷O>þyó¯F¦‚_l×ÎÌ©ØMbå&*ÉÇoõX ê÷Ç;¯üà'þãðÄü®l¶3G^·×-ol¬íZ´œXjÅÜmU:ŽÛ·Ç§ÎîÙ{äÔÏdóñè»»J_ƒ‰nÔ `»@`€í†÷ïù¹Ý^qbßôÞ•éɯ>êzý±4¶úR—¥‘FŠB§¶xy|dårö¡(Z+k$3{ÏþÔ䮋O67 —ΟúÌ·£`ôÍÝ‹´rÓõ•}+ÖPËõ;èŒv YZ+ùfáƒÌa¿\¹\:ÉÌfç¾3Ÿñ|UR»–¥|æ·ÒƒVœ¨X†i¤B#Bl[7ìF p/šzüïåÇ}$74=>:}iÚvbocuêõ84ÝL6ld£V:9þз7jŸX˽¾¾2z&諺ãö³¾3óf0`¢8A­ê_Z÷^j­˜ïyæõ•ó¾Ü*Ì0Àö±w¯[™zl¶<=ce é¥3O¾Æl½ª•£§gŸiYÉ8ñ:—Î=úB»¶{có^ÑzõàòÚêáe!ôónf#ÇCdË\Ý5‰Y³k7òå‘…Cǿ׮ïžgïYÚÌdéNggÍmt2#c«‡’DôOgÉ0‘!r=•«Œôw÷êÎÉKgìð®Ü€-€Ø6ö?üË;3•}f*3c„`°”ZDýbg}uÇ¥¥…£çãþpOÈØÚsð;ïÞ÷ÃÇg½ôc…Ò|%莭GÁXO CD†4½Q`„é´§jA¯²öÇZýÞd[)³ó2 "b2”!Z™Œº:Á’ã¤tZÅEöCæÀ#§¥%B×ñtÆPB–¥¾÷ê_œœ»ûw àöa†¶…]3îM1 IDAT~±äVvÌ Ï™X½½•¦4Í':ÎÅB0+Ãff÷÷ŽîÚ{î3?j7ý+æðjù±š‰ˆ,»çx^=Æ¥^åcD½0³÷ÅGªß.®oÔv/ÆA¥/ˆ(Չȯ Yr^ô:ãõ ?Ü3ÚV”dÒæÆÁU£øånï|#èŽWsùVqfï¹§ ¥pš´Ñ Ÿ`C`€mAe§}ieÊ–åk2×kÀ¦Iˆ«uÇýr«º<ñ’!2Ks¼Únî¬m‰˜xöÐw~|z÷•'ÏŸ<ðõ+—ž|Íuj™£<÷39Ua"c é°²Ýndç¤mì ï6‹åî?u;ÞòÒÜîïÏ_xèTôÙ2ÜíìÙèuwÕŒ¶t­ªyueßÜØø…Ý*YÕ(¢ÍÉ tp€m¶…ŒkóÍ® "åõµç×ל¿Ñk¤PvØÍ^g¢j´ÔÆøIÐϬz~·(,ã0ùùtØÏ·†‰ˆŒ!z£¤™ÊC½½ÿôh6WŸ¼rñȉng÷ºNó‰1z3a¢ÞTûÊÅ©WSÊîʹòŽûþ~éÊë¿ß¸ÍÛpס†¶…¡ÝOìÜè./?â߉ê›ÍÊZscäR³v`…Œ¥•±tš„½‘ñÕ#–mÜw¾žß¶¨ˆÉ²›/ug<¿–o×ýå ˜l‘1Ì,øÚÉ!RQÛB®®_<^¿íÜe˜a€¤¨?Þ {“)• "’¤„çu × 7bÛäŒNt»îߺ­Ú… íVi½×-5ûÝJ;IŠA’”BÁDÄÒ’®D8€m >’„0LôFC5Nض狖Ó/q³Ç0†È²´Wé) õöi½G÷W'~xáä'¾OŠÈöÛ®mi7•¨_€m馎–±Míi¬,<ør¿g5é®yb&’Â8¶æ,K{iRhõûÓmi·Ý±‰ç OžŸNúñõ*µîy˜a ÍFlQ¢½±R~=—ßøÀ­P•2Z)JÓÔ‹ÈUŠH Aë«/ôëa˜îì9ú¥ßñ5)ID469W˜Þ³8T¨Ðw÷—ÿ¸¶5WpûˆˆXs6¿Xv3qøƒ¯b±ÙZba)KÈX¤I>ŽÓ\DžþXï0éô°af“H½ãðÒ§ŠeçPk½ÿ?<õ•§þüøW£4Ü“°$ €ˆl«ëNïzùÑÑ©ÖýÌüïBbË!'ãë\©´1;81½öqêöZi#ìE£¦ÓáG†;+'VPë÷,I‚<Á¡mÙ©«RY¶ò™oíÃ~£É#’ҙܵx( W:‹——Ÿ½xúcÏKGšññÓ{F&.?’-t§3Y]’RÈ]‡ÜÏ1±oÈúk'Çæ‰NÜ᫸= ð‘—Æ•àG/ýÌ7Úõsã»æ®?`ÙÆù ÇaAœÍ§ÃDDZ#D’›˜š*ã·Æ‡Eq¨½ß¶UŽˆ bbâ$æ8 õŸ6)|ñ䱿ŒïüÕÜ""í§sž|muyßÜá‡þ¦7µkíI!n­ÆG+ÒJÃL"“£\&×|„ !™hsó¥7§0F¼Ù=QT8NÔ½CWpÇ è¶… J ±ÙÒægBŽÃñÎ¥3?Óï8k·zÄ–-„ã )-fi±‚¯[zázä—GèWÙ¦C„¿G¸á¶…¡‘ÔÉz9âD*%ïHa°¡ThÍFóÛ÷Q zcæFù™[«®f&f¾¹] ¥ µ\W¶‰ÏpÏÁ’$¸ç}ùéÏUÆö®ÿ‚“ ¾Üimœ[š»ÿd»=Þ–l™ÛzÆæ†—+†neÃ4)…d„!"b6&NíþÿûY_JЪòÊÝ:ÀmUážöŧ¿XšÜgýÊØë_%»‹•Ú¾|ii( ìfmºÎ,‰HÓÍ~¢•emdƧ_<<1õê£qGQ0Õ ’†H´"9¶ãÔýÅR}ÀãÞŠVU]\]ŒŸ}püáÚ©S§¶tÙÀ…¸§±ä ןñóT2†ÈrŒ;<Ö|ÀuP˜Ùuî|³Q^ÝXÛ±ÐnÎ4;ê¦KJHKËn{t>Œ¦× Yzó|¡›zeßðHãÐÝ DD£;ìG;õô§ªî"jßsÜ,Ì0À=í¾Ï-ŽŠÏåKbïÕï± áùq%_lÏVFjû&vÌ=?•ÄÜî÷K}ËN¤àT’Ô‚ˆÈÍLâmŸÜkã§ÝÎtµ¶q`! 'z̆¤Órgv=ûàÞÃg¾Í'£wúZÌfMÄ»Ú<Øç299›979;;wá‡n:øl5Ì0À½ïºe LB’p¬4ïzIÞó‚ ?ûìL½Ð°,íhÍ*Iì^¿›¯†}¯³²ðÈz±Ž›ûš’&M³‰euœŒ_sË•¹É‰çkÜï¸:{'‡o ‘V:ÞXV—)_¶f„$Ÿ™ˆ  "­¥«^Y½‚%IpOA`€íÍb’–‘ÅJ´ƒ(ša"6onbÚÐA;íÖÌR§5Ö×ì æÚ …½GŸyª2ÒÛY(3Ò2óß9,M(^¹˜|·º˜|/ “Ní+<\å'¤46ÒRÒt³JßU,_üêßw}ߪó§‘n¦š_{#,mÎ~¼9“ðÍßþ›“[un€Û…Æm0ð\/©Øv/CV,Hßú7ÂTWö]IG[ÕCÚ¢|YÉð¥ßúé=[s€­ƒxJs"ziöÀw3†ÌÚ•GNÁhwó§å°ßÍTý\·B[ =ŸJ•Qù ©²_øüûùÜj®wìØ±7wBú¯~ç§47”ÎX¥ùcOC ÜS0ÃOæááê>ÛüB©9áå—†˜cID¤R[µåKZsú~ǹUÌD,H¹6ÿjq‡þù×¢×ük~l•Çüßšðÿ19ÝâVàVa†že‘=2Ùz w¾°ö£Ÿýf âj“òÂ¥û_ŸY}ÜÏ%#[Qül ‘Ÿ§a/+FŒq^Í»ÃÏ|á7g3i=]þÖï}««âÔï7£—×ÏG;}n€Û…À Ò&kz÷òdzÅo–.ž|ì™FmOÕpÊž·š¿¼Ã²”óΆjw3±”‚†&ÜÿòóÿÍÈ2ßo›“…™Ï}ghRíwÕ>öÕã[6Ëp«à#A~N•ÝÌú þ¾wúµÌ×ÒHÓôž×îÏxõqÛ59¢­ÙZõZ~ž‡29û)b"/k°3¹ÏäxÚË8;ŸúòSÞñcÇ»[=€>2Œ!2ÆŸmï¹ï‘¿üÅ(ýá±Þþ$6 ³‘ï„;3†Íÿ!r\¶*£<ËL,,ïHùˆëÓ1B`€{ |¤A"_2e¢^Y)mÈ9y!¶r9Òµ6Ïc®ýš‰ˆ29¹gd‚¼»3 €›‡À)ÌWAY–¸K1aS‹ í†JœvšZ}fÚ°bbÓ®‡í(Ôws87`«1QØ—­å…™gVfÏDýb/ ²!‘&×[,ŽÏï‰{*mÕ{w5ÀÜ €­bÈhÍ©R¤Ö—ÇNœýñ¿£É®°")X³QRG³Ñ¬YTzá¾lÚÅ’$¸ç 0À¶’¦¤ÒDô„Fm³0–ÆÞŠþ ·CkJšõüù¥¹™»íJ´¥&gNï+|w— JBh»ß÷j+Wö¾R]yàru>=®žA¸ç 0À=Ù°Ö¬‚žl47²—çw¿Ä䇹|sÈÍôŠcSke Áô]Øõú Qª(ÑŠSË6.Rk+¥—Î|ÞͦîÎ}g+U½LZ‚äÕaVL—<¯;Ùk—þ vÑZè…ú0À=îiiœ¤qèuëÙó—Ïíûn½º{©×Ÿn±‘šˆ.¤J˜#½»sï…/8nZÌÄâî&Cd´bGEì´[Ù+A×ߨ}èô'³Ùöi무XÆuãHlhÍFZœz¼¼¾d?Û\©¾µº—£î2µsá‰Ü]žm`&v\ãIË8ë+Þ©$´z3³kOº½¶ùJé¿UI’W©³ÑjZëIÏeËŠJµUgõµ¿´æçOü‡:Ñ…è® à@`€{Ú±¯RzðÈý¥®f =4úêN)»ÙêÒƒçÒt¤/„á ?ѽpjúGFÇBÊ?vvÌ^)9žÎ]Óî`Ë)EisýbŒÔS»i­Lu1=¿±_¸ü|ãÏ{®~÷Fpçܕ,7aï9<¶æ`ûÉGðÔÐØÂiât´ò;ý ÒWšÉÍ´½\¾žó2}—LË)×w8nZ »ÔM¥”¶›ÖšÖ¬†FÃݶk2‚ÉÊÅÐФýɱY{õÿùü‹we0wfàÞ¶ø\ðÀ'+Ò¸;™Í±oˆzÙ=—Z?Z_¿øšQ"ÎZ™lwL+eu»¹• gµ…ÔžmkOHa6ÌÂ033‘1w6H° Q(¥ãÒ"ADL†HHB’#,ãHË”ˆH:³À¶sOmE p#üâ#Õ±ÊtªR³ûpnïĬû_ûYó“ÌÄIâ4âȯj-2‰×m[fmü‚ãZäeƒ‚ZJ+θ^P±Ý¸àgƒ ÛÖº [±jm¨¾Òú_ÿÌ_üÅ[}>€; ¶¥ðÛŸÿ¸%GQ‹±BO6:Íɪ´j…=_}‚…±/~®ºüÐe•zŠˆÈp,üüzÞ϶²S;Oݹ÷ÊglGg·~¤†6VÕñ¹×£_ÿOÿâ/°, ¶Ô0À¶¤ îÚÙ3<{éEsY%»{wöè ?65SýX±MŽL¬ìw2¢Ó.¯㥖Eœ/Ÿ™èw‡[ëk.KnÆ…Jk§”ÆÞÊq23 !& ‰ <³óõ‹{±»•ç¸Ó`[Z?µ®Z矆÷}~òOÏ}ñàÃ/þÌèxó¨ë™œÆrÜ4§bÕëÓ“~¥Ï‚Ù–Ìþ£ßý¬¶š¥‘Ñåý¶«soëÍôF­´!­Ymn›úAǧ5éͬÈp˜FœXç…—¿~zùŽÝ€»EϰmÍþÝ‘‰}âÈôl÷¡ÑñîAbñæÏ”b§N—u,ÙJ¤N…™\š™˜éÜ7>ýüýaàÔü\:,1‘!£ )ÍZ¥¤T*{iⴉ✟UEióÖ†Œ1ÔnfZµüœÒ^¿z™/4ëÿÏw~÷«'èŸlÁØB °]q~÷'¦&vm<èçú#,˜Ì5}êë™ Q ƒý÷=ÿÔüÅäÙÕ+{W'wÎ=n;*Ï‚ØÍ„ycˆz»ÚïåâÐo†¡ÛŽB£ûíL» Õ?ðÜ—ó%]¹Ù©”ãnÛ[ëvüåõåÙWæ.>xŽ(›v×.Ýú¹úæþIÛ lK##G²ÙJyT“VËïê’ìûª”/V'7-tÛsKº:Žò7;Do®0ê4ÅKçö}'¬XÚ$Ó(ÓowŠ-?ÓÉM︲?WP7Œ1Ômå.~í¾oÕÖö-ÆQ9¶ ÁÌBhvuŠ `[B`€m)r [äm¬Zì÷/®æKÝ=|M£6¿11#ÌÈÄ•‡F'ñüxÄ‘C¬5%ÌÚš˜š{ÔvS?WPCDd´’±Z +ÍZ–qof,ÌDAÏ­Î_šýÁêŸcÖlYæ)«ƒò¶à.l=Ø–LN1YDÊØŠ´xwC4³¹þ§ß-Ï'-É¢UË]è´Jó,”µ¾:2…ùîèäŃ;gW>叿-VÓ>c( íV½:ºF,ŒJ¼ÿ»¶Ø–²©+ÒN 'ï?±/[lí`ÁôÎ ^Ç®n¬å.#’n{taáÒc¯ 6\¨¬ UF¦w\ú±ÒPç€eßÜL "K*/WZê¶7êd2©1Žº­cÜ#`[²Â´Û©ÍŸ® ¯~ƶƒ~GE13Qªdt «µêä)ÜtÇž— ¯îËæÛ;2Ùh\Ê[ÜV˜‰È2†H+2AÏ©vºn5›­eü…~o¶F$‘¾:Ô/À¶…ÀÛÒââsÁW~s¸84jíwË1ï˜]0†¨P§½Kùé=Õ–d[vTt\•e~ûŽJ7Kkc‚>õ£¾¿Ümg×ÒÄ¢([o6¦–Úc5!S™j'5ÆVLï^%°!0À¶ôË¿ó³O9ÿ2_â—ÉëÄžŸ–lKûäÇòeþ¬ã]?,\µù³;°"ÈE·~îõÿa’ìh’ZŶrlG]Säl`° 0À¶Äl˜™¶t7¢4¡Äbi‹ˆMªœNПi]ŠKŽà#¶#6ÚØ[UJ¼¹üH6»]Ùôýx(î¸-!Í=ô=•–B!4Š˜à#¶)#¶"0C‡&n5Ü!•m;B,Î ¿Þ¨í¼°¾üØE! Â|¤ Ál;Gž:’?_nÖô‹iBw´ßAQÔiɰ¯£„ÂX^Fy+ Ÿ'c¡>>r`Û9yüd/íåÿ`þdü+sñ±(0D›½n—åã¸*§\8óà7ÎÂêâìë–Œºø(ºµÆU²SÇO©ýÕ¹ù‹ÇkßœýäD›IŒþäñíÅ`f"ŽCÖgNG¡ÝX]|òÔmã^M©^óòúÅãõÛÀ‡¶3Óï÷ã…Ëù×…ã|_Jz•Xäl‡§„¼ÕúcÒ„Ò(”½(ÈÔª+OüÈèLzË#dæ´WS)lS(z†moùĉþŸ —‰èåòÕ/Mº>?j;äÞJƒ6ffÏ'·"Ò CK÷¯,è“·»ÔÉfm§(–€m 5 08¾üe™+Ѩe‘;ÕÉZôL¯ß]i¯æïØø¶!¿øXø /ÃZ6Yt‰™É²ÙÊ—ÂÑl®^4”âï>²°$ ÂÏÿ/_Ø¿û¨óßåËü1!é6–ÿŠ“.Í•^ÛX=úr»5³¦0 Šà# ‚ss\~ȲIÞJí‘1¤Û ¾±Q:ߪÌ×ÖïŸgò´dl§ ] 0:ëñ"¯jˆw~Ð÷CFkNµì…³¯>ñgõêîµD¹©-%Ývï¾ÅQ>¯~íäë>õàe­ÄcâT¨”ãêJùåµ¥=¯Öª;—º­u’D¶4X„@ 0 æ^™k†á#‹®O©ãÞÌﵡ$–Áò•Ñœ}ýï|;ê õµ‘Z³EsîV`Ë!0ÀÀhUéL6gªŽÇ“ïõП¦F…}wmeaê‡WÎ?úbŒô‰ÉƬÀ;!0ÀÀX½]ßᮓáɽF¥F/Ï=³¼¸ÿ•êÒƒóFÛJˆ- âv[¿|x``‡Ü!”c&ºÞNIƪ. =æµO}§ßÝÑ”Òóé=Z0=Ñž?ÿ‚`ª-¥B36€›€‡&WNwÎjmÖ ]oP·“›ë‡ãMÒŒ­Nnf``ŒÌdÆ™¸õ©k ±ë‘Ïâ­)׋*Ò ìsŒÛ  !®­%ß´¤<%¤Æ¦å?Íäøþ«}²ùh¢P\mÕfêDÚ7ÜksœúnúÂëþl“ˆÌW~÷¿XÚ›ùÍB™•Y–Årbúâ£õõ½ ýÎdç¶»8|È{wÊÜ sqõü•ðêׯüŹ‹þðЉéÞ'¥-F™ˆ\?j6¬¹^k¬Fdm}-3ŽºN‚æ¥sSßòóÜa(z†A¦Rr\ýÿ·wg1’]÷}ÇÿçÜ­öÞ·éY{6‡.’HK´dÚRÇŠ”@àrò 0'#yO A<$€$ŒDŽeJ EKE‰¤¸/³pöîé鵪ºöå.çäaH𔨳VuMw?À35Uÿû¿ƒ¾@ýælF9.dp]äsk³ÚëºüøÜߘ°£rÎX·­ccnœý¬”’™ýëår¥ÂVNI²&á¼°-°£½øâõç»M}.‰%þðµÜP439sæ¸û‰“úý(ø}®ÐìhëÏŸnœcâ'«‹é·“X…""Z‹›Z>dšˆH*3?2:ñÒa­óAêì¤ö*©Áv pÿ 0`Ç»ðîùù G~v½Ê‡¯iÇ|ô³Ÿ„©°Z™[6f¢mM*;³_”a €°K¬->|eáòŸ¶[nÙZ+Za1îú±ˆHO5£îdÓ˜T”ØBw£t|ÑØNïv³Ÿvî4ÀöÀ9 ØñÇ(ÑéøÜ;_ý™–¿pócŹūÇßèt3áG»'étº’iÖ÷oˆˆ(YÍ(§éÛd¢5ÀÖŽÀ€]C‹–Ëï?õŠIÚ¯…ÑxK«§=+ëÉ©·M^?vö©ï›8‰L´Å®§ÅÖW¨fÓ…V>ȾXëÄ&Ö&вín3×j´FQg¸#Žˆ¶®4ë'VDDÄj+"bÅ7bc­ÝÕlï«*åY-Z¶òÀ7€A#0`Ûsƒ¬ò³#*(L[›(39rabÏ¡s¬í´Žµ* RÝáüpó çÙ ÝFØM­×«…ÅËï?òrµ¼gÃeDò‘Öö£±%¾Qʵ&™n(I´²-×Z±ÊÉGFB­m*ä}lv cµõýÅÂìÜKOå ­™°;´²|}ß¹òÊÜ¢¬Í8óÙ|¡¹Çõ¢Tn¨1—n©ìvýj³–).\9öv¥xòº÷¯‡¬¶"¹X©P+ihk½!ÁÞÙ9 ÖM˜Ô¶%v#bc•Äʬ\;þεpèåÒLùø©}1J·+ÅãËï¿=ûœ´}׉ܱ‰«{G'—ŽerÏoͬ<8:Y:Q^?wîÒ™Ç_êt÷WLì%NORâšÄŽvGDI¬µJ%bo¯3Ë!p`#0`Ûë¶VZ²®Êa½""Iec!¸nThµ½¢ÎwrÏEÆóü´kâd<”¶Ó´ÖÚò’µuÖڮ봃Gžüá†[3™å©É=Ï>Z-.•V§/¬¯î]hÔæJqœŠ´Ö’Ê, ¦‹Å I4Ñb=Øézwš-0 åË¿»¶/»pF•—ÞSå•÷ôÆòi§¼tZo,Ÿ~%õäk…êµ\P˜q½´V*QZ[¥•›¤’°“ £0ßm5Üe‘¨vÝZ~¨yph¤}`l²x"WX_Mg6‚°“î$±%&Ým7öVE´(%ÊŠh¥>í—Ña»"a»r©ôþOJƒþ·¸SŒ0`øcóúë›üWÿëÿYä«ß±Ÿþ·F´%VÛâÊã ¥Õ®ï9øÂ#žß R«âl>ÏäVÆ<¿1Ö¬ûíòúãó©t;5½çµC•ÒX¥RtדN½ä¸Þ&” +IÜÙàÄh°-°k(ÕqŒÕö‹š?bDDK·=V¾tnì{qìG6rc퇞X«ZÍázØn)‰µ 3ß{âØ©ÎDm=zó—ß_ü÷çªÎnz]]·#B`Ûø@býdõú—ÕVkù`'¤³ö”Š”ãFŽˆQÕò¾µññë˳ÎÑL§0ãÙÊÕç*ƒí ? Ø5¬õ7ÝÛÔõËé±Éó{=×:íÖhµÕ©·[ãM±‰5FÙTºœÞûêƒÚ‹½v=Õè´"µ¾’?“JÕ–V.U¯oél!v‘MNiVF¥3ËÃûŸ{2›ëLµ›þFqeòü•‹_|ÕÆC]­•2ÆÃ0×Ê®OKÆëj'ˆK«ûÞ鶪Wݤ˜Úò[Ø"Àj[¯œ\~óÓÿ'_Xî´r-Ñ"&ÎF7F$ŒÄQ6\šêìÒ¼|]êaKdIDAT´VAk¥:••Jqiù6OdØ~ À¢x¼Y^ŸjŠÜ8ÌYkû‰L¿úgQV)G™¡}Ù­ë`k€hk•èøö? ´µJ|)ÀŽ¥ݰiÇñ\˜Àv,p·ŒˆÖ)í¦³ Ý@?€»fDûõ‚\*7ýXaÐÝô¸Z;FkÇ™=F`;¸GV9¾—Ý“tý@`î…ÕÖjí§r#°#€»dŒ²"m7®¹Ù4;%€‰s€;¦%I”É\=|üµÏÓÎ]x5¨ÈøS¯JñçõAwÐKàv)£D ‚Jfß¡7OŽM.ž[i´ñ3¾Î¾*NÖ ºE€^#07£ŒJçV ãçA+7±gý„çÅ)/èŒ5+áó—ßnüÉŸý‹ëÝ*@?€MX‰õÄÔéÙ£§^þz¡Ðٗĺ›Î$#I"¦Q5?zý¯ÖþÙsÿîÅ…A÷ ÐOìxa[~mª1ÊÆV[k«QF9ŽÕòÑ[µx~äŒOÏŸh%A’QJ$îH­¸¬AX»;Ú·ÿÓ×þf½|ýK¥òÕn¬;Z¬#¤‹ÙÃGÞy ›­4êCÅFu´\Z?¸j“ü©E*V…Ñ‹ÓãÅ9QÖ3Fl»•,.žo¼1¨{ØJΠúé3_;ùíýDÿ(?ZÊ{^ÙM§Ör‡xõñÃ'ßzº0´z,M˜Í÷ú¹Ññ…érqtÑ$©xjö̓'N½úõáÑæ­?öœXQùQU»úBãÅz½ êÞ¶;Ú#¿wò7³÷Á‘ñæ‘é½+ϸþèðXùAcŒ½vùø/Ÿê•Z¥°¤×‡G'6NMÎ,L’FçÄ#oÿ½üpû v>ùŒ(%ÊóUÖqœCãά¿ù—çÞÔ½lv´ìÄ#æúò+•Ê‹¹|eX;aÎq“ôüûsÏ.\þÂ[ag´‡#­üÐÂØÔlå¡t.œ-Î¥Òñ˜ã¨O?ØP‰X£¼Äªk/ÿ¯³?Üâ[ØRìh×ÞzïZzì ùD=¢+³óÕ’¿jå»]§µQ:¼`MˆRÇN{xlu* 'üÀf´sóSЭuìúÞSG.O<<ç?ô•&Ž}éØX£™ïÔ——™¦v uë·ÛÛ‰¯~ç+#>{ÌK;bc•Î-Ž4“U­RÉGoR¢FÆNO?ô¹ÿÁÐHû R·~6¢Ð¶{Á»¬” DiÔÌOæÏ¨?ýó?þó«ý¼'€­Â.IØ]”¶Íú’ÖJÉÇw[µb«Õ#륕Óïtö‹Ø[޾y¾JN©S"rêÆ+Z²û9­’½ßú7_!•ñ|Ç—t'*j¨gÿôŸ÷|Ÿî  o Øu´¶êÃíŽ>Îe뵑Uc–¬s›“õ쯔ñS*;½ßùƒ‰=Î7D+­”8¥{z=”7E„À¶ð¥­ ünJ+õ©âv9žJ;ž¤E‰˜XDÙøoü°|¦‡­l™›.ìv+Ûjgkö^ÒÂ' Š$±ˆöìü»Ï¼¸Ñ“š[ŒÀ|À(mMìÆIb“[¿ûöhGÄ„îþÏÿã¿5Ú«š[‰À|ȈXãÆÖ(së7ß×ñSîïžüü©^ÕØJ@nì—”J•ÒûŽ^xÒóÄïU]kEâØt¢Žál°-±è;Ÿ+7ÆZ5½}so_8:9½ñ˜Ò·ÞRõfÔÇNp°"¢”Ê»žJÝKM€A!0`wSFMïÿå'çz¾ ä3L‰¢®ÔL"±ˆˆµ¶GæŒrL¥'ýl1v)-ÆXë¸õ`jvþ”ãŠ+÷”i7duérüßµëþÒ«ºµ¤µ¾\?ÿÌËñBØRìJž¿œ=rò•'F'JG³ùÆ~}ÓDnL?ò|›Ï ›Ç*ÅÆOþËþàÙ´ 0PìJ¹á¥ñ½‡~+•ŽFïq`á#ÖˆtZáÏÞ*ýk•÷.ô¤(À€°;||£TÕôö=ó„ï'ù^……J‹Nºíhñ{ßùùJO  Ûªbç‹ÿú·Vb½ÿÐË'§¦7ÕŽõzy¥DÒyï÷N|iöžþ£§‡{Y`P Øù>¶­ª•Pï;|åó¾gûq)?Ï÷ÕgGò¹ý¨°Õ Ø]¬¶JWDÄk{^ÞŠX1õf;¬÷º6À °«¸nÇëvüZ³îl4ëºbí'V7ܳ$±""οvþb/ë »Š1ÃÝ7~ñµ?{ï̓?h7ƒ’µªw£ J$U7‰ÝÅ«Ï_íô¬.À°;|0ŽGÊ ­ŒÌìmM…3½8áCJD¢PÊõŠf‡$°c°­*v-"bä౟Ÿœ;~úoFZsJõvOU+"qd–V¯%ó½¬ 0HŒ0`w0"Vêþ¡c§¿\iîuXIb‘8LÎ_ziþ|¯k »H:Û©š5:¾õ{ïœãˆ¤²ÎO~ãàoË7¿Ù³©NƒD`À®¡Ä7Ë‹Sg’DuûulAÏí‘òû×ï×5¶»J¦Z­f°nôü ¥Då îSÌ~ûÿê3ý¸ÀVbÚv¼‰~g.]Ø3æx)ݬO•»í`ÉJÔÉä3ÚéýÂ×Gk™sœ¤´´4òvmq±/S ¶;Þǃˆg«³åõµ=ó…¡Å¡l¡=­TïŸÏWi­ôìô‘üù7þïÙ˽®°U Øñ>Œhm•5™¸QÉ.M-Ìù©x¨»&y)5¡L’›xðð;ç~r¡Øëú[À€ï“áÃ¥ VÂp¨Ó¬{ׇG—øA’ïuhPZ”ëé¹TFU§N<ðÖ¹çÏqú3ØvXôŒÏje•úõ0`µ-­=´xåý£•$*ìýuE‚´©ŒóûSÝÏô¼>À 0`W³Æ5Ë×;[ÛÈ\µVL?®á¸:ŸIëL?jô»^ u/|Ù$ªO»Ye¬êË6®ýF`À®gkV=W-g/Y{ïç3X+ÖkEâØv£®Y‰ºQ³½lµžïAlGÎHû™SÏ>úù—÷ÉÞK­VÝÛM9dlT-Æo]}«óg«­Ú»½ê`+QâšòÚ‰kËó /ì›[üŠãŠwWu”ˆÖJ*¥î÷þǾñ_'N5/þàb·×ýl¦$ˆ£|xþô_¨–ÓWEînj’µ"éœLLÌøßúûÿòsÀvG`>¦Ók_<ûÙg5oínk(%â§Ôƒ#£öT/{ð1ʸfué¡……Ës?Žcu×£aÇ^©®ê ½ì ` À¯2A¼výäû¦S¹ë±m´¶Ñ˶À| k­c·uWŸcm·Ûê°~l{àS43µËgù~µ’¾r'ËŸ•é4¥ÚnÊÖVõûýë`k€Oa?YœÿÜ…³¯ÿÆÿ.®æß3F’Ûù\êv­âltZêÚ‹ÿñ™~÷ ÐoΠúmâø—§†öŒ9nJÝÉn©J\ÛhLU«å‰Ë&i×ý s\“ÒÚ:J©Où„•f=X»|zÏOϼ2ñ®JgWj‹—Ú½»€­G`ÀŽw·AÄŠ‘°;ÔY_92¿¾6uFL·îèDDWkh-KJü Éç‡Ãa›˜ l K§ß¾ÖëûØJœô Ü%®iVæÊï½zðÇAzý•™ýçæ&÷\;1:^z8HÇCòAnPJT*ÝžÜ[¯\»À¶Çv¼»aøUV”‰M.ÜX;¼\ZÛw¥ÛQ+^Ðò3™Î”(%ÆX©¬ÅϽý³òŸ<ÿ~t©g70 Œ0`dzVÚ‚ƒ»¦­UâFN·=Ô¾xöé·›õ‘#¾NÔî´ÌJ¥¨¾ûÜ¿}CÛÀŽ@`î’ÖVù:Q¥Õ‡[­ÑïNO½ò®ã\º¼t±ó¬ˆÄƒî  @´{kgÃÏ_ºüÂw¯º€^á G”x)/³'-÷¶Pà¾B`zA‰µÊ ´7”t+½D`zÄŠI¬éFƒî — @¯XÅT$°ã€QÖ8Úe#°³€QJ[eÄ º€^"0½`EYw;ÝZ{Эô¸gZ’°£Âv£Z»~¦8ènz‰À€¯ï‹ ´H’tU¶ë§¿_í÷å¶ 4±ãYm”ˆ|û“‘•£µã{JDâ¾\`@ Ø5¢zYÅIËJÒãÂŽHÜ©Ûnc)éyu€"0`—ÐÒ(]ŠZÕs¢2Ý^W·¦¥ºÝjU„]’ÀÎB`À® µQQ·VmŸ~þâÕ«ÏwÝÀvÁ¢gìÖjŽåù™¸|y°)€MlŠÀ`S›"0Ø;ŸÕjÐ-lW›"0ØÀ¦ 6E`°)€MlŠÀ`S›"0Ø”;耭’šžuƒ/ÿÎøÜWâ{­eMW·6J•K§𶬾ÓìE÷#vcÄfÆŽæS&Îßk-­Du[å°Y]­Éê;^ôp¿"0`×püÀ:Æ»·"ZK‡ÊFÝJgáõs"’ô¤9€ûk°{˜ÞÔH:µ¸¾viuéüóÅT¸¯€;Ç ·S[m—®¾tvнlp›¬‰uX]m”/ýô¥âÙÿ·2è~¶»‚Ö¢zQÇ8:,^~³,"¶õîwà6)ǵ¾WpÆ=26è^¶ ¸J‰ë¦Æ³ƒî`«€Ûeµ×KåÆL ÏØ%øÒÜ6#I&Q»ÒÖ0€]‚ÀÜ-QØV…âú¥·^Ø% ÀíJ¢¸S]^/¾ÿõA·°U ÀíPFe°´Tt+[Ét@¿MÿÊ‘Ôð̨vRêîgi1qèDá†u³£áÄ¡§Žy®›´*Kž6 pŸqݰXê¨S »r8<ûØo¹AÆ­•.ÕD„ŸÀŽÆ”$à–´ÄqdÃêR5nÕ—‚üÄ´öÒJºžœ p?#0`dzZÝó{%Ö„íZè¦2Žã86é´WKó/_ìE÷3p”²Öñ³~~æÁÑA³Y[\‘hÐ}ôk€[2âxYŸyh&îÔ÷iÏ+wÊ‹,v»¸M®—NDDºõ%‘¨!rãù‰Ú@Ÿ1% ¸…ÄÕ©-ëÒ•Ÿ«ÆÚ9§½~ÅM¢hløàÓ¹A÷ÐoŒ0·à8®•  ´v‚Ne)r´jDõòBeå­ê {è7F€[HâŽî6×=-nŽÛÍòšikr÷§ÀlŒ07‘ØHuJ Éʹg¬5^vhÿPsþô™Zm±|»5r‡¿0éÙnwãòëŒH€m‡ÀlÂ$‰tË‹qùÊËó•3ϽššØ7wZûJf~ãNê¤Â¶Ú‹£À¶D`6a’®­Ï'ÁðÞ™©'¾ùP¶Â… ϼ$««í;©S¼öæJ¿zè7° ×Ϩñ£Oâh‰å‡J—_º.««¡ÜùÚÓþ¶‹ž›pœ@’nG·Ë×l»|ÅøÒ?=2zäoÝÀVa„;žµZIrçŸ3I$­õ+quåt7éÔÒIgt·¶×|%"gzÞ(À}ˆÀl"1‘ÔK¥¾zVD¤åø™hcñü™±ãA÷°U˜’lB+GéáT›È˜¨³d£æ²$ñê;ÿ­y'uFífòõ•K5¹3ÜüìC)oÚs³c¾ç¶úÝ+@?€MXí(å¤\ÏÏå‚É£^mþõëín¥*"Ñ­>;´ÿ7ócy47utÖÆ¡Ž›µ«ýï ÷ ÀÍ(åzÙqÝÀ‰ã¶3웫Hê¼ÈâÍoÓ{?ûÕ#¹Ñ¹üÂŒ×,^i·»5ÎbÛk€M8JÛôÐlœŸ>¡¥+azxÿpzdÆYìÞü“{RŽSóÒ#)íx‰X{§½Ü7anFYk:-77~Ì1ÙúR2—ËM-¸ã'2™±üÚÒëßûõµ }Ó­.‡ÑÐtâÃj]ô # À-GYc㎠»VûéÑ̾ǞÊOøíO ""ͦÛX?]ŠÂjÑÚ.lkà&”ëÚÌðþ0O¬˜Dií)‰ëIÔ(Žúâ)ùõgH8ñw'Òc‡GZ×’n­ÈS¶5¦$7¡Å‘ ?nÝ̰Ö~6 »5G´ÊÄaמ=ùˆŸ7ê5›ªÖÛïzé=Öê(ìÖ;®Ÿ«$ô=Ü p+ÆHÔ,«NmÅñ3c~”›ÙÛ®-ÍWWÎ^,Lšr‡ö?h}¿ë:©Ù¥3gÝ s^ûq³~}m_jdöóJ«;:è à~Âd à6¤rãfxïgâ ?Ñ5qbü 0äjg:¬—Zëó/¼ëyÙŽ—ðr£{‡—^ÿŸÅêF9S^¿Ðn¬_(w«k¡ó¬€í‰à69¾oƒôp¤$©u»ÍªŸÍ{¹±ã‡ÚÕ…‚…Úšš}ò[{¯¯þ¼(KW㊼–ž}x¯µ†“žÀ¶D`n—ÕÖÏOªÉ‡ÿÎdÜ® Ŷ‰»•lÜ®ìmW—êIÇN+­’Fmf,ž±%¹Ú)ο^‘ù׋"OsØ– Øœ^1â¸Í2Ö?êÔUsõ¢©7Š-“ÄkÝÆÒªv¼X´6Ú÷2¹Ü‘°‘ª¸R,F"Ïǽè`«€;eÅ*ÑÖO ‰3ûòrã¹`ílÎDá^›„ImõýZì8ì#AA{íîhëz–.T®¾UtëwŠÀÜÇ lnì@”ÎO«$nyQ§ªTÍÚn3ˆã®Vnj8«Ý‘(®­ÀvD`zÀñëøAâçÆT*¿'cm¬¬ MÔ¬«vùŠ5µˆg lK|‰zÉq<߈¤D´ˆ—•¸S‘vmmÐÜö†úˆ#""ÊK•βKØ– 6E`°)€MlŠÀ`SÿPvàA\ó7IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-5.5.png000066400000000000000000000015401430147706700257560ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<‡PLTEY‡6^Ž9Pˆ.7|Z‹GS}2W…5W„4W„5H~(.t}½L…ÅQ‡ÈR|¼Lh§@ÂOÀNi¨B‚ÃO€ÀNi§BÂO‰ËTŒÎUŒÍUŒÎUÀNi§Bu³G|ºK|»L|»Ls¯Ib™Dh£>m¨Cl¦Cl§CeE‰ËTŒÎUŠËTÿÿÿ1³jÛ)tRNS UÁÁ_ rp~núùùú|1rpq7ÇÜbKGD,ºÝq« pHYs¢¢EÝ1¢mIDATxÚíÓµÃA™™™™ûïω%¥Ž”ün 7sIÅ(•s•ªVo4S­vGëöú™ÁP½Þ™ñD›~òfs=0ƒÀ `0˜Ìf€ÿ-–«õÏf»ÓƒÀö‡cêt¾èA`×Û=õxÖôŠðá¯ëòØþ1%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-6.0.png000066400000000000000000000406441430147706700257620ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢@tIDATxÚíÝwxTUÞÀñÁ¶®uí}EÅÞ  ¤ ÒæNz%=ÓgR'u’I§w-$´@ @Hï=qW}ײkï®EEòÎM@ÁõûyžßCV²œæë½ç‰8‡.»nä5£§oˆ±Ò¶)­uŠó>úNåîùNwŒñ¿’Õ‚ €` ‚áÃÔ;Æ Áp’`pƒ!`‚ N3þþlÐU¬@0ü,q+p¾ó¹`‚ €` ‚á׎•¶[n©î±Òu+lô]*ëéT™¿V?âVèrç¸éðg +m§ ÑÎY«²¼f§-›—£zÜ»ÈíI¿å®Oú.wgÔDí˜Ûžñ¸ŒÕþpÁÐydįÛ¶±-*Û8óĶš§^ãž?¿0`qƪèRe­j£ÏžE®Ò+o·¼úºQÖW_{÷¸«þvçè+¯¾ëÑ¿^}Ï#X à VÚ.¹¥¦SnרqHÞkož‰I;âjo[ØrÁöÆGÉmOyJn}RÜò„»ä†‡í$×>0šÅ~ïÁ`£oQMNߘì;¿pAØÊøMŠÑÍêͺ­¡}->Ÿì™çpþ.áPv—ìÛœÙþ‚¯…ïãwÿQ®&ñ·ü!‚¡Sa¡ê‹70½ÑêÞh}£ÚknÎbý¶é{̡ЩÜÚ_é÷ïÔFïÓ›½?6¶Êöfußåö?˜Ã¡¿ðùÁ™±GèO­ÞSo”9ò· ¹êfÉ¥»í”ó‹Á íPLHܲ6¬<ìT3&tS„…ªñÇXO6rËW˜TøZr]À-ÞÿÍéöú*¯W¶_|ZPø¼´?³ÍçÓ°U† vqµÚ Õúi¦b£Ï¼Ì"UYÈ®ä:ŸwÓ›=?Kkôú$¹Îû}EÀÿE‡7ë·¼¬¯½*_Ë`8ÃȱáåþæP[kÛ•¿8?¾ŠÔ®tÉÉŸ²\S1}…²R·5à¥ÌvïŽîC8v²»¼¾RmR4ºå-És2nHqL]Ÿâd,Ê \’¾Z½)¦ÙPü²r£².hi܆øÊà—LÞŸ%Tz¾*/•Ù³:À°†-~ÖúNåñÇ¡öÄXiºc~º;áè´¨\²—äF•†·¦6Ê>Ïlóü"­ÑçƒÌvÙ×' qħ©~ï$×½ªÝÝæž?{–ל9³CW¦–¸ä,ͧlSL5®Ì Xd( ]¡«ðžµÒ%-èiVvÁЩ˜šYlôœ=kŽ[Þ¢<»¸zͱO’×',Ò–O_.¯R•íIªñÿOr÷{»„ç †Ù#nl–öçt{}­*‹lS–…uj…OCŠb7=+oSø.(\P5ýŸ©!¯ÊKƒ«ýæ<ÇêÃ,,5Šˆbíö„¯¤5ú¿ã=·`¾ml“úè Íö†ÍIêM¡})õþo&×ù¼oŽq>ïTøÅ`8:»…þÜÏo³:¼¿Èî”}“Zïó^à’´b¯9YK«|ßÌêðø!©Zú®fǪÃ.Ä™œ¾Ùà’½*S¼Ù{nÎ"»øŸž2ØÆ6«üe-OmðËÔ%=`l•}m¨õy·p·ôHHÌ/‡ÃŒ=GŽRís?¬ÝÙ!-ÌZ½6ª)®Òÿ5u™÷®ÈUžãY`XC…¯µ¾ë˜= rqìâšÔ¶±-*ñɉ·8;$¯K‰*hI¨ò}#½ÉëSS§ç×Ù]žû2ZüÞOoö/³]öUnp ¯OÚìÅl'¾¦”Ó%û.µÑû£ÌvϽ†ÿ7tÛ¦ï \Zbù« ±›¶¿ë¹¨â+m»JÜìüó[œO1æhp6-ɉ*Û¼,}µÿ”âé+ôåþ‹×ú-H,•¯Ø_éù^Z£ôëœnñr6éá_zÚ`þùþì.Ù·-ÞŸDûW»¦=ÃêCÌ2Äa´jcðFÅýN'ãºT u»ÂJ{|XiÚ–šö'Çžš$Æ8Uo´¾Yå5Ç´$v{x_F‹ß{-¾[½>Ÿ˜#à›Ü^áÀ‰‘ÛëùÝÀÝ ]²ýYíÞŸiÊ#:åëÃ:"KBzܲ—X†G>ÌêClJœãc‹ûÿåõ «C^ÒWDvù-2MH¬Ò†A«2|ul¹øÏåëµ;}d/™”º.EÜË`£oUÞøÜ¢rÍYœµ6ª1¥^öé©NL:vctf»×纊À—4å¡}á«5Û#×(«“ªýÿÑâùEl…×?#VzÙ±:ÀsÔOŸÑäñOñÈSñµ ñC}f›ç—¾ Œ+lô k]›2zmtcN·ð}¾9*r{¼ö¥4ø½¾:®¡ÊëݬïÅßWÜÕáùubµÏ;¦NÙ79]²oã+ý_TuÏ/˜«ÚÝbêôüJüóÅ_ŸZ/¼¯ÞÈ)IÀ³txF±6dmjCÈëÙ]^{ ŸçïòèWm’7:g­ÉŸ¸çÏ›_9ýñ5#1Ä0‡Å¡œÙ·ÓWh+ÓVÅ'âëJâ½ ³g)7ÊÒ›ÞÊl÷û@<žUµ)´'d¹z[TitC\eèó‹ÓVSÖª}çç/J©÷+«Ý÷ãôfïM²oô[¼wÎ÷µdu€!6ÊÚá^Gà “±('xYriF‹ïæ`Èëóè^«ª¶7TƉ¯Ù'•¤-UnÏh•}•Ùîý¹±Õ÷äêà—½çeÙÆnµPuÅX¨zc~Ú8ݬš˜´9išiY¶kî’\Ç´õ)ֺ̈́„- “¶&ØÅÕj­õMj'ã2Sà’„õÞsEŒܡ+õ[½g„­™jðå¦g`¨=hÿôô¢°ÁE ›&¥gøÌ›9?ª4qsôÚ¤M^sæÌÿã -ªi¦Ya«R×/K)Ñmþ¼®búóŠÊ:å&mu̺ø­á«“6NÎXqì¦hÛØFµcjiª½as¢¸yÚZ'ÙÚ-·‹¯Ò‡®JY›\ürjcÐëɵÓ_Œ*MØ<Õ¸2Ëͤ^âUàfÅêCì^[ûû¦¤ÎVOË.ÍŸP«§êŽyNÑó¬¼'ÚBÝsÜ©Hšî˜qÊ.¹½¡Ì ÜÝWüO½9b·M!®2èeeYDÇÄÄò„£¿ÞBÝ%f,*H®óÿOjCпÅ#X'$l| Ѭò™Ÿ·(µÑÿÍ‚Kß<úsº…ý1ëTµÎiòÅS“ecX`ˆÝp¿Ã£C·ùXi{?ÅAç/ÞÁ`W§š¹>Õ9kmšcjy¢½a{¼cê¶ûäÊØÁ£W¥¦KîlZnRl˜Þ¿3äEÅFUÝ„„ŠxKM‡bbR•^<ÆÕkNöMyÐS§t¿¸7"¯Oö}ÂÙkÑÅ2ûc¿Oë0‰ßl‰kªƒäYZ8/ozÞâg­ëŸÄX¨;äâ“+ÍÀ rKMÏ1ûÚ•Ž©kÒÂWÅoÒnnה˛ÃW§¬ó_T°H˜¹$ZvI†¸ùYüwıP÷F[k›Ôö††I©åI“Ó×§˜#!-hiÖ ÝÖÈΔz¿·Òš|>ÈlóÜ›×+ýáè%n©õÂ{ª²IÇ~Ÿ·<õä_ÜÓþnjs•äÒF°rÀù†F>²ÝÇ1mmº{^þ\ÙLÓ‚¹“RÖ¤ÙÆîÔ‹–í“Ë Vš6…xï‚{~Þü„ÊÀWÄ[™OK’öçöŒ­ÞŸ%ÕýK63w¡KÎr“Kör“÷ÜÙs|æÏœï–»0?¸(qƒ|CT‹|}T³©SØoê¾Ëß%=\(»jó×3 ²wO †ˆ.þq•е®ÙaEÓndå€óà®q“îõš™\¤ßâ·@¿Q±azObµï†šà©7G·¥4ø¿™TòRÀãŠññõÚ ‰;âÜóçÉ7D7§5ù~Ý%|;xƒ´?«]ø6v›ïëiMoŠ“Ñâóqr­Ï{Šõ¡á«cjÃV)ª‚—é7i·DvŠá`¨õ}ËPë÷¦¡Æÿ?úm!û Ä1T ï¨Ö ÇCÜvé:s˜ô'TJ_W®÷x€•΃ _é¿6¹Þ÷Cõæ¨vÿE†]…ÿ+9݇òú¤Gnf–ö‹·0OJ-O÷(ˆ¯(9¤”'y.,0À梴5a« ‚–¦­ Xœ½,¥>à ñ6ñΆä:ÏOb·ù½*ßÞ±&ºÎwARɤ”Ò4‡ä-‰®¹+³œM«ÎYÅÆÉéR¦צyÏ?ÛŘ”ë xäØï3bÅä1еÎ)˦Λ|9+œLµÔ{Vä¼Äjßwsº…éM>jÊý_6¶ÊöæïŽƒÐo¨õ{Ë1­<ÉRÓ-7OŒ•¸GAÕ3>~MªlfÖk]£jðò¶f•÷ÜÂù© þo‰·F‹'%ìôzW¹1¤/ªDSé’³4G<¢UÜß`¡Ú=Nµ+Jüq`¯„yÆ©vG?êY|Ï„´‘Ç~Ÿýýý’§¼,.59¢ø+# œ•“,uåÞ5ºŠ —ŧ)õ>ï%V{¿“Ñ,ûÒÔ!Ý/~èouŽÛðÊ´ìŹÎY«ÓL‹sÇÇ—'¸æ®0ù-Ì^¹&¦nbRY’•9&Ä–lô 𠥯•y½Òƒblý=rºeûµ[Cw¹åÍš55sUæÔ¬’t·¼¦i¦ÕÆññUzKu³rŠqCêä$cš]LÌCÇ~Ÿã”¸í%“´ÏI.¿u΋GìrÎÈ6ø_–瘺:]6+ankàK¹=Â÷…÷#ý¦.Ứµª*—ì¹…ÞóÒVúÎ_'îGH®÷{ÛÔ%û&³Íë3Ý–˜V—ì&ñ•¥)é› Ú-]ù»„CGŸPˆ“ß'Joöþ8©&ðUCmÀ µA¯¦6ú½“\ðM¹²1z­~{üΗt[<_Œ\-Ldu€!&ÞÃ0æÈ= –êÞÿE©«­ž_dwʾ5uʾØ„\ëý{~ák]½zBbyBT‰z§©Ãó«c`Ï@ ü *‹nOSš”º%Qµ)ª¥àHpü|¤#žˆttÄ_›ß7øÏSNr¬*€!ðã= úN¥ø:‘CrE‚×ìy³¼fÏå9{þLó×3= –䉛”mb[T6ú•÷ܼ…ºŠˆc›ç—¹=²ý»eów ?¤6ø½m£Û©·Ò¶+d3çÍÌhñú¯øóYí²¯ wî‡_OÊêðÚ›ÙæõEáI‚BŒ‚–ÁС_)²PwÇ;–æqHÞ<9­$ÍFß:°¹Ùɸ"ÓoAü:ïyy‹äë5U‘%q[Ä£W-5mJñ%Û¸{Áü€Ei«Å‰Ûö|r]à¿ã+C_ð_˜¶*²$vkf»×ç¦Nïϳ:¼?7¶ù|šÙæó‰±ÕçýVï=‘«¼Æ³:À0 ñ)ƒ•vpó²ùÇ Uo´¥¦Ué˜ZœnW¥³Öµ+]³jbâæD U§Ü6¶Z7)eÓÀMÎŽ©ek]½fœ²7zœª/ÚB%ÞúlˆØfµ]\­Ö6®^k­kSNH¨Œu2®Ìœš¹‰÷Mˆqñœ¢]>NÕ¤§jW>æ¹zú¨‰©#Y`˜ƒ¥¦]é9+{‘¦<¦%¾2䟺­ÑíQ%‘M±Û|_Kmý7¹Þ÷ØíÝS2JÓÄ'vq5º eIëâ+½ß.ØåÑ/^ÔvtÄ ÌÙ]žâ†ióxîKixÓoaúJkmƒúh0Xi;“Ó×§-3®T•iªã¶Gu%ìŒØ¿3²7|Eèϼ€1¬0ÔÁð€ÃOWø.K-Õn |1­Qø2·Gz0—´?§Ûó›\óˆ' ‰w((6„vÙ6'‰¯%Ù'—'¦6ø¾'FAÁ„täô#óï±OY¦ª›”"ÞÝ%÷HLHØ©)J_RôzN·××âÐ…Ï{˜Cã?µÁÿ]¿9+ìb¢fu€!v·…ý(‹˜’I©eÉþ ³–‡­Š®Ÿä™?Ä‹ø Í1ÙîõeÌ:E“qaž[î¼B}“Ú!¥"!­Éç£O8Cáh0ˆO"KtÛŧƒ±Ð%·7l‹(NØ”Ùæýéàñªƒ¿^¼Ø-¡*ôÂ3-£Ic‚ `¨MÒØ[…¯ /öš3gžCòæ$ל³“ëüß*Ø5x jn¯ðCÂN¿ÇWNÿgÐ2]ytih§x˳Cò¦$c‹ççøw ‡sÄãS;|>Ëîôþ2§Ûó[S§ç×âkM“¶$ˆOÄ×Ä ÒAËLËM²¯O¼—!¥>ðßÒ e³fÍ YT´ÈÖÕ†ØDÕ$«ôF·f4û°3üùäzÿ7Ì‘pà˜ÿòøè} éÍÞŸh·ïñš“·È>i{¼zstk~Ÿìñ×d¶yîU–E´.Î^¶:umÈrãêI)eë#±`©é–;ggÄíÛýó ݤýq;"{ì ›CŠ2еå>/j6K§°:Àe7ùþ¨Õ¡Ë“ªBþÏÔ!ûúÔ·3ÄC¿x´x‚ml£Ú)£8ÃØâõ™øs9Ý^ûB–'l¸»aà8ÕÞhñ¤£GµZjZ”¡+RKsº¥NvY[F‹÷ýå-qHÞ˜ì5S¾Ú®ÌŠÕ†Øµ£&Ýi­\=}JƦ‚Åùò êS§×—'„Âá£_›£bŸ[Þœâåm“¶&h·ú¼–\çó^ÌZuÕÄÄqÇ»zìñ©vñ•±Q%ºíy½O ™mÞŸ.ÉXå=/gItIPSôa"« 1ñXÕ1a¾VÚ…¥Z¼¡¹^°(kyZ£ÿ;b(ˆ§%¥5{~–ÝåýeV»Ï§êMÑ­ö†q#³÷ÜœÅI5²tþÿò[˜µ|rú†+mûIƒabbE¼²LY'ž†t²§æ?çPìöðÞ€ÅIë"V…ÔÆ”È`8Ãñ7=‹Ó®ð(˜;3¥>赬Ͻ‘%Ñõb¸d/Í_§œ¶!ÅoAÚª¤Ÿ·Å¨'·W¶?±*äEï¹3çYë[T'ƒƒaK¢bƒºZÙ^ÙÁ”†€7‚–¦ÛÆ6ÿj’¦S>%c}ªf‹¼9§[ØŸ¿K8”ß'=”×'û^<žu`ô Bj½ðžz£l« ±gdöûÌÖç 3—LLªŒŸ°=N|}èÄ=âÓñëñ 5:ý¶=æûOuüªùçúS|>ðž›Qd¥m;at‡bBâÎXaÆìÙÊò†ø!ÿ_­®Œ^ÙœÑâõ™øû&UÉþSâiÏêCÌ^9É:¥Î}OF‹÷çáű[ì“·Åû ’8)å‰NƵiVš6¥ml“:ªT¿ÍÔîý¹¸IyÆéÀ±¨GN:ú>½ÑýɵuÑ¥Á-smb«µVÚnùñ{7V‹ab£¯ÓºäÌ+”ÍJ[¼,i|}LsàÂàr“ÿVbM²(´H¾@³%º3dyâ‡äŠ„c_G²Ñ7hÂWk¶‰' …­2¬wH^›âœ¹4;|µb§~[ð?’ëƒ^Koö{_<~5£Ùã r›‰¶Ñ“îs5FºdÏ+ôšcZâ\f°‰­×ü 'a§ÞÞPž(þ?¿¯¡;ÆÙ´Üµ&´A»Ùc « ±I:{¯YòSÒ×-ÔŠ©™Kr\²ç3 æ+Ë i~ïæ÷ ‡ŽÞÈ,Þ›Ù*ûÌ5#$s\HÀè¦fy9¦–¦¨6¾XíûFnðCN·ðÝௗöçõ c·‡ücrÚRÓä´âtÕ&ySr]ð+‹3WLH¨Œ=ñøU»¸­}lVšƒn:÷0Cí × ¹çè³ÓÊRÆ);åa«t[]sLL*3xÎÎ](_¯¨_GÊêðÚ›Ûãùm^Ÿì@n·ô!Û]y·pÓCÎaÓ¼æ¤/ /VT)6D¶žltf›ßGž³’NŠÓÅVÈjóz„ý9ݲoTeêZÛØ*ýàž‰N¹¥¦;fZö£[–z“ÁçVbO¶pJJN¬½ag¼¸wÁFߤ¼¤m`c²Ò!e}²lVþ|}EàËñ•þ¯©6Et¨6Eµ8¥fe=îµÐï© õ ›Ø*]à’ŒUÉu~oÿ,öˆw3xí‹*\z壮+òo¨Þ(Ø-J0‡ˆKÎ’\ñä$»¸…ªY©Ú¤©M¨ÞTmàXU`È]ŸÃc¶ùXézÄ=rKMOÌàtLjÿå_6+}y|¥ß¿­ž_fuȾÑo ï ]©Û25³È4-{¥ÉQÞbåFMUf»×ç§:fUáó×?»ý9¿OöCV»ç^qÃs^¯çþœÏo5›Ã»íTñ^i•D2NrŠ`¸-¹Ö­Áü{V®ó(ó™á~Kü΂!¯Ov ¾Ò÷¤¯÷Ò›=?3u ßš:eû²»<÷‰‘ÑâóIèJÍ6ÙÌ‚ùþ‹2VzÏ)Xd5/r¤Ų_úæ›öÄ…ªõnšÄJéÖEÎÒgýÇó„ø½ÃÑ Ý vIûsº¤?je'Uû¼­¯ø?ÝÖоé+RJ§fgXi»ä6úN峑19›,F\xÉÅÉí§üæÆú“D®pá”8öB›ˆgFüõöGY1à÷ Çml~~ð÷Ëî’}£.nµÖU무Ýrk]§ÂBY¯zÂg©ëmO{]û«¿É»þ:0ίË2š]Îj0ˆ¯'jýތݶ[·-²+`qîRÛØ:­ ÖÚvÕèõÁwÛ*QÁß>0¼¸ÂØìZ-¾Nt6b!—p8¹Î÷€EI¥N«Œ •q–švÅ@,è;ÏFí?ìV`wý}vñw û^¸ôoÍ®µg#òû„ƒ†¿7}æŠmôjk]»ÂJÛ)·Öu(Fß©^v¯C“·>)ðw û^¸âÚkÍÁP÷[ƒAà?ŽiëSN pþí﯒ô÷7˜g÷NµäÊ{î½#½ÑµåLƒ!·Ûó[¿)ÅÖº6%Á #á˧^//™”°Ã9:aûÌç(EéCV›ûëgú:Rv—×WSE&ñD$‚Ft[„'“ª„Oóz…þß2¿eÿ‚©ÓkïÄÄ †ÿ p~Åo“=‘Z'ûxÆá¬ÝÒ|ÚO:½¾rÎ\š-Áà 0Ä™ƒ!Å C âdux}é¿0s¹cÚ&ÃäŒM† ‰Õz‚ ~<%ÉØêùE|¥ï¿S}ß‹*Uï´Ò¶ Á08ù}ÒC9]Âwâ^ˆŒ¿÷Mâ&èN‚ N8fµ×ó»˜uê*KÍI.p#€?w0ì§5¼å²6Å6®E5>¾Nk¿So× ±Ñw¨Æ„‰Á@0Ò`èOkòþ8¸(v“²LYo¨ z%­Éï]íÖÈNÿEÙE“g&<8Eý«ü ƒ¡Ð y}ÒCy}Ââ†èŸîx8œÝ%|£Ùä¾Á2ÌéAVø3Ã)F CµG½WË3Vá“Y<€`82{„~S‡ðºL0yº°pÁð³`Øg†,V N &V àO æûÆVϽ¹=Òƒ@0ü89ݲïRüߌ*™Þ‘Úàù‰x)Á ¿3ø%aæÂBÇ´’4UYdk~ŸìÁ #ß ¨Ÿ˜T–d¥íPLÍZiLoñýðŒž2 À/rº…ÁE‰ëmc4¶±-*s@4œÑS‚øãƒ8i~ïxÏ+\`£¯ÕNI_‘iêôúŠ`†##íOiðK±QYï·Ð¸B»%´/—ì‚ FÜ·×+üWéÿjTih[f»ç—…§³—`þ¸Áptòúd"K¢ëbÖF7œÖS‚øãƒ ~ “‹Õeá»d €`8öÕ¤C‰Õÿ2u ß²‡ Nòá_ÊÅmÀï"*dOšƒáÓå»åé>êêÑž÷\3Zö¿Ç6àÁ+C—ºE¦7 ïÍØsžƒ¡]ا)2-¦Û³pÀùpÉ —œÖˆ"–ËüÍÁðîù ñÏÊî¾S—y,¶ ›x+ S²ìi‰;=Z³:„orº…ïr{¤òz¥ vIŸ£“•ú³»¼¾ŠÛ1ý~s#gÝ7qê}¬0Lö±þKà<‡§¢WO±‹^í89j¥ÃTyñ„©ŠR—…-Ò ÎâÆèü>ᇔú€ÿø-Ì]jŸ¸&ù™€B·¿Þ* <ê¸èº‹%_1  'vÑ%ýý»$ßö/5ÿØÿã<î>úfÍ&·µ9]ÒýgåVè^ÙøÁ/ú.ÈXá’³4×F[o‘é9ÒúÉK—.—Tô'H²{B%.©SX`8¹ßþÉ­Oß&y`Ò}’Qv÷JîóÀ?wËp´NoôøÇÙxÊÛ#ÛŸÒàû®±Õëóäú€7u[£:õ[}Úä¥SS´å®Nê²iÎÓO}Î:Òá*÷ôi, 0Ü=äøäÕ ;¤Ûóz…ƒç⤤Áe¶ ßdµ ߥÔy¼®\ëšâšê|«Dò, gO¸¹"jµûìì.á«s}ÌêŒ#“Ú ¼ç7Kˆ¸è/¶W\yóC#X`˜zÄyÌ!ÛÉÏÔ!}ï|·Z°[z(agè?§¤/J{Äm®çH‹°»X`˜zxÊÓתÖ{¬Êé¾=w3d´xýwú õ6‡äãcžKÝn}ÂýV¦.¼è‹ô[<Öæv Îdž¼^éaÝÖ¨.Õ<ÃýSrž¼á‰,0\]ÿ­—ëÊ=6åt ?œ`Èé–}U»ý1¯¥Ò[nb€aìÎgï½4xáäñYmÿ:›¸ü•$iz³ÿ{B~úâû—Œ3ÿñ²À0æat² YäbHo–¾a†Ãç:ÒšßtÍ̘sŸÓ¼Ñ]z% W7=v§Äw–k˜±Eú¶9—MÏ­~Ê —Ü3iþÓc|ž•X…=ÇBÃÔ…Ò¬©YíÒw^²v®ƒ!«Ãû ÿyš5·Yä>wã_6Öï©‹X`ò)œâ[áV×+|s>6<¹‡¡ßPí÷ª¼Ôo]ä §¸Éq“F²Àp †ÓÂ2Û¤ž§ ÇGƒp(­Qú©¼Ô5É9ÙéVFn}j¤$d±›D–3Í+«MúÖùc«ô£¨Unsœ Ž£œ N,0œÜòÔÈ ‚ºÝV$M1uŸœï`0T»m·ŸðÀÓ2‹ X `˜¹í™»¯ +rËŽÝ&ü_nðÝùŒq’ª\7=!µ¼Ó^5ņ›;ÆŒº4ºØÍ1¾RØy¾ƒAÜôœ\ã¼ôƇïã`˜ƒD^ê!ÑmfgwA0TO[q—Õ㛟ñÂÃÉm£ï¸ µÁ}K^ß¹½ÝùÄÉëj<^™¾ÄEmj}“ùûqÛØGX`ØÃ3w]è•;é®ô&÷æü]çwÿ‘cU§7I?’—L[,dÙ=Ñßÿ_Ià<‰S¼#‹ Û({‰|T"qýUºr·•¦é¾ÂÝç?ŽN~ŸôpJ­kUt±‹Wþ´'žô˜p©=•…†$"'ÞS,õ”—x²Ú<^ªP8.v ý™mÂ׆Ý1k\âÓÔ[X)`LŽb´Ó£;»S¶?¿O88‚Aœ{GWîÖ%Ëu~Š•†€Ôäæ”Þ$}yÆžá 'ìkèWoœ¶v¢jâݬ0d9îSÓ¥ÿ7ì‚Áüý[¤F­œ&ÚÓò*V Âp ó÷bê¾V®w5ÚÅL¼áq7  ~Ú¿`¨ÞŒZ%d5‘E†ãƒ!£E¶W¿UêÉ CÈ3×ÝÙ ÿn{òz…Ãqα7ßÇ%¬0D|f¸{¤7I_ާ$éË]‹í¢þÎ*ç‰m”dr¬½Ä9i’Ä)ÁAâ7k ^nÁ ~?IUÒB—º[²jÀY0ÏE¹ÒC¢Ù,“h6É$Q«<$™S~Î:ÌêJõħÄ:<ã¨sxÒg¦‹Þ o Ç`Ho’íÕlò²¢ÀYà‘å<Âg¦ÛEÁ‹\Ž*öÈÖ•Ëf™gvÌÏ\çÇF{;ŒœçnWá±#³Õã%c‹Ç‹ÆV·óz…ýÃíu$1RêdïÈKGV8 |g¹þ=l™{VR•´9»Kº?·WøÁ?dw ûvxÔÌq¶Ÿ¾Tê›Ú ¼3ã…Ÿ>˜·Xø)„·ä¥RV8 ‹ÜïÓoñØaŽ„'~/Ø-JkðxI½Ñ£ÆØ"ýh¨BÁü} LáóÒþü>áPnp §[ØoþqN·ì;ó|›×'>«]ø^_îê{ëSQ’;Ÿ ’Üú¸+‹ œ©‹.¹pDø ûäZÙ;§ ‚‚ÝÒÃ✋ۙÆüA`öHž#±p8«ÝsoRÏÛIUA¯(ËÔ5QkõÛ#×è¶E•h·‡¯N, ]™´^±A]c¨ |ÝPíùžr³ûõú]{Û×_w×s^uË#,4p¦ë<Ç$UÉ^=ŸOħÆV¯Ï3š½?5Ô¾¦ßÙ_Ñ—Öä÷^Z“ÏG U¯˜:=¿Ÿ,˜:<¿ÒWøÿËw~rñ訞èç”m +m‹ÒJÛ¤²P÷FN‡Â)sy–Ï\eÉ”DmÔ>k¤Oú.÷¹×>îþË®»û¢ëïŸÀB§ëö1Jtå¶© Â'ç3òúdßË×G´I gÏvÎZ“11±"Þ!yK¢{þòl‚e¹Ži%i!Ë3VÇï zY»5tWÌÚÈ–"u…[Þ¼BKM§ÜZשœŽ#ÓiŽˆN¹ml…ÞZ½Mo¥iSYiZÕO®™>j‚þ™›vú+« œõF»ÔzáÓs â>ƒôfï3Z}>VlTÖ9¦­KµTwÊ-5Ý1VÚ.¹8–šž˜Á鎱ѷ¨S·&Ú¶ÇMHÜ7)e]нas¢µ®KþS(œ8âÏuýø¿ÍÑ |&xò^‡„»ÍÿWG°ÚÀipMt}ôj—tc«ðeá9 qSµvKÈóÓLsf8¦®Mµ‹kÔœúCÿO#>5çø§ §1úNÅÓk”£&èî!€Ó0wÚÝúr÷Mƒ§«ý ÒÃq;þåd\šm­kUžÑÿ3s0<é[3Ò2≫n}äbV8-×_]ììœÚ ýâ\Eƒ±M¶×s¶±È6¶Yu^cáÈŒSÔjîwLžpÃ.c½€ÓpÍI"W»]ºdª°Ãµö\DCf»lŸ‹©p޵nh‚ÁZß©|hšÉá–Ǧ]ÁЧ)jµ«øÃåZg÷Œ&÷ v ‡ÏòªCWè·Ž¯Ó]0dOºå17‚8!–’ ¹ã/ Yää’\ãñÊÙÜ-Hìö’wÆás0¸ À™ºå¾k$U£t›]ÊÎæ†ÔŸ÷CŠ’Ö¯× ÀÁéå:7}f‹ð錳ó:Òá¨Òˆ–ÁûÚð;65ÉI¼›áÆàSÃ’vº·æõ ‡~k0D®‘×NH¬ÖŸû8hWZkÍ£;q:T9 ÀYÑßß/¹uÌÓÇ”x¤5 ÿ¦ Å' %šÊ ‰5ºs Šqòjùذò¨±á["Nœg#¶FÞï˜lwËc.—³ºÀoôˆÓ£’‰ªñ’)ñ“ïÒ”¹Î5uH?.Øeþð¿çÌ‚!f½ªfbÒ¹{Â`£ïR=î¹PzÓCŽ÷Þòè´ëoylÚ ÇË ×ßk{ÅÕ·?q« œ%ZG‰M¤íÓ—¸(wJ÷äöûÏà•¤Cá«ãÊÇ'œ»#UÅ`xÂ{‰Ëõ£¬¯ûÛߟ–\sçèŸÍÕ·>&¹âÆûXTàl/·“Œ ¶¹Jš5EH©uß}&{"Öè¶MH¬Õû`°ºþæG%'›î/¹ö®gYPàlzZf) Yâ.¹îá'.‰Ýêžkê¾?ÍW“Çï |eªqY¶µ®Uy†›™¶±Íêñ õÚ‰†íñ.9Kre3gÎfZ–=9}MÚĤªøÇ½–º\w÷¸.þëß.¸øòë~6¹òƽúf8»ná3ÃþƨÕ.wªÖ»ef¶J¿>ÝMÐy½ÂÀ%)%¶±MêÓ…6¥KÎʬ˜ušÊ„Óÿ™Öä÷®©Ëkon×¾œnϯ’ëüßð[0ká#Â*Ÿ»¬¢¬F×¾Aók‚ÁBÝ)÷ž;{®±Íëó÷Mäï’ökÊåÍVš­µ®Kþ¿nz&€scDèûû”kÝR’ª„¾œnáÛß ‡mÞŸ 3fÏž˜X«³mVYi;æ‘[iÇFߪ²‹kÔØèë4BáœYI5Ó_*|^ú³ß'¯OzH½YÙh¡ªWÿâÓ‚8wnû äíþ¥ëHÇ¿L‰w¼G·Åcnf›ði^Ÿp¨`÷éGƒ¸"µÁçýøÊÐ"Šã7OÉX›69­<É%{u–´paAHQJ©ª,º9h‰¶\·uúó…»²!¾•Õîõ…~›ÿ+ÁE©%ãTÝ1ÿóiÁœ;¹Ž”xå;Kúûë%ö*»›ƒºùÆn“.Mor«Ïhv5¯Wzà´o6‡C~Ÿìû¤ê %V¿”Õî¹7·WøA|mI¼ì-ß$毾ÁÚüç˜:eû"K4;lcwÄþÏבàü±šn% ˜ë*~9âÚûÿ~µkÚd ý×%Æ釿ùý…¿qsôÿñ ƒ±Õ瓀Ŧ" Õ®è_uâÁœgI$÷ÚÝ'ñÈœ,± ›pƒr­Ûd}¹Kfb¥´ÝÔ!|U°[zøÜƒ´?½Ùÿ]¯93çY¨{ `¸sJœ$Éî ’\5êÉKç{Ü-/v´^í¬ÛæÑ˜Ýåñő׌N¸CAöƒxúQv·ì»ü>ÙÂ_¹"¿O8·=¢×1umª¥¦K.Ž•f§ÎZW©·Ñ·¨lb›UâÆi+­ 0\Ø«ì$+<$ßô/‘ü}œÅ%ž9“nð-œ8QµÞ}Eì¶ ç3Û|?Éîòþ"µ1à-ÅU[Þü¹3CŠ ë’ëßÃâ—ƒAÚ/Þôì· }¥læÜ™Þs ç{.*pË]œë·0kYØªÄ âFêé+RJ¥… fØÅUë,Ôâ¦è.Á ×ÝÄ)ÞAbê“H.¼iÄ?tÃskTN+²¤3æÌ²7lITµÖµ+ÄŸ L3­ÊÔmîÈéöÜ÷K—ĉÀewɾÍé–}—×'=˜Û#0Ï÷Ⓡ‚ݲCƒ#ÊlóüR¼óÁ=QÞÄÄZýîÎ0 ]vÝÈkFOßc¥iSZkO~g‚xÄÄq‘kâÊMž{gœ…ýbTÄnþ§KÎ꬧͘J0Ã9´æ`ø…ÍÉânããktÁËŒ«’ë_Ÿ&ˆ—´ý–• u~oº¬ÌyÐy&Áüžƒáh4Xi[•ΦbcÐÒÌ•‘%q[T›éÍ~ïçï’}_°KvPÜ ]08ÿ#(¤ýŠê{Ãö„‡\ y% ø½ÃàtšÃ¡K.þz›Ø&µ]|Ö9«$ÝQV‘²LYo¨ z-agÈ‹q;‚^/q;Õž‡ü]ýA˲VX¨:ÄMÏðdžSM»R<6Õ6¶Nc¥©ÓÈfe/N®÷yW|’p²`Èî–ð_”³ÔBÝ¡$€?|0÷BnW£ó_œ½,­1àÍ‚ÝÒŸí_H©÷}WZ¸¨ÀRÓ#çXUàO ƒÑ`¡ê’{Í™57¹.èUñhÕcƒ!±:è×Ü•YVÚ^‚øóÃÑÛœ[•ÎY+²ª¦ÿ£`—ôH0Hûãv„¾àœU’a¥å ð' †Á' Ï)ÚªMÊúœnéOöýÙ²}ÁË2W™ƒBÍ)IÀŸ7êf¥|½~{R×ûiM^ÿÍß%Ÿ2¤5ú¿í¿(§èI¯4é­O‡ ÀŸ/:Ža”²9I63¾ÿÂŒ•º­1­¦ï/Ä”´å>½öjßiWÝ-»”Õþ„Áp4,Õ=1–êNùĤmñAKÓWg¶ù|ªÝäÚë7kÊcæoe«üIƒá¸xÐôÄØ6B–ë˃{•ùÏ™vïuسÁ086ú6¥]\£æÙÐ|åCSÃï»í)Ï Y €`8~ÌîCÓ²§Þ>Ú÷JV Ž}§’{‚áǪÃÉ‚ÁÝ ã€` ‚`‚ €`ºS’œ9V N ùæ`"‚`‚ €`8nlô-*»øZ­•¶Sn­ë$‚ap¬´]r‡äMI…KSKSÇÇ×èÄ€8ãp €?N0˜Ã@>!¡2ÖsvÚòÀÅq’צØÅ툵Ñ×k¬uíJŽUþÜÁ ŸP£sÍY’;Í´*ÓR#þ{Mj}­ÖZצä ð§†Áh°Òô˜ÿnù±ÿŒW’‚S’‚áüÃߟ%‚á$Áð°[þÔ;Æ^ÉjÁ @0 Á@0Á€`@0  þ„Áà*CÁ ' §;Æø Á@0Á @0 Á@0  ‚Á@0Á @0 Á@06ÁçtÇh_‚ N S€`à @0 Á@0Á ‚Á€`@0øÓ7=Ã3îÁ;åöÑÞð?Œ0Ï…æ¹è|ÍýåºÑ!ëå0ÌcᎱþ7=&Ì‘>å·ÂÅ<®çcžðZ,½Si­mW À0†»mbîZ–h©jÒXªÏÃ4 ÌÅÁüú`¸ÇVy׳[c­u +m—ÜRÓc­ë’Ù‡y‚^Á0v ÚÉÛâ]sWš&$VéÅ€ ‚á®±áú ÕúЕ†u†Ú ×ü™– >i ‚!¢Bo_¯ñ]¿H½YÙ 1†•¶[N0Ã{lc›Õ«b­õmªÁW’Îå À°†»¬¢î¼N3N^=N^5.Æ<òÚèÁÿ}îÆJÛJ0Ã=nyÌåêûž{`JÚ˜ó5÷NŒÿ\t¥|Èïax†`~Ñ-M“Ük/¹rÊy™'ý–K®ùÜMÏFTDYåMÏ.b0x ÀprÕ-H®»Çêfs0D €ß ·šƒaÁà‚alÄÖh+‚Á€`ð[ƒáQs0X ~! €Ó†-€ã]qó’kﶸilÄ–(‚ÀñÁpÓýæ`G0  Îr0°éÀ©‚ahU}È%gòmOË`Xë: O Á@0¿—ß0JrÍȱ7 ~æ²ëî’üíÎÑ€“Ã5‚ÀÃs0” ŽwùõwK®I0  Ίˮ9°éyÌPôÇÛž”^ÁŠÃÈ¥Wß*¹úö'o ü<þv›äê;€3 †0‚À)ƒa3Áàx5Ãßîxêz‚Á€`@0  q0lŠÚ`Èv¼õ ‚ N “nyÂ`†“í0¼\rÅõ’«n}ô:‚ÀσáòëÌÁðÁà‚!”`@0øÕÁptÁàÔÁPF0 œN0ÜF08‰‹.½ZråÍ]k†h‚Àq.¼ärÉ7=píh‚Á€`@0  i0Lß8äÁpËãn@0œ,L“nyÌ•`†“ .ºTrù÷^c†‚ÀÏ\vÝH‚ÁàŒ‚aÁ€`@0  Vàôý?™X·ƒê®ÅÝ%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-7.0.png000066400000000000000000000354261430147706700257650ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈáiCCPsRGB•c``<ÍL ¹y%EAîN ‘Q H 1¹¸€7`d`øv D20\Ö ,aåÇ£à,Z¤?±H:˜ÍÈb'AØ vyIA ­b'Ø@3ð…9Ù>@¶B:; ‰’Zœ dçÙñ¿åÏg`°øÂÀÀ<!–4a{;ƒÄ„˜ÊBþV†m—bŸýÁþe;T’ZQñÓwd(H,JK3ƒ4-áÓrÞHá \Ñw€k10 I 'BrØ6„£G³ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/ IDATxœìÝi×}˜ùÿ9ïr÷­÷nÝØAqEI–©Å´äQ¬Œ:®ò$±SOÆ™¸œÌÔT<ɇ5“J⊫\.—Ç–S)ÇNeìЉ%EŽK2%KE܉µ4€nô~÷õ]ΙEŠâ%¨tãùU(¢ûÞ÷Ü |¸OŸ÷œ£ÛÖþOü£„ŠS;òÓ‡´Vj3ÆÐ«Ï{sÏýÑŸ\yáóó"b7c ¸uz³àöE0è‹`ÐÁ /‚@_€¾} ú"ôE0è‹`ÐÁ /‚@_€¾} ú"°¾4ÿĶ2w³€­)6ŽÛM1&zÇï ÚÕioР°æÜ<­¥³rÕ6+ŸÖ½•¹8T}§Úެ8Ó+"b7p„X#n E¬]=õåßšßì¡`ýpƒ9nYB’›=¬3‚@_€¾XÀw ÅkEDŒ8×ë2­Emê°°aô¡E©¶“Lµn"p=·çYë˜N3× Ãb×(Å®Gw‚o+ЬÝ}ðÄ¡±]çîó=›tý(cbv:©å…Ëû_j­d.tˆhØæ†íNé7}¨ã#­í»ÜVdÄZ?0±Žu²Ubül>©ßå{Ý’•󼞫ݮW˜/-Å¡._Ýw±Þœ¬(ãš·{¸ë*uåâƒÓ ³KÙüj>•*‡'.Þ;¾«~Oi¸¹ßÑv,èØÏlôËÀÆ"¶•GÜÑGH¤‚æp&(ÚñQ{ßèîøîìÀçGrÙæh®Ðp\“°ÖÊÄÔÅ¥ g<5wþc/)'~Ûݲlì˜Ü`-;1yæ¨väX+AàtüDTr=ñã`£_6Á°õéÝÇÿf^Ê»Nf*YÌìIdd³ƒQfç¡§4&ÓnUí²–È¯• ³~²—u½ Ýë&«amYeT¿{“”2ªUŸ(÷º³+ƒÃ‹º½\}vºðt"ÝÍÇa×öZ¦¾¡¯Ží1·¨ýå§JæwŒ:~~§ŸMî¹çò=#;V&+Ë;.ÎϺ”Ë/KÃó£é\uØOtsŽŽÝŽîġ޵á+3çyÙù5o0FYkµUÊ(­­Š­QÊ:&“+†¡Í× fŸ|ê3¿yz£_;63 [ÉîÝÉÉžÈ OÆG'=èf ?•3VEJ9óÆó;…Lvn2‘(ßýžo~:Whïòü8¥µc”´º\]ÍO_:·û;ªO,ØØ1¥‘ÓcÙÜÜH¥¼w¶Yª8Z‹(«ZÍU±V•¿wÈó–²ý`c ·?µÿ¡OäÒcïNMíK$G âf’¥áË;wìåHøÍùKûOת–¯\üàÉÕ…».9:Öqä™v#{5• Š®'^HÜë9n׫´›¥ÙZuߊë¾ýNIFD\·çïÜsá¡{.Ýwîµ¾¶²tdNËë»+iY]Ü1«bË-IÛÁpûr†ÿJjç‘øè‘‡åSc{+$3«cVÜ8 ¼ºÖ½t¶Ð݇ºëºí|û•ѯÚî`»Ókˆˆ8:v^{þ§þ"“›:_œí´KÕng aM"êu3=×µÊ(e%ÑZ©k™pýÂŽÕ+‹w]ÍV¾·kÏ™Gv:ñHª¿ª®¾ªÑ"íF¶Õ®„›õæ`c ·]<þkùB~`Ïþû»:òÐÒß›l¼×K˜¬R¢ŒéZ¥ÔµÅ'JÔâjââ¥s÷?…Å®Ÿ¨' ƒWµŽœjy¤v‡[åÕÂBµ|pÑXmŨëg0(eŒµZ·¼D¦™ ºù޵ɸ!QâšKç>ôÊÒìÁKZ·Ýv§ÔQN¤E|sí9¬JlÆ»€ E0ÜFrwýÝÁ‰{¦«½Ç¡úC;÷¬<”hïqëZévt½YKÏÛ»]/N…¡îYcTûay±ã4ÓùüÙ½^"Hõ:êÕ°7ØÖV[±Új‘ë·1’˜Ü{ð…÷º^7}þä±gª«÷Îiýà-JVÛVsG5S˜+ŽŽÏŒµš¥Zµ²»¬¬o„ów‚á6P<þ Å£÷gî=¨>˜-,›¬ß[¬t=“xýsyØ“îåó“_oÖ’õl~z´Órk ³{¾Q+-fsËÅÝû^»'‘i£@¢‹gŽ=×jî)+yë¢f-Zwܱ‰—öì>ôÚ Wï"§Ýnœ+×*D~ø7k=›ËÏMî{ù#Žg½«—'¿7{ñ׌HgCÞl*‚aÓ=’1ýjíKA\h›H¤×Í5ª«ù ~"ÌfrÑÈøÎò}#ã•£Aà´\×ø©L\Ô²8y¥²z×byåžùzc¢Z>uixøÂ!­k~!ßò7óýÀú#6›ßóð¾Dnd§ë§"1×—X‘ ;Ñi·¥mŒ²©Ìl¡²¼ûôêŠ9³8{ôb¡tipêÀ™÷ù~·$b´—°~:#YÇU: $h7½ÕL.v=qEDe2q!‘hf}Ös\qDœÈZeD¬r=“PZ”ë‰ïzÖO$£ŒR"a ‚F-7[-Wví~n_qèÊ®ÕÅ=篖O äïÚsïòã“/ò¼8í¸AÊqâ¤çG9/em¬¢J¹pº¼8q²VY ƒd¯Õ(52ùz6“n¤ÃØ‹jåÑJ«1ÚÐZĹþ_DdñêçÛ­Á?»¼Ëóz©Ø¸a«™«Õ+;[ÍñºX/6Ö½v›q]«äõ󬈨|>#Z%ÔpG"6ØÐž}ƒVÆGÓÙ9p¸|o"çä­?´÷lbt¢zÿðhå=ÍÆ™Õ(rÚÍFþJ>ßO¦zÃÆ8ÝV3{ey~âµ™s÷ {C­×òo­׫w/VËwýÀv§ožÐòCç³ýc”}ól3 w.‚a#íߟð ã©âDfæüÈ+~ªVÜ9uåÉ”͈ýáo׎ҹB<,I¡´²Skq”Qbòé\y¤PªÝ58¶p÷ìô¾ï]=>-&]{¤­obF@‰2ÒÕÊj«•QÃçÇò¥…Q׉¼°çw—®î»ÔlMVõ»?¶‚aí|¤èx¹]n²§üéB:Õt=ë¿],¼N)‘kg+\?dÏÊõoWâ'Lfh¸|<™lކ‘óÙÚêÁ«V” zÙ@‰kŒQVk¥äf´cßôçZ´´ÜDr1gŒe +…½ŸûXi¨µG»â‹ÕñàèÂó§^¯5{+ZGJäÚ,Do}Þ&ÜF†£2CS~zp(™ZLï;ò½ŽîX~P;7þw ”ˆµVâÈéF‘ Ú oµQËÌ×Þ15}üб>©EääóïýÜòâ½—¼dË3a"êE™Ð‘kk´×t}§ëõºùž5ÉØZk‹C—§=óQß·ÝJTºíD½Z–ËC£õ#VLÔ릪ÍÖPSœøZ­X£2ùFÊK—½u{·p[ 6ÈСd%•Ù•ÈyC#Ïï,”V9®|ÿDæwc•^àUÛ-¥Õpk&Òa:æGÆ+Çü¤I+-Z)QAÏm&Òåâðè‹2¹ÿÜ}A/]«U†çZõ¡J­6ZI%ó“¯ÜÅ™ÖÂåç뵩J"ÛM ¶'³Å`ÌZ±q¤‚vË©VËþ\muôÕ³¯~à1™Pk«ŒqíÀèËcG_x"ÙxöÙ?³ëûÎ`3 ¤8þ‚ãwdrÕôØ® ÷æ ½öÖ_;uY‚Õ¥‘ÕrrÉK„™¡‘êÁl¾»Cëë·)]gŒ˜FÕ]^Ú+žŸîì³V$ .öêÕÌùÓ/ÿòµiŠÐŸØuö¡Ññ…#Wg§NÔ–GZ­ì•\iu\D)׳ÉB)«×WWW&fºí‰ºã†ŽˆˆµÖznài%Ê}ƒ¹€­Š`Ø÷{n¦4šÊíÚÿò]Ãc«GµVï´tADD¢H…aO·W—^>óâ#_NggÆïyð¥Oç ½±·ÛåT)QÙ|8T\šÒ××<(%âxâ*Ý+ì?üʇӹ°h­U‰”Í'’•1?ÕË¿\ÉÿyeyüìÀpù¸ç‹/"b­’T:[Ü}õrmÚ¨L¨­UŽëÅùã—g‚š#³ ?4l+ÃØùðñœrÓ“c»Ê#C3ïq\›2VŒRòY©—³Ó—Îßý¥«w_œžØ{÷©§3á@¿#”•HÇù·–ˆR¢sÅxÈqêãŽsík•ˆR’J÷FwL^ÙùüݯŒL\:?0Ò¸ûõçw=ëVö myîø%qâë'OkiT‡*­Zĺg€mÎy÷oÁHûéñLqâ>ñ¦:奱sÍZö¼Ø Ô:ò\Ï$ßJÙï/n^˜Ýõ­s¯ýØó­N¶wìÁ¿úD~ ¹×ZÑÚ±žRתÀ›XE"¢”zû’PJ”ãˆ{íë?x›ãÏqB·^I^M¦»™t®½Cë×Ç£Äõ¼ÖÝ ¶:<Ù@)Q¢”„­e­ºí³‹gÿ²º~o6Á°ÎÆÇïOç&ÎŽß³SI: ƒB·^\¹zùž×*åìùLfµÎvFµE:ì¶K½nb¥YOÏ-\Þÿb½2¹ê:"AOêË ¥3²]QŽDAÏ«uÛn½ÓrjQh#¥Œç¸Êé ý)ñü°02±x´0ÐÚã¼e×&ÇÇóºù^à-¬.ï[p´Ñ¢”ÍUe€m[’ÖYòðs:10éz©Xìõó¬X-«óÇ®\Lv¿.ò’u½Ø«¬ŽLÏ_Þs¶ÛÎ7{Ý|;ì•zúúJ„¥ùã—´Óö÷z*߬ÙÇ‹üd2È%’½R6ék3·D;âøŽMõûzé^¸Á­=;¶2‚a}¹Édq8U˜%ñ[×8nì,\¹÷R«>üçÆZÛ¬ì¨ZñRF‰#¢7¶QÒZ)ׯ%Š+»‡ÇËïñ&­µˆˆ’k[³^»GÉZ±"êÕ·˜×X+’HE¹Ñ±Kw5«;–뵩ÊëOÍ€í`X'ŸøGìôr™G®\n"7jÅüàiË×Qâ›zeOYDD;F‰Ä×¾øC[(‰ƒÎ…Óøz·óòJ2Õ)Z;Jkã8Æ5FÅÆ¨¨ÛÉVÃN²™È4‹éLk(™î grÝqÏ3)¥ßi‘u~Òäwì^ø±lþ+cË‹…™êêΙ°îÍ­èGŠÜþøÀ÷#zôï<š9ðñìPÕiôœÿ«_`Uu’§º/<óØ—ÄQVKÓ™øÞÝÉd7;sþáçM8Òqýšï%«)G[†‰°Û-uÄ&"¥ŒÒúOwsµUJ5½÷|ã' ÅÆn/æ]Ϥµ­Þ¼ˆÁŠk¬X%Ú¹µ™…·RJ”ëŠk´qÒ¹`ÜÚ8½Ïûó¿ý‰|¡è}Lé8·zÅûÆŸüúggÖâyð£#nŽûþðÓ?“ÊïéuÜ ¥õÝŽ6NÔ º¥uHk7š(þ¿É´Š³%ý~×O$NŒL,=°çÀ7æ.œýÀ«¥Ñ¹¡Éýç?èiã¯.ïº\^˜=°ÿéc#;çŽ)mµ‰^¯“ª¬.Í,\:|¾Ói*e®Ÿp-ŒIFa­x~õH2eò¢äú-LoºI‰8·8dÅJ¿Í–:-Ýè´Ýê¥éôsK3©¥[ºÀRž  ïÌü¡ç‰éµÌoŠÈÿ½Ï €5@0¼;õÉ_ôЮC™æ‡ô1ÏWŸˆ¢„Úá¼ãéd§WòCNapÌ=â8¢¬½ö±ýÛJRÙ`äбW~fxl~_l[hï‹B·>¹çÔñÝû¦L,ÞŸÉwÇ_„1V†Çç«;¦.\,/Žœ­Ö[µÁZ»=^5Q&´q!xù¹½Qyfql×¥ã©t{Üõ¢´µÊ«bÏ‹2¾oÓJßl1XiÔSWšõäüÀ`ã®D*ÎÉ[n[ Õí¶ÝZ® ûw÷r7ûf>ò »“~vd|v±9wòÉ“ˆH:+õrô_]ßÉõ:½goö9°~XÃð¿ðø#I=™÷–.›8'ÍtW§?päáÔ?Ieô± gíêR4“/¸Cé¬Íº¾N[cë«älijŒÄƨÈq¬o­ŠM¬¥¬«ë¿õñJ] ‡8r:Æ8]cTX«d./Ï¿¶º05Ûë4õâLnn0—]-EqªEén¦z‰L%w×=ßýÙ\1˜xçY±FÅq¬KÔª'ç/]8øÍzexyhüü„& õ©Â@c¿ãˆ#ÊjKl¬ [UÛî¶íÿð›?óä_Þè{ûË¿ÿÉtª˜øÍ¡ ûþ¥9󗧪ÿô‰'žŠüqýlðì`aÂóþä?×—ä©§¢7¿‡{ÌK•.ØŸ9Þèµ°6˜ax 3Xø{ƒþïIw¶46p<èZ×O¨=~BrKW‚ŽhÊI)™Ö™k¸ñæÒZ­íõ“¬«µíûþ[{íèf×3)“±’HÃC£µ£qt&ìõœzÐñªÚ‹Óét8ÐëxÕÊêàéËçouáÀÕÖÔ«WÓÙpX)«­UÆŠŠ­‘ØZmDÄX«¢ pÚµrþââÜø¥½X+£3¹êðèŽKÇD"y~Ç+ós»Ïds«Ï»®èDª“óý^2’Ëgd¶:]¹™÷¶RézÅñÔa­d_*­æžL9"=ñÄFD–ßæ!êïÿîÇ&3Ÿ‹Í®òäøàŸþù_Y‹Û pƒ†·H¥½áÁQypl2ñ¨5J®ýäߊҢvî÷ï¥äæOS^ ×®ë8&á8’ðqVòoÌ $’q>Og*“§_~øsÓ'øË^ïÔŠvõÜN%ºÝŽ×{nGév·i7c•T¦–Ùw×3Ηj{­8ëŠîÔýÕ0’¸4¼´_»AªYÎ/W+w_êvv5'Ò¢ŒêÕŸOÚ`1¾™W°Ü‰Zî™æí©Vç‚¿~oó½áå‹ïô·8â~hxGòÿ º2Ûke«"òÇ·øà oO)¥”r¾ÿ¿×þ«oõ,åõ×nº«Kó;¾ÛkçVmœ +•=++‹÷~ADD”¾¶Ú%ªãº^-…~$&&3d¯›_^]ð›ÖFžŸŒS‰d˜mïu\“jN­,Ï8¾RÚ¹´ÙF­¼¹Û*´ºíæMÝ"ôÔOE"òõë¿Dä ïö¨¹žp]ï¢Ø¶âŽzáæÞü¨†·ˆ­y›cÓnkVl·ë4{§S«gêâ4SùÜé1cÓ=¥N¦ªYÇ‹Üdª- .M¥sÍÑòrqfáê¡“õÊÔòÉç?ö×ûŽüÕ{÷ºð1ϳ×5I}}·çãÉÔòàÈxåQ"Qä´k«¯]¾¤*Ë•çNVfÖó•}æúòóC‡ý¯;w^üçªëx-¼ ‚á-¦_˜ûO»L|ÚKèÛw>á-”¨B)˜Èf~ʘˡ1*²VŒXe”ÑÚz¢­Rb]íÄ)DZNq µ|×êÑù™3/U«…·ÓÖèØO„)k¯­¡¹ö»ãZ?í…C×þ?LæêÄШí-\n|YDž•u¬•3g+gάç%ÐÁðOýîw.¾ï“Ÿžs\Ù¯ïV®'­Åyǯ¥D¬µbHltÏÄNWkã9ŽI*Ýÿ6DZž8Ö»¶@úußþ[¯"ŽkÙ|grïáÙñV}qåÊÅÊ‹ùédzuÈq~øuZûÆcµc]/i\×7þõ'ßZ32¸aÃSK³ñ(kýZe•ãˆ?<¡ÿçü€|§í·t±ë‹ªEDâX$ f·\h·Ò‹z~±ÛÖ½áÑ¥»Fwù ›´ÆÊõ…×7òìïúÚ±®(±&ÖqYGªç8öÝOp¶"ÊB`›#~Xôï~ù³ÿé­øÿçÈ–ôG$±1ÆÚ8ÖA¸n;µô’Õ^7UkTK‹Ësû.U«“åÒЫ{½ôp&ßÚ¡uì=Ý]],½œÉ¶ve‹á¨^ƒxQJ©\!Û{xñCqdãkÛ¸n•{±°Þ†ðøãë³sϾ´s_æ§µW)¥å·V"TW“;ÄŠQJ̪1ʸ^˜tÜÀ õ»ß9¿ôØc¿=’YNï}(›KÞ刺é`PZt&мqæ™5V¢0{uuñ®Ë‹®Ž^;ö•-\š./Oî>téîküV3½àz½¼ãô?!XK|ð¼qöä“O†ã¿öÁÁ©ŸÒZüµxÒ8’¨Qógg&Ÿ]¼rèÊÎ}'îšÚö#J¬¶6r‰NÞul"‘2…dºY\‹k7Š`¸IŽkša×tŒÑâ¬É&«Ê¸žV;vÏÝ7¾ësw¹^kКÈ‚Tybrñþt¶7¦Ñl\ €Í@0Üdür¯ýóÙsö—Fv¹ÃOèœãª[~×ú¹B0‘“Þ„ˆˆ1"Q¤;ŽÓwëX«8å›fÝ"Ûnf¾1cžûÜ™ËnzðißWÙí8~¶èÜý£ê¦DD‰RJG<¥DßÎÛ›Zk¥Yí}î™'/¼$$ À¶Å Ã-zúŸ^zúeùoþó\uÜ’šP?“H©Üf XKkzjñÈ~öÿùúùsϬþo³ç‚?2±5›= `- kà —ŸªTæÛÖjªÕÍË»³b­î"Àà–¤µð¤ý±¹*/åòòÑ[=úVX#6 UÏó¬¯tÿŒ#VWý+í–W‹Ä¾¥ü¤$rÅh4‘ŒnéV*eå°Í kÃ^m´çüùd.³¿4,»7ìÊÊJ½ê_m7ýJa J$ƒ‚Ÿ09­åÚ¸ÐÍHIDAT¹ÍÖJ:ÝòRúüì…‰ç»]¯“+.MîØS¹7›‹‹Žcoñ<‰ÛwA6Ö»$­‘™o̘Û[U±Î§²R²VeO­ÉánïD)¥Ré8ÇNgúÔ=_š9}ï7]¯i‰0…n«ÛN,_9¿ó[+‹£ç&^~hêÀüû‡ÇZ{³9Sr\ñõ;ÌJ¼#+Ò¨…ŸæÉóì’° kèä—Ïwž»rú›º3ø•T*Ýör—뫌ZçÆG¡îFa²tTkyþ¾sWgŸ)/åÏ]:w๙éCÏ'R]wÏÁ³nt=›p\ñ~ÔÛ¦¬©—ƒ¿øîŸQ€m‹[’ÖÚ ¿vâ[gì_½à¥áê“©Œ÷·iɬÕ%âHb­­NSÄ8W/~ûÂé÷}«ÓhÙ8Šî¹¹Âj)[¨¦ÒÍÁ‘åc©t4°VבkçÉ9rmá|¼¦Ï €ÛÁ°Nž|âɦˆüÙ/þΧ®Œï“K¤e·µ×~oµVD9Žº¥c$®Uü«µÕÒ¹FmèÊâÜáóa0ÔÐªç¦ çFÒ™•Ò¾Ã/}*•Ž´c}ÇQb×zÀŠ8ʆ"ÂV²ÛÁ°Îº5;³p±÷{ͪ{¨×¶+JKÜií‘îûüŸ¾•5®'^¾äòå|§ÝØ;15ûkµM¥z%/e•¶®çG9¥D‰¬C,ȵ[’ÄJ$À¶F0¬³ÿïŸ}~é—ùþߪuZÒ2""æ/Û{ôø‡i»¯8¬ŽÞìs*%ÊõlB$Jx‰¨`mǾþçk=þ~ŒQÚa[U€mŽ`Xö3Ÿ9Šœßü‡‹?üןþG¿¡´ûií¼ý,ƒ‰ŒJå¼ý„3öN¸ÙPˆ#ÛnT¢WODì-EFØiÕâ™[y,¶6Óß\niïÞŒÉdÞ6j—¼ÿó³ïû÷ù¢ÿqµ†gr÷ÚæÊw¾Pýõo}éü_Ø8w‹ÿjR‹³-9y2X»‘àvÃ ÃæŠ*.ÔÞáë¾ë¨ÐÊ—RÖOyíê‹3Õµ|Zl?køsk¬m×iÈf—ðî} ú"nolY €MÅ¢çÛÄC?ÿP~loáîl)µÏsuÒØ8î¶CÇÆÎNÅjl‚á6ñÁ¿µãïåKêO¤TVD)G¬õÅqUš`Àf!nž¯³®§Æ<_\{íÜæÍÀ†ÛEÔÓ-Kw³Ç¼Áp›Õ3Fqj2n+Ãm¢Vî-6*ætГÖfxÁp›hu½/Ÿ:Qý¥Úrü_¢PB–0àvàlöpÍÉ/ŸŒÎ}óÂÊè¡çSyI;®Ú¡•Y’âHjWÏ_>ýéSkÿìØN†ÛÌ©§Î,êäðÓ‰|æ¬R’ñ2®å¯å5Ü(‚á6tùÅËíŸ=õª[ymÇäƒ~B¯éámnkncOýîS/×Ví7z[µVìfwn»½™¥éà_7ÊîÅÒˆ÷³ƒãòç«Ìf wnIºÍ½òµsÝ^Êy%é§üÁq÷!/¡ó?êsrKn·$m'Ÿ<–Æ¢4]ØX|Ýì—éß/ÍÿªY5ç³ÙÀ[’¶ˆjµÅaöÕô€ÿŒµÞ@"¥¦G¼[y.nIÀ"¶ù³óá 1}eàÐÈ×|/UHgÕ]Ž+‰›}‚7Š[’¶ /<ñÔÊsÿñÕÿ£²"ߊc 7{<ؾ†-êÛŸ?ÓXœ ¾jmoöX°} [ØìùÕÏ5krƉ7{,Øž†-ìk¿õ­ Ó/4ÿEÚÕ›}¬µV‰ÈÍþÀ†“ž·¸¥Kí¥²öf£”MFÔñ_üö¬rÞ5´±ªÙŠ«aM½öçÿòk7'غ†­M Œeök%þÍ<ÈOèá#eÿ©{C¡¡”HeIN/]VÿXD¾vK#À–D0lq±•ø¦oR¢´£Ü½ËH)ÇßMp À†s¶¸=N¶&Ò?žLɸRëó^)c”nWƒs™‰ñöîûÇ’é‘|27•suEÊe±"rS·E`k`!ëÖ§þÎoýô/í?îÿz:§v+µ>§ÖŠíuÌ¢1¶®”ꊵ±ˆ„Õe¹0w6øýs6ÿí'Np&À6à Ã60ðÐøÉ¸®Oe îQ×UE­×þV3¥D¹žÊz¾ô|5êùzÜõôŽTFBcMÎ=qöÛjk}]l.‚a˜ùÆLt(wìB9êžId¼{Ó9]¯Û“ÞL)í(å')›Wë±=Wž.s&À6Â"Ö-ìç~ã'ìÑòè.QO>ùd|èS©¿ºjIìÆ®'Hf¤¤}}|jïTv#¯ €õÇ.I[˜‰Ü‡ ƒñû~â×ùËÒHvâ¥'«Ñ‘÷÷ÈÌ.¼™VJÒYïøä¿ "œÓ° [ÔáÇý’Ç Cö£®Ÿþ•Õ+‰ØO¬ßnIý(-*[pï óy]¬?‚a‹yø±‡Såžvïz0÷á¡ y$‘rÆßøêælzÇbªËá·Vf,³ Û Á°µ¸ïùäÐ/zI}(ó?èù2ºÙÑÚê82íJ»möX°¶†­%5¶Çû…dZ?¨”¥nc4¬1FbioöH°ÖØ%ikÑÚ±ŽR궉¥”LìuÝy :&Ü¥”äKv¬3èæCÞ>§È`MqKn‰Ò"¹’Þ—HËÞ°ænØ®ØXÌ0à–™ØJvŸûö“—~h·&lÌ0àÖX‘°g›Qh*Ë'ÛÑfëƒ`ÀMSJÄ‘¥Ùð?^9K› 7{LXÜ’„›…všæt·eWšµîŸþÅo|õÔf ë‡`ØFüq]3/9Î:ð¬”H¯+ÝÊŠüîÌÉè«õå`a=®€ÛÁ°M<þøãú…àÙ‡wwÓ?Ÿ(ª».Ñ`bé%ÎåÏ?ñŸ§×ãùp{a Ã6qòäI«nvl·ú¹LÞŽ(µ>³ b•±ñúÄn?Ã6ñä“OšÆj傈Øu‹…kˆ€;Á°}XÏõ˵yщ7{0؆mdàǧËsÑËÖXÎEÀš ¶÷òr~tÊý ÖÊ[ÇËØu|nÜf†mâñÇE7Väžl^¦”^¿¿Wk$Œcny¸S ÛÄ7ä=0–" ­]‡YõÆïÆ*fîœÃ°M ‹$Çö$5Qck¹K’1bÂ@z&£”¨n+n]Ë À‚`Ø&šåTX«„_Nfý?a‡ü¤äµV72ƒd{[./ÊKÊÚŠ?¡Fr%uo2-…nK­ÖËæ÷’ õT`#§Y•N«!§ÖûõàöÀžúÛÈ#¿òHv÷½Þ¸Šãáüpé9Oeí@¿ïi•äÅFÍ|áÂ+?Í dê""n/.òþöà„þQ viNÿÚïÿâŸþ—{%¸]0ð<õ»O5E䜈œû¥?øéóJTiÇ>õ“J½ýZklØnFÏ,^hÿ»¯ü›¯,½éK«¿üû÷ÿÆòÌ®ÓF韈»ayC^n;Îfëcô'öF^×ø¥Q÷QÇyûmVW%ý„«UôÅW¾|æÕ7íÄæÍ³Ÿ=}j¹Úùêå +WÊÓeÖ-ÜØ%i›úâ¯~±µ‚ϯ.ªývMRJÄqtÂOx¹~Ï3óÔLwú‹Ó½õ)ngÃ6¶¸8ÚšyÍ~¹Û–ÆÛ~ƒ±Æ¶+½… ¶Ö0lU÷ÿ²7>>î -%"Ú*xáb8=ýÅïÏ\xm%Ú´Xž›ùö®}‹H$ãü›ŸÂŠˆ+Ñ[Á°EMêÆÁbòÈQÉŒø""éD-Üui|ôÞ“þÔtÂM»ªS7îkß™œ œÿz<]ÞsàüÇ©¨¨kkWâH‚VÝ\ÔJV6÷ÕàvE0lQ®—MçÆ\?勈h§šÜq÷¹GŠçÿn¶¨G²“5±ÄnªùÊÜlêÔ¥éGžïuÒÍñ]ÝY¾_k-ql{¶¼ö̳ó/möëÀí‰]’¶¨Ò®ûwä&î׎爈Xñãln©8:¹zOq¤w´8h÷gò²«8MÓ©­.¸ZYÙ³Ô뤖ò…ù1׋òž/)íJ>.Û³Óß¹xYDØ ?€`Ø¢Þ "Jš‰Jeul&Õ²1Q/Žl˜ÍõƲùÊD´k­úÔR¯]l7›™+ŽÓ°‰d·”JÙ‘á]‰÷Þ÷©CÞ3ÿéô3›ûªp»!¶¨7‚!á%V‰(¥D…A¶W^\,/MN7ªé+‰d#/µwç‹•‘«—&^ M±Û®4ªå«ÉtÅ- Õ%Rΰ;:|hâÒ‘cÌ|æ$ë  "l«ºå™XDÛ–gŒ²""Z[å(mƒîPgeáþ™×^øÈgkåÌt2îÜûÒ±V‰ˆˆòc«0èy5±Vr%çÞ#ï+þvþ`÷omê Àm…†-êÚ Ãáñ±§öî¹ë»‰îÆÖp]¬¾~H›-ZÇzpôÜþ|±³;•n•ÊKé™^0Ü4a&¬®Ï÷:jA»=íûaÞqÕ huþé?9õÕM}q¸m0ðť #CóÇ3ù…1åÄoùû4EnT^-\ zºÊƒc;Ïz}6¢Œ´.œù苯|÷CŸ[Y,¾ª«)çþ¿ó;Ÿzh3^ n?Ì0lQÙÉãéÒäŽv³Ô¨–‹çV®N]êµÜÀD2Qï_¡c[͉… çÎy^#Î7Æ“‰UE6èµ[Ž#:²½N+½èûM“ͷߓк÷'&$›Ÿž{i®³Ù¯›‡`Ø¢¹BÝ”—¯,\¼òêÕÓÍï5¯^~µQ>}¶¾xþl}áô¹nåü¹ÚÒÙ™ ¾’H–îIV+SKõÊÐL2YÎ옺òÁBiyxia✉3‘Ƕ›CÍÕÅ3®×î–FªyžÝ-*ýÊ«_9sa³_+6Á°Eµ—g‚ÊÕëÍùµæüwkÕ+ß«Ugž«Ö.=[­]~®R¾øluÈlØâÀxväÐVJÝR§Zž˜uÜFX\Ùßn&µ©U¥b¥”¨(J…•åñ×k´sÅÚÑlÑ&|`Ï¥âÈŽêÌ‹3ìœp"¶±‡>á*ëMeG )¥”ˆ•(NFziµYËÌ.^½oF«7¾_)Q±IÄ•Êè¢ç7»ƒCG3yõ‘D1);ïÛ5wæ›÷j°ÜÍ6–‘^o¤¹4;ÖøáEÒ×¶e{¥ÞùS¾X,UvL,|P9Î?ó“醈üÑÆ›‰]’î@ÚZõv±ðý¯ëH…½ÑÖòâø™n×_) ©ñLNýÔGí£{7rœØ|Þ–Ö"‹³S³ÕÕÌ™(ˆk&–b&ç6{\ØXÜ’„·eÕ®F—^­ÿ‡Å‹Àtefú?_zm³Ç€E0 Ð¹z>y~îÅö7WÏ~qn³G€ÍÁ-Ix[ÚóâTi¢4zèCû÷ç7{<ØÌ0àí#ÉÌ «w;ì&2#¥]ÎÕ®Î]9óy¶V¸ƒ èO‰õ³#ÚI”FR³ÓCÙüÀKne±2=ýÅ@Dìfë‹`À;³b×'7¬?uÐI—ƃÆêÕÃ?¸öõNûüüìwžìlö0°>Ü0/‘oäpÎwÇa÷H¯]õ‰sþJ§/|û3 "lö°¶Ü$#J»ÆMä›Êk/]º;•›Èí~`¥[¹´PýÞåÅ—¿R‘H¸e `Ë#p‹ŒˆñSã%ò?,¦Š;w'Ž¿çÓÍöêôB}iæô]ªž8ñâ`‹r6{X?r•õ¦²#‡†”Rj].b­(«ߺ~J;‰tÒK dÓ{F3“‡ZÒ16½Ð)Os»ÀÄ9 X#FÄQ¢ãzÖõÓ*SšJäw=˜ÉyÙÍn Á€õ£Äò `kãó€¾} ú"ôE0è‹`ÐÁ /‚@_€¾} ú"ôE0è‹`ÐÁ /‚@_€¾} ú"ôE0è‹`ÐÁ /‚@_€¾} ú"ôE0è‹`ÐÁ /‚@_€¾} ú"ôE0è‹`ÐÁ /‚@_€¾} ú"ôE0è‹`ÐÁ /‚@_€¾} ú"ôE0è‹`ÐÁ /‚@_€¾} ú"ôE0è‹`ÐÁ /‚@_€¾} ú"ôE0è‹`ÐÁ /‚@_îfm#шhš`+#î ±5ÊD û;×Ö(Óë¹ÖµQ×ÀÚ"î±5*j®„åËÏ=ï&óX½1âúôÂfMDì†\kŠ`¸8":6ÊDÝàì—þÅ·®ÿéß›€­ˆ`¸£8oþ>Äà]±"@_€¾} úbÑóÄŠý~ úÀßÏmÔuÏ|{WKä YlAà Qʵ®ŸKÜû·çç´ãÅué Y–ÒýÏ¥rBjuM¬‚áN¡Äú™‚ò³ïÙÈ˶ʗt¢rÖ%Þ°å w»±Ú•ÑDÀÆ¢g} ú"°¾Õîr[ÀE0è‹`ÐÁ€ugÓIµÙcÀ­!°þšÍÍnÁ /‚@_€¾} ØÙÍnÁ /‚@_€¾} Xw™T¤6{ ¸5Ö]³¹Ù#À­"°®¬f¶0‚@_€¾} ú"ôE0è‹`ÐÁ /‚ëÊg³‡€Á€u—NEœö °E Xw­ÍnÁ /‚ë‹a[çôE0è‹`ÐÁ /‚@_€¾} ú"°®¬U*m"µÙãÀ­!°îZ›=Ü2‚@_€¾} ú"ôE0è‹`ÀúÒ¢2›=Ü2‚@_Ö·l]Ö]ÚÄj³Ç€ÿ¿;8 „¡(ÈÚÉK´‚‚f*ÈÁCÞ!Ü @$èõ­ýzî   @$èµËÁ3À`‚VÀlö9  @$€H0‘` ]Õï§$€¡  :²Ž…Qx—_ÈIEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-8.0.png000066400000000000000000000201431430147706700257540ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢3IDATxÚíÝwxÕU‚ðñ ˆ ±€AŠ (ˆ€H½…„r)ôÐIO!€Ôì;V,ØP@@DZè:³ufggf_gçuvfwŠ}Í{£âŒ;» Î æóyžó„z“çœî÷ùÝsNð¹"nN£vi+2b‹*sb§îü›˜¼-Ùm/Œ´N(­m5@0 ‚ƒ`Á @0@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ƒ`pBCáŽÜnÛrºd®ËjÑ¿$±Eßi‚jl0zý¹1y[r»ælÊì8vÕø+Ë/ï™{ÍEí“\xÍ‹5*ª_³hWu$äw™²6«Ó„g3®oÒ¼Wa§ ¯Ò°Éõ'RÿüZ ·~ôžó¾ÿÁPy(ºnÏ¿~ÊK¹Ç>™Ñ~Ø}ƒ¯ˆ›×¹ñµá%õκè䪪ªàœË»^ƒƒ“O=ËBÀ÷?*snÈÞßaÌc®I»+ñÊÄÅ×5í6¹É©g_rj÷©•AãkSƒÓÏkfÒ FC᎜.Yë³Û¥¯Ö:~A§}‹7lÕçÌèË×jÕfp^‹Áiç65ÙPs‚¡2·[ÁÖܲ^Éj7ìÞa-ûNoi—1 ‚ÚuêtÍÝ\ÒiDPÿ¢¶&jR0t/Ú•“ÿz~—)/g¶~J‹¾Å·ëŸ}YçZ—ü:¸ m|P÷Œ†&jT0Tod.ØšßyÒ ÑP¸/Ò²ÿÌç·pVÁ«‚óZö4‘Pcƒ!úw]¦¼œÕ.íîH«³¯9ÿʸÕ']pU¼ € E‡N>Ê»&õÎÑ@8'ú_j]ÜqXP§î©&j|0LÝ™×aô£#›v›Ò¬Ù[Aý‹Û™4 ‡78_?yMö•CÊcN9£áIf ×°ÅämÉ»vøý‘‹¯K=ßL€`8âéBen§ñÏLlÙ¯¤}ôŸÕ2S ŽØèüJÞÕ)wÄ×¢Çéf ÃÁЭpGÞuOŒ¾¬ë„3~^e’@0TyçBÎUIK{Õ«Î ¾ò„!¯ã¸§G_Úyt ³‚áˆ`¨Ìéš³)¿Ý°{ŸÕ¸›Ù@0 E•¹'>?¹eÿ·‹˜ ŸîœnÛò:f¬vÁUƒ.23ÀÁнhWn—Ìu¹m‡.ïW÷ôsk›àÈ`Èë<ñ¹qMc&]eV€/ƒ!}EFLÞkù׎x0rN³Î0+ÀÁpOF—̵™­âæv[Qå¢6à‹`˜Û¨]Ú]ã:MxvÔEí#MÌð…6ñ¥®JZ:öšÔÛŸT¯~3| ¥ç_7'½y¯‚føŠf±Y\3)±á}˜ à+µpN£Öý¯3À_¨wVã:õ4>ÕLÀqnôC‚‰&9«R‚É…A¸0!ˆÔÓÄA0êŽÄÖîONÍz<%}âýaRâœøö-ûw©7¨¤¯É€š.ëñHÆŒuá¿•nÿkÁÖðí¹›#rW%•%Îî׺ç¸'u›Ð·VUUUÿlZV‘` &)x6eB4~·üaÕò7êeo„U‹wG>˜¿%òéÏEuë aÉóc›_> ~¸8¾¶€š «SÆÏßþöóXø|T«–î –ïM~·t{ä­ÌG’žqK¢[™@0üå(~1Ü3ù¡°•ÁðÕñæá`˜²R0€`øš`˜öb¸ÒÊÈ緿ʤ€`øêXTyü½‡ šžœ÷tJûTJýx ™Û/è>9ÖD@M†Š‘ª)+¿)©í”GS.ŸòHÊå ›,ê}F‡Ô޵Ì$Ôð`˜½)üÉÌõ)oÎÚòwÑñÃëÂý#nŽ—8{À©fjp0¹Ÿá‹ý}öcÉÏ¿7ùìà´ZA݆uM(Ôè`øêølúËÉÿ8lY¯¦R[žÚ++¦Nâœø Îy'™X aÕ¢]‘gmˆl¿qS䵑·ÄM2§W=Á‚á+·B/Ù~Z¼fèö¤¹7œ#@0|e,ÞyÔ­ óÒ—&œrå «M,†/GùÞÈGcî|Ûu)ו¶tPÐ!l\ig‚@0úXÒg ¶FÞ*|v轊b¯×¹aõë·êÝ$8§å™&jr0|ñ¤aOx°tÛПå?“¼røòÁg¯®Z\Ø®¡#W@0yzRø^þ“CWFÊú]QçìZn‚ÁðÕ±dO䫇¾Ð¢gÓú;\d²@0|õ¸ÕÒm‘_$Îî×/af_“ ‚á/Ž[}wòCCo‰”Æ×¹¬ËeA³ë˜t _žž4käçéƒGVUUe»'›t GìeØþqÚ É'Þ×w`ZE\Ó5UË‚Í/0ù ¾Üϰ¨2òþô—’× _>¨kô[×y[Ä€`ør,Ýœ»9ùŠ_L˜Ÿ47®uõÏPû”Ú‡~–K;_zh54ªGõ÷*ÝùÕð›ÇO¸?rò”‡“êFŽºýò:×ï¶9kÔíC- òW§LˆÃïÿ–ÁpèFè½á‡3Ö…û V‡«Š_ ×ÏX—òÊŒu‘SŸ¼ ¥<¹ÞiMÎjÕ¯uè†è¿6€ïДG"‰3×'W.Ü™ü‹ÒmCÿaþëÉ?]²7üøoÕ'(Uì?ŽÏª÷8Ty["¿˜pRFõÏVUõZtøš±':ž²xð]ë•Ýó¬¸â>W§–ÇŠ/éue¤l@ÿk“_FÃ'_ å{¿±ÿÎö8ìFÃkC·>WPòr”’—2ÿ|¯‰Ï{w¯«‚ÚAm+ß¡žY=‚Óú©‹ãƒAÓ{UÿQÑ·¾~ÚóÉO-Úy÷ó7ò‹v…ÎZŸ´®xM⬙듷/Ý~ü]ž¨´do¤ú8Ö¯‹wGªòžýYO¶‚ð7taûæÁ´—F©K_,X=tmdá k£ÿ¤V¤,.þÆ‘7ªO<ú[î{øò¤¥HUáÓ§øÿd̉Áué}NwwÂıw HN]Ò¿qßiñµ[öitS7}iïÖ³6$¿Z¾;ü@0@ 4dN\Ð;§ÿIAµîÍ’ÅúóþS{UU? v>?ëѤҲáoÔ@©‹ý ºMº6ÿâϵ½ hÓäЯ; kS/ë±!ËÊ÷„ï à uϯôÉôÊê~ÁÔç†®Ž¾‘ÿX0_ˆ{èk¸(®uÉË‘¾ÝÐK÷G>)ÛùÏ9¯†?¹qcÊ?ÍÞ”òãY"?ôàÀ”è·­cà87çõœàŠþ-k§/˜¸`[äWßf0Ì\7dÓ°åýû½rqþ3) Ÿ­þ¹dôO7óp¨Û°npýè~Á°eƒN›¼rHYé¶äŸ,ÞþñЛþorctôÿ–¼œô|÷ÉýZ–¼œL{1%(^“½ ÆÞ=ÐÄÀ‰¢OnC_¯èײ^Jù žÑ7õónÜ8tû¢Êð½c †ê›¦g¬K~=iÁàëÌ0œèêAÛ„ÖAê’ø ªje4oеO'¿}óÿÙ±ìõ‘=ÃnJŠ2/>hÕ·³9€¾κ(h—Ô#&œ1æÎÁå ¶FÞ9Ö`˜ójäçãïM*‹,ŒoVýÚg6in‚à„ƒƒÓÎk\ÒiDФ˘ ñµ)A³Ø¬`Ä3UÕ]»sÚ5§§WÄåÍ}-ùwÇú±¤ŠýáÁ…;Ãw‹žOªè™ÙóµUÓ‚„û™|8žÛ¼[Шußê_ÖjØ¢çéõ/M:㌠o8í¢vaƒV§7½:9¿K¯œ±½2IY³doøÉ7=-©lgøÎ´“n~ó ëÚ îZoÊÊ¡Žç`hتWƒ6‰‹;µK¿;¡ë¤ùïI¿)¡mxw¤ãØÇ³b Ÿ˜5àÆeËóžù÷‹þtbÒò7¿Y4”ï ÎÞù‡ÜUI3'?”|aÝÆ-,ι¼k4zŸÝ&qáðEÏÌ(Z3y_öSYÛÇÜWülâS»mË‹/½»|â#•¥;".Þ~4çµô_Uˆ|£h¨ŽŽÒm‘²uÒÍ뎸up0°¸¯€ãÉm‚Fmú—^?ò‚Ž£—ŽÍ{fÂöYSÿ#û©‰Û{MßTؽhk^ü‚;–Ny|ÔY#¿-x~Ä?e=9úÀÂÊð£oãB·ÂÕCÖ„‹\4?þäÎcúײ"pœ¹¼gÞ¡¯MºŒ¸¤Gni^Þ3cÞÈZ5~WÏâõE±Swæô*Y_”vóüûÒo›¶*åæÂ§KÖ…ÿ±°2ò­Ã’½‘?Þ¸1òÆÄˇ.èÓ$úcˆ8žœRÿ‚ Áe‚sšÅÔ¾¼ûèæq³¦Ï›òØøæÜ³¨:ªG÷¢í¹=§¯+JY>ûÁœ§Gü}Ñ‹#´tä³%ûƒå{#¿I4TìTÍX7ôÇ#oéýqj[8]Ô.)¸ôúñµ[ôžØ¦Éì¹C—.XÑ{Æs3b§î8 =¦mÉ8÷áùýfÝ^>ìŽéO¯ñ¯3^I}{î–ð÷ßôIC4ö¸yP÷ ¸¼ö€©,R¬ ê{míË{\›S1µ×ôç§ Õ£[aev÷¢… e7Ý4ù±±»fmLùMÙÎðƒŠýÇv ô÷4Tݸ1yûèÛ§FƒáŒ™¯¤)åñŽ7åUUÁIõ×¹¬Û´&m“ozCö†¬n…Ûs?†Ø©Ûrãæß³hâ#ãvÌXŸöï wF>Zú ƒ¡zD_£ªt{ò/sº|زÁÇÍRëºÔ ǓӶ.í<úЯ/é4òÌ–ýft¾.㉱1¹›£±P™[½Ÿ¡WÉÚi©·,¼gúÚ´·íJ{§|oê‡Õ{ªŸ4T84>=æ{öD>*X=tUúÒMw¼Æ&h8Óì† &kôk×:—^?¦qÛä›ã;OZ3¹×ôuÅÃn_xߔdz^ôhææIæ¼’õÄÄí%kS~9kcê¯lOy§lGøÞ7zÚ°/rpÂ} SÍxº•€ãØ™^tžøBpnó˜z-úNoßiì½£†,*¿%ç©ñ»g¿šúë9¯ü?3ÖþQÉÚôË[=úž°õÆM鿬¾Üí›\ðV¼&Ü5éÁ¥,N°p¼kÔ¦_õ—Z];âü«# {÷-^<{ÂÊ™OÏÜ0ò§e;SÞ­Žƒy¯§ÿǘ{ó^œüXΆٛÓÞ.Ýžòî±Ãâ]áû“îOÌŒÃi§^ÒØÀñî¼–=‚Øâõ/î~J³^em:Œz 3qñY«¦l)Ýžö»¥û"ŸÍÞ<êç£î.~jä]SWO~tÒ–Ù¯ÿű>i˜ûZä߆-ëݶ^ã‹ÜÏ'‚SN?7¸¤Óˆ Uÿ ¯I½;#vêÎÜžÅ¦Ž¸kÉŠê§ ¥;RÿP¶3å½â—'R~GÅÈ»ç?4o˰·—8ú“”J·Gþq{ÖuN;Íæg8‘\7§Q»´±E•Õ§':nµWÉêã˜ñԜ׆ÿbÁ¶´ÿÊ}&skÏâGæŒ}`檲i¿_þæÑÃ÷J^} Nì`øüb·ÝYýg?yㄇs×–¬þÓÂçǾ1îÁiÏ¥ß6ç¡Y2þyù›G÷ѤٛÂ_<3¸ñ𛇘p8у!¶°2»gñÆÂÌ'Š_(Û‘òîÂÊ´?Ì=õ·™OŒßY}’ÒÑâ]‘÷'=4$wØM‰§Ýúw)AÉ=L<œ°Á]óöf†7ݹlöæQ?[þƒHUéŽÈϧýë¼-i¿9Ú$U™¯„?yë A]Çu?eÜ=CƒHY¼É€5b§VfÇNÝP˜¹ªðåò½‘OíJyÁ¶Ôß/Ý~r,'%Uì?]°5ò³‰÷'¤‡ ã&Í‹³NÜ`Ø™Ó%gwÖ¸g?¾`[ø^4K(ù4¢â@øÙ‚­áÛcî2{ØòÄSÌ>œÀÁÐ5o_戻Ý;kcÚÛå{ŽíÉÂü×#¿Y¼;üèˆhødòC‘cW$Ÿjöà†òögŽº§üÞê£U—½yl—¶¯Iþ—â5‘—í ß™·%ü¿ó·F~5âæø‰É¥quÍ>œÀÁÐ%w_æ¸<¼pgʻDzѹâ@X•óDÒ#éËú÷œü@ßn“ÔaòÊ㊻Ÿ3¾«= p"ÃõÙ•YY«¦?¿t_òQÝî¼tXµd_X5wsäÿ޽«Çè·©u°ê‰à©§/WÍ Ò–Æ}ózš|8qƒ¡2;&s~ÞêÂW*$ÕS…Ù›’·ÍXyxü½‰ùéƒÄNº>8õºÁ)êuÀ‰ …»²»­+*x.wó²7þ÷Á°d_rÕÄûz'G_ú¤è¨Sûœ3}ô¾oÁS°'+¡lå‚’õãp47;—ïM®šòPÑ—®uY×˃Ë{´4Éð} †.9{2Ç>PúÐÂÊ”÷ŽfÃó¡' ÷öL ‚Æ'GGí 8Ï$À÷/ö>!©2ü`Ù›G³á9R•ûDüÝwÄK]< þú±§”¬ ƒ#Çô—Â`èüAüŒ~NÄ`èš¿73íÖ[o™óÚˆ·ŽöHÕŠý‘O£áppÖ†ÈO‹×„£¢cÀ‘cÚ‹a¿¤y.TÒ·¶€0ºîÊîYüRqáó9[ŽfÓóW>ž´7ü¤t{øî‚má;¥GŒù¯‡¿N-ËNš;ðd+'`0:VµàÕü¼Õ–8¶`84Þ «–ÿÙ¨8~4ò¦ø©aÙ ç«À‰ Ý vgÅÍ|îôµ÷Í)IÿË‹Ý>qS|a4~Fÿ“¬|o‚áp4ÄN}-âóž,Ý1ì?6l¼¾¤G‹ž™ÝOîWÐ×À÷+þt tÁ¶ÜÉ¿°hWê{Gs ôâÝÉïôÏïÐöœVÔnÔ¶‘€ï_0TïgØ“•¸èÞÅÓ׎ÿAéö´ÿ*ßó¿;fuɾÈG“CõS†žÓ7)`Qê-Kîš°²ä陯üsÙÎÔ?,Ý~úßCÅð`á³áÖÁ3»ž[¿éi¾ŸÁp8bòwætÍÛš[½¯!nþs3Ón[~{ÑšI{íN{¯zÏÂ_θ3¡¬á §^3$=¨{ÆyjV09¶ä<—¹}ɾ”?þé†çO2î±âªA£®¾ðêÁݤcݳ›tªuNÓ.j^0Tæ )¿§|Þë#þ½â@øYÅ”ƒ™çlˆÍ&§ãø§'¶ŽŸ? q‡Ô‹£ÃùªPó‚agN÷¢m¹cjñžÔ÷ª£aúºŒì;kÝ´ØÂ¹]s_ÍlÙ¯¤Ï¥×©=äÎ*‹5-ªGï/ÏÚ8úÇÕ Ëv¤þaàÜ'æt+%€¿Ô:¾´` €ÿÁ%FM»M Z œ³¿~ ¸±:ìa€š¦ñµ)µ.é<úäf=rë6ë‘óµ£i÷ìºÑ`èÐqÜÓ‚j’˺NhмOÑ€¶É7'_•|Óסˇ¶K¿gt—Ìu9îa€äŠsµK»;ãÐøÂ}|Ë·< 8Þƒ!®:Vd|ÛOÁ‚A0€` €` Á@0 ‚ƒ`Á @0@0‚ €` Á‚A0€` Á@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á‚A0‚ €` Á‚A0€` Á@0‚ €`ƒ`à[óÿ4œ ö¬9%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-9.0.png000066400000000000000000000230071430147706700257570ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢$×IDATxÚíÝwœ•…ðí{¦ˆ(*‚ ”"‚ÒËT†2½žs†ÞÛ Ó ½÷D±¡Æ‚XPDv¤ˆš}w7oöÙlžÄÝì&›7eSvMtÞs0š5c\…ëú|~Ì™3í”ûûËÝ‚àÔÕ¨GÁõƒ•³q›r‚ðªŒ`ÀؾAãó  š·oÜòF]Z•Õ1½.­Sдmóú×Ë‚Qr‚ìùÂV—µ p:4~pP°4-¯Ì"k²ƒ)·‡NÞ?ys^ÂìÝ…;ç=™ÿbå#Ùõ#×¥¥‡WgQ•zÑ“ k‚Ú¯³/ ÊŠ9 G S|• 3 ˆŸœ¤ÌL&Ý–tÚ/úyü9…ËÓ†FVg†GÖggO¹#4¥nWhݲýá¿_"òö†×" u» þOí®ü‹÷~»ì¡ü›gÞ®®ÝU´röEk˶Eææ.ÑoÐÄø&;Þ©yÿo544¼{Þ³cƒÉ·)ʼnA³¶Í‚¦m›žœ/m0Ô¾ †§§Ëu÷ÆY]ÎhyÅuó—å6¹.­ß¸M™õ5;óO¬<úáš—Ãÿ¾æHä'õÇ#oÅBáú×# ±k†±îDä·×#ÒP,òëè÷übí±È[Ñù튗ÂoNûZÎ=ùKR‡ŒÛ4âÂܮ̞›Ð#£¶×eiÕ½»¦Wõ¿jòæÜsB« šÁ¹q›¾5%¨?1>XõòØ â‘p·(-è™Û#Èœ;<wcnP|_$ö(ã®)Ø8(ºÒ>ûo G~?ïÞN®ÝWXqßüîùë&^:hʵ–NyÝÓúÆ>4Q™Øŭ´)ãoL+-ßVpÓâBßZòBÁÏ–í+üy,bApòã_8ë^ ÿw4þ}ÑÞÈ?¬>úÁš#¡F?þÇÚ£¡Eïÿîœ'"/T<Ú<펌ªyÝkw\]ûõ®Å[C—öŽ 9;öغf&´È]œ}áäÛ"ò§]Ü£pÍ3ž­Iª=Zö¹»R‘P¹¿"¾üùâÁeÏ*y²$úµŠÄê—*úŒ¿«¸]ÏÜøs;ö9ÏÒÀ)¯mkš¦W% ªØ–óØê#áßDWðc[Þþ,qð™æµÈ;±¿·öXø×+^Šügt~´ü@ä ž ¿ZýhÞÕfTT=’»¡fgÁcsŸŒš½«àé)wL¹+kÙæú亪ã«NÌJª;Vž\w´"6IµÇ¢q¤ìàæhY|ÕñÒÄšXtœ …ŠøŠj•>SÞúÎ =‹n-¼"©4áŠäòQ—'Oè7åáê~S·Ïê4¤"é‚«RZÇBÆÒÀ)-ajjP¸lX—ŠmyO­{¥èw_X$|ÊÙõ¯†cQÑðþVŽØ®O¯½µøÅ ß­ÚYõ¨VÞ”Pzû¬>·í3iÛ¤äÊ;æ¥ÌÞ=7©öèGÆB,ªT¦ÎÛ9oÔMëoK[üõ…‰Uûªz¿oÒ5¡yGÌ+ì8p∎& ¹,~Zj‡¾£¢Á0àŠ”²Ä. ¶îÒçì :§Xx8uL¸%/˜rG~P³³(˜ÿì¨`ë›'ïO)ֲ侜²U‡#¿Ùø/W,|ÒlüFøä1sžÉœÎê8pÖE—'×´4ijŸ¾ãëG˜ñxibõÁŠÆÂ¾ª‚u7ÝPþhù‹ ž›òÍÙOŽûfÚÜùsz„Ö¸øºÂîm®Nï{q¯pNtR¢¡PxéÀIýÎ:ÿЦ]2Å^®Ø…F\=ÈÀ©eì ùqã6åµ(ßVtNù¶Âs'Ý4ôÂȪ!=JÈ_µâ¥ð÷¾J¡ðÁhˆ4,z.ôÊèëó®Hž\9lapëo~´ï3íì+‡ÖuížWŸÖ{ܽ“?YšP±VÚ¢»––oŸtbÅÁÐÏæ?úΔÛóÆ š8²ÝEÝÓ;µïNo×3¯w»kóÛ¶é6¼ÅEÝ3Î9ëüKŸÛ±_pî%½NN«Žsàs]ÁuÁô»óZ—Ü_pß¼§‹/Øyué¾È?­>þÁºáÿþªÆÂ{Á°pOøøÈ ù‰ï=ß³.¸"èš¹4v3®}ïH“}Ç´¼tðÔË/OšÕ³{ö¬¤äâɳ2ggŒI«I/é‘›pÍù{5¹¤ÿ¸aúŽ~~§„v±ŸkÛ#'h×3'ˆíztÁUÉ"Né`8#²:µÿÂç#ÿñUŽƒO ï9ÿÊäàŠ”Š`êžw¯ùЪÃuqm¯ÉkÙ®[ãæç^ܬm÷+·h{Qó³.l×â‚+ŸwÙ€F­Ú_\Øe¨…€Ó*§U'\W³³`Ù¢çBÇVŠüüt†?§I‹ÖÑi4;¯uÐô\gGàô†`d}zôV«&#×åv¯x¸`ìÜ' ÷¬~9ò‹Ó5€?Ҭ͙AòŒÁÄ[óN~Y•Ù¡b[Þ¤¥/F¾ý7ð{#ªR‚â­á ½6ã¼Òûó¯~9ôÆêáÿ\u°ð‡kŽ„¼îDä·_•ˆ ð98nP5wxP¼%|»á–Ø]M®JívAþ’´ÄÈšÌ)K‡o˜¼9k÷Ò}áŸÅ¢aÝ+‘ßmx-òŽ`€SXúìaAÞ’ô“·GT ë8íÎpþìÝ¡ÚyOæÜ8óžì‰ÙóFáÕ¹-r :zÃðåÛrþ±êÑüWªwXñRøÿû2_ÐM0ÀgTúPa0pÂð¸ÂåÍC+3R¦ÝUXUú`Þƒ+Fþ}íÑÈÿ¬9þݬûóË[’–’³`Ø€¾#{^ž=oHÑÔ;ržŸ½;ÿ›Ëö‡¾ý¾_Ú§ Èêô &Þœ©Úº}åáÐ÷¢+ÿ¿¨?~ëäƒèlx-òöÚ£áÿZs$ôýè¼±úåÂÿýø½µÇÂo®5òöÆo8†NY£¯Ï¨Yô|áë«E~…7ןˆüpÛzÁ‘~£®mZ™9tÂ͹ Ë·[y8òæ'®„ÿ~ëƒ`€S\ÏÜ«ƒ= ·‰Óûw˜~wÖ]ë_ l l|w¥†U‡#¿XðlèÄâç _©?yË.Ip »,áÊ G^|\΂”««-¸oî“á—>WôÍ…{"¯Î}2ôlÝ®Âݳw‡^™½»ðïç7·|[Á‚Å/þ¿«_ŽüϪÑ_­;yç+u–$Áï ¯Éí\ñHdäÌ{CeÛ 'U?V¸»ì¡ðþ1×ç®Q=ôÚ”âä3>ôC©¥Ãƒ††9ÁÈúì‹J¶æÝ¹êpøwk†ßZ~ üokŽüþ”«N« §B0G‚÷„‚û~:/(\ž}Yé¡c7ævM¯vNjÙoaèIŽ ¯Êl=é¶œ’êÇòÿáWº¿J‘ àÓirA“ M÷óƒ1×çÑ`¢Á¤× RËR>ø)3“ƒÜEYgM½#·nÍ‘ÈÏ6¼öå?’`€/HJqrã±3ç=UøÑXx§þxø·ÿk+úŸã ÁŸƒÄi‰MÆlž³ôÅÐÏV ½µúåðoþ7b¡þxä·+E~±ò`øW«‡õÇ_ÛðZØAÏðEë;º_³$;¹vH«)·g••lÉÜ †ÿY"ò»úãáÿ‰®¨ÿÍψ´öXä7 žü?3ïÉ\7ysÖMÓïÊzbÉ‹¡Ƕv¬{%üÖÜ' ¾»àÙ‚ï/ÞþîâB?Xs4üÖg †.Ã/:ítN½ÊÀi'výµ”’¤ yÆOþæ³/=7H-í,Ø32öi£ èÔ¸ã ëZŽÞ^¼ð¹ÐË·åü}ÉÖì——ˆüääÿþ ÿM¶<¬>zsÖýù·M¼%ýÂ=¡«_}å¡ÂŸ¬=úm4ZÞžÿLÁwó§.­– š.Ek‡O+¾/ûÕeûC?Y÷Jäíè÷½µþDøí†Ð+áµù sžˆ œ|î±ëKÀé&¥xp‹!³’›™54îÓÙ¥äõ+½?cRéÖÌiáUiýÆÝ˜^¾lÁ·Výwýñð[^Óùí¢çÃ?^y(ò«ÏóŒI«‡~5ysƺ”ℾ•†¿ „·þô8†/þjd}Ú})3“F%N20efbjþÒáóÆ\ŸV[ýXáƒeÛrv®>þåúW# ÑŸíÖôN4$Þ¹þõØ.Lᆥ/†þ¥ì¡‚ʺݑޕ§˜t˰ŒüÅÃZ¿9ïÃ/Ê™±1!è;²—¥ €SÍIÓ&'N‹ï3xRBóO q©³ú_4ãîÜÛOîê³7ü‰·æÏ¿"©[ÓЊaýgï.x8¿ŽÎO<:\öPþ}K÷…ÿuã7>Ÿƒ‘W¿~kæ–Ümy‹‡´ŸvW~ÙªÃáýÑ.Jo-z®àŸïÍ?¸à™Ü¯-KŸ1'cuÖ¼¬Š:´jÓ½ÍYÃ*’ƒó»^Ô8gþˆk¦Þ™·fÞÓù,Þ[p×¼§C«wŒ¿¿îñ™Çç=3íï–¼8öû+‡¹pOä{óžýêEßš~OauxMÎy£7d½ÿz¤Õ Ž5l:¥ô9/úi£Šc-RœRšµmÖ¸M‹Îl×ëâFŸ&‚ø‰É†–¥tœqo$£dk$³`iF§Ëâ»6¬ ²ç jW½3<±r{QÑÈuy×%MOl_½#¿>º2ÿWAiíñÈ[ ÷*{(omÑšÌkó–d5xkÖªyÏ|oÝ+áßͪðõ²s7ç-‘’0-ùÊ>£_^TŸß5}`Ë9;¸|p»3'oκeæ–‚Ç+.¸oÔú¬~Æ%ž?öÆÌ ­.5Z‘,ymnPÿÏ+‚ÞEC?ôοª_СwßàŠÄîA«+[ÅîjÔ£àúÁƒJž®Kª=V_u¼tPùñYËNÌJ[üèÂi[>²à¹ÉßZþRÑOç?z±xKÖÀ~£ûu(¹¯àÆ•#ÿµüàÈ_Î{&ü¯“7çÎQzÎý?­Œ¾i–.øs®+ìß´ôþ¬™Ëö…ß\¼·ð{•>^·+ôøòáïÆÎ¦´èù‚ÿX°§àûk…~¾lè+†Þüã€xo–¾þ·Ò ·)³Côׯ¶h9ýkY—o µË]’s^ý+Ӄ̹´šÏü¿û¿†§ê’ꎔ'Õ¾üþ$Ö)Kž½¿*mÉ®ùã6¯»sþs¿½àÙÐkU;‡æïùÆ’}#´ìÀÈŸÎ~rü?¯8þAñ=Yó#k2.y7 ²,ðq:¥tiQ´vDÁ¤ÛrV-K(Q=¤ûÌ{ Î,\1¢_éCywoÉ^3ys~ÅøMÙu3îÉݺò`ø§uA¶%/„ÿ~ƽ…KB+³/þ¾¡Yó’ûõ ÷hZ|_a0îÆ¼ ½.ù¯}¨ ïΑ“áXóryAýõµ—YqpÌç<5îÛ“¾VñÄ¢½þeÆý3,yqôb[ªw>7²>³gѺHÜà‰ñø(W錬L¹='H«N ²æ¦FïK §¾(¹8á©wäEõÙÙ‹ž+üÇ ¯}0V¿ysÉ ¡oM¼yDÁYí;ž;´lHÑØ2·å/V4s@«Ïñ¡~B0|0Rf?W;jÓ 7O¸cöŽ™÷©÷Î|±|û„oÔîóí¥û‹~ZùHþã9óS;vÏgI€¿PâŒø aÚà`üM¹AñÖPé²ý8ãѺ‘w?_øJÅÃåË2 Sf&¤ß”±xÆ=¹{KÈ=0¼¢ï Q“FŸãÃù ‚áÝhH¨~¥4}ÉÝ+=?îÙOŒü×’'«Ù5ág?1æ;3¶¿8çé‘ÿZú`Á¦ÜE -½Ûðè™Û+»1+¸:£Ç™“7çÌÞÚ·æHì Ñ‘†EÏ…ÿ¡ü¡¼ãnÈêÕäÂ+ΟûTþæêÇ Ž.x¶ð?—ý²|[Þñü%ÇÆOHhò¿ ïNÊì}UîX¾% eÛ'üÝÄ;«wÍß3æœU7ÞP¾}âë+F~2ãžüù£Öe6oqEaÐô¦Þ|ø8½Ãƒi_Ë?yÕäŒ9é-+)œµl_ø{õÇ#oGç×Ë„ÿoÉ–ÜÒÎÜw an4»øŒ²m7V?–ÿÏ•ÛóMÙœ~oáò!½²æh1¼jÄ繫Ïg †¤Ú#eɵOÎmX|ÏÂçFÊ=åOO¼söŽ1·.z`ÖCSŽ-Ú;æ?ï ÿߢ5iI±ç<àÚÜžAçÔ.ˆiÚ¾iдÍ{ÿ³~Q£q›rÛ—lÉέ|$ïÎØÙVýgt¥zïô»rW,Ú{òm™~ô308«ÃA§þ—´Î¨K™š1;uàЊä±ß’·8=H-úy>ÌÏ ïmiØS;ëá²½%Íz±ä¡©/ÏÜ:íЂçFÿ[éþ1ç©ñߪy,ô|å#ù)y‹²;ÄÂ!²&;(\žiáàô–;?-˜~wað«†í'·*L¹=³÷œ'B;c3_ÿz¸aÅKáßß—»)izrÛs.m}N»ëÚŸ9ãîì ã€®Aë+ÛÁÉ<ˆý{Æ9Ñuú3§'É3ûþ-ê_ ±I_üÐÒÑ7¯½cì­uÛGnš³mæSŽŒß\òÌÔ{gì›÷ìè7¢qôù<^µ=zþ’ŒÎ¹‹2, œ^:%w:ëd/H †W²ç¸`Êæü¢¹O†ÖÖîÌ[Sµ#ïÑeûÿ\¶/òÃÏî«Ø–½tâ-ïÅDë«..îÕáäï‰ÃÙÑ`hM…“67:£IШq³¿åCÿ«ƒ!±æHybõáòô%,M[|ÏŠâf½P÷ÄÄoNÛ2c_Ùö‰¯/~¡èÇË_*úåʃ‘Ÿo)¼¹îñ¢¸Ö—´Ðpêë8¨gP¸"=ØðwSN~>¬"ñŒ¼%éËÈ] ƒªz´àcÇ!L¼%ó¾É·¦MŸtkVzÁ²´nApv“ ‹>üûtm †&Ñ`ø¢NIúWÃÂáhÙ9ÏÔ¬»þ¦¥ûFýhÚ½3ö»½jwÕÎ1ÿT÷ĘY{<üVÅ#áçÛv|™`à´‘^7´Ù¬ûó.{}j|håðQ“oϾ¯üá¼—ª¶\Ÿ^;¸kÁ²¡C†W¤ ‚³šE×Ï[A³3ûúèÝ‹þd—¤¯T0¼{LÃs5YËo[W|ÿôCóžûÝ1·Ö<Z?ÿþ±·ÎÞ±ðùÈϦÝ=zG›.ƒ;µ¾L0pŠJ˜:$Hœ–$L‰ V¤·SNIõÎÈ‘¹O™pSÖÆ”âÁéCfê™3'©YCà AÐô’¸ø V}kq×ü̸³Ú´þ2]Ðìó †ºØ®Iª“ª¶Í ¯¯x0²aþ½…k—Ü:¨xËÌôyó*§Ý5þ–Ô²±¹ç]rEã¦gµ¶ pj³17{cnpÇwÇI3R/Nœß=½&±ýäÛskŠ·ÎÌ[”18qjbÇ :·=»{f¯s¿"Oës †3¯è5ö®Âîºæ.¿&tcr·œÕ/é7¶c4oÖäìn-ÆÜZ´jÛÆÂÀ©å«âcÁÐ< £'Ýš]ÒuØÕ×öÓ¯gÄ5‹¸|ÏùK2‚!³†Ä¾=î÷sšÃîŠ+’ËRÎ:ÿò&ÝCkƒIO6ÉuG‚KN šµl´jß3:×Z˜8ƒ¡s|§ÔYIÝÇmÊydÂÍ97·êвU,ž‰Î-Κ\ð‡‹/7>·qÐäü&_•§ö¹ÃÐúÎ’+Skú\|mA“æç^Ä5:ÃÂÀ©ïâž½Û¥–&KšÖ¿sÑÚŒó®Ô!îeûJû\ƒ!©æpE¿)Û‹; ©ìqÎÅ=Î0s—…€Sߥ}»Å¥–&Ûª0õk¡àâm‚FÍ †<½ê¡ò>˜qEriç .ˆK[ýï  ØÒPÞ{ܽS.ŸÞ©}ü”à‚«R¼Ò þhKCõÁŠ^cïžxéÀÉW]pUòÉÍ1m»gmº÷ªÀé '£¡ê@E¿)Oëœ6?¹í5YgGÿ^\Ç‚Fg4ñÊÀé ï=¸tOiÏÈÍ£®H*mmhÖ=}pÖù—zõà´†÷·6¼TÞoêöân9+‡v8éÂØävOÁð\ö|Åu£ïÓ%mAV÷8ó’þã¼ Þ›#å‰Õ‡*úO¬¤gdSÆ%ýÇwhÙ¶«wæ"¾|oeŸ ÷îÐwÔåÞ  œº#Ñ¿=ýÒÁS{y+@0|D0<=í²øé‚ÃÇÃ`Á‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€`  Á@0‚A0€` Á‚A0€` €` Á@0 ‚ƒ`Á @0@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ƒ` Á@0‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @08-ƒ¡pc4ž®K®;Z~2>ij8]‚¡[ÖŠÁ}'=4o`ñÕ‹ÿó3óñêøòç+“j 8 Äu8é‚«F̽ºkæÒ®Ÿ4ÝrVv¹vä­#£Ñðùli ðå¶¥¡!øMt>ÅÜîùõ™ƒKŸ À‡u/X/€ †,Á@0‚ €`ðÕ ×a>Z·ÌeÃÍz¦4º²/€êÐgdç3vMIª9\!€?Õ¬gÑ-…ñå{ÿúÝ’œbâ—%Ìì3°ä©Ñ•þ Á|@«Kz·ì5îÞ1 •ûðaW Ÿ“<¸tO‰`>¤M×áíúM}dRbõK‚øSqݲWfÆ—ï-ýÌ? 8uµï¹ràÌÝÓkUàšµjפGèÆpBÅ‹e‚ø€v×—ÅOï=¸ôÙ™‚ø–u=»×˜»Ç'T À‡]9´69¾|ï,Á|À…]Rƒ6݆_Øwò¶©‰Õ+ð§âºf-ËJ¨ÜW*€÷Ŷ0´lÛµq§!Câ+^˜õ™‚!~z¯f-/ Î<¯ãÇNós;±ï¾"Z_60hÞª]“«†ÍîÝoêö‰Õ?Ã1 OMëÐolïè¯k3þÌ4òŠÀWD‹ ;gžÛ¡I—ŒEúOÛ13±æÐg¸Úó‘òÁeÏÍêÞ¹väæ”è ù¨¹nÔí©Ý²–÷¹¸W¨•W¾äRç¿´lwuÓ®™KãûOßYü™¯ô›šÃ •û«ã+^¨¯xñ#'¡rßì^cïwIÿñ—xõà ÔîÚü ã€ AÇ“>ÅL :¥V\•Ô´kÖÒä3vGWø?EªH™} ò£¶0üáãÇOrÝÑŠ>ï †Þ1øebã6݆Ÿya×aŸ<]†žÙ¡ïè–ݲW XüDIRíáOܲ0dÎþªQ›6Þ:cë‚G‡/Ü5ï½ûkbs 2±úHÙGý\Bõ±²„ªã¥‰5GÊ¢ÁPÙg‚`€/Z\§”òÎWç®Éíº1«Gè†OšÌáMEƒf=3ëÓÄBl†/ÜSWùXÉÁeûÇ¿‘»æ¶õñ•ÇJ“ë^ª,Xw÷š™Ì´pýëkŽ~ b_ÏYµmYdãë‡/|jNRí± Á_¼F= 7TòôìØn?±³}Šù‹ŽQHžýReîš{WO¼cÙÖâfï{ý)sž¯™|×’–õ£i[æíH¨>Vú‡-Gˆ-x|nù£•Ï/Ú;ö1·®ßœPýj™`€ÿ`(¸> OÕý¥!ð—Ll·£œÕ÷®Zº¿è'Õ»¦OªÝ_™¾tçÂÑ·ÜtSƲGýáX†wg2go͸Í6ϼÁŽœÕ,O¬}¥\0À) ±I÷|mxãíbT{øä–„øªWfÅb"±ê@t^*}oNªÊã+£÷Õ,ï=~ËÈKú p*ClËABõѲÄê?:^!ú7•>[Ò5ky¸kÖ²¤Îò¤.™Ëß»Ü)µúº¶=rÏñ–À) w¥ç§§]?½wÇASâ:þè¹tðÔ¸ýÆÄµé6Ü;§]0 žÞË[‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€`  Á@0‚A0€` Á‚A0€` €` Á@0 ‚ƒ`Á @0@0‚ €` Á‚A0€` Á@0‚ €` Á‚A0€`  Á@0À—Öÿ¨Ê8Ä»«‘%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_-9.5.png000066400000000000000000000015401430147706700257620ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<‡PLTEY‡6^Ž9Pˆ.7|Z‹GS}2W…5W„4W„5H~(.t}½L…ÅQ‡ÈR|¼Lh§@ÂOÀNi¨B‚ÃO€ÀNi§BÂO‰ËTŒÎUŒÍUŒÎUÀNi§Bu³G|ºK|»L|»Ls¯Ib™Dh£>m¨Cl¦Cl§CeE‰ËTŒÎUŠËTÿÿÿ1³jÛ)tRNS UÁÁ_ rp~núùùú|1rpq7ÇÜbKGD,ºÝq« pHYs¢¢EÝ1¢mIDATxÚíÓµÃA™™™™ûïω%¥Ž”ün 7sIÅ(•s•ªVo4S­vGëöú™ÁP½Þ™ñD›~òfs=0ƒÀ `0˜Ìf€ÿ-–«õÏf»ÓƒÀö‡cêt¾èA`×Û=õxÖôŠðá¯ëòØþ1%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_0.0.png000066400000000000000000000376411430147706700257020ustar00rootroot00000000000000‰PNG  IHDR T‰=»È‹iCCPGIMP built-in sRGB(‘}‘=HÃ@Å_?D‘Š¢Š8d¨NDEµ E¨j…VL.ý‚& IŠ‹£àZpðc±êà⬫ƒ« ~€89:)ºH‰ÿK -b<8îÇ»{»w€¿^fªTÍ2R‰¸É® ¯¢ý˜FDb¦>'ŠIxޝ{øøzãYÞçþ=JÎd€O žeºaoOmZ:ç}â0+J ñ9ñ¨A$~äºìòç‚Ã~ž6Ò©yâ0±Phc¹YÑP‰'‰£ŠªQ¾?ã²Ây‹³Z®²æ=ù C9me™ë4‡À"– B€Œ*J(ÃBŒV)Ú{ø¿H.™\%0r, ’ãÿƒßÝšù‰q7):^lûcèÜ5Ûþ>¶íÆ x®´–¿Rf>I¯µ´èл \\·4y¸Ü"OºdHŽ éÏç÷3ú¦,0p t¯¹½5÷qú¤©«ä ppŒ({ÝãÝ]í½ý{¦Ùߎvr²ák» pHYs¢¢EÝ1¢9zTXtRaw profile type exifX…­—k²#)…ÿ³ŠY„ÐrxFÌfùó‘ö­ºõê®êhg8Á$ BG:Gûÿ=á?|Dr E­U¯5ò)^\:_î)–çþú̘ߣߌ-ï®ÐÞ)¯iÑú«MqýúÂÇi|;Úû‰´÷B;¿Ìwg¡³>ɸ¼ÆSy/äûÕ©Þ쳩CÞ'yO|Lyõµå]ìùÜßáó@1¼´”²ÈÎ)ÇçÞ^sòëÛùî)WùÑì¦d[‚C¾9ÞGûñi?qþ»¾÷~=ïÇß9_ú{FþΗõí#:?}ôçÎ\üiãüÅ"ùöAÓh?çý=gµsöët½T½–¢˜q‘»wfH:oÜôqðÇõ†ÿëç›AP77Øãx-14}­üàœ™§´¯JÁÖ{\ÄÞŠ1)ƒ@¬)kª)šˆ¥„u,—\d€@R•…‘R2ÙLšÜ½yÇÒ3WTªÜa¸ 4×l`ã¹V)JüXiÄP׬EU«š¶ ®½æZªÖZ­^’ë–­˜Z5³fn½åVš¶Ú¬µæ­»x†Õ«›7wï]Bg£ÎZù‘!#2tÔa£ }>³LuÚlÓg_²ò‚&V]¶ÚòÕw ¦Øeë®ÛvÛ¾û!ÖN>åè©ÇN;~úÔÞ¨þpýjéšKF/£ŸF~ϵ…`&?ìÆÅK‰SìBÕ5!¢õ¬2Y¹‹íÍ,¼ÕI$dÏ-˜ÐKs$eö‚H-Üù¥4òËù¡­3ûà]ÙæýŒbÄó&#ר•Ô(-ÍZ‡_(篣²¢’'•SbÁéjCh^l÷j„yuŠfÓ¡¹õë:3e*§Ðü² 7áwÛ`³R–ä&Ú;÷hûà5Ò¡nwËäÃj$p-“Ä’šW*FzC9Ãó5 I[úž§~šÍ<€?¶Ô'dÜÆ¬yÂóÌ5 u«o¡\H¸³NrhÊW ² rÈç•ÍEÝX­š ­ JV¡„Yóx)uíx/–È9Ïdb¨+¤\›.ß0ÛBòN‹yÄMvçÔëB+·g#`—íËa±W2xíi9XÑDÑ.Ä\zº·âýmø“nîïX O䓀إÍM¬ïBˆÌ$òB ú2!DÕÏ%Òà‰@Bˆ¯üñ€5q8¥ž)u 4³s÷r¨À!0f„gZ#ÉòBÆny7ëè™LÓs#$žÙX›à£Èþ©gÌYzدüî÷ŽÄAÛ EM^Y#Ĺ)os'0kC€o)f6µ¼"­J’5-‰úÓ)½v´F…°jï°ÛØyàÉ n©%‘ü‰0ùQGD: Hç°H>©qüÔmªå´ÜUÝoI¸ÏÊøVÍÅÚÈ“™qï@üRD|Ã%Od &‘ˆ):níObNI@ é~ºG¤5ªà3›»¢2ªÛÇ HYŸ.#ßÝ€ ¾%‘ûÀn’úÆ5Q]ÓööôËý¯÷]~õàOÛÏ ]:öaá¼QOKPp›ûÌ¿ôV†€ÖtJ*#üßœ1RÐ~«3ÂËTä œG’Ï4Îy{ËJ½~XBœ“(•È]ck¬ìQ›q%: i?HËKYJÜ •F`ïªBqACRË[âW]ÿïÿíB”d’9Ç€êçeIfWnDN}N¤CÕ%^‘Xo";6Ÿs.mÙ×ÒT-šCÏüéØÿúÌWžaá3o ¬{~³¦Uêµkå¢](—£c±@×´¨T&+{´’¸1­Û²ƒ"2Òè1°V Ö½¡S¹0Õ'7öT¦I’Ó£Õÿöü·.ýùÌé™É]÷ïêìL=àzѽZëï]¨¼Öèñ°– Ö½ =Ðñ˜m1ñ¯„ßøúo?ú;"bDÄ\ãú®+ñ)ÏÏí´¶šhn;ÕÛÑ3º­©5?ÊLu‹(ëzÖ÷cµfc$ò|ñßözŽ8ñ¤Éô œ»'™ùZ×…ó^˜ÝuÑQÑX÷ëŽ±Êær#Ãgš/Ecba*5Ú²u÷K©Žîò¶=7¾ò×RÓª”ˆR¢äÉÇÇq®ôšÚ'Ýu‰‰¶È6ó³í³ÕRw^kËÎG€u`°9ÕÚŠÖ^joëÙ’L曃d¡£¹­ÒëzÖOg£6¥–ö9¿Tôfr™ cá2€5‰`°Ni «Í…r1^‹jÑLTŸojÍhm‚ ®ü÷þý·°b­ˆ›Iœ>5øäÈ…›N†•–’Ö!³ €u`°.«íüÜ® ;k­UF%£ÓÆVýÍ;Ïül,°žRVÉ»ž£fÅUÊÞÜÌdöDn¦õÜôäæ Ó»F•u ±Ø(ëÖê•ãÎÆz7?}¶)·)¬cÓ îùd¶Ôëûa“ãYçÍOþÖŠ„¡®„U¾VU¥ÜlöÜð™ëžŸÜ>Ç(q£DD±n°q Ö%Gi+úòq ‘i®œ9ñáçDä9Ï­9Í'úzzÏímj]èq½jF)ëTÊ^nz¢íÄø¥í¯ÏçÚsµJKQi߈ˆ¨÷uÖózpÛrÜ`#"¬+ÖD**åuÅ›òê}H®)r;Î_8¾y8Ï%›Z&Z/ræç[r s­9±ñPi£ÄÎ;RgפEs´uƒLä¼yêó*«V Zj5fF‹F0XWrÃ~¡¸çôc•âÔU}П ;þºc«âˆïÄ·9eÜhÙ?X‡ ¹–Ö÷p‚ôªÕY£òT^Èž/ÖVûú€kÁ`9T;ñC'=ŠwjÙv÷¦ö7_/ÚwÅÄVxKV-"F¢ZI/Ì\pæ‡_ž*æ†Çm¥2-]FŽ[ÙËÖ‚VA,æ«Dv¨=HžkÊÏ}àœµ~´R×2QEŠÓC*7zT§‡FJSCG#Vâ53)¯æüÀ¢ °ò”ˆHi¡=çùÓé½’ÖRÍO;sÍ&N]Pbó*æÌÍŸNÍËÄ`ÑXJkkÂær¥¬æ¬¸+¼]’ëkŠ'/ä£Ùq™5M[®OÍUº«2:Z‘†,¼\›XE&ê*ˆ]á’”RŽËÍ[º\Óï;~LĦšTbhNv^f‹@0À*1FÛÐ&kW»M’RUÇqçâaMG"%‘«œ˜°ÖFµ²Ø¨RL©‘¼ãZÉå¤ÝÏçäÑ[;XŸ8ÉV‘¶rU[¶£l*;ÜÒÓÿô"ã-êC¾jÆõ|WÇ3±Je¾%VÈõk·dNŸ~´"<ŽX$f` «AµTl™06Uu®vvÁˆ¸ÉlËöù‰Òܾ’b…âì±…s‡ +;ZÀzE0À¤µUÅbW¾Tj>å9‹9lÚˆK‰µ¡®ÕòR«æÆ†^œE, $Àš E¬QÆÌ¢<%®›^üÉÌÖ(åÄLÙ䥚»ÛvÞ‘Xöá6 ‚V‘Qbq²Ž@†ÖZ©j/M·÷<¿;ˆM¤~òö¼„X­ØTçNÇO¶”г#áÔäøU­›àJx$ V‰ÖFyn.–ÌŒ5åf¶Mz^Émï=´#æ‹…&×)¥§'š/NW6Ï-)~r%QJY×ÏŒf:ûÎ)ߚəÓËv€…`€U`Q^l:¹uç‘;EŒ*æzžLeÏvîÜwôã‰T­#¬: ssͯ´B/RJ)q"ÑÖ.avÀˆd£T÷îí^º¹Ã==™éûÀùZqäÒðÓ’“÷W#€ f1+éK£ÒíÙŽ[oÊ´å;¦F·žöbÅ`çþ—>ÜÜV´VG#çSG/|Ñ('jjn ÓÉ(TÆ„éÚÒvBµâ¸%[ƒ ÓÞKµ÷™…’‰W£Éùù‹Ü¸jÌ0Àʳb²ꙉ¾ó[¶¹mz¢u8Û’Û¥”(¥¬ni/nnï~­Wk㉩”ܹ“G÷~oä|Çq­¯î솟fD¬X/Ñ$n¢Ù/LOÔZÒZ..ïÍÖ7‚V‰£]³ß:>1¾ðZŒôÕªª‹Y«µ8馨C©¢ˆˆ#²ÏNLî:¯µRïû¬5cD)±im,»$ÀjPÚ¶Ì„•¦òäèž!Ǽ°ªKa(?~<ÈZ%aM…ù¹ÄЙ׮û^µÚZd¹ ÑXJkkÌåoø•ŠTXsËÅwÖ+ÖŠX+¶R–òì´wéôký?¼pþ¶Ó—gh,‚VA~v®("¢t¨›[O÷ÍLt]¨TòØÅÄqÙHDÄZß7Aÿ¶‘ûnüÖÚ› x›4k`$Z]Çs+®r]üªÏæ²—*¥ìTg߉Á˜k±@‚XJæ;3- Û©ùŽWžûÈ£J²UM4 Á+hÏž=þ¿±ã—rµlºã›pÜtÅqÂàüÉ]/ŽüÌ ›Ÿ¿ÕqÄ"U3‘ªjÇŽ#ŽDÉö®©=›Ÿ¼xîàQG‹C4`€ÔsOëƒ]ýú—©x¯ÖGé±V?öjÓñWoû– Å\îx6ª9åZÕF›ÆïJ¤LF¬Ï3›¶œ½a~fëH!ß–W¢°ÚXŸùÒÇnvã~oXª< VûŽ£¥//H°ÆŠ«fýX!qæÄ=O§›Ïvç§ö^èxa5ÓÅ(¬Å×zŽkýÖÎÙëÜöhjtxÛ gŽÝõªv8o°ºXfŸúßøíýÞ¯{1åù~<‹KâÍ¿³VÌìTòä…3{ÿrjbÿˆˆ?4/½å˜ãTbÛ÷ø”ãŠ'"âz&hiÏíSêdlòRߥùùíZÛEïžd­Qb ».`€eÖÔî÷Å*Oª¦+œÑ¬”޼‘ {ÏŠI„""3S».¹NÅuœÈQÆ<ßò–_´F×-7µ÷¾¾}nnû„ˆ²—·\}÷Ç“jµ¢˜JAÂZÙ”ç.ÍUæ/ž?\­,óíÖ9‚–Ù|î›ÿÓ/ýîGTÏ`ðɦ6g“v~²7ªR¢‰j["1™Êç³U×Yp»ûÿòÆŽîÉA"J9^5í8êm{©jGéT6jéÙ2¶zâÈPT횯TãÕj-Y}禫Oþ»;~wUn°a °´ãF~\ÒJ[õælR—ÏZ°JÑ¢EŒ±‘6~¥šÛ »”ºÂœ„ˆˆU¢U-¹óºïÅk险Žãgßö|±Ð=ÿãG”4g6–ÁËìã¿}ðouô;8ŽJˆ-b"‘jÅ™B]»Ôúj©Ð;'VÛ°Ôò[/3¶¿n,ˆˆvÄij­l–ÖÊf¥Œ8Žè± ÓÇò½¹'ÿÝmÿao°Á °Œüúd϶Äg2­z‡h/ªYS˜5fÇÂçggoœ £¦òìt÷dÅB?6Ø}Ã÷>œLç{³Í ÛÞ| k­ˆ(QWÈIT˜F/œï~fjë¸ãX¦+Šýù`~îÜë›ôŽ"g¶RvËÿ쾯nê¿ÿÂ\ϱBôi¿Xœ kéŠRJD퓉|®ý|µb ZÕ¼JI/T«R‹&PêíÉ`µ¹ÙøÐ©£»¾{aèæcÆd«Æ†jø¹?|¾Q÷ XÿØbVAÛ¦;zúÍÇâM¾(±?þ USÉô¥æ¾-/ߘÊäº7L´uö8®(kEŒQ¡Èå7k+"Õ²³03‘y}èä®§¾þý6èv$À*ÐAˆ}çù ZZ:NuïÜ÷ì'šÛò;¢È©”â—òéÓZY]*z¹RÑ-‰õåõ ¶TLÌßvö©ꉆÜ`Ã!`8n,zë?+Uv:º_ìè9³/ ƒÜøHüÙR!6âÈŸV¢Œv«n¹ÜTòc… Zì(ˆRVÄ­EÕÊ3^T<<ר{l,¬3Jä­ë“µTk~erlǫ㣻/D¡y^Å­EMe©„*¬Ì;a%Yôc""VU˳¦œ»4s# ó—N6â>Á«å-ÛLXëGSc·œQ®QZ)U‹â¡¶J‰©U¢™3ÏŒj?QL´mîWÊq+¹‘ÙñÃ>ŸÍ¥¡¡'ʺ ÀÆB0@ƒ8N¤ED"cT­V%¡µÖ¬ëøJ´oî~òKO¶í:ðl%_qcQ)œ8ýƒœÈ[M°ÂXÖxWÜ•®V-©…‰ãyS©ŒÕÊs¥P¢J¦u _Œµ‘D•xu†žøòäj€7 °òênam*{í±Éñ£ßü޼9sÐÝý#¤³Ó•ññÒj €+! ¼D“íÙ÷ѾÖíwß–æó3ã?º4•?6-"U¯4z| ° ¬½ò#IÚñ$Ù³×W ûÄFa¦kçuÝ…©ütâ©3#‡¿vJDò«i ÀOsÞûGï“JvìjnÞrÓ6× œ+¯h¸¼|A+%ŽåŽ×Ü馛¶–çF^- ;#D¿÷V•KµxÙÞë¯÷šºîiÚr}¦ÑCl\¬IZ¼DÖ&Ú6g‚DkO£GظX¾o”YÄ»®-Z©°0;nÛÚv¦Wlp¼ ‚Ö$-*¬Ù(¬ÍFMyóQ£GؘØ% VœË_ÐX±"úò×5Ƽû‚ˆ”dttå À ° jF…Q%¯Åñ=‰jâú©H9ºîîGÆšJentr9®ßtýÁ¦T5¦/îÍää‘G˜­\5‚VžuüêX~äØ3Ú‹'”v¬ ÃЉùÑABiíj%Úc­•˜(m]ÏÏÔÊ…ñâ¥Ãç¯âõ-7?Üžè<0(Êñ«ÅéRµ:+ŒŽ]œ9ýíüæ[þæ–Öíw]_?1Ù}öÄË£"Å¿cÀºQ÷ !ÀµaàC¿¾#Û¹û¶D릌¥mFÖ˜¨Zš,T‹¹bêjŠ5uefÎ>õÚÌÐ3ÏŽ~l¡Ñc\;˜a€kœå:^"pcY-V¬¢ÅÇM6µ$¢¨EG­Dõ ‚VÈÁ‡¦®ûTòƒ¹I«±s‰„ö¼´öþŸ¿ñÕ.çuò“Ã¥t÷ž²µ6®ÄZ¹¼–Ú:J‹¸?Þ eÀ’ °¶ æÝîlj¿ô»ÍQÊDzD‰M(-±¿õ>ò¯ÿÓ¾ý½ïk ƶo~¨7Ñ<¸'–êL*­Œ&Ë‹`€eÖÝ}S¢ùºnó3ƒÛkÕo—Z; [´–vk•ÌMÛÊêÙ¥¿úA·÷ÖÞ®LË–>?ÓÝKµuùñ–¤$­j°üXFm;?žnÞ}÷ÙîÝ~<£ÂªS´FEVY×Z‰¦Gí _þÕoýÉÒ^ý‹zàΩtï®;Ò;b]ljÅD”6—Ïtxóñ£w?߀Š`™ô_÷‹Í©í7Ý•íÞ»ÉÒÚqÇ©¦RÒöÇïµåBt5Û¤^ÁÃζƒó[Ó=nOvlÏ:^‰+bTT)kQÊš¨fED¼Xbyn!`Yl»ýs©M{îLuìîqý„2FÙM[_Û LZ)cÄ,ÌGç§ž[ÊëìêNõì¸5Ó¹3«´‰ªâüXXœšI4õÆ£j)«ßê¶MÖQ'–ÁïÓÀŸíOõ¸-Ù>Øéz)1O^Ìn8û3®^þºßZ;yÉû³ò½o/ån²½3–îíV®_‰¢Š«”S«˜ÊÂÔ‚ŸlU©¶­MÖñŒ£Ø>°|X:5p÷¯ fúÜ’jÝÚê¸q+bÄe›Z‡º­TãVD)ÑZéL‹Û»Ô Eå™Ùj~|6H·&Mq^jµ²$²½6Þ²Õ÷SJ+£ÝxÈúÀr#`IvïéÛ•ÝtÓâÍ}YÇÙ7?¬kmÕôÄîá 1óW‰ä¹– nÒVÄ–Ìð’/Kö9A*+Ö 2âøI+JÄ'ž~ãìb°üô{ÿàmöìñïÝr eë-·ÅÛ6g׳ïü°^-·‡ÏÜòŠ Ýâdÿý§ÿìcK¹ÜΟýÍýͽ×H6÷kíx¢½à'?`Œ €• ,Bw÷C‰lÿ Ò›ìóÓñzë´¶J+QVŒ#ÖHX³KúD¿ûãÿòî Û¹9Èti©Wúï~ì§9+ùñ˜¬±úò_‰²Š/‰‹G0ÀUj|0“Ý}û ™ž½»ƒTKL‰~×pÝš;~¡ÿ‡±d9ÖTí®/üŸ›‰.ýÚoü·«¹Þu¿ðþ÷™î}ín,aľ5´ˆ2JDÄZ£jÅY•J‘5aIÄԬߋ7ÅmX³•ÂÔŒR¶*ÊZ³0;ž.:áøûù—ØpT£ׂ¾=´4íüðMÉ®;‚d‹#VÞs'"+¡k®qªQŽo«å5}æÉ±“þóÿ*"²õC<ÓÛÏv¥µUJ´R&¬7–M9A2åÅ3o7Û~Òs˜r"ÏZeKÅäLn25rò%õBnäÂógžø¿Ï„`€Ÿæ|ø7¶6uï¾5ÑÔßêÄ’æÍuï—ãåý­;ŽÜåù6PÊ:Íí ;›Û ;E.Ÿðf­ˆ‰Ä–6ÙñL:ýÒgþâ—åÂ,Áos“7øÀ};2]ûnI´ôg×_†X¸¼œ@{·àÙë[;ç÷*eß²fáòÓ¡ö9íŠ ª£­ß¿å}^€÷`€7 >۽톽ñ®½²[bJT$Ƽµ^Z¬Tu<žRÍC½›Nîï웸ÙóMâ]ír8(uù=Z #Èyï€õopðÁXÛàögº¯»µ}«×ÖÞ}ªGik+¥LY©¥m¡TÉÙ¼ã™ý;ö=û³[wœúps[~»ëÙøUý®ˆŠ¢h&7<:vb,¿”ë°8õDDº3ñtÇ@¬¹×ëÛò£=»¯òïöm9t}dÜ%=d¢H¶íyêæ{_ûdkg~Ÿ³I¥¯îK¥D´#ÄõîŸyxÓg„/w Ä#Ið«]%JÛ™É!­äÑ™ÉMç•¶KøbE‹I÷œ9$j-‹ÙÁÚDrr>Š$o~ÌíYüõX>¼…£µŒì»¸ï¢’P»n¸èÇ‘Œ*:ûnüá½A¢Özµ±…¶:3.G* æ…ÂŒüç0r׺¥R%'"ÑbÇÀr!à\m•èÚ’2FÙÖŽã}íÝ3û×Ä®ö÷š䇎UþÀÌüÈ¿z$·”k°XfJ)k¯ò”·ZUJaÅ ÍLÊ“åBtè/ˆÀC0À2ÒÚªéÉ­cÕÒ ù .ïÜaI©Ë{¤šÈJ¥¤rÓ#æ÷Ξÿ¯ßøÎ÷~$‡¤Ö aPÁ‹`DÄÚËg38JÿÔù¡QvÓ–c[ý –yg,”‹R¨Ue¾˜¯½¨ux¢ZôŽýðñá??ô¥CÌ*Ö,‚ÞàºE×õ'’&ŠWÂjª*Z©Ë[$]~º(ŠÓ?ðÌîî-¯ß<5¶õȹwQâ›?}¤Œêì>¼yû¾#‰Z›ˆˆµb«ÉÏŽFß+—¢G\í~j~øÿñS"RiȰˆH¡ rÃu¯oßyã+'7×~äõ#·?íù¡W.fÂj²fñ±tצ³š›g÷rmÃbŒDVk•J$§’›wg¡RŽŽŒŸ—¿¿8ù‡Î«]<ò3€kÁWéá/~hϦý™_kít>éÇUû› ›ß‹µ"aMŠ y9—ʪÁ¥¾†R"ÚQ^2#[ãi÷¦NgÓîíÊ¿üÍׇ…ÙÀE0À{sþí}ɶ:? $µ/èzÄÓúú ¡o¿åçö´·l?ñôéÉåxm–kà]ÜôÙ›¼[oßô 훼ßJfe·ÖW·na1jU©V¢C—ÎÉŸÿ/ßø×Ï„ÀÁ Ô§>þ÷nù¹ö^ï_¦[Ô­WæKÇÇ ô¦L‹¾#Ó‘ºqó­ý“­·Þ09ôä±êJ\€Å  Žû~í¾þ½Áç²ÎA½ìó o§”ˆãJOªMíþ‡2AÔ¹ÿþí_þæÉa¶Ð@Ôqÿ¯ì ©ÃûB<¹<뮆R¢<_eRY}³wo¿á£;ÜŽ-Û'O>{rnµÆÀ[ p_ø£ßÑÖãüV*£÷¨¬öÒZtîxÒ¹»¹KíÙsßîêÈŹ¡Âh¡¶ú£ld¼Ãu¿xgó®‰Ï4uxÝið»¤ã‰$ôŽDFݹý½;úlÍíýåF=rŒÓ¢«‚`€w¸á¾Ý}-]Î'ÒÍîŠìŠ´XJ‰x¾J'ÓzK—{¯3gšülÛÑáW‡9ô °âxլ –žOdbéX\mÕŽ¸“ˆˆÒ¢ý˜jòãjgº5îô]·møø“™‚ȨiôØëç0@¿ü‡ŸþH[¯ýÝ–v°klŸ¢JÉæò3æPµjž˜›sŸŸŽ^ýú?ýúD£ÇXÖÄ·f°Å“ak,pš=Ž+‰ÅU6ÖçÜVúq{6×ÿ‹ˆü`ýiø³¹°VE5kL$kwq±ñ|qRÕøêç?ÿŸ~þßüÝÿø‘Ÿfˈ¨cèpñÕd:ù|*ë|´Ñc©ÇZ‘X\‚ÎÍêaMôܤLˆÈw=.ÀúÁ ÔñÍß;sÁJí”]k ÞA)ÑÚ‘˜ãŠç8ŽN†,#‚ê¸÷¿ëoÖÊéP8¹m ¬U"ʲc`Y PÇÎÛšxqïŽk¤ÄZ±Š`,+‚®,–m®]—H˦5þD’ˆ\>Ü- ¥V u©Ñc¬/,z€+¸ûówwˆÑ;]oí±b­ˆ1"Åœ}eæ’~­Ñã¬/¼ÃàƒÆöÜÜá'ô]J½ñ¨Ï`H‰D‘«ö¼Se«ÆÊB¥èÎç¦jþØMjô8ë Áïpë}rCS»úÕt³Þ²VbA¬H¥ž˜4_«2ôÚ /ÌN–¦GŽMG\‘ªˆa‡$À2#àL%š3‘‰B+Ž«dM,zV"µªÌúnîÏžøŸx©ÑÃlN£kÍÑÇÏLwîêózo2ëôˆ¼±±jƒÃAkÝÔÔ‹'º{žû«ss `£ à |lç ï;õ•µÖ*¥”hÝØ¹Ç?×»3-nëôTìÅésãùFް1 p·ü¾]ÙV÷çÒMºU)mG)¥¿c’vÄÕJgûwgc7}r—î¹±?<ñƒ3ó`ý"à ¶Þ¾Íˆ‰Ú•Ö[•£´ÖÊh-ŽR}0I)?PÍÉ&ç.±úW{ç_ú‹ã¯6rL€õ`€+8þø©ÙÞý›~ä(çpuÁT•«6 ht0ˆˆ#Æ ke™+äì_¾üã‡=&ÀúÅ.IPÇ·þù.‰ÈW?ú[÷ xnk*mïÅUª‘cŠB sÓÑ3ãÊ¿ŸˆëÃsóñ `ý#à=,¸Õ~ôlù â-ÿss—÷K~LüFŒC)‘JIÆÆ‡äOÿW¾ý©5b€…G’à= =9dοp~nËM».*%Ê‹©^ÇUé†ì™¤Ä³ZlÿÍÛ_?ú؉±Œ°Á p•Ž|ïõ1•íÿ+?®ÊɬÞãÅTfµÇàºâ9Zõ*í]xþ«¯=»Ú×l< ß"®%ÏýþwgN?3ÿû¹©è±jÙ†«½ÚZ‘r÷#Ùt¦ºu¯ بX¤'¾üÄÜÄpõheÁäñTÒ¿}ùa«]ÕyÇß¹gg.Ø`X‚¡å¿[)E?¨Um¹!Pâz¾ç5äÚ€ …5 °ïO¹ÍÝ/§Zܘv>×S©Õ<£¡R´C—^¿{î¥Óã«uMÀÆD0À ½84“ÌöòÁa±6åúª×qWgËÕJÑœ;táÛC/MŠˆ >Ø’iïLúÓŠÕÕ¸>`ãhø‰¥°üâ¿øÔ@sôpS«ÿ×Ò-²×]p0FŒ5ÖãTdžçýeËÍ^Ú:¤|å9nجuLÕJµéüôÐéóO½ òD¸Ücl<Ì0À28òøñÙÉ™îC݃þw*eIÄ5èz*x÷ß²b­Èßݘ7ÿÇÛÏw°b2aÍ)ÎÏ'G³¯M\ÜòWC§î~±fv:~º¯ÍOutÄ’½i/Ý‘Š¥»Úbñô¦xª8¥ùÙbqšÀû ,³¿ñoîO¦Ú’_èÚªÿv,®\O¼Ë`Å‘(tJaèkU] kºd"]«Vý¼çÕR¢—ÎT;' ŒÑa¥ìÎÌϦ‡G/nûÑäèŽ bâa-ô"k¼HëwgDD‹(£fÎ2 £G;ûôïlÀ¿À:B0À xøá‡çÆÒ]½{‚Ó)óAÇw¶« ÉKsS­g'ÆúÏÏÏvÎVk‰²(×jqŒ‘Hû^Áom?×ÛÔ<ÙY.'òÏï=…­%±Ú^õŵ–JnTÍŸ~eòÔ§DÜT¦cK-ÌO ½¸0)òH´‚·XgXaûGìmíO07Û–©©£6JW•2êò yÇOk1ÆZkµUJ)­Í~æ*(QåÜdX]˜Ê 㞟Jä.=:?ùòsã‡[X–l¬a€vò™3“¯>±éb¦ÿãn,¥mÕå-X¯4i`E)QZ[¥”©ó3Wǧu,ÝÒ]®Ÿh±¥¹‹“¥ùá‹ ãgjK¿ÀFã6z°¨žëjimE‰z°ƈ¼YJ”U¡fv°Xœô ÒÖ5wôÝúKÛåàA¾,\5‚6c¤uëÍ-©–Í[;güX£‡¸v °î½å­ž•k€E"`³êxb8ëø¹Ë³ V³;`QxŽÖ©(rLÿ¶§÷ ì~íÃÓãÇN»çY1ÚŠt6zh€kÁ뎾|à³RªTlÊóéÑòBvV¬‰f†°8¬+Zjµ‚˜J±f­1#ó§/½ç¬XeEĆ Uíͮ殀u`€õD‹TæGk…™¡#ºT°^ô¶…êÜdnt ^‘C àZC0À:cÃÐV ³µrîbEŒ÷ã`(ç&æfÏ~^ž_¥ƒãëÁë‰1’lÙìÇ›zn´ÆDoþ±¥ç†ž>4/úV±‘C\[Xg´ˆVÿÖ?³V)qý˜©UYô X‚Ö#ûöÇŽ”²"‘æQ$À¢qp€ºu ê"ÔE0ÀÊc±1àšÅ.Ið:÷ߟ´&J©’³¤þ6©Pt³U–/iׂÞjÞtç®x릱D`´²*¬y‘²W¿E©UFk\?–Ö¢˜m\[xwJ»M‰t‹î¿îÖC·:N)qîÄÍ?œ›Þ9®œðªg ”Òög#p- à*¸~ÍõƒZີ¤D®(תEϘ•+ˆ`€wgÃÊ\yúb|øÅïí)We¥Î,*TdœX¶'®oeF À !àÝÙêØÙSµùóyõ“EÏÖzj1/E…¶Þ?}›orXǸ– ð†^ýòœˆÌ½Ÿ×h<Ykˆ8Ë3*V[üÀÊSAà/jF€µ‚`PÁ .‚@]€ºu ê"ÔE0¨‹`€Uf%ÔÚ«¸¢„ÃÜkÁ«HéªÞ´õ™Ýnùê§2M¯wŠ2D`M#`)eU"3Ó•i*v'ÓÓÙF€÷â6z°‘ëE§ÝóÌÄðÈk¹¹I±Ú6zL¼‚V“Ñbj-å™é¶Q­CG¬y¬:#Z³vpm` €ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚VžmôX*‚VA¹TnôX·Ñ€kÁཿºÍ‹·íŠ%š—ôûÕ¨w¼˜#ŠÙÀµ…`€« ­ÉÖþAv“‰–ôŽ7Ë<,VÁWÁSŽUn`œX`ļù¹_‹QÖj«”-XŸXÃKÙPi)øVªš·SÀzÅ ,A9f`×´w ï»°ý¥‹çn8-Êc}`Ýá+1X «­ëR±D®Çq‹ñHá-°1ÃKฑ3|ê®—Ç/\w¼\j.:J[Ö1Ö#‚–ÄH­š©TÊé²Ö,z¬_,™­Eq3`=ã[u °Ì¬„Z9yßJÈ{,àšÇÿ™À22FÙßtû‡þôs›¶>¿[©²Óè1ð~ °Ü”c¬ÕkX ¸ö±è–‘ÖV>~ïËçN”‹ÄC±šÑ€kÁËÌQÚŠMרj°ðH¬b°>0ÃWÁ:‘²V)k¬^J (¥­Xl\{¸ ¦Z)…•™ÙjÞ#Ñ^ tc©Ž„v¼å+ˆ`€«åÌìÅçÇ­ Ô_¢sëÝÿÃAÐêŠb¦pí à*ŒúVQDŠKýýž}÷ûʰcàÚâgXyK• áu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔõÿZ£˜k˜IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_1.0.png000066400000000000000000000640121430147706700256730ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈzTXtRaw profile type exifxÚ­—mš)„ÿsŠ=BÁqø|ž¹Á_²ÊžnÇc{§²« 3I ¡PdØÿýã„ÿðIÚRÈæµ´R"ŸÜrKN¯O{~%æç÷õ™Qßg?–ßÝD{‡¼†Eï¯V:çíϾ¬!ãóùPßWR}Oôeå÷„zWNtÖÇMr>½ÎK~OÔö«SZõ[éý$ïÏVÞ_{-y'{>÷ÿðñDv¢´Œ…4¥­¢ñù­¯1úúv¾™_ÑrÇÑÞ¾{†Ê+ ŸïKãÇ}þ»¾~9ïËß?õ÷ý&–å#:ß½ öýà?!þ°°~ÝQú|!¥¯ÿ%Èç¬zÎ~=]Ï…ˆ–7£bø{!×ç¶Âá|¾?Gã¨±Ç ä bŽ)M¨œ Y–t9²ŸvÊd‹9íä´)M`¹çªzji‚˜€‡œäÚti¹™vPåtúºyÖmÏzS*+/ah&nùÛ#üèâ¯áœyC$7˜@//€Ó¥(Û¸ÈÝ_Fˆœ7nöøËñ†?~ TA{Â\yÀÇkŠaò'·ôÁYg´¯’àë=!bmc3¢  ¼—"ÑSrâX¨³ó¤9 ³´ØdÊJ¶O5ݵ¹Çå›,•tO£MaZÔÁ¦i¬œ þx®p¨›Z6³bn5X³^´äb¥/W享g7/î^½y¯ZsµZª×Z[í-5E­•æ­¶ÖzO¡³Pg®ÎøÎ™‘†Ž3O›eú¬³Í¾ÒÒ…L¬²|ÕÕVß6J±ó¶]¶ïºÛî®=ùØ)ÇO=íô¯¨½QýËñ ¨Éµô uÇùWÔ8Ü¿L!WNìbb) ˆûEB§‹Y¬’sºÈ]ÌbK$…%6i›°ä"„yK²#_±û¹ŸÂ-Xý)ÜÒ?!.tÿrèþŠÛwP[ý]å…7¦QÉ>®ïÚCªýµþkívª¯³‡Z<=û ‡®“6kœ©±ÃÓVÜÒ2A%ï÷ÑG4g‹2œä"•FTû^¹Ì¾C9#×1kY]¼ÉÚRÌb×Ñ C?ZýIJGsó¡©³\M“Êul޵¼1ÖTCîWæ vÖ»×&³ž™Fs–¸§µ¾gKT½ŒQ,6+ ®h©èˆ0mŠõØ··¶–õ9î¥dcî{OÖZ¤Íºô%ËËîiÌUö&±¬%:(z–W±¶l[^W@w„hMx(Ùøƒy¯Îµ ׆ðã6oŠÅù¤)DóâQàâ—„]¶—Û:ñŒ³J¡`åz<ôyαܷ8´î%Á>R„ì3‚¯i¶!] À"ºZ·ˆ›[`>j¹ÖÞA éff룭 j¹(a‰¬‰H&—ëÎdÖ<W˜ç2‹ÞÌ%ÆÐà8›0x9nY%3f©Cx‘¢MšNîˆs ïKšyš ÷ `mÛŒKŸg§Ara-+™‰ôMû=bºñ÷Úðó7¨l'®›/g¶ºt/ÙV§ò° ¤¥'Ú¶¹$™Bµ–y¯Bt=µ9gÇÇL”3ï+ñ1çÆÍ¶œ•Fȵú̸B”Q·éšLtÖ¹îÍUÙÇRŤ,+Oœw-mȺáuNhy"¤± åÅ’J¦’µ˜öS[o{n2¸»ß0i;…Ð[‡c—G÷ªÖ°ržT ’|Š%­2ÙY d­Q–Ñ¹Ö†ÜÆ€i›—Ë¡$cu¸S[è5‹Ï”½‰ÁIrãSð\.§>©èWXœ`Ðiá%)ö$v;_ÙBŠÈÊ¿›iÛð3}¸OÝH( ÉQz‹¥_Q¿4® !å ¬=Ú.϶ŽqådªÃ ê¦nêX“3{›Ô…f>πķììë!r§r|µ^ÐY‹¯#ĉ¿W2Ô½11Yƒ¥<•¶ˆÄR”ÁüŒâƒU WÍ». &ùË"q•›³¨ú‚r7³'•›ZÛóX=·2¶ÚIû÷Bipµ³br8“Û¹/-«³&åáô¶ÚLˆ )P¥‚¢4`ÆZŸ+ÛÎ =åë˜7|Už‹'Þi ÝÆ0î³æYy ÜZ|ö>)ú²j†$ü ÿp¢LɧTuBDî@é%¹^ñb_e¬íSÎV¼ f€ü3âB8ÉsÞ—ü*û'\p ¦II}ç í(EÞ†Îakf4a» »XÜ$@ü©9H¬ßB‰×X¼•ÕÐØ,ˆ†­ÃRôÈõ¼òzëŸÞô g”í›{ï)Êé€)`#ˆÉc6FóÆ3Ór™7›m«AØl\*+Agt&l|…úÄ3Ònúˆ¼¬Â2¢Ð¨àwÍ´Ø[ÏPºkMTó>×õ`÷Ÿðžæ»mø¡ ÂfyF™mÂÔJj~K ²G‘ül’Âã’®Â&‘‚Ý;µóÉÝÒTP|ôì5*dLÅMZîÈ[´PåÉ‘QY܉íÄýejVJå ¶mÃÔDJ´×‘&™JšµŠ'ì·ö[+—~ “0“< ЬÇ8‡‡+’q#_•ÕòÊJÿšùç‰l¡Ýˆ"ÑïRBLݵ£0˜oŸ`£xg‡‰UFà¶à±-Æ‹8oÒ˜¿âýL^×±®\ëÇ`VÄò@:ïïk7A0„iCCPICC profilexœ}‘=HÃ@Å_ÓŠ"• í â¤:YqÔ*¡B¨Zu0¹ô š4$).Ž‚kÁÁŪƒ‹³®®‚ øâäè¤è"%þ/)´ˆõà¸ïî=îÞB½Ì4+0hºm¦q1“]»_@?ÂaXf–1'IIt_÷ðñõ.Ƴ:Ÿûsô©9‹>‘x–¦M¼A<½iœ÷‰#¬(«ÄçÄc&]ø‘ëŠÇoœ . <3b¦SóÄb±ÐÆJ³¢©OGUM§|!ã±Êy‹³V®²æ=ù ƒ9}e™ë4‡À"– A„‚*J(ÃFŒV )Úwðº~‰\ ¹J`äX@d×þ¿»µò“^R0t½8ÎÇн 4jŽó}ì8Àÿ \é-¥Ì|’^kiÑ# ´ \\·4e¸Üž Ù”]ÉOSÈç÷3ú¦,¾z×¼Þšû8}ÒÔUò88F ”½ÞáÝ=í½ý{¦ÙßFr•¥ëiTiTXtXML:com.adobe.xmp ˜ÞÀ<gAMA± üabKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢tIMEä;Ìkê© IDATxÚìÝw”d×Y.ü÷Ý'V]]§§'ç 0 –•,Ë6r%ã†cŒÉ\@ø..`lDæ_Œ¶‘l9+gÉJ£Išî陞ιºr:iïûG¤‘¥QœÐ5z~kõšY««NUï÷¬ªóœ˜àuaëuŸº6Þ³u¥nÅ‘:­¯Í,¸<{°\ž>p÷ð]7Ž¡­C  `YÑÑpº0e7½…Xh§ýµ•”$—rCw£ °ì‘¸ÍÝŠ*Ÿî×—Oì‹2P 8“Ñ€ˆ˜}&R¬”.•’*”îY±Îs‰( R§700“W/p=?¶î©<„ 0Ài¤”PKAA’Ž®”PJV ¡ùB©lH1kaeÂf&’ÒJiJ°"âS ˜IÉ@hFÈDµà´†V¦• ›f)ä:!7•î‰ÆË©F­}azbý„’ŽÆB¨X|2ÕÝ·KµÒ>¿0Ó?Š,$AµÔ]ðÜD“…®˜ˆXH"Dê¥RÀ± BŠH2)_°Ð^ìIÇ  p*#))™XWDBézÞnïztKªm®ßsB•Dº¸2ÕÞèü‘ÚŠ5‡†•d™›ë8ÂT·{V¾©R*nï[ŸL—V»n(ߨ…]Ç®*ɲZŽçg§¶õ½˜óbïAˆ²´3ûšïÙŽÓl«ú~gõ@`€S¢©+iH!Ì¢j2³ò½¶‹€_—ñäxºkÅî¾g׃ Ô\œë’2Ôˆ%êݱD)k˜ÊÒ e*å†Cáù¬T’éů5í°Œ†ÂÅm,¤¡ëÒb&RªJ2`)%{R’¬–͹r±ç ¥BÜa>q‡€RFà:©* É2°|E1E@`€“N‘¦ÏD»û®[±jô‚ÅùøhzžRvmßcWÏ´ªvG÷žm‘X­=÷Rᘗ,È÷ì^Ò0¤EL¬|O«qøì~jËw§FÏð¼˜óôJK/ýÞ%£‚ p )Ū^í›o6§k5KÔûBO·;«©™µŠ±`*$4ÒbÉF_GïÑí…Åèp(ZJ ¡´dºÙ§éµõª=Ó·z÷t¹Ø13;µi@Iã€e7-ÓvM%…t]Íï[}dK*“_£iÒ¨UÂó‹óG|ßp«åT¡˜_;øïÙ^‚g&5‘Bœ¡ÈÀ¾kúÃ{‹Ä íV¨‘µÃg&ÒtÒi¯K»N× ?ÒÙ[ØY-šsn“ëVHE “,"¦PÄm_³ùð5¾;RmÔÍb1œŸ^=Ÿ_7㺩³¦Ê…usvhñÝlZ[ÕuÒ "¡˜3Ï š^²âÉáŽÀg!·QË–¥L6_nï 0ÀIÀìjk7ß{Y©Îg:ŠkCa;þ÷2à ^Ó 2PA³aæ3ѤÓCŠäñÓ4eh¡ ©ì a…›v¸Ö•ÊÖæç§Œ ]ô˜Óì¬(òêµ¾"UI+B2ÑÓÊXµw<°¡TìŸs®²`Ws±º”–øB)eù¨Àé§¡ ^²›Þ²ÑŠg“B·~<1(¥|·-;¾¾¸˜šhÖµ¢®7ã†)C,ˆ|O«\yûøð–L«ô}Q_œGš®Lff""))¨–ÍÙ©ÑîûG‡ÖÜçÔ©Š62±DeE<5™u½P.v•„Šùù›µ±çF¾oR)ÛwLÝ÷RÍ ˆ¹D†|Õ½ ̸uöêùÙù[Çp6¼|èax½SšÊÍí/æWÎg:ö­®–Ûæ}?±Ø¹bn')Éåbh¶ëžTm6ê¶=gFãNZI ¤$)ÄÒÍ'×áúÌDïÃO^{O(ê[ý×ÞUØ`‡œ”»kÅ`1˧ËÅìBqqí¼RVÀ"`¢gƒƒçeêOKRJSÇ¢Æ  0À™ÅÊ÷ÒÙÉ+žR*àÜ Œ Í>‘íÚ¿>Û“[³qǾ«tÃI–—4teH)îà azÑýXðÀwÿÍÐBšNFPÂÑt½`3{ÚàJ±²ì|8m×ôªql÷f8 `H¼fÌ’õ®J£Þ]Y’¤0Yà,8‰Ð±€À  €À €À§öa8…Ìvó™ÿ» .`I¸/Loúà%Ô·)IžëÓg?òM4 ´ I8Ejc5"¦-ù™ò{òÓ¥(ZZzN‘7~øâvÄì3-£!)_ïíÁ¤XÉ83Z zNÕ²àéj¡yÿM¿ñûk.è­¿NþjEê¹™€Y2sÑìZ=´iÛå“83Z zN²fZsÙµtôþ‘³=(ަéuƒÉÑ}߈I1»z(\ˆ&Ò“=ÕÅjan¨ã´@`"zàß~ü•¬”ŠHr(2ÒÖ–=¸)ÐÊ¥DN× áZ±D5•é\Øætx‹í]ò;âÔ@`€³>(RŠL«²ì\LJI±ÄáþT&·Ö¹‰X¢¸@l¸¦„Û²Õµº.CÅ5› ÖÐv pÖR¤i5SÓ†’šì[sÿ®l×ÜÖzM/¹¡H´™ Ge2uÛ…`¥ë,_5Ø Ó0È cS¿6ƒ¼EŒ6ãéüA^ÎCó 0@+bXÓ=™J¶µïß’›Û4 ¥&eP 7ÜÈt”7Y!²˜”Æ‚3›ž«‚üœÿÐìˆóOýövÏW-E"oq)<ý/ 0@kFRŠ”šItö–ˆˆÈ´X&´ éNsëø`å[µ’9þ£ÿ[Cû 0Àr¤»Â •ì¶Ž#«cñÚ EJÐkìZ`VT«¹£ƒkoŸ¹doàG=â¥ñM¬1Yõb¥]2p'‰–#檉g»û¶wôäv„¢âµï¿ìºìrÙý3çôý˜Ë,;¦âÊì SÏ•ÜÚ¢KKéD¡ °¬Â‚/b‰±¶Ht¡-Ù–_—Lû|ÂÂÒ±•`–‚(xÎñ” ¸¶x´îԫίçÇ+  °<"-]œ+fáj}«ïÙ¹zÃðUš.-Óòã'1,ëÅJ15㹇™ˆ”b%}ªÎU*s‡®Ì ÖŒp`„( œqJ(!j³+|?äe³¬[³éÐÛ‰¤V«hUÓRé“ð"ì; 3?5ºêž#W>Nd*p¸YšQÕÜ‘ÙZnøñÂчÇÓk. Æúê€ÀgÒÖwn&E¬4½`Gbã=±ÄBVÓCN[ûèN§)͆YN¤¼¬¦¿–ýyùžpj•ÈDa1}xzlÍS‹ókf¤ÏŠÙ1j‹#ÕÂè#ƒµÜȾÀ«Ïù™ÏÓ}Ÿ¾Å@`€3Ímøq;Uˆ…"nG¦cr}O~›–1&ž§×÷+ Rô*–E’’” È«U#3ã}Mm8TʯYÐtféU´Fá¨ç;ÕI§2¤‘;¬dP_<òœ)—|øJhtÇð>ùFHûéDöÐ{Ãq«Ë4T<¥²†ÁÇz¼8‘z•SŽ=— 3ñ“£Ûœ½`X7ˆu#ÄL[£fyæðô“7=ZœØ]ÞzÝ'Õoþ €ÀgÊ•¿z ï)‹T‡ ½ñ¶n&Ÿ¦¬‹í0¥mÍvM#]hÌê$¬Iä{ÜÌÍ%÷=tÞ=ÅÜ–)ÔâéÅŽ˜˜Ï Tà犻Ká¶U„°€ÀgúƒÝÐB›/‰_ ôæÎU‘Ë:WZÛ4ŒPDYºÁÆÉzf"ßÓ«ó“}û Û'Y(>~eTEŠt;fév,MDV}qÄAuZ@œ] s•®Ž~ûgן—ü`¦Û\cÚlDZäd†¢¥¹ Žc ùÞ™gVj=ž"Ò ;º•èÜöÎ8*€ÀËÀðîéj4®Ùñ´èI¶kݦEßSAà+©NâÖhÏn©/ÖÎ?wçgƒf„¥f„’¡d/6ZhQ’p–©N-úåE>3ç}OÙ¯\Ï•^$¦Å# J0Ÿœ›EŠHJ_÷”²%‘«½ÐFÍŠ$+%«Ne®¾ò¢Q³2GsOýE@`€3ÅHØ‚Y…tƒípLD—Ö?R¬é¬ A|²^Ge„"µL"u¸ÍuÒ ×‰:ÌLD’”RÄ̤dÀÒwß©1³0¥çxôBÉ–- MpvÙqͦžX[d{<­¯Ñta:u阶›Ãp‰PÄiïè9²-žšH5f¡QÏTýf‘ê‹£ÌĬ[QÅ,’v<»BÉ øÍÑêÜ Š€ÀgÊÖ«· Ï ͆ŒX!-K‰6ÓŸ *(EÊs¹!4Ò™_Y ‚4Ó’Ñh¼ÖKÌ·9M}¾8Ÿ(8å)†Åf8­43¬¬XÖ–¾kÍÊžâÄn  …`HÀÙ''D tÈG✴BÂæ‰š(5Z9Õæõ¿ºIÌÄšæ[šÖ4Íh;[Ñ“’¤”\ š©t;¦ôæ>´¬’p–¹íïn'­—ý}µ²ö=åè±RRP«Zó¥|jØq´½ŠùJ‘ªUEqr¤sÏôøyG…ð M±f)&·ÙVÚzw,ñx·mÉíÊ ökáZ¡ÑT³Ñ[,äÒóžGr[§XøâXX  Yû¿ûç_jÎ@!Zz^'1…£©TÛèÆdf±?ÙVYeZÊö]«Ï&…¥t9?}î‘áƒk¿ï:¢~ü󙉘)E²Ù Ç0a§ÙYBÐÂìÎÑÑCW>A¤?A¥©Zz^/A²ÊtõuôTWGÍ^fb!H„¢•îdúðºââªy)ÃA(œ‹6j¡ª”ä?ý\PÐl‹J ßmå‘¡¾UJ+¦‰lŸH2‘!Õ±Xòì *AJaUh ¬Èmš Ó’a]_úüoÖDivbõó“ëÄSOõFã¹öT&×'ƒ@0+AD™kxfr; °\ß5ü|nõœR!ŸYžx'6fEÄ 4<´B^`âz%“¯–Çgì—övÐ+£á U(©ËJ9YpšZÙ4ýL,^ÍxâÜú¾åõ­Þ¿sa6}¸^MæˆnÔÛ–Uµ+¥Ž2³âf#6¢”Hiº^32£‰ÔlG,¹ÐChóÓýƒcG.”ÎÄ¡=ßø­}^i €À-…‰Kùí“•â©Î^·³»¿²Í°ŽÔ+ÅøÜÔøæý‚™bÉR|ãöG/<á{^Ý®”ãwA¶Îdr<5Òç©ÌôŠl÷Ô®pÄéÔ eJI2ÕVêO¶-vH·øç\xÞÿ Ŷ†cbBJÍ#`)” Bùi9üoýÞ7Q 8CÞñ×Ðľе§ÈŽÅ莸—é %ŽÆ¦¾¯”Ó¤¦–±ÞUon6D=+<7ÚBáFG(ìtJIA¥dO¹Îý¥f#•ï_7¹=m´ë†›0-/a˜ÊRǦ-A"‘®®&×iš`¥B?!")Y±bR‚…AVX-tnŽsö`Y£¥‰˜ç°Œ1šàì¡§SôÁO\F“‡æËz̰BíšjïZ›|sªÝ~[­žnͳÛ;+™ýa*K7XSŠT°§kÒdÁ¤Ž›¿Ü¨q¹ÙÔ*‰”Û£iLDÏýý«13âý¯¿}ÿ-¥|…¢ 0Àéü\ÿ_¿+^¯šoÚE¿–̨s˜É¨•IFÜ&4¤Hi:éJ‘""æ—ñM )æ“óÁL´8K‡ùÎèÆ;ÿå1T `™ÃNÏg‘µo:'éе&~ƒ²v–è1,‘MfD§a²¡i¤iÇö``~yaáéÇž¬÷èûäI©ê/éÃM+€€9 g‰kÿä-OÛ—gWh×V­—žÙ'–O2•Õøô°ûÏS‡±§@+@@ {Û WÓ¯å=¤Ôß):¯c…øE+$V[¶ ™¦²y¹ÝÃWDvH%¢qß½ó×PA8~å?¯§Ïç“nÿRA4ëd_ÿ'?|£¦_šÚ!4%Ô2žKl…8cG¸=½"„^n€€ñ£-è>óî¨ÆÍž@jç&;B×Å’êB!TZ7…e˜lð2ÿtŸŸ îœ:âÞðåßùî^T`yÃÝ€ó–ßy…cêÉlôSѵ Á3·L13Q,¥]Oç“°ö’tPT€e C’Zè3û?wÍŽº1Ó¢‘8wk[Ì-ôYÎDÍ:ÕÕà»§H‹ ª pØ—}øÂLô‘k>œ¾1™1Þ§µØ”af¢z…ò‹3ÁC»ë×þÌG®|hi£gXÎ0$ `ŠvÙô3ùÖχcBî¯þW£Ò,÷mŠ\ÕµZüÏP”“šÞzsÐd ¨Zpÿë‰Ì~låŽvºŒ…@`€W‚™H)"#¹šdà>ÚÖùûloü:%c3Ûº)¢­ù‡5›T*傹ÜL@÷þû÷Plx9>ü¯oû°Òw CtFF¢VlÜDJ 3,RJQ "Õê£ôIçý›«ÿǯ}îúÕî'Pxx),ˆB1ãÜU›í_~ºw!• _ÁL,%KM?;æš)E‰‰ìús#Ûoùô£ã¨<¼œ iI”›lþ†ÒÓÖvEâ¼Ã´)*4f¡= SHJ±Ñ÷ŪZ±†Â´ Mpf=uÇQ*×B·Ù±øÿ­]-Éi¥Ä6Ãæ¤gÇþš¥\ðÈôQÿò³Þ·oÿ»»°ñ@ ÁNÏËÌÚ+·Ñ•?Õk®ÚiZ!fÕÂ+2ÕÊ*·0íÿ¯ï}¦øùóÞ–ݼ¦ŸD¡Zz–™üèU¦Ë(2¼óGŠôÐ Ì®º`åªTÖ:G;#ó)Eį"­åE¹wv4ø·â¢úÒ¼;úÃO݊´ ìô °ŒÕËÞ½µ²*Ά ¿Z6g§Ç²÷Of’’¯ô,ˆ…Ρ«!)éðÜÑ™í&Š Ðb°JÀ2бÉBÚž«yºAÆ©~=¥HÕªzn`÷…_-äVÎ¥Ûõ¥³ù­ÅE{2ÕîôÙ!ù²6Ž‚D<Å4ÝüDà¹bñµ¿ü•bïšzŸñ'(,@ Á$€eì’lº®½×| ±'§ŸA)EJ±dVL?vÈcû?øãÃk­Uûó®©7%Í“o IDATÂütÛ3ÕéZóËëf&2,j'’í‰v{v~¸ÀßrP =8QGeZz–1ÁæJMc¢“0„”™HJE¥Bôp½Gëv¸ÞiÙA‚ùتyŠ”’AèÒmfj#W?ÎT°Y­ÇSùuévoÅË×ÀLÔÖe\MÿVÊÉ‚ni#¢¯¢²­= ËØe?»ýb)êy¥ÁàøE³™‰<‡ÜjÙ˜.æRO ì½øûGžºâ±ù™®A§©O‡£ÅŒiùqfbbb]—V<9—±¬‚ª–c%D=¢ˆç:á:©z3«´Y¶¡ “BžKóÕßÊtØ3†â´ô0œ"ýÂå©D:´%5¯7LýJ·©”¢<1+&ò<}Îmr!ð¸)%Ì$œ¦¬ VT˜óÆ2½æù‰vÚüRû0(EÊ©SiqºùÛ•¼óídWô‹¡ˆØŽs®“U-ªÙZ9øÇ§íóêÎEBRwChLzOù衞}ºQ¯ß6Ü¡ëÒ&"bAZ:[Þ‰X‘nŸÞ¿ûáw~+ðãŽçµ5&F®Üí8Ù\G÷ðæH¬ÐK:=–-#/§= ›c†E›…&nÇÙ€ÀðzÇݱÿ‰[?%4î‚mÓ&zúâŸY#)I¾""EL¬ûLL=kÌ ¦zÑIÆÌDåE94;æÿÙþþ­_n.º$ ñö•ç¶Ó…×oÚb…¬Ôàƒã%»ÓæèÐ¥oN÷'V6‘®×uÓšN4½¥©±u‡zúÇçâ g‹§‡>1YvÏtæwv­xòàÄÑË÷3+–2äOïžŸîŸ Gº³=SkúÖävEã~›J‘PC–MVˆ/ië ßJDƒ8EZ†$œ"›¯î®ÆÓ¡÷é†È ±ôüô#‘ÐHhéšNú±Í¥Žh½ä¤ÌD*Í-ÎÒ?ôÔ퇚8CZ†$œ"á˜ó½àf%Õ7ÿøò[>~üïþæ‰÷/wyÒ LøDõ’úzqÖýÈ­Ÿy¤òrŸZ¯uÊ…Ðx1Ÿwšawi–´Põjoi`OÛ=µêù•k_KÖWkK½"z*S[‰=Ùç:F¾^µö?vÑ÷lMpÀÄŠ‰ ¹0sÎx³–øþÖóžÜÄÏþyJÅÛDÛ¤_qj/Ý‹3àuíß?rßýñÉ<¦’¤šu•ËM9zê¾±ï~t†ÆŸÌ‘’/s„ì6³µ™‰î†á„˜}Aôìs¥ û#‡®ØS)tÍe»Gׄ£ÅŽd[~S$æµ›–²-Ûé¶C^Ûö  rsƒóÓk†K…Õ9"¡X¹nÄ ³Á‚Ÿž¯¡”"Õ¬ÑB£J3•¼g%ßÇÙ€À'ðÉÇÞë½ÊÞU-‡>Tx÷Íqï@ДÏûLÛ —û÷~õ5¦gŸÿdbŠ%F2ë·º8ӑ߬~¸Q?4;=~þa¥ ùÌ£XÐÂÜÖ©…¹õ³–U¶:z>Õ·öà•ñD£×´eL7”•éÌŸ›l+­ïê›[˜Ù`jtûÞRaí‚.‡ ³‘ &"ETXfGo’Rw =<:{´žÿÎÿ¾½„³Nà™MÒ^IRPDõ²:2yØÿÃo|üž:n­U½cƒ™í «óßšŠ{Í@sþ_—UK½yÃÚµ#N;³Ò5Í5™ÿøÒ­B‚HWž›nLŽ^|(7·v²wÕžÍk6 ½Ë0dˆ˜E¥™˜ïÚÓÖ1·aýÖûzF‡jw—K…f#œ÷½²ë4d±˜“Ÿ»õÿŒ}vòÉÕßøêû(šÒiÕ¥ëiäþ!œ ð‰á•÷.4ëjrv¿ñó¿þ›Ž ?ù‰Ë7¶¯Œ½ßs¼Ç&jå@’§¤ÿȉŽ#eÈw›V™DRo6bU)5y‚˜BÄÄDB5êÕ±#íõÓéîÙ•HÕVÍŒwî=rðm?šš{*ÓñÔZÃrÍf½·|ðñ-÷W E?)>¹ïžê—.z_{ufçÅô?õuÔ^Ì_=òç•ö0HIä»ÁþÏßðÐ+ÿ9}J˜YÃk5͘øáÜFDÞ&Ž :Á¿é…}=DZ'^SJ¨—Z´‰™Ès“ÎØð¥ûYÓd,¾gUWßÌŽFý±Üäè%ƒ•R÷DŠ5=åBwaï}ëïf9½oðŽ•¹}/ú~ž½ôv‰^z…ã A¤ébÝ{~ogïW~÷¶…ã~¥þó7o»ïÂ^z Ý•DäStiS8¢t°¢Å¹®¡z%>[X\1V-­X|%K¼Jiå|×|¥40ÃBžg¸ÌŠ™)%ÉŠ¦¥ ]V«Ì\‘\Y9GèâI+ž­-íß ÔÂÀm8 à¯×™_ñç®ï“S-ÑcœÜóã¿K­k£‹¯Û™·#Ç.ú«D^Õ;ñë“≣—î# 8ð# ÅÏ¿ù¯HÓ]_¾!…f¸šàš™ÊYe˜Ê:°ù¶…™cÌ?ÿïTlFS‘hvÝzRçT扄BÌ-½K@`€çø‹®?*¥Ú+‘Dõrð±¯ýÙ£Ÿ{lòy¿/ÉÓþæ®>ßl7I)E^Î{:1”V@K””¬„ÏYZU×½oÍ]»Òí¹UÌDzlA7Ü®f«%³Ø¬GòcG6Þ9;yÁa"M½àh#¥Hº i„ñhÇÆl5wtÚ°c$4KàL@`€àyB‹†ùe GRДӠéÜdmË]_(½PXxÚå}#%³QJw‡É kÔ(û43¼Hv$Doÿ•í$Ÿ\Ï¡ùM¾à RM-žKjº«—‹}ùÀ {B ˜H1kš4,Ò£±ÊÊÎÞÅ‹X9M³02¸é¾¹©  Etâ© ¬›ÊŒ¶+a†5b²Â™.G¨ð\8³’föÝ‚“ …0šàôú³ûrÁsÛÓ“Ÿ•R¤ÔÒÒ©O_—ƒß¹õ³7>~óà Bûµ/½/°BLŸ¾þwh×~³#»2Ù›YÉZa-Z/û命s{b©h|ÕÎè%–-¢šÁZn:³Æ VèšnP2=ß“Hç×hZ`=´ö>èÞÜ̦QÏmk,õ<¥ëE««o ?Û9¹.žÊ­7-/¹÷‘ó¾žî0?Kqÿ©ö/‰T¦´)ÎßÕ¨w–•Ò~ìÅ4%eÂ9IióàÕ]K?#ò†÷ž³ÅŽèo§¹_âKl§)ªÓc=÷•‹ý Ï ðz‡¾a€åÁ¦¥›8LDµÜ4©ýNCX¨ ÜróàÞ+ïõ¼¨ƒ2ÀòÔ$"ŸŽõ4ÔËŽ’R6Õ)N º.­Hl¡§³çá¦5' ÄRf9þçµZš}ÍÄÄX› åhh€e˜¼°ÚzI¼+–6ߥi§n¦°$©ÚʶÎü†pt6<7ʇ=ÇtUà é;R® "…AÄ‚^ÑfV2ФWçÀmÈfeÖu*óc…±G‹¨0@ëÀ€eä]»Š²+“ЧQm•·æY(Í´HëîË]4¤}óßæ†vÒ¬Œ)¥ïkšeádL·¢í´bf(Í,ôà%ŽHJzÂk”¯^È{õBÞk”ªN5ç{õBU@`€Wèšß½œº×µÑä¡|RIºZJŠÒ¤f-˜W¤ò]6ëU•«•¼o›aïÑÁ|òЖk?IBtÅïÝ@ÿzYØZqáÏv…Úz:íXÏÆXÇæØ‹õ4(é‹fy¶TšØ³nà¶#¥‰'JÛÞów$¥Of$b 0À+ÅLfúÐöË2Ûc)ºšÙJi¦iÖ)÷¯ ójpq¦ùçOÞYºí‘/ÝŸû¥¯}„>óþ'"¢§¾õ{”Zy#tktà–?ž\û¦ßöìXçõPB.½ï›çÀL¾[Ne~jè¶¿Ü›ÝôVŸˆhÿM¿…"´(Ìa8C>ðÉwÓ×o¡ÝßýCºmhhMv¥õ©t_jÚ×M²M“šAæ)M J©‘ÍxâöÜl¸ ­D¦Ißÿ‹[Ÿó˜fiŠ £ÉHv]Åk”8hV4¿Qð• ˜…ÆD$Xh¼4¹™„ïÔÊåé}“Åñ'\T µ¡‡à42Ò1õlì¤Dj‚ ¹Þÿã«_ß”î°~.猦«¥9§c‡3&ò]ö…&œ5çdè‡ÿö8-μèS C÷T½žíR·~³$šå¹D8½²/Ò¾®/”êíÔ̰¸õÀo–ëš’¨8¼³Ý¤µç¯¢u篦D»M¿õ—ѹüÛzîmÛw¬Ú¢ÿQ¢]\a‡U‚ùôî™V+©™JQ~£Z¬}ñæß]ü—¾¾¯<ŸÌH{ [± Ö±ÿÏͧVœ;_/ŒF³ë×…R+º§Z*Nì`aÔQ}€Ö‡±N¡Ë~ñ2²£&ÝvãüÎ?xÛöXÚ\ѽV?×ÌÚ9±”¶Khgfxh1'>’ïâÈò&^So@÷9ï¡oìþoº„Y#"Õ{þOËÉÇ¿‚NäÚ¿ƒ”Rš œuëÎMþB,­®ÒuÎèwkiâ o)%É#{¼?[œ >}Ó}ç5/wjFÒÄB'5K38Î’pŠÄÛ4bæõoýj8Æ[uƒMb: “^!ˆ­ˆ¾9‘ÕOÊÄj·–GÑàåÊö™DDïˆÄi›¦“A´|ÂÂÓXQÀJ)T N÷Ÿ b"xùÿÔ J6c‰m8!&85>uí7¨Z~Þw¨º\ßc³ŒWóž‡jÀð¥ÿõÃܾûæR¹õ&ßSõå4øG)RšÆÝø.€B74À)äV=zêÎ1Ú==šèÊþïpÌìÕtÞ(gz R9ÏãócõOM •}t,@µà…à®Ài0?X¤ÿü­Ògë®_ µ²|Ò÷(8“¡Á0)jE´p<ÆÛpBèa8ªó zü–Y*Ðgz6d¾BН7LŠó¸d7, 3k¥ß¼iÍ%›+M·IM·N~U¢P€Àp&ÍÊÑC_Ìg×÷Üh† ¥›â]'ót¿Ó¢D~^Íf998[*.¹×â*«T­¢P€žδÌú6zï^,Òöã‰6Ú*46Nçë7k*'•\ <::rÀýÂÔáêM[ÞØá/L849¸@2ôàçªô¾Do]–= Oá0‘ç’rêòh¥(ï..x7~î£ß=ˆ*,oèahaÐá‡GI˜æ¿F3©Ï3ËkM‹SÄËó~Ј­§5Ml ¼àžý÷Ъ°¼ 4@kS¢»?»‡¾ö§NHßÿ‘ZîïW-ÝÀwœ6“{g‰˜|R-ò†j€À§û"\`v 0À `""í 𦈎-KÚS˜‰ª%5YÎË›×\´rüK¿ý÷((@‹À¤g€ñ­¿z”F÷w»5[m§A~£|yqÊyðO/FX@`€“Nº’¾pÃ]4¼·üÏ¥e?éx¯ê^ùé¾_B%àT]x7úú'î»åo kSÃÕ7x®j‰•†šõ`¤¸ š×ÿÉ»â¨"@kÑЭũøtøáudÏâä¶+W} åìrÏVHtj†ÞH±gÏqò‹($@‹@@+b"ÝÒˆ™[âÆ¦…cbm$®6†â†ûU-õ•­¢m]›xóÏo_»~WúÓv„ÎÑ Ñ®id¶Â{WŠÔ⌺wfÄ¿áý»×óPP€€[<-äç>ýö {ÖF¾šlçKtƒãB´Îç¸ÄÄœ |5ù__¸ÿ@S¥œòä,Š °Ü?¿Ñ­#?ãN×ÊÁZ­X)¢p”m]Úo¯:'ñVf6PQ8‰¤¤ñ™QùåJAhÕ1¥áuf°ÙuýÜ pý÷ǾMõ²DÉà>ÏmµíÛˆˆ‰Ü&×›5UtË ICüúWÞC—~ôM(.À2…{;-fãœL·XcXÚ5ºÙz7~Xˆ§õ­«ÏíXÓ·³{®²ØÌ>^Š£“(.¼V‡î¢K~jóN3$®1MÒ[íý ABÓ9MjÛ3½¡ë¤Ò“Bˆ'/~ßæzª¿›ÆžE‘–Óç6š 1+¢’tMg=áöŽ>óç·_–ø@½*WÞãŠu ¾ ðZ()MfZZeˆ‰d H­™¢ jOfø/×î°ÿîÊ÷F7R¥Œï&€eC’ZÐú7®N¸ ²Uµ¿œóT^ô¾W-z߯–xBN&'˜[gáUÃ$Ó‹MõWÚ×wìÛyÍÚúÁ»Ž¢Ð ðjÄzºgJ9u×Â}xoã¶{¾1{ï]ÿ<ð•é¸'ð‚AaR¯ÝBã–¸[/%IfâXRÛ‘híªü=õ²Ê¦ Õ@`€WhÛÕkýhʨGZÃŽp3Ý©ù]›ã²³?ÚüÞçf†âi³–îÒÏ·Ã"õôs˜‰ˆÉ€%‹3Óû ŽÍ¼ÿ¯½{‹±«:8þ­½÷¹Î™3÷{ŽÇö|Çæ2˜P —˜¤ I[AC¤ ÔFä¡-éC/R¥ªZAÒÒ´JEI_¨µMEDI1) Dà)`ƒ/àÛŒÇö\ÎÌøœ9÷}]«PÀ¦DØ3æŒÿ¿'¤±6£o=ìóŸuöÚ‘Hè›BHÅseª0%Ïy®:âĴ娦¥0á'uøÄžÑÕ€O—àùìxøùýÙöoѵ²~Ãsew­bzC?jm&D -q»^MÍ´wW×´d‚Þ…ü£P"¯®_‰ÂhÒsíâôxô‹zYWýFPˆB½»w…S}ùõ™œ "=ql¦^¯¸+ Ÿ>Å`éÙþÍíÒ•Koé^n]])øõñ£Õ£®?´-ݵaYô5ÖìÙ¼|àämÕKcq“ºà7%R¯J}bØÿëמÉ?]šª¾áî5¥ZÙˆ_Äo²ãáçdÛ½WKä‡2=:#^Ý“©ýÓ,& € á«ß½SzWÆ¥4ãÊ䱪Œ¼sûmÙÜå«W\rðÒÀSQ¤Ý-×ìürgO}e]ø¯¨j-Ñ̸~óøÁÆ¿&Üyîï~>Î*ÀâÇW’`‰úÁƒOI¬ãÝ“Wƒb ›ïü¼¥$°Üz¦æ6:ªžÛ]›ž;“6FÎûÐJ‰hm¹Åi{زä4°šAq}å¼ ëIDATüXÿÞ0P^Jp>×1FDÄRéVÇùáŸü˜ÁÁX*´vôÔäà±ZUU_s0(%âÖÍéòéè™SGJûoùÝ›* €¥ÂË4j¹bµÜýv2e’çs(Tn­b*& ³a [ïì7åžoßÁp IÙŒ.½o]ŸÈöµ[Nâ—àQ½Ö2ÝÝ7²9žÐ-çúÿqÉ´uY[ûV§†ÒÙ–K,K …~híûéá1‘ó6ðéàXUÀY”©U–ÏNOôînÉŒmWÖ¹ýqɲÅJ¤Tw¿³¼³OnÒ‘˜B^þÆJ¤wk¯Þ`¾Ð\øJà# œ8vÕkºU>ïŒ%ʉI*–´m[Ë6ÿê•Y& ` PVd¥3Å6¥Ôܯ¥DDTKkg"Éd€`,…›ƒŠ¬Tj¦+™ŠÚæ|1#"F—O¾]¬1Y K@Å¢ÂÌšQ·nçãNOÇ>û…û®é—ë¾ö¹õÁ›åÆ®gÐ@0šôö`jÕ\qüdî•(’pN—2"-YkC¶Ól¿òϯZ‡vÕ’§Ž¸œÔM€S’ÿ¯ÀoñOoÛÕ³lr(Ûá÷ÏébJ”e«Áßytû­ÉÖX¯ïªJÑ}òèóò“‚ЄŒQ¢u<ÔÚ æz-ÛÓÞ›¸»½'q7ÉÀSœTo‹ @0š’R‘J¥§Ú“i¿{îוHJúÝÿVxвB¦   YV`õôï¼tþ[Ižó#¢Åˆ1JTHUkÛeÒ@0šŒR‘êè9Ô¿aëmî€R¢æv=‘jYò…¼y!ðÌ)˧Q‹Jn-<Ì´€`4™X¼_³~×ÍÙvw@©ù9MÏ«›ñBÞ|¿^Ö/9Žˆ[Œï…Ó‚ÐTŒØv9‘í¨ Îugá,J)Ñ?úÓ'f Í…÷0>ô©>²Ú:Oö%“:+2Á Ä²æ7@ „À7…˜ï,¾Ü²çûJJÈhNì0ÞýH¯´Ê´ïêê-nRÊÌÿýA‰Ùrçu @ÓC[¾7™Žæ÷ëH"KHg2¥ûö=õŽuÍWndØÐDøJà}F+3ï×4"-YèÉ©îûÞu³O}oò…»þì‹~[wB”¥¤0Q‘;GåØNNY‚°x)£’©zFÄÌûÓ–%ÒÚiÝ´jS²ûî?Ê=š ‰H÷{÷¡×EdXD8fÀ¢eD"m‡bdÞvŒ#F´mÛQ½]9ç÷úVÙvä[~¹$cJ¬uõ–þ™c;Y ‹”ÖN”?µåЊգ£í]õKçã Ï•¢9>3n^ôÝè@£R{3‘:½1‰m·ìàg‰t|·(i8q§Æ ÁXÔ”4ê}åƒ{åÉ­Û^úJk›—“9<ülD$ðôáá·ßÕ‘³ÿÙGöëçÌýæÞ¡çŽßðë}?Ù7Ýro¿±[Œ6ŒÀbgŒmŠ3&FMýlã•û+3ɹ^RG&zö‘ÿŒDD>§þRDÄ<±GB‘ÝÿÆÌ`±ãXUÀt‹ÆO ½3=ѱ×ÑLÎà{YwäÐU;=×âÙ øÈíÁTJ+g¦'ºÞ0š] 8‹ïe¼‘C×ì,Ï&GåOZ5"b´cLLæù­Ñ‚°8n¦\Zuzø-ÏÖ«±éO FÄ­ûK3¨WüEa4Ã, yqJàcé0Mœºühk[þÕK6¸]}‚½cŒ4jÁËõ…ß‘À#êïÙd€fÅàã)#b”„aÜUçð™ßq,ï‹Kry’9@c‡ðIœ×›Õü¼Ïä É±Ãø¥´±tĆ—1ÁÀG‚!JFåRnÒ­ÛE¦g0ÆÒn­»T)eF™ œA‰¨(r"ßM”™ |¤?TËí¼õÎb$ÒAñôªÑFÝ.1 8ûvaÜzG¥Zn9!¼ƒ >L)£jµ®j~lÍ.¿¡júÑǶÊ!¬@0.&Q˜ ÇOl926šÛxªQ+ë“Óãú5}ÖS F‹Ö‘òˆXxÓ3àQÊ(Ïíª9pó‹…üë£Ú;øvO®q0‘L>’LK·(Ó‘Då‚Ù3~Lïái ·ÑU?qìúƒÕ©î“/>þèë[?ßùåŽeíëi§-ôµ[¯û×>Ƥ€`\”ŒØñ•j_Ùh¿n…WÛ ÍQ‰èH$ Œìxxc‚pÑRÊXN"™é[7ðêŸ9è–_åyX¢xèpîŒ;Þb§»V÷ö¬¿yÕµü˜™ÁÀ”åèXª½­cõ5[¿ôX&Õ±‚¡ÁÀÿ1â$ZUºkÍŠŽÕ×^ºÕ3‚€Gƒ‰¥Û㙾u¹öUC=Ì>D‰\íU¦"eqŽ œÙ úµÈŸª§§ |À‰¥Ú̲ =vª­kðú¯K6·UDD™é¼Vz7Þ*›ïzH¾ú„c8}ÀEÅvƉ§Û[{×o ÝjOyì-kÅÐ=âU§UéÔ©úé‘Leâíå/ýí××®ºö¾,€æÂNsbŒ1±T[¢sÍuC¯ÜÏölFg7Þþý‰Ö¾ˉÙÊŠeÝò¤í–Æ^‘2S‚pñ$ƒØñŒÎôf% ܾT[®MG¾oÅR'‘‰)Ë6–åˆÑÁ¬[×Ì ÀE FGbÙ1Ïô$ELJDi¾÷Ï/Á€ˆ#"F„@€¥€‡ž ‚Á€`@0    ‚Á€`@0  @0  ‚Á€`@0 €`@0  ‚Á€`@0 €`@0  ‚Á€`@0Áàø_Â4åay-IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_10.0.png000066400000000000000000000436011430147706700257540ustar00rootroot00000000000000‰PNG  IHDR T‰=»È‹iCCPGIMP built-in sRGB(‘}‘=HÃ@Å_?¤R*,"â¡:YqÔ*¡B¨Zu0¹ô š4$).Ž‚kÁÁŪƒ‹³®®‚ øâäè¤è"%þ/)´ˆñà¸ïî=îÞþf•©fpP5ËȤ’B.¿*„^Dc@b¦>'Šixޝ{øøz—àYÞçþ}JÁd€O žeºaoOoZ:ç}â+K ñ9ñ˜A$~äºìòç’Ã~ž3²™yâ±Pêb¹‹YÙP‰§ˆãŠªQ¾?ç²Ây‹³Z­³ö=ù #me™ë4‡‘Â"– B€Œ:*¨ÂB‚VÚOzø‡¿H.™\0r, ’ãÿƒßÝšÅÉ 7)’z^lûcí­†mÛvë<WZÇ_k3Ÿ¤7:Züˆn×MÞ.w€Á']2$G Ðô‹Àû}Sè¿Âknoí}œ>Yê*}£%Ê^÷xwowoÿži÷÷ ªr†óòU` pHYs¢¢EÝ1¢ûzTXtRaw profile type exifX…­—k–å(„ÿ³ŠYâ!ÁrÁ9³ƒYþ|øÞ¬wweO¾vb 8"’ÃþÏ¿Oø[’ÚB©Ö´«F¶ÒKOƒ‹_[~%–ç÷µ­˜ß­ßµ‡ZÞ—‰óíòêm¼Î2h¯_ø˜Cæ÷í¡½ï¤öècæ÷€ùΜ¸ðoI{zµKyÔ÷ëB{³o—:ÓûMÞŸ¥¼úšòöl÷ÿðmC1PòÊD9¥%Çç·½úä×18 ¿’•~ñiI¹†§ÉÞ+ï^ïãü±µ_€ÿ¾ ?¢¯ç}ûðÓx÷È?`©oŒ¸øå ©¿ÿø›‰ó—¥n´h?½Îû8ÇÛ9ûõv£(ˆj|)*†tî3tœ@žŸÇ”Ý8j¼Cß½³·8â‚rG˜“}I—+'H—!Gös^²XbI;ç”VÊO[Ë–zZp$pÆ.'YîÙsƒ³•vÈ™æôe-òÌÛŸù–4fv¡kùË=üÝͲ‡sÖ…H.˜P//‚Ó•(˸ÌÝ_zAˆœ7oõøcÓÿu»Äf¬Ìq¾†˜U¾j+?G!øô°”ž‹_¥R¶Ç{•Yè¹øÓó'ÊÞ2Ô)÷™ýÚÆìivd²l:¯ÁŠ"©äg®zýª]OávOÅ%öiOunA¼}ƒžWxíŽî°—:Î(íÆM9eáWɤ'pcv%rRJ¯ý«10󤿥âMÅË´ ý›Ø©Êò±‘(• QÝQ ±j#ÉwYeÎNâÛ÷ô4˸áÂ:|ymŸH-sÈ“óçÂÜnmÙìh$Î1vs ªõùÂn²’öyùS?ê¨ÊY«ž”¦¶50ná"9@ò·r†š¥mjÏ«Z<xs9Æå&"Ë7C“Ùµ^Ø ,àà.¥Ö1RÞÂÊ®]UK~×Ù=\Z}‚ö¡â°Už‡S:Ïù¸Q”lÁæÖ_:T[ë„ÓXuJ¬0òÆqyžÿ§ð?6F•ƒÒ¸už®d<,K´`øÔJpx™ìû=^˜©îŒeal<Š·>TG¬„˜EOm#a’ÀÑKÛç!EÂÃK_©â–>ç+O†º èÏSdødGãKle³œHZ"“z’¢à dÇêç´'àq8;‡ÜI"“Šx„ ®ê®ˆ–rý÷òyKͳ*óÇVñ`ÄÀ#8Þå:ý½E§WfÓlþ";gÀ\q½¢íP¾®Loʾÿü*ß#5fzTXtRaw profile type iptc™=J1€0 Úó Ÿ„´Õçxi7ÿbÉ8@®ûIÙ Ñ{x15x?Ü-Õ1hO8ô£OjðzµÉv1Sp#hèYEhòõ0ZU0CŒiTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmpH‰í—ÍrÛ6Çï~ si§‚ß_#&ãÚN¢+öXž´W\I¬I‚!“ò«åGê+™r\¥—Îô ì»X.qò®o}a,`UÔ™ù×—¯¦Qä™ù[0³gͬ‹OæOŸîéÓMróÝÛ³IŸöUS F_•u›ö™Ir¶€T>«ilZ"2ó÷Ù­qÁ8¾å[6ºê‹G×|{fLx¾Lï.ßïr”™k!šã®ë¬Î³_a'Il»Øu‘T v[ Ò£º}£ãZÊ‹F¬6Ô˜,ØFd¦)íÆ.­ôªûj¬ñ­ÈñT|™¬`×¶cd»ÈMðØ_Zg³½wÝZzµeîIƒËÆUuàÑŠ«GqÜ£½ß6€ï eNáêjñfŒhÊM;&lZPS:ï2_b™”æŒ}>Lg·e\U£=”z¬Ìé^×lx©59ÅPB%i%ÙyY‚ãËÑb]¨ô’Ñ¢L/3S%æŒyªiä€ç†J¢$@~RD¨ç#ŸK;"î2òÜjZ·‚ÔJÎX…äDÔ!ÎrIíƒüY â: Šý/‚0‚1↲µI9ÎJ¡r‰ò;!Ží! n$³‰\Ët$žMbh”*lz~;ÍLײŸgnK"–ŒW™y]Ô›þÙp_T0DÍ â0‰“À‰½8 ÜðYôx+»V1ÛrbmÉiú^‰ìž¢"+ÀM½ú¶šô‚Œß3Vf¦bÊUïc²ëòôšQ¢vƒC®ÃVù•¬ð ÅÇÄß‘ækÖÕÿŽó,ÝSιè¸á7‹?€Šãœ×Ä{Ò<¤ZÁ·Ó,ê…n24ÂG9Çøvä:‡?‡Ñ0,‹a`èÝ›*ôÛiÉ#俉®I½yLâÃùâ•v ’À_ä¡‹üÀe».(^ä ‚ÄöÇKÂè½eKÑç+Ù®ò=Ë}£ß³ñ“ÕÝd’¿ØnjÛ&Þ­—7Áß`¢Î’tª:l¾iš²~X˜o5ýÝÈ×”?rËï Ölåæ\‹›®>þá@¸.(ÔíÑØcÉP–Ñ…¡î!¼»ˆä½†÷Û®-þãß)È)È)È)È)È)È)Èÿ*ÈÙdÿi µü£×Éß¿z 1¢³ IDATxœìÝyœ]G}çý_Õ9çîKï­îV«ÕÚ[Â66Ø€1†ÄÆ6³„É3IÈ2Éd ÏdÂd#˼È$“ yÍÌ0`ÉŠ…í“®ëX#‘ºåÑJ\³0781v¬øŽžÃ×¾æöþ­vƒhµ]˜™èÙìÐ5ÏÕ*kó—4øWç?ŸC`À’i1’›Û:aµQZÎ=¥ùäEU7™<Ümm)–ÊûR-Õ~ÇÊ”$Ûº°¥µcbÞGßð¥r¡^k«Œ 9ãpJ(JSyù q  8G¨ÌËÞ• õY/,,¬›*6MÎÏ\s8™oÍ´÷FbÕD,^ÎÖª^Ñ^ µRµÒœ)NíŸñýâ´cõ"g \ñƒ’s”CÛšŠÀ€¦0¡cBÛ]t¤‰%v F‡v?_õÕÀ¡ ÄÄBq´Ô*a­°0sèÈ×ÿèñ•î7ÎF`@}Z.ºÄ ŸH»ÑB4ŸÍ lùádZ¶J99Ô"… p+aàUüЫZßófjS'ÔÄá# í<À€ú.",(èîž'û7>÷ZíX7‘ ²‘˜ßét¶ÚkED¬kD‚@ÂRAÍ8Ž|v¼ú»î>.çe­Q¢Ë®X/ëÚÓƒcìéê…“g*ÈéŸi¥m±ÐšÏÍ¥G×ny}2m2V”œüT½Ð¶²¥‚9<6Tû„ ªßý»÷µï,ïÛa± 8‡ \ÓÕ÷ÌúÞá­“ãÛžž8±û¸•ˆ ÅuË^,YŒz±²Vâ~¹œ¬¸‘²÷|ODÄq|],uæægלX¿m$b_²‰’5ÌÞcûƒ?ùį|ñŸWä±hœÃuóÞ†ínîî[xEkWn ¥müñb®kÂ÷½ ½{hC*;»./uTËÉ™ÂBËñbÞAà-ó}­íå5ó³­G?Rò«º‰„±3Û®VÌðÞÇÊðÉß~à“+õ~X<ÎѳqoO2Uèu<ë¶¶·f²{7ÕªÂ@Wã)¿ÓqN#+Lïô+ ±‘¹éôPkçÜÖt6ìli/l±êä¹j/Î0X#âûvú“å>½2o†¥"0àŽìûŽ›œûÍ¿ú‰û?פn£ œ•îV§Á›7{å‚ÄT—çI‹ZäùË/R›µß|ì›ã¿úå?ýÖ³í%ší"í¸ZüæßþÚºœwºÞÅ-g)Oœ¾bCÿÓa?þWÿ×§¾×è>¢yX’€ *ç¥fŒ{¿ãJ¼g½{o׺ø?¤ÛÌ'~ê/ßúìš‹%I¨ëç>vï/­p~"žTíJ]üê¥DÄŠ±¢×Õ:ÖÙöôÐc'¦ØU4 »$à,?ùÑ7ÿXÄ‹®OdÝuýö­‰´¼”° rr;ÕrÑz¾øŸÚ;£û¾õ7=ߨþ¢¹ W‰{?xçÍ-½Ñ»)WJ'´+I¿»Ž“‰¥õΠj§iY“nQ×hG¢"âj­¼FT½*-âzªGëø–ÿòãŸû쥷ˆåB`¸JdºÜm=뽟hëVë_Ø(UYÑVDD½ø¿†oŠc­ØZÕNüÏL ¿ÝèöÑ\€«DªEmJµ¨>ѧbÁ9§«5˜R"ƈªäàGîþü/7óYhÀU‹HÂóld9vÖ·FÂZM ù9y6ôíL9núCÑ€«ÄÈþÒ'#q½­smäÎfF†JÙÎ=[þÑêû ÙøW?õ㟛ø84à*1†­ ÔœV"Ö6çÖŠX#A¥X=üOøÆÍy –ç0\%†2¯ºwÛëb)ç툣NÕ1¨ÎIh¥DVK’®"ÿk÷ï‘=gþì¶Ý–j•Ô+¶Ýýl‡¾ÛmDh%¶\ÌU¿ˆÊF´‡•Á ÀUnèÁ¡Ú¾w7wÆ ½Šã©ÎHDÚ•V—8VTÚÿÛŸùÂ_7¦§X ˆÈɇÇïÛÿNµ>ܳ!qM$ª.±¶A‡)|gþ˃Ҥ2k4›^é`uùöß~ÿ©ÉQû…jÅN\lÖŠ)Ì›g÷=Rþù°˜FöË‹À€s|ì§ïû/¥œ|7 ä¢ÎP°VL)¯§«5;Õè¾ay±$ çµá¦ ³nÔ]«^­—6nTJT4!Ý­ÎŽHªó‰£?q¼øn42VÜ)‰„=C¯xîÃþ°ù™þXK²CoGUõtéÐ_ÿÚ—«Íy#,ôϼý}ñ”P6èJ´¸wF"ªíbÚ±V¬_µårQ›@”6™JEUóÁ¡T›s}4æ „¾”ƒÀŒÏOVÿâ¿ÿìý÷5ú]°t=à‚~ðɽtnÝæ¥ÜÒ¡_áEU«RKÿóR¢Wy±¤´&RÒOª¶DJmLµ:×§²z —t<)m±¤Z'¢Û³k×=}à¡ÃÍx',5 ¸ |æÉ´Ê;݈J{ɨK]£båt µÖ¢´~aLúÂÏ•QZõ´t'zDdÏ%> —ˆÀ€ºþÍGî¸;‘±oJdôÇ9Y“ÐLa`‹Å{"?Wû_ÿô/~¥¹OÃbp^¿ü÷þVÏ€ókñ¤Z£Tóµ"ù…ð‰¡çªÿ5ã%¿Úܧa±¨aÀ9~ñïwCô}‰¤Þ¤ôòl”£”ˆÖº-Ýyƒ›2·n}ýÆÒ“÷Ø·ÏF}œã®_ÛõÉŒs«nòhÑÚ3 DÄq%KH&×›ÃPwwíÜ·ÿ[GšÛ \K’pÚÚ@;ª¡ãEkÅÖ*Nnv&»¿RLMA¬lj‘ŠòüHh\ßsËÉdj¶¯”÷æ&k÷}þÿùŸ4òùX:ÎñGwÞ÷ž|öm¶}÷Îh\%ÑfJ›K9ºïš¯OMì8^«y¾5cC×Xí+e<ë¸Ç‹–"¥Ù¼y¢ÏÅ¥!0à\JìЇçïË´µß;›.©-+¶ZurSãOxæ5ß.æÖÍ£¬ÖJ)1¢ÏŠ#bm"¬TS¥À¯¹ŒTW~ 8ÇOýå›îØžùñ¤³ñRÛ*½Ù#û·|ihÿ-{ŒMú""Z[uVñÂiFôE ‡æ!0àJÅnö¢j«ë‰ºØíT­SÌGLJ‡ú:ðì>æºJ‰˜EvÀZ &oäŠÅ 0à,¯ý¹×îîZë\«Äņ… PÕÙ‰–ç‡îþæääÆ1×­7£p~ÆŠÕŽ¿Ètf"0à,[nj½5Õæ¾ÊõTl©÷Z+¦TˆL?4ø­‘£7>/v浜Z‚´xÊX«Bà Ã*@`ÀYŠÅð«~Mî ésÜ%ÔX‘ùÙØ±ýO¾ú³Ó“;†C ]m.ªÁ(kC³ØõKh&N{ÇÞõʵƒ±ßJ¤ÔkgñaÁZ+ù…ÄÑCÏ_ûåÉ©kN(ë})ã}e­Ì0¬œÖ»!ù†l‡ýÑh\2a`­v”¨ ìZd­H­¢ó3Óí{†öïþþÌÄ5׼ő¥BeB—†Õ€À€ÓŠ3Åoù5×xN ƒ Ét¤~²µS¿ÑHä¥×#ÁÔXËž‘cÛžÝ|¢Vk-7ªV£‚†U€À€Óþþ½<."‹ˆüøGîüɶ^Ó§íyµbóóñcSÝOÙ{Ó#…|[)]ˆ­ßò•W}õSA­íÒƒƒ±V‡Ô0¬œåçþÛ7·õ%þCK§~s4®Z^º$)ðÅŸéybfjðHºe!O޵Û@™¶¶™é±ÙC…ZG94N(Ö(¥”Ò:8ë~c”µÖ³ŽSÓõú •„&üf½#À€ÓþýßßóîÞÁÈŒ§tἑÈà¶#oí]wbF”ÈðÑžGf&Öyú±[¾„ƒó‰äñ–¶ÎÑÎj-Z-Ì·/KkN5eD$•ÎfÛ†»FO\wDIä¼³VLX Ë“ÍyK,""rïï¿åöh,òï´«·*%V¤~±³ëŠëfýnkÄ:n5Ñ7øô­Æî|¨RRªgýã¯\¿iêUÖj¿TLŒ?ûø-÷6O‹ˆˆQ6žšËdÛíß0jýîÒyOÅ’l¡YïŠÅsVºXö}ûÀÑëÞ¶íÉjQ-Dcj«ëIRDŒ_•Ba^• 26?ežô"ªÅq%¡D”R¢’ér[4d]±}¯Ï¶ç2-~o4¤ã‰Jw¦e²½V­åŠÅÎ\$2èè9<ØÒ6;˜Ÿk=Q)uå_ºäÉŠÖÕÒÌÂØçý™ú*pfpÚÇ~úsϾé}o ·Ý͸1§ÝÔL©«|ÏÕòÝt:]zþɉìMw´ýK$¦:Ô ÃühÌ´D¢bã›§_£”õ”ˆ±V‰Ò¢[;vnqŸÈº^î_[Úºú7޾!¨)¿³ûèÆù™]#"áÙAJL,ÿÛã| 8Ë7þò{¿!òSÿý¡}HöíÙuüX1Ï$߉K¿ÖgÏ (%Êqì©­WÏùL;JU*É¢ãÌF#‘0¡D×Ò-¹Î0 ”㜽òÉckÍz?, u½ë]ïr¤Ÿø½þ5‘·u®Õ¥0×õTf)m(%*²í]ÃÒÙ|Ÿˆk•ø±‚ã¸öì-ÖThÙ!iµ 0à¼Þýgo¹gý¶àgcÉȵ‰Œp]9¹ÖhémYåºALéZ\DÄZm‚Ð=7h‘ ð­>3 «gù‰?¿ç-ƒ;Ý_Ndœ]‘¨îq\ÑÖŠØ‹¤µèx¼ÜÙÙ³mª³öUµ&0ÖÔX’´JpZvs{"­¯sÖÒí©ÕDþö§ïÛ{ê³{ÿó=7o¼!ö.ÇU-jï¹…ã‡×søð-{åÚSQA©P{^>™i) lÚÝü̦±ÐÏTµ¶§¶Qc •I[ºn¹ãw^ײöú­‘LWÒÑ®yù;p!œåï¿o^Dæ_úóžÁØÛ³mêfÇ‘H½{C_W†¬ûúÑýoxL”¶/Î+ˆ8Šv¬vii›ÛÚ³öñÃã'nÙkLôôª&¬™ R»èÀpÍ;?úöt÷öžH4íˆÂB°(í=ö×U©ºX±s3‰Ã‡÷½ö‘ÀO¾dЯ%–(ÄÓéñµÅBâøøp÷žTf²·­{OijøæƒÊ µˆˆõC#R]r`Øôæ^—éÚøŠd¶?¥½ØÉÞ ! xYïù«{þm,.›µSw¤B>:vdßîõk™ê™™Ð—RnÌ75kf&ÚÇò¹®ñ#ûn2‘ÎDbù„u•R§†÷6 į,)0ì|Ç_Ü‘jÛ´ÑK·»Zi‚BƒpAoûà]¯êßy¯Õ½çûÜZ±ùùè‰CÏ]÷ʼnÑ+yqÐ5[œ:8WÝÿÕZ6ÛS˜µOxŽ“©O¹¥7§t$îEOÄt$¥œhÒˆ¿V©,ªèyÓÞ¿3Ý·cW¼u°Ó‹ÆE,³ Í@`À9þýÇßþ^Hûìxþû;¢?›ÌêWh-ú¥×Y+f~66´ïéWÝ71²û˜sÆ_øÃÀWåùáBaî™Oúö_WEdú¼ûЇôއÍö0굨ZÉ;øõìy¹þm»çnKwmßméŽ;ʵb)WhN»ç7ï¸iÛ-ÉßnëvÞäº1&SVZ%Gy/½Ö ç¦SûŸê–/ÌOo{iX¨.ÏÍþî÷|ïT/øÐØùÏãŸùDÃþôÍÛÿüîd÷¶õÑD‹«D3¥°Œ 8‹ uX-KÅõD»žDÎ µª*ÏLµ<:´ùáé±­ÇÊ•Ž¢XmE%"â×Jvîø'öÞ÷[÷5ª/;~ìÞ˜êܺ9’îŽ8ŽkÅV""òãr÷›"‰Öw ÛrhzôÚ!+®9²þûmíGÖ”ÊmùR®{¾ZNWNžà\8}Ÿ²5;7òÌÈÞÏÿîèÇ–Û~±#¾æú7&;»½hêäv©„…C`€ˆˆ|òw¾ôÞý³³Å¹˜GŒR¡ ‚Ћˆ¯g­È!Q~h•ÖV¤&ÊwlM6¬–ƒ‘Gÿá@#ú°íîß¿%ÙµeG²¥/©´k(k^yœöÃÿïãO¬Ð£Õ®wýõ[’íëÖERšZ…ÕƒÀ€µéŽß½>Û½õÚxK_‹M1†y…U„À€³ã­rgºgç†h"ë)7b–­VÁ5u6ÅK°ìoÿlç¦×&º¶¶{ÑèÉí×á;ªIDATR)l^• XnªeͶ»2kvx¢8¯yµÓ+Ý\]vÜö¡¤—j‰£‰ —–_¸ÒÀbÔE`P@]uÔE`PW×jµÒ}¸\ÔE`P@]uÔE`P@]uÔE`ÀUEkÅ)ÏK@`P@],«šSX§”²bVº'X w¥;€ËÓÀÍ?]ÛàÍ×8®çeíbïÓÚó¼DÖ ‰á²@`ÀEqãÉx¼} ¥½˜·”ûÑ"Š´p¹ 0à¢)¥­£ô¢gpù¡†@]uÔE`P@]uÔE`ÀUÇZ«Vº— ®Bœ_¼XuÔE`@c)QŽ»u#³qQ²¨Z#ZL³û…‹Ââ-4T$2ßuÓçßíELôÑï¼íB¿³Tÿj-Ú+¸ÙÔH›UF-ÌnœR1B|X5 h(kݰZIN…&Œ„Æ»àÈ? •ië>ÞµõÚïu]­Ÿy´öÙééë†]mØÅh• 0 ¡üZ¶ºçáwÞoµQŽòì…®UʨâBûB!ß~¤kÍè-ë·î}e>ß;çW;ŠZ³õéj@`@ÃiÇç‚aADDk«J¥Þܱƒ×>¡T±Å†^U)õ²÷aùPô €cŒ²®7ïé;¸%™¬t,ÌdÆkµ¶2³ ««FKÇÈ–m»î¿5‘n1†™†Õ€À€£µU6L×ö?{Ç÷žyìÿ‰*§½käÚDj:c­n^`p(ª^,Vœ‘ˆ)ä{æ‹…ô”5¢\¯æ‰8+Ý-EÏX´UÊXÇS5FŒãW”eIÒ*À Vœ1ÖF¢¥H"Qn‰ÆÂ¤8Ó «3 XyŽHza¹”Xp½ød­˜*Š¥Î`5 0`å…"J\k‚HŘXÁˆ®t—p+N;¡Ne޶'3“±x¥-/ÅEi+BnXi¬¨0tLkÇá®Í;Ÿ¼5©fŽØþñ‘ÝGRǰ °¢”2*½ \ŠÍ×jñ…¹é'Lôµ¨aX XAZ´[öj%7<ðÜk¾/6[ jqÂÂ*B`À 2"&¦7/ÁJ÷çÃ9 ¸êX«™ÁX$€ºX’€¦0FYqD´UJĬpp1 h8+NµL¥ÂÀ k~Ì·¡cÄ$–¯JA‰2ÆêsCŠcCk­eIÒ"ÐpñÄtòšë¾ôn%NP­&çÊ…ÄÔÞgßü–å9Z¡8w¢jà ¯”¶/ýÌA ¦¼°,¹ÐZŒ±Vë“KBã˜Z53åÅüX"_#*ÔÖ*%JÎÀ_êsƒÀZ×}qÖ`áÄž‘ƒ_û“ûû¬«—F‰ò¢c‰¶ö¡ž™©Í#A­­ìW:‹O<|ÏýŽêDr&e¬:çùkÿbÚ1"ö|÷jÑÞll÷ß~_sjÇÜòX©ØQÔÚ*Çóü¼„]’p‰”õàæGnØyÓïèßðÈ.åÔ­bakûñÎ-×üàö–¶c½çz£lpª8ZDNÎT(kÝÈl|ÓŽ¯Ý¸içWoŽ%ÆÓæ¬ëDŒ²Öus±Ö¶©­-­c[#±R´É¯zUb†—Äe¦§ŽFb~bvrýqk\#"¢tM§2“mÙ¶…ÁRqjvì˜ì=u1®uœ’ÛÒ>Ò*ÚH~¶.”hຯ­åxG2=ÓÞÖ9¼±½{zW¹›\˜é?^Ì÷-ˆ„§—ikU­²vᩇïüß~ÍóË•–²h«Œ² ^ötu#0àÒXmgÇwŸ˜¸vøÌ¥C6Œ…ÃC¯Þ77Ó;QʯY8µc‘•@GSñήƒýk7<ó×uìã½é_‚âæ™dv´uóμ9Û¾°% ÜÒüLËþÃÏï~h~~ó„ãØs§(¬¶¹…¹ÞµnìøaßÈÐÎçòóý3Ë÷òW>ãYlŒ²éÖÉô¦mß¹-‘.ôäf3ÃAÐ>eÂLU‰ÕåR[aldóc³Ó¥ç ùÌÜÂ\ïd~npÖqÂól‘úÂ3Œµkïè외anº}lv¦F^²| À€¦:N1A$¬VcyÑÊzþ5ßÉûç\W”Öªùí¥£û^ÿ´±Új¥”R¾:êsµR'ÝøýéÉé}]Ç7u¬9±é‡sÁhsßêêA`ÀE m•œ1µ’•%쀔óÂÁ§ßð]«dËÇêS›­jk•8¡r$\BOŒÌÏlžšžìŸØøì­¯ÜšHÄ)€nN¸À¥Pò®w-içÍMsƒ7¶¯¿ùÕ‘–î@7øÄåXb4­•UÇž|ê‰ç¿øÇ_ndÛW+fp)¬|êSK™ÈmzÖÚðf­”’ohT)õæEDŒyöüX2ÎaP@]uÔE`P@]u°2šxR‚RÊi^ëWnÀ²²q¹FGãM}F¬uãº]ïþ›ŸVÖœK¬1AîØ“û†ûÄSMíÄ‚À€e³ýŽ÷õÄ»6îŠÆÛ‚‹ŸbÐòr÷fº6z"’=ßg&¬Å™ƒÉ‹|øU‡%IX6‘¶-oLu ÆŒRö¥ÃU¥*ލ¢'ʨ‹ï«•–‚À€e±ómþ–tç–v%ú‚iÁe£ñÉT¶eO$6š6FÙÓŸY×*QÆÚK "ûòA„À€epý;ßÿºŽ Û”7a蘓!àCQUs ´²rÖÀ^IÄ('ÔéÌÁÎHt&!ºêŠœ KéRK»þjF šîš×ŽÜÝ1ðí×ÍNõí[˜ë+•Ò¥j±¥I_)£´VêÔ2%­­ª–{s•Òš¼R®ÕÚž1›`Äã1n(Îl"nU6æ×jÝ9¿ÚRYL}–†À€¦K¶í½S·t÷MÝT.=?U)%Ç …ÌØÜdÏÑñÑ #~µ­džV[%ú%ó '9VÛRaó´ˆHM—ÜÖög×9n1¦U×BµÚ›ëÚ …c,³ K@`@Ó)¥”ˆˆãŠ›ÊÖzÒÙjO»™½nMïÈܺ û‡æf:9øŠ§Šùµ îY3 /ä‚…ù-£Qo,ÓÚþüz«NTf&_q$¨Åý Ý(j‹À€åðb°"V”(%O­±Älk¶}a[[çĶC›¾ôÀÍÏ9*zžY‚—.7ÒbŒµ[¶}ç¦Î5“;‡t?íEò¹¹Í#µJ¢¦/<M`X$šNÙóÞO.Râz&ÞÖµp㌔r™ÜøÈuÇ”c´VF)åZ­ªŽöjÚø£œ\D)ÇŠ‰}ƒ\ÓÙ3z_Ó•…Ù͇K¥Îœïg+Z[¥œ|D)ß ‚¶òYåÕ쪺$¬ J)‰'Ë=ë·<ýÚTËBëÜlûL9—)a¢ÚÒztM[×ð€±‘x¢Ø®´Ua ÂTK±¯VŽO[ÿD¡Ð?[«¦ªgÎ,¬xèúÜìæÃ³sÛÆµhe”­V´‘j°’ïz9!0 é´£_ödekE"Ñ Ý³nöÕ=sו ±±…¹ôÑá㛞.ÍuÏ“oK¦&©Z›vW-EæFŽlþöðÐ ÏWË­e­­:k’^Ô1vþàGcC…‡FŽm9^ËÍ/”çÇŽÿÞÿüaS_ø B`@Ó¹QéXÒõž‰z‘ áyÕ´çZg!·i:ÿì†Qå'Ó™±¬çÕ¼B¾k¡Zk©¸Z)­Ï=ÈÍ×=ðúÇ·]ó¥ÖL랇~XøúÄáéoÿà£åƽٕÀ€¦«Víè™uϧXkE¬2"b•-êäEJ‰”KÑ™£û¯ýîìÔŽž:' žc¦Û8«¬µVurG¥úõËÕ’y ö¿·¼bxßÿé÷oÖû]É hºÐ—…SÿßZ±ÖбFl1çMMMt<ú±r[÷ô–TºÒíFLÒuM,ÛZܸaÛ¾[¬ÄœžØ6ª$bDŒ¼0› ³÷ªãDlh7Fþ?ÕCÍ{»+5âhºÞ¶õÍ=ÎM""a A¹¤s¹ÙØð‘}›¾9tèöG¦&w?¾}ω#ƒSÍ¥2ó½Ñ˜I&ÒåÞ–ÖÑþšo§çfÖO*ÑJ©—[q”ÖrröB‹QbÕSJk‰$Û#±öìötßöÈôï /ÿÛ_Þ hº]wl½½µÛ¹ÑX±"' “'Ç:ž>väú=¡é*j«Å˜Hèײ•üB×d$:+Ét®ÏumÔ‹†7RÖÚæü pj5?U³FÙÐ*Ur•¸V‰kw.ª²gm$0=µùXƃ•îΕ„ðpY³Vl)çMÝöýb¾#r9G04 —µÙ©ÔÞ#{¯ûÚÄÈÎcÖÆB–#5—'%R.èùc¯ýæè±ŽhG a¡ñ¨a@ÓiGǽo‘5ÖÎLu>5390&JYÂBsÐtÚÓ©F·Y*x3“£›ž.•Öäµ¶l£Ú$\Žln!sdn®gZŒK…spyQ"ù…ÈèØñí—z´˜]h"./ÖÈÌD÷ž±áÍÃ&t(\h2.+¾¯«¹ùî‘J©½DíBópÙPJ¤ZŒÌV«é¼s‘#Ù“»a±8‡«Ÿk_øwÍ×åÐwƒ•îÒÕ‚À€æ mÕ„bE‰Ò/™°Vlµ¢ "ÊÄbaF”œžCå— ‘ÉR>1n¹RŽ/LŽ˜wËj™e@`@ÓªŸ›u×xq‰G£vvÜþH,ÌŠUáÜljÿ±k˜HZ×L¼2™©õX«L­ªs“£=ÞûʇK¥Þy(km$<Ù*õÎËÀ€¦ûÇ÷ù›"òM‘]o÷õ[^½õû7Ím ¯vtÿîGó¹Þ9Ï›Køµ“ݽG^º29¾ù‰Ñc×ô+-Š›WËjÖéÝ{lÿ®½£=ω®8bSÖªÖ’ Gö÷í<¦”kK¥ÁYG‡ŽÖ†°°‚X÷€e•™Ê8JD‹«l4še³{»QV[«´ˆTʃsåRÿ¼£}'´Š'†³^l*iŒâDç@`ÀŠQÚ×âTkµ CÇ£¬ÖJ\‚¤EÂhm?¼6›9Ü#–eI+%IXÚ*U«öª•®b2;’M¥çÓ…|K¾´°&Z/tݲMäâÕJë‚_síT]‘x@±óò"0`eh1ÚšÀJߺ=;Öm8pG¥œ917Õu°ZMä鹎dªØåzÅöÑc›š¾v4â…¬Yf¬ #¢baè§ò®gÝΖÙëZ:æ®5¡ò]×ÄW”1FægKϘ@¬x+Ýß« +J)£†m?:1Ú÷Hˆñ£fa€d€d€d€d€d€ôóB½[2[äIEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_10.5.png000066400000000000000000000014071430147706700257570ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<]PLTEp©Ft±I}¾OzºL€ÅO†ÈS“ÊYŽÄU#€n¥Er­HyºMv¶Jr­GxµKÃQ~¿Nu³I|¼LˆÉS„ÄPp­Ev´IÁN}»Kÿÿÿsu4tRNS _©ˆ‰öÆ:gSퟸQbKGDr + pHYs¢¢EÝ1¢IIDATxÚíÐ[PÀŸ$ŽDÒE±ÿmv,¡×¾™%LÀ‡cq²Ù­¾7 {<ÛW§"Þý0N â3/ߟˆ(ÏÕÅü]S’À쾿m%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_11.0.png000066400000000000000000000324261430147706700257600ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈáiCCPsRGB•c``<ÍL ¹y%EAîN ‘Q H 1¹¸€7`d`øv D20\Ö ,aåÇ£à,Z¤?±H:˜ÍÈb'AØ vyIA ­b'Ø@3ð…9Ù>@¶B:; ‰’Zœ dçÙñ¿åÏg`°øÂÀÀ<!–4a{;ƒÄ„˜ÊBþV†m—bŸýÁþe;T’ZQñÓwd(H,JK3ƒ4-áÓrÞHá \Ñw€k10 I 'BrØ6„£G³ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/ IDATxœíÝiŒW~ç÷ÿ9Ïr÷ÚV±Š›DR"E--õ"w»[¶glÈé™t&ÖdŒAà8 ¿ˆ~“tƒ00pfœÉ ht0ƒvŒIFãioã;v·z•H‰»TܪX k_î¾?ÏsN^TS¢(^ªÈºÅÚ¾t ͪ{Ÿç_ä›çwÿçŽ`yã÷Ý‘ü'=G?ß»]5äfÞ­zµÜ¿>ÿçÿ¨º]5l”Þîì\-´D`Ð@K-€'Lk·»†"0h‰À %€– Z"0h‰À %ð¤9Û]ÀÆ´D`Ð@K-´D`ž¸Ý³M@K-´D`Ð@K-´D`Ð@KìTJÖDnëWãƒ?uD¢'ú‹ìfîv<ÈÉ/ÿ·Gt×Ȩ‹›v^WYÇÕ‰tª×ÜË ؉”×søp²ÿÈçýTo ¦­™A´ãE"ÒÞ‹îQìHÚu"íÆÇKí´'+l;—ùÄÿÁÆÐ3v<#ZL‰X£¶»–ý†À€ÍXmcþRª§ïê¡Xr!C¯áÉ"0`Ç3V[¿)Ög?Ô'ŒìXÖ†F¢@°»¼Öè-ik”¨HÝÛeÐÚa™Ò"0`'²ÕùëóbÖS~̈„|QÔ¬y݇?÷T<ÝSÚeµÒ 0`Gÿé7o‹|c²UXX÷­ô+¿ñÂPdMœÛ­Áß+v*+òì§¼†®Âcè@K-´D`Ð@K-±­*v%o¼¡eåÔ£Ú|ù÷-ª?C`À¶;òâ×;Ýlß³~W¦K”ù´³>d¾ôÛ®ŠÅRŽÒ~ ÛÏKÆã½ÏŽv|nÀ±‘µÊl¸Ó µRÂn[†À€mwâ˹®t÷õ3nº™Ê­ ¬Ö+ý%%¾¹7(eÔz8 8²ð’(7ª“óã×_y+»rjÞF·OÊÆÖd<›Š§Š©x²’Ð:ÔÆ¸Æ7ŠB7¬×“õRa¨ Uh»±DØÝÓŸ;1tèægzû&F·hŠÅÎb$WÖk~”¤­8Ž/±ToFlÐãwZ¾74°¥^þÍ—½ŸûµÓÏ:éÿ—½îkž/ñí®éS(µþ|¾‰åûJ´鬎t÷wt×G×ĤM#Z‹ãù&™î¨uõ®KwÌv¸nÙ6jN# âMc=sw‡¦±¢W¼T_§µ¦#ÖÕ¹Rœ«‹°ÅR…”wâ+}ïÈéÄÿäÇÔN í¦DÝׂhóõ]Ï$:»ËGº{÷ Ìì¸Ó§TÕÔ+éj%ÂG Žã‰Ÿêê6I¥‡Íä§.…l« €vS¯ÿÖë¾ß¯NŒK¾î'¥ßÑæ„µbDvîR¤ÝL)%ÉtÔÊä»Ã°pfðàÜJ©ðþôÂCWgŸoÔºk9ÐMDÄóÓ6žé –Æ|©Ð>ßýÕú—ΜùJòw)5êùê°Òâ+åˆÖìйլUâ8â¦2¡Djõ@GWö?Vùî­±¯¼kL*xPb{`ÐŽ˜0¥D8¸ môÆØªñôjÚóÍ`,ážr=û(ó·h k•(%*žŒ:GŽNüb­Ü™[Y:<ßÑÏTK™Z¹£\?l4ºêëV}tœRý«1À¶³Ï}v~¹™ýa²#1¢´t»žJnn€Ki¥Œ“]í»ÞÙ=3ròù‹¿Ö70y¼opâÄС‰gû‡&ŽZÔ‹…Á¼Ø¶fmVW£úÊÜû¹…ó ÚjllÌ^ûòÔZêúè»QèÄü„‰'Uçv×µWYkE=äØl­¬Ž]ªUmÐÓ[éêmêèjHw6†2•ÃÝË3sñZ%^h4ºjÖXÔ²¦¾2K`ÀùÈ+w¨ïÐ3©ÿ:‘Ò#®¯vةλ_³¡ËkKäÖRÓž×Lú1ûÀ¿c­ÅIe*C©LyÀG×ï£M›”Äag¦3ÿTOį̈v—u£–,UòZãg¦Ô°l¥áf‹kÑ•XBº·»˜½Æ1…BÇøÅ·á;…å7”2žˆ]ÿŸsÿ܈ë™xGw8‹Û¤ˆˆµb‘ÈZZÑZ´ÒÆkÔ’¥0ôCm͇- †ž°%Ηª†ü«aäž»ëÙK”•ˆ—‡ºulaþ™‰®ÁµóÖæN4ê~±Vgc± ÊTúñ°Kkû‰UEšT‹ùØ¢ëºaÐTÍr1½]=rsuñ…©z% šõr±”q#¶Àë¿ÿzl$ûOGOzÿØu ÊZk¬ŒŠ\׺÷Î((e%hª ·šœÌ­ /TK‡s—ÞéþsWU½Ð&kRAd"9tìÇgNžû;éÎæ µ?»-‘²©BV7¯¼û ÿ¶˜=´¦Qƺ¶Q^ *ÙÉéÂÄÙ‹+OVE ØC5ÏW uÆq$õy\<€µ"ͺTs«Éc¬õã&ÙÙÝrëGF7ª¥äl>ÛssnúÙ+åÂñe­­²Q¦HgóîÖ¨Ê:vyîÔDw_á\.ŠÅý~,Êh­”1V ÙØT~­k2h¦ëÖ‰Ea³áÔò·ó•Åñ÷Ëc=6;ûvín=´Ýhõ¥ÊåêÙá'üÕ¡£þ7b •Üîšv ¥D´+N<%SÈf¦çgŽýW×aä7ŠÙá¥\n(™¦ãD÷Ì$tŽ‚ÖV5êÊ7®¼ö£tzår"UȽõbïÀÊK¢¢xµ¬jÙµ¾ÙF#ÕËkRZ½9Q[ž¸<ñÃ1÷± ‰°.¶Æk¯½æöÿrüWŸù\êŸuöè#Û]Ïnc­ˆX1õº›[žï½\)§²×/¿þ#­â‘rÒö'4ßÇe­ÕÖXmÉ¥tg÷|og÷Ìh¥Ø³ºº<:_X(¯–W'.­M\½±zãOKºÛª`KLMM™Ã§Ž/(/êèv¿ü°³ðIJ­7{žIvvW§2ÕžjÑ™­–GóZ™ ýe*%Jk«mt$ƒjy°XÈ[È.w®äfnO®N^øáä[ÿìVuíF½Õ5ØV[A½þ[Ÿï8ôRüºüW ›£”h× 2½ƒ3OE5ŸþŽOÒZ)¥#§–_®æî¼wu~îüßÌýÖ¬ˆD{´Ý¿÷F¢g(öGžö~·«ßy^i–Âo–ã/–¬w(U+eWŽ-jýéK’>¢% 꺶6-Í^z/?yîê¿«nä = í ó>ëOddP;¢¬]_b³›Y+Ƙõ`­ÅQjkC1Õ«NÑq­çÇLRi¥ÓéÆðèÑ_ZY«”Ž®m44õ¼ª¬MÌ”î\9û'ßœ“Oé*Ü‹Únâ§áðéᛦM*Ï*çÍ´ç«.ÇU±‡¾q‡†ŠjÙ[žþÁñ§~TÌ»‹ÖÔ­#ßq­ßîåVÖˆ‰"]/b³³·Gº4wè½ ¡³ahëÖŠ-:ffž‹$¨‡þi‰l¤š¥¥¨¸ôÁX~î³Ó?ýƒ%¹o¤O³CÿI°¼öÚkî𯄙bÙO<–üÏ>ûºë¨AQ*f­ ´£’Ú‘DÙ’¤,J|­Åw=Õ¡¶hÚV)»¾‘Ü= MQ"Z[mŒ2Z4ç«”HY»8×ÿÓ³ßûÚ|îí>sí?öã&½>P¼ù™à»õ„nÔëÞZ)×9[뻽4÷ÌÍJq¨hÅ5ŽnjqB×ÑE_Y×6å‡^Tk‰š5U/Ì—óK7.Ö¯þõõ{ÏVx,IÀ–yë­·ByKr"’;õÆ©>rhà/u¼˜ÊxÝÕbTêpžñâödµdßÎ/›[~Lw$:ì¡#îo¤:Ô™v×c­Øj9¶Ô¨%—ŒX4ýR³éV}§™Š%ÝZÉΞơŸ½ZÂPÕ²›¯”R«JÕÙ›‰'ÃNÕ†4£”HHX­&ÕÄrn­ëÎÊÂÑ›«K§æ•¸ëDQ<’H¢HÒO¿°¨ V´•µÛ‹ÕåïÿÍ?–GX‚t?žˆ±7Çšc2v]D®ßýÞ«o¼š„ô¼ýí·䣥2î÷ÿ~M´ãþÏÉ´Jßíl–µbr+©ñ‰k/|waöäljt½Ö]ÓZ$•ZÊ Œ^9ùÔ3K”ˆÄV+±¥•Å¡ók˃ÓÕRW¾«k¡;/÷i­d³5Yk%—M×®ÏΜ¼š]8¶Fé¦Ö뇮=ö…•¨zi-,¯Þœh,paüGÿres•°Þ~ó횈ÌÝ÷í¨ZS+MU‘t;îcŒŠÖ–:®Þüà3½ºðâ´8"a âûV¥lu6”¥T ›ª‘]ùü÷—çOÎFagÃJS?ý½—S™ò¡M®ê·a(áÜôàOîL<®°zt)Œ:›âDâªM±&Ôõü\¥´øÁûÙ¹™«KWþ ²™ëÝE`ÀN¡þÁïþí!Ï÷~©«G¾žì”Þvt¢@××VÓ7ß¿ðK\ÊÊjm•XùðD2m­2a"È­<=9?W9ñÚäµWß­Uú+^¢;0rÁ[§z³ÏÄ“Q×½,[+Vdý€4kÅ£›&R¡Rë?s׎u­EºQÌ%'—f^ž™xåR½6PÑ:\¯çq)QA£!Õìí•üÜ¥ S¥·'äÊù`Wüv §Øû;]C‰ßI¤TÖ›|Vµ"¥R|fîöè;SŸ»Ôû+›<(•Ždo¼àÿSâ›0ˆ…ýÃWGž:yöou÷—Nø1›RÊ8w/lŒ²aà‹¹Äl"Õèwër¹ÕîÛ¹Õ¡9±VY똑§n|fhtéÕJ11wgòèOî¼x­^í®)qͦ–‰ˆˆ±F5«ù¨²<1“»ýÓów.þ? ë¿yû°S„Ëwäû«ËÑjÿ°¼Ð3èþz2£Žhgý™U‰ˆ1ëék-rw;Óu!¬[ÊÇï|páÕ³²xzöþ!â²Úš(Xé¡Ãï;öì¥_ìíÍ?¯¥QQ¹˜¸S­$–}?Hn,Í^ίö.?S-õ,NÝxõб©}²¿ºüô‚Øÿ®Ì¼5?ûò¸˜XØ–mJµ–(j¨ ¸\/­Œ_[¸ú½+¹Û]hÇ¥ïǶªØq>ÿ_ïøì¯&~{ðóÛ‰”ÍX+R«xk¹ÕKF²L¤:sÇŸu?vù±0}ïAjƈ¹qiôÏægŸ¿\)Ín$0I$–ÓGŸñÀ¡™Ïg:«‡E”(±R.Å®]yîÏîŒæzº3›v£k墫ùJÕ¼z­¯I"Ôöþ®å|% …– Ñ4kª–›É—ß¿0qûoÉøø§ïžô˜è0`Ç9ûWÓfôô—D»¬$ "M¿\ê^ž¼ñ…+FW-YIwõÎõ©Þþñ“.|!•ŽzEÄVŠþ¢ç‡™žÜ±Tç;=ãï;ß«TŽdÅêÖKu”Q½½7<}úÝ_ìÈŸñü(y÷³õ0RQ9Ÿ™^Y81•H…® ãa¥ÚW1☰²ÞQÐZ)-æÆ‰LGCËf—}$¬leùæÜê+çæÎ~k^ñ ¶GE`ÀŽÓëô§ožZÉþe&kʱÚFޱ&Æc‘Ó¬÷V¦‡&=ý—/&SåþÕ¥¾«ùU««•ôêòüÉÚ œ(HVya­Ú[j´cmoÿÄÀ3/üô«½¥SÊçžç{[-Åçg¦žºéXí=zá‹Íf:{ûúϽS¯?šChE>Ùux<‘5ªYYi–?_Züé¹ìÙïÛqÝOC`ÀŽ4Q³Ù]Óʉl¸~ð˜ÖëŸâkm•öîÂì«×—_¹e­)cm¹ÖÞ]úc”½ûÚû¯mŒ²Öj«†;pðÚÁc'.üBï@ñ9¥Õ‡;Y+Q©˜™¸öÜ_Îϼ8ÞÕ518;uúl>ûÌœ‰á懖7. ÕÈß)ç/\½‘ýáe9ß¾]> ;޵‘­”(£:vkbaÔŒ…wÿ¨äžW?(((em¨m,±”Êt¬u œxzpdæs™ÎÚá»CÔ"ë§07jniîöÁs“7_¹¦OŠùæ¶xõÏ')QA³j++ã‹kSï]˜}ûÿš6ï‚ôi ع¬¶íܦ'æ-¦œ>ÿbwoöp*]Œ§jÞoc÷¯²VÄqMl`dñ¹ŽÞ;\Ê÷Ïܸúå÷´JFO,4X£êÕ|Tžÿ`|mæü…Å‹onúÔæÇA`ÀŽ“Œ»Ž6V‹ÖÞ7õ1ñü¦`tòç;»‚!íXe­jyy×3‰ÞÒéJ©±š[éŸãEâ<™°…j”–jùÙKWŠ‹çß_ºòWm9µùq°ã˜˜¯­r´²ÚÊúøÂ¦¥SsGNžý\¦3ìWZÔFf‘•‰Âxvaîè¤(×Jw;j%ªR_›Êæ§Ï»ýã[·EÞ ?ý][‡À€ÇÚ˜ÒZµíá<™šëxþsùk=ƒÅÓŽ#ÞFßgŒ2Z×3Þ:>Óè/‡aw­]»=H½š5¥¥›wÖÆüÎÒ•ï¬ÈžWxvœ¸ß¡­mO`PNÓ:|é¹ÞÁÒiýaÁZ1å’¿X̹«]=ËG—fó7ÂF_Mô|àoªäæÕåÆÖÞû“ KKW¶m Òý ØqlÜWZiÝŽk9N¤{ú—O(-p=+õjluêúñ¿*†—üX=Ö¨–înëÚN& ¤´t£P^¼þÞø÷ÿ·"²­KîG`ÀŽsµ¶J´RÖnvQŽ•¦Ž'Ý2E**æ;nߺöÚE­R‘H$Žcõ'wHªºFi«íãíž4ÊR˜½<_XzÿÙ·¿=/;` Òý Øq¬õ•Uí›aPÊjyè÷¾VDkë8nLÄ ñfäW4·EŽ9xøÝãQäšÕÅÏŽ[qµF©»Ç=Dd Ë«AvæÝ›«¹éw³gÿð‰œÚü8ÚÒæÚɸ Ý®%IJ|Óhx%ÙÀ§÷ÖŠ4ên©Ùðrž¤û‡n±¡~àû”2*»òÜtØŒ5â‰å´RßÑË)‘†Ûò1[k‰‚¦®®M•V¯ï3~ñÇ;9,ˆÐaÀä&ÒŽRª-ϪÆj[«dÅVž‘õNÃ…¡ªçV»Æ–æ] ~#lÆk‹³Ïά/Eú$­­j6z«õFïÔÝXç!]­¥YÉêJvj®pûóÓçŽM‹|÷ ýè Øq´ëzVì†w4z˜(rÌÊâÈ­ƒG¿ì¶ˆ &’0·ÒyãÂ;ûjÅÃyQëÃÍŽ=`ná¾Z?v³žúúë?ùžZaÑÖVÇ?ÈÎþôâܹï¬=æ¯óİã8Öw•v\Q²é¡ge\“_9<4Ï7\×úz1*ª×¼B­4ZpÜÀyü»=8\Ôr³AyñÆÅÜÒ¹« çÿ¼úø×ò ØqT<î‰r]iÓ®Aa”n4j^.žh¤•úÙð³ Ci6êþjnµãv1Ÿ^2¶î8âµq§"-Åå± 0ýþOnÿð‡×EÎí»ö“A`ÀŽã‰ã»Ú×"µãzÖÆ¢R13ÓÑÝ8¨”8""ÆH´¶œºuíâkß©–¯«­çºmÞÖÔˆ ÃÐM¦ã?wºcîÜù¬ìÀ­Sfí`K8gþîÑXºÄñã‘ØÍ?_G‘‰ê£sŸÑÎσÕÁÚRïÕ;·¿|ÑZÇŠ}ðnH›ÏðüT×h<Ù;Ôuø³~2ž¬–oÕ·â^[vÏíkÏ}œ³ÐH‰kJ…ÃKú{%× {­[¯zkw&Ÿ»Øž;<Œ‘X¦ßú©î/3Лì>øT¬÷øÍŽRõƒó翹ã—(°£ôô<í[íÄ”öMÛƒˆ„Q,·EQ¦MÞž¾ùÜ÷r«'Úv:ÜÃ#J´It¨(Õ5Ô¨äã’.Þð(üž¡˜(ÇSÚ5íZîoŒ²Æ8²<ß{€¢yHIDAT¥ ’×þ­rñ`^ÉÖ,CzH!âh׸žçîü¨°ŽÀ€%ÖÙïjGùë'l~æÙˆHº{¼ßQùÔäÍ—Þk4† b’á¦/¼O´å¸m ]œxŸ§´v•jô³2ªwàâá¡—žëõÚ‘œH:ÍcðFÑaÀŽâÄ“®ˆnË)Ï""¦é7³kÏ]+/ÚÈÚjnʈ5*Õs䉌/ìvì(Ž$Ú¬„:šè+ž] #߈)KeéF¶¾:}Õíü\ªçH²õîuì(¡ï»âhO”ØÇžy¶FѶÖ,ZkTT] ó³—&ës“g;ú+öå¶½‡±x ;JÜó]±jSlGRs-”½fum:»vãûïèÉ÷¿?ué_å=?µ«NZÞnt°£(ó\7æÈ&¶HrT&¨•—msmzruö½K³o{^ÚµGë>C`ÀN¢Äs|ÙD`0Iue¼VÏM_^žøÞµ•±·ÊŸ¸‰R„‡ "0`'qÇi×{¤Œ¬„Z)mƒFUŠó×+¹›g'¿÷ÌJ;rØç Ø1úûOŬvcŽë1{¥ùÙ ”j:®7Ù]Íy+¹Ùñ÷› 'ϳð$êÝ Ø1ê½C1mlLißH‹Ä`­c´®xƺViß4j ÛXˆn/^ðÇo½Ù|ÂeïiìqÝã‰ãùJ¹ö㫉Ö7÷4b¤£{lÈóòéráéŪ)6Voߪ,]¼0ñÓ?X›ÛŽÀ€ÃÏtºV”¯”ýØ ÚËǵ •UV9n94’õÂÒÜZnné|½øÁµÙ·ß¬m_Õ{;F"ÕSŽ%VDT29ÓÙÑ=1¢tèæ²Çfë•áÂÚÜÈ\yéÎTi~âüíŸüþœ0ؼ¥ Ø)t<Ý×OÄ{\]1ñä\WGÏÄ¡z¥7›ÏŸX›~PË-WK‹·>XÉÞ¸š=û‡Åí.x? 0`Gè:òµŽt_õXÿÈâHd*åиQvåÙ‰zõP!¨—m-;±RX¹uþvö{Srþ|°Ýõîìƒ'2ݱTípdFë¥âHÎØx âI³´Ô,-OŒçgo]Z8ÿÍÕí®s¿!0`Gèê_]+. Ÿ­T;ŸMv¥â¶Yvª…ÉÕêÊ­Ë•÷¿kaöm›·;ÂÙ?ünQ†–ß;óê oMx*¨¬ŒgïŒ]˜}ûÿ\›· ;ÇÂùjnáô5½ty¡–«N¯Œ½YÞî’ö;v”Ù·¿='"óÂ!l;‚Þî€ ,ì-°ÿ(Kcƒ Z"0h‰À %€– Z"0h‰À %€– Z"0`ß1†“ž7ŠÀ€}ÈÙîv €– Z"0h‰À %€– Z"0h‰À %€– Ø”±Û]ÂnA`Ð@K-´D`Ð@K-´D`Ð@K-´D`Ð@Kì+K‰N»Ý5ì&-´D`Ð@KîvìZ‹XQ[##Öª'pŸö 0`ß‹¬QQ95ª+y­}³Åw“FuµR¬Èß§= € U£´Rzç_ýÀKv7­‰¶¬ ´cݦDsןonÕ=Ú‰À€}ÏZQZé0;þÖ²ˆ<¡ùï<™ÛlCÏÀGvÍlÁ“B`À¾£”æ´ç "0`滈]ƒÀ %€– ؇œí.`× 0h‰À %€– Z"0h‰À€ýÇXNzÞ €– Z"0h‰À€ýeöm‰¶»Š]ÃÝî€v;öÅÿüP¼ãXZ\G}â‡Êóu¢3¾ eíJì5ÊM|&uðÌ!×󏢯ñ’VDÌ®kW"0`±âÆþOuíÅE”þäªæÃÿàS0À=FIÇÀZ×™ÏýÉ/ùÑ)GU1F>öEXØ0öœ£ùÁáµ3=ƒ³'µ~bU1Ê6Ç„Fq€Û§`Iöœ[W‡'Üd÷UÊ Al~ì‡Ê¨Îž©Þ¾Á™ÑÕ•Cs¥ì±•m*sW Ã€=ÆJØL„‹s¯Ü®VŽäÅ~|†A»Ó7xãécÏ^þûÞv»ªÜ-è0`ÏqDD”UšU0¡­.¾e$ý¯sË# O¼¸]†À€ýÅj[È^[[9ºê:Fim?yV>D`À¾£µU¾Ž À €– Z"0h‰À %€– Z"0h‰À %ö%& "6¢¨Å— ›v»«Ü-8é{-/N\oV‹‹®þää‘뻩îÑSÝ#/%¶£¸Ý†À€=göÂÿ=Þêg/õÉfÐ<"" tîC`À¾²”è´ÝÑÇ¿§”¶V©ØÐË¿~,Ë[]C5(6çDóòæ›Ñ§¿z{°ï9ʵñÎñÑWþþ¥·¼ËPZ«hYþÓY‘ÚVßk³ €ëúi寒©'q;'–’Áj‡š}7Û$ ""FÄ2Ãp?¶UÐûÊ`­ ¬g»ëØ- Øw¬Ò<oQØW––öÂÆ°¯¸·®Ä¬rxÞ vIÀ~áùÂïLOv '·»˜Ý‚À€½Îý¹ß<Ò7zâÄð‰¥/ÕÝõÐæÅlwY»{×ÓOÇŽû{_îyåP,“éÐ~Úéï¿yl~¶÷}%™¦(£¬2Jß âX»€½kü¥0*åiZ¥=S­d*ÙåS¾W÷DOLwþñ³~|>£TÓ!6Üqìac67{l-áÍ­/Öá8]ñTÇÂ`oÿØÓ•Jg.úª®WŒ÷ôÞ<5½ªQ¾I&fzµžªÚÂÖëÅ…@µ÷nþ غ»´{ܘÍÍ_*%\^9)'R½ñ0.¹n5CåFu¸PÈ™o~‹Ucý.žrcuU-Ì)mÕVTD`v˜üâõúR85Ÿñ׌=Ðm§jJ‰2¢%™\N}úÏ$RÅd¹Øó¼b¦ÑL—M”ElÛkÙMìãã¼Ì_¯—fëúgÝ-"aè‡Õzª"º–ŒL¢±²øâ-k­b¢]’°Ï Ë4½§m`$löÔæ&þŠçÕ\ù&_Iuõ\;Z*+æ/ëK“¬„ZDD‰»g“+®i6:∘zÅ-–üD9aò^–c$×ÍÇ”x& »{µA`DÄÑ…X,žMÖ꣱±°”?½ "â¶è.hqÄ„}µõ?íͰ  °Nik”jÿ„ó.G‡u6땎F«y…ýŠÀ€}G=°“`Dk!,܇%IØW–ÖZÙñçì`ŒQÖ˜½;ûÀ’$à1£l*3ÙkŒH­>\ÐÖ¶»¦v£Ã<&eµÅJ‰ÏýøµC‡/ šrÜ¥”誻Wµé0I9Vç³O-¹±Úå0HÔ]¿îY ´¶Ví•“öFì¶…‘d¸<ûò„ç­uvtݲÖ*³‡³é0›¥\[©›o6⡈2bíž‚&0›¤µUåüᜈ#~|¦#’HÛ=2þ¼wz%À6Z?!:’¸_kÝtÙ]: @›hmU¥r(k¬¶~¬ ¢D¨Œ»«çŸé0md­km,1Óë{e·?rÓaÚÌQž-O/¬G…]Ý`ØåqxR”QFª®Qug#/ß+Ú{å÷¶TzÑÐÁ«Gž=ó§¿<0|þˆ•P£¬ˆˆ•P+ÕtD‰Úî:ÛÀl€RF­­Ÿ‹ÂLáèÉ ¿òÌóõj,QH„FÙxb%ÝÙ3v0‘˜ïeöTh 0 µUa³¯6~ý+ç–fO¼“H¯>ñÜ_üòèáwŽ7Ãt}mõôcëŽëdã»{jáãz6̈˜d8~íµK 33#O_>Ó?|ë3®_è\¸óÊX­>\PÖµ{éSyðˆ\תrñhöÚŃ?êï»9è¸õ˜ˆ#%B¥ížZ’D`ƒÖ¡qíÊòéyåX­õÞš_!0›`Äqöö\ðžþål@K-´D`Ð@K-q°I‘4µŠB%*üØÁmÖIDŽõìvÕÕ`3´–®ä÷ŸyþúsÉÓmE¬ˆHEîûï¼ô7ùÂWV•vÍv—ù¸ ÀfXQéL!Þs <éÇwÛ &Ò’ÊT~”ËY­´ìÚÀÀ °I×/ž¹¬´R¢E”Zÿ%"z÷?nÓa6éé3W_h6l¤ˆ¬w¢È:a)£¬ÝͱÀl†›Í½¸üÁùÄŸ$MÏ*eEDLhtnùÙìýó QØPµÒê‚‘\´=?ö©HL(Ö*kEDÇ}¼F€1ÙÕÅù§kÖÚ{vIÒ¢µ2Ž’wIЬQ¥ù«9©-¾;þÖ7››üžö¥(hšÂüÕ|P\T~¼«ûÐËÏz‰ÎÇ{ˆ·b•h«Ô'¾ÿ%ª¾r»‘_ºõãé~3{ßOw¬Ý¼œ x|JlP]+,Þü÷cõÂô¬ ƒ­{6ÖZjÅeSZøà|juiNd÷ìšD‡û’G§ûŸ|êKG^í$u,lÕ½šµ‚.-^«”'?˜{sW,Eº‹À€}Éu}åöIc3Ji«DE[ñÁdUZ[(.N\˜;÷f½í7Øbì_V¬V*Z'Ø‚‘+ª²x«R[™}{îÜ·wÍܽ˜a¶‚U)ÎFµåñs?¼° »0,ˆ€öÓZå¼Tæ¯]-Wn‹¼nwI‹%I@›…õªS\¾~»±ôÁåÙóoÖ¶»žÍ Ã´“U]¹¹ÖÌN]¸}þÍâv—³Y ]”¨ÊêíF5?ynü­žyÙ¥s ÷bIÐZK£¸h++ã—×ÏM‹¼µkg{: Àfi-ÍZA—oÝj,/\›šzk×·Ð `“ îTW'jó7/NžÿVa»ëi': Àf(QÕìT±´6uaòì·V·»œv#0K‰ªäg£zvúÒíàÝI‰¶»¤vcIð8´– š•êêÔõÕÛoÝ”±Ý{8ÛÃÐa•Ö5*º²W‹5 ïµ³®­B`ƒÖJ=ö{Ý3J¼{*ðÄ´D`Ð@K-´D`Ð@K-´D`Ð@Kÿ?M±:rÚ•ÚLIEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_12.0.png000066400000000000000000000176641430147706700257700ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈáiCCPsRGB•c``<ÍL ¹y%EAîN ‘Q H 1¹¸€7`d`øv D20\Ö ,aåÇ£à,Z¤?±H:˜ÍÈb'AØ vyIA ­b'Ø@3ð…9Ù>@¶B:; ‰’Zœ dçÙñ¿åÏg`°øÂÀÀ<!–4a{;ƒÄ„˜ÊBþV†m—bŸýÁþe;T’ZQñÓwd(H,JK3ƒ4-áÓrÞHá \Ñw€k10 I 'BrØ6„£G³ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/òIDATxœíÝÙ_×aØñsîý-³ïÙá2Ü)’ڨͲäEŠÄNty0Ú (âM-Ú¢@ô¡Ïyk_ú šM‹Ž¯Y,K±ek1µQ·ápξÏïwOhÙ²¤+‘ÃYåÏàg~¿ß=óv¿¿sÏ91[)xú«>þ»UªµêÖ_> «KSõ›ï<÷Ís_û¯„ýj€‚(%€R‚(%€R‚~ÙÜEØj1KÛwñâ®^-€R‚(%€R‚(%€R‚~ÉÄ"K16ïh§&Á” @)Á” @)Á” @)Á” @)Á” @)Á” @)Á” @)Á” @)Á” @)Á” ðË&¿ó— Øb1fi»Çp§l±”ЏÝc¸S‚(%€R‚(%€R‚¶Xu»B¸ÓQ ”`J  ”`J  ”`J Ør;ccÕ;!€R‚(%€R‚(%€R•íü²Y]ž_™»þÆb–Uj!4·ôÚ1f©h,¯­Ì][½“× ØZéJçØkC ãooײÂ¥üÕBc»Æ°# ž~¶#„cõBÜî±|œ|»¿dbÿÁÏØÿéß~¢mðX6X˜›œ<×ÜîA• °µâÀá§FŽ?s²£ÿÈÁf[Ûž®¡KSÕ•°ÃA0ÀÖŠ½£ïí}xo­ÞQméÙß]ië>ÒÓÞÓÑ2xjeöò ‹!„´Ýƒ|—`€­u;†Ø›åyck­=•–®=õÖöýý‡ŸjõΕ…ë¯/l÷@C °ÕnÃÞÛÁðî³¼šêý-Õ¶Þ½ýû‡º†NÖóùÙÙ……ëkÛ9ØÊv^xRµ­'TZ:öTZz꽇¶ýðÕó•·Î‡ï|§±C °“Eˆ!+êí½•J½cK÷Ð@ëØÙÃËOŸüÑÛßûÏ“!„- Á;T^©¦¼sO=?Úu¢>u`äDßðÙåé7ߺô·ÿmjËÆ°UB%k>JžWB½£¯¥µm`oµÚ³§søLê*²ùéé ›>Û`†vƒR¥½7vÖÛ÷åõö¶ëSo­† áí;l¶Ù6HQ„˜×RÞÚU õŽÖ­¸¤`€]¥¡Ù 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  ”`€­•šÍÕb»q§*Û=Øâ‘ǾÒUï?~ ¶V7÷f¾ÈãÚêòHŒiW|y/ „¬Ù>¸·}äįåÕ®Õ;XÌc+»ãV|wŒ6Yµµ3«vîÉk­½[óͱ;žJ BF EØ57ò[eW<7lÁ” @)Á” @)Á” @)Á” @)Á”ªl÷`·)Š˜RQ)B,bž7?Ñ_ øESJYбˆY–â{ÞÙ=Ö30tîàâBß䵫§Ç²¢ÚLï{Ý'…`€_…󽣯ê¼zàÊÅû^›ž¸ÿZ–5b!¤¢R ½=zèÄË¿==9ôòÊr(Ú»fºç¦G¯ÍNN~Ò¢A0À{1¥Zu±60rñøÀÐõGÛg§&¸BÈC!fìæc‹”þ÷Â\ï̾CçN í»üôÕ‹óߘ›z>„–"„b›ÿŠ#à=²cc­gùíן|îÚ¥[gg¦Þȳfþ³ßg)ÎOïi¬Æ‹ÿðá<.vŽ]Øû½[׿“BµCa†>¹ŠR––æöÏ,ÍíŸùÙÏÞ#¥,µµN·÷õMiÙÚå‹}oêæ©ëï>¶ôI"à®d¡RY¨v L ,ÌWæ&®ýÉÌä¡›YöÉšYx×'z (ØhE‘RÊ«{†/>Ð;0u_ÌbÑl¶5>IëÞË Ü…,K15»VßúÉS߬ÕëÓ“£14>ö‹ø¢ˆéÝ÷oþ(7Ž`€»C¥˜š8z£!dYŒ÷8RB¨µL·¥е¥î•,ÿ¨Wÿô=1¦,m\ø©²”R^¤ôñ‡°eYŠ·§ÒÇ~n{ËÕîûý›/äY‘MÜy{ì“?i¬¶®•½¾!„´Pm4Z×*•¸­Ñ  „B-Tj³-½{.,-öÎ/-î¹—oø‹"¦¢!ËBˆÕ…j[Ûb{ÇüÁ,[è¹1öÀ¹ÆjûÚ‡­{ˆY#~eôÀá7¹>vൠç>óZÈB¨lÓ£L‚B¡XŽ{¼yðÔ#o|yòúž—^|þ+YË›ëºI/Š˜z^>xäì™É›ÃÆÇ:ÿêŸýóΞ‰ž¥ÅÎÅå宥ÒEÒ©[Z&{ú†ÆŸœ_X-ž|æÂ7¯x㛟y;Ö?!„,K˳=³Ó7»ßš™ê»vË J¥”¥ÎÞñ¡‘ñGŠ¢™Ý¼~ߥ©‰c7¦nž¸bó¼YºHºR]©tvßÚ›R¶Šºz&OÎϵLßÃpî‰`€Ÿšš8|}áG§ÿ¢ÙÌ‹º©ÿ8yÞÌÆ/>ùÚâÔàÍÅ¥Á¹Õ•žåÛŸ×üØ÷¦¢VÌÎî¹R¹þ~ìƒ/\~»ý»+k}KÛµ»’`€Ÿ*RLÅZk#nÀ™ E£umjòþñ»}_£Ñºvùü³¯\>_¼Röñ+ª7™ƒÛàlål%·ã)¤ !ØY\¨¶¶Ÿï‹qõ^–Kl:Á[,fì䙯}áÉ/|ý÷öŒ¼x$eRôvÙ±€Oª”²4;×}s~º~sa±w6îÇ>Œ`€mŠÖåµÕö[Ù¿#ßáÀOž‹ØÚ698<:þÙÎΫC1Û²eê °ÅRÊÒüL÷DHY³{àæ¼º²c; °ÕR–f&_êûAg×ÄÑ#'¾ùT ¬(âŽ[Ë `,-îŸzûì§ÿºVÏóþ=ã ÿd½u¦u»Çõ~‚B¡R‰! !dY1‹›ú/ËBHYZX84ùÊ Ÿý7¯÷œ»ÿ±¿û={Ÿ?Õ(R ! «Í¼X]Ë‹í¾eß±ÏJÀJÅÂäÚòäØÂj}zmó/—UÛº÷V²°7Ëó{¾Ïkõ,Ëê½ÕÖÁ¬§Y½69ynCy³­*ì*Yh6cByž²ŠÔÒ5˜§°vjºX^µ‹?gÏ®nÜÕ€]" •ê\mhÿî=ðâ¡—oÏP¤Z:‡[zöœ~ðäÞß¾/làÄ€`€]¢ÙŒEG÷ÕÞ£'¿ÿ›GNÿð×[[Ç»Š"¦Bˆ!+Zº‡:Ú÷ž~ôè³ÿþPaCv °K¢‘ÍNµ_¿quÏOV=‹Yž~vO+µ¢µ´§käôG?ÿ‡ûÃDƒEϰµÖµè¹(bªÕ'ÛñÑ=û&\œ«OvtMtwv^ïš¾µw"fY)…,¯¦J½½#Ĭ£­£{rzìÕ…{¬`€­µ®`ˆ1‹Íf¥ÙJÑl¤¹f£¶²ïÐ…ÏÕZWj×.z«ÈZš1„x;ê)«·õ„¼^k«µNL_{}y½ƒµKì Eˆ¡RL\}äÂ+¾ÓÒv«mavðúj£k©‘ºW+)Å÷¾¶ÖÚ]´÷?V¬®./\ùO×5Ó `—ɲW—–Æ. ¾c+YúàZ…¢õÎþ˜ÒñÓÍbe¹:ùÔ¯\ynén¯%`W*BžÌ&F©HõÎáJמµ‡‹û×Õճ!üpín®b—$ØåŠ"¦f3/Šx{‹Õ÷Š!­=ûkC'ž8ùÅ_?ÂÝUØÍb;{Çzö¼9\«ÌÖ?ô?†Ô1p¤­u䨧=;3î¢ì’[k]»$}˜¢ˆ©^›l;ñÀ_?³ïðO>»ºœßœ™>t3‹!»}Ã{þå1ÔZ»ÛBLÝ­'¦/üý-‚¶†v±f¬7çæÆS ³í‹ÍåÉZÒ‡Ï d!´t ®uL|vÿS_ùÖ•çþlòã>_0À®“…ŠWW*¡Yk¼óÆg_n.ßÊfÆÇÏ-M}÷­Z­ö‘¿Vfn®ÞÉ•ì Yh6ccc¶š·Ô'ÛFO¼ðH[ÛBïÛ¯ê{7fzoÅâĹoþ§³wða1„ðÒF0ÀŽ—…,[ªôö_êëèß³¼\Kó{&ÛÛû[:—úZZgÛBè½BõN?ðŽb!Á;ZQĔм¨´-´võ¾q´­c±gmmðòìÜ¡‰×^øFV]¬-ÎŽNgqòƒ‡·mÁ;U,bwߥþá¯X]j]¸rñÉ—kÝË©Y+²<„¥…ö¹BÈ*1†M:2A0ÀT1µwNv9ùܳCû&Î,η^½1~èÊÚÊž…,O1„²,ýtVaS&B‚v¤,Kqy±kéâÛ?·0sþÚj£¶²¶Öµ”e1ÞÅ„{Ç–] ¸+)µ4çfFo…²ƒGß~vxïKÇR3[93 °ƒÅ"/VVz¦æçϯ¬uΧXÄÍ{éƒìXEh4Ú×.¾ùÔ«ß^y½(Ú×*?[·°5ìhEÈò<ñc¡YèèºÔÓÙ9607·oby¶mv3®n ìYzïÌBb±ší?øêéÓ¾ðÏF¼ôPcmsÖ6˜a€]§ÍPmNÜ8t!¥Æ·&'ŽœÿéY N0À.TÉRœ?561~j,Ëb¬ä7óM¹Îf|(°ù~vp[CQ¤M9œA0À.•²F–çÍ,5«E!äYʳÏÞÙ=þwž)Bøã]÷ `j¦"ŽøÁñ‘w¸6vì¥KóžËk]‡îïþµ¶”U?r=Cj®å+Ÿyý•ó®„>2ì:YÈãbÞÞ5Ó×Õ;;:?;}1«u6»FNõÅÉî|kBsq¶~sia,„p5ø¤)BQ´¯]xóñ—®]>t~iih&¯6²BȲÙ-)e¡BL•üŽvU ° eYŠËK ËKC !o¾ïœ†#`—º½KR#„MÙé§×ؼv;Á” @)Á” °ëe¡(b*ЏáËŸí’»Z²êR¥«ãFg³‘ óó!ef`‹5bsÃnè›ÍJÑÓÿæÈé3ùON<ô­/Õê×:6r¦Á l±”Š [0ÀÖ:}ºÚÞ{p$f!¿—)bL•|¾6zìÅ“mSï¼qÿKóÓG&B¬¤Ûºm $ÀÖÉñLïþGöæyíÞîÅ›y¨TfZú®¾úHoßDŠ-ÍŒ…Ì0À–9ðØïî?ôôƒ•–žÚ½~VÌ–óŽöÙöéÉÞ+c—޼|óÚ™ yÖ¼§Y‹c†¶Àȉß8ñÔ§Z»FÚ²üÞîë‹"¦¼:_ÛôåGë×ÛÚ;š«+!4ÚŸ3Ûldä±¶¾SŸ}ªmÏñþ,¯ÞóçeYŒÍµŽÕ«—O½277xíÖÍccÖØ”ÉÁ›+ë|øWíy`%oÉB°åib¨ׯœ¹8~9»gl£×.¼K0Àæ‰GŸþƒÓ=û?Yi뮆¸±ðsyÞÌòÐÜÈük`“xäŒt}ò‘ZG[7îôå­$`ôû®¾c_|²­gw^iý@,ÍvÃíøÎ!ì>µáSO?Þ>xb¤RoË>°{Q,bwßËûc6U/Š˜vòm¹5 °±â±/ü»Ú‡OÍZ:*!}غ…,Eëêé3_ûr£Ù>}áÜã?ZYš iç=¶´sSv¡Oÿî‘îƒ?ØÚ1Ø–Çʇ@ iqáðD3…ÆèÑw~í‰ÏüÅ?oi¹Ò½ÅC½#‚6ÈþÓ_ê8øé3õŽáî˜ÕŠ:H-•âí×¾ø©[=¯W««]½ýç÷§ÐÈšimS¶G]/Á`dä±¶îã¿òDKÏèpµ¥=ÝÉ©Ëk+ƒ‹gø+ÿ÷¹á燼óH «Y­v­sãÏk^?Á÷.ïxä7l>q¸ÖÞ“‡âoùSH‹ û¦§nž|cmµ²xäôwŸ8|üïoïºÐ·¹Ã½s=À½‰‡žý×Ç{†Nni믇tS 43uüZwߥ±½õ[E3[]^휛ß?ŠJbó|®–e«•µÕÁ…ÍùÊ ¸ù§#}û~¸Þ9Ò+µâŽgÞ§‘ZëõÔb£óøÉ·¾Ôß7µïÚØÁתµFýÀ‘×>¿¼Ü:ñƒïþÎÿÌ+[»“’`€u<ýlGÏ‘§Î´ôìÊë-댅,„,„޶éCˆ1ÄŽîÕ‘öΫ{ö&„‹"6æ/u_±Ú ¡¹¥Ë ¬a€õ8v¬>xäWÏ´õ×uëêþ Ôµ48rù‰¢HéÖ¾WÞ|é ßE½±±#¿{‚¶H­íjç±Ó/~ªÞÒìjÍ‹Ú}¾úcVÔcXû«ñËüøÖ­‘OOÇ—ßyý¡¬­õ-o÷xC °5RO>ø7ÏŒ:¯µBlikö®­æ ‹ó׿Mþä…ÑoÄl5+Šöµ,K[¾…ê‡ °‰Š"¦¢¡¯ÿÍáÁ¡›×êEÇ»¿k¬Å•wÞ8øõW}+¤,Ŭ’ŠXm®?²ÞVCÌÖ}FD‚6M³™ÕÊl}ðàû|ñK-íkýïþnm5_¸~uàçßøü÷k«·Z„,…uÅB3­Åbu©Š´–Òíhˆ1K!Äj^kͳ¼º®¿A0À+ŠJj¦Fx}xôø«ïût½­ÑãÏcàæxçÙ×~ô+ÿom¥çÞ×*dYX›‰K7Ï]Yœ¹p.•øÓŸ§zÇàÑŽ½÷¶t dë™i °a²ÂR¥·÷¾½ÇÞ¸pðÚƒ=‹‡²üç÷Ýkkaeq®íÊÌtרZ£uu£®üüù‡Rò«³OþþŸÿáz?W0À(Š˜ªµ©–S|ûóƒÃ×ni[ªTŠzxÏF×:_¿|ôûS£ã«Í–ÕÆjûÚŽXÙüÜ÷*±¥c¼ëÇþòKû^úBG×âh¥’~!VWÂÊù7øÖù×>÷òäÍãצöMÇPÙ°SÙžüýÿõoKywýfà4›yÑ;pvÿ‰~øìàÈÔÕjÑÞ·n9¥n]xqvòèµ+)ÏšûÅ}Bµ­ûC“{ì÷þûäõÎ|½F X§"¥óùÚÞƒgìß3ùPµ–ZÓûnÛc aq!Ÿ¾ðö™¿]X˜ßœóŠWêé™ÿðwÿæ£^³I€uŠE5uv\îëî>bQi6Bóý¯Y˜¯Ü¼tîÈ×gn¾‘íÂÛo3 °N)[‹K+C³^üëy}õÛ]7F‡¯>Üѵ´/ÏSun¶åÊ…7ø«±‹½Q4Z×Öû-ÿv °NYŒ±Xë[¾z¥ÿfÂÞÑoÔ'®=ôµ¢ÙµX©¯Ô–fæg÷Mͼ؜G‘6Ÿ`€{R„<ϲXYÌ«ÕW:&o¼vû”å,d¡»5B °Š¥–æø¥/¼By,~öóÝN0À†Ùýð~»o™6°ePJ0¥PJ0¥¬GÌRkë¹þz˕i»‡³Yl« ë´´Ü·SLYcŸÌf °©ˆ! ,§¢ŸÄóÞå‘$ ”`€MB# ±ˆÛ=Ž{å‘$X‡"6SÑh¦²Ç‘Š´cVK1U>¸¸!1Ë«›=Ä !à[o¬-ͽ9_mÿˆÅ Pz»›}}?Õ“çµÿÄ`€»ôηÿäÍðGôVswÿæ³gãá+]¥Ÿz4ä;‰€`€»—Âÿñz÷Q§¿ºkö`ÝñElÁ” @)Á” @)Á” @)Á” @)Á” @)Á”úÿ›rÒ +©ƒbIEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_12.75.png000066400000000000000000000015431430147706700260510ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<PLTE`@wµI|ºKv´Hj¨AU6n­Cs°Fm¨Fa–F^œ@t±Gy¶Iy¶Is±Fh¦@dŸA~½N„ÅP…ÅP…ÅP}½Ln«Ch¢B…ÆR„ÄPq®E…ÅR„ÄPg¡AƒÄQŠÌT‹ÌT‹ÍT‚ÂOp­EXž8q°Ew´Hw´HwµHp¬GcšFŒÎUÏUÿÿÿ~Þ‰÷,tRNS$#zÅÂÄ~¡¦  ¤’ëëë—+FEF, -äwbKGD.TÓ‡ pHYs¢¢EÝ1¢gIDATxÚíÓ‡‚@AÌL˜bD}ûoO °ƒß-áf.I€?ÍV­ÝQ‚èÆi–¥“©Do6_äùrµV‚èm¶!„ïn¯f8Ô3„£àTœËòr½)AôîgU½Þ%ˆ^·×¯ †Jqù™{à”( W%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_13.0.png000066400000000000000000000016171430147706700257600ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<œPLTE1A@.d?R(76%[Ž8€¿N†ÇR‡ÈR…ÄQ{·L0]Œ6„ÄP¼N ]Œ6„ÅP€¼N"„ÄP‹ÍT‹ÍUŒÍU‰ÊS»M aŒ<{·J€¿NÀO~½Ms±F Av°Gz·J|¹Ly¶Jl«B‹ÍTŒÍUŒÎU‰ËS‹ÎU‰ËTÿÿÿ矋-tRNS oþÁ=˜S–R“úúúúP PЇŠ,;UfbKGD37Õ|^ pHYs¢¢EÝ1¢ƒIDATxÚíÓIrAQ@Q½¯'}ßDHâcÿ‹3øÏØÄ@Õ;g ·êærð6ò…âCI ¢VMjARWƒ˜5š­vÐéöô bŸÿçLzééAÄÃkÜFc=0ƒÀ `0˜Ìf3€À `0¼v†Ét–™/–+=ˆØz³ÝûïƒD¬üs<¿=ž¸m3%Õ¦½Â%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_2.0.png000066400000000000000000000445631430147706700257050ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈŒiCCPGIMP built-in sRGB(‘}‘=HÃ@†ß¶–Š´8ØAÄ!CuÑ‚TG­B*„Z¡U“Kÿ IC’ââ(¸üY¬:¸8ëêà*‚? NŽNŠ.RâwI¡EŒw÷ðÞ÷¾Ü}ø›U¦š=€ªYF&•rùU!ôŠ ÍƘ©Ï‰bžãë>¾ßÅy–wÝŸ#¢LøâY¦ññô¦¥sÞ'޲²¤ŸtAâG®Ë.¿q.9ìç™Q#›™'Ž ¥.–»˜• •xŠ8¦¨åûs.+œ·8«Õ:kß“¿0\ÐV–¹Nk),b "Ȩ£‚*,Äi×H1‘¡ó¤‡Èñ‹ä’ÉU#ÇjP!9~ð?øÝ[³8™p“ÂI øbÛ#@hh5lûûض['@à¸Ò:þZ˜ù$½ÑÑbG@ÿ6pqÝÑä=àr|Ò%Cr¤-±¼ŸÑ7å[ oÍí[û§@–z•¾Ñe¯{¼»·»oÿÖ´û÷‹“r±¥ÃÏD pHYs¢¢EÝ1¢ÜzTXtRaw profile type exifX…­—i–$)„ÿsŠ9„à8b{on0ÇŸÈZ³§ª«Ç=Ã!qV™d&û?ÿ>á_\)çŠZ«½ÖÈUzéÉ©´øºúó”Xžçëš1¿[¿kZÞÕDy»¼ºEóW)N»~𱆌ïÛC{¿Ií=ÑÇÊï ó]9QYßn’öôj—òž¨ïW¥öfßnu¤÷IÞŸ­¼úZòNö\÷ÿðmC1¬´”…rJ;KŽÏ³½úä×ÏùéëI?Éõ©×@‘Ÿ‰äeïŽ÷Q~\íã¿káGë×ó~ýƒñ“¿{älYß6¢òé ÑÏÿ˜ø›…ó—¥ï_l‹öÓqÞ¿sV;g¿Nç¥bÑ_Çuî:LžŸa•Ûø)u{îÎÝ¢Ç ä ÇÜSº$P9AŠ,q9²ŸrÊd‹%íd”)Í”Ÿ¶–-õ4óÅ©Ü[N²ÜóÊ ,gÚÌJN_ö"ϺýYoJcå%tMÂd¿¼Ãÿzùwîpμ&’kL —ÀézÛ¸ÈÝ'½DÎ7} üq¿áÿz]`3êcæÆ=Ž×Cå«oåçL?¥|…[ï 0k+›‘ ±JV©-%ÁŽ €œ§\ÒQM‹M¦’sMÁRKwmƘ<}“¦šn3ÜJ4Øôì€UŠâ?V>äšµ¨jUÓ´«×\KÕZ«ÕKrnÙŠ©U3kÖÍ[n¥i«ÍZk½yO=ÃÚk·Þzïî)8 9s9ý–‘Feè¨ÃF}øÄ}f™:ë´ÙfŸ¾ÒÊ šXuÙj«/ß6L±ËÖ]·í¶ûöƒ¯|ÊÑSvúñ/¨½Qýéþ¨Éµô uûÙÔh fSÈ¥½˜X*âvÀ¡ÓÅ,6)%]ä.f±£p›Ô‹MXr²%é‘/Ø}Eî·p Ú~ ·ô+äÂ…îÿ\ºŸqûµuun>ˆ½¢ðÚ4f¢÷»yHͯ¨ù•KVtk¾††9r÷ ý‰—Žtg„ÐOR¡IŠb·æÔóéËz½þWºQõ™‡ÍÙeÔà{g`òµ_Ce¨}tØYgæ³E×iŇºHõ>+ÇW?ìH·YÍÙf!ú‰âUÇ2Ë%nÙÙ imVòŒ>§±U-í~¬§åsÝ-´¹ÙDŸÍýè4•a!×µ·•‚IéÐHQ¹DóTJüí2üÝï lÉg$;3•Us8ub=icÂõ5Ž1Ò´óìš?ô¥ë5J{ñØ„4Tûjhˆ¾\‰±' LuR¶S¹í\C0]ËK:àÍXAw/º­ê«¶fµÇ´zÓÉÒ¡ßj±Â­EPÖHÚ^àc*¡¶×2"uhé«à'ÛÀ~íB,T?&jĺ€¼1sß-y»v¨ç²h«lÂsúl/?ìÒ>1\øKV~7¢}šlü M4¤ ƒiš+ÖÆ6éIÊY{bˆQÍ9q¶6ÆLAñ£Ôð ÓÎéýÚuz-mVƒ=öšÄCÂÍ+Ç0O]Irk 9û€B‡É¦·c›(Ænµ¥k–î ú°‘U ü;“4¬“u[M‰WÚË>Ó»)Q±[ÌEÒÖî"™ÆÍPÇ×ZDö&ÊØ«w¸“Œ¤Ê›\µ,s˜fžä,QoW¬Þúåç“aߪù­X¶rª¸]¢OWÎŒm|ŸºÝÊÊýäRÃ~ì¬Õk{ÕnêüeøŽº€&žRGÆSs\®ˆ>ÔUê­ÜV˜ÅªïZûÂs ŸäsŒMîB•VïÊö´é/í8ŠTÃ’7«²ªòD››d|ZÜ\×`,'‚U[IÜd%x2<ïÚÇë ±côŒ÷±ûF@ÞEÉ5/x©DtjxûZžpÁŒ{éÞcÎxøš}nAäÃÉôòì_B’Hbq+¦6Ù).b[8s«¶»güOæcaäÙÍ"ƒ•Ѫ‹˜•êî×+¡õ’¬Lr(Çõqü/K›Šü´£/)ï8©…?U¢Ë_N´Ð@ bBP3ÑFPOŒ\¦K2$soS`H²Šë©œ´#®ƒÔv×G–«»4þ D¯m'æ"䊼ŠoŽxIÈ *ˆLi¾œ{mô:+Ag/käGp>܈@èNèØ2úVHc˜ÇQ͵DŽUÉHØ@FÁêè+õ›7\ñL¢dæRÖv& õÂz‰ÕH€pϤãÒq)^¯J.-¶f©—Æžš/ƒg2^½DF,k¾¹È[ Ÿ¢þ˜5þÓò—å1‘4qh.Eï+ùG•Í×r ˘äpÙlçõúTáÐØÔ äˆsÂG°9ŵ7¹Õ@ž*àû%OØH¡Ìz;Ù¸§ùÆÎÎzù‹·tYõ@Îä+Li{PDØÐ$?‰°ÙYÂõ^ž=ÏzœÔf»îÐeÀè•ÃX×Ô÷óÅ*;*Ù%úÍÏxoJ·HÌ'Ÿµ¨Ù¥O¾bÈhoÌ‘K·«î7k¾T~Á~áñë·]Þ¨|:—Ê·Ó9x}×g3?iN¨dî-•3ˆ¬äª‰9ß"šŸßùž¸ŽÓ<ß5t¬ÛÃ@ÿ&26)†šÆ]ëš!|±#?K>Ͳìç¿H€7£·›czTXtRaw profile type iptc™=‰± €0ûŸ‚>oaôIAGÁþÂI[¶,Ÿ=ï—¶M‘†ÊàÅæ”—ÂKzàÔ¬øH4ì#“¤HGÁ[TmBx]ö”öo7/­iTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmpH‰í—ËrÛ6†÷~ ³i§ï1×vÍXµÇò´Ý‚(±æ­ dR~µ.úHy…€ ,S‰«tÑÌt!iCàüç;¸œ³w}Cè—FÊWy•˜ŸþúÛ4r–˜¿y ´h.ø:ÿø$øòé—{úô@#f¾{{6ëã¾lJ.‰Ñ—EÕÆ}bV§ÀÐÖøV28W W V F(Á©¿².{蝹ôl-Z—°' ´-ËòÀ£•Wò¸G{¿m8¼ãm½”_=òJ¾™"šbÓN ›–]zÜË ”æL}>Ì·˸ÊËF{ ꩒ѽ®ÙˆBk…¼à¥H«Èö—Kp|:Z¬*¾¬éf Ì/s@Ìjš³X?"ßäE—û¡zb>ò|dYêð j^µ’T”(ÕcåŠc§çÒ §p]‡€”`D>¶=ÛÜÐ!ÄÈUj“b:ªÅ Ÿ#B3à8D¡l30Ž2Gýæ©F ŸßÎ[è¥ç¶ 2«E™˜×yµé_ ÷yÉ—’ ‹f{aè‡9~€Q„_D¿rѪ¬˜6²ìP[ß+"QÙ“—dÅaS­žg_Nd-îëºHÌa ®ºŒÙ.Ëãëš’¡´˜3mKåg²‚£EZ®ë®úwœéžr.dW‹‡q“þÁ©<ÎyM¼'Ý©Cª•b;ÿƤ¾ÐÍÆDø¨új±¸.ùŸcklùØ0tõÆ„J½;-yäÌ<0Ñ5©V\“ð°?%]³0³m/uN½¸‘ƒa~°çàÔ¥Ì PzHiëLvDðó•JWµÏªnô>?è,ûñPÝ­¹äOÇ™ðûÏ'rƒùYÄRàQ Ê©Â C‚”!|Îñÿp>38Ý®üzCgÃÙχŠYnš¦È¹8ÜèçùÝÄWdßrŸÊF٪Ãf-oºêhøW„#á:§¼jÆžJÆe™\€Ã½ w«º§áþ¢Þ¥Åwþ‚œ‚œ‚œ‚œ‚œ‚œ‚ü¯‚œÍöŸú¼R/zúÿ e lVƒã÷ IDATxœìÝwœ\W}ÿÿÏ9·Lß™Ù&­V»ê’-Y–+¸ƒ)ÆÆÆZð#’|¿„äG~‰“_øå›| ?’@%Ä®à.à.Y²,«kÕ·÷2}î½çûÇÊ`ËZKÚ™•v_Ï‹äÕs>3ìÝ÷=M 5°òºO®K-¿ú²Xº=.&05í\k)f‡í\Ƕmÿýé‡jÚ7œåôlàÌE`0%€)L‰À`JS"0˜À” ¦D`0%€)L‰À`JS"0˜À”ìÙ.0XbûÛl=¯²N~ àe €š(ç‹A~¬Ó ü’(cjÝP˜RaÀ¯u¿p¶S³]`þXüÚߪ§¢–djÜq\D2"ýÿƒ"Ró°ÀÙDÍv€ùcùEïJ–Ü:k¶úï|ê߆g«o8[5±ôò-µž¿Þ¦c*0¦¦["^!£‹™¾}{~òWÏÖ´o8ËÙ³]`~°#±X,½¸9œn+SãÀ "Åì°m‰ Ôº_8Û5c”1FLPÛÀ µˆã×zdæ=Û8sL‰À`JS"0˜À” ¦D`0%€)L‰À`Jöl€ï[e-H(cŒ6J)¥µ§f»>˜Ï €š±DDŒ¥JV`´ Œ1§MKÛæå^)\YÕëû!/ëL&’ƒ©l.™É/6¾¼&µE`Ô„1¾ LÙŠÄ:Ê%í‹)¯:gãkÜP!®¬‰ô`wÛö¶eG÷voØÙ¶|ãkš× ö¦öö+±ýÎ#ë÷?ZRâ’ † €šXsåÐâºÔãW¨p,‹æ“Ú ô‚Ecç9z°í©–¥}çØV>éùv±myÏ寒¢C}«×ï¸Ü²Ä^²j÷@v,4Østõ–þu‡M9Qší÷óPŽ£<;Φ›[ÇÎM$½&Û1V_gjkCãð’¦Ek}_‚tÓÎ¥¡°‰£eéÊáKCa1Fûv2‰×Å’ÛÔÎò#½]WìžÜ»C‹(10ðÕ@`ÔDckPŸHçV»Q;K '$Ž‘d}f… "¶m\ç%×+%K¼˜W…\ÖN,#£ƒÝËö õ´vû&« ™¡¢íD}ÛŽ¸v$Áâh¨ &”¶L²©¼0‘,µ£DŒˆˆ’HÌO¾ÚëB »ao¡H®ÔßeJéæ«íÙ;Ö¿¬säð¦œN.J.QXÑZìX›ºäíë’vSÃþ#Ï)Ôº~˜ï €šÙýó}½Ñ¦Ö‘E+BW„¢zÑÉ®WJ©HB¯v#êêÆEñ–ôÒ–û?8R‹Z“Ncå3gʦS0§¸o‘R"áˆÔÅëÌëË4V·:Àñ €šzø_ÞR*¨½^Y¼S¹Þ1™‰`ï¡í¹ß¿ó¯ÞXíú/G`ÔÜ@§5vÛÿú¡•«ðj €ª¶&êe8“ÄtÛÈed`¤ßûÊö™¯ÿôoê®d}€WG`TUC£Õd»’žÎk}OJÃ}æÙ‰‘ÒßýÓïþQ¥kœPUÊ.…Å8Ê÷•§•Xrüù JDŒc”£[œè—l÷þ¼Àê>òl$T§³Á¸|în=@ 1¨ 'j)-Q?Ò…¦[—,^Öqa]2»X[«m/ªµØA Jå² <«ÔßYÞpËüò“Ûg»v˜Ï €ªK/_ž¼øú®·è𓊩ìʵG®H7fW*-J)™\Ò JD¦ÔÏȰñ óàOî™ÝÊœô ¨ºë?¼da,-í¡H>íû–W*ÚÙRÉÊö&wG#“Š’ñ}0vï—ÍRžåÒ`Þ#0ª®®9v•më5–ñJË{î¹èg;—Ü_ÈÙÃ"¯<þ95Í^1›…RÇaJ êoÙ.vs£çoð<ûܼc”U²Euû“ç0¼â%An¬È= Îü0TÕG¿vëë›éOE“²atxcßþê‘þžs»$ÑæÄyAtÙÄ–ˆÈŽÚV 8P5íëÛÓ å–Dƒ¾Ù ‰ EFÚ,ëép"ݹµ¾©o…ãSƼr‡ïxJZܰ\."÷É ó V8éP5¿ù¿ßð®D½õ™h\%ŒQJt4^Xмp༺t¶Ý²Œ{¢×)eTàéò²K—ýü…÷ÕºnÀ¯°èP5á¤n°•~é÷”¥-c+5õ=H)¥šÛ¬k´£Þµá¦×¶V¿RÀT˜’¨šRNåü¸äE$tº¯µ,qVœþdûšæ«ÞôÛ7÷ö ¡t÷¾ÜÖ;ÿòÇ›«P.à˜’¨šÅç·/I6ØWDëtýi¿X‰„£*ŽZkÂ1뢆ÖUu ê­M­úµéeK:vÿ¼ãPå+@Å}â»7¦ûv¬,ŠK•Žä¦ÛαubÛJlG‰±l½Î ©U"òhå*L…À¨¨óßqþâühð?V]¶ð=¡ˆ¥ÃQIýr›##"¯ÜéÔ¼¤‘HL'gZ'àÔ0% PQíÚ“‘”•L6êQ×5ƒå’9\Êû ù`O1WÞZ.i϶U½ÖÓ»)¥œXÊ^Õ~ñнÏß··£Òõ^nºÏy8©¥\jZ• ÛmyùÀßôƒçŠïúÂUoXÿºÐÿ­Ók¦Õ¨ ŒÃÁÞ=Ïfþ¾gçà½ýÇæž —8†À¨5çó¼ã;‰´õnËžþ}Èbr¦?›õÞøßðè77õV²HÀ$ÎaÔZ¹ÿ¨z¼”—~5͸â ÷ËÎbAuäFÕà‘Ρ|eK¼ˆEÏ€šºõ ·6øeÏí”§;ÐmñF‚'¿ú›?üX…ˇÀ¨©xܼmá2ûã¡°ZdÌɯ?¥ÅI/Ðç¿ñSW¯Z²¾amã›þéŽ.¼Èv%‘lt®I¤Õ‚h\nHÄ ©¤v­••© Â9 €+ŒŒÏ¿aíÊHL]`;*Rɶ•eÛªaà k/Zÿ–Ué-÷ìÙZÉö`>"0j®ĆWlH¼.ÕmÓÝ)éD”ŠH}]ƒ:?UË¢ —îx¢cåz€ù‡s5õž/ܺºy©÷Þæ6÷#á¨^RÉÀðRå’™ð·úžÙ¢µµG)¯5;az¿gèGÏ}ï‰îêô sP3ïýÛ[.[²Úú£ÔýÇ­ìt¤©¾ˆWÏrÄöJf$—ñŸ½obD÷ wçž;²elããÿùøH-j€³P3t×-_I/p>î„”=ÓEϧE‰È±þŒñ}‘À“¼ï›þá^ËPŸüí·÷ާjXœ5ØVP7ýÉë_#Z­­¬š†‘_†¥Dl[D9 µÄv¤;?^®qApö 0jA{iêCÉFëÛ>3F·ñ=1ù‰ÒÎ-îœízàLÅ9 €ª»ôÖKëKEïp¹`¾ø³]ˆˆ(ˉYѦEìS`„PuïØ8´êš›ûb ɇã³\ŒÉgÍÐĈÿ´WödǽǞþ棇g¹*8cU÷éÛoýíÔës±„j×VåÎ2ƈ:}Y?7.½C=òåžåïn~´9ð³ŸUª˜‹ €ªzß_ßte¢^}8žTË+uæ‚ï+/ð¤œÏª|ó# €ªø÷OÞsû‡¿zKà{Ágëôk,[^v€Ú©2FL(/3ï9ÔñÚJÜ@$‘@l[)#NPöÜ‚eùn8â§´ ‡ýÔ:w³;1º«ÇqƒÈáÝá§6>Zú™¶Vú}À\Ç£@Õl½wÏŽóoXeÙ¶^e&‡,m©ÓyXe&FœÞþÞ†­ý]+¶ç³-£bÔËbGDÊcCíÝå¢5˜nìZë{Nvx ¹³¿oñ¶Î¶Œ ´î]; Ý„*ö÷ Ý4PÑ7 sPU›~´çÙ†•Kžé9Xê®k°—DbºéT_kŒ˜îà žÞ³íÆ&F—ŠÑ'£P"J‹HQk]Ìw^þÌ®­o}dtpeg©Ø-³F%<±¬ˆXN¦oç}+øö`Îc  ê~ôÿÜ¿)½0Öc»:~:»%™@d°wÉžR1Zó*šŒ6ãã+¶?ûΟé¸jÇä‡ãÃ…%b‚ íÕóPå¼×é•ÔQÏ“SÚ©Èó¤4Ø_÷ÂÄxë û¤¯ÑÆ(ËòµÖ†PD`ÔÄŽM]»3£Á ^I r’_é3ԗܾ{ëµwç²­£µ©p"ì’¨‰‹¯[òÖT³¾1‘ÈÉvKò¼.Ë´„BÅF#ÆÆ*I ¦P Ž îÞ52ÐÔsäÀe{ÏñÝWÛxÓ¼©-µ ¼2r\'*ÉÑ®ÑgtÛC*ûIÀÙ…¡Z@Õ}àK7]Žº¦ª×§›ÔõNHÅͱ]|ßøZ+­µ(9v_  Šy=16=T,„G³©­_´’rÉ.ùe·¼`ñáõ馑5¡H¹^+#êe75ñ}ñ ùÐÀÄXòàĨ=Ü{¨ü¤—ÛýÀ¾§»¯½bñr;nžÈôÅ׫.h¼¶a¡~«ãš•¢ÄVJEó9ÙÒÕ‘ýò·ï¾ûfãs€3P5ÿÆ-ïI5;¿•HÊ mI£ˆrlWÂÙŒ=8ÒŸÞ•ÏÙ™‰…Ý¡°ï6-8¼.šÈ.q?Ò×Óôl÷ÊŒÍ2kl:p^ã±ձº NDX¶·,ѯ6Rñ"cŒ¾.yždLà#m©„ L0!F”¶t³ã¨:ý’Š|_d°[žÎŒÉþé?è¨Þ'g. *~ãïo¼ªýœÐ_&›¬k,K¤TTÅþ®úgÝP9Z,Òu`åÆÁu-Ë2Aˆã$Vœó̵‰d¡¹÷Ù–Ä)*膅#ç‡ÂAL©ÚÞ·”ì‘ãú õæ·Üþ™»ûjÙ?œ Xè¨K?xiCº!zIËòÐG“ÖUÖ±'öZUöû¶®}X«’U*¥²ž×O$v,*æcùhd,^ßTXœHYvaåqá`Vp#’ln8ø—üˆÜ{Ãg¯ýÂ}óhçlÔ³…]# û®¶cÒ/=ÙqÅM×wŸŸjèkÌæÎé/ùmã–²ÍÈȺîl~ÅP$1’î-äõ„È/×3ür]Ãl± imBNHùã¥ÒlÖ³Á:ù%œº#›{2û?ø|ÛmyÛµV…cV³¶Dc$;a{åœU.• u9¥²¶ˆ(mãûþØHx¸.=Ü—ëµ>sjå22>6PøËÿ¾í‘ý³] ÔPV}½‰»Žrš@Y…¼š°mㆣådª¾we8ÒÎŽ-è÷ýtÁø¢"±ƒu©Î¶H4_Oz ZŸ9÷(Ë–ØÈ`ñþ-÷ìß3Ûµ@­1OosKsS¨©·#¿³ žÐ¶DŒQåáþÈìD¤W)徯É;)XÚÉfۆʥæþ|.ÑxÊ›íúEM.zVjò\-ÖâÙ. fÃóô0·4mXT)Ž-]›lM¤ô剤iÒZìþžÛº­Û8Ô·aŸçÅ bJÚ(QbÒÅ|®~¼˜7ùúæ¾¶HÄK)}âõ ª«Šy™(dM¯WV~à+{éÊ×-bÛýûú«ß;œ9Ø% PÏ|ý™>é[÷š–§”’Í‹õåÅ’•+äê‡ÆGÖu{^¸¬µR¢J:îM”K’ üd);±´ïHÇ¡ç …á\2k…‚¸eë#‚)—T¾\²ò¡°—²ìW>ø2FŒï‰oÙí{VÑ÷u1öëNµncD&F‚=ýæ™1³-ž´“JM–]n,ä²…J}>p¶ 0ªÊ+”¶t[Ÿ´®WvôŠ\¦i¤\Ž–,Ë×"F”ÒÆóR?p%øAÈX±ot¸¡7‘.Æ#/´tõ7‡#A]à«r÷Ѧƒ=k¶ÆCM Í祛Ç×Y–X“AAûê· ö¶ïˆÄFêSvRé±ö¦–ñõ'ÝlI‰ä3226ä?4ÜUúÚ7>yù„àÌÆÁm€šh¿â“ëZÖm(µ"lüHIe±^²˜Î­(1«}õWôºdk¡Ð<±¨í¹å鯾Åù\|l°oùá±Ñ•CÚU]cwºméæ‹ÉÑÖB.>06ÜØÙÛµæPf¼eÜÒ¾´´?¿lÍ-•.´ìDh¥Dú?;ðBñÿþÁçïÝXåÎŒ0jÂßoÈßuš¶-å[ÊDŠAòJ…p©T•Ë¥º¢ë EŠ¥D±ëÀëŸöýDÉÒÚôt]ÖÑÛãPF1ÚØÚS"–Œµï]ðˆ„ÂÙ°1¾ ü²²Ã®W¬Ï;®g»N©î$Yá—QÚZùj~p¶!0jÃüC«’ªK÷/°í‰:7\ŠÛÚs³ÙèP.[7<ÐsA‡_Ž—”¸ïE¹S’ ìàMº9·©uËÊ–¶#k]7Ó46ë:°çÒ'M)QÒ*Pžç–<ßÊ* ’' ƈxåRÇ¡íù¡ ¾k8ë5ä‹HÌ;°ëÍ›DD¢ñÎT"ÙŸ D¯è”‰–++yE681¨P8³¬r8—iÚ?Ø·to!¿tDëIŒ9¥¦”)äÅ3žÙõÄ7~Ú=ÝwsPs“ žEòÙEc¹ÌâQ­E”2ZN5,ˆˆWŽ•î¹nË‘™íÅ\¢ µX–¯ƒ@'<M5]‰{õ¯¶~Á+K)3ìô¾—òþ{†o æ &ÊyçI@k£DümÀ¡Ä ¼b:ï8J‰L‘@Dšš6/XØy‰ã˜ð‰ƒW6™ña³}¸Ï»=7T¾ÿÛø“½3©æ*à—>úµ./”âƒãýÅ\ÔQÖðh¾øàœÑAe|èÚÔÚóê“»žœhO©Àh£OcáäÑZ”Èd*eÂá¡hSkÇÚDª¸È˜Wæ¯,f¨§ü½G¿×ý›¾·éh‹€9‡À‘Õ×¶46·E¿a|3î-vzµV‘v_¯¿òm/dÇÝÍÝû3ûï¾íŽSmï7¿ò¶uõ-r¹méK´¥W5µ—ÆÇ6öww¹{&FZÚד[©*u:ÓNÆmÒ = Í}h­Ô‰FlG”mKJ9îƒpü ȯ}áÆ«–ŸçÜ’HêV'$ç*5ùTÞ[ßzo.¥ºc;Z¿qëwÿù#w|ëdíýî·o|s²9ôùXR]î†Ä5yðO©x¸T¿ ·q°gÑžÑá…|,_Ê7f+Oî…4Óà EÙY'Yß½(ž(´£O|™ Œ>oùù‰µEΰS˜Ó 0Ï}èŸoþHû*ûSÑ„µÞv&w0}éSym)I$e‘·)ÛD.{ße÷?sû3}Sµ·öͯ­&œ›’ êJË>Ö–™œ0ä¸â6/¸¼¾iø|¿¼gˆ*wiy®ëЊÝJ)“Ë5f‚rüØ©Ïvˆ~ÉÁn(íiQyÛq&B¾+ùe7)O^H Ô7nln9üËRꥃ å’)ä&ÔÑBVv— ¥g½RñÙpTo©ôç s '=À<÷¹ŸüÚcõÍêŠÉu¯Îó$;Üüb¸ÏÆË»KùâóV]òÐw>qÇËÖ9|öž·ÿqºÉù‚ãNÑQb$ð”˺V^i%^Y 9whx yïØHsWflá`±P—÷7H$:àqIDATÓ‹–¼pa}ãðj'„Êž*õwÖïì;w{±È†ÂÙHª©«­yA÷ºÆ£ç)-Ö‹Ý™ñwÚåý¯ü@èÜöƒÞ™}j00ÂóØM¿ÿúVQʖɹ@ÖÉ®·m‰5µê·4.Ò׋ØWŠe'Fվ߽ýí÷e½ïó÷îÝýú?|ý¥¬eJ‰‘©L#JŒ±ì ìj¥$‰ÆJ ê³k‚à_*ª\f"ÚY*„GS £«#1¯A+c‹š¹H$ºÛ–®ê¹Æˆò´VÚv‚°RÆRêåý*‰'­Õ­+Ô‡:2ùý"B`€SD`€yê7¿tóÕ mêc©tp¾RÊ:ÕAg¥D)%Žˆ7,¡†…rY²Á¹0Ó`ßð?¼éáPÄ]OêmW”œäxecŒ(­&ON{Iû¢ŒmicGl Ebi‘‰Õ!–-¶ïû*ÖÑ“Õøbi-©ºFIŸÒˆæ­bÙ[ܰ0ò&ËÑQ5à ª¶#nªQ]–lˆ\&rì÷ÿ“„…ͤë P^f<Ü¥Ti’È‹ß?¶nÂ(KTà‰Éf‚­ÙÑòryë±ûè½Ï K˜wXÃóØç~ü®‡ê›åjmÍΤ 0b ´¥ÔñÓˆNíõâ »Ù‰hoëÒÑK•å{ª<2`íÊ vÄÓv›ï}ý‡³ÿü­OßÿP5ÞÌuŒ0À<–Pé&ãË,Ý”R¢´ÑÓ}z¥µXѸŸê9Zÿlb$¿0ÕPXR.YùžCáŸvîìÿÿÖ\\ïd²AùÛŸ¾¨¢…À%–ÑNÈh'·p¸wç}ûf»F8Û°†æ±ÃÏõþpl8Ø•ÏÊx˜ÙÛ_µ‚l;74¯miݺÜ÷­@‚@l7¡¬xcãl×g#F`;¼µ{|ÕU+6y^pר`éy˲Wºa•>»§()±l?‰NÄÇG¢]…|cF[JŒW unþþÆÙ®Î6ÜóÜ7~çÞçýõ‘üÃ[‡Î¹8ú×–­ÒJIH[¢_º(Ù‘ÀODIJÅ%³yîÛ”,Kìh"×RWß¹ptx]¯ˆ§Är¹çÀ40Âø¥m÷ïÛÖrîòƒÅ¢½7ðå“WJ-TJ¬R^FòYÓPŸ}w.lµ-2FÕiK}¦MpU"&Ð~f"ÖÙ{tíAm‹ Ê9«sÓ>=Û¥ÀÙ†Àx™~ºw÷¦;vþâ‰ÛwÞhlz$\ÎåàHo§ü릻¿øý?ùÉ=õý?I-oÊ Ù=&|èÛ‘ð™´œP¸Óv&—¯›ð³âwnþ.NÓY÷–¥«Ö…_Mê7Eê¬7EãÒ¢õ™r1RÌ[c½]­OïØ¸î©‡¿ø[·ÍvEp¶a„pR#==Å©þ­ãñŽÑwìÞ®_ô¸Ò¿(dÕ€(Õh;R§”²*u0Ûô(qÜ ì†òÉ\F¶?ðØ]³Y œÎ'@€¹ä}_|Ó9éÆèÍõ‹ìwÆêäËVu³9])$è:Üøïþúkg¯ 8;1¨¸íîÜtçî'b-Í÷{ž{Èv•¥”Ôi­âzîPx47a¶ú^uÖ2˜ña³·ãùâÿ:4ñL5ú€ù†5 €šÙýÈÞÎ%—®îJ$Õ7¬Z*=Òà•¥8:$÷üˇïü³C[W¶u˜ŸaÔÔw?}çCoö~åÛ6¾8ê?_ù–`þ"0jêúß¿~½³pr/£Ê Œ ”Rœê D`Ô–+GÆúrŸéïô¿™Ï&˜ùzß“ü`·Ù<Òo~11VÞW‰2“Xè©O(n¼c_(þùP¯<­ µ„bz¹eMÿ!V¹`îÈ}É/ëo|÷îz¶’õÀ|G`ÌŠC[{ {?t´eý’¾xÊj³ÝbYâL§-ËRñd“{…ˆZÙ´|É {ï¨t½0_³jçׯ|^;ªI¨5–­¢§Û†R¢W"‘¸Z«·W¯¹rU÷s?Ùs¨ åÀ¼C`̺ݿØÛ—+4>Û¾.~i(¬–jkz÷'­ÅÇÔ +¤šz‡Ã?îèÍUºV˜o €3Bÿ¾#……ç6n*BùxR¯³™N;Ú¥•J¦ãc[îÙÃám0C>2€“K¶·§ßùg4G"ŽÎ/J¤#·xž—ó¼ü#Å ¿néúÔŸÇ“zÖ§ŸRJ$D Y32Ôíýǽß:ü—÷=Çš˜&{¶ Ìoøäνt™ 8h”ø¡°/шªÆû€ù‚À¨ ˲–Fö¯'êí«CåZ/Þ^r|›ã¨c¿Ü¿zV8þÈ7¿lŒ &†Õ=‡ƒ¿Ýöpÿ¶ (žooÛÏôWî]ÀüC`ÔÄîGvX|Î*Ë´»!µTŒ¸Ói'ðL¡û@ù‡"Á¡@T½RjܱËÛü’/½}¡í·æîm.æ5 &޼pdÄ.Ȅ³ìé· "âù&û¥÷Þõ""Éõí鱎ŒT®JÀñØ% P3K.X‘ާœ5¡¨´jmlc&§9öçK¾äø¯c×xeÉ´nX¼³¥uÁÐŽûw Êôl˜Þÿ¥·]²d}øfÇ51)iK‹¶Ôä—~å—:þKM~?VMKΩû²J†¯œí÷óS’5a¼ -ݤÞ\× W‰9ùõ'âûÆdF‚Þì„ÿ‰<_Ù 'B`ÔÄž½Å‡ZW…ŒÄd‰:ýϾoJ=Êß-}÷¿ï§"Ó€ÓÁ@Môl>P\ñºÕV¢^½&Vr:‡‡1…œôo{¤ïÿõ'õÜ¿øäöêU8 ¦º÷wóAßiM(2ä3æð±ÿšö–¬€ÓÇ”$@M-¿du_ÒlÙÿBéÏÇ^©D…€“cJ â~÷;o}gzút$! f†ç1+Q¦XH î|zôßTýþ]·Ý·³2UNPqáX´ÎvÕbÛg¦A”ˆ¶Ål¼}ó wýÇÆŠ8eLIT\©$–ˆ”*Ôœ®K´‡S É µ8 @E}ø+7½&3¿ŽIjÆ£ ""bÄq¼¨¥'¾âuÍ•hpê8¸ PQ¯¹å¼sb ýŽPD5)5yèÚLÚSJ”㔣Ù\ì ¶.ó#±Ôèh×öl¥ê¼: ¢žëÙÕµþÜ•Oç³~!o…‹yÝ«ŒØ¶+q¥¦×¦m›Pª9³Xœ°ît:ž:XÙªS!0*«G‚gïÞÓûÌ÷üü¼ëιïèþÜêèöPXmPzš‰A‰r]¯Îus¡ÞžÖ[Þ\Ù¢S!0ªfó½»2»Þ7vÕ¯Ÿ{…¶.·,™fb˜œšŽx)˶ áôzÝKÇö?¶+SÉz¯D`TÝ•¿~ÞÕnX]a93^Ϡñbý‚¥Á†…­ÅK6¼õ¼\Óª%¦ãÉr€*á@ÕiË‹j˱e¦‡¸)щT©5‘’ÖÀ·/‰eÌ5õ »Ö_õŽ'»‚í]{òO?d{áǨFU·æšs¢q}¡VéJµ©”¨PX%Â1½Ü ë+“úšTKÝkƆ_7”)ù}¥ÁƒùJõóPuåÀéZ}ijƒ¶Ö‹ˆ¼x>ÃtwM:že‰vC*n»ºQY~öèóñ™¾-§òÚ[¿pkÃê×->gé•­jÿcGXÇaJ ê{‹V6ãõ;®zÁ*æU1‘Ò¯qê©R}#¢u B‘R:”lòTè›ÿìæEuéP"½ ˆJàoÇô-åR*5>ü…ˆôTª˜+ €ªëÙ¼wpÇ‹¾Z.¨¯Ü1ÒåºÖÂ÷ÿñ⯻a·bADD”Ñ–kGÛ×7®}ëoß²&‘H©,%¯`ZŽrÊžŸŠÅÔmW–Ú®nˆÖéVוÐ@w°ið¨_¬h-0G5ñàß=ºûÅ¿_ñÛ×µ*mUüøV>3^?°bÃè-Kœ÷8Ž ½²d•G)Û„"’²ŽMÈ}qj”eéx¸Î Wº˜  €šk\mQÑJ·«”±ÜH¦.Vv,a"Æ(%‘°HäÅkŒùUPx‘¶$©S±J×sPuïÿ‡·¿!Ýd ×MFÄ×Ê4Ø®,©t?–åGêGÛÇÆý29én®Ax¥¢ø•®æ êRΊÆErC¼Î4½d‡¤ í‘ô+Ú2v8VJ÷÷ê}ù¬3‰ùõ§ò:ÛÖ‘hXB•®æ‚¸ À©R2^üªJJT,Qn®oX™Ë8£§ºm«åHÔh¯bgDÀ\B`T1ÊÈÉgU„íxñ…m£¦ íǯU8cD܄Ÿ+—^{AªúÀÙ…)I€9E)Q¶­Nýþ¦D|OJ–V‡Ý:ZÅÒà¬D`ÔJU¦!͈ <ãöû÷Úã?<ÛåÀ™ˆ)I€ª+Ž{ݾoOeŠPM¨É¯rÑ”{̓ýÁßýðOîÝ}Ò×ÀT4†­U`&Xô ˜”ˆ#å².æ&¢ýÝ‹·dsmÃZ˜à¬çûªœuMŒ6tŒ /846ÐÒ;:Ü6äKÄÓ(Ô`ú €³šçéBÏáæ'ì¹ìñ\¦q<—K,-bYFO†ÀLg/#R*èìуKv ­Ðâ‹ëø '@ñCpöR"¡°o]rð<-¾h]ëC¥`î#0ÎjÆh/Ÿ­Кݠ €ŠS¢köË»çéBÏÑûD‚Zu ó 0-üò×ìßÞþ‡'ø''•DcÄä2îàøØ²Áê÷ó‹ž§í#ÿtóšÔûÏR ÒüÁ¯¼e°aaìYåÙåá¡\2šÐ·DâÎ{«=CÈ r™PïÑ+ŸÐ*ÌqÎP%ÀiË÷C‰zÿq7âüÏs.޵TP#~9ÈÅ›Ãn8"õnHbÕì?”?ÔŸ|¡cÇú‡z7añTS’§íöÛî |uGfT …T8^'-ÉYQ—’¶j‡c$‰|aÓµwöw_|P‰Íâ¨"`Zîôº&F½G©i·¦X°Ç:vž÷`v|é0Û¨@õÓrï_ÝÛå•åG™1é«Õ†¦¾§Ê݇>ÕÛyQGmzÓ¶okvãh_ù[墔ªÝ—ç©â@Oú¹}Û¯û…!¯Úý&ÓöàìWÿ6ÒÜ[Í©Iż5Þupñ£;6¿ážR±!W½žÇ#0fäÛ»c¯_öþ£•l5Î^Ègíá{VÝ»mãMä²mã•ïðjØV0#W~âÊt6'«“J*:Æ`Œã#áÇö­ûÙáŽËv(qNs€Ú#0f¤uira8¤®G%6óÈ`Ä%å²Îõw×o9¼÷â_ ô¯î³”m 0; €ùþýx×§¿ë…œz}4nÂ'\Ë D&Äyñ¢Ôä÷/&”çyθ ”ŸˆôÝ¿â©Þî :ŠùdÞÒF`ö36ÒW~Þæ™æ6ûÂPDÕi-bŒˆï‰˜@¤\6ù u0ðe±BVàkÏq¼ˆe{Ñ|.4Ë„Çú{—î)æâù‰Lë°)'J""œ³³À˜±»¾øØ¾«Þ}ñ^Ý©ÖWµ—òÞ3^9x²­lfLz»3>Øoj‰5.Ž+QíäÜPh$Z*6fÊ刧mÃAH€3 0ccGÆFîýâCO‰ÈSûÆM‡¢áÆ®]¥ŽÝöã/^³äòÏœ»pÓâ8¶ˆ T ñR>/i­”m„8Cõ¯¹wˉ¾ïDÊÚÿ—ÿ­Q“›{WñÀŒq€)L‰À`JS"0˜À” ¦D`0%€)L‰À`JS"0˜À” ¦D`0%€)L‰À`JS"0˜À” ¦D`Ì ZJZYEk¶ë€³=ÛPmÑÆ MD¬†¾ºÙ®Î6Àœ§U  …t®8Ô::ÛµÀÙ†)I€ùAiã–™í2àlC`0%€)L‰À`JS"0˜þOûu Èßz‚ Ê"` °„XÂ,a–0K€% À` °„XÂ,a–0K€% À` °„XÂ,aVŽÊsaí=IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_3.0.png000066400000000000000000000566561430147706700257140ustar00rootroot00000000000000‰PNG  IHDR T‰=»È£zTXtRaw profile type exifxÚ­—Y–ä¸ Eÿ¹ / ‚\'œãxù¾TDVgMvUu‡2BJ‰#Þ(œÿüÛÿøˆôŠZ«½ÖȧôÒepÑâëÓŸßËóûú¬˜ßw¿º´¼/…ómòjm¼Îip_ÿêð1Gš_ßíýDÚ{ ™ßæ;³p±?/’ûòºŸÊ{ ~^µ7û¼Ô)ï¼>Kyõ5åìùÜÿÃçňÒV&Ê"'§Ÿßöj“_ßÁW_¿´K¹>×8åß+! _mïããç}ü÷Uø6úÕß¿ ¾Œw‹üM,ë;F\üðAÒÿ ñ§‰ó—É×VŽöÝvÞ_÷ÝÜÏkw£T"ZߌŠá#:· '!ÏO·Êa|•k{ŽÎÑ∠È7Äœ+õ$ â!•´ÓHžÎs^i±Ä"GŒ³È’üÜkÙ¤ ˧räb¹çX.9ÌJ–/kIϼý™o¥ÆÌ;ÑTƒ%ºüôÿëáïÁ}Ý¥L O/€åR”e\äî/­$ù7}üq¼áŸˆUAPŸ0768â| 15ýÅ­üàœi§œ_JÁö{BÄÜÊbRXSÖTS4K‰86¬\r‘ IU6‹”’s•`ÒäÎMKO[Q©roãM¡¨ÉÀ¦çX¥(ü±ÒàÐЬEU«š¶ ]G͵T­µZ½&7,[1µjfͺ–[iÚj³ÖZo£KÏx öÚ­·Þû Æ´Ü™2ó,Sg6Ûìs,è³ÊÒU—­¶ú[vÞØÄ®ÛvÛ}“ÂÁ)N9zê±ÓN?Ãášg/®^ݼy÷ñµ7ªß¿Zz£&R·}A»ÁìcˆtíD/f &%¸] ´\ÌbK¥ÈEîb» ©›°ÓE ËI¢ž¾`÷r¿„[ÐöK¸ÉÿC.\èþ äÐ}ÛPÛãÓ[…7¦1£>žŸ6‚´q“Úø[g×_däµ™oKêG5zkyå$gž]W“ 5ï½Õ\nnét@héöñžîñé>&º]kHnÛd™Kr>¤/-£é([´îê·{<ÍÓì}Õ‘ë _ „•Ó·i)¾ðW~m]ºWÑSzÆsö>:»®“ljGæ^£4Ù'­Vgž1ÔS ׉¨v’¦K<A»góYÌ—f®ç³zï{·:fîaÚb/^4Qऴkz.ouð[çðëtwogÆÍÚ˜eÍ1!{óÝOÁœÔq$Zê«çeÀ±àü̶D·Ô:ë?ñS:eÂ>¹¢)0CnÝײX­¦ñì‡ÒÚ A=йÚIgŽ+$«L)(©ym=Qy`ƒ¾:v£ª‡eõœÁóz‡,ñiÛeœ&iZ›¡ Jê’ksΈ;£36£h W­Ž!ÔsSÉŽ {!FÓÓ(:zC‹ WMm»—p5Ë9ÚÎóÔquÕ0¤kµ/Ì×Q=– ùcÂ*‰c ^HGÍ VÛƒ®yÒè³ë ñK2ÍwŠš'‹:üuÅ?Ilv`r>uw#‹ ¦Û{äÏãr^xÇcyñOÎá÷: ¿ß<­Š:ÛNbÉ ð§¼Í#rÉ=Êkn*XË“8éÄ;ˆÔÁ„#æsÚÝáM1fŠb½ì-ì­u,m[;{Q‘‚0bYqvëŒjŒ6Œ–+G"ò&¨h’/'Þ½„CòJN ÔEP9ifô1G]l¦0: tG° 1ô =¾ßÅy–wÝŸ#¢LøâY¦ññô¦¥sÞ'޲²¤ŸtAâG®Ë.¿q.9ìç™Q#›™'Ž ¥.–»˜• •xŠ8¦¨åûs.+œ·8«Õ:kß“¿0\ÐV–¹Nk),b "Ȩ£‚*,Äi×H1‘¡ó¤‡Èñ‹ä’ÉU#ÇjP!9~ð?øÝ[³8™p“ÂI øbÛ#@hh5lûûض['@à¸Ò:þZ˜ù$½ÑÑbG@ÿ6pqÝÑä=àr|Ò%Cr¤-±¼ŸÑ7å[ oÍí[û§@–z•¾Ñe¯{¼»·»oÿÖ´û÷‹“r±›|6iTXtXML:com.adobe.xmp øO:CgAMA± üabKGDùC» pHYs¢¢EÝ1¢tIMEävè:N IDATxÚìÝw¸]Wy'þ÷]k—ÓËí]åªËr²{clZ<$0ä¿„ô O&e2™ô™ÉHòKw˜$€±1î¸ÉEn*–dÝ¢ÛÛémŸÝÖúýqel@¶%Yåž«ïçydìËiw½ûÑÞß³ö»Àù€]ô?»)Õ{Á,àl¿½V¡ðj‹¥#÷ÿÉÝ…±ÇPhCpV“ †à5èc pœ¬@š´V# €À's €À pjšžŽK“V à €À'C¿êŸ ðª´ÀZ‡T/N`«gh)†à,`¡¤nºéW/•v¢Iz…L4hÅ[k¼øÿñ8&?à\åÚŒe¬ÌàÎMšô‰Ï2¼úþ4ÏM0i ¯–/e†Þr¤4¹g •€s¤–V<8ñLJ,¤/…„ÖR‡h-Ž3 ´Ö¬=çÄo7æåÀ ÜzÀ¸Q V‚7¾íGk¡•2U4:Ì´ˆD«)ÇI—Jù-Ó¾›uˆ_ž¡PLä‰h,·#Q¥4XP*œðGÑšp+ 0¬ô¡¥^ !Åâ3©lÇt·eÕ/‚r±g¾Ñè*~Ü{%,1»Òó‰X|¦+‘*·i®×²uåEŒ( 0¬x¬iùÆŸ×I ¬µVÜÖu 7_è0m'‹- ¾/}?QlÔú'-»œT*âUš]uf&­I/w Ø¡æ¶f~iÍ‘Åy¡ˆˆ¤$VŠ´Öš„Ĭq³ 0œƒ0ðòÿËþÇ~´ü߆Q7éC}oùµÊ…3ôÎL¦Y¶Óm£½Ì¾ô<ú^Ý6­b{à‡ÔlDK¾o5„ôL­’ÀÏ6ˆ¤¶í¹D[×x_*C~ÂeFP€Vˆ ßÝçàû/âYù^¶é¹ä0¿¼ƒ~}4 ²ôÿÚA½ñ_y€U(è´Ì`68W†`%Ѭ•’* …fö$‘/Â@*­v€7„ÛVsVЬ¥¬Zí³mñd¾-‘Êu+%ƒJ±{®T\¬WÚë%@`8o‚Кˆ”štÀñäXû– Ÿ¾*ÓQØ7{LS[Z¹ÍÑòèÁá»FÜü$ V[.Њµ ™…¡˜™ˆ˜ˆš2_LFb•XgÏÔšx²ÚO”û3íÕ­Â`"MDĤ5…MÇ^ªVzæ1’€ÀÐÒ˜´ÖD¤IÍ–‹ QlÜþìå©leÈ÷Ìj½šÈ š‰T½;u³R*Ë0ý´”aDHb­Y©€CÏc§RL–‹c 3–6.iÆ@+¥IHW&’cñd1Ì”³]½³;"Ñf§õÚ SÛD¬µ*†ÄZ0kAD¤5+­„çûf±^ˆ,Ökñùb®{¼”œn6:jn3î…a$B3Q€À ­Th(!š²£çP_gïèÆ®¾¹‹Ig@J–ÌZ13i­8ÔRžYv«àûf£^IÌת©¥ÜÂÐd½:XPÊ U(•Öry:5 ¡ Uh½Ü¨ÌÜ”Ý{Û:&ÖvöÎ]˜i«o’ä±G-G &ò}ò}WÖj•¶Ñr©m¢œë˜+æëÕ® ±.?î{o7bÆ*ª€ÀЂaAèHd1ÞÕ·wS*›hë,­O¤ƒÒ Cˆ—ÃÂr¨|vu{>7ßû\¹Ð=3?½e¢étÔ…$fVÌB1ú`•Qšˆ¨Kg¶¥²AŸaðòú¨¯„:¬WEibdø;“£W½øé¦¡0Ì@b`Ub­µ/Ú:®éì]ØjÙd“zùæ#¢À'? Ù+äÒ mã¥ÂÐD)¿iN«¸/ ÿ4ÆŒ 0¬4Z ͈DòHg:;µ>Óî Æ“*Ë̬B ™µhÔ¬üÄ‘µÎN]º×mv4ˆXñòÿœžOÁZ…¤T¨P@`X1aȲr±ÁõÏoéêßKÔc‰0KĬB­Ý&»N=6›_ìÙ¿0wÑÁf£§Æ§e#½FØ(LÌ—§žË£*€À°‚"jë<ØÓ¿ö¹ËS™òÚt›³Æ²…¡5“ µö}­œ†¬LŒ®Ù=qä†gXÄBái¿m(pëª2³o2wä;»Qx-Cpv±Ùq²u·™(²ðâÏ~àk¥B­4‘vÖÂôøÆûç&/ß'¤­˜OX½†.ÏÚµvãž+­ˆ›jë,] 2¿÷1jmøÄB‰°àQuî@©8þÄC3ÏüÛj +“®ÑÖytMßÐÂ5Ĭ„øÞ° 5‘a¨h,Ùh—¢n™áé *ô¸¶p¸Xß}ÿÔÓ_FX€“&1p~\»3õl¿uØNvu±gmWc¥ E¤}Ë.šõеúJùžlØB’df‚„”^T…n1¿´nAˆciãMÒ*àúÒ‘R~ôч§žúÒ4@`Xa™Éi´5¦n{±Q‹ä´®ra)>í{²jGÝŒe‘EDdZA2ž¨dµvªÕRgI+;à7ÑË uHµÅ#ÕÂèãL>ù…£8`†coMBHòÜlÃu²9Z±ÇÉL­Ï0u„I31‘eù™tfi(•™N…aØl:™†Öæ)}ÖЫóâ¡{žœØ}ûAÞ ô0œš´6T­º¶X¯õ•›ÍÞ¢Óžˆ':-«ž"Ò°œ„ I^¨ £Â_PÊ&ìؤ…‚„Gšõ‰¬¢¤Ã€ƒf­ˆq€Â2‘ÔµÊ`©Z, áO²“&¡ MD¬‰´Ôa s!~Ñ¥÷ÞÊ"4§Ç/||i~ÓLÄ=ÒBkæå=˜èû÷n`b>Ö €Àç“]º²ë™¯<±ø¡ÏÜ|m,qæÖg¾ù‡÷Ì®H@?xñ~¼à xy7©µ’¡&"R¾ú1Z³B1±á§ÛJ©Ç;{_Ú?5¶ãßO4}/â»Í¸«B+ C;Bh!5/‡8ϼç7oٕ̘Ýí}tÛu?òîºRòmÅ…`<–4ï%¢ÏŸëφ¬™†RÑ@‚˜Õ›ºpgVì6ûªž½áÞTfê…ž© ±Äâðæ ë3-ah:gÕ•~à[ŽÓˆ—+Åö¥üÂà‚ß0›¤Iã¨Xõnù•·¯_Qæ¶dV¿?ãn;ÊkH$M^,A™j‰R?ù×ïi |cBJ.MÕÇœºSÖaX»ÿÏ?+'T£l_°ëkÓÙò ëDJ3k÷ÍM]:B$ßÔE;³f·÷fvLÌNîëì}fÍE—?õTÆb^ÞÇH“VLA ß3ËMçùÜèî'Š#•;pô¬jïùõ.^³=õ‰Þuü>ËæŒ/_$‘•é4úí˜ÊÆ“æÖDJ–DÃ;â5☯Bnì|ûïÏÍxw|tö‰¦VRk^^’è¿|×Zèã]Ä¿úùÌ!§³G;û×LÝ`Ùa"ðdÃmê°”ï]rkJǶTФ‰YøÂ0Ó0ÊMŠ]§»ªu$Ôš_™8öp!|iÙåH$:›uÝTÝi –ó‹;''GÙ°mäÖH4̾üD¦¥£–íE#·+/ï^³C5߇cÞ,« +ÖÕÝ5tÉÛ{þºg|§eS‚sƒ3‘i±Mˆ˜aqL3LΦh3-îŽ%y{[qSï†ôÕvÜMa‡ï¹iGk©ßpŸ­)ž˜KÛ‘jÄ0Ó¶«ÃjX*dõêåN™‰ £nÅùx£ŸŸí{fìе¹ÍîªRByRJ×´¢…Xïàs›·\øè­Ý}£Û–æºÆg ,¥kÄâ¹x"•KFc¥˜a:f<1ŸX·gǦ ž¼ehýÈuR¸N½)gÚgÛºz'¶¤2õ5Rjëø›•”d%ÒÜ·öÒuû^¼¤Š£ Nf`Ų¢f"‘ “ì7z,óñwF‚„°(ÝÑ'®Ìt.î*å¿ýâÜÔðžüâÐL©0TÐ:ˆãõhr*sx0‘.tg;êݦĵâ \ÌLzëSM§§ºü8¡+åáÜžG×~…yywgJϦ:zŽ Æåv;ÚL¹v[Gic,áu-Í¥÷…¡TñÄd¦wððpÏàÄ%¶Ýl#"ò<»bÙ^2žlöKI†ï‘gEýèš Ïî\?{U4´¿ÖïKD$$ɶÞK=‹S»ˆhGœ*¬¢+Ú'ÿïýF4.Þ•î— ùæ¿èÒš´ï±S¯Æ§Jù®CÅ¥ÎéÜâðt£Þ["üeHU(tÏࣛ/¹â¹ÿ'õ²DLOÁÒ|ÇÓûŸyÛZOeùtʤ5k­5ÇÓ©¾¡ÃÃÝ}S;©Ê°i…qixì©Í0`¿Z¶gB- šñ¤Ó‹{úå ãÜ1å{ì¨ÓÖQ!´q"¿ga>u×ôÝÿç»àH€S…[’`EÛý•Côlß°GJŠEb“”d½™×c&–&™Ñ˜Û‘Ê”6´w-lLg§;´ª{M'UWa$ W{ÏL݇×tö.m•RÛõª¹X«$&}O6KùŽÏÍ6ˆˆ 3K¥Æº6ïxðºÛ\ÛÝ?{Y*[_gÙ:*If"i) iOm‰¤ÓK¸Ý¦ÆÞè;<)É4,m3“8ÑßÓ0Èîß½¸ÿ¢uÑ}÷Œ<ƒ£ NnI€ï«¿qÇÞ}úßnëM¾×´(þ¦_ðØ^gÒ Ã0ýv;’¿,–¨ Å×&FÞzX¼ja#¥|îœÚaA²\ŒL޼à[ÅÜðtàG|ßúZ J$ÇÚßrõ}±"AÒ0½Œi’AÌDš_Ý ý½áåýÖNúsŸ8Ó¦Tà‹ e÷ïqÀ©Â°âýÄ_¼û¶-—'~ÏŽRöÕ?|Ô«¢èº²Â¬‰OáF[­™XLeš=ã[#±…ø++#1FÅ}«¢iA¼­cn}°®U:kn3á Ñ0:z_ZŸÌ4£1¿Ã4Ù8îÆËgÑËË­õ“‡÷4~ñŽÏ|ç_qÀ©Â ¬x©ÎÈOGã¼þûoÇafjÔì¥J)9ÕÙSÙ`X*bš~Ê0U”Åòÿ‰\¸3ùhúá R¡©˜k¢Í}ú‘üû7~)ÞÑS¾hhÃÌÛMëA»˜ï’8+w¤²¹á½UèL…À'òš´ä{Á Gž«þÎWã¾Gq¬jåœ{{{odg4F]¯î/í]ΰ4”9}´}_¥¸f,ÝVË$RÅžx²Ü‹7L+HH©%1ûêýÕWØD¤55êf~~ºïÉуo}Ü÷míÆïlWŠ”ÛŒ9åâà’VšíˆŸ¬% ⾡ùëºú篂¤”Ä+e ‘j‰fœZxG¥Àï$ÿØ#÷ð$ŽxÓ_F` üÂè³k·’`‰U¥´vêf®˜ëØŸ_è™ß6K4#™ö…vÛ®Ç-»‘°£µl"YŒ&œ>)CÛ÷ŒªÓˆÍ7ªé™ÜÂÀèüÌÆIÛ.Ç6l{æ­½ ;… CáMwíi:¦³åÂÉwØÑ »Rǧ”Ó#KSþo=ÿPé®'ÿé;e1€Àç•Û~ûÆ-]ß~w‡1G¢A¶w°pywá2Ò¤…$Ñj«Š3ÕJ4­Bã!„8ÛpK´Œçî|é©î­ÃÏY*˜¶¼È0É>‰‹nfÑšû1Ã'&ûÿ~ðÁ—–p$ÀÙ$0ÐJ¾òëß|êÀãåÏåçõ3¤é¼¹—_ZÜ‘j78àõN\¦ ÞuÑ+Ó¼‰¸5g NE,!6%2áŽ8ÛÐÃ-ã¿rs÷ú‘ŸêYcý|4A}çÓï†Üd6€Àp7êë¶\ýT÷ùã¦EñÕü»jý½wZ…S£¢V zG 0|ŸùÃ[¯¾0òß2òÖ“itn5^“<§>é»þ³Ì0kŸˆX)Y®äh÷?qÇs8àlc ¬TïøÄÕë/îúÉžAþp,-.-Üy§5©Ð'§^¥9fÄ’´6 É•’"nƒÊùðÑfø’ ¿ó¥O~ëª+f`Eºáç¯Û¼þ’ô¯vöŠ[âî‚H·èšH*$U.¨CSÏÙ1y¯çêŒá6Ƶ–]šíz9gìûúï~{,À‰ˆ$­ìÄþò¿%ÓmvTî’-Ó¦6nÁ•‘„$‰Q[$itfº=/ðôB½¢&ÿúÇ¿“G¥`¥ÃÆm°"<66m¤:ËJ™%öú5.JC¥L›#­ “ã™v±Ý²Ë쨼Ɏ û‘zéTVüß_X‰Þþñk/¼äméODbæ;&¶kMŠ4s«6ß1–è1H¼3ðÕh½êý#ª  §¨c(u]ºÃþ/‘§_I ܲ} /ÓJ+ßÌïA• `§gXqÞÿ{ï¾aãÅÑŸ°"œ Znv~ùO«cÁlÙòÚ—õþ6*  § Õn_OÑz!Ve¯ Á iˆ3ƒÓ0 0œ´ZÑ9¢•vWëïÇÌ$$wÿâß¿íRTNö‚Z°Ð«áþ£×;3%ÓöÕ¨6 0œüéIûžhhM«750¥MS£Ö€Àp’Æ—îjTiR+R«öÌ,Xp×OüÝ5}¨8 0œ„ïüÍåJ>x, ©±ZÇ0Ô…¦ãï¹ý§™EÅ`%ÃNϰ"EÚ{»×¦n1mÑËLÌLÔ²»¶—–ZééÞ‹³î¿{º‰ŠÀI˜|n¶±ý¦M“¾ëí­äƒ1b³³Q£IfŠ&Ù-4‘SW‹ Sá7þágxÕ€• ;=ÀŠõ×ýúÝDt÷¦·]’yçO ÿM­L^4îîì^ùãX‚:ZøWS*~­$ë¨2¬tŒ!€Vò_þ×5}[¯ìy$ÛAëˆ[ï<¦©jQOÌyõØW÷}öà}ã U€• MÏÐRÜfS~PhŰ@D$ ÓÒ¶ëÊ2 0œfwþÑÓÓ“߯•ôäŠÞ§áû>™Ö¤¼f8QÉûÖÊj©Vt±:´4=@ËÙïÈáÍ×ož%­wZN É+ï|Æß´rà¡Ýw•~Ù÷Ô¥©ê³G÷LUPMXéÐÃ-ë#ú®k2]ò¶þaûc†IæJþ¬*ÔùZÅýôï¾íŽO£rÐJ°J´œöá4ßò±ë>aÙÚ’ÒØ(Ĺ™1×J‹ûîMk]pþ^Tΰ÷~꺶d›ùö |“l2/ïmpÖñ¼Ñ†ra¨òõª÷…ϼçî»Q=h5èa€–óü‡m7lÌtÉëe=é6ô˜Sžñ=ª›¶èá³´‚3¿aXÐZ+·>öùŸºçgB€â@ËÁ ´¤ZÙù·ÜŒZZœæ£žC…ÃOç.¸*»}hKä:úäe+á3jES÷:Ž÷W…‘¦FÕ ¡éVÿémkÚzø/7Ê›‰Hð9<Ë…!ª>|t_í·¾ðËwÿª­ ·$ÀªQÊÕªÝë»u¨Œ¦&­íwóYÞàM…¤k=š›Ñÿ1y¨þ_úäÝ÷ 2ÐÊ0ëÒǾüÞÛÚzìH¤(-䱦hMÄ’èto÷¦B"!‰¼&•ºzèГõ?ÿêoÞ}ª«f`UÚñέÀ£œÖú¨Û N=x$ð9'¤X/展NÃ×fõª^¬—Ão°CN]/îþúüÏóÜ À ö܇ÊOýÇÁÝþË¡or¢ÿÑ/}âîì¿p`V4Þ¬ª‰FëZ“%MŽ AâTÞÃu¨<}ÄÿÌ >ID<’3;R¾ëè33eTV Ü’ç]º>³á’L6™ M›?Ð=d~ ‘'µ—ƒ&›§½“/ÖÞýÏ¿ò­i#nÒ{~å–ÞÿüíoÌa„`5Á²ªpÞÙó/•öü •ˆhügÚø©^ IDAToßÕÄlžÒIÔT‘F¹buŸ`58_m}ç¥Ýñ4m4-JŸlt¨(œ<äþÇ×~ÿ±QŒ$ 0¬Bï~zAα:ùgkî['/úÀÿ~çuIXÍÐÃç~úÖËz×EÞO‰ËÖ—Gãb§§pNÔD3ãê­Ä#ÕB0ö÷?÷Ÿ_Äè@ ûÑ?ùàU=kÂßLdÄå–Mq;ª­SÙZkM¤‰Â­( |Ÿ8~æï~æ?ÿ£ « –U€óƦw|òR%ú®&#–Ðd6£q?iGÂø©|ÆÌÄÌ$$ ia˜œ0 ê·ÛÚ{j2‡Ñ€Õ«$Ày‚)ÕÕÙÙ·!Ø>¼máÚt[sHæÓ6Ù®I+¥âC‰Û×ô/æ'fòsX Ðô ç ­™LË‹˜¦Š Á‚NSZ8¶k´¦ˆZ¹Fš¦‰Ñ€Õ3 p^Hv®oßpÑKƒýëÔ¥Ñx9]¯ë{Ú_˜ž'­÷æý¯xlþ‰Å‘£‹q@`hýË›¯‹§"ŸÈvV7&³4, "­ßüëjMäÔhvl_í“‹Súà_¸·!Àªƒ¦gXõöÝ7>±íú ÒŽÙo1#")¤¶˜õ›í_ÐNM-Nöÿô_õ[ÿ:ý¸s¼E3í¡ßtI‡•€H‡šöÝ?{ ¡?0èÏ0š”¡eaŒùÔRƒÖ¤ óÁÞÒ’ú§}ß~iâµ4+i…"ÀÊ îÚzÛšf°SÌNn9ÐlÈ™H´³£n›”'>d&ޥĠiËíf²û©£Ï]À(Àj„8¯ÖLõ§Ž^ñR­ÚY\¿åé…®¾Å]‘H¡“œm‚9ÕFÛ´CD´£  «‚f)C.6ä<ÛqÏÒìÁƒ=ã[;{sÅâ~ñ‰/;.„©viaL`µÂ-Ip~`¦ží·ÛÉ®.B-ÿHsDƒJ¹·¸8¿q´ÙP é¶B¿eû©mˆ‚e"k¯éÛ1ôØûG°Ã3¬:ظ Î󡘙I«H8}ô²ÃÕrjB…¬øµò±Ÿ>¹ÏŠ™D[_:´%öÙ÷ýÏ›6aD uãÁ± ~>öïüêg·^W¥%µX)òlqIzMª/‡Šå‡(EÔ¬SC)¢â"Yœöÿ®Q¥E&2¢ ±Õs‚oô +žE • ‡ÎZS³4˜±¬2£)¸5OùÍPÚq“´f¯^È5«ó#N¥¼§Rбj)lÆô¶DVÞ¬BíjE5ß ^d!že¢ܦèy®ô‡¶%§Ä[šþze©ñ¤O§Ýz¹üZ#ô2Š­„1p¾Ñn^w凙…ÍÒhÃvƒf5FÄ:h–«GûÛÒ«/ Aý‹Û†š º þûÿüú¼VŠÞþñ[3ÞÍÎŽT ßøý{Ê×üìM™GþúÞFNH¢ks{$ÕÛ†‘€ïmìÆ(Àj¦g€Ó}r5dôõÁo_‡æg€óIÐmH‰®MŒÀy$»î¢áÌàÅë0°šà–$€Ó$¤Zž­å½V ,« púÌ{¶d»#ýŠª–r^ýà s‡ï~ªp¢ÏO fj“SXjV›Ÿ»ý}·e»[Q±E‡ºèûºL:›xÑùê?ÿÊ=_?ÁÀÐQ›šÎ‘ÖP@`X ~ä¿o×ÀFãƒÙNñÃÑ8­rùçZiE´8>=;Öø±/òîƒ-8_ ‡à˜þaëæl§ø™X’Ö²8ŽM° êì—;Óíæ'?ü'ïØŒÑ€óŒ&b!‰ø5æß…$¹f«ýcƒ›“_ßo^=F Î#ñ¤î–%^¯í@l²$eFD# ç‰ë~þ¦µBªõÒxýsc£ª ³#ÍÏÞõg»ŸÇ¨ÀùÀÀÀùìí¿tcߺ Ò·t ˆ‰§ø ñ_¥Õ*4K¬h,8XþV«÷ÿ΃ƒ©ÛÚû‰§øäŒ8y÷D’{ ¦¼‘ˆnÇ(Àù@bà|³ã½—w캥ýô®³~-–äõ†A>Á…ÆM‹¢ñŒqÕÐεc/|ë–W€ÕfñðLãêÝú;*¯7¬“<2±aRÔŠ˜Ûv½wSÛºË69ûï=<‹Q€UdÃÕ·ÆÓòòhŒ'û\fæh‚»c ym"#võ_´~zÿ½GF0ª°¡‡Î 7êÆ¡î¡äõm}ÖÉŒZgÚz‹esZŸjë²&2,2ÒbWϺÈÇ“½ö·ªs.ZÑšmñK»ÌßHdh§oañPaÞöëïhÿâ/Ý‘ÇHÀjƒ[’à¼pð‰éC[¯YkDââr;ʱÓõºÌĦEé¹qwzÿ½GžÃH@ ¾zggïp|C"×Ú1‘=/ÍBÕlš2ÒyË|jÍmíohOvm²Š“{*yhu¸% Vµhg‚ìÓ× ­Çü`$&vFb æ-×”"Í2Ýi$v\›4:ªÊ÷;ÕSZ/=cýÙ‹¨ 0¬ ý‹w]ÏF2 8oYª£½—o‹&xˆý™•b¯^í'¹¶lƬˆÉJ´g„ä+üË>ìN=õ¥QTVˆh’nì_Og&Y)É&>3aˆÈ4u¤Ýìιéü¾¦Ó]#bbah;=Ï î¼Zz`UyׯßÚ—Ìš·¥;ävÓæ¸dŸÙ÷d&aÙA* œJaixŠHh""! –VÌ6£)Uš|fÕ€slëõÃÂs¨) ™³£âbÓ"ël¼/3‰H´ÖVXJi:]Ufbb&–†´bÙŽ¶õWÆ2C»Œüè#%T Αø/>päÈÐÎõûí˜hÆÅ%Bœé9†——WU±dj±ÍušÕF­¿¸|k’$3–µÌXv…Ñæ5ò‹NqªŽJÀ9tàþ#µu—­Ÿ¶"bc4)Ö1Ÿ•Ð ¢q·;Ó¾8ÈTòJùu³D‚´f-¥ÉDÚ/M>=ÙÈÅr«Ð2†V«/êÎç‹9õ'å‚9[ïÉÌ”Hù½ýkƯ0Œé””U+žœK‡LZkTV¿ùɯ«¸à}Ω뙟c8F“B˶Α¡5ºôÂËîü à²j@+²ª°ªi¥éèþà«‘¨\k˜Æ/›™gú=YHf¼¾µ'v+#žôÛ™]§]hE˜a€UïÎÿs×¢çŠGø,Í2HC[=• bq§Ë©Ùyâ¨Æ6‚@`xsFž©í;j}¹\ŒÌ(Eêl¼§a’O†í:te³¸ÏܺR ÐJ°Jœa÷x©ïÒ_¾qnjíÞH¬,ã‰F‹3ÿÅ™$¬H˜Lf缉ç÷ýÛøã÷A5`¥a¦Žíÿ}»Sï¨i¥*©Ìbw$êµÑYè„–’ŒxŠú»×Rfã5[\¼!ëì ‡&š( ¬ø¿>1p~œñ]ýËý7""!½c×Ý7 ¬;úÓÒ‘³õ_;• 5K.¡§…ùZY–fÂ=ÿü©¯F¡`¥Ár pþd†cMÇŸvõd!DÓ²ÃÈÙÚÁ09ÚÞC;‰äN­%)¥I…LvŒª¦­ÿ’ˆ~U€sX³ e¨ŸõäW‡!˜¤$bAÉHSw¢2°a•$8ÿƒP\-·<×.¬„¥N=‡ŠÕ’±•€•pòXšÛ:½0;ôL½fæµ>w¡AQà«#“ê»QX‰°Jœ˜iÍ[ü ""BºRjÏù®XÒa;â¥…ÔæÙù,˨QÑKµbø•Ûñ›_D‘`%Bœ>ôW§§_û^¶9zðÆf6Ýþ–oîî[¼Ì0uôL~Ž0¤Ð©ÓR³¦ö^ðX³)Ÿ]WûP!@`8‡.¸¶ógÖ¿0ðè}9úÊšâš Ó“Ú`åàóW>‹ß×™i¯lc>ý«Žû5r3êq§æÝ!M±{a’¾òk_ŸDeàû¥/¿g­0¸££¯ús7=þ¿|«'͈àc|Bú¢\\ŸË-tŒ'ëCvD%Nw[ƒVäWËôäßüÄŸGE • ‡V½~bË?%ÓÆ ÄÔÞ90¿Ñ¯Íjz);ښ̚‰ˆ„`®–“…Lv!‰9]BœÞ/՘ɶ"F:úïÝ=VCU`øoÿúÞâwÇ’ÆeÄDÌ”é¬^ÉìÕf6Œ !xù‚^sà§Ýr!=å"ÑD³K}ÚB bfNKËp÷ü硇QhXVVµ0Ôë–¯Ø_uòd÷ÎíLgŽvh%Ôw/êYs­’jÞ»ãÑj)6¡õéݤÁ´(Û5 o{ÿïÜz* +ÃqgÓ-ÛmÏtÌw*%¿'°`]­ äç§{^ð=£rº>„Ö¤› ÊåfÕ³NÍo ,Ð*Ðô «Ýqg „íTºÐEœ%24Q, Ò¤uÊÓZêz5“W¡p™‰ÞL4órZp]£>5–ºëÁ/L}úȃ÷AY U`†VµF5ÈïçÒÐfgïÌŶÞwU<9Ú¬µ–šˆIk¡M³a>µfMDšÂÂfÃ(VËñ£óÓ½»§F6XkbvZ f`UóܨMÐÎ0%3õ¶ÍttT×äæÌNl{©^ë©0+Î/öÏúþHÝÖ^Û÷4@¼0¤ QÎ4›ñÅz%¹P*tÌ” ÝK…Üð’_Ï•Mû.FU`…üð5/Ð… ‡™h¼ð–L[yK[Çìþ‘/¿/·¸e¾XØ:ߨ=µ‹7û„|ƒU5‘RZû¾¬ÏMö?23±õ…r±»è:í fS³P,E }ŠÐkب 0¬Ѥaùoð(&;¢â]ýù]¦ýH|ìPéÙÉ·Œ.ÍwδW7Z2HO>Pj"¥5kßÅÙŽg ¹·™¨ç†g}/ÛdV, ÅDþ±ÀÂÊŒ¦ãë¯ýØ âFóêc?c¿Q ëù£ûÜûGÏ¡Z€Àp–ÅÞz"~ÃõQµ&‚d[gu›mïi³lïŽJ1SárD“RDZqàÔíÅÜB羦-;D¹”šmÔº*ž÷I -„&!‚ãöJ+ƱŽuqÒD*šKK»µ\ •€³HF$}èßqK,Íÿµ£×~÷‰î¨ÀL"‘öú6lÛû¾©ÑG ‹™C¾W¯xžYmTãK“cÛž+6Ìke*­™H³&&‚ˆH}ßíOLZ³f~åçL2´£ùxºí¥>¥bÞüxj†è•½ ΂ÿÓ[ÞÕ»>ò¹t; Ó)´'R^OÿÚÉkö=}Õ?•K=EßK;a÷… ^^é» àx±ãXPpŒh<—pê}ååÐàJM _š®K”ÚÃÀuXDç‰Ð  gÍG>÷CÙ.ùÓévæS¼oÔD¥THŽ»n¦î6ÊB(!¥>Ϋib&^Þî!d"Ívd)ÞÖ1ÕÓ=0¹5s²û÷\qWµ¼a‰HjfÅõj_y´4¸›™)ðg‰y‰ΖÎ~s],ÉoBŸò¦k–­£]½ÕÍnsï‚(ùD£ÞU#"2̦a¾¡5k)³wèù-¶íÄ-ÛÇSÕ>Ò¬â‰f—a…1iøIß5˾gùDR®8ÅQ—ˆ""bf¿QRn-ç¡j€Àp†±!èß¹åÿ&ô§¨íÍìÐ, mJ3È®Ùpô&Óô#óÓ›÷)êìÝšÊ×¾áD¢n[2Õìc¡ bâc½ifÍË?5ÑÔŠµÖŠC¯V[Ø×#³/üçª gÙ~ÿ=m=âælo?-/¨‰LKdž†§o꘽’…–¦¥#Ë· -g”ãå:v‡R²WÌ'ÇšNGY3iR^£ÐD¥àè^g§cIýâå‹ýÓ… ;ª’'û<¥„_*´O±Hø¤ÃåÍߘѯ-E``ÕœÔ ,WÂgÑŠÂj):1?}Á!"- 3 Ðò~ô³ïê¶£æ©P­µ£"s:gN•çšå±ƒ[ªW‡Jß³ +ÀÙ%„»¦w8ò£ñ$­µ#:}®?Owr¤ÿá¹éK ,@Ëÿ‹!€V÷¥OÞ÷Ô‹WfqRý}ӡƹìКT¥;zôÈåOkm…¨ 0¬_ûÝ{žª–Â?\š?S+é¹s´Ó0 ‡÷í¼Ëqzª¨ 0¬ ·ÿü×óÿßO}ã·óóÞŸþÙïdКÃÂRúÐÒü…Ç_qàœòk5|W)§ŸÓšü³—ˆš £0qäÂÝD €À°RM¨ÎÝïüñôˆ_:ïé¹²:vp󷊹­3Z£ÓV¬’«ÊOÿí{ß™í?¬B^§ÂÀÑÊ<ãïaÀþôѾG&Ʈګ”©P@`XA¶ÞrIO"kÊKß9ð¡Î~þX"+Ö°& •¡ÅžKöç§;yñêGà ⣀Àpý×ÿs][ÿ¦öß‹&8øÔ”’"V$ì#b! ±#çŒÖDÄDRžÙÎãÀgwæhßwï¿ö¡¦Ó]CuàsënO¦S|ÄŽpRk"f"!M#0‘>KÝž+êS£ƒ÷¼öq·ÙÑ BÛ 0œsJ[qªy­eTßw;Ã×ìLš‚×±rã‡7Ü;9zÅ^ßO¹ °šI ´’ÃOÌvn\ÛHw™WÛQ޵ ’ªW£S‹sÝOÞ»ëÛsS»Ž„aô$z4‡^£Yœxr¼‘?ZA% U`†ZÆ…ï»8½ù²ž«Ö_y[4Áñ³õ¾ž+êKs=OŽ¿´ýéüâ–Y"S1+ìÌ +Å»í­éÍ—õ}&™¦·ÇRrøÁ9òc­Î§‘&]«ZsScéò<·ÍB1 0¬(‘Xâ²öþ ©ï^Ï+Ra ÜfS–5+—L»}V$H AÌüæ6'Õšt¹yñ’»f'/ÓÚ …`%êÌÜfZyù¿•â °˜849¶ññÜÂð”樂öΑ¾á­O¾;–ð;âɰíTßK) ‹KɃ/í¿ü®Å¹íÓÌ‚˜5 0¬Tñ´Ü I™Z‘‚8 Dóè‘ÍN]ó"iÖJ í4Ú˾gÖ-Ë<Õ÷ ös Ùçï»òÛÅ¥ ‹,ˆ°  0¬pŠ7•›á4uõ‹ˆH{n¬Aš4“aÖ­®¾C;{k[LKGOéMXS©8òÒþËï),nž2y@`h3G¿G,MËvÖd»ÚßìÕª]…å[…š¢»÷Ùáu#7˜¶ŽžÊ„€ï±S)ÆNÙñ@)?¼$¤BX@`€Vñ?øöQ"¢ûü­ïd&¡IS*=Ñ›<¸¹ZÎäc‰¥nà â§Ÿ›sÓ½¾¸ëñZeMA+#$ô, 0@kÙú¶A‘ê°Þ&%[Ò­ .}þƒÑ¨Júž “ iyR/ÈDn“‰‘á;¿pãn¥â31´ â|B?˜!2´l$’a;‘4È:•×cÒT¯$Æg†„aÊ"ÀmH ЪÞûÉk?>°Ñüˆ§áüÅDnSÔsóýûróhp@`€–ösÿpÛoõ¯—¿`E(y:^/ (È/¶í›™ØzÙTDØ” àxðm ´R$Îí§ãµ˜5Õ«Ñéù©Þƒ¾GZU‹yZV9ç>­´öOSøPõJrzqnÝ„çeJÙ6g@`€æ5ýRàQx:^+ 9ð\f9f¾AÚTaha¦e½X\ >ë:T|³¯% me:ªë;{úiy«h@`€Vö•߸óÅýV?_X =ZÓ›š`fJ¦Á¶ÎjOØÁÉ>HŸäbýÝç´¬’-ãî?¾¿Ø³þ}wvö›W&GßÌk©Bß³êõ…8±Ú‚f•Tèù´ÜðprÿZ³ß,{¤uˆJÀ¢•ÿÏK3ÆÛ;úø–M–&:¥~e!È‚„ ¥'8ß^ž~a©¶pèéÀ«;Ä';Y I‡¾Ÿ;ò%TÎ/|ü®¥÷ÿîÍ¿¥ub$™å÷Ùî·"d1Ë '˜‰¤áÛ†é˜DINdÆ€Ù|êË£Zy(œ7$†ZÍÁG矺ãÈ·×¾eã~ÒjO³¡¾'"*$©5‘4Þø 1!ˆHû†Û´gËÅ¡¼ê çœâT%7²ûV.Š +™=ç¡ñÝ_9ôt¬gí#‘¸u·[÷¾æ5õ˜‘W¿qh`’Fð=‘ËÍ÷Ï™ê&œâTeéÐ=‡m€ÀÐ:Æž©íùÚ‹sOþûá£;ß³­. qk,A™×É ÄËD4Vî‘4é;ˆÓÁ±UŽ«Q˜¨VG‡N+±Ày= °ª4j¢‰ëq­yíwóÁ± Qà“¯BrµÖµÀ£±JA=>ö|ý@ÃÑF¼búUÛ2h½¼ëËf$•¾ú£Wé“lb`"­9ðΑ{>½Wë…€sáÞ¿}rôÖ_¼ä‹‘¨Ô,´Ï‚#D¢›4ùJ±Ó¨ÑÃM‡&ê¥`aæHù©û>÷àĦ›ý-™A¾ìû.òu46‘õý„Ù&‘P©¾ RZù»^¯±Z“ÐDšùû¤µúÿÛ»—߸ª;€ãçÜ;3¶ÇãG;vHH‚ó ¡”¨HT¥¨ª¨„ÔöOè¦UÕ]7]õOaQ©›®«v]! (*´ ‚„€“8$~Œ{<¯{O&œ¤(*uæóÙ%ó°ôóâú«sÏ=Ywc¹¹{þ™Õ¥3/-øM‚¾ o-”/üláwÏüüû)Š¢?óðÈðØ®‘=ÝvÙ« e½ßÿú¿ý3E¯Ý !ôBÕ[‹!„<…ÐËSêÅZ­Ùè÷wm¦l¤ØîQL1ëg£ww;cíngïÿøªT¦¬R³ù ðÿàÕß¾tþ–ž½Ó{»ëKí´õ¬Ôúçÿ›Âfëáfí<„<ÅHïÓÕƒm¿§V[9ñÄ+?)Šáÿ|óÇêõ&:7¿+„ô•΋øºeFÀ ‹YV ©üƒ@b,cŒµ2Æ<•åX7¤|›?ùSˆ±×GWÆ&¦ZÌî_9upþµS1¦hºÀNg…€WtZ²ÞW]ȲõÚáã/?µgï•“#õb<…˜¦g¯œøàÝâ*ÖÁ;Yws¥SôÛE*{1Æü¿þbêÂÌ¡£çž®—[UJatlso–­ •åîMv2·$0ð®½÷â¥~ûúFÑiÅÏžÁzb,ãøä{sû>}ªR-‡o~4ƪÕrh|âò”é;Þôü÷f*µÑ¡¬:´uøÂ—çA¸yFCŒE–ç­ê¾ož˜Þ{þ›{æÖW*Ÿ?a)¥B,+ûž}¬¹úø%ì`3Çx²6º{6« ÛCž·*•j»:<¼VŸœ>¿|×åG÷X9U©£y%ä·ÆÂæFÖ¼xaîµn»Ñ4]@0À•Õ&ãÑç~õìØÜcÇjé,¤/¯…²ÌÓ#ó}bfîòñÆøúCõFo&…”U*_¼ŽÆb–Ǹðácÿh­½jÊ€`€fæøs»&÷kvdêÀ£õéCjõ©JØö”„†GÇ>ráéÉ©õùï¼ÿ/¥Pv;ÕµTVŠ”ÔØ1ùî/ö5fæÏí© NVG&‡³Z=…Tnûd¤TÆtøØëßnŒµº[,l½?ë/]Ùýnkã𲉂vÆìñ£cs'ž¬ 5R–WË”R ©¼s„˜FF7veYº§kf ¡ìv†7b¬”É ÀÀcU 1 yu¸V1«)•iÛ»nýX±Ýª7Ë”õïåÇ”Eì7—ç.¦àg@0ÀN“B ÷ ŸC,ÃâÅÃgúÝÊú]¿<…r}mxqùêñ‹!Eë €`€^Lñúê¡«­õÚÕ² wÜÄ\–Yÿ“Ësï¤Tï `@ô{n·[m¥·ÝðRHÍJóòG'O—eVš `¤2Kû¼1?±kã`žo¿ñ9¥X\»2õ¯ÖÆþf° 0±b¹Ò8râô†ë=á%P±weáà»)åVÁƒ Ï7jß8õçç'¦n<šeÛ_3S ©µ^]^]>z1¥Üfg@0Àƒ.¥,MN›ž];V©–Ãw|o‹O.í}«èuL 0(ѰõøÕ»®t;qãâ…Çß)ŠªÛ‘Áƒ Æ26—Ž-6WŠ"ëm)”ë×ë—äâCIDAT:›³×Cpö ``e£»´8ûAÑÏ[ÛC,—¯Î¼W”VÁ%†C¼óªA·“m\[œ?SÕÂÄÁƒ ± ×®9¿Ùª-¥tÛ^†BJ!,2qzýú¥”2·#¤ŠÀvÅâõÕùkçÏ\|ñÀá÷ûã“­Cy%U{¬µq£¾°¹9²tþýS¯ôz#=à  ,/²…sOŸn.º8=wæÐh£9»ºôйµÕý×:íÑv§½k3:Ø 0¸R*×V®\oîkæy/ï÷‡û!lÝ‚c)Áž !ÆCÈSQäý­¡ ›žÁ@0‚ €` ÁÁ@0‚ €` ÁÁ@0‚ €` ÁÁ@0‚ €`€Cˆ!š°ÓTŒî—Ê^'…Òí/¤T¦²ß-BJ¥9‚PYôË¥s¯\‹)]!Þ )ývkåüß.› `@›¡½¶øñ…W_xÝ(€…= Žtó^![ ÜbêÈãGŸ|ûð‘/>Õÿx2¥,™ Àݹ% €0s¤^ÛdéXcªýlYÖ¯¯­YÎ+Ýü~ÿœ¼V2màAbM€Á¸àeµø£ßüò§£Ó¿³²4ÿQ{sÏzŒå}½¦²­•вèv¿øbÊúíµµËoÿáåås¯.ú;…BJý´pöøâØÆÉ3Y^íßïXØŠ’<ŒNÎC#·½B*³ÎúÕNÌ+®½ÀŽbƒ#Þ\Zÿ_o_øôh»&Á@0‚@0‚ €` Á@0‚@0‚ €` Á@0‚@0‚øŠþ 4Ž?;dÀš IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_3.5.png000066400000000000000000000063361430147706700257070ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢ ®IDATxÚíÝyp”åð)V¥‡U§ƒ¶Óªôòª¥E)–$$äÚ$›ÝXa´¨€€€\ $$ñjm«µUDT9!;íô˜vZ{ŒZÛqªmm;Veû.µÇLűÈR?Ÿ™ßd³oöÙ™ç÷Ïóç}ò†pØUn,³Ê ×Ü›ý¯÷-#Ãå·1Ì®ÍÛ&Ý=6 5ÌdÀ»É­¿¼4ÌydüSVeµà¬_¹cL˜º:;\÷p^úò€Ùç},ºþÑ«—i Àï2³Ê;{qWéúE¥·Í]ŸZ*õýžÞm8q᎒k–vÇ7×n-¾9 Cx—¹öþœ –õ&žlÙ—ü[6-ì(™_·-6¥¡»lmsoâùÖþŠW£À°rʪ¬÷¦ÿ~Úšœ·6þãBU[Q¸~{,|ëÉ aù3W„hìPX®É€L7®êÌã{Êû¢`jíO¦¢àðbT/D¯÷ßðDE*ªýËö&žªÞR4iÆÚÜ!m©™}–¡rSA;ïÓ®[—7´rcÁ±3׿ž0óÁÜ“£ðqLgjNˆ‚Ékç'ò42щáC–ì*kÂ+¯„×­e½‰§æ®ÏÏY÷Ò”pýŽX˜²2+L¾gìëŽ9ëÁÜPÕV¦®ÉRÕV”[ßYzã¢ÇKW5tÇw/ݲ¾³äÆêö¢ÑQ…ˆNøæèÁQ¨Ð È4ƒ† P¹±à’æÞÄÓoZû+^Ђņ…±²š­Å#cKÎ=zf ‡þ=VAÝ9áêå_Šø¡ 6žƒY=å?MïR¼Vÿ+½kñ| ¶/ÙYvOݶØ“Vd½ï[ÏLãkÏ>0–ó!.¾yÔqÑÂ}ë›í2¤oYŠú/D!à{õ%s§­É~ï W8Ÿ°´'žjà„oŽ>aÆãÆÔm+^ÞÜ—øÃ÷»ÏDß¿¢jSÁ¨pÚà£nýùeaÕo'j d‚ª®âôyƒË›{¿9˜~ºZú’ˆ‚CÇâ®ÒîˆÍ¨ï,©nè.[Ñ´§|GSOùw£`ñìÁŽõÏ0÷݆]ñ•5íE—ÎZ›{¼Î@†˜xç˜cê¶Ç¾…†g[û+^9è…þ¾äË-û’Œê/éEÿ[ ÿU^W¤¢ð±²òÑüSt2ÄüÍéóï±67ÖØSþ‹hñ¾ÿm-þßF-î*m«i/ú¸®@†¸éû…Tê—aîúüÂe{ßøô¡®E¥ß˜óÈø“t2Ä´5Ùaú}9#v•ílÙ—|ùp……(¬YC M^16\{NyÕi«·Íií¯øë;šzÊ•ü ·>úº‡òèd ônCu{áàš-E3[û“/¾c·%õWìoÚSþƒêö¢Ù³Ìý€N@†ºfUö€ÙëòF,ÙYÖ…†ôbþ Í}‰?×mM¶&çX]€ VÕVxtÍ–¢‰»ã+{Êïkì‰onÚSþÓCZû+ö/ê*½kþ¦‚á“ïÉÒÈd{S•!•º3|¤ðäÁç]ùñ÷\u×…'U·.íŽwŠÀÐÒ—|¥vkñä/ß2ʳ Ó]8ë“a|õYá’[F…Ën=?L¿/'Œ¯=g@U[á…KwÇt(Î0Dã>…’‘éïO?zÚêl€#Åuëò”{²†Ön-žÞº/ùê¡xâó¢ÇK—Wµ}jÊʬ!Ý8Ò¤À‘äâG…Ê[²³¬óÀèÿyhH¾¼tw¼÷úí±š( œpÁ´&Ž“ï&­{ô‚Í…£ºË¾Ý´'Ñßrvš{¯FÁäüT*Ê?gâàH†°´·<œÿð ù› Î[ÜUzÓ²½‰g_ï£e½‰çšzÊÞÒ—üÓ[ÚiØ—L-Ük™¾:ûÔ(0 4ëp„¹ü¶Ñáë?¾$\{ÿ¸ãk+.Yôxé Ýñ®†]ñŽÅ;ËVÔw–̽~{,«¾£ä³Q¨hiîMlhx% ¿>×5smîQ`ðäg8å,83T>Z~9`Î#ã¯Û;)ªçm,vÙ­ç¾ï…«C$‚ͅcw—?ñ¦ÿ^u_òå(\¬ž¿±`tM{Ñð(0 rKá¦Þ›ªÚ‹B}gi¨ï( 5‡Ùç…âÅç¸^ÚxÞ1Ñû3›ö”÷7÷%~Õ/šû’¿‹êÅ–¾äߢ °?}ˆzÉ®²ïUo):;ý™Æ½åÆþÏeÏûtøDÅ)G]³*ûÔ¹ò¿° ­0§n[ìÒ(`Ì\ÜUZ»dgYcCwÙ-µOœ·!ÿýWÞyá?>øAsï ŸŸtz˜º:;D Tµ†(0Ø‘¸ýg—…m©YáéTSH¥îŠjÉþaبaÿUG‚¿V·¦ø5ÝO%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_4.0.png000066400000000000000000000116211430147706700256740ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢aIDATxÚíÝit•õÀñpi]ª¶‚(›"BÜ$@HH²\Â&‹„-ËÍÍM „M@Ön VEŠ ‚Ziq©‹²p}Ñ3ÓÓ3s:§Î™9ö´gÆiÏ´cmÍÜk‹ÊL­V#ù|Îù{ŸÜ›ûâyÞÜï¹Ïó‚øR\—½ìš·ì‰¦V×—§VûÒ'Tq¨$aÔ¢QÝ3jZ9 Á‚A0ÀÙ«GÖ’®‚8C0, €`>s0,é:pæc‚ø”`Èn †JÁà³Ããñ`8ÿ_ÿ¥O(* ¹jÕ=³¦Û€é/UŠ…*~é3´ôùŠ„ÌÚÑÝG. ÐÜtI.nÛ3guf¿¢­}¿‚é¾;ýêÐìž]†Î Ð 5~Q?÷+ž64C]Ñ#øV‡‚K:&~EÓ/¸°m÷øts0hžZÙÀ™´± €3ñ 0vÙè¦É®N²ªF4ý-ùæ¡ Ð ž‘ä­È ‚NA0º6ûª§¤¶»ó§%Avlx°ðÙ©Áe×ô¼pêæü wéh; Z‚üÕ£ƒÒG ‚ؓノ) ÞT;ꆄ›z_0ùޱՕOänŸP7&ÔcDÒySï7*¾½~ܲѽ Vå¹Y´`YöHÁ’ª½ã×,~¾`÷òƒù¯Õš>{À…?kx<>;-Vœj'ÀÙj†±e+^.ü·u'ÿ¯{-ܰñÍpÃúWì=~7¾ýþ†7Nm7þ½qÖÔþ׬r—[™Ö~ø¬ÔóœÅ¦oÍ/_~¨ðŸâQðþŸ¢àã³é­SÓø<Üz ÿí[oÚ†Á‚Îb™å#;M¾=7?öýü»VׇõñXØðz¸á¶#áwW ÿgc,ÄÃâ·ÅäÝ>dNŸoöJ¿¾µ`€³ØÈ’ô`ÒÆÜàÜÎí¿Ù“·bõ±?GÃÚãáßÖ>›ÿlé#sæ|oÜÎõ¯¾ÛÑ‚_eD3sGFnj´±ÿ Eè5®wV<ò²’‡rçUï-øþ‚§ ÷—?2nþ¸7]š•vÞÔÍc6¯©/øõìGo@xà•×g$ÚiÐ’Œ]œ´|^Áʼv“ïÌ¿ªGưóç>RäÔ¦¶.\›Þ§äá¼Ò##Bú¶kµâ'÷ØaÐ’dVf£b™Á´ÍùAñ¶‚`ì¢ì`ļ‘Á–· A¸.÷‚ÐŒô6wüûÃvð¡oÁÐÙý‚é÷Ž ÒËÒƒ´ÙÃ퀖åâö=›àZµ:§uüáœýßx­u»‹‚+dn\Ù7Ï΀–¦ËÐâ¶]‡E†_Õ/ÿŠ„ÌÚÆí Kòœ ÷¸êÆ—Û´ë;²]ÇAW·¿!ç¢ïtK±Ã %IU{uß [+’¦íœ|]ö²Ô®ÃÊûtí{C~í°Ñµ¥óòWÇnýn´wþ]é—wO»¤UÐÊN€–¢GöÒ.IÓwU¤ÄŽD’#ûKã379r >/–¥Æž©»úž9«ï¯KœòðôkBs»olhz]\wÓŠ ÛˆÊ Ó )M§+µí‘\Ò±_pÞß>íó/í< éõË»¥_Ù+hw]FpUbAÐ%yVÐ!©(èмƒÍ:¦íФV×—§VûpêËSbGËsVí\Y²»lÿÌí‹÷ œµ¿¬ï„{s2v½.{Yûî5m» ™qYÛ#.އÀ7Ûœwáùñ;§ñ3“¦î b?nnÇE\ëK:ô» u«6ç5¾~î—i§Ä ®J _Öþ†œ‹»¥W;ðõ †ÆX8)ÜpÏÆÚçgþxå‘¢wgíXöÈÈ›ó’#*?Q–4m笤©MOœò`Q¿‰÷í[´5«ÏøÍ#û„ïN»~Ìʤž9«zõΫKì¿©ÏܵCú„7¾¡àŽôøë©}‹¶dô°5»Ïø-E×f¶>çü6¹[Þw  9Iž= Ȩ },â±Py$2ñ®;6/Ý?õg^P÷Zá¢OF_L‰í¦V/kzß©‰|4±#ÑPôåÊxPÄÏÙWqã¬'ËÏ}ªbð¼g¢Câ“RùJ49Pª8‹?¯l|jÕÑÈ€ÎKU;øŠ^Ù­hNÁ0g`ûQÕ)㲪 Bùkj¿[°a˦qkïÞ4s{õ–šúöÆ7 6¾nh|¼íȤ_oéî‘‹ž©I«>‰Ù/O‰ýå)L>•éTL/ÿ‹°øókU§ÿO<*Lß5ïÊ>¹Ú^Ÿájjh.F”§µrgÖÊå‡òÿeÝɢ߮;9ñ7kŽOøÍº“ãßÛøFøÃXøpâÛïYôÂ-ÿ0gWÍÞ‰woÜ’µìû‹S«ŽD>ŸuB‘¥ÝGÎOï6"& ¹È¬Ìl5ySN—Š=yÛV ÿzíñðûë_ 7lxýc±pz8|°áñXÿZøýšg‹ßÊ]ûàêäè‰ÒÏ ¡ŠC% £êžQ# 9™¸!'¯Ë¼jyó÷_¼ø¹‚ºe/æn[ú⸽K_Ê}õ±ð¯7¾õéñP÷zø5ÏÌ}müí›oQóRìoÁÍXÑúQÁ¼‡ ‚U'¦ ¿lüӹפ¼ü¦š¬A ŸÎ¸îÿøÅ¡îõÂ?–퉾0²v_MJìx™`€³\Çþ‚”™)ñg×^X½7gÍú× Ï Ë_™ôΔ{6ÜÛxÓ7§$@ËɆ`b]Þ€…OÞô©§$6¬xeò;Óï_¹cØü—*Sbõe‚Z€Ðì¡ACÃAÅcy“V¼~÷ãÁ°ödÑßzhâ/Š·/Ù“VÕtíBÙçZ%I0@ó6hÒ€ hí˜`Ý[³ƒŽÉ}¾U¸jÌðÚgó«{ãôÓ‘·+XrdܺÛï̾õ¡iÕ£Ÿ{YUÁÍÓØ[³‚+º}§Õ“|{ÂÚ1™Ñ' -y!÷­ ~²öxøw§­¾æxøfíXþð%oÌý[/r ð5QT7¦ã܇ Ö/Û_xpÕÑ‚ŸÇƒàwM«"}òº…ÖŸÿÞ²ƒ1õ¾•Û‡”/ý"bA0@3V|^÷ª½G7¼q†¥Sãá°é­Â†•‡'½s˶¥g/|鈅/V¥Ä¾˜X ÐŒ¥ÎqQÉΜÈÚ“áßò ãß_ulÒ¯n}yêÏJ÷Ìß—^óô‚/ê4$Á_C¦ n¹7÷ºO¾Ò¸Tê¦Q8õ«Âäw¦Ý·lgÆ’'§Íß_ùyWC ð5”2'ë%;s'.ÝþŲƒ7ÿ¼ê‡%G+÷FÌzhéî ŸŸ;QúyWB ð5Õ鯙—öŸP›?fù¦u¹kw­L¯}zÁðÏW ›àsÝM0ÀY !kQçÄ›w”‡¢õe¡ÊeM×)4…B}ùß;4s=²—vIš¶+’Zýå‚`€¯a0¤U/?õ«ÂŸF0@‹—Ysu¿‰÷ņ–¡Š‚Z¸‰…\<«{÷ŒÝ»\Ð=!³¶ÛµÃ£I‰“˜œV}<" {«¡!høØ´»~TÛ¾E÷äŃ¡B0§¹*±°mß ÷ @0gpY—ñ\ÚyÀ©é”$€SâqpaçÁÓ{^“2¯×©™ÛóêäÙƒûm½ÙEÏÐÂõµ¨sÿ)ÛKBç…"š&9²¿$}¹Ì²ªÐÒƒáÔÛ*Üé8S0D Á@0‚ ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á@0‚øR‚!V_–;Q–ZU_&@0|ô%>% ‹ŸªÉY½mMÆâ} ãA0€`ˆO}y(z82sûŠËL~{öCKw)?Q"@04Mr´¾¬èλî,¬ôÀÄ»oßœ=Y*@0|4iÕ‡#Ê6>º†ƒU’Á-FîÝïw44ÆgÛg˜ûãsw|²ǃa§`€³Ñ½G_ÔeȌ˯N.nûÙgÖå Y‹ú ˜ñ¨`€³Q·ôذ¤i»f*~¢$iÆÞ¹nyrîÀ™— *þÿ§ñ}7ÎÞ[ª8XñUÄ‚`€¿³ÙKÓ“#ûç¥VŽä×Ý¿>gõŽÛ†Íå+ ÁÍ.^š—¹ä±%‹^˜öÓª}Åod,yf`>ú…aDͳóç=2ßÌíKvXøR•`W99´ô¹ÒPô労ªçªR+_Œ…¢‡*·ÿšI©l<}é¨`€³Q×Ô’þ}‹¶æ%NÞV˜8i[A| ›žÿ•Óÿ擇”þ(’Ze•$8µŽÏ9ë\;¢²«·ŸªÇhwzÎ Ù‚ €` Á @0 ‚ƒ`Á @0@0‚øÒ‚!%V_ª8\Ši|.@0| •'JsVíZQþxåssw-z"sñ¦ÄŽ— h¡Á0|ÁþÊ‘‹ö-h| E_-Í«»·násÓÿ1öƒyDzn}liJì„`€– C#ÇʦÝÛöE/Lü×Y;ïyµdØüCÑÌ%{k3?U“V}8â”$h¡Á\q¬lÒ–M[ªöÍ~uÚ}kZq¢´éµX½‹ž ¥鋜–‡¢¯DBñG«$€`°¬* Á@0‚ ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á‚A0‚ €` Á‚A0€` Á@0‚ €`ƒ`Á @0 ‚ƒ` ÁüÝ‚¡B0Ÿ0ª¶sÿ›·—¥ÄŽàtNºäºì¥YoÙý•œ–$ 9CRQÐ3gU‡ÄI”¦V Àé® À§é<èæ‚!M0©cÒ„s®³"¡ÿ”íe®aNsMhNÇÞyæ-{!’Z%€¿àÆm€` ÁÁ‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` ð…û_ _Ò@¯82%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_4.5.png000066400000000000000000000052021430147706700256770ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢ RIDATxÚíÝ}lUgà·ÁmJ¶1Ôi”Á²ÅèŠcŒò ¥·½åÞÛ[¦‚›Se|¬”hË(-¥eš9·9n ›P„¶0¾)¥¨Y¢Sb£‹‹ÓdÉX”L®§8]¶ˆ Ï“¼97çœä&¿¿Þ_Î9ï]׿=8L~ü®0åéáYÓ×̺íîO .w±%Ù!¯:;ôMö=îèñ®÷|éáÁaõ+÷…ù/ŒïYÑK”ïÈËù×ë=÷ø·tqSž¦®¢É8™y0|ëgÃ’½…añî‚0wkn˜ôèP²nT(Û–2™ÃWòáÊæ‚i+޽^w(Ù|ïCÏ=b˜½il¨ÙŸ ÇÒ¡æ@"TµÄôµ# ]Yªá‹aâ7^3sÃèÞ‹våO¨j‰ÆŠ¦XöŒõ£oŒnÉJ6 ì>k㘛çl7pé¾ ÕN¶=t¢8Óp¬èdùö¼Âž¦>3òƒ‹w ¨nÊFÎÂùýKÖŽ¼NÂÐE}*vcç“€n‹~œ?)*[V´¥^­oKý¡þhêWˤNDç6-ÙSX¶ì@â;µ‡’-µ£¢ÐQœé, o†—JŸ‹ àò±ùÕ­…[£û›*› ÖG…cÖ7~0¬§”à—jßKoOß˶憖Li˜ôÈà¬û¾Ÿs}íÁÄó%࣡=ýÆÊŽô»_;VôZåîüïÍÚ8¦paSlXT†Fã Qa¸}Áòzõ¿÷ÓYÒ€KÜ_3‡Ç~9éÜ· s·å†Ð;+köÆ17E“üÄÒ}Ö¬lOŸ~¯Âð^#*gë'_œ³eÜ û8ª{TB;Dˆ Cèü½`{^(Xš-|¸ÔÍÞ4榊¦üÏU4Åú”¬qCéæqwÖJþ´ñxúôÊŽâ·þÛ²p~¬hKýbþ ãóflu]̬ £CUk¼"*?_v0y¤f≺ÃÉö¨(œù_‹ÂùQß–úuTBî–2tQ3Öúøò#Éݯ½ß‚ðŽo^«Þ¯¹aôǤ ]ÔâÝS޽r1JÂÊÅg;÷_¨?’ú]ÝáäOʶ原½iŒ «Zv ±ªñxúÌE) Å™åGS/ÏÝ–›\¸=¯oÙÖÜk% ]XçFkíé7.Ja8ž~³îp²yÁŽXÁ“§î ‹vå º²ª–ø¬†öô/BYø[ÍþÄæÉéÕ/§WVèeU$èòîŒMlh/úÍû- ÇÓ^´+ÿ¯l~«þhêå¥û&¬«j)è\6õ3ó¶åÞPÑë9ù±»> Q¸ŒäUg‡ékG]_³?ñLTÞü…ál}[ê÷óž?´|G^÷²­ã®nÍ”žû¸¹²¹ L[3R p90¥o·ª–øœ†öôŸ.äU¤eGæ=ÿÏåR+šbaÄÜφì¯õ$\Žî(éwuuk¼´öP²uE[Ñ«ÇÓ™Æöt¦áXÑ™èx6:÷—ú£©S˧^ª=˜Ü\¹;ZT®²\†•Þ–U²fÄu;c}ª[âC«÷Ä‹£‘¨jŽ©ª–øÈ%{ U5Ç?_¶eÜ'ò*o¿jØì[-™ W‚¡Ñä¿ôÙ±aqsAøîÉI!“YŽfÊÃs§KÂo3uaÕ©{:wƒKö†ŠyaêêááëOæ®4êm(j•ô ÍùHÈ0; ž~Kè›ì-€ÿƒHé‡Òz%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_5.0.png000066400000000000000000000353031430147706700257000ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈáiCCPsRGB•c``<ÍL ¹y%EAîN ‘Q H 1¹¸€7`d`øv D20\Ö ,aåÇ£à,Z¤?±H:˜ÍÈb'AØ vyIA ­b'Ø@3ð…9Ù>@¶B:; ‰’Zœ dçÙñ¿åÏg`°øÂÀÀ<!–4a{;ƒÄ„˜ÊBþV†m—bŸýÁþe;T’ZQñÓwd(H,JK3ƒ4-áÓrÞHá \Ñw€k10 I 'BrØ6„£G³ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/ IDATxœíÝw˜\Çyçû·ê¤Î=Ý“3 0A€Ã0ALEQ¢$ËeHkù‘ó¥W×öÝk{×»w)8ȶֻ뻲ֶl˖î$ØJ–DIV%1AÌaHäŒÁäÔÓñœªýŒD˜ˆù~ÈNwŸ~Ï<ºûwªÞ*%`YXµå¾X<åÝÝ´vË ­•Zˆ¦Ž=[›ž|þí½ÿãS ñúΟ^è,^uÔE`PÌ£¬]蜘WÎTœÐ,!uÔE`P—»Ð€y戈}í5C3o/­”²Ò8o/`XF”„Ž­–ýH¿”ÒVk/œ¯œ©MÏÀB``™hœˆ&M°oæÄî ëh%""a(ÖqR‰|w·o˜¿¡K€eâñÇ?Y‘gäõ=ŒjÍ–_ìöRM+ýx^æsz€¥ÀÀò½t{…˄ι>[‰²Ö¨ }qk­Š2Å ~>€ùG``ySÖ¸çö^‰ª§Â°Z¬(GÿPD$– ¥ lÆ–8'ÆDº0vhèÄcŸ{R%²Ór ·:{ñ–Òl×`îÀ¹±¢\Ï­ÔÌäÈø3ß™¼ð}{öj0çØ¸ œ»PÄšˆ`!0¨‹ÀÎ+¢´ÃÆkÀ2B`P@]pîÂ….À|#0¨‹À .€º ê"0€sb­Q¢•ññ….À<"0€ó”[èÌ#€º ê"0¨‹À .€º ê"0¨‹À .8Oìô ,'p^”Òv¡k0 ê"0¨‹À .€º ,sJ‡41¨Ë]èÀŠjås¾€Öjjll¯–“Õ)wÛ×Ü\" ,cM—½;¤[{u,kEÌY«' R W¼çc7x^ªrêýµÚ¤* êß÷ПÍYÁæ€eªuÓ‡’ù®Õ7¦Z¯¼Ì§˜³%Úij٠ÝÚx2\¼~`¢:9ìVj3ƒ"2,Œ2— ËP{ß½‰LKËé®ëÖgšMrE÷×7ú±rrt¸õÈб¾ýJÜSÒƒc¬ë›L~W£V3ÁL¡i˜Ö#©ªVJ‰?e”r À%†ÀÀ2ÓÞ÷®Dªµùº\× Ý A%SÏç;{önÑŽRŽ;Ñ4=‘žž™¾æ¸’ªÖÚ*£”õ¼ñXÌ›ŒW+3…©ËµSrµžŠ9ªªM´Ðg`.XFz{ïܶ«®Î¶÷]™Ì«xçÊo_îǧó£É#Õj|¼ZÎŒ5·M䉧ÕÌLãt©Ø¾§ö¹cÊÿ{ÿîôàüž2€ÙÆ”$.I÷éÕ·]¹1·ò¦Íé|WOÎ]u÷îY±êàíÙ|i•Ögý`”ØH$šžžjžÈ6 åãÉb›ãŠk­²ŽºùÖ¡¼ëEni&˜¬ÕLX˜Œ¦cC±x-«$/‰lÞŸŠ'˵îõkÆöîÜËâ«ÀE`àÔÞ^ˆç®¼ëí©Öu G‡:ßòlOKljM‰T­I)Uglá$íX/™.vÉ©øá½Ÿž˜h;’nÌ'’åv­EÅba6™^Õ¿¬!?¹.™©´ÆbaÒDª¦$ôãI›K¤õz?¡Þ¬´»"• xì«ýÓóuîf—~㇀¥¦–‰9^,ˆˆXñÍÄè†C^¼â~cļÑsED”q´q­DzjtÍÈѽ—=\˜ŠQÊŠµ""J”Òâ¸J{ž éjkSÛôÆd&lTZ”(/ •µ×Š7™›Ës0·èaàRõr4°bË¥|Ñ#ú F^Öt¥0™>^)6‰ÑDCË@w¯4Z[ÿéZ‹mŒ˜jÙxdæ×&†Í.k_ݰÍõÄË5ͬQúì{2D‘ØrÉŸ,Ú¦ÅÄ¢ñ‘¶år0òú…”8ºØÎŽõhÆM$¶ÞÒ«ãÃfÏ‘Ëÿ¡º*õÈŽm;ÂY9QsŽ)I\‚xà«òîTeJÝ—¥ßÄUöõ½ gß‹¡Zq§·ooÿÍ;ª¥ÆbcËóík7>ñæ\ÓäåZ‹÷Úãĵ©j¹èND¡D®gƒ×ö2¼ÌóÄ;^{îøáÉ'>pÀ,LIàÒäÝô–Þ_î\ç8•Qu—PUVÄ*QJÄZkÅTÊzêÄ‘ÖG_xú-ß™™^1•LÈ­Ùðø­m]C7(¥N»Øè6æùÕNk•Qb•Òg¾ é*“ι×wÙÜ×EäEa`I8§íáÀÒpõ{¶4\ýÖüÚ\Sµ/×ûÏñ¤j«š*ÏLûC^PmPJ­£D­ìN]ñС=7ì,ײ¥|ãáæöÎ=Û:Ý”HÕšÎe§ç³‰B©ŽF|±ü[ÑÎäcÛ·o.îˆæ# \"~úOßûÖæ.õÞX\ß–ÈÄ×yþk§.ŠTm|,Т'&ÇšöñB. 3cÇö_û”ë;öÊ+¾qg¾uøÊD¢Òêxâ^lXq\ñÛ[ŽpÞ]Ú,ÏÈv¡ùXäa`éS?ó‰÷ü›®uÎo'³z£ã‰:ÇÉ>6¬©ZXSÅj96jÅ(±^µR‰[eÜ|Óè&ß·µ³ûuÁZ1ÃÇÍ#Ï~ÿèîÿأDŽ©IÀ¢F``‰Úú‘­¾$†óÉxúŽkc¿™m’MZŸÿgûɵ’ìËÿ¾ÔË Ì™—gKiFÆ_øáä¿/U¿ùÅ`ÇaÙöê*NKЪ-[bwýDöÞ¶ÕÞÏ%RjµãJB©¥³\ºµb£š™•'<5ýkë«7=µmÛ6B°ÑÃÀÒ¡ß÷»ïZS«Ù—ywv]îþ»x\u/ÅËJ‰r}•Ê6Ú«ÂÈlضmÛ ]€3[‚o1,OÿöÓ?úÞ\£÷aQ‘“H;ëc Õ®.` ÒbR-ÛéÑÕO•‹ÎžjEŸ8üìÐCßø“ï,t]^ÅKÀU[7¯hlÕ?—mToÕÎ¥óñí*ÕÜüjX•™0´ƒ…ñ숕¿>ç¶msnÉÌu`9;öÌž)­TùRû­”(׉'%‹«¶LclãB×àõ.K\ÂÖnZëEÖFbÅÈ%xÁ¯Z‘ÂèqóÅÁC¥O3º,.–€5›[ï bºÏõDÏÆj‹‰µbË%3òÂcŸúêG¿ýôB×àõ.¹+\Šš»½Ž«ÛºŽ¹ ”¨XB5µveîÜú¹­|7þR°§Í˜1¶¸ÐuÌkÅÖ*j"¬Eû6<¿á?–>KÀ‘KOF¡=v)NGª–í‰Cýå?8<6õ96ozXÙ £”ĺŽÙfŒTö>SûÌß||ß_Iu¡ëp:g¡ g¤ä¥™›7ç¯ys枆f½Åó%±ÀuÍ*%"JKéÆÛòáeoÚ4¬o-|ä`y¡ëð*FXô-~˪knM½µ¡Q­eµëˆU&²ª%H¨›ü˜ä.µ)IJ‹ÛÔáÜY)97+=²wù—Ddb¡ëð*sOõÝÛç¶6g;²ùÔ­ñ´cŸ}øè÷ò©T~êÄØHï-]WµvïJdì•AB_áùªAÔÉ«ïVD”:y[¬ìɽ!N¥_ªßŠœ\ é¥ÇJX“bqZö“âÒP,È@q<úAT­|~bºxx>kðÆñÛ—†›óæôš¹toŒÿr*eWF‘ª…53èz6Eª¨D%ý˜j׎8‹9œF‰§ell0ü†©¨qåê¸l%²ÆÏ69ë}O¥g rÈŠòòÑZíH¼\Ò#C‡K×nü»3…VÏwúT­öí‰aؾíc }JN·”Þ–XªœŸø¯w_ßÕ›üX¦Y]-"J;⹞ ]ØÅ±2x$üÊîǪ¿]m¶»[G[Õ`ã MHi¿§àyQIû‰Tu<,è‰2ñLK“ãÅÍ®þìîþíÛ«""[¶lqwìØ.ô™¨)I̽èÉG=Q®®üÕÖŽäf+ÒÊš;[W:o–%Ü“`­ˆ²µ§ú烆ûû+§Ü]:åÿ "»ŽŸz °ø˜ýÛû«ýÛûŸ‘'ú“o¿>O|`)‡…°&Õ™);XšQ/ ÷÷_’Ê8‰ÀÀ<ê{W_"ðœëãI½~¡k¹PµšDS#ÑßÿfªAäŒMÏ.ìÃÀ<øñ¨õxÃáDÊ«$³ÞíZ/­vBkÄNš§6ÿío>ü¥ú¿ÑêÔ#—½Ð°¬lóµÿòÃáHÔÁÈ,ž°`˜òŒ+ìñ——qUJ^· ,€£Ô/=Í;m ]‹ˆˆ‰ìÄñ}…aMž ¾Ëèx,f'ÊCÇ•Fj3¡8T9úðÃLA– `߃£Ýk_0‘~›Z} ÖJ<žr×K¨lÿO_ܹÐõXID$ m©0aŸúÁßý`ßB×`qYoR,#êî_¹ÛM5úçéF­E-IJªÆHÕL9ŠTÙI:¬Êä‰CÑs"Í53óhË/nI6¬t¤­ËûÕ\‹tÏWX°FÄ1ÖJ5¬™ñÁCÑ·FLþ£¸ƒnÂßìÇüî¾uä_æ§K €y´ãî(üì'ÞuD”äWù³ÔK«³Z{òV«J9¬™ÃÊØRhd <㟙0GFŽ—Ÿ8ñ±ïíøÛ§&EÄnݺõÙÜ9ýä×¾P›½j\*~ág–Þ»{ƒëïXymëŠ`ãä¤Nt­KüÇlÞ¶\T`°"¢DŒ±ÖTT«È`T3“VÌ1fbrLí?´«ø¯3Cfü[ÿó[E„Mל7F˜A:ãßÑØÿÿRf(ž´ ÆNÔöTJö¥¤hLTS®óBqÒ;0>Nöÿ`xï3_xhJDjBO€‹D``Üþιt“º1žÒA<¥».îhV “fbïÅ/ØWy¨v¬:³÷ÑG§f§Rx=vz`®ÝwŸ¾±mt]&§~!ž’üÅÎZeµv¬ób1OÛÖÊþ£ g£T8# Ì-õwgO2ûwÙFwõEïê¬DÊ3R<\ùÔÀÁêÎZY7féI0g ̡έ›c‰¼ÜÝÔá¾O;¿aªÄ–fd¬Tùòï|ã"²(vŠpé"00GÞuß»Í-îv¬q~Öó/~°µ"£ƒÑÞ©ó?JcÎ3³Q#¼z˜}zëÞ™ihÔïî^üN¦QoT³0iH‰ˆãŠëz:a¬äV]×5Ýpuë$ý æs˜E›>tWrSŸûöæÎÄûÛäö ®Zg#,¼–1"ÖØr± ß_ù§c»¦>ñµÿ²ãÄì¾ œÄ©½¯/Q·~ôî WoŽýäŠ5±ßÉ·ªë=_¥g;,ˆœÜÑYkå1iJ78×G5u ˆ7õíg¤Àì#0p¡¬¨­ÁÝ·ßü£ùŸm]¿fÂqk×®Þ”øƒxJ啚ŸQ|×Sžã9ݱŒÿx¶ØqâàÁƒ4A˜U4=paÔ{ÿóÛ6­½1þ{™fçF/æÜP-Çö;®š÷ÏVÏ×madZ†š‡.z&8€ °õs[uüDå®L³së‰×ئï0Fnu]ñç³k­ ®þÓà`´³{m>_ÀòÀ•.Äv‘J©2bDD´#ÊõÄŸïåD”RK:«ºzâÂb&æ= \€–-’ÜxSçO5¨ÕóÕ¯PO2«V;Žºí†÷®-­¼æòñ÷Ýò©xàb÷”!0pA29í­¹nEÆõœMž/©¹X é(õòMéDJ5q÷í^ VíÝ·³ÿ»û&ç¿"—"`pßLí¡Ï¾øHïæµíQ¤'Ê„A|þVGª–¥81혙²C~L5iGyÚ±nXÓÁØpeGsØuŒ“ÌÊŠ4}f哵)}¹Zû®ëyWÇ’ÒöÚÐ`­X±b”ˆž(a"±ah‹£ÇÍwŽí©ÝWsþ±š˜ˆN޾<9i¶EÃæéùô·Êÿj@s³¢ïÞ>ïòõ-¿°á¦Ôù1›0‘ŠÊ%gbj"u°RŽOdò=oQè”cÉr›VQì|_ÃNO˜§‡`Wùû_Ií“mb¶üÚ–†¶v/•jSÛ?²£0ç`ùbYUfAKТ+ÅZu|¨ö¬Ò‰|©œ=¶ÿ¹ž'§§¯8¦Ýdè{Eß‹OŬնwýwßšo>rÛ¹^·SJ¤Z‘êİýâÈ@åw?ûß|^D^ijÞñ';&DdbŽN À2G``Üÿñûk­›¶<´ï¹¶¤›º&áÄÖÜX"ÒÚ*kD*•L¹TÊ–DÏx•RþD2;(Jé×|í¯¯R’é©1óùÉÉÚï}ö7¾¹wîÏ^E`à"47oH¹½×溮Ix‰¦U~v…òÒm“Ú*%ÖœBP¢Dj¢u ‰ÌX*•é«l‰qœ³ô*‘JI*CGk¿ÿÙ±?þ—ßûÞù:/x= \8ÝÞ÷¾uí—ß}gÐÐîxAF”¸FääâDÆ(ãñÎÕ^ÙØ2¼¦Võgš®yÁd³çFq­µml+\î¸g¾€§”•ÑÁÄžR±v¬Rª>}ðEý׃_˽øøãŸdGgó†U’¸0ªýš{º›{ßtKºõŠ˜ë¥­±/Ï1R:Ô©Ìá|2þÔÊž {ÞÖÔ6sy&WèihœîñƒZ¦ZµaÓžgcŽSgÄßZ<Öò¸vUƒçź¼:L¯¿üÖ®:¯_;ºûÝsŽÀÀ¹O·®u7¦Ú6tɼóúf-~0[Ùûý7µt¯wœ(OF­E[…R‹Åm"•‰šë†9yÄ(”rÀœ"0pA°ã‡wžðSʧV¸‰¬(Ñ/Ýg% =S)'&²¹‰†¶®ñkµ>¹´R¢<_׳Á½‚RJâÉJK,fƒ ÖÐØt¼#›ŸY•Êš¶X\_ç7^×Õ=Ïö{o©aÕª†¦ŽŽÄÔð°ï¿}×úx<93¸oQ….œjé¹±¥õÚ{¶6tݨ´ã½îNc”mhÜÛ|åußy¾efýÅ¿œ•—?º•)¥X*šo:Ê”¶y¥ÄQZÊ‘q:f&Ô÷?5þ_?/ß>(Ûä‚w}ÞºUœ‹Ý?ášwmøÐô¶mÛζ¶Ó9¬û`)!0pò½7fº¯ûпIu\s”>å˲íÎx­^ÖÓ»÷–†Æ™ÕJ‹«µµU M$"JD«“ÿµ/U ”HX“êèqùÚ¾g§?zetããÛ¶m;kh¸ï¾ûtüÁ´„3)ñƒ(ݘ™ùÞ? ª»~¼åž¦þ/šP&‡äûãǧó·ÚÍú1'!‘DÕR8Y«™‰Z¥|8&râ÷7ËöíÑl'€…C`àblÝê¬鸮uÝ[úb©Æ3NõUªìø±ÑdsËÞ®Î5»omé(l8ùÅ~î?†£PJ»~}¬khì÷¶mÛží±øÃw]Õ¾ÚÿÝÆ6}‰¤<3­vO WäZT_S‡“ˆˆ1R±ÆVDDi­´ˆh±ÖXc•J¹0. cÅ¿œ)¨G5³çãÿ÷ý•9?Qs†}¸Û·G‰ [Ÿœ vÆõªë¯ð“M§¥kcÑÌtçd23™Ò΋þôDâ€±ÊÆ¥vÏ·ñ¹,Okq’ vųCÉn9 g˜2Ô·µ/{Õ[WÜžo’÷5´¨·ÅÊIfeMóŠÀÊÉv q ÄQ§÷_8/M•ò$ãúÒK'ÖW÷‡_›ªü¦ˆ«ó0÷hzà" ÷G±rmPYíéf7HèScŒ’dêHÞN´ö?þ¦/ ï~>Ý0Ô”JWZçr¤A)qb)µ¦Zv¢¹öýß}à^ [?²%uó¯~Ϧ- ηy¿ÑÐì¾Éó•󺧫“·sy-kDf¦åpa"ú|a\ýýñ=3Ÿ›~PÜ»w/S“€%Œ)IÌ’ÞÞ»oÃM·5­º}½öNi€Vʺj8‘oÚ¹!‘¶Þ‘·<ÙÖõâÊ5럽3›Ÿ¾ìåU”悵b¦FõîÉ1ób•ž™©;2ó•¶5ÉÛ¾ÒùÅXRµj-b­}u(áÕªRŠjRŒÔ ãæ©‰QùóG¾=øgÿׯçètÌ3F˜%cc{M,ß<®•Ûîúé¤ÒŽ(}ò£V‰¨(L„‰ôx¼¹}OŸÒ•0ª¹µdj¤#™®6k-§JÌ¥Š €HõIDATDù1›Ofds*+·¸®¬ŒÉ®Zïÿ?ñ¤Î+u2,D‘­ëkEŒ‘š‰lŊذ¦¢‰áÚ'Ží/þG#òWƒGõgþö;ÎcCŸýzq®ÎÀüc„€7¦EÎuYҭΊôšXºcsCû¦†Të:#rr„Ás&b½ë¿³¹çòCïxù#Øq¬«Ï²yÛ\°FŒ1¶æ¸gèE8Óã­Ø(”™â´Ù;r<úö؉J¾-¶Ö];^úÇÏþö×vÏuÍMϼ1GN6 ¿á›;ýL¾ñª†Õoʾv–‘¶JÕB/:Þv$‘™z2×W?Ü«ý pƒtÖ‹eN ZD©•üÒ̤쟱æÀÑ*²¦Ð÷½mÙörKƒÝ²eË÷eƒ¬Zsuî¶DÆíLeåÖLƒ½Í NîÂüFL$¦Z‘b¹=çhG%µ’„멼H<ŠÄVËv: íØLA¶O „ç“í[¿ùž|iJN¦åò°&Q¹d˜ÐLЍ¤µbÊSQªs󆆣÷ÍÁ¯À"´¸;­Xzt¦ssC®£7›íºæŠxnUwnt•ãZ‘°RÖayÊšên7{r"þîWÿðÛûßè ?þ‡?²±µG½;ßæýd,¡×ë³u!Z1#'dg¥¤>½ë‡cj'æ¥rn&žR©Æ6w•£Â;"«^œ™R»*ÅÊÔ§>ü•/¼üÔ_ûìûoöïüxäFýãƒæ‰jÉDñ´îNåt«ë‰&Ê_ØÿÄÈ?íøäã#³ðû°È˜#M7¿;O^³"He;ÅõR޵µJTªÅ‰Rq 6~øÈTaïýÃçqHçg>ùÎ7'SêºT&öΆfu½ëÉë—Gµ"ad+Ï?4ó+ÿk÷ÿµœaêЖ_¹»sÇÇ÷ ‹ì­œzß=ðÎÕ¹¼þÍ|›w‡«”DJKÒõtÜóUViñk;81Tý—cGËÿí³¿þ­Îû`I!00×z{ƒÖÄf×K–Íч·WE¤nSô9P"¼_øÔ†t¯W¿‹KÚÚ“Íɵª+Néõû<7ôñoþñCÃr{G¼¬sóæøÝ?ÓxÏŠÞØGiÕaŒqÃ0ßwD;¯6B(ªªþ{[¬~퓿𭂈D÷þEŸ—\Ù”¶·áO~ì«o8j`i ‡€¹¶woeð Wó/é¯&×>Q):ϋսÚQÙÒŒ9~àé‘_ŸTÇUóÔ7ÿø¡êùøè×ÕÏ¿÷Pµ¬*霸Ê(±VK­fĵ"Ž«_.@Ò9·Ó;Ÿ(Œ;üÔ'Þü™x ûþüç¿û ˆŒ½tp‰ 0°ýã¯éóïþí·ïζzW5uëÇŽDO ¾óÍ?þæÌÅ·X0&ŠlAD‰RJ<ß‘(4R­Fâ+žïˆR"Ž«t,!9¥»>ö£ß}Çl€Å‡)I@DD~îOß±2ÝüNk§û~/˜ˆˆ5VÊ¥ÐÔª&ú·|ùœVhpia„€elË–-®sµÓJ»+*5ÛØ’pnõc{yó6+"QhaX¾ ,c;vì0ü‘·­ì¾<õ?29•wÕôÚž•q}ÍŒ`#0°|©þÁ-Ù|{°B‰h?¦:δ¦’vôüW`Ñà€eêîûîN§Z~¡}¥ÿ—ùV½áLaA)%ž«eÛï™­Už,1–©¶•Ùl2¿+W1u–IGJ+Ie<ÿ÷ü±ÒüU`±`J˃껷ÏmJ$šÚÖ6¾#ÛèõT+åZ¦É»ì\vv³"R+Û=s]$€Å‡ÀÀ%nëG6ø±äÊ[‚\ìŽ f»ÛW¹ït=IЏ¡ãJâœbEÊe3pëϼeÃ÷ÿæÛýs\2€E„ÀÀ¥ì>ÑiÙ´±/õÉDZºE‰ÖZœ“wªà\Sž‘âd´c´P<1W¥Xœèa`é9÷eN·‰ ‚ص‰Œ]¡ñ^ çÆZ‘â´L­ýõ7>3ú§ýÛ;ïj,iŒ0°Ä´÷µÇïüÐUïôãÉÄàþÂS~ê‰}ÃÃö÷Ök{_8R¾ëƒ×®Œ7y¹TÆÏ6·9½~¼C)åïë(%R.Ú¡ÑcѧGO˜OïúòƒÓsq>7KÌ@ú²ja,¬®¿Ñþ¿«Ö§7Ü}ë ÑF+Ñ1cW•”UMJ«„(‰i¥ò^à$϶ R=aM¢™‚ùîίOþÿÿÝwŽÍþ™X  ,5;v„‡§û¾Ö½1sC2«þ/?ÐWhíˆR'§)%"êä¼%+/ÿq~*%:n>wâ`á„`y;¯yŒ`q0q¥všXvŸˆ6‰¤¬ÔŽò/d$ÁZ‘(”ÈZQJDUÊRš®ý×þìéÿðƒ¿xìÈìW`)¹€·°˜¤zÛšÿýßnÞÄÝ *%;2<`¾â{I§õ³»ž*|ù+Û¾ùâìW `©aJK\aѣöá¦.éôc’9ŸÐVíÄàáð/¿ÿùÑÿ>9^¬îÿÖ`Uä(;:x€%¬ïÞ>/s»ï)ïʯp*Jߊ鵪>Ø_~fº00µÿ[{+sT&€%Œ–¨MÚ”¼i˪ßÚø¦ìïw­ îòc:¯Ô¦ŸeÄÁõT²¹Ã»2žhœ|ö»žžÃr,QlÜÀµacÏv­qïM¦õ^ ED‡5±Q$bŒHŠ„5±•¢Úœqô@)qý¸îÌ·y7ÿ䟾cÝ<Ÿ€%€)I,Q±·¹0iö”Kö9¥¤†ªfB½O;QÊó¬ #]4¡*¦Ô„ãDw¬XãÞu¦þÏ—tGú©X2ïÜÜyïчéað*KÔÔ‘ÒÇN¸ß841.]+UJö¹/?:('?ß#yÍ [?z÷#A<æ7u¸·)uú /P~:k¯»þ­›n9úðÑÇӰȱ¬*˃óþßËmWÜ’ûl—\ÚâðÑh§v¼‚vm¦2ª–¢ÃÇÖ¾ôåß½ÿÉ….ÀâÁËCtl_ò±r%ñ‰ .—Wf GGöýúë[&óÊ9ò|T=6a¢Õã)VJð:–‰cû¯©Ž¸Ï6­ºq¢4vxfèàÓÓ»?Eµ¢õÛt|ð¡ý“ËÞh¡ë°¸°¬*ËDê-®ç9½ÉÖµ)ÏoðüX¬'È4¶{q·GjåTPñ‹ÅƒÕ—'"fK°0ÂÀr‰X×Q*H8áÐDKµí1ãÅcG‡¿X‘U[b+›º/·®Ó8qôÑ'¦Žö-pÅû0° 9J[?žQ^2?þìôÁ§þvâåûš ž“Ê­ˆgZÖZã6 3€e–)/ÈJ®ëšV?ÕðÖXCÇ‹ÃcûâzÚSé¦îd~U“‚i/…iIÀ²F``s¼¸I6¯MzñüæRæàeFÛD,ÙØl\-Å©ƒåTûª–±}?<²ÐuX8–9Gy6žnóã鎶—~dŒ­9&ªTléØÄYŸ à’G`/9uæ‘#•JlA*°xÐô N£/RÖ{Éöæ…®ÀÂ"0€ÓYQŽ·AªÜ€eŽÀN§Ä:ŽçÙö¸ð}XÖx§3"nõâ©æÆ\nuzÖŽÛÛˆˆšµã˜spF”ëlj%ƒ•7äfé jE|ýµíí}ñY:€yÀ*IàŒ”RV;N"ÝÜÕpâ"#«V]oé â¹´ÖjcèÇûeàñÙ+Àœ"0€3Sbµ'2+Z;;7Ç}¸t>Oïí½;öÞ5âêÞ|ïí~<ã†÷Û)Ë`)!0€33FüDƒ ³íÝÞe7¯•£?s>O[z.o½ìÖ¼D>îxq#"¢” ç¦Xs…ˆê³Ú‰\"Ó¼fͺ-÷6ÏSƒtSÎ ²Žã%OÝÀB`gaĉ§M,ÛÑídVoó˜Ö « aXâ àìŒ?Ù¨b©¦Ž®kÞÝr®O ‹CeY#ʰŒ*°„Àëi-¢^ÿÖŽqýd:ȯm8×ÃÆ†Š¦VaŒXÒhz¯êÊS¡XŠV'G¢HtôÜx2Ïv5I_Ÿ'?^{£cÅSi_{ÞÉË“v®+0W à$%*ªÊÃ{¾¿Ï*sÔ3®)VF½\çÕ—¥Û6ôxÉüê5þÕÇ÷Éã{Ïz¬ÎÎx¶ûšµâú1±Ú2Ì,]ð «$ŒJ#Ç>ü·»_óc?·õã-"ғȶeê1??}àÑ¿¬wœÎ¦;“­›<7¥D ã ÀF`¯cŒ:µÇQ‹Uêå“’+»¢°Ô+"c"rÆ©I¡ÒžÖ¢˜Ž,}4=€W™HÄ”•œüŽðÊÍšê++y‰&ëÇò]›òÌ+&õõyާCe"ËL$`éc„œ¤´ÕÊó“íW¬ÚxÏ'¬‰”ÒŽª“®Ë4iåEbD”VÆO6¶fZÖwJ_ßЩ н¹Û¯H5÷nªÕfÒºZPnbwg` #0€“Œ'‘ ò=›×Yk.{í]J;F;^x²yY‹KºÆ”;Óǧ÷M‹Œ¼ü¸T릖 Ùre<¿:7qô‘jiòùZªµ/áÅZ­£4““€%ˆÀ^á(mÅŸaDà5s‹Œí¡khÌ®}Snz`÷ˆˆHÏ­?¿)ݾic<Û‘©y¦2¾¿8ðð³QޔᄈÉñRóufœâ”ë›lû¦¸Vþ5þ™Jmô`˜í¾þŠdnu«O…¥éÊDêð¡;5õåX²ë]©¦+âóP<€YF`g¡åŒÂq¼¤I·_Ñæ'Þf»oTñT[ ½X("R™<FÖŒ‰ˆyüû+zV²¦iƒUV~0‹œ‘‰DŒ¬ˆ×=Ó}#ŽëÙDcOìÔ{\ßQ±×ü´¦v?f+Íë­íd…F`‰á/-8MdZÑóDÏ5›?wgÏck¢È9÷RˆO{a­’“—.Nöox|ô˜³ ­K # àZ$ªI2=Ôšk:zC¹›‰Dö:çü|#nlEÙº™ ›´´5äœÔ•Ý™æ«3µbaë0 àF”öÍ‘ýWö'’mÍíGúz ?:|à¶~G×Î)7¸^,Êwo^•Îõ´x‰¬çø©À R–v±'°ÄÀi´¶ÊD~T­Æ§Œ-””’ókV6FbɼãÅÒŽÖ"VÛsY} ÀâC`¯cŒ²‰Ì@¦gÝ#7ø^%õÔ÷ÿóÔôú!ß9·Ñ…WX±ŽÒ"V„°,]4=€S8â:5×ó*ÉDf¢{Ý•;oïé}d‰º. À^GëPMO¶Oî~þÚ‡&†s{sÃW5µ¸<2‘ðÕX~˜’^ÇFŽÉ6hZ{Å£wúA¹aï ¿06¶q¿ã9ÂÔ"`ù!0€×±Ê¨°«– ‰1±¡'Æ¢rP£¬hvj–ÆÀëhmU¡Ø1ùÂÓoy ZNެ½â™{:ºŸXoËð° 1ÂN£­RÆ&k'z^,•“Sãc«*m¹Ð,Cüŧ‰"eZÚwut®|ñz%n8rbÕÖ†éHÀ2Ä8#×-Æ‚ØÔŠZèD%/í¨`y!0€Ó(eÔøh×`yÄŠúñ²…~EÛóÜñÀ’Ç”$pkµM¤ÇÒmÇ®j_qüŠdl(#Ñùmô àÒÀ8RFMŽwîßUùº‘ÂLç= ÀòD`§ÑÚª¨š© ºn¿ˆˆãXͦmÀòD`uq¦/Ëoê"0¨‹À .€º ê"0¨‹À^O‰²¢´¥E ›µËû0€WDaEU§N+ÅÉVKà'“¹®@ ›¶Ë# à$­%Šªª4u|äéöÝáÿõ±ÚÔЄXF€åŒpÒKƒZ{jÕåwxnµè:^@X–9x‰×M˜x¾§ÓO6Ðj¥Ü ­E‰»ÐµX(ð í8¤ERÎ+?¤XÖèaP@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]uÔE`P@]u¹ ]—µjËOa%§ê=À ÆíÁ35‘íÑ<ÖŒÀÀ,Ù°á#^UMßžéZ•QFÛÈhëh£¬6J¬Va8Shºì_ŸÙ%Ǻ^8fÉÔÆŒ“5™¶\×µQ¢¼`4‘mÈOޝ®UÊ¢ŒªF§&÷ïØ¿ÐµÀ¹¢‡€YâOZc¬uÝoåêWm¼ö¡÷­èþác¬]èúàB˜%asV‰ˆh­Tùfzºihr¬á@aºiDkU·¯3¦$0KÜáI+¹x%ª•*ÖJõØþõ/ íÙS«ÆC±3V”R¦V®Ö"KÃ3€%ƒÀÀ,9ØÜ_kÝ%öÆÎt¿µ‘²Ž©(˜ïÚàB˜-Û·Gƒ"º ˜Mô0¨‹ÀÀr¤Œ)º‘5JD‹1ŠUœœS’X†ü`:ÖÔö膙©æ¡J¥qZi×–fgÄáB×`q!0° 9NÅÉ5XÝÞy oj,1hlP>rà–‡ªåÎi³ÐåXD ,Cµ0^Zý¼çGN¹(áäøŠ¡reÅ”Ã~^‡ÀÀ2£µRa%]=zàöçD‰D)£´¶„§!0°Ìc­ÖJ9N¤EØCÀÙ±J€º ê"0¨‹À .¨Oeu¨E +(Ëœ‘1Êúþx<•Üפ݉À(eº&óeUÀimU¥’-W+ñªßhaŸ`9"0€º”¸FÄeûg`cJ€º ê"0¨‹À .€º ê"0¨‹À .€º ê"0¨‹À ®ÿ¡Ù5WeäâõIEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_5.5.png000066400000000000000000000124451430147706700257070ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈáiCCPsRGB•c``<ÍL ¹y%EAîN ‘Q H 1¹¸€7`d`øv D20\Ö ,aåÇ£à,Z¤?±H:˜ÍÈb'AØ vyIA ­b'Ø@3ð…9Ù>@¶B:; ‰’Zœ dçÙñ¿åÏg`°øÂÀÀ<!–4a{;ƒÄ„˜ÊBþV†m—bŸýÁþe;T’ZQñÓwd(H,JK3ƒ4-áÓrÞHá \Ñw€k10 I 'BrØ6„£G³ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/cIDATxœíÝi´eUa'ð½ÏpïêÕ@ @!£(ƒ%"±Mk,¥…F¢fP;Ò+‘—ØJ·i‡Õ =¸ìhb:4$Di»…dD(  ÐjhŒ©¢ª jzõ¦ûî=çìþ@¨Æ¢ð^½~¿µÞ—{îÝç¿ÔºÿÚà ž%Îv`Wžq᯴øˆ9ǶÚÙ¼ÎXõÀÍ×>õ«.YÕ›í`ÀÌS€:åOOi¿þÕÅ;ûŠe\³xpŒq 5iÝðÖÉÿµaõ–o|í·¯ 1¤ÙÎ Ì…Ø©?¸öÔ7 ÿ­°|Kžg峯t›¼¡®ª¯®Û²ê’3Wõ>}å›ú‹°`ÞðXwq]7Û|´y|åù+«ÙÊL|¶{¦×œ=÷©æ‰xW–—#EÈò8ï™kE‘õyvpLñ¸:ôõýâi‡Ï<`èãs¶¾¼ð ö'æÌo}pÉqìØ“?t÷ŠÇ&fó{/àyñµ·,>ôˆùŸ˜ÓúDQdeˆ!„BJ!ôzÕ¶Îx½>4a¨=/nµó"Ƨ^LŒv{[·Ž½ýNÿþíOسØs}ôÜe}ó‡Ê_lzÍq½Éz¢êÖÛRã!…c˜W7ÍäÀ`yHQdƒ½nªnŠVê^ÝTÝæŠ,o­ ÊìÕ`J6?–ì{õ?ËŠìYÌò¼ŒYJ! !„C«ÌŠÁ, 1ÄŠ2 ‰*TUÓíŒUßÚòTï¿^ô‘fû;/ÂLiùk&O|Ï1½,ƒ!KuÙÊûÓóYCjRÞØùüæáñ˾þoþnc0»{½l¶{¶˜…§êªY]WÍØó½/¥ò2Y;?±ÉʹAY€}‚S’€çuøÉG>4¹mbUk •Ê"[c˜c|Îoˆ¦I“!¥Ç›º96¥úGÇ­]ýð-¡™ÌÀôQ€çuï·ì­úÛ‡öš_=bU–5½¢•“Ù‚ß×Ô©7ºuòâ±ñêòÔ­W·ñ¡-·Üb–övö0»dÑÁåkûúËwe¶pg×ó"ë/úòÅÅpºé«¿¹býîÎÌ …Ø%YÌ‹ø†,s§š7h•Å¿l¦±Ï]wÊ_ކðà§.ŸÜ½)éfIðBâøÎ;^Ó?ÔþHY'ħ<4%/²ùe;CQdo*Bü¿qôÆãß:w۪﮳—öR 0µsCöñß]öÊšóÙþþòCYþÜÍÎ;ˆ1Ƽ(ò¥e™½©É²£SÿøǯÝh?ì,I¦ô¹_:õ辡òß÷õ—§Ålê™…çˆ!dy6CoCQ–ã3˜a ð\)Ä_´l°Õ_œÖ×W|8Ëcÿ‹¢;Y=Üh.þò{—?8§ò±‹O,¶øWRæMŒ×kç/î?­Ó©7oÞ2vå%¿½rãîÌû‚8Û€=Ïg¿û¯ŽêÊÏêëoýVQÄ_Êã£Ýïléž×kÚ?ù“÷þíÖéθ£~}YßÂýG Ì)Þ30T~¸È³%u“:YŒt»õèè¶Þ™c«ëë.8ky7DË£`W) °Ÿ;÷Ü=µdÙÀS““õUgß1qÖ7–½bÑ¡s?Õ?Ðú·Y_òj„Ô¤ªW5OVÝúÝÉú±-½{¿úÁ›_̸òù’bóüyù`ñÅwgÃTïûwß\¶hð ¡ô”¿_”ù1†òÙ×ëªïuë•ãcÕm#£õåüúòÇ^ê÷‚ý%I°Ÿ;ñ×_<ÔþØqnïn}Ïæ,Ko([Å)/§,„BÌbÑjåK[­üýe«~]»¯¼í¼›N¿mltòž'ÞºfíC÷Ž9ìèö¥Ÿ^9åìëû'ŠýýŸ! ‡þóŽ×?qå¯9w^ù¶þÁÖ[[­xj^ä‹v6N^d1‹§6)t&:½«^Î÷‚ýÂû±?¸úW—-èûB»¯õ;!†,„eÙô/@([ù«ÊVxU]e¿Ñê/~º`aÿǽ~i'‹¡õ…§]{ûF¿µòü•ÕŽŸËæfKÚyöëM“þ~gãe–ÊVþöv_þ¡©r×U³µê¥•½ÉúÑ-'®þI×ì¼–$À~ììkÞñºù ú¿Ùß_û|ÏW˜v)lßDPWͺîdum·Sß³ysç¦ñ‰j]·zóåÕ@ÖÝ_¶ÿ¬=PÚé4W×UïÁ²qa“R7YQ´³“ZíüÔl‡SœR“R·ÛÜ59Þû‹-Ã#+Ö¯[Bqøaôü·=·œ;§0À~ì¬ëNiÏÍã[_i”'ÍVŽ”RROM®«4\7ikjšõM²N§Ëb|è‹ï¼öœ/Ýñ¾Gò2; <½J"…bˆ1ßqÏB!ôºõ¦‰±ÞY·Þ:rÕÎf/€]ãÁm°»ëŠ5õ[>z\'Ô鈢̎Ȳ8g6rijc;ËâܼȖ”evXÙÊ-Ê|IS5+'''ÿçño?l ÕWŒ”íü]E™!Æ2ÆXÄøÜß3)…¦ªê¬&÷.ûÝÌÆw‚}…Âû¹¿»ì§c‡üóÅwÍmÇV;_cÜSV ÄC_Jqag¼^}Ó·ŸøÑ1',Éò8˜R³¡©ÂMÖÔU½>„Ðʲ8ôÌ몙èNTøÃûªk×,_SÏâw€½žÂ„_û³Î/診Èó·åE¶`¶ó<£i†­[&þxø‰Îw:}ƒ—ÿÞŠu¯8¾uC§I7Œn­¯Þ´qøê&ħZ­â¤¢Ì–<ó¹ºW¯œ¬.ÿÚo_·z6óþÀ)I°?I!~ì’‹E‹ ä¿Yôå­º—†Ë2e–‡WÄ<ÌvÄgËb˜;4Ô>¹Yšþaå™ß[B—æÞ±ÂØÇ¯\6gÞàœ_šß~«RHuÝ §”ò^•®ÝòDçîÙMû…ö#½tY»Îò§7Ìmÿ^»/ŸB¨C íCÜ­'%킘ŲŸ”…xÈŽ×-:¹(³/å1†Ô„M!KK';Õ_l~|âobY?uáïܸi62þfúG˜Y—ž±²Sçae+Ïnγ¸>5¡ MHM“¶¤ôO§ía² Ì-ß¾ãë©i6w;Í Û¶tþ´ª›;R“Æê:<òßëú;ÿäý7®¬°/²‡ö3÷\ýpµô½­ÇómÅ›˜=Ô¯Ö6)…²Ì‰ÙÓOwN)…”žÞu<›"¥b EãÈÒcÊ«î½aCï™kU®ŸèÝ1Þ‹,ZÐþ…º 'F&®¸í›* 0,I€ýÐU¼¯÷ûW¼q …ƒCå±y™Ÿå±/„š&õ:ã½»ºÝæ±9C­Ó‹2럌)…PWÍx·S=^UÍðÀ¢ùKCÛ71_uÞ}ݦB8çû§ßÓ„æàó‘ÙÈ û2…öO©Ý­7‡&=büPžÇ¶_hRÝéÔ÷lÛÜYÕnç'EÖ¿›gRU7#½‰ú¶‰‰ê¶‘­ ©®‡óMYFªÉkònº5´Ã“»3(ìö¸uŠÀîóóŽoùÆÃÞ2wnÿ9ívþú”B¯×­ïߺeâ«­Væ µÿ¬lç wg¦Ô¤Ñm[&ÿ²ÿ/ë†ë± #ýéÐö“ÍÁO¬ªÏ??4»3 `†ökWw_7œ{ßÍgÿÒ©´â;zÝ´iëÖÞ7—ó×¾º˜8±IaMa·†¦I“½^õã/½Ï)G°'P`w~hþ8\÷@ág¿|Χ˜eáÈÝ!¥êªkêæÉn¯¹rÃúÑkvÇ}¦0;Õ¤¦—š¦3Ó‡*¦zc“?ètªKC¹÷Žõw~÷üUã3zS`—) ÀN o«×•eZÝê ‡ÍÔ=R u·S­Ù:yö—O_ñfê>ÀK§0;•å±ó8:Sã7MšèMÖ?Þ8zö—ß}ÃÝ3uàåQ€šn¶d £)…§ù\źJOLLL^6¼¡ûWsrÃÚBšÞ;ÓűªÀTâºåô3ZýåEE‘µ§cÀ¦NãU¯úÁØHué¶ŸÖ}Á'—ONǸÀÌ1ÃL%5UóXS§GCŽž†ñš‰ñÞ··mé~ñÞ³ü¾iØ `J£é‰ùí´&„—^š&õºÞª&¥Ÿlé\0çîëïŸÆˆÀ S€)­[»ñgC¯;øÎ¦Io˲ø¢–%5Mêöºõ=ã#½¿Ÿk.êKëéλÊÓša¯bð¼>sí©'Ì›ßþJ_qò‹ùÜÄxoåèp÷“[Ûpÿ%g®êÍT>`fe³س=u×øýÝNý7uÕ¬{1ŸkzõOë¢Ú ,ÀÞMaž×¥ç¯ìl»²×©®NÍ®Ÿ~c¶0«óÖ F{Z q§À´°‡xA¾ïÆMçÜø®[óª9½låKwéCY8¸ÕÓrëT>pÞñ­W]wÄ[ËþüÍY–W!„R“u&«µÃWŽßpÑW®ŸÉûÃþ@avI§S¯îë/V‡v©0Ä<.é7}3™©o°(ÛsÊ“ûÊOÅ,>3ýó‰ì¦ÞdóC ¼L °Ý¹__Ö7¹xpiì{Öýn½N½qä‘mΛ·èÞÔ¤7Ç,æ/8XŠÛʬìÎdÞÎX³,1 ížF]æY², ¦ÂlWÔwx»?ÿ|__û˜R 1†¦ib§S_ö•÷]ÑçWœzMÌâ[[}ÅkŸoœ¦N½îdõ¿»™ÿᇽœÂlW´ŠÁ²•¿¶lç'„ZàÓÔY¨ëæ–BØøð†ÛóW.½8Ï³ÏæevèTãôºõƒ¡©WüữÙ=É™â”$`»ºÈR¡ ?wR 1<½?à’3W¯½ïÉoôzÍŠÔ¤)LJ)U¡Î=  ö °]^51¥”¥ÂÏÿýÿýW|òÎmÝNïûuÞÙ)¥^ÈbV§]Øçìñ,I¶ët«Íí˜_³úþؤbuÝÄ^·¾ûÙï{ò‰î͇UÜžçñ°7@ONT+·míüu››woz`&( Àv_:å{‡¾ðBïûó}ý“ÿñúw­.˼Sdqð™×{Ýzxxsç›ÿpÚË/X39“YÝÃ’$à%ïT?lš´}¡3QÝ6¾­÷©±Mï-¿`ÍŒ§ ì>f€—dÓ¦‰›úНÆ,}&¤8o|¤ºà‹w\ó×áü`³3ìCà%¹ôŒ•]|âC‡,üq¬³ÞÆÍ”Ø÷( ÀKvÉ™«z!„U³ãçx¾3L+…Ø«5MM•B|öÎÌ&Ä&ËU˜ °×z*-éLŽVß)­ 1kB!6)v;Íú^wüáYŽìõþ B‚©é9rIEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_5.75.png000066400000000000000000000025531430147706700257750ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<§PLTEl¨Ci¤Ah£Ah¡A{¹K‹ÌSdž>%Rp¬Ek§Cq®Ep­E‘ÕYnªDTŠ6Q‡4ã_y¸Jx¶J]•:b›=_˜söœ(„©§·ïÙó¿±=ô  ŒŽ‹B˜²ÏG/&§¦_Îì¿zýföí»÷¢ª 9?|œ›_ø´û‡½¥Ï’®øK¹—¯ä-Yùúmuíûº „ìj~AaÑÍŸ¿¶¶ËAèŠK®•^ßÙý£De7ÊoVTÜŽÒ!y@/×Çx¦5%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_6.0.png000066400000000000000000000213311430147706700256750ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢!©IDATxÚíÝwœ•åèñPQ&U@: MÊ }z?ç ½ƒ ÃTºéÝ,ÑDì;XPŠÒ¹÷îæîf“M¹›½¹Ù˜Íf7&êÜs ÙhÔ(*2À÷ûù<2‡™yžùãü>ïó¼o| ´I¨Ö¸sJ˳vÍJœs¨$qîáâ¯{ÄížÛ!å†Ñ/ç"+UHýkâ«5î”ÜB0S¯u¿j ;Žl~Öƒ!U0@•S¿uÿj:& àÓƒ¡ÿ¬g1^ þF0¤Ü' ªÃ5Ñ`è †‚³ ³OCwÁUL½V}ƒ†G4 ÀÇ\Ù²OаÃpÁTÕ`xQ0@UT¯ÕuA£±-IÏå`X" ª¹²eï a‡aWŸí`hŸ²¤[ôË©aE  ¹¢yàªk‡4=ËÁPÑA0@Õ;ÃpÕµCœ¯F,ÿ‡`ÌC•Á¬×*ƒ‚ý§7~PYÔ»f@Óþ3Ÿ-Lœsð,ÃÁgR‹~®h;¤¤e‡äÅ-ÛŸîHZÔªõÀ™=ìœ}úWŽ®8Z’Xqä Øëãg¿4?úµ 8:¤,é×cô¥}§?QÒwÚŽÓÑ× *{õ´c!¡dïì>S™}ýø¾Ów|ÁñÄøÞï› žk£ßJu« _±.9ú÷›ñdÙàyÇŠ+Ž|±qº[‰*Ž”ôŸùÌ´f=#ýš÷sõ—Íuq‰•€3 }g†Ã%ý vÎîžkVó>£›]Ñ<®Zë„é&.ô`ˆmAê3åáé2VhÐnàeM»ešp '· Ǿ}TÛ¡¥×F?M«: 5Ùp¡à9JúÏ|®°sæê‘-úMh0sepeËÞÁåM»˜l¸pƒáHñÀÒ½%½'=0¥Ý°ò¸&]3jǾ=¸¤^ “ x0” ˜µ+v°9§e¿‰Í´TýšA…ÁÍâL0\ÈÁ0hÎÁ’ë¦>2£SÆÊ:%_V³N½ Q§$ z0Äž­ÐcÌ£Û +ïP«Nƒ‹Ú+ ®hÑÓ¤À… ƒæ,î_ðìì.Ùë’Z ˜Ò0öïÄn™Z½FM ç_0_sÆ=‘š3·GjN¿;TsxIJv#Vµ1÷¢Ð꜋¢Z­²²2è7aH”ŠÁ-'Þ–=.´*%aì–äKSæ«>|öP“ 盼•©J }sÞ3ù—?¹oÎS‘GË?:ý®¬9nJ8ûЦYÛóÖß2tȸÍCzNÞ–9qéžðѵGÃo¯>þñ¢ûC+S“2§Ô¨Y¯¦ €óHµ9Oä­Z}(òÛMoFÞßôÆ©±16N„ߎÿŠþþODþ¸þõÐo£‘ð«µG"¿Ž~웿©Œ Ç#ÿ5õÎÜ5™KRª÷ÉïÔ¼J4À9/u~òÉ`XöJö·¢APùç8Ý Œ÷=:8y[N|ϼ.5jÔ»ÈäÀ¹,ñúAÒœ¤¦c7ef¯Ø—wdó›_<b#ïU<ÚÝolÇËë¶¾Ô@UÔâºæA·¬®óc"ëÒ‚¡…#›Ï{&禕¯…ÿφã‘w¿L,œ †7"ïÍ.úüøKtìe[T5›¿Cðï•;?òÿj\Z#¨uU­ ¸4êµoL»3+4sDí™ßÊ-¸qøg[Þúr¡ðßÛ’ÞŒ¼¿loä{oIÐ%µmuÁULZEÒÅáUI½&Ý–|Ýœ§òƒâG"AÁ½‘à¦ÿ]ìª\TV>ŒÞѤ`{öÜe{òþ9úFÿƒ¯">¼-iÉK¡£õÚ^|™Õ€*fú]™Ýæ>:²dwøµ²ù9…DR¦ÞZòX^dÁ®Ü©Ïd,Ü•÷èêCáßlþN¸ò«Œ…?]e¨\u0ü“𪑉9ËFT³"P…?”9xÅþüÿX<òîÊ×"ÿ~ã«‘Ÿ-ßùç•"¿^{4òÞºc'o—Z¹ù­ÈW ¾ÅêìÂß.¼?\ÝŠ@2뾌þ Ÿýhý±Èocg><ÎT |B0üvæ·C믿'ä T%™7 ¼,´jDâìûsÖ¯:ù÷/{%aÓáÓÝ’ôÁŠW#Ÿ6H»áʼnª”‹U¯Ù®àÞìÍK_ýðË^YØ †M§ñ|† '"¿›u_hKxõȪšÚMk_wÊ”5‡¿üs¾Ðv¤×ÿµ>}JhUzõnYݬœ-Ie AÝÖ—×m ž™Ô¨Y=È_›Ö¼ì±ìû7½®üдèxÿlÅŸžôüûòáÇlLtè¾Õ*++ƒØˆªÕoâ æSn )¼?”·`göì;3–Ì{6÷…•¿Zs8òÎÆ7ÎàÙ„7OMŸ{„ÿ2Þ85Ö¿þÝŒ»soîН?z}VYa…à‹ÆÂämiãæ?›³uÑ y7-Ø•óÍ¥¯ä¾´b_ä7¾ùåºc‘6ž8½Ûšží`ˆ~½ï¯|-ü¯‹^ÈývþšŒ„¼SƒúmXi8]±« oK_ÃîÐÉ8ØpüÔ÷¯ûÉÌ_ùxëäÓžß_üBø`xUZZÍ+k[l8]ƒ †ÖÊ_Ÿ*z(ôÌŠýù¿8Ûç¾ò;&‹ü¾èÁìG/oӤΨõ™AÚü$‹ŸGüä„ ©<©÷ü¡W–ïü|ÕÁȯ7½q~Cl{ӚáŸDÖ¦d¥-ÈhÙwÜкV>Ãe-›ݳ®«3j}ÖÔûC?Úüæy ¿kÒ—¾þÁügó^(y8kQôÛw¯UøŒ`¨=þæ´i‹_[ÿzäó5>|¦aí‘ÐÛ³¶gÄ‚¡feåË~àoCÑGv.¼?kÉÂ]áCk…uÞmGú«±ò@Þ3Ž˜Y“š”T>¼UæâT?ð)ÁÜþÓ¹Aï1ÃkÏüvèª)Û²FÏß™·wÃñðïÏÛ­IoDþ°úpøË÷„þ¡àÞ¼y S’.n3¨“ø$—·¾"È]‘”< úŒIª>löÀ.K_ ½}cýÁù|¥!öü†åûÃÿ8åöŒ©Ñ`¸ØO|>Õf|3gæêC‘Ÿmzóü>ϰæpøwEeo‹ƒ»&À畽4)}žð?×Á«…ÿ³èá¼u¶$ÀçW»â™ÐŽõ¯GÞ=϶ };Ðý¾~·ô•ÈßW<~±è¡œMoÙÍ’ÀçW­äÑÐæUÃÿv>\aØòÖ©g0,Øy³âéÈ£…÷çݘ¿.5nò¶p½´ùi—VV¾eÅàt ¾>¾ÁämY³–íÉ;°îXäwçòU…Õ‡"ÿ¾lOèX¤Y÷ç×½1§Fì{œu_8·53¨×¾¡€Ï’¶ 9(Û ¶‡ƒ¬%#‚ÊÊÊ iÎÈö¥æÝ†ßœƒ±ðþû#?,| <}Ô†ŒÑo±ºU€Ó ƒ˜ô…ÉíËw„æÎº/\6zczãaÅYAî—_4zcFÁÊ៟kÛ“bÛæ?7êåÊÊ·ƒ±[2ƒK[^j±àtL½3/ˆËíUgðõ=ZÏ~0w몑·× ÿçœ'CÝœ–UñtèîUÃ?Ž=쬪ÂúãáÿŠ~ŒŽ÷7½ù`ÃñÈ{ Ÿ¼šTÚ«v­Æµ,6œŽq[sƒ1›sëM»3«hžÜÿ¹!ú†ûÏÏ'ØðzäkŽ„}ÓýÇsájB4j~9éÖä™E…n­x&ÿÑ»"/,z!¼kâmYÓ®.às«ŒÞ˜ä­ÌiZöXÞ-«…ß>Ço—ú~éc¡G§Ü‘}å„[B5¦ß[shA¯KF÷º8¥"©zÉã%`€Ï¯zdmf÷òyw¯=þuìŠÂ¹ kD~3~kòÈa³‡^ûæj5¬õ‘œ†øÉ‰­ËwäÜ…wÎñg,|»mê‚]á¿·yèÕ>¼ | C ‡×™~Wú°Š§C®>þùÆ7"ï+‘°þx轕¯…ÿï’Ýùß){ípô†ã‘–ï ýÓœY·tÏéÖñò¶=«Å…†V›¼-T}ÐÔ¸Zm7¯5pêÀ ²&%¸ñà” ²òçÁ+×kŽNV¼:!X¾ol°ýíâà{•[N~ÞŒÅiÕ{†:7È]>2/mÞÆc7'[ ¨ŠF– ¯‘·2¥÷¼g"OnKzë/wPÚx"òþ²=áœÿlöæñ7ekÖ§S.é=nðEŸÀÜ*¾u½td ‹UUêü‘Á„›sjN¸%kFìüÁ‚]‘×–ìoÃñð» Ÿï›tkú àŠ6—̸'ô õ6ap¡0)±ÚÈÒ‘u¦Ý•ßrìÖܶ“nM+^¸+w_ÚüÝv¼¿:0±¿I€ URùˆ {ijPx~°tÿŒ ¹|@íðÊ bW«ÑE&8eDñÀ`ê™Á#ïÌ š]×Ì„pšxÇÀ`ƽC‚%Mð _H þ_åº ¸8¨¶õ»ùÁ’—3‚…ϧ9ëz›¸Í{.%˜ûLò%‹_JrÃ+‘»R;/x>µõ¼g“¯RÑ¥š€ Tò q±X¨³tOæäuÇò~ºáDø?×É=±úPîÞe{3—çoé[ß,À¨w¸W²,®ÆâÝéIkæýóæïD*?<Ö¿ú—h4ÌŠ~hu³˜>ù}.ê3ºg½‚û†÷Zº'óÆ_˾wåìíÑ_7GÇ­+ögÝ|ÃËãft¨i¶à“¾(©Ñ„›Ó—?’³cÜM)³§Ü1¬ëÔ;†Ô/ztxÒ#/+zdD’ÇFÔÝÔÏ9¸ÐL»+·y飹÷®>þåêÃáßÎß™ót­Æmš,Ø –íÜx`\PúX(˜r{–É€ M—´žµòVŽÈ˜÷lèl8yÍ¡¼•<’µlÞ³ùcç=7ïÙȸ’GÂùÓîÈêd¶à3ã›íÊwäì]{,òûMoDÞßtò säýÕ#ï¬>ygÍáÈ;óž ý¯Ñ2rÍ\`¦Þ‘|eáý™¥Kv‡~¸å­¿Ü)öû '"¸áåð÷ ïË^˜4'¹žÙ€ Leå¡`òíÙ]*ž ½¹ùOÁ°ñDä½õÇ#X¾7ïXÎòÔQ¹ËS2«S»›-¸€tÑ1h3¨m0¤`hýÂûÒ×mz3\‹†¯Žþ·ù»ÆÿpÙÞÜœqwÖ½å;ÂGæ>)mÖ§‡I€ EǤNÕÛ m[;úÛêå¥ä®;~/v…aùþÑ¿(|`ÂáÂû'ï›óÔÔ7Wˆü~ñ‹9[véz‰Y€ó\ݦ]‚&ݲ‚&Öh×ñê&qúf,HšºðùÈ¿,y9òË’Ç'~7kyÁ=rn.uó¦m+^÷o7ìÎÙ?yèµfÎsW4‹«Ö´{öm‡–õ阾$Ò>yÖܸHáÒ¬•+oÊݰõ¦ÔåÛo2gÇüþ³öÎN^öȲù»f¾¹äÅœWSç¥ö2{p«~ÑÅA‹¾ã/mŸ´0-¾h÷ì¥{‹J^.M(y¥t`ÙâAåGŠ•+Jœ{46ŠÏÛ3'¼qÑ㶦-2s`ãVý§šD8ŸÔ¼¤^pY£A“®éAeeeЬW~½®¹›Æ%Î=\ü™£âHqüìsºG–æ6éšÚâ’+šÕnÔ)ɤÀy¦Æ•-zÕkÚ=ûšÎÙë’ûÍ|ºäsÃÉq¤¸ÿÌgK:g­ÑjÀÔømâ/kÐ6ÞŒÀ¹ìª–¦Ízº¨uÂô^Ý÷Œî3ùÁÉ Ÿ/‹]9øüÁp¸xpÅÑâ%{Ë¢¯/,1 uÌ0œ£uL Ú) \›xÑ5‰…ûL~`fô yâÜ#%§ ÞžeqùߘҼÏèÖ«ß©4Ñp®©×ªoÐ)kmиsÊ%m‡•wé=ñþƒÊ”Ķ}¡PøH4-î7ó™ò.Ùëãë6íZÓlÀ9¢A›„X$c¬ š÷Ó0ú¦>éºéÏ4çà—…ŽÒc¿9ªå€)M?üù[õŸ4ë ®î‘g1 ÊÃ5‚†í‡_Ü!eqç£ï•P²§ä+…?Ÿg(é5aûôöÉ‹Ûüùs×½º[4V’¯lÒ5­AÓnY ¨buJŠ=­UŸÉÎTþZ陈…?CÏq÷Œm0³YññSçê6ë~y‹ëÆöm;´$¥í°òúMãr,T%»¤V»ºG^ûøÙ/ÍJœ{¨øÌÑâ¥{Ë;¦-W·Y\—Úu›Ô¹:.§q»ae©=ÇÝ=£ïô'ŠÚ'/JoÖ+¿®€ª …/žÙ`(Ù[—ÿ9í†Ï-jÙÒ¨n¡­S¾P2hNì`õá’ny['´ZÞÀŠÀ s,{µ$~ö‹eK÷•~øÖ«Ý#·¶O^Ü芽, \Áð7žÕÐgòC¥í†ÏíT·YœÃÏ >:•(írCZ“®™—uµÍÂÀù GŠJö”öš°}r—œé]C[N¼-éÝóo;`Ö®ÙŸøÔèSÛ’f·ŽŸÞâŠ=«Y8ƒ!úÆÀ¬çË»GnÞ4.·v‹þ“jý&Ôj7¼¢Wßé;fÄn±úI¯kè”±*¥å€©—Z8oƒaW4nû÷Û¨85†ÏŽ9Ý£Á0ýÓ‚!vu¢{þmÓ:¦.­geà<†¸üÛ†üõçj;¬¼ÛgCÑwÌj7¬¼‘•€ó8ºR0 -ë †iŸ ‡‹{O~°¬õÀ™­¢îœÁÐÿd0Üú ÁPú™ÁÐgòC%mµ p\ß`Âí A¿™íÎl0D> m†wŽÃÔO †èk»d¯´x}]+gÁ´o%Ök8¸~ 'ÂAýø+¿Þ`<; S?!¢»ky§ô“[öà.Ip6”=92¼è¥ôYåO%5Žý¹^›ô3 ;c·Uýx0$vúx09ùж¾Ó/ˆ¾&ûšÄÂfW¶è]ÝJÀ×ìW•Û‚åû2oYw,ïK÷d.+räu®NÎL0|ü Ã5ƒfuì;mÇäoIê?óÙ¢¸QÛòÚ'-ètUÛÄËbW¿u?‹_·ø‰×Ö\s$wϦ7#•ë_½½ð…´¤È†A5›Æ‰`øø]’ZœÙ¡ïô“£Ÿ§4¾hwqÑwŽkŸ¼¸ûÕ=Ã'Ï,4ë ê6íj¡àl˜ö­Ä.ÑPøûÍ߉TÆÆÊ9ÏÏ{.­Å× ñÓ;ôšpï„Þ“îŸ …þ-®e­:WUsgаãp gÓõÛwÜp<ôw†'Âï.z1}B‡á9ݾXp¦·$5ï3¦i넽Zôи^ËëNžShÖ+ßÂ@U0¼¬ËekæŽmI: Ñ_ox9cA÷Ììž_i0“Ò©eßÜŽ_Ù–¤¹GŠ–î+ë9öîü}'4­Ó°]P¯•CÌPõU?y[Õ¦‹_JO^òrF9O%Õo7òºj_é†?„¢—Kºç#·YïQMc¡rq½f檺oüÃØ“¿nÿ×ÉA4‚ FÆWû†]iˆ/Ú]7j[Nó>c›Ä¢Áì@7éš`ú·¡ ×üóWþ¤ç¿Ž†Ù/Å®4ä´è7±ñí••Î%g6N‚Ž/ŠEÃm9­^ߨUü4“‚á/cpÅÑâ„¢Ý%Ý#·ä¶N¸¾qìIÎWµfò@0üåJCBñ+¥Ý÷ä¶ì?¹qôSW«{µ§:€`øÐ™†“ѹ-»Eßñ'£Á €`øë»'•vÏ¿-»e߉ E†O8;ÓpkN«ø© ­†Ÿi(z¹¤[ø¦œk\Õ´GnpI½Ç¢¡dOI×ЖÜÖƒf6¸øŠ«mOÁðÑ3  _(ﺴ÷¥ ®©iE@0|d$¿2§SúŠ~—_Ý¥¶Áð‰ÁPW0€` Á‚A0€` €`\j5¬uj4ŠŽ&µpJŸ1ñAñ#áàö›¾;#˜¿s¢`þ;.²-=iá®ðªò¡EÓîÊ$€“úOl8ûþÌ-ëŽE*—ï‹üGÉ£áÅ‚8 7(z cÕú×C¿\±?ü£ÒÇÂe‚8©sJ·‹’Ê[ç®94ë†á )s†¶ ÀIGv† ÒR+†#f'~eÿ¶` €ó*Ž'”ì‰ÂÇ®,”-Püzaß™ûËÚ§ÜØW0€`89•+ oÙ¶ùúûnxtƽ žQ25ùâ+»×²" ŠãKß(,z´ìŵGÃï®;–W9é–ô‰AÐK0€`8\œPz¢°ðá¹;Wõ›5G˜pSæø š`ÁÛ’4çhQêŠG—†6oÛœ·á¦[ûM,rqýn‚ÃÇo«Ú1}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:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_6.5.png000066400000000000000000000056161430147706700257120ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢ ^IDATxÚíÝylÖ…ÇñÇÔáœcl.8ñ*º)s€–ú¼ÿû乂àíšIƒƒYO„ƒ)Mcƒü{‡ |ÄgûEãú|oÕÈÞÉdRà¸7\\[tùçÊ·å”—nŽDïlsZqSXèÎ&?œÌß™t<£P¾5çæÅ‡âGì/h/{*;2³1t†BÐ]%ÃÁ?Ó¿rGô†Êí9åµ{ò7´'ÞYÒ^x¬fw~KÙ¶œó„€nhÐøszÏÞ”•^»/ÿÑŇã¯Ô·ÅßJÝëKŽ[ú‹Âd]küµ¹[²¯T º™ëF“V¦»ð@¬éƒðñ[°/ÿù²ÍÙ—¨Ýn0¤õ.Ý”}]Ý¡xûÉÆB}[üµŠí9w—l õS º™Äâá}k÷ÜßОx÷_ÆÂáøŸ+wäTM[“qNp¶VÐ-Ä— nX12]ô­à®Æ±W-jí=Ù³ U-¹÷O<ý«ÓËÒç\—ôººXýÐ^·>0¦ÿwîW³;¯¢¾-þêÉÃü]¹oeL_úNáòg^”]_Ç÷,TïίZ°¯àÙŽïZ8ÙXè¸Ec/->?ºð@ì¹’æÈÕ‡“%ÁŒÆ±@W6kc¨oí¾üŸ5´'’Ÿ4Þ¿¿wü\r$‘œß’·¤x}è²ëÆõVº¨)«3‚YÍá ü7cácŸ–”x{îSY3‹Ödô¹ë±q}Ȫ@PÒ&¯Îè;{SÖM‹Æ~uJƒ¡=þμíÑ3CCRƒá33š2?èð gp­¶ð©Wº>Ü«bG4¾ð@Á/—)|óTÃ’#‰c m‰?Öî-ØZÜš 97ß3òÂŒªË{yã™âÀ§]qShHUKöıS '‡Â䢱ЛCEášÁç]òƒ§œ8P\ø´›²&£eK´vÑÁ‚?¤FÃ{§:Rÿóv]kìÅŠí9U“ù¥!wœ×㼛Πè&?š|ÿ§×ö›¾nÜõÕ»r7×·%Þø^ŠÔ1’©¡ð»ê–¼ÎÞœ•[x÷5}jÛC‚@WsÓÊ‘ApVÐsFSæ¥5{òV¥ÆÀ›ŸüÉHñ¿ÕìÍ_V½+ÆÜ-‘ôÛ’~VÍÓÑÔè.$tU¡ÚÁAqs8˜½1\°è@ÁóŸ4î/x®tcÖ•_ô¶ò…ñAñêHpkÃ8 ;(\:¢oíÞ‚Nö~††#‰÷*wF/}"üõÂù#‚ŒÔÈJ5€n¥rgî-‹ÅþË{RWµ+÷¡YÍ™çÌÝ º£â ¡´ºÖؑ޻p8þjêþRשrGtâœ'Â}ŠVgˆÝÉo’ó‚ò­Ùß]|(öÂGÆÂ[U-y»*¶ç¬ªoKü)5&~?okvþÔÕ§O]f4@·1(ñ•³7E¦×ìÉ;š ï.n¿ ;£åu­±—ëÆÞ(Ûš}"@§©f~­d}øªÒu‘!“W¥Ÿ¥Ð)™üqêÖ¦nEê– üÿùœ^¢V0åPv%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_7.0.png000066400000000000000000000355431430147706700257100ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢:3IDATxÚíÝwxUåáÀñ²d*ŠÈP6²WÈ„„ìÜ{nö ;¹¹37{ïÉ^²ÂÞ{…0’A‚ØÚÚþÚÚ¡¶ÖZ­ÕªüîI¤µNPßÏó¼ÏM" ä¼÷óõœ÷¼‚ðèè:Í¿Ü×T}^kwIõcKCƒzšÿFïçÌÂ3À ÓýË}w†€Í>f‚Àƒ¡œ`ð€ƒßF¯çLÃ1Ápç`˜G0¢nÆ`ð%Ü%6ƒáÁàA †P‚xpƒá'¾%É$„`Ü`¸@0¸C0nñûéƒ[’‚á«Á á @0|]0(†›,"‚`î»fá 6za¢[±q}ïaÔeFÀ_‚xˆ<7/ôñç­ÔÏOpÎ{a¼SÞóã+½"¶.¾*o-i¯§žYôë°Í){] ÖZ%œÕÿTÑ`¦­ÒM—ÏrÄœÞÌ,p‚aš1, *s}}¬¹¾á?Ã*á‚Ö­pu©îPXsQ£üóÅWÅÖ²—ï8nfƒBµ7ªÆ){[¶¹þÒOv[Ò4ßõ¾#Í£3³À=†['ÞR,Ø¥Nò^‘¾Eµ/¤9«Úë½ÒñÆ­@¡m¼,7~Þ>t‡"¤H5Ó5ÆþTWŒÁ š¼S9Á9wLŸã˜\àÞCÚ"îœÎ.u{¦¬4½«ÚëÝì‹>ïæÔøþÍ8ÞÉ»äó~ú9¿·Ödn‰Þ¡?‘\újì^Ý)÷¢uEVñ?ê£V5S«Ü‡N÷zŠÙîq0Hë2ö¤û¬È[¾Ew<îhÈ+ú#a-þk’v­OÜ›p"ø ŠOÚnEºúßÛ“¤Ï³/ŠæÕyÿ£ø²¢íjDq³âšzd}Ú‘¤/ßî$ 3m£RZ3q_¯ê_6vAêðîýže‚€{ Õ¦š“q¦Ú“qÖ Çl“'9ç®/ðYžºU½?ªÆï—]ÛbáöÅÏ¥WÄ›_þ¸°Q¼æ³ï–4Ë¿¸Â o-½"Ý¢äõ¾ßêü Ö çuââåKÓÎùüEÚ¿¡¤E¼™xÒÿw†ã‘M烛RújȦÌíæúÓzs}­ú^Ü–4Õç%ÿl´Ü“ÜŸ`¸ë“ˆbM5MJÕ勸óZ›Ä“ñóS'‹K^* Ù˜³%jGÒAã8 Eð†‚MÎy;²¼——¬Ž;zµ@zÒ’WÄ›ùõ^IQÑvu ^ÿJªýYØæÔ=æºz[Rƒj梪ñ.¹£™aàG †Û¯B´/b6Õ6)ÍÚ£Z¥5™®VmªiPÚ§HM;ôÛâfÅçe_Ú·áV(HÑPÒ"^—v.0F„ö`L¹®JcxNwëg÷[•êU¦ª3ú‰îEóz==²;³ |O~P0ÜùdýÖ ¾cæTÍþت¢ËâµÂF¯OrkýßξøFVuÐ3/ý>õLÈk‰á/kª.HW|W¯µI:o›t4Ñ5E™}úŽ ‡Ì™6I†ï †zõdq¹çp“E<^ø>†LWãsOõ]¯´¼gÁðß!.)[!áxÌ¥ð-é»Ý Ö:dìʰM>”lp<Þ\wAcª©S™j/ǘ难´èù‚Ö.eoš[á’eÅ%+ìÓ÷¤Y´]iøn»>O÷/·0k3 |KÝú<Óö:lv€0xš¬×x—\‹9‡ÕÒãHïu0Ø&U¤ïK3Ó]ÐJ·,µ?BUºÍHÚ¡J똵=KVºª,h]þ&ãëbKÃ}û«o[`m®oû¥Å÷Ù¯ÁøûÌ Ý§7ÑXã¯Û‰™¾ÁSÏ› 3· =ûè<Â4bà$Ï2W“èã1–†j­UüE͹ýèn ¤ÿg ‚þ’Ê:áŒÞkÙ’úÃÊšìêÀ7rkýÞ)hðþ§ôšr&ä—šª >+Š×ZÅWêíÓvdHx•Éú=÷cˆ·0sÁ|ƒA“Ý3õy)º¶‹?ÍwC™æœÚ&éX¢[áòÅE«Ê¾ËjVñÒmC'¤ïN·J¨Œû6ßãq 5f§¶"ÿ’ÏûÒBçöÐm›¼µ5ɯgW+>Pï¨w/ZºÔ:áD¼Mâþ»”]évɇ’¥øø®Á0;ü`Ü8§,‚øÚXxÑUøek«0t†wÿ ®–³C÷FK›©Y%œÓÛ%ïMµˆ;«·0\Ð~ëÑŒa1?u_ª¸8wÿšÄÝŽY;2Íõ—¾æ„¾Î {Ó GÃ/7+®Ý¾;tAƒøïÌ*¯¿§œöÿ}âÉà×b÷DWk¨ÎGï0“•®Xb¦kˆ§¾#=Êunl“ñÕ8ÔÒkcÛã]Mµ—ÿs»Ó®fÜ †…Yã à.žo/<ÞwPçQæ1£¦x­‘™ÄT¨èS¬OÅYÅM0ÓžÖÙ&íM•n3ºý €¹NÚ¯árÌ-¾ìõiþ%ï Ÿ|ó-H÷f7£á¢×ûÉ•¯¾”W>7rGâØ…9ã<òúž$LöZ- ™.>1Þ9×|vè¾hs]Í7,^6F‚¶!Ö\'=ñèh¢gÉÆBßUË—û­^¼*lsÆNí¡Øêø-©g~ŸS«øgq³üÆm –o] ¸nüø†´€ùÇŠƒ¯Œ«bk~½â㤠ß?$Wúþ)r[Âa3ÕÆ´1Žy]½ž%<9bvÛÇ#Ì£FLV¬ô˜§<¥úïz‚ÛÆWÌ´J»”c Aë 6hjÏÄj̬ò{Kº"PtYü¼¤-ä­?Y|Ï!Ýö”Réû†×Ò%+f,: ç”M0àÑ$í­ é7dJ÷1 RfÍÚܾ°ùnWª5ö©[²½—g–‡lJÙm8]Ÿ_ïýAÙ˲¶'Ik:Z Ü> ¼>Ž;¢¬u+Ø‘==h—~ŒCê8Þ)xä ›é+téÞ»Ó銧&¹—8Î<m¡¯ûÊZKC•Ö>mWºMÒá$÷âìu¡åÑgNú¾žwIñ‘´P¸ÃG‚t[ÔÅ싾okDŸ÷]–¾Ö,j‰r¢ÇRgcDM6'°ï<ôz<1TxüÉáB÷¾ƒ„çL ýGÌé:ÊJ5fšß?SÕÙö'µ-^¾µBÚ:¡Â`p$Ñ5¿`µ÷2ÃîÈm!õñÇ~ݾËrÇ…’fÅç Š¦žöûEô¶°=îÙjÃT¹nþ3å¨AÓãû ›ÔÝxØ:ÐÚÊ›·Öö“ÞÎÆñ˜ô:h²ëã²Ìf‡í‹0×]l»ª mžfZ??õX¢¥¡Vmi¨Ñ,ÌZŸox8É9wM±¬´`MÄVåiÝ¡ÀWK[ä7®Ê[ó.yýSs ¶Ê=/oÉ15pØ,ï C¦9õúj¤c$X'½"¼`' œà(të3€7n}Ž}|¼KÞŒÉâ ë)ŠÕ–S¼×ÊMb*”ÒU„/®,ÄÚ$M°Š?œèYžkW£6ןŠ3Ó6)Û•Ú¨´0œ0x—®ˆÝQWÔ$ïW¤Ç¹&Šx9r»á¨ÿšœò€Õ/yį´ˆ S ™á=ZžìÌ»œ¾ƒ&ôŸ´-h^le‚©ú\œ¹®FÛþXÔ*]Ê¡ä…YÛ³\ó׺¬-vÎ][$/[±ÄgEö¦MÛ_ÊÛµ#ñPbEdsò©ÐŸ'Wþ¶¸¹ãÜ’TÒ,Þ(h?M;ô›Ù[­Ž&È/^®=Ò¢;øË°^‡EÙp“§¡?Á€GOŸA㟜²××L[«±ˆkˆ•®*HQp"²9«:àÜÿ?çÕùÿÕ8ÞÉ­ó;ÿ’ß»õ¾ï6zý« ÁûŸEMŠK;&6zÿ+§&ð°ùfq³â³Œ \´!k›×²•KÜ ·äµíQ¼º4b«þ¨þHð«ÚýòWü–8±|ºë°¹‹ŒGª?oå)Ú÷Jh$jÛ¾/>阚¯ Ù”±Û³d]±¥¡Zc›´/%«ÊïψkÒ~ …òkYÕ^ï6*>ù¦?/ýÎ9åo+wx䊮C]Ry£àÑôøƒzú-ÉŽÞ¡?Zž±Ã1kg¦¹î¼6xCÎýeMreè«ùõ^Þþá;âø®ñ“U%ÿ[ôV×Ô…Ãâx³à‘ÔɧÔÁ&f›çí>ïŠøcWt‡#ëÝ‹ÖÛ¥NrÌÚ—½S[QtYñéÃt‹Ò·R$å_ÿ¡Ýë±Ö)qáó¼UðH4crg×ÔO)·Ë^Ôî“í(¨?Ê©ñý[øÖ”}²²—JüWçm̾èóîÃp•áû\•H:.«óÝf¹g.äÍ€GuŒ•°0ÑÎFw@~:§FüÇ­0(io5‰ŸK‹ƒËÁX¸ igä¿YëáçšîØ—w Ib¡ó4ýA÷Ô´Ó²š¼Kâû¥h |e̓qäÕ‰ŸÅî”U¹Ìå€G3 œ¥—Îò<×qªÝòEMâGj(H±dŒ¦ÒN‹¿J8ê±ÏpØU«Úíé°ÌíÞ)x$Érœ„ß¶f ÞÅÝ=³ç_’ýõ…ëge¿ˆÜì³Cëšæ,EBçÄ“>‚ÿR7Þ(x4Ùk{¯\0+îl{úYÙëÅ—å×™Pøb'ëÂ&ñZÂ1ùYßRËHëg5ûDc$¸ ó‚¸ ¶N‘ånšìjù¤…ÎÊúi”^[ êÅOòêÄ÷SNÉÿ¾Á3ÊVåØy^ï àV0¨v¹2ÎÉg †›ÿ³ÁÙÕ‡o}Ba£øYöEñ=ãïû«” Ϻý2}ìE€r»|Qð*ɼ€ÛLõ4ï´ÊeaüQù¡ÔJñ—yuâ™äI?+«¤Yüüa †¢&ñÓ„còcºƒ ÇE/ÉæØªì·¶¶ ª] !v§\0oàv¶*[饓ßÏA1Û£c¶,˜£Úå6Ù·ÌÑU½ÛíXñeñÓ‡ä ì ²Wý—¹ºÆ <³ cìÆó¾Étq¶¶ÞSÐìUM­yBAc  tÞy¾fޘ䓲+Ëú†’fùÍŒóî'¿rwføºè*Lq{Qp4Ø Ï[ ï©?(;_üÜšTzEÞšSãVcü5{3ÓÀ÷dc%XE™ [ïž[+þåaÙý¹-.ºWÅžÌ2ð=YEÎîì¿Ô9.ó¼ü͇%ÚnIj[³«<ÎÅÌ2ð=Í œÖIÌŸ?!å”üåÒ‡h†¢&ñzZ¥l¿ñW|ŒY~€ñöûj÷ynο$þóa؃!·Vþ·¸Ã²½+ÜÝ™]à‡è*3½¦ÖÑ&ÏÆîôLÉ«“¿SÖoM*j’_7v¯wN¶3qKwéÄ?Ð qª`¯µôÓ{$•×—¶ˆ×;òU†‚zñý—<“™Yàé6 ›à‘iÝ-d­sZQ£ìã Eo•-z?ÅÄ÷*¬¢­;/L°1M?ëù³ÂFù'vC‹x#«Ê£n–ÏìÌ,pXFZ ¶±f]<³Ì†G”»§ç]’¿×Q£!·Vö®w©³Öøkuff€{@ÚÄMžï$ ˜8²“˜g=*ý¬ü÷ÒÉ÷â«+Š›ÅkÉžuþK]Ý« Ü[“ݦu¶SÍ›pÄusJ…¬9ã¼øûâËâgäv¤›™çå?÷Èt´ñ.qºöí΄÷Ò ÅlašlN·™ÞO{—¸ORîSO‹¿ë ¶}wHvÆ5ÍÞMÌw´´ ŸÖ3r“¼‹O‰3·&÷Â4ù,a¶ß\aa¼­¼ÊUZå1X·_~ÎxB~³#lÜfŒ†òëeɹ(ÿ}ÂQñdÔfù ŸR™Ð¶ë€{Â^g×Ù»dáÍ^Ïõù—Ä:Ì:†«bkñeiƒøŠn¿¸5v§lïbWwã¯Ô…YîËHËnŠÂ²œ‹ò¿w´§$å_’¿¶^§Ù+všìúB¿Å®ìú ÜKÃæŽëäUè0ÂpD¬ï·#Ý%Íâô³òyŽëxé÷èöL7&¸—Z[ëË(«.þK­ÓÎ(~Õ‘‚¡ø²x#ù¤gE÷§ûöe&€û`¾Æä±Àe³ÒN‹-%-âõ·qÛEù¾Kœ™Ià>Yëô„þ ¼¦´¥nÜvY¼žRáy|¢ÓäÌ$pDoõxò’“Ü/½‡÷ïä’l24µRöJQÓƒ+RI³x=¹B‚Ïb÷žaëÝ J¯¥N½½;÷уt$ž9NÝ‚V¹™%u/É­ÿ~/£!û¢ìØîéó5ÃŒU§ß¶,#æ Š"'aaüü¶à&8 )g…yÁæOFoqϺ þõ^^e(¨—˜yÁ³!ñ¸|WàrGW§«þ–Ñ ºÌñ³|Ì.v<èÆÎŸ"¼Ýê#¸g.µÙeGIKûÉþ½ ‡Ò+bkI³x³ Aþž1ª"6º¦* }]’íúqô€À"ÒF6ep§ 6s2ÎÉß*h¯I'ù÷z!´1n7‹ŸÅîpßï–a3”#t ²Ü…}ƒW{xéÈÒ“N¸Ÿ*½"¿÷»>7ŠÿYãndõ8Gè@äy …õÿÈ6“Ž»Ÿ»ÁU-¾¸ÂÁqÄÜ ]8â@ÇÓ)lÝ«ÔÓò·²/Šo6ŠŸÞ«XÈ8'{K½Û5À·l~_3ÐA¹¥™÷ómg,Zãâ•|RÞ -\¾Óbæâæö×[»:ýFnòÖ¨rGý°¹“zú/•žÔ tD­­?o{3FàÕNî©•ž¯–}EMâͼZÙ›ç<*“+e»3Îɪsªe¿É¹(ÿCa£ü£¯{Z’fër—«a £±úb|ɰy“l‡Ñ±;]åÕŠŸ¤Ÿ‘7$“-[ïî2lΘ'¤³uŒÕ0Ïlg ±ÐeAÜ!Ù¶ÜZñS)J_–Ö?ÈÛѺø‹‘rJþ—ðõ §q°€Ž oÿrÀr×Á›\£µ{Ý£¼KÜ_„º…ot&.œÔößèmy¾³àUì*„®ó£ÝëwÈm¹áËÃ!×åñ‡=ö¥™pÌó\Ì6רµNOr°€Ž nÿòcO 1~môD£ÎA+=³Ë»þˆˆMžBkëa¼£iŸÓgôaaÒÇ^ï40z«|¼¢Ðå9Aèߥ¢µ„c tÐ`ø ³0SÁtÑ<Á$pî·ú1£Ìž&Ø ¶*KÁ^g+CAPï‘ Á«Ü‹Ž3Àýòì´ç³PSÁ=у<ªëý˜Ðå‰.B×§º ýF>) 5Rm=Q{Ifü¯½;ÏòµëÜ_Xî!xæ8sÀ€G…½ÞNpˆŸ/Äl÷Z[›„]Ÿ¦K_îlÆØÍ|"h¥³¨Üæ–¶Þsš¢Ð}´{¦Ó35àÐ¥_Á:Ö®³µÒf”Xàd®Ýë±ÑCÔìqNˆÙꢊ?â¶2«J|»ø²x-íŒøú²3>¥®¡‚Їƒ<´¡ðDaŠë˜¶}Šç÷Tn÷Ø”~FöZþ%ñ³ìjñÝÂùͼ:ù§%-bëâ«bkÙËí¯ùõâGa< ¡{ïOÁ^çÂÁªXè×E˜ë7MØø÷"Á)ɦç|µõó‘åžK¯ˆ×Ë®þo H¯_¥-âõœ‹âï5{åkÁb †ñQà!ÑãÉ‚cü!±b‘àh°¤Þ-Û¢? ?¯Þíy±¤Eüüö@øJ0\o6z}šT±è5ל´Å“ÜS¬8ª@7`â¡ÇÀ~BäVaºÜºŸO©ëdÕ.m ò¥0Žß ‹¯Ê[ ¼? Ù”pÀ!cšIôÑØ .ù–] {Ñu–ôò˜qt–å9ÍUír/I>)k)j’_û¦Høò(hðúPX}Á.åH¢E\ƒjnÔ1%Átü`xÆpØ-;õ´ÇÆ´3ž?+lÿý]BAÅ—ÿÖŽ®µM>–`®oˆµ0Ô ÀÃÀ1aÁüœÙJš¿[$üïÕŸüVç”›é.+-â.©à!¸Â-9ÿ’ü½;=õèÛŽ¢&¯£wêOX'œÕ[ÄÕ ÀÃ"l½gvA½üŸe? ¤‘_ïýAä¶ÄCfÚjµ…5 ÀCÁ#ÓijòIÙ™’fñÚ †²—å­¹µ¾ïú¬(^c¦»ôE0äYööŸI0ÀãOÍ&9L{ÒpÄópÀÚÔí6Igân¿Ð~‚_«vÈØ•á»*}[Êéà_ç×û|PÒ"^¿ …ŠOÓÎü1ã|ÀãG^ö^¶d¥uÂY½¹þ’ê«òå`ˆÌ, ó¤—.ŠByDJ¥â7Å› ît5à¿£Î8.ªm+ ÞËJV'U,ú…tU¡¨Iv3ù”÷›ââÂ56‰'â­Œ¡Ðþg/Ýu´­aðÛä=Ò,‚`$':´½Ÿ8d´Cž…ö@й¬jï¿{-[¼Ò&ñd¼E\­úëNö-ôõ±öi'4ûc«JZä­™U^-׳K>˜l÷uÁqÛ¿Þ#L à'7xŠ»{¥U2]ì4h²ëSãsÌfí0WoKά x£ôм5«:à͈­‰íR* _w²on §œƒ©ú#¡-IaW}W-])]Y¸ÛíG_ áðSéõÌha”•ZèüXc(¸õmg˜9=`³¿ILE¬¹î’Ú­`uiJeÐÿIO4’6i˸à÷¦¬tm©¥¡Fs÷þz•mÒé8YéÒ¥Ž™{ÓM5MJ‹Û›úíƒ!Œ`~B†›K¡0qŠ×*o“è“Jsý­[ŽêUóS÷¦9fnÌÓŒ©)jR|*-dŽØj8b“$­C¨W}ýz†Zµtµá»„ÂmÁàõܼ°ALð#èÞ÷Y¡ÇCþ3ºôè# ™&ï?ѽÈaNÄ!¥¹®ækêÔú:õ‚ô½iÚƒÊêÂñßÊÝQíS¤˜¨•fºFå÷ ‚o ÃMB àÇðX·ž]…N7~xkô>'pʬÐ}¡Ò ú]Oà Ò•„•Mâ‘äøcÁ¯%žðùCÜ‘¨ÆØ=‰GÝ 7XŒQa¨¿§Ã2¾QÓ ‹àÇ0l–ÿ¨ñ.yî3ƒwŠ3ƒwˆ3ƒvȯAóbO+ïv{‘©êŒfæ¢Ý1S}×ûM’-[è’êã¶ÞY¦Ùã²:·Fþ~êé _Û²§ù®õ™ê³N1Õ×8|Ö‰íã%iÈÛ†÷Zùïµ²)ÞkdS¼Öx¶ÕƱÊcŠb•ÇdÅJ÷ÿ q…›ô:fA²Ùiò'˜9àG0t¦o¯qÎ9–³B÷ªÍuu溹¾Vc®¯W9fíÊX˜½#Ë6¹Ò`_¥µˆ«QKO52žøGŽuHÿ¼•ºß€1¶ÒU‰Î­­­ÂtùôQ1ÛÁ%ßtNø¡è¶õ qõ*U“2vþdÆß¿ŽE5FnO<´hCöß•e«¬ Ç;Ø>;ɹÏT¿ ÂS/Ìúé'<Ö¿S'Ÿ2×Þb¾[Oãîô̤ǺÝ…Îãò„1öIBÏ'uzÎdQïqNY¾nŒuÌxf”•º¯ô3FZÄ#-¢…f‘Æ! ›å+ œàÀÄ?¦'G˜ôï’o6'âp´…¾Nc¦kRÊJ×”¥ž y­´E¼^ö²x³ôŠx³ Añqä¶äf±»ô=–ÙŸø¬tbÿì‹ÎÂø/‹Öº Á«<„iS„©î“¡«ñ¿öj¿ 0dš¼Ç 6Z«AÛ£nÓwDN Ø9#hGäô€Íª n…NuïÝ‹™O Ÿ) mÙk¼s®ùœˆ#Qq—ÔfÚ†Xi…„WŠšŸ£¡UyuÞ¯ÏÝb¦>7Õ·Üçykí¤þ£æuž0G˜l"Ì 2iû™Ývº èÆ¤?¦­­BßÁ“Ÿà–oa½SmW¥5ÓžÕÚ$I XS¸>©"üjñå/¯kðy?îHÈËQ;´'ÝóÓVNòÌw2+x°ô¸Õ‘f^œQè>@ÑmÜ »¯ÛÍÙ\ßë±'kaZ‚jÈ´‰çZþçßä”l/]†uë3j|ÛÚÕn™4@P1aÀ­÷Àq“#f÷œà’g1'òx”´^A^¶|©MÒ™¸ù©»Ó³ªüß*½Ò Ò(i‘·6Š×RÏøÿÑgiò¶y9ʱ†™Ãç¸=7Çßcše”ŸÅ×|ñîÁ -€>¯ ß’¼?å”ìçQå®cíMn-|î4_o7F·ß%#¥Â½\·_fˆÝå©ô.¶7›ä4­‡Iàl& ø± g+<ý‚eÏq s,æ'®NŽÚ¡<ïVøR‘©¦.V{@Y]Üüß« ÿƈH=ëóçÐò¨ó®9É+L¢w‡ZhÊÕ©E9s£ŽÄÞ-¤G¹ºlÉMªýYéykn­üOI'ä»RO˶dœ—íÍ8çYWØ(ÿ´´El-h?1‘ýÖ«È>Ø:zÞLËð9O1[ÀO`ÈT™0hŠ[÷1ÙVó“Ö%Û$ž2XÄժ勗,Ϭ ø“ñþÆíÑPbüZæù‡qGZž|À*¾Jg›|*ÞªmÇè»C£Ò%okNâɰWÊ®ÊÛ~Nq³xÓ8¤Ÿ×úå«‹¯Š­… òOóê<ÿ[ëñÇÈöC§ŒêÎl?¦áB¯cŸâ³Ék^ìi­¥áX‚¥á‚Ö9wkvJå¢_–Ü1ä­Å—ÿVíU^°I<šèœ»lñ‚ôíY_wKÒvoÜ©à5ånžc&¸ s,˜!àÁ †öÅÊ·>6×ר}V¯É©ñy÷NÁPtYñoÍØ*é*—×-üïz†Ûw€–^/hMµ5mOR27~¯‰ªN3ƱĮÏ‹ÞL ð ÃmCZßà»jñª¤S!?/¾¬¸ö?Z5~®?]gªmˆýºŸqçpøâï5Ô«æFŸˆ›àš?£Gßg»05@ ‹¸µ¹®Nå˜u 5dSæöì¿¿J;5K£¨I¼w$ªÁTÓ¤´Ð×Í•…¯ ’Õô€-Ñã3FŒY$ô9—Ù:F0Ô©­Ž%˜ë/jÌA`p^绢tMÒ© _%U„þ<þXXKÄVÃëÄÊ8«øÓq¶I'ãM5J3íeåWã¡^u§ 0ƒzªÏK/ØèÆ>û¢sã¿­óD·Bá™qvÌð`ÃW‡U|•Ö!cG¦E\¥~~ÊÁäà I{ G•5ÚCêóºC±Õ‹6æn—¬.³M>o ‡s]£1•Ò"jë„ ƒ™¶NeúEP´¦Ø¹Q•ªÛC§z¯u{Q¶döóVêçï7¤ÛÅJ¡gÿÌÐQ‚áÖÂféêƒKÞ¦|ýáÐ+ Š¥ý¤QÐ ~šYå÷–jŸö´÷òÅ+奫ʜs7ç¯ÏÞ¢=¤¬QîŽ?°¶p½ôµ…ÙÛ³Ü 7x¯)Ÿz<Ñ\I=OyJ;kÑîÐIž¥óGÌ ` †ÎLЂáÖ¾ vÉ'<‹7†–§íξèõiMCéñFûúŧ¹u¾Ë­õ;»&à­üzŸHû7_–öoðù ý\àë‘ÛÕ‹6Äð^ž·Þ.åp’™¶Zeª:«6‰9¥âµ:Ú £ºôèC0/ÚÖ%Äši›”–ñçuÎyÛ³eekJ#¶&ï7lÒŽª×ìW^L8~%û¢ßÛÅ—Ÿ–´ˆ×¥˜hßñYÖšqÁ÷Ïê}Ñ5êý±Uá[ G­bãŸ3UMi5ê¹y¡MqïÊT6¾|›’ô”$ióEMâyuâuB•VzuÌÚ“¸.§\½_s6þxTcbEÄ•´³¡¯¥Ÿ ùMê™Ð×rjÿ’xÒïþ˼\:õ²h‹„C­­Âdùrf x‚áÛî¿`®¯3ŽZµIÌõÜðõÑs#_ŠtËIÍð^µÂ$8Èûɼûõ~fŒÐ¥Gf x´‚á¿Ræ»1`„iÔ”ásÆš=äé•CM4l¦¢Ó<ÚÁ ™æ·Q1|nðÀQ–Ja”e¬0Ò2F>7P2CÁìƒ1L b*‚`‚ €` ‚`ðÀƒ×s&!@0Üaã¶¶`%‚ánÁÀ€` ‚`‚ €`  :X0°@0Ü-æ… Á@0Á @0 Á@0  :~0øƒÁ4œ`†;ƒ÷sfკ €` ‚`‚ €`  ‚Á€` ‚áÛÃ&ïf@0|5¦ûmòI0ï0 Á@0Á @0 Á@0x ƒÇªÃ×nÜ6Ò,’`†;ƒÏHó(‚ €` ‚`‚ ‚Áàa†è!L@0 Á@0Á @0 ‚Á€`@0 Á@0Æéþ›|GYÄ Á@0Á @0 Á@0  Ž`°T ÁpÇ`ðe¥ÊTÃÁ’`‚ €` ‚`‚Á C¹ß(«X‚ î *‚ €` ‚`‚ ‚Á€`@0 €` ‚áƒÿóÖj‚ î Ø €` ‚`ÀÃëÿ†jfËE.%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_8.0.png000066400000000000000000000423541430147706700257070ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈáiCCPsRGB•c``<ÍL ¹y%EAîN ‘Q H 1¹¸€7`d`øv D20\Ö ,aåÇ£à,Z¤?±H:˜ÍÈb'AØ vyIA ­b'Ø@3ð…9Ù>@¶B:; ‰’Zœ dçÙñ¿åÏg`°øÂÀÀ<!–4a{;ƒÄ„˜ÊBþV†m—bŸýÁþe;T’ZQñÓwd(H,JK3ƒ4-áÓrÞHá \Ñw€k10 I 'BrØ6„£G³ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/ IDATxœìÝyx¤×]'úßï¼[íURißZê}w»½Û±­ØŽÇŽCl:™ ˜ \ÂÌd˜q2 „!Ã{Kà’Lô@ˆcìÄIÇk·Ýí¥uK­Ö¾KUª½êÝιÈ;v/궤jµ¾ŸçÑÓné­÷ý½eõó¼ß:çw¬˜­÷~âºØºëoÆ[MRR­èÅ… JfJä¦{_>ù­O<µ¢×†UKT»¸r!0Ày!0Ày!0Ày!0Ày!0Ày!0Ày!0¬(£Ú\€¤tÉÕ®àR 0Ày!0Ày!0Ày!0¬0¥} °j 0Ày!0Ày!0¬ ö„b&Uí: `•+©+eW»€ÅB`XAé3‡g<¯\¾«U»€Å@`XAùñæRfÞ³ó’ÅàʇßR€•%ËÙÑ´tœ2ayUXVXqî䜔vQ)®x +l2u|Æsryß©0ÇàJ‡ßP€•64T±33iÏ.º+ù4æ³ÊÎŒÍ:¹‘‰•»*¬vzµ X‹ŠsC©hÓö)%Z®}‘’ìz%åæ§ ù™S½•âxÏÐb~y®W#€*ÈLšJn¹³¨{N\×LiÏ.ˆX²k—É+Îó©3Ãå‰ÞãC/®›!ú’\ÚkÁÕ  ²#Ç2va:ˆÔ6‘ ’Kô/)Ï•ÜL¥\˜ÉŽ÷ôŽ<óçCD„ — :T%=9­ßÔAJi ¦%ùJ²›õíÌÄh97q²÷ø—Fhl¬¼µÂ†ÀP%ó©žéZïÆ²R2Ä$.;0øJ²r‹²8;ªä&ͤ†Ó‡¾–[ÊZaíB`¨’ôÑǦ;v¼¯ këL3B—6kh¡¡ÙsK²œŸÌ—§{O¹é¡žþC_+\â‰. zÜRz2ˆw4S ¢/zÅ{%Ù¯äÙ-çòùéÞáôø+G§^Þž"ú‚,9€*ÊÏõÏF[¶¹Bè!ÉêâÓ’)ÏÉìäHnôåSC¿4BQ€e„ÀPE^yr¬8ÝÈ „Ã=–¥"_ªJqn~`ð›#Ôßo¯DpåàGyDT»€¥¤W»€UŒ»é¶ê¹^Ÿ˜ Ôµëw Õ¾dÑß‘ªvqKà2=ø©5ò#‰oGËÖË ‰k*¥ÊˆèDdW»>€¥ U»€Õê?»½«¾#ðé–õâÞXRìÔ4¥— ÞÔÞ÷môÂÚf†ž*U»F€· sì.þOï‹Hvï4î†bÞáRÁe©¼šÚfýƒ‰ëóÛv7¼§Ú5,€Ë09=iH©Í …uC#Ý´ð§F°Þ«õwW»N€· à2<óçÏd•¯¾WÎiƒV@#ÓZø²1s)Ÿö#üömíÕ®àíBÓ3Àeèþhw,1º£µ´N½a=$¥ˆ!Š5uê?'‰èóU+` 0\¢[?vkÃöÛ®o5~U7Þºˆ 3±S‘ƒÇäKÕ¨`)!0,R÷G»í{Âw¶o±>‰»CQª?çL¤¢&Q§µ¬p‰K˪,ƾ}Ú­×û×vlýiMƒväð…7 ŽYÞºû=›æ^øFoÏJ• °Ô0°vÙ¡@غ¯¦A\#´…^… iLd²Â]Ìù»é´4¶ Cï[/äÊtà€·u¼]aX„ÈŽˆJ&LŠÖ[È'S3Î?ÂÀLd—©MÉ¿890ÿÿ ýpH^èÜÿæ ¶¬k ÿJmú­D=ßzíN­µë¦®ù¿=74tá×,7€E˜<2)¹ÄØtÖ;n̶Ú&}Û…Ž/eýWŽtþß'>ûÄÐ…ŽûðŸ<¸»µÃøÝÆvíçãIÚKнñ¤q¯nè¼`î鞎f—ôF.¦$,Òúê¢Ñ¦Àû:›Î{9e*• üÔd_åØÔvK[P·t5t`¨Ò¸{wøƒ¿½~_¬ÎøåX‚öj™gÓtÒkµwÍÔÄÞý“Ÿ}`ØŠæì‘3?xâ+G‹Ëx{ç„Àpû>½Ï$«|"i6=6þÕC_8”/$E1äÃJòGÎ÷:&"Ï#¯RTÅõmEgÛÿx`¯Ð´ C7jhW¡è¦nØðXÛ†èÞd‹ñáuñ9öƒ6dn¾.ô;J’$fÖDÛït}í—¿ô™•e¼m€·@`8›2u;¯Mü×pTuÄ’í·oÙüš²µ̼״(z¾×)E S¤±Sû…pMÛm j„©“‰Yh çŒlCküÃÁˆ¨ÕtŠž+, A"gÏ­ Ü“!õu"B`€…ÀðFÛ·›¿ü[w[z0¥.+ÈñÆu´¯¦1tWvNõDjÄö@èüˆˆ™D0Lmµ1½1D"ILÉÅ”â¹äx®Ê2s$V'öÌMÚõD”'¢‹¬Ñ°tÐô kÚ]¿ù@ë?»ýºàæšé±¹1ícŸ¼íÚ?®oÑ4,-Ýàp$ΦEÜᘉÞ2‚pž…s™•/M ªÏyŽ:lZÞìä™Ò«»oœëééA`€s ¿²«ß]»«õšw×|À4Dm¹DYÓ”7Z!¾qbÐû¼Wö¼M×?ŠRcµëtlªœ9ZúØ+G¦þöÈ_qiá¹ AV¦$ÀZÂÛnMü\MRüŸ†I‰˜O¶nKÓI3 ýS¹´6/nºÐrBéŠTCƒ¥‰È%„¨X3ºîÞÙPӬFÓH(¢ÐÙÇðHœÛBn¢zÏG®# L,Y°Eι3øó²û'"ÊU«&X3Ÿ<>=¾o»Ô5"È5oþ¹Ðªûl41 ÿu~Ö&^g6øU²éÊ`Ñ NU³&X3îÿÄýëAbqåMïa"²‚Zk8&¾óÿüôÿ>]ízÎB`€5áýŸ¼oûÖ[ÍÿKêï1LJ,çµ”"å:\a&2L\Ôkˆ(šàmN¡\OD pÅÕ.`%„êÍ›¢5Ú %ηYÚÒPTÈ…†‡úÚ¿[*'™?˜aU¼T,o¹é§oŠV³„+¬ É&s3G–{.’ôÙÏÍdzóMcBøÖ¥<÷&óú=‰ÿ~ûO¶~õCðîÝôžÕ úðKWµíûº#?õ?Þ«Q»4ýõU‘–‡¢B>42xzóK±š|M dשE^™HJ"VZ,^'î Çô›˜| °œÕ,zàªvÃ푇êÛÕ/Fbn¶\×aVdW´ÂÔXëKósí3]›z÷†´Þòù¬zë† ÌŠÊEÎÛ%ÿ{•²xÉ)©b>]~ôÛùýÒrÕ °X pU‹ÖšgLK+’PÆr¶¸Ž°ç¦’/œÚór}Ó™ÖP4ßÂÌtÁ¥È±©\ÌÈcÙŒúZÿ‰ÒþÇÿ¯Ç'—­H€Ë€f¸ê}ès÷m¨©¥; ¹·®UO ,:„ ƒ‰–âiH9-71Úrðô‰›ž …Æ“›v¾zo]ci£ÐÈ8ß‹˜‰2sj —rÿ¸4'¾÷Å¿¤#GÜÅ^´û‘nýÚõÆÐ ãQÏ2×ÃÁ&+¨'Bq£¹qN¥gŸŒ$;*³jVøÌïmß%¬Y °Vhݿڬov[k[ë>TÛ¬wë†èŠÆ©í²7lSD…¼59лõ±áÓ7žHÔŽ&7lᮺÆùkÌ€ ^¨_‚™¨T üÄû?|÷w{¾Üßßo/òšüÑ?zoc Îøp¼Á|w0";,‹’,Ø "ˆ ßSÅÂ<½šó^QJÍf¦sßžüWÕ{à‚\ºe›Çp…QC/9=?ME÷4?[p¾¥­ÑoÕt>ïHÀùHÉ^>:Ýõtf¶k´¥³gÓúÍÇ»ë›3×ê™ç|/""Ï%R¾Êór$Ü{õä÷ÏsÝû’÷YAaþFçããñZÞmY\¯é…Æ–ÐÈÐ #ÜUӨݯ×îŠÔnpãÆàñ'z.õ>`Íúá¬ÝÐܲó‰_ „¸yñ³.˜ùžpf'¯L6öD¢•Xç–cwµtŒß‰Uš™Ï¿Ëƒ]¦\1'‡+ùb¹Àߘ’_9‘ùÛo}öÉ©Å^¿íÆ6 C°¦µÅ“¼‘ùÜ«^23“‚„arS ,ê×w¼zò©3³‹½šž`mñ†ÀM“ f±¨°à¹äºŽ–·+Vj>U×;=Þ8¼i{ÏÝ5u…-B'&Åt¾ÙÞŽMÅBV/ÎûŸž¦§ûŠÃOüÙ£—SøÏðïÿÄ݃E/¯¤‡"âæº ÑûˆèÄå\Ö.ô0ÀZÃöÞ÷ï¸9ò‰HB\+4>÷ô¡7’ülÊͤ’§¥R2²±D¥1-· ñúŒ é“_)QJ)i+Én!ýғ¶/é¹l†þé™.ô?öØâzÎSûƒŸº©aûmíOr·aRx±/”’ü\Z>ùÒ“åÿð?üα·Q¬1a€ÕNß}ï½ÖÑ'›hQM½Áí7Gþ}$¡Ý$99[ñZ·5Z3ÓÀ¤˜…4…PÚ›?{-åÈH¯÷‡–QþNjÎ3µHSºd—”=`—ûÂÛ DDt߯m4›75ýV¢žîÑu².嵚Fšiñζ[ha”A¾Ýz`m@`€UéöŸ»¯~ÓMÚÆpDÝ$%·Ýþog4ý'ûHc;5UúÚ¯?6vž—:ŽCR*[h¼Ø‡nš2ùohŽþñ° %‘]ö'ûN¿øôß¼¬éFòÈ#ˆ35ÏßÑ¶Ñøˆ¾øºD)¢@ˆ›ëÚéþî_íþþ?;пÔ5ÂÕ VñGÞ»±}s ÛЍÛCíÖP”×kš"×eDZ©¨|òY™ß¼ûWîþ¿Ÿüó'{ˆèÍ£^ßaûû×ݸW7¸i© sm®˜‘'â-¡E?_Ýÿ‰»×wíN\«™ZpâdîÅýÿå_{iaQÿÍÇ~æ3ŸÑ~ñ‹ø+À5—;©\Ó‰­€¸qóÞÚ»!0À¢ 0À•Oßú+·Öo¿6þpˆÀO™í+HQ!èµ”™ “LÓZXÎÔ Œ?ßqÓƒB)IL®£Í§&ÝÞX\4‡ãô^É¥,ѵ)79 ¾÷íßûþ =¸³3ðë¿¿w_´†?b…x³ DcÁÃÿñŸòˆ” ÇæìXOåÛǾàU<÷ºÛ·<оIÜ¥›|#‹Ë_åR‘aq}´Nî ¶¶ ŽUˆ/´[šžàÊÃ×ýÒuú®æ]Z%”®5Bâ¾x­¾5U›âµt‡5¯…óˆ‘ÿ†Ïé¥O¾ôU†‡ “‚ç_üôòx.Ùé)õxß+¹¿pJ•±€¦æšö4åC•€>3cù†¿9 mÔëÃQ^«áÛaj¯­u$%‘ï’/4Ò¤$é¹rÄ.‹>Ǧ\$¦n6ܦ-ÁG½J9¶/dèˆckÙRÆ=55\8hžïüÑE/ï k\QüOFkÚù—ãuú¦`DlˆÕÒµºAdñ6Ÿ]^ ËEúäJ_•bÛ±)S)‹´ïª‚iQ$U]šFb6˜É‚.z7J)EJhKÿÌ&Î-I)Çu¨˜Mûÿkèxå¯(Üÿñý奾¬^ pEؾo»yóÝ[¶Õ4Ší‘˜ø\$A-DÄ—²©Ú•æµQÅDWü]xÙ™9šöþó¿’ý:ðÖ§vÝÿŽšDk8P¢¹¹#yÄ­F°òÐÃU·ïÓûL+^~os§þi+DÁ0Õ,õ”¡jxíVÅè:Y‰z±Í)ÉítàÀ£g¿˾[j·ÜѺ;Ñ$7š–º©"¿"[ÿÛ‘¿<2QÍzaå 0@ÕÙAÛJ„;jèšåž6ç§éDVD»ý—þú¡ŠçŠYRRÔ·ðíÁ(¿C·´6+@!]§‘JÅü|µk…•ƒÀ+ki÷®Ûlll*j…¿ÈEéNºšŒzy¥4ÉÄ¢Ú%®UÌD‰:ã®h‚nSŠl"uƒâšN3Q)ÏóÙûKó“Þlµk…•ƒÀ+Gàwî¹eWwì Ú¸_ÎMYe?#:YÖµ^Íý W M'CÓÉ ¢È¿¯Ñü´<œM«¯üí'ÍT©<¨X1û>¸Ýhz(þ ‘„Ø­¥ëˆ4EJ(b"æËß_–Ÿï• åï̼ìN&­)ò€•¹¶ÆMõ­ÔÍ‚ fbf,Xcf„…+\~^v=zú‰¯FÖ X{ÛÚ´7üñHB['YD¤ˆ ™ W&f¢r‘ŠÓ#þ§Gü?kmsCÇ3‰ù~;÷ø_?Fç5 ÿ\`Y477‡~é«·~7· tM®®£ÔÜxù7þøá⟽u·gX{ðÏ–Åääd%—£3Ò'»ÚµÀâi:1 ¡Î!ÌD"B`€å#Gz*OH_ÍW»X<&"’ÜÒjÕ®®  °,º?ÚˆÄÅ&R*PíZà”"*æÕt¹ R¥‚J¹.÷7Íåj×W 5À²ˆ·ßµa—ù3F@Ä«] œ3‘ïójdvÜù£ìLY±àñM{ìÀô/ÀXjæ¿óÀºúvÞe˜Åž WõÚþÌBÙ•vÊrÔ)RÿĈ÷·§O}÷Ùñg+%Ea~–DÛ-·ïû¹æÛMênÝ7‡"âݤDµë‚žKn1çö]š0ƒZw.%{{_,|!7S~òé¿yz¶ÚõÁ• .Û{>ÑÝ)$Õi¡`lÝ«;Ù¢í Ei‹¦3¿þ‰6,¥èGïð…Fr¤O²˜óŸz±üÉ\AömÝÛéûÒÅ'ýÃ'à‚0D‹´Oûé?-„¥t‚^…+é)•¼ážØŽ$Ä]̤ MÔê…O+©èù‰‘ÆçíJ0‰§Û[ÚS7²øñwß÷É«”ÕxzR>šÈñK¿ùÝcDäW©dX¥0ÂÔÝÝ­¯ÿ·±ÊïŒÄŽ$"]å2 um%+–¤L‹bÕ®q-ñ=vlÛHŸîüáPß/*åñº‡*M­étX)EJ9žMOùûÇúË_‘FäÕýÿ.V=‚Ë‚Àd]kuF‚Ú'×Y4f&Žm{íÇOXnLtvâQ¥¤ÏO¶<76¼ùDzvë„aØzÇÆçötn>s/ âRÑHÙ•àŒ]âLv6óØ‘?þƒ#GޏU­V=¸ ®]ñ:qo D‘7ô$ (¬JA˲&ußÓJ£O>þžg|ßò„PLœÓ"áT›RŠ'FÚ¾;3ÑvzjtÃXnΜ;ü÷‡¦^EX€·.Èi Ö¤$IDŒeRWŽ]ùþÞßt+Á¢ç[öÜÔºi¥L_ÅŠ<Nų¹ÈÌÜì†ãã£×ö+/æjš'¬`†°Äÿ'X pA³Còpf²ôñ`ÔØÕÔi~0^'6bõ£•áyìækçfg6M°J©Àk Ë‚”4üb©=íŽ×¿T,4„F¤iŽ ×R, ­ÚÀ•íø“§²Gcמ4¦æû;¶Z;am'VBZ†©¬šº‰ uM§;júºÒ³­Ãžr…(ë‰äX-KJ…ú¢/5ÅŠiaš±ôl7;yb<7öÊLµïV?Œ0ÀÅ(ڿ߯ýï­x>ç}Ÿ”nF–3‰HÌiŠDÆbQ›ìI?¥±£­ßöÂuõÍ×Ù•`*—©ð«<Ÿn˜ž›Ü5ZíšáêƒÀ‹£{ëæ§LÕH4ÁBC/ÊabÓTÖ®Ÿ¿Y‰äüÝ “¨Ü‰e7– Ö ë©Ó °`QTA;™MÉ?FÝ/+©ýj8®=l˜dT»®µÂ0e¸¾yîF""¥X•K"7=Úòtz®}°\Œç\7äT»F¸:!0À¢<ö…ÇrD”#¢þ_û»‡wê&uk:50“@OÃJa’’üé±ð‰ùtcßÀ©wôœD…ˆˆ™Yÿ'`É!0À%~)÷ÏùŽ@¡¾Ýº'’Ûuƒj C´ƒÕ®íj&%ùó3Ñ“½×?ž™Û:©dÐÓ4_T».¸º!0À%ûÖç¾;AD_Ý·þv<°;Ù´)²îÚw6þq ¤ßŽÑ†å¡ÉÔLäÔ«/¼ûïËù¶ìÂweu‹‚5.—Ú¿Ÿ|¢£3D4³ãÉþë³Lm3›Õ.XÖÖŽ5M•£ß‹ÛÕ.ÖìÃKbÝ=½ºôK¡q½Ð8^íz®6ÌÄÁ°ÓPS?Û¯NÎNuõKiùo=û0ÀÒœ7X_ùÈEVlJ… ËEâ`È®ohI]Ÿl<±ŽXb,;X2³SÅgJEyRúôÖO¾aÉèº2;Ö÷ÞL\ÁlXv °$º?Úpб`)çI©JÕ®çj¥H ¥Õ6d¶×7œè>²,/Xé\9’lÒ~=5î‚Ðô¼ ”"UÊ‹L¥Ì%×!wË5/=йé©k9x¦ƒeƒ_.XG¿qh’س‚¢FhlU»ž«3±a’Ŭ„R,+e¶5­ ¦¢Õ® ®^hJ€¥â÷•WÒlhêÐÞc¹Q|8¹ÔLKþ”¦aV »R˜–ƒA¯ÚuÁÕ –Œv<ôT_>ûB.m>ÐØøP<É·[!ªS’”RÄž<–„R¤|Ÿ]Ï5òLº«™Óõ¨Xíºàê„ÎzX2===êÌsgÜWë;¯oxÖ‡†•òÃ…,õTÊòi"n6LŽ2Æ.ZøÃ÷ÈÏçôٹɚSSc›ŽòuY_jĤKìÃK –Eÿ C¹¿ÙóR´cýÁÑÓÅï|åsGÿaëÞ¦~’¢†×&«]ãªÃ¯išÒãµ¥Žpt¦1“ »•džÈ@`€%‡ÀËêô3§Sƒç)—óÿÓ©“ »¶>ëÛΫ¾Ô›H‘n˜a¦%Û€LJRŬ(æx’ˆô\Ê¡Qsf€k5¯ŠIQÌĺA&3‰|ÆœÍÏ7–‹©…"0ÀÒº*þÑÀêñO~c€ˆ†þÝzzÆ“ïìØ¤<V›uC„„ …OÐÕù_¯ó[“¾ò‡æ²sôÜüŒüó`Pœ,$reo~º·²áhüïñZýz"ò…FÚR†”ªPDžC®] Îfç·U»¸z!0@5È¿úÅoŒuww=óñ\´.°oݎк¡ö†ˆ0“Ð )Eäûd3“§iÊ*U¯ï‹”¡«-BgKhÐ x®ªdgÕ÷Fì?iðƒÏýÕÇ¿Y¡…81FDtÓ¿ëæÙ1ñ5ÏUg*E5«·Æji§«w¶…ç’Sȇ‡Ó©ö^Ï‹ºÕ®®^«;YÀÕ‚oú離›®o¸?ÑhÐØ×cõ´Ù÷¹\œç¼çù[cIªï{ÅþíBÁilÜa…ôX4¦ºÂ1¹¹P¯ŒôÊÿýŸúö©‹\G#"ÿ§ÿäýêÚf|*–äíB¬¾P•"97êíyéÎoä²›fH E$vØRÄ^%S>ò÷/Œ=ÿ¥cÕ®V¿U÷®JêÐ×å}¾þ†ï-L:Ú¸Ñzÿ‡:®KÔôüÔw½ö³¿'"êìî dóš?2]äu|"¢ñg³*?V»óó3f€ë—î6VF¥¤g&†¶ùùLdløô/œ DD¬”ò*…bÏ£Ÿ¨f}puB`€5çÁO¿«¥e]àݬq¼Úµ\ŠBNd&†7¿ê85e""ß×äBÿ‚ƒY#°l`Mù‰ÏþĆÎÍü_ëÛµŸ0LŽT»žÅrl.§g_)êrDDÄ’kê{›ÉÙú©¡ŽR¡–¬)í⣠íâf£K?Ñiéy.Ûå’175Úòâ`ß­/8NCXr"Ñ׸ãúg²v2Ÿ¡¯ÑÅVˆ¸, °¦HIT*ªǦB ÄIÝ ³Ú5ôÉOÍûGúox|jb˘”O¤@p&²mïs$’…Íå‚9]ÊÖÏaSgX °¦Lœ.>Qœ“ÿX.sýuïŒþ…®‹õ—²n¤RDJ‰³OQË0J¡©rQOÏN&_è½ñ™\vÃ1+A’…aë_¸¾¶>¿ˆý¹ÙDo¹Üš%žZã%°!0Àšò¨ùø³ôŸH‘¾~×Ã%”úÉ@„ë™Iüè ~mWµðßêµ ¤Oª˜“'m›ú"1¾UéšNÖ¥Öá:\f–†n,< "RŠJ.>õê ßNÍn'iybá&"Ò…'"ñL+ ¥y®VNM·õ F °ùßm½è…K)’Å™|ÿ¡¯å.µfX›`mù ÝÐÌûî7Oÿ·»ß¿i}Sˆß¥i¯§L×Qy§âBoò]·_‘H¯Žž9é}3;å½Ú¼9to4.¶EâÃÉfÚ¤.áó}fEósQ×v›H:™rj&qlz|çÒ,ŠÔmlt+Ù/xa!È-Ĩ$Œ—‰èàâ+†µ Ö,‘Žôh¾œ§Ùpœ™IHIÞä÷M)yÿ±ó¯´oŠ7¾üØÔPã5‘øþç‰èìþ÷³ú º¥›˜_‘ ">ϧ…Ÿ+*´ùôLû+Sc­C¡P!’/4Îeç;S¤„”ÌÌBxç<‹ô,dàÆ#†n‡Nï~ÁsjË‚ˆ¬X=Y±ú‹>ÛÙF˜}¿¢]ò›k¬YŽá”*úôpÊ~¾s—ñ[v‰sºÁµJ sÆ>õWO9D4HDÔs€¦Þüú’gLÙÊgäií£Á˜±ËuC²R 磉B³pjMK K=ÝJÑHeçkNrÑ©\¶~:5³}Ä)Eù”RB2ô³1Ão¾ÎQ¤Êù–lßÑ{ž´ÝxåG©BÊ ½jDì+"ïRÞ&Xã`ÍêÙßãôìï9}߯Ý7b3S(âXlóX.¾ë~­cK$oDcµE7éÙöø|¹l¥ÓsM}#ïè3LG‚™I’¾ú °RÞ`ÿþý>í§·4_LÔ1‘OR eÒßñ„ë„2‰Ä|scËÑÖTjÓ ‘ÀÒ§°ê 0,ß×(Jvn;xc²~n§aø!ÇæJ±0<3;½eZ3-¢×à ‚À°Dt£¤·n8¶«½sìnÝP¦RŠòÙäáÉ‘í½šÆŠH.Ý4"–Ì,Ù—º$É S”`¹ 0,¯¬{Žm\W”¤äJ!˜>³å`>ךÑõ¥{ gv´†æ—Ö'êg[RÓƒåJM¡œMæ¥ /¶ï`Ñ–ˆf™4xúÚ£éé¦ ËÊ…³Ù¶ÙJ©%«ëçÛ™áòVÙܸãè»ÉrWkç`±”·¦_~澯ÚN8»”× B`X:J²ô#^&µsBJµlÓ„˜m-¶ë…¦ŒpD%˜=W7=Ýv.þZ€KuáA`Qü`¹R.ÍM•gûK¾ËÙSÀ¢¢ !³7M?ÔØÖ»i¹®kF–Àä‘o—;»ë^ÉgGجë F[6jÛâz0‚5&%ÔÛ^!‰‰us*‰L%uL""¥Hy®VÉÌ7O,Å}¼ÀÒPC¾T!¢ ¢î™7µÏN4¬‹Ô¯ÛL®Kj˜¥¦`¡K’—˜=nj9±±½ëÌ­BSº’ägæÃC}ÛžLMïÃ2I°.ºå9\ª!™?fÏœvùŒVŸ#Û‘Ä$H±ÉB,.gf¸ OúÞÆí§î5LPR¸ƒM‡FÏÜò²”¡‹¯ÄL¾'§”šœ=ùäèekÀrJ÷ûÙ‘Wægz¿7äbZSlÁD\„©KßøY‘éEcƒu,¤Á,µB.0NÕ»N]Y)EÌtþ¸ hzXröÅýS²”—nÙ%uû ðœ°Ûâæ''FLj”^SŸ]¯ ÇèèúÁΆ–Ã]ŠVÌ¥[Ê…ùmÙùðXmÉ-5u³›5MókëÎL¥Sõã†ééãïzE`> ¼M +îm¬–¤Hiš!#±ÉŽr)8;9´éŹ7="•å´u¾¥Rg§'¶õ)2¥”’…ð0Ú— `•ñÜÚJv~CoÇÆC7ÄjçšÆ†ö¾ê{a‡EÞ4ÓV ÖLÕEN T •r™uóú2î W7ô0¬ %5—Ù¿°p‚¢«}¥=“Ú21Ô¿ù‰ùtë¨iŒ×úÒDÏuÂ…B&œÒ„klØúÔû·_óÔ{Bñ˜”|éÖ„€UFçm׉Ø}¯¾ûy3P2›[xMK×ôº¹©æ‘|vð¡W¬Šm8ÅÂøT}Sfk¤f¢ÎžhÏa”.FV&N$N´ ­¨r;¦I ¥ëÌšðE´¦\·qàÞö®ž›¥bU,Å 5uc­`¾yv2š 4ÁäiÁP“¦Y:1)zSt’UM²¯qÛžCDb…N»<8ÿòóÖ—s™­Ó?¶2KÖµLЩÜé±-'7YÒØŠY9N¸\*¦Ì@i½RRóü@qäôžW+¥ÎŒàlÆ—ÖœŽú[64l¿ï:3\!MèºÎ‹á@´vúßÔ¶G­¶°AñzîŽ×e^8±óÛmÎ/ìz&ˆèGMË‘ï q¾&fÿ-ßQ¬±fXDòõž)¦ Ö\xãŽCw%j ›tCºa·îyæ'Ò³ý'§Çv/æš³RY>“#ˆˆÂѱd6½u²TØ0§‰…@¡ Å™ôºÔñÃïúzMCW ˜nðìp¾Tìš×Mf*cÏg¸4‹\Ô àêQjÏQ¢±ÅˆÔÕšÁ³0e4>’lhÉl­mÐvG¼Ë r¢¦ÞíŒÖ¥kÒs›˜c¾¦›By.)ö+ÄÊ#¥èûg<Ó¢투ÒjhžßY×xü¥©±ÛNynEfF_J¦NºÐùËå"×u]»9Öºg»©sϵ‘dVº5loííhjëßcZåd,Qj?ˆˆ”$éùäÆNÌLoye>½e\úA¯PèšcÒ¥º@7„Љt©dýÚ‰ÈÕ…(3yx„ÅÃo ¬Ic=ûÓcÎËOoÚü3s±º®kˆ:ô\:<”lÊoc~}†`†U }èWŠÊÃ/|eðbç¯ßtkRùç[I’¶èÚôüµ›ÎÜЏIf¦7€RAOÏN׿œË6 ÌÏìR~Èç ìÅp!’ˆ—uÖŠ³ÄJI°hè’€µ«¿ß>ýO¿š{þ{鱓§mx²\ÔçßÔŽ¬<Ï´/ñ±‰‰ˆ˜ßÜÖ¼ÀWoÞvàºÎƒw…Â^-Ñ[Â’JÍÏ…Îô»æàÐéîã¾:ç.Ï‹%ˆHùÇsãe¥ 4>âa„Ö:Õ÷ý¿¯ïÞ—¥:ÒµM‘Ö Û²ïÓ e½öc¶L'¤”wIÙ̯¯j$I®çph:«™l¨©ïjl›Û ; ç=³ne_×Ó¹³Ç%a¡K&ƒˆÎ¹J+À9!0Ñìý…Žë®{~¢·M…#AU×$ßeUBh2ÐÖ5tSn¾olfrýøbÏçùRy>KÓ×¥ 9kó®'ïh]7z‡P!!HgV^|†‰ê›ó;Z3¯ œ¬Ús£Î¥0’R©…~"R’•ïû®ã¸—x"XðJÀk&''åégzGKn˃‘X^±7LŽ…¢v“idÃëO”r³Ù¹Sß;u‘S‰=÷oÞUÓèÜH°ãµgš×mì¿=–pZ‰HWŠ„DÌ _ç=‰ Ùé鯾J¹¦Äg—WZø)ù¾DDÌâ-#R²RÂÖM+~Ø#VìV ªÌM<–?µ¬ÔÁÕàM¦O)¾ü¨ñ¢]wÂõ̼ô¥(äüÔXŸ~²œšL <{ѦçëÞרÚÒ5ûÆ¡›kê&7Fb¥uÒW²˜ó¿QÌxÿl—D¥õSD¬ë&‡< ¼Î4½p81wm?[.ÕçI %I0²fSÛKë}WIDZ\éëR)M©×6x‹'ÎÔul8x­®—Œ|¦sÎw³*?Õ;š<øüÄáý©¥~Ïàê…)IçtÄ=ð—Gž‰ný÷'÷Ü)¾¬¤ôì©¡’3›/,âÅj¶/(š”Ÿ×µÂC¾ïW*yú!ôéôtåѯþæã³ýþC¦æ=´~ÿ²ÐDȰ( ilüØI$©Ü|h˜¥§Çk‡ºæç6OúJú--/m¨oÙÔÐ2wkÍ{¾Q*)Û¤bɤ8Ë´— ffrlÏqßÍqqºlnð೓G¾>·Lo\¥Ð!°|ø¶Ÿ0’w+òèóõ÷»ô†F„{ÿ;º:¸ÍÎ;bÇ;›>Šé7Š7,Ɣ˘ãÇÜùÕB®!CDä”ã•DòD[dž£·dÓ ƒáD±Ö)rB÷,»b–Y(Ž×¤;+Q.Åf†û®?<Ÿ®ËØs§'ÇøôÌ¡¯O¯ø;«@õ…ñ¯ø½Îí_°‚9ÛŽ03{ùèá÷ýC1×P "Ò [_·ñÑÛìrMzrì–S¬Xùžé+ö+–V¨ÐuG÷½ ã¹¦´+Ò/¥NO¦NþàÙÑ—ÿn¢š7«¦$T_qzØÿrs'Ýh˜t£¤y.¹ÅBxÎ÷L)3‘$M+˜Ñx¡!–¹™Ü gÇ+Mí/wz1ˆØ¡RAz®.ÍM¼£Oº%*§ÎÌΜ>xpaÞ€+À·>ûØË­~6â]ž§ÛSc-ûnxÁ±£"IJx¢©åØÆæöù½ÌólšO†*v(ÓÜ6v+)Åż9G20©(Pž.õ•Rƒ©Üðáç&^ü›Ñj߬n ÕÇÝë^WÛD;X(kb¤ù@ïÑ»žòÜšòÙ=KŽ'f[ SYB(£eÝÔí®+ìBÖŸ›î:<3Ù5è»JéšgH§TÉ >Ó3ôÜ—Fª}c°ú!0TÙC¿ûÞÛ·ì þv¬V¼“…2|Gs™Y-LEZhh0l QŸÞȬ4¥H1³2LeY–ž›©ŸJÍnžÖX(¥˜I›{ûÛB¼F\üX.ÝëîìÚø•X¸K7(àØ\J§Ú];nŸ]P‰…'Ú7>}¼¶ÔÅL¢RÒ2ý=ßÎÌÃq·iǵ‡ßM &™}!„d¡„iÅÛj«|kp•@`¨&½mO8¬]g2àØ\ʦ¬I§¬¼ñ¥„òPa~®æ¸ç²-%»ãC;N¸®VBê‘x¥¥6yºS)m!ahBDêã„g=XØé z8Pÿ‘uuíÎF»›šíz.—‰LeÓ“žŒÙ¯¯Ï”M·ÌL޶õ5·õm× :½ýy"=eÁ [Ëìø¥‚—ó<Ó%ñ•ô½bºoÄÎÎT.p}€‹B@õ‚5u‘3'Ûz*^öœDEh¶Î¬«7 (òY8ž$VŠˆ\7bO í=‰Žw0{V¹¤U"‰3Jù¦yÖ’J·bf8±µ!;rl¾7W€*i¿îC-F(©¸­9Jjš/ˆLIJ¾õ`ö8šh†ÜÚrQOë¾ç½¡ÞÛž›Ÿ;9YS7¾9¤ˆí$‹BŠ¡úVô1ÀÛ†ÀP%V¼9î9%ÖœbÝÔ…nJRtÞŽ|×r³éxo1oe„*X¾ŠÛårcNËÌOIeÚÁp!¦È”DD‚4ÃŒ6%Vînàj…€*¦VP®=ïÛ¥œ¯ùÚ¥˜¨[# jÔ]öéÀLS‚EA`¨"ÍË%»vnmèìëž›î:îÛ¹²f•‚¤"eÖó¡`p¶I°!'œ™¾ù¸¦UŒ–ÎW·jºkUÊ5©R!‘')©b³NÖ¹ådÎWšËD"j‹úÎw<èiuž#’ÓÃo¬7øâ:p¼Ú÷«À êÜóÑ„‘LÔJ= ˆº‘O¿"OšAnuìÚ\$2“$²­úæ3×kºgMOÔõE’¥Ú*%ƇSšž Æ©63àD•šÚ8?ó]Ó¦ùä´]ª›÷½DÉu-W7²Ý4iÛõÓ2Œè/º®•·ípÚãXï|*Ü_å·V€d$¡ú-{­pÝš˜Y IºE³ì‘ò¸\>=.„«e3uÙÞ†œ¦ÌÎ-‡w‡B•ÈøðºžÙécÁ@Ŵ݈íU¢ Ë©VÁjYwdKëºÁ=¦Uª/•‚³©™®çRsM™T×l>U¶}yòœ}ç‚À°‚D(¬cõ–k}}íT&E’ˆH‘PÄ55¶{„ˆˆY²&˜¹~9ΆÂéúÍ;Þ—lœ8yò•Ÿd2¥Ð$ù“¬jb#µ][ŽÞoY^tr¬õ™ÞWïxºTjÉ –¬JèZV`•U¸ +Ì?ûù¾’ ˽e«6IšöÆ5UIv§ÇoéK§v 'êú{ÜŠi3 %eE#vXpÈ7Œ¢éÚBv=žíÌg;Rޱ Ý}meÌ·.Ó p1 « åÚ‰ÊìøÞÁ³ßlúD&—ôPx$éûÑò™Sï~^*¡ Br5K†Õ`U9Oû yÅ܎ɳ:à`\ Î Î S’ÖAR åy:±/ÞÒf p> W1ɬÈ'Rl‹•Ci»lV».X=®VLÌ*g†ãS±ÆÖáuõMãÛÿÿöîå7®ë>àø9çÞá C‹¢,Q!%Yµ„ÄjÖm£Ý)ºJýKúWäßè¶‹. ) tyUE-7¶%Û±CQÖ“¢‘Ù¹3÷t¡Ôi_Á†©¹#õó$Èû[òË{ey¸v¸_Ÿ¼òÆ_úwû7Ú‘ù'^@usoñÁÒ…Wôûn¿Ñ[¼ÓöÜÌ'ÁðBH¡®SNÅ$…xTœÞx÷•˯¿÷ÝÞb½ò$þ·úkå©~qï~Õ_.êN+#ó\ 3c8æSŠRy»Ë·WcŽyó¼¾´<\-RÝ-Šø¹Çè§bÈOÞ9ŒÆNM¢™`xΕ ‡­W~ô;k§v¾qkûÂnœûäO×Ö«³9D!ÀW&žs+ý×_}íçßíöêånw´º°:E'ÇýƒÿŸÀs¬!e]–ÉrQÆ…õÃ+1† 8.‚à9¶´¸»tfóÆ•”žllN)üægøJ>w ó­®cŽqX\¸üÖ·/\ÞþNÙ noæ™ð†à9P×1çüä4£œ'q¹륭‹ï}}ëâΟ•ep,*ÏŒ`˜w±Šý7׿vþƒK)MËåþãÓ+ýƒ³½åÁ׺½éjÛãñb s¢®cŽeUt;û½²8èæPÔgϽ{yýôýË+'ov{ãõCJÅ´—Rˆ!F››yæ@kR¡þl¹ÑâÒ½•ó—òÆÙ­oõ–F§B¡Sæn*ê…˜r ŸígþÕg±À €6Äs§S^éß]];½szóÜûß>¹±÷ÍN§^ú¼€6€Ô“2ŸÙüé…ÁAY]¾òî¾¼ùà[Ý^ݺ€9#Z0™†¼qþãßî÷w_]]Ÿ]èÖKÙ#æ`˜¡8yr4jŒ1‡iQ­® 7; ¡'˜W.n˜µ:æNçQ¯·48‘ ÿÀe¾ €«sÊ[×.öO¼R–Y00×@ &ÕÂ8ç8µ‰y'f,9Ý¿óúöÞîKM&iÔö<ð4‚`†&±Èeyoiiy{mûƒ‹×ï/ÞÌÙlÌ/ÁЂ¢Ø]ít®ÒÑt«¶ç&‚`†Ê<ãñˇãÉÉÇëgœïŸœ/ŠÜi{.h"f,¥—î7S‘¦1f÷;3·ÀÌÕ¡,cüàý?xg4X¼×ö4ð4‚ %“ñúàÑÞêö¤Jög&‚  9IJñúÛôÃÇû+ŸäìFæ“`hIJ9/ì}º}îßǣΣ¶çÏ#ZË:ÞüèÊõj´°\ÇÀ 34‰Ó⯗¥cU-¦u¬ôóH0´ª“jíèñ~ÿÖtšÆmO¿I0´,¥¶o\ùé`нf¹.)†bLÝ…Ú=4 -K)Ç»·÷æÞ½µë“*žÅ3bü¿uÂpƇa§>8‹`˜iRׯÊ9äÉ%æõ0IDAT8í=\½qÿöù·?:s7u çƒÝ«n¾õƒ«uÿ¸žÇ‹K0Ìi!„âXö/Tã4¸sóåß½ué¿=¸xçðàÔA u! ;aûýÁв&icós'Oß»”ŠéS—#åœC=MUÎašsš„bŒucH9„œëPïí¾ôÞµŸ}ç“éÉa¨cNEŽ!ŒSH)”Å8 •}¬|a‚ U)L§“xé?û‹õSûß,ŠØðÇ|ÓiÌw×Þ>ÜéÖdÜ9 {‡1æÔé­”å¤S×åd:-ªO?~íÝzzj˜BBÊN@â+ ­ªCˆÝÉö‡oüëðèwÏlÞ~³·X1~vÀjUÅÑÃë׎Vî_¿ö濞{êr¢똒£R9‚ eeŠñÖ/ßüůïlýÖÛÚøåkÝî¨cîÔÓTíín\ßþà÷~>8:9ˆ¡3-Š©%EÌŒ`˜E1Nu\®>¹ñÇïÝÞyýãN1*bÊ)×±WêéB]¤Cðæ€Ù 3ÔyÊ÷RÎ1•!TÃþ° ý_=å˜R޳¼þ‡`˜3ÉFeæˆõo@#Á4 @#Á4 @#Á4 @#Á0CUÛÀ—$€F‚h$€F‚h$€F‚h$€F‚h$€F‚h$€F‚`–R‘Û¾ Á4 @#Á4 @#Á4 @#Á4 @#Á4 @#Á4 @#Á0SUˆuÌmO_”`˜¡8IbçŠ`  ‘`  ‘`  ‘`˜¥NÛÀ—#€F‚h$€F‚h$€F‚h$€F‚h$€F‚h$€Fÿ &Hƒš$IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_9.0.png000066400000000000000000000377661430147706700257230ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢>ÆIDATxÚíÝux\Ç¡°ñ#cL13Æ(ClË [̲˜vÏŠ,²À‚å]13›cfŠ™%[–ŒI›ÜÞö–nÛ¯”ÂM1MšÄûí‘âÄiÓÄN Rüþžg*°´Úìü³oçÌAÀ cÐDdzB×8nhÍCõ¬‡ƒ®Qk ¦ïh«Ì@0 Á@0Á @0 ‚Á€`@0 Á@0Á @0 ‚Á€`@0 @{4p¢“0p‚ý€YŠ5þÏ/®i­JÁ0ˆž³Á“]…Yaë„^_±>3¨÷D7£õ¼Ø=ñŽÆfõsˆõÂäÊéAÕ¾=ŽëÁìÏIçÎ]…QóÂ[?6Ã÷¥ .Úɳkä6©gRtÏ0š[CÁ6ílŠ9\Â&ºfŒwJëi~ZÌð ±ô¦žúŽžÓm¢«~ÜŒzëÄÃ)ŽúëÒ›øg³²`4‡‚¾Ic“zZ97zgÄ$÷ŒyCgøôêÞgˆÅ$ ¡s×—˜(àYêÙ´0rn¨ôiç±¶ñ#Í¡à;õeÍœ¨íq3‚kìFÏ_<\zRÃ^ †N÷e’€giÀx[aFpнïp‹QsC{MrOŸ77z{„MÚY¥£¡I#]ôlB¡Iå mTš#%iZ@…ëxgõóÓë2ÞQ)tï=˜‰ž¥A“œZ74¿e2I—øôœà¢µœ¥X£°Už“64?ÃP¸¡¶×\Q/H:šlŸñNÊ‘'Øu³N:Òºâ1à•…LðM½Ã¦uŸän”64û/L:f…kÏîÒ#sØk®j&Oš)_8Ö6a¢9`ºIÿ-¯Ø% ýÇÌeR€'Dº½¨ôfû¥G]{ôï1Î.qÌ«²e®óâö&I·,}–¡à ¿®Yt$uvÄÆ  .ÚýÇ-è.ýG Ÿ( šì"ô2…ž”n½÷œ\ëd¹9xÎâ­0‚Ì¡k§ºø,/=j=Oaaò Õìð âï¼Yƒ&;÷Ql5 ÇÛ1‰ÀÓ †!ýæÅS_JwÐ6èe˜ß¼«¥7ðÏ$ôM*[ås(¬_<Å;ßj„•¬¿ùi[Œœ# }†Ï`€§©{Ÿ!}çÇï wÐ5jŸY<ÂpÐ_W›#F9'j{ìd¯\Û16q„N^•¯Ntdâ€g¡GÿQýç/ÙÑ í'¬&Xúºš6xàûN MÂð™LðLƒ¡_{ †f•ú’aš™S×—úö:Í‹Iž—žÆšƒaû ÕEãŒàZ¡íîMž—^ƒ^iÁ ¾h €ö ÍÁ¿¿Ý]’D0í@ÏãÚi0Ô ÀóÖkЄÖñÌÁp­½ƒ-Á<#/˜)Œ³ ,}³«È ‚MÊIÁNuQè3tÊÐùK^_ÜNƒ¡;3‹uÅýqt;"×TnPîמ_²%o¯GîñLé’$Ý%m@ùÖ2Ų•+äukê+7TyäÌq4\Ò:è¥7ý t™’Sz£fQÁ¾eÊ2O)Õ>QˆZÈäO „¥[dSÒ‰oÔw¤Ú²&ù²Ï„œÌ<T–y*8?ë”,#ý¸B•¼#$:rEàØ…1L0ðMŬ ž = »ÜÑNo~8Õ·[WLÒ ÕåÍâÅ òÿSï ,uUº ÷Îð²`†€o@QéÓ]¹Ë'ª²EþaG‹†/Úß }¬¼)ÿSöùÕø þ±®©Öýüó˜hàëPî"ê=çdœ”ýOÝrS‡†‡î¦Tv]þ7Õ¿Dç´nÁ <.w·¹Üû唚‚Kò_Ô~KbááhÈ:%»ûšÿ|ic4€Çà¦ö~)qS`xÑù;Ô¦çÇ;ú¾f_`¥«Òm€¼œK“€GTä;8qsвÂ+âoK®‰¿«½'ÿ¨öžx_ß–`B¨¸Aüeòöà|s0 aÖ€G¤¨òë»Æo”j·ÿ´ämþv)ÛK ‡Å#éÇÄË—ä?¬û–¬:ÔÜMš}!»åec˜uàI'%«ö… k~ºT0™W•O·%ëÅ^¾.S5ûüöJo´;|4˜ŸÁeñwK·úúøçp›UàqtÒv!7µ“Vã/¤í…¨•^34ûüW•4†Ü©¾-~ÔÑW .É™¼=0%bYÐËÌ8ð •ÜNlýµÂ×'ï¼ü¿;ú†héùëÉ.GÖ[2»ÀÑIpNó˜`<¸¿£¯0TÝ?Ö4ÊKýz3¯ÀZåo¥=t¼ò¦ü¯9J¯‹ï%oóWÎ ¶íé“á!8%Ù óí™`à›ˆZÔ%°ÀÝ&ëTÐ…¾Êp?ㄬ)bY€Ý¬§þBï)Ý[rë6I¾®ˆúAµ7$ªèªønGßÇPuKñaö™àKÆÃ› ‡ýK#ë]& BŸNÌ2ð $l ôÍ=/ûÑ·á<†ª[â‡%â»Ù§å?ˆ¨]hé>»;3 |…¾}c_óÉ»üvGãÑàé»Bü·È­‚ };-uf…øfÆZ$l Tä_”ÿüQ.Kª¹+Þ¯¾-~PsGü¸ö^ûóóù°¸Aüy¿ø—'Ïz)u§\)öì—82½À××[.òšu2ø˜ùÍÿý¯:ë ê¦øì³òKÊÝòªôâÖüKò«•-â_žw8dž”]‹Yåk·Ö¯ë”EÖœö Ÿô ® z˜ƒ žh0”ûÏ3 ¾bŽ‚Ê›Ä?äž¿—sVüŽî`ðvãÑà³Åòw³ÏÈî,Y`®„!Âj|þí1ì—ØõÒ’ÍWî rLÝìd~Œ·Ì÷ñ³sè˜tûýªlcm†uœe!ô`N€'Æ?ϧ{ìk‰›ƒÊ“6D¦í’NÛ-Ž *òíçŸã¶(¬ÚÍ/~ƒï¨€âà®n*×/| ‡x;!ug°wi±pÓ´YPî‘í1¿‘ÿà™ÝJõ¦ìÏÊݾ=´ö–Bw»"OJ`¡¯0Å×ÃÂMëÛÕz±[§ÌÓá‚ö (D¯ æ…Y›ß|w³Èoˆ"–~éãäù IÝ-¾ª¨ ¯¨ðM©l‘ÿéYƒ´o"ÿbð/6-ò,6<ORH©ŸZ (*?¹‘‡ÖQ°÷H±d]PAÎ9ñ{™'C.ù¬¨¸!·îÜ9©æ®ü~Á¥àŸÇ½¶H½ Æ®/¹´3®©Ž“ .ÉÞxp[ÖÚ{ògv‡$is¶ö@ÐòrÏ….ZO&hL¦cBÝw…”ra~ؼ9ge×kî<»»#µ†‰y”6Éÿ¡~= 6 ×m³´!EŽc–¬ó³Z6(fMÐÅ˼ã*[d¿¦ÁpO4eœþîâåÞ¦Në̬í„ö l}öñ¿ÒÉÏgž¯å_\sWüð™Úf†òò¿¤íôËŸn7€YÚ‰Ä-!ÅÍâ»uÏádçÖñ¦tò´ø®î |…Xá;½¿å+¦yÏdb€öÀ7ËÓµ¬Iöãç ŸÜJ5ã„솬ÌWºS§±¶“ŽwœÖ=¨À‡Éž·qö–# ¯7Uß~¶?·ÂÐ$ÿmÞEù¥Â˲SÅ !Í)ÛJó½‡3;Às׳“Xºp¢rwpmù ùž×JCÍ]ÑTySþQþEùb×øÄÏ ˜Û›¹ž£è•BçA“º{}Gå{Ï*¸$Þ1¿qÿøyCY“ìçÚýÁ¯…V/š-+víÂìÏÉ"½‡ Ü#ªfèæfž 9™uRÖ\uKþ÷g U·Ä /˾³t‹wxÿ©–= Ü™ à9êä©ó°4CrÞ9YcåMñiAý›ÏgÃsqƒâ‰ƒ7šŸ“µÍâÝ“·‰‚r¯(øe{Q+[GêN™Zí-Ì ³fö€§)nm°<÷\ȵòfñOÒi{ÀZí]ñÃêÛò÷ÊnÈ_tUüyþEñûY§ÅEWÄŸÖÜ‘ÿÓü3÷çq«ïˆÿ¬hßÉ8!¿°t‹laôjy÷ÄÍâK!Å‹¦Ç® Œ3dånYeX÷üùá ¸T x†Î-øe{ þ¹>óó.Êš¥MÆuéÐmñï9çĆ”í!åQ+‰Ñ+,SwøŽU¿<"y‡88~½ÿôämù'ÄÓ¹gņŠùï5¤•sÀ¼g<";¡Ý/î4^ß®º)þ¹ú¶ø·Šfùßã×ûÆ;$¸ö`&€'(fM  Ü# &Ó÷…yá.7ˬ²OË·^Šôè+ gœß˽œòüºõž0»ÓŸM„×~’$\Š4û¥Çß#øåútQíUt÷2¸õ_ºÅ?©èªøëÇ\ÁøXæÏß{eMâÌ!ñ÷¬Óò_¤l˜á˜Äþà‰•ù ûMeBx}ÀÔ”bˆñX2ãDÐöü òïKóüýâñ·);e›’·Éº}Õßžê5_Ìó¤Þ\PÖ$ÿëc"mþÙÊñÃÙ÷â7§kŠêÔ]Áºø þƒ™Uà11e&SÓ'Ã$اÈïQ †I©;C”¹çå—Íoöo~þáƒË¾ÎåÊ›ò¿§ìÙ°tKH·Gy^A~BÌšà¹'d·éoÞMÕ·å\’ÿ:ýxH¡ù¹û…U{öÕ…u¿0;ÿœÏdc¼Ë<ÁSëþrH‰·«X¾È7²Þ;X¹W^«Ù/®É=+»PÑ,ÿ³´Wá›ÞIÚ䜶ӿ4¢Ö\he€Å£>¿RÿžúƒAš²&ñ½¯Ze0‡Â/uÒ•»çùf¹÷LÛ"D.ón}œîû·a¢›uç¥[ƒÜ³ÏÈÞªº%ÿ¿Ê›²w«o‹˜Ç‡µwÅûOâÖ§Òž‚ôc²sþ¹.Cô‡¢…ÈúÀG~~Šª!q³Ì>ç¬ü­/ûEWÅŸ-ݨšbÝ·°1RˆßÀäßT¯1“{$nôÖ”4Êþñ8«õ~îÂý’ÙÏä%növ± ;ç^L{ìç87ÔñeÝÁàÜòæ¶ó¾èV­úÃÁG<õž–åßQ3©Àb»ÚsšþPàÖâÙ_5*ZÄ÷ .Éþ+ï‚ì^E³ø—Ö7íwå_¸ùXz3¯Ür&n]ÀËÕÿ[þµžät;éìÇìÓ²ï~ás¼'­0Ⱥ3°@^á7„ižP0Äoð÷Î='ÿգĂôæ?ÿbÈ]í`]ôê kYYÀlõÞÀ4ãÑà½Æ#þ•Æ#A»Jå¿®¹+ÿ¸öžü~Á%ùOÓ®]²ÎWŒ]ãÛí›Ñ+œÇ…W;̈^é-[². ;y[HUÒæ@]ô O+ýaù„MbŸLÿ^£l:yê?;üÌ9ÅA+|—T;AVâ#Ü1Õ\º¹©¼{þ¯©V*ô¦yMFÍñžçüpgóÿö³°‰õxÉ/Û¯wüZ¿b©ÇܬSÁ[Ê›åï^–?eG ÎSç6€Yž»x7!ç\”Ð`*j]m·ÀÂCëÓYVÔÅ;÷³ô39çC[OzŽ\(yéãõß[ðËöªü„Eº'ûö»¤9 ò2añ²!ûlxë÷|³Þ¹®3¬eÓ» ÂH&@w›Tà-xj¸ tL#ç† clâ„a3üx1|f„•\6Ó¿ë¨yácLpèoþ–…Õâ­Âï|a¼³ª5&Œ·,:uáÅ^}†M{ ]'º¬æÆìŽ›¿dGؼèÊÀéÁU.S| ¬'¸¨gŒš1~Ð$çAÝû }©ïh«Î]uÃgðßVÝ{^•-úße‚‹fʼ˜ÝKtÍê€òåº#±ß‰Û¾×6í¤Ò&õ|’Mêéø‰‡ãæDïXÅ+×qè ŸA¼ŠÀ·1ú ¦W ½Žï<ÑM?eÎâ­ úëj}‹2 boQö¹˜–ÝÿcÂÖÜ}®YçvÚÛiæ˜P9讫m•—t³Ã7÷7¿?¯$ð-4S¾Rè3|Z—I™¯Îޙ䨿®r4Ü09Ê_/Ì9ý£º7䦊–°?k©/)–¿V¿(ÿpŽ£á’ÎY¿9Ï:6ß³çÀq¼À·ÍŸM&áå‘3»N^”=^ÜëÉR(´Æ‚¾EédlÐD­­YWÞ¬x¯î Ñ$š»âG%×"~—u6ñ ÍaUCìºÄýó"âœÇØÅóbí…ÉüFAŒ³…m‚‡à¡ñzìߟèªoý8l†_÷)^yöÖ‰‡SÄ‚súU­wÑîBϼýy©{µg¤Õ…Á ú7¥rSí=™)çÜâï{¦«ÔcíG3+ÀsÔµ_×Öb…¯Ð½ßàn!%‹ÜÃj|æ,RMè4É£P°ôùdø S}‹…©~Ò(iþ¥­cš™0- \°N8(Œ˜ÜÃÒ»ÐmaòÉÔ±àhhRùÈWL¹Vp%êç¥×ÃÿX{O¼ÿP0ܯ¼ú·Ü Ñ?Ê:³ä­Ô× §Ý27Ï­.KêÉ,ÏÐ ¿W…9âÜÖϳφ yCÛ%=#êüsÎ·Ž„ðÐ)f³×¿<ÑMßw¢›¡ïDwcßIîéý&ydô›ì™Ù6eõ—Æ”E9ý§xåš?ÏlŽoÛ´siŸÅ •gÞÉLå¾Ô«9çÿ´ðJôϲÏ-ù^æé¤»åÍáïÖÜ•\~#ìO‰Ûsö»çœN÷È=gtͺ¬·×\ÖÎ[6ÒJd•xVÕAÒ‡N‚йKx]€¼Õ{BÆ ™¿þPpYÁ%ÙOŠ#ÞIÙ­>媯ÓÎ Ûf±)ò“eÙ:¢­"7ǘ?šÇæXóˆk‹7ÇÏY¼5ÑNuQ-­(| ú*¯‚£Ùº£‰·õGo)–•¯wN?¯wË:g]Y¿Zw4­Q}@{ÞAYëhhVš^m“zV9+ô5Ù+)z™Ü‰YžWm…ÀB¿AÉÛü’ô‡ ÅÊ·„þŹç嬾#~TySñ~Êž¬#ކ+ZÃM¥£±YmªÇ­,<nYç ±³÷¥ŸLxcñk9»õ6A;è4.gŒæXPÙk4óã$Mó/w>3hÀ8û$& xš |„ê7– ³B-lâœú.Ý\Ü ÿ]åMù?‹®Ê~\Ò(ÿiÕ-ñ}iÓqéõÐ?ÅmªØl«¾—òEoü¿îpNoÔUn¬Œ^¯;*ÖçmW,+Ûà oV¶ý»-*;Õ•UÄÆˆ‰nË—‡Oë>jn“xvøkIŠå+WfœŽýïüËQ?+nXü+i?Ãh¨SÚËõ³ðUõkìu7¾Ñ*ƒƒþfšƒ®Yéd¼¦ö-ÞRæW²¶*a[ÞëeMaïJ«úŽâŸú£K›]2/è´×´Öñbàyƒ_éàÙaëÓµî9‡sGÁ^Û¬ô):'.[W§X¶¾6låêåñ[ w¥îÑŸŠX]³6y·î´tbô×8µŽ7ÛÎ\¨hVü½èjØr.ÄüOñ¶V€v vÚ[iŠek–\ŽøUÝ›rSE‹ø’kaÿ—9ò—†ã‰w"V¯Xe§¹™ö ¤»ÙëÕ¡+V®È<ÿÝŠÅ{Ò¨º%ÿ°mÓ´Üdþü£Ú»â}ééÒëaïÖܕߗVjîÈ?.¼ùëœ Ñ?NØ–~$ewÚ¥ðÕÕk M*V€v ÍJYÝò†ãÑßË:ûý¥»”çC——¯¬XSëd<˜åœ~"]ºÌHº$I:CÁ¯l[iêÞ̣ſ©½'ÅøAɵð?dûžú€æ‚áXÂÝ¢†ðw¤3*Íÿ–°U}JÚÔl<‘Ö¤: ='«­_©X^¿ÚÉxUë]´§Pº;Ò§—8 @û éîDîÙDzüË7Vøï.rÍ:‘a§mI“n¥êdlÐ8§Ÿ×K¥ÍÑQëJ¶Ç}·¸1ì™§c¿§>˜Ô¿-ýHÚë©W³ÏFÿ(a›ö¤bYö®¢†ÈßHÁq*î­€òuU®™Ç3\2NŒõÒã85ŸœÑð¹}Ð΂¡íö§—t®™'2 šÝ« ¸æ]x0/yWÖጓ1ÿ¶7õJøªŠ ÞE«jÔ“¯^‰üUqcÄ;•-Š¿©ö+/V¬­Î:“ðÌ3qoVn-—VõÍʶÇ}°qú‹oÑJ0í,¤;”o¨Z¼6w÷¢üyƒôo^;ŠUû—^/n }W:3¡ê¦øú@jCHMùº¼‹Ñ?6Ÿ.^[±1leõÚEGr ×Õžy‡s<óµ~þX§B @û †¶Ñ¤z°ñø³€ËZÝYƒkæ¡ì°•¹;’¶/½ZÜùÛú7e¦¬³KÞªZ_³±d[Hͺé’¥¯u4Át„`ø¢ƒ×®h¥!­8¸fî*XºCy¾¼9ô/-Š¿Åm.Ýf¯»¦–Î_øü%LðBÃgC ‚SFÍÁäëU·Bîç^ˆù‘¬vS•½övÚ“ ‚è°ÁЬr0\Ö†­,ئ:{/fcÞ.·ì³F}³’`^ø`xp'¥ó÷œíE.Ç3þÓ]Žà… †fs0œ1ºfÌqN¿¨'‚á_†tØšt›Ô§ mÁp`:f0<Þ°×\QÛ¦ÓØ¦}ÄqNc“rJ77zGt?‚èÁ`¼®vN—n¯ÚøØç,Ì ]³d¢›aæx'å”Gi–cmãÇõ:¥3´ë`hV¹dœ3,*ØVâžs$Ëñ1Ï[xU¶,r’›¡—ùOZ|àY0v0p¼½0ÄÒC<ÙU˜æ_>èQWÚo»¤kÛ»ðx+ ¯Ê–GNõ-î5`¼0`¼í#þ¯,zôÍÄÏBÿ1ó-¼bÓkð$çAƒ&:zÅ~é$s0,}Ú{3´c£æ/î>É=ÃvAâ‘(óX¼ éh¬mÚ9åº É5ó¼Á«`G‘GÎáìǽ ‰`:˜1 ãzXú-r44iÚÆ Í—Ÿ·p4Ó5sw¾“ñªö›ÜB•`:F0¼dÏÇ8oAÝvæ—$/h0<Ýý ÐAƒA:SÁ9ýœ`ðÁÐ`†S逶MϾæ`06« 'c“æá¯ÿe À‹b´õâî“=3í&Ÿˆûª± éX‚mÚ¹Ô'±Ç`:€Á“; ›î=`Ô¼ðW¾tÌ {e„•lÖLqU¸“±EM0/D0¸Ãfø £çG~å2Å}Àì°uæ`ඪ>oˆ¥ç ‚Á€`@0  ‚`‚ ‚Á€`@0  ‚ €`  ‚@ †&µSzƒù÷š€`øl8蛕!5ëj’vdô/ÛYâh¸¦&‚¡-t7•É»ŒÇŠ"~½¾t«sú%Á¼ÐÁÐü¹Ï}KöF®©]»(ÿh¶£á:—$/n04h¼ öå»eIÿ첤¥övªôñÁKï‚^÷L&áç0~a?4­æ1x¢“tÄ`°×ÝJ‹XS½.ïbìSö¤÷È=™ù 3å+¢_qH1rŽ¢ßÈ9â#VòþÃgöé=xR'fè Á Ö/_a<¾ä;q› v»dœ7|þò¤¶a“rJ=Éë)óâö&?꘳+u¦buxß‘³ú3@ ;Í­´ø­ù{2NÅüwøªe«t׿êv«8¤ÍÓZëø1}G[ d6€ ¶ê[©q›‹w¤ŸL¸¶jÅJý5õ7=äí³»- @‡ {ÝÍ4±~M}ò.íqYÝjçtér¤&‚x!‚aŠûÀYaë¤`p2^3ëê]]HÞ•y´ðJø;šCIͺ#I7ÃV._%Ý5‰`¾Åæ'†Ï–›¶A\”8?°òµZÏüÃ9ßI:ÑÙ3ÿHv@Ŧʥ;Çò/GýLº À·À(ëHaÔüަúW¹øä×–/^[°3¸zùr÷ìŽ_pËTi8§_Ð{ì-pÍ”.Kâ’$à[i°¥›0rnhoKß G'í–Œ¥;õ§´‡oE®)ÛäWº§ÈASù%§=+ŸT, @;4tºW¯©~%v ’N¤xäËNÜ®?‘y:ìçÉ»4gs¿oÉæ2{ÝUÙë…²š­^Grì4M*;íÍ´OW!ôm·`}¼hVÙ©/«g…­{ôÑ“Yžƒá³„sÝ&{åΙ¿d_²£±ù“ÿw¿Eé[²½D±<[@ù²åî9Ç2?ÛðܬtN?žáU°¾"leåú”=Çò.Æü°¸1üw™§ï¥ìÉ>\½±Ê9ýŠÎÑpEël<§ªZ]ç’ñÙ†è¯Z‰pÐ5ªçÅî‰c7¡{/€çbØ ¿îÜÓ­æÄìNvÐ7²qYZhVºçœÌ®^Yï_¶¥Ü^פzøÍ¾½î’6¸ªjöpÜeMâ{µ÷䦺7ESÝrSí=™Éx"þMŸ’ùºSFçô£™ÁUåk¥ÈpÐK¿MíS¼«H ‰/ ýuõ‚¤cK'¸êæ2CÀs4[ž6lQº¦$n“áXpuÕŸ¢ÕÕ9» ¤½ ®YgŒåk«}‹w”´í]hVÙk›•²Úå+dµõ+¼ öå‡Ôl©ˆß’÷zÉõÅ¿­{Cü¸öžÂ<Ä2OǽíW¶¿@Š'ãYƒÙª:ŲâÍ>E›Ë’vf-¼û“Üóño¥ìM?æ_º­Ô9㊮í`¸&µmÚù”©¾%î/›Úž£iþÙCÄU§ù•î/pÏ9‘é–½/Ï-{G¡½öNª´àhh4¿áoи˜ßÐK—™‡Ö=çh–kÖÉ G}“9 n§9è/kc6oWH»ª>Ø’º'¹A}pÉàªM•mqCµ(ÿhvÒvÃñŒ“K¾SÑú7i%BÕ·”^|Çp,¹eÉ–ü½b}õê… µKNtè=xŠgêîЭÃf2)@û †áBŸáÓ„>æ~ú½!–žƒ¾<¾Éxx³ôÃÂ]Ð8¤ä)‡Îðj~ ]&yf™Ÿ×t&hožn0ü§ÃßšT6©S¬EÏ [2Å+oÁË#f¾Äl)¤Û¯>4Ì?£zü[²~ÉꃾIc§¾¤›³3zà$›aÌÐQ‚Aߤ²S]PÙ¤žVÚ¤žQÚ¦ÖX'К¿Ö:è¯kÌá þÆñ`þ}[å¹4KŸìÀ–3@Gé|ÚYõ´€ŠÔ .ÚpóÇè¹1Ût3Ë2¦ú—$ÎŽX›8?~ª94Ò*´òð`8=$¤ðXt$n°¥Çè–ã™  Cƒ¡¹uua^ìî´YŠ5Q3Bꢬ"7'̉ږ<Þ)ÍvÄœÀ S|r§L®^8S±:ÐüýÄYá«çDoÔÍ_—:?îõýµ¯¼$Éü7”Óƒª-:wíÊL&Z‡z~üäi•>–Þ¦ú›â?l¬mb/§ìsÂTÿ"é×;šèÔg’»qØ8‡èaã–L57Ôn¦bU¢ƒ®ñ+W&O½ ÚuÀ;&è(Á ]Z4É>í¯\ûA“œ{H?7=°R˜æ_&Œ³_*ô4¡õwMtFÍ ¦U “½´ÂÈ9ŠQ“<2íTSár$µuâá„!–˜ Ýƒ» AæHÐ~¶ù¼v¦¸*|ô‚èqæé4xŠû—>F÷>C[?š#HZ•X¸ô¸Ò_ öÚÍܘ1ýFÏéÇ,íÔàÉ.=§V9.L>©4Gƒ´aY3gñÖ¸qvIÌÁðH‘õ “0t†_ßWeËBg…¾–<=¨:Í^{õ˃AsU3'j[”ù×9h·Á0ÅE0‡ÁË–¾EÞ3«SæFo_:#¨&aì¸ÉúÝû ±˜à¢q³I=“f¯¾¬±M=Óz[Ö/½$Iר™¿Iß‘³1 @ûÖiÐdÇi#fÍà¬9faÌ‚‘Vâ˜Gýån½ cmã_™R,Eƒ9Ô_¹‡Á ó–¼Ûo̼¼ü@{®…®,z Û­×ÐÑ]½+-}«óËçwzÔßïÒ½wëÇ1 £{N^”í0/v÷Û´s©öÚuë‰Î†æ'Dvª‹J)0ú<Æßðœ ê/Œš)têÜM0ÎZ4Ñé‘÷å¯ }GY SýK„á3: ™ºhÀD7ÃÜÙBmRNªíÕ—uÒ Ñó—ìÓ8šœÁ:Å+Ïõ味xñ€EŸaÓ„~£ç´~>l–ÏÀi%v³Ã×ûO®I±ŠÜüÉåH×TóâöFœ6’W x ™î&Œ±‰L&“гÿ˜]u³¥»"-L9¥µŽ?:É#ÝžW xÁIûFÌúšÝe¼“rð¯¼i“=³^9[Þ“W€0`ÜaĬ aVèéK iÕaÌ‚X^Ÿé7z®ÐwÔ,᥾#Zà[©ç€±Â IÎÂÐé¾Â˜…±ÂèÑÂÐiÞ¼0À‹jà{a¼cšºÓ$}ia]»õÜmð÷žƒ&»ö4ÝéÇTaÈ4/aàD^0àÅ;a¢›Qú´óhë¨ASýJ§L®™?#¤ÎñUÙ2—™ŠÕ>¯ÊWøMõ+±=?rpŸaS{KAáœyG˜ê[Ì |«ƒa¼m÷‰núñæ0p½#|A⥭ò¼Þ^sUç kÔ:š4ÒX¸ô¸rnôö«ÈM3Bêí-½ó 5°¿Ð¶ñoFX-2O¡×¨¡B×A]y¡€Žhð·3BêüíTô­q`lQ9šÍãÆç‡±õ{Ý5­MêÍ‚¤£šiA…‹Ç:„ –§ÿÄÉŸ=hg aØL·Î#æxÍê=fdïîC{òBÑKÏA³Ã×:¥ßÔü[$ü§aŽ'sXÌŽ\£Ÿè¦±>Û·g—¾m7lf€Po2™?ú›ì•?lŽý´Á3gwâ•:j0„­ 4À£Ã'ÃAwMe“rJ5i‘ÎyðtÛ³£j„žƒÆw™è¦2-°"ðUE]ê0+Û¡}_jÁ+ ¼`Áð`ÌÝöŠs¬eCºM^”3Ï*rsì‚¥‡µÜ¢ü‡ÍòùÊä*að«ö¼ØÀ‹ öÚ«š îÉãÓ­-uÐ_WÏß•1ÖÖËkzPYÄð¹>ÃÏtd•xƒÁªyq{’çDmÓ:hÕÖ‰¯'y© –¾Ù 6©'”ã]ü†Î°ëþò¸q}ÆâE^¤`hú&µƒîZë°N<¤šº*Õ:á Ê*j­~‚ËbÙ7uèÀ)sÇži+têÆhàÅ †O†Mêí$ÌàñŽiŽ–¾EÉóâöèm•çUæˆPNtÓ:ué6€Z^Ô`p44™£á´Î&å”Î^Û ~èŽJêyq»“†Ïq9d¦/<ðbÃO~kþ·K–&Mkïi5Îi/<ðâî<¨mÒN+'¹+]ú ÒEó“0j^¸0ìUÁ¢sW&x±ƒAº›R“jÁÒãI]u6£¬#ûõ7¿k·^ƒºHÏÃ&õ4“¼ÈÁðÉ¥I*Û´³ª9Q[—Xú¸Mñηï”öJï¡Sº1À‹ …ƒ½öªÚN}Q7'jÛ’~£­2ÁðùË”t×´Ö £û ÁðïÁШµŽ?C0Á @0 Á@0Á€`@0  Á @0 Á@0Á€`@0  Á @0 Á@0Á ‚Á€`@0 €` ‚`‚ €`  ‚Á€` ‚`‚ ´úÿ¨S ÃÁ¹%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/images/timezone_9.5.png000066400000000000000000000056241430147706700257140ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢ dIDATxÚíÝYp•åÀñµbqW¦›­hWÚ1{BÎ9*"•¥ ‘-²„5[[ìH-B+`Ø$æHEÙd‘@k§3U§N§µ­Õi/dKµÅô;™+µSmë…Éï7ódæ|“ó]{±þØG‹…äÌÚYX5yK^ï ²/½w}Vg›€v掿¦ï”»øpì§5’SÛsæÎÂoNlÌI/_—™?~mæY¶ íÌÐ%©çLÞ’hÈ 'æî)~´¢1§GVåWγ2½ûØU·tgÛ'´+<[4lÎîâ§«Ç~õq‚aqSìç³wO»oSNϦÖéaá¡!aâÆìpÏcm÷õ ÐÌÛ_2µæHü(Þû8ÁÐö­IGoÍß_ºnúŽAɯY½¨`îõ]ÂÅg&O-ÚÂá¡ïK_fÉði5É”Úæ¶`hý/çdôüã –îxàÙâá£W W¹=¿ëÌ…§fÆÓƒºNÙšw¦m@†º–Ä»Ñý6FÓ0ÿÀû3ï¹’Gg<]XfÛЃáïóÞéSw4q"Іõ¶ ‚á_OŽ&Þ‰‚aƒm€` Á‚A0‚ €`>IÑ ùi5Gâ'ë%Zë&NF/îÿ”œúc‚:¼Ù»ŠŠçï/]µð`éà ”.‰^ØÏªÚW2sÑ¡![¢x­¶%ñÎÿ‚>½:%ÿ¼Úº(ìm–¾4,TíÊËèùÀ³E¥UÏ•”/<8äûQL¬¯iŽÿQ0@Ò¯üÊpͰφ®7¦„î©ÝÛ&iâãÙ¡¶9V¿>*Œx¤·‘Ëô˜ñ£Aã£k¿ÿÐ08vë_£¨øY]Kâ/‚:€³oH )}»…‰ÙáÞ YaüÚÌkçï/Ý”üŒÃéQPÝûÍ”­ye‹žý.züÞ‡Ãz€vlÒ¦œ.ãÖdž?ÉÚú£‰?'c þXâdmsâ—³wϘ¼%7³¶9~üßœ0hÏ*s®֊P±1»wõáØO¢8¹à`é¦ûŸ*È»*ý‚¹{?^ÓÔvÂð`ˆââD +m:†Nsv/¯Ú7øñ)[ó®lmm ñº¾çÍÝS|pÖÎÂòšæøÿü¶¤(ÞŽþw©µ@Ыà¢NQ(ô½"íKñÚ¾]†.I=ÿÞõYçnË»gʶ¼ž ”6ÕK¼{Z0|Ïæ ¸,·ghx}tHž,ä̼¶sùú¬^9ée ——­É¸zÖ3E«§ï4oqSì‚:˜üÙ×µMRÉ⛺ÎÜYXÁæ ³‡]’zɸ5™ÝÊ×eöªÚW²6ù£o‚: ›Æ|1̹.Í»¡kÚ}W}ó˜+:÷ŸÐ;|û…ÛÂð¥ý:Wn/¸¹úHü:Ÿa€Ž)oVŸ;³O¸~äÂ%Ù=¹_=·íúõ ÓžÈïµèÐWêœ0§›º-ïÂ(6ÔµÄß ÀTn/è<ý©AWVí¼vÎîâjN™öd~¸iÔFÿ``ʈeηà( ÿâÎp¢õ»–ÀÿÃßjä€3žy I%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-calamares-2d126ae/src/modules/locale/locale.conf000066400000000000000000000114511430147706700236150ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # These settings are used to set your default system time zone. # Time zones are usually located under /usr/share/zoneinfo and # provided by the 'tzdata' package of your Distribution. # # 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. # # Note that useSystemTimezone and GeoIP settings can change the # starting time zone. # region: "America" zone: "New_York" # Instead of using *region* and *zone* specified above, # you can use the system's notion of the timezone, instead. # This can help if your system is automatically configured with # a sensible TZ rather than chasing a fixed default. # # The default is false. # # useSystemTimezone: true # Should changing the system location (e.g. clicking around on the timezone # map) immediately reflect the changed timezone in the live system? # By default, installers (with a target system) do, and setup (e.g. OEM # configuration) does not, but you can switch it on here (or off, if # you think it's annoying in the installer). # # Note that not all systems support live adjustment. # # adjustLiveTimezone: true # System locales are detected in the following order: # # - /usr/share/i18n/SUPPORTED # - localeGenPath (defaults to /etc/locale.gen if not set) # - `locale -a` output # # Enable only when your Distribution is using a # custom path for locale.gen # #localeGenPath: "/etc/locale.gen" # GeoIP based Language settings: Leave commented out to disable GeoIP. # # GeoIP needs a working Internet connection. # This can be managed from `welcome.conf` by adding # internet to the list of required conditions. (The welcome # module can also do its own GeoIP lookups, independently # of the lookup done here. The lookup in the welcome module # is used to establish language; this one is for timezone). # # The configuration is in three parts: # - a *style*, which can be "json" or "xml" depending on the # kind of data returned by the service, and # - a *url* where the data is retrieved, and # - an optional *selector* # to pick the right field out of the returned data (e.g. field # name in JSON or element name in XML). # # The 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 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-calamares-2d126ae/src/modules/locale/locale.qrc000066400000000000000000000034321430147706700234550ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/locale/locale.schema.yaml000066400000000000000000000020351430147706700250670ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/locale/tests/000077500000000000000000000000001430147706700226475ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/locale/tests/locale-data-freebsd000066400000000000000000000016661430147706700263610ustar00rootroot00000000000000C.UTF-8 af_ZA.UTF-8 am_ET.UTF-8 ar_AE.UTF-8 ar_EG.UTF-8 ar_JO.UTF-8 ar_MA.UTF-8 ar_QA.UTF-8 ar_SA.UTF-8 be_BY.UTF-8 bg_BG.UTF-8 ca_AD.UTF-8 ca_ES.UTF-8 ca_FR.UTF-8 ca_IT.UTF-8 cs_CZ.UTF-8 da_DK.UTF-8 de_AT.UTF-8 de_CH.UTF-8 de_DE.UTF-8 el_GR.UTF-8 en_AU.UTF-8 en_CA.UTF-8 en_GB.UTF-8 en_HK.UTF-8 en_IE.UTF-8 en_NZ.UTF-8 en_PH.UTF-8 en_SG.UTF-8 en_US.UTF-8 en_ZA.UTF-8 es_AR.UTF-8 es_CR.UTF-8 es_ES.UTF-8 es_MX.UTF-8 et_EE.UTF-8 eu_ES.UTF-8 fi_FI.UTF-8 fr_BE.UTF-8 fr_CA.UTF-8 fr_CH.UTF-8 fr_FR.UTF-8 ga_IE.UTF-8 he_IL.UTF-8 hi_IN.UTF-8 hr_HR.UTF-8 hu_HU.UTF-8 hy_AM.UTF-8 is_IS.UTF-8 it_CH.UTF-8 it_IT.UTF-8 ja_JP.UTF-8 kk_KZ.UTF-8 ko_KR.UTF-8 lt_LT.UTF-8 lv_LV.UTF-8 mn_MN.UTF-8 nb_NO.UTF-8 nl_BE.UTF-8 nl_NL.UTF-8 nn_NO.UTF-8 pl_PL.UTF-8 pt_BR.UTF-8 pt_PT.UTF-8 ro_RO.UTF-8 ru_RU.UTF-8 se_FI.UTF-8 se_NO.UTF-8 sk_SK.UTF-8 sl_SI.UTF-8 sr_RS.UTF-8 sr_RS.UTF-8@latin sv_FI.UTF-8 sv_SE.UTF-8 tr_TR.UTF-8 uk_UA.UTF-8 zh_CN.UTF-8 zh_HK.UTF-8 zh_TW.UTF-8 calamares-calamares-2d126ae/src/modules/locale/tests/locale-data-neon000066400000000000000000000056371430147706700257100ustar00rootroot00000000000000aa_DJ.UTF-8 aa_ER aa_ER@saaho aa_ET af_ZA.UTF-8 agr_PE ak_GH am_ET an_ES.UTF-8 anp_IN ar_AE.UTF-8 ar_BH.UTF-8 ar_DZ.UTF-8 ar_EG.UTF-8 ar_IN ar_IQ.UTF-8 ar_JO.UTF-8 ar_KW.UTF-8 ar_LB.UTF-8 ar_LY.UTF-8 ar_MA.UTF-8 ar_OM.UTF-8 ar_QA.UTF-8 ar_SA.UTF-8 ar_SD.UTF-8 ar_SS ar_SY.UTF-8 ar_TN.UTF-8 ar_YE.UTF-8 ayc_PE az_AZ az_IR as_IN ast_ES.UTF-8 be_BY.UTF-8 be_BY@latin bem_ZM ber_DZ ber_MA bg_BG.UTF-8 bhb_IN.UTF-8 bho_IN bho_NP bi_VU bn_BD bn_IN bo_CN bo_IN br_FR.UTF-8 brx_IN bs_BA.UTF-8 byn_ER ca_AD.UTF-8 ca_ES.UTF-8 ca_ES@valencia ca_FR.UTF-8 ca_IT.UTF-8 ce_RU ckb_IQ chr_US cmn_TW crh_UA cs_CZ.UTF-8 csb_PL cv_RU cy_GB.UTF-8 da_DK.UTF-8 de_AT.UTF-8 de_BE.UTF-8 de_CH.UTF-8 de_DE.UTF-8 de_IT.UTF-8 de_LI.UTF-8 de_LU.UTF-8 doi_IN dsb_DE dv_MV dz_BT el_GR.UTF-8 el_CY.UTF-8 en_AG en_AU.UTF-8 en_BW.UTF-8 en_CA.UTF-8 en_DK.UTF-8 en_GB.UTF-8 en_HK.UTF-8 en_IE.UTF-8 en_IL en_IN en_NG en_NZ.UTF-8 en_PH.UTF-8 en_SC.UTF-8 en_SG.UTF-8 en_US.UTF-8 en_ZA.UTF-8 en_ZM en_ZW.UTF-8 eo eo_US.UTF-8 es_AR.UTF-8 es_BO.UTF-8 es_CL.UTF-8 es_CO.UTF-8 es_CR.UTF-8 es_CU es_DO.UTF-8 es_EC.UTF-8 es_ES.UTF-8 es_GT.UTF-8 es_HN.UTF-8 es_MX.UTF-8 es_NI.UTF-8 es_PA.UTF-8 es_PE.UTF-8 es_PR.UTF-8 es_PY.UTF-8 es_SV.UTF-8 es_US.UTF-8 es_UY.UTF-8 es_VE.UTF-8 et_EE.UTF-8 eu_ES.UTF-8 eu_FR.UTF-8 fa_IR ff_SN fi_FI.UTF-8 fil_PH fo_FO.UTF-8 fr_BE.UTF-8 fr_CA.UTF-8 fr_CH.UTF-8 fr_FR.UTF-8 fr_LU.UTF-8 fur_IT fy_NL fy_DE ga_IE.UTF-8 gd_GB.UTF-8 gez_ER gez_ER@abegede gez_ET gez_ET@abegede gl_ES.UTF-8 gu_IN gv_GB.UTF-8 ha_NG hak_TW he_IL.UTF-8 hi_IN hif_FJ hne_IN hr_HR.UTF-8 hsb_DE.UTF-8 ht_HT hu_HU.UTF-8 hy_AM ia_FR id_ID.UTF-8 ig_NG ik_CA is_IS.UTF-8 it_CH.UTF-8 it_IT.UTF-8 iu_CA ja_JP.UTF-8 ka_GE.UTF-8 kab_DZ kk_KZ.UTF-8 kl_GL.UTF-8 km_KH kn_IN ko_KR.UTF-8 kok_IN ks_IN ks_IN@devanagari ku_TR.UTF-8 kw_GB.UTF-8 ky_KG lb_LU lg_UG.UTF-8 li_BE li_NL lij_IT ln_CD lo_LA lt_LT.UTF-8 lv_LV.UTF-8 lzh_TW mag_IN mai_IN mai_NP mfe_MU mg_MG.UTF-8 mhr_RU mi_NZ.UTF-8 miq_NI mjw_IN mk_MK.UTF-8 ml_IN mn_MN mni_IN mnw_MM mr_IN ms_MY.UTF-8 mt_MT.UTF-8 my_MM nan_TW nan_TW@latin nb_NO.UTF-8 nds_DE nds_NL ne_NP nhn_MX niu_NU niu_NZ nl_AW nl_BE.UTF-8 nl_NL.UTF-8 nn_NO.UTF-8 nr_ZA nso_ZA oc_FR.UTF-8 om_ET om_KE.UTF-8 or_IN os_RU pa_IN pa_PK pap_AW pap_CW pl_PL.UTF-8 ps_AF pt_BR.UTF-8 pt_PT.UTF-8 quz_PE raj_IN ro_RO.UTF-8 ru_RU.UTF-8 ru_UA.UTF-8 rw_RW sa_IN sah_RU sat_IN sc_IT sd_IN sd_IN@devanagari sd_PK se_NO sgs_LT shn_MM shs_CA si_LK sid_ET sk_SK.UTF-8 sl_SI.UTF-8 sm_WS so_DJ.UTF-8 so_ET so_KE.UTF-8 so_SO.UTF-8 sq_AL.UTF-8 sq_MK sr_ME sr_RS sr_RS@latin ss_ZA st_ZA.UTF-8 sv_FI.UTF-8 sv_SE.UTF-8 sw_KE sw_TZ szl_PL ta_IN ta_LK tcy_IN.UTF-8 te_IN tg_TJ.UTF-8 th_TH.UTF-8 the_NP ti_ER ti_ET tig_ER tk_TM tl_PH.UTF-8 tn_ZA to_TO tpi_PG tr_CY.UTF-8 tr_TR.UTF-8 ts_ZA tt_RU tt_RU@iqtelif ug_CN ug_CN@latin uk_UA.UTF-8 unm_US ur_IN ur_PK uz_UZ.UTF-8 uz_UZ@cyrillic ve_ZA vi_VN wa_BE.UTF-8 wae_CH wal_ET wo_SN xh_ZA.UTF-8 yi_US.UTF-8 yo_NG yue_HK yuw_PG zh_CN.UTF-8 zh_HK.UTF-8 zh_SG.UTF-8 zh_TW.UTF-8 zu_ZA.UTF-8 calamares-calamares-2d126ae/src/modules/locale/timezonewidget/000077500000000000000000000000001430147706700245435ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/locale/timezonewidget/TimeZoneImage.cpp000066400000000000000000000120371430147706700277470ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/timezonewidget/TimeZoneImage.h000066400000000000000000000045511430147706700274160ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/timezonewidget/timezonewidget.cpp000066400000000000000000000127231430147706700303120ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/locale/timezonewidget/timezonewidget.h000066400000000000000000000045061430147706700277570ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/localecfg/000077500000000000000000000000001430147706700221655ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/localecfg/main.py000066400000000000000000000143121430147706700234640ustar00rootroot00000000000000#!/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 = [] try: with open(srcfilename, "r") as gen: text = gen.readlines() except FileNotFoundError: # That's ok, the file doesn't exist so assume empty pass # we want unique values, so locale_values should have 1 or 2 items locale_values = set(locale_conf.values()) 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-calamares-2d126ae/src/modules/localecfg/module.desc000066400000000000000000000004671430147706700243210ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/localeq/000077500000000000000000000000001430147706700216665ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/localeq/CMakeLists.txt000066400000000000000000000026551430147706700244360ustar00rootroot00000000000000# === 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}/Config.cpp ${_locale}/LocaleConfiguration.cpp ${_locale}/LocaleNames.cpp ${_locale}/SetTimezoneJob.cpp RESOURCES localeq.qrc LINK_PRIVATE_LIBRARIES Qt5::Network SHARED_LIB ) calamares-calamares-2d126ae/src/modules/localeq/LocaleQmlViewStep.cpp000066400000000000000000000032431430147706700257340ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/localeq/LocaleQmlViewStep.h000066400000000000000000000023111430147706700253740ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/localeq/Map.qml000066400000000000000000000206741430147706700231270ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 - 2022 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ import QtQuick 2.10 import QtQuick.Controls 2.10 import QtQuick.Window 2.14 import QtQuick.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami import QtLocation 5.14 import QtPositioning 5.14 Column { width: parent.width // These are used by the map query to initially center the // map on the user's likely location. They are updated by // getIp() which does a more accurate GeoIP lookup than // the default one in Calamares property var cityName: "" property var countryName: "" /* This is an extra GeoIP lookup, which will find better-accuracy * location data for the user's IP, and then sets the current timezone * and map location. Call it from Component.onCompleted so that * it happens "on time" before the page is shown. */ function getIpOnline() { var xhr = new XMLHttpRequest xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { var responseJSON = JSON.parse(xhr.responseText) var tz = responseJSON.timezone var ct = responseJSON.city var cy = responseJSON.country cityName = ct countryName = cy config.setCurrentLocation(tz) } } // Define the target of the request xhr.open("GET", "https://get.geojs.io/v1/ip/geo.json") // Execute the request xhr.send() } /* This is an "offline" GeoIP lookup -- it just follows what * Calamares itself has figured out with its GeoIP or configuration. * Call it from the **Component** onActivate() -- in localeq.qml -- * so it happens as the page is shown. */ function getIpOffline() { cityName = config.currentLocation.zone countryName = config.currentLocation.countryCode } /* This is an **accurate** TZ lookup method: it queries an * online service for the TZ at the given coordinates. It * requires an internet connection, though, and the distribution * will need to have an account with geonames to not hit the * daily query limit. * * See below, in MouseArea, for calling the right method. */ function getTzOnline() { var xhr = new XMLHttpRequest var latC = map.center.latitude var lonC = map.center.longitude xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { var responseJSON = JSON.parse(xhr.responseText) var tz2 = responseJSON.timezoneId config.setCurrentLocation(tz2) } } console.log("Online lookup", latC, lonC) // Needs to move to localeq.conf, each distribution will need their own account xhr.open("GET", "http://api.geonames.org/timezoneJSON?lat=" + latC + "&lng=" + lonC + "&username=SOME_USERNAME") xhr.send() } /* This is a quick TZ lookup method: it uses the existing * Calamares "closest TZ" code, which has lots of caveats. * * See below, in MouseArea, for calling the right method. */ function getTzOffline() { var latC = map.center.latitude var lonC = map.center.longitude var tz = config.zonesModel.lookup(latC, lonC) console.log("Offline lookup", latC, lonC) config.setCurrentLocation(tz.region, tz.zone) } Rectangle { width: parent.width height: parent.height / 1.28 Plugin { id: mapPlugin preferred: ["osm", "esri"] // "esri", "here", "itemsoverlay", "mapbox", "mapboxgl", "osm" } Map { id: map anchors.fill: parent plugin: mapPlugin activeMapType: supportedMapTypes[0] //might be desirable to set zoom level configurable? zoomLevel: 7 bearing: 0 tilt: 0 copyrightsVisible : true fieldOfView : 0 GeocodeModel { id: geocodeModel plugin: mapPlugin autoUpdate: true query: Address { id: address city: cityName country: countryName } onLocationsChanged: { if (count == 1) { map.center.latitude = get(0).coordinate.latitude map.center.longitude = get(0).coordinate.longitude } } } MapQuickItem { id: marker anchorPoint.x: image.width/4 anchorPoint.y: image.height coordinate: QtPositioning.coordinate( map.center.latitude, map.center.longitude) //coordinate: QtPositioning.coordinate(40.730610, -73.935242) // New York sourceItem: Image { id: image width: 32 height: 32 source: "img/pin.svg" } } MouseArea { acceptedButtons: Qt.LeftButton anchors.fill: map hoverEnabled: true property var coordinate: map.toCoordinate(Qt.point(mouseX, mouseY)) onClicked: { marker.coordinate = coordinate map.center.latitude = coordinate.latitude map.center.longitude = coordinate.longitude // Pick a TZ lookup method here (quick:offline, accurate:online) getTzOffline(); } } } Column { anchors.bottom: parent.bottom anchors.right: parent.right anchors.bottomMargin: 5 anchors.rightMargin: 10 MouseArea { width: 32 height:32 cursorShape: Qt.PointingHandCursor Image { source: "img/plus.png" anchors.centerIn: parent width: 36 height: 36 } onClicked: map.zoomLevel++ } MouseArea { width: 32 height:32 cursorShape: Qt.PointingHandCursor Image { source: "img/minus.png" anchors.centerIn: parent width: 32 height: 32 } onClicked: map.zoomLevel-- } } } Rectangle { width: parent.width height: 100 anchors.horizontalCenter: parent.horizontalCenter Item { id: location Kirigami.Theme.inherit: false Kirigami.Theme.colorSet: Kirigami.Theme.Complementary anchors.horizontalCenter: parent.horizontalCenter Rectangle { anchors.centerIn: parent width: 300 height: 30 color: Kirigami.Theme.backgroundColor Text { id: tzText text: qsTr("Timezone: %1").arg(config.currentTimezoneName) color: Kirigami.Theme.textColor anchors.centerIn: parent } /* If you want an extra (and accurate) GeoIP lookup, * enable this one and disable the offline lookup in * onActivate(). Component.onCompleted: getIpOnline(); */ } } Text { anchors.top: location.bottom anchors.topMargin: 20 padding: 10 width: parent.width wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor text: qsTr("Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.") } } } calamares-calamares-2d126ae/src/modules/localeq/Offline.qml000066400000000000000000000164561430147706700237770ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020-2022 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ import io.calamares.core 1.0 import io.calamares.ui 1.0 import QtQuick 2.10 import QtQuick.Controls 2.10 import QtQuick.Window 2.14 import QtQuick.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami Page { width: 800 //parent.width height: 500 id: control property string currentRegion property string currentZone StackView { id: stack anchors.fill: parent clip: true initialItem: Item { Label { id: region anchors.horizontalCenter: parent.horizontalCenter color: Kirigami.Theme.textColor horizontalAlignment: Text.AlignCenter text: qsTr("Select your preferred Region, or use the default settings.") } ListView { id: list ScrollBar.vertical: ScrollBar { active: true } width: parent.width / 2 height: parent.height / 1.5 anchors.centerIn: parent anchors.verticalCenterOffset: -30 focus: true clip: true boundsBehavior: Flickable.StopAtBounds spacing: 2 Rectangle { z: parent.z - 1 anchors.fill: parent color: "#BDC3C7" radius: 5 opacity: 0.7 } model: config.regionModel currentIndex: -1 delegate: ItemDelegate { hoverEnabled: true width: parent.width height: 30 highlighted: ListView.isCurrentItem Label { text: model.name horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter width: parent.width height: 30 color: highlighted ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor background: Rectangle { color: highlighted || hovered ? Kirigami.Theme.highlightColor : "white" //Kirigami.Theme.backgroundColor opacity: highlighted || hovered ? 0.5 : 0.3 } } onClicked: { list.currentIndex = index control.currentRegion = model.name config.regionalZonesModel.region = control.currentRegion tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName) stack.push(zoneView) } } } } Component { id: zoneView Item { Label { id: zone anchors.horizontalCenter: parent.horizontalCenter color: Kirigami.Theme.textColor text: qsTr("Select your preferred Zone within your Region.") } ListView { id: list2 ScrollBar.vertical: ScrollBar { active: true } width: parent.width / 2 height: parent.height / 1.5 anchors.centerIn: parent anchors.verticalCenterOffset: -30 focus: true clip: true boundsBehavior: Flickable.StopAtBounds spacing: 2 Rectangle { z: parent.z - 1 anchors.fill: parent color: "#BDC3C7" radius: 5 opacity: 0.7 } model: config.regionalZonesModel currentIndex : -1 delegate: ItemDelegate { hoverEnabled: true width: parent.width height: 30 highlighted: ListView.isCurrentItem Label { text: model.name horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter width: parent.width height: 30 color: highlighted ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor background: Rectangle { color: highlighted || hovered ? Kirigami.Theme.highlightColor : "white" //Kirigami.Theme.backgroundColor opacity: highlighted || hovered ? 0.5 : 0.3 } } onClicked: { list2.currentIndex = index list2.positionViewAtIndex(index, ListView.Center) control.currentZone = model.name config.setCurrentLocation(control.currentRegion, control.currentZone) tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName) } } } Button { Layout.fillWidth: true anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: -30 anchors.left: parent.left anchors.leftMargin: parent.width / 15 icon.name: "go-previous" text: qsTr("Zones") onClicked: stack.pop() } } } } Rectangle { width: parent.width height: 60 anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom Item { id: location Kirigami.Theme.inherit: false Kirigami.Theme.colorSet: Kirigami.Theme.Complementary anchors.horizontalCenter: parent.horizontalCenter Rectangle { anchors.centerIn: parent width: 300 height: 30 color: Kirigami.Theme.backgroundColor Text { id: tztext text: qsTr("Timezone: %1").arg(config.currentTimezoneName) color: Kirigami.Theme.textColor anchors.centerIn: parent } } } Text { anchors.top: location.bottom anchors.topMargin: 20 padding: 10 width: parent.width wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor text: qsTr("You can fine-tune Language and Locale settings below.") } } } calamares-calamares-2d126ae/src/modules/localeq/i18n.qml000066400000000000000000000161411430147706700231630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 - 2021 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ import io.calamares.ui 1.0 import QtQuick 2.7 import QtQuick.Controls 2.2 import QtQuick.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami Item { readonly property color backgroundColor: Kirigami.Theme.backgroundColor //"#F5F5F5" readonly property color headerBackgroundColor: Kirigami.Theme.alternateBackgroundColor //"#d3d3d3" readonly property color backgroundLighterColor: "#ffffff" readonly property color highlightColor: Kirigami.Theme.highlightColor //"#3498DB" readonly property color textColor: Kirigami.Theme.textColor readonly property color highlightedTextColor: Kirigami.Theme.highlightedTextColor width: parent.width height: parent.height focus: true Rectangle { id: textArea x: 28 y: 14 anchors.fill: parent color: backgroundColor Column { id: languages x: 130 y: 40 Rectangle { width: 250 height: 140 color: headerBackgroundColor Text { anchors.top: parent.top width: 240 wrapMode: Text.WordWrap text: qsTr("

Languages


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

Locales


The system locale setting affects the numbers and dates format. The current setting is %1.").arg(config.currentLCCode) font.pointSize: 10 } } Rectangle { width: 250 height: 300 ScrollView { id: scroll2 anchors.fill: parent contentHeight: 800 ScrollBar.horizontal.policy: ScrollBar.AlwaysOff ListView { id: list2 focus: true clip: true model: config.supportedLocales currentIndex: -1 //model.currentLCCodeIndex delegate: ItemDelegate { hoverEnabled: true width: parent.width implicitHeight: 18 highlighted: ListView.isCurrentItem Label { Layout.fillHeight: true Layout.fillWidth: true width: parent.width height: 18 color: highlighted ? highlightedTextColor : textColor text: modelData background: Rectangle { color: highlighted || hovered ? highlightColor : backgroundLighterColor opacity: highlighted || hovered ? 0.5 : 0.9 } MouseArea { hoverEnabled: true anchors.fill: parent cursorShape: Qt.PointingHandCursor onClicked: { list2.currentIndex = index } } } } onCurrentItemChanged: { config.currentLCCode = model[currentIndex]; } /* This works because model is a stringlist */ } } } } ToolButton { id: toolButton x: 19 y: 29 width: 105 height: 48 text: qsTr("Back") hoverEnabled: true onClicked: load.source = "" Image { id: image1 x: 0 y: 13 width: 22 height: 22 source: "img/chevron-left-solid.svg" fillMode: Image.PreserveAspectFit } } } } calamares-calamares-2d126ae/src/modules/localeq/img/000077500000000000000000000000001430147706700224425ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/localeq/img/chevron-left-solid.svg000066400000000000000000000007421430147706700266720ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/localeq/img/chevron-left-solid.svg.license000066400000000000000000000001541430147706700303100ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 https://github.com/FortAwesome/Font-Awesome SPDX-License-Identifier: CC-BY-4.0 calamares-calamares-2d126ae/src/modules/localeq/img/locale.svg000077500000000000000000004527701430147706700244440ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/src/modules/localeq/img/locale.svg.license000066400000000000000000000001401430147706700260360ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 demmm SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/localeq/img/minus.png000066400000000000000000000002611430147706700243020ustar00rootroot00000000000000‰PNG  IHDR``â˜w8 pHYsÄÄ•+cIDATxœíÑÑ €0Áhÿ=ÇŒeæÿàq;|Éñàf¾¾â_–~zîZÁ=Ĉ  &@L€˜1bÄ\¾°dhÇIEND®B`‚calamares-calamares-2d126ae/src/modules/localeq/img/minus.png.license000066400000000000000000000001401430147706700257170ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 demmm SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/localeq/img/pin.svg000066400000000000000000000071021430147706700237510ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/src/modules/localeq/img/pin.svg.license000066400000000000000000000001401430147706700253650ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 demmm SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/localeq/img/plus.png000066400000000000000000000007431430147706700241370ustar00rootroot00000000000000‰PNG  IHDR``H‘¿³gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿ‡Ì¿ pHYs  šœtIMEä7Z¨º¾ÖIDATxÚíÚ1 Â@@щX.輂§ÍrŸ(¤ÅÆ&ëhø,üg%„q~«’$I’Ô©á°Éc”êÝw:õ[s¬Õk>êcNt§ôÐ @/`½€ôÐ @/`½€ôÐ @/`½À¯ZŽǸ%&_6³×x&fLû’ç†1%®¹»SR3Êþ%Ý…  @ky -ñHLþÇctAîÉ›¿ÐÐhÐ  @3€fÍš4hÐ  µ-æLþ–$I’$m½M±ASà%tEXtdate:create2020-04-22T10:15:07+00:00ÉgÈ%tEXtdate:modify2020-04-22T10:15:07+00:00¸:­tIEND®B`‚calamares-calamares-2d126ae/src/modules/localeq/img/plus.png.license000066400000000000000000000001401430147706700255470ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 demmm SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/localeq/localeq.conf000066400000000000000000000070731430147706700241640ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/localeq/localeq.qml000066400000000000000000000054561430147706700240330ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/localeq/localeq.qrc000066400000000000000000000005451430147706700240210ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/luksbootkeyfile/000077500000000000000000000000001430147706700234615ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/luksbootkeyfile/CMakeLists.txt000066400000000000000000000006771430147706700262330ustar00rootroot00000000000000# === 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_add_test( luksbootkeyfiletest SOURCES Tests.cpp LuksBootKeyFileJob.cpp ) calamares-calamares-2d126ae/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp000066400000000000000000000232151430147706700276360ustar00rootroot00000000000000/* === 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/Entropy.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/UMask.h" #include "utils/Variant.h" #include "GlobalStorage.h" #include "JobQueue.h" #include #include 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 ); // Get the data QByteArray entropy; auto entropySource = CalamaresUtils::getEntropy( 2048, entropy ); if ( entropySource != CalamaresUtils::EntropySource::URandom ) { cWarning() << "Could not get entropy from /dev/urandom for LUKS."; return false; } auto fileResult = CalamaresUtils::System::instance()->createTargetFile( keyfile, entropy, CalamaresUtils::System::WriteMode::Overwrite ); entropy.fill( 'A' ); if ( !fileResult ) { cWarning() << "Could not create LUKS keyfile:" << smash( fileResult.code() ); return false; } // Give ample time to check that the file was created correctly; // we actually expect ls to return pretty-much-instantly. auto r = CalamaresUtils::System::instance()->targetEnvCommand( { "ls", "-la", "/" }, QString(), QString(), std::chrono::seconds( 5 ) ); cDebug() << "In target system after creating LUKS file" << r.getOutput(); return true; } static bool setupLuks( const LuksDevice& d ) { // Sometimes this error is thrown: "All key slots full" // luksAddKey will fail. So, remove the first slot to make room auto luks_dump = CalamaresUtils::System::instance()->targetEnvCommand( { "cryptsetup", "luksDump", d.device }, QString(), QString(), std::chrono::seconds( 5 ) ); if ( luks_dump.getExitCode() == 0 ) { QRegularExpression re( QStringLiteral( R"(\d+:\s*enabled)" ), QRegularExpression::CaseInsensitiveOption ); int count = luks_dump.getOutput().count(re); cDebug() << "Luks Dump slot count: " << count; if ( count >= 7 ) { auto r = CalamaresUtils::System::instance()->targetEnvCommand( { "cryptsetup", "luksKillSlot", d.device, "1" }, QString(), d.passphrase, std::chrono::seconds( 60 ) ); if ( r.getExitCode() != 0 ) { cWarning() << "Could not kill a slot to make room on" << d.device << ':' << r.getOutput() << "(exit code" << r.getExitCode() << ')'; return false; } } } // Adding the key can take some times, measured around 15 seconds with // a HDD (spinning rust) and a slow-ish computer. Give it a minute. auto r = CalamaresUtils::System::instance()->targetEnvCommand( { "cryptsetup", "luksAddKey", d.device, keyfile }, QString(), d.passphrase, std::chrono::seconds( 60 ) ); 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 partitionsFromGlobalStorage() { Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); return globalStorage->value( QStringLiteral( "partitions" ) ).toList(); } /// Checks if the partition (represented by @p map) mounts to the given @p path STATICTEST bool hasMountPoint( const QVariantMap& map, const QString& path ) { const auto v = map.value( QStringLiteral( "mountPoint" ) ); return v.isValid() && QDir::cleanPath( v.toString() ) == path; } STATICTEST bool isEncrypted( const QVariantMap& map ) { return map.contains( QStringLiteral( "luksMapperName" ) ); } /// Checks for any partition satisfying @p pred STATICTEST bool anyPartition( bool ( *pred )( const QVariantMap& ) ) { const auto partitions = partitionsFromGlobalStorage(); return std::find_if( partitions.cbegin(), partitions.cend(), [ &pred ]( const QVariant& partitionVariant ) { return pred( partitionVariant.toMap() ); } ) != partitions.cend(); } STATICTEST bool hasUnencryptedSeparateBoot() { return anyPartition( []( const QVariantMap& partition ) { return hasMountPoint( partition, QStringLiteral( "/boot" ) ) && !isEncrypted( partition ); } ); } STATICTEST bool hasEncryptedRoot() { return anyPartition( []( const QVariantMap& partition ) { return hasMountPoint( partition, QStringLiteral( "/" ) ) && isEncrypted( partition ); } ); } Calamares::JobResult LuksBootKeyFileJob::exec() { 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 // But only if root partition is not encrypted if ( hasUnencryptedSeparateBoot() && !hasEncryptedRoot() ) { cDebug() << Logger::SubEntry << "/boot partition is not encrypted, skipping keyfile creation."; return Calamares::JobResult::ok(); } if ( s.devices.first().passphrase.isEmpty() ) { cDebug() << Logger::SubEntry << "No root passphrase."; 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 ) { // Skip setupLuks for root partition if system has an unencrypted /boot if ( d.isRoot && hasUnencryptedSeparateBoot() ) { continue; } if ( !setupLuks( d ) ) return Calamares::JobResult::error( tr( "Encrypted rootfs setup error" ), 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-calamares-2d126ae/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h000066400000000000000000000016541430147706700273060ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/luksbootkeyfile/Tests.cpp000066400000000000000000000113731430147706700252740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2022 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include #undef STATICTEST #define STATICTEST extern // Implementation details STATICTEST bool hasMountPoint( const QVariantMap& map, const QString& path ); STATICTEST bool isEncrypted( const QVariantMap& map ); STATICTEST bool anyPartition( bool ( *pred )( const QVariantMap& ) ); STATICTEST bool hasUnencryptedSeparateBoot(); STATICTEST bool hasEncryptedRoot(); class LuksBootKeyFileTests : public QObject { Q_OBJECT public: LuksBootKeyFileTests() {} ~LuksBootKeyFileTests() override {} private Q_SLOTS: void initTestCase(); void testMountPoint(); void testIsEncrypted(); void testAnyPartition(); }; void LuksBootKeyFileTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "LuksBootKeyFile test started."; if ( !Calamares::JobQueue::instance() ) { (void)new Calamares::JobQueue(); } } void LuksBootKeyFileTests::testMountPoint() { QVariantMap m; // As if this is a partition data const QString key = QStringLiteral( "mountPoint" ); const QString boot = QStringLiteral( "/boot" ); const QString root = QStringLiteral( "/" ); QVERIFY( !hasMountPoint( m, QString() ) ); QVERIFY( !hasMountPoint( m, boot ) ); m.insert( key, boot ); QVERIFY( hasMountPoint( m, boot ) ); QVERIFY( !hasMountPoint( m, QString() ) ); QVERIFY( !hasMountPoint( m, root ) ); m.insert( key, root ); QVERIFY( !hasMountPoint( m, boot ) ); QVERIFY( !hasMountPoint( m, QString() ) ); QVERIFY( hasMountPoint( m, root ) ); m.remove( key ); QVERIFY( !hasMountPoint( m, root ) ); } void LuksBootKeyFileTests::testIsEncrypted() { QVariantMap m; // As if this is a partition data const QString key = QStringLiteral( "luksMapperName" ); const QString name = QStringLiteral( "any-name" ); QVERIFY( !isEncrypted( m ) ); // Even an empty string is considered encrypted m.insert( key, QString() ); QVERIFY( isEncrypted( m ) ); m.insert( key, name ); QVERIFY( isEncrypted( m ) ); m.insert( key, QString() ); QVERIFY( isEncrypted( m ) ); m.remove( key ); QVERIFY( !isEncrypted( m ) ); } void LuksBootKeyFileTests::testAnyPartition() { // This is kind of annoying: we need to build up // partition data in GS because the functions we're testing // go straight to GS. auto* gs = Calamares::JobQueue::instanceGlobalStorage(); QVERIFY( gs ); const QString partitionsKey = QStringLiteral( "partitions" ); const QString mountPointKey = QStringLiteral( "mountPoint" ); const QString boot = QStringLiteral( "/boot" ); const QString root = QStringLiteral( "/" ); QVariantList partitions; QVariantMap p; QVERIFY( !gs->contains( partitionsKey ) ); // Empty list! QVERIFY( !anyPartition( []( const QVariantMap& ) { return true; } ) ); gs->insert( partitionsKey, partitions ); QVERIFY( !anyPartition( []( const QVariantMap& ) { return true; } ) ); // Still an empty list partitions.append( p ); QCOMPARE( partitions.count(), 1 ); gs->insert( partitionsKey, partitions ); QVERIFY( anyPartition( []( const QVariantMap& ) { return true; } ) ); // Now a one-element list QVERIFY( !anyPartition( []( const QVariantMap& ) { return false; } ) ); // Now a one-element list p.insert( mountPointKey, boot ); QVERIFY( hasMountPoint( p, boot ) ); partitions.append( p ); QCOMPARE( partitions.count(), 2 ); // Note that GS is not updated yet, so we expect this to fail QEXPECT_FAIL( "", "GS not updated", Continue ); QVERIFY( anyPartition( []( const QVariantMap& partdata ) { cDebug() << partdata; return hasMountPoint( partdata, QStringLiteral( "/boot" ) ); } ) ); gs->insert( partitionsKey, partitions ); // Update GS QVERIFY( anyPartition( []( const QVariantMap& partdata ) { cDebug() << partdata; return hasMountPoint( partdata, QStringLiteral( "/boot" ) ); } ) ); QVERIFY( !anyPartition( []( const QVariantMap& partdata ) { return hasMountPoint( partdata, QStringLiteral( "/" ) ); } ) ); QVERIFY( !anyPartition( []( const QVariantMap& partdata ) { return hasMountPoint( partdata, QString() ); } ) ); QVERIFY( !hasEncryptedRoot() ); QVERIFY( hasUnencryptedSeparateBoot() ); } QTEST_GUILESS_MAIN( LuksBootKeyFileTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-calamares-2d126ae/src/modules/luksopenswaphookcfg/000077500000000000000000000000001430147706700243425ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/luksopenswaphookcfg/CMakeLists.txt000066400000000000000000000010151430147706700270770ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2021 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # # Because LUKS Open Swap Hook (Job) is such a mouthful, we'll # use LOSH all over the place as a shorthand. calamares_add_plugin(luksopenswaphookcfg TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES LOSHJob.cpp SHARED_LIB ) calamares_add_test( luksopenswaphooktest SOURCES LOSHJob.cpp Tests.cpp ) calamares-calamares-2d126ae/src/modules/luksopenswaphookcfg/LOSHInfo.h000066400000000000000000000036571430147706700261070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef LUKSOPENSWAPHOOKCFG_LOSHINFO_H #define LUKSOPENSWAPHOOKCFG_LOSHINFO_H #include /** @brief Information needed to create a suitable config file * * The LUKS swap configuration has a handful of keys that need to * be written to the config file. This struct holds those keys * and can find the key values from Global Storage (where the * *partition* module sets them). */ struct LOSHInfo { // Member names copied from Python code QString swap_outer_uuid; QString swap_mapper_name; QString mountable_keyfile_device; QString swap_device_path; QString keyfile_device_mount_options; bool isValid() const { return !swap_device_path.isEmpty(); } /** @brief Helper method for doing key-value replacements * * Given a named @p key (e.g. "duck", or "swap_device"), returns the * value set for that key. Invalid keys (e.g. "duck") return an empty string. */ QString replacementFor( const QString& key ) const { if ( key == QStringLiteral( "swap_device" ) ) { return swap_device_path; } if ( key == QStringLiteral( "crypt_swap_name" ) ) { return swap_mapper_name; } if ( key == QStringLiteral( "keyfile_device" ) ) { return mountable_keyfile_device; } if ( key == QStringLiteral( "keyfile_filename" ) ) { return QStringLiteral( "crypto_keyfile.bin" ); } if ( key == QStringLiteral( "keyfile_device_mount_options" ) ) { return keyfile_device_mount_options; } return QString(); } /** @brief Creates a struct from information already set in GS * */ static LOSHInfo fromGlobalStorage(); }; #endif calamares-calamares-2d126ae/src/modules/luksopenswaphookcfg/LOSHJob.cpp000066400000000000000000000130531430147706700262500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "LOSHJob.h" #include "LOSHInfo.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Permissions.h" #include "utils/PluginFactory.h" #include "utils/String.h" #include "utils/Variant.h" #include #include #include #include LOSHJob::LOSHJob( QObject* parent ) : Calamares::CppJob( parent ) { } LOSHJob::~LOSHJob() {} QString LOSHJob::prettyName() const { return tr( "Configuring encrypted swap." ); } STATICTEST QString get_assignment_part( const QString& line ) { static QRegularExpression re( "^[# \\t]*([A-Za-z_]+)[ \\t]*=" ); auto m = re.match( line ); if ( m.hasMatch() ) { return m.captured( 1 ); } return QString(); } /** Writes the config file at @p path * * NOTE: @p path is relative to the target system, not an absolute path. */ STATICTEST void write_openswap_conf( const QString& path, QStringList& contents, const LOSHInfo& info ) { if ( info.isValid() ) { for ( auto& line : contents ) { const QString key = get_assignment_part( line ); QString replacement = info.replacementFor( key ); if ( !replacement.isEmpty() ) { line.clear(); line.append( QStringLiteral( "%1=%2" ).arg( key, replacement ) ); } } cDebug() << "Writing" << contents.length() << "line configuration to" << path; // \n between each two lines, and a \n at the end CalamaresUtils::System::instance()->createTargetFile( path, contents.join( '\n' ).append( '\n' ).toUtf8(), CalamaresUtils::System::WriteMode::Overwrite ); } else { cDebug() << "Will not write an invalid configuration to" << path; } } Calamares::JobResult LOSHJob::exec() { const auto* sys = CalamaresUtils::System::instance(); if ( !sys ) { return Calamares::JobResult::internalError( "LuksOpenSwapHook", tr( "No target system available." ), Calamares::JobResult::InvalidConfiguration ); } Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( !gs || gs->value( "rootMountPoint" ).toString().isEmpty() ) { return Calamares::JobResult::internalError( "LuksOpenSwapHook", tr( "No rootMountPoint is set." ), Calamares::JobResult::InvalidConfiguration ); } if ( m_configFilePath.isEmpty() ) { return Calamares::JobResult::internalError( "LuksOpenSwapHook", tr( "No configFilePath is set." ), Calamares::JobResult::InvalidConfiguration ); } QStringList contents = sys->readTargetFile( m_configFilePath ); if ( contents.isEmpty() ) { contents << QStringLiteral( "# swap_device=" ) << QStringLiteral( "# crypt_swap_name=" ) << QStringLiteral( "# keyfile_device=" ) << QStringLiteral( "# keyfile_filename=" ) << QStringLiteral( "# keyfile_device_mount_options" ); } write_openswap_conf( m_configFilePath, contents, LOSHInfo::fromGlobalStorage() ); return Calamares::JobResult::ok(); } void LOSHJob::setConfigurationMap( const QVariantMap& configurationMap ) { m_configFilePath = CalamaresUtils::getString( configurationMap, QStringLiteral( "configFilePath" ), QStringLiteral( "/etc/openswap.conf" ) ); } STATICTEST void globalStoragePartitionInfo( Calamares::GlobalStorage* gs, LOSHInfo& info ) { if ( !gs ) { return; } QVariantList l = gs->value( "partitions" ).toList(); if ( l.isEmpty() ) { return; } for ( const auto& pv : l ) { const QVariantMap partition = pv.toMap(); if ( !partition.isEmpty() ) { QString mountPoint = partition.value( "mountPoint" ).toString(); QString fileSystem = partition.value( "fs" ).toString(); QString luksMapperName = partition.value( "luksMapperName" ).toString(); // if partition["fs"] == "linuxswap" and "luksMapperName" in partition: if ( fileSystem == QStringLiteral( "linuxswap" ) && !luksMapperName.isEmpty() ) { info.swap_outer_uuid = partition.value( "luksUuid" ).toString(); info.swap_mapper_name = luksMapperName; } else if ( mountPoint == QStringLiteral( "/" ) && !luksMapperName.isEmpty() ) { info.mountable_keyfile_device = QStringLiteral( "/dev/mapper/" ) + luksMapperName; } } } if ( !info.mountable_keyfile_device.isEmpty() && !info.swap_outer_uuid.isEmpty() ) { info.swap_device_path = QStringLiteral( "/dev/disk/by-uuid/" ) + info.swap_outer_uuid; } QString btrfsRootSubvolume = gs->value( "btrfsRootSubvolume" ).toString(); if ( !btrfsRootSubvolume.isEmpty() ) { CalamaresUtils::removeLeading( btrfsRootSubvolume, '/' ); info.keyfile_device_mount_options = QStringLiteral( "--options=subvol=" ) + btrfsRootSubvolume; } } LOSHInfo LOSHInfo::fromGlobalStorage() { LOSHInfo i {}; globalStoragePartitionInfo( Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr, i ); return i; } CALAMARES_PLUGIN_FACTORY_DEFINITION( LOSHJobFactory, registerPlugin< LOSHJob >(); ) calamares-calamares-2d126ae/src/modules/luksopenswaphookcfg/LOSHJob.h000066400000000000000000000014551430147706700257200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef LUKSOPENSWAPHOOKCFG_LOSHJOB_H #define LUKSOPENSWAPHOOKCFG_LOSHJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include #include class PLUGINDLLEXPORT LOSHJob : public Calamares::CppJob { Q_OBJECT public: explicit LOSHJob( QObject* parent = nullptr ); ~LOSHJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: QString m_configFilePath; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( LOSHJobFactory ) #endif calamares-calamares-2d126ae/src/modules/luksopenswaphookcfg/Tests.cpp000066400000000000000000000211501430147706700261470ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "LOSHInfo.h" #include "LOSHJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include // LOSH = LUKS Open Swap Hook (Job) // Implementation details extern QString get_assignment_part( const QString& line ); extern void write_openswap_conf( const QString& path, QStringList& contents, const LOSHInfo& info ); class LOSHTests : public QObject { Q_OBJECT public: LOSHTests(); ~LOSHTests() override {} private Q_SLOTS: void initTestCase(); void testAssignmentExtraction_data(); void testAssignmentExtraction(); void testLOSHInfo(); void testConfigWriting(); void testJob(); }; LOSHTests::LOSHTests() {} void LOSHTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "LOSH test started."; } void LOSHTests::testAssignmentExtraction_data() { QTest::addColumn< QString >( "line" ); QTest::addColumn< QString >( "match" ); QTest::newRow( "empty" ) << QString() << QString(); QTest::newRow( "comment-only1" ) << QStringLiteral( "# " ) << QString(); QTest::newRow( "comment-only2" ) << QStringLiteral( "###" ) << QString(); QTest::newRow( "comment-only3" ) << QStringLiteral( "# # #" ) << QString(); QTest::newRow( "comment-text" ) << QStringLiteral( "# NOTE:" ) << QString(); QTest::newRow( "comment-story" ) << QStringLiteral( "# This is a shell comment" ) << QString(); // We look for assignments, but only for single-words QTest::newRow( "comment-space-eq" ) << QStringLiteral( "# Check that a = b" ) << QString(); QTest::newRow( "assignment1" ) << QStringLiteral( "a=1" ) << QStringLiteral( "a" ); QTest::newRow( "assignment2" ) << QStringLiteral( "a = 1" ) << QStringLiteral( "a" ); QTest::newRow( "assignment3" ) << QStringLiteral( "# a=1" ) << QStringLiteral( "a" ); QTest::newRow( "assignment4" ) << QStringLiteral( "cows = 12" ) << QStringLiteral( "cows" ); QTest::newRow( "assignment5" ) << QStringLiteral( "# # cows=1" ) << QStringLiteral( "cows" ); QTest::newRow( "assignment6" ) << QStringLiteral( "# moose='cool' # not cows" ) << QStringLiteral( "moose" ); QTest::newRow( "assignment7" ) << QStringLiteral( " moose=cows=42" ) << QStringLiteral( "moose" ); QTest::newRow( "assignment8" ) << QStringLiteral( "#swap_device=/dev/something" ) << QStringLiteral( "swap_device" ); QTest::newRow( "assignment9" ) << QStringLiteral( "# swap_device=/dev/something" ) << QStringLiteral( "swap_device" ); QTest::newRow( "assignment10" ) << QStringLiteral( "swap_device=/dev/something" ) << QStringLiteral( "swap_device" ); } void LOSHTests::testAssignmentExtraction() { QFETCH( QString, line ); QFETCH( QString, match ); QCOMPARE( get_assignment_part( line ), match ); } static CalamaresUtils::System* file_setup( const QTemporaryDir& tempRoot ) { CalamaresUtils::System* ss = CalamaresUtils::System::instance(); if ( !ss ) { ss = new CalamaresUtils::System( true ); } Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( !gs ) { cDebug() << "Creating new JobQueue"; (void)new Calamares::JobQueue(); gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; } if ( gs ) { // Working with a rootMountPoint set gs->insert( "rootMountPoint", tempRoot.path() ); } return ss; } static void make_valid_loshinfo( LOSHInfo& i ) { i.swap_outer_uuid = QStringLiteral( "UUID-0000" ); i.swap_mapper_name = QStringLiteral( "/dev/mapper/0000" ); i.swap_device_path = QStringLiteral( "/dev/sda0" ); i.mountable_keyfile_device = QStringLiteral( "/dev/ada0p0s0" ); } void LOSHTests::testLOSHInfo() { LOSHInfo i {}; QVERIFY( !i.isValid() ); make_valid_loshinfo( i ); QVERIFY( i.isValid() ); QCOMPARE( i.replacementFor( QStringLiteral( "swap_device" ) ), QStringLiteral( "/dev/sda0" ) ); QCOMPARE( i.replacementFor( QStringLiteral( "duck" ) ), QString() ); } void LOSHTests::testConfigWriting() { QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-job-XXXXXX" ) ); QVERIFY( tempRoot.isValid() ); auto* ss = file_setup( tempRoot ); QVERIFY( ss ); QVERIFY( Calamares::JobQueue::instance()->globalStorage() ); QVERIFY( QFile::exists( tempRoot.path() ) ); QVERIFY( QFileInfo( tempRoot.path() ).isDir() ); const QString targetFilePath = QStringLiteral( "losh.conf" ); const QString filePath = tempRoot.filePath( targetFilePath ); QStringList contents { QStringLiteral( "# Calamares demo" ), QStringLiteral( "# swap_device=a thing" ), QStringLiteral( "# duck duck swap_device=another" ) }; // When the information is invalid, file contents are unchanged, // and no file is written either. LOSHInfo i {}; QVERIFY( !i.isValid() ); QVERIFY( !QFile::exists( filePath ) ); write_openswap_conf( targetFilePath, contents, i ); // Invalid i QVERIFY( !QFile::exists( filePath ) ); QCOMPARE( contents.length(), 3 ); QCOMPARE( contents.at( 1 ).left( 4 ), QStringLiteral( "# s" ) ); // Can we write there at all? QFile derp( filePath ); QVERIFY( derp.open( QIODevice::WriteOnly ) ); QVERIFY( derp.write( "xx", 2 ) ); derp.close(); QVERIFY( QFile::exists( filePath ) ); QVERIFY( QFile::remove( filePath ) ); // Once the information is valid, though, the file is written make_valid_loshinfo( i ); QVERIFY( i.isValid() ); QVERIFY( !QFile::exists( filePath ) ); write_openswap_conf( targetFilePath, contents, i ); // Now it is valid QVERIFY( QFile::exists( filePath ) ); QCOMPARE( contents.length(), 3 ); QCOMPARE( i.swap_device_path, QStringLiteral( "/dev/sda0" ) ); // expected key value QCOMPARE( contents.at( 1 ), QStringLiteral( "swap_device=/dev/sda0" ) ); // expected line // readLine() returns with newlines-added QFile f( filePath ); QVERIFY( f.open( QIODevice::ReadOnly ) ); QCOMPARE( f.readLine(), QStringLiteral( "# Calamares demo\n" ) ); QCOMPARE( f.readLine(), QStringLiteral( "swap_device=/dev/sda0\n" ) ); QCOMPARE( f.readLine(), QStringLiteral( "# duck duck swap_device=another\n" ) ); QCOMPARE( f.readLine(), QString() ); QVERIFY( f.atEnd() ); // Note how the contents is updated on every write_openswap_conf() i.swap_device_path = QStringLiteral( "/dev/zram/0.zram" ); write_openswap_conf( targetFilePath, contents, i ); // Still valid QCOMPARE( contents.length(), 3 ); QCOMPARE( i.swap_device_path, QStringLiteral( "/dev/zram/0.zram" ) ); // expected key value QCOMPARE( contents.at( 1 ), QStringLiteral( "swap_device=/dev/zram/0.zram" ) ); // expected line } void LOSHTests::testJob() { QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-job-XXXXXX" ) ); QVERIFY( tempRoot.isValid() ); auto* ss = file_setup( tempRoot ); QVERIFY( ss ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; QVERIFY( gs ); { QDir d( tempRoot.path() ); d.mkdir( "etc" ); } QVERIFY( !LOSHInfo::fromGlobalStorage().isValid() ); QVariantList outerPartition; QVariantMap innerPartition; innerPartition.insert( "mountPoint", "/" ); innerPartition.insert( "fs", "ext4" ); innerPartition.insert( "luksMapperName", "root" ); innerPartition.insert( "luksUUID", "0000" ); outerPartition.append( innerPartition ); innerPartition.remove( "mountPoint" ); innerPartition.insert( "fs", "linuxswap" ); innerPartition.insert( "luksMapperName", "swap" ); innerPartition.insert( "luksUuid", "0001" ); outerPartition.append( innerPartition ); gs->insert( "partitions", outerPartition ); QVERIFY( LOSHInfo::fromGlobalStorage().isValid() ); LOSHJob j; j.setConfigurationMap( QVariantMap() ); auto jobresult = j.exec(); QVERIFY( jobresult ); { QFile f( tempRoot.filePath( "etc/openswap.conf" ) ); QVERIFY( f.exists() ); QVERIFY( f.open( QIODevice::ReadOnly ) ); cDebug() << f.readAll(); } } QTEST_GUILESS_MAIN( LOSHTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-calamares-2d126ae/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.conf000066400000000000000000000003621430147706700313060ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml000066400000000000000000000005061430147706700325620ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/machineid/000077500000000000000000000000001430147706700221675ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/machineid/CMakeLists.txt000066400000000000000000000007011430147706700247250ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/machineid/MachineIdJob.cpp000066400000000000000000000121551430147706700251530ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/machineid/MachineIdJob.h000066400000000000000000000030241430147706700246130ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/machineid/Tests.cpp000066400000000000000000000165711430147706700240070ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/machineid/Workers.cpp000066400000000000000000000122631430147706700243330ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/machineid/Workers.h000066400000000000000000000040631430147706700237770ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/machineid/machineid.conf000066400000000000000000000032511430147706700247600ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/machineid/machineid.schema.yaml000066400000000000000000000011711430147706700262330ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/mkinitfs/000077500000000000000000000000001430147706700220725ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/mkinitfs/main.py000066400000000000000000000025101430147706700233660ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/mkinitfs/module.desc000066400000000000000000000002121430147706700242120ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "mkinitfs" interface: "python" script: "main.py" calamares-calamares-2d126ae/src/modules/mount/000077500000000000000000000000001430147706700214105ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/mount/main.py000066400000000000000000000250251430147706700227120ustar00rootroot00000000000000#!/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 class ZfsException(Exception): """Exception raised when there is a problem with zfs Attributes: message -- explanation of the error """ def __init__(self, message): self.message = message def pretty_name(): return _("Mounting partitions.") def get_btrfs_subvolumes(partitions): """ Gets the job-configuration for btrfs subvolumes, or if there is none given, returns a default configuration that matches the setup (/ and /home) from before configurability was introduced. @param partitions The partitions (from the partitioning module) that will exist on disk. This is used to filter out subvolumes that don't need to be created because they get a dedicated partition instead. """ btrfs_subvolumes = libcalamares.job.configuration.get("btrfsSubvolumes", None) # Warn if there's no configuration at all, and empty configurations are # replaced by a simple root-only layout. if btrfs_subvolumes is None: libcalamares.utils.warning("No configuration for btrfsSubvolumes") if not btrfs_subvolumes: btrfs_subvolumes = [dict(mountPoint="/", subvolume="/@"), dict(mountPoint="/home", subvolume="/@home")] # Filter out the subvolumes which have a dedicated partition non_root_partition_mounts = [m for m in [p.get("mountPoint", None) for p in partitions] if m is not None and m != '/'] btrfs_subvolumes = list(filter(lambda s: s["mountPoint"] not in non_root_partition_mounts, btrfs_subvolumes)) # If we have a swap **file**, give it a separate subvolume. swap_choice = libcalamares.globalstorage.value("partitionChoices") if swap_choice and swap_choice.get("swap", None) == "file": btrfs_subvolumes.append({'mountPoint': '/swap', 'subvolume': '/@swap'}) return btrfs_subvolumes def mount_zfs(root_mount_point, partition): """ Mounts a zfs partition at @p root_mount_point :param root_mount_point: The absolute path to the root of the install :param partition: The partition map from global storage for this partition :return: """ # Get the list of zpools from global storage zfs_pool_list = libcalamares.globalstorage.value("zfsPoolInfo") if not zfs_pool_list: libcalamares.utils.warning("Failed to locate zfsPoolInfo data in global storage") raise ZfsException(_("Internal error mounting zfs datasets")) # Find the zpool matching this partition for zfs_pool in zfs_pool_list: if zfs_pool["mountpoint"] == partition["mountPoint"]: pool_name = zfs_pool["poolName"] ds_name = zfs_pool["dsName"] # import the zpool try: libcalamares.utils.host_env_process_output(["zpool", "import", "-N", "-R", root_mount_point, pool_name], None) except subprocess.CalledProcessError: raise ZfsException(_("Failed to import zpool")) # Get the encrpytion information from global storage zfs_info_list = libcalamares.globalstorage.value("zfsInfo") encrypt = False if zfs_info_list: for zfs_info in zfs_info_list: if zfs_info["mountpoint"] == partition["mountPoint"] and zfs_info["encrypted"] is True: encrypt = True passphrase = zfs_info["passphrase"] if encrypt is True: # The zpool is encrypted, we need to unlock it try: libcalamares.utils.host_env_process_output(["zfs", "load-key", pool_name], None, passphrase) except subprocess.CalledProcessError: raise ZfsException(_("Failed to unlock zpool")) if partition["mountPoint"] == '/': # Get the zfs dataset list from global storage zfs = libcalamares.globalstorage.value("zfsDatasets") if not zfs: libcalamares.utils.warning("Failed to locate zfs dataset list") raise ZfsException(_("Internal error mounting zfs datasets")) zfs.sort(key=lambda x: x["mountpoint"]) for dataset in zfs: try: if dataset["canMount"] == "noauto" or dataset["canMount"] is True: libcalamares.utils.host_env_process_output(["zfs", "mount", dataset["zpool"] + '/' + dataset["dsName"]]) except subprocess.CalledProcessError: raise ZfsException(_("Failed to set zfs mountpoint")) else: try: libcalamares.utils.host_env_process_output(["zfs", "mount", pool_name + '/' + ds_name]) except subprocess.CalledProcessError: raise ZfsException(_("Failed to set zfs mountpoint")) def mount_partition(root_mount_point, partition, partitions): """ Do a single mount of @p partition inside @p root_mount_point. """ # 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 fstype == "zfs": mount_zfs(root_mount_point, partition) else: # fstype == "zfs" if libcalamares.utils.mount(device, mount_point, fstype, partition.get("options", "")) != 0: libcalamares.utils.warning("Cannot mount {}".format(device)) # 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: if not s["subvolume"]: continue os.makedirs(root_mount_point + os.path.dirname(s["subvolume"]), exist_ok=True) subprocess.check_call(["btrfs", "subvolume", "create", root_mount_point + s["subvolume"]]) if s["mountPoint"] == "/": # insert the root subvolume into global storage libcalamares.globalstorage.insert("btrfsRootSubvolume", s["subvolume"]) subprocess.check_call(["umount", "-v", root_mount_point]) device = partition["device"] if "luksMapperName" in partition: 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"]) try: for partition in mountable_partitions: mount_partition(root_mount_point, partition, partitions) except ZfsException as ze: return _("zfs mounting error"), ze.message libcalamares.globalstorage.insert("rootMountPoint", root_mount_point) # Remember the extra mounts for the unpackfs module libcalamares.globalstorage.insert("extraMounts", extra_mounts) calamares-calamares-2d126ae/src/modules/mount/module.desc000066400000000000000000000002251430147706700235340ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "mount" interface: "python" script: "main.py" calamares-calamares-2d126ae/src/modules/mount/mount.conf000066400000000000000000000040611430147706700234220ustar00rootroot00000000000000# 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. # # It is possible to prevent subvolume creation -- this is likely only relevant # for the root (/) subvolume -- by giving an empty string as a subvolume # name. In this case no subvolume will be created. When using snapper as # a rollback mechanism, it is recommended to **not** create a subvolume # for root. btrfsSubvolumes: - mountPoint: / subvolume: /@ # As an alternative: # # subvolume: "" - mountPoint: /home subvolume: /@home - mountPoint: /var/cache subvolume: /@cache - mountPoint: /var/log subvolume: /@log calamares-calamares-2d126ae/src/modules/mount/mount.schema.yaml000066400000000000000000000024241430147706700246770ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/mount/tests/000077500000000000000000000000001430147706700225525ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/mount/tests/1.global000066400000000000000000000004271430147706700240770ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/mount/tests/1.job000066400000000000000000000002661430147706700234120ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/mount/tests/2.global000066400000000000000000000002771430147706700241030ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/mount/tests/2.job000066400000000000000000000002241430147706700234050ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # Expect a complaint and a default btrfs layout because the # partitions use btrfs calamares-calamares-2d126ae/src/modules/mount/tests/3.global000066400000000000000000000002571430147706700241020ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 partitions: - device: "/dev/sdb1" mountPoint: "/" fs: "btrfs" partitionChoices: swap: file calamares-calamares-2d126ae/src/modules/mount/tests/3.job000066400000000000000000000002661430147706700234140ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/mount/tests/4.global000066400000000000000000000003641430147706700241020ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/mount/tests/4.job000066400000000000000000000004221430147706700234070ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/netinstall/000077500000000000000000000000001430147706700224235ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/netinstall/CMakeLists.txt000066400000000000000000000013631430147706700251660ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # calamares_add_plugin(netinstall TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES Config.cpp groupstreeview.cpp LoaderQueue.cpp NetInstallViewStep.cpp NetInstallPage.cpp PackageTreeItem.cpp PackageModel.cpp UI page_netinst.ui 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-calamares-2d126ae/src/modules/netinstall/Config.cpp000066400000000000000000000117721430147706700243440ustar00rootroot00000000000000/* * 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-calamares-2d126ae/src/modules/netinstall/Config.h000066400000000000000000000056471430147706700240150ustar00rootroot00000000000000/* * 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-calamares-2d126ae/src/modules/netinstall/LoaderQueue.cpp000066400000000000000000000126061430147706700253470ustar00rootroot00000000000000/* * 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-calamares-2d126ae/src/modules/netinstall/LoaderQueue.h000066400000000000000000000040051430147706700250060ustar00rootroot00000000000000/* * 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-calamares-2d126ae/src/modules/netinstall/NetInstallPage.cpp000066400000000000000000000051461430147706700260070ustar00rootroot00000000000000/* * 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 "GlobalStorage.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(); // The netinstallSelect global storage value can be used to make additional items selected by default Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); const QStringList selectNames = gs->value( "netinstallSelect" ).toStringList(); if ( !selectNames.isEmpty() ) { m_config->model()->setSelections( selectNames ); } // If NetInstallAdd is found in global storage, add those items to the tree const QVariantList groups = gs->value( "netinstallAdd" ).toList(); if ( !groups.isEmpty() ) { m_config->model()->appendModelData( groups ); } } calamares-calamares-2d126ae/src/modules/netinstall/NetInstallPage.h000066400000000000000000000024171430147706700254520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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-calamares-2d126ae/src/modules/netinstall/NetInstallViewStep.cpp000066400000000000000000000063661430147706700267060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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", "label for netinstall module, Linux kernel" ); tr( "Services", "label for netinstall module, system services" ); tr( "Login", "label for netinstall module, choose login manager" ); tr( "Desktop", "label for netinstall module, choose desktop environment" ); tr( "Applications" ); tr( "Communication", "label for netinstall module" ); tr( "Development", "label for netinstall module" ); tr( "Office", "label for netinstall module" ); tr( "Multimedia", "label for netinstall module" ); tr( "Internet", "label for netinstall module" ); tr( "Theming", "label for netinstall module" ); tr( "Gaming", "label for netinstall module" ); tr( "Utilities", "label for netinstall module" ); #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-calamares-2d126ae/src/modules/netinstall/NetInstallViewStep.h000066400000000000000000000027111430147706700263410ustar00rootroot00000000000000/* * 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-calamares-2d126ae/src/modules/netinstall/PackageModel.cpp000066400000000000000000000243261430147706700254520ustar00rootroot00000000000000/* === 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" /// Recursive helper for setSelections() static void setSelections( const QStringList& selectNames, PackageTreeItem* item ) { for ( int i = 0; i < item->childCount(); i++ ) { auto* child = item->child( i ); setSelections( selectNames, child ); } if ( item->isGroup() && selectNames.contains( item->name() ) ) { item->setSelected( Qt::CheckState::Checked ); } } /** @brief Collects all the "source" values from @p groupList * * Iterates over @p groupList and returns all nonempty "source" * values from the maps. * */ static QStringList collectSources( const QVariantList& groupList ) { QStringList sources; for ( const QVariant& group : groupList ) { QVariantMap groupMap = group.toMap(); if ( !groupMap[ "source" ].toString().isEmpty() ) { sources.append( groupMap[ "source" ].toString() ); } } return sources; } PackageModel::PackageModel( QObject* parent ) : QAbstractItemModel( parent ) { } 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(); } void PackageModel::setSelections( const QStringList& selectNames ) { if ( m_rootItem ) { ::setSelections( selectNames, m_rootItem ); } } 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 ) { beginResetModel(); delete m_rootItem; m_rootItem = new PackageTreeItem(); setupModelData( l, m_rootItem ); endResetModel(); } void PackageModel::appendModelData( const QVariantList& groupList ) { if ( m_rootItem ) { beginResetModel(); const QStringList sources = collectSources( groupList ); if ( !sources.isEmpty() ) { // Prune any existing data from the same source QList< int > removeList; for ( int i = 0; i < m_rootItem->childCount(); i++ ) { PackageTreeItem* child = m_rootItem->child( i ); if ( sources.contains( child->source() ) ) { removeList.insert( 0, i ); } } for ( const int& item : qAsConst( removeList ) ) { m_rootItem->removeChild( item ); } } // Add the new data to the model setupModelData( groupList, m_rootItem ); endResetModel(); } } calamares-calamares-2d126ae/src/modules/netinstall/PackageModel.h000066400000000000000000000057261430147706700251220ustar00rootroot00000000000000/* === 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; /** @brief Sets the checked flag on matching groups in the tree * * Recursively traverses the tree pointed to by m_rootItem and * checks if a group name matches any of the items in @p selectNames. * If a match is found, set check the box for that group and it's children. * * Individual packages will not be matched. * */ void setSelections( const QStringList& selectNames ); PackageTreeItem::List getPackages() const; PackageTreeItem::List getItemPackages( PackageTreeItem* item ) const; /** @brief Appends groups to the tree * * Uses the data from @p groupList to add elements to the * existing tree that m_rootItem points to. If m_rootItem * is not valid, it does nothing * * Before adding anything to the model, it ensures that there * is no existing data from the same source. If there is, that * data is pruned first * */ void appendModelData( const QVariantList& groupList ); private: friend class ItemTests; void setupModelData( const QVariantList& l, PackageTreeItem* parent ); PackageTreeItem* m_rootItem = nullptr; PackageTreeItem::List m_hiddenItems; }; #endif // PACKAGEMODEL_H calamares-calamares-2d126ae/src/modules/netinstall/PackageTreeItem.cpp000066400000000000000000000174351430147706700261330ustar00rootroot00000000000000/* === 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_source( CalamaresUtils::getString( groupData, "source" ) ) , 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 ); } } void PackageTreeItem::removeChild( int row ) { if ( 0 <= row && row < m_childItems.count() ) { m_childItems.removeAt( row ); } else { cWarning() << "Attempt to remove invalid child in removeChild() at row " << row; } } int PackageTreeItem::type() const { 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-calamares-2d126ae/src/modules/netinstall/PackageTreeItem.h000066400000000000000000000127131430147706700255720ustar00rootroot00000000000000/* === 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; } QString source() const { return m_source; } /** @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 ); void removeChild( int row ); /** @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; QString m_source; bool m_isGroup = false; bool m_isCritical = false; bool m_isHidden = false; bool m_showReadOnly = false; bool m_startExpanded = false; }; #endif // PACKAGETREEITEM_H calamares-calamares-2d126ae/src/modules/netinstall/Tests.cpp000066400000000000000000000310041430147706700242270ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/netinstall/groupstreeview.cpp000066400000000000000000000020201430147706700262130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2022 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "groupstreeview.h" #include "utils/Logger.h" #include void GroupsTreeView::drawBranches( QPainter* painter, const QRect& rect, const QModelIndex& index ) const { QTreeView::drawBranches( painter, rect, index ); // Empty names are handled specially: don't draw them as items, // so the "branch" seems to just pass them by. const QString s = index.data().toString(); if ( s.isEmpty() ) { QStyleOptionViewItem opt = viewOptions(); opt.state = QStyle::State_Sibling; opt.rect = QRect( !isRightToLeft() ? rect.left() : rect.right() + 1, rect.top(), indentation(), rect.height() ); painter->eraseRect( opt.rect ); style()->drawPrimitive( QStyle::PE_IndicatorBranch, &opt, painter, this ); } } calamares-calamares-2d126ae/src/modules/netinstall/groupstreeview.h000066400000000000000000000007541430147706700256740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2022 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include class GroupsTreeView : public QTreeView { public: using QTreeView::QTreeView; protected: virtual void drawBranches( QPainter* painter, const QRect& rect, const QModelIndex& index ) const override; }; calamares-calamares-2d126ae/src/modules/netinstall/netinstall.conf000066400000000000000000000337641430147706700254640ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/netinstall/netinstall.schema.yaml000066400000000000000000000064371430147706700267350ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/netinstall/netinstall.yaml000066400000000000000000000116451430147706700254730ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/netinstall/page_netinst.ui000066400000000000000000000033541430147706700254470ustar00rootroot00000000000000 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 410 11 GroupsTreeView QTreeView
groupstreeview.h
calamares-calamares-2d126ae/src/modules/netinstall/tests/000077500000000000000000000000001430147706700235655ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/netinstall/tests/1a-single-bad.conf000066400000000000000000000001771430147706700267450ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: - file://$TESTDIR/bad.yaml calamares-calamares-2d126ae/src/modules/netinstall/tests/1a-single-empty.conf000066400000000000000000000002061430147706700273460ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: - file://$TESTDIR/data-empty.yaml calamares-calamares-2d126ae/src/modules/netinstall/tests/1a-single-error.conf000066400000000000000000000002061430147706700273410ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: - file://$TESTDIR/data-error.yaml calamares-calamares-2d126ae/src/modules/netinstall/tests/1b-single-large.conf000066400000000000000000000002061430147706700273030ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: - file://$TESTDIR/data-large.yaml calamares-calamares-2d126ae/src/modules/netinstall/tests/1b-single-small.conf000066400000000000000000000002061430147706700273210ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: - file://$TESTDIR/data-small.yaml calamares-calamares-2d126ae/src/modules/netinstall/tests/1c-none.conf000066400000000000000000000001431430147706700256720ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: [] calamares-calamares-2d126ae/src/modules/netinstall/tests/1c-unset.conf000066400000000000000000000001251430147706700260710ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true calamares-calamares-2d126ae/src/modules/netinstall/tests/1d-fallback-bad.conf000066400000000000000000000003741430147706700272250ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/netinstall/tests/1d-fallback-large.conf000066400000000000000000000003741430147706700275710ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/netinstall/tests/1d-fallback-mixed.conf000066400000000000000000000005541430147706700276050ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/netinstall/tests/1d-fallback-small.conf000066400000000000000000000003741430147706700276070ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/netinstall/tests/data-empty.yaml000066400000000000000000000001231430147706700265120ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- bogus: true calamares-calamares-2d126ae/src/modules/netinstall/tests/data-error.yaml000066400000000000000000000001741430147706700265130ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # derp derp herpa-derp: no -- # This file is not valid YAML calamares-calamares-2d126ae/src/modules/netinstall/tests/data-large.yaml000066400000000000000000000012651430147706700264560ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/netinstall/tests/data-small.yaml000066400000000000000000000005021430147706700264650ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/networkcfg/000077500000000000000000000000001430147706700224175ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/networkcfg/main.py000066400000000000000000000125521430147706700237220ustar00rootroot00000000000000#!/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-FileCopyrightText: 2021 Anke boersma # 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 get_live_user(): """ Gets the "live user" login. This might be "live", or "nitrux", or something similar: it is the login name used *right now*, and network configurations saved for that user, should be applied also for the installed user (which probably has a different name). """ # getlogin() is a thin-wrapper, and depends on getlogin(3), # which reads utmp -- and utmp isn't always set up right. try: return os.getlogin() except OSError: pass # getpass will return the **current** user, which is generally root. # That isn't very useful, because the network settings have been # made outside of Calamares-running-as-root, as a different user. # # If Calamares is running as non-root, though, this is fine. import getpass name = getpass.getuser() if name != "root": return name # TODO: other mechanisms, e.g. guessing that "live" is the name # TODO: support a what-is-the-live-user setting return None def replace_username(nm_config_filename, live_user, target_user): """ If @p live_user isn't None, then go through the given file and replace @p live_user by the @p target_user. Reads the file, then (re-)writes it with new permissions lives. """ # FIXME: Perhaps if live_user is None, we should just replace **all** # permissions lines? After all, this is supposed to be a live # system so **whatever** NM networks are configured, should be # available to the new user. if live_user is None: return if not os.path.exists(nm_config_filename): return with open(nm_config_filename, "r", encoding="UTF-8") as network_conf: text = network_conf.readlines() live_permissions = 'permissions=user:{}:;'.format(live_user) target_permissions = 'permissions=user:{}:;\n'.format(target_user) with open(nm_config_filename, "w", encoding="UTF-8") as network_conf: for line in text: if live_permissions in line: line = target_permissions network_conf.write(line) def path_pair(root_mount_point, relative_path): """ Returns /relative_path and the relative path in the target system. """ return ("/" + relative_path, os.path.join(root_mount_point, relative_path)) def run(): """ Setup network configuration """ root_mount_point = libcalamares.globalstorage.value("rootMountPoint") user = libcalamares.globalstorage.value("username") live_user = get_live_user() if root_mount_point is None: libcalamares.utils.warning("rootMountPoint is empty, {!s}".format(root_mount_point)) return (_("Configuration Error"), _("No root mount point is given for
{!s}
to use." ).format("networkcfg")) source_nm, target_nm = path_pair(root_mount_point, "etc/NetworkManager/system-connections/") # Sanity checks. We don't want to do anything if a network # configuration already exists on the target 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) replace_username(target_network, live_user, user) 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, target_resolv = path_pair(root_mount_point, "etc/resolv.conf") if source_resolv != target_resolv and os.path.exists(source_resolv): try: os.remove(target_resolv) 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-calamares-2d126ae/src/modules/networkcfg/module.desc000066400000000000000000000002531430147706700245440ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "networkcfg" interface: "python" script: "main.py" noconfig: true calamares-calamares-2d126ae/src/modules/notesqml/000077500000000000000000000000001430147706700221105ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/notesqml/CMakeLists.txt000066400000000000000000000007321430147706700246520ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/notesqml/NotesQmlViewStep.cpp000066400000000000000000000021351430147706700260460ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/notesqml/NotesQmlViewStep.h000066400000000000000000000017411430147706700255150ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/notesqml/examples/000077500000000000000000000000001430147706700237265ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/notesqml/examples/notesqml.qml.example000066400000000000000000000043161430147706700277410ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/notesqml/notesqml.conf000066400000000000000000000032001430147706700246140ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/notesqml/notesqml.qml000066400000000000000000000027371430147706700244760ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/notesqml/notesqml.qrc000066400000000000000000000001631430147706700244610ustar00rootroot00000000000000 notesqml.qml calamares-calamares-2d126ae/src/modules/oemid/000077500000000000000000000000001430147706700213435ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/oemid/CMakeLists.txt000066400000000000000000000006271430147706700241100ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/oemid/IDJob.cpp000066400000000000000000000056521430147706700230060ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/oemid/IDJob.h000066400000000000000000000012721430147706700224450ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/oemid/OEMPage.ui000066400000000000000000000057501430147706700231260ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/oemid/OEMViewStep.cpp000066400000000000000000000052741430147706700241660ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/oemid/OEMViewStep.h000066400000000000000000000023651430147706700236310ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/oemid/oemid.conf000066400000000000000000000012011430147706700233010ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/openrcdmcryptcfg/000077500000000000000000000000001430147706700236175ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/openrcdmcryptcfg/main.py000066400000000000000000000063401430147706700251200ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/openrcdmcryptcfg/module.desc000066400000000000000000000002401430147706700257400ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "openrcdmcryptcfg" interface: "python" script: "main.py" calamares-calamares-2d126ae/src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf000066400000000000000000000001521430147706700300350ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- configFilePath: /etc/conf.d/dmcrypt calamares-calamares-2d126ae/src/modules/packagechooser/000077500000000000000000000000001430147706700232245ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/packagechooser/CMakeLists.txt000066400000000000000000000036221430147706700257670ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/packagechooser/Config.cpp000066400000000000000000000265161430147706700251470ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-FileCopyrightText: 2021 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Config.h" #ifdef HAVE_APPDATA #include "ItemAppData.h" #endif #ifdef HAVE_APPSTREAM #include "ItemAppStream.h" #include #include #endif #include "GlobalStorage.h" #include "JobQueue.h" #include "packages/Globals.h" #include "utils/Logger.h" #include "utils/Variant.h" /** @brief This removes any values from @p groups that match @p source * * This is used to remove duplicates from the netinstallAdd structure * It iterates over @p groups and for each map in the list, if the * "source" element matches @p source, it is removed from the returned * list. */ static QVariantList pruneNetinstallAdd( const QString& source, const QVariant& groups ) { QVariantList newGroupList; const QVariantList groupList = groups.toList(); for ( const QVariant& group : groupList ) { QVariantMap groupMap = group.toMap(); if ( groupMap.value( "source", "" ).toString() != source ) { newGroupList.append( groupMap ); } } return newGroupList; } const NamedEnumTable< PackageChooserMode >& packageChooserModeNames() { static const NamedEnumTable< PackageChooserMode > names { { "optional", PackageChooserMode::Optional }, { "required", PackageChooserMode::Required }, { "optionalmultiple", PackageChooserMode::OptionalMultiple }, { "requiredmultiple", PackageChooserMode::RequiredMultiple }, // and a bunch of aliases { "zero-or-one", PackageChooserMode::Optional }, { "radio", PackageChooserMode::Required }, { "one", PackageChooserMode::Required }, { "set", PackageChooserMode::OptionalMultiple }, { "zero-or-more", PackageChooserMode::OptionalMultiple }, { "multiple", PackageChooserMode::RequiredMultiple }, { "one-or-more", PackageChooserMode::RequiredMultiple } }; return names; } const NamedEnumTable< PackageChooserMethod >& PackageChooserMethodNames() { static const NamedEnumTable< PackageChooserMethod > names { { "legacy", PackageChooserMethod::Legacy }, { "custom", PackageChooserMethod::Legacy }, { "contextualprocess", PackageChooserMethod::Legacy }, { "packages", PackageChooserMethod::Packages }, { "netinstall-add", PackageChooserMethod::NetAdd }, { "netinstall-select", PackageChooserMethod::NetSelect }, }; return names; } Config::Config( QObject* parent ) : Calamares::ModuleSystem::Config( parent ) , m_model( new PackageListModel( this ) ) , m_mode( PackageChooserMode::Required ) { } Config::~Config() {} const PackageItem& Config::introductionPackage() const { for ( int i = 0; i < m_model->packageCount(); ++i ) { const auto& package = m_model->packageData( i ); if ( package.isNonePackage() ) { return package; } } static PackageItem* defaultIntroduction = nullptr; if ( !defaultIntroduction ) { const auto name = QT_TR_NOOP( "Package Selection" ); const auto description = QT_TR_NOOP( "Please pick a product from the list. The selected product will be installed." ); defaultIntroduction = new PackageItem( QString(), name, description ); defaultIntroduction->screenshot = QPixmap( QStringLiteral( ":/images/no-selection.png" ) ); defaultIntroduction->name = CalamaresUtils::Locale::TranslatedString( name, metaObject()->className() ); defaultIntroduction->description = CalamaresUtils::Locale::TranslatedString( description, metaObject()->className() ); } return *defaultIntroduction; } static inline QString make_gs_key( const Calamares::ModuleSystem::InstanceKey& key ) { return QStringLiteral( "packagechooser_" ) + key.id(); } void Config::updateGlobalStorage( const QStringList& selected ) const { if ( m_packageChoice.has_value() ) { cWarning() << "Inconsistent package choices -- both model and single-selection QML"; } if ( m_method == PackageChooserMethod::Legacy ) { QString value = selected.join( ',' ); Calamares::JobQueue::instance()->globalStorage()->insert( make_gs_key( m_defaultId ), value ); cDebug() << m_defaultId << "selected" << value; } else if ( m_method == PackageChooserMethod::Packages ) { QStringList packageNames = m_model->getInstallPackagesForNames( selected ); cDebug() << m_defaultId << "packages to install" << packageNames; CalamaresUtils::Packages::setGSPackageAdditions( Calamares::JobQueue::instance()->globalStorage(), m_defaultId, packageNames ); } else if ( m_method == PackageChooserMethod::NetAdd ) { QVariantList netinstallDataList = m_model->getNetinstallDataForNames( selected ); if ( netinstallDataList.isEmpty() ) { cWarning() << "No netinstall information found for " << selected; } else { // If an earlier packagechooser instance added this data to global storage, combine them auto* gs = Calamares::JobQueue::instance()->globalStorage(); if ( gs->contains( "netinstallAdd" ) ) { netinstallDataList += pruneNetinstallAdd( QStringLiteral( "packageChooser" ), gs->value( "netinstallAdd" ) ); } gs->insert( "netinstallAdd", netinstallDataList ); } } else if ( m_method == PackageChooserMethod::NetSelect ) { cDebug() << m_defaultId << "groups to select in netinstall" << selected; QStringList newSelected = selected; auto* gs = Calamares::JobQueue::instance()->globalStorage(); // If an earlier packagechooser instance added this data to global storage, combine them if ( gs->contains( "netinstallSelect" ) ) { auto selectedOrig = gs->value( "netinstallSelect" ); if ( selectedOrig.canConvert( QVariant::StringList ) ) { newSelected += selectedOrig.toStringList(); } else { cWarning() << "Invalid NetinstallSelect data in global storage. Earlier selections purged"; } gs->remove( "netinstallSelect" ); } gs->insert( "netinstallSelect", newSelected ); } else { cWarning() << "Unknown packagechooser method" << smash( m_method ); } } void Config::updateGlobalStorage() const { if ( m_model->packageCount() > 0 ) { cWarning() << "Inconsistent package choices -- both model and single-selection QML"; } if ( m_method == PackageChooserMethod::Legacy ) { auto* gs = Calamares::JobQueue::instance()->globalStorage(); if ( m_packageChoice.has_value() ) { gs->insert( make_gs_key( m_defaultId ), m_packageChoice.value() ); } else { gs->remove( make_gs_key( m_defaultId ) ); } } else if ( m_method == PackageChooserMethod::Packages ) { cWarning() << "Unsupported single-selection packagechooser method 'Packages'"; } else { cWarning() << "Unknown packagechooser method" << smash( m_method ); } } void Config::setPackageChoice( const QString& packageChoice ) { if ( packageChoice.isEmpty() ) { m_packageChoice.reset(); } else { m_packageChoice = packageChoice; } emit packageChoiceChanged( m_packageChoice.value_or( QString() ) ); } QString Config::prettyName() const { return m_stepName ? m_stepName->get() : tr( "Packages" ); } QString Config::prettyStatus() const { return tr( "Install option: %1" ).arg( m_packageChoice.value_or( tr( "None" ) ) ); } static void fillModel( PackageListModel* model, const QVariantList& items ) { if ( items.isEmpty() ) { cWarning() << "No *items* for PackageChooser module."; return; } #ifdef HAVE_APPSTREAM std::unique_ptr< AppStream::Pool > pool; bool poolOk = false; #endif cDebug() << "Loading PackageChooser model items from config"; int item_index = 0; for ( const auto& item_it : items ) { ++item_index; QVariantMap item_map = item_it.toMap(); if ( item_map.isEmpty() ) { cWarning() << "PackageChooser entry" << item_index << "is not valid."; continue; } if ( item_map.contains( "appdata" ) ) { #ifdef HAVE_XML model->addPackage( fromAppData( item_map ) ); #else cWarning() << "Loading AppData XML is not supported."; #endif } else if ( item_map.contains( "appstream" ) ) { #ifdef HAVE_APPSTREAM if ( !pool ) { pool = std::make_unique< AppStream::Pool >(); pool->setLocale( QStringLiteral( "ALL" ) ); poolOk = pool->load(); } if ( pool && poolOk ) { model->addPackage( fromAppStream( *pool, item_map ) ); } #else cWarning() << "Loading AppStream data is not supported."; #endif } else { model->addPackage( PackageItem( item_map ) ); } } cDebug() << Logger::SubEntry << "Loaded PackageChooser with" << model->packageCount() << "entries."; } void Config::setConfigurationMap( const QVariantMap& configurationMap ) { m_mode = packageChooserModeNames().find( CalamaresUtils::getString( configurationMap, "mode" ), PackageChooserMode::Required ); m_method = PackageChooserMethodNames().find( CalamaresUtils::getString( configurationMap, "method" ), PackageChooserMethod::Legacy ); if ( m_method == PackageChooserMethod::Legacy ) { cDebug() << "Using module ID" << m_defaultId; } if ( configurationMap.contains( "items" ) ) { fillModel( m_model, configurationMap.value( "items" ).toList() ); QString default_item_id = CalamaresUtils::getString( configurationMap, "default" ); if ( !default_item_id.isEmpty() ) { for ( int item_n = 0; item_n < m_model->packageCount(); ++item_n ) { QModelIndex item_idx = m_model->index( item_n, 0 ); QVariant item_id = m_model->data( item_idx, PackageListModel::IdRole ); if ( item_id.toString() == default_item_id ) { m_defaultModelIndex = item_idx; break; } } } } else { setPackageChoice( CalamaresUtils::getString( configurationMap, "packageChoice" ) ); if ( m_method != PackageChooserMethod::Legacy ) { cWarning() << "Single-selection QML module must use 'Legacy' method."; } } bool labels_ok = false; auto labels = CalamaresUtils::getSubMap( configurationMap, "labels", labels_ok ); if ( labels_ok ) { if ( labels.contains( "step" ) ) { m_stepName = new CalamaresUtils::Locale::TranslatedString( labels, "step" ); } } } calamares-calamares-2d126ae/src/modules/packagechooser/Config.h000066400000000000000000000105031430147706700246010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-FileCopyrightText: 2021 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PACKAGECHOOSER_CONFIG_H #define PACKAGECHOOSER_CONFIG_H #include "PackageModel.h" #include "modulesystem/Config.h" #include "modulesystem/InstanceKey.h" #include #include enum class PackageChooserMode { Optional, // zero or one Required, // exactly one OptionalMultiple, // zero or more RequiredMultiple // one or more }; const NamedEnumTable< PackageChooserMode >& packageChooserModeNames(); enum class PackageChooserMethod { Legacy, // use contextualprocess or other custom Packages, // use the packages module NetAdd, // adds packages to the netinstall module NetSelect, // makes selections in the netinstall module }; const NamedEnumTable< PackageChooserMethod >& PackageChooserMethodNames(); class Config : public Calamares::ModuleSystem::Config { Q_OBJECT /** @brief This is the single-select package-choice * * For (QML) modules that support only a single selection and * just want to do things in a straightforward pick-this-one * way, the packageChoice property is a (the) way to go. * * Writing to this property means that any other form of package- * choice or selection is ignored. */ Q_PROPERTY( QString packageChoice READ packageChoice WRITE setPackageChoice NOTIFY packageChoiceChanged ) Q_PROPERTY( QString prettyStatus READ prettyStatus NOTIFY prettyStatusChanged FINAL ) public: Config( QObject* parent = nullptr ); ~Config() override; /** @brief Sets the default Id for this Config * * The default Id is the (owning) module identifier for the config, * and it is used when the Id read from the config file is empty. * The **usual** configuration when using method *packages* is * to rely on the default Id. */ void setDefaultId( const Calamares::ModuleSystem::InstanceKey& defaultId ) { m_defaultId = defaultId; } void setConfigurationMap( const QVariantMap& ) override; PackageChooserMode mode() const { return m_mode; } PackageListModel* model() const { return m_model; } QModelIndex defaultSelectionIndex() const { return m_defaultModelIndex; } /** @brief Returns an "introductory package" which describes packagechooser * * If the model contains a "none" package, returns that one on * the assumption that it is one to describe the whole; otherwise * returns a totally generic description. */ const PackageItem& introductionPackage() const; /** @brief Write selection to global storage * * Updates the GS keys for this packagechooser, marking all * (and only) the packages in @p selected as selected. */ void updateGlobalStorage( const QStringList& selected ) const; /** @brief Write selection to global storage * * Updates the GS keys for this packagechooser, marking **only** * the package choice as selected. This assumes that the single- * selection QML code is in use. */ void updateGlobalStorage() const; QString packageChoice() const { return m_packageChoice.value_or( QString() ); } void setPackageChoice( const QString& packageChoice ); QString prettyName() const; QString prettyStatus() const; signals: void packageChoiceChanged( QString packageChoice ); void prettyStatusChanged(); private: PackageListModel* m_model = nullptr; QModelIndex m_defaultModelIndex; /// Selection mode for this module PackageChooserMode m_mode = PackageChooserMode::Optional; /// How this module stores to GS PackageChooserMethod m_method = PackageChooserMethod::Legacy; /// Value to use for id if none is set in the config file Calamares::ModuleSystem::InstanceKey m_defaultId; /** @brief QML selection (for single-selection approaches) * * If there is no value, then there has been no selection. * Reading the property will return an empty QString. */ std::optional< QString > m_packageChoice; CalamaresUtils::Locale::TranslatedString* m_stepName; // As it appears in the sidebar }; #endif calamares-calamares-2d126ae/src/modules/packagechooser/ItemAppData.cpp000066400000000000000000000141351430147706700260650ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/packagechooser/ItemAppData.h000066400000000000000000000015631430147706700255330ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/packagechooser/ItemAppStream.cpp000066400000000000000000000102671430147706700264510ustar00rootroot00000000000000/* === 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/TranslationsModel.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-calamares-2d126ae/src/modules/packagechooser/ItemAppStream.h000066400000000000000000000016711430147706700261150ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/packagechooser/PackageChooserPage.cpp000066400000000000000000000101511430147706700274010ustar00rootroot00000000000000/* === 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() ); } 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( currentScreenshot ); } } } 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-calamares-2d126ae/src/modules/packagechooser/PackageChooserPage.h000066400000000000000000000025561430147706700270600ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/packagechooser/PackageChooserViewStep.cpp000066400000000000000000000062561430147706700303060ustar00rootroot00000000000000/* === 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 ) { emit nextStatusChanged( false ); } PackageChooserViewStep::~PackageChooserViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString PackageChooserViewStep::prettyName() const { return m_config->prettyName(); } 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 ); 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-calamares-2d126ae/src/modules/packagechooser/PackageChooserViewStep.h000066400000000000000000000025151430147706700277450ustar00rootroot00000000000000/* === 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; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PackageChooserViewStepFactory ) #endif // PACKAGECHOOSERVIEWSTEP_H calamares-calamares-2d126ae/src/modules/packagechooser/PackageModel.cpp000066400000000000000000000113011430147706700262400ustar00rootroot00000000000000/* === 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 "Branding.h" #include "utils/Logger.h" #include "utils/Variant.h" #include /** @brief A wrapper for CalamaresUtils::getSubMap that excludes the success param */ static QVariantMap getSubMap( const QVariantMap& map, const QString& key ) { bool success; return CalamaresUtils::getSubMap( map, key, success ); } static QPixmap loadScreenshot( const QString& path ) { if ( QFileInfo::exists( path ) ) { return QPixmap( path ); } const auto* branding = Calamares::Branding::instance(); if ( !branding ) { return QPixmap(); } return QPixmap( branding->componentDirectory() + QStringLiteral( "/" ) + path ); } PackageItem::PackageItem() {} PackageItem::PackageItem( const QString& a_id, const QString& a_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( 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( loadScreenshot( CalamaresUtils::getString( item_map, "screenshot" ) ) ) , packageNames( CalamaresUtils::getStringList( item_map, "packages" ) ) , netinstallData( getSubMap( item_map, "netinstall" ) ) { 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; } QVariantList PackageListModel::getNetinstallDataForNames( const QStringList& ids ) const { QVariantList l; for ( auto& p : m_packages ) { if ( ids.contains( p.id ) ) { if ( !p.netinstallData.isEmpty() ) { QVariantMap newData = p.netinstallData; newData[ "source" ] = QStringLiteral( "packageChooser" ); l.append( newData ); } } } return l; } int PackageListModel::rowCount( const QModelIndex& index ) const { // 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-calamares-2d126ae/src/modules/packagechooser/PackageModel.h000066400000000000000000000106151430147706700257140ustar00rootroot00000000000000/* === 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; QVariantMap netinstallData; /// @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; /** @brief Does a name lookup (based on id) and returns the netinstall data * * If there is a package with an id in @p ids, returns their netinstall data * * returns a list of netinstall data or an emply list if none is found */ QVariantList getNetinstallDataForNames( const QStringList& ids ) const; enum Roles : int { NameRole = Qt::DisplayRole, DescriptionRole = Qt::UserRole, ScreenshotRole, IdRole }; private: PackageList m_packages; }; #endif calamares-calamares-2d126ae/src/modules/packagechooser/Tests.cpp000066400000000000000000000047711430147706700250430ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/packagechooser/Tests.h000066400000000000000000000010751430147706700245020ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/packagechooser/images/000077500000000000000000000000001430147706700244715ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/packagechooser/images/calamares.png000066400000000000000000000201711430147706700271300ustar00rootroot00000000000000‰PNG  IHDR\r¨fsBIT|dˆ pHYsX•X•Ùm7ÓtEXtSoftwarewww.inkscape.org›î<öIDATxœíy°%U}Ç¿§»ï½oófcö•e`†d ¥¢(Á}IÔ²RV“*£–eEC”XFMR©TÊŠ•ABÀ2„RRj©,ƒÂà 0ÌÀ0ÀÀlo7ïݵoŸüÑ}ºÏ½·û¾»ôÞ¿õxsÏí{úÜÓçûíßYÞi†xö#¸qü[ç"ˆ4Àn¿è>|/èó(AŸ€ ˆøB@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0ZÔ ‚ghÇu»þ]}fæ‘ zðÑ€JDÄ2€ PX>&Þþ']}fîå§qú¹Ç1ž«T*"P€ðdÁP0¯«Qƒ2Â`A'H3d„7Üüeš5•4BW•èˆ]%H!tE‰Ž`ÉR]MÂ.ý›I©‹ÔHt% WXÃoÙugÈR]EÂGüMé X¬“ ¤º‚DÜÅ/ H>tõˆŽ‘Å/ H6t刎p?`Í $ºjÄ’´¿è$,Ö, $ºb„;–²;¿`L qÐÕ"<éFü""dAWŠèŠvâÌ7u2¤@W‰è˜NÄ/ Ht…ˆŽèFüâ êĺ:Ä’ô"~ñÆba±NÍ,®Ð•!ÚÒø :™@\¡«BxÀ}¿H^ÔÈb]¿Ä/(’ ĺDÇô#~™@¼ +At„âé%a‘fb]bIü¿ X'ˆtˆ¶!~™@ôPíî0K´»™‰>ˆ0ÿÖ d0,ê^GAC@xãy×o|“5¿åõ99¹ …L "ȈÎh#~¯ÃÝÞc¬Qü2h  –¦ñ»¦KÂwëU”êdaC@´'ñ»o½A&.d„;¡‹_Pª+(ÖÉ€ €pÅhsxâuš-êñ„Kÿ„%~ñFÉŠ†5ω>¡ dògmSsQcIŒ&Í-~¦æ0¸f[ËeZ'(d!RX>6ÿíÃØðù‚å Q§cÂÿùŸ¿»¿ù†7ïjɧl02€(lÚ…ÍwüÚ²5¹äfløÜ}‰0°Ä¿âê÷!7¾ ÝùsŒl¿´eGâRL ÈB °i6ågPGWÚiI00Å/ÐF&°ëއ0²íÒ–üËd¾C0nâ$Áš Rümd6™€È‡LÀ_ȤøI20Ä/M ù¼dþAˆ_SüaÃ.ÝJÙÓ„Dï@7âÄÙ¢¿ÀÍäî™@øL/âÄÑ¢¿@6·î™@ïøH?âÄÉâ ~AÛî€A&Ð+d>2rñ»ú¿Ï%7cýgïŠtÅ Ÿâßñù»ú¿@™À²Ýos-™@oøÈôÿ~“÷|Ù—¼F¯ü@ìV özç_yõû}9ÿÑ{¿Ž7ô–òÊd]Cà3S|Ë7ˆUw ‚°_æè½_ÇÑ{¿ÞRžæÓW †2™@Ç@ÚL )â·gÈ:† ÒbI¿H,×É: @’n‰ÓfƒdKC0I5¶âoÞÕ1 å:ÈÚ@I5Oñ7§ÇNüU®›ƒƒD+d!‘4p}PbÄß ™€;d!’4Ú‡ØI¿½³™@ d!“$H“ødD@L *ñËk.B¿âTÈlÈ"" &…øÝŠ`A¸–©;ñ‹äJ¨’ DI¬MÀUüZ$â÷.Sk!Ý"û½¦×e22€¨‰µ H˜âÿAìÅïFCÑDÖ#2€wSübßOñ{¥ËÝ¬Ž Ä„¸š@ØâÂ3ÕŒš@Œˆ› dEü"Ÿšan6š%ÈbF\L€iÙ¿ Æ³eôtà2õÀ·€ÜV}ø«}ç5rÉÍ<ûÊ®?·é¾‚ÜXÿۛɿ ÆÔ‚êñ¡A@L™ºÿk¾E½ìS˜Uñ‹ãuÎP©{|0EÄ?»QTñ ²`d1'©&tñ Ònd i&ñ Òld !)&6ñ tÎP5:80a$ˆ¸›@ZÅ/¨é32€„WH»øE>i‹ÈHÜL +â¤ÉÈJ\L +ñ»ì&œ4ñ j)12€µ t-þ’)~ñ׊:g¨%Üh)p™zà[€UûF¨çíOü½íâÓqzâ/jœàÈ%ôVšÐb2aG$~H_ƒ£f ±‘@JËHüh¿È_O¨ ¤ˆ M€ÄWñ ’h42‚â÷mñ tË’2&bÝàw$°”øHür>uîAÜ!H)~™@'âoHh9¢‘n¶í^2=†âè 12€Ó¯ !~7"—÷\Óc,~AL€ÆRN¯c^âëÒÞvŸñ<>@ñ‹ãë€h1½ÕÆ´X„Ÿt $Müí"/¿ Îcd¡SH¢ø»Ák "(ñ êÜŠb@†Xʲ ~Ï÷Ä?¿@7âg41¼Æ²,~IüAAèP»ýA@iŽ2/þ†?Sî^üÝŽAÄ)  £ˆ‡”ëŒÄ/½«<¢ŽÈ2ÌÔý_C¹ÎÀšZ7‰?œòÄÁ¨ qTŽ!ÕQ‰?ÜòÜü‰ 2y¥ÑHüá”G$×#42€0ƒÄRyš“£22Â&¯ÃªµdÄXy¼ò‰¢;@@4S€µyÝ*‰?hñ‹ô°M€ €hAS€ÑœÆ&Èm’ ~îúÂü>q¿Àà@Í»˜¾B@¸¢2`TãPššaRÄÏäÒ?â.~¯ƒ!}’ž( ‘L€Äß}yÚžwé|¬Q2¢-¼«ø{˧‹òjdÄ’( v1oùt[ë#h• €èašèxGâoŸOâ—gú®W2¢c€!ÉÜÞwM'ñ÷T´NÁ°6ÙôѶ (­é®Ç“ø{*OeújdD×0Cªó@Lû||,ÜðÅȈžT9ò-ˆÄ¿Dzïâ—íÛȈ¾P9òªóÚkÓM€ÄßGyÚ-îËhC¢o Š)K¯cöÒBIü6^â—ÓY›ãÚB@øBAáj¼±)û%4Gé]C]Â7 ª¹¯€À/¡5ä•ñ3¼øŠŸÉ+GÕèNjqÙ¶»“¼B¸ó{á»)P@øNNã·m»—Ê««ô‹ €s¡Ge‰H )y´Ë+©â( DSÌiB/’"þvD’Å£2Óš‘$ñ{¥»½çç:Ð,‘T (Ž ¤AüÝæÓm™Tï·|  BA±L y‹±R(þnËÓÅ_ö  3g<Û7‰ß ÷ÝY}€ €a- ÄïE ›„“¡£0  r(¢m'lÛî°Êƒ€ÅÁ`.Ví6žî¥½Ý–Gñ^ ì+dDd0yP‰¿Ÿ|ú €ˆÇ<Þ'ñ 9¢;ÐïSˆ<ó'ñ{B@Ć‚ ¨bŸA(±"¯ eÇa‰ßȈؑSZÇHüÁ@@Ä’œ‚%ŸB䉿s؉ɩŸE¯æy¥8øyˆÔ¡×uÔªµV­xüQó•ç|»â¾s óø€ÒÑÖEr>î÷X¯üí÷ CEhùjW'ë6;w:”Ñ+º®C×kök/‘{©ÜKlqKÚˆˆ=š¦1½Vó>(fbN‚ø ‚ªªÐr9÷7c&椈  „ªªÈåó‰1s’Ä CQÓÚìœ7‘ÇUü ÕôzÔe ˆîaJÃÀ ô†ûá$~W´™Ù¹¨Ë@=Á9‡®ëàÜúk€ř6ñ€žŒš¦B×u+¥µ-›"ì<Ýû\ÝåÓmþQ¡Å¿ˆÑÆ jêõº ˜ÉæÝ·¹}{¥·?…ûîݦÇ-1%%TEµM€1æªp¯ô¶yw™W/çˆê©@tš#çý^B~´|Æ+½—sÄê©BQ[M Û¼—HšôM¨ @¤ŽNº^¤=äo†©DUUšæë'Ù¾¢ Šª ^ïl¡›Þ»÷ë»IO©¦“H ‹w~©Ga nxÏd¨Ïß Í™€) À9¸aH‰é]àÓ)´€È ŒÁ|æ–aX/Ò·´·[¨ @d 0Å—î@ .‘=Ä ¥1ì—¡.‘IÄ@¾½X(Ca¿ uˆÌÂÀÌ;|Ý´A]‚h2´‡ý2´ˆ à,îIÓ"ŸNˆ~ `q8ü8Ø«OŸzlæ5 Zô 0¸ šÆV›.ß|°q7ˆ¶ÌIdê0pd/ØkOS¯ ³@i¨ë@~X¶|ù`ãÅÀÖ«€uD]âÐ1µß»t]ÇÉ'pìÍ7pâÄq‹ETÊ”JEhš†|¾€ññq,›˜ÀÚuë±aãF úVþ^`Ï<ÿbøÀ9Ø¡_í½8¼0ºØ˜t`üâ÷ƒ_ñq`åÖàʘªE°g{ònàä¡®>ÊWl.ùø ŒTÀt07;‹çö?‹—DµZéøsŒ)ظi3v^x!6nÚIôº°#O€=ô àäÁ>3bÀ®[`¼ëKÀð  —¸öÛûÀ~þ@étYF€ko¿öV@Ë/ý ±¸¸ˆ_ïy ¯~Éu ±V¬\…k¯»k×­÷©tžÔJ`?¹lßýÍw` õw|ìòø›oR™~ʾ}Úß|Wn…þÁoƒ­Û™¹~²/x¿ÞóXWwü¥`ŒaÇù;ñ–k¯CÎë)H>Þ~î@ð0÷&”»o›<Ø)Ê—|¹÷~`j`çˆ;ìÈo Üû—@y>ü¹šÃÜ ŸÃèõ”YàÜÀžGÅ ÏïìËWà]7ß‚ÑÑÑÀÎ!ÜØÔa°ÿøØ™SAžPÛþ{P>ñ¯€’½gž²ý?6ïü†¾ôÁ}ˆaþ-ŸÁÐ;>›90 ?ý¿Ÿàõ×^ ü\ÃÃ#øý÷¼Ë&&=O°Ó€ó'Àîº-ñ@îð#à÷}è³?–4Øk{¡<ðåàÅœcìñï¢øËï®Á9ÇÿüE(â€ÅÅüøÁpæÌ™@Ï£Þþ§vG 9ëUhß¿lò•@²÷B™zºa€m»2ÔóF›zê~ ¨–B=oáè^Ì-ßÂY[B=oTìÛ÷ö?ûL¨ç¬Öª8yâ8Îݱ#°hK‚øQ~þOÀ±)ôRä÷|úëÏò½bõcPþç¯r°w WŒ:ƺ³ÇŽF_ÿLMNbßÞ½‘œûÔÉSØûÄoË?˜.À©CPž¼+¬;¨Cyà˨UÊÑ•!ØS÷€½áóhhÅIäû.æfg#+CÐpnàÑ_ý †¼‘HÈìæLOM’·„±(?ûNw‹{ ?ý Šß½^úÌOµõÿâkõÂø‹bñøK˜›‹¾Nø9tð &'ÃÃòÂ0 <ùäoù~ 8‡Ÿ?ìØóP^~,Ô òbtÿý8uò¤¹3¬Ïß3êåé6Ý×FûïÇÂü<ÎÌŸŽ¼^üüá†ýÏDaɼñú똞šôý;ú>_¦ø½Ð§ò³G0øâC8=s&–M@QÒ3m¥<ñý¨‹`3røxùÜcvn££cŽºH¾033™™™¨‹àœãà¸æºë}Í×ß?æu°ò3ǾYõè?D]„Ô£ÔŠ8õðam Àòy ¹-ö›Ã/¿„«¯½Î×_Ù±`}®='’É6œ²7Ú¬ÖjÐõÖ$dŒr¹Œ™i}PŽîóµpDrX[=ÀyVN¥R%€Çû;àk`ꈟ¹ b¸26hL8GµZhZö–fÅìì,üÔ¬¿]€ÓÇüÌŽHŠ¡c„—lñ‹]7©;à/‹ ¾æ§ûè'ÕEÿò"G:œ‡npŒÕjŒ™Ïé#ú£Z­ÀOÍúÛˆxñ-*¯ÖT+‡õ˜~P­VQ( (´ e?†ß.rÑîoFDKU1§þšÅ/¨T«‘.©M~oâësøÐrÿ2#’c(¡Î›Äoµ/Ó€j¥Š|¡%c{ øÅÀÀ üÔ¬¯»ó[|Ë‹Håü8*ȹÞù9œmppÔªäryêôÀ²eËà§f}0ÖžïcnD’˜ÎŸÌ{SeÌ·2Ãepsv —Ë‘ tÉò•+ã;Pßx™9LdŽ×Õµïüv‚$~ù˜Z­Fc] ( ÎZ³Ö×<ý}6`aÆ–« ùµ™öGiý娞Àé›Ú0³_*·ZkÛ9Rãü£1'ÑÏeâÑÓ'`ÞÇ»—¦+Ôç4žÙ WãlÍ|~À³ÆÌ bVE0Æì*…Åvv`aá Þ8z4êbج[¿ù\Þß1]ïA!&Àóغñ+0òCVÃcö5cD#µÓ˜Ùpá4Z‘ûîå4bóîÆ­|Ä8»œÖøØ)9­Wò´§ïï+¿(¯¹ç½åíÄwdv}Ü®g»ŽÍ#!ªUa ††‡cgÕj÷Ýs·½¢1j¶Ÿ}.üÖ«ï5^¿à&ãþ†)½rfÇÍ©?Ô®údlº[ó»Íg2ô"~óÁœ¥R)vÝ|>sÏÛu1Ã##زm›ïùú¿' Ó _óiß Ú-Fnó~ÐlxÜ„bÜ£†x ƒ0ó8p«[G±†ãìî€Á!§Ú•ã¬1UL‹IyøQÏ|ùÔwÜFU¶¥²zJ믴¾³ëÛõ5hÕ±]?°ÓaýæG¹T†Q7üm}þ\°sWhéhÇÅ—\…)¾?…Ãÿÿj»?cÝΫ¨‘Ù+>…úðJ€½vŠq³KÊÌrŠN8¿aÀnVº}œý9€sÃÊGNçp~Ägå<ü¬çÊ_‚x„'LÁô5(Ö]ªGQÏ"M¾ õØuip•J7h•½ý742ŒK/¿"ÜzmbÕêÕ8ûÜsù~ÁÄLAå–;#[X^³‹;ßÛ>ìa*Šåv藍)¼÷ûÅg‚ û›á#+QyÛ_ùžo§Ì]üqÔVϰ¿©ë‘æRg¬.G¥RE¿ÏÚó“ìĪի#9·¦i¸î†·¸-x@+¶¢òî¯ºÌ ‹>ºS7þ Dï&­â·¿ïî÷£vùÇËߋ҆Ëqú²OÂOñ‹YÎ T«ñ1ÆÞzã;122òyk¯¿ãããC½õ¶ÏÜTæÆªsÀ ÃÐBš0 £8qówP]c6<Þ½ø™s`ìÅ/¨o½Êä!(Ó¯~.¨¬:§nú;p­ €t'þÖÁU˜}©º¸ÁÁ ‰‘Ëå°nÃ9ü²¹Él\yõ58'àAHõÓ·Ý~G'0Ö_cpê+{½Œú蜼ùï¡Olv¿hhðIüöP`äâåÕÏ»¬8õD°c)¯Û“7Ý ^v¿S—ýˆß®;fŽ·¨j>¸†«¯¹;.~Mýt€€ ºz¦7bøø>(,^)Ÿu!N¾û›¨­ÍžøLAmÛuX(×0tr?|ÝçÃé ?ˆé¾ž \üöt«E\Ö bëöí˜?ÐÔÐR.~ Ã0°pè ,ßóÏœ:èKžµñ ˜¾úÏQÚp©ó½¹S`Šßz­(JlL€µM÷ øÝo÷¢Zë¡ö³ÏÁåW\…ÁðÏC3À4S§&Q˜<€Ïý7FÞÜ ±4¤ê…q,œ{Nïúêƒ L².~a˜™žDáÅŸbùÁ10ýROùÔF×áôEÅÂ9ïWµÈÄ/×kœLŠÅ"<¿/:ˆJ¢c`ظi3ví¾+W­  „Kœÿñ½ûBjÕk5LNM¨È•¦0öê#>¶“/B©{;i}hJk.BqýeXÜú{€V°‰¿Î9f¦gP®”00}c¯>†¡SÏc`æ0À½WÜUÇ7¢´îb,n¹•5Z•(‰:BñËÇÆº®ãµWà7Žâä‰ã(‹žÇjª†U«Wc݆ غu;†Cž]a{ž ×Ó¦¦¦Pç†Ùh8  †üÂIäæA­•ÁêUƒc¨ÆQ^‰ÚèYfwMƒDh#~Kø}UëóNëk¿Ó¸“)~ç³33(UÊö¸ˆª‘;sjå4´Ò< ðÜ ôáU¨Žo€‘±DkæÁ3µê%~}-9ãÒ(~»ºR ~7P*Q©”Q.—¡©*´\ccã‹Í÷ˆÄ@×uLMM¨s0Æ­†&™$`«Q‘ø{ƒsŽÙ¹YTJe;Z‚UÏN=A|IÆðuG ®N¬©X¹r%¦§§ÁºÙÐ8`62!hn‰ŸKâÄ’\fŸ¶QH!> "LCj°"7¤™I†“Î%ñKiŒ5+ VÜ` X>19Ì¢T.Yâ‡mº¶³ÚFÊ­Ï1pë3©µ~8¸%~§>Å9…§6Ôwòo¼&.iR½&¡ž“Š¿»w‰ªiX¾|9fffÁ­ÝNÅ„7ÝùE«àÒRºóoS¶¦58}yÑ"í; È°ïü¼)ݼa5¥I¿íÏ'€ñ‰ `Ž¡T*ÛQ•³~_Ü­a7C˜07ë‘ÉÊd€óÎæÔ‘}ý`Ö% Õ“ðr3ÑÉ.iR½&­ž“†¿‚ôR-‡å˜apGØV+3Û›¶‹M'Ò­–gÞ$šÂ~qgñc§Y¯¹8'kÈ5Ë… ¤ð6a­r||;r© É᜜K)ìwjÑü—Âþ†ú¦ÐZOö \ªSæ¨òN@ÌzN±˜SÑr9LL,‡¢©öÝÉnPpéóËé€~6÷ùc㤈@ˆ¿©ÏÉš~'¹/:66ŽçÎÏìÚACŸ’ø³ë¸³…Vh­O ¡N]Ó¤zMz='ßwê5§aÙ²e˜›ç†Ó‰4o±ïȨš†¡!»ŸjwC)ì÷\>0 R©Z*§°?ÄnÀRhš†ˆñ@û./âSšç÷\.B¡Ð0@óüéBó}óÈÐT¬0`†¨£Á%cÝW.…ýr³‹4¢•œ¦œ£V«9Ý-¹Q×\ ûëÕsLIT@FQUä ó¶˜yįyÁŠöh O w´\` µš&­pF÷à’&=fê9¶hsgæ£.C_†z]·^‰9LµÒì0Öi”̉ˆ0ëÚz(“îêv‚0;…ê9æhǦ'£.A‘¸A@‚ üƒ € 2 Ad2‚È0d‘aþä‡êok\IEND®B`‚calamares-calamares-2d126ae/src/modules/packagechooser/images/calamares.png.license000066400000000000000000000001421430147706700305450ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/packagechooser/images/no-selection.png000066400000000000000000000032551430147706700276030ustar00rootroot00000000000000‰PNG  IHDR\r¨f pHYsÄÄ•+_IDATxœíÝ¿k]çÇñï‘|eSCII"pêÁŽ)ÞœÅHS íÖ? ÝÒxqmÇÝ›¡.] U#gh›z)dï`ºÈ)$UI ÅÐĦÍcM ÊŬÓÁRHJ çÊ:º§ù¼^‹|AçÞGÃó~¾÷è"Wÿ¿š]\3wúÌÒËÕ¶gÛ¦ž©ª…½^ÐÙ¤ik£šæúûïÞx»ª¶¦¹xª,///Þo]iæëøTKz×>¨ÛGÍýlmmín×kLñüs;›ÿ{'O¹táü©cÏ=xèСÝLÀÇíÇŸ~veõêÍ?ºuüÞxëJU«Ž“À|×:}féG5W/|îÄ‘Õ_ÿêù§ŸzêÀh4²ùa†F£Qó'Ÿ<ðý³/-¾·¾¾¹ùùæáÅ£ÇlÜùäƒ.×Ïu~¥¶=[Uuùâ…S ÞöÃ,,,Ôå‹NUÕ{µ‹ÎؾáWÇž=zpêÕ½ÛÙ›;{µ‹îÀöÝ~ïùa˜¾´7;èÓø†&L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ØY/€GûÓßîÎz ­iª~øü⬗Á#À€ýñÏÿìí¹W^y¡ªª._ûKo¯Q%Cç-3 X[moÏýÚµwªªjå•«ªêòöã½×ôô¼ì3 XÛßP¿ùñÓÿµ?ôuòïèñ‡à±™ ˜ `Àúœ.½õðäãÕ¿ò˜,&f´þF€7^]ªªªKoÝèí5>3 XŸ÷.þþáÉ¿zné+Éb€`&€ëó7è«Ûwÿ/8ù£™ ˜ `ÀÚo8ù©€XW·oþí„L0`}Šþ'Û›þÍsK>±Ê=f°>?Põðä߯×b˜L¡ÎÿîÆ×þ›,&€!Û¯cÙñËÁLÖ÷¹ÜþÏWò@°ó¿]›õ˜1o ˜ `ÀÜ›£o&f°>ÿc¨2@4À€¹@ßLL ˜@0÷¬Ï? U&ˆf0}3@0À€è› ‚™Ìoè› ‚™ÌùOßLÌ0dFzf€`&€óè› ‚™ÌÇè› ØîÜœõöÈf½AlýÚOg½¾áÜ€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@°i0©ªÇmOk×öæ¤ë5дµQUõñ§ŸÝŸr]À>ØÙ›;{µ‹î@Ó\¯ªZY½zs2é`L&“ZY½z³ª¾Ø«]ÌwýÆ;ŸüãéÅï.m~¾yø½õõÍçNœøöá'ž˜FÍ.Ö ìñxÜÞþ׿ï¿þó_|ðáG·îµêößÿúÎ/«ªÓ[õ©6ïòòòâ½ñÖ•f¾Žïjµ@Úºõ­ƒs¯¯­­ÝízÉnNï¹Óg–^®¶=Û6õLU-ìâ9€½1iÚÚ¨¦¹þþ»7Þ®ª­Y/Ø/ÿÄÿÑ'ÜIEND®B`‚calamares-calamares-2d126ae/src/modules/packagechooser/images/no-selection.png.license000066400000000000000000000001701430147706700312150ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-calamares-2d126ae/src/modules/packagechooser/packagechooser.conf000066400000000000000000000172071430147706700270600ustar00rootroot00000000000000# 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_*. The module's # instance name is used; see the *instances* section of `settings.conf`. # If there is just one packagechooser module, and no special instance is set, # resulting GS key is probably *packagechooser_packagechooser*. # # The GS value is a comma-separated list of the IDs of the selected # packages, or an empty string if none is selected. # # With "legacy" installation, you should have a contextualprocess or similar # module somewhere in the `exec` phase to process the GlobalStorage key # and actually **do** something for the packages. # # - "packages" # When set to "packages", writes GlobalStorage values suitable for # consumption by the *packages* module (which should appear later # in the `exec` section. These package settings will then be handed # off to whatever package manager is configured there. # # - "netinstall-select" # When this is set, the id(s) selected are passed to the netinstall module. # Any id that matches a group name in that module is set to checked # # - "netinstall-add" # With this method, the packagechooser module is used to add groups to the # netinstall module. For this to hav=e any effect. You must set netinstall, # which is described below. # # There is no need to put this module in the `exec` section. There # are no jobs that this module provides. You should put **other** # modules, either *contextualprocess* or *packages* or some custom # module, in the `exec` section to do the actual work. method: legacy # Human-visible strings in this module. These are all optional. # The following translated keys are used: # - *step*, used in the overall progress view (left-hand pane) # # Each key can have a [locale] added to it, which is used as # the translated string for that locale. For the strings # associated with the "no-selection" item, see *items*, below # with the explicit item-*id* "". # labels: step: "Packages" step[nl]: "Pakketten" # (Optional) item-*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". If the path # is not found (e.g. is a non-existent absolute path, or is a relative # path that does not exist in the current working directory) then # an additional attempt is made to load the image from the **branding** # directory. # # The following fields are **optional** for an item: # # - *packages* : # List of package names for the product. If using the *method* # "packages", consider this item mandatory (because otherwise # selecting the item would install no packages). # # - *netinstall* : # The data in this field should follow the format of a group # from the netinstall module documented in # src/modules/netinstall/netinstall.conf. This is only used # when method is set to "netinstall-add" # # # AppData Items # # # For data provided by AppData XML: the item has an *appdata* # key which points to an AppData XML file in the local filesystem. # 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-calamares-2d126ae/src/modules/packagechooser/packagechooser.qrc000066400000000000000000000002201430147706700267030ustar00rootroot00000000000000 images/no-selection.png images/calamares.png calamares-calamares-2d126ae/src/modules/packagechooser/page_package.ui000066400000000000000000000060211430147706700261510ustar00rootroot00000000000000 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 0 0 Product Name 1 1 TextLabel Qt::AlignCenter 0 0 Long Product Description true true FixedAspectRatioLabel QLabel
widgets/FixedAspectRatioLabel.h
calamares-calamares-2d126ae/src/modules/packagechooserq/000077500000000000000000000000001430147706700234055ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/packagechooserq/CMakeLists.txt000066400000000000000000000041761430147706700261550ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-FileCopyrightText: 2021 Anke Boersma # SPDX-License-Identifier: BSD-2-Clause # if(NOT WITH_QML) calamares_skip_module("packagechooserq (QML is not supported in this build)") return() endif() find_package(Qt5 ${QT_VERSION} CONFIG REQUIRED Core) # Add optional libraries here set(USER_EXTRA_LIB) # include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../packagechooser ) set(_packagechooser ${CMAKE_CURRENT_SOURCE_DIR}/../packagechooser) include_directories(${_packagechooser}) ### OPTIONAL AppData XML support in PackageModel # # # TODO:3.3:WITH->BUILD (this doesn't affect the ABI offered by Calamares) option( WITH_APPDATA "Support appdata: items in PackageChooser (requires QtXml)" ON ) if(WITH_APPDATA) find_package(Qt5 COMPONENTS Xml) if(Qt5Xml_FOUND) add_definitions(-DHAVE_APPDATA) list(APPEND _extra_libraries Qt5::Xml) list(APPEND _extra_src ${_packagechooser}/ItemAppData.cpp) endif() endif() ### OPTIONAL AppStream support in PackageModel # # option( WITH_APPSTREAM "Support appstream: items in PackageChooser (requires libappstream-qt)" ON ) if(WITH_APPSTREAM) find_package(AppStreamQt) set_package_properties( AppStreamQt PROPERTIES DESCRIPTION "Support for AppStream (cache) data" URL "https://github.com/ximion/appstream" PURPOSE "AppStream provides package data" TYPE OPTIONAL ) if(AppStreamQt_FOUND) add_definitions(-DHAVE_APPSTREAM) list(APPEND _extra_libraries AppStreamQt) list(APPEND _extra_src ${_packagechooser}/ItemAppStream.cpp) endif() endif() calamares_add_plugin(packagechooserq TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES PackageChooserQmlViewStep.cpp ${_packagechooser}/Config.cpp ${_packagechooser}/PackageModel.cpp ${_extra_src} RESOURCES packagechooserq.qrc LINK_PRIVATE_LIBRARIES calamaresui ${_extra_libraries} SHARED_LIB ) calamares-calamares-2d126ae/src/modules/packagechooserq/PackageChooserQmlViewStep.cpp000066400000000000000000000036161430147706700311360ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-FileCopyrightText: 2021 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PackageChooserQmlViewStep.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "locale/TranslatableConfiguration.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Variant.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( PackageChooserQmlViewStepFactory, registerPlugin< PackageChooserQmlViewStep >(); ) PackageChooserQmlViewStep::PackageChooserQmlViewStep( QObject* parent ) : Calamares::QmlViewStep( parent ) , m_config( new Config( this ) ) { emit nextStatusChanged( true ); } QString PackageChooserQmlViewStep::prettyName() const { return m_config->prettyName(); } QString PackageChooserQmlViewStep::prettyStatus() const { //QString option = m_pkgc; //return tr( "Install option: %1" ).arg( option ); return m_config->prettyStatus(); } bool PackageChooserQmlViewStep::isNextEnabled() const { return true; } bool PackageChooserQmlViewStep::isBackEnabled() const { return true; } bool PackageChooserQmlViewStep::isAtBeginning() const { return true; } bool PackageChooserQmlViewStep::isAtEnd() const { return true; } Calamares::JobList PackageChooserQmlViewStep::jobs() const { Calamares::JobList l; return l; } void PackageChooserQmlViewStep::onLeave() { m_config->updateGlobalStorage(); } void PackageChooserQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setDefaultId( moduleInstanceKey() ); m_config->setConfigurationMap( configurationMap ); Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last } calamares-calamares-2d126ae/src/modules/packagechooserq/PackageChooserQmlViewStep.h000066400000000000000000000026771430147706700306110ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-FileCopyrightText: 2021 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PACKAGECHOOSERQMLVIEWSTEP_H #define PACKAGECHOOSERQMLVIEWSTEP_H // Config from packagechooser module #include "Config.h" #include "DllMacro.h" #include "locale/TranslatableConfiguration.h" #include "utils/PluginFactory.h" #include "viewpages/QmlViewStep.h" #include class Config; class PackageChooserPage; class PLUGINDLLEXPORT PackageChooserQmlViewStep : public Calamares::QmlViewStep { Q_OBJECT public: explicit PackageChooserQmlViewStep( QObject* parent = nullptr ); QString prettyName() const override; QString prettyStatus() const override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; //void onActivate() override; void onLeave() override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; QObject* getConfig() override { return m_config; } private: Config* m_config; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PackageChooserQmlViewStepFactory ) #endif // PACKAGECHOOSERQMLVIEWSTEP_H calamares-calamares-2d126ae/src/modules/packagechooserq/images/000077500000000000000000000000001430147706700246525ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/packagechooserq/images/libreoffice.jpg000066400000000000000000001354541430147706700276410ustar00rootroot00000000000000ÿØÿàJFIFHHÿá@ExifII*i‡  ž  xÿÛC     ÿÛC   ÿþ'8a73bb60-e4ca-48d9-aa86-a5ea9a7fefefÿÀxž"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ý§Ž”ÑÀ§P—½- éA §”‹Ò–€:RÒ(ëJy«ÖM^”êUéJM 2)Àb€œbœ´‹ŸJ Å-Rã4 b€Nb–€ (¤<Šx9˜4¸Åb“m-Š(¢€ QŠ( _ÎŒQKŒŠL}:“Ô‘øÓ€À Ðm#¡'ñ¥ÁïŸÎ–ŠL{ŸÎŒ{ŸÎ–ŠL{ŸÎŒ{ŸÎ–ŠL{þ´cކ—Pcßõ4õ?JZ(¸ü>´ÇSùÓ¨ îiv{‘N¢€WÏçFÞ3“ùÓéÈÅ7äþ4˜>ÿ;e(‘í@ Åúþt¤b’€ Ržô´PŠB¸§Q@ £4ìR”ÓŸZ1ïKE3i0}iÍI@ ŠM§ÒE2ŠqÚ(=( ô ”Ú}!ãµ6šzÓ©§­%#u¥=)´ŸÄ)´¤æ’€ö¤=iIæõ ·ZJVëI@ ¢ŽÔPr :¡ ŽÔðü “8£u40ÇZZw9ö§ÓÍ? åþОý¢<5>·à­Pê¶ÒùSÇ*å…ñO#=Aï_ÎO©¯Õ?ø"Û¢üF8ómøü ~štëÖ–€ƒ„xPÑÉéIÎpiÁ@ (¢Š(¢ŠZ]¢›NÎ%%>¨'4€ãµ8t¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠB21JPŠm8ŒÓh¢Š(¢Š(#4t¢‚q@ =h óEQE!éM§‘MÆ(¢Š(¥6œÝ)´”Úu4ŒP)¥-f€zSJñM"€" i©HÍFF(6;i»óOqša†Bؤn´×àPKç¥0·4¬ÜT{¨@©BôëRÔùïÿ‰ù~øô—ÿAî¿ðIPì•§zÿh\Ÿü~¼+þ ÿ$×À¿ö—ÿAî¿ðIOù4­;þÂ?ú}¤«´rsõ¥¥¢€ (¢€ F´„dPÄ_·ïì§þÑZ%Ï‹<'mŸñ Î,å@DÔ•Gú·ÿkúf¿<¿d_ÚûÅŸ±Ç®ü-â›[·ð«]µ-áH’ÊLá¥OB;Žâ¿z :WÄŸ·ïì§~ÑZDþ.ð¼ZÄ;8‰Â€±êH:Fÿíú7àh+ö±ý“|ûn|8´ñï€o,ŠßÎ°Õ G¨Gõ3c£vò¿<[àý_À¾"¿Ðµë ´ÍZÂV†âÖuÚÈÀãüžõõìƒû_ø¯ö9øwá[ÝÉáW¸ò5Mä–Ê@pdŒŒ;ކ¾úý«¿dÿþÛ¿ ì¼}à»Gñ3Z‰ôýN ï£Çú™qü]†y€?kõOþµÿ oˆßõÖßùüÅño„5ox†ÿC×,fÓu[š ‹iÔ«#cúý:ÿ‚.cûâ0Î15¾Iúý7( t¤ïŽO° ¢¹]sâ„ü3©5†­â-?O¼P¡¸˜+}ªˆøãðü‘é?ø+™âhE´ê$ך9¥Š¡Ôª$ך;Š*;¸o­¢¸·•f‚U’!Èe=©«¡4õGBwÕQLaNŠiâ²¼Iâ½'Áúk_ëZ¾™hmÌA>ƒÔûTJJ ÊNÉ)F ÊNÉáü-ñ¯Á>3¿û‘âK«Ã÷`fØíô­vüqŽ;ÔÒ­N¼y©IIy;‘Jµ:Ñæ¥%%äî7ñSN ž;ýkæÚ»ãoŠþëÚ%·‡®ã¶‚æØ¼‹$aòC{ׄÛâfÜj[à8¯šÅñ^T*)^;è¿Ìù¬_àðU凨¥xöKüÏÐìçÚ–¼çö~ñ–§ãï…:N·¬J³_ÜŽ‹´1ŠôaÞ¾Ž…hâ)F´6’Oï>Ž…hâ)F´6’Oï (¢·7 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ( ÐEQÕõ­?Ãö2^ê—Öúuœ`³Ïu({“^âÿÛ÷à7ƒgxnþ Ø^J§ ºjµÈê´ô(94m¯”¬¿à§³åÝÇ–<]uÏÞ“M”/ç^½ðóöøWñRE‹Ã:ѵ;¦Z}¥c›þøb zm‡×§ÎxÇ­( Š( §¯çFq_~ØßðT7àö³à߇¶¾!ñ%±1]êw}­¤Ñ@ÿXÀõì(拾€I ©Ï!‡¶+ð Å·‡Ç¿_¼ÒxûT€±$[éàDƒèª8{À¿·GíáfÍ"ñ¾§uçH±¬š Q²Àta@½Ùâœþ]úÖ §ˆ#Ñüo¬ø‚îÞÎ8,îúêB8ÆÀÎÇÐJüÆý¥¿à­úÄÚÅÞ‰ð†Ò -:1Ÿ_GæKqƒ÷£CÂ/¡<Ðê±RAàÃ4ݽºOJþ}¯ÿlÏ$¹{—ø‡¯ÊÙÎ-Ü…Sé€8¯ ÿbOÛ+ãŠþ?xCÁZÇ‹.5}Qº)w§gbv±Ž@ Øl`ÑJT³lsÇ¥7Û}ÿ€šzÓ‰¦šJFëKHÝh„bœRµ&3@ 'šJR9¤=(µT”Â=h6éL#½HE5»ÐML#!Æ ›¥BWš™ºTg­=y©0ð}¼6?í",ʪu4Q÷ý¿Fü Sý«¿d~Ü?tÿxP°‡Å/lÇUVÄ7ÑÿÏ)ˆä’2yнÿëý’¼Sû0øSćÅóZ WX¸F[[9<Á(ÀÜØ&¿=ÿcÏÛÅ?±ßn|)â˜/ÂR\˜u-"à2ÆLá¥OB;Ö¿küã-↬5ÿêêºMôBX.`|«:{ÜÜÀÉɤ=ûvÍ(éH{Ðç‡í|â÷j|Ëÿ•x²Ÿlò8<÷¯iý¯ä¸j¿õÂ?å^,½Gáüëùÿ4ÿ‘…oñ?Ìþ|ÍßëÿŠ_™ú­ðäà/׌XöEtuÎü9ÿ‘ Ãÿõãþ‚+¢¯Þh ‹ò?}¡ü(z/È(¢ŠÜØ;Žqï_ÿµŽõ|YÕ´é¦oìý)þ˸$ówÉï_¢Áï_$~ÔŸ³V³â?Íâß [}¹®ûeŒgç 7 ï‘×Þ¾O‰pøŒF —›³»Kv‘âl>#‚åæìÓiu^u·çÐùÒò{ ˜î-åh'‰ƒÇ$d‚¬9}+ôÛàOŒnüwð³BÖ/Žë׋dÏýæ^3_ ø7öfñïŒ5x­D¸Ò­Ë-ÝèØ‘¯r3Ôû ýðG„­< á=3B²ÿ{8DaV=Íx'…ÅQ©R¥DãºéwÐðxO Š¥V¥Y§5mz»þ‡É_·¦?á*ðÖ:}‘¿ô*ù`WÔÿ·Ÿü>ÿ¯FÿÐÍ|°;WÉçßò2­ëú#å3ÿùVõ_’?FdÏù þÿz_ý½„wú×~É|üðÿ®éô3^Ürxû&WþãGü1ü‘û&WþãGü1ü…¢“9£?JôÏLZ)ÏNG­ñ@ E¯ášB@êE-™ç¯Z3žœa@ E&pyý)h¢‚qIšZ(œ´„ã§"€Š(?ZBqþñ¿íŸÿð÷ìà.<3á˜àñ/1‡ˆ¶m¬282‘÷›ýø‘Òºø('íf?f…bßF™GuÐðiÂmÓ4øöν~$øSÃ$øÍãû=#NŠã[ñ&·wµw1g–F9ff?‰$ÐQñKãßįÚ'Äfokš–»sq& Óáfò“'…Ž%à{qšôï‡ðMÿŽÿl"¾‡ÂCE²™CG>³0·Ü?Ýå¿1_©²ì)àïÙŸÃv——V–úïŽä@ךÅÄAü§=R~è3Ôãoý¿¾;\|ýœµ­WN˜Ã®j² +OqÕ$6çø¯Ä?„ 5Ž4?i¥¤Ô5›Å‰¦~vrò É¯Ñø-N»Ÿ4õ¦?z{0 ÉÂÄŽ”ÃÒ£jô¨Ú€"n•êy©\`T{hUçšròsMO»NN”ùíÿ‹ÿ’kàoûMÿ ×ºÿÁ%?äÒ´ßû\ÿèuáðXÏù&¾ÿ°„¿ú¯tÿ‚JÉ¥i¿ö¹ÿÐèíJ(¢€ (¢€ (¢€ (¢€ò)¡I§Ò”ù·ÿlý™¼%uðåþ+ÙÀ4ïÙ͵Ì( y0xvoN cÁ|G¨ßøÇZD÷’K¦ÙÝÅ%¼r",§vßLâ½Ûþ µÿ&‰­ÿ×Ý¿þ…_:ÿÁüH~"ÿ×{ýÐé˜àŠ=hƒÞ€?ƒg£ZÞ@°¤¾lŒU‰aœWÒdãùûûgÿÉj»ÿ¯8•|·âëà°j­ r¾d¿3å¸_‚U0òå—2Wûε¿o]iLJ,¿ïëW×¾ ×dñ?…4ZTXd¼·YÚ5ä)#¥~OºßJýNøH?âØøhÿÓ„_ÈWÖ/Z¤qæI/Ìñ¸c2Åã«ÔŽ&£’Ivî|±ûyÈÑáúóoý ¾X'¯ª?o?ù|3ÿ^ÿ¡WÊàt¯ŠÏôÌ«zþˆø¼ÿþFu½Wä½~|FÐ~þͺ§¯_%¤ ÌR<þòS¼ð£½y—Œ¿nÍfæêHü7£[ÙÛBÏy—v¸í_45ö¥­¥†›æOx°f+KUËÉÉ ry¯OÑ?dï‰å‚Þ&Ž–i"†U¹˜#‘ÛÓñ¯Z9¶e‰¥ >-($´Wz.ýMfù–*”0ø´ ’Ñ]躾†¼?¶‡Ähå¦Óä@s±àãùצü=ýº#¸ºŠÛÅÚBÚÆÄ+_Ù•}Ê×Íž9øEâφì¿ÛÚD¶‘1ÀpñŸøþµÇ‘Œvúu¯>9Îkƒ«j“•×I“<øç9® ­§QÝn¥þLýlеí?ĺ]¶£¦]G{gp»£š#Ãüjðç¾ ¯ÏßÙOãM×€|cƒ}pÍáýQü¶Fn!”ýמ†¿@Q•ŽW•8Æ?ÏJý[(ÌášPU´–vä~±”fÍ0ê¢V’Ñ®Ïü™òÏůÚ÷XøuñVðý¶‡iuœVY†#®ZÓöî×®nàˆørÉDލHð ¼£ö ã㉿ë²ÿè5æÒˆ.bçáŽ=ˆ5ù–3<Ì)âêS_uI­–×?1Ægy,UHF³II®›_ÐýMñWÄ}À¾‹]ׯ#³·’%•W9i®v¨ï_+xÛöêÕ®n$‹ÂúD–Àá'½Ë»{ãµxwÅ_ŠzÅ n‹·h¬m!K{[Lü±*¨ÇrHÍpù< õãõí]y—b+Ôtð–+¯WþGViÄøšópÂK’ ¯Wçä~®xV¹×ü¢êWÅZîêÕ&” À$¯¥nÉ"[ÂòHëH 3»aTäö®káŠmøuáÅô±‹§û¢¾Ný­h+gWºðvrÐévÇeìñ6 ÄÐÊ;×è8¼Êž]ƒzÚ¶•—Víý\ý ™C-ÁF½]]•—V쿦zÄÏÛ3ùšËB¼C|™S"6 Sõï^!ªþÛž<¼”›K}:Â>Ê",<×Ï}zgëÔ<û5øûÇ:rߨhæ 6IoG¸˜kóIçY¶cQƃkÊ+úgæsÎslÆ£×”Wôþó³Ñ¿mÏØÎ¦ú ?Q‡<ÆÑ•'Û"¾ø=ûRøkâ”ñé÷ûZ#å¶™ÿw!ôFïô¯‡üðÅ? ¤|A¥=¤R%À;£cé¸wú×% ͳÇ4,ÑÍއ ¬:`ö¥‡Ïs,¾·.!¶º©oþhX|û2Ëërb’[Æ[ÿš?]· ÄzÒ¶Ë(äŸAë^-û.ücoŠ^ 0_É¿[ÒÂÃpǬ©Ñdúñƒ^ñS^>øgâ½a[cÙiW7 }Fq_¯aq4ñ”c^“ÒGëø\M­šú÷þñðÜØëßu;a%Éc¦iN뀭u÷è¹ô&¿05mAõMZòòL´—<­žå˜Ÿë_Ðì%á¼û(ü=²DÙ$ÖîaŒfG9&ºŽ³ÞÿÇ!ÿÀ…ÿ ü«ý¤þ3·íñ‡]ñÃi‹¤6¦Ñ±´Y „Úx?…{·ì{ÿ—öRø{©xf?ů‹Ëã{ö‡¹1•ʪíÀì×þØ 4_¿üMàÏÉq&•¦´k ]0ièÕŽOÔ×ÓŸðOïØ_áÿí7ð§XñŠ®uH/­56³Ac(E([œzïaÿ‚ÑÝÏ:F>[‚ì~ÜÇ©úWé…5Óâo iÁ‡ìæþÒ+Ÿ+9Ù¹Cc=úׯ±ÿÁ"> E"ºê! ¤~Ò½Aÿv¾ÏÐth|;¡XiVåšÚÊÝ-£ßÉ* Iõâ€>@ý±ÿà¡S~ÊŸ,|+„"×ÒãNŽûí/tc#qa·ÿfºØŸöÙ—öººñTrøb?b$;3Íó  øFÂâ/|[°y³]Lb›¹U^ƒñ4òÿƒø³ Þh^»‹9 @èqõÝ^÷ðƒþ ÷áßê¶š_Œü!q£Ks*·zlžl`±ÀÊžG5îZ¿üsà©lÑ'ƒ>Ääae·¹pEx§ˆÿà‘þÓ¼W£kž ñ=ÍœVwðÜM§jq‰ãW…prÁ Ð [”½µ†æ3˜¥E‘ •# þU#$Œ¿–i±D-àH€;Q¨ð0+óƒþ iûl^xJæo„¾¾6ÚƒÄ?·58°È·B:“èq@ÏûDÿÁJ>|½ŸFÒ³ã/ÂJËoa'ú<,;4ÏÒ¾;ñüâ]åË#ÃzŸlO˱¼¬?ŠòØçö%ñíY«Ü_Ü]6‹á )ÝꎥžW'ý\Cø©í_¥^ÿ‚iüðî­Ç…åÖ¥ µ®¯®X»{0|“à?ø,G‹-o£_ø?MÔ,ÉÛO- Ü€IɯÐO€_´¯‚?i6©á-DI<*>×§NvÜÛö—ºûŠùöžÿ‚UxnóÂ÷ú熛MÖ-#i±n|W dìF<«zuÚ¿:~ |]ñìõñ?Oñ.‹4Öz†Ÿ>Ë›VÈY£Žàò0hú%Ï^)\ßÃ?ˆoÅ?è.ÒvŸ«ÚGug>[0ùû«d~Ò51úTu#ô¦PÓîÓ’‘q¶•:Pç·ü/þI¯¿ì!7þƒ^ëÿ”ÿ“JÓì!sÿ¡×…ÿÁc?äšøþÂÿè½Óþ )ÿ&•¦ÿØBçÿC µ(¢Š(¢Š(¢Š(¢Š)JZCÒ€>8ÿ‚­ÿÉ¢kõ÷oÿ¡WΟðEÃâ/ýw·ÿÐM}ÿ[ÿ“DÖÿëîßÿB¯?à‹ßòø‹ÿ]íÿô@¦`ÒúÓ§Pçí{ÿ%ÃUÿ®ÿ*ñeê>¢½§ö½ÿ’áª×ÿ•xºõQ_Ïù§üŒ+‰þgóîkþÿ_üRüÏÕ_‡ò ø{þ¼bÿÐEt}zW;ðçx{þ¼bÿÐEtŠ~õCøPô_‘ûÝáCÑ~CvZ6Z}±¸Â¸ëÍ~~þÙÿòZî¿ëÒå_ Ò¿>ÿlÿù-—_õéò¯Šâßù¯ñ/ÉŸÅ¿ò/_â_“Yý½¸ñO†1ÿ>ÿ¡×˯ª?o^|SáŸúôoý ×ÊÞž•ó™ÿüŒëzþˆùìÿþFu½Wä¯?b/…Ö—v÷þ2¿·Y¥IEµ—˜ „8Ë8Ï~‚¾¿?0àã=A¯ý‘mÒz)@3$’¹úîÇô¯gë_¬äxxa²úJ t›õzŸ¬äxxaòúJ uwêõ2üIáÍ?ÅZ5Η©Û­ÕÊåIàF:Lz׿ÅOËðïǺ¾ƒ.JÚÌ|¦=ã<©ÏÒ¿SÍ| ûlÙÇmñ‘]ŸO‰ÜŽç,?¯‹pО5íïEÛäÿ¤x]†„ð±Ä[Þ‹·ÉÿHð(åh%I#8u!”QÍ~¤|ñ)ñÃ? ê¬Û¤žÕ„õ,¿)þUùkÐf¿F¿dÉþè[Û;YÕyí¸×…ÁõÅT§Ñ¯É¯ó<.©%‹©O£þçÿøëö¢R>9x›þ»/þƒ^Ty¯Tý¨~9xœŸùê¿ú¯+“Éí_#˜¾VÿüÏ“Ìß+Š_™ïÿ³ìÎ~+«kšÜÒÚøzv*Dq%ËŽ Ê=*ûÿüá[t‹NðÖž˜2Iw?V<šŸàþ…†¾xkO…j–1ÈÀ¬ãq'ß&»Wì™NQ‡ÁáàÜ›I¶õ×·’?aÊrŒ6àœÚM·«¿éò8¿‹Þ*O‡¿ µÝR!{{S ƒ «€:uý+òöæâK»™f™·Ë#—v'«’kï¯Û^ñí¾ ´HHßD­Žàgÿ­_žù¯†âêÒ–2zF?‹>‹k9ã!G¤cø·ÿÛû'|5°ñïĺÕÕ%Òô˜ÅÃÅ)dr~E õ5ú Ýœhª³Ûª(ÀDÂ@3_’–·×V{¾Ïq,ýã•Ï×`ëš‘çûBë×{seYý<®‡³¶îÝ÷íÓ¡Ï”çôòºÊ4nÛ»wß·Cõâ7†´x/TÑod·’;ˆ[c”p>VðA¯Ë{ëSe}=»š |Uƒ®êAqý¡t}¼æÿ¤Is–$“Ü÷® ç6†k(MSåkÎ÷üÜfÑÍe ª|®>w¿à¶=Óö6ñ3è?íl÷o©Á%³ëËúŠú×ö£I[öuøŠ"âOì;ŽÝ>Jø—öfG“㇅Âg"à“ô s_ ßtøJ~ø£FÆã¦\Û…=ËFq_yÂ3”°2‹ÙIÛîGÝðŒÜ°3‹é'o¹3ù›Îçé_ÒìÜÑ·À_˜¿ÕßhöØ+ùÍ×t¹4MwPÓå%µ¸xXÅXé_¾Ÿ°"ñ¿ìà˜Ü<¶–aœƒœIÁ÷ÜCÒíÀË| ô4™ÏCIŒõP² ŒÐPŒg‚zFyÉɤ÷ q·Œ`×å‡ü©“ûSášã÷¾Má?LÇ_ªäqɯÇ_ø,WcÖ¾8ø{ÃðIædé{åô’Féù( 3ÿ‚]¤û]xd¡ÀXg-ôØk÷Põæ¿?àÞ“Xý¢5-m£Ým¤irlpþQ_³<ü¦ÿ‚ÕÈÉðÏþ½/?ô8ëŒÿ‚6ÿÉ|ñ'ýdÿЫ´ÿ‚ÕÈÉðÏþ½/?ô8ëŒÿ‚5ÿÉ}ñ/ý$ÿÐ…~Ã}i{­IÏÖ˜ãæQ@‚ðRoù<_×H?ôJWÞ?ðG1ŸÙóÄ¿öoý•ðwü›þOÇõÒý•÷—üÇþMóÄ¿öoý”÷ÇJksšs´ÓÒ€?à°ßòrZ'ý‹öÿúצÿÁÿãÿâ—ýp²ÿÐÞ¼Ëþ ÿ'%¢Ø¿oÿ¡½zgü_‹ßŠõÆËÿCzýøýñ~üñ‡‹ m“L°’HrzÊFÔ™üëß^ê6ñ\×H÷Z–©tY™ŽKÉ#‰¯Û/ø*N«6û"kéûMå´,ËéæA¯ÇïÙ¶ÆKã÷€-n@heÖ­UÃt#Ìû½û/|Ó~üðÿ…¬­ãŽé-Òké€ÃMpÃ.Ä÷äà{W«ÏÞ€¹QŒ)´ÚÍgÉüUñÅ·Ã?†Þ'ñUÓm‡GÓæ»Ç«*£þú"¿MwYÕ~'xöïR»‘¯5nüÈÌy/,Óé’~ÝÁHµ™tØ÷Ç/ kƒmlÄuåŠü(Óï.loíîm$xn¡‘dŠHþò89{‚3@ÑoÀ…6_þø_ÂZu·—œffTÁ–vPÒ;z’N? ôwFÿ¾M<ÍûM|fÿŠûÄãÓý2JAûMühïãÿÿàd”ý ùO»åG± kð£þ /ðþ×á÷í]âØl`[{MHEª$j0™w6nsÅyÿü4ׯcÿ3ÿ‰ÿð2Jáüaâ¯|@Ö«âMCPÖµ#Än¯Y¤}‹ÐdöúÛÿ˜ñľ!ýu yÛDÕ#'øbn ?à[ã_l5~zÁí. ø{ñåVHÚúØ e#­šý =}è¯Ò£©[¥FzЀ`RÇÐÑO^ÔùéÿŒÿ’kàoûKÿ  ÷Oø$§üšV›ÿa Ÿý¼/þ ÿ$ÛÀßö—ÿ@îŸðIOù4­7þÂ?ú}©EPEPEPEPHzRÒ”ñÇüoþM[ÿ¯»ý ¾tÿ‚/È â/ýw·ÿÐM}ÿ[ÿ“DÖÿëîßÿB¯?à‹ßòø‹ÿ]íÿô@¦>ô¹¦Ž´£Ôùçû^ÿÉoÕ?ëÞ/å^,?¨¯jý¯¿ä·êŸõÂ?å^,#Оkùû5ÿ‘…oñ?Ìþ}Í5ÇWÿ¿3õ[á×üˆ>ÿ¯¿ô]"÷¯™<%ûcøCðÆ•aúý‹ù³ówö ÿ’ãâoúì¿ú y…°Ýsõu­z‡íCÿ%ÇÄßõÙôó _øû‡þº/ó¯…Ì?ßjÿ‰þgÃæﵿÄÿ3õƒÂ¨Ã::ŽÖpÊ5­SYžÿ‘wGÿ¯8ô­C_Ð4¾úп‡C¿lÍ*MKàµÜ±Œµ¥ÜS7²ò ýkó㱯Öø^xKUÐî@1_[˜rßÂߊüµño†o<â+íR ¹´•£pÈö"¿-âì,㈆#£Vù£òÎ/ÃJ˜bzI[æµü™î¿²_Ão|M}vÃÄvMw¨[„š LP”ä7Ò¾²_Ã<ø‘KÏý<·øWÁñÞ­ðçÄÖšÖ‘?“unyP~YõFÁ¯µ¼ûix/^´…5µŸC¿À¾Yx‰ï‚:­mâr¹ÐT1pŠšêÒ׿kâ²¹ÐT1Ššë$µWît?ðÉŸ ¿è/þ·øQÿ ™ðËþ€RÿàK…^Ÿö¡øiFCâHÜáH™ˆü1\‹?n 鑺èZ}Þ¯?;ZUò“ükéªÏ"£i{?’Oò>š¬ò1æ—³ù$ÿ+ž•áÙëÀÞ×mõJ{mB Þ\¯38 øü‡K¿xŸC»Ït– PÿŸ¨®Ã°þ˜;œgÖ–¾,ýà£øã¢Xè4¾¶ðÏŽâQ›–òí¯ˆã|mÑX÷Sߥ}¡‹˜#ƒøPé `ǃùÁñ¿|9ðÛC›XñF³g¡iÐ)gšò`œwÚ:±>€,x»Åzoü5©xƒX¹KM/N®n&”áUgúWó£û@üZºøÝñÄþ2¹ £T»g†6äÇ8WÔ?·çü_ÚÉàŸ¼ö^‚\Ü\6R]Iãpíì½ûל~Ã_²­ûNüI¶–êÚKir¬Ú¦ FLˆP÷föè3@¡ŸðJ‚3|7øqâ­FÜéxªo9.[' ùžkíñÖªé:U¦…¦ÙéÖ%­…œKF0¨Š0 ~­Ðå/ü«þFO†õéyÿ¡Ç\oü¯þK÷‰ì 'þ„+²ÿ‚ÕÈÉðÏþ½/?ô8ëŽÿ‚5ø¿¾%ÿ°$Ÿú تlWëO×û´ø#ÿ&ÿ“ÄñßýtƒÿD¥}åÿqÿ“}ñ/ý‡›ÿE%|ÿ&ÿ“ÄñçýtƒÿD¥}ãÿsãö|ñ/ý‡›ÿE%}ðzšCÒŽæƒÒ€?à°ßòrZ'ý‹öÿúצÁ?ãÿâýq²ÿÐÚ¼Ïþ ÿ'%¢Ø¿oÿ¡É^™ÿXÿÿŠ?õÆËÿCjúþ cá™üIû#x§ìè^K »`?º² þ•ø¡ð³ÄƒÁÿ¼5­‘¹l5.öW×ôiñÁv| ¯xbü´Õ¬ä´pz Ààþx¯çSâçÃM[àÿÄ}wšͻÛ^é·-HÞ€ü¬=AèúBÒïáÔôÛKËyX'‰%סR ƒVs_Á6¿lýâ€ôï†þ*Ô¢±ñv‚Åî\(¿F+7¯Å}Þß)ÁO¡â€ F °ÇçUîîà±h…̱Z´¬14 “Ùr~cì(çoø(‡‡¥ñìãèaRÏk7¤ü1È¿JüHø;­ÛøcâÇ„5[°ig«[M0”¥ª[ ñŒf¿¢ßøfÏÆ¾Ö|?¨ ’ÇT´’Î`Ü®¤sô8?…;>êß~&k¾Ö ho4Ë–ŒGœ£¯¨e þ4ýÇá ]Eðè:[Å2 ‹(°U¾aÛЊÁ^#þ@_ãcÿ_%Á<¿lâ÷ÃÝ3Á>#Ôâ³ñÎ Û"ÜÉ´ê0¨Âº“Õ€àŠû=ÆÓŽTŽ0ßý~hþŸÿÐJÿÀ¿øšcx#ÜÿăJÿÀ(ÿøšÛ$c¦j½ÕÌMÚ'ŽßÎ`ˆfp…Ï` ‘“ì( "ÇIã²±·±È,–Ñ,jØ«bžzŒS€Ý)›jJaë@§%7‚8:Pç¯ü7þI·¿ì!/þ€+Ý?à’ŸòiZoý„.ô:ð¿ø,`?ð­| ÿa ¿ô^éÿ”ÿ“JÓì!sÿ¡ÐÚ”QEQEQEQE‡¥-!é@ÁVÿäÑ5¿úû·ÿЫç?ø"ÿü€~#×{ý×ÑŸðU¿ù4Moþ¾íÿô*ùÏþÁÿ ˆßõÞßÿA4úb½)[œãŒñÇSM)Ã’E~yþ×™oš™ê<ˆùü+Æ6‘ÿÖ¯Ö[¯é—Ó®4ûiå<’%b*!á]ùÙŸû`¿á_ã8RX¬DëªÖæmíÿüë“Äâ*WU’æmíßæ~Oí>†Œ×5úÅÿ¦‹ÿ@›/ûð¿áN_ h¼ÿĦËþü/øWú›?ùÿøÁ9?ÔÚ¿óý}ßðOÉÌÿœQžAçŽzWë'ü"š/ýl¿ïÂÿ…ðŠh¿ô ²ÿ¿ þ×ÏþþðGþ¦ÔÿŸëÿÿ‚p³/<+ÇÜŽžçµ|Ÿûhß.°~Éqô¯¿í­!²…a·‰!‰#]ª°VëÃúeôÞmΟmq.ß,JÇ Éõ˜ü¦XÜ 0jvq¶¶ì­±õxü¢XÌ<œyuµöVÚÿ©ù$Tàœž†¿S¾~xdÖÆ>½:VÏü"š/ý¬ÿïÂÿ…iC vñ,q"ÇŒQ€sd¹²š“›©ÍÌ­µ¿S›%Èå”ÔœÝNnd–ÖëêÏ‹¿o [Å^ãþ]§ñw¯–6žzœ{Wëuî‹§ê2+ÝÙArê0hÃ?¯ÿž‹ŒdÙß…ÿ ós–;%êqÙèZt·(OÏrF!Œ´ý+ô2×àû+>? i¥ã|A‡å]ƦZiV«mek ¥ºŒ,p Eè+“ ÁòçOU[²ßï8ðü>tñ5U»-ßÏK}ÇŸ| ø)¦üðçÙ¢ÅÖ¯r^ß‚íýÕôQ^”A=:ñKE~B…<55J’´Qú>…<-8Ñ¢­±ù³ûO‚~8xœŽ‚eä»^_kÍÜþúöÿhWë-LJt«¹žiôëY¥~Yä…I?REF<+£šUÿ¶ þðŽzó­í­ÌÛÛ»õ>Âs¯^u•d¹›˜¾ðÞ‘ßý›×ä©MHÖ5  *€@)Õú$cËÑb¹b£ØCÐ׋üýœtÿŒo³hôïB»c¹+„˜rAüjöš1šçÄáibé:5£x³›…£Œ¤è×âÏÊÿü,ñOÃËç·×4‹›U_»p˜Ÿèãƒ\ cÜtÆ+õÚæÖØLW$ñ‘‚’(aùâõ?ÞÖdg»ðž–ò’ëR~¸¯Ïqܯ‡«§f¿T~yˆàùs7‡«§f¿UþGåæÇåV¬tËÍNáa²µšòf#Áv'·¿Lmgÿ‡vެžÒËŸšØüë­Ò|1¤h ·LÓ-,õðªVT¸>¯7ï*¤¼“2¥ÁÕ›ýíT—’oü7ý–ômkÿôí;\±›O¹†Y6A8ÃÉN?:õÊŠý# Aa¨ÂŒ]ÔU¾ãô¬5…¡ wQI_Ð'ŸÏ=+æOÚßöðgíI`÷ò*øÆp¦-õ«t¼ÇD™‰}ø#Ö¾›#4Zé:OçÓã‡ìMñoà¡,š¯†î¯ô¨›1k:J4Öìñ¼§ü ðÿö¾øËðª¶ðÿukH¥µÄžr`WôC$i*2º«£pUÆAúƒ^oâÿÙ»áoŽæyõÿxSºÏ5ŠüÆ(ñƒQÿ‚”~ÐÚ…¡€øîhŒ†Ò%oÏmxî·âï‰5øã¿¿×±ð×…´¨t"Í6Å ÔŽ¬Ç«1Ç$×L:zæŒ Qÿ×¢Š(ò£þ L…üOðÌ$ýŽðœ¿q¿ðG1||ñ `TÀÈëóW뮳á}Ä jzUž¢Ñd!ºdÙž¸È♤xGDÐn}7G±Óçaµ¤¶·XØL@¹ wø¦¾IÇ8£““ÏN´ø1ÿ$…ŸöÄñáU,<Ø9¯îR¾îÿ‚;)OÙ÷ÄàÿÐu¸?õÉ9¯¶õxwV»{«Ý N»¹“ïÍ=ª;·nI«zF‡§h0´nŸm§Âí½’Ú!“ê@~ô<ãÞ–ƒ@ŸðX%/ûIè¸\‘áû|ñÓç’½/þºž]ÿÅs“ —äüï_¥ú·„´MvågÔ´{ùÂì\Û¤ŒÓ$t§èþÒ|>e:f—g§qæX=øéœhLŒŠùSöÛý†ôoÚ‹G]_Lš-ÇVQl·¾aû»”íßÐŽ•õ^8¦ž¦€?œßо"üñ)µñF…¨hW0Iû›äÊr «ÁükÒ~ÿÁC¾;|=°K ?Ë©YÆ6¬ZœKq´¼FïÌ×îÖ¯£Øk¶Oi¨Ù[ßÚ¸ÚÐÜÄ$R=0kÉu¯Øçàž¿rno~ø}¦',ÐÚ÷SŠü¢×à¨ÿõ{vŠ/Úi›†7ÙÙ"°üNkà¿ÄŒ_¾=x?W¼ºñ'ŒžÏU‚yqæI+¼bÊ£æ¿_tØóঃ8–Óᧇ|Õ9 %šÉ´þ5ê?‡´ÏZ¥¶•§Úé¶ÉÂÇi Ä£ÛPƒ|Ã}ÇzùoöÖý‰4oÚ‡E‹S±’-ǵÔýÝ â)}FzÈÏzúŒôÇaIÎ(ùÖø“ðWâ7ìùâo#ÄZ£áûëis}aÑ£•x?¯Nð/ü[ã·tøìmü`ú¥¬@]N˜€?Ú<ŸÎ¿sumÃ]³kMJÆßPµa††ê!"‘ô"¼›Yý޾ ë÷-qwð×Ãþk–ŠÔG“ïŠü¦Öÿà§ßux(|Im¦nþ+;$ úæ¹ÿ„;øÇñ“㇄u‹›ŸxÎK V ©y’Eó1åQŠý|ÑdOƒ˜KgðÓÃË"œ«Éfν?JÐôíÙ-ôËm>Ý;XV5Ó@ï·î犺Ԇ˜ý±@ ¦´ìâšzÐÔTž•8§«g­~zÿÁcü[oÿØBoýW¹ÿÁ%?äÒ´ïû\ÿèuáŸðXÏù&þ©Ô%ëþçjñÿØóþ Y¢þÌŸm|yáÍZâ™g7Q\*«lãÒ€?i³Fkó$Ál¼6?æžê'þÞ–—þgá¯ú'šþ¯øPé®hÍ~eÃìü5ÿDóQÿÀµÿ ?áö~ÿ¢y¨ÿàZÿ…~šæŒ×æWü>ËÃGþiî¢?íéÂø}†ÿèžê?ø¿á@¦¹£5ù•ÿ±ðßýÝGÿ—ü(ÿ‡Øøoþ‰î£ÿKþúkš â¿2¿áö~ÿ¢y¨Ÿû{_ð£þeá¯ú'ºˆÿ·¥ÿ öïø*ßüš.·ÿ_vÿú|çÿ`ÿÄoúïoÿ šó?Ú÷þ c¢~Ò¿õÙxBóJ¸¹š9EÌÓ†U rxé¿ðF+ üEÈ8óíòà&€?KÇJ^‡4ÐÄÓ¨Àæ–š:Ó¨A§­GOŒu4ê(¢€ (¢€ (¢€ (¢€ (¢€ `ÜúÑEQEQEQEQEbŠ(üh¢Š(¢Š(¢ŠÍç4Q@¢Š(¢Š(¢Š(¢Š(¦IÖŸQÉ×ð cšJ]Ô”QšCÒ›@ zÒRŠ7PdÒÅâ›@4Ó4œÐ` SM) ÒP”ÜÒ“‚i Ì ]Ô„â€iJ ¦“Þ€Q“ŠVniŒÔ7JŒ“šy9¦´"œ­=j48ìâ€8/|!û@xPxÆ:Ûl£“ΆHÛd°¿ª°äWÏÿðê¿‚'Ÿ³jßøÕö< pëí@ê~϶­ÿ­J?à•ü»jßøÕö.Héšv2|uÿ§øÿ>Ú·þµðêoÿóí«àkWØêxÅ) ÿáÔßÿçÛVÿÀÖ¥ÿ‡Qü?òë«àkWÙ*¸ëŠZøÙà”Ÿÿç×WÿÀƧé>϶­ÿ­_cŠpé@ø%Àãÿ.º¿þ5(ÿ‚Pü ÿŸm_ÿ¾ÈÅ(ô ŽáÔ?¿çÛWÿÀÖ¯ ¾þÏž ý|1.‡àÝ=¬í§“Ξi\¼³>1–c×…zBõ¥ {éN¦´ú;æŸL§šZrñM P´TaÎê~îq@ EPE&h-@ E7ÂǵKEC¹©r{дTDšMæ€&8úÒÈTŽ})CÞ€'ãÔQÇ­W,s@&€,`zQøÔ>¦‚ç6=©j¾ãëJŠžŠ‡q=ñI¿Ö€'¢¢ÉíJâ€$¢¢,sJ¤ž´%Ê9(ôSóNÝ@ EæœPÑH[›‰ QL¢€EC¹©rhZŠFɤÍ!4”ÒŒÓrz›©Œãœi†\uæ†JNM0’zqQùê;S à÷§`±18…¸¨ üS çÈÅ 7R3 õª¿iäãê)¿iSßùr±Ù–·SKsU~ÔÎx óŽF:“CˆY–·SYª¹›ßdTOsŽý}¨H,Yii(= Ržè§ÞùÞ Vdþ µˆ÷vÑãû÷?­h©¹l\i¹ln4¸ïM3Ž™®NçÇz5¾DÚÎû÷‘ëYóüRðµ¾|ÏéJ}®Ôÿ#]ÂÕ—ÃþGDp•¥ðÁ¿“;–˜gƒGœµæÒümð\_ÅzbÿÛB­m â‡üLÁtnÃP“þyÅ8ÿ|¶ «– óNœ’îÓ5žN<ó§$»´íù–ì÷ͪŒw?Þ%O½XI³Ö¸\lyî-PñOê* }*PxCRŠŒ)Àæ€%^E8_ðs@Ï¥?9¨”õ§g/aE `E-Í8 @piÝh¢Š(TóR zÓÕ³Å8u§S)À怊( CœÓ©`RÐtæœ9`{SiËÒ€‘A4Ý€s@!ëJzSh¤È¤'’€‘HO4Òq@4¹£8¤&›œ÷ dQ‘QïÍ4&EŠ&Œšx4¹M4&E.sLŠPhØÍ¤Ü)s@ œM:£84»½èôS7{ѻހ$^´¹ÅD[Þøï@nö£wµGæJPãÞ•Çb@iO8¨ÃÚ—~(¸‡QM.1MßžàÑt÷PM3wùÍ&üð:Ñt³Š2)¹õ4…±EÀq4ÆozBù¸MŸh÷ô®sÅÞ;Ð|b/5ý^ÛJÈgpþƒ©­§“.«‘ËïÖ¾ø‰¢_þПµ¥á›½Kì6v²4œX‘x¦¾‡&Ë©fgíçÉNr“ÝÙv>—$Ê©fU§õ‰òS§)5«²ì}1}û^|-²™â>$iY{Å"±/?mŸ†vòKÝBçÅÍy½Ÿì% „Äþ$¾‘Ï_.ŠÜ°ý†<kÝZåp¸¯¤ú¿ Ãzµ%òÿ€}Ãð¥=êÔ—Ëþ/ê?·Ÿ€í¤ «] }ì*ÿJƽý¿ü;üzøbú_úí8ZéìbŸÛ XjWGÕåÅnX~Ç߬Ɔ$œÿziÍ/kÂôö¥R_?ø$ªÜ)OjU%ó·êyÿüŒ}Â*ÏŸùmtp?*ɺÿ‚ë.Œ-|'§FýAy«èÝ?öbð=—ú¯ZŸúêwVÕ—ÀO Ù8h<%¥F}âÍ/톑ÁÉúÉÿ˜iðÔ4Ž Rõ“ÿ3ä)ÿo?Ï•·Ðô¸œŽ›šÿ¶ÅiøŽÞÍ î–'?…}Ëoð›G·`ÐèZTL:bÜ…h/€¡@ Úéð‘én¼~”¿¶òxü|~oþíì–SË£ówýùóuûUüeòšáîg·€r_ì;T~8®ŸÁŸ·Ÿˆlå‚iVš¼€{‹qåÌr;û?TÐR{KÛ;y­¥R6´+±Ç§Jøoö–ý˜fðd÷>%ð¼/>‚ìZ{e=¡=qþÍ{~?%ÍgõlN4ÛøZü®­gÛ£=œ·0ȳ‰ýS„&þ´ù]$ÓíÑŸfø?â“ã¯ÛkZ-âÝØÎ3¸}änêã±ç_´ÿÄoÁ? ®ï´'{{¹gKw¸Aó@œ·±à ø‡áÆmoàîº×ºyûVŸ1îÆC„‘}G£{×ݺм5ñ«ÀujRÿG¼ŒÃsm'߉±Ê°ìGc^N7%y2iÇž×ç³óüãc²Ipþ:j°ö”y“õ]ŸŸæ~vê>;ñ üÏ-Æ·$ŽNw\1õ¬¹|C¨LI’úáÉõ•õ¯Nøõð&ÿán¤n­Þxzá‰‚ä ˜÷Ðû×`÷¯Øð•°ØªQ­‡³‹ìÛ0xŒ6.Œka­Êû~EÖÔ'“ïM#}Xštr¹îjšsWaC^¥8Üõ©]–acžµ©gw=£yO%¼ª2¯m#â¨ÃJ¸‰…?C^„i©E§±ìS¦¥Yj™÷7ì©ñFûâ'ÃÃý©)ŸRÓ&Ï9ë*cå'ÜW»C&Tuñçì%y¿Gñ\Òx›\××–¬Y=+ù‡ˆ°ÐÃfU©ÓVWÛÕ'úŸÉ\C‡†2­N𲾋Õ'ú›*p´å“š„6;w~†¾Lù2Îp3OVã5U_¯5(“sNÀNièß-@­êiêàŠ@LMHjÃôa“ÍJ8§­Cºœ¬>´-8t¨•¹§† ÑMÝô¥ÎzP—­8SW­:€E ÷è(È€E0¾ßz”®£¥-Eæ)w‘EÐèsFsLó>”¾gÒ˜ qL/L.(læÓD€Ž)KPšBqJÌ3Ö£.8œÓwqL2 ÓKóžÔ)aM,zx`j)% È œœ T¶4®K»Þþõ‹/Š´xX«j¶A‡y¼jañ†‹ÿAk?ûù\‡‹³©½K U«¨?¹›»½èÜkžèˆ@:½žOý4¥2ÑMZÓþþV2Á§gZ?øÿ1ýV·ò?¹ÿ‘¿¿Þœõý+Ÿÿ„ËEÿ ­Ÿý÷Añ–Š?æ+iÿ}ÓþÓÁÏèàKüÃ굿‘ýÏüŽ€?n´àÙ8¬ñ~ŒÍÆ«iÿ}Ô«â%¡ÿÖÑÆá§ðÕ‹ÿ·—ù’ðÕ—Ùs7wZ¥k} ì^lÇqþ(Û"¦ó†? ×Z’’ºf hÉ·Š7Š£y©[X k«ˆ­•Ž‘±šÎoé?ñ5³Y*XEÙ´¾f‘£Rjñ‹#x¦™5ÏèÃþc_÷ö‘|e¢“¬XÿßáPëSþe÷£E†«üîfÝÝüVpæ.%ê}k_ˆz1 ÒÄqXž3×­5;+xl¯ º;·:Á lzV<=á-KL¶–Kv–i'çÀ¯„Çæ¹ž'1–_•¸.H¦Üµ½íäû£Ò§…¥JŠ«ˆOW¶ßä]oˆÖ*N-æüÅ4üJ´Pqk1ú‘WWáîŸÎl2}ä5:|=ÓÿüX×3Ãñ|ôUé/ûwÿµ>^¾Ì¾ÿø&Aø—mÿ>Rßt·þ|Ÿþû¼žÓ€ÿt_‰§'táÿ0ëzÁåüböÆÓ_öïÿj×/ÿŸoïÿ‚s‡â„Y?èMø½D~(ªçÿÀë®OiêxÓ­‡ü¤ÿ„FÅN…·ýóY¼§Œ¦µÌ`½)¯òo€_òéýÿðN0|RÈâÄûiJŸ‰#u’•=@~k´ÿ„JÏŒXÚÿß ç…l ¶Q*È0Z1‚=Åc,›Œ£(æqo¢ök_†±½'÷ÿÁ¤k6úŨšÜçyU>õtÉÁ ×™ÝÙßøVWÉË!û®=Þ»X‡[³ÀÿÇꦽ>âiæ–[™GÙbéé(ì¥oµ.¶ù­ ±X5I*´àÿ«3#Ä>5:Mä–[¬¬¸Ë9ïXR|Gº!ÑâýjÇŽôS©@…âÆ%UûÃÐý+‹~Tw2éøWã]ļQ”fµi:ÎÛ¼,•œzYÛï¾·>‹ƒÁ×¢¥Ëw×ÔêâÛÜF}á_-üsª~×úýÛ 0yäÀàgïVàý¢#þЯýž#ßûRx¢_áÄà~Uú·ƒüKšfÏ5Ž>³škÛFåg²]©Ãá¨á°8éR›¦×â}ãg°|£;"®·¥V´¶‡ýÅþUmzæ¿\»gãòÜ^”Ÿ†)øb‹0§3@CŽ‚ŸG´€nÏQHc€üiüzÑ@.ì㻀Å*åæ>•Æk:AµÛÜF—ò)Be$Sü,+½#5ZîÒ+¸)†än=Ǹ«ŒœYq“‹?7ÿi¯Ùž_ \Üø›Âö­.#¸³Œe­IöîµâŸ >(ë_ ¼Hš®“!{wl]X9&;„ô#×Þ¿SõÝÚ™-îe¶‘Jã*ê„ú×Âÿ´·ìÐþšçÄþ·y4w;î¬Ó“jOñ(î¿Ê¿ZÈsêxÚÙÙŽ©è›ëäüû?Ôýƒ ÏécèÿffšßHÉõò~}ŸÞ} àÿøcãoƒd¹³T½±™<«Í>ãHO£äÕò'ÇŸ€w uÔtÕ{¯NĤÀdÀ{#ÿC\Ã×ÂÏǬh³á€ =³ Ç:çÃúö¯»¼ ãÏümð\—6ÑÇq ©åßé³`¼$ŽTOC[T¥‰áŒOµ£yP“ÕŸŸgòeT¥‹áLWµ§ïQ“ÕŸgÙõê~xÅ^:UØ#>•ëÿ~]|<¼“SÒÑ®¼=+|²õh çcÿC^Uduú®_‰£Ž¢«Ðw‹þ¬üÏØ²ÌM }ס+§øy?4K ugCô?Ê™t©¿å›} {‰YQNG¿þÂ3~ûÅÑzˆ›õ5ömŸ øWÄŸ°¤Ø×¼WzÀ£õëí›O¸3_ÌüX¿áN¯ËòGò_+fu§ä#6=éŸhãwo^ÕNk€™$àIú ù‡Å?µŸj÷Ã}5­§žaŠ›bõÆM|Þ xæ%FM]Få ?ÒÛ¡«)ðÛâ$GäÖ ÿvè×Oö}˜ˆœ«4ÅuÂKïÿ€}³t9úSÄ­èGá_<ÇáŠ6ÇäÔ%lwûH4ñ¤|Xƒ‘w;Ûe5.ƒÚ¼~ñÿkT[á§÷C ÏL=ªA8ñ_<%÷Å»o—>;ü¦§_üV¶åí¥zSRòÇÒ¤~óE›Ç­¯ûtúOÇZ‘eã­|üŸ¾%DFí%›I¶Íw¿¾(Aã(¤³»U±ÖíÎ%µa·wû£Ö°«—Ö¥}]κóTÒi¾ê×ô=OßšYòjA/8ÈúW̰þÖh0%йÿfZÕ²ý«tÉ[÷º,éþëÖ¯&ÆÇþ]þD,ßþßàÏ¢LžHžµãžý¢ü=¬^Cm,W6&V ²ÉÊ‚{õ¨'HÈ#¸¯2¾®Ú¬Z;èâibt¤‹€ç¥1‰‘_ƒÅ#6A®F΋•5MfÓFµ7W× mÿ÷öÌŒ-Åä»ë•q_¯å:½…¨'ÈŽ(RxÝœfº- á©iv3K ËÜÍÈäI€Išüî¾q›bóZù~Y%EG™Îú¹+écåªã±µ±u0øHÇÜÞ÷5‡Å¿ ?Ó%ÿ¿U(ø¯á²ãõÀ÷ŒÕuø ž–×?÷úÿ CCéö{¡ïçWj|OרÿäÆêYºÞ0üKQüPðÜ™?Ú}PÓÿáeøpôÔWþøª?ð¤t%ÿ–7_÷öƒðSCí Ïýü®¨KˆÇ _'"Ô³oå‡ÞËÿð±¼9ÿA4ðIÿ õcüTÕð[EÿžW#þÚT2üÑÈ8ûR}·ö™Ú_?½ÿ˜œóeö!÷³zÃÆš&¥8†ÛR†IÝ^„þu·æñ‚N}+Ë5ÿƒ°ÚYË&—q8¿_c˜ðøô#¿¥Oà?ˆMu'ö>°|­F?ݤÁ|v>õT3ô«,>a/…­Ÿ—©tqõ©ÕT1±QofžËÔô›‹È­¢ieu†%»žd¿‹4¤ûÚ•¸úµq?^öì/÷Ó¢%.<#ÃÜW”ß]«á ò\ŠçÌsŠ˜*¾Î0ºóêqæÄðu>óèøKt†9¯âô¿ð”idñ©ZßÁ_*Þ]àògà â¼ÅUVô—ÞÿÈð_T‹Ö’ûßù`E­Ù\6د`‘eWñŸUžÓÂñÛÁ#Dn§ÈÊpvà’+Àlu3ŠC0ÿtkÑu½jmoáæ‰$ò¥Žñá.ÝXÈÏçYb³ÙãðŠ\¼’åviù¤û[sî¸[8Žcާ ÂÍkßb׃¾·‰4;mEµAoç–Ä qƒë]|B?ä,ÇþØ×]ðw#ÂÚ>=ùפ(ȵåZž¢T·5ô5Úè¿|/$rî’ÝÁ,:Ílþ£ÐŠù§ÇZ&§àléz·Îd³½_õw+Ø{0«ÅÍðîÿ]¢ù¡-t×úGÙä5éÍ}Rªåœt·ø&eÖ¨wZ«h•`:ƒíXw·ÌŒ{{TÚŽâ¸ò޲hû冲Øö_…7âöô/@ƒú×Óþi¶?õËú×ÉÿæÝ©_ Ä¿Î¾±ðKfÂÄÓ/ë[p¥xTÏñÖê ó‰ùwG–_5ùp&œÔ‹÷:¿mGçB¨»G¥&qJ­Ú=(À¥Í¦`SdˆH¥OOZ}n«¤Åwlö×IæBýûŠóKÝ>÷Á¢ÉgÉ'f†½’HÄ‹µ¹ªipÜ@ö÷ù°?Jø^%á¨gPzöxšzÂktû;nŸá÷ßÒÂcòÉ^tbiZÌÝ©’<F{ˆ®7Å:™yf [ºH¬í/µK©i—¾ ÔDÐ90ÿƒ¡†º#X‡XµÞªE…öøNÙŸMvßwaË@OVQýÚýk‡ø‚ž&+/Ì]ÓÑ7ù?Ñüظwˆic)¬³4wOHÉþOô#Ó¾|Jð÷ÆÏ K=²!bžV¡¥Ï‚Ñäu÷SØ×Ï?~MàIŸUÒƒ\èR±ã5±?ÂÞÞ†¼‹Â¾&Õþø† w@œÚ^Âß½ˆœ¤«ÝY{ŠûkágÅ-ã_†%d†$¾Dòõ *L6Üõ#=Tþ•éÎŽ+…ñ?XÃûÔeºÿ?Ñü™éÊŽ3„1~Þ‡½B[¯/óìþOÏâ„<ý*B>Föšö?Â6±¡ÄòèÌyksýExËFç<þú¶C1 «Ðw_Šògí9fe‡Í0놕×^éög±þÃxŽ<õ²Ýù5}Çg÷Ò¾ý…wKñ^ŸÙìIÿWݶÈBþüñÅ¿ò4šò_‘ü¹ÅÖþÓ»/ÈÏÕ%ÙgtÂ!súWƺ<æK¸swÿµ+ìÍåhú‹ôÛo!ÿÇkãMMÒÛ‘üWÿÇ« øu_§ê~ÄZÊ—õØû¯Â‘¤÷Ì$@ê-€}k°Kv9ò#ÿ¾kðSfù¿ëÝ+¸€¯›w>Ú 6ÙºÀ‡ð¦¶•nGú•ü\ÝÎ)Õ•ÙV3Žj?åˆFÚ-©ÉØGÐÖ¦3HTu§ÌDZ&‰RTº·¨5ã?þÝ}±5Ýý_µ>b²|¢åGþÍ^öV³µ-9/âØÃ >ëc¥táñ¡58ÿÜõððÄC’ðWš>Mñ•Š|nðØÔììþ3Ò#+u`~S:/\^:WÏsjeÒ@É"’¬†ÈìG¨¯¬¾(xQеøJ|5ºÛ[µ>dñÅÒáGSŽç«Èþ$øFÏâ_‡îcXûüì‘ÉsK•’¾ÅZJçÏ8r»3ÐtL˜³¸ç¯½<tÓø_H‘ÎâÖÉÏá_úT¤Dþë_ ÿ[>Ñ­ª!_ÄQ\õ’>—#_¼Ÿ¢üÙÖ£f•Êi±œÐÜæ¿?gØ3ľ86|Qn¸ÿ—AüÍ{GƒWþ%zYÿ§$þUâ?ä?ð™Ãd¿Î½ÇÁ§>–=lÓùW晼Iš?ú÷ù+—ë™â~GHƒ–ÞŠý1Z”›GÒ–‚3Lb‘‡êB3@.íVé#kºÞ•åþl‡½±Q­Í…ãο×Þ½tŽÕFúÍ.ЯG_ºk‡„¥Œ¤éUWOðó^g&' OMÓª®ŸõsÆ< ãµ×è:Ò{´Ä<Ñ0èU¿Ú¸oˆ ›ÁsµÍ¸yt)[ïc-jÙû§Õ}ûWñ3á些¶¥§'WƒæhÓ?óëU<ãˆ|[hú&¶‹öò¦2& pU³Ñ‡ë_:roû;0~÷ØŸóy??Ïóù ÔœÿØqÞûïäüû÷õßÃus»øO ƒÆ+yJ±æ½Çþ›Áâq¡ÌÄG.2ÖÍýÆÿgÐ× {jÊÙê:‚;×Ãcpupµ*#óün®£„ÐËK‚[¯zôXæ'áÆ—ÏMNOý¼Ò*ø5èÈ?á\éc?óý°†”+…þhûÞ¿öµ4û?ÈúàãÅ-£ÿºçõ¯JN¦¼ÏàÞ?áцzFÿν- zý£*ÿq¢ÿ»É¥c?Þ*‰þd”RšZõŽ  ÑE)9¦•Í-!4Š>¼t®wÄZ¾§g-­ÔBk9Fá÷õÒãWR¬7)ЉÂ5"á5tË„œ$¥Ñò¾¿c¬|!ñÝ[=ŒÍ…-“/÷ѽë´Ôm4Œ>– “δ“&´—ûÃÐÖ½#Å~µÕtÉì¯"ûE”ÀðĢÔzù·ZÓõ¯ƒ)V¤ÜéóªÇý]Êqýv5ùµjuxf«’Nx9½Vî›}Wx¶õÿ=þë Z9ÄUŸ.&;=¹­ú¯ëM¼sÇ~Õ>ëçFÕǘ$ÏØµ\%äcôë\–NzWÙZžá¿ž’ “α˜`ã‰ì¦ ƒß¸¯•<]à½Wá÷ˆÎ‰­1Ÿ-e¨ ÄW±úç´€uñ^&q–¬4~·„÷©=tÖ×꼿#ô ›9úÚxlJå­ÓëçëßïØï¾}[Qþy/ó¯®<ßèö‹éõ¯“¾BWXÔ‡ý1Qœ{×Ö>RßÚ/ë_=Áæâ\[ÿ§qüÑñ¼[oi§—äv«÷:‘zR×ô:?4 (¢˜ ÒƒÍâ’€ŠZe)í@¦I‘J· ÒƒŠ7@dj:tsBöó –Æq^k¬i7~ÔRx¹9I?öS^¿(! ȬGOŽæ·¸ŒMlã5ñKÃT³ÊQ©N^ÏOXT[Åö}×åÓÏÑÂbÞVzÅîŽkA×!Ö²ƒëþ²"Qí_'~Ïd޾<ÀPç(ãï ú#WÑ®ü%ªCq±¶fýÜ£°þëWÍŸ³eɺøßñCÖ•ˆïu¯WsŒf7 ˜åÙ¥>LMÇ›´“•”—¯ÝÕv_c„àmZNð”ËÞØûŠ%ýÕþUjªAþ®?÷EYVï_F~|õd™¥¦Rï÷ C¨¦ï÷£qõ Í-0óG>´úLsÖ“u¨HȤ+ÖÔ¹´^{T¸‰£‘w©+[²9†EA Ú ƒ!þ]&sPÍ OG”Õ'b”¬|/ûR~Ê­£=Ï‹|!jòX9ßyaË@{²JùSFÕõ_kÐkš ËYꜧÆyw½~ÂÔ½©%îôèÇÍ}éê=«õîâXU‚Ës7x½#'ù?Ñýçí\/űÖS›»Åé?Éßð&t?þ/èÿ46ÚÂ![í1ÆsêÊU>ª—‹¿e/øÒ9|—¼Ñ¤˜ä›)Ð}¯Œl/5? ëvúÖ‹pöZ¥³‡VC·v Žõ÷?ÀŸŽšgÅí$#±ñºbîÁŽ·¨=Çjœë+Æä2xŒ ä©Ë³ÛÉ÷^oçÜçϲŒÊU°U$©K³s¶ë×þWàÀ à­Úés\_ß^³ÞÝcqQÈU€=k×aŒ(ðÃþòÇ×ÎOæ+êòEûšÓò?8Ïõ©M[Ÿzx¿ÓÛþ½’»ØŽq^wà'-{&O"Ý+Ð"aô¯Š©¹ö±Ø°4íÕž8¥É¬MQÒ™»µ³Þ€Z£~´¤L,;ÐF³£®§ÇÉ*òß>õóü!©øÄMâÿ C²xyÔtð>IÓ¹ÛЃ_PÉŽMax‹G]NP/Ú‡0î»°¸™aåuªz5ݘŒø§à?XÒ[ÇÞ ‹þ%·üL´Èù}:c×îò¸e”vCž„{ú£Äº ïÂÏÜxƒF¶óô›œÇªé.¹FC׎ýù¯/ø•ð¾×JH<[ám×>¿;ÊŽMŒ‡¬oèé_{‚Ǥ’½âöoð¿5Óºó>O†r½Õ¤·í꼿&qbb2;_ _¹ð^ƒÿ^‰ü…|§Z¯X$™ä×Þ¿`h|¡£‚mPŒ‚¼ÜþjP‡©Ñ“Eª³^GWݤsŒý)Tô¤eN+á$}[Øð_ŽGŽ$ÿ¯$þuîþ 9Òtïúôù ðoÿÔ£þœãþf½ãÁÿ‹Ó‰ü…~eÃÿòPæž°ü—Ë¿äeŠþº8âž3Q†ìû×éÈúÀ<ÑF)ÀZi4™'Ú‚q@zTmÔÓɦœP~£`·‘õÛ"ýƾµâÿ~ɨÌú†™‘«E󏿕Àq8¥"£ ž¹§œSÔSsJ -2UVB­÷äS‰¦“@×ÚjJ>Ï: mdã ØWß³t"Ûã¿Äx“îFÒªmõ÷ÃJ‚2øWÁ?³Ëøÿñ,tÄ“èuôYUUÇU·½É~¶æ½¾óì2y¿ìì|o§$ô¤}ÇÊ©î/ò©òN8ÍVˆþé9ÁÚ¼Ó¥,ÑJ3ÉB£Ó¥xO‘¶¤ædýjø¦ý¦#ŒË?ß¼ÖÏÂ&Ó‰uk2rHÌÞ¾¼ÖämœHÛíp;‡ÎZô'†§ §‘èÏ J;Nÿ#¯1vó¢õ*Ü ûNÏþ~ ÿ¾ëÑ-b±»Uº†HÏßaÑ~µÿŸúÛ`z Æ4bÛWqœpñmêþã¨mbÍN>×ú5>-FÚusé UË< å νu8«šUæœÐÝkÅ™U3) £×Þœ¨E+«ýÖ)]_îÿ€lÿnØ ÇÚTûšCâ ÿ/ÿÀ s)«hJ8Ô‡ýs§ÿlhgþ^æ?D­>¬»?»þ§Õc†_wü©¶Õm®ßd.Y±žTŽ)§Y¶é™8ã„5“¢êZt÷[me™¤Ú~úàbœšžŸæ8hb ÎzÉÑIµfbè%&¹YªÚÕ²žDŸ÷Í%®µmup° 9Éù—ŠÍ“Q°ãrNG¦1RéWštÚ”k3$Ø<¿J~Ér¶âÆè¥ùY¹$ «Ï.€uñ_Y^ê^Ö Ö´k‰,5k6Þ¥ àòò¯Ø0[Ý5«áÆÀÊHÎTö5ùûAÙÃañsÄPÁA¸bȯÛx;7«˜ÆY^-s¥¦÷¶Ö}üß8#:«šÂy6=sÅFño{h¬ûï¡õGÀ?ŽúÆ- 1Ûk¯Z¨ûmŸ@{y‰êJö(gܹãð¯Î?ØëR–Ûãµ”HÄ$ÑM(<0Æpkô6ÎRÑí_ÄY},¿*t~®¼¯Óü¼Ìx‡/¥€ÇJ•…꼯}?Èâ>)LÀ!#þ|Þ¾D𼿾ÓûŸ5?˜¯«þ.L#øsâ&'èÌ?ZùÂï‹­8gþ['ó×’ÿ»TõýÅóÍjÓþºŸ|ü>›7“ׯC‰ðyçÿM¸ç¤(?JôT—¡éõ¯ŠžçÙÇb蛾n@ÉÁ÷¬mwW“HÒn¯"µ’òHSzÛÄ>i ®þ2ß*+7‚µ@HÉzVÔpµk.h+üÒüÙLjÇað’Q­+7äßä™ê­(^ã4žp=ëÉíþ6I-Ô0¿„uh|Ç ¼©Âäã'Ú|sÓô n÷M}.êáídòÞXœO^3]+-ÄÊ\ªü¿ÌãyÎCÔ²½¶k_¸õc0ÏZC0=ëÆ¿á¢´lt@fSOOÚAnºv¤§è _öV1Ë·ø™+<ËžÕ—ãþG¯´›‡Z†W>õåÑ|~ðô„¢jkÿl³Vã—‡|Ñêk“Æ-I¬e€ÄÃâ¦Íã›`gµe÷7ŠtÕ-ä‘Zm»YâEô5à¢)>ësʶÆ÷Áú‘òï´ùDyëǨ=ë×4‹þñ>»o£X›ô¿¸ cK›b€×“V¼[ᨵH'B³,‹‰à#ýbúÕR©<,¹*GGºý}WC¢q†**t¤®¶kúاῆž{{mGLÑ­&‚QæFÿ{åŸjô8"UUUTpí_>xG^¹øE®%•Ñk ßI”=~Îäã¯lWÐvò¬‘¤‘°’7•ÁᇭeŠŒ“Ošñ{?ë©xyFI®[In¿®…‘ß4Ù¾”âÙæ˜íÁõÅy²:å±ó÷Æ·?ðžÌ3ÿ.±Ö½çÁ>ÌÖ‰ÿ Šùÿãd€|A¹–ñW½ø)ÿÐíÀíkò¯Í8}ÆAš?ïGògËeßò0Ä¿?Õ^x¤ Ôv¦—ùGO¥pZ׊uhõýBÒÚù`ŠÜ¨ cò+ôZµ£B<Ò>޽xÐ4Žÿ̓*žõæ âçþB‘ÿß‘Uׯ>!{÷µþÔˆ2 rL#ü+Ïy¥?ëæpiRìÿó=TKŠ ÃÖ¼áuÏIŒj¶ø÷€R¶¿â(îªÛêXªY•Ñÿ_2ÿ´)ïgø™è7ùÍ#LyýkÎeñ‰8Ômý°wãYÝ[Â×vlÓd)òG¤ó<:Þ伯”wOîÿ‚z§ž¾£ó¨Þ@{Žz×—ø—½Í‘ÿ¶5kMñ¶¹&¯¦ÛÝÉhð\Î!"8ðÃ>õPÌhÔj*ú„s*2’ŸÝÿìµ55²§eÂ}Éý+Ãþ øO´¾©¦©·ÔmÎùcÇûËï^ú[èk]ÑÆ¤›£!.|§Ôzׄ§Œ¤éÔ^ª}ÑÑŠÂÓÅÓp¨¿ày£Ï¾xù÷ã‘_b+G+Äá1?ctÿ™]këÜõ8jµHæ4ð؉^Ϻ³××¹í¿Ø h|ÿ˱5éÛð8Çã^Sð>@ÞÐùÿ—C^¤§p¯¸Ë?ܨ†?úJ:1ßï5?Äÿ2 ýzÇJd[Ë•·gUaÖªÂk¢ÿÐF?ûäÿ…gjâ9ðùl Z.x+V ¾=ð„|<ðï­mRмKÚ4Øà¹ÆÌbu¬1§Á8¿ëÔÊxUIsNœ’óÿ†5¬õ-vÄÜZÊ—v­‘¸tlu®'Æ~´¿±žÒò?Nœs‘óF}G½i|2Çü"òQw0Óç5ÔÈ‚UepX`‚:Š©Abh¥5º9äÞ»TßÂôù6øÀ÷Þ ñf§o!il%ˆ<ƒò·=Ç÷±_@xLb bü²þµËx‡NuâD¿êÙK/=¥uÞ´¶?ôÏú×ã\7‚§—ñža‡¥ðªpkÊövôì{Ž.xÌ<*Ôßo[&®t`‘FO­&x¤-…' 3ÏjýÎö>d†òú+ s=Ä‚8ÔrO_ Ís·:½ýò“üKíÝ$fW÷ö\ÿlÝýµùµ¶ÚÆzY­A}yÁæ¾b¾6UnÓ´zyùú>‹æßCÙ£‡Pvjòü¼½J7±FÙ2Mq9õiª‘HmÏú=Åͳ²äƒP]ÝÇž*ªÍ¿<šñþ³i]ä)>]N®ÃÅ÷x[ð.`=ncd÷eî+«¶¹Žxc’7G& ¸èEyrÝ4g–zô­ ëãJÔ#¶wÿ‰}ÛmóäËÛð5ìá3?ySªôg›ŠÀ)EÔ¦µ];ÿÁ=I‘N 1Ö«©u#${Špcè?1_J|õ‰ò1Mb*-äqÇýô)Oqø0¦!Û²ë_ü`Ÿ´ÄÏúë/þ‡_y‡&T¯~1ö„ø˜§ƒæËÇü ×Õå/ý‡þÿéGÕåîïðÇÿJGÜêä¢gŸ‘•:l42ïFÊw$T1·îÓýÅþT²Iû¹yÁòÛ\WÍ­Ï™[èy‡Ãín9Ëa ‚ìFéAÈÏÐÃá;ôPÛÀÙ?μÖ×Fñ\LòXê§÷¬T–lž eëªê “ÆêëG‚ÖÔ]j2Fä\H¬p¨§ª©îz×ßN…ZÒ·µÉöÏþýT*Övö±ù-¿òcÓµè^ ³Ô,uMbÒ;É€Ûik™äüUƸ‰þ!µÇ‡¯®À~ãl þ5‰ >„¦›e¨þø™¾¬y&²õ vl½ˆÿz»0øE·«o¾Ÿ‚ÿ6zxl¾œ[ms7ßOÁ›: üg⢀Á£ic?òñt\ÈRÚøÿƶi:Ã>œ»NbcŠóûŸL„äãY“øŽMß(p{×±¶3Vp_Ÿæ{qË#5goFÿ6z<*ñ˜ÆëÝOûbÀÕØ|aã(¤,lt;ØÀãË™ã$×™[j÷M‚°}9­Ý;T›<äväQSëÉ»þ \c¼"þ_äÑê¾ø©}£\‰µ ê¦Ü4štË8ç¾:×eáŸøkÄ÷;-p%É$ý’í 3`­×ð¯*Ðõ)©Ve>£¥u3xwLñ„>V§m2 ý­I-ÿÛ1·kæ1xZriÇÍkø?óGÊc0xtÜšpóZþ¿æRÁñ¾üÜŠ³¥G`ºŒMÿ7;Sšó„¥×Ž<·o{鶺žÃíÌBý©b`OrG~õèzF‡5ž¥ í=»ÎU-Óµ|æ"—Õå:SžªëúÐù¬]«Jtg?z7Vþ‘Õ”ÚZCÐ׆|é‰|vkQú_¨¯ÍÚaü`×Os1þUúS«¶ÝnßÞÝ¿˜¯Í¯Ú‹åø¿¬c¼™¯ÒøLÑÿþ‡êÞ¾\ßþÜš8Ù>çÉý tL¾ò¯þ:kôrÇ>µù§û0Éå~Ð~Áÿ—™?ô_¥mûºËŒß—øVy|]þýòýYç?æòþø„çþXÿWÉþlÞé£?òÝ?˜¯©><Êágˆ0åšüz¾Sð¤Ÿñ1Ó¿ëº1\yC¶oÍÿé(ü8ëÃåù³ï_†®ZæðôÄiü«Ñ#;óþEyŸÃs-ùôTþUè±ÊIP=@ZøÉ­O°‹ÐóOAãIõ®ËIñ2ù{†AÈ Žkä«ÿŠú†§ra¶ÿAµfÀ ÷Èõcë^à?ˆí„¹1Ÿ˜±ÏÞÍyY¤ð¥á+'É5fÎÌ_ËÜkÁ®hëcè}TûwÆ n ”´˜ãÕíèû”zb¾jø{|'øÑág çFÖ²8ç#ôm¼Ÿ úWÅÿgÃ+£KN\ʲ}ï)?Ôûü!âàëÊ6r{véú}ñ—O‚ÛÃZ‹¢ Iý§¢¶zŠôo6|!£g’mSŸÀWüm“¸±ç^‡àž|%¢ת*Òîë×ôFñÿxoû«ógBÉO­8 E7Ü5ÀΖ|çñªc'Ä‹Õ=E{ÿÛu¤C< xÇé_:|e—oÄíLzGþUô€$ÝmÏðÃý+ó~_ð·™Ëûñü™òÙoûö'×õgfqÞ¼£Ä6úß‹õ¦°´kÍ’ r­·o½Sw£¡õ¯7¸ñ®‹âßý¦FBó¦0¤ðÚ¾ß8(Ëkž¶:*pJ[_ô0Þ‚ðûàwók=cÕ¤ñÑ*EºXT´ù Ø×fßô#‘ö¹¨ò›Í¿Œ4Õñ¥íôw$Û½¼h¬Põô¯œ­…¤­Ë#Á©‡£Z_‘rí¸ÕâI)÷Þ*­äº“êðEý›*Oå9Hw ‘žMn'Ä- `zC×6¬KÆz\ž-²»†ð5¼v’!;OR}+a¡­/ËüŠ*qŠ´ûvÿ"i_Xö5Áÿ×9­¶¦ú–š¥\C9gò‘›™=q]ªüDÐváõûþÎx“Æ]߈t›kõd·ó †sJXXZüÿ‘jù.§ù‘V­F¶…vØ÷sL–ðø“@[­:âÁMêŸ2SÃqÐVÕ·Ä=hêŠþëTW&ÒõÍ{ÃQØÞ­Ó&¢ªƒÀÇ^k¶Ž”eu]‹§‡¥YFwÕvîL ?­E/9?wn¼Ô2œœWÖŸb0øÇ…Ó®[3Z±$µáÜ¡>é<ÿÌRQÿÅ{‡Æ©1§\ÿ>m^â9Høa¢ó÷µI¿ôX¯Íø¡^5ëÛüѶQÿ%ü/õ>“ø0ohcþœÉ¯[ òýkÅ¿gù<ÍBÿ¯^ʧ·µ}Æ]¦’þì$uc?Þj‰þlæõ¹vø÷Hÿ¯Y?¥[»Ólo¥Yn,àžM¸ß"dâ±¼Q0ÇÚAÏüºHQZ¢ëäÐsíYN¢S”YÔ ù)Ê=¿VV½Óôû‹„Ó •¢Œ¸cb;WŽÖuø”õÁJô3tÀäÇ9¡¯$ ü͚᪔þo’gu ªý¤y¿íæ¿#Ï[ƀ̌ß÷Å3þLŸù¿ñÃ^‡ö© åÜg‘Íhÿ}I®oc7´ÿòX_Z¥ÿ>¿òyyÿ  ïàcø!§Øø¾;ÍNÖÑüÐ$ÎÌc;SÜ×çÊŒÿßT¾|„œã9<õ­#FIÞR¿ýº‰–.›M*vâ‘ZM Jv!´ëWõòÅ[Ó­mtÀRÒÞ;hËn)àgÖ ÞA¨¨žçg|×g4`›JÇšù¦­&Ù[á[“áYëîoý»$×ðŠMþ”õÿL›ÿB®×5éaÝèÃÐàÆ+b'êÎKÆMþj?é™®“Ã'ýßþ¹ÿZæ|dßéö£þ™èü0Ñ-o/ú×åV¼u˜ÿת”Nº«ýŠŸ«ýNýßZÅñeãÚhsùm‡”ˆ”ýN+`žõÍxê_/Lµr2‹t…½«õ,|œpµìpᢥZ)÷*JémŸ*Æ¡@ô¬Kû¬gšu桇`[$篵 “Í|>*·+²>£‡mê>æän?5S:´0­2£Ž š¥-æãÖ¨Zj°Ãy4RÅÙgqœ ùŠøßd¹·:±•%ƒ¤¦£}lY×u%’Ú’­(RTâ³’î2Fà~VÈùÏQTµ{”hQ¢Ç–×?.:VyºÇL×Ìcñ•Dã&´îz˜xûZQ›VºLí!ñÍŒÜJí¡­+}`œšOûøkÏb¿*zÕØ5":¶+‹ûO¿åä¾öDðPèF]V6_¿&롦¶¤§£?<}ó\Dz™þöjÜZ‘8æ»(f˜¦õ¨þöpË£ÐõÿÝ5Æ‹lÅËŸ5—$硯‰¾ËåþÒ:_ýWØß æ/áËV닇­|_ðÎbŸ´÷ÄåÈæy˜¯êΛ–[]÷§ÍvrÑÇGû¿ûz>눟*#ž¨¿Êžï!ÇÝF#êZÝ‘ ÏZ*‘˜¶ñ’Ö`°®%¹ò«sæåø‘âÛ››Ÿ3Y¾!duÚ°à¸Ý]ïõˆº®­ý«ug¬ZéðùWL>VBßrD?yMvmñãÄ7(±iQ¬r¼`yàãŸzóýwÇ«üN¿mNâÞ+Ëí.1 Q±«r¹õ¯Öðøz›n„a§K>ßÝ_3öL&¬'­ÃN–}·÷W̺|a}Ë©hÞp*L©÷1ž•V_h³žêkCœº·*J æUÜrð?úôĺ¸\©‘ÛÞçùצ¨Á+ÇOëæ{±¡²·£ÿ‡'ŸPѤåu{=ßoóªu£ç[Oÿ¿àÖ~¬ƒç‚ÈÉÌJs\n£ Œí¶·_ûb?½¹×Äzt0ÜûI£Ò Ö´[/™µ«½À“?ʵm¥0>»G&·Îƒªë¦%ñª²ÙöF–¦+vö‘º½s^–Ft$³tëÉ®ÃRÕ-4 t¹Ôî’ÎÜs#û"õ$×É×|µiG_›+Þß+ˆ^΢ÙüÛù^öùXÖøE¡Ètb++0mâÖnãD‡„Aòðjôßè—¶z½¼ÒÚ²F™‰é^Aðo]Ô/<;ªÜÆ·zw›¬]3[cæLíàûÿz—‡µ FMbÙf¸º’b8ùOÖ¾g2…eVªmuïsäóXVUª¦×^÷=NhcMŒãÞ–¾)ŸÎk_lk6§·’ãõùÃûS¿5~sóúWèωŸËÕ,}ã*üäý«Fß‹ú™þöÓúWèÜíš/ð³ôþvÍãþcû7IåþОÿ¯¶ÿÐM~–Ù¡†¿2¿g©B~о>—­ü~™Y}ÖÿxÑÆï©ù~¬áâß÷ï—êÏ)ý %Ûð¯[$B  §5òzŸU.Öo>* nÿìzN‰.›ç²¼¡<Ʊl÷¬ùnþ*½¡è’¢W#¯Ãà Óu;KÑñBþu·•e0ÊÌV@?„×#âß øKÄ~ Ôµ8þ"ØÂ—— 8‰í·lÝÚº©Ó¥)8Õ‹Qk¤fºüÎfêòEÅÞIõœKn¬|ÒúFهʧ™ã>´è¬2ͲûÁ æ½ÎO†—§Ä/íZÔ#á^†‡÷´aõ¶«ú–]{ûßù?ùíñ}ÿÀ£þgЦž»ãoºêx`y?Zé4$žˆK¥ð6‘×é^šŸ 4† ÂÅЛëoÿ׫Ð|*Òp¸ñþƒò¶åÌ]ç^~+†pWœ£.—M¯ÈÚœ^Îß|ÌÚýœL±üXÑ#™ä!m'd s´c=}wlß úWΟ<›ñ"ËR_éÔÐZÈ‹cb˜†êßJú*Üa?»_9Z3„aŽòQ×~ïºGÓ`¹ý•ênÎ㌘ðÜÿõÄŸÖ½/Á'o„tPzý‘?¯*øêøðü£=aÿÙ«Õ|òx_G_úuOä(—û²õ’7_Ç~‹óf÷E¨å<{Sóš†bp~•ÀΗ±óÆ©sñOVÿrü«è/‡RfÞlž‘F?A_;|j¯Å=[ýد >Iº ƒþÄcô¯Î²lß2ß_“>_-ÿ}Äúþ¬ï•úzà´ë¤‹Å>',E~Ö y›r>_zí–B{s^[—¦ë+ñ8¾‡ÌhïP†#økí±Nѯè{8¦Ò»þ‡læÕ¹Å®|¥r>t0|BÔ¾H^?³Fvÿ…Lÿ¼>PŸ±¿#®ö®n è§Æú„7Ù¢‚2‹æ‚}ëͩͦŸ×Üy•\ôш¢ÕЖ§ê¥rš«ÃÄ =„plû™ nwqíšeÿÃÍÞÂiã¶udVó[Џ~ é­"Jo%fФœsZªU*-þ¾F¾Æ¥Uî¥÷ÿÀ7vr¦|«LžÇer¾(Š|Yá¢ÛìÄ¥‚Áþ¿Kwð‹C´eûN«ä3r«#žj¾è—·*`Ö„ÞErzÓ ’÷RWõÿ€m<%iFê?ü¦†ÚÊdVû5™úªVnµm ¾½ás0F[PÁ0ªƒ÷{⪓ÓIíÎO³»§|(¶Ò¯ìïmï¤Òy±ç澆·š{«ïÿ€WÕêhœWN¿ðÔ?§JŽVÉôªÖ“L.®­ç‘eò¶á‚㨩eaÎç^™ë#ɾ6˲Â|ÿÏ£W€x¢l|.ÐÈëý«7þ‹îŸ¤Å•À'þ\Ïó¯Ÿü_>ß…¾Çñj“ŸüqkóÎ$WUëÛüѾN¯Äð¿ÔúKöwŸv…¡ŒÿÌ?5íjùkÁÿg ·hÚ'Cÿê÷%”ýkí0a©¯(þH鯼ÔÿüÎÆ×häbÎOæ)nîi­Þs–+cÍÈûµ—ñçËñö3ô)?QYwÚ‚Ýi‹yIpòlÊ„ìlu>Ÿ|ö6§-y/OÐúl-:ä—GçÜOY­î¯,Íâ×Ò¨ÔH_~k'û%1ãÙsÿ]–±¼i­ø.Û_š=nÎyµƒs¤E”ŽØÅa'ˆ~–ÿu×áW*|Ïþõ¡ Æ +íü¨õoÙ>úYÄ­— ;Úâ¶aÓ!ñŒÚêIü”² …~lûWà WÂwšœëáûi »X÷HÒFTô滽çgŽ¥ê3§ŒÇzõ°kßIìx2N]}-ùÿð¯t“À’üO<Óá^é]—ùéþ¼ÔWÞ!›R¼:v”äHœÏu»åÚ¢>*»†#e$,uO¸Ÿ”ïW°êRMÝißϱòŽ»Or+è1jöm.¡$ÓIÉÚ=ëGae&¥n²<‘Ãxñ¡‘²@í]V“ Ø7™+nå`e“<ýpט½Õºs|Õçã%ËK™«6z¹zJžùÓü›>“þ¿føõwBCŠó¯‚’îðd§¯útßúzp@®ü;ýÄ}Ç+bj/6rÞ3“þ&¾¾QþuÑøQËYÛ×3üë•ñ“cR´ÿ®FºO¶m­yãË?ο+ÊôãœÃþ½Sü¢oWýʯõ:³ÊšÇñNœÚ®ƒyn¿ë nýáÈ­|Ó$é_®Ô§°tå³V<¸MÂJK¡âWZ‘š$›¦ñÈ=Ct9ükæÿæÅv<7.‘q>§k I§ÌKÜă& ?¾¡î+Í®§Îto¸êr§ñ¯Ìs s¤Ý:Ÿü|דÿ€~›€tñ4ÕHÃyïóÎp+f×Mò­”4jec¹ØŒŸ¥cxr×í—&ê^a„ü ôc]?œNI'=y¯Ë±ØÎjŽ)è‹ÄÊÒäCŒñ}«Ù$F4")%VG {Šç|þp zF§nš…«Û¿ñ †=jóøžÎå£~N y^×ÚYv:ð’SM=É–ä/çSGtzæ²\bž“ã¾+N[ŽÞŠè’9«ð\à¯8®rŒ‘Í\Žë ¹=ëz1|ÇéžçðžrÞ¶$çý-Çë_øsíeñ/ïÍ7ô¯°~Í»ÂÐwÅãüz¾3𣘿k¿ƒÁ2Íü…^ð×ü‹jÿ×¥ú#ƒÓëËûÿJGßv2n²¶=t‡ô©™³žØ J£¥±:u¡õ?•Y,YöúƒÇ¶+¹òvÔùÆo‹ZI¾»Ž?i¡’WS!<±©÷®#ÄZ•ŸŒ•qÖz{ †8#ŸZí4 'Ü¿)ǰ®ÜG$btb£»ç‡­5û÷U—]‡NŒÿ …¸ßÿ}ït¿i:MÊ݈žÿPëöë÷ódÕsÂþÌxnÎXÕ^AåB:¼®3[—>4ÓcŸìºnÿê+ÂÚéã÷@ÿÓIzë_‰Z“q¦´ëd—ÞÿÍŸ ‰ug>J[u²KïæìtŸ C4¡V¥¨§§Å§ò­OG`úóŠúö¦£g9ëü¨nA¯‡±ùóG%ãÛ©é§=VAü«ó»ö³ãâÍÙþò)¯Ð¿°[­5¬ƒô¯Ï/Úߊó{†¿@à×lÒ’üÑøòæôý%ù7ð2aÇï“ÿA~ÚÉ´Ê£Œ;3_—_gÇÏÿØE+õØüòÿ¾ßú­x¿\\}?VaÅšã_ÏógþÒ²øOª{Ïÿǫ毶ïé w¸ξŽý¦_ oû¤EŸÎ¾pð)ω4‘×÷àו—»`§ÿo~GâxøóbaòýO¹~7ú O_8Ò½_,¼„97¥y¯Âcÿ»æÎ3q×ð¯DŒàýñŒâ¾V[ŸL¶<+Wñ%ïöÞ ÁoµpëöÖLùà¿øõ¬éµëž§à¶àz÷Gñ‡öãÇñŽÒ(ZwhíÌ¿êTžðéTæÒ'híÿi,þ!òüIÑOÕ–¦UcüËÿŸù¨Êÿ ÿÀ!þe¯„7ºñ®tï‡w~¾ŽÝ±©N„&ÞéŸzöÈŽÀ8ãæß ñ|zì¿Ûþ0Ó>JNAž»þ=^ã ¶4}‡SÅ<<‡W×Ðì5­vÛY“N»Š±¼N”Œ6 XðÄ'W¿ýÎÿÜ ¡÷®íÍ¡dõŽb?ïá­êóÚßêÓDÙcˆ|ã­|Þ*¤0øù§´o÷$~…‡¦ê屨÷i~g¨$ñ·>K/n•kjHûT*Gæ°âñ̓’EWm»ýÞ sv·P}‘Š6eߟ—’wjžgNI:.ëþüÏ™ÆTžÉ­ÎÆÎq6­ªAFA犞WëÃwd÷Ç#ƒÿA­IÎA5íEó+šÅó+ž;ñÞL[N?éÌÿ:ùÿÆÒy_ ü2s÷µ+ýkÜ~=ÎRÿëÏú×üA“g Ýu+Ÿýká8_Ú×·ÿ¥#·#Wâá©ôwìÑ(m#Eõ ¯|VM|ïû/Ë»MѲæ_B¡ 0&¾¿þïOÑ~H߿ڪ‰þg”|V—o4’1c ýEcBö)mVÞÐ\Ã#mžBáL+½Žõ¡ñžCmã "gŽcÙ Åp{â¹›XÀu»ÿ€Û?øWËf0“Äɤ}¶•à©õvýXÝÄýަðéþTµºg±ôÅQ‡Å.Ï€ŸiWü+TøÏNP2—ÃþÝŸü*{iQ™oÇÒÙÿ¢šwÕI4¾ÌÑðf­¯jwòǪxi4hU7,èá‹·§{R¾—AñsÎúuíݬÖ>K5¬y “ëPZ|Tðí°ÝpoÕ@ÎM£œSÅZÿ…éà©QcƒRåo•Q-Ûæ>€w¯j‡,=뫞&*>^GoF&›ã-?F´[[_jñD9æ I>¤çš|¿,·:­ætÝäŒþy¬û¿Šº$ùØ×ÿø ÿáYSüBÓð×øÿ¯gÿ ¹bÝ5ˬsC,O£_#vO‰Ö£ntM[‚:Æs:n£-Ä—sI¶ÞuÑtYF)$ñîœêFoÿgÿ θñ=Ì©·íc M³Ÿé^N+RºQå=¼4'ÌÏHøá¼/¯Û¦ÿÐÍz6íª1ÎkÍ~#¯€Ë›ÌŽÝsÿ,Í~]–û¼só¥ý´Öªÿa‡«ýNíHÅ$‡Ž)ª~ZG9_Jý€ñnW›æ\6#7#ñëȾ ü>ÒíotùdÓîîe mb9Š_RW·ÅzÌî‚2Ìv ³{µåö´u}ZK¢vŸ»·ˆ8ÏÔ×Áq~aCjI9ËHùw/Îǽ”ºÑ­ÏNM%¿Ÿ‘—QÙ@°FDp;ûÐdëÍ6I3Þ™Éüå')»Ÿ_¾¬Ie$šå¼[§ý¦#tƒçNÇ­t“g¨Ü ä>”¢å +T¥Êî5.rAê *‚Oµo§„ïµ=TÚéÑ,ÌWzár;¯ÇðÃÄÎrlž`¯²ÁåxÌm5V6âús ='Ë9YœÚ £=éL¥JóÞºôø_âCÿ0ôÿ¿‚‘þx…úÙ(õÔW¹‡áìÅKZOðÿ3‰æ¸Kë4wÿ%Ýá8o¶·ó¯Žt¼ÚþØÞ8† ´¤ß"¾Ôøk ^x{ÃÉk|‹ÇÚL›Tä`šø¯TÛ~Û>'AÀw þ)_Ò|;NPÁÖ§-¥ùXù¼ÔåŒåÙÂ_šgÝú3–Òl‰ÿž üªáb®å³€? ÊÐ$ ¢i§ÖÝ•hù›%W$7}+‰-O—ê|¿â á^Ÿ­êr\xÆì^´îÒÛªG!êµÄ¦§¡·'_^Ë}fšI|ƒ î•Ñxçö³½ñ¯¨i‘=ÍÃÊm˜ñ“Øûן·ÃK¿_­þ•â>k¨ÁO-› *ª~¿¥~ÓBxYR\¸™NVZIh´òŠ?sÂO:1qÅJr²ÒI¤žŸÝ_™cTµ²Ô.ØÜÛE3ÿÏE[?ï а´E¶ BúÙ‡c'˜?ZçÅVfäÅlú|Ë÷Š~ú#îv®‹L¹±¾]ö·öÓgûŽ+Ѩß.dz6ùõÿ«ªMA+¬+ûËn3ø×¨]j+»ÌÔ-ý»×¢_éâTÈe9àƒ\Ž­¢ïŒÖØZ‹gúZz?É‘ËÚß\™ðoãSþÌÔèéurU_[¼Uÿ¦*}kÛI"çÒºýÁ!Ú]Ò1êÌz‰¤´;q2¦–Ÿ¡ÕxwÂZ=ܪ÷±\jmÛí³—SõZõ[o³iÖbH"µ· ƒ(ʼ¾ÇÅZ·íZ´¸8[{“èu­uø‹>µ9µðý”V²'Êuhùjžâ3É5ò¨b+Jîü«¾ßצ§Çb©W¯$ÝùW}ãúju~ñ†´Ïx¶Û^7+)¿ŽHü…'ƒzôŸk~ ¸ÕlþÇöï´™@‹ÌRwlדøkáf›óÍqãXn.'Í<ÏÖYR}½jôo ø;EÓu+OÁq2J!^®}+ÀǬ$¯(ÔíÑ;h­Ûcçsàšn5'Íkh¤–‰-¹vv=­iźâ£\ƒÍ+·WçGå¬â¾"1Œi­ë#üt×çÏímÏÄ‘/÷ Jûûâ\…mlÒàüt×çÿílÙñå»g­ºŸç_qÂRåÌéüÿ&}÷K—6¤ÿÅù3Ã>1Ožã?ñ2Ž¿Q-›//ûíÿ¡ü¶ø_&Ï^=3¨EüëõßïËþû3]\Yþô½æÅÅoý¹üÿ6xÇí2ÿñj/¿ëê/ç_8øîñV”?é¦kèoÚrB¿ ï=îaþuó·ÃÒ[źhì“^&VÁÔùþG㸸ßOåùŸp|$“:%Áõ¸5è±3dsŽJò߄ӑ¡°ÈÁ«Ó­¥ÜƒOJù¹=Oyl|µy{ð›ûRü·‚<@ó›™<É}®ûŽæÄÕg¹øPO> ñæõõ§ÙbcŸ*<žOÈ) ”Mÿ,bÏû‚½…˜«}¯ü ždðNr½ãÿ€Ÿ#›¯…ãÁ> üÞ?†?ò$ø€~/_[ÿgÇÿ<£ÿ¿bìø¿çŒGþ)¼É{ÿägõýßüþ òZÉð Ÿù<@>¥ë ðo†~xË]·Òm|-¬ÚÍ:’²Ü»„õ5ô¯Ø!ãÅÿ| •-cB¥cE>ª ‰f-§nkÿ‰— šråkü(òØ¿g?1¥Ì§žÕb?ÙÛÁþa³Û÷í^ ‘ÓŠw¸^3üïï;‡ò/¹WƒþøkÀz¤º–e%µä‘y ï)pS®0{×Z~Uæ¥wªO>Õ>µÍ:’©.i»³¦0ŒU¢øù&è­£îxÇ?ïW½éf™fh~•ó¿Æû ú†ž§¼ñüz¾Š±ùm­×Ò5þU½OàCÕþ†0þ4Ÿ’/öªòœ ˜ž*´­Ú¸YÐö>GøÍp­ñkU ÚXúàW¿ü$—u•ÿO¾¿Ê¾qøÇ7ü]ýhùùŒ~•ïß®â_|sÿ-ò¯„ÈWû~9ÿüϕʿޱ/ûß«=I)<óÚ¾}ÕuUÓ<]â1*NKÒÊV& ŒkÞá6qO0£ùi“ê æ¾Â½oÏ¡­GÛ$¯c¢ñ–›ýʜuòŠ¥§ø²Ê×ÅúÆ¢ÒM½Äq¢0…¾l¥}m!=a?î cYC‘ûˆ¿ï\+.Ié#‰à[û_ä—ßtMNÀØÃq9¹™ÑZé5ÌjÚ˜·ñv´²'Û$å”ÿz½ÓWÐ-µM:[R«n$Æ%‰e#Ò±î|-ä¥äÔÝ›9ËD¼žù¯¥Ëë}G›Nk«ÖËÝh(9ZÎûSªjq[é~>n‚BÄ‚1ûÊÐðæ¯hÇZ”\®BE· Fîk¿ŸÀóÎ$Õ”d(héPÿÂ$HȺ›¾P¤o‡Ä¶æÔ¤-ß÷b¼Œ.G<=/fê_[ÞÝÒ]ü 3‡ö„”“å±cÁ’´£PnÛ`ñüÐNø+;Eш—DܽËÎÊÌî1Œ SÝKµH¥}tbã0ŒyUý .0³z}:ð/‰’”øWàî~VÔ.ÿô¯iøÿvîíjë^ñJ\|(ðN8ÿ‰…çþ‚•ñ9⻩þý¹ùü”ÂÿSèßÙnoô þÁ•ôt'8ýkåÿÙjën£gþ¸¯¥ín8Ækë0k÷ô_‘xß÷š¿â›4UF!OÄ3Š<µþâß#ü)‹!'4òÙ®ëWdl€uXÿïþOQ¼´ÒíZâíâ·yóGè1Í[xÃã’ ršïÃÛ\ù×—×NÝ8Tú V‘Áø¯Çú‹®Cðý¦#¸Ê6o‘{–?µ‹ðgPðµ–±§´W·¶¤O$Q Ì$Þ¾kØtéÞÒÊ=­'/!åØýkKû8Ì?\·Ü¿hÖˆàüñNÛ[ ª‘Z^”Nyn})úסlË]§¡Ú?rzÇÂÝW½{¢­o+Þy<+þ¾õ©áÿ ÿ`AäGy=Ä’c’£Ð9Ir5Ìc¦Åÿ¾RàO| ɧ¡4ëUÊ…ÌÆ•€à0?*ŠNÔ÷’©Í>äÖrÐ78¯Kÿk!ßÉ?η>ÜfkuÏ>[:åÃüðOûàR—Âoøöÿ·à•ë—h~?ð ´–[{Ûià˜Á,r‡YJœ uÏÖ½_BÕnµËa+DÐÌNv®0kOUðý¶©h`t)9ÜŠ3LÒü<šTÑȳ»¬]ŠúLŸ!¯“ËÙÓ«ÍM»¾ŸóÙ†2¶3‰Z6HÖ søRýjNÕ_t’èsÝ0Úãê+óïÅÍöoÛ^Æöë~€O.íÒ¿=>+±±ý¸®0pfhØþ)_O“+ýaÓ¹~‡Ðe îºÿ§rýºü/'›áÝ1»›u´Œdc÷Cdý+–ðmÉ é¾¢¹ük¥‚L²d µálxsåo~Íþ,Ô<]¬êvñXIkutÓG¾p)õ¦ÙßĆ“ZX{yÀÿZé|]ûøU®xS[šòþþ;ˆ$·x¶#1Ãpy®fo€Þ,’IjÐí,Ys+tÍqÓÍæ«ÔYŽ©jâì÷Û^}NjYÕXâ*KëpÕGWg¿ŸN§™·ì¹âàr·0©ÿfëÖ®h²Î¿.¨£[Ô=;cn6÷e›v>_Ö»ÃðÅg®­ýüjè¾ü$×¼/â«]Fþþ+‹XÕÕ£WbNᎆµ¯œÍR“†& ÙíŸË]ÍëçÕUòâ ÝžÑ³ù;îx„Ÿ²Ÿ‹>Ñ.ËÄxw›î°vöÏ5bßöOñ #ÎkWè÷YþµéúÀß]êW—0ꑦ™Ý¤`B“‘Ioð+Å)ÉÔàÇýtjÛûn§*ÿj‚ÿ·_ù›,þ«Šÿk§ÿ€?ó0üû5_èþ{4žU¼¡ßc©;}+¼Ö~Ϩø–öúÚÞÕà•òžcŒŽ/‡~øƒKÕ¬®§¿‰ã†PìªìIÕkþÔµ]ßÛÝ$PJFÔ.Ùô¯šTž!Mâ"ýÛ^ϺÓsÁÄgg‰Sx˜¿u«¤í¾ÛüþF$ 5H•BÃf¸ÿh ½¦ü.Ö-µ;“¦Ø¦W%\gö«+ð×W vŸ]íMO†> [«iPˆ,r¤‡÷ ó\ß\rM}b:ù?ó9¾¾æšx˜ëäÿÌõÅmÎqÀ&•Û˜Nzà d®+âO€láþ*I³Hµ~2·~`×çÿígÏŒl¤ìÖÀ~µ÷¯ÅÙðü8ÅÒ#_þÖ2¯éýèOó5ö1.\Ê—«ü™ö¼'.\Ò‹ó“<áË…øíá’N?Óâþuú“hç|ßï·ó¯Êï°<0OC{þ…_©–¯ûɹþ6þußÅïkçù›ñ_ûô¾™â¿´ÿ /?ëê/ç_:ü=løºÈƒÐ7ò5ôOíIÇ»Ÿúüù×ÍßßoŠ¡$ýØØþ•àáŸû$þg丅þÓ‘öGÂËà4AØùüëÔ,/r1ÅxWÃmH®Œ½GÎÝëÓ´ÝX^Zðd{ c¿†ã sV•Ê[꣚´¡Õk=K7œt£vk+íêyÍ8_®:Ѩ=Ø84»Åe‹õ#©‚ùIëH£Wx)'\ÖaÔwÏáU®50¦€4gº §šÌ¹½àŒŠÎ¹Õx<ŠÆ»Õƒ¢šB¹ç?.~Ó®éqƒÖê%ÿÇ«ê+V"8Çû ü«ä?_yþ4Ðc'p{èûû××ü¤{]ut£êsÃø“ùÙñš­3 V µNvâ¸YÐÏŒ~1Ücã³ëö¨ÿ¯qøO~ÖðgþZå_?|i¸ÿ‹É­ŽŸéqÿ*õ†šŠ+¡»øÿ¥|>F­‹Æÿ×Ïó>[*_íŸñ™ï–·`ãžµ£ùŠá4ý`¹jÝ·ÕWÍ}º>¡3¥WÜ2M;w¸¬hïÔãšœ^)«”häiÁªj_Z_µ¯­0-ž´‡­S7‹Ò˜×këRÀº_m1œ`Õ'¼UïUn5T .Ïq´zV-ýîÐy¨.µPsóW9ªë#¡½sÈ><ßy’]óŸÜ(ëï^3ñ^ã| zÄÂóÿAJôŒú‰•îùÏîÔcñ¯/øÀ^/ƒß$$’úÿŒúÿøìÚ<Ò«þý¹yüé?î¿Ôúöd¼Ù¦è‡<gú×Ó–W[ù öt¿òt}îÆl­}/¥jÁ|ÕôØ_áAy/È×®"§øŸæwpÜdÕ¤pÝkœµÔr95¡è'…w65w nO­UiLàw ,X$´…€5_í÷¦4Ù=E,ô ¸=j©œôÏ´ C±hÉŠ‰¤æ«=Èç‘ùÕK‹ÐóŠabÌ÷ +*òô äÕk­D.~zÀÔu€ üÕ…G¡qÜç¼i~]³Ûøoz?¶-†…ø¯=ñ&¦%ñ#?òÅ« øy¨„ñ¢çûÃô¯ÉðÊÜe^]éGóG·5þÃSè(¦ÝCRùƒ‘Ö@çµYû@â¿\G‚ËlÙö¨XŠ„ÏšC(8ÃË ÓK ô¨üÑHf€¹(|v£x=ª/8RA¦ÝE&p1PùƒÔÒyÀR9| †Y)( œÕ;‹€€ŒÕíÀQŸJüõø÷v-¿m˜¤nã¶ þ&¾&kÚÔ]á/È÷²ŸâÔÿ¿#î__nðåˆÏE#õ®ÚÖpÀW’|>Ô³¡À¤Ÿ•˜~µèvW¡€çµx,ñYÓ)VÇœV}½È;jìs sSrnI婤òÖ—Ì_Z<ÁëEØs0òÇlPG¥.ñHd‹…ØSÛ4° ÈÁ¢áÌÉÑFjxÀ]d5:>y]…ÉÐ Š•Tc5\INqÖ•Årbà}j ÜsC8#Š«4¼p?˜Â1»®ÛˆÛõ¯ƒÿj×-ªicƒç_p|f¹dð”ûç¬yÿ¾…|5ûRK½´‡ôÜ+êøv\¹…çú[ÃräÌh??Ðù÷Â/ŒÞçþ_`éþø¯Õ y›?òÑ¿~SømöüZ𣠽ƒÿCú±l¿½ŸýöþuêqN¸´½3Ðâ—|kùž;ûP!¹øO|Ñ!vŠæ)Ÿ—Ö¾YðÆ«o£ëêä·“å•Ês_nj^:•¤¶óŸ:T«Æã*ÀúלMû5øZY…œ±‚IÚ®q_)CN¥J¥ìû˜Ö¡9TU!º<³Nø½o¦Æ±Au2¢ò3JÚ·øøcû·³}DUÚÃ3ød-åüe52~Í^_ùuÿÛCPÞ÷+ý£Èä¡ý¡æLãP˜Û*hë€5+ôŒWV¿³†ôFüXÔÑþξlØcý£JønÌ«b<ŽHþÒ—xÿ¥Èÿ¶bþÒ7yãTº?ð+²³×†Gü¹gþjAû?øhË€#ÜšWÃv€~ÿº8ƒûG]°ÿ¥ßýò)§ö‹»$ÄÆ÷ðÀ®ù~xix]9:xøáÁø—!ÅÃvcµ~èó×ý¡î›þ_ïN~•Ÿn$<Þ^Ÿøé‹ð[éÿ0ÈÖŸÿ oA_»¥Äà4¹°ÿÊþñÚ·tyCüm™ÁÌׇ>² ~/³ \¶é¥zèøI¢.?âUìÔ±ü-Ñ£9\?÷Å>zÊþðµnëî<¿ÃºÜÞ8ñ¿‡b·Š@`¹Ydvù° ÷¯³àñ³¸cÔñm+Á–ú;±´KWa‚Ñ.>µ¹ÜkÄŒûÕ…j‘”U’4§¶õgª¿ˆ);Æ~µŸuâM ã¥y÷ÙïvàHU.m5R¦¹«ØùããEùo‹ZÌÎ †¸ŽBG šÓÓ~(Úèå¾Í{×9;”õ®ßÆ “Æ¥ÅÙhîTmóÐa±èk“öt€.çü«ã!„ÇàëÖž1”fù®Ý–Ž…­RTb¤¤ï«4­~<4]/ üPÖŒ?´<¨8¾·?XÍskû:Bü}ÏøŠ_øghW¥Ôß•v*¹·üûÞtª™ŸüûÞuñþÒ— Òö×ñŒÔÉûMÝ>×gÿ~ëŠÿ†y‹?ñõ5;þæÖæzÓÚæ¯þ]Çï)TÌ¿’?yÙÿÃN\ãþ?m?ïÕ4þÓw]~Ûiÿ~qÿðÏvãþ^'¤?³å¹ÿ—™êÕ\Óù#÷•í3/äÞuÿðÓ—gŸ·ZÿߣQŸÚjðÌFÜÿÛå¿áŸ-GYç¥ÿ†}´ÿž÷\ùŸòGïcSÌ¿’?{:Ii‹Æÿ˜…¿ýùªSþÑ—rruF}"¬ƒû?Ù÷šÎðÁG2ÏùÕ)f=c½ÿ˜ùóöc÷²ÌÿîfÈþÒAì"¬Û¯SMœêýs«Càž߸üèo€úrƒó\}wUócºÆ?ˆÔ±ïu½œ'‹‚sþ4§à‡Ž—þZcþÛŸñ­~½‰ÿŸü ¿²ðô»þ ÷l´U’Œ :Sÿm–¤?´]‡ý$üf_ñ¯ƒ¿áIøåå§þG?ãHßür9óò9ÿ_Äω û+ÿAQû¿àŸxÚ2Ëþ’ÿßå¨ÏíeÏüK%ÿ¿Ë_ ”ñÏüõÿÈçüi­ðKÇ<âOÇÏ?ãG×ñ?óâ_€¿²ðô»þ ÷[~Ò6=´¹?ïòÔGö²ÁΗ ú̵ð¹ø'ãž?z?ïù¦·Áž£ÿøÓúö#þ|Kðì¼ýGîÿ‚}Ã7íeŒ 1ÿïòÖm×ígyY–¾,oÞ:aÌÀ}nøÓ[àGŽ™ãáïùÿ]Ä?ùpÿf`×üÅGîÿ‚}qû@Dêqcûlµ‹wñÀNHû*ÿ]E|¦ß’SO´SÈÕ­Oü¾+Ýÿq?¼OwÏÈŸ•Zâü³ùßþÃûÛñ>Ô—ÇZ8^5KSöë*ëǺ8ÏüLíÏÑëãÇñ=ÉÙü*œÞ"¹9ù#ÿ¾j—åí¿¹‡ö>+ùêÍSÇúNÓJÿ¯„¿jÏ[Ý~Ñš õ´Ë2y|êxÎã]eæ¿pÝ#ŸQ_?ügÔY> hדŽ5HÎð8Ànkì¸o>Ácñ¾Â„›“Œº5Ðô0˜ øjŽsZY¯½~ü<×AÑÐn{צišèÈ«â?ãUžš‚;]~ÉcÎàóÈ­Û/Ú)ãÆßØîkÑö3þW÷3çeJ]¹-µ…m¿6kNQ[0ükâK_Ú^íÛ®éŒ=ØV­¿íE~¼[J?WÆ]Œ½”»iǨ£O#ÞžoûÜ}kã˜?jÍMG–O»Š¸Ÿµv°FEÖŽÿð5¤éK°½œ»^ Õ#ƒIöÕîÙü«ä¥ýªu¢~þ’GûëS'íM«ñ¹4³î$ãSÈÅÈϬâžÿÊ”]®zÿ*ùYj]Pÿ˾š~’ñ©âý§õgÿ—M<ý%ãO‘‡#>§Kµ=ÿ•N·@`çùW˰~Òú«sö ϤƒükFÚ?RlgO²ÿ¿ƒüir0ägÒÉv ô Þ\~5ó¬´6 Çþ<-1í ÿ”|~¿'þ>žöéͽXd`çúWÎß&fÑlÈ”ŽO·Zú›÷xÚ-ÿ2>‹&ýÖ6‹Ìðëñ[ÂLz}¶àb¿X`•ÓóümüëòOBŸ‰>Ç$ßCûìWê|7¹–nŒÿ:õ8™óbÿ¯#Ðâg|c7 `úP`R>èúÑE|!ð P{S¾ÊðÊŠ(ñh1÷E;ì|d ( $ÿ 9tüö¢Šwöpþè¥þÍÿdQELû¢ý–=1Eïìµ' £û,ÔQ@h좥tQE/Ø?ØÖÓAíj( ޤ”aÑ”ÿ¢Š–„ЇE_î Š¿ÜQJÂI ýо‚ìUþè4QEìƒûOðŠS¡¦>ࢊ}ÈOìE?À(þÃ_îŠ(¥`²´$?À)‡FAÙ*(§`²#}!?(üª»èÁ‰àQE4‚Ä/ ØT/áÕ$墊L¤@þVêƒò¦Â0ŸÜQSd_3øe0~AMÿ„að (¥Ê‡ÌÆÿÂ2ŸÜÃáu?Â(¢‹ æ`ÞN~QL>Nê(¢‹ æcªqÀ¦  íŠ)ò æcˆݹúTgÂ(sÆh¢¦È.ØÆð|gøj6ðdGªÑE.TÇvF|GÉL>¶ç õ¢ŠÂt¡-ÑJr[1§À–ØæùS€íçˆü袲úµ'öWÜŠç—qŸð€ÚÿÏ:að §x¨¢§êÔ•}È^Ò]ÈÛÀ6óʘ޳Çú¡EÖò¯¹ TŸr&ðžÔÓ€ì‡ü±QOê´•}ȯi>ìið‘ÿ—z‰ü b͵Qõj?ʾä/i>ìþ‹ÿ.µž±ÿŸJ(£êÔ•}È~Ò}ÙNãÁ!NÛMy¿Å€Ö4t‚›NÔ % ¹Q‘ƒÔ0ô¢ŠîÃ(áæªRI5ÖŽH>hÉž7ìyâå]ØœwÉY¿do®BÏb~Žh¢¾’9¶+ºûŽïí SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/packagechooserq/images/no-selection.png000066400000000000000000005575301430147706700277760ustar00rootroot00000000000000‰PNG  IHDRp_ÎñÝriCCPicc(‘u‘=KÃP†ß¶Šb+ª ⡊C EEµ]Š”ZÁªKr›´B’†›)®‚‹CÁAtñkðè*¸*‚"ˆ8ø üZ¤Äs›B‹´'Üœ‡÷ž÷pï¹€?­3ÃîI†éðl*)­æ×¤¾wøÄ0f‘™m-d2itŸGª¦xˆ‹^Ýë:F° Ú ðõÏ2‹;ÄóÄé-ǼG<ÄJrø„8Æé€Ä·BW<~\ôøK0Ïe¿è)ÛXicVâñ$qÔÐ+¬yq“j®,S¥5Y¤„lB‡ƒ8e“fÖÙ—hø–P&£¿…*89Š(‘7Fj…ºª”5ÒUútTÅÜÿÏÓÖ¦§¼î¡$Ðû꺟ã@ß>P¯¹îï©ëÖÏ€À pm¶üešÓÜ7éµ–=Â;ÀåMKS€«]`äÙ’¹Ü´üš|\ƒy r ¬{³jîãü ÈmÓ݇GÀÕ‡7þêh•~5l pHYs  ÒÝ~ü IDATxì½YŒeIzßw¿¹×^]UÝÕÛLOo³ô,œ!‡ÛôÐHC ( ‚$S2 C¬?ùY,@†‚E°á‹‚%‹€i=p9œÎÚ³p6öÞ=Ý]Ý]]][îËÝýÿÅÉVÔé›73+÷̉“qN¬_|±ýï_¾û½õÂÓ)ÜñìõzS(âÓ+ÔB±XŒÏš[.Üöÿ ]ScºùƯÓéħÛí†F£á`GÒîv›¡R©„•••033ËkþÀ—R¡ÚíN(•JAìµêH˜œœTœZ¨Õjatbü.¾8î]ŽÃ#ÍÚ Æ¶Û€ûãCÚÇèW~ÚívìsþÆv|Ò¤Ýí¦6ò´‰m^y.//ÇþÐj,Ú«¯M\Ò`Ì ®Ó;qâD¸|ùrè†r,Ë”ò7÷M|è¸ëp½8£´>ðËÆ½¬MºãN»åÙíùñ¹Z­†¹¹¹póæÍØVËå¬MA+´¸ý¹í1ž_¼x1Ð;éîBíÃ×!¥m1m‡&6uó{Ùž÷bÇDVï||üR‚òþ{õM£†ŽôqÞЈ?O"tLät`wœ£h›7G±lÃ2í>h?ùþކɯÆ}Ì}ËýÍíÏéÄqÅ‘vÙ6ùl¶JÃVÃçó~ïhn¦Àm»ÕjÅ9‚p|ÓvqãažØ+ãvº™vF˜Í„Û+Ú‡ù æ@ZWé{Ëî´ƒtܼ3º¦¡¼;¡¼= ʾz¹sÚ†h7ýv‡)nØfÒnKö•9«¼€ówxÃ÷zÆü3× 7t?ú ¸½¸=¸í`ûý‰É/}.¥ïn_y÷Ýæ¦i°íòl6ß4ÜlÃp{Ì×õåzÏ“àöHÛm6›ñáðäãìä÷ ÚÈ'¥›wèÝ ºv²ŒÇ5­´îÜá…ßíÍ“âÚà†ŽHN Û ®e"·Ô¤þ©û~½SH ´»Q»<¸¬ÎL:hå€ÖÝ4”×OÊŸÝÌs˜öáçm¥_{qÿ¡OåÁ›ûaÒ¸~·½ßܹW:Übùö»ÃürÀmѶëÜ6Ë—ø!q¼aó¿—Wf°MOò1m$eºÜwüú1ÏuÁÃ6Ùz`¢S®;×)ßvwÝóÍ»1ŠÇÕ \L=÷Fã†c;$~òë~7ÜL«m3fðÐ!S73Î`o7h:HiºŽ(·Ë>ˆ>óÑö °C¿£Ï´Ÿ¸ ¥6“ßîoi[¯ ¥av›ƒù¼øæ¶´lÑAøÔ¬¥“:ß\Oæö˜¯w~ä³×Ís…ÃíUa ‘þ³žq{µ?ôàpW©ì<´ ÖkKn—´=Þ Ø°³zÍÚë–œ*gìïÈ›HRúK„N` ¶™B@3…w:€Ë7¨ãö¨7˜´<Ñ- ^JMÃßÜoÜ~ Ô°qÀaŽw÷-lÜÓ1Äá°yò“)ñwØçO)][ÉӴÃá êV8·÷a]Ç©í¶5KKKq¾0xóÜàö½íÓí zL'ï6ø§îдt9ÿ¡}ïÈ×S~üLWÝæ¨k?[pyRI(ôòþûýíBcç[ÚðÓ`šr¹Lãví´Ü”7åI>í4lúž7ü>>àG†vCKñm?l·ÛÑSÿÒ6‡ßûiœžÎhJÓ†ÓÙ(ÞÐÿ8Ö‘ëvë‡ÓùãÉÖß{A54™–4?hÀ/¥Åߨ¦53|?xð e®gÆPKÞ¨_?„¡nýð}OŽ0©6¤èy@þÁ¼Á$h…v¹Ë`r]36ïïpGÍv¹7S®ã“Íð⸇q¢ý¼ÙÆ=Dëµâ¤íÎálïoSzö#ÿaž{Ë|}óíö‹MfžàÁÏóß{±.åù“ïF†þ³Ÿ}h#ú†þw8@ømñ V1nIOñ÷«û Ü*V[hÕ e=4hÙjL5ª½44L kû¬m:™;"ðÔ8ŒÝÒ´ì†M¸ã` â_Yû%JðU‡o†ˆ.6õ«ö…ηØÐzÅøÞíR,5{ŸÅqàÔÑ(c¾]»ý§ýˆ’òÍ“4p£ñðŽ¾´¼!tàÉû§ß)=¤—šÔ/ußÉwÊç|É/-oú¾^žLâô â’ŽÓ`æ»'!dV¬Ì_.«c‹òÒ8*n®—ô‘p/öVB+*ÊÚ_?ŠõÐ.VC­c=›& ShéÑÀSšŽîضù@=º~ÜnIÔuoü¨7–ý©SêÏ[pÜFÒ6AøÝ6eÑÞMqœÖ;‰²xWþÌRp®§÷¢ÚbEOMzàªRßC9 £Sãr¤nÃ÷{çüŒõ¡:±ÁÍ~6ngöÃ6NÁv›#<íÎmÏñûÙ¸4RJLúž†Ùéww²´ÐÎÜ¡ìO§â1cvhï<öª ì<åÃÍ ODô¡õ ~ù¾5(üzéDwʱݶL|ø“¦c¾Ä2ïM¥NE<©„N˜èàÐ?ɶ¢ÁZ$ÿÄôäo°)¸›;¢¿û1x·h=ÌéÂßÔ¤üņ»§a‡ï‡—ùz§$®clüÓÇý ÷Ø&æ(ó`£²õãqÌ·âuøXˆC‹ššJ‘÷øO/HØ<ìð?H’þ¸»§§÷,ò¶Ø”ÖQ¤'×fiÓL¤édJžÍ¶ƒm8 ²é òîù¬mvãGïC³w€ßæ9u”¶3»c«xÅΛ­´¹M82‰Díñ±d¼ÝxÓºÓaÖ“MÊÐ<ƒ†ßw8`>ÙŽu,^û›¼cì?ôÏõáï¡}ø8à‰ÊÓ>Æ7õÎ2Œû”û—Ûƒã`V“–%_†tœÉû ú&ézìö¨ûuŠ—µTÜeITì<+6>X"à @Üî™´}»-c§àÜïµÞw‹r÷¿AéC3á¸Fk³Û¥7ôÛ<~Ø&–ß±=¾º½¹.ùv8âôñŽIý2—þÿ<€£a¦™bFÀùÛÅtíõ9OýÀ·~ÿBñŽä“0ë…íèv09@½bÜ_øv_bAÿ•ۆæácä#ð/_¶Í)—‡ÇÝ4µ|šÝ««¨ÔÔjú*„†I“ºÚÿÖ›Ô£ýq€8ï}S–[ƒîa¾Çsvklwо=IÒ¾©æ+æÅÍ}Àãšã®%¶O/îëÑcº]Üza÷©G:[óŸBÂwê›vÆ»L®—4Žß±†m»E>ÿ6pdè ˆŸ¾GbúÏ÷}²º7§t#ŒpÇÃæ?)}.x¤ñÞ²>V±R>™wæ§ýÒº÷ûPP¸› “šûý˃¾mÜ.\÷ØnsmÊಙþü·Ýóö ¸ŒOÇÝt{uAµlš©„f¨VôÌKä°zm³8¯êäz [î@ƒ9¾·iÜ^IÆóÀ6Îc“†Ãm³mÀñw˦¹Bßi»ó;að¸Ýª‰÷§›®BQêÁØÛë'ßΜªãc;Å?—Ú[êûÑ ]lO*0Äî)͘ý 3eêa{§¡øIy‡[ú/~Š™w~"ÐxÒA&}÷rL¿v@¼~ø±Ý¯GïVÊ–Kß?ÇÝ”$Eëõ’~5ÃHa&L”Þ c¥wõ}S§S—Ãlï¤@[-[JíÊ\`Zün»^¨Ú5sàÍsˆ2‰mØóál×ßûa»¥tõ£Z ƒí²ô 7tÛy¸Ž´kH?¥„V{æ8ö0ÈЦûµ}Ü1m)v»·[~PÚÁÏ}ÔöF4¹l› ¿QzGÝ~Ù¤ïv3`£íø·oGñ3Ïû¥ãôvÚÞÀ¹AÜ+Q)ÒâNš¸ñÀˆü$SŽûÍNWøvÒKÛ‚ßUuC³ ¸. ƒwŒû6a<àøG’ýý*FêóÏéõñ:%0?q‚g|§nIÐcõZ€CÔÔJÎB÷¾Ðk¯¨ü£a´ü¶n xOo‹’¼½–”¤Á„nG’8ö¾hÄ>Þ°.Ïà1üNçÚ»ç’V»ë7×áÝ®í¶nûì}ëјw7 9ï·ÏÅ8°Ùç~mÁnØ´?„çqÔàͼ&¬Ø~þÞi{K.OÜf‰¡.8iÐÙ,Žä²à”!yF Üf¹¼·áÖÚÂÀí-ãs¹yâ¢>0i_ãÝj<¡á†Y«¿ø5üw¯0ßûÅg,s}ØPx‡9Jv­£É¯§ç…RXÑ…bK§$»ÕPÑiÔbé¦$póa¤úzÓ_³u^aNk«×jbU¸Õf½.KÜŽÍWøM[÷)SòƸÝóî°¼t“·ýèNÝxg¾Ä¦¼™}ÐK¸ÿô¥mÃÔØÍüO›ÝÆqà·üòþ·“ö†Î¿ÐMØV3§°ÒqZ|ÓÉxRE¡ë¼ÒðÄš½ç€ëb={ï)æ˜rÀ?p<`Ї ÖxO÷¸zšÝã€ùëúHqûa§î»GÍþ§\íP!S“8©™ ­ÎéÐÒäÖx+•àt"µ¤÷‘Þr{4t[ç$­“â_H-p:µtgf¿Ò0G˜Ÿð”‰ðfW*ßÙäø‡‰÷ôaèåqûq9R;+SààÉFáÓ¸Çù=å©ù ?2~Jrœ(2w]¤üêÇkÇMÃíÖû†Î´²™FB éŽæ_Gî`¤G˜ƒ!ÂÚì%3œçÐ^ŸÔOú¬rè³ ¸ÿøG})?ؤý×q°Ó¾¶ôÅ<ÌÏ<]øÛ8 vênÿ#iK•JÀYJmK¯[³3VZ£‘bUÊ| páfè”_—¸³j»gÎ*EsÄ|tÛÀ¥Òû›ïæ¹m»Îeÿ|¡ÓÏzT¤e´Îóézq†îÿRþúݶû›Xð;ÿàÁv}ø=zìÒ¿{p&v34¹0t*U àøN•š)›IwfÈ!²_ˆôGúý‰'íŸô)›ô·4œÃäí|œ¼ÿfÒÈÇ9Êßé6ä›J§›ÎLêzS¡7=v1,uê²/…²–UKaYÒ· ýp3a¼üVh—ï“ôlT®ãZJ,}£ÁãtNaž±±t:mü»^l;üA´Óþ ½iY"ý¹þíd‡¡lßæ¯ÇÎÔ†‡æ¹ûu?¾âFüäÞcüÍcwüܯ¸`ÜáH0<`(­Ãl:½¶NŠ–ÅTFA²‡¤€· Ù›´†Q½nÆ?ø†îÈ^eY>u¹ aaBGõ6ÁÜTõG¡×šÔiÕO„ùŽü*zzR)¢§¨¸ÅBMü‘z©‘bʹ¥E]Íu[G ^ çËW$Õ›‰ìlË¥¥…Ù•ÎÈøÂJ8/½rç¢Ëri:TÚK¡ÌU¬º«µ]Ò=víhy·ÔÍîlí¡Sj„r{,¦·Þ?ôb•¹+}s”û^%j'4ñë]m§UZˆ Qzѯ1µ¬“·•_§rKa°¢A·?Ú `"m;øYO'ãAE:iówµÅì7Ãzäzwú&å…Ø6ÔûÙß<ÄÎë™%á<.óí´ì‡ÒÏ›4NÞo'¿ß's!‰ Áö;~„ƒp»ñÍÃ7LcðÂîg“ϧ_¸¡ÛÞpÀu˜ææºÌ» ë-åÈÖßÍWóÑ ˜o»åSe q¿¢OñØ-ö8~Ã7x‚„ŸIÎ*cßw‚/·úõ—õÒßJØõÒ8Èî#-€Z¢ÒXX®Âê±ï y@wlU ¦Õ—xa½Ü‘Æ V´Dº²|!”K†zY’¸‘ÙP¨¡¼÷­Pê=¦Óªç5ßP+@ÿÓ06òt˜Yù•°´òñp­ø¨(Ò4¨°´œ¢À v|DçF¦®²G©c¯1…µºeîlj‰•“·Ü,Q(ENW"]IÃ&i0·bòí°_JœûÅFôv÷yø‘çeㇼ0F!<ïî;1Fì'ËYAhx™1#Ö&ˆÕ_Kþ&`Å9ÐäÀë”o|{qŸò@ÓïÇëÀ…TwsÔmxâžÙ0^q—iêf¿­Ú®3óÛöfÒ¡^1iùzÜL:5 R± ú~:(Ô€“ô¸õ:£ÚV&é˜ÀŒÖfu=ØB¨–Wµ%-¯<( z*£IR8ýTÓ*¯ÀÒÝèç—ǃ~$Ķ˜´%Ú•Ç­¶Ó~é7Ê À%ôy¾Ó~çräû²Ý³½nëô ƒ 3`ŒO–òmÃ`i†Ù=놄mwÇÚ›Ô×ÚŠG2Plªui›§äïÑHûƒ°¥J>æN:N û¸ ÔëÕêèèhäÅÜÜ\˜™™‰jNœ8›Çžõâî—;õwPiÛ*O ¥%mÎé-Šç’–<F*o…jEK’…ûÃÉîu]P?*€¤%ÒÎ)¸ZVäô§”ù2¦Hõ t¥¸·§vߕԪ¥eÎl"^ l|[i}?ŒJ½H¤üuÚ5^ß%ÉÐU¡uj Kj]鬓*•šîox›¨Ý S#7ÃøÈm-Ó.‡™ö£ŠD'ªOZ‹äMyµwN ®( æ Ó¯xp<‡Á=ïç0GÕ¶P lâý”>0Fš7.¿¿mv~•{\q¢˜Dïú–z²l£K¤L.0*-´ Ž»f73Ëîé÷ð}o9@Q/<®¿ÔW€at„µºÔÆà,~«`]zjuí‘nÌ+lú%>¼3ÉàÎ@‘*LJDpãÉÿR4Ÿ~Ž´1–.ÅäaŽŠqY­/ Á—(Ik.ÅwøM™‘¨¡ë C¸ç~úÃð½ï}/¼ýöÛaaa!œ;w.|ñ‹_ þð‡Ãìì²–³tš0á§p:8K+-×CLxõ7øï10­‹´^Çuâ´Èƒ¾ä<)ï„óã°Nã°Ù]×^I·YY¨‘f7Œ5êºÂTãJk!œýkŽk¬¨ëÔçdhtÎêè}aIOOjAºÚ†ºŽºN¢ötР#iXc©V’ÔUnK¢÷‡’­½£%Ö¦'ž õ3Ÿ#ãO©_¤0äMùMF–eç ,XPàx²¡ªê›¬`£Ï²Yi¼jÕ(ßvXé^ˆK³õÎ áÂÈ¿µÎëáêòßó½ ‡Ðƒ%逹"ˆ7 IDAT+I_›ÊÕ. J7¦¬2—ÛúáÐFÏ`ãõ9•s.œ};L Ä–¤—.´¶Õ ‹£áF÷ª@i#´ª¢µ.#|fK6$1d5U&mn[ô‹•••µ¶é6KXÞ ×Ñ;mˆÇ§±‰·]ÉsFÕöÿCëfŒË@XÇÁ¦ÏPN?øãFù±—–ÚC¸Ôöþ•–¥ß{<ĀޚȠx\ûŽÄ &ÁÄô!‘£Î”~Œ:Ênî0•ñ8Ö;ýÂ7FÚxg 4_lãNßáÁïtÐáÝi9ÎF¼?ªþÊðþ,..†‰±ÚÚ €õqóæÍðÜsÏ…—^z)¼ùæ›ñ›8­ëׯG€ÏqósÚ.ä™Lˆõzêb>»ÌXèÈ›~nù0‡å»¤ë±qu1ýœÔJ‡Z(ášÒY‘ªÀ”ŒW½pKJmoh¡ó4bÑQÊtO‡åÎù0Ûi…ÅkèÇaAïµÂ0Rþ+éñ½-`§9G§Qëã„RM‡0ê•ým`ôSH!¯~¬ÿe–m+'Bqâ²ÀŸ fŸÓ2î­PéÍ)ÏwEãtX°ë œu9%Qº¦X#eS’$fà;°´Šô¬´œú©–ŒWt ؼ–Oµw®(żZ&êG¤B¥:~]¥<©\ÇTæ ”oI`²"ý&(9îg¶ÒFö Ž%ÑD6ýýø@ŸÇŸñÀ6­ƒâõKë(º­-¡F&éä ŒÁ·ÛÊeòÂoȬ£Xýë—‰Ž—ÖùFqý”·’Iú ï7øx< áF_J—Hùæ±9®ñQÝ•ª‹î›Š)pT©`ÍN•²ÛUÀꡲ%½-èÐÃÈœƒ­—u–â¯Bqe:Œ^Ö^»7u"ölh¢èW ­§CEˆ-èvˆ’$o-W*óÚã¦ÕÅpyôyµ1vpE1±j[9kÉX{ó¤ xIEo²M“±*c§#@"èZ|F]wkSp,޶7â¥cÔ–x/óÀå1&a¬õ<÷)‡=ð…Ú%Ë0D?ibò=-‰1¿À0tèÀœü„›"™‘1á¿#Á´S¤õëzOýD‚e x‚/¾á¶‡ñ¯Ã¬e’8üü˜wæ%îÇÙx‰ˆ_ÚbøgЋd`ÆÒèóÏ?ÛO~ò“ðÞ{ïE¾³× þÃCøI§OŸŽáü㇓'O†ßøõÿ2.-!}# {æ˜0‘÷¹®°·Z_nNƒôlp;즃жÝtG%tzPXN—Ñ·µ4Ø‘^>¶JíÍ(‘«”´œ­=j%©è( è f#]3Õ–à ¥ƒ­’®Š’¤*þ/½NHG°ûé&>¤“¦å¯tµÇ­,¹V©- V¥¿k¯Šp˜ÔUÛb/Šuƒ–n»Rî[ý¨´ý^ •æt(u^ “Ú7ß|\ë„´}ú´NÀ­Øn„jOJ„+ï…‰úÛ’ ßT»ZÒiVIãâ ZÒmhßRólXÑÓjO„éåŠtÚMÄCÝp‹ûßt:Ug,Ä©=Y5ùö°™¶æ6I?à‡ßñ`…Ûê>7±|™\VÛþ¸»Ùò{û?ÂKÂîFi;£l—³tu¿èq@̃ ofÑPüŽßf™ÓÚ®?Û)…Ô³áï~Ò0ÇáÝ“°%C”Ù Ëqø0`À±Tw÷lƒ=Ü1ýxžùŸÿ€4ƒ0Öð0‡}õ7£Dí›ßüf\.Åmll,ú¹à­àÄÄDä+ˬßùÎwÂc|2<ñÄÑßéææQ2Ç]–ÌvÛ¼ÛŽÛÁ€¬¥—m$:õÛߊ:UKMÝÈаéº-;Vt´Âa‚ž–\Ø =2(¿))ÕyÝYª:Õ‰Ö@‘Ô«´œÙÖéPöüŸ¼ cj,Òž³ ‰žöâjMU¢-Á²Š–j ›Æ.!AÔ|t ;’%7€{,/iÕó}-è ‹q©w^4Ôš”:º?U7©Ö*WÉúáÔøëáäèÕP U!%Á;­tªl#º®k<ª#YX™ KñÐí®œ×²ªh{n}PÞ̱âm‚1Àm,xO¿×+"qic)€ëEvëÅ8Xî.¿©¢,~ð£_cÌ÷£~6übl^æ¡NÑÄ1xƾç»ßÕuK:Ø@<lxL<ÜFÆõc; ¿™ú£l„ëgHs=¿~á¢ûÐâ~ÁŸ6JjUŸíŠ€qO›ŒàJA{½ŠE.¥ïÄ!Õ~·9(5/© è"v–ºÅªJï]<݇ª¹»-é^iôþÐAï›þØVÀÁRtÉm`âÆöÌøô“¢–t¡¿ŽöÔ+ZNÅ_´•u•W¹rM‡> eTÒg»D['kgÂøÔ{aê¤NÚ–g$i”º’…Z¸Ù¾RB¼$ ¶Ð<' :)éà"Ë©€UÆ I {:Á¾½žÔŽpS„Žèaq÷Ž‘ö¶³Í¶ ·C·û X²§Þ•š1„cìäñ³‡ä‰&¼Ë÷;Nß«71ô/rÚ˜Òf^ê6|?Zè7¹¬×ŽVÉï. ÀCÙ\ØXÏ^¬ùùùL‚#w@€€˜àã~b¾y@ŠžÃ‘€.qKÕøAùâ‹/FéË 7Þ{'ò•¥OÂÁÀ3®e+Ù¸ÃSÆ,Þ©;öËq¨á“Ÿüd<Ø@½Ÿ4Üv¶n3ô:ÍÍ„uhpJÝŽJý#M«hÿ›ðËáô$K™zÕŽ6ð (©>Ú²Û¨§êh’ß :(W)ëð0ºÙzò—üE“Ï Õ¡Ns¶Uºl>Tµ©eÊ‚¤W%IÃĵ"€Cª5e¶®c³«¶ %]½Ýpå•€_[ßÚ§§K´´‹*:è½*Ð9 :QZleÒÙ®Ê×Ña„åöiÑ\ óË,™JmoCÒ¶ås¡¤ë¾ÚÚë׬èÞVé‹ó¡¤yœb…þŽn”(ª hC@”¸•tò´oXŽºžÀßz&ßn6 wÛÔFe 3¶2V¼QNøÈãþc?Êég£ô ”M¹Z™¸«|7‹é×0Ì@‡Ú“®»´¡§nÔ¶¥¸Ó¡lӺ촕ñI:øãGûÀ=5i>©û½¾““¼;9“/“0›Û‘ÄÔG5 ¯.c,¡­ÛÌ€ÖzùKUÓšD†²ĈKÚä=¢Á–²2áOÏÝ s7ß -¤8rËÊžñ¬±8VØóS×Ržúh]tê4w9“•tg"é3HA' ƒrT*ƒ÷`qûùzèüMz+--Iɉ `Æ(Ò'/ìÝ4ð ºx0|ó`p«ªy@ï±>D3eÀP&hF¢ùƒïý4°ÏS¦øRwíI9¤/KaG+™$4.1«ÌêÞõô/·NO‡çòÃðå?ÿ“ð¥/})Tk۰<¦NL…Ùù9m*_Mבs6iCOZ&ø ï±]î\´µOâQ~Ú-tž:ñ»Ó]‹°Ç/HâMÑÉ&|G"3+ äˆrÙª[\ez$^SùNa¸"ª[ZØ[†lKFý '"Ú‘V¨<éDC…ZYºÝJ-¸ GûÈ8P0.iWO§S¥Þ£Ö½N·'¥¼w6,Mêd«NŠÖ:ºÐ^ s—Êï(±Ii'©ëJ-mc,ÊdÝdÚßpµ¢´b\ÂÌÚd,Ò» jKn…ú‰ûBgú\hÞT¸†àa›rHǘ@æH¸¨%ᕸè:ß>£Ã ºaBié¸N±Jg]UÜÑ UtáµÅIëâ=¨*p± Päý†Å…åŒP$€Rdâù–v@Û ]Ñ>øö”EPt¹¥&~ËvÈãx¤ƒi墤Ñ÷ìÝô‘!´Ñxè L am‹¡,ù²ãnÞ«¹{ö=®\–ûÀr€Nê ™ŠΤJ‡´°Qe1&rüy0ĉ“,¿èa’& ƒ ï¤í|šäygiÔû³ÈºxKž–À½þúëñ´¤©ÊØøÚdí8Òô$>€<]Ë3¾6ȇ2aüþ‘g>Μ9Á‘éñ`G˜½6ÐêðB™á1eæ%Qxö /D~±W iþÂSÂIjšÜ–ßÉš¨—W^y%|à±¢H"ª')q€ánr·œþF\çý¹žúùí•À P+¡ƒMÀà†Ô¸ (ý# ¼ÉÞ8º€Y.#Aº#))h¹RT,…Ô -)c^i²ôͤ-h¤%ÆBU?<ÊR¨ÑÕEò‚<4µìZ*ê®ÐâŒò^p¬¨ ¨—…ÕóõÐ7•¥ÚGº ZîÅÄeLö¥©œÜ¼ÐÓ’*RÄ Ë¿\Ýð†rTy´üZØ/ˆÆ¢€ªQ´«wŇYJms\jV0ŸÖ£-í/n+¶Ý׉»^[qüÔ?}_/ßÝp'_ÓCú¼Ó±=có0>¦awƒžãæÀ‡ZÞfé˜ùA¡ŸÛ6³é|"Ó¨ ¡Ó¼°Ñý/ÿò«Ñ̓é\£O¿îí!ˆ¿t ` } ÒѨŽ*+~øá<”L¿’¡‡°„cã<›ï‘®á¶ 븓6 7À&ñ0 fƒLYûeœÀ†x<¤ƒŸšŒ´¥4yÐt˜Aéoײñ`°ÉÓ6nìmƒ?”¾"qcé°öÚk¯…¯|å+ñt)úÛ‹?á|ú¬¦%¨íxß^}õÕðýï?<ðàeIGG#€ŸÔêCFúºYl—‡äŸòhÝŒöË#‚ I“$MCrÁ´pRRM¬­%? ’93 ˜"•ùTÄÄ‚À5t)j¹²Ð¦ßèÊÑ¥¥*!‚‚Âsº´AI˜ƒ]+Åî^I’Iòš½ÑP)iIM  `Iûç €xÅWªJ{õ¢zöŽ HAǶ¤g=©éi¥’´ˆ}rEåQo²ýkR‘Ò“ògQKÔ€´µWO#…hbéž3­*œh—SåVíßìE·Dºï䃸ŸãÞ¯ æÝèó˜4½,Ì <ƺ÷‹Lm.‡%nrîŒ CsïØÞèxïùc¸CB.ï~öŠ|:8Þ400–æ"2€ñ$Ó]\’=È4–ãò(Š_yäá¸4Kxò O Ï@‘>8ÜÐaI´`*±g  †´«Ùò¯¿Ù¯p°Tµ¼Êß ˜ ¶@Ò&M¤JO=õT¤…oèt8Òå}7 üHMúMÞ|Sèœa(ÿ·¾õ­(ycO!e½„¬žòñ­MSÑÿ^ÿ‘À[3ÓQùïÇ>þLxJ74@ uˆdç^LZÎAñ©žÔ8®ù“úíõ;»ÎX Uk’Mî,—jùZ|‰vl¡ì:˘¾x0AÒ»rK·/Ê ¢£Dd$QëêÆ®–»¥YRޱYΔ¶>;²wˆ.…³ãïé¢w3]MUêJy®–_ÚnÐF?šØÖA«+¶qº\MK©Hn UnšvQzçzí¡Ûš‰’59µp«|´Bà®%i\OtàÀHøs’´##Š~k¢Dz1K¤]ÑWˆksã‚ä´éVŒû+m„¾îo§‘ÿv[r¿ç{/Û•óÏÓ½øùǪûûáé›C³= Üöøwäc»cbûBç¿w‹ÎÇ6Ÿ UŠKHÚä'}Ó‰{÷ ¦ltD—jk¯Ë”¤1gNŸŠÒ!òHŒÖFTÉÃË‚HÚðÀÔF €ÐÕ¬½Ä#ÎøØh˜˜h¬,‡1íß[˜¼GYZX.jj¿[W“WE ôÉ“ýcæù“<âÁ}¯Œór=9_–P­þ~p*ôË_þr¼Ë Ø9ü†O|»Û-Û ¼ðÿà?÷_¾U‹\»®%Û-Ì!ë•ÑeígSž”'{]/ýhJÝ*ŒFm =n´UÉ“o‚e¡ª‹åi}Q:§¾hÂÆ!wB&¦(jkB7òcwcK'S›êmõÁ¢îm«]v´ï }j\75^™ c•Ò¥6Ό݋ºN«µðH˜kèP‚òhI‰n£p6ŒëP×j…Î IÈæÕæ%¯“5e¦`£íO_uݸPèè ¬Þu8šÔËèPFO·/ÚV r‹8ÍZ‹ëÂ"±«K€3¼+§Fi*ôª×‰‡ìéË€{eç6e›ªàvBÞŒ!8ÀXWu€)‹ÞšÔ_°¬ZpB~Æ’&¦Í’¾ö‚5Vo¯,…ÈÄS›ìthãoØ:tЕDªº0®¾°F« ºÁ`.LŒÜ–}-ŒU¯JGÚm``cùR€­¬k³¸Ü¾ÑÓý¨…ó¡W}Q:âô§}M’¸Y¥£ÛKijêj@%(Òsï¦*)`h¿«eßwV±ü9ÝAV©ŽÅ}pE2írÕ=©ê»ºçéZhèfIåºürÔ©Xê°'¾Ä¶"é!Š‹»:U[ÒÒp$q“ä߆4i76©_êÖ[ CßÁÏíª_ÇÝ)Û}Øcûn:‘Wž·û¼ûNÑu\Ò¸ãRÓÛ(g¿N†[?÷mdÓ7*“z:0yp`® È•5à MM¦í °«g)J#<étš°0;u‹=ýÄãáÒ¥KáwÞ Ï>ûý˜?aH á‡ta2h˜NÂîc~:.qÆ“–’þ jKÒ€bÓR;Ýë8È r”4 <€@@!éûÁŸüM—Ñ twÚÏmÁåç›Zßzë­¸dúì³ÏF‰!'ˆàÙ)Ü °º]ê`Ú^Îô¼Ý+½ð)ÀÈøXLÏR8–ºÏœ;+`°¹”]>‡†NLÞÝþ¶ ç°v;HvK€©+ðÑPF®…^·Q¶±®.w—ªŽ"K‚,) Àqz³)=l+úÁTÒ~¯–Þ$€*J5GO{Þ: ýxÒbw1ŒèÖ…’NyNNéBûêt¹&j:ñ)å ƒ íEݲ -i…Óºº ¸ºè]×K–º ­ò·Äª%õ“«’’OK6vŸ¾ER%ö§Ée».´®½"9—l»íG@•?± m’ –%åW&ÇòĆʶҘРY-÷k`[Ë­½Ž¤vuÐßÓ! qLõÎÂó`“o´'·¸~m,ïF;·›ÓÈìÁùo×—ñ(Þøv ,É'-«iÝnþÇ=þÀ÷°AùÝѰý¾A”õ¦ÓT<˜y°`R´ˆ,MТ¸2éSŸúT8{V—Q¯Šî›Œ cµR€ @ á²–ØÎœ9÷Æ4„ ¤kšpTy‚?ÐÄCXhEBwúôÉø¼ôÒKÐpÉúç?ÿùW–3à·Óz:©GZä*“çž{.ê5Ë–N5ïhuYááR^íE­×6pÿú7¾¥n(ç…6+ßE*Æ¡h‡·è&à÷¸üZæÌè½êÏÒQ€öÂÒb<ÐðÆo„ —. ÀmÁÝ# 餕&±ÏÒ0{ñÞ––Lg%©À(Ko àíTó†€Ü\”¸Þ@7½F‘¥EMƪ'6úÏëTi¯«Íýº™ ¨¶\nHÅŽÔŠŒ×—ÖÚaâÔË:˜ {CKWµ9÷¹…–nUh_P·›%->ç"YªEÝÊÑtYö˜2šVû×…ö--¡Š>öÚu‘‚ uKÀ¥í™Nó]wõ—0(}©Déé.×ÖI-˜ªeIý¤Ï}‚c#W¤GðyÝ…:ZSŒ/“jÍpcöaÑ'…½®míùëIHWËÒ%¨`âÙúzÞL¹Ûm‚wlÚ?OÖ32³ñÏ÷!âU—N3n§¿é[Ðɘ‡í|¡1¥)uÇÏñ†æÞ9Pî×î=¹aÌÃÆw>w(ÓOç£Ói1$ÚEdƒ.îe ‹c:brcI¾=¹ã:Ý­Ú¤Ç MZØ,2Éó¾¬  0¯‰ù„ö°}úÓŸÒ~¶ñŒvÑË”0ÈÄ%•á¹ç^ß’ÄmIËl¯éÄâ;o×£ê Æqp&/žª®[3ò³?np+žÏÓI¶ìT[WÞ|SôLFiÓU¥àúèG>¥r®ø³-Á÷¿ ² …ÂS¤ò~ëÊ)Í®¿ñD?ñƃ(tî•A¢´AxUt²ôòk_ûZøæ×þ"ìS£ÙÍlaD ,¶»iò‚V¹aà]4úä4ceàƒƒÌ¢±VǤÊBÊcÚC ¾!)è·¥sîãû˜ÚòÛ»øˆq}#ÿƒ¿M»ÁgúAü^=d‘úQ6ê–xË¢Ïí7ê›0ÄÙoSêrA{ßDJIºØÆ´ìTëvÕåí]I—¸!A•ÉŒJúÍJA’©Þ‚–µôºøp¸¡½bó’dŸ(_ L½NŽ¿-¾6$iÓg+·ã2£*Sö‰°Ò³Í azéaQ×O­,>"}·cª:D »¤ ¨æ˜©?–+Ÿ vÿTîj˜,üP§„ ¡ö¡0_º¡åÌ·´È©ºÓ~´lIUŒÜ© Ñ ãIPÙôþ²$…ô3iMhD’žé>íj™¸9ý³P[Òh‘·Î…kíGÂrž*gA¶@]±xSéÍë/myèÞÐ}­’Öé†Ð £_Ÿô#R¼Z”þº…• £´ pFRÄ©0U};L«œ…‹§[§%µÓ¸¤eè¢héª ÐhO´ ú´¿K©y“Ž©Ü.ÑF_ÝeÊÆºŽÆ½’¤†É ù`Ò¶ïïè¡km]tÒöùAÉÃ;û€¿±MkÚÖóy¥á‡ï[ãÀP·5~¹Ðî`µ`iÇ7è< zà` É@Ñê'çl€rÜõl¤3nxS ‹´®_¿Fêðp)=ðÒà&:$J[VàËD3Ðä¼=˜ç Ô“txÈ;ûÌX.EmGAåNì”{I¿ó…®Û¯ýëá _øÂ}žRºp#n ”á½Û`!–É&9Ò¥ýñ`­(Ä„õDGÒò7ií¯ødÚÞja5&Iº¤±Vd©ï¨ìü0ÑïIÝr쇓¤WÑøn7uð@˯À`”6×$•ªV%uÓÁæöñ…²šÝ ý𘠳:°0¿rŸž³Ô'Ä+¡ØEWO¹ršS€²×9¡“¡Hš'=ŠOí…·Byú9]˜0ª:x$ø¶,W9a “ýtâÇ•x¯‡Ô¸Ù¡\Ð Vtϱ,ÀYæby´ ·oI øn¨Í½.éÛ¼–Mà:¿  ÿµŠ-`Û“”À2{—•–¤þµ)]xß5%SQÚcðI}”0“:tÑk…Ƹ–|µŒÚm7®}X ˆ¥ë® i"H,d¹š%àìKö£4–a(§í÷ŒÛöFáúù»’&µ¡Ãß„s;6xãÛþýÒºí>†n÷y6¨{W IDAT|às £¦µÁtT?ýüwËͶéôäÙ/O‡ïç7È¥6${8T|°” Øj°_m@Ù3º²”Ó¼¡ƒª2°YnED>6i»ÝmkjbFY5¼;Žó°ß~Ø æÐc©’·?û³?‹ Žýo“£H?˜àîLý¾c ]øg~¹í`°¨ã¯~õ«ñD,uø¤^x¨#À<î,§³¼N:Ô6i`cJšŒýÎ$ç ?ç üÃ~Ñ~±1vû𯇠²€Û˜¤n:„¥nÀ6I´€GQО5ç¸| Dª*|Q D:…Et*> ‘VZU©×(Uu8@[BMwˆ6O‡¹¥K’º]p;–ZrÓž±®t¿àØËÁ!XN{ª$1ëu´?±ñ‘ÐÑ=¥EIÎzËo…ÖígC¹Vµ“Ô§îÁÕkµ< ¥JCõ¥o’ŽŠàQT´«=¤èŸã´h©¨~€“­³$] χɅŸÄó…'ÂLï¿(|B©,Š:¼Ñ>¥“¦Hnu’¶ùPXA¦}|cÚ7Z»ê5¦m¿'`§òŠSíDÕð¨òì‹2¿¥òÃaAKÊmÝT!ÕÀb%¤Ýh<…ì 7Ŷ¢¯µ¾MÙ¬¡ýyLÀ¦ÝmÖ„Ïi×ix¬5h3³g³yÃí†nçxy(SrG„xÞ7Ó!7f§™Ažž(IÛßМ>[øRQýÁÁ ’Àùq ·Ë‹íwó°vKÓ³?zèHÇ5{ÀÎ;—Ýð=_î~ùm˜È.`@·tŠ,pìõôPÎÆ"ôc¾àÂûn—¾“íÂ6nÔŠ 1Ðyxç! ¶íã¾ûî‹e:þ|ÜgÉÒ=§]·¤?øüaß^ÌÔ̤uèI0u‹„ìÿ8Õ €hw[˜ÐÕecm>ª–¹Ï43€£LÚÒÓᛸ0)|Áí …JD;ŠÐhi¿¡–@’\ÕåÞí-‡ùYI 'ÂLã¢öº ‹])ìeDxEI¹z-Õ ™ ƽv’Žõ´ÙÒRknºûx¯éÞÚâá±—tå•úe¥ªãÒ}X(°(¾è‚ÿPÊeòF‚bz瀓–,uu•›´ _ é¿+³Ï…I-3¶%¼]þ…p»ðxXl²gMWƒ ćBIË®ºµÙÕ5uÍªèŸ #:Ù^_šWu²vìŠR¡妮{Ó]¨@ÞŽòÔ†žìªâVÄh“P@¨Ç²®ÚjIý0øchs¼XQ ƒ aig´%ÞÝ~Þ ¸ø¥mžoâñ¸¿xÏ/ßvs<ì¡Ù_ Üþòÿ@äîNëÁ#%Êì½4)M¤È÷õül4‚j܈^&lÉŽëÂó‡hšÓ58s™m›'ؽԘ—ƒ,!é!Åñò)$jÜÝÐ8_¦ïi&²K(?€Ä<ã7$XÞû•Òmþì9ïK–ü<ñPæ p†¤ãpÐÏãpHä$"EEjÇ!Ò!ö/|êÓQù3g8]K¹‰K}ó¹ˆ]m H^þqÏÈk?Mõ’ª ²ÔЙÅe—m½<Þþ„ß(ŽÃî…mz<áP¤rœšÓ’—y=)í©ûnÑJ;q>Ôt¦p¦1m?¼Ž8<€PÒpâS·¿?ú£?Š  iãC=—\yGbø[Šõœé¤Œ¤IZž w«Ü›M· 6ÞÑÞ®n\ áЂÞEEIU‚0[j«’dEu"”cÒ•´¬§eÔP˜R-†³azYñ”ŒtU‡¹öiÅ×F{A¨¢€aE  Tè8s[ƒ@d›åÞ¼V+ÉWGR¸®@âBñS:0ñFëüPW[M‹&»ÙW¥Ôº£C7CóÂãÚ°/m%*(œFb{0íÏ0­®HYs÷¦6¸Ý1×BkQûQ[/‡šÆ†¢]ï|1Ülýºa|\7@HzÚ‘ÄlD{ùTg*[»7¦:“OïííãÖ…nA \Ë¡¥ÉÐj G©*爖WÇj7µ¼z]@nNËÅSœ’Ô ¢ÃŽå]58zW_p¿ }ðNûà}3&m›ŽO›‰O8çG›öãvî4l›ü1ywûí½áÀÙjoòær9@ÞŠÙËN›0Ðè‰ò¿Ó2à¦ôÍÀ”MŒ§q“±sëàÍ©d¶ù{˺8Ýã1ùÙÏöÝ1Ó¯;´ášÖÕÆqÓtvçú€Û#hä›wŸ\&Lžö¼ÛnPHž5@[:)âÎc°Æ$hc?†4 )*é`cºq=Wš]Ñ aî̽páBxôÑGÃý÷ßFNœŠô‰O\h±D.Í×ùí¥]B‡Š|#VФÌIN±"ù®ŠÐN~>s£ÿFµZ–ÒÞžt¸iã›ô¹éú©åq –FBs¹šuI•Ô„Y8¬^JI²×Ó]¡Ü¦À¢g—¥Jíj‹&ÒH è¶•öƒº•á‚ÀØ)å!EºôKåÕ^yCJº§œÞPš…ú¹PÑÖ„úM Iû2UŠpûŠöâ½zK:´ÐœUWbY—ºguHá—ÕÞß󽵌*=Zò‘bÀ -ê쉤q(%ÖUYRuR’ž»’À.Ëž•£[Ty• 796á”–O…EÅ_j̇‰²öÑ–%ûÕž7Æ"•_e¸A–Уxzgúu›£`øÞ¬qÛÚJ§íöLå¡}¦éÐöým›¸{ÑwMãÐ^ŸwZÐúa†>G˜î”Ø<@ú¿Aþýâì„›iÃN'b> :ùÇùgqyŠðWÇN-™eºÉ2i£íÖiFý Æi7Zþ©eË®m© Ø*Htº[§hwbl ÉÊ…0Hà\e.ã_¨Àwܘ4vÓ4öi#ÐÆ¤”æívo/|»@§ýíF{ä7Òdïß /¼Á˪Ÿüì/ÅåÖx ò>‡tàÏn—#Þrñ©S¦’܉Ä©ÒeUcafþ—Ãòüo‡ÛcOKk 4Þza\<˜¹ÊZžmH7·rJ4Ir®½qx%Û‰tÜI¼§²J†$–-}w¤³µ6M©6ié°FUKÀmaàŽâô䡿! "e× ©A›ݖ”Q4´ ·3» ²‰ß/Aqìç~AßHÛ"m9M3O~„!ÞÐìÔ‚†æ8s€ŽJ'5wLl<±#W*\ÿ¤SÿÊ~™kaÈöOòLL¤t`°;4ø!ò°Ÿ2éy€!,†´ªú%[Ñ`Ïff&ÜÖ 醷R [5øòŸ")pT— ¡V¬4­³<$!çlþÐ9)1ÕH«ýÌZšÑ¼ý‹Mý2×þ&mö.tµ9Yê:ò€žÈ+âËdƒn™ÄÉѤK´ýÀ›ĵôˆãE8Åf‚ œtÍ9Ñ,éµoógÕyW- K…®/$R,!r]tžRcÚïúLýwú½¬öÙ ¯­é¨ÇA™ôt €ä)jÇjËð8Ja$wq=sXÕ÷¯öÂiµ>¹ãCûtÙØGÙ®]»þãïý_ᡇ ŸûÜç¯þê¯FÞÌÍÍI“¿ö›©-6”/û"©wâ;=§3¹‡±?äiºí´´¿¬Û:ÆuUU]úÍZ’÷$5ªÑöµl‘OŒ¯ºds>FñcÿWC,h«W¯x2.–%±j•trSåàF‡^]ò§ ,c—zO|,]e+ºÙеƳê¤0n3âÍûòC`%R&›ºš«³ i–¤wʯ }oAûëze©ýèÌ(?öšqÑ|BiI×^  …ê|XÔÁŠ›+Ÿ 7›[{õ~1´ª’Â5_ÓݬÊO:ðJ§P9&N>NO|/Œ-R_»f:…ÙÎ’!NêÀÂ-IÖf”g]‡5NjùVôñG93¡l,ã¢@¢X##P§‚Ñoz¢àÓN½8tRÔ5õDý»ÿãëèSV#ßmŽ>ç³N+m7¼û›<ËCX»“*s@Þ˜ž¼»û{Þ}ø½·pOÙÛ\‡¹¤ü^ˆÎÇwÇ÷Bšiû3pðx ãÝqÏcc÷~ôÍ\¯‡ù?ÿáõ+o†j_@P›”«Zj™_Y:€aqé¶®ZBYk[{t´ŸF›­§¤èé_ÿoÿ*ô&n„Ù…•05~VÓN/jãsµªŸñqô,„‚dŠ¥27ü èn?‘ ›•‘ÁÓ º_9ì–ç•Ý÷Ë6à`b #H¤R:÷‹¶½Ê7_Öô›»`9íúû¿ÿûQ2÷k¿öká£ý¨´úg7}À?¤•´oâñÐp‡§;i¨ÒwÁ. 8ÐxRºcØÌüÓbá¢$i‹’¸éÒ”0R’^9Ù*-s0@º×:RFÜá`G·!”zRQ¢¾×íN†ÒÈ+rs½g$M{:Ì·?%éדfú‘V¼!e»J ÈB§ÄtÀ¾öŠQý”–IKá„ö½õ¤.¤ÕžÕ~6á6~åÑ÷õ¶PÒ&¿¬"óßõ³Y–Ïõ×oLôØI{âaLÅÆ½hÛl¾ÃpûÏ!€Ûÿ:ØW ,¶:`l…à~é§•Òd@áñÃ ãø¶Ó¼Nê–¯jsuµR_ü­/„Ï|úCZ­!éu’æòݳ8®MÔ +7u‹C=,Ï,Kr0æn.…ßûÿ.45®ÿÙ«ÿ6̽ןyâ7ƒ§žÐÜ¡.£¼%°W”´¢Œ%g4ž®™ô}Í1yaŸKiý eN’êdßݘ Ó§0½œˆû/À69˜¶ÁôÝÉ"¡¤MsõÙw¿ûÝxš@÷ó?ÿó+ÕnÎ/Fú%w,k‘–yë´îÅ&´ïÄ6µÚ(ñãÚ¥”nÞ»«cBê~/yïDœ^÷²– g´,ùAA¬iI³´½ÙVKàLûÍz’€u%"g^A{ãz’´wµ¯6Ð¥aºýXx¯ý%¨Ð‰Öö¥Lj§S¢…¢n(Hz,Õ&rÔ7×_•uøâ¾°R½¤ú¸NK=HQK¢x×éý:}ª=mÚ/W¨ê劤‡Úó7ؼ|ȇOë¿´¾òaû}SOéã4<–bÓ?ÝGIsê72üwϸ{fÝшèμѠ‘ 6[zÿJôÀá<±=À`àˆÇ“<§“Ú)ý©»ß{¥éPì…ó¼?\|ô‰0Âr~E7õ½[ã²{v´¢)©•вhãC+áßüçWÂÿûêÿ~ïßÿëð+Ÿø›á³l¸Öö­¨H,´LÓXÉŽþ¯Î‰1Ûˆ[V‘×êXir4h®½Æ—Fs1NÔH®0.; .ò‰ò‰(œË#íó?êÉuH9¼.£1›,ö™Ä]ËÞmy½ 8àÀ×™3gâaÔ°¼ŒZ–U/<ôÈÚ*|$=ór'¤#ùvBú)Í]Ý$Á6úÝûL¾±¾/Àî;TëïHêu;,µë:0 C ¥ÛÚǨ;J‹×#à¢/´·®OÌŽk™U€I—Ís5XèN‡[Í_ ·:Ÿ 7º¿¡ÅÚ‹RG¢[t ˜.oÕ^9~ŒéÑŠ‚~ˆu9}OWtKÄBåÁ¨Ën¬ôr˜¬vC“m--uwŽJˆu¯–Æ é±ƒ€fcçè®{ꌶ°ãúÌÇeÁXºKšn „õXl·Íä5 sð80p¯Nöœ¢|'Îç bÀØÎû§ßiÞýM<ÞDkg÷4}ÇÛì –æ?7KË+ZûÐèkwC]›‡ï«^ ÅEíå#ÿº4®騺¹NŒKåAa.\iü4¼Qx6ü¯ÿùká³>üògÿF8Y¹_¿ò¥Ú@wîÔ´pE˯_ùÚ—Ãìt¶Î4¦¼Ã-¥Ùe7}ñ[›²1Äc_ |`óû“O>zè¡÷·44¯˜È>ü3èlðÎÄ€²b”Ü.ê^ÙãnØHgB…7,/s¥×xýìg? ¿óßþãÀWøª5$q„߉ú% §CÛÉ·Ÿ–hkJªåüüû"k›úÚgüÝ*Þ ](;?óX˜é>&ÇfÂøè›lKÕ­ ¯†‰î›’ÈéG˜p8‚=»ÐÌaBëá½Âß sÝ…¥Â% Xêkî5]”4o ÕÅaDH¤oÚP'@¦ýh:ÄÑÔ>»¥åKa¾>Ném¥*^|OK¯ÒéÖ¾Oí|2°O£‡¨X==»ƒ ~D¥uµ^òþKxÆÛŒ%~w\§gÛîCûðr`àoÝíåtrLj§<}O3\Ï= Ã{º D N<lhp³aPâ!ÂaóàæÁÍô'}w¶OŸ<, G|çÙ¯…?ýî+¡6Ò ÿÍ—þixhìc¡q]ËTõšÆõj81"ÅšÞl¼þø'ÿ_hë„ÙÃç ÿô·ÿY8Îë×¼ô>éG-›©£ªm^O—¢¿÷îÂ}Î3µó´½oèÜZ¬)+üBúƤÝÓÄà»ËÇž-ÿêGÚ„@¢ÙõØó„‚Ófù¦>áŽy/¾øbøƒ?øƒxëÓO?Õ¸ÞÝÖß×^¶ÈMòæIÓáÛ“=ùµPÁMú‹áÀ3ÄÑ!ÀÐ~šNo"Ì/—ÂâôgµåÓº<^ºGßÓ1 ©ý¨½.Õ¿¯í©_ õ’.›×2(§|š½ójŸÓ¥Ëk“Âh(^Vù8-ËA íôM#‘–Qzô­¥Òžüµ8ªýn’Ê/ŸͪԓTtBU:ÝNŒ^Õ¬ÓZB­„å–tÛéDy¡ºý¯1®#¾í¶Þ–¾—Ž¥|“í(oœ>ci?ÿ|øá÷ÁåÀÀܺÙ3ʶ2Xl•¨p‘ŒÁiz I1Ü=ØØ7 ß<Ñþöµéprì¾ð‹}:¼Þì…ÿð¿þͺþáçÿ‡ð也f“ž'©èUºá;Wÿ<üßßýÝð£×¾îŸüPøW¿ý„3­µßM'ð´Ü"¥úó‘”5ÂØøDøû÷¿–[vÊ.£jûÿ)¼A"Í€ t£²oŸšSpR€ƒ¸×_]`Ä{øfRE¢x÷Äê%òoûÛÑotÇÑ__wÂ@ƒû6éS_äÝÓÃ*à­¨ýœô¯­8u® a[iÔº×ÂrÔ¹¶–*’êöfíe-ƒ6ïÓ gÃÌâ?Ð}¨óadô­0Z–Ý¢–WG®ª?Kš^úŒàÙiÉÕts†öÍuuè@GT^Õ‡$ñ홓R-Ÿj/›@YèI¥‰7QpWkoñL¸>òp˜ ê )è};4FGt³„~„¤^D&:úy·ÓÆcæfÓ%<íŠ:åãz÷¸Ê7ÏÐ- ÜѪÏ-—&íÔé{>!¦¼ûFß ,<°=0yð0¹¥iãï0ØöDÛ ÆÏhè¾-ÅšúEýÅOÿ­ðÚÒ_…?þÆŸh9¤þÑþIxfò—ÃÜüõp»÷Nø?ÿâ ßšþ‹051NÌŸ—–ŸŠIGµmú!Ûfb­j¯6H/-4$1‹e0Øy:óß„I ßq"o,­d²ÇPþbtïÄÉÇOÓÚwh¦Ž1”ú¸ ž%T¾5F¿£þ/­çôCL¬,'Ã3¨Jm$|ç;߉üBjÉòs¬wIN2þmsn/¶¡tÉŸz“2š¬Íª‰&Nø†Ç¶·½ü·»r«F–›Ú¦¦ã#M.Щ‘æ]%] 7—t¨F—?u¸–¥bdòµPG-ÉÏK¥É¨$oêK\ÏU\´Qò·¶~ŒIÎVÓ!ˆ–®Ïb?\D¯ÇåƒÚ‘ŽÔ‚4š“ºÃU¸0ÆJ×puZ]{òFuJO’ûzX”*‘†åÙMøŸ¶×Ù è„wz¬5hö>]§ºÊgèw090p³^öŒª´ÓÓ©ý¸ã·t¹u²˜œ3å£%I£º:Þ_äbf)æÄx@àÝq±-•aR²»Ã#e½Ÿa¢3 !mâÚ8/âvѵƣ (Ó&/ZPv¡% Dm9Ü^º>~!üãŸû¡6.ü§þmøÑŸþIø_~ýÃ;埆ßýã^¼únøÜS'üΧÿûðïÿù¿‹ê¨º(p’O‘7Aw™ª×µÛVÙ ¶b ý3më}Û=µ=©ã–Æ÷@ ‹¼š¥ßرœ‘8î³AkQ Á.KõÊüÒb\ |Ü»_y†ïÜá xP=(0°ðކoû3pðØ ;oœ~Þ}§¿;=îyÌ&9Í,áìØ…ð ÏüZx³ùJøÞÛßÿì?üwaEÚâß½y-|á¿þögÿAø@ýfS×ÐÀìò±ÄE9\`Ö–8wšàÕôÈõSö»KYÞS²ð:±ÝF˜€ÑsÚ€ˆ{Zßw½ko’TIK•:¸PË’zn©hsi¹¦ÀØPìE3Âàó•Ûõ=õ·ÌýNÛã;obÛ¤}ò¤f5lkY’›Õ‰ÐýÀÁHðÛºÚúÉÚ ·«'µäÞTÉ®¢ZíCem–,j–/q¨ÒaOÜ÷¿ÿýðÈ#„gžy&Jäb[coÖ“þ€ ,~ˆâ>ˆMŸ5x‹e–?ùfÅÎèŠÙØ¢±½ú¹Ž…Ê‘¸»Z‘Ç9V®5:›6âñPnG”©$aø!8UI=PnÚ×–Q¶•V;ÞÒˆÄFäÍ Ý·úoNK­u-¥ÖJµ“N'Ú¥w®+¥ÁA{îz“•07û‹1I6§Oت¡ü®3Ç¥®"OíØÑO?dìïzM‚ _8†îˆWðVŠçÛƒï~H ÷»ý27Äž$<9Í4éäÝqÛ #È¥_±ÙJñ¤™$Ÿ|àWtÿá|˜Ÿm‡u¿tÅbxúþ…¿óÑß ¿8õ¹Ð˜+k’Њ氊&ÊÄ„ÀÄaàÆärýúõ¨Âüq™(‡ùDLÞ7ÂøÄ!ü≓¶üÐ¥–©Ùæ DF»h ÙedÂd‚…W—.]Š’¸%I’(;n›_|tSIK` h K N ‡ õ\dÎU,òÅpúÇRÜDBÓÔ’#óÛí,b}7V%§1ýKÃÚÍu帄ñS“T€`º‰ãpJMýÕô¡ é:ýÀ1åª?Ñ3§ƒšÍu„AË€ÿåšöli–îД MåëÆC ´±Ÿþô§áòåËá‰'žˆõ?;+‰ÞÀ˜~sq§=A;eHËAêDÿ)…¢& NïÑl… õ&õmE$5Œíì«ÿ·è^h„¾§§§£Ëò«\W˜ãF‹ÑÑla±¢¥VÿËÚ¬Jß¡|€èí˜yí—«.ÝƋچ¡°ºÚAÜÑ-,*l½¬=u*äšäŸv™df÷ÄiÝW×\Ÿ©ÛzcŠw©ÙL¼4üðýðr`àoÝí å ¨ (  ¼·ÚÙ“xÞƒal<°Ø¶GPT IDATûnÚ…8)°ð¨rèÇùÊ’öÝMž Ÿ¾ü›aå“Åð³KWç\ _úÌ? ?ÿ«¡Ú“ª@ @ZDýL”Ã|€ÞÛ·o‡ÿøÇá‡?üa$?-'.ôÔ¿´Ì©,“˜$}÷Ýw_xê©§Âc=¦IigI˜ž²ÍlÊXàýüùóQzrëêÛ1+ü\nxÅC[iHÂQX+ ÈqÏd‘5#I§¤žL<ÑþEnV—‰+ÙªÀ¢&äK’š*KíBX^/§—e”DÞ#¨ˆ×4Ýá?`%Ö“­hŠt­Â- ך‰“± $;€º@v_îrwL‡4J*GW39’(íZ¾¾©HõÑ)]¿¤eFy-ª®;N>ŠO-•]§u…güQÀtÃâžþùð‰O|b”A/æ·ùïvhЖߦEœh¼LA\ç@&æS'ÿN™ã£²æ±ÒZúùHÉ7a ™¼h?èsðäš ; }7~ôÐè3óóU2üp nQ¿FTÂð @ÝŽé À7ÚSa©)µ#cú9!°¾²¬ÃóOè:.©YMœ$q–Æîx߬‰mQü0"ÿ™òÛÏi™·ðÀáì7´†îøÔõÀ’z°íÀ|çü<È ižÁ„ ÓI׃ÝöÚѯñ8©1I” Pu²r.|þ£¿Þjüµ´A] ¿ñÄß“ª8,Sy{)ùìf:Ì<2yÀ“K„èjCýÆ<â2ûñ„Š¿ýl†‰Ê~¤íô9ɉDAÓbŒwPÿA;åÀ¸ÌðŒÍû܉úæËÙ2‡IË{À–º;SØ(H­J”z éò˜î¾븯‰UEùU$ͪèÞŽk;9BΊtóy2#]Ú"ÉXf¯’èvç°æ?ï~Ü–k«Kº1ýý%PG=¶SÔvxJú NpDÔàDŸé›7nIõŸ6Ïëǃâ°_°& \€$ÐÚjéfUƒÂ_”ür2õñÇm#^ÑêÌØ”Áu‘јR°4 ?·E'ýHÞÄ%Už~ Xœ&·Œoø n«?Ö¤o$Á³4Îk=ú ×< oùvÄ¡lƤnÐLŸ ñ ™Ã­¡¥SÒ*èî„Ù S® t/WàN†ÙÆÅ°¬k¹ ·?–»§Un©ûQ™1X«[f£TŽ=›ZAßÐdõãÝmö¼û#¯\¯i:f: p$8°3­üH°âx¾ô¸c 0T˜¤$™¼<145åãb{0²a÷t a¯‘&§9ýR¿ˆÕâ’ÂUG5 hëŸüÜ?‹+¨õÔ-Yž צßÕ ‹Úà-སŸÁ’_ûL4\…d÷<ŽË·ëØ6“.|ƒ?ýƒ‘À’í XæO­>¦s3aD3ݸZM’ÏMÀÅòxDœ¬ëðÔäx8£ýPgyNé”ðäD•æ¾ÉÑØFɶêÉßml|òn …ëË6mÚïÐD¶cJºƒµÃu{óºïþãj—Ë:T1äÖÐ=©ufÇ0Z"mƒmvâØE‡ þQ6øïöÆ7{ 펉u´j»OEU7Â9¬Ý‡öÑäÀÀÍz½§R¹Óc{àÁ•A6îØÑòxúTn„á0iÜ|æ©¿ýÒôí¶v[ZÜk•ÑðÖÛo‡¯~óëRö9oS`´íè„à‰òE]p=¯æÒF/iÎ)©¿x÷íwÂ…çB‘#€:…Hù¡—I“g· ùÖëݵ¸Û” NÀ­ðzR€ÜpH™pñóäÛ mGOsév83V ŸûÔãáã=N–ÂÅsg—À—•ÖèåW£ãƒ5tuB²Ð¥-"ëÒŠùl f™0I³hœM³É.4´Á±ŸQ›Å”ÊÞgDך‘Ä6ÎÌ,ñªLZÕêʹ£S–ŠûäSçcÙX6}@'Q9:¤¤w׮߈`cfz>ܘY/¼ñnøÊ÷ž/]»­•b-*MÂÂó ðríÚµ¸”¾FÇ:/)/é@[Úïx'¬Múž1Î>@à‡¡ˆÝûÛ€”(¸ÃÖÃ×ÕlîΣ|úí‚°ðÛ†÷Y8üiW´1ÞQQÃC¸ÅŹȻ†N,ó="[(+pFÑí6MA…ëè’ûe]·ÕÑ[ШÓàœR7’íwÌš€5]>íÓ²6¤Æå'`äå1b;[mËÄu<Þóu¾ARCïCÈ!€;„•¶—${0EêÄ ÎÒJµ¢³,1™òÏ À¥ˆ”°Ï?2}¼vÌéôä©pÿŤ^`:<ûýgµÄQ”ÂOîýZ® /‡f¹zRëP­‡¥iIÞôëú™'?¡º¾N  B™D0L˜ë9—Ÿ¶ŸYÏßîLV<‘Î~ 7×96šáíƒe`&^ŒëšpøñÀó¥ó„ßüåOêtðBN>Tƒ)…hk2n.sL0wŽÅeÉ‚¤tha®<¦eoÒsºì}[›Ø$eígœ?· ð¾ö-úp‹õ¦wéŒ~| ºÇúF™³Ö EƒÂ.\8ÅD‰ÔJeÔgQ@â’.øþÎ_ø;>øòµðö»3áõ볡Á„¯F,7Ó¦n”v€Ë~4õ£þŽ` ãx|SèåYãÉ*¿ñs]e6ŒÄ¤ítÕmíDj¢ß$oQÒ¤²`Ç÷~×q£­`(?´ñ Ýìqí. à ÷ÊbhS,“Ò÷,™³ ­V×AIàðCŇ8ãÜ뿞}üðûès`àŽ~ÇÒùÓŽîAé“.?alóÎÀ@ʲƒâ¨@Žä&šä²A·ËL%ãôâÇê?â§ynÖo½pé–¾ÞùØvÝÑnø¯þáß‹ŸŽã0”É"ïî¸ØIQl2@å/ëâÇz†<œO¿0ëù÷sgB‡NÞÛÚ‡u mÅ“/üð)TÊÁž.–¯\¹'døìòQ&æbm,\½&‰Ó{o‡öÊÉPXV9²‹5I ‹R#’“1¯á´jzºÉæ‡ä²*þ(¬«†Ã …ؼ'ßä¡¶‘°mÕè[R@§kW΢º)¬nZ‹Ñâ:šzKì[+Zòí„7nÏüÿì½ ]×yç÷½}ë}_4;WER"%J¶(Ù–,[vœQƲ3™ØÉT4gœ©ÊT¦R“r2U©ÌŒã”'g*–Y²=²eÙZHJŠ¢(qAÄÞènô¾½}Éï^à± 4‚ îw€Û÷Ýýœïœ{¾ÿýV;<:o‘x“5‘¿3WæB¤ŠAž—GÍÚ‚M×âìŒ=5Läìëpª-¢ŸŠ_‹¦^òæÁZí±(¦ù( :*g(¹|  Å7¬Äø˜É‚±”{ï\é†M`îjiç,BìÇEâ£#<+†*¼„Ê“ñWaÞX .bKA.9Hƒ 2ኬp_pŽpU^õÚ âǹڥñÔÝÝåæ#©¨¥2Õø òØGjü,¤Üû«1(©\’L øŠ´pr¦˜×S‚%œdd¡‰ÊÛG~ÚΆ"–\l#¤»04æbÕ&U¯»ÌßJE…ÜËͽ ¡#I¢Ò®i^´Tßjñïnçi¤µ?¦ý~¬6?é¼z¹õ)Pp·~^W ôò_KñÌáZ®ù Ïõ Au¸TÝÕ~11€›µÔÖ»v¯ÝÿAÖ]4ôãÈÿÖZŒDv\^Ý噌úD‹h^^VséüjÛ`‚bV04ÇÔ«xå²Í»YhpÙ .Õ³B›@´HÒÁÉ!„פ§‡¤Nþ#Ak1àZšù¶ŠV¢_{†­íÚ¢íJU#’J¥Ì ".7@º Ü,âäS"#AˆCáMbH•ð*Á§!GÖ² Òª$âô¹¸Š„æ àŒQ!ØreI†åXÓ6v…zæ2ˆ®­Óµþ–ÈJ7ѪXLC»jª9í‹ ‰ø èô¡éÇ–£—Õ^ëS?¸óWö¡j²rŸKË}íÇÄWãú“?H ܼ\냤Ê:{ö¥&ˆK‘ÀO~½òºK]ó~ï[Y'Mî¾h’×ä.ÆèÛ cµà­ú%\U¡Ý,À®¶®¾-Úw©ýþøûµ½U•t×¶yëŠæ’ôªˆöµ×cd`Èb¼ŽÞ€w¯åû¾ޯ¦Ü˜ç,·C4ÐØ’ñ½Ú*WD\ _LE¦vë-ôj‹§³Æ±Îók]§ßµEû´ˆS"‰yéaH X,XsqösyrùV$•ÄE¥ àå KVL/Zº4mñ"N%$xÄ\‹¦bU‰=ËyÚ!-¥œâPܲ®ÖC¨÷¢çŠ´KcF@-„-KÝDŸ(`Wý¸iŸè#õªÑ[%OlÁ[¡øwYý¨~ó}}¹ï¯]ÔFÝ­ÐÞzß ÔÜ{CÇ[ö.zé}ñBí>̯¯æî¾¦mµàlåç'y_O\ Cůýñj-šß¬eµº‰ž ó :ûEç‹IiѾŒ7‹W¦5‘@Ü1&þò…é õâªåJ´¹8¼W½Í ; ‚ú``‘G¡¤Dj»$l‘ˆTU'!ÿÎ ˆè·¤q¢•häi,P§kÞ<€Ó¶¿ÖŸ§µßWDê&(A%ÄŽPOTš, *@ê–#@-@²UtaòœO²Üìa2&H?·h1Gâ$z—*:Ž:¼·¿Ç:û6b{Øb¡RRå•CúFM¥4udôϤ»Þ";Be¸ˆâLÔÜ,©-jeh(89*x©¥h£"z©x:9»D·çæþãûNõVñ4äÇ…Šûsüm׎Úýê?üþúzíQ àÖ^Ÿ^S‹.õ¢ûÉCÇ.5iÔ¿¦‡ÝÀ“/ÕŽjý«]ÙmûÉRgxFèŸ?~3€¸•} º©¬Üïv¾ÏÄ@V«ê虫§©ª(ºŠÖa*^¬¦Ûr̈û¹{ „¼Ïm¹!£¯\»hk ¢v xDñnmˆãe9¯œžU¢‡:§°J'íÓ"Ð&ZúÅÓ½¶Þ¢·– ǰáR:6¹`´åÁeì:eϲ¾9>Ó3–?agϳÊÜ8€³`áFSgÊš±BŒV°u[X²…Å+žXÀ;»bí·í²öf%¥œã¾Xœ¹jÈy)œÛq”_V*ušDþX²W òõÒ¶0 Ø;6¨Í¢³/¢‘h漓ýΛx­ú«¨Îê;÷,¿çµÕöý«}:Ï_§ßµÛ~íµõßku·öúôšZ¤—¾¶èÅ_¹Ï÷“ÇÍ<9¬¬»¶µÔNîjo‹ß¿¨é𛵾M¾_>ȵh¤ú¨øµ¯¶=]½M—è-é‰$'Zd—Ÿžqê0žÉ®àîÉMÄ„/ºø»ÞZëÊ2CöãMê=9vÎ’Ñ’%’N½,P"€&é’è ÏTý&xÍð¦s<0mý==Ej·õ[%Œ§u¨‚­!KŒ„Et^¶XŽY˜˜t “Ã69rØ–ÆNZc¸d]]ÖB—dg£Å›ñà%\ VƉàì¹Svöè1>{ÊB]}¤Îz—ˆ8 ¸gò[OÖïåaáêñnÿÈNOùfU¼YãI¡’˜%¥“Ò.ß¼úÌ*]tž–â{aˆ·|ÿ¹òý¥þõï‘[/÷ãÊgë|-zŸ|»ý9+·ýþúzíQ àÖ^Ÿ¾ëéÅ¿RÑ9þ¼*¹ÒÜqÕ¯6ý‘¯·¯‘o~Û¯Å(U¼A¹ß3¬Õ¦Ú僮“¯‹¯‡§±ß¯l n̘ˆ©Jºä¤ol§ ÔšÍVƒµ:é Ìm/kåü®[r-Z”iW p£ßÌ^Ã8 tt4:0¢¶ ”H•¬ã Á"Z2-¦^+}ü{¸’Þº¿öií ÎÈ¡ØFºCŒ…c‰•Ó]š¶Àü”M}…h:³ÖßIàå ƒ–êߌ¨«ÕuÆòYr}F“¼&;áxúäe§çljd’<¤ –ÄF#Õ†°)’ñ½ýcÐÙÚUkñ®ÿ–Póº<³®Mò—4RÏ©JÛjÛêÆËò“<}n•ñãûѽ+ûpõü¹Ú]ûûRÛ+.­o®1 ÔÜëÐwÓœ “ý»¹ø&¿Fñ£d8®ELÐM|b¾íZk[ûà2äA©}õre ˆ~¢Öµ4•´IáDtL€YÇP|4ý YÔ/¢¹ A”T1~/Y@®wå‡ßÄg(Á½Šs{2/E“Gj¥xÅŽL´ñ€VRII(5þD+¯k½äM÷ÒùµK-ÍuÜ·_1€[雪“4RX°ÀÌI+Œž&~Ý’mì´þv3Ò–¡¯´âvs¼ŽFÂŒdmq.‹„-GJ°Fàº0NBw2D—°çC@'é[ÄyEªj ~»ò¡Î\­ÈfÏ^ÞCÑAc…FèÔï|dQíŠþÝÕ½jiS¾E$p+i 6\mѹêëzY¨¸uÐçz¹=óÔ$è';Ïü±K1óÐ$¡ÉS“¦ßÖ½®až¹$¥ƒ9ìqˆr_¡:‘5Ì; @¬ÜX±œ"0”( MžŠy¼è”ó²úñ­¼‡$‚/“£¦ÃH;ÌñXTÆÔH-xZ…I?’ÍÛ¿ûÝßµJC‹-D%íX´žhÆ2 ä]ˆ ÚtôŒµ£¶K’Ò¨©¡ÏNNdœ±v¨4cÿòþ›àßào0µ ÉŒ˜è«ÁŒµ²èìk°hºd»®v§h¾êdͼ,z@GkåZD¨‚ô†¦Œïpñõ÷mðÛª–ÆISsj˜³UŠy K¬³`(‰4ˆ¾" …ðqãôÚ"†hYÄ…ˆEƒKVNuÐ7KF-âr hŒ—$As€¿h†ÌŒÃ û#¨'ÝqÎ%݆…C8`®Zòy¤QMÍœ_±ôRÆï ê•ñAÊ@9ƒÃJ8Z8PÉX¤alsÞ+Îs8ih3c˜PåEÆ+*Å@Ô–JŒG²Üt|¬ÃfŠÜƒü Ît ÷¯fäM^•R›*ÿ§ÔÎÌ̤:E;vÎÆÔÿÂG%·Q-+ª>‰2–Ž5Ût¡ÑR¼_Êç­ræ€eF^³vÆñà÷;u-úlîÉMÄ=sôyï×ÕJDŽ,j'ÏV H.d_‘> +Ï‘E¥ºV[üžêþ›õ¯Ÿ“=¸W¿éÝñó²¶õ[ÇfU4Ë–Rs¹®Wñçë·õ»^Ö.ª³ÃÚm_½eWA1Ý«)7bR(Epÿws2`j„a Jª-'Þ$¿9Ì‘a–lcÀSqÒ&8 1 . ` ôU^Ä®Sq3·Ä»‘Ø¥´1ß³ãnëÚ² ²hQÒfÁ ³‰”%xÞ"Œ;BÅr¨b÷𴙉óöýoaF Ûßþè nÚj±³ÁæÍ$#çÎ\´ËõKçnM¯¦/߯sÔ>I•$ ÕïZ&£qW$¾X‰þÎf# G@†Ô|%–`qn†0ªÕd÷ Ì?H¿±O`h·̦«LaY²8È…8­>Fi»jS£ô{ À'U]4†TÇ´êXt°¸Ä½‘ÔRjUê-ÕWSé‘.b_¢c|kýy¤jRݧ0ò'j®“j VˆéjQãUhbà^(þ=ôXnl\Ý«yáïø“ûwÉbЭ6¤§ÎYqvš‹=]mNÚ§2Wè œ¾Ž‹$âWó¡9Ôº4`ak¯²yòlëý+\+a@5K  H ð‚2°Å#5ï±|¨hcºç2@­V þ×KQbå\±rûR×Ô÷­m ÔÜÚîßëj&Ï?üdáö1Ñkí÷]ÏCJE:‡¡1ùa¢`(ÒÄ>ôìÌ¥Ì×·c,° M#U ä—Í,e$4Oµ ȇÓHçŠt°T|H¸‘ê­V”Ã4Ëýœ €XAª“Ë –Zi_ ±•çðÀ$êðÊYRÅödƒHÕ'W¦-Û4»@x‰Õ‰½ÆØT…ÖŒYäj瘰 ”ôÑ¡" Š€­“$rLRm»÷«zŠ;ïÝü!àß%ke-N^ØôØQKÒÖÓßg}ÝT IÑ9nñ}ãžÅ~’b¸öFq6)có–^HúÉ€0½C‹îƒ+Ç8ΔFzw#ý0ë kr’òV¶4ѽçz/õfÚüÄ+¶Î‚|¿ŠöZTÔ÷µ}á÷ë˜?Ïí¨—uKúÛ³n»¾Úp?1øµ'‡Ÿü~¿í¿gk¼äp ©K5ÅËÐZžgR¥JmX„QHB" §Th)l_¤µ‘w]+Œ³ Ë#ˆECš"&.IN†/µ Â A9;}ØÂc#¨ôZl qx0.¥)âpIM NÛZàê2 88Þoÿú…¿µ_Øõ«öؾO؆ö-®~NZl–Ääßæ„˜¼ÎD£•tòê•ûE?O['5šÖ===¶{÷nÛ²Eϼµ‹Ú£Xpj¿W iŸŠŠË/ jÏå–S–pżéïçÅg 1›š³×OÍØKÇgíÜÄ<¡/¦,”™2kNÚFb“m°m›ú¬¯£ µ^Ž ´ó„¿zZ~o1¤La¥šBçRË1–ÂI2<^}ó,^—ãvìôy;?Ÿ¶ c (c­Íäpí°Ûwl·}Ö.U)Y Ô5ĘUÄÜr°Ãïˆ$M¨|Õ~ßvõ} `…>Ùà´–ý›ô«×þÊGóؾ5ðÍшʿˆÝ[$7a½MÄr#7+6nˆ:5„Lur㔾r…íïF4Î*ß™ÉóN­«\£­Ím¼:k)Ï«©î=Êó!"yÜ,·›BÒD]\!šœ@ÃkÞl9ú[*tä±WnÀ?ÃÏj¦ÆFí¶oú…~YÞáÏñï?¯¾^¨¸õ×ç×Ôb?Yx¢µßwM7ºÌÉQGJL$ê²õ¸9»$/Y#›¬a£–½L‹³Œ5À˜ã¡¨íêŠØKm1›žY° ñ´€{رaüÍDX#EÅ–(•ÑÙÃöæ ¯x4h?óÑ/ÙŽÄž Ùb<ƒÒ’H’\ã!Û?·ßþòµ¯X°³dÛ¶í±_¼ç·¬§e÷N ~åžQ7ÙßåóóvêÔ)ÇôDO£Ú¦zZÕóû´Ö¤-‰‹Ž{1pÅ·’Ú1 ¸¸™‹o‹¯cm;µOjLÙêh¿Œ«(j»x{Ýd&CÂrto€.vS²³H“8uÂ~ðÒA{êåãöÒ‰i2ЯŒRœ%ì±R±·lKo·=tÇv{ìž=vßÖì¶ ÛÜ4•¾f—_‹VP ¼"|NærvððIûê÷Ù[ÇNÚ‰3£NÂÉöL¦˜ @Û}{ŽÙGîÙjOìÛnímHâ–,»„´‹q´TT$YK}ª>ÖóÜ€Â]u¢‡è"‰¥ÖUÚ.ƒ©ËWÕ# B‰œ&‰·7fÝÍQìë‚.)l ±iÕÕŒC=Ëõýä Û*Š!¢?–f§l„~Hó1µu`ˆw¥ÍÙ&Vx't;{P÷žò^¤P•6„󆕨Ǝ¢‰„p)Øšfqú¸*úDšàòsÜÃÖéÑ]‹úÀ÷ƒßæÀÛö‰DÕq¡!UÀëtÈ\h¶{/lÕ¬K ø Á7ÞMäl¸õòë÷ùs´¾Ô¾ÚãWó;óV€Q…XÀ¤ÉLéšòD¢µN‰pÁš#ØA¡ÚJ`òÄjŠ5ÚÎFûÔ½ÛíÀ[Çlÿ‘“–™wà- óÔ§¾ª4÷²DiÊþü™¯Úàï}ôÛ}m÷[ƒ¤ áFËñÜC¥—ìßþø²×þȆ¢»ìŸ=òûÖÚ!Ó[ÄÌ*SÖ­sÖÜÒhŸ~â§ì—~ùW®¦™ïþg'ôî/ÿ ¯(ñ8ýÓhÕv†¯tZ˜!b¿ÀqFîxJeÊ8{>mß{å¸ýÕ÷_²ƒÃçQëêè¶ŽÖâ‚…lxöŒMLLÙÔì°:;k±_ùøÃöS÷í´Âa\Á‹A’ 9¦Tèä0ñÎ"-V§^ IDAT6½X²ï<÷šýõ·ž´ÃSA››™e …­‰[{{»c 6>>a?xá%=…íeÖ~汇­3ÙjÅ$[|HG¨B;5²˜«ý!ìßôþèŸnzp½qzÕ^îú˜t€ç”øÐ°ÅIk"óCO[;öHª¡s€¼²-õï¿ó˜¥NîÅ©Ö{˜åÉÌ0~ú„ÍÏLX#æ}ƒ Wö/-Tê5Fõžé…X'y—BúÐâVséBŬ¡PMܼÒv-'‡/AsFÃò“ê+õƒï‹•Ô¨Ýï×ÜJ*­¿í:€[}þ¶ûÉàm;k6tÜOï`«¹µûé™XE*'˜YfÇæ­¡ŒH×ÀÁRC‡ù¦Î2E$%Hjš[ö±]ƒ8 ¾Âî))[6좼 aÒÊæ*Hç2KÖ‘Üfwl½ÇÞ<3nß9üw6Wš³_ÿøc4Ýš6oß>ó¤}ãÀŸØ‹o}ßöôì¶àÛ¸[užYƒ´³H]Š’Ôp¿Ôµ©ì£n`q9$Q·rQÿz‰’Ú¡±äÇœÖÊÓ)•y»ÂH$†ÔM€),Ñÿóر}ó™WìÛ?<`‡ÎÎY/R¶vÒ­µ­‡+ãvîìQ;~vÊöŸ·ã#çíoç!܉í£{wZ ç‚ÕJúJUÂnÍRÍ6»X°§|оþ½Ù+GÇžlË`·Ýyûmè¶öÖ&´ôQ;snÂÞ"¨í#gìÐȸ}åéŸX¼©Ó~þ;-.‡e7`ÜHMÀ¡©3aŸÇâÚMÛâBIåàü»%`« ¾’Àé\¿ë)Š™¦1+ÓÂVìȘ ä ’„áÁÍ»¥ú¸ç ¼Q$ÁVqé¿lüÔi›>wÖ9> m±XS#h;c!œ>"€^yÓª N%L›ƒÐ_`z—{‡1_Xäƒ “$ÙjWÁ–'·ô©Õgº®Ó?¾ïý¸XI† ý³|@Û*þºåÝõÕ:¤@À­ÃN¿š&¯œ´½rßÕÜçJç(tˆ<˺?'Gø*XkÁª»›ÖØ"àL^oˆh$MÉFdð`«Àt[A»ÇVKg±!K´ãm' ˆT…IN¼!Ð@Pæ»ùsa»ûöÛíïÿüoÙØ÷†íÙ—¾cÙoÍZÃ'~ßÎØög/ýž½xàe{pË£öß=ñÏíË/m¹êsÜ=†ËÉÓHˆŒ›¬Ä3ñef·ÌüD#?Áê+iæ'i¿Öq1µÚâ¯3—äæV.lòBõ+œ¤£:Êç¶ «¥p‘wêÜ|ÎþÓ^³7‡'õÑnyøûÏÝf»7£Œ5Y!€(n´££ ö'O¾hÙÊ!¤gi{þÈQB½ä¬m°Õ$PîjEà­Ì˜S ‹b&k¯½qÔ¾ñí§ìõ#£ÖÔ;d}ñYûÄGýÈ}¶¡#é@¼²(äQ“>±ÅþíŸ=g³ß²ƒ§'í…רƒCƒ6ÔÉyŒæ€)cX@(Pô‰Ö£Ñªª4ªÔŒõ»Æ‚OÆîÇÁjõ¿Ò1Iñb,èÆczËS;x“ÝñÛ1"uÐsݸ¥n3“66rÆrKs¶qp—µlÚÈWLÐæÓkjm°rFð›4]ˆ¦G'®ôUÊ»„®í¹3v~rÒ’&Nµwþ…ð* Ù´¾®8^FÅ»žËZ/Á÷ùÊyÃÓÈ×öåÎñçÖ×kŸu·ÆûX/¹^z?QxFªíªŠæAíÄ †¢ód¿¤ØTºNû¼A:›×UÒ Õ\âÉÒ¢u!që‰d­)˜·Ï-u&€ «Âd_ÎÒ–H£s6`»V‘J¿Ô}{vX!„gbØýˆ—2|m®ÐJ¼ªn$ už³=°Û~gïïYËâÿb_yþ/l¡óÙô™“¶tbÌíÞg_zü_Xø˜ùߥ K]°Û‚Ý"md¹ ˜+”¼´x¤–~+‰£c«×ùþ¸¤2s}FEj…²£tŒŸ}tñu½\=–0’ï ƒŒàƒØKå] ’G2¤kç–RÖ‡¶ôãwn¶V Ö*8(Ä£–YŠŠÆRG°á*Ù§öí´/|j¯mnâ 9mEE±Érq»­#eÿäsÛCÛ»íË÷´}ëÇ“öô‘¸Í|ëMûÓÏßÐÀÓxf ó:¡£ÆK54Y‰¼ž¤À¾‹¤ì%B…4Åmÿð¸}óå“öÊ‘ik†ØÛ£ ößÿÖ¯[w[“µ¦èðÌ,êHjBJT‹{64Ø?û°Å"EûÓ¯Ë~òüíÄý[m¨g3yOÉA*?l:óØ~…›Mö±Òö7¨gOͤ-ÕÚrÄX,£œ8³\»{ûm0Y¢óf½£h<¸²¼–tO§iSqu\)³ <>NBúÌz‘ôáNP@îƒD(^WÊé‚ÉË1—jLY%»dgN³Ñ#¯Û úí Ûï¶ŽÝÙát…ji” |fÑrHè³6‡‹é9K%#‚·.¨P|VÙr§•Î>i™³¯Z/iº¢ñV›€&Ç38 Ey7ƒIBÉA)‡b©$cDÏÈNŽ*®u9½~NU°qÍÏ~¾¥ùŽé·?Wçë£HëzYߨ¸uÚÿ«½ü:æ³?Ïo¿÷äÒ—º !#ðNSD7…âuuàa2wÏÈFG JÎ LgŽa9pÃùA$v!˜OaqÚ¢óÍ·’„›»)]Q…XU„åfª}Äú[¶Ú¾Ÿ°ñ¹ÓöÖ‘ýVAm¶o×#ö‰ÝŸ³­Ý{`*†Šá7E6Iž^zä×ÃÃÃîýYIÍÊý.Xþ¡ÉZÏÔE×8/H˜£R)I•‡]yÉ-µ]uZ¨f¶È┤eLTaCÝ-¶±·›5ì çí€(aaº[âöÀm[ÀÛMš§^€W «2N<>$ѧŠÓFæ¦Û»g›Íc˜_&¸óá1;ýò«öÆî˜Ý÷n ãÜP¹(O"è"dh\%[”){ý̓öƒ½nó‹ûÈc÷Ú¹“ºubî…TIc‰Y ´Tv(†`¾ôÍžì¡];lôô(IkÓg8»Râ»H}ÆCŽ4 ĬÛÜ×n½H®Æ¦Çp€B_*bÆ€)I"õ¤qS¸Z>\=éÚÿ^iüiÌ¢g&œÃ uÆùãôÉ#6|â8õ®Ø®;ï´ÎÁd3!–’¶$€³Äïlg'Ƭƒ÷²!ÒáÀG€¾‘]¡ ¥$q h›jh¶ N9åy¤ÙŒé8Œ[‘N–Œ Ê€G½Zr´Y@—tc£Úöë$Àµ“ì¹BýàçŒ+UÀ÷©__éüúñµK:€[»}{Å–ù Cë•“Á¥öé-:毽âC®p‚öÊšiÜRˆ0 ütÏp~‘À \8VÇ´ˆ‰ªÞH-´&\)b$…ŠE!ÛœHC„À°|Ñã‘sYñ¦¬ÅHôðÖOãWš°ÿã¯þ»íñÝŸ,üVU-.ó‚°žg¾í’<ªnçÏŸ·W^yÅŽ?~¡…ž†µ´ñû.œ´âGíq7ÝãÆöàƒâ»mÅÙ·Þ¦€A9Óé´ægg ³¡hü2â¤@ÇÞ‘Ý-mÖÝÅiÀ’:¤²ÍQÛ:Ôf_øÌ£ì/Ù–ÍýÖ@²Ü,`Šs¹^ضˆ§q1‡¬•{µ¢^¿À7:•ÃI.ocçÎ1Šz´ ›:½«¾Þ’ÂáIKK©V;?>iiåOM´Y /EŠÎ¢öVÖ”°-ñ%¦'Ä¢ÿç2o@e…™YÅÍwŒá˯íGý®Ý¾Üuõýk›u·¶û÷m­«$jA†NòÛµ“Bí>Ij½íÆ×±áT$|±Çñ˜Gýº˜®X¢­ØNº/I8¡-÷WýôqWs»÷‚7å=Ü\G{ýÚÏ%~}©J_èÓK¬ï[7¨¸uÓÕïl¨›Äß¹û’{nÔ„!—Å™€Sˆ¢­9Gd^ð À›’qW LNR91GÁ¯xmËÉɨÎ1èR>ƒ*n >‘.(œÄiN–c9x À¡&ûìÿ%ð’7ñ&qá Œ&•‚qsK\´¼ºSu‘Qø¾}ûôó†=3„:ñV.jƒH®üžsnñXÕp½€'cOç Ù R¨<'l‘fÓ3Ê¡Gbš¡Ï¦È—$~˜â§ARf• ²,us€@»9Tš‰ ûËy¥™ ¿Í îxK{£mºm£5´¢î+*ý9:œ‰”©Œ*7‚=0qÒŸ9Âc—uß}·Ûݺۇ*¿áCÃv©Ñ’¢%‚CKó›¥ F'-e;Åq|!8ÏNÄ<u>à´‰¬1R¨†£ º––khë¶% Ô¢€ÍÒ§"ž¶ú¨Ð‡œ ¼©À–ÆÞ.$ðìý¤6)ö ¼Ÿ‹Øíi»Lpé$'‚š|ظѨ`Ë’`*›ïm{¹RVw/èì÷:°È»Í;äÛ'G"ï±ãDƒÌŒeNXcXÀµ…´bô^òèuv"ÖM€øþ¢™nµó±ß_[=\Ç´¼ã£öùõß74÷ÕË:¢€&?9ø‰CÛ¾ÔNÚçÏ÷FíµþšëZóå9žÄeÈÌ¢8pò p±Ú¢.ÔO7ñ4YôÜBbpÄj¨Ö™v Áh"0£FîE$4³0Åñzê;ß³ÓgN’É!fEÒ")V\•]©ÒNCEÆó3Y¢÷a ÀK üF©ª±–m’–¿’ÅØ"¤¼‘¥Ú®‹}s#Ÿu£î]U•.¸attÔæ§§ì`¶†]šµÉ±1›CÅ V"î¢eâÂÚâåÂÖ¢¶MZ9º33€Qñƒ° ;5º5| •^Wo—“vbƒÕ×Óe»²wÛëêiÆlnÑ©ª¨Ùîb©vPF£@¾~æ ½Ihóg&mòÔ9B„œÃù€+$Ë–¥rY¤VÈ«`†ºhHª—$-òuU• $™¨v+Ž£CÈÑ »o•NØù9‚c+×N\5I\¥‹Vy*ê{Ç q»ÞÕ½¯µï7ÕJú»ÉAûxwšÛ@kMŒÃÙóçlÿá.Û–¡­ÖÒ”LÒG@÷4*ÖqŽç‘jŠæ%lù*8cH]འë½Ô‡‡løùS@òYBbÎ[Æ.Å~£ð7a\±à|³5ÙFË£z.ò¡ÎwôÕ»ìêëºF×êk¿\®‰:^Ûïè×Ë]Xß¿¦)Ppkº{/Ý8Mµeåä c+÷ÕNµ×^ïo¬ –VEÈ ”Q‡ÁPļd0õUåw‘ýTœE$/ ug¼4Ï„Ï]`~a`º€{‘&+@ÑÒ+=ôð^ŸN˜ @¾H Ô>¿AÂZ),dæIÕo¶‡~Øqå’b„qoµß«O}˜‡ëm»®@ô’½•_ÔU€è ð^<íý¿‡Ú$ÚÕfc· ùšÅ+µd‡ÐWW$¹âŸÔnÑ·X2Òç’®¢ö–-”Ô¤†Rœœ¸<ª=bÑV½.…$X œRòvdrÄ"‡G”cÞ1ÎßµyÀ>ÿñûíþâ'I“E¶bË”õ\â Æð¢\ZÌÚ×¾þ}ûãï>eONIÀÄø’Ë cŽ{VsøéRvY²ÛD˜KÒöX…¹v*ué°€Jõž ÀÓ¨ݨ<‹ªñЈOTU/™ nqïZ_o/RA¤v¨P«ïÚ2þÎî÷ï­[Óµ€HïxàUFu©±#ïk [·¶®>›=mgÏœ¶™óv‚ ýä²í ÓÄ4Þ:zˆŒ ¼[íM€T*Hèc*ˆŠÙÍ-UñYõã‡þÊ.Íð.#Õ¹¨CŒ(ÆxSÌ:¸aÒ¢ÅrÓÖJ¿¤1£HóáUä–áÛ*ÌÖZ-¢›£ ô}æÛê÷ûm÷‹ßW_¯O øi}¶¾Þê Ð$±râ¸ppùÇ•Ž¯<ÿj¶•–HÚ2B—ŠÆ}~/G°wìXŒZ*T¾ìè`7–³` ±Ä‘¶qe5 ž‰aðûÁáÞÑxÁ~æ3? &H¡BÅ*q˜¢€VBGª¡ q]`a[‡„ykRjÑoÑɃ¯*ÈÒùºàbY9é^<òö_º—†:¢ç¨xÐx«30µ'Í”Líðššš²iœ@dÏhdÙ 7:îNð]dz…n8O*pÅ)“í›ô—bê’–º"rc¿€Ù ,9îv)ÇÀ®ÈM‹dˆà9EÆ€çCMŸ±Ÿ}|Ÿ nìqô^´@º-B@Ÿ#UֳϼhGŽÞ¸Eˆ€·ET§òZu mUM/©u ]R©’ÕIŸÔO¦²«S}ƒN%oj6µŸ½Rákl¹€·Üͪ9sÆIàº:;ñÎŒ9:i,)˜®¼®¯¿Uë¾Êß}"¥+éCHã/Óö ì%Põdè-;wnÔÆØŸÄ“U±ín¿}³µt¶ØÈËç][Ã1à,ÒUÙÒ¹FRÿ’lI“1hÀåëJHŠ' 'B}Œu5%mµx€ÜÉ<ƒ¡“€o…cz¯E×õPü|á×WÓf7N®æÄú9k–u·f»öbÃ<¸ðàCà@v.>/ãÅ3™.Åq–‹~‡ –«ˆðš—C.½‘ÂjòfS½ÞŸ}éu$ÚÙ ?`q¼Ú$QË·€TEÉÊ» Ö Pj-ÁFá~Ø¿8=)+Åù®$až0LfÀ^ ÞÆýæm[ăÊ0Ùv$$D½/gÆ™üá 0€|™‘”EÛ­߂ݒê‹ýÓÕà ¥ê)•y* f€©«q•B€9ÇÄðÎSñ4 u­Š§g-ðrjþøsjv]ög­äÍÂÚ“UŸ•çäå ð>×£ô#áB VªÐKä­-ÃÄ•ê¬Í¢‘°AeÎPèŒ,êo¢ƒ!I¦ š8IÓó¹%²¿ðœº%x«ˆ7J!ŠƒAvÜ`óÖH÷w“Í`ã¦vìÇP‰ÒØ—Iz§¸W¢¿„Œ_ÑC}S‰ä o‘Eõš±ù¥<©Hó6Iäÿ³¤¹šf½ˆôG¨0ÔÔaÏ.Ú+‡Ç¬·­ƒk©?]¬díI¤>Ͼù²½Š§d9ž’þ–ÈÏUú.âÃut>ª«†$ñã, Æ“ÂÛ(„-1Ó–ßõ¹ê§x^s€å³Í#mššÏÛÉsÓ6…Ä1úV’9G›ÀRÎNžxÃ6mj±¶ö–D –)`Çø¯@sÁ˜tNñ±ÃI‡‡1¾#$ªŠvC™ ,Æ{C‚g<cH=éÄ@xŠU Äõ>AÓ26¡AÀZõ&žÚ@lqoçT$Ý4mi€öÑ;wX´£Ùξõ¦=tœ:vÚν{­OéE¤Ó Cänn¥/ùx¢OdÆP ÄH~º°$H ‰ ·ÄDÚ—`ç‘€G8®`.Qh²™“'­¿€+[/n- $¯ä] Ñ Ú¼†Š+¾IšK5ÈöPãÇÏ7þe3Ø>þíóíO=K&€-„Švüä #…+ú(:Il9Ð 6yÓ.þ[‘¼¨MÑýÜ'³;vÙ¾ÁJõi²$N‰D„¸f8ÇHâX-#åóÅ÷‡>l2ÿËVrrjÑf‹6:µ&LÛþ7Ø^|É^;2朵”Ö*‡-g‡gRmïN¶ ­¶ŽBWÑ3Ìx,ÒiìÇPxªI+'/mþé=“ÓÖN) 3íR¿ÍÜu’b«'ôÕ*«3/Vß7ãmëH,e]Ý=Ey‰¥’Ù/.ÌY#& 1î7¸a+’5€$t -â6ôC)ë>ºr3rp(~›¡ï(ïSP¶Œ¼Ôæô^}yà*DZ$è17' ГóýùNy[›ßÏ ?f®v>­­Û»¹¦öúúï[Ÿuwë÷áª-¸ÜK®ý—;V{CŽ&?ÙÔ¿Òow|Cù ¥.…}TUO@±0Áw•ç4 .I`bçdÖ:O»ô'GŒ®R»9EðobâÏÏMÚÁƒ¯Úüé6ûðwÛŽ 0™¡7âñ(”‰rU¶“JZ£zh-àæÛîö)ÃÀ…ŽjÁï’†‰ÿ°F ÷—KÑÝÑUôºÁEÝ!ê8pÀ³*0} 5 oa‚$TðDdDêföP5`ìMH‡òô›•HyÌp]„ø{s8@ÃÅù’Ôõç?ú€ýú/ý´mêêG'n®ôSUæNŸ´!£ïÔ?^)0N3$GeÒ®ÑÝqj‚4hÛFú¾r;÷)ÛÎ; H{”\©£–#¼~è•­J•ËH¤‚Qœ'NŸ°«±%R®m¶ÿöW>c÷Ý}‡æPõJ¨ h@5 !c2SÀ™¤Df‡Ùó“–Çk·S*búŸSÍŠ¼Ã|?!™%Užœ’¸·!Bdˆ´ÃÐYRÂõPü|TÛVí[Yü>?Ÿ­<^ß^¨¸uÔç+€ŸV#?§öZ¿oµëü1± §Í}ý3OÃÈ•Š*‚ ÒçăUñê5bb˜Z`ZLd•p£ÍU6‡®"Û¡¥)¦,ÚåÛ¯Nq,j' ÜqÛ&ÚºÅ"|íWšÛ-‡ªˆ[;Ц{ûz{F«}ÕçHÒWefe¤Jª®"5™¿Æíø€þÔÒþý®B&H¤>ƒí+·EêÎ8#…Œ­…ù“È!BÈ9ðp ’ÁQ`ˆ¹eÀ· ô¥æ×mµÜÖÞlìºÝ6u# Cñ@<—Ë¡ ÇÐdZ&Eð^¡Há,m»5@"è)Ò$YF¨‘ ©Ød?†e½=tç{äîÛí Ž“m ±<,™EµŠ×c% ˆJ¶ÚØÔÒAÚ…$éž›íÎ íÀ>®B\Á×,–R‡¸¯>2‚€½i¼G܃«`GGÀ7iµÛ7t؇ïÞaõÔ 6<#Õ8 éÓÜ|ÆÚZZf9Ñ•)òJTÓÄÓ»ã$ÔxÜ2þ•µDêN©Uó¤³%SeI¨P')2£Ïͨ3¸ÓuRýº,z;J^öµÕP$I6†A¼q3Øí"ÍÖ 2K$,ÒÔÍ5Py˨:;EI¶Ê¥*PÞÚ"OßE€pêª@ÊxÏÍO±&g Víc> € ý-óÌ,Ôk¸øwÛk.ÕTŽŸ‹Þ>]êlw(÷ IDATŠú¾õBµýv¬—^¼ŠvúIÀŸªÉÀO~ߥֵç¼Û‰Cƒ,ãË–‡ž°²-$P¿%`XRIªC…8‡³QÕÀïª>T"ê4Î \ãë<:3^Àx:²9ìÜ^²o¼øº½:2c…†N ¶÷“›±™Éÿ퉲e?¢¥¶MRwUmüªé|–ŸêV9R Ý åR}§z­Ü#ê*8­®Ð_-¢] Ö€ôª ‘â€)Üj‰u‰~,#yÑ¿ýŠ¥%*À çDè·vb´90ß·ÜwÓÆ~ÂT ò õ vcŠ'æ$lJ¹„í›iqƒB£éâR´°…Sp_©ò䥌ç#1ÊÒx!1ÞîÞy›»"ŠŠ²H–‡‰±ËÙ¶Xœ[肨 %wò!á¢|ö8ø±ˆSîØoUoe@E \i<ƒDXô[Kg·`­ŸÀT¶$dœ7¬îÙu›mì±PïÔeZ,o®«5# ­{ÐfÓBL6lËœ›­ôØz?xxj7WðÅsº‘P8å4uô—¤T€RMœŠmŸêšç½É¸^xÈ”òʉ™ù»j–ª£$kF¬¶Í[‘¶ÚâìœÍö…H¾T‹`)ê}aí.`W6€“$²O ¹ •AÚȇêpIÝ3ó¤âš'ˆ2LB«¨‹Cd¹*Uðì…š«Vm-ÔX×;åç$½ÓµÛ—j£—Àùk.uN}ßú €ÞèzYÃð/y-³÷„?¶Zóý9º~å=V»ÎÓ¤,î+5Uurb‚’ ª¢8ª2©‹"bbÃLdŽO‰Ýб‰Ç ZÉ–HJO`QV>Ï[lþ a&`ÆekîÙˆ}Ó¼ž=o“0ˆ Fà†´@Æ÷úSìªåâ²0øåµ˜É¥J /9…*¹‹ï¿÷£nê§ tÓPæiå¢ôW*”wÒ·2Œy4’¬*Êû #%j‘QÁ¦Ç„‚œ œI¡6ò60Øgý,DvuQûì,  "° 8 Ëû“ò¶ñ§Aų4FJq…xÆáãJ`¢Â¸Pè|&m»vír÷Èc¨ÿæñaûß~ÿ0½#úŶ Þn[·m'y<’AµÕí®¨_k’¶åI®hHºöI© ¸Ç£ö“T®ª¢§˜¯ªÃ˜'Ôú4ÈÒS#HþrÖÛÙm}8FDìÚU}Ø€ƒÈJÐ%‰`–À¶H1 d,Ïì ÉÞ%Érþ¹ô@4†€¼‚ÍÒG H¨½)×]Ah@ÞäÔÃý˜EâÒù"s}(¹÷Îï¼ÄZá]–±¼$ia$Û}6Ù™Çì܈T©cdÙBº†´:ˆŸ¤žzg'¦løäqž]²¡¾> úÊ8éSMéÈ 9>}ÉÂÒÐè4²W.×üÀYÌ!ìô1°–KuN¬Jxý\ëÛ«cµEÇýt9µë¿×%.¾Ñë²ùë·Ñ× j'“•Í•¨(iÐÊVAB oì“S {œÆÌb4 7ñ‹ë¸?_v:9âT‰]6bnÜ‚³#DŸÀà [d©‚’¶pRL½ñxtÝ0…bÀKÂIòCÙ$qÓoM€²©ŠÇܶŸ¥J•G˜ŽwuµQ—j½¯ÔÆ÷ë¸ï7¿¾ÑÏUdi.ÖAR› ÀVy<•5# ø–1ºv—Î2`A`CÖ jÒ¤SyT­H¡|m¦ ÃrX‘[ U,΂C@™Ü—’ЇSMV&Ǧ6°¥r@PŒÌ/j°ú•gÒIô5ž°ˆˆ* ÑDýD•†ùPã†RAkës&l„‘9F`Þ?üò_8à èÔ‘ü±Øìôy€%u*`çÖÞÕi ï+x¤Æ$ŽÖÕ/ ž«ÇëƒCUªŽU'ZÞvø#µ©J‹u‹¡>,"ƹ" x³6ZÜ ú¸áÈ,Zk<€'upLÍDÊ#[ár¤ž”Ä…UïÊ_w5´å#ˆv‡ »ž„öæ‰Æ¼Se@Zžºã.ä[s3*W­? fÃÿæç%J€îõPF ©Æ;º]Ûé'lavÜPuâù*Ä^A 7;3e§O$TÌ„õlØh½²IäIÜ#9µôÒÈ âÌIš×  •íj›9yeJ¦*E¬>\£.Q¯µ²ËÏ«c¾¬|·ý9þøÊm¿¿¾^¨¸õ×ç×ÔâÚ‰å]O’,ÏORÇè>hú¾–sCPRŽ›Ã`@* óçd!Ñyx$Љå&¬4?iqDAâJeGgÈ/™$ª" Ë—`þbŠ‚¯2::jÏ<󌌌¸pÚ'à&€&0&Ö˜¶åÜà¿jåA8ˆ½ÏÏýÜÏ9;]³^‹ßôÖLÑIa6$…s†€}% [MtNß^BNïFFHdå$­ €é@> ”«ªêó‘Û4§¦ áÉ,ï°¼l‚.„„áÆô½ÆköWè/I¾ô[ãIÒš°$¦º/÷)# ˆÊ@噪»)“€ðÈ’ß(‘òŒÆfnæði穸sD«ÁÞ‹0(dh"Ÿ®Üf]:7=Û #…a[v“XiìB å1î*ÇíÃq`‚Š“IÔÂÄ6Næ-$k*¢§î£p& Yì`CH&'!ƒT ³û'`¬ó¦õ['λ%ðFm\ýœjT@ê8Uö‹Rt;@¤ó®¡„ð(Åp aý@[ÁÀh„­ƒ`¿çÏŽÚÉc ›‚* ÂnQægÏŒØ"êÑ6T®ƒC›çƒU_z‰|³Íø$±~8gs¸áV:‡Èò@ eƒEìZyÝ”¹¡À»ï¦k¨ï­xjí»²þµÇüo=7þVž\ß^w¨¸5ÞåþE×˯E Åì À¬,þü û—™’W5бêþ^λÌây™Éº€*MÌ>Uœ¶öʤu'°w‚Ù–$™ n °ÂIÀ´o6Šç¢r™FÉU:sÖ3c¶„3C‰O_KÜ~éÁv¡ã¡š‹YK†£ ê⸣ÓR©…Â~P¯Twb ®¥²r~-1ÇYÀ•E’îã…~ðÁœµ­ëü;¯µ¶µTQ.Rhåý/©ÿZ‹¸qÜg-Rk´É«l‹›$®£È¯¶H¢PU ]ù¾’߀¬ÐÀMX(;kÉh„ðnƒ€6²'ÂHS± |Ù‡mrq•ÁP—æpÀ¢ÙT¯QëÜÓi÷ìÝÁh]àŽ`À2Z—ÿä6±&@dzÏʆ¨-n™µØ³ÿÁ¾öÚ¿¶¿üö7í±½¿hͱ&ÎFýõm¨Àœ™ooX©í*výPó$x™À?è"@.GEÛGpâK²­2à=©€®JÁs•O>íš5QuJ­í‚ôâQ,éšû@ºRF%ãÿ,ñÝžéyûë'`;wl·†Î.+Ò)ˆ#E `‘›Æ„iÔ®{mftÖþ¯ÿçOíÑïÅ›tˆÐ]|$‘æ0ê8›{ºíóŸÚg½=€Àv{ãj‡‡í»/¼ 5¦Pã2ˆBÄÅYàðñžû¤mÞ³ÍúšS“9O‚Ö ÐË£n]˜"&ÚàV¤J ögßø¶íÝ{¿mèCÂǸU›•äv¹¾¤=.L  XDj÷"*V!$'°„ óz Š#ºž¤‰úÈ’ŠUÀ‰ý¼=Núèh´RìWÝyá/¹îúHÂ5F¬ëPêC §}¥ ¨êò\ á¤ÖJ9›t¡*-€Î'‰½7 MПZëøYÞÝ ÷îhÇÙ§mzô Î ‹î¶žÁMŒÀ&õi…ó˜ˆ*CŸ|ðaÃzå)â*ZpóžâçWO×ËÕÔ¯öEu\îÜúþõCÈ~Ö×zKÓX ~¹ê6K‡#†ä Ò;Ö’H¶álߪ.û7ƒÔ&Š$££ìD¼dØ'µ…›ÉÙØˆ”'NtwÀ±£„ÛòdQ°Ù“H€`z¤ àš87/Úlü¬Ê/ZKpƒõ‡7`{##:|!ÀP­5–J"ñáÉœ³“‘ƒvüù'íñ¡ÏÛ'üŒu¤:\@RØ0Ÿœ±çž{ÑŽ=ìêî'VmÔþvWùã¾¶—¯‘DTu?@`/éŠn·(@¨†€«Üéƒ9${³¢ú pöbH U¤H%¿FdØŽ'§˜~SSÊÆgJ¢9*Oí BT©3i¼ÛæGµ11à8JóüÔ¼ýÝ÷ž·_ùÂÛw× 8½€$0„äi]ðŽvÚ_=ûŒ}察r@/¡¸c¤nä;Mc_•ÇÎnSw¿ýʧ#7j?ULØÙ»·Øóo²ã§FìðˆBÓÄ  Žc¼)ó(êÏo<ûC{蓟°Ï|òCfc‹Œ>(äñŠ4-ÕÑkÖ6h_ýó/ÛÿýÕ¿³¾!»cÛFÚN?¢0!êS‰Å#¦]Z»wɽWHóÀ¸È8«íG:©'NŒ,IR2Ñ üy¡èãÃ] @[­È^Q|â2ØÎc.^_¶vÊ+{µEÏW‘TXu×¶²´utÚÜÂ’5õ  Ç”i…ð)œS—ìØ[¯Ò/káCKÝç§ù£6=Í6°oVheÔC¥ÀT®„d:*“GAí½8q¸sÖêÍn\,7Ð ß^-µ’8¬¾^ߨ¸uÖÿ~¢ÐÚMWh¿c2œ«¢ß×Z$L]9æ…ÞŒ4BΠ쯆Yýž%nЈ´ )\´F<#0jyÙ©(P¨bbÉnF6YòÌËMÃæhÎB,ÙÞƒw!ÒÞŸÃ^8³ß–ÒIûÕŸþM»#µÇ"YÒ=áåèbÓM4íµé—훯}Í‚“vÿŽ{ì‹û¾dí©>Ë+RƒžóÜCÅ…Qº‚ ·´ñá:ŠÏµ*ÚŠ9j’nnnvÒC¯rw¿ñ—J${+åÔ„@HRd“EÃÀçg'ñ~ [#¨8žŠÀžÚf0r³qR¨ íÚ­[ Ìɶ®:65î ¨Ä7n¾ÍÎsêWÿæ)ënù” õ[Ã"¢ØÌ…ã¶4_±¿yúÇö_ù&*É„mÙº ÚIJZM§* û†^À=ê¼üä¬õoí´‡Oƒ}ívøì鮿m•nw'ÎÔ±ü‘9îýÌóöÐ{¬#ÆøÐævòÈ ¶ôÚËûÛ}ýI;=S°Þ ¨FI¹E'IŠ!msmÈ9ñ¤*Áû$Gejp6{HÇÚÚšÉÊ I‡5?ƒJ6T°4ÏhD5)Û½ î³Œà䤃rÓÙJH·ZAH÷⦹%3.%ÕØ‹ 窀wµ[¼ã˜Ú£P!’"&R¨¦'罄øÁ¡«©•¨,-¶x~ IÜyBµdln|̲H"[Ûmëæ-ÖÔÑñP+g ä¬̨s¨ãPù.`ó˜á+2V$½}7õ{G…oòþ½_9׊Η*:OúrÇ/uM}ßÚ¤@À­Í~]µUzñýÂyÅ¢ C‹/þ·îáûc—[WÏã|˜‰žƒyŸ=u p@í<ˆ5î´ŽVb¢D ‰™¤2óóóUðæk¢qVø÷”JÖÝÕ04ûöukK…ìþgŸ¶ÀMh1kóseûɱóöoþðO쵃‡ì³ûmèGU7n Ô{ee‹ÀƒYÞ TŸqr™*íZ»³h.€} QU]*Çl‘> *>ižP©JXø¿ý]»‹ømŸ}ì~@…/qXö—OýоöÍï3fÙã÷ï&¦ÝgŒ=ú0¸A‰ R’µ*Ò k¼ÒƆdIÿ%1'Ù`w/¸5‹”7c熱ƒ[´%@ц ¬5¥‘e2_Ä3ЕaS•vzÚ]b-,-û3 ¢RçEhcÀË‹XA´¥Þ½RÑx«Ž¹ªä°Ú=UÑjáØ9Ô³EL Ô_ 2 $qtèêíBW°©Ñq›" oUzÛ6e•;ÛÆlqÆe—X(7P· ›DZ%5±œ_C^©z·üqà®ÔõæQ½oW;ï^éžõã·6ÞÎ}ní¶Ôk( ‰âzƒìxdû¤û8f/×ch KÑË®gµÒŒ±|˜ëÃ0Uµ2RŠ27ÐÂh~ æ pjLv=HÓë`7Ã΂æ9 °+OW¬Û¶Ú/>Òoç²Óöãýß²R _ýð’íéûáR왑oÚŸ¿ðvàÄ 6˜Úhí¹6d÷:Ž)àT˜±'ŒÊK<3WH“É)_W«þy‡bm¬:Mì’^Bºw?™¿ãÀû½þ/†"j‘(ûÊ_YÂjvò<1t'¨{ŽøcJ-E_w†ˆ†ô ¦\A²* ¤¤ïŽò8J6;;»|¨*aè¶MÅqx!üL™¼“¨0KŒ)$®mDÁý$­Ï½zÔF'3öµo½@sìR})vÝ"ާØÏg‰ïý+;yv?ççl°yÀ¾ðÈ—ìîîÇíé©Fú!pÃl@"Ó+ÿ‚–!WgˆzˆáÃiYÞÛ¢É\LR)yh–:7w.€ ³Õá€,G˜À34Š‹!ãä0‡ÃA…ÔV]Hàä,’%ìˆ$›ç1zPm`LèZ‡Àý €‰G’Œ€R2š²}{ï¶Í›7Û‘cg¹{)TÎs‹€Ôq<ï¶þVû©ï³[úÍö ï¶L¥Éf”-¬xcÝímÆéa~ì,jSÓnºÍB\ßÚÐlÍxŸÎàFwÓ[Û0Ðo±ë®Ûl˦!{óØ)û¿ÛÞ GZGˆbuEJ^å1ˆ¢ø#D5„ÜH|sltÒf¦ß±ÌÎ,!9¹ºE¹"g0x—-˜Ôj’Ìh‘-œh :û>üDµô¯=_÷Ѷh®Å«n´O¿ÕײÉÓZûôŒIë bÌê.œ Øce†æI‹Dþ'œ<éOSRÈqƒÇ0 &–&¼Ç|̦óØ<ÅÚ¬FÞ>7lmäº;”*và\Îþ¿ï¾n¶­¤EèØá˜Àó¥c¯I—làzœè‹=ö/ã—íá]¼€3ª0¨@&‰Þ>†3Å¿ø¯ÓÚ÷˜Íã“°„zRÒYÔÈrp %zpvqÜÂЧ»Ó¾úì ¶ÿÔ¨ûà¨`ÖĽzÐD¯ ÄŽElžXtEìÃZÐ%†²<(Ï8‡¦J?æ€ƈŸ&±°–B)&NŸ$Ûä9qï‡lF•ŠL}'/OÃÞ3L˜ŽÎSå;Z´Y¤_KŒ‹ýŒ[-mÓƒú]Î<×é–« ­DØ”"‹ÆŠÎ ðFœ&\HÚÆÛ ö†€Ö˜¼; ä8-#=/“+5˜2Vr€2ÎI¶õ[°©™´wÄá QïfжvÆÊ|¸ðQ–‰Þì/á‹Þ«ÚŽc¼s~¾ók½ŸšEiyhkÍ É|ˆ_^´ßŸï××Xúé·8®ü v‹7°^ýë§€&‡w[4Y©èú…l •øELFäïïÎY>_רdù"Wbô!'ºFˆJR)pÕ™ãã€< ‘T$S ë„4+Š_öÜ $«FǶ 0‰ÁIw쵿ÿ³_²ÿõÏ~Çvôí¶Ÿ{ð ¶}Ã=ABd xÍÁà#5Šõ¶yŸ;ù€ÆÃÃÃöôÓOÛ_x…½Õö¹Ë|›j÷]ò·¤ÐFLQFýr^PøG}Ôî%PêõÏ,tŸÚßz¦®öë·†ŠŠt. Œ8ÔyèÃËÐQªq*…°]ü7˜;ýV\0Å:j6 IDAT0ã‚zÔ&ϵîì©`è KHÆÈZi臙O[ÒÑ ’±hCÞ>qÏ&üí_³·Nžv£ÙRÆ:›’v×– v×ÖÍÒ©J†lHdÃ3éy;:2Á³—¬g ÍK#éRûœdŒú§zÛ‡°yìí³áÓçìç"¡ÛDàçÊÜq’±·Ú§?4d[{ÿž½~ìCv µo‰±ØØÖdܶÅvnÛŒÃ@iޱ&Zæ!Ž¢c{.ŸGµ¨j!±-Æìü‘ ;¹ÿ´ÍñÑ<• »ßV²1œT.‚SL)–ŒýK¨QÝûáíé w»þùYôW9íÓø¦{Üâ-ŸQý}é¿K„íHòJE¹™uæH8¤È³Ø ?Fôçœ-¡@_Õ1ÎUœG'¿~¹º§f}ÐU°ùœ²îÆõ?WEÿÞ^ÕÉõ“Ö<ênÍwñ{ÓÀw;q(D‡p—¤W2¢ƒƒ5¸ ¢Êb(U•9¨¦þ9Ž!±Å¼9…Š)¬üéE[œœÆ8~ Ãô´“•IâF"&ÉÀAD“ØJµáW<Ȩ>Œ”¢9å)‚ã…ÓxbXýЦŸ±/~xÆzì#;šõÔ“óâ€F@‰¼•ÒË×O K¿t”j뮻ïºÏØŸã6–Û¡ß¾~ÿÊ5¦ß¢—Š% ëîîvÏ_¾žâë¥zøºhŸÇŒÄî¹HrÔ ê µÏ¥©âšŒ¢ëC‹0} O_ÑG*¸<È.m2„iq)¢8î:êBd¶Ž9§§1:?c±Ö&§ÚN/(nZ“í ÔF,rÒÒçQ‚íÙ¿lÛ7vØçêÖØd nK’4ªXNäÙo$;BŽ(lÅ=ÕÝ~ÛF›ž'sá'RœÓ˜˜0c… À‰5#Ýih±ýÇÏØñq%¤òŒ>ënÂÖjHTœ S&+C½0¶‘ÁçÇìèé){‹¸p›¶î± º€Cä¯Û·â ³¹Ã污 Ÿ¯¥ ÑY$šØCf°]+#5‰)6¡@@2ˆ4.œ#<Þ¨á&+Íäì‡/ì·—öªÊ¹8'JL¹ßw—K —Ë0ÖII¥tpÚ”Ã#5ús€ICQ¿ |:`'KT˜%ú¡LTϬFÐNÀÎÉmtÙeË ’MeÛPØ9z¢/#,ÊÚ® î[Cªƒ$ÄKØòe O œJb ‡úS³ŒY¯ú„+P¨ *]d°Ïøpc„g]çøvU¾…ÿ¨/ý»)ºÖ–Ú÷µö·ÎóÛµçׯ? ÔÜúëókj±ŸT´öÇ»<4¥cÖBÌ-Í×?¦Þ&#Ý×?O•ÔäÖÒD²y²,ÌLŒÙÔÙ3yO8È1ÙÔF¬Þ6kBÃØŒagϱE™$± r?,Éð”#×& Ẻ'HkC%Ìz£í¿|èQâQ‘2)$qõË¡êˆo©R%‰ØQÈq²ëe@µpw¾øGL2BÜë)ªç¥úËÓYY2ä ¢”]x@'Ñ]LVÞ¶I‚³ Èæ¬(Gù ¿¤ý8¤ŽÊ>KÏýƒ+Š~𬠾e¶ƒ­éh5^à›í#÷lµ§Ÿ?†b­Á^<:b•¯}ÇúO?²§rrßd I(ׄ@pR1Q-†PË%‘ê%ºPÛåô‘úD*À˜EÚ@{ô]2=3a_ùæsÄ)›g˜íÜØMcƦ'‰UÖƒ'1AlH륰¤GÛ±©Û¾ÿ²ÙðÄ‚=ù“£¶Í6Hüº!H "wÀB§f¼Ÿ%õ-ÎN£"ĆKýÃ’þªÊŒiI5Ö£ ¼Ksvf|ľxûc²5üø$^¦ªP`Áö6Ûæ®&<§ù aŸ€r`À)•’€QHàxùýÓ;¤¯`67VåUZdÜ:‰¨néª =èÓ2Y*®Tæ°ñ¬ )Œâm⥠-½P—šAs§#Ú¦ç«>KRµ À%°lj!¶ßò8v°w$¯è£€úhq'p*æz y%÷^¾H‡×iñô¼\ókçDývÀØÑñrWÔ÷¯' ÔÜzêíëh«gøþµ‹ßw©µ‚ŽòIÏü]•(±¶XEFv;ð”G¢î¥â×ú]e›¸)(èùQ$ykBºÖÚÕƒRʼnAUF]'•OÕS€cçÎYËäÁB»È£Î3‘Ð-eíȹ7íÉ×ÎØÆôalŠbò¥ÓÄv[BPJÉ `˜ó€À"Þ‹BO4aL®"†%õ©˜™€•Àœê똛;ã½ûãí_¤N­½Eu]I_ÝVŒZ´Ö3µ¨ŸÕ&µ5 É#!’Z3J/(Žbk%z~©²„="ªMúsrjÖÎN ­+Ù–¬¯»Ï:úúIOz)U;ûóNÕ–(¤çóÖ™l³ÇïÙmgNÚøB“MÏåì…£d¿øƒÿhýÌ»÷¶{äŽv×öAkÞ´©rFªs €¡ú›Æ° hÀnñTÄd†ÍpÿÓGÆìÅ×ÙËä0ýú÷~Ä1Û»m£Ý»µß"Œ‘YììZºi'rag%Oðä¶ûð¾íö­_±gfì¾ü76BnÓÞ¹•öVÛ½ývkÇÑ Hj¨˜gC0Àž¶rhá#ÂUTî— Í€w‰á«?|Ëö¿uØž?pÐ^8p€gÓŸ¼mÍIk'_ë?ý(™EØ…“Mã¶‚úšª¯Ôt.vÚ2ÖÑ>9/ˆ‘‹dþuï“‹8iÏ–ÊRogñwõ§÷c÷@m­€Ù Ñ»=’ž"ÙãÕ噺“?®ÚGºz{02N¹Æ½ g¼wÆO…˜‰å÷ÞÕB@Ÿ~Ìâ1žÃ ƒÕ+·ŽêÝ[ùn®l¶è­óTüG–~k½¬o ÔÜúîÿ«j½Ÿ°µ¾Òd³ò†n’q¼–‰¯ü’·‚&qT+KLäí’DPjïë'&íÆãð”j"` µ³ƒ\•MÜK’€äwH@$Ç!.ŒDjÎ9$#Măø¸sjÅ6ö´ã©Ød-=–$üD¼ÒŒW+ž¥iî݈Þ®º'õê]íٳǚ$Y.ª“VoŽúƒïñZíöϺÞ[{áïSK[÷Ø…Ç !±è·~ &Þ ÝJˆ’$m™@u=>6lS#Çmáô 2LØ§Ž¸TJ‹KufßwýÚg· x *§eä@i\"‰;¹lÎ~ùñ½öàÃØS¶Ÿ¼~À^&>ØøôŒýÝ󯱼d½Í1èi!(lŠ€½Ö‚ê4 à n"ò ^fjÁ¤î]°ER^9 9>…ämÞfæ–œ„­‰:íÙÔnOìÛmZnͼ$I#¾*Ô †’®râ#÷í¶_ýùÙ׿û‚½ùæ°}óÉÚ÷~ð2¶z kïhÀᩊe#Á#Œ!÷OÖê÷ c‰Wà?Ÿ&m©ÖƦ¦lvzж@}Õeë' ñýÛ·Ù£wß…Íå =¸­ÅN¼þ¬ â«,Y¼iV¤Ì»"Œ&pÈ«¨_d[Æ/·­UQÒ@ÀPYû¼ü1~£ø·z‘ú4Ø—3ˆ¤v­`wG‚èBñð¡¥1¤qsaáÙ96¬7G1WT%mô­Ý;‰›¤„ª&€Wõª¸ Éøèê›Vƈ¬÷âßOõ­ÿ~zºhŸ/þ¸Î©Ýï××ëu·þúüš[ì'îk¾Ph²Ñg¼æ!q°¢Ïk"ÏÈH[ºOŠŸVN`ƒ[†`(H„0#éºOR ©j”Î'†±z&C|kmn±9R[ Ä9îT®ˆ÷i à ¡ÞöÝ–oÖÇã/ÓÃÐ>"eSÌ®„ÜT)eÎ¥9{øþÙ;¶Û›Gî°ý‡Þ²Ã'GíÐÉq;‚Ôõ é—^9|Ú9¢ˆ÷;Ï_Æ‘Ôç~( Ä!pÏ:µµ‡mï]›É)ÛcŸ»çn²#l°nl ƒ³§-s¶ê(¢4V$d1ò¥Jõ™ÍZog}ñ‰Çí£÷Üi/½~ÈŽyÊ^Tï ÷«.¨r¼»<«šï[D>»è½ËUm]ìWŸúwôr ®cnÔœs¹g×÷ßܸȕnîzÖkwPà¾\—Ú‰årÕ“€Ê…‰JLEªÔi²Ýñ÷ô÷ÒÚÿÖu©NBˆ(ž£å0a=¸†Y,¨ª$IQ0]ÅSÄKÚ8±Å²xÇɾIÒº"‘üUPa0øÎE…SÍå()>ŒÎ±éâÖy Çãl©"¤P4«JE¢8ŽQ1é^¬g-tp§^ãŸ*}j/°½ªÏ¨=rí¿}=5ñ«îZþöÞìI®,¿ïûåžY™UY; ûÚ{7»§GCr†”–HZ¶BrØŠ dYrÈ~±Âÿ€ì¿ûÑö“üb‡L…c(9CQCJ3$g¦gzG¨}ËÊ}õçû»y€ìêBV ÐUy€¬»ß{Îïœ{~ßû[U‚„ïó«¿´û÷ïÛõë×íÞ½{ÒDÞ¢ŠS&©[§IHiáë!ÄéÓ Gwj¦&©+ž´J©ÔܶõJÕ®ß~`å·O!¹Âp \ WªµáX28œç¬‚'gw{Ã%GoŸ›°w/ý-:¢MÝŽCB^ÔëKHúJ[ÛVDfØŽ< @`Ÿïm;¨›œž·3x OȰ~$.Y»»<¹Wåc¶xíS»óåg– ´ÉøÄ$ÙœˆQ‡)† f¦;nåÁ‚ËM›§QgÞ{žGX’Ûd’h•Q÷‡® J8Ü_ZµÕ5ÚS?í–€IÓ86ÈN° ;AnÕ7ßy“8w%;ƒÔx–”pã8$ŒM«áqÜ\²êÚ²­~ñ)6o%ê¤Øn|”0žÛô½@„uOPžˆ¤M6ŽÊ|[xK& Ϭ:ˆŒôs,²ÜûÕõ8’¾cƒžA‡ü¨ÐÑyPb‰ ç¸ÕEcÒÁ/L-W“òÎrà<%Sh0#>\·£|¯Ô]uáÇ'€µ/?”ÏØÞoèú8ö‡exŸ½CFŽ=FøzéUÂË/)‹Ô’aŸÎ ç…sÄ¡¥ÎWŠ'-ƒ”Fç…süFû#0‚Ä Îã_õq"ó«ÔPaéw§[²"Ö0Ȳ»‘áu"ÃsHYÅ;‚5/i¤/q˜£ŒrâŠG&uhÌz¡ŠÍÑa)æÎÎÚæÒ§fäÁL,¼nÛ€ôÄ%öšh­TvÞoÇø½y%zré°ùl5˜â*„ñs¼UÑÚ³ú+‡¢@¾2‹?“ä¿÷²(À&ÄqÁ¶•])DqP‚*La<ê„Þ‘¹úíæÍ/íêÕ«¶¸¸h7nÜ🚳»4мœ €VK6T¨’¥N–#ƒä;"ƒ`ª€ö—Hø^hFå Bƒ³£È.cOHvzûÅõUËŽÍ[Žtf«Ö \FX–}§Ü·$;à9œL†IÖ#\G4mçQýBéž|'¬î¹ŒCòy ô!íbëúøV[ª0­ÝúÂòJµ6Qt Ð8ÝX†v’1^ç‹€*ž© ¬š0‡]G ?É9¼^´$\÷{-Ã;–DŽ® E¤Æ„¾u¢–[%ëðáAO–‰-Gðè<1kH “—mzáý\·8ÒadÅt7ªÍ¤µÚ°Õ椕ˆÒN(.Ы…=•ï‘¡‹t0Ùng&iÙêøPÑßX„þ%Eº ;‹4{® è¥ÎrÚзRî1exWþz¨p£9#pp‹Ôc¤ý•w–ºðáU&–ã%B©T‘ rNÅJÖ!R}ŽØRcD`×9m ëÚ/×2Í*Ú¯}ú…±® ûtÞîs´­õ¯~e;td´v”(0pG©7ŸA[' ÝNÃóœZu¬8€˜Áy¶B²2™õåÑÖe²Rœ1yØ)\f–#Ã}/Eè…úžmDõo⸰#(Ác0ÃR¹^“’pô'uzeŽ$GiŽ+avÎa=nòÕ}•õAjCMðQ‰–ÊD©”]/ûÀ$«++ËöË~awîÞ²åÅ%ûè“À ¤9Pƒ>ÕªbãE@P’¸¨„û#A¬49½áÔ”¥ÇÆmùÁ"{ã7xÆìã?DB·E°ØÈ+Sø ä‡ •$4-J¶´*ŶÔhÂä’É Tæ§+àÓÑS¿{-Áì^ǹ™é£CBºIblÚÏ3ÊH¸Ä øÔó”t݋Ӵ¿þè_]ë3H¿_ÿžzZxO¢œ­ ûü¹¡N‘èò«÷ØR¿F}uõ¥´¡²ïŒ#ÍJ!ÅŠCC·!뻚 `˾M¿Èá ôÞ «éüS‘‡ñ~E1çD”$Ò7yîúX„Lmì ÛYÞ3ò™¶éË:*s¦¥ùh GéGÑ—·ÖßYžEÞˆT’²©>œGz‰<’=6L&Ø®ð¬"Ù©[‘©îWÅ#}|pní·Õpï>´~Gš(£Æ˜✣r )&а܋áØà$2xžŽ?îØàyÃÖ•BGqO ]ê¡ Ä~ôSÊ- Tš ¼ó`d1å<…AIŸ×&Æ[­\± ©™êëË€»¶íÀ@vȱ˜|4pŽ(OYæò;H I!;;If\l'›à¢$’plHÙ@ ¹ö™’4 ":‹2\M$e²rã’45ƒe•ߟþÉŸØÿÑ¿ñ*%¥kê3¿>â°$E”Z8›Ÿ¶9R ¬ c6…„JÒFIðD÷âÉ6àxi)´O‚ÖÒ8>¤¿ÎÃÁ?¢§`P ©µµíu+süò©SVÞ"…–À6ê3©ã²WäÕ[á7bŠr;¤ì;¾‚´Rm£­º¯šâ‘Éà_ çKdºxÍ–KõÔ‡€(ܯ„sÃRçs߇W²®m¡—‡u ûtîðæù5‘ôÀC¸ÝC6y›9ÔÁr´ÐØUè98í}z_š´¢m’gª§Öê×LïæA Q‚{KÚ-:©¤{üéÚ<£Uà9qÅ„ñ‰#uí!-ê`bÐãý“ä3­•eAun¢þ–6•- 5GbGâH97kHÇ©É6!ƒ¶¨o•1@¯óJ¥Ê™vŒ‹Æëà<úp íAv|KF»Ž8FîˆwpxéSs×·ÃD2x\ׇýσT2ž–é7VFhÚʃ]Ìî£ > ƒ³¬‘} €RÚ$RItºà4’§8ËY È˨¤2l0ª'Î^²Dq"F” Þ§ÈSbTj³)¸J–1¬ ÒbØyÏâØ^“³¼¥*UHçá,%…“M›–R“~þùçöƒüÀ>ý 2íÝBýDuŽì¾^C ¨k>D’öÞ[ïz~Q¤×‘´Œa0¯c¥íM+o“fjgÍZ¬ºzϾ¨®ñ $íW2JO¼VöY…É9ÛZ_³õRW³â›¯Úâ—7­Af1ü´$`*œ+u] jä6í~ª¿j$ÅÇ(à F½5€[ëKV)mpô ÉsT`rx¯û-£?ÔuÏÂ{á%ËpòÃíÇ\΃’¥y?qKmµ€Égaõ+8—®ñA£2÷²ùTÄ6…ý» I5ÁÜ€jFy¿jq‰>ûëáq»—=Ô=΋œC¸€Ïj£*í ’·<¥s³}”¼|LÅUë²ì Èèk¨É%!¬òn%‘f'p[;H{ù Š“Õd»›£¯cîéÚ@òÝCzž‚v‘7­j³}vWøˆm§f…¹v°‰ƒûôõï5O ^3Z?>¸ãÓ×_ki`î_;°kG˜0Âr×áCm #rœPÅä4i@*¼~ÌT.Q‘äF ¢@ø†,€.ƒ×h¯ÆR–yØÆÅ±#—:ÐÏs=Þ{JEÔÉlˆù½áIøþQ€ñ%àoY@•ó9!à&‰IP'ÆßIE9„ÑøòË/±u»éýá6{He”|]ý,F¡¢ý’¸i9‰Óòýëd2ˆTg‹÷î[ÏÌ©YåUÚˆÅJѺQá^‚>$"—¡ºœ.¾÷¾MÏÌÒ'ô i³>þà§¶yõoli©MnÆ2ãVÁ†«ƒÔ° GÆãõQ€ªÒðòí}Z›q"ƦZzÿ²ŽŒêuñæò}$–äÈÅNR"Ý€ $Ý @ÄÆÞ7{Ãó` ûÃvŸ®a·/Ã5ÚØçö „u~µ ©ò€NŒ­@ÌC7dk.ÅÔ‡ bLèH$È;8©í:¦ðÈutûiQå=›”¸ ©¥2ž¨_w¤næ=¨—sC Éudõñ1'BoÙ=* ô+…17ÉKØOè˜z³GnÖe2ÕÖ;¤ Ô?¬Ë‰Aòï¤ÖQ¹ë=”ôý8—Ðÿ¢A˜_çå°/×X×¾ÁsŽ3ýŽ{Ûû3Ùq'Ãñkÿî @ÛabKQ%¬k¶}åý©cÄ^A¢¦Ìcb¾0'ÅÀ’$A*!MübDII5G¡®ì¥†M˜Ï³„~ô Ï ÛI¾¸¥òó“ÔJ¢cÄS‹LW*7×èÒÒ’«XuÝW‚Š)6Ø·fŸ~ú©Ÿ·‚·n[¤m­ ‡”«ÈA0@×n !œµ“'O@ù4ñõH÷4kyÀ…2$$±€B¼ä½Ÿ–VÖmý‹_Ú­»ËÜ+iEBsìà,ÑD]«n“ÔTõI ÖVÕ}Ë>ôW¶ÙºúV:÷>PPC¶I­V.á¸"Gí¶ôlÀPŒó:n›F…ä]3¬ ¶ûÚà%KíÔ±ÝÇ£³¿öwPE/º´Si²VLΞ ô Ybê÷‚r¬àòƒD •d™_‹|¯‚ÂqÚHWÒ6þH©ªÆ×žøÕ2¤OHRÇ{“F:V! ÉÚý%ë‘þ,~áœ÷©¾‹äÿÙò”äž<Á*=<ÂS°n.áÜi•m¥ºŒazhKG‘í’ÝÜ+Î`‹Kå«Ê¥0üIGóOð8ß«u>÷r@ãBEsÑ € ûýàèϱ¤ÀÀñn@À'ƒÀTÚQ.ª~ûéq¾VDw9‘ŒòÉA5QqÌ0¨G¹hë|ˆ”qÞé0öK%KÖX zŠè¬cÃJw"é*T<ÌÜ›Äú»‰$·E ½n›\°4 òF\ê#ó†È9‚»ëyx›zˆ^IAº*Yy¢æ÷=l wäÌÀõb41lU••[0Ü¢ë‡Õí8Óûæ§ç®ñöù\ ½Ã{®94µññ¸ÇÓæÈ “ÀîížÂ$1xÞã®<ç0ëR)dß…[ˆaya2‹V$ 0ÄL±ßº4¡Ø¥ˆS €’×7`Ðtj,O背ݼõÀ¶dŽÙ4–d0(Ð LJìDpP‘ݰ¢ö?ϲ»v?¯# Gºî!>²9¼)Q±åPK'©\8_@Së²qÛh¯»„Í™>4PrORŸ^ºtɦ/|ãþ<êºYKo¯‡=a{Ä&R¬©’+œ$" @ßÀxSt„F$§ízÂv¶6žGÕ›ã>Ti làVm…¤ñgÏ\$¤HÁjÔÁsÓ8YÞ¨ ûGM‡PlxÙÅÐvŸìí—]àÕ‹Îç§ú9&å² IDAT)~á×8¦a#ïcº¼o°ïÀ\Èd¿úw=vo‡ûôŸ¯~Õ/¾£„@¬˜²ÐÚ¢pê)²O´QkºÄPC°Œ˜‘åîðWAy¡*>bœã]Y@ K™ÙGËCÍö\¶ÿ1ꨔ] ¬:×P=«.ÓÓ¨p±² LŠª§î©WFÄ\Tûú‡´§Nªº:Ê ~-@©Ì’Àé]ëª~À¬Öï7®=Ž%ŒÇ@˰o7=t,œ·ûØhûxR`àŽx¿k2³r&A[ÃRLYŒÜc9i‚¥ Nš(tnF˜' ª$7R÷èº0‰„¥_ü”¦ë Û¡«qÒ%5ÉIIL±nfË䞬cd†ÔK ‚„*¡zdÄ‹$@'ãëvfÞ6ë6“A"Ue›ØdÝæ v]œ²C9«¬‹ª'’º#ûàˆ4âðL°*Wâ4 ªŠ)©žNœ±™¹»¶³r)ˆlªˆ5vú-›=}Á.¿BãiâN᱋Ú8Y˜$BÄjQ¦@1wƒ{ÐÄóyR¢C\>\«Š#æû¢ý çˆ\à °5iÚø ’¹N¯à–Í:gÝô¤]½óÀJu¹(›ï²ìÎm¯d›,«)€®l£š$%–ìËš !ƒ ×°Ò7¾v ÷ûZ çö­Ÿ­—‹ñ üJ¡¨¬ ’$O{ sÊ6ïÞáKØÜ…ËVôvˆ¯¦Pȧ‘\ñÁµ\@ìÄR­œ§¡jc¯–éDqÄÔGuÌtŽJØïüyܼû¼pþhy´(0pG«?Üšð‚‡¥.Ü= Ûëø6äÄÒÙÆÄýQ‘Wüä1V\ªH{ I@’ò\)㞘Ll ø+ÉçäZ›¨·¬Á— Cœ4ž§:7£›™ÈÙú>VÒ´vHý^ô¡ “¹$’.(Ðô€@-ÿ'–)ILI1º@S’­wa¶Ê†&Åûßû]Ë\ø)Ʀm~jõ3aJ5[Ù*Ù{+dB¨ íÉáé˜ÄÛUFé-TÕÂ)þ$P«6wÃÊ£1‚"@ibbÅqÏD9ʈ!•¬OºHÊÆÈ=›œÀ ž< h…ï+}l$;HÊa%Ž^\iÏ`x¿Â…4¶PÙîà) €Ðui7qÛ+–Še—Ò³…@Jϳ(Ëkmé'IŸžEv€T– !1¦oNœçÃeœÌ|´dgæ,EÎU -ÎG "®Í¶>@2îuÚâq56オˆ6Á³Q뢣À‚ì)ò“ŸØ;ï¾êÒÚ$’ËÜGkR/…¡É!¹S5]W&[Ææævß&ò>TåŽèÅaž}ôáÚƒ_1:ó(S`àŽrïîѶÁIÃ×ûÌrS}—&ŒÁIcpýq×<É~>ò-…Z­G Ï-Twé7\¦+ï6$+±® Î%ÀÈ~suÙ¶IAäð–k” Ü‹z·±ƒwåy;÷VDÜ“F‚ Z÷}™Kd£Žâù²;óÀ­H^O¥M’a$)NÙ8ÉJi·Ú¨€2H‘” ~“ËW7ˆWãžò\„ÎÄW’@mˆº8°Dlž}=n9$(¼…ƒ´† GÙ‡µQÉI²6íÖü©3€}­»NBDB̽£ú Ïb¨Ý*Ћ?ŠºH.H1h1þdã„˼LRžµiÎS¼4NãG>VBy”‰©¶Í›Q&|ˆ®“:Vðô0Eïux·ÞðX€N´ÜØØ°-l?ùø3d²¯ ?Ùîùu¨Àc|PèÝl1¾nܺíûå)­~iì{ ôÝM‡ Þ½÷¶æjÝC A•ºûœÑöñ¤ÀÀñ~׋ÀZX†&k[ÿTvO2ƒçî>®6ˈ¡IF"Tb½óËÚ8Œ]©ð¤6L0R“BYœ˜ŸE½T±›Lh¤´™s¯¹QiO5a†25;iÿÙzÒ~3A>Ë!Å=Z‡чZØ%¹Ò”~”E”|8¬å*µHÕY±™Xzurw&ìt)âº:,Z4›'ä–jxò–`ι’0TÑE$q)_{± X},§‡ R++͘#>þxº²‰ƒÞº^’¯4@$¹‘ݼss4åö$¿,c-ØÏyÞR{‰O;•G¦¤°´(l²S+u”Ç|܃ûû%¯ÓU$?Mì)“9â–ц…smn~ÁîÝùÜÊìW*¨Fça'—!ŠBœ_–¨_ŸgHS»ܼð¾À$E# uAÊÉ8ïpN>‘³G 0ëà oÎ.©¨*˜lඈ{è8\‰¿‰ôž‰àÀ '–âKA¶Yúpª " ûuö§ˆ¼L9_çÉ!#e ‚Qq Ρa¢× Ý÷#“è­{ Þgp}¿ëGÇ&Fîhöëc[¥‰`ðçLâ±g?v»'!—<Ñ¡³|¦%ù„<éZ·­XÎòü&ú×Ed¢øX²›¥XßYA¥DL,b}e×+V&C‚ФrØzô×Ðô:[éämº‡Í°]^*ã6÷ÀRÆ„G*º½k¡ôOsšÇñ†ö0ERV1-·ciŸ„m¢mR¨›æ s€Ç º&„°%;8I™+²Þ#ƒ„œ$•“=å¨|•»çÙ¯m(pp ŒÜÁiõìÔ¨2ÊÁÍppñôM€ ,é£#)Á˜ d^Tˆ ·o¡M5Æ}6ÅX‘k+4jãå,)>¾ Æq@Õ:uE]§î´« nãEa<¦šÐ5n\°c„ÿHa϶^nÙ*ý™+,ØZ•H…´»š¬[`-‹8¥ š,oy,7(Ͻý²´ ¢0žÓ:i;üøÕ»¬¼§«ËË®B•.€sG–>‘Âûæ Ÿhš6 5à›UT°J“¦¼ÅʈÂÐ=Ö%Ðj7Dóˆ¾QÿÚ†ó¶<Á5ï «TÂÜ«{ïó}n7ZQ ŒÜíØÇ5+L(aù¸óÂ~M$a2 ûžå2²u@‰<óÀ>çw˜œš0zMø¿4‰ÈëNLE“ž„Ù8jÃê¹$ÎWŒ¯|1gS§ÏXöÔy»ûü#EŸWž^>5VI>8 0)lÍõ\—ÕÇ[pÏÃJø,>­-ä¦R‡,`k ã˜ó[\¬{ *ô¿Ü$Zú_NV£½V¾¨}êK•0†žä®ºžÿ>&ÂX|’ëGçŒa,ììÑYG#wÔ{˜ö9ó …‰Ù™.³mØ~¡$@"Ö9õ^Ê–àŒf®tA]˜0–Qâ ¨¡ô•1 ç°jÅÔš¼x‘ÄßäTl¤&‰ÒòCY—"n­þBx¸‡ÇðbL~ÄÔe«–ÂVp ©ÌvpFþ^¯èýž¢¾V€ûOÞBÙBzJ¸¿¸S( IB}Ú@ ƒÁvV®8@ FÇ{TÈ Û-á@& $qɹ)Ëñõïa#¸§Ô¥n`ðÐ3:¨)e§âã IQö<ñà¶¹×ÝâÍàŠY¤c’²Òžà-NüTšŒM˜4±åÄ i¢§[Ä,~æ×ÿ4°Ì¢Bu|ƒÔPÀF騔2-Ìa‹Â©¤ñV•M˜Æ!ƒÎß›u]%dÆÆÏØ™ß9o¯ã¸A%€`õY °Ö壃Á]È^"©7Û \ÜE²§{5l=-à< €Rë{x¨J⊉(çª_?NëÞ¢û 0¶h4ÈíÙúã'Œ£ýî­k½:ªõ¾ŸcT|¿[Ëã¢oÌÃúá=‡=:vÜ(0pÇ­Çi¯&…01ì×ü0qhù|ŠbÀa¯8ógÊ”Ÿ´ S@Ù ªR©×2¼8Ò–¸¤D}žàç×v yë*à¯ÔmVß¶rMŒçSùç~WW Áüœb0ñ$ë)¤< 2$Z‘„F´d Ú3ÕËöíI«×Rvo½dŸ×P¨ !€·=™˜à‚íXcÿ´ïtÈÒ€­X©Ä= !¯Â$÷¸ˆÐýý×_^²Òqcû41=k÷†·VË8#§* MêGúN¹Ve×èvS0ø&Y÷袱‡TËr¿ÒäžY÷× „°l¥±dÄìwù¾Ç½€U©õ¡ Q‡Èlíú}»ó×Wmê){uÆ[BR,ú'AP^É…‡zoµUv}uÀtÝÓK€97Åyq©Bi·RÃ)F^ÀCݪgcØ×¯#÷uðÖüj[XÝ·?Ac†§¸šNmômžûDóCÿöº&É8‰‚øBÕ_§g ­È¡õƒ¸@:‡»Þ§o8a´<–¸cÔíá…¸—¢é€±k ÍO®FƒWyžSÀ6Cp˜jâ"㌌ÊGíÜÈK C¼ N–”\’ð$“ã¶cÿ&—0qË#Ó½üHIm¶ÓRdîÁl£„¬º˜!&^Þ¾s)fvµc_ÞYËÎl Ã<ΩJå:ô.‘ ¸‹íR±Ø—ê„^D*TÙAÆx‘zŒçBV#m똑g‹ñDa7ö€„òDu‰®„#Å?bÌ©¿k$'«zû°X“iU—vÉac¿’à "ÞäFH Ä ”´²BÌ;^ÙMÄ)¸°j©0%4Ò“·+±UÚVPvà˜'Ö^Î%iœŠ½ƒê8޶16ÉSWÀ¹ŠM\”¿º2γÄáÓ1½1@4šU8ÛÁO;Î3¼PhÄ û?ØuzGøñ§ÿ£1$雜Ê^cjØÝu¾ŠÆ$µúÛ¾rŒÿˆ6z7] ໬ëÃOûFeDQ`àŽÁ8“@hª¶wï Çv/ä±{ÿ³Úvcx¶,~ô,xŒMê#qÀ*TbJáÈPSÜ3˜©‡ÀPýU1޶›bVÁú<Ô¾óO”]—Á7*Úor‘m—0„èÑ8´hx €RQ"øÞ8RÉÈ>-"Ç×%'í8qó A)8‹lØÆâ¨`» aÑÆX‹ü$qŠé% VÈçô šˆ,m¬8cß!‰ç1%Öšbó1€\j“ þ›÷›úI•äD€Fqj–P"9ìî¶Àa×¥ r6À>..) mQûšôs]•”:P(ýÔ·úíS’Mb¤Ý[µæê¦MŸ;cv’<«) ,°sØÂ=¨¼À¤ÞeLPŒ¹6áX⥮e'§­@n×mOÐ/=hÓÂ#8ÎE ¬8žf ð* \° h³‰û¦ã´³G¬ƒ2±ˆ~êíH] ÒR›ªý¶øÀg]ƒÂ÷E–rl6]5»µÑ³ûUÌæQÙMâ ÃN°˜“cˆF…ðUi›§¹bK¥q¬×»“d8¨»$N¼H~UT Ü[ H™:ô›Ö=—ª÷€±8I8’IT°‹Ä=CMŠG¢œ ’HhƒMjV:Å@“ ½Æq~ŒIàÍïÓ=­˜}ùó/‰ûwÍÞý†-L¼E±'cœ2)<îá ×CK©£;¤vséíØ&dKwÅï¼ò˜< Ñâ¹UQ·ƒ)T IÆ«‚T÷fƒ¥¨¬Ì"MúG95Hxê^¸2 €zÞvá2 *Õ)~„ì Q.ƒE"о›Ãàî§]´s)«n€¢±¦®Rјª=¨PuìáÁè”Ñß À œîôݽ-Êñ¥À®Yáøâ8µ<0ü—¡Í’ÀÉpÃ%Ø-ê3‰àØ'~'†@@ Kö (8S â®’börU¼/•&CAV*Ô À&¶C%€Ë7½È¤LÆðP%’ÀÁúëHvj¤VªjEô#}¶Å%UIfÖlsgÍn¬Ôí~Z‚Àf$Ñ!l‡øiº1`*ŽÑ|›Lö ô»³Uv•Zšý“““®Ó½”'Sª6õ‹˜¼–*áù¾ÁÕÁ£ñŠBJ¹&÷Õ½ý<c\Þ§H¦tW{Û€†¬ÓØ'dHé ;»[ŸÝ²5$qt¼ƒ-¥uJHZvØB;©(U`ŠÖ4Y‹KÛĘ«[–”m %¢glÊþM±Þ:H‚»q>&DÆ5ÈŽUX'Ì4êo“]€pŒoh<};¨[„Aiã0ÑÊnÙî°4Ù8vqÎÁ”ï~¢“:M’9ý_ÔaÜ„»E}¶ö_†±  «ŸÊ“Þcÿ§3D›'¡O o ë“\{t¨6jÉn Œ$p»)rĶõ¢ëåó ¶JZ—­Š–¡ Na_X•ˆ¶Ã=tþ³˜D:Š1‡„)Ó·Õ–-F Èȼ·“·%`-dg å0¥0 ðÅ&Ç’œ“@ê!Û©IêDW¼Q‘‰Ø49@Û›ï–mµ;a4¼’h÷0Ï*90q^D¥k#é©¢‰Ú¦Ÿ@K#tà•ûaë¤Cƒ¢ÙmÊØRì„­¦ÊgphY!¹n™î9QLx:’ô“΂H¨Yï4gíû¿¼oå2´#ÄÊmì!¹Ëf±kÊ^ À¡€Cpz`¾mâ‹L FÍeš69€ ?¶·wle}@ØM[.?ŽWêºkûbx·¦¬ ¨»»K4·„Wk*^°~qË~ÿÍ÷-¾¾a׳ –:ý.xéXP×$(@²Á¿%â«|óH¤†€¢Ì$Ò« ï þ°³_ÔÙýíÆ|ÉÞxï «|ðÀülÅNüÚ¦Þ§ï-r€âY^X¨èo]Õ)ÏÞ´=¬ vɹwë8Läs‘« Ú'„È:êá×ß‚Öã’V¼¾(rmlÙ|Í6jiz,ŽI@<1:Yù_%ËX'ˆŠ²a4°-¤)}¸ÈCí¢ÊT’£8®~ß]tÌ_’ÝžxÛçȤw@ö޲_si\3òà$‡"÷Wé¶å=®Ö7¢,z¦\ŠÇ1ûº€ÙgSË'nÖKsA˜OÂ\©q¤ªdØÿ¸ K†,o{9ºè'gmë:…•ãMãþ~ïÞ?DëÃ~ˆ[ìRI昧%¡òËÂDõ“d‚DÚ€šPhBƒiœ0¹©èØ1Ï.Ÿž··._°¹é 4¬¤¸8š¿èKX×93ë×J­@î /Î #àáIá…@ˆÛ‰!É©%۶ѪÚ6 ´©4çqlØR3v·œ±?üwÙg÷·,>6c;4½ÞF –›" nÔ>Ñ)üÔ^1edÝ›ÂH•=66æ?mxÈ IDAT—wª˜½¤q’)ô‹„.] $O‘Ý^Œ„æc.Û)W­¢ü¤€Ã$6pI$pqÐ³Ç„Ó Uèê6÷bЧjé~¥ƒ'îäÉ›»rÏ–-~rËl¹lc‰,ý мµ¹qW Ïi1Mä‡dmˆ$ECŸ!Ã~ÔÎ=¤y)cb´wëþŠm¯mØ$!Vdÿé<û §?öøKŠô4£R##Cz§ñéû8ö¢‹ê©ºhì«?Õ÷ª_ØúEíC =ÝÙ¥öÂþƒÜctΓQ`DÛ'£×Q={àŽjÏ>¦]ÜèðàúcNï3Ÿ½þ*&·ƒ‘·FÔz¤GE« B”:“pg4¡-j~ˆ©~½Ò’å6ÍÏì$993¤~¿‰y%±SÚͨt®—ÊPÌìE©O%å—.G—l8x“ú Ib•ñz·nk`R"Oš¬Òhf{Ö®­$ì_þÏÿ›ýÿ÷ŸØf ©ÙÔ±Èæ­ H%•2ëÑ8PÛõS»ж·· ?"5Òmã©Sm_¹SËå2ÀH÷ƒž)¤ýÂ>¤€rˆ(Nͳž°$wÛe¼Dã9K§äÀ€ fßv;.]jTeÌ@¿Ê.ú’^߯ÄP•'ÏNÙÉ÷_Ab—²û?ûÜÊ¿¸ Ê,¼" Ž !€½'U1Ïv ˜Š¹Ûò>OŽ„&uê”&§*é$lõú=[]|@z®‚MÍã$€@”·®ÆŸS˜öùøÃæMc¬ÃC¨wëüx²÷©7ŸÇ?ïáÏÞ€Ó3Ætl¿2xN°Ü·ßõÇéx Ëîyj?èºpí~玎/ ŒÜñêoom˜@Òô0yhù$×äÞ9GVp’Ĉ±×zy+a´Ó–NÒ ‹€¨n¡®ƒû:µ «o<°^uË Ø°WŸY‰PUÐ6­žâ´ïÅ– 9ÂSÆ/H)§ ÜlÁ8$µÏÅQ{áWJðÚ 1Æî—ÚöÁíuû?¿ÿ#ûïÿ—ÿÕþÍþƒml“¢ ²¹zueÍæ ™­žB†÷ý2H?­ À ¨íì”±}ë°;^(â:å†ê ì ·¶ -jë6Q7T¯¨B»Š{¨9¹p)`Æ6ËäYU0¸ttWy$uØÞ©-ê$d€ÊÄÐ"Ĉ8ö¸äê.” ÷d›|ó¤x嬵É.±‚SCç.©Æ²Ši'ÏN9ZÈ ûJ*FQŽÎ.ù_÷- ¼Ëy@Rp%jÝõ†mÜ|€†ºiÅ3Ó6>3%üùð£Áþê¦z_X8]¡…r1Ô ÿâÕ½øUUc]¨Aú¦}ªûA‹Î !>¢zýQ?OsÌ`½J_õ…~*½fðY£õ£K‘ ÜÑíÛ¯µl÷ËïÛ»&–Ý ‚¢ÝÇ~Ûª£œ4ýIbVa;…&žµ‚iõ¥(»ë)¢}Ê0°CX‡`errÎÎÊŠcê§²„²hVNŽá©BÙM³°ÿWµtçEIáhw0×BÞci$ÊÊ0S_Æ.‹â$oó®NÝÓHž©–-¯ß8Dcù,^¼€åQÅa!bb ѽC{D³À,´^ÆP¿ƒÍ[‚DêQŒ¸)¯‹ÒlIJ§¤ÒHMOb'8R?uˆÖÛpÏÌž°YE±æÈ#ÚI¼—Dç1Êè §Ó*¿F~™l!ÛüÜ»¸Å]Bµ»L#–¬b‹–<1a¯÷-K,mÚò­eKÿìš]œŸ d ~¨ØM¶ _›ð$R‡*$ˆ~R£îWXzƒcxPô ¿ý‚UËVtðÔu*ÚÖ! GMîS ‚õ#r „‰#,÷k¸& ýö*Û¿×¹O¿°ÁÅXÀ1ká ‰$iDzøÍ[5>ù°nªËà—jx^'wÐ8¨s3H‘rY«n®ÛÒëဗh"É“˜ÑË29z’w1C€@‚B­ÈL<‡¤k·ÐÚ°‰Úšï<°™Öš½RìÙßùÖYûÿåoÙÂTÁÊK÷‘ÂqÎì¬ÌÝ@j–ÌO‘ðlÜ£ˆŽ¢‡€l‹nµ*4¼Sëõ¦3i97ÌéøŽ²5lW­¦.€¯t ×÷h/àQ@uh¶†®,‡€ü„µ‘ ôÎÛ£˜oRˆ·±mÔ/@:åhØ·;®½^χâësvêý+ÖH%ìÓŸ^µÏð‘ÅÊ‘cKšqÆöNE*T©Ý<* 8g}öË5ûò§ŸYZÌ_:iã¯BrȘ‘D”{iÜ„ÒSà_ö)´ŠŒÍ„RiZ%iˆÓø983‰&ÙÁIB“¸~Ò…8p:ÎÑýte¸ sV1Òe)`²ŒùªC±qΦÔ;™Ô8!µWµ†„©IýQJ/…³HÀ·´rÚË7¥Ö²ßûGÿ ªÛú‚ûJýŠMc[Æ ªÕ«Ò$ˆ8ddÁ=Y¥Að>†g-Oò“\•%±qéçFÝâdŸ@ðh+©U;ñi×Ê÷×­Žx‡ƒ4¡d:¤«‘¶†CG—p#)·Óm¤8-Ak€?©Ê¬Ô³Â5»÷ÿ~`wÿôCK(úäß»dÓ÷¼eæH)†GªœB2þ¡p+܃{I}êvvг‹³ËÙÝí¦-â‰+:&p>I£/ðë:9t(¾W›kžÒŒï*4KJbzÈ¢q:øÓí0Hë¹H¯~Õ]Ü.q¤÷Û’Úaã<¼qTîssó6;;ÇX’]]XÙp÷¢9Wv†¢•@®¼}ŠGÛq©ß‡¼ýe² §ú-Ìåa9äòÑ¡#N‘îˆwð~ÍÓä&s-Ãd=¸_÷û÷»ß³>ž«ÉN뚴„¨0 çÏ[NŒ{{ Æ„‰ ²‹Áy‡+LcÕ tˆb‘ó§²±±á!2Ò$[Ã’úhcuÍ–ss'8Clø¦T_&Î̸VõuQ}BýüÆÏáçíKj$‰ô$í€K1}¥ZŠÁb²£^.±?pž´§©&unÕê{¯ž³ï5gló bÇÕÚ ­ö+jŸÚ«ì£#.…™¶Çãã¨LXoGcZßXµî8Àð277GÐaÔÞHúªx„*Œˆœtßž L?Iß,ØO$q¤UþÜ¡4%½ó±Ý¯Í"!ûýygéüîa÷‘-®¯Úé7/Ú‰+glüĔń‰ ]Æ‘¥A”<Ùòi‚< ìÉõ/¬ºR±?ûÓŸ“7gs¯¼zö²Mï‚¥/Î[oŒøoŒ»JýTQõôRÚ0•Ææ-Ä¥cŒÑI+bE¸´…W¯ÛZâÉÚÀZc ¹*àUÒ:Ž£nmÌ£8uÑ}üfOù'Œá½.ý«>ÖyÃÎ}Üõ\öð½ô÷a`Ùëšã¾/Ðù¸ÓaÔþÃS`àOÃoÔ4yì.>éîÞɶö?îØ§?×]aÒ‹TxI÷šÛ91o¹© /ÎCVdxùµ`º]$=i€‹bžu ÁžëîÝ»v÷Î}g:bþúÞÂÈßn ™»pÞ²€¸RyÇš€Šè°›v¿ Úˆ¹«¤Eöp(‘$Ê’Jà3FžM95h¨0 þ¼9ŠS @†¤ m{uiÜ~|÷žmU ~~÷áÔnšïô 1â ³oç 926L"YR`Þm¼¾NÐ $IósÓvêÜEûIÛV;¹&¶sØ$¶Ð.ÊþL1Üz K÷Õä…Š4¯ŠNªÙ¿p]i׺(çj·…ƒà13·WþàïXò£Oì‹>±Õk÷l äúÙsvæµË6I ·Ü<™9&/mÔ°ëÛ¤ãÚ°ÕÏïÙò*Rj$dÓßýŽ8Ù.¼÷k6ýöE³ù1òatÝž-‰J´ÑˆÞ‘ÝïJc€HÃÚe¾ÆKuÛÚ©ÚÊÊ Ž›Ø #U… J¯•&¾a@Ú"ӈآe¸6œû¤÷×–G‹#w´úó@­ÑË~R™=n2“ÆîåòŒN uS‚ô+0I‚®^»e/Áx~̺HÔ¢Á’: %K®Éj½ŒU@lssÛ®~~Í–––ÝîMª+ÅQ“ZC’#© e ?=‹íœ`sÑHòêžöõüÌr6p$sT™ÁÓ<».€GñàTE)QUTÙ‘õzI]‡ˆ @S¶X}ÇbÄaËTRR'N:¨(û2+¸o ôï¢&íUÆ ©lÀÆÇò®&¢—°‰«ØA~ Ðqbj–ÔhiÛÆÉb½Ú±“x©¶I1•¢Ò^gÚç4¤ArDoRÑvpq—®íS-ÎU>]©ê8tdP9ªž-âÃ)àqú9;}òM›¾2gëŸÜ¶ÅOoÙæ­û¶úÅÀ"À#Ý€¡QÌv6Pk‘æjüÊy;ÿ»¿GëÛVüÞÛH×°+D½%à†Š¶Y&¥¶€W‡§¹¿h|è§qšå:ÂÔQ7€.gO˜?Îêœ.è³å•M>°ß#0rKâ9Tf Ú.ü*³_ 7>Är¯qª}RÛ§úFû ê]Bˆè2Ñÿ‘dõ ntDOÝM{m‹F):7Œ¥Áû ®ä>£sŽ&Fîhöëž­ÚýÒ‡m”°. û´ ¿pìW¹T½ô|Mbšô$’NûT¶Wmm ¨3 €’˜&ŒƉ:LFþ’¾)±º®/c“õ×õS»víºß+”­V+Ã0á›HtÿriËîܼÁz{TeÜCEÇô uÑ>Õ%ÔCÛÏ¥`ȯôM®&@HÂÆ$ŒI«c§EÓ±£‘4Ý›Ž(ÿ'’5 Û"©~ª§¬Êææ¦«9“r6´¤D´G­×7tOÈ&N´xl²¦yz'"^ à[G ¦#+ä>==‰-)µêåqé6ímΧÐÐÉz ÚEB'û¾^ R¹–Öiß$p²’a$wU`^ÙL¦”ÒÆy`£|‹þÇ;öuÂÇ,¼i ¯ž´í{ë¤ÃZ³­eÒaqi³ØÃ)föÍ+6ñí_³…ßýMKÿÚe …$ D¼iP¿îl”,^£fÐ×íñ&ée"FƇ–*¢»xÉÔ2ç“'Žééi›D½<‘C:©”kœ¤Šm€O—¾ïÐî0Χ ›ÒÃÙ¢3­^+ÚÉ׿í$öxxd7uÐÎx™:e¹wß7{íÞ¬ä”ÅÇyƒP3«÷¤ïEêIh– ’¸Ô˜ò¸ò$ƒQz’ëêHÌ>ú©„ñÆl<­´b9êÑÄîpíþ¶m¦ÇðV<½óó¬GñÓV±Ã\^]µR«Âxæž”÷!À‡whðÔðΫ¾²UQÂØ½j|ð OÐ>==‹%éâ».¿qƵ³MäÙµõËÝÊØé³]² ƒž«ºˆÉš<¯v‡ûJB%÷ÆþRKuÜÞMÞ“DIƒ4XûÁ} g!À¦’ÀZ$™‹áÄ'pnûªŸÞ\¶î®“ðªÈY\‹Ýþ’áQ]†qhm+J†$ž—ĉâ @œöML\º¶Y² Yl±kò¬Å;7°ÅC­>´ÉV1 äq¬Kù p£)¼q8Ü5´ ¿*5F¹/Tò{úE™-å{eERLèÓÀ¾¬ R¨[»x‚fßZ°üé°Nxâ À-e›Õ’5R]öÖÌ’Óò¶E'_Á¡ZÝA-gksÓºë‘tS´Q cCtÐ/Kê°1> Òx즓8Ç`›×f`6¸×:€S)ÎæNÌY!£M]ÚÑl>ÀN\Ú"š<Ë2øîè¾Ïâ*ÀéœÐç~`Ƚ*j«\ØvpŽäq/aÎm4Fv÷Ã0:é:ýÂØÒ¹¡†]7:vô)0pG¿÷láà28É NÜa 7ؽö?Ïe¨[¨W¨ƒ¶]F*£:’_~ø™Ý»MXü”ÍŸZÀË»¢jÅn}ø‘Û¼=xð&“¶sç.¸*p{kÇÓl5±Í’”M ³LˆébׄQ_¿~„ìs.Aƒ“Z×oŽÏƒ(@%@Šk¸yð 6#†²"=a; Js^`÷ÎVù#'‡±ßVˆ ÷—?ÿÔ>¾‰ºlú„ÇwÀµQq)¢·Mu5™h.5§¶Å°ëµ`¤e5p`Viª;cØÃé¾õV×RÐW¶v[kK †&ö`¤0ã˜$eŠï‡Ø¬_qÁJ~Ú¥&óìýJµmOÎj@ÙÕIµIÌ8÷DÞÅæ® ïa¯&Úd‘j%\ÅŠÃjò%œ Šs,žŸDò—²<*ÏØjÚÖÖÂ!+¢ìì¬ÙúÒ [¾{ÃÖï-Úöâ}«¥¶qω§¤oR1Km«6ÅÊKŸyÊ“Svòô[8wÙæOã 3µ@M¤®lØòò¢_?=;ãLÂæÉ–!çe¾­A¥û‘à@ÇÃû3x²ö©oõÑzÞÇõ>]® œý> ûŸ7Zÿ*œFz·÷):oDÏ}ˆtLÜëø‡ïÃvI-IÚàì•”CL!R…5Û0W—ÜÀ”Ý–Š¯C&tIBÄW‹S0c$]ìuÄð§* ¢PÌ5ñÊL‚„á}5Šë0ì†Á+¡¹˜CK±všÜ“x*Æ¥ÎãÙª§$EP¬4°cS˜ 1pNQÔ¿8!ˆ‹JIõÃð½oÁŸ ]¤7‰&iµ°MŠÎî¬,Û¿ú£ïÛÌÌŒ‡ Y^^voHM~Š÷¦RFz¢’Á¹ H§oŽAäÍ EEå£_þÌ^ýu+\$¦uoú!б2φ¿ú³öúÓ4õö…dŠó œÊOm&ñü$ÖÛ€$O' a€ÒIÐJ-­ç-ŽmY p*Õñ‰â˜çI]Ã?&$FPEÙÍ Â¶„|D" ŠD2JÁE˜2@¤J=+וô½nãí”M1žÒôÓé™iêp˪sjÒž}xí£!t롲V‚ùlÉ€®NV‘*ýñÑ[‘q”'-ºc®(}€ðpÁ‰%uKúÐfοfßýÏÿ‰ÍâEÂц¡m €«€O@žbÌ¥p‘'²Ã3‘„5½º?ÄñFjÕ¢_”.+új]:¬èyú©0Ö}ç?º.HßüÚþ}†\r¬‰>¢‹~¢SXŠ:ÀŒ¶ÎiÚ h[×@·û¸Î ý¦õ—²h`RÔîP=ÔžQ9FîpôûF\=øò¨ÂáÅÑþ4CÅ,’¢­I†Ü•²£Š‚Æö°ááåÃA MˆfeË™Y³²iõM<8ñš[ù Æƒç €©Ô'š°„Ù¤bÄ6F€NÌXž†D½c”Ì5µžN¿m=B€Ä¦¦,>>È›äËtŒ€ªY$M)+·ÐiàTâÞ ˜H„"cuIùÔ‹Õ׬&;Ù»)˜¬bRMqÏv= wá7xŠ?j+xê9R£Nm¾‡4²JNÇ‚îªT IDAT^tI'°•HÄõ…™d'÷Än9a¨“%U9K¼³…Ù1+â9¹ú mŸ®bËe‡¸ÂA—$· /"‰”÷=iËŠ“3Ö9u ˜#íTÙö%@]JÞ#ÔS=«ñ88Fe÷EÜ_u8Ÿ3…–•ʶ¥‹<Î򱮮}ûË?þlñ£?gŒ¿swç’à2x­IûºdÿÀaÔ ¨=U÷ÁŸj˜m)Zàšô ùxÁw¢Ö¶µ/>² ì6'æì×^¹`Y}ÜõG}¿hÆÂ ­E7kc'Ðbðšà¾pNXp¶_¶¥>êBÝC;ÃøxÙêúM¬ÏÀ}{í)ê^¢Ý/ì©ܺ0‰8Ì_búŒ$g¨Bâ€$¢šz̪:žž ývV­Q•÷¶«& p%&lnMò²J6À”å P@0)Æà{ÅP*'}Aµ¬]†IsäÚkWø ¤4¹é“6^⻞øO;¦  d õ¬i#]š$UTõnI¤Rs½È"É[IÚí –`75´ê0hTÇÝú¶å'rö’Ä/NÙ€šíÐÅAœÉ3¥BˆK(žjÔéâ„ÍLÏa›8aÕòªÝ½}Ç.]yQîã ¬qÃé‚%À_oÈ•þ`È¡«øØ-/­QÏ–M"‰£RŒ;29ÌOÚ  mÚê.©«ô!¢Ü®r(Ñ{D°¦îrÂà5bĘÃ{–fŸ£ú¢‹ô9†ço ÀM’:>Æ­0É *d•¶z;||Ô±ÝÔljè‘%͘ӆû÷x®Ÿ§d¸˜3ÈÆ!Á‡„ú^ÏÓ;¬±.ït‡&Õ7ºÂ/Ûó¿W€-ÝOsÆ~E@DKÀéºÐöƒ\¿ßý¿éÇü«vˆVú‰>fúÉSW4×yö¡ÍáÚ@Ó@×pÜ÷3^ê¢q»k, ¶Kë£òôx±Üçéë=ºò)(&€ðBéå©v•k’IDvKúµ‰‹†d­³³míZÅî-ÿŒô?ukã™GôR&l†úä²0™ÇåÏúÄ“A–B¢&ÐôÕ¯F¤U0ê6*(Žmcÿ¡°-$cm¤v©¹'Këºû־͚ÙikMŸµÚÂYË+söýè+©—$²ÃëìU.Éóz€©íˆ;uꔃ¸õõuW¥ŽaËs˜còC ÙÄàëþÝ;>Ñf®`ì>AXŽÖ󆇩ytmÛ´v‰æ8ÁjIåd€¸ljÒò¨¬+ëÛ³=í“.`@§¸ìSqU@œ˜UIë8R×âvf+·ìÖ­Ûöw#=¼W;ˆ°ˆ¤:€&Ï ÉøS -Aþ7m¢vÏ:yÚÚí]¬ÈGM¹ø`ÕZØ{Î3vñíoÙõ/ÿûù›§ìßþëkð5wy;6‚ä2 p1ŸYÖPùë=zÈ”9ó\Ú¡}Ä,vAb Ýë"êcºÃŠDó}ãoý–½ñÞoØïýÁmcã¤ïâ£fqeÉV7–­Q!2úÚ ÒS0}uõ Æ¿BÃðFñSf<`y!4}ÛÅ»•Û`Õˆ¥¡Ÿ,<©D_÷8JÈÌ@ýÊ`[´~"ð&§¢{éýWñëUçQñ9Rt‘tSó¯ÖõóŸ>}vÓ[Ûá¼°Ô©ÚúìQϽœDÖ¸U{ïÙÝÆ—³ÖßœZÜ7§¯žº¦zi_œAƒ¹3å£ê,Y¢±a½e«l,Y}sÍIº}×' ]“$Pn"7Aê!b~Ç-‡Ú'7÷®¾T°\yÝe³ PJ‚r&'=³àjëH€š¨ªšµm$z[Üõ+Þ£½Ò^ŒepŶ5¢[e»¹¹dñÕ/I!Y´ÜƺMÏ$ûÔ:OãyIfÔKä˜ü0a¤‘*è‚<ü¢I.Hâžšp\XoTÝ£°`,“a`ñþ=O,}.…ÚËy¥ =<#ÃCY‹$Xbù˜}oÐY„Œä°!#®2N ÛÒ†õ ’C.ý\è‘€8=_’2¿­í²14lŠÐ-+€Å[·n¡¶Gr*é CÚ0ýŒ$vý¢}2Ïk¡BÍZ†îº÷2 àÉ&2v“ôVzû±iËS׋¯}×.=C™_·{_~b7¯~@”ë¶¾ºdrÉTÈò@•{à†¹^Þ•h[¸‰WÀ°>pGß4æ —N‘–낽ñîwìÝßúíÔ«o[=–·MÂßl ¬–*|(èãˆôgŒ7}ôô¸‘B‹t…Îù%´¸lùhA*8)cvIà ¹>pꀷ Û€B ›V‚ËìÝðþÞQc·ôG‡Ã<1ìºNàMP:?\ópÎQµq=TÂ|lsœE³.ïH ý ít@šÎèÓûî%Ú78¯ëš—­$’9¢ú Öÿe«ç7µ>‡œ¾¿©Í>¾õÖK4ø"¥ñB‹£µòlnZsû‘é×Q"1câ“Yf|Òm¿ŠHÅŠ'NváŒÍ.œ"ªü<Ðoš<4•úHJÙaI¦2æÞhHͰ3ò\jÙÕ±Ë8Z»EÒp@ÝÎö}«f¢‰ä¬CÎÈjÚF™\§|SóÖÚ¼lS§^±TñêšižÁÄrh¡^U{TWyÍiÂ;qâÄÃI¯Z¢m‡(Ê ÉS<:ƒ­À¢Ô€štOŸÆ¶K±Ì^`iÆZxïv"ʑڣ¾]¼P!lœ8gðEÔFXòŠ!-Jç§ L Ýúöˆ î{ø"Z0E£²Cv&µoÌ Û}' Ñ8@ Ý¹IU:Së bajç˜leôW€$²k¡®ÄØìðr Õjè.€¨¨]\lXýþ&¶‚óvaúŒýößÿçœP³Õ“ÁãCûòúU[]|`õ-ÞÙJŠÙ/áÝ=d“©±Xœœµüä ›;÷Š]yí-»òêë–S>-€V­Ú²kk×­´^æLÚ -ƒã‡Âœ(^ƒñ'ørq. Œ åkÃÆ¨ox6Áû+ £ï|åÑŠ|6!EºÕà4žUPP(ÓðVB[u^h¿Îà†]|ÌŽ…yJ´ afÚêcÆË í´­s´OàX¦ê½O*á¸ÎÑúË\bãBíyÙëû2Ór¯ºÜ^T9FûºØ´u*+Ö^ÿðtUæW§ŽáB+؉Ko؆ûs_³™³¯¢Ö<‰t`)Š2`"QÄ‘ üû%g8ì* ÂÔ£p{–пgUÀ›¾þ'.!QÛ²*±µÖ‘îYí`ni YCÅ»aå%¢×ãD1±²Fè…÷mò *›Áb QÐ$ǧ&7MÀåóy›'Âý©‰ àòùœ§à’š°MjÛÕÕe¦ž3 ˆ}‘EaÞ$‰‹$1¢®(-`iLK0œG •/²[ÞF¼‚ \27œAï×6Ñvã§ Dƒ$üYñ+SC-£\™„ áø*r58’Lî² sæÝâáã€$Höž?s’ãMIV¾0Ä«JV² $fmóÁ޵ï®Zvþ, qÆþ·lîÊ·ì{P–qâÙ²òÒêí­‡uV;TÔö VÌ_~©ärDõ24VÖvHi¶J¦ yc–€è,Ë9rDiÊ«p+—×$6 qbѹ<•[»cÏ©CÓœT©lJ…ìÂRaw‘¸"Û!< Ò7½Œz݆”ÄWŒUýÚ K×w‹"´tïXê§uýÈß—<: ØË^WY^äd•fîÒ1ÆOاë5Ϩ$µÓy_NcÑœã/sY$Ó‰êª2ØÆ°Žù £?OL€{b’½\„]/Gx©÷µ`NÀ$2°n\í6«HH`èÙÖ ù¥È^pý¯¬RÞò\•’…¤0¬6’{¿òª~ë {óíâ*Ã`ãòè…‹&ŽàAï§æžRŸ$Òƒ‡ÚêÜq;÷Ö·}‚“é6} û!¯¯±çºØ`¥b Z]^<…Á9uVš-MžE&ß:•}ðsûõïü69SgØ æÇÉ1 =´ž!„‰žóEŒ½ž³HÕ°IÍCK5Þ T…¶ê,0¡x‹êë ÒÀFMÞÞ¢®hÑS1%£í“7ùxqIxd¯•Fe&ß§ïLõ/Øs‘l^¢[ûØÓÝ5HÕ×]¼âåÄ$‰²æ'!RáÕ¤Æ4¯0VcŒßÇŒ`…§8x=®Id°ñc/7äWk²ÒøîtÈP¢¢~s´Ë<–vy‘DYÅ?R4öüwd©~_?,Q¾bê s¨“–5úSiþ3¾x7ž£_»xïùÞ©èr=ÿÑÜíÓ8Q_梱.Pª¢6h®ÐµŠÖÐaeeÕ¶ûiÅêœ]'"íR?;=ýôÑŸ§ ÀÀ=ѾI—™,*Ä·jb¬3† TV ‡4@•ŸMþªÍÔ–¬U%E“ËÄì);ûê;vî5z_~æOªZ‘=Û`›õ¢ê§ÉEó¡ìv†Þ„Møâ‹/ü%¾xQi¨p4à\1®èü¯~5aˆãžr¨ÝÆ¡>‹-ñÖø:›9eÕÙ›¶INÊ­û×­†ÚªcE8ZÍFÚÊäŽÌ¿õ=KÖ0çFSˆTï»,ÀIù4[ä?}íµ×ü¹µ/kñ­â°×ÑjÒ‘iC`ç%L®ùêµëÎ;>ñNàM(Æ®vƘ•ƒÊÃ'þÜÿiOÙÕ$h«Ôg9“B¯ÀY™³’¦'UJ9ÖÜØ²?ýà#û‹ÌcjÂ’DüWë‹x…d'’ùD}ÜÁãQ GÿšÐWLÙ ÒÙdð±ƒÒN•ÐyrxMªøA½ÇV ÀúPWlÆ@Z©½òH¯ë¶åµ ú¯ä|4ËøPðeŃD„îý,uvB}Ò/jCx´KÛ¢“Þ%í׺–ú=®½á^a|h4䈡g 3ùû'™[äHDÕ¼‚:2ÃàCB-ð>Kºì#Cñ®uÕ)ÁÜÓhGNZzžpƒ><SÓÄŒÚÄÅRE{{Y÷»ëª¨ƒä]íÕSyßt\«ýâjnvDÔzâ$‘ŽhÑјˆÆJ¸šGûsmkMç¼ì%ŒÕSmÛj³Þ—°?´/ZÎÏýyZ ŒÜÓRîr¾ºióYÍÜŽ´kã–µï}ˆdáëlݱíòša×6wñu[xãÛöÊ;ß³“gß`ö(0ÅÉ4ðÈF#¼„»›žâk]…wÖ¾ÿýïÛøCgò—.]²öÏþ©« ôbk‚×ä5x>’£™™gÅ’'„Cç…ÙÂ<êÚ³V9qÚÆob‡7a[·¯Ù6!BjÛk¶YÁfiù¶å™€O\z»¢sV¤Öe°ßP¸BX8…ãÅÉ…Ó–±]j#éIád¡¹±NàáØ~ Þ[öÕ V““3xÚs÷îmÚÓ³‹éË.©¬£æ×­Ú)†$‰Êó,;|Õ¦pòLlÚ4Lýx6Œžú4©Fð´€ýäóëöåM Ïìw¶`€ØX‰ÑšVÖ@í ¿*ô’·opÞ†uD/Ú$LjLtž¼§bŠ=…µLµ‰yÖ®ÊõYW¾Ï’^€\½´„9’(Ü2«OLVì.-Têm‚° #÷—«ÿˆ€FŸÊ¦ a´+•¯ƒ€›Ô‰bŽ)|HÞˆE†ÍˆIt¸~XéÒ™˜Õ:JS¦ø¼B=~IÚéAq‡Ü@€Vã9€—@·°t@Ïq#†<8öuß!þ¬(¶ïHÊlé¦Å±S®Ü°ÜÙ÷lêì[VDÂÙƒ¶’(Åy§; !B£½ŽÔUU¤ãz©DÆDž8¤+ñ>)£²nY…4r÷WÊv½dÕJHNxÞ7ªS|ðÚPwSѶÖe£¥ñ®¶j©}¢ÇAJ› Ô~>í@€Jém­«3yL39Ñ–þ– 1ŸE´%áê愬¼nÐ7Å8Õµ øÝEÒÞBB+*Iè¡ eœ‘3ˆÆ2InS½ºã~Q»¨¢5$ˆ”%¬$x]m«Ž¼oµÞwÑ>ÏRæZ— êˆÞAÕSÇùù’S¶ÝþOf‹ÝcC·ù&Ñ=Ì…¼©Þj›âq†1£eX×q­ë£cTGçË]W·ÑÕÏ€ìœJσꪹ|ÓJ×~lÕ;¿$äšOÖÙ…Wìµ_ÿ-»üÝß±I˜D*7Çdeƪ1!û¹¢4áðõõ—1ªè7íg?û™K¥4©ß½{×~çwþ¶½ùæ›%RzÙ¿,}ò,Mºz&LPYb´‹ýÏ*Ÿl‘GdkÈ¡ª›(LÙÖø—¶ñà.LµáNšÿÈÒµ-K¼òËÌ_òk%iKö\!|…ɆxÙ Ý„ˆNƒÄ~¶«ñE@ë Ü—>ÒÆ³`WÝ:"XË’@p+ùß«“uÝÞæo–ͳôÌByhü{UÈßÑÌî¸ßÑŠy¿²ÕÃ*¸ÍµÙ°¹t6¬Ÿ>¬œ}>l/Îã d8t O~ñ_…#§baÀq’Í OŠû(ë¡ ãíè–'v¼»1eí|dP¾«d"Ùy/ž|,ŸŒLÿs‚gµEGÃÙ¨Ï`ˆeöñ,³{CïXW(÷…Ѱ€SØN€ÙÕKo„¥¹™Ð±Äæâ¯±bv}+Œ>Z ½G EÜæ›—•uV _ _cãc 8&/ s³1‚-ïÚ™ObTÞKw:íìlEIœ*ä©Ç‘>–²Ù5¥ˆƒé^ Üã³^ˆ>$`=H#+Øne ÈíÐ(Îc¡*ª²µ¸½Õò±pòÁž›É‡ÕÅ7Âùb?ÏБGI¹`³üΰ4Ô_YY˜á#r—…#[ñ»5T°±î@„¿yh"õÀð&©8•2žpu³óø\£.ŠèÏŠ¨UG5mGå‰J5viÓìk¾°ôâÀs™‹;Þ%¯ÍLM#L‹ù7Ï­ÅýØÔíª€ýbYpšùƒ‹ÀˆÕºåQ-†˜§½Ý·_¯¿mÛÛ³!µô;}“ξ“Ú•­¯)aÕ-:è…¦+øEœ»ú0u˜<8öˆviMÑö¶]™ P¡bßV'öYýï™F"DM¥ƒJbŽræùƒìîÐÙØÂäÈÈþ¿yÔ¶ªý›-0—Mp2•aêÿæÙÐ^ ê“}lL»Å',_úí{w Í"`ònÃPÊŠè »Eê”{ú ì[ø1ý+“èj gy^Ñ™7tßø8ÒåN¶äC¥Ï„ }Ò[á’íÅ'9¶Aãý2ЫDßpån ®C`Nz…xë®õ¡€NiˆíKŽ$ì ]"éŒ-›³“ÎÕæ&pÐa” õ˜=ómòè'mAz´óA\þ$x³Í„Cjÿ–O©›&ò_—Õþ´ïù/ÖÐ-ôi{mÿòR`À½CBý¾¾ÖÓZšy#,œ{&¬]øMXgãêÎÞ‰0ñð'ÃO}>ùØŸDu§Ì(j£4QºÁ˜´ë  S’¹ØIÓ€t'ZèD×Ý^z饸¾›Àû[f. k±‡ñjñ¬*È Íá1Tù­ÇEU&!ßz†Â¨Ùj —&9˜õªÑÝn6Ríþq—5¨ç}ZtÏÁB Û/‰’±ì}tÍ06v0 kH攸܇¤Ö²Ë| ÞKƒtÃ|i³ÁùÅ‹ç‘v„± Vê‚‚\á¨'³û(2 F'Ì0K%·Õr²2kÜ«éWŒMÔ·[̵§»ŽõV&ûÃ/‡È7›Áëõ?ª>‘*MÓîÊÝv`ªK£„£É–fƯ}r'å*æT­l2­ÌAG!÷*ŒCšåÆš „‰§A€šý6êåÅÅETwÔ ;HK¥ Nÿgƒ*剠uß"ƒň`-ï€K^eZ¦çïîj6@8ÄÉŸàM`'˜s€^¿ðSžÜ9h Ö<6åªuO]àÇC(èòƒùl?âMþ8I‰í˜ëÔ>Òoß±­ùm$}ï{©=åh°yôq92ÓöþÐÀ.­Ž­g±—8‡Çõ +õç#˜(_>6¬.φŽŒ±cÉQl½”r2ɲ;EÄÅ9´M¼pCÒ€nM²ô²`á©éKýáųsávpæ­ƒ­ÎÊômÈÌ› P:·‡T¾ö{‚¿˜X>ƒï¥{íïÞîZ© ²c 2ÚŠ«À¦ÑnmÌré[‰v¡ÐsñLu}3ò”üôÅPgQÖn+:ÙÉeàÀÁPê£>ÝÁ…ìŒ#¹S*kù•‘•ˆ3ïĆßYçO*vÁ› °uŽåäA…ˆÄˆŒöaˆ“ Þ#Ö0ØÍxšì‹L„:Q–K(¥ÄEžI¼Î¤M&©¬!‰c—Vûð¹ö¥íí'}óûp¶­o2!Ròf¹ïVÛIœlü>îw4·öÑßÑlîgë½R`ñõçÂ2jÓ+¿ÆÇÛuü¸'ŸüRxðS_GyŠA©ª$ŠÁu}~ _XؙѻYH0uxü†ŠäÖ<È´ ŠlZahh |ñ‹_D20g•>úhܧÔÇt)ÄŽÛböî"žë ÂÔä|³¤íÚUxeݺÃa\˜P©æ˜ÉåQïöb³å¾š ¤jì³y`X›¹Ì*ËY6 ÿUØ@%2‰ZqpòÐYdý-È4îÇ7ïÀ¨yôàxÌË¥ËÂÊÒ2‹:îÞÞ–ßV!"cæ: Ê2+ ÜU*ÍÒWL[n~Ã*R†oV¡2»çZ§¯þS¢i‘ëÄ<ôv«Ø¬í²·î®Y®ŸAî}ݺ°²v©åïlHY®KÎ7Ã$ üðä¡0À¢‡~l³êÝq#”„ƒf IDATžûÅó€>¤t>ÁˆeÞ¥"(ãkÕH®ltÖíJd±å:ƒïæÚ:RÀ8tó]à1#ƒ,/è ÖL»ëG `BqxB¢ÖÔeŠ‹ >wpÐUz# ôŒåšàFX~ùWñÝ;ýÉ!ì|0äyŸ¦ì ¹êF{#sCÒ–ã–Ã8p±ÜíÒŸÙæ“t*¶o¶BЫ܀*=£ìú£+¢úlàβ•G†BåÀ)ÒªHjÐÑ" ssn%\¥¾ÁŽk ÝàHTIgÑ;ó±.2pB¶)Ô‡O?[×}äøX¨@û€ÆÖ@Â6L“‰uX©S~U‰æÕÊ~{¯]}êsŸ¥Á;ÙúÞB±¾.ÛÅ%ÊnèÅì¡ÆoÖr¨~ÃßÝ%ßJèÈCd5d•œN4”`\?–qý²0&,Î]=³£atr*Œœ„ÐYlž2øD‘ä NÒq´9eõ:+§÷¶E•~ö5ZÅ0>ÔýüÎmÐÇØêÈœ®U|uMx§7ÒÎÚPj#­³‰ tøxö¦·Nv[ ÿNž¤¯ Í ³gégþÛÛ‰Ï~Ë  sü+½M'‹ö;Ÿ©»^¿óEØÏà^˜yù§aíÚË¡±q ¯áôÇ>>õ•¿DJuŠ.Ä…d¥ÀL½Îȹ´²^xõÅðÂ/^… —Ãá©Óabtð]Í |ðtð¸58ãL!2ÔÄì@ÐÞE¾ºŒ_¬ß¾üJxõµ—ÈÛn\f?òå?‰ªÕœKÐ 9¤qCÇPo!q#Î|=Y_Ü‹gßDZ´Vv0ï?‚[¤mº˜¸¸K„êgˆúD;|ì(ãA-Šûe${…Ôd¸2¦4HY†Äv1Ü/¨‚0Ì¡žuÁ@ƒd‡Ú û–‘,v3°w1¤ìpÌ ªCfŠÚŸ±è#ÇEWëVÜ¡Û&ƒà~úópæìKÙI¢.[ðIÜe@AN¶ˆ§§Ž„#ÇO@3|ÆÒ5œ»Ê×4F —¦¯…õ­À6cЉJBa P¸ñNÅ{މ„l ¢þJDzrŽ7iÃaÌ= ¾—I˜,†¨æ‰éú:¬5ì$kÞ´/ÃûyL¯uö:ý¶ zøÛÁÙ6¡„%m7^û,µ%ßMí)n`Ï ]§ë”W†ÌëØ¹ao8À ÊîAìä‰C¥¬yÔþ‡'ãb¤vf§Ãų¯‡ƒõ“a _a9¶G¹!Y–†zwIÀœig…=qóØŒÕØñ¤ÎþÁ],zdj,¬õM„W^y%\ÇÇ¢‹ot¯Q ¯éÆÕåR!••ÈcYÚ P-Ÿek¿oùÞIè."ÍEK ÷º~ÜGW”¾áx:Ç"„pÚÑD‰9"*9âà”u=Cº=€Ü´å€_›¾V1«˜_½*Kc˜ˆà0‡Ì6ÛŒm°Á÷öøèF„öœ7r›÷Fþt~½´õ àÅŸñýCµ´A€ÛE>ð¶Hþ˜Hð›.ÂU~¡^V¡Þ£ ¶ƒÔ<ÛvìQÊoóà½ßgÝ›÷¤:õ·mÂrxÿNÁ÷$Í~¸7 ì¸{£ßòulì­”“ñì¡icsä¡~Vfæèp?{Ðÿ6¼òÓï‡ןG›¶VŠ#áñÏüËð‡ßøßØÃt$z¯Tˆé–!ó¸tþZ8wþrÏ$hW®þ6,/?úúxÃH5âM†Þ.}‹‘ðǼ¦<ʰnÇÈÓ=ß#D•—߯-Ï…å…kH]˜ûâ"a@6‡¤áøñažf*ÌŒH<ˆÇÊžá67/ø ‹3Þ9ìý6^þ»0p8ô‘¯`4_ «+›¡‡øQOlëø\7y˜Ap«^B­l>£=ƒ–j·l“uVà¢zÚ@ÅÜe!ÕE¢¿LXÕ[œs3èo£†¼vñJèÆ¾ëôi3¨jbI#4dƒŸxïa;¡ì™:Z5«ÌþQ ‰ÒŽî 1«›*rP²làÛ«4|8\:7V^ùÚ!ý’eé§1×Î]¶@Uì €Š¬‚}í$J È{T›‘Že_£¼¶Aéæ͸-¯@H§²JýTÉ*Õxô±'¢ª··„:u‡U¦HæÌ5îi‘bx?þµ\"´½*±›—,+µåØæ¼Û¿[G[HXÍKÌm3µÏÔF× ‹¡õœí¤ÀÊÚn¤`x¸  î»E¶‹«º †é¶€»ªÄY íú¢„³†×®œ 3ás/þPÁþ¯½#a·ç@xòó_¨¯ëd\[«ê5U”êÑÖNº!ÁÉuÚæØ ƒa©qg`ÑþüŠá4s¨£œ /W)K7“ª•©páŠÆsgÃ¥·Î!A/†#á\»:c‡Ü©)\­ƒ`@œyÐEJÄí"% [«Lèác=Í0ùÐ@øyn-¼xŽ'ÝGè{š̆Áa@ÜzHÖ·àT:':ºë‰RÛ²4Vêè;Þ¾·Y,¢&í¦5ëx§ªÙïóJÙ¶ÂØî äjèAÚÚÝp{0ÁÅL úP ÞæŠòØA¡W»=Óv¡Ò[W!•©ë‘‰ ¾ÑpåâÅpîÍ7™KWq•S §:‡0„Ä·%ÒäÀ½«Ù5Ù¨!Ŭ ɇñÅôlsñÈ~ÝøGອ:Éh|ï‹ü.#M­ç{1#fõ;+¯ ;Ëh ¨sÝ,eª~óž¤S^K³È)×!é¬?ã7ùiJÖïÒ· èq‹{Ù—8³kï%ß}JÌ ÞÓÎÑ8J¸ÏIñe¼,“že_ûîÍôSš>³Ž òù›çôn*“õoœ†ÔßÒu\ #Á[yŽ/íÿyרpïšdü6~;Ç­Á{k¬ôëíkìZàCý]aš½/½ôV^bßKü’!EyâñO†O~ú™‰#…áÅ öGÑÏU+R;¤LÃ-^ÜCÔAZoáÚdÜ)¤<ÝÚ9Óûq@M?ÞÁÙ4} p0Ì‹ùJéx6­”žù+u¯`²ºÙ¶kà¶ÆêÔ:nJ^ ã§>%B„MÊ­*¶‰dACý‰£“an{ʬìsÚ@ª'hKÌI•_äßwÉ»ù’iY^¿5ï³ì­i>âÙ2ùŽƒš÷,§Á¯ˆäî^B ¡j±8X' §.Ôâ=.]*ìlâøÿ~, îm3ô?V—ÖÃ7ÿÛ7ÙðœüÄr.ó'8¿lMŒó%£vËŸ>V¬æ ¹ïª.–n/_B…µÛžªêz˯žt06鮑¶åîa[/]Ë|éK‚=â8YÒœR£÷þbÚ±­9 t…b}xÁD0—Æ¡\Kêg~<6µ ã¾ßDè{Hl›uÚ?«Š·ñ•†D¬ XÐf®‚T¯›þ³¹¹^ýñw ?ýv¸òÊs¬]$ñR¸º\ C§=øX>v(ª6¸púÒn2®ldÓ&¿UÙº šªÔý’QØ®máÀº@v¢Ô@*VG£~•˜çº‡Ã‘,!óó áÊÌU\Ȱ¿<ÂÖ]9€¦v‹®¾tc ëHŽ­)¾óìá@ݦûG†÷Žª†™øàž§Ù`Qír‡ØJâ­ËÔ'¬{¿•Þò†XÏÄí}ƒ4MÁ{eˆ«3\eª5%­´‘í­‚¤M©[/Õoî@ú™³¾´Mã]a®5û•¶ê6Õ ò.tÒG¡ º˜r: …VW/] —gf©—ÃDþpÈÑöÊÔ{:áødqß[ÿj¢óa± åÈ«ªŽ@4{fž¥E:âmÒót–¾9Cšôµ½iœÞM÷ÛÈ«ºý~n’W2únt¸ÎKò Ô?Íß­<;¥ã3¯­o¯êöW›zmžÓ;¦íõ~¸ÿØp÷ŸÆïk íĈ]A–‡Y7ê¨ 4ê_] Ó¯ü<¬"=Ë­_K0Ä' ÿìÿÆN~FÃ,˜Á¸“sMÉ@ÿr6=55ÕR5–ã^Ÿi—˜½ßNl¸5·þ¶SË$Óûñ£»üfÃïcÇ"cõ[·šñ0Ž4;ô:2^ò"0*už¹Cý0Må"UÉÕ°táRXcÉâ›! °gÏä)$=a™ÁÉ5™:UÓq 7œØ=Ý\Ù¾H¹·¸ðfÏÌ?:>Å© #Ù=‚ Mæež¼6Oµ LewÚ0õúVF¹G{>‚ò\—H¯°ýÓ ¾¯#V2wX¨Ñ¦§ÒÇJ?}.ܸý—¯<žþá÷¢¨Ñ¦:”Æ)»‰‹—γ_-‹Zƒžå“q;ó^kmÀNKŠ€ÛoØ×qð᛾¾¾Xë÷3ŸùLøÌg?‹ ¯'NŠØ%ÞSH’Óȱu?ïªXB¼ßJÈrJ5-ÀC\ÈÀ`¤ZMÛAa`…jrAZ–a0 wz¼Ótu±…Hcg%œ{ý7ᙿú¿ÂìÅßâ¦Á.E¹´€_BVwásF»šáÊù3ØcMáÊg(~Kljƒ¼½H+‘S:møØa@g"TYR]_£þØí€ân MöJ¥0| #ÁÃ!k;ŒÜr$:¥gž½gH÷äÚ“É/ì3Ò¸=DzXî6æídÓ﹃Qêórii醔Ìtì“öM·óÒɺàÍà³öøìã <¦<'žàoŸýßÃßÓo/O¼¹ÿç¾R`ÀÝWò¾‘ßÚ1ì4Þë†oàB£§T¥ç_z.¬^z 渆„…í“=žøì—ÃÄCŸ"30cúZò{u£··²©Äë±Ç‹ É[ï¥:°¿M;ЇÌ=…[™Nº¿×Ùo\¹:2‚A6œ¨‡AÞ½HSHé§$Ò“çöšÀ~§ÆÞ§¸^XÃ'Ùú<†ø³¯‡Ë/÷‡“¦âx/ÛÚÀ^™±£Zªc4¾^ߌ+SÏÁjvg³‘ÉR>I3JRê·?›'óáwžým9ü-#¾À¢ï¹Wf)SöV¾×â}·üÜuàw`o }©"-É¡¾©Q k‹3¨’.…êô%\H¼aTaßÓ³ß}&<ýƒ…·Ø_Vs¸¢àŸ¼¦#˃JÆÔ­e·"[˜›¹IÌÚüËà‡G0 ç,H³­XVÏÙQÁ÷ÜX‚V÷§=qâÏi³ì‘ª=b&£x½Ã+± YëÐÃßæ-ÕË&À>Ö uïÙ |³¼–%ß3„êåw>o•›‚ß9TD5Œìð(m³i mŽÛμþBøÁ·þ_ܵý–ïo¼¼²Ån&'…¯þËÿ1<þ‘dz?þN8ÃÜOÿ³ÿ>LœCúE;¡î8ã®;¤=vgÚ¬9Mày¢.Puº-Vö¹tíR-Å!5»”DÛC²Õ_€Ô¡ n²ŸñJÜ›uñÒ[aýú4ŽE5úáÛ]c‚䶸MÛ=÷Ö¤o:‘.â§Ï{„:9z /œ¹Ì.-,,(3á‰+RiKÒ-Òº•fºÔÎS?÷¾Gz×kC™­v”¼ñ­ÒÍ2ªÆÀÛ`n= 4Qj{©Ô*‚7Zƒiñ®vxÑ“z"â,n#´ŽZÁ4»1íP‘ŽÒ¯sìÄ22qX…ןÿyÜwõjy°?æ/}ŸÚCúý^Ï´:$à˜ˆˆiƒ®žÕ6.:ñm‹Ô|Úîn 1ÿ—ígŸÙ¼«w44'N )ZBm¸fv^k×Ùƒoú•°™ l™/èf°ÚÞ¥«’qû©ô´.Í éÚ÷à^Üæ/Í ‹¼ÐÅþ¼ý¬l¼õhñȤ“Ä €¯ñRl—Nž2é˜.]H ªW#½LÄ÷bÜÒ-›lØ&i˜ØY"5¤ÿë„yhl$‚¥ÅöÃqv ±]4Q•Ó5Î÷ˆ£J=@qhœÑÉò˜WxÌ3y¿IXZÝÒ³Ô6M}OI\ây–ÑkËBTé·¤Ø.:q—“sçÎÅóŠ V¨3Ó´åi~o^`bé½#G…S§pæþ@¶å`R©¿ùòHõï=aâ_Æ›úYûû^Ǻ·ÜþØ÷7[Â}Kb?â{¥€ÁŽ”‚×Þ3ìlm‡Ü;,_~3œ{á{¡¼9MÏÃXãðSŸøBxü¾ÎJ¶ò|ìhà|ã—q¨æž‚Ô8õ9߃NòÖçí¿e2 wŒ[fcHŒÌëܼ—ÊòësËb#Ž›ªL†‡ëoÀd–VY±¸] «ñjß<ôœÆ ¸ pµî"Ô?0ÄuÀ„3Üñññª¶ùvey‘t1 ¡åÝ;if~Rµ3èt=??’)g½ÒÈï²çïžVí¹Qå›*8LÞâÀ>·°®`Ä={}%Œ0Óîëf³r$”i`"”z®#ùá;Žþ‘†?ý_ÃϾý×!k•<ºXìÄ£ä{Gõ+y°-3¬Æ{À«^Œm›²Ôr8æeem X‰r£Jû½Už]Cãq*^™ÃÆæKáÊ…³Ñ6®I{ªô D`ÕƒÙ@Òµ Rù }¢³ FùÅJ€Aª`ÕIJÛ:¶5aýê÷ÔÃÐb—:À±ùC”Ù^m·7ÕzJS•”»…”y7$þàoËÉ®vô!Û'´bá à­ðæ„S·/~%U7“àmÓ¶!o‚ÈêÀøc½™ž×yú©“Oíøòq?[ çùDJW0¶…uL#|‡Ð!›º° i’Eÿ^ÿê*d }[¨PÝÊ϶bˆö{\·J•Ýk¸X×ož½ŸâóýRÙÌlç{³ÏôÙþù=R`À½GÂ}ŸÙ)níô0¡*Œüâë¿ ×^ ‡º0.…™õL>þÌ_à…à[·°Š®„=‹Ž)¼[éÈ Z0LÃÝ:cb,w*·ÞA2Å£$N ËÝBb©lí }k¼Á4Ò{ qà\. „¾¡©0zl‡J û¬ÚòT©ØÄ{#ô¡>*ÀÌš¨YˆD\•§·vóêÆöJu^¹TkøCÛÅF&ç’Ø»ócþ-‹ùJu$M´o´ÌÍÍÅÁÄgJ«X2Ik€ºKwzÜ„6B8}§uþ&+w¯¼úJ¸v–}b€MCU¥«¾vÑa=r’¼ÃôÕñb@%H^pž€óÚ¼.áÄAû0«v°½ï âà¿aдì†TnÏuò₆<«*¹°f®|×ü²Íw*Ù;»?2Ô)óhÞR[I_™Òel&7~´.rHwWçh¸ÙÑàŸ·ªä¿‘§^”t0æÇÉí¤‚­˜«A¯O_ ³—®„áÎ> ñÇ…O~ý_‡‡z•ßÿžÿÖ 3‹H¿Ša|€üõcE©)†#J «v“NÂVü£½”píÁÊö-Þ }€ªUœo똶Tb‘O‘ ¿ç§ñÆ.$Ú5ööõ‡Îƒƒlw ôà.Xibš[Ùëˆ[uKúm³»JðMµn‰-ÊúÉoan u«’}ÚûŽJSÁƒ`àÈ‘#q"­ý~s;³ÿ4þ[ÛÑnÓA)ªÓZèÃAï“Ë~Žlµ)ýX)•/Fد%8ÙaÒ£ðCœI€¢$Î2A£xøiú2ß4\<ƒí™ WÊQ"Õ@’@‚%˜1ÿyHTÏÆ_÷þ§N_ÚA]½É옩\TGßy;¹U{ïNü¡=ÕÔgîD?iïw ÄIó(A%’ì›[ o¾ùfxã ¶Äk.²Ï*%µ®²Õ¦7SVò-oxíµW¤qgÏž“ž~ô£‘^öOù·é{V›fýö¦ÁüÇvkÝÜÈSvm¾©ØxÿÏý¡À>€»?t}ßbµ“¦NÞiê4] "WÞz#\|ëÅÀfS,bÓkù@xU§“‚u^:[>Á˜gårM%6 &;šé8 ·ïdw Æagw†öÌ3ÏÄUŠŸþô§£í×^ß¶ÇíuÆ”²tý.cY éÚ÷n|‡Ô$ê†(ˆ X];FކÑC×°ÃÓüÜË¡€úmA|Dõô²€ª»$T/ôuõEƒü*n z{±::Å`PÇ vt«k¡“As¯àà ´ÇúhÏŸßÄò@é*HœžžŽÌWu¢L8S7ïûÝŸi¬G‚R@ZTbpr›´é3o†eTÁƒ¨7«¸j¨¢ZëD…^ÇÞ¨Ìfé§Ÿ £ƒ2ö.vÚÊêÍü;¸¥¶æ€!³Þe€u˵?Á¨Gj˜À~—¾Í®³ò»À¾ä›ÐBuZ•< ¥õ½„C“xßG—1" Ò<  ‹lÅÖjÆä/>Šçt]£þ \¬« ¢ ¶^jú2m*îU›tRõ‰Q ï ’[ìÂÈ`øò¿ý·áÄÇ?žûþÓá×û‡¤fÙ íàjL÷ u§‘&t‹A_sqå)m6ö½l@TšU¤NJ˜>¶ºÛ]žaEñNXÙX ¹åùP™ÅÅ-«¥®œGô¾ŒÝ]“G‘: åá ¤vL ˜mZvÀ JäXÇE»9Ø0¢ÌÍDšc€W$×…ä±—¥²«²3p;,2pb#ÀKkÛµ4’¾MÔðÒ$õÛ¬î3B{Ï,‘þUrœ–ÚÖ9 V•#¬E…°í#ø‘ý3â9îÙíc%ú ó7¡Y<›®mJ±)ãÖa²*~7PõÍÏ!¥DÊt€íÈœp˜‘]1h7gÞb¾‰á^ÓÖè¼w‡F]%NwiàK؈*Õ··oÓ¼]HôóY; Ÿ“·¤~çµàÊoÔ¨6Màͺz衇¢­©uy‰‰†“Gé `3nù´šµ6íRåÙ/¾øbäU?þøÛ&ß~—œôšŸv~yœ&¤2¤ü›Ï<ýh?Ü? ìS÷þÑö}‰YéY‘UZ=,뮡ÄvRªºÃö-¯†ßþà cå¥Ð76Þš[|üÃÔ§¾@âÿŽþÇP%`‹ãû;¸põ‘é\vyOù¶Dÿe€Ä.þÓÿ÷×áG?ú3¶­0K^þ§÷¯£Ä&1¢[spIƾJdH‰d2 nñcðž’›ö`y´ek°“C>Ú«Á\PõTúBFûÛ'ÂЕ'ÂÜÎ¥°½ö|˜¸Ô:±éª÷ »«ØàÔª±¾ºŒð[@¢4zôHØxlž?Ïâ†ÌX[<íjÊqh2œ:q2 åY]fm+åöh‹E~|w3´®½Çÿ8t)él ’eVPF|>èd'wÞ¤E$¤³un^ã N>üuÃÑ"ý2EʽhíQš¦ª Ÿ]Mû9Û:s6,¾øf˜dunÇ’Eì£K6ö u±A‘MÆ u}à]¥B]¹ìoŒë) "ÌR8c|ý?ü,ßÿñß„}ûÿáö(UcYà þ¾?üs¶y:ò¨°‹Ôu“‘Û¥Þ¬ýXÄ[j®3øÓ ý ‘Âr›ú“lWÆ*Ä•—Ã.ïϯÊÖ^r瑬v~,ôLœ °Ç/ g‹Ý4ò5V=£³[€ÄÌà‹ Õ­‹&tqÒd!Cƒ|¤ ïXDшíŸ`Ðf:åQ¡æŠ8¢f•ö‘Ñ›ÀMº+q“öÑ™U…]/“wh›C²Ÿ#õaŸV½éÎ…0ž´.\Û°×ö†ôqÛ’l‰äàoß²NAqWÞø…Uz`®\.w‘/€޶”g ±{‘š¯¦íºäÐâúôÕ0sþ &¶ÂÎ|w‰¯@[è4-i°P£œc/_t¯|ègMB//w‘Ü•Þyì‘Ⓣv4L»«lãvI›SøB þSd‘I'ˆµ„{žŠ«ì&±›œ.SêØéîâk¬j.5X\Æ"³]¾m"94ÿ†Øn9û;ÝK×¶{û+Á³`ÚI 7Á›Ëß®ò>vìHÜMçÇ?þ1;¤`‚$Ò¾¬ä\à'<ÔMIÝIÀÛSO},|üãŸ@õ:‹ öUÀÝh´3OªWㄆº’O™û¡g§<û®×í¿S¿MÏø$†T6ßU†ºÞ;ÞÎùÞ{<û_Þ' èpÑåôºü(Á¸Kú¢Â)¥@E5ęמ…‰²w"{$.¯âÉ|£Ô‡?ž€£0· ¼Ñ÷´ŸŽÎN—·÷/ÃÉÞè¾—4 u¶çv}¡µwèÛ¥hg–¡8ð¸Úoµe`Õ°½]/¼øËÈtžxâ‰È8¾+C“‘N`»q ¯Á ”eÏŽ<Ö6æC•]¶V‘(,°!;žë»–®¢VÅFFŒÁs¹e“ò)}dtºTñÞù7ߊé8h D,5DW-QEíÌííÿD&ÕbvæWf¨ŠŒÔÙr;pKŒÍ÷ é÷ícÎî:;6.»jWŸù½4JeÚëûÄ„ý&1\ãò·eÔ¸YóbZÞ÷:ï$½Ò'ÏÚÓhO×6ÐümyÒ;>ë,ûV`Eþ6BõW¯†ð›7«sak jþЛäL1æ‡0Sµ¨˜ ¬ÜUÕ¼³…ÍÒØ*mÌž<úÑðµ¯|!l@Ÿhߖ QEß‚œ]ÍëêÚT¨:›vŸe†þø^Ü !N$ùy‡P©.áçŽzš-Æ}]éYagûo©ÒÉŠà›“÷HUÕçŠré݉Ûᇠ]ô3öF8 –&ÚQÁj¸4é¤Ï¶XyöÆ ÿ §­›ÌdÙO•àÉãO„ŸøfªýÌʵPÎ#IÒ×ððà]UšwÍÐm^ÐŽÌàruÁ›`§C ëtvŒÌ×ã`g\33óá;ßùNxñ·ÏGõ‡Î/T.Hýæ—a¢ù0Ð? CvHQŠWÁ6h< O+3WCA`}þb˜»úz(Mâ–¡s÷½w›·½Ò~'ÏRzÒÏ~'šYƼçÀÔ¶•Ñì/ìùvŸùEØþɯBçÕYÔr¬@¥½vL†ÔĪSwQ6;ñ©WF*v•t_ïí3 | éöçO±ÍÜPøé?üUøÙ¾¶¯_ ãH5k먺ªù0þðÃá“ö TòÇY(ƒëòVAbTCåoYJ¬˜ÒfÈKI–¶q%Õ‡Hsv˽a³c4¬8Æœ PÕvl΄Bu-ô³?1m½‰ô̤®žm°Á Þ×—£ýç×u×îÎ*›`v§Í,8a (LɘŽ6Ù"V¤´t ŸšET²ýlå•T¤ ¼ùzjÓ^kRhò)屦ÜSÖ­ÁJTOÛ·.$À•&k5áSŠÊš:p¶®²¹ŠQÝ6Œ÷²¨è:}OØa…ý_×–qàL5|}Ê6áDΰ‰4Ú6у™Â.nFN0=6±ï Lr‘±²J©™í 7ßlµmù <(‹e¬q¯ƒþZgÒ\G=íÜ(º`¡J;¨|sU'Hã]ðÒ@Ê„»BTÅ+€)c •3Öj¤íŠiÓqBÊõ¸[0öÑÔî}ßk˜’µ·Þz+þÖæÍ¾ªvíáäöa'_ÇŽ‹}Ø µ÷SŸn3Y³¿?òÈ#ÑnîùçŸNéœ`PgLÓ|¤à½ýðáS õß?'û9¸-ôÓ¥MH œ ¥3®À´Ü>éÒù×ÃÖÂËa|â ÌÉ•‚ãaê¡O°?àQY z;¼ôÒ™8°¯®-Gç |ôèáÛ¦õ^nÆU¬­Ž€€ƒhA<{Å-sð=¥Û.,¬„§Ÿ~:üÍßü jÙÕð0ƒ¡ÁAF°bð,zöçχEa%a'O<<}:t3k.–úÂèÈqv¸ú‘®ìL_ «‹a7°ðp8Œ¯9´Qw¤`þS~-ƒ6Z'¨]ݵ¸0LÚëh4‚U¨éã;œezæÛ÷p2Ug¾-Ë]ÁNŲxí;”¿e´œö ªMdÀ—/_Ž’½ô½i¾“Ê›ÞM4ÐFF[ià;æÅ²HÏé=óy¿ƒéLË´ýmù<,{ ¼y?•k­œhg÷æ…ÐøÑφ’¾ÏF`}¤½s¨¸±q³ÝÕç–K×.tQBdÝ”±­,1`ïàn~yG¸Saÿv?Âæí‡˜/l,­…}øŒsQ@)c«°ÇþÙWñ¿øµ°±¸†t+sáPlU‘úÖXŽªË¯Š$m ;xÞA}º #÷à¡>z4ºõp%p‘¼öö uÇœB{ºjü<`®PÅP¿_ ¬&\e嵫ÒuæA„aåªR¾~ò NnãRZt’J—2z¦¾\ÝÝa¢c˜ÍMú /ö€˜\HišõkÚ<ô÷° y%x#ød VpDzÈH´tÕ©ªE&ÏȘ¶QªIïÒLs½ãìS»€¿ÁÑptj*¬Sß[HÚ”b®`ØÅÖxNŠL¾‚”íýËe¿ªYµ5m–„¹ÝΰˆÔ4WÇ‘|WaÚ«åX²Ö@uÞ¢…j ÕµI"gǰÞ¦Ÿ¯sl[>ª¬^ÛÉd™µÂ˜T¬GsZE§&)Ð?î@Áƒ°Ä!È,S_¶ÃÇQ{xs3ÚÈ¥Ö{ûs{›÷Ôÿ”’ËCä%ªS}ôÑ(!}î¹çâ„S›?mÜžúÄ'¢ªTé¯Ï ¶|SI½{œ¿K^"pú\»GëÝ`]›—T÷ÞK¿½Þhnûáw™È¥øGÇq¹?‡ût°ÏöÜB¸ðÒÏÃP'6)H¶qâ:vøT8úÀ“°fð-d¡ZM?H29g_:otÀz?BAÝl+‰ *q â]ƒùðHŒóÀö3QuXcÖPdu€÷mà”bì̧å3Ë#“8³•iv¢®8xð`\áuêɸ½ö»»á#¡ªki!}”JúõmZ¾{…ö´|×<‡³oÕ§[;Øi‘wã´,~“åÍ‘øƒ ¦g°^ þ6–9•! (>KN{T4ß:jß}6ìüê7¡¼‹­ÐhWØE ³´ÍÖb¨âjؼպÕqÄ«4Ë$´‹MêY£ôu¤YyÀH™• Û¬ÊuÍ^6™b‡…|æ³q;;¥fªZ{$<þÔçBið Ò[Ômk(ÓPé›·¤d9¥RØ‹êê"ú!31RŽnU Ü  CG´îm²ç뀧"@¡>¶™ŒàK$Ì]¹󷺎M$Ò…È`­i[™²iãEìÅŠÔ)´_dë’¸\é™”ô2X¿eìãôÿ¶…?¹jcŸ¥ºOtO4üDA’å  ÄE9ý¾ÄÆ}™ô ú¥´¢#ƈÜöî;æ§Ž&aÞF¯ MÜátõ¢Bº»Ä0u_Áæ°ÊY—4î®à® Úû%\8»™׿+LÖòì¦A•àè·Ä¡„5úÿ£|ÚQRä(uÓ5*TÆ,îÌs° ­úPw¡[yÔ¢±ý¡Ù´/`/¹ë ‹øÏ[ÝÎSï€õ­jx¸w#<8ÚúJ;¸ÔYDK¡‚S¥ÿZÐ=‚´6x¶Y^ ¼¼Vj*_Wú¦Mœ}_ðúÔSOų¼Áw•ÒáX¥w‚À^¾õ™Ò¹cǰËå;A¡‡Ûå{0Ý”ÔßÚŸï_°Øp,½ßuj ÔJÞdJªítyfo×/¾–.¿›„1ÅúðéGÂàä1•E Ä fÐvR;´ÌF›-C tEâ{ÿBpvl™¾@Åàï½BbJ««ëáÛßþvø»¿û;fŠËQÝûÕ¯ýÉ —T| ¯e$Ò§†QrMÉ REéCs× ¿UCGÃÎÄ<—×BþÚeŒ–WÃîµ+¡~xAv€Aõ&X3Æ%1­ßcH8k¨¸7úˆË ŠàkÔÊ^źñ,1\¿—þÒÆü['°Añ·ÀTÀ廾罻ÑÍT£8“N¶o~g}ŒënÎ÷üÆ2û×JœyÚ®®Çg¾g~̳‡!}|ÀR]™gée[3_é~¢]ùÌù°ñÜóaç•WB`¨<ȶbHJšË»¡Ÿ6² Ú\ìRþâ“ ª6%Þn¡µÃhß[èµÇaw ¡Î{p³±Íâ‚ižzä1Vðuâ ßX Ê=ÝCáðØÛPõ†¹…UÔ³€EV9+2.ØQ ‰Æ´al«ruêÉ-«¨-Ú.Àu› LÀQœóú¸#ußEÿ§Ñ°‚v$ %›”,¾[ Ÿý/1/+Ix§“uþá<êõ‹¨‚)ãk‹,h@e>¿] JXib+ r.~¢Íü¯ù¥0V~¢Æ¯"wIw—zǹàM4gäw‘ǵõ9ßLüÉÉ‹õ Îz’—ÈW¼§$M°ö›~~ñ‹_D0æ·ÃÃÃÔe5®\ubßÕšðI«4áKi*­Ç–º•~jÆï±>| ØŒ÷Ãï2èä²¾:ƒì )û\.Ï…óo¼€§výw±sR9lx¦N? CËŒ¶»ôJÏLSˆ4“òZ±z?rÑ÷1N@ŒÌÁàNý&3È2 ùÇüNøÞ÷¾K=z,®¨úÜç>%BQ%C†ô­ cð•×Þèp×püÈaVK²j žè@Šø+ë ãS¡câhè¸z!ä._ 5$‘U4tŠnVdP‰i¥¸³\iž97–nròóØÈË•½»7 S¼^;@J¯7aÂJF¥—ÒÆ$a4OÞ»[pš8A­ &IËÒõݾ¿•;›?yòdTŸ¨J1æÅèd9ÞIÞî–ö»yžÚQFsÇÜL!€K€ÞøÌW¢³÷+Oÿ04®\Áöjư;~cCu–Òb¶(bà.3޲9ª3ÝÄÞÍɤ¼’ÝÍUŒÀqŠkßsÁ@w7’ÝN6²gÂPÂîªÒs,Œ ðè¤Ø=­¬³)üêEÃ2+'±Ía+…Ùƒùµ:£KVÛ‰tT Xk(pèï%T € ¤·ÈNy¤`¹`¯:šóÓaþâ™°€´¥†ëÀ¡ت ±E†úý¨Hu|‹ÐU©»ÕfÀƒIœà ÅP$M&(°ê>Œ7jLHÄ6í4¶®m£ÕV6¯‰öÒØw#ù­”rrpEsq2UfÒÓ‡ÏN›˜:éê“Ä àönã9ËðÎA“¢gìÑÜâ.PË‘GÓŽq‘pZ,{ôñhAÉg¥D9(C² øä+ï,Ïd‰¯’Ó_¡*lmy5ý úf^¶–úá»®mUÂÕÍîpy£ÞÚª‡ËHâ—¨Ÿu@]Y[cÒ(V{*H¿Xx2„о:.³ DÉï¬G¸Šqî "óê[ÉÃ^!Õ‰gë%‚lÚvâµ8ï»øÀ ›|Ru)ň¼Å~`¿Ô”¶Éoµm•¯ZÏŽ ÆaŸ ¦I ïßZ÷é·ïûîÃ¥ÿ]S×^F·£$ŽénGu>¡®MŸ‡Ù©ÀÈå»ñÕußg‡ 0B‡'è)$³øìg?;ª6ƒì¨#Nƒ´ƒYúûìÜ2„d°oü‰ µ§å{Ù³ŒAüà?ˆ’·eìxdHO>ùdøË¿üËÐÉÎ ã3(ÚäÈ æKÛÛˆN[•ê)Ajžòï»^ßïpké·é{¸2PÚ™G§`9H¾òƒ87{•îl#?a0.`YgÇeêvUWE1ªÂ˜â› ÎÁ>à¨h£Æäɺ٤ci&}YWˆ´‡Õ€¨TK¸ˆ! ||ÃÊé^$©]•0·< 0‰tr•èŽp¶o‹R>ÚgXi®˜Tá –Ä#žò¬ÐÖ•°ú8['ý â]ÂÖmíò•0ù<+2iØ|öz"¸9¤Eu\—4mÈÞ‘îõ„Nû OI›ƒr[>n”ú)!ËP±&f^å‘Y6(ư Ú3°žèíÙ¾!½¥; .3jDDБ‰“@Jc}2ÀIj‰˜ï’4mÈ Â¯”c@dæÝt!¼N€nÏÚ^täªS]ÒTPËrf%òyêµRÆE ië¶DðÜÄŽ(DFk€É]î™}U×EÔÛ–m‡ 6±'ü«…"*ØR¸P›©ÂwvxpÜÉ»½¸]ù\‹Wˆð@q¸Àd ­±›ë$ž2@-Ç$r¼ˆÔ~ ?~¬¨ÍØÎ‹yUåкgH|(½dÞ<ä?Òßàuš<{-ŸQŠ~™¶¢ïIy½ýÙ6l°_È”¸Ù壪RÓDÙøT§¦ôÚû½ua:é^ŒtÿχB}÷¡ý'ê€Pg ÖWYŽl}0Å—_üŽ*çB×H.VÂNe" >úÙ°Ûñ=F³0Øl\ÈPÁ­ÁSŸøèÎfç3t°œýý Ùà/tgýK9Ú¹á»Üc• .îÙI‚ºàØA}ä½d‡÷WõŸÂ÷¿ÿý()ì`Ðùç_þRøÓ?ýS˜u~̧LÉ$T~oèÆËýéþGâõ?ù#C‡Av¢ë9&ÇCãò™P›] ËsçB~á¡Ð3~»&@0ƒ‹yÍ€ÀÙ¾*ÙAg-·dxÇŽŸF:ÒZÙK9{3Ké˘-¿*޲.¨ « Ì3ä1 †ãZ&ÜE¼¨Ó—/³Ÿåft²)C5=㈃ªÄ$ÈŒeÄ~ç’¥oiPõž€Í´eÀ‰fñÃ;üñ}ó¯”öСCA‰§Ì_/ßEÒÐJšx­ëlÄa i¥›¥wkô©i@ï a:æ/Ý7–OÉGÊ¿q˜wt]À6ÍçæÑ²û¬˜è…¤d}Ðk—çÑ‘*’wMXl¹:³ˆ7íΈ(l²²ƒþ”=¸–a¹vXÁO×ZÛdÛ·?ù,›èeö©éžïHCŸÙ§•¨ÙÏ\ ˆ3Òì‘óþ $î.žyi¾Û Ú.ìû;ô§nhj0o©îÛóîÿùÐ(F¬-û ïM;cžNµƒ‘®ôë샸¾¶jíPªúY72cãŸ..` ‘jcg‹ïqNoïßûÓÛÅ/“ˆöxÌî ª“ÚÁÛþÏÿ%üüç?â¥?ˆ/|á QZ˜¾Œ¹½÷\e+V»1†îêÁ-Ò;ö+ øgÚf¯É€x{üæz«†%˜_ëA:zèx-xÚÆÐÛ8¼ïá ”~gjïü·ßÔ('Uª2jŸ9ðÊ€eÌ‚W³ï)u»€Í‹4OtOõ3ýÿªÒlûèÑ£‘É›™¼ñ•H/¥a~ é·gWÒùžÁsûá=Á|{þLϲI+ ›HG\¡iðÝ阖כØ,ú^™Cç¿ÒØûæQºm2Ñu„˜ÀÁ'›ž ùÑ. gΜ ë—§C ©i‡û’Ú—v|«t–Æ€Š´¨î]&¬è”—±;ë|³| æë~ýÉè•!˹¹±ëui›u¾Ê€¿ÅBUþ“a)<€?·‰±>ü<@bèdta'w¢ =7Y̳ƒÝâ®7ú,¬ÔXÔp Ú4¶åÔ“ªBÓC„ïEÓf°ÕWŒL0¨S›¾»ó¢*4Ö{«nÉ ÉÆ(g1€E0¡O³ÜÅó¬0í ÇNžذ^ë-xÇù029 L©!|A²b;™w¢k]k©ŽµÁ«¢¾ÜÍu…S€®—–Ëá¿®”¯×Cxõè"ÿúeÀÍ?>Å„ pw©Ú$ÖŒ˜=8..Q #],­ ˜¯y|q’fNC$ÿ5Vœ×ºÃz…~„Ç€  ¤)ÃÌC'Í {|{sõíh•ú“íÞëÄ[äÞ³í+íÏå'û¶&ªTcòbiíwž½ï V%Ö®¶÷;WžÛ·ä Vɧ<Ú¿£”í2qàÄÎBF·ÈÆÖËK³ˆð3DzuŒ®`Àà÷LC;¿—.(ÒÖA&©{®Î\×ççØ6l5Polû D\¶1½†Ï|24žýeXaØQh, ­ál›xºÙ±£±ªD„<¨¦dÀF&%Z:óÕÕÄýY9³t M úS¼páb¤ iâ6Ò¿å?r'°cíEÝï÷!!¦0¬mX ‹×/‡•ù¶Nõ4VuÔņXÔ¡¼AºzX_÷Œ¯=dà »3T¤Xÿµ?ºãuÊKÜïÔ¼Q÷)oö…mÈ-ØÈ~+K ±í‡ÓØ2om5Lg….ÙªhþP}7ìÃÔu#ÇN$…úfœh—¸Žäkˆù7+]áùùáðòîD ÿxçjøDïfx¼k%#½‰ž³Ø°B/quˆ i'»›.€áœÇV…Ö‹QI%À ëb˜ ¶É÷@a õívÊ[$ÈHûÅFI]“4ú{é`I}KZÉì©ßH#ïÉ ¼Ž’mÞsBìVY££b:E&Ò6û•q=þø£ô§jøå/ýxúýL~œ93Ïšéû~:☴gÎ÷~Øp•ï! æØ¨\ìòt\˜ùylß¶×f±c¥{Ó­jF&¢‡õèDSIj·³ÕL:’˜â=dgÏO“ñ¥tÝÞѤõGD¶ãÞ{ÿ÷m4´ûRòögög‰ ˜S¦N‘)Ý{áÓ­kǾìÀÐ;Ä ´ ¬Üe³úµkQ•ÙÌ}(oÁ 4c6—y·,20Á„ÌÒeù-ö¦l-Ý÷™€$ß-ȈÓ{¦Ú6fiº†pœ) `´c‘>~skHñÝzÿv¿Kúk÷æB ý4 àÒöZæ+•?ÅïùÖíÍÚŸ™ž|õa“ï¥Y£Ò°†ZÙ}Eã{<’9ʤkãÑÇà 6<ÚÎãçLЖÀ›’JšM¶Bê…OæSÑ•‚p²†!5ª¥ó{IÔLzaÃ<áÛíçÚß»qMùn´ÛV›‰ùjƒ ¤k5Ú[}478Œt”&eö(V2Ç"ˆÉ‰ãaâÄñPbK,IÔ¡BË:ª{A|‰­Ðöp…öc¨L°Å"& ØÕ•‘ÿ+¤m}Ø?ž†¦ö°Ò½¼V`‹€f–;±6I™­cë‹J^`‡?J¤‹€ªóå:À°‰mã66†\/Sì%TÓ[,TX€ŸL`¯—+n`çH8¹'rV=W¿AŠÛ]H écŸðpÂça{?vì ,sºk›q7› î׿þuì3îâãÖ}Þó¥–‚yÁœ‡‹ œˆê´Û®\¹'rªV,vÄ ŽZzÖOÍÏ:»]¦÷ï}`Ø»õ|`ÙØOèŽp¥¨¨ÝÆæFXYDŠ)bw²ƒd£„-ÌØá|Žª ¦«"tÜöÁÇ—:aJëv÷Ò³{9g<‹ÁÁ¶O×­ðãÿ$®6}õÕWã€í*Ù¯|å+Øbœˆ’·8ø2Ȩn•aÝsD–0 ÚlA4í£vkë×#€KÉD¦$hw±‚Wðæ!ãó™€ÃAU: d¤üË<-§ª/ï¥w “ö ¬d4{{™Žq¥¸q›VJψ¥WÌ÷ž©ìýÐxÏ;ws°\‚:™¼éÆ.Î4Wž=3ïÛH æ5µ¯TÏJØ,C7ûVJ£™+Óá¥^Œ@Ñxº¸/@Nqyö{Wa›?Óµ|Oz$šÄ﬑fØZ\•ª!ôùEþV]º€yê㡈[p¨ŒrØE¹Éxq‡vÁ¾£½8ÞmNìùW@â݉ߵñÜ‚OÌÖû¤™;¤6ã š6wbÁ, šî¸³`«,êOXbO×Ë.…:æ·ƒS‡C¶n=ƒìÍÙÅ–YHƒª.¤`5&DÌúíšJŠtU'Mï=)I’fpšÃ‘2À)5审­Ý±ØÜíÄP¤mbó[¡ý”Xu‹]‹|p°Œb¹‡Å½•0ÉJÜ%ôš¬ÔgÂ@°:1Óžô[[\GÚJ„øésQŽà\Åç «“ÿ¼{9äzr¡¡f™U¤kðÚj ÐÈêázgëuÔþ´VõºÚ¿ŽmÜ p–}O·Ø"ì…¹Ca žq)Þ•]v‘Á'œ½f\ÙŸ]pUIï:õ—'Ÿem-‰_ ·Wˆ<„vlÿKýÄ~§ªó4»Î,,,Ep&@{òÉD×KöúÆÝhCþN“(ù®û¤Úl_nQ855uÑé¸G³“:Ÿ_§ù½‡ÁöÚΗÓý½Ê°ÿìþQ`ÀÝ?Ú¾/1;PÙÄ^ãØ¶sª®¯²ò&Ì@%¨ktô¢^ÐþÍœ¿Hìš ”9ìA"vÚÉÒàÚž©ÛÝkþn¯Û;³×¾)<ó̳á[ßúVœé çë*äøñ©øŠ;Àb9JoÌã=çS@Æ\·›§.\g7ÞÓQ7íâÉÞÕ YÈò›ò­:H W O‰‰úž×æGFA;Z¸í” Ñ{ªS³:»)Ék%pÛ“ål/cºö,£LŒÛßJÇà½ÖÐX¦,}ý}+íMÌûw ‚5™½R ¯MøóJkA…àÉúH‡€Ã¼ ³ñ9é˜WÏéHùéìÎv!ØF¦Ôm ã|WŠöõôfï’†R¦h„ßÊl{|JøJ¨M˰Æž•Å¥˜7U¿eÀÉ q‹ÃТE;'K®*¶›‰À.v?¥S‡BñóŸŠÀ{óܛؔmáÄñ }ãÊuÜÌÌ…úøPX`ë­¶J=Hg¡â ;&{ßþH7ÛŽàv• ê,%žÒ¡Š W“>ŠÔÃuv`¹¼}5¬\8ƒ+œå09…:¤§£“€4ÔwÚ€mÚç°;DÊ’à~«¤E¤´k%¨™Tçî-dï¢cÕaçj¹ñšÉ&Y e¨µ»Ë$ŒúÁ¼‘¯ÔnèDQ‚TeQFÏÐ̰å£|Å®B8xìtè@ý=Àöe¡ ¸¥|›ô£èKèêH¿ŒÌª¬Úe_åíAÜó  "WbFŸ×>Y/pæ´åu°^ú–p¾ë2§læ*»¸a;³­Z~à:•R¸°Ó.ƒ§YÙ¼H¹œWâÆ ØàPµ]DåÛ…”¯ðë¥?uX¨pw™0TQ¡îPLâ¿Vé3Üæ¯ô°Oz¶¯Û/åží‹Ú©éÿíµ×^‹ÀËßôGy¬Òµ-ÇÒó]Û™ ¤ì»j€ÇŽAêv5¼ð QÒ-/“·È ´)(Ê£lŸ~Ÿ‚qÞ¨«tsÿüS`À}à$w Va6ˆàµ#Z]^ɱ(W:šìžƒáƒf%\2J8'!‚ Îô±ìlT°S{¤.30¼üò«áþánl¾|âĉðo|OöSòm¾ÉòëµÌ7-|ð÷½#Ïâ.A¯ vD%6wp®¡‚ÎÙͦiÅ}ãY¯rPe¢2M™Áû¾ªölUA ÜYÀÆë!›Þ+§´Ju”èçÙz4NŸ™¾LUubbè (¶Çïwï&ÌÌ¿Á¼X.¶6fñšô –+åÑóMÀ–©GúvpñÚ¸Ìg ?iJ&Uãà” ’ð•fÆ•š4³Ü–%¯êŠô¼¶üÆeè+ðرca Ôæ¢À0 SušìY·æQ•:ºÂàG•«×Â:öbùåPé¤ á«Q_eGvÚÅy§;_{ô*ûÕý –Ûö¦ÔM)Êùs£¤±àk;Òè|U¦uößTEvan>ô²§æ£L|zÀ…`M?Q5f«p¡“;ê­LÛÓ2_ú1ø‹íôu&=ùÿ¾„X7m1E•ªîwb;´óîM¿ ÌùlµßÔ—ÜÁ¡bžêTH 24~(Jøä…µ¸ š‰¾øtQ²­‹"•íâ±OìBXa5ni€]˜4lïB#ü»¹UTn4p—Á®¦àü¸-Ž™pIR «¤sÚýèÂTXÀÞí,€í<>àæØUÄ 7ùå›<[TuÔã•íðpy3L¢*íA[Â5K“º«×ÃhõýÖ2í‰]!àA…° ¯Ö‹¡ÓYâ]‚4¶ÏHÝ 9q±È{¼Ö¡¹t÷AuRìb$ûÇÔÔTX†_Øïø³_ªFÍœ†W0g8ÁžýÓ~¨YˆßúþUúÊÄA¡Ó÷/ÊøeÖx¬«ÔoïR„ýÇ÷‰ûî>öýŠ6Ïž —lj 3—~ƒSÎì:*¸ÀÚ$ëÁ¶YfF§¤ž™<¢ûŽf«„ðNieªvÔ÷/ÜlBº‚зY]/é0¨®ÎAf~eË/âY2_í-þâ/þ"®€’1˜¿”'.ßÒý·Ýlû!‘ÙøžÌ$ù/óÀÈüÉ¢Ñ:64ŠØõM2˜McûDÚìúGñ…sW­‘™Ù—0D.aSXeF-ãLLÊ¼Ê i Éa0íÖ9„‰#SÔK.‚ÔuÒÐ()µ|þ3ÈýÖzðÐ3| ‰ƒ—eˆ ’÷üÆô:ˆßz[ÃvK0TѨš8ôfëU5ÌÛB[|?Õ»å‘^(ƒ¾Nüi¡24 óUG½h>LGuXgË7^,o+>Á™‹©ê§­Žkyu9̇ñx˜¦‡iY”F‡ƒ«ö:È2÷!Ú¼eËä RCö}æÌo•n:˜¨âQRàÀ„#5¤Ðú5ô'Ô‘v©;ã“ä(ÜðµÕÅ¦âø‹CÛÿ‰ÇBå×Ï3€S8Ôqn¡Ô_ÀáተýðT`Ñ`È 4ÂÜú †LW‘®  „fq¡ ŸDÚTÑ Î30,c¢±ù÷:µÇmêßà}ï{xm¸>»¥"JÞ,[/~ moîCên ùò`i(þ ·«lÛ…½^éúèÁÑÐ;EžNáÄV{0@ «ã.ÔO£©äRÝ!äÑ)1]2ÒɶHpM;†(kÔž¬I]®ãcn£N»ÅX¿£Î„k¶½‚»$ìØ_´#²* ²‹>4ˆ÷³&ªÞœ"Ñ=‚yqÅ| ipŒ¸¨‹.òŠ·ù™7q¶\§yÊ’e5Ý2ÏŠ~ýB«yÔß=|}Öç)u•‡õ9Vó¾r1 “=¬4½všª—±>£]¯C×Mvpé‚vøÎË•káL³7üdm"¼x¹/L/í„¶E«W›ÙÊøŽzéj„‡úÖÂxe%Œói[d‘ƒ>ášä mQ]î\Äg'+ÞÙ¡c'¾Ø2N²J¸€k˜\É}5N¶ à ¾Òj+¶{Ml¶y›íͶ"/uQØA@–zAسÏ>ƒ]Û™èD`碰ojsþöÝ_8' Æ%_;6u4.|¨¸Ð û=ó”6¹ØÉ3䯦k~”êymHq§³åðÐ%ý!½“-žÉøŸuïäz?¼w Ü}ß{û_ÞG Ø!ìUl|Hýíý< C·A~\§cçYa—‚ý¦ ¨JƒÆ?­A$½¯ç”WÓ3-™Ï3Ï<Åóº¼pÆèìðË_þrxì±Çî5¹ø½i*)’‘xÊ(Óð~¤U+%ŽÒ!ß‹.#šgßI!^ó;Ñ8ÝßëlL[&+ÕAzîÐæ¨§^¿Ù,u1€¤úIôó¹×Þ÷,Ã6.ë?=óÜžïøà6ÚËaYSØnp>oÇ(|/Ñ%Wï§ôÒÙ{JŽÒû–)]{6¤<§oÚËêµ!»2SÚ~cúžÓªSA±ƒX¢O©ôv@äýø,뜨€ y‚Ž‚ê¨wÀ¥ÎbØÀá)^¼íóx¬{,Ô»™°×¨íÖII*“mÍߪŸ·‘„¹ê[¿j7ÊFÙ¥Åþéº[®ß¦²[Ôíl‡ôõ’”{QÝâsx—5.´8ŠŠµC¯Ë¬NÕY³ô¶½xn§mƾ¡4QðäÙ¶'à²_%ZÛ—•¨ù[ · œì¼Âþ¿~'ß“7¥øä'Jò•f{ÏwÜJKõ«}Ëz0/  YwÞ÷]Û¹é;ANüÖw+•ÃwRYn[ïû7ß ì¸÷…Œ÷/’8ÈÑ×UyØA v&Ç?;§a‹Í“{qè‘\¼ÿ0+6Žvæàµáýî`¦cþÌ›‡ ã›ßüf´ÑpÖÑ×¾öµðéO*¦¿Â Ä7k|‚eIé¿0wu Éà™ñžôò~b0‰ž‰‘Q™Ñ; ~—£ñªž0·±©ak•Òòž×)Ÿ¾/ƒNi¥¸|ÇÃà3é(ˆðÝô¬ý›øâþ¤xƒ5 ÓOÀ×÷ümÞÚi‘òçYÆ/ãöì‘ÊmÜé¸5)ýt߸Sü~ïá·ÞKïš–! ɰß{4Pë-JQg—@ÇmÚ´"&Hdêt‘e 0¤0‚.ÅŒu¶sØÁnWý ÞTß`g‹ä#ùlÀÄ6JU§å¿ 0ÐxÜl¥›e‘.´ŒÞ3G«—§¯Dð)и9p¦#Sµ7#V‘âJ47¾r©FÙàh=†±ãêîXdE:6œ.Ü@:T#Íë³—Ãòõ+¡Îà¾ƒŠ°od ha‡€=ƒªÀHÃŒNÖ­´õ ÏîR}*Mñ_’¨¤:¾ËçqÕ­mÑ=‡uaŸ @”®¡öÜÕþ­%ÑÐNU:y³ÓVËùŽP†wÔØc´  rÃ{WëjÓ¸2=®^€€˜“>zؾ @›g%ª{ŸæX|°K\kH¾_Ýš ?½Öž]è תð­R-Lô!eÜ ':6Ãg*6œðöä6p¾Ë$ Ðéš ²¦ËìÀ@¶˜fG2*pt¢`VDr  MÔS&ÔÀeQÚ@[x*mN}'£=ßÐlßþvšú«íÁ6#€óïûÛwä;ö¯qò[y†}:8ã”—x¶¯ù½Ïô 'xól;¶ý¥wLSa^äÆoÚÞ7.ãñðžG ©,é÷þùþP`Àݺ¾¯±Úoqp “¤NÃð~Àeƒ]YÕFxýÕW˜Õîàôó±01š‹'†`õûûŒ×Žm~=ËD6X( #ÑËÿ—¾ô¥ðÔSOñ\`âÀÕŽäÅ´,[ìup«Q¯÷xàÐÍFä9º0O¾'ã’uÔ ,¤<ø]ÊdHäu¯à;‰éY?29c¯ ×§/ÅøÒ{æA·0ÒʼܰâÝ”vJßr98Ë@S|íL2&ðÿ§A,Óölü‚¡”nÌ%¦Ûbâíùñ™ïyö¾eOq›·öÃô|žBJ'Å—ÎÒÂÆ`}xßï¼ï`%ðñ¾¶9‚¯¥‡eh´®}ü6…xé˜Âa. HÄ@ ‚Æöà"üu­º‰½OpWè[”…ßá7ŒoM³ÞižØ’‰ÁQÉÆó¿üuT‘¯àæÂ¼Znû¨`Sç7‚M۾Ϥ™ÏÛC%'[¨qu2Ëž¥;LÂ”Šš­*Qédyhâ†òH·çÙQC{MPÿj»µº‚ºñrXljo'4« 6ù¸|¸€“X‚¸œèe[ç[Þ$gë½Oo¯ÿïß° CT Ù„‹eËìó|%ÌÍ^õ¼4n ç*f뱊DR:6_n¥m\þû¢AÛæZ˜¹x)L_šŽå˜88'ãúƒ pÜ'–(¨+U½ DekÄó¾9f7QÒÿx¬žXt-²óÂzj"]àÛ_·ÁþÕ¼õyÎí¡½^òåÁX¿ª§K¼[D­‹’<özyfŽ[ ºæÖ*êúùÐM]41‰¼íævÑ–ˆÇè–®S¿±Ø×,³gÛyjo¾k¿ñ[ûŠLþ#˜sÂ`ÛséÙ~dßððß“LMMݰ]5žH[Úªi¤tL7?ù…iÉC é}ïywJÇ6¿î/öÜý¥ïû»"u`;Uê, E 2]fÞû·ß ÏýôÙÐ_aæ~ôåðïþÍ¿ˆ³+¿³#ÞÏ °ÓzÈhš0@™ÇC=WF}êSŸ´àÀV¾›*ÜKžŒÇ MLëé§Ÿ¿úÕ¯bü.…ÿ_þýƒ†áý7%t‰† ì˜Ú™ŒtÎ[Îުϻ `Ò_¦åa™¼en‚8ÓYňÚA]i‰ÌÏ8]µæ¤ÆªŒ¡s*CL¿Å-“õµ¦>ÌÛwR½{?½ë{{…öò™G™vR“˜wŸ_Ê»çtx?}oúíGÌéyÊCzÇß^§öéõí‚÷Í—Át 3ƒåNN’œ˜,·qJ ßw"P°ø®ÁçíA¿_uÄ!ÖXeë´ékluÀAsʘŽjÕA‡ç¬Ž ¬nÍM1èp_ Jͼ)YáŸ+¤¹ëV@é$Áú,qH'ƒùJR6é¼AÔ†e4¿EìÞÞÌYªy·n{º"¨Û¾±Ù\å=WöãÆa,öÛŽ¶€c1B Û)4iÓJTXÐÏ­+]ìaë°^T¦nÎ4?¿tä=ß%ØÌ›Æpš6É«j@Ë*ˆ|;5ÿidÒÛ· Äu·PaÓmÕ×äiÔꕹpñÒùèé *ãÙë ¨S¯„ƒô¥J/+NPî/ÜØAúƒt2êÆ‘mÌ/……™«áÚÌ,õÑÄõX8rìxØEòÖÀŒÄ­Ý]#–‰<Û7•~.Ï…'X•þ ’Í?è_ “+!ÏÊß]\‰Ô‹Ãažü™FlWgmþŠHÓÈAè*5ñ+;vT 1í¼]ߺ(mö•×X`2XžÒbÜb—okÝÜäl„ð ƒm$õ%ëÃ>`ó¾íJàïóÔ_Ì¿í;>÷°L¶;ÁYœ@—cÇŽÅ~âó¬ f¼êÿgïÍšìÊ®ûΕ7§›s&æy¬ ¨‰EIq–L‘-Ûv‡::v«£Ãî ˆ~é/à§ŽŽè=Éá·£Õ²¤PK–DQ$EŠU,ÖŒB¡0O‰Èyº7‡þýöÍ…ºLcªB¡ ïNžs÷Ùgkï³×ÿ¬½ÖÚ¦Iæsæç˜ôl¹ækúœk<ç;æý,Ëô9Oxm¼Ïe[îÖÿ­û÷G€»?ú}jO ò%ô1ø’4¿(šëÀQæ2ÒÛóÛ_+zY¾Xù\æQ">Á?N0ùRË—eFJÞ~ó7“‰¥Á˜e|·ÓR ÷“ Zè½ýöÛŪÊÉɯÏï|û·£opë»ͬ›tÌÉÆ³Á³ÿ\ž± ÷râ”¶ÙN„N€‚ÁëÙ³g͇qÖÉtÍõÈò2mÞ÷Üšó—fö›tñ‹_¥¸J³Ô-”nJ-3¯u¥³¸IæÒ\R?X¶.]‘`”05%mè\-aüƒ+.z\iz”|TÄ•k<².ÍĬRÎ’›¢C{ŽúWö‡u³… b. =„¸Œ§Íú¨"0‘Æ5–òA[…ž>ÛÑŽKp¦“ÆÖÝöš¯mÖÍÃu\ÆåÍ<Šïk8Ö ³†úý¢| ¹ Ri;vï‰*ÒŸ™ëHòF¯±ÄH‹qb|÷Ðx/lŸ*Öãnž»s(}íd¿ÚÍwyp%øÖÈ,ÆÄ¥Ë(´>ôÔœïŠéë?b³ú e®ØÄ²°óIzõæØotŒ­ÞS¸ YEê54¼)¶ïf¹é[Ûæu8f¡û² šèw™þêÃСšÿ»§¯2îp7ƒñÄæUö3eYs<c©gw‘®Ô/šÑURðªãƒs·N Ž­t ÄÏM0.±'íé…¶¸¸Øרæc×#KèÛ}g×D¼4¼ Ï×1(Ao=Å5ꮺ˿é¦(çß Ç›ãÛwÁåvßM ¦5ä{[ho;ןw y8çdúæ÷/çŸÉ²ÍÓrŸÆ;6MçsÆšAžqFÇwLÓøLó¹ühýy h¸BÖO.Ó|é|q XàÅÊà‹ç ”Á´¾´¾„¾DÝ0œ|M“yùr>ˆ`¾2"Ëô°nÿìŸ}·8—¼ÉllCê½5$-÷_—lm7O¢R&'Àœœ”£˜Îz—×I‡’Œ§Ü‡Žþö(’›Lt‹s2^ótB“ÆÍù±áö¦ÙÍHcº+:Í:ÕÂõÃH2})o½l'OÁBN¢ÖëfHcð÷ÝBö¹éd @,Ó¾È|³¦ÏÃgŒo™ßÆs¦É6äoécȺg|ž›ãsìÈ”¦&˜Qš`¿úXn2ëîï μ%‘äQâ‚Fè>5‰_° €Nc,Á˜õ®Ï§Mt06—έ²YdßHø¥VÜ=:ƒ-¡Á”¬›t˺Îk-Êo£ *¤œý}XBkúÜô¶Ñw2ÛjzëíQCèfë¶I§Ñ~ÔŒ²ÌÛÓs’2ºbhÏÎï»\8‹«`fŒ/’+ôm€Çö.Š£ØÞÊf/•žÜaA:ÜxëÅ\c§²R¿Ûÿù°eɬÔïnC¬¤¿pktÀí‹õN  ôqyñ™bѼ÷à±éÙ*KÜ;7oŠsiêuMÎÄ©'¢‹TWjJᎭf™ub„%öÝûFïö]øÇt¿Ó•臮‚ç¹5ÀVæÅ3x»ç; ÓlI¥@oµž!¤e¨Ð›mK—Ùÿ€kîk:3ìär’NCÓã—Wct²£±%ØÍ‹üQøÇ¥É2@˜™ûVÀGÛü™èìG*…º†ý½Šî³d…+ô&‚“æŽljcË÷ÎÇã<ßSÓ6Ÿi~|G|Ö8ïYfòŸÍ÷Ü<|oL—!Óïõì³æÑ\~–azçØÈ˼=œ„´üêW¿Š4¡á ®!kHáÄú¸²^ŸTPHÉ…ˆ‡×îXå_âD#Hz°@ëþU`+<î5í'/Ûl¶)žÞj8p ìØ`:ãíG'f/±|äuæã}'ïüú¶>öuö{ÖÏ6æõíêÛüŒ×æïYX׿û敇ùeºÛåišÏÍ׿e[6†,óõÉñ’ý"ÈÀyOåji,} Êý-P_Ywç‘e˜ç­‚mYe™²NÞj¿jHBk,-»|ǰ.yêÚê²j#ÈÜÀoÌËgüg(Ïç9³(wnÿgf«Ésg18cÙ¯¿H¬‡ví¥£YÂÔ¨ËÜ^>rª¸FR÷ìÊÕñ˜w³©$kdóÖŒml³…øIE?mèNâ×Ïúq=2ÇÒùuÜlÌì®AæÀR¿N€ßÌŠ:lÄu F€;‘YÀÞ<þÚú´ ¬NƱŽqa¦'Þê‹cèÊ]`ºÂv5æ1uà³§k56÷®ÄîžZªrt,Å^žF'n‰]vVØËw‘­öÚèÃ6Üá_nqSeywi}®pL879¾½öý÷ð·AÚ:Ž2˜ÆÃwÄqãaðì4xßçrÎñlœó”!çÓ¦uf?Z¯³,¯=2½góèY¶ï¥å˜.ëQ kýy ¸ËÛý@Êleú( 07InCy·{ ÏE2{˜"ÊùƒÃêgð£y1_ïŽ>–þÝ¿þïâ_|ï[11¿;ñ´}û–ò’5¿L¾ŸTÈœ|a;PØÝµs M_Ç]ÈSñío›eĆ®e6×a}޹9ñÜO}rò’¡ÿÞïý^qSbY*½oÝŽß'0®óÛ_ô7&Fq#1ýø [fÙ£?[kLàÝ,G­ñ›9/ïœiÏÊ*ÞËÛÀávõ[¢TBÒÿ–Ó몊Dp~·a±f,¯{Aÿ[NÂi¨îœþò^ýu|E±ÄBù²Ç_…¹ †©ŽÞîšû:'âLï䛡9õÈÐ|q÷zÎg7æm¼‡ñög[€ÀÕ¥R?\†–Ax?Q‚>ŸsÇ"- ǧØ[•Šå6LE²¥Ž}?Ëþ¦[ÑB_yíƒqÏ$$Uk¼O#l­Ææ•±ˆ°ªZ…áàlzpî»ÁÂ-~ý¢›®wFé£\–.]E‡°DŸ¢\/£-Œ1gjÇžûí¶­àÛ «ÈÛßÎ&ý\º]T ãKDU‘–[íhÝSÛ˜˜½_¯ŸÅäå½ñ…ÏÛ÷Æ–’u€Ù y¯btÑÓ~C™÷jŒe¯äË(Ë»ÜÇ¡C[ªfT¸TÒØ&8S4ÄÀY#Í*þ×Ö°”.:™½Ûc¿jШ€Ô‡N Ÿ Æ  B'L ^A¦à¢ÎR°!ý=±¥ ¿”mÓ±™-ªææq#„ò~?{²–¾E¥Ÿ4[6Ž¡Ñå‹çË®]€Aì¡#/Äc¿ªSr–×0èplß@é[ÊØ„Äþ/¼ð©æŽ‹–í®cއÆHãbc ‚î!ïßîGnœ~3®½s*ú6?ÃÛ#®âû—:é3¬‘ûqŒ[ÇIzc§‡Öâ˱}n0æo ÄOºâuêüJmóUâ=v[²!ÆÆ¡î™ØÛ·Ã=Kñüž^–_ÁŽHôz»]‚xæ“6æew†bKû+cè^öîFW×µyk| Ö몑 ±Ü`Þqîá"í2ä<—¿=7ƒ1;Ö>oßß<ÿçoóoŽo~6Ÿ3MÖ£ŒmžËsW¦µŽ¦õ]öhó=>J§=œ+½¯°Á÷¥>>ZîãÓîS{Ò—¦‹‰L½™øjöñå™ck-_ߨF ðEÚÓË$´‚Â4.´rü4‚/¾›"»¯©Æ ;P¨V‡çÓ9aH'A›KnÖ§ñõÊÄÌÁÇ8/F&e÷ÍtÿÉn”=3×+©QA#®õm”o¤7E¨Z!]tÈ<„ÔMÐíüÆލrñý¨Åè^@Ý̹K1ͲòÚÕ œübD½Š?Åvô¼pf^eÙ³ô%F#Žn­‹‘œÖǯǥ‹Øç´‹í¸Fbzý“Vñ•¶cm‰ñéýñÞÜÎøÉD%Þš[‹IÜ(¿Ü²0›ûWcÿÈj®Ç^$m[1z„^(k&§‹å¯Æ#ÅiºOéÄ— FZi‹ýo½< ŽiáïeÒ5ÓßH×ø¸3îa ºvÑšß¹Õúú.øabÐÀÈvæal¾—…Æxh¤-´þ|d ´ÜG&Ù§û€_¥h™˜“昢|ÍðÂ/!‰›¸†[_~Þƒe@I1ÇçKtI,èÓ ~I»lëÄ”_”^ûÒæ‹û êãdg92qŽKnN2Ó.¤/_‡`V𶼸DZh³Ò_—7‹Ûê,´ì4ÀÄô! {µnä™ôqò3¨¸á>¬8?Hš5JðË$M1Ù–æs^gk#`u)Ü{J}´êÔŠ×ß‚$%rJæLçQƒIH;“€¯ænHzŠÜјŠ5,3kдcw¯JM.e˜eG ÎD øDì침~éE ”Z5úÄü²®‚2Ëñ·õö½ô·å+5Tzè¸óžùß/€S⥫’wŽI¤aO=ßQ èê 7$«Ð§Š÷á*ˆ$õW†¸Ùëì*>—’Ú]ðïGҢ⻌±_aùUÐæ\á."m|$B~¡^à;PhÓ`¶®Èœ»ÙÊÏ~q™÷8àí¥Ï½¿ó½ïÄÖ¡jŒŸxåèZô)>›§CwH<…ÅÐDJ²xÀêtkc>³li_È *¥jÔé,R0^¥¯‡Øküê5¶Äšˆ®»{‘k͈”¬ÓÝH­Ô‰³J])lKF1Š˜eùtǶ1° Iï¹û¤®1Ÿ®²»D¿]Ÿ{6^鋘Üï³!*;Ge`5^Â5ÉKˆŽ¾øÆ1Çþ¨×9¦Y a'ˆK‹llßÖÖ#0@v®•4ñ!­WYÚÖpB¶±lšÀƳó“‡ãGÚºëñŽ—ò²>_æø Þ)8|–Á¹W—,ºóñÚ¶UìlÚWúÔóz°þ²íþów+ÜZîþè÷ÀŸVJ¤4¨KG”¼þ³Tç«À‹%“oŠ[ã&£NËú;㇑£ŸVp2ñ¥ôEv2’ ¦>`™–]& 'ŽFœ$& î(–£(.]]Òì´~ÐŒ•ù)ptÂôK܃­½õ´Î ”º)u’~ã§ý“m² 23@ ØvÁ IçYä˜RŠSôà2;ã ­Ö\æïš8‹~±<ÊÒùì] ¡Lû×ñZA'©­€Êæ¡Éó£ŠACzW5˜“–ÉÖË`},Ǻ:¾gX&´lëfŸÙŸÖ? /ÊC÷ñ§Hº€ ‹”{òäé˜e)¯ŽåòÓ{ð‰‡ ’Z);@CyQ`Hª:`¦½¸´mWIÚëvKœ6–wÛðŒ»N‘í©³l9ÏïE@ë ù€!]1–X‰·]ÒÀž"nï u­Œ%YЧ²ŠÎ¥ŸÌ%5@ÚJ‰.zp«JëØÝa#qJàl)`E¥Ž•›m[ßý-=íßœl»´ò·‡aÕ<î>k ½mËþµšÍíl¼Û Iu6!ïÓË7Û˜÷ZçN€ûè4ûTŸpÀ—‰J‹R–j0 —ÿüJV×4Ë7®Fe ˆå3—ê­+&³âAºO/”ºòB;1åDdéÍÒƒ¬MNz9IXU–ŒŠÀ…‚ë, ÕHµ9>Ý™t;q3 0¦²Ð ðÇœY¤nœ•Ä5¨|8ër»vW‘*Éø= §²‚»=w»üÆømiþ}æxP œøØ)m( ˆ˜,—þÕ%Gј§ç;gñ¾Õ*RŸ5Geýc(ó´Ù/¸±žÖI©“Æ'8ëj¼Kª÷+îDènÆ|³n 7Î.¿ÄçÙ8˃ß;„£ßþ­Q™»†°£Á©K„H“5 8àÛ¹g16íÞ‡f/4óÓ¦K:”i?yÓ–Š÷F"•¦KŠŸ2Õ1êH÷\ºVzùò%v¢-˧jõM»|¿(«»gpD~Ó,>³|WÆCµ)€!LÜ1^æ¡Íèo:R«UÁúº{A/!YŒÄe Ç@ÕÞ°ÜÛ —ß;7:ÎaD€iÕeÊÆr{€ué´Ïþ¢‡»<´5æqª{½¸ \Ö3 ¸ëƺu¸RÿùÙ)óFì\Áe Ž’±ÿŽIÆØ®CרuIÛ"ÒÀy|Ä‘E«êØõtá—°m[ÔV/HÝ:8lô>´ÓìÅßH~©·õ38ÎmUÎWÒµH,‰Ï4ù^x6–úw ù®Ü)̓¼g›<¬¿uÉwÒñê1Çx5®´4Û&Em.ãAVñ±Î»àöîe²`þà‹¾»l›£ÔÍåS_ŠNÄþmLÚ×F/Ǿ—m& -*™àS÷i61_d_R_èUº–Û˜àêÖdЄ¬™*K]H4p\?TûÙ¶ɦ¡Lœ0{rñW‘]¸r÷ÁýˆH#iåDèu*ÄÛÇN‚rÈÉÝ67³]‚8ûζ–É}ýZšøÛÃ¥eš€N+ãSÚeþÊTnàìJ^ÌPç¢~M& q‹¼}¼W¼)$¤ño ÉLÖ}€¥™ËHë>ÿ"ðÚDß-ËÀõãºÂò= ÆÛ_Y¯âÆÝOPçlä°ˆ4¬KÙª{g6®ÒžëìÝÚ;9Ÿ©Ç6Üg¬Ò¸DÈ~ŒtB£^–§o\+L³ ½³aãªS¡›àLè]¥'fÈëêï n‡„9+“^Dø*ûK÷ËX·j=3àÁ×~øp¸¼ô $~,ñRv¾9:ú· C¶]Ó™Ò7ê‹ Åàä[Æ9 Ô}D+èÉ­ÐJ?ó¼rð\]-HŽš/£ÒÐì¡¿÷íÃŒ‹Û• W0ÞZŽk³l]‡3_ûQ,ºÊ;½·3ÛvíŽ-;v¼é^,QÙ™ÞI|¿Ñf€c'mèc9ô%ž_D—¸Æœy¹ÇÈè¶±zH;ël`ïYý¸YL­`µ»Œô~¶¦±G{ ¶+Í–@\Œc!-‰:ÖŸ|¯^…žªI¸EX?þý æ‘s€ïïC‰»Ëðé¢ÞŸeÈñí\©Þb;Òjƒó¨zų³“7¥Ð¶Kòl›$j…û @ ÀÝñ>G”ÈØe ZMæË.[ÂÂøØ•â¯jIQ«²^Œ“A»KLŸVhž¬,óÓÒ¢¹œœP,_ÚIæãr¬ ‘¨aÀ°Rç‹g ÅTŸ W&`py§˜P™¸ ÷˨qÎþ»Ý£Îg9a7§‘–)}jŽÔ®mGÒ ÇmsÛ¶3™—÷L—‡Ïzß½=L¯oCõO‚±ƺ@8—+oæåð'¿¥wGàEßnm.98à²úg+ï ù°;åL°hØC„W ¬Áü3æ/3v¬ :ÄÖUãE*%ˆSúã–_.£~A)^oßP‘êÔ¶×øšS¯%æ2Kzœ‹ÃH϶pÔsSú¶Œ»‹:nôëæßvÓ81îß²­|Ü•zùRD×üÀÁUÍÅQ¶Ç9ðð!À,cO=@¬-•¼Àyî•+W ‰lWI•}býà?ˆô½ßŰÉ(X­ºVYÞ\˜É鉨„Ëß)ÝI¤t+nw¤w{ó”o+2-¯!¿½VBŠ’žV–f­±$Û³wO<³ë÷úcvr9ªõÓå#¬ß{m¸ ­YɤF¿.ƒVXµ˜eŒ,˜à•O%€º ’z`©[ë@ªÙ¥“_êB=ûgñã8›cÉúÜN,Zëè ’¶ p_åèfy8Í",cJ=¸` Ÿº燄N§FŽŸ6h,­J›ùw¶¼¸;†–§bˆýTç1¬èÄŸšË¡klßTW×lapz˜Q Ðö QêìÄ.¡÷†Ï»ÍωÅWŽÇk¿ü)η¿ÉrëÖ8wö;¼]@ë–­’¾ѰÁþ[&ßcï_‰'ž‹ƒ‡ÙzʹˆÜ—µkÛ€-á€yñ:cÔŸ•‚ ýæTNy/êo-¯±ÿ,9ÓÈÃ>AZ§Å¨±Jàz,QŸ›Œ#¸QÑ•H0úØ¿taàÅh§n«lÕ ¸µ,c@ËÒë¥è £;ÜKg©ƒ›ÈWºÑóƒvljA@r¸^|½k-¦º˜sh#ø|ö\°äQ~834fì–·Yjg´ßœC¬}Y°UçìžÇJèuŽñéy¶Ô¢ÿ—×ç*¯ ŽíAÀ_U\—^ŠiM¹Uþä{›1ù\þþôϾǷ*Ûú¶¡?hÈWÞíïJÈ—«ñ«õ÷cP à>Ñ>ÍGdF¾äJŠª}ýÅ{wËÓe¤Ë~ù-ÏÅÄõ+Há.ÆîM»ÐÅðå°[Ñú‚éé‚Ä ÃËàò(…Ö[)¤Á8ãš'5¯•VÐÃe™þšæ'Ø÷ J“yûÐæèÁrî3…‰Ó7ÙFOZ0Zÿl›ŒÓ>ô·ie ¶=ÏÆ'-̳Á €È&zÏÃà=Ÿólœgƒexd^ÆyÏü=§…’Ê⬒­ãQ2&Ê< s‘±ñ¬G2›uͲ¼ïaJºp^ÛŸ‚Ù¤K¦Ë<=+mJ œõ1OÑ@‡&$jêUÙ®¤(YžÈÝe -õ+õ†q¶Ô0QÄaH²/ÁþÈËÔ­ÂÅ IDATÏÕ`ȾQò–Rò¬·9i¢þžãÖzûœ‡Á³q÷¦XÎëªÅ;,­ô #±ècÔ#×ÂY,¤˜ÇÿÐ<û½ö^ªHï*¥‰€›n–·£3öì\güõÇŽ½›x?Ž;VüËåØÌúf;¤çõë×ãý÷ßÍ[GX±loÈÚÙÖ}Ik£JX–»  9/-/bô€[EjÖÆ=vq2L­ÕIþâ*w`èæƒ à]kwSîµ£^@ª…k,_ÒÇäY:Ê%dV"0{@ê†?;¤”ØÞR> Éͼi¸?Ê—,îú§¹½Îßy6ƒÆy¿ô¾s™öΩZwW ´ÜCÞ³N’ºЗÓà“ä[e]¾ŠÉ:–OHÚÛð=uã"ÖiÇbÏ“ŸçK¿T2œ}.ã ÉMÆb>j±63Û‘LXP!in_N‚Nˆê§3¥GýÆ(ºMgbOî•ê ¼y_õø†úŒ‰’“¶í3ŒŠƒSKqb‹ôÆöl³GsH@›ycÒo´JÚØ÷…\gÍy%­¤Ÿ‡¿M'PI‰šy(Eò,ˆ¸¥Ô©Ž@EÐb9Ë5lÜ^Ê`~¬Ì³DòÇ´¶)Ÿµ|%UZšzVêfÙ[Ûjúl‡õÍç×%‚™ož«(µÏb•Xv× þ+‹,ŸSF  ºµ¢”Sàï`–«€”Ì¢ié˜T0©40ƒu¶y¶Ž^{¶îJõ—ÖL[Û—Ávg[2gÙK³kÈé R´-ûcòÂL ¸£ ‘ÖË|Àé~Hkì:à®—6w±t·¶‚äZ.êF€Óƒ´îü¹ºx5^{åµècIr:` QÆDŽ»æ~2nŽ]ÞyÀ·i(>÷E¤a'¬š+ôUºhѾ³l“UGM†¶;4>ÄÖ° /z¦Ð¬€7×Z ÒHG¸mJhqu6ïØr€y°;Øp Ÿw辑´ ˆ«,ÓÒ§S¸…5$mì 2Íyp;‡$n¥B¢xÁ%\Ôè}TjôôÙ¿Ò-ß sñ·ílù;ÏIë^jë‰_ ´ÜCÞÓ 3Õ©Û¢o`SlÂLÿü¥÷c¦>‡]ü»å¬2‰^üà–R/GÿÎCL¢|íó„ ·Â–8NÍÅCÞäÿ¦zÉ<¼‘a‚ ã’AzmȉÏx¡OçLdìTÌŽžaék1zn]ûÑ{Áˆ¡<ñÙýÉ~ñl½=-îk{éÒ¥0 à 3^ªÒöٯIlsNþ¶ÈëLÓ|?Ÿ÷,ƒñpX†é7‚¥iÖGP™àÍߦu©ðӧʵyø\sä›õЄ×YëÕ<½öÏÛeð·õ(’™¯÷-SžŸ´,™€Ýg @×ü8K¨2k¤Ö>£²“Òój/Ë8 N^\‹ ë`y®~åzt>ð/ø³q_ êaðYÛ¦“mKÉœåjj9ÖÉ´¶Ñýåµñ÷fimKÇsl’¾—eÐ7ÆPîGß ãƒn@T×9k,óöª:qBËz,@ 0pí- È?€5ç2za $¾ôòçãØ[oÇ'ß'?Ží‡R`ëîÑ\o?8FG/Åo¼[wlŠ}ösŸ¶²ôiOÄ–ÃHà£o«; , Æp>æÙÍÀ½M‡íhD4`3„^p>V–¹³ÈÆò 8Ãc9{b¹;&pýчRÜ&èÙ߯Ò)ÅïÀs –I;Ø#¶+fX>-Ë¥Hà J`¥6‹óŒŽÆXËâî·îô|o–¿Þ×yn~Ƹ¤«×9vk…îD€»u‚{º¿ðKQ½—î*z5[wÇyôŠjXyÍ"Ѭuãazì|\»p"ú·ï㣕/]Þ}·i2\ek™Œ’ Mÿo5‰<M½§*ȸsbs™M)•R¤ÌdÏž=7Û'cW®UÇOÖsïÅìµË<˲Lÿ¶¨$èÅ|–Á¾°MÖU"RjÞö]Â2Î{öa¶?û0i‘¿=çµíòy‚q¦õyãS*&HtH?ËÖ%† MÀæµ’4éë󅦓óçÏÇÛo¿]¬ïR:çý¸?Þxí—1=9Áظuݳ-Ý裭ÍÏ ÕW~Ž_E€ÿÎÛÙ`ñ†µ÷ û±vne™:ÝÀÉxÖºóìVdp¨k8ºØr«‚¤ÌO-ž(p÷>˜÷èSôʦÑOœîŽ)À¦Îx—g«LŠsôãB…m´„hü¶7k´sü²!m%ÇN@¶±CIjÉžßœU—ô·#ïcÿqLÙ÷Ùßžs,xÎ÷"³ÊqÔü;¯=K÷G)d»¥:?Juýpvz”jýkTW} ófâêÂ\Ëö=èšlŠ¥K˜î¯ °Ìv3|m/ÏMÄåSïÄÁ—~.‡’pyÏÛâõW_÷Þ{¯èÉŒ_zé¥xòÉ'9 Ê$“yKƒ® ^y啲|çd(èH=¬l “÷ÄÕ 1vúÎE'Ù¤œ%˜á]e uUwŸ1€³Þœìdü‚÷’uoÙã€8 ²” rÒ—­’1øL†Lgœ6ÏEÁ[êjg:iíáµ Ê#¯]Ô*Ñzdý‚¦±Ÿ¬¯Ï&ƒòl»è$²Žù¼u4>ûYà#84¥5ïeÖź²HXšgy‚yëÐp¹ˆëÖwïƒuÐïÁ¸TÂ{·@â7qEiî^%znì:^û!ýr©XPjùJálCs;¼ù!]­[¶-ûåfýîó¢Æ˜ž¥Š¯¼q#Ž>/?ý2§+®Çá/Ë•s:f©²c(–ÕéÃg\Wç õí*» ïàK€¥¢9hf+KÁ#€ ÉåöÛnŽƒUµ-óEtü–t¾óÖ»àã¶ø¯~9ìÞº. ]™W^ûE\Æéñ>Ætßï$ýÑ£4š»kAE1XOŸÐ/€±i¬@p0¼Ì˜ÒMH†u nð¸çkåÑ6Àk ”mŸØÙÝHR ~ Õ‹E¹úQ $Û"÷uÐhÚ¯†ÆXi´oc9ù>dº¼o|iNF´Î- l @ Àm ÈÃ÷“e™ë˜†:bËÖlR¿™6>æ0{d«ÍÅ…SoÅEö"Üóü×™ LC]"O.ñ¨«ô(†d˜NˆÉ,eî¶Ï`¼ Üv vn†µù¸rîD\>û>ü|±Ý»yOôBÃéʽ™ô³º°m Le™â‹/¾“€%Ûh¿ jl»iܽNIšu—¡z˜Ÿ J€#ˆ¬™Ÿ^@¡Ö³Ò6—e&(6ß<,G@äoij--ÇÆÆŠ~—÷Õ§²Le|Æøz­ÁÀ5Ö5Ëɺ[OÓ5?c½­³,ëg^æë¹¹½%/xb©ù(³½#ÃèÊÞ·€|4ÓüÁ³(Ò£#K€fò[4t +åÒªŒÜü‹Ðñu}üˆëM=ó¸Í2oëÓ×»nH¤.HrndÙSúÍ¢Û÷_~,?÷…xúŸþ«xšºú̸vâxt³…˜}3¸çPÄÐv‚`ȃ» ¿pm±¤k ÚèÏ3gÎÄû'Þ+Kim(™µ?¬·m´î¶Óßó¸©ò!dÓ¾ùæ›|XÖãK_ø|Ü»/®]‹ŸÿâµøÅ›ï¿[=Õ^–l:ѱç˸ºé€"tCc¬"%m€8Êc¹—ÑU¤¡]¨BÛm‹Ì…mèýu²‚;°N cn ž+^–~y¿{‰2q´»j?+%­’È8°øÛö¯tË×IË<ç}Ï™¦9®uÝ¢@3Z®™ã5“N'd F¨Çó>ˆöö Ä4oÇKu|­àè³ jìÒ&à÷cçÑ—ùªv³å†ô$%8N älª“K2Ÿ‡±éÍuRŠa9浿e(.õŸGNšžçæabWÎÇû"öãC¯C¬ô:ðUŸ«iøÿ™ûÄ>°îö“‡}$X;|ø0›qO¦xñâÅ’ÎxûÕ¶eÿùÛ`>‚-"k‚6ó¹zLXÆ,Ý<Œ³I³$†iŒ·>ï«ÏåÒ©@9ŸU—Ìúz_Àbù^{ßzù¼qÖÍßYWÏÆY†ió¾e™O¶SÃó·ÏÍ'¥YÙ×ðëRžw3mÖW7Oû…&”³ èÁmø"m*m&^ãjæcê˜!HóøC‰«M ¬¯eZ× Æ¹‘·u*y­ß0]OÛáýæöù\¶Û6ÝO°æ:ï­"•ÿÛx}?Ä¿ùWÿ}lØÛb׎± Á(CþÌ8d#=ͤXª^¬A»Ð/ƈµµ(=wæl¡¿í”ÙxÛí· UÞ#Óô1Ž´¾Ž£_Aœ¾ñ¶nÚ\äe–£w:{¼½ƒ#1… –¡*[•1v^B4Dc7ý¥ôm °U©ÌÈÐËD‡o @݆zˆÛZ-ÑOíж‹í¯l‡ O@F,?xV£ $¯ô.„Ô%&šàÇ¿ ºtøà¹ÒßÓ³9.ìï<|Ðë Í×çùvñÍiìƒVøõ¥@ À=ä}__FBtÍ-U¦Ñ)éÄ4ÿà‹_3'ÞÅ¢ +2jÂņÙËoif<ÆÞýqÌ!¹Üÿ2S[g+K1†îÛ{¿ø)›`ä–™°ûöÄv¬uG¯/Ä@ïŽ&]RÃjN.€DFFRÚ m€Ì¸YP’É-Ç ÆvhÙ»Õ¡ÿ|¨ƒóñƒL‡¦tŽ_Åíz{gePuôÈ , ıcÅhÀ¸·Êø¥ÇàÈpl.+Y¸ Ødº¶C:¬ÿÀÅMÜZ ÉX@ßKš®Ò&ÓzÝI› (XAAHo§Oá®f ¥yœSÈ8ŠC²†ôN – Å<Sþ>üÂ3ñÖ[oÅ »`´³´™ãj‰v¸wïgÛâ!8°}A†J„”>Ú&ïû¼õ1€b:ôã‹n’ÔWÆØPþR»ý€î ¬pœù j݈¯—Ñ[fºcǶW€ íHŽú9㦉[°àAö”¾Šn)ýÀòõÄW·²åtœYŠwOŸŒŽ“fq«Û·ù:ÒºôÍzÛ•š h¬«c×#ß%ÛàµmγÏÚ¾f çõÆç¤MæSÞ }ÁÑ×kd Þ}õ•ø›Í›âûßÿ>6H•P!¥3/à RûvÚO Ü ¡8ÒupØêŸüðïãÿõo:*nXÒ®Î7ªýa¿z¶žÖ£ÛI;*\Äú½»ÚWúèÚè¿‚p…eú¾û÷ïG ˆÅëü³’d§>С‹ú•àõ øŽ5jë¯ÆDäj=KÌ*ê$UšºŠëŸ` cøtð!:ÏÃ%vK#mžæë8kŒ5oÜ`_zäûhŸHkû4UÌ?ûÀô^—þãÚàµïl~0åø6msȾoŽk]ÿúR àò¾Ï—ܯÔ2)°´eÛÎ8ôÔ‘¸|ü5¾Tk,‘ÎE?º].“Œ]ºÇß|=¾´ÿ¦®Î8òÜÑèƒéÌàj'î¶nâËWæË¼p»]X6N ‰’ËDœì”*}ã[ߌ —‘N¡4½{Ï>$l!fiä@QcéèÌë?c¹f!¦Öb·›÷<ÉW¸†0–z*dHX*ÐUûu.cYÃM‹û`.sÏà_éR Ï×P¤–Ñ?èÈ>WOM€æR¸ÀÈ8¥l½e˜ح£t’q8v¤Õ‚÷S‚&ó(clL˜§ÀIð¦Å©Ë§‚ƒ÷ =šLóó^Z­fžÞ·Nù|I_–²’ý–[¿rß:™Ÿå&x¹e¥ëy'} òo4ù‹ãXÓK…B£ÂÁéMAˆïí`$p“þ¥¯KMlE?zçs ÐÓ%T—áWôÑá;Dú2ž³ýÖÁ²|ï¤G©×zý¤•mÊ÷Þ³qã þöË[¶ß Ë~½Wu(¿õ­¯’ÏÙÆB‘²5XÉ”ÏV”È­‡Ÿþôµø‹¿ø‹"a•æÒÚ÷+Çœé RË.t·ž”-°3Î1Whͳ¦·înxïr½¥¾ôE¶-Û³^…Gút¿m‘~ÍÇýæ÷H³Uù{¦Àg÷{Φ•ðAQÀ ì×”tœ¸—Ðu‰O<§½{¶_^b©c~&¿)®Ãlßxå'qðèbë/ðÙ[v"™AÑ·—¼JNVTЖ¹oàÛÄa}œØl»‡“25™Iu[5z{Kmlç3s"âê{oÇù_þ8:Ø^l¾­?ú÷¾Ã{ŸEG‡Í·•þ µpj­Þ eƒsõd¼Vç²广¡Ûå\Æv ³e¤W|3Ãà׿øËÝOþÀEÆ'ô°í¬Ç./¤Q2EïI¯”À%Ø1þVÁ¼e¼ž}F0`™ÒÚßJÑtgâÖ?‚˱\ï ¬|.ƒ×>o~2õÝ(²›6˜÷­›y$³j~>óÉþöž Õr=²ý¶)Ÿ‚˜ŸKgv㵉É8 ÎqÿJör*Ûhr¬rÓeD¤7iæ?ƒ»Yg„qÜà Ik´c‰ýFu;a˜Fâ6‹E«Û°­á­ôÓhÙÙFÛm›¥ GÚ €îö>%-rœÛöìOËMš5Ç—öBã ™ÞzØ_Z/K+ÁÓ¶m#7Û©>™õ4ÏoSS‹ñÓŸþ4þüÏÿ¼H;óÃÀvxØé-ýv¾s–cÌËདྷ§/Á:X¾ R)¹ËôI£l§ãÇëG=d¿4·#ã¤ÑÝBö¡é¼–.Íqw{¾uÿ×›7î×›uëó¥nL–0M<É£-Ã8íìÛŒù?&ø.L!aSe°·7ðwöËý»v_d,2Ã#5AÖS޲ Lj«üJû-¯ùø•›ŸÁæI^& C±~7<¬Š+•.ÃpVب 7.Å™_ü˜%µóXºuEßΧ¢ºûy,ñ¶¯ôz׃»<°´«<½Ò+c“!–d}5˜Ln.#v¢ ÍÂ]T‘x¦oš$Nèö½ÒPö IkP™«÷=’&Æ™VFz· }e¾ÒÖë,Cfm~.a Þ4ñ¾õ1½Gëä=Ëö9¸V´)¹³~Éœ’Ù›Öàs†l[æeœ ÈtŽmóͲ<ûÛnjCÖ®b:k‚cluUÃy/µµñkeƒzfíJ›¬stìÐŨU-ÈU©F]LCŸ/’ûÇ—09‹ÛêÐpEÑV$nÜäoÒDðf_)}t¬Þ-ØC3 üm|Ò+¯³ ïÛvCÒÂkA¤Ï¹éýÑa3Í7Z£ Ý uñ.x^â£ïäÉÓñ‡ø‡ñÇüÇÅÕ’2ë\$´Í|–k$Î~°¼¼ç3¦1½m¸=õÔS%?Ó;=rä82G=H§ yÝ<†óÞíÎ>ãÑÜßw»gZñ- H–î!KHÔ7òk¸‹©ÝãoIkº¡­ñÌ羯ÿà»2¸ ˆæÄtìÛ Ãcò}Ÿ= Ÿ{ ¿P_û]–JÑIŒ˜Gz$]EϦAÛ?œzNB䄘µËß9Aº™yU,Ð$ t3¤—'âÔ»¯Äoü]5Q7‡^ÂÕA6¶VJ„e#€Ö µÝ¶G¾¦ß(Àª’6ÀZ»ùA!4€Š8@^êæ4@DC‡ ˆyÐA¦h»m³L2™½Òõôr²OÚ4×G†y§à}™°ÌÃñáÙeS¯õxúôé"Q²<r>c],׸<”â(}Q'ï?úq‘Èù¬Á4ym[üm–ë‘mkÎËô‚A‚ÒC–YQªVšÀ>âu.ÀisÝÜã²,"EódCò渞§>y”—F TçXZ¹1ÍG ³§=&f§åó±dÙnø.°—ÖYà#-Õ}³ê¿Ù¾»Ÿ7dß5ÓCm[Œó~ÒÜü3]>gœÁ4º]‘V?þñ¹*@Z4ï¹ n¿¾ûî»ÅØ`ìÊx©·}n°m‹eKsÛå `³¯²ü-hÌq™Àݾ·<¬k3p³ã²]þ~TC Ð`c.¶Ùó½ói>îõ¹{É»•æñ¥@ À=ä}ëKíêQ&p÷öcCèöÎá²Lzê¿ÇAæ$P€´ÚTLM#…ŠñWã§õ§ñ»?½»öcðЉwrø”Ö]0²Æ?@Êmt²Øþff•Œ*i²Êr°rÅ6–ÆÚ§ìÞçÞ}3Þř鉳1܇#ÚM»cpï3±†û‚Ú† lÁ£;‚e¤m«.À9ãÜTæ SÖâ ÏS) …Á(ùŽ% wkج ît¬²õƒFÀɲÝ9±çd¯ÁqÉ$½Î4öa>w»þÌ´YNê8é’Cé›’7óHi’å$Sw<²LÏ2vÁ›;(¤”ÐçaYÇÂØ×ǵàÊølÏÆüL«.™ÀHé–õ3¿›ÏÐkh¸»°ÎY/_+åFN€pƒx§]áXÓq},Y†~ßJÀ­_cdéo}’µ#ÕÆd×W'oàël­êPÄ7½Pwë'í< p=ÖWP#øºý­CÉÏ BÒRzÙV8¤¥m¶Lo¾ž}Oš ¼÷yŸùƒ?øƒ" µ?ìëgŸš§×;wì)Ï›Ö óy—ü¡“gË3oÛä=že.ñþyßz¹ÅÚbçÎ%½et`@aH:džÖÙÃz>Ž!ûñ~Úf­Ð¢À(ðàÅw*½uï®(Lª› R;øe6÷\x輊SΧ^ü"~8ÙÌšø5ý޳q÷"ó@w{\:}<^ûÛ¿‰ÙsÊR`7_ÃN .¼4\ƒaädš“NžïZ¹O)u¾]h×íÌ…}lL,]¯þC\92ú7¡£¶iol9ô\tmÚQv§†uV4a‰· s‰´,“Ñ:s]½€À~îŽTb_Ûxl‹Éls£À€† @7Aß®ZŸX¼ýoš’Q'Ó3N‰‰ŒUaQ¦%¥$wªL3CM0¢“Þ³gÏW–e¼e[F2â¼n;¦uùL£ Ïæ¡$Ègšø`q’ãIÀ^ïTY$/¢´dÔ¸¡“ jXo/XÆ´—n$µ&-’Ož·îÖ+Á®m7ä½;mGÒÅt†üm?>ûì³±wïÞ ½Ÿ4Êtž›Ÿ3?ikœ rÿþ€À*>òn` p!.^¼Ö·[_8pðf+.W”ÒÙV¨}d0?ëc°O=¬‹}`¼ÃO<ñDïÒBpè=ëâïl§gCæ]~<†²÷Ú4iìÑ - Ü+ÏÏŸ{mý#Ì…¥OUY¾Báº7àŽ"1zæÙÏÅ»o¿7f®G_?{"›š¸;·ï@»ÿ7?ˆÍ[÷ÇÑ­ûP’Q=Ä‚° §Š†7ò!’q4“åa˜P¬CNöÖ1'F™ºÎX×X\µ!8{ì=–Nߎ)$»°—'{žn;øtL²9w}a¥¸^aGsžÁM`¬ÆJ L•ºt´¡ßÆ’ô Ö©½(Om[¹³HáÆ×†˜\))œu@µ»èÅ-JÌd~¶3ƒ¿ ÒCY[—€4OþÒÇt·êÏÌ'Ï™wÒX¤Ï9w¹0ŸÎjC‰Ý±gZ%/Éým¬ Àå3™ºù”1»Î°MgƒŒÝë 'Ù&óÊ:g{Lç’¬ùår¢i¬[£ý%]N ó,ÞÈ?:­À9Ò×uàÌ—BJÚòÚ6…iÍ[IžF8ýÅ©Y¶~BjÅ~öÅçÝ}Á ÌÇ8Û h±žJ±²}9Vþ·³íÙIS÷ÜsÏÉ™€ª¹_3[V™Î|¬‡41å/¸7­ãž¨e}õÕÖ‡+L»îN¤±ô6­OÏ™‡y›—cÄ`ž›†‹ÄMÐî²qJé,»Pßg2äµuðù»Ñ'Ÿ{X϶Ã`»¼nþ}/un¦G^ßËs­4- Höý{ÿök‘â᥀mäÔÓqB,~ÊXâkcyoYö}¬Ç¦ájL^9×Ïž‹‘êü<õÇ4Ö‰ýÛû£séd\g“ûj×`l?p(:Ù7uEý­`¡'ùÚ²Ò»Fþu¬Ug§Øïqi¥F˜"“vNà–¿1È8šãsRv2ËI)'¶Ïo¼ï—½žþs¹LÇ›»ŒÏ'¥mL‘X P J'Ò¦R4ê_AÙéâ;÷ÿû˜=Ûw?³ñdúÿ †~Ò”.tØ -oT›ív˜t€µJoIã¦àƒèÇmk_ŒáŽåè%Svz÷èªb=÷ IDAT#”~.àt™å6¥9²¦-û„~»D(æX?è0„RT¥€q¤£‡¿í<×ñù×覺U”´ô¼‚ ãWñ#¶ŒƒÔ.|Ê,á«íÔÉqéâyV’ùhà~M ãfœ(ulG ^½¦:"«eúÚø˜ü<Ëú{öíÝH‹ªêSQЛì•:>:V”R0dzKê-rNc²ÎÙ¼Á4^;6J¸JŽËN–ÎçqÖÚÑEû9KÕJì}boíLüø¢—=ƒyiÓÿÒj5‡3q]´£8‘e™UkÖbm]&ïØ>מÜÿñÿý«ž¢½Õ¶˜'‹žUÞ¤¾ËŽ+Ú¯^™@H£ä+Oö%Ý2d_y3ßã|‡„Õ¾ø:®r6oÛSìÈÁ¶X 5ú‹}L;«î¢À{Qú„þƒußGúË£¦õmƒúäÎ8¢Þb)ÏþîDÖ2“Ζ™ïró{Ýg¼mj€ïJ<ûâ qààAæKÈ]Auq‡„bÙmqëÁgóÈöæ½Gõœã3ûÍöÙ6û¯Æ<šíÍöy/ãê¼_Òß<׎¼ozé—i=·B‹ÍhIàš©ñ^×ýOÇž'?s7ÊöZ«LÜòªY¶ÙêÆ‘æøÕ3ñÚÏÿ(z6UcßK¿…e]_LL/âC ƒÜ-t²¡“Ãâb-NŸ<ÅÞ©ïȨ%ÙÑŸ-ÌÈ ûVÁÉlj?'™œì„”XÈÈîš'%™óñãÇËÞ­NhJr¾óÝß)¯QÏÅ%]°s¦€@¶²$ªïÕjûR\8þãøÑŸý_HÙÆ‘ºm‰:† O¾øõ;ݸFРÁ}/;¼u’WwY|Ó H‚!qƒe²¼ŠëŽèÅÎU""€Ï6b IÇÏY+—Á²/2}™ŒØçL#³É]”ÞdZ’ÏçoËË2ÌÇþW"#ãQÏÊåNƒ¾ãÔ »[Èzg:ÇOsy^[†º`–gùŽË3èÒEP®ž›é*€ÂY–Q«ÑNâî7,ãøwy~1æù¨¦$Akð¹ÊGDñx'õÍ:Ywëe›Œ³>Ù–{©‡ÏmL¯”Ì¥Y-D?ÿùÏ€¾#êú~)ñØúl"$ÍGšèî¥èÛ¦Éú˜¾Û&vŒX®Á1bßXŸŽÉúP*é×?Ò¦9äï¤]ó½×™Öx¯›oLÛúÝ¢ÀF Üš+oLÕúýÐR`¾ÞCýâÐѯÅôäxœ{ïç,ùLGç½3+Ñß«´b)®]z-~þ·ø5ÇØadzßb«šù_]]ÄSI;=\Ó샨TJá£ã“±s߮˜ïD€æ‰=—qNêNäÍ÷ÍǸ“•“’7­]¾“ùÉ Îž;à æ ³®›÷|¾†$b|8zæ•øå_þǸrì@,”Þ÷‰MO-~±ìšt§ºë nGëõÙŽ‹ À}·*0m­H:‘ÈæÀ.-ržGŒ´‚TOSjr§ìø=éT€ ô–&ÒQpæáµ’LéŸÌDÚ{-öèp'íÏ;WÀ˜éÍSðmZûÔ`¼Ï˜^¦m[®>ßÔƒ’i›^‰” înÁgÍ×< þÎvø;ë-0òP?KÀ˜å¯PÚ̺mRóH¤FÑù¬ãìº éØý†å‰¼ñLÆüõÉØŠôµF9m=H¯QO°ÎH±X‚&”‡ñÒ@ZØ÷l¯%†¸L™{Øêëí,:†Ù–‘}ÓLÓûýÄHúgžž³}¶Í­·l³ýïx±>c:iÐØoô~(ðè–ž{aäóx‚C=wÿRž;Tï®·œä“ÆÍL#û¡%èd f–iצñY}µ¥»ÓÚoÙGÞ÷™ìwóðYÛ¯‚)™·{®ú\ê‰é£N œº›w æg9ËNæ—u°9&¤–)8r)Ud‡±hg ·ÚF¢Ó{÷ǦOÀÕp%29zµHáÜ3t¦øl´Èöz( ³îJ2mKÒ@ºÝ-ؾætKCó×=‡A¼ð Eò¦ôMKá¤QÒÏ:Ê;zô/‰ïð'ë—ãÂßæíÜ €³N¶ÝÃ8ûÊ´~z°:¢w¨ö§vKú7‡üc¸ùÞÆké$=}¦™¾þÎ|6>ÓúÝ¢@RàW9pƶΠº‘®©ç•¾Øsðåxñ ßEÿëiVNÜ¡áFLÎ̳*Äòp töÇÕs¿ˆ¿þ³ÿ=>xåOQ.šÃ°½8‘ÊéſtæêÀpQ5<ÏïÞ±¹LÎN$9‰'a6þök[¦.ópâò·ÁIÉÃÏÜjb2Îå7³ 0]2ìÝ]ËRðÂeöò¬bXd­N]‹+ÇߊŸý‡µÓïDç"¼º=¶>ûµ~ò…XB°Š5éÝÂÚªR&À+V¼HøØa«8tU?K«ßu¿A:‰U¯ ×Çîº"!Áݲà÷sÒ· i˜ô¶/<\F3Þ>ifðÆËhÈJr”–™>ûÊgìCŸ3ÞßÉhüm¼R¥/ZIêBÂßYŽùy}·`žJnRÚ×üŒ×YÓY–R8LJK¾Þ+¨ë |RhT7®_‹ ÚÕÖ0-½[îx¿Æ¦öJô¤‹c[]ÄÆ2*¿ý €F)Èdý¥m^ß±n–vЖ Í¿ÂJøJÙÐÀkéðàÁøÊW¾R€³}é‡Ïym?[¯r™ïÇ9›§Aú{rÌy6Îñ£ÁŠíµnËÎëñ˜ÿ‘NI›êu¾owjzÒÐç7Ò«9¿;åѺ÷ëK–Ã#Þ÷íÈ‚”G-¢äïFÒ[¶lƒÁ-Å•Qü¢3Vídÿ€:’°¥6¬T»Øvj ÷ãúÕ1dHxºgÐ^–'xè”™f¨|Ý ÆS‡Äö»n2æ Æ §yrÏ{zíר_æN`J¼×œþv$—ÊødB‚]»vųG"yCÂRcƒmíl‘t%Žýü‡ñ÷ñG1wêo°e)¯c$ªûžý_úVtïØ3óXÐaEÚ†ÁÁ‚‹§«5`'®BêÅ]Hï>°ÔôÖeD1œ0&hþéÑ•]Ü µVü†Ý9ÿ;•ýIṲ̈› (½ ]³Œ‘‚#¥BÉX•”êäɲ,)#ñy™°×¦3LÄkƒýi?ç=ƒ®#Ô•ôYœ}¨”ìwÞ)ùÃ…¦±RâOŽË¸;F¬¯y'S3­×–å}¯­ƒ’ZÏ–Õ½†Â¼[-PP@›K€þ\|Ññ3‰}z?aªÒ?^˜Ž‹øƒÂú{c–:íéÐk½<‹KÛ«ñB³ó^ëkÛ²·«CóýækÓû{GÞæ«#^ß i”}$˜M‹_iï=›ÏY~¡åÝ…€·«Z‰o®S^›¯×¥Ÿx9™^«iŸØ7ÖѰш¡D>F’&ž¥‹G¾;E”MïeºlzÆi%½¤Ÿ´Ë™BÛBçÏv~Éú¶Î'ZK¨g¿Ü{­Ps/Ï¥¶Å˜¬·¡·%öýfÌÎ-Æ…ÞˆÚÔ(àg>–jlETA_n¨|ŒÎŸŠ¿þþÏøÚÂl<÷…¯`mw(zú¢gÿ˜Å¤PÊ32¡ —vs¥š'¤¼VêOþäOâ‡?üa™`¿ÿû¿_¯e(Í!™q^[†i7V¢Teq€ ÆÓ—OÅû¯þ0>xíG1vâ­ØÁþ¯‹k#Ñ¿óó±ëùoà´wW(Œëäßê’R¨›9ÝòBÇ­JÖ:˜@uêßÆÒ³õ){gòp‡us¡p[hRa·‡ö˧K¸¶˜`9õ³ d™·’õ¥y–¡Ï£i9¸ä˜ºdÒZf¯äÄ ß~¡dŸ'#6Î sJ0¨Î›Ò·”š 0d<êlYŸ{ –ãó–ã8¬Y†ùdÙ‚SÓyXÓ >më@ß ‰h7nFØ5a+k¥µ3‹ì óÞ{©ÄÒP§ÓçÏEgO/tf bмŠdÏñ²¸T+’Këãr¦õõ°þÒ+ß‹;e·{楔Tšú>IcûJ€.MÒÄåKõâ|“nöo;!ŸD°-Ùæ™ýeŸ©?)˜|ñÅK}ÙÖï×)H›æ`?ÜËøËç’^ùÛ3$o…nKOæí¾mö­š•`묶…èèÄ!mÇqüö½OÇçY]aÛ¨³¯ÿ“.E¾©wc¼[7o‰áÁÕ¸vãdüè?ý1vêøÂwÿeŒ<ùEòê+.³ºd 2m&!''Ï2&™ŠÁ‰Ûøœxr9ÎÉ[FséŽVt.}Éà|6Óæ$å$gœg™’Ì)›¦°äòåË¡c€ÎŸÿÍŸÆ[?úóXaÓòí=qy i›Ôzé{ѳë Úφ〾žÎM±ZCÿ¦}ê.]€>V…‚ÕJ;×.Ï®3þ6ôßÚT®buEµákÌ}Qk@àê°CwÉÿÁÞ–a§‚gûD@‘:Iƒƒ½p ºkö‘ýcÊ€7!ýòZZÛgö•yØ‚>ã=ì;ûÆ´ö“iõ¸ozûËûJ .ŸZ†ùÜ €HÉ_Ïr9Ò2RÒ(@ ¶÷‘ŽÎ©0F–V+HiqÒìZ.·%™ÑÇ8ë^ç*~cë@,Í ª€D–ÆÐ_À ".‚(Ûk°îÒAYç’ùŒý $Gnžö…ýAý8Ëyúé§‹¤Î-²|ï¤t½ßU~Ëkî ˵Nk¶Ý†÷Þ{¯€Ìƒ–qÒx3åã{ÞHŸli¡]þ¸Ç³Ïdh¾Î¸Ö¹Ef ´\35Áëe$SªÒc<É2 a ½7@Kÿæxéûÿû¨ÎÆÅÞ‰«cçb w5z`¸ç¦¯FµÖ[6= ‹—ÙñïâÜùóñÂËÿ(^þú÷£cçá"y›Ã'\¥›%,W¡àCU èà‹Ûâ®Áëe ·å·Õnt躇õ9½r°|º#»ÐÏÁRO9UŒg &‡ïÑÂK¢…IìS"`äq9–›Ûy«¸æû¯“öÿQŸÏçZç_/ ´ÜcÞß#ûž‹½ˆaæk+qáÄ›ì²0^–Àz‘H¬ÕLè—u1QãÂcö|œ~û|Œ]D—æì›±ÿà³qè ߉ž~¤98Ðm—Ñ!U£˜ ŸTøf‘FIÆÍè£}÷»¿Ï?ÿ|Y:S?kË›U!ø`ykÙ=+‘Ú©S·(KµkX:Éšïz2Æiá™÷ÞŠKgO³\ú_9C༷³s%&–èÄîƒ_Ч_þv´U‡Ðy[Áe Kvðæ ®QV`J«ÄÉ;J•K ï öÛô0õ5o€› ´°„ejYæµM¤ˆ­qÿîð ²b Ñœ®”¶^ÜJ)Ã;]l4ª Ó<îL¼úÊk0Éåø·ÿÓ?Ï=ÿLô û,+/Oß(Jü2\™o¥Æ†âH@¥{°WnÛðv@{OüÎw~3žñùø“ÿü§ñ“Ÿÿ,&YëÛÒø î7zºûH›úú hÔéæº„I,ÿ*1SÒ¦¢½Ë¶JãôgÙ2sù협ñù¬KYg[ê=™šàÀ`ù (¤y[ÆÏ ö—R;Ud$LA»CÕØ>Ͳ8,7%n| ¬ºäZRYNC% M‡·”QAõ€È2ÀÐÇ®\Ž:à¶½ÎgmëíCº‹„nÚ¸ÙæÁ­¥ ëØÌˆ³ÝÖÛxã2¾9ízuny2oéíÒ´z‡#éâáR©4ôZú™·}ñÒº²½ã…~Ò·£÷œÒÎ<\æ®ò¾,Ã`]³~Íu5ÿoÙÖ¿£ãC«Wu,5h± ó¿×ö•‚ñ?ÙÖºÓ! ,uö[Qú²4N7§õâ>Æ – ³§ÆV¾%n@Pôìtã‹o¹®kìá}¶ã²6v  W]ãÁ[þe†xkÙ@mb\rÆ­¸¼ P©±ÝUßÀPH¯¾ú€u!~ïßüñ•gé–õVÐo›Ásû2î$Ì `©µdGé‰K2,ÓÔÛ`¶]Ø‘cgôìØ»·Æ?ÿÿ4ÖðòÿýÕ_Çé™AZ»ÖŽôŽº‹ 2¸ ÉC%sZ(€Éä“a™FÀÐÌ”¼gðœ‡ËyJ‹ôE'xÈi}^p‘ÀÂxË„øìõ±ñ˜ÃÕG‡~m/ˆù7ÏVh§Ñi<"]õ‡äl™GtÜì¸X'7Ýå †#5b);Û³¤_ïŠÓÎÅRÿ@t±üÚ`ë¦ìE€Üzø&¬d»³Î †²íÙ®üíÙÃøŒËvo<›Æü¤¯ú¤:ô5döIÒÙ8³‡ÏH×o|ãqâÄ Ô$Þ,:ö•€/¥g •›ùe½³oümÞžm£¡¼YžiíÒá™gž‰”ô>×ÑÅ;áÜð‡¤Až¥•4I—MϱáoÓn ÆåÑœvcºÖïš)ÐpÍÔx ¯ç—„0]$ÛEbÒWªL––fÇñ±6W¤s«“,ÁÔú¢}´*L® 1RŽlO¼úçqùøpœzwlÛ½?6o߇ÎÒÞØºsjvÛ¢«wóº˜ ¦X¸£ë£JüÒÔÇxA(ƒåò]eIhfviÛ…¸qu4FÏžÀßÖ1ƒ#â5¬f«(Â=±½ö8gÛ¯kKÕèÛõbìÿâ7âÀÑ/¢×4Wp²:ÐŒrY‹ PëÀžà² †“Œ“Bï#È€…ä_–G‘ÈÉè;ðç•ôÚ½X âƒRÚ+UîêHŠHÍÁ¹\ ææîèì+ûJ*E«"Mù囯³«Æ¹øö7¿ßüÊ˱vü'±03‰Ÿ?öoÕ7´-ÏB89U'Ž1 „pµk9ÑŸ[¸Œ´Ú «´ƒ~üÝüí8O?üÃÏ^>@IO7hŽ­¨8w Cj´ÿÃ]¤­Lº½:=Ët<Œ¼™Þ¥:ÁÂBZÇ È|&C–—FƘÌÑ8‹ÏvõÌ5÷!!bì*ICå ‡Î«ñãêûýXÆÎ3î¨#ÞtÊXí´ƒùî%»†DN²¯±Ÿ®ÆÄÒ‡.ѳ«ïÉ<(¾A€ ô ÷æXZ^fpÜ6ÖÉö[ïævd{šÏÖݶ(»[Zó<™V)\ª¤ÀIP&h“ÖÒ^é—¿½Ä=ùä“ÌéÚÇCIžNúÕÙ&lcݳÖ9¯ÍË< –aý}Î¥d%¯Š#GŽ”<íwïy|Ø£åÑÇþOö§ý”!i˜¿=gº¼öwÆ™>CÆåïÖ¹Ef ´\35Ãë–—&¯MÇôÔ4Ël£uðh Œl‰1öŽ_>‹S'™˜aÆh¯Ì±$Sü­€zÑ¿b’ß¹}) Ò±sWcôÂHñú`Ú#±c÷^–svDÛæçÊÞÝÊ>›j;™÷öôÃ<_æl¸]gCç¬CgÐLšŸBÇj&¦o\c׈Ѹqî$ú3s±BÚ=€”ÑýrgÉGqììõÙu]·oƤˆÝH&È{ ‘Ü@?Ê÷èÊ €œèd22c%Vn¹¥ô¨Eôû )%Xæ“טF^öHÅ¥›%±dÊ2!ÈmЄÀ ƒoVCyÿÎ,l™å׆>êOÞ )Ý­61Œ•™‰¸tü8²s0¾ÿå#1yüÕèž¾a 0ײY~®á­‹~@yî+PiäA¶,§b 0nçXÅÐdË^öïÞßý­¯Æ©NÆÜüix¢G¦kŽe–ieÄ2lCaÊÐZ"°Pú"í“¡Ë|’a ò÷혒 BIš À<³ óK&˜eg>¥Ÿ)SÀ2È8ž›¼öýt·Æ@'ôÇÎ&NãŸlîðö°óæ¡/4µ½‚l2âº,æCÐé¿:À¼Xã+ä,mïEÅ`ž{Ja]’Ÿ¼Í n©¯à)Ûg I§òƒ?Ò&Óz 6uÑ2íÝÎ8Çt!Hid?$(´ymy¦»[†9·âÒÀÁíêrý¼·æc°îIã¬k¶Çß–ãoÏ‚9A¥úµ.×}î¹b•l}¼'}>„!wkÙ£{ßþÌñ™g[“4M:Þª…>›DÊ1r«t­¸nG€»e“ø^˜ô<Œ}µVgOø:~³ú¶ìHú7m‹“oa˜ÀD\Çéï*º=su–Ì”bÔPZŸëŒ­ƒX¹2i+i_wç1ýr|À2ì &õ™¥ÿCÔÁˆ«ÝîÙ_©»°>-R˜ß Æ 0>ÁÅrm彆øQComÓÖn$~]}(‚w°I› ,Ÿi>›V0b:ó–éç³ 2ïdpž-ËxŸSïjb|4&Umƒý±9†Ê! < IDATnØ#xÄõ VÚÝÐW‰lE÷0ÐI£{EÇ5`ë3Pà´¯Æu=C_¿}õJ TÄaÌ€ Ž! …÷d,Õckÿ8X)#‰Ë¶['ë·1dœé¬³€ÊÐLËÏäoó4H—î:Žæ%­|Ç’†^Kï¤ç5ãLïsÏ´t’-ˆs®UŒTÊ{J^YOÏÖ-ûÐr2OãLoiäÈó%Ï͸R1(7­õUJùë’v¶×kiVâ>|]nI éiºæã– [‘- Ü‚Ÿ‹»E¶­¨‡…˳Lø0ïÁÞ¸+Љi$4ÝHʶÄ.tª¶ ÑSqéÂ;HÅÎ19/•‰¶Dq £ªv·³¬YÁuFg TÑc⑱ï¨.À p‚·z¥:3Wpr‹N‘K~NôNäJi*‹~%:LêËH±º\úD·H`)s)zTs¸¯€r[c×3_¸=»žü-€ ‰Üê"þ×x¶÷ ºÒ˜Ÿ¾³FÉž8ÁŽ_³î>¡$EÀ©e¥˜ë¾B×4&åÆ\ C-Î…ÉF%è„,JM¡Âr™”¢žöþ­B±b¥ýšvhÎÐ}T+÷·¸Q@½}¨—åPv^]]ˆï~ùÅØÑϱS±s+ªº>SçD.¢P«/ŒGOuÝaƒš­àjº˜´Ðcå>àøÜ© =|0ÞzõmžG²HVd­ rhŸG2fû+ãtgaç}A˜€Á£00Úâ½Á{Æ›Þ| $€Ëg=g°œ|.óbç96±ŸYž+VÈZGwâÆ¥ƒ>jgÜ\o^î`47–u× …:›Z(»dº2rå:Ò§UQ—VŒÝyÎ'®]-˲ZÇ BXÂ{û‘ ¤¹‹º×qœÁºm¬_Æ™Æ:û»H§¸Î6äó·:›Þ`Û}G<2Ø‚(ß³”æ%-Í»€9gŸ¸Ü©ôoß¾}å#KƒƒŸýè'åý3}ó³–a\‚p˲.¾Ëö‡Æî¡Å«ÎœçX6µn]HÜ1¥N|ßu†¬ïãxÎþɶåoéõQ‚Ïå³å¹VÚ_o ´ÜcÞÿËXÎ`¹9ÇÒ¨L ¾ÆºD„…Ôö—Ht¤l‰§,L/ÓwI5A½K{Z)ë7•à•L¹,'àðãÀñ…ð°ÞŠR@CúØLÆO{ÛLlÚ±-–4‚ÅÍÆA‡–ʨ ´#qúOg®ÆÿúÔ—#Î^¡š(ðc=Ã:7¾ä²Ýš.÷WbGŠÝŒ…Mä>³Œuëö1e"VX&ïÁ²¤›Á6  [›Y‹=ÛØ^иŠûÛ–ã_š$]¤“a‰2’™w# õÝØ¶{g\ºt‰.ìúBšóñwæãðmç}“nKÐä† m‡#l]æ½Å4ÒA߆vŒx Ö¥üäcÔ)ÍeÌúQ# _ C5ˆ§lŠa¤ð§NŠãÇÿ}kŒséï!ýgðw×e.-‹YÀn;`wïþñÒK/£…y>øÆõ;Ih´§ô²Z<¾Øf{çÆ9GzÝÉ<Ò2qö±éÐfÏ£H1¿ô´pá[ifþ2@î Êåû~Ú¬ åEMá—A¢Þ£;ñe*#øj(–VR>³A;U‰¤W(úÐdÃSqñ„¿,¹ù‰é ‰ôX,-JûD9…8Ú .XÙG‘Þßîè0.pÃñp‹Ü -E¢pÿ´$V¥’^Ÿ¦`•äÉUtÝZ:3F4¨îÝâYœo?À …¡ :`~–}%Q‹#Æ¢DKÐD+ˆY¼“ÇkѼO,‚DN`(gIЧµ¦¾Ð¼6?ü~¤=?8øøh¢7™{½)èäc ]• ‡ÈX€Vcœ2Dt“é»/´yMÇÓ¦%° £ ¯-kNÿ‰%+ÏzX§¨§e¶îQÏ’È_‚8ë'§ë ~'¼mm´È/ÎÞ‹]$ÒÕ«WÓõë׳¨Öº)rµœa”`\ "ÜêN1¬å…Q ŒZàùµÀãçù•c”ó7Ô±XÇ9EòŠ…½øº/üÄ ~Ô‹»€ÎÙ»¿ŸÚ;ÛéÛlm¯¯¤µ‡Kigå^ÚY˜:ˆ:UV!˜›C¿[ß4ÀE~»ˆöÜæHToÀe›œÃ£ý¹4篅>Þâ›ïâx!]¸˜Z8õ…˶amCcrµ ~åðص./¹^•c¢ó§Ÿ5‰§¢ÐŒ|ù·ø¤àL”xµw db qÑj +ÚÈ"¢!Ú 8TºFrümrór’”ðæÎgúi†Ý&à‡Ž¡ç¦\8“•ÍÚs»riñ}\¤Ñ"þ }Âã:EýÁ6ý:Ö›LWÎI7n¯dâ\Ñš÷Á¢eþ*Ÿ'‚7E‘Þw|¨‰xy, ÂŽ Æõ=A›:bÓU/L ³Å³{ˆé¯À}Ò µÊGAC™ŽÜDÞU\Ú…S©ƒÞ*m@ë–µŸÜ€ø¸A|—Û”É)蘾Aޤå>.Ä|ˆËê†ǽÏ¢Ž)}ìYOÅ ¦é'Èq!ò6-ƒNïY~Á˜4Ý”\ÄéÖE§Ì~ÞOŒgŸr‚79§æmûªñº‡hÛh¯ß‹g‡ÏÆsŽÄœ>í{‡Ó]¿ž-0š}¯x¿—“Ë…U¯õÀN““¤CÜÄ},Ë©AB·ÖLþäßb9Šî Û«Ë8¸¸¡èbÕ¸±½žs¿ÆCÄ&Ñ0xžÂÕ‚^ð¸/©c„0>³H¼ÎÌã‹ ¼½ìf±„r}¢ºm¾WǯZ…üë\G8¼¸åëJ¡$·Kb&7-[Ǿ<$‘5„tç³L3[0úlðI@_o™CCÜl\ã›î“ƒ[p¡vâÌt–Ó2Ï*b9؉rp?¨LOÚ¿ÙÚn6Phå-ц B4™CÁTñÞ>HuîGóÉõFýš'Ë€çcdÑ[i]ÇŒI*šzap¶|ü,!ˆSŒ‰Þ—‹¤ñ‹÷‚“}œëxŠú9îLK'.öH5m*œé , €>\K3R@W…êîM0Ƭ`§ò ÙWÜ2c÷Ö®BP-¼)îÕx@NŸ:gægˆs¾xŸˆã9P.œõ¶M¢=žðzÎÃ8¾o|Ëááü²¾°qŸôj¾ï{іѶ>ˆß‚Bç­í¯…ª@NÝ8÷Su'9ê¸ Üw–Ý(ò\ôŽÂ£ˆ¾¶¿Nê×GoãȾ-‡H«|oô{Ô‡[`à·È+víB}øˆ*æÅuwÞGÒõ ÓÆñé>Šìê٬㡆ØÖìbš€k¦XMa¤ú?.R»:ó'¸é±¼‡g½…r}Pˆ˜±/A¯© A]kƒb– !…„ÎT€3 m·èê£v8ññþ8{ªT^3M`QOð#QóšºïeDÅ-âJ¨…ªB!9 â·~u0Gx¥Ç{{³ž’oøêá컼¹˜|AY"!šNò1E™”ò–Év ùâq)Qè$®H„êbñ…vŠ€åV‡àM—ƒÍe\þ‘hqïYþª;—To°TÓ z‹5¶ßê¹kƒE.í×ÎÁ1"qr¬Å!ñ·œ,–×þöxÂg¡ŒoZ‚+A‘[N©¬¯øÏ{ëŒãk€”û3(ïÃy« .5?5Ý¡•,:_èMvÖølia€ŽçUÊF½q ”ÜÛ5¸o–WÐ#à9Ltj¤òX¶ð]Ë*2Ýã‚uó=ßsž Rãcé¸w}VÎßkÓ;êlº¡w(ë˜×¼üíaycž[wÛÆrBÑѶ¶¹Gq}òµ-c,=zoÔª£8¹Fîä6z%b^È㺎CÜŠÜŒöYt&°rЭBÃÓÛøØBÌT÷XE\‹¼ÝtŸµ{r‘½T‡ – å¢ ™×{ûYLÕC黊¾ÄS`؇{§n\ tÓDTÕl‚ЫkŒ ’΀ Ð>2™¢Ìqí¹]9›1†ÀG›‚¨ˆ$Τ08@­ Âå·–š&©1ƒâLÁ”¡]’ ºÈ˜x"—¯‚Gn> ðèpePH[¡H'ûtã†à°(—€­¦ûì€Ó8üýÓÚ@AÊ×§á ñmà,•¡Ü®¼ ‰q~øuÿ üÞGζ0HóÓULÕÓCôw¿g¹„؇FYÁIR¤(€óyÔ3ÿ>¡^¾i ØLSŽ™@N‘`­×Jws×ᄾ©; 3üø¨2¾í^MKÔEÌÝÎØe·’ß°YkëJPcZ–Mc°üæ)Ñ= À/ß„Yfœ`ð$ç;“ï:ô'°Rüì<.˜÷áí÷­‡ñâCÌßÖ×>™?·ïûlBãºÃ‚¡ðs©¼¾çÃmãã4-â»öGôI\ŸæÝQœQ ŒÜ+>bqˆóáêöõ42ÀÜoŒ…d ]!}¨u1VÐôs…n·ÒÅ‚\9»ö°<“pè¬7ï·4LÔŽ¼¹õàÞuñE6h€³q¬=Çjü&ÏŽS5Ѝ㮂› \ ‘î€OBWß)Œ/’q½…Yf‘âO¹qøŸ¢<ž ›}Ê}îÃbsÃ{÷Fèæ$k&d˜kß/ŽŒï¸wš ÐÌÑ…ø€V Þ ¤oÑ.ZŸêgL>¡@‰M±Òç&@1ƒÖœŸO%¦¼*à¤?ªHæÄ Ç=Cfèq~”g¾ýÔzò.Ch® ~Ó._8“Þº4ƒåe2äü‚ý#Q Âæ8 ¸ggî;@‰`Ffœ«þ.zñÉ…(ƒÇ‹i*öàø»UKKôǵðg‡1Žë¸ÅAÙ2»IÙg»0Äu°ÔC|™A \ŠnoƘZR¸9пS£1tÊ¢Ý`Ár±`µç¦à]¬PM//ê€,Ú¶)Ë×ê ©o†¥* e¹¥Ni'ð?Vç|‘]ÕÝ4U”ùkpÌê".\‹€¨ ¢…·{Óˆ¶áõøà6·!¤RD ‘“@È×—úçÈèH™÷(ÿ¬&j;<ðk‰zÑ 'ஜo9jü@•Öð¸}–"Pm_û :‡Õ¬‹G^¹lÒ4ÝHíˆ ì¿hûg òÿjè&Ú½'naþLZ<·¸å è€gI>ÇKËíµ. loÁƒÉßQ7Çš”ñê‘ç‡÷8¾¯ŽšàF`¤’}c|>«ÜÁ‡àbü1ò¶OÜnM7+ GÒ»{ŒGÞsOÕ]ò\ƒÓÔF„:Æ—€é¶LW@ã!ð$Œ“#KVÜ4N”ÑzYFÏÖ×tO ¾o{™†ïym™ä f@wJW.kù·ý —Ñz•ó2íüŒµÁ|= ϸqï¤:¼NÏm—hß§iŸ§‰û:µç¨®Ç·ÀÀß>¯ÄSh‰‡ °!~è€ 0Ð7sÁnÁ‘ÓyDÑÚ® NÅ 1h©˜!ã6‡»Y+ÈCA¢®hû(îwázÜE׫“¦‹»Ô›ºh5zpzH#Xö˜ªm¹OþuœòÎ÷×Ó[-¸oˆŽûø©Èß[oõó—-x†„óà:~dq\<ÅùPz-veÈNeþ›êm¤ï.N§°\}PÁ_!Ö ÂmN ûϱ%ñÚ8åñåó}ag¨cY¨o(Àš…{ä¡/@ï"Ê–Û€Q7bgѦÀå¸ p3‡œ$Ë£¥¨×úZ{û¹4ËÇÆ2ÏþcýO©ãüªÀ=DÅ ê"ö â‡pÿÍ7ÒßÜd;1Êt†}P¿¸ù1sb,+öG-‹y˜¾eÓ’øpîÙšˆkYm¶—P1ªó0¸k–ß4}ó5§AýäPúÌ´lã/¿ü2»ó¨—@ í`|ƒeV/ôÒO¡g?£h0š˜QÆÜ’û¨¯¾€µËœܶÈgb°™š|dMñá‘?Ê\ L¿ü¸]|ÃÙÓ“òý÷í¤mý"Vgˆ9ƒœÝ´CûîÀÍmàXºË:³µÅ¶y’ °``¨÷ÝÎûîlzì|Á“t¦»™Çârs‘Ô_Ü`Ù«Œ)ÏEûë(Ú$¬Q5úë¸`ŸºîF¿Å<òdžÏ_åcÕ:Ú~峿ËÏóÃÑŸÇZàøÑõXÔÑÅËÚåIàï˜(Ö§üìëÔÏí±êèUÑR'¦ bËDUXž²x]¬èqá:nª[>*ÀrÈÜ'sËÄDʵ%\gÞ˼5SÑ_ƒUޏDbò+ÊÌÞ€à(i0PÔµ`i)ªÕQî ÎÛ,º=Ĕ۽‰´ñx °…#Ã6à. ÐU‚˜ä´sþSA1~§ºu­ ôõ+Qƒé–B¦¶0ÈÀ„:ô nSp9*“ ? ÜùÜC´­l?._XÄÄÂRºù§±ÃE5ƒ:G‚ Ég‚ïÅóp^{¬í¬ˆã;æ /ß"xOp"Ñ:(Ï)[Æø¦k~ñabúþ^Y}æÏO¦-¬œoo&¦Òü`œ¾ÚEl ÈûÂæõ÷㌠¹µ+.X·¹¹³t™¾ezX4ï4@Š8*íâA™ÏãðY®û0º¿#?Ëb<ãø[§Ïl3¯ëoãxßàoÕ *p’óoçT¦‘B.ǾÒŒ×D}M?ß&˜#ÓnAÆ<˜Òkô!§Çý{«·Ò›·Òù;ï²?2"xô²+ ýÎfZc»=ÊpýË%€z3½{ùbªÍ°ç²î\˜‘]õbù~,:··ò,åc«*o¼(çٿзÊ}xš‚F[F\¯Ÿ6x÷e=—ÛÀº—¯_Ö:ý.Ê=p¿‹V~ŽyÄBpÔ¤È E©l^ÇqTüRÔG?J`ÏêlM@çÑo›…e63X°ñ% ª¡c¥C_-NYÓsünCw êù/w@Â3äð¨_£O6Göç&a‚ÈG(GD 0†›©>;’LŽÃ?›xÞ‡Tè$[¹’·Rçü/àðßþi p¥ŽžÿÌ£Bž'…â·¾ÛP!·ÅªÁÍÓ—ÛÂ$íÉñCé|õÞ4÷mêéãkHê%ø|ÎAI"ÕÍD¿B?Uà”,ÌM§ËçϦñ/еB¬ :ìcƒ÷HüÈ´dÞów¨‹ÍKYTê}9P ·bòØÖA4…0]ŸyãÞ;i!´ʠżs*¢][yÈ®|`÷5Qß?;‘®`åܽû±Iå÷ác…½1QOŸln¥û€ù-ÆêÊÊ*:šn9Ç–YC.—yDýͳ([Ñ^Œã;¾ëoËíiÚ¶Ib—Ó7=ß1¾Á³Ü­`Õñ{À® ïâöÃwLCðlúÑÆ^ËQãMF;Á¹ay¸'—RÑÎèã1Ç&á"ÏÀŸdüOñÓB…BNv• 2(Ó0äòçÅ@Wu+m/?L+‡©¹1ŸfpÌ=69ŸÅÕ΋I8|ËkŸ§Íµi²þ^š¹°Èü¨¦]8ïʨ»Í¹à°7˜‡8æãi¿Ša ®_¦`_ÄQŒãKoœ8Ê1½wx,”Ÿ¿J¿j'ë~ÔýW©Þ¿ºŒÜo£_à4b1±ˆÇ-GM–ãâG•kúq€±Üð8 2½{/Máüw¼‡8eo“ŒÑƒh¸ƒD¥Ÿ0Ä¢‹E›DÇÃmz$b`‰P¾‡Q…÷*ˆx²õ+àHâÓÁw4‘I^p¤P‘dâç/wˆž@ ÂÛ@”B9 ^¼í!5“0-§³Š™È{›òéNcÜÛ$ÞÇá$m÷Þä?o)ú¤°ðô°°í¶Ùubym/-ßüMlÜLðæL:‹?2õó&¦ÙHÀr<Ç@]³àW‚A1*ˆÔÆSéÝ7ΧÞ^Oºã¹/öG·è¯Ë€Í8> ×kêø²C€Æ³àÝ>ò™ùÈQªAÝQã²ÜZzÀøÌ¼MKŸf»ëø0\ßbü̦%Æéá¼ÍXš¦Ùër‹‘WÏM§[pE?e¬Þ%ïMö ˤs³gry,CC”±òü8E÷ÅûÑVž½'€³½dÑåôým>‹yá»êÀ}üñÇY4­ÛűŠ`=Œë‘ßg~èÒÆ9 ZÊé1ùM]˜“5o»ŒË] kÜkÏGʰÌ3Œ–xµ¨ö£Šæ×½¤\ã3gÒw¾ûaÚžî^¿–>þôjzîÚÅ·ÇSuS EZˆ£ÏÍc\Â6}÷¯~7œuâÛ‘!Æmb¸4`kd߈òÈ™|8mñáƒÝ-.Wã…ýsÔø´¿ì·£žUã•ãú;­£"¿b÷Êõ>\µ×¥ ×ûi®GîiZëŒë$‰‰rx!9Mu¸¬wX«î,¥ÚêµÔ~ðEÚX¿‘vwÖÒšúm 5”¤XÜX˜Í· èËM]âIxÊ  ?1ƒˆ–-—Øi|bŠc†ý;u9pdK¤"° Ï3 g¬@SÎbe–šùÙdÏ)z­ ºÔN¢X(W mcé ZW™#ƒ‡œabOp1$„¾~dP¢ßøôúpÛ¶p´úà^ÚÚÞIwn¦õÄ·ûÒï¿1ž>|‹}gÇ)—.TŸæR=g.F@ÚD DÀ¸Vï¥o]Y¤&Ò½ÚùÇœmf ’ì'Cî?îgpN›жµ @!Àò0ØÇÆ•‹”9¼k€Ë–™¹}rôcÿd.ÓÔä~&ó±LÇsçæÓýåU€¼åmâ"d+½uêïžÒÎ*iðÙs÷‹Ý•tÜÚæ^Ú_ÝIç§gÎf©¸éz¢®÷+Ç…hãXoÛÍàûÖW°k°ÌÑž^ûžÁxº1_«;í§³Ý |Þéd÷½÷ÞË¢zÁCèÒåxŽ1Û7ÔpVjÊSÇ‚ûB·~*Û¹)Ú·šà7·{cæàn¥(o”Ç2åM(‹åé`Ñ;uæ|š8{)Ï£×?Mw¬§në~zó] ?êŠB›éüo“n7ݹöiºyûnú~%›öÁV¸Œ»ìòtd+•-¸†”¹O?Jô²Û"úúë¸è_ë[në—¥þ£r>Ÿ¸çÓ\]XâxÚ…¡X”Ž/êUµ+x»—zKŸ¤ýû¿Iõ;ÜC7QEŸ¦â^›Ø)àJú Œ`Î[»‡‡ºn¢=6ƒwsø½‡…Ë®"¼¢±q¶à’ã ·&Í]Ì„«¨£¢™[aâróø“Ë!çAΘ®921½)jE¨•¶ëèüðõ/ѨÂuLeT9k'8:Ù¬í€+ŠöîFÞWs—¼WÑ!ÛÇRâÊâXúðËéòü”£y^pë:;ZøRîç$Ø€Á®í£ž^§·•æÆ§ÒwÞXä÷B ‚ǃÄÉ£ 'S«UCŒ+AˆÏ ·Æ(ƒ–#Æñ=Fg>ûžýé!(“ãzš X1}Ëgz¾[ïÓXÔ.#Ýè Ðͺ :¿ŽÂý»S3©Jè¾-aý1ã››|t Öo¦3³ùÃaÿˆ¦gðæïÈ£h‘¶‰ IDAT8ïâ]ŸZFËmèµ\8·ÆŠ{?ÚTP—9’ô‘q¬Ÿ Ïwµ²½uëV>ûû{ßû^ö}gÚι‰g¿ºu›hF.+"Óã~}W01À‰¶CÝcÞàúÇùZƒkg|ËåÉõ¦Ïúô¿¿«L’}Æñ\¶ù·ÞÄ=Ë }öù'éîëé2~ø&Ø&oŸ½•[ÔûÂÛïÀ]Eô«”‡i ÝöƒŠ» €QÿˆyMö“¶º¤I=Ô8Ø.‡ûÌ~Êmã¼:!ø~Œ«ÃéÄõ I¼ÔËíw¸"Ö?ÆÝág£ë¢Fî5 G-GÝ{š&i@üš|Åïãð··‚uDbŒ/r¶!rßÓ” %\Ud.âJÁ6|€*‰}a½(êÁ ²F.‚,Óñð]C,Ìú#~ n<|/îåÈÇü1¿¾ãµï{ö&ªiáÒ…´¼´–VÙþíF³“þu­žÞ?;ŸZ3gQ⯥_­.¥OÑϺ»Æ½Ùt‘ý€Ç{›8[>J²œ~äý¤s¹.¶K´ LœîI¬s¸%‰´­‹¿­Oôyx‡3û´­V½¿ú{â>øàƒtéâIÚ:?8Êêbæ¸oM ‰f°¼æ˜„Óš5ИyK¹Üf€TÖH5¯!×4ê—q¾åàÈàž=tèq­1üð]º˜Î²åÞë7Ù;y5Í–ë¨"t7uÀê…7ßNÖVÓÒý»ôË%˜sZ×2fˆ£#ïqDîrþÆ«b¹]|"Dî/æÙ~Šýçù´cØx‡ãFÿGº¯òù¨º–ÛôU®û³Ömàžµ_±÷/$'UOÃw˜‡‘töŽSkˆLnI4/­Y܆ ¬hS|ª4ÝHTձɦö~aÃ!L©{2ªœ­Y5P¨²ðkE'¨ë៫ÃÖ_{»€]·×N÷ï­¥Î,œ-×P¸n@An"Ï òÚÇ=ä´ÉJs IòHpì w3ÎC|Þu!hüÒõ(G“üÜø\nı<2W=¤ÚÜX°e“[gÞüìJúÍßýÊÜ€ˆ·„7áRd¯]X©êmà°ú³Û÷Óöû]ÙÝKÓ­ù´¸°ˆ@q#m1¾f‡:”¦å9*ŸŸxÙ.Q^żÖAŽ™éFˆ<a‚±¸6 ïä´Y&9rnö‹_ü"ƒ¹>ú(½ûî»y\v7±^… ª>g’1æÒ iŽy0Í¡1sÐ ¡ôF¿WàHäÆ ËåÙüòA9¾ àð¸V»ŽG£‚fdúl bm¬ËÙ‹ëöÓ Õ(c^ø}ÆV. @+ãZë®H©ŠûÅ@7îÿ"}çÛß,áVLŒ³¹:bÄ6O)^òpÛ[[¢>IÍÖ÷q'6…ãX5«Rú/ôéÖÕ›éãÏ~–>úÖÅT™€€A´ÆMX Hòë®^ÇÅE/Í-¾™ßê ’m`™h[uƒº¹?´0„«/…ÈUc jnwìn³3>µÜÓS·)ZÃfÀLßP«É–fêŽf³ˆlHçâ1]Â}òal7Jpïîö‘}ëøõ[•t~n=½}élÚi/.Úéì8*þÈaˆ²Î'žÇ9ÊgËè»aÜa<ë轩Ö8ÖÙ‘£ PëÒ™ñË3ëß·>ŒÍ"¿›Ê÷ ö,F5õ†¬SÄòKKÒüO?Mwî?Hßÿþ÷ÙÃø,†ô[g À¶›æ›ÝìD»¹¿“]¨Ô»¤Å8aôÖWä ÒËMLfÒ´—É‹:èÇ][´bu]°~㑸Ú K„Ý­4ËtŸá½ÕÞmø^ªïÞ·]Á(ëÅ•©‰twë!–Ø||­Ã©‡C½ÏÝ*ãå "Øñí•4Óm¤É·àX#Ú}ƒ}ë©g×%9Îþ6ʉ*Ęð~~W•ú=Öhï9õ¦á¶o¾G9=#òÙ4ŒãQž+Ɖ²”ã?éw¤Ïã]¹»ñ;Îdzsü¸àXŠ /Í"Ýý´—Öàð¼µ›²c=Hµ˜[º}@ÔHSgRç²py†ŠsYÙ³s]V,ÄéÊסn¾î¢Ÿ)½ NŒ‚/ÛÎEP¤6ƒm¹Ùá±t—°úë£ïTe‡‹ÉÉ ÊýĪå.üˆŠ+P|´þzxºË<&,ó°ßË\¸Ããåt)>«ÎØÐU<¦ÔÒW!+ énîÀÁ½w€X"Ú^˜žåƒ£Šå4ñޓմXe·ÖÇ|Ê+ësɺEý¢nr(v~Py/ß9LpÊ:šßñÐÀbÛtîݹ›÷KýòÖôÃÿIº´0“.N5Òzœ±*/<vˆ+Yæñ!³+;µº~ éC‘‡ÙOg]ýhq±#e3øw‚<Û;›ù#b ç¼÷Ó "ëï|ôƒüž#Öô겦á¸Õ4@"!ý0Vx€®Ûò5Ø>Ï-÷*|Mã@{ƒçÀË¢¯O[æÆw½çoúÐáyy\”Óv7C¤ñâºH'Ç =WŽ"nÄ;iŒ F 5ÖÄÃ`Ì´õÅéÙçòï(GŽpÄŸ(Q΢ÎÍ{Ø©åtÁ ×7¡Y×¼g]"¯—õürÍŽ—µ•Ÿc¹Ë“ÊbÄÄ=|ÿ¤"úž_KŠ:À9Hš:[ãëYïãZ0öù2Ï_îpÃø®d²ÎJ}!&sœ¹‘E;•e¸x9ˆÛ†Ô5¢X'(CNÍ òê ÅÓÎ@ÒèLz1†ùä髯=ºò÷î¥iİ:#Þƒ³5 !‘Cçž°'… ©g¯½•:èN!BmM»Ô¤›§_yûJú—ÿ¯‘–pMÑULÍÎ…å²a¡»½¶’ö gÛÍÁý« XŽ!ñX°!wöüÍÊž”–·—ýbAaF~èÒ¸ù}ãâ&ÓÈ/úÜt6D]esc]¯µµ‡iêìŽaͱUÔwp`maÍC¬“‡!ƒ,>*âžã^=8ïy-À‹ø§ÉVÑ«Ž¢åJlcEÛ(5J³3ÓéÌì >µ7R]'1Ìp_„1¸âxâcœ9¨#N·ë|„9Æä²uôkèÜ8© :Ž“î<áœcqäwyŸ—º›pŸáNÌ`QÊÛƒó÷py…fKçæÎgޱs³§¯÷sÀ|Û`'†ÔöN1G*|‘vŸù¡ƒet$RoŠyWo£'ûišâ¹Æ‰>sÛq}R¡b­*Ç‹wO·n_¥™,Å2^¬—Þs¼üñâì½2@ó:ŽÈW1üq¡†Z~‡l´È÷·!—®aå^”éQ_åuŽQÖ'åá;6ОæâX+~ŸßÅPôcÿQ»›Î+úpà^ÑŽj9bÅä‹gqöy<‹³Ïò{ÃgN˜¸¿]¦à¹UVCn”–k™¾ûµ§hÓúQY•©…˜.ÒÍ?†¢Ìn5¿=[¾ÌjwÕðÀJ’ZXas›EÆÉÎ-À¦å‰G¼ç´·üò Ö±í@8Æ'åA M  T ðïq®á³ÊE¨•ÞöÃTÛ?‡AöDËnë„Åãµ t„ºˆ%Ý¢Øß€cY‡û00ÛCW¨.–Fõ&u ½.@rcs%=¸öeš=;—/_Æ@öTÔ QíèÈõË«Xë¥+ï¾—jŠR]ᨓõWì&ˆ«£Ó×7]ë‚eïÃû·Óý¥»é<`N7-üÒàé QC˜ìRÛÆ¦ÏëªNX€K|øÌ>Í@¡>¡ ®>Úo#tÄ XÆ' 8¦ÕxE€6 ¯.Ü]ºì¡€¿M¥¦µ–¦]öáÈíœ3Œ€Æo+( =ÇX&öÔ]÷m‹çñû¸üë8Þcg†ýÅ‹Óþè‡éÃ?ÌÆ=Zv¶pÆ;Ž+›Ö®~ü°ão°§ÞcÅqE»ì#¶è[çÖQ^wùó,ÒÓWGèê™§àáÌeð jÕ˜zse3}ñéç©»·Xn¤ÿå—éüûo¥™ñÙÔ8·˜×†½ÛËimõ!+é³Ï>Kg»­ôÆ,N|áºUs|Q¥;7®¦û‰9ù&ýÓx±·Ò²ýË!SôëÌq!X9N¼«(õæÍ«yÍó^„qí³8ì—øísËïÆýÃçHç¨sHã›n¤ñòØCRnƒˆ"ìF&Þøê9â.S\+iŸÀÖe,7E¨…—uÚ¾Ô._MýÕ¿3p¯~?VC'F'ÀáÉÏN{ž®AnŸU7`TþGü¤®Ugw)çáBâ!¨ˆß9o=½—B¹<ÞFˆŸÆÂà"’¹7'Lp³ô§+‚¼žòG»‹ƒÛpêmý‡‡-1h[½?mÁ•‡c™¢Qlª«F™ ksµÙ½)D¨´…† ”I¥É)8;sgÒí¥›éVŽ Ù‚=&÷Uö™ÆÙ/~³à’ÉNZj(BÚCOéî­klIöv‚2çvËI¸l»›ëéþ­›È°pD§®Ú›ÎŵzÔaß[,½™hÛ»[k0LqAÝÆÑ “‘w\hÂ5‘“*L³oàYåè¶g °N|¦`š:íµþꀩÔ/W`?zŽ“g ذd®e…ä|²)'CàeÛ~Bù¿ƒ˜y‡<Û3³ŒvAÄWý¸?å:€‹1îÙaŒ Á¶]ãÈωs\˜À‡Ý»e˜Ï÷¾ûÝôoþÍ•þäO~Œ1ÁŒ#ʯ¥´„á\¯.l¸á¤b\sÐî–©­ãi¸`M8qµ1@iíAÐï¬^OÀî¢Ñ ÚS1Ý;oàN„·îÞN[oã®?p.¸™JZ]ºÍ˜ÛMçñϧ~ç'ÿúó´…¸zšžæô"ý¾•ܹšóo°ñFÚ}Á­˜ƒ}f°}ì·¼öœbüÚŽ߉4<›NvÇœ×qï¨P~×çq¢ùò½òû®ÇÇ9§‡C¤]Ü/êq|f³¯¾q=GZžãˆ6‰ëE< 8~cŠ\òTø 3ü¥^Nð5û=p¯x‡EbÒUõx EÖ©*)r“Š7YG\dv&»pž<™v:ˆQP\—³Q+•†›¥›žñËÎü«Ù¹ïã%‰¼óÝáó˜Ìž¸Nro4gÓy¬Þä<Ô˜àêÌ™\ãpu¸ñ \OŸ;€ãÝÕå{ˆÐGš>Kâ&ð‹€Röñ[ùhÚQ¼êöTý² õ&cò…ÃÃßYž¿p9ýüúgi §ƒ‹ÓYï§×ÇŨ §B-Ê€SQµ3=ÕW£f‘) êŠt«(=³ÚCèÖáR­§¹…7 ãÞµÝÜ,\í*:€.õ] ¹ò¼K]Ú7ŒŸ™š0’–Ž –Κ-9$64i…/c¹ruóþI,³â<ûÌþ çýÇÆÁI =áyW]pà"ÚžƒÞ^ê¶á`n¡—XCïÍýlÝ[tëf(._ÌûøÖÇ=EÏϬWŒW9‹Xg SÔ¯×:ôà´Öø¶…så+cöPY㛌¥o¿óvúwÿî¿Iö§?n?Ái„ø×\K[÷n¥ÞÆ cªÇ#«dˆ‰×V\I>r̪p„ûøÂ»uózz°tPÇÖZì´ GN¿‹a1›çÕ°¶÷¦Þ&Ü¿í]œT·pËx!-LÌñ=×M³Óò½Û€¶•týêUŒŸøàÃäÛÙ3õòÛì{Ê\¾  [¹•–V×ÒÞƒíÔ† xa áo¿Úlö PÁ:Tëë2aúË`[Æu¿ÃûO*q!‡Úç¾›=ó×:?rò„æ~ãÙr~ñxx®g?{_Ã9./f½ÇHàˆ³ÇÆ#¢ŒKú3žEš>‹çúö|–°·ßÁÕÎlNºÜ7×*Èÿ¯ÖìYr{ùÞ¸—¯ÏžªÄ1©|©<±'rÜ3㚎\-¼f0‡$6Ù&ª³ŽLö¨Î&Õèuuu8Mˆ¥bÕ1©ã:Ÿ]˜år–¯UžöYågþÞhô²Q ï¤ú:¹Œr±ŠòÕb‹…ÔÐcx=svÙlÚ`¿Ò5vz8e¢Ö| +¸q.k&Ç„.n&M60#¬h¡‰ÿ7Ý%@µ30kVp®º@«¦;²ûwjéÂÀçyñ†0ª‹¥ß¸Œ‡à`øÏ ôàl QLéÑò;d ®K pqg©‚Í,ÓæenJ,ëÜ–äÖ€ë´ qî¢ã4ÃQcS©·WJÚ1A{Ó쯂¯ì”ÿ¹m9 yqǼ|ŠGŽ!9ö¯ tˆ½ïQ&P§Hî+QêlÖ£_z”¿ƒk šþÒ¯»•[Λy÷á@yý ÷Ð=ƒë õ•äžú†i;î­‡Ü.û(s[I)$êxöìÙ,î4ñ\.@ÀQ„ý¨Ì}î)û§ú§é'üã Þú7ëœÇâú¬C±8e Õ± –«böí¡qÁ¸ú˜€ùöœ߸†Nè]ö£o¦ÅùóiöÝws¹3—òSh'À¿pÚ<Î\iŽ6Æj›ýdX˜º;ƒS³çÒðòEü7"VÝé÷VÛgp+’Æf²›žï¸˜º+óY|»Ý`ë-Þ=7†±ÅüŴ⇠í%±¶Ù߆¸>©è1¾Ëïù®×Ž…l<2?¦ñüm<ãq¡(GшQ¦""aqI¢ÀœûÃÂøÎ=_7½"OÙ- çºÛÚ¢®%Ò³ó $.þÖs€é¾'˜Ëke¼üž_½_ÃyݪìD‰‰ý¤º'&” ŽþÚ Þë²Ñþæ*Î:Q†62x ïöÓŒ ¾¸÷'sú¾çôðw‘n-Ô{¦• ÿD~ƒ¡'öƒkò4ÄõÆÖ>„b.‹¡ÜcUTQ(Û&ýdîJW¤Z~—ßÖ»×m…ï‡wï¤Í‡+éüâ$€ËtÇÚèBàêZÎÎ2aƒâ÷ luPŽ¢Æ®b;Î-ÄC¬aïß_NŸÕq2rž-žàòÔØV«'¬XØÅm…t±†#â)O±›À& 9O}ÄÛØ–üVBŒwëåoƒuõPL6ËŽ—/_ÎÀî!útó™qOjƒKï¿ÿnúáÈ8ZvÆmÈÎ>=,Da½æ<5ÈðqQg:N*ŒÕq¹Ì€µîÆZºqý::’÷ÓöÛï¼›êÃgÎäêò7©Eú=DÎŽiö/f šççÒ<÷÷á¶$舦ónLÒÖ½Ô˜]@¼K™§Ïç­»êÛlq†l~Ì)´^¦ð´ãÖ~~RÈàŒùZ€ØáœsRGàÕ¬ÛׇΦíǽ—ûë §H‚sŒÇC¯\j4c1—•4óàÝb,Hбl9sÞ>·¸(:.4NNgY#ˆæc[X×ÈÈ/LjºDä×ì<p/}‡ß…]o'iY !rRÔä ºp 7e‘:lîšï³8½˜5òbXW*°Ë›RohᇀÒi^ÆÑ«üÌö[ jZgWøÞ‹ —äO\[®½!ÇLN™÷#Ä q°¼qïFÜ18W*Eø%¨h¨XpÈ£!Ü@ç R ƒ‹ÍðF¿:‡Ùif}3Ý~ˆØèê¯Ò{¿÷ûˆ‹°úÜQoh® ‹åîš_€´_‚úÍj°Yï¯Ys7 ERè·á®¢ø3é¥=´ÞÌ…´Ve¯MĘË7o¤Í[Ÿ§ùó—Ó,:rspÁÚX±únßcŠ£&c¤ï6dÍÙ‹ä€4ººÙßBÜË>³¸-iž»ªgæ u(é˜Õc²ŒU)ç^£Èõ6fã”0ýåòM¼»uÓôE¸vãü¬£<þvÚÁ` Veg91Œ‰6ÊîôF6ÎØÆÁqàAÛÚĽ¾¼hÚ*º1YÏïQ— [ôéNæD¤Í=65™¦àˆ¶é÷I¸9}Êò,¡ƒCÞ(µ‹~{ðŒH¦A_º›ö Îݰ8¶èÇa›ö×?òY²Îï:ïi ³å¬³"Õ-ôÞtc²øÆ¥4>¤û›^HÏ8Š.¥år–À­ézO?Œ~ï[éÝo]cÌpcŒÞÒê—©µz]>ú•ŽËó%×ÇyB²ò"`g-w0,X¾}#‹L¿û‡?b|ÌåqèÖ½4^¶¯Ç\d 0õŒZ‘he6ç¨K`YÃ’zPA¯ u“ •™'Iœ)á€Á七 |KÒñ\S^Ò›è-ãÃn¡xÎî“¿ãÚÄzÃ9Í­o4X×Xsê]º—ËB?ØWöGjXvèŸX£,`¤S.¬÷|ÏÃߎAß‹ûY„J“ñv^kr9† §øWNñÐo–å7UIlçbXsÅÝ#ÏÅû¾íš7ŒâûÈ*ÞGqöyNè ƒx’÷=ªWÇë­[02X¸Ï˜Ïm wRÉëóëާþ¯sËŒê~ª»ünšxŒ×Ðéâë;Bi<¡1o'ZŠLÂ1$†.<…3ÐÈ“2fë#n`Öù 5EwgôÁ¬6~q=€ {;{’gb‹.sV|¹jÀ€}ܱõpñ<;¥hçt b¶ö`5Ýø‚}ß®§ñ™y‘mæ>éd–ÊdC‰œ ™ha[ظocÐÛÅÂ@®zŠ$Ø.0ž]˜WàŽÜØN#FšÜ_gŸÔÏR}ŸîÎ 8€²*Üø˜ iZgßHþ캈»lÆÎª [WMólùt8Ѱý݇ë¡^Þú²Ü›ÇßY "Ú¹q7­âRäúÎ5ê1H3ógà ^T £hÔÚK]<¹W΢δmnúåÃ…:æzss…û¹l}j_ØNŠë<!=ëò,Q5x¢ª˜Ö¶‘@ÊË„Ñþ¤}< Þó™ïÖöù]U9aðg¸Éø)´‡ž\ƒ ãkc˜Ï>ûW 3éýï}ÀÄeü*Çñc¨“ÞÑ6qíÙvbÀs„9)‡ö0?úê:–ˆÓW“æmä6ø1hlÇZ¤~$ð»Æ}lµy^f6 ÖðE åñs¸|¹†7£Ë÷Ç7N€ÁÃÏF×£ˆ¸h‰×à ÇQU-/&åßGÅ-ßÛœ¾È—òj¶Â±Ã¥ÀÀƒÅ·†çö,r+hb±ØÇËÓ!&$ä‡,tËÑW¦¢l‹e"¿Êu^ë—âð‹9¿s2ЈŽaz:sþBz ŽÀí[_¦µåU,"ï§Å‹p$ñÍf*æW€+#(åı†› ·jà‹m ´ê™ÅT±½Tæ IDATÀƒ?o¹¯jö"­Äs½ý:Þæåaé7O®ÚîÝ´ö É÷ò—·Ò™>œúêO¯/­NBœqv3rwcèoâŽdeL’É3€ÃêFÛÄÙ{»X´*„-£JûpYoýæ‹´òº@z·‡uâ$bX8ŽPQ:evuáиãC‡¾¤‹2€¿&IàÊ ±çž-¨À/0äRnŠ +J,l|¿~‚´`Ð> @fyÏgJËàsó·Áùú9ošéšO”ü"˜·yÅ=Ÿ€Ö=RÕëüå/yðLÐf°Æ/êÖLï¼óN¾o>Mûã-»»ˆOO n7×Í–¸—/^Ic—.ó>âND›ÍVÊ”ÏPSå$°hœNÁ™?üŒs;:ßÔ°†>]?Ô¸/ÁÑíÐÄÀ}f¹KÎîìPËmÅ@OðFÃåôŒåÐ,50aÃSqñœþFÛØþåk.+•Ï#/ޏçÙ{1&Ë÷G¿G-p¸Fîp‹¼b×±¨”ލb,4åkï7â>ßï óÖcp–WᆠuO®›b=ˆ Ìœ¼«CcºyÁ’A´\Üì•ù)ž1ä8<3ìc…×:ßñš—òÑ€¥®èTÂ! q -CÀ£ð¤ xtGNúdsøã˜˜<ËvDˤƒ®B½¨œœ‚"5¦ DKŽA—£ ˆ›_L-ˆm¦dTxmc/ÝÀ×Úõ«Ÿ¦6NMïp Pâî£tw§›ÐUšƒHMSvLp:Ø/¶åÛ·Óú–sˆÛä®XÄ-fs®ܘ œÄ{þì"Œ¬ýŽ© íÚÀO_³Ö§]8q]D¢›y“gçϦK¸!Á!\?s*@ŽÐWw ©¨¼ÍNºò-ò+îáÿ$ªQÕüöÓý±/å*Y§O•ur›¡iGð˜Ÿy ÒÊâI ¦œ9£ Ò2dñŸ%Dþ¦i~æã½Ì=#aóØ™Ÿ÷­‚7uâ<Œwó&.hp6m9v×ø DõãZ”(9ï:poQ D¹ñ+æ8‡ÿ¨×væÜùô€}×l0Œ‹ÒE´ÝÞß$¯‚ƒs×÷óü&$gM°•çš?êʃöÓj•OøœlZ/€cPM#ÈoÙgî·´’ô}ÊîróX=Æ©æ1FzöðçÈ9ýŸ­k†5x¶S¬]¦âïòõq)Û†å#Þ‹¶õ:>6ŽKgôìõn€{Åûÿ¤EÅçå…$~Ÿ¶YÚXù¡±Å1™÷e¬»} 1 ®¢.9l.¼y%vÅ倨è(×ÐÅ2-ò,JþMûE[.aŒÅÃϽö]ÇÀ(ŒZุãZçxvxQ9®J.‡“ãâû¬Âþ‹ó¾´[|=Ï¢s5à‹‰$à ·!î•*0óÀ}€å„ùué±ò›Û‹• VÜ÷·„l@èÙ£\—ø­ºó™ÎÅÔÂõAbœÍ® †¼¥TþuÌüW †*pG$*9ÄI¦a m"¬Ëÿ!<?sßÚø˜Øæ·Ö©[èéuà¶àÀÕQú®#"½8?ÇéXÖµßÈu²H ÜV¸ÃÃì8âìÍ¿•*cÙJë^êoáK¯ çÄÝH£Šõ^×€t÷h§íö]ö´d»-ˆòéL±kD•Íà M#êJ9¥rÅâ_Ô×6êR¿u\g B³3øß‚3²¹I›ÂÑ_šêRSm_‘gÎÞNšAÔŠPPžÑ1Ñ}Lf@J¬ÍN®\ÁH=¦¤î›âÁO?ý4ýæ7¿É@Np"WÎq"Àx– —Ëv°]C‚'¡zvÞ7âOÆñ0ßx'â|Ý2D:«p@­ŸnB4Rð°,Ž7 ¹ùúÛ¼ýí=¥»,¨ ÷Þ{ïårZÖ7np_\½–®\´Lõ7`k¶ ú§¨á1¥Ïœpò£MDEºSéa$sçÆõtžêñ5žV¾ÄÚr/+©K¬å6Äá5Án æ%ñŠ#—?ò?¶pA,ñõˆ¯×½ZVÜnâ¯J–é‰e7åIô ý3]K °Ì¬#ÚtÅ”šÛs)<-ˆ‡‡ß>„é ¡%©k¸W-— ÂÓè²0Ûn©…ñB¿6Í3öF…˜VˆÛÃ­Ëæ~5m ðl?{)ÍM]JÜ{ÔÖ²›÷ÓîÆÊçëdï~©½4ÍfäsèÙíÉÁ \n.?‰u`“£ß„'ç.þrF›égo[.!ÜÐiD¦u|kÕ!¬­Ä Ú%Ÿì ™:õIÛ½B%®«½fzØÁ ™`æí {…FÈ|‘|ó™þüô§?MwïÞM<ÈK¦Î±P6<.&~ÚÌl›/1¾äŠ7.“cÒç‚&ûò·4’ŒÚ7Z”ªÏ&(X¾ù曹1þ£Íß²_ðf;8Þ/]º”¹…‚O¹qKKK蘶Ò_|‘~ò£?`8¾pá!€ÃŸ]š?]¸€{ru»U@Ïté¦ù —Ò»ø¼{°Én çæ/¼kù qöwæÀñ7×AÇØôc’0›HóƒÍ Õ*|d½Ê<~œ–Å›ª! =@\Oõ ”á´–ºéB!¾ÙäçápYžâÑ q¶ ÊmS.Ô“ÖÔ£ælÄ}RZåtG¿_ï¸W¤ÿcÒGu¼ö0y–<^h$b.ŸùÛ ÉqóÕ“ÿàú‰E¢(äž–‹Û4û‚½µO!ÈlH½ ’8 Û¥Ÿ2’eõÆÒ½-tÌ6€ €—DuÂ-ñŽC®Hí–ßu*_÷aYÎÌAØeá·ž®î€7 ÿN­<¬"7"ó>@+ƒ ;Ɔ?],¨€  Öì¢3¶>˜JKý¼¤Œ!ú„ðç}&©j ]®œ?ñÕqEÙa]µîœÖ*D|£þ0¥ù©´;û]À߸ KÑ~˜v×  k×Ó "ÍVs!TkË÷Ó,ÀíÂü;”…xôôìKÓ ×ÑbÂÔ£Ë@¤Áô¾õij®ßOuÜ„àò?‹ÉÆ}½í•ÔÆ¥IÓíÎÔ Çµ N臟¼¥Ī[XøöŸ¶a«KE§ýmfhÛÖÅøòÒ1cˆþñZð"X‘³*0 Κþδ°¼wëv~Ç…(çAC÷vЇ"L)Ú~Æ`ž¶QŒkÇŠÁö*‡<†xV®Ãihéû¢œÜÁï¼sÆpNyÓ¾rN^¿~=ëú}—ýKÝI¡ÜN¶•åu´÷qGC¿v¶1xà÷ü?Jç.f÷é/þ6ýçÿüÿ¦þñŸ¥ßÿö•TÛÛI½;p{™ç;8v†Þ!?Û¡:Ñ’xn?xärÙ"8ÂĦMô@/^:—VÕß¼}/M¿½‘&¦fQ•dP›ñØ,ÿîeÌGÊ*z ÷P£Xíác¼`§ùÆ.Ž{ }ÂGí^2§ˆ}u¬œ`É+GÎðˆ[Œ±ˆöMŸ£ÜŽFæ6\¼7Û¾ÚLJ`ËîqÚê•bÞ žåÖ€ËàgãËù¡Mn“¾©c¹?À z“tìw³h²u0 ÉûK3ïbÝ3 ß/e?+ 1çòEéú4c8Þ_¾¸—¯Ï¾V‰Ÿ4‘cq(ŸÍàð‚ð¤LÕAqcá` Ã¾ÚÅU¢Ò½Õ}¼»#ÆÁA Öšl¦Y¸A-Ürh8P‡óUWq~¨#'‰<óYBË¡•Úcá`ñ,îvÙs1ˆ¯ñs0DûTk`'ñyÇÕÓiuà"Ê hÉÚc±ÜEçÇpÇØÛQ©Ïªxê’3DzŽh–éH‚ ñÖš3øRýVšz¿mD™+›©Ýü €º—¶ÇØy¢>É{Dî®"¢ÿ,í‘Û6èâd¶¡{" i;¸—pÏš\C‰ñ¼ÀšÆ ÛÝVÖYZ£n[ˆ´v žø.°=m¢ðÑg;õ!‘wôaäï˜ó™ E€b¸sçNúä“O2€‘Õ ¯r`[H|-j9s¶ÍÏþótåÊ•îZp£-cÞÆ÷ÚßZ¨fݽF'}vóËôþ“¾uî¿KSgçRõ>|+ô$Ç#d’Á[¡ªŸÅŽ}¨ïBçÞ¢ŽÓ3sYÜ«èwlÝA\ãdŽ6åîÚböº:§plëXQ3Ov˜÷¼€ßÆﻕW.q_ŠîD’ë$‡m8×5Ô‰ú=i ¨;û|ÃÉëˆmküàŒaëå}ÏñÛzØþÛÚç‚ôÜ7ù.€ô‘cÄ{ŠËÛ€êrˆ÷<›§{ÇŽÂëÛ#÷Š÷}, V3~{ŽkÖ‰\0∧XXNXÀà&)ð5™¿¼'gÙ:ç-vÖi þÛ„»°-*ë,8U¿ÜùÒÄÅ?ÒUÁ _ÿÊ$£”ËNw ó¯êð,Âðþ£K¸OÁUxt3~êÜCÜ“ƒ:^êjY'X3ìS¾‰šœE¼uDŸãéÜ·Mt|:ÈŠk'l“9æO{ŸÅð; Mt×±ЪWàJNœd¡ûÆ ]@qsz#ÍÌͤÙÁJ›Ãz4›©–Ú¦”G,ònëuãömôç:é-\DL³¹8ˆŽû6:qˆUÙi¢>v¢· ‹áu娒oWÑÕØÒcT›Ý 1fÿ6/Ÿqòמå®×éŸÿùŸ³ѾÔ àÔ¼ÊÁ¶ˆy%Á-·‹¿rZÞj«ƒÜ8 ·D<ƒ<>Œ'6þ< ŠW?úÑ¥:3×®}‘þæ¯ÿ:ýÛp=»‚‰®> áæ¸µ\žcÎ-ËaèÁÝ ¨O©²ó®‡ÑK ¥k‘›·ïø1ʳ4¦ˆ“|³{v[‘¯¼»Å®#s|Ô4Óò®»ªPFÔ)ryY6ð=øé¯¯£sÉÇÜ;ÇI9X–Ã÷ÊÏ_„ßÖå¸ ŽŸÁx‚/çµëP}½ç³¨·}Zý^Ü0¾ïú,s^i/EäÓ“…Óióˆ4cÎy~ÞðÖrÂók!õz~åüͶ€‹C§ÍÉ…Â…$‡V·ÌÊb$D=¿æ±*Ÿ8ÇfØS(%³èLàGëFÅ{Š)åùß½Kw«š_æ¿=?¾äEŠ¿>?Ô“ r]îâËnn [³K 6o¾žÝ¢§5æ ÖqKliµ×l€SÓíÁ3†®:KT²& ƒØtÛ¨„àp²ª&ç³€9|¶£œ-Ùžˆ]„µÓ,€Åˆ~Žv‘hŽ×{i6Z€ÚÑoö¿%çPU…ëÒœOÛ`³×H[è½íR¯¾à â€7,k NÁcD£Ôîêgå~"¾ÀÀxž½gyZNª³åîs ”ñÔñú{Æf|a_bmdA­»Á{¶IéâÅ‹™+'‡mw§p@ì;‚²Ã‚8û÷íw¾•&çÒÄÏ~•î|y3Ý8»Ÿ¾½ÀG.A:ô«ã+äØg†¼à›?ó[ËߥÛ7Ò÷~ÿû©Â¼õ»EH´Jáäͧ©3ólÛv?™›Oã³g2x#S žA¡‚Àöô5,2D§î±*ÐS<»³¡õíÜÏŽ‹gŠÁßÑùÆ øÇþ9.ȶÑ—ÆßÞˆ—ïYçX[}îöqÞ+Ï™»~à¸]U¤çÙw<|Ç´¬£ðú¶ÀÀ½¦}ïb`p!ð(‡¸Îç°}¬Ùj T¸D|ëvB¦¾öSžwö¢ë¥ŸbHÀQeù::" ³øÕͲ3h*Ê‹U.ÏãÅÊ„CâñXgËåÎu‹x‡êöØ»\Ôàði]Iâ?Ê:9[Š·Û«Ã¡j¦¥Á™´T= ÈÁº :6€Øy–ÐjâfD·+pÛêè×UÁncTE¿M"[Ñ¡*Ö­ºøHZäâÀDN ÚkEárÛ=êGÛÀúK$äà´7WØ×³žæQ|¯¡ËT§zlð~i-ý®Íÿð¿þxâ¯".Å*n#­AÚDÆêûM ê–¸<2×bæuñò¥ƒû>œ 2üm¹I¿øÅ/تé³_¢ä}‰x¤q\ûçeÛ¨§÷±1JÅ|fûäÂéÞDѲ÷m;uÝl+›ïñüÿ꟦Mô¯t:]A÷tËV i:ˆÉëMvôÀ ™ÄòX"#Ñc¾v|·qú›·³Âò¹Âüm¢›©Ä þâe¬À÷ Ž »3tö Î^—+ÆÝC}áÓûè~·ç½Çsõ\umSC-@ÝGý N±ËG¸j±ž¶u¶.p¼Tˆö:êÙïâže<.P•Ç‚å=\f¯íOCظçó'îbLìaMì³(G¤!ȳ}G"ÔÇšÿµ»¸×®Ë ¢aµ] ´¨Œ‹ƒ×±èij'ž:ê1€ŽßÀf.¦ ¸Õ1@[a¬{´YüÀ­n±Q:¢¹Ú•´‡í_®Þ‡#v/ýâWŸ¥þäcv†À‚Gð“Ó¡Sà«èÑ‹šÁaìô n™%À›#¯þùψqļ ®ð³&á‘€y_KP7Ž•ƒ„7Ú*ÎÖ×>Šg¶…m+˜‘£yÿþýLœ5ôØXglÐ÷ræ<üí»¶£Ç8z¥+›ìw€k™wæ&Òµ†…qQ¨ó0 ?sŠÈW®·"Õ#¹Ÿ|2?d:®=¬m\WÞÿ u7—ÑcCdÏŽc“ºöè§k÷—ÓøÛL?ý‡Ÿ¥Æ›?Jïï'þçY¢»·ÏÖtêuáäŽïÎÖvNkŒ‘Ö±OÀÚ|8—Ž 8P/t@Tl°o:Û¯Ñg¶yÄ1~¾fžÇo¯û|8åø$çøpÞ8—¢¿r×Þ·ÿGáõn€{ú?/Ãú–oyG\£{šlðÝR?¢Mn•‹‹n3tA±„%ÜHg–…CÊ4‰ÞØ8zp- 4h´u#"mø…ê"çá‚è1\ óï£J’ÍC}ýÐBï»§ ™ˆ@ÊPàv+0·‚¤‘e%ÝïNàšØ¢âRƒçcx¨PQx”·ñ‘Az–0€xö!˜…± 5ù÷µÚ¥ü.þ»ˆPU5jM€0 N –îjùè7ÏA,<˵Ù#ín¶Ò¯ÿö“ô·—Ó?||-­°ÿꜙÑ'àÁÔ—7÷£„ZÓ£ˆÂЋçwwÏ@æþö¥ÍKP&`ô™Á³÷s XÑ•‹ç¡¸­ƒÛñú³q0£l/ê9Úþ1D_Q–ÛN>³ ºUùøãq R=ÛN®›qqv 6?8Öðõ·…E£€®ÁA ¬‘Í Þ5ËT£ßŽmöKÝݦ&ä¼Áåx5óÖn½´|g)=4V›ûi‡o®/¹þüÚµô9–ßß~n²E\õª ;éÿès¹ÔmuLÊÚG¿± ÷wrjœ-ê0ø+×Ñ›yï(ÑZÚº†Ív\”çûŒ–û8æc*žÙîåg1è¦Ü—Æ>wŒ/÷=BŒ¯Â#-óúžŸ=¯o»¼r5wq8¼0'”ˆçx~øÝ¸žél7Ø74+¼Á¥A麆ò4Žþ3 «O^„“´žÕî ¶ðÕIã97ÝÖËÅ¿ü{P’t5‹/rsæÈàΟþ®œ?}îÅ.×.Ìöã"xl‚·.º;:Å'}jÓ.¸n:«}Ðg/G€“~ªš€­Ü2Ûf× »5<êwÙwò ¿5©JDi䣡D—|º”½Î}cºcÔC—ªžF4"e¬ ƒH¸÷HL}'¨úéÇ÷l›é6û³^ÝÜAÏ Š~¢¢ßÊý– ZS| ˆóݼÇ+ý¨<{Âã¹Ä#‚mĨ Öw"OãÄï 8ÁÜË$qÀd ÷(ÙHþ•>;&ãˆvòì=ÛÆß‚çÝ"˜_-ƒ"U±ÄÛÃÐÆÂsã–u܇h(Ô‚ó½8Uã »¬×¶Æ;y–†€Qw;¦Õ`æ@té— "ÔýôO÷³ôïÿýÿ”þÐ?1{P‡?ºÝnZÙØÌ"÷ÛÍM]ú[®î òÝÈœCû·/¹6njºèWº»ƒ'ºÍñÌ0fž»?oá˱«ãè“B1ÍOŠõÜžWùuœÇ}²Ý£¿=—ƒqcÝò}amv>>#JG¬Ç»1c·ÄÖ£ðú¶ÀÀ½ì}Ïâh€Äæ…~Ÿ­œX3²RüíÛ_¦õ‡«™(ÄÄÅ$ª­NR Ѫ³€tÙðœÁE£ʳˆN|'/0¥sΓëÍfñlÙY'ú\ƒ F¸ï®,ärŒúøÛóàÅõ¼p±xZ•[è~aUWÙE|¨Î Ö‘ÔF]¬ñSS2ª öXåŒQ \®„•¦Ag´¹â¦M¹òsã`Q)QÉ)ú2DÃß|Ãf‚7ØŸÃÐb2mÁ­Xų76Ÿvºµ´±+G ¥~E8¤Ã,R1*€gСn³ºNZ¾À½ŸeÊí­SR‰±&´Ï‚SCŸN±”Ž„ŸTضÑA®_›|{lI4×_KÓ½\µìZÓG|2E¾ˆ¬[í`ñ;5÷££È ïÜ[éú¯7ÒßÜK¸ƒhC`÷S¸„ ]‰8yi 1P‘yÍ\·|Áypêä~¶Ìå` ù/ÒP,–CqÉ3tœÐ‰RLºÛÜJˆƒÇk‚û>œEÇ™Dë› ö‡mo{{ð‘:®“þ6Ø?†¸6îázçOñ'øÄ·}JmDÕm#ݲØ'>‘·OŸî¬#Gmܲiüc ~§ÓÆÃgo—-ú¥Cû6©gŸ~[Ûìra1m-ßA÷l+ Zyêo]kŒ±î= {¾*ÏöÑ±ÚÆ€¥ŠyÌ–Ê«w—Òÿü¿üMúë¿û<ýfù ¶ÉÅw ®óáÇ{þÚéb¯:N©ùÜH½­U¸u×ÓìwßÇ`¢ö÷pÄÌÞ¾îÎPw›.ŒUü(©a,¡çush. IDAT¯álØ”Kôrþé«2 Åy|<+]x4uŠ9ñûˆ«c8 '³Ž8ö-Á”Š­ë­¿Žgç^æ–ÇgyM÷y~—6…W¿Fî%ïc ŒØYDÕI,ñQä¢'ãxÏ£ˆû¨Òšªq PáÓXêc…ÿ.¯MG¢‡×}8ågñeè³"BYÙkˆ¿—á"5I¤;˜i²…0 }ˆ'õªðšËœÅŠE^¬ÉyÊu.…ö¥ç ˆCǶhuÃ]"ª¢Ø¼Ó‚Ü5  ë>„sc=²˜š ¸_m”¿÷XWuRZØqK,’Ñ~ÖÃÃ`óÇsï‡ÐŽíNѲ]%lÍñüÙOön>ZˆeÅ£¢µ4M%Œ5‰ yh•jq_ Óx%òÌÝ ¾ïÔvŠa×Ꭸ7å=¹]†2ˆôþ7l£ 8‚ÇN´÷£ ¿Érʰ¾æéÙü#¹\öSÄñÞï¢l‘Ÿy,“ Rm¹O Ãú·ÃØÚ¡>ÜËé Çg´wÔ;Úù:Ž~[£5•®ß}˜þþ—›þþïÿ!ýâ“«ˆcgRg@²¡ 쎕ǔe6D}gˆãuŸEœ¸7:Ÿ¾GÛóøÞ9}Ú£˜/g ŒÜËÙo¥ŽIíÚÑÅ[¤•Ù®&ŒÄ Qð¾ï(f1”Ÿßç¾Ôãσä8°r ½¼À˜Æð(ç÷êƒ=D*ìQ‰èçÌDýÇÒ…Ù±|žfw€.{ý1ÊßÈi4ZN¡_°õésYÁŸJÀ-~áz [Þú %³nG_upÕ?û\÷ˆ³ÍN}R ÕæØP¶]-õäR²,k¹ìþÎ ’YÇÇ¢ äú^]\‚bÑ{Ll·un¨ìíþ°± sŽß¡h¾Gúr[¡@u¾È©ôul9iVzÖÃò \ümúr°Ì«;ŽH”½@×àL¬Â [ßßHë;I¬Q¦‰y e$ÑVr2òª¹:@Ï´Î Ý^˜¾×‘W\„’òPçG^ã­¬`Óƒ\Ü:l óvãÞÒH‹²Û6^ÿ.‚í$øQz\Þ·-~ÁºF½m'Ë"èÀù\¥ÜAC”+úø›.£e³L–ÃvrÞ·ò¤¼iÆ š½§}ÆÁÃ5€`Nîñu fAN׺sþöpì^úöûé—ÿIºù`-má@zjá⻌Å>¢× T ñò“Êa™j¤¬‹Áò—?¼Ïüm8|]Üý-·€mdÞÏí÷ÕG‡£Ž®_ḗ¼sc"ÇB_ÀJ‹gŠ »(xßE¶¼@˜^G-ß×õµN|ܤßôøÒî[•ÓðwÄ\äk3#t¤BÞïbeUqoTSî×Éî³sÀ* Óê`]߸‹l-Ý:\“S­49ƆîèðÌa=g°Ü^‰‰DPŽmðùƒÛO NÆm 4)oBI“¬‰¸ÒÇKÈfqiÑä\žbïHËwöƒß#èQàJᘠ“ѳq¢O,›ÇW%î(§çÜž¶ ·}Ï —{dŸ¹E?@l¹®Ò5dU@J­}¬ZL]óâJ®G²È|Ò˜iy+Á»÷š¦yE[YÖƒ.ç¯!€KéþÃ5 ZöàTå4÷·Ï.¿÷te_mcŒÁU ]04`¸TgÜi$³_RÒ?ªZMj œÌˆc_Û®ãpØ­Käç(×p(Æk£ó)ZÀ¶‹ãñ•é/¢¼R-0p/ywÆDvaôðºƒåŸ „þI!âÇóX\#-Ïýnû‚ØÈu*ˆ\ñV/ð.Ðó÷)ÖÙ1‚Ï,SQ.#ƒ©P¢®Bô1–Ї(VÛ e·u¸gpð`#Ê듞ïôG»x×±->h3î"ïŒnˆîvQbdƒ ¥ùëF¡—â£?úaúð»¤÷Þ~ÌtÈÉx `]“ƇËg®§÷ÇóN‡cPtÑ\uÕZÓãé GzÃ}Gµ,ÄÛì{Ë뀸ÂJÕ~Ëå´žÖe <æv9…Õ!ùؾÔ5Cbê­ž^®+²“VI‚~ÿá \86‹Ÿ½˜û&Úý }rRôþZƒ¸S´k\=íÙ>±@IðV6xÚ4Ÿ6¾u.—AmÛ[6¹¯‚ “Îr×g¿‹`Ù ¶M”Ëü=,—síØÀXÈjr1ÀY¢ß×7·q-uÝaú¦}yæ:bäóæ…3é;oœK·Þ¤]6àV37WÓ-¸xO^>r±ðgó·ý ¦iúÖÇ£§ÜºDÞÆ‰ßžGÍl¶/eˆö´ð¶Wïçþ‹£ókÙ_¥N¯e3¼•.Ä‚Ó!—¡˜ärhŠ“Þx.ªuN‰•àªXƋŭ³ü²I dˆgž[ˆ1={øžiïO0ù¸Õ÷Ë ú†”ªëß‚hhFÏÒ_XŠlš¸)É"H«Ap«Ì«‡®"§ã€r½¬Š Ðàý4Ül~Ô;|0T׫< b||2ýäOÿ$]œ?›­<ø·¨dk@*þ°Ì²§ßµaý"ÍÈÏë*Ö®åÁ¤ù|OÏxå =žœD <¡;™tfáRÚÜÞÊûR®mn T^Xó©g;Õg5(µµB"Q.ÚØöÈ®G´j°íA‡r %è[8WÝA¯pjJw EZTûG®“eó÷7çç¸tLÄýo:ÿb,ãÓ¼ÌÛ϶¯m㵀γ»CØ6¾g;úû› ‘¾í¡èÔr *í#Ûê¤PŒEç> °øif¨c3æB·ºÄÜ3]ߥâéÜüøo¥Ÿ}~'[.7¦s‰Ux1–ŸT—ÛɲršÃ{ÖÉ|ãðyù·×£0jQ |ýxœº|ýt¾ö›ya9æíXމòÚ=Š6ñÜgg¯A}I€jí¸ÃBÞr‚.)“¢ GÐîbiŽ>W×%ùÑ-a]ѾÜ{t»xSNÂÈ"!‰¡ô¾âãEnF)цLª² fÁqÐ@¡¦ÒÚw-D‘V.œ;‰‡"9ÏA”-§×«jMð…QGS#îol¬¥wÞy+ýÕ_ýUæºd"X¬"%:gæÄNÀ؃;èu&îA0-Hbq1ü[n?“~ÖŒg(G°Mø(i Ù4\XœJk›ëpPdËÑm<äï¡_×"ï©1Eá´õ.V’p'q÷K2¤ ‡oánY´ýMîrúBºöùrúÅ/¯bÉË>šlljÝ#‘±cÔ³•aÙ,WO%P—ç&¾ðr;Ò–ÖÃ66ž ÃcNå"ó*¸n1·½6XÓp—Ûyqq1÷M9Mß  Y9¯ñ§‚uó:Æ r×'ïÝK÷.çüÕsÎØ·–Q—;† l=¦žž Î±ã3Ëey –=îåÇü‰º—ÛÈ÷ å{Š×µö™õ·,WÄ}Rút¬Î8ìí§©Ù¹ôÅýµôýã'é{ÿý›º×~Éø°ë;pS8z âÖ°âVÏDÚUŒ”ÖVÓG|~üÁÍtçÿþ'>Z§@†~ªÂ‹`y qöw×!MëÐv™-À.]º”Å©¡_3Ï)} úUÌ]‡ƒMY‘{< Ƕ€R ÛÛñã¥ËôPŠP_Ç&4zøJ¶À#ŠòJVïõ¨”“Ø#^Àסö!³Î.pÑ‹÷%ÂH‰â_þå_¦¿ø‹¿Èñƒ@–ÂHÃö‹w£-gÚñ,8&ñÜô<¢,–Ë2 dÌu›Ÿ¢.÷ŸT¼8‡bùƒ•‡Ygn‚ÍÆm8*=,Š!|jÕåá–ÂVqù­377Ç¡ŠÄYBtº´¾•Ö¢µB²•_‰6)Ÿõ¾oþ–Ǻz¶ŽÖ¡8˵+ˆ¶ñ䏯sÁø1ïÑVåçÆ =4ëlž‡ÛͼÊïN÷i®n–C·:Zžš—Áó#ËáâÚr Ü¢MÊuŠºø,îÇù´å)Çô,Säù´õv|ùŽcËà^¦w°>^ůۙœîê59‹òÝ»—ÑÃ8Ê£×ÁXÂ(ÆÑâ™ôÃ?ø0ýÓg·ÓgKøìŽÁ÷³©øÀ2mËn™Ëu ¥|m9¢ >66~å÷ü]¾6ýQ8] ŒÚîtíô:Äzîn4‰Ÿm˜¹8ñ â+W!ͳ¥þâ¿íø Λ@Ék I,r‚¯ÕÑ™™™I?øÁÒG}t@ô"®ç N¶]›–@EB鵿#”Á™ïÇÃw쟛vü¶<åP‡KšÅ®ÄQlÚÄsïüÜ|äffÙ€EûMÄSxÙ¯¸l`$‰+„W'ýêÐÕ‡.ÿ7Ö×Ò8\ì0›šó i²ñLÆX±<ÖÃ2ÍÍÍf0¥¬øÖ8–Ù#:€¡Ïl?ß±nr§Â’Tðaˆº{6ĘŒ¶°="øÌ1ªâ»à*À£ýíä{–óYƒiØ_3|èj™¾yy6Äx±®=ë.×®,Æ4~Ô/ÞÉ/ŸðÇw<¢ âÚ³u¶\Š=clXfŸ™ßIÁ¸öUN­ñ1;JŸß¸~ù›kéÏòý4xpîz  œZþ`<£ï·ðsHwõ±ÐnδÒpÿøëkéÖü‡ÔÕHc|â±úþÿì½Yœ×uçyrϬ}ÃU\À$AJWQ”(Y–¼Éó0á—vG´Ãáˆ~êÇ$«²° –<À­ïûî~ÏÝþyî½ç’/ƒç‹j%]øä¼â›¶Q&çñJ˜¼µÇåîÝç hNþîm5ú^éWî¯û¼u8ð™¸[‡ÕW§¤>ÐÓ©Ó,9•ȯyPïðW'åë#VÊÍ ¼LˆßvÃÃÃöôÓOÛã?¾lÏ’KWÄÁÄŽ?&R&TŸà# ƒð@ÞÙ'å{¥Cxò€ñ‰ ПC¢±?>éË®M‰DÔž¾û¤~$¯}x‰y©A‘j‡64§tª—[’,Íj~ϱd ˜ˆS Ö7ÐoÏ~ù‹¶ã‰/[aãíZ‚.Æ𦦦–Á̾½ï†öâÒ)üPvÿ°¤}tH)/e‚W¸Í/̃HyZ„储 êÀÁnØaðã¼&]¤pBxçq¸¿öÉ¿•ÔE?H‹<Ð'\úF½äOÒƒÈþÈuãÏ—û%îKÍa=ÚŸ¸Ãç’À¨ñH}HÖŽ>o¿Þ÷¡}nÏCœOVÛÐr[³¢«³Ô'Ôhêªß´(¤tâT§tM–Ä´ÅiµG¼ËÞØÈ>>§%yÅ™nñ…tɯçÇùæOøF»áÛû~)OÏ¿‡Ûuß?Év>ñÝn÷ÉP]›[]wƒ×r5Ñ¡,+’ 0Y1ˆ®œª¼Á Ù!ûLÆ>98`BÃÀì6lØ`=ö˜=øàƒa’O‡·ÞzË~ñ‹_„‰š Æ…Ü„´`|"e’=yòdØ¿Àcâ…ÏìãBRÃÞŸ;ï¼Ó¶o߉oêœ01Cä…z!-â Ô5IR†´@XCvr jUròÓ»60QÉ+·&wt„C(û“° ÅÄ™lÁ¶ï¼Ó6õl”&ý‹.B Ñvüƒî?ö¦;vÌ>üðÃ`¸fíðá#¡œH˦§§BøôhßåÈȰÍÏEŠ”‰Ü'êƒòQ.¯O;p„€&>xäuæî^¯!Àeþ!Nê‚üó$Ä»üÔAˆüb¨*õM=‘/ìñOž1Þæ.&Ëé(ÿøãí7¿ù½ûî»väÈ;£Íê€ØÉÉI©8‰ö—‡ÊF;0Q^ŸxüéõE^ð†G&ücáïJÛ1qP?ò?öY.§ú’*wÀ9  +¼¡lÖýñ¼Ôüy‰H~=>Ò%>/7öë~àutYíCßu-{tzÚþù—oÛž;¾byý(i–fÔžTù~Ö€“´NµZ™C©RÈmÚk¹uã˜Ý¶}‹Õ^z[вù-…Æóáù"¯¼Ãòîüu0G9pû>–hñ‡ý‚ë/ÿò/@2Çþ;¤t€9¤{ÄTI„¡/ ó娲vÚ¤ x@úìtk€îm†IQ´-üVȇ,–R҇׻ɚ™+${%KÙ@^u‹¼Ÿµ—±Gûœœ\M K¸ìÍà ™»ï¾]Á˜ý/’Õì½÷Þ³×_Ý>øàÛ÷ÞÁ Íì0qS€1Òq@Ç»—ÏóáiòMXÜGFF‚T2j·qPàþ/õ ÐDÊGÞÜy#íxÞ°'mé˜ï…cùØ¥±ñüÇßC Uþx|î—'e¸±”M¹ãy€ÐÅ–›øï(òhJq[¶gÀfµôýò›ïÙ³÷m±Ï?z—€[κJ.œ—ôÛ;Ê*cB=- ®Æ^¸~ÝJ"ÐZ“d2£ÛQºwòr„ØìC;–eÃŒ×?Þ½ü¼f­øpïÒê€gÎcž]®Î§[Éö3p·³¯VY™ :5ÿÅþW+?×2^&e2Ÿ4|€0=õÔSv÷Ýw7$=Hx˜0‘ø¸¤‡I;$"ùFêâq‘†»ÅËß™èñëïÉϽRË€ùæ7¿¤L/¿ü²ýã?þ£}ç;ß±Ï}îsA*ðëÕ>·x\Â#`V•a∧%}K÷IMˆN£ÖæÙ˜üE I·œ•^»1Ý»ý¸[¾cå+‚"¾'M9TûÐÊlDÊ#TÑMð %I ß$!ô(oþKŸ}}С™e¥2â‘G †ðós• yüéO–¤‘H’oxÁ øä¼ä ùwÀ õÇ’2¼ˆ»‡+øÃ²0@Œ:òz"mÊL>ãy‹ç™zt)á|Ù;ž7ü{ß[+‹”ãåÅe%nÚ!RYÜ=mÚ™·eçÅZqcïqã·" mUí§ Ilu¾jGNœ±_ù¥MܾÁvŒjaYR6U Uƒ¤®¬ýp}¼ìUGUIè’RG”–^š†Tú",ç›ü“–“¿ó„žÜ)‹÷¾ÛÃb×¥Ëçüìòôòùw3…¼êÎ;:Ló†Ç»wzuõ`Ïàíƒ+ï„mH yØøû,Km„ŸÕˆøK·¤®Å {¹êHD”W™å{B5Ûd—4Iêj­%ÍE©É`"í Hk‰ Ýwj ºv«i#CÃA îÜ̬ݷën{ák_µMÚ—1)²„ööÛo/K= >±ã†4„6‰0¤-ÞþHµH‡ÄÐNqgRÇ?m5NÞv#ð©æÀß³Ï>kÏ?ÿ|ÈÇ~ô#û«¿ú«p(âw÷wÃ2/é2 sóaI}týª×FßVKjO[sfÒšÒWÕ Á¦ô¯e5ÑÎ÷o—þ¯Aݸ «:¥Ê ÀCM` õ$Ëmheþ ñ“לÑÑ–ÐuŸ ÒÆ-¨ØÐÕ]^¦š¤q*ðõö¦”µgžù\˜¸õ«_Ù÷¿ÿýÀkö ¦ë6¥üt `I`Wõ[hLg{tmS-–ç$’~>Åufê¼Utgll,ðvAu”c¯–¨½_aG¾›è³  A›õÙ÷I~gg§ 0©µ`ë—”÷²&ó¤œ)å#©SCysœGŠ—úrâ  a Wy8ÁÎû û]íé¼$ Þis_6& q‘gˆº‡œÏá£ÃŸ2}@å_|) Ž]4$}ãKRK§ß}e¿6MØ}ãYÛªǵ¹óWºž-ß#ý‚–¨p"Yõ¯gAëÙ©svxßkR4­%ðú”n)\PNoKïÅÕeE`´ ûTy¯ $.I!5ïYõnbièà ?:’ú‘¡0¼µ@ÏhüľKks€öámˆöBå{©n툺.7®:€[ksû†$ ˆ5ýü£Þ9QW×`G­£^\Ä;–AÊ/ö\Á„´üŒ À>ÐàÞÔ¯SO›'Ê% ÇÃ]”ÄäñódÐ]Ž£5)*¦å82Ú?âñEi0kò¦b(~”-:¹?Ÿ°çÔ˜“»óíïä¡ùRø!^ò»?½;6iwŠç³r«J¡(›÷*Ò“öò$5'åXÂÑÀ?Ó“°‚@<òn(麭šÊUÏIû»”Û£f4QLK nSmåQÝiúüs_²á­›ƒ’c À“S§N…½[LœT ا¯‘ˆðdrgI üHíhHqØßÆ>7öFè8´@abç„*KO~ÂÁ|OƸÿáþ¡}õ«_ i|ûÛßé>ðÀöä“O†åU—^ç”ÿ¾Õrh®G’8IÜ0Ù)õ—š7÷…ûcKó V’î·†ÚqåŽ q)´goäCþ–û‹ÊÏoüÝv\h“q?”‘ø‰ï‰'žðöꫯÚ~ð3Ûwä Ÿ>g5]ñ40¶)l–_ÐŽÙ’6Ö¢|©#õC¹áOõ‚»—t¼.-•e ¯ø³?¥Ó²–]‚—À¹„3‹&åD:´?­ ˆƒaÌj 'ò7øåÿ´â!´Éõúv‡l-;7äi.;´^*ºÌþå_ÿÆú4Ì|ó©Gt›Û¥uÃBàl:… pøKK¿:ãöüØ|xRRà”ÔÎ3jcð”ü{ýSNˆgÿ€–ëåF½>|8ð†þ‚?tÖÊW+{ÝÇepÀùA»An2\çƒ ÏŸÛ1ˆñ«“ƒO2|kZXÃ@âЀ 8 ~Í­_+Ä…IÒkz‡Øîn|¸1’üjÄg0­0øsj@F®‘MXÞj9â]¿»Ãñzš-çß«ë IDATð ÜˆÞiµð’“,翪_½L6/eï¯ãg³‘U>Uço\wÕ¦*©O] F“h,fÅ»´ØÐ§ýW)UXNÒ“²¤'™BÆJ:Í.i³¾Ú̓»î±§>÷–4 š–$`´_Ò)M¢÷ÜsO0Ÿ+G´™ÿ´´ú¿òÊ+ð&&&ìöÛo'S}ó;KdÔ‡ê ÀüÙŸý™íß¿?¸cÏtø“Õ~Th®XC²¶4¿hïžø(.¨Î³%¼Eݾ± ú‡Mép´áš$̤OÜ"òƒ4‘å[&Xö ÂMHãä ‰~JN>©Sâi#\–¿ðømïþ½öOÿó'öOÿã': Y ò™ášÜÖ+â%Ÿ€Ú9ïä5Ã}ž*ßÞÿ=Q¿E*2(KÒ77Ýh€>ž–R[ò‡ôC9É+ã@8¥í‘­ñ¤ÌŒO¾Ç<8ˆƒo”Ÿü9ù{¼¯É u‹ôøˆ7ÎO©OOÇŸ„¿7S=öö#¶¸0o½ù‚ýγ!» z~Újês©œêoh£úKÝÞú…ßOƒÖЧop@M¡nGÎío~ô’žš³>¿íÚ6¤Ê’&öö ü×ìø‰y{ñ÷íŸ^ßo³ÚU’×á–”–óS…h… Ô±–¨YF“ó”ô ÊF{£|Ô¡—3¦û~y âÆçˆË‹­êfàÀUpñFÖþNçž‘n)&?Z p>àŸË¿òxúÀÀ‚»»Ã7ö ÖN|c Vµñ÷‚¸ùE*éÎj~ãÇã@>ö»û;O/ï«QBGþ¡xî;Êw‹¿ã/–˜¢ò8€Ã>Ê¿âåã:¦lSåST“ì…dó|ÙúëÖ½ÕÍž)• )Ýv¦ý醖Ô$m‘ÔsJ~Ïkù4Ÿ³m÷ßi»ÿ‚õh3Àu¹Õ5)ñà_X|ò„Ô··¯·%o<™ˆ ´#^Vùƒß;wÃýª#ÔnìÝ»×þþïÿÞPa‚ºÛn»-,‘zû%€…§ãIð"¾ôsϤT9 9_½€=èªt³{vIEÉîû¬gù>ÉhàìÄo –{i3ÞÞ'$%tb‚…Œ¸¾ÇÇÇm×®]¡L€öè‘oú'ù†œ7ÄMi'&_²}´GïÙi›FúltÇmvòÌ”½õîöÆ;ïë.ÞymIxÓÊAeqZÊ~£1ØÛmúõý [¶l @;óð~A<Ýð/3öbI—:p Î/Þá-&nß!x×é&ç@âŸ_zóªv!šwæ8/ì°?úÑ~û裖µ10Ç'ƒŒ–: o°<Ý`_Ó€í„ÇéO܉wMâÅø Š}.Û^·#¬Ü°ps;âôwì=~übòŽZÏ;a¡øwKËÎíãå#N§¸»‡Éê.LöB¡ àôé“öáÁýVÒ$•ɰ ]þBíúx¦t6{ÙªBÂIIÙFT–¥ªÝV,Û˜tTM”Ét!·¶ôk¢&ÀªÐ‹noª¸.ôlúß´;Ûm¶uÄŠ’Ô©ö´¿§b¾À>ÐÒäy]Ô ð ”:ñöå“,œ ž‘È ¡áÉ„hضm[ðÏä„=OÂ·× uÃÀJ› ˆø‰÷»ßý®q 0…´ ¥Âè§c‚Ç/þMibO¤‡}5]pG§0W›ÃŠ^ì=YT;`/‚Ÿxˆˆ|zþÜ®ýI~Ÿ€P”“WÀËÃH]úˆ?Ê ˆ|rñ>LZ¨"™›9bßûé±÷Ÿþ£MŸLئÒ&m¶ï±rž%ÞbGxò…ñvåh¹~x_ôüã5'Å¢öt)è-+•–‚”qzz2ð-…²Z{j!T´4å7¯zD óÈЖ`¿Öò@:ž'z^½=x›À¾ÐÞðùøáeÇ÷øÖJ={i Ôó¨¦ûjÓÒ˜(cïhiiQ?n¥j¦)`²Eñ}“ñÕ!ƒýºmD?ªÁ½R=RTY¨_@C;vI¦8ºÜÈå¦-SW¨ËÁ/äù‰ç3âÇÊ‘à±ûçзá™7H—ùÑG£ÍqóÎÍLem Ù±][Sî¼Û²:ôĵœÖ«kï|’[DtˆíV¦•ŸÍW‘ 4Àxöw’̪2tþ0NR6ùÖ$1(ëïðÞšåS³Tk²ÊfVÔ=¿À¹’(>Pà•ÃZÚ«»œ©þ4kç>a‡†|’:ŠÐØcÜ.£ý7øÃŽ|»ñðY-kᾚ!p«¹c'â„âöM`å±!¿H“èØîñàÂ8âñ]ï5IÕÔ­ :V]ïÔFê»$µ™„Œ–·ˆà´Nª“ƒHZÖÑ cÙíš|ï»ÓFßc6"iŠŠ)h®‡@¹&œBomزÙö|þs¡˜^_$&ç®áþ18bÇ>7$wœ%,ËŒH¢˜øY2B2EZ€=â£~ˆ¾3axÿƒ?øƒ`D€9NÃþþïÿ~Ê.‘1Ù#iòÉÞû€IB)dÊP’߆¤q´gÂa_Ñé]ÀI²&>Ò5d:˜Ñä›ÕéKNRfò‰ñ6äuï`‘o€D¾÷ìÙÌÿñ‡ü¾øâ‹A‘/`Žåa–[·ä“öG~H^aG\¡]6ÑwvH ý¤ Ý¥š.HzvPz†%îR46À§¨½FíÛë‡ø ò‰q?þD/ªMH›=pÔPyÔa‰¬ê£¤ƒB’ÚµúNˆ¬ŸÇáv«=ñã†Hz>ÚŸí£‚²ØPÃóR„¾òm‘œ•çHúív«= ÂÊ1ž?êŒ2B¸Sßî~K¾œ„£oz¿%,~±Çï•P¼ž<O‡ïRYíPªUØjØÀUnu¿©À­ÊŽ¿|NÀMòí¾ülÒÆ6n°[·‰]OoPB~É'yö1†wÂgtŸ*¼‡¼\¼ÇyÅw;yM—.ðÝÍ%ëz½I9nÔV®r‰—Ñ;Xuê¨Oo<ÞA¹•¥ªÉƒïŒ°©˜‰HŸak <.â#®tRÊ;¥ñ»–Ð P’‰F]-uI÷É%À  ‡N´"an•¡…ü<–º¤:Ë$‰ÿœˆ ›Ó…®š¤6›î< ¤‘ÄÒ$ÀØPJhaúLô²Æ_xÏàcÜ`‡a²gò€ç ¤yҕɤµ¼¶FÜ׃õÈ|ÅF% ¸]’ÄÛÅ›mØg[EKÂM-gVuâ4­ $¿¤ëž´¼¾u“ ~õ³'S3xÕ¿¤$·•´€›WµØ ¼Qv@ÌZD{†÷ð,=úè£Á Å¡?ùÉOìç?ÿyÆrØ G”|B#¼·{&ýñññ°Ì@ÃI‘úà DºP.ê'ssgíô©£6yþ\8EºsÛÖ'N”â"ˆvÂ2û¯5”}¦\@ÂHþPtÌÓõÞ!•$.Êéy%œà•òÇòdtÃ×=óÌSö–ê¹6lòÄö­ßù—Ú ¯ ýü€è«›´¹éþˆ† «ŽtÔŠýIû°qÜ=Ò_7§zªŒK‘lÆÊ =YµcÐŒÆê«®z/K*[âR30˜êr¾xŸÀ¾¡KÚù‘µ(ýx ³’F kÙ4¥x*úQ€‚btÜá×Ãñ”HÕJ[Ü!¡XZ„óôýéyñüðÝ>ÎÑ~ ;þÝ`ú³€ý^ó½¿qs ˆ=áùvÍEêFúU÷l› Ü¼«Ø!¾¦x…öL~ԗeëØ6o³!ŸúUÄŠüS×\¦ U¢þQ+.«JB§^þ«20.òcbµ«¸ˆˆ&޹ՉzìD é mhÒHP¡¬?¦±Uƒp,?wß)îÁ þ`¼ßð¤ÄëñíF(Û§‘Çt2œâZiÎ(q(,Õ€8èga0“÷ðÍ/.¤F :‘äŒ õøóÁ,jl³y«W„ι´âÊ@ì“¶,õyùÓë€gÜïJ,×Ï[EཤåšcçËE•ô(3У½7ZæúîÉöo…þ´Ýu¯–íöèNÓÏ=`%I—4WXN“ XœÀÀà(âm$Ù$¹{&G€æÌðDÒ‰ÁwoÃ>¡‘†·UxJxT“pMÄ>NN ¾"µ"Hã°çÚ,öŒy8&`&W¾y'¤p¤EÚqi˜×ea  Å²-áH{5" qcÈÃZŸ¸ßp÷ÒK/°Gú,‹²Ï 0ÇÏ“%µ¬$3NðÚu×.ûó?ÿs›>Ô²£ÚϦß_IÕSJ¦¦ë˜x™œˆ;jGgÞ²âÜ[8­å͓˗uÂ5¥ýTÞÓ)ÕŸ—”0? Ø)œê‰"¯u&/•ÇÁ¬Â··õTR{@Õ²Ùœ–¶·ˆ§YµéÈS}_D>(‡“¿#I¥>½N©CxŒ;a½Üî;ü¸éëÑݦò4Öíª^¨åAU 홺ïacéß\¥*¦ðÞÞé#Äãùv{Ïwû3Ê× 8•ØòäynÓý¾tPn.=t7ÄÍÊ´a ô2Þ`–‡uæ8Ñ)Ý`ÏD‰ï0°h,æ>¥__øc0èD>@áÇNþo4·õ±õHçIüwþz:þ¼Qø™"ÕYI â¹^;¤‰¨¦=\5-)6òº‚aAº¬Ø{µåÉ/XC‡f5ÙØVÒft-±£ƒeÍ÷ß?´7öcR˜QôÊ$Ÿ4ù¤0À1¹V˜ØQìpgY‰“`œÈ !á}bbÂþôOÿ4HLP`”ØjÿÜ /¼NŸr8¤c<‘¶‘Ú@6£¼~±§ äw7ñ|Äßq_È#íÂAeâT,ôå/9<:xÈò(þ91KžGG6…eߌ$e^fdÈ\vÏ…‘¡a™­®Ã9nÿd+¯úJhž›hW^/Œ¥øw>ÓF(íÖëÞ㢽àoqnQá#©{Ø ¨})Ý‹Û+‰(ík§N™z{ç›0’ˆ4§ž_üaÈÃÅP¼\¼{~/&ì­ìÇÛñZ<`vÞz­å·këq MGóMñ½Ay£É1x4`Ò¹!÷ϳª“KHàˆ‡_ÂÕÖÍ øsÿ¼¯E „½Ui=y}ÀŸ8ß_nçß<‰CØë·lqœ¯H•‡¤7 ]ï3«ëŽš-Y½/J[ÿ–¶ßu‡= û7wènQ튔PXҫŪI‹•VQÓA2ÅÒwŒôàÉZD†7øaÂ+°ÄxìØ±°Ì(Ú&)€K¢HÀüJ-ßÁ!þùfoØ3Ï<–-ÿú¯ÿ:¨¸ž´ñGúØ1iû7Ò÷20Q¨ˆ¿<™Ð!@&ñ‘_Ââ×'vòŒÈ“q·Ûi"-Ä@L$s\‹•Ïõ…“¨wÜ9!ÐwXv%͞ƆF]F³t†kÛŠaé4«ÓÀ¥ú´-`³ƒóöþÁíÔÔ‚UŽl´Ò)íéV]K¢šLÚPúœ–¾µÄ¬û\kÚgªÕt-‹¢‚C·MÔ´(P‘OÚ3y§M»)keæ4ªBZ!ß«6°Uà%I§üÀŒúN¼/¹]p¼Š¼ãéy>xê¨Çr_…¯”‹úp?Ô1õ¿áÆÛu¸yóÆðã‚!4œP½çѼû44&“LH/ßú©´ÌKgñcH+žwozÜq{ì(G—>=x½cT/´ù.ÝÊHüøç¯†VàF§„ÔxgöA”Ž nAJ<¸–†4r‹î3mïĸũ27cûöíµùéÒ„ÊÆ ÖÔæf-ÊĽޔï>P¯W8ç[û“ =â÷ʯ|â ƒ³ê ^^Ï€«kŸ véD¥–½ôc Wª]º~`a¦hî¹ÇÛý°ÀÅÝaS[UpK©˜ö[JZ#¿%ÝëØ.óòF“žnnСK%@ Ë›œ¾D:Å]©€8–D9}‰aó>R;'úÊ^ÝÎ'@žôêÊ ‹ºa‚ȵK§, ³Ï.:° þh"'néðNœà²<Æ“ ž´‰àÙ>q£o»ˆxÈÆÛÙÇGN wôØõñ>›¤ phhTUýùœ€ôûse+N/Ú&)Ò’hsî-žßg?›üö£}?±ÞæùàA›?œ³ÉÜ¢ÓIѳ’ž•?ÖዼöfIª*@XÕÒ’-«¶Ú «vÒi—(?m<¥pð–òW*%9Éñ”>õGMMžn”ÉûOÀíøø¸žÒI׊+¼´þ¸_çCÜíRÞÛÃ{¼þl0æµú)åàz ¼„åBzF[ñöâu¼çÁ‡‚ßyíÿ‹â$|ëGŽ%à<-Ÿ×1@ÙßI?¤á½}ü&ì…D>ý€—ŽChuÑ£ÛXÆ×®š.]JGm!ÚãJ=—¤&jWÌÕ×÷ø~EA+ú‡‘ñÛï RvÔˆ$´õ‚Ë\ƒÞt=:k$ÔÞÿÖðvÃZ§Oý(dÞ;®ê^":# {wóæLIóù.góöÆ ›Cg&ìÅ2ŽÁs«Òz|ZË:pwãß^?ÁÃuþg¾Q²œ–‘ª’¡£ ÍÏ‹RÑ—ì³Çï¹ßîyz·Ý¹y±™.Ü–´@î‘vxM0’ôäÂ}LQ!7€€ËÊÒãåI|)•{K8…ŠdŠƒ L¤ìKCBÇm ¼”UÔ ’.—€Q;òG]1ã—'Ò£Õˆ¾FYöíÛú‡ƒ/@#a(#‡yþI@àc&ü#iþÉI%A~x9Á3â!䙾¿sç6™oén̺küÔÞ|óÍ”žÿòs’v锫ÔQüêpÑþÏ×æìƒ™¬mߤ“Œ¹ŠõKÓÆÜ€íyÀæó[mÏ®§mσ»­wV€¯xØNýØJç–ìƒÃZö–ßý›ÔÞµŠ&§²ø×˜ãš§¦Ô€xûLøXAÞ"Óo€KP³"`IþÙÞÉËæß×êI~0Nž'ÊD9¿½\ü(ñ}j¼Sw"~D°ÜO½Ñ¾ê%úRÑŠ:™\¡I¢_ø!Ìÿ´$Ø?/¢ññáåRXH¼‘¤uLÜ;%öq†PxÃ@Ä„$/aàû[N`•:9ñx\õo&Z¯\,ŸàI»_¾Û€ûY/Ýë†Ç:eÊ)f._Oé—U3œxÌIר.{öÙ/Yv«¤g%–}]?ç‘ÒÎMÎÚá ÌXF§´hw€¤.Î'À v·Ý6&o»L†L|€̆ £A‚·š¤É”öé =a€ôÆo•üxfB*òãRA$(äƒzž ‘¼§§éyà ; ’8þäOþ$¤×þÇý¶ÛÇ¿=^@KÅä‰@" ò($ÿ€DxÑ~_* $k"û¬¾ò•¯„¥a~ý"ÕdÜb¢ß^;ºh¯Oë–…~;ð¤Tl$¶Ù@v£n_Øe -…7Žo¶÷TæqéèÝbv?mztdé¨%*‹¶xî„9~ÐŽm4ê„ ”¡Nh?´ ï×Ä~¨hëKRÐ @Rv$3ÔSY} "\oU¤Ú4NcÀ ?,© R#ŲæÍåwïÌî¦Õ4`òí¿ìXðtÖm  á¯õ¾»"0!Á_§öwx ¹}üÉûzü÷x?«§`Št¸©½$[wMîÙó˜=ÿüW%uÔÅZZj[Ài_\>Àû÷}h¯üôÚ‰ùóá *1˜äà’-ÊÍ;@ å¹LlHÀ2H®ð8Š&ÌhÉ©“'O€ à¦Ã#Ú9ýàƒAB÷‹_ü"œ>EGܽڧÇ^<¤r¤‹ž^LÂä•8âñSOØñ$ï¼ã×ëÏëÕë ·8yÿÃ?n„÷ø\šÈÁöæAìùãäì;ï¼€(tÔ!I¤üHèàÿžR´ ¾\-õ’ŒQŽ¿ßìÿ=Ò&‘°‡ezêŒ0ü(Ï„qðÊ;n´“œ4ÀÒPÑZ‘èQþÈ.—‹ã?Ê ö+eJŠ?žÏO÷¿âsý7/+>‰Kjýº>:rþBþìè¹ë8°¯h£72I¾²?(ÞÙB[‘…†Š ÊX¸©ð9ýLëàwT6% ©ëj*ÜŽ A\a%#º |;CZ*IhÃ1—uguª"ìc_…ds!¾ "¸Á>ÚË{©ÙgîDk¹_iºÒ¼7&L8´€ OòˆÚ¿mT¯jy±¯Ù£=oÛ—^ø’åÖÊåy-¯Jù¨öÄYºO–ô¯©¿mòaûÏìÖqIïlN­dŒÀna\ ÙÓÏ–®=!ÙhZ”„XqHí˜MΞ´ós‡íÝ_dgΜ Ò &J&R–§ü¶Àa;˜Cú„˜TE–;9 {àÀ„('`ÔóûŽB Ñ¿^§?xDœªäd-|#Ÿ„'¯î·=5á icGùiO>ùdp{ï½÷ÂÉY–H²€S–‡·í¸×†¤Ç-©5Þ’îÍWtX!?b¿>nö¿%uËYhuóê¬òÚÔx’Q^¯ IDATÇÑë˜D‰›ömÕÔ :l‘™Ñ©b-Óö Ù‚~öŠ#¹Ó6˜µæbÖ–dWP^³•¤ŒöÙö‰-J7Ú83sZJz뺸ӡdš²À›Pù¡úp‘–”š6¾Z< -R~ìo´lñ(x ïÔ„_‚áÞNnGúñ:sàÏ1uéÙ¤¾òùèª6¤j´xŒ”ml£U«m†rHÝ£[%ÚË·$P†d8tz2^ZËØ®uR¤nCC(´ŽN±¢2Œü¥T6ï{íù÷o/‡ûóŸnûÉgSy&o”‰öµTš   ý™ègd^g •ÕÙËMìêõÊ“ºpãö´ x H§Í†v"~¬ø»‰™£¢ÑÖ)+åNi\A÷*íŒiý„m³€œ_á#öG}E¯Î;¾j¿ÈÇ×µüøœ†;yˆ›xÒtŠ¿Çˇ;ß>†„w©IêD¢«U|zbÎ ¾ã﫹$+2é…ö€Q«œî§û¼18À8¡ž™p©kŸD™p8½85[³ÁÍáŽÐGöÜ'ð¦ýO &鈳­ôjØšTsù¤¡ºWGe4Ikr’]"!£Ù†)—¬Ý„à`Ï*š@ºŠK¿4Â2mAñlíÕ¾µ-í‘ûžδ9´øsÕ%S\É„>7ßïæËÞŸ ‘`q’“rR^@åÅŸûe2÷0n_t,sî×® H ‘:ñ¤S#Ad ã0Øcˆ‡ðž/—æÈ»ÇMÚž0ç•rbˆûõ×_R9¤sß¹W`cОxö+ÒÖ¯ÁDª[$ µµZýßÞÓEòsºÿRÊÛHrX燗~ȱý¬Ñ`ÖÕg ´}£!®*ËdN'×õY/Úí½MÓUsy…aI¶!éÝä¼ÒÓ]´ÒçvêÔIûáhGŽY>Ìï(3ü‰ž”e-" übàÇ@”‚Î ü@<½âßë 7ìÝo€3îð Ã;ahÛ<·l RYöòMÞ‘p’'–@‰‹U ¢t˜|y~ý‰Þ=O<ÉwÔF¢»y'¸ÅÉË·‹¿·û»]Ì;Ò>ÏRnþ/Êq¥q_Lú·ŠŸõêñVàƒ÷uõõ]]øÜˆƒÚùãߌyí„›»¯×FI³Ñ/Û)?î|¯•Žçcµtp«qudZÀ­Ö]+S«…YËŽŒ¯OHƒ9æÂñh­hºö×1hÄÞÐ}B¤Þ©ã’öè oÚ k¦tÉû»H -Ñe¬ Õ ›±rí ÕÞ—™‘tW'kj¶:¥Šúš”tX4%hjé¨Î±$®.kJ,‰pBÊLú“ÂKëʬt¿ Ÿ&rˆ´ök¥u$“(K­´A–°0ÜJÞX¦ûþ÷¿@ûƘ¬Y†¤q •IÓÉãqØÂà‡É–øLSÞ©Iƒ‰âå²'NØÁƒÃdϲ&`Œ8]Âß( H^ ¤…(œšå GÙX"eDž‰Û%7ð°?þxsLÈÿõ{ÿÙ–N³±»ï·Û6覆Œö e ö³Sfÿ}FÀ E¼*›‚ ¼Eìf 8")'$žõ,àF’yÕ[3)Õ&Ú¯6œž·/ çm{ÏP8xPÑ>¹ruÉr½R<«Ó®>ØoßûÞ÷Â@üœ—|¯6nO±?ø!Œ‡s¾`Oýôö /óÓãózÏ”#²"ø÷ç{Ïø‘B€Þ‰¾"ž˜˜‡¨{ü?îøCf €Ã.©} þz{3AJ‡}œHßó@>xƒwÏ›?½}Å㈿»¿¸Ý¥¼»Ž0äÝã#ßð¢KWÎx醨œÇWóõý•69Ä }Eý‘ñ {§öwú˜|s÷ö§ûiÒ_;Q<žÕÞ½®Ü­=.ïŸ^FÛÝ?[Ø:ѺÎ3d5»¸û¥¼“qLg[E¬ÔÓ¥DÙõ{q€é¿‚è ¼Ó8™ÜàÇ6Þk?õ=¼çn‰ÃÙî†ù¼–Uµ<¦Î—ZüR7ñºU§~%`v^mE’š:j7¤ä6«i=ÚÄ.—ÔÉÕ¤@YJñ'„šò«ÝYºjè)ËõÿžÒ–"`·:klº‚)-iù!ŸtvÚ! ‹'K©ôG¸É­,/²ÔˆdŠ[ ¸Ô}||<ø£\” Pð¡l"â&.ìlâéaï†>@z,i ðÁ3küñtp°¹pÇ¡òN~<-€‡1اG]BÀ‡ùÿúßÚ¹és¶M /%€UËôÚëZ*ýö[gìýSZ:ëŒÆÒ]:¬$„Ú—Æ5xÒ¢S’I+ÃkIàòºúŒíŒÚ$gw÷WíóCâ±$ws KZ2¬X€Êhß~¯}û¿üWûñ`eJ…| §žQî‹!Êî  AXxëq´Çãß^_|cKúþ8óNÛÁÞýù@ŒDÊÞ=öF²l ভΣ "yÇú©¿´ˆøpç ‘ï¨ +j@HÛÓÅ×7ïk‘Ç·–ûzöüˆòtˆ ^윿ëÅÑu_ŸÞ®Ö÷ysùðvÄMî#¯j;Fvµ}4Ú®åK¨ðjçí‘8 ®å7xjûõÏ6ËØg<½öw¼yZ± ¼ÒgÈ}b ñïà6]ä‚ËpÄp…düBÆFÌ&Z ¿òu… uƒ& R4L€“(’&¾Q‰ðäÓOÙ½÷ߦŽÈ~&--õZ¦G³|ý€Íÿ¥ /üwËIíD.qVKw*ûªtýO @ƒ¶ZqQ·úµ@‚,4Éù¶0ÐbN'+sêèÚCg’Ä¥SHÍK3!rd$b'o€'òa‡=¿õ[¿nVàNQ”Üþíßþ­=¤›!žþù ’¿Æ;.O/·§…ˆ¶»ûõ~lñ÷¨õ‡0ðÐãô°8@‘¼±ûYñÏOž{xðzfR¢C0žzJàm÷ö Vër–£ºÁSÅýÚÿ7s?VÇýÀÒõyÓ¶µ°¯Š=V%Iv$ë{ßz%ÅH$$y³ª´ö7–¤RBKS:H“Lï²cÿƲ½IêÃêÅ·Njƒµ‹Lûì#© ù£Ó@LÈ´G¾™”xz9xGò†ôŠk²^|ñÅà—püCøc¢g¢fâu õÇããIzÎ܉ƒ¸ˆÃ wÏ—KÛãô¼zâvÀéZ §d‰çèÑ£vD{Ë8t”©"u‚;ËÄ„%~!Úo(ýu-û¥úì•Ií};°`G’¼©N2‹?ì=”4”ŸðUëÙa9Õ¤ãO+Úa¹;%^óžL—m{bÎî¨ÏhI|Þ&‹ÚÓØ/}fZJýå—ìoþæ?Ûë/½¤8t ÃM-5”‰òù8áüó²vz18¢šƒÄ÷ñQ­‹¼ðïy§r%’¦Ø0Üò ¯’HE„Q&‰0jk0EDØ_þò—¡>²òã;f£&øŠ–¾ùöýdHï|N_F§<ä= ðšÌœ'Dáíˆ'ÈýwòÓÉ­¡›x<}ÒÂÐæá3ö—ROÒ¹ÕÝà¥óÙyêÏ›7ôÚ:'ÞÂöÚÂýK©Cκ]üûrøµ^âw?<ý=d*ö§“=å£OÆ}ï»ù°8QÛk4º´YÆ?ã ˆ¿ã§ý;îrÞ£øVdnQ¡» îrxy½„¡!R è>)2y²LÝÇ)õšÇê¨|àÄAõm+ŸýoV[ø¡õ&隦¼¤7ZÒÔDQت±ü)MûœV¤ñV4ñk ‘9è×J]WNé°BE7ƒ$zŸ•Dç›Ö;ôÇšL#)ØB°MÝž§ì”'EˆNä“íND¾ã *òýe2Å|ë[ßZöCaR–ÀeÆðœˆ“4ðXH±ä ¸%ÄÁÄM8¼†Œw@Düqõ'ìqóe7wõ‡¸ðO^ÆÇǃyî¹çìøñãÈ!c¯Ÿßƒ:¡½[üªIå‡xÃùÞÙóº|½1c½=i[œŸ±Át¯1(nðZ"'Æ tе`φ¤A2*]’:bª¥Tá¼lÍv”f­Rzߊ“Û:°Pë±Þ8hßùîwí­×¥œ6¬GuXC1¯xD=`œg”ÇÛTرXƒà5qðDÒx÷ÝwÛ<@åž–¾9$‘,gB\á R³*+ÉÄÑ6µòãy"y[Îgdìø±B}A€2tRŸÿüçƒTwF7R4µy°büWt#R6N1So–Øã‡RC{ñtC"úÃ7Dž®y½_ÏO@”¥KWÎx|­êóÊsûéÅ@ûqC¿ ¿âõc \k<ÕÄá‹·yzâãvî~±¼¼Xž^¥ ÚÐ&€¶¤%P©Mà:-ÔUhS|¢ o¡LJ’¹d®`©þqK|]K±ÿгJG @K{i]Ù8ÐÎ-Iý$!€e­ 0°°¦¹ñ {È;a\p¹äÁ¥g¸9`"åõÎË“xbìUCx`©éàò}Rø'yIic»K7.i–*5ÓìܹÁ~ï÷¾lƒ½=6}¶dµ’t™-éNÍô«Âg/€ö m”ÿXNÒ8&G™íeqÚWøj¶6DWäõ£ìŒV¢$±ШØVÊ=gÕþÝVí³>í«cß[./u…íÃÒ¾-DDL–jëì1ÐñI[‡+˜–89MrÜÑ]B—ѤN[§£±\ Ñî±còö-­,¿âŽ›wbþ™ˆ½ãâg-"¬“Ç¡Î&v$xèHCr„Ô†Ià˜Ã/5'’ª99°À2¸TwNÃ’À¥°ª=š¤×+ʯ–˚ܰд_œ:`ß›~Û~pt¯5æFíŽô 6W¾ËNêžÑÒ¶ ÃmÐR÷}Å·ìÁ…·l»-HâZ°ã§Ž„ýaï¾ûnH>8I à@t±óoÜÚ¿ Ïàçã‡M8U …¸SnüPGÎwâ„ð€wö²×‘ƒ+kç¼Át!ÏŸcG>½~â~I¤Z‘GyÄž{î¹àðìÒ7Úq¶¡öëüàIzŒ³èñcÌ '[Ü\6:¼ñ†ÉA®ü²º‰öϵ†îtMI'/eKhî©7ÊÏOYmi¡céÒ®ƒ(ß“Õ/Ñ1«×I> 4LpšŠ´÷(êü타ǚÐ^#::¿r—u\h¥‘¹ïO>ñCÜ<ÙO$¥K7ÒU)ÙUÝ6Ù¥e´™3Çl¾9o3çÏiìIHmÈû:ÀpÈzš¿±Bã„å…Õ¤4jjáÇ:ÜòjWáN’¢@ú„fQa„Ô°6Îßmsõ;ú¬XÖ`—ÔÞ¸¹·-ù JÔ'‰‰ÔrHqp>¯Ã’ÖòýZõS-rÅÖuM†€i2Q»Ž%’OJ>é1q1q:ùDIÀ±ŒòÛšïÅ ù$ÿ"ôÖñ2n‡=Ýÿ˜¤PìJ?ŠwŽ•w€ f||œà!HlÈ{Üú ãjä(€žNÞˆ»á‡¼PvqCù¨ÿ}3õ²ÅÞw­8ó-­¾kÛ²÷ÛC:hR®î°RœüHé^+Š=Õj$§EÛ¼tÐF2 ŠcÑNgÃݲìÁh„v¢„ÄœJø&}ŸØÈ“ó2a(3Ä;Ëô,#us½kÔq—ÇïOì‰8àá‘„DXVÆøÝ²ÄO^ɳçx<ÿíùt{òNX´‘vÄXÖ%M&iÚ þ1ØU´îL|ˆ°Hùæ¹aÓÆàpäÁÁ)ïÒ#]7!ý!~(^ïøÁž0þ‚§€´Þ@”9Áë£Cð®ÓEr¾:yÝùw÷yór ^ï«•2Íh¯‰…¾¾Û¾m‡ ŽéW]ë—®$pM.o 4œö›-MæØÓé} ñ0ìïXÜ/ci$| ‚F»~ðõ¢ïº†XL”BûI$ta¹T„œ]8#ù—ÔZ4Oë•&êÄëšøÏYAzêštTÜÔþ¢c‹Ú7UË©lR¿¶’9 c™ÀŸP„f4í{«ŒÚ\ò!-Â>dÅÄí’ ²MN ¥yIÆU+êÂoÝФM° §å½l^ê3$êëÙ¤ 'Ú¯t’%8¥ªåY–m%\í™ö y; áO¤6vOûÇöË“ ,Nd[óâ'¨&Ú|[;W4ŠGÞé2ÄOß≉ÂDöíùâÛ'ÑçŸ>¤ÉdT %ÅHë~ðƒ„‰—}ˆ€ÄäM:ñøCÚ êºQÁËX‘‚Iâœ™ÍØ¹¥9;uæ°õéÞÔ]6f ZBÕd>”Öþ2û¡ÕS½¶$€½Xnh'ݼmÉÕíĹûåo„Û+>AðÌËÈ7i‘6Oç1öì·0ÃÃ>7–ç9ŒI£‰åGÀ |ñ2PFÂñ„H Pêñª?ˆqÓ:úZNq>ù؇›§áï¬ø& iþóŸ‡2âØßæ Çó– KD´u¯ƒºÒŒ‹ëgtglM'uYÁß8Éù -Œ§^ˆMvåòŠç©KyX¦å½æI¾aHÓë§S¸®ÛÅsÀëΟ²ëóFçãq'’Ž_žÄ´““D"­Y«¬ï Sçoƒ€r­ØhLa Šã›„§Š;ƒ%þC\añ÷N¡ºn7 $QÛÒ2˜ö…¥¦-Ì'lTâðþ-m&u3Bò)eQ þç´§A“‰$< MZ5Æjµ)©MªÞR’úhK\XZÀ%ôã žX°r}Ü÷i3ýNµ#3¶´€£î°%]žÎ>¦jMÒÚ¬Ú3÷?rB²Rž³ Ç•-åtjߨ$u#–ÏZ_ï°n4D'*W#Í£š° F¡®t8&°å>Ðê 1!ßrt¡›°4ÌK«x_XöÔúƒ=qÓEB7‘‡V°¯zs±â?ê§,kÖ0, :t(lÖçW€{ÄØÜÔ‰tELè@DºÊg«?Wª‹6¿0e âãGgŽØ©³S¶¡p§4wÙÒ‚@R¦,I§â(ÔÕA-—tʸÇFuã§Oí;b¿~u¯ð÷ŠÔŒ<{þ)ïn¼ð–ü¼p#ŸŒ9HÊ8] pÄa‡@…ƒ€á±§¾0¼CøÜy.€)âgÏ'GY†ÄqUXªöxˆƒ°ÈËA^±#~ìHw yT³'ŽeQ¤~Œ‡¤;és°"F¸á´Y²D I#uI9=/ŸçÁóçùæÛã&ï”™¼Âò߉¸‰üàŸ°øw¾òÄ®KWÎø ?»tkq€~܉ÒÞ0¼ãñërI¿®CgÌD¢ñxÃá=þ`)K„:²»3pDúBID{fØgGÂ:E¾ÛX7ò³¿6 ›XQúµ_Ò’P29  ZbYš±ýÕ݃›2i“Ž0µ=í7+ëöþþSZ•ìIÀ Ãͺ2)ýòìeú‡´+IZº®ë—Îëö†„”ždhÚQ©+—hžR’“–`-´ ©)ºòÑÔ ˜é›—diÞŠ’"•+çn´ÄšÑTpH¥‡Fî i)E¤þÐP‚XIZiSR¯á}ˆ –IC¦]WuO0ïi}÷¹LÖ è3Ø‹»áaLj„úÄŠ}ü;²þzô<9`À¿ƒ ’% {ÏØë…d°ó¼$v.͉¤/HW$J,'ë(…êqÚÏØáÚ;vpjŸê6a´lñöpÏi¾WýŸ¥Ôüˆ– ‡ˆeí1<´ï½ñæ;Vš™ PÈùt°AÜÎËIÞ±g@óA 7%pÅà ð è ߌcð€%BêÁãÆCØxœîîãóЏX‚&^øöÄO„½„`¤qx ?„÷q,ž·÷ô¨%ìÜžï÷ß?ì#¯€0wUø!#QÌ’Z"fÒ›—d$¡€=êÏ÷"ÓÈ…[ñ$O™pou3ì¯bD8Ò§ìð¡%¤¿~úˆ3¾$Kü]ºrÀW¯7xŠq».‹¯œ¿×s ëõ¡tJQ³úe\ÓrTI¢ù%Ýö&!¹I,ŒÒßDÞtŠ70÷CÇN¥¢“nÁÓ*²JÃTwö¸ü»û¼q9PÔ- åÌ´MÛÇ6ÛÔ¦Ìò;0¯6Q_´¹ÉSvxI“­m¦©å¸Æ´öKi©«¢«ªI\KªHãØïÆfOÉ]d&¦Rš8‰¬Ð;¢»öÛ`²×F5i iÓü`~P@n“”ÈÛÖä°õæuA}¡ßzåž0L Äå2Lh?V]Û¸¹NÚµ%iÿŸ8›”d£ –%m Eé«N)*%T’Ô”7¤Ö’†‰ŽÚaÒf²sð†íšë‘„ë"r`¦¯”ÀäÏð¡?ír ‘#¨qMòÈ#Þ÷¼ã<œÈîR°Gê†A/’9@(„_ÊôX™Ä©‡JmVË¡gµ,}Â^›|ÓN-ÎÚXúnÛ¸x¿e¦¹²L· ¤$E’´µœr“ô­’â_.=qü¸½òÖvèØQ±•z˜ÊÊ„DºÎGÏ+<L8hÃûý&&&²&E¤WœÖ% À ÿ„£ìDxzÜ<ÃØ%ÿ<ã߀xäuÉ2"Àˆ%X¤\€Ü£>$r,¯ž9s&`¤a¤ƒ!Þ€µtX)ßže€(<&MT¸/'SIéi‘7@@žòG4>À"^Å>GòÈ©c€@œøñOX yƒˆS—žÊÊIh$^!]çgðÜáså =¤ ~P„8¡x½uˆ¦ëÔÔŸ›ÞºN7!èïHüÄSU¿æ¤íXƒUU­é\[‘SI¼a‡Ñhˆ·8¹»Fï¸õ'Þs’LÄ;9ñx–ã_Ÿ]ºq9PÎ×l6yÞΦ´dWÙgǧ4aMi™¨¢IQ—Ø÷IQ¡`…U´”ÈSÍ)Aio*«IP€­¦‰ŸÓFš˜œÕîô¢“©´”E-½.Ö¦í¼~x’´™üîȤµl§[vöÀéШ€ÞXaDKxÃzÛˆ$lý:™ZžŒߤXVÕõ[ Ž¿’ŠöÛ¡ÄuòôÛ6=7hsÅ-62´MÊeuò¯¡ËåÃéêh2uɶ÷jŒ 3“Y]®!9¸Óö½¯øÓ—͈c}Z\¡ï¨OÒoœ|ÂæÛãÇö¤M™¬ÙãÅÁ&^¤9”‚çtÁ¥:&w¾¨“®sÇÄ“ãöÞùW´Ÿ±b»zª–ê«÷jY[üËèʳ%-‹T¯9IFOà{ó×vPÒ¾V†‰‰4ÉyáIþx‡<ÿäÇO7"ucÏ7òJ9X„£.0€$S”ø±#nÈÓòqÇÝqótñ‘¾‚‰Ä˜#nòÐúÊW¾$p‰K«a•óÑËä|ø/9%„IDAT'^·#.ˆü£J†Ó©œözpîa‚gý!.wÜH ^±œÊ;ñfqÄ…Áá<,áy‡7€>Òæ$3§I‰‹0ä³á û ïiñtþv ßu»txÛ¹ôÝ7|oÛ3ìÁ»ìÁÁ;lS~XÀOj… Rw²`C•u-·6Ô¹ ¢¬½{éÞmÚï¥SŽ¹Û¬¢½wšÏUmz¯²™|ÊŠ‹ÓÚ#6/°ª<4tK“&:æÐ©ʉÜQåOê$.Ïvã“ko.RÃ’PŸDÅIB·"¤d¼KÔ8¨¼°)—íվ‚üè#ž­^ó4i·º1ìO²,˲â5#…Á®+H7CEýT£+¢ )[¿æÏž·Úñ·íÕùÛ8öÿÙ‡µÛ3ûuÛ]¼O§‰uhDKÌ”/¯ëÌ2Õ´Íë AŸÚ?üÃ?,ƒ.@€¾ˆ“™ ±· ‚„ÁŒq ÞVÀ„r~È;êRïÆXNeYš=†,m²DÏw<ÿðrïO?ý´}ýë_vøƒBûQ¹×ÄØyÐVXçqaS(ô) ×—Tñçñ¥4Æ;ïyÀn,é"üàÀ¾ÂH 0F K¹ù®ëGßuÆ>>â îrëLë¹w}³¹Âß8%õc’Ô OêÎA1ïÞ>âan¦wµÔ›ZÜzuŜ҉Ò4€ø ÔÉóÕr[­®fwµÒïÆ{õ8h€(z˜.¨W V™t„,Üžgü½¿|á)PÇsœHm“´L àš&­ª$=HáoØm.Ie‰T˜ê–’:¬¸2íqÓéÖZ½dg—^³)ýhø¨ô3ûUi‹íì¿Ëîè•jÂ}¶1{öìÀn!h" QüÚmd3©ƒ–Ò^°Ñþá ñX(J*¥S™ÅE]}¤½t’á`—Ó •y"Ú‰)ïà+Ê"Š˥‘û À¥f¡1Ùë—8Åë†V,2£þü‰Â­Œ$œyôÛi¯_®Ð&îl&/iáÅ/)·!(eÔS¿èuõU]Ê# BÜDa Џ£§`gØ0]CÛ-'í\î˜<ÿ¡Í•&í®Ê˜m­ôX?ó0§‚‰5@ú¬*]€`©R!Êä¼° 5‚È“?ûÊ&&&ðóƒ LZø£ŽñG<þFÌ„ºRþ(` ©åG"Ç+R9ò'œˆ 7NºX‘걂Oð wxAð#.ñÂ>Ô£üñ$^€ž/é"ÑCš 8v‰ñ’VY übˆ ‡žÀq²·ßÚòÃiYÒâÇ>q“6ùMH%ßž6ïž6~xïÒ§Ç?½»1]Ïà‡y'JÓÁ|p`ò“ïkEž.éù{”þòìv­²ÒMçSä@2-¼^WÚê+ä~‚š_ZÊ`¡ ìƒMô'ÅõXò§Ø54iIÏí¦.0Á³PÝ¢}tšø%F*éÀBQË{‹)8)’ŠHæJSvR›ò?.²ýSGm¢÷°Ý;ø¡mï¹Íî-<,]š0-§3­ÚÐŽúŒEýNµ¹†–†§µ§O*JÐËU‘”‰uRà*©û½Ø–P¯³w*” @"rŠŸ†A0a&¥#͉2òo™ôÊ!Àšœ„pÞ”kÂs³…㬯Ÿ¥9–fçln1¡CJÀ'¾¢£k´÷;¬~Ô¤ŒHz§%±&˽Ú+¦¸«±«øÙì¦8[‰…l€é€(¬QœÖò÷Ƕ¿¶Ï^›yORÊ¢ÝSzÎzk[%í—?$Z®Ô~Æ„òZSݰôÈIM õÁDÏÃ(ÐCÇ2)ûðxç²wÀ{º-~8± Á¿Ïš¸òé†<²X"g ”,“r+€ˆýf€"CÄE@É/w¦â,Ó:¸ržy8øèÚÂ3¦al+Ÿýv$Ÿ8`?¡ƒ8ï[2$=<É7à¹",¯R‡ìó£>HC8ÎòÄÓ#,yò8=oÝçåq>z‰×õåÅÖ u£q€qºi\ôkOÞ@®udˆ7TÏp”ŸØ„æÝçäÖßÐ[9ö=|˾ýª5oƒ^ÀrJ¨-‡×À5’hõ¢#¥Cc—½–u4­ŠèºÜ¤T$]KêÒô¼HlÐÞ,&9¼$l!7oKZ*¯MÚìÒi‡=©;:ÏKÉê-[hØäèÿªItÔÆ‡¤Ì5£‰o±×êKZ¢`[Іv%&JÀTR(R¼Ê’¥NVu“ƒ¤\ÑImIG˜ •U®öj¦[oµ•weìÄÞ;'ÊÊurÁø§É²)%* “{()ŽJC*wS{Ù öö¹j~BK:j?P*<#)R?¤ÆBûâûšºE )µ$)¢@ž––dé_SûJú“:ÔØ.IÝý6ל´©Æq›­ŸÔž“9ûYñG6¼¸Á&÷š ï¶½·YŸT“T™à4!Öµ—,LX8Míÿbm”>•ÐdÆqXmq î5¤f:„¶LpÉ+¨L’ÛœVxI5(óRY"5QS˧‚S ¢=p ©—n;Àb£"Ð%ĶÌ3”í „2‹Ç•”ôè X"¹+KwÛ’Ô£,,œ;.}wIc´%¯eR€œ~H)ßpSÛöIpq­vƪï½b#¼h{*­<¥ËæG¤®E‡´ƒËª:ø4£[]››ÂÁ§„$¡å•å@¤Må°a¥¸,—ܘüs”Á%mø¸”7ÀÜ x»×øùì8ŠMÚÀ2±|Iž)+Ò/$k¨oA s€6¤o°¸j‹Cø%^ÚqààqÅËïm nÚf cO^É ~I§¡%oxŒ¡,ø÷øñÃIp©ÝSO=¤rìëCK³DBZG^x‡× qÅór«æ¦IŽzX­n»¼½iªxÍ‚¬WÇAG§ƒB‡ÕèÍ“N¤ŒæW™Èd<£þîù¹ÊÉw£¿ªˆ.' 5«PÏ<#âÊÔ»ö:—f5÷=ƒ§•‰;݈6a rØD#}JZ” ´hS(Ö¾ú°tŠ2ZH—(¤À•úš›u­—ôÇUï1.IxµðÙGçØ¹š6¢ÏŸ³û։˺IBzå˜K2HáPu"@ÆM]Hã$Ãé°#ºîHK€åE[”¢âRUûñ´äZÕ†šò8Sš<¹°Í³üIœv\¬èÔá„|ZûܲÚ禋‘ämËKïš&aà ¬L!’oö£QþjS‡B\šì…Æ8PQ­ÌØŒîŠÅÏŒÁöõhoÔ˜ ô©,RÛ"ž'>•=+‰_Y›±ÆÉ×­ñ›´‘ý¯ÚæBÉvÉWC@b©ù²–«{mR{5åï´cÉ>+ŒÅo]¥aû÷ïc Ò5@O$nw#,‚äP~ÀA9¢v-†ºŒÙŸÑò¨Â@€/߀!ìp§L”•Íè¼û2%à;ÀûåFHæØ3Pzøá‡@‚aI—txwþàæíÈŸªäeÞ9¸"€Ê,¥ç}q,Y#…ˆ?­Û"´4œÒ:å–äv½g¬/×oR‹2é—Š–>ùÕ®=V`Y´®Ã•à¾Ô%qci-%w@ûÚ V,K/ÞüFÝ »!\'–Ë ÄéZ=¥Þ;sÒ*o½dé{-#©$hqÄ8‹~–#bsÚòõ;—³9Ô¸ÔŠ§Y•u||…ê{_Üsh(þq Ÿ4Ôn»¼† ¿ÊI%tj3|¨× îõÜäòú]8 Eƒá}𛆲àÛí²bQÐh´dÇwv6ZÒ¸ž ¦#Š+Å2¤ÀL&,GF“i)7£ƒ¥’óI’—ÕÒ$ñT8iš®XQûï&êÚœ¤Óùy›MŸÓ!ÃöÞìaëhÉçl´²ÕÒÚG–Ö)OA4IÙtÈ¡´$n€4ÁG’ ñ6¤¾<Ê@I†v¼Ü€, Äý¯, Ÿïgð–HM`(!5(ÉúL°)h›‰ÒÞæz%™ëOéÆ )/Ô]®ƒríQ{$uw¸çu@zïú¤ÔXò¢hòp¬éÆ•¾aJÝ 6=«›0fÎwÃÛmdx‹€œÀVzÀªž²êoö[VÄʈ€ªöö¡‰D·ˆI:§¬ ø²D\8^/Äó‚ÀjFàú¹çž “=e(0Ù –Ýn°”ð hÀx=ãð€Èýøw°ü þdP:XÌo ï&ÞÝ0å˜P:L™<ìÄÄDX^†oÄ–+ŽoÊ ïˆ7OËÛQœ q;ç‰!­´*ž³'ojjjY:J¾ˆ—<‘O/ ïøç¤*‡†G6„[(-±¢bãŽ0ù±—ÉûÏ’bÅ>Èõk‹_\,À²o Éâ¹Üy@Jé¹+'tÃqËÁ‚úNžjé75 åÙ†ôDÕµW›Õä¬uOö÷±›í×…7¤,¹×6Lm°m=Ûm{ïNI7Û¨–^ ™a›-Ÿ³\]'l%Ñ«+Žòâ‡v¦®²Õ'´¿i«FÃ6%OXspÎ>žœ¶þlÂÆ*C–›—Ô%\“¥}z’ÔÌÞaæîµyI ‡µ×./ ºÄ~@ªpà<x@h„ÁäváCpÃxØÕü¸ßkù¤ çw@•ö^ï^6øá„;ËÇŒ¿åæécœ\¡'î¾DIX(žvRE6­*]v?Žt Š©Ñh ûwÃ`ºÒÖ–u_nh¬ˆô …ID Ât®%'H[ÍóZ&ÙM«ËŽ˜—ޏ’–,­)À£ nù²n‹ÐÉÌÝY*Ú…ÉÝ$ ÿ$=RóÍëf‰BcÄ Íé÷]™À½OEí<š@ûc‰"Іt 0ˆ“½@ÜPùv8N¹–¥–#RT x“†/À­iÙòÞq•þ” ¦}”Pj,Ýw5ÖÒ‚Àæˆ|é –Ht_ì˜mËm³m…-ºVlÔ½[W]é0B‚¥äš$ˆ³ºiA×PÕuUÖÜ”õnÚf§%¥Ü»¥dï•usFcƒ—&¤#//0×´ Ò}§»äg‡ÒR®µü&AhAõiʆwÿ\`üKñ]~È%Ó‘±Ñ AEâ9`ŒÜ‹;Ø^ç×E!oàLxÝÜÀEèfý*r@‡Ï"}>t¸öNÇ÷Õ&ŸÌ®v:Ýø»¸4R:=(x”WWÈ6²0=a¹µYí³J³léù­’Þ¡BC“ûè¦8É–T+%S+,…dÛû’·{É=bîô·Ö’±@”© »ìØZÞ.FªIš¶}ép¶’.I&u()0]#¶(I r^{ð4½J¢&õÃR<|¤4k>´ Ùa’âßc“»mËÀm6>r§míݬåV©ÑòêÜÒ¼-HïÛm‰Mö¶N®þ<9io¤mcm›-¤°mRÒ'݃S––Ôp.=¬ôXÃ’8‡$Qj©w‰ƒ·øÓΓPàîŸkʤiì…ä·3õt°ªƒ6ÓR“3?/}‰ÒoÈÞ8N ³¬ @C`c);ž„ãçõêmüšè&K ç ÎùʳËÛ›¬¢/³8AG§¤Cz¹Ì¸.;±Û /›}Ý€W‘½R? ©uá)íþXÀ’T®–ÖD'Á‰j?¢4-5IòÄéKIÆ8ZGýIJ“œ ÔÞ·¼½'4Ú>I-`' Æ2rðÏ‘ZIå´si9Ìhó^¹é{ ¥2E׺k?šNtb”óÉì”T©È¥µÇM׎M7¥¦"5m§šÓvº>mçÛØÜ€ÏßnwÝc÷ŒIéla“ Hê8¢ÆæuRuRœOi)·&»æVÓµçÚ/Øce-íïÓrª–pMúß8 ›•Ú˜4{%•k•D«•-*­óà“eïÚ\+8ð•žÌ2€úûÄÅ#£îøq¿„Àù\Âw—®Œ¾lÝ>~+up d,WV€nè«Ê F$ž‚ªÞ±ãnWãô<ÍðlµÈþÕH°g——Àšn-@{Ó8PQšBŸ[]’ î µ>éC€âÎB(©{®$ @ [šãµÀÞæå#¸û·†å ¾KÒãæn$‘8‡ÛUítð¯¤äF$QiH§—î€úÊÛ¤ÆDùU—RE0˜²éä)›Mž±¢@\±çcé¼›³7μmûÏ´}ÃwÚƒ£÷Ù#ï·;Fo³½åcövé°“$fÌvÚŽæ6]›•—Ä1©%S|üÿí]kA†gÓnH­XÄ«‚/ÿÿï½¼RS¡ÐjmMšÄç9³S—Í´DŠÎÀfv7³óqrfçÍ™9ï0?‹gÆ™LØ™Á: ß‚ò‡í^—vDeëÇ_—Àºó†lI4-}Lì§‹IY€æV[zÅ âŒ]§5Î5yZÜt¾0!ò Ÿú›þùÏ8ìÃ'ýÞC™z”ôåÞ0}½þ¿$^¨6Yå°ö;__aö%–R^‰÷UNÍ·Jà>øqt IëRÖQa;"HÒ{Û@‚›ià 6 5œpäAlµXë åÅ|d&àòy,Ëi-+â–åå]“xº!ß8á¼m.ò5urû0ןi£Ó#WRîñ˜}6W8)°ïÙ ÛYs OÛ4ý¼5sœ!fì{•ηl)¶À)ãæ·ëtv5KoW¯Ó¦ƒ?,?RèQš¦7éÅü4-PXÜ–Òš`Å“—xÄ ÀÕA†ö¬™Bebn§Ý]ÃjôH$°†P½Î ì7ñî!eâ2=fµ°iU¬9]ª'±@NOT-D-oÃ÷øPïw›ʽ{»Þ ùõåZÁ[UŽ"â *HpýT¥ƒ–ö÷•ÓóÚ¥÷!åšç}$°eÿÔ­û{§&Ð#I¸î·• ” ξÄå°>mP®c2*îóØ˜ }Gɳޫíä{GmbJŽÄAPÂu–m(=ÄòŽ78‡!¥¯m’ CN$ÆK¦4f©zðÛ57ÐsÀûvÒ§§¤Y$¶›ÌÓóöešO.Ó÷íE:¿þœÞ}}ŸÎFŸ™Ÿà•8ÃicŠõí^¹'ðݱ7¨rÌ5 Ë[ֺŚ<¬|Þ¢ÎL§…'mWé¨yýxlPËQÞûY/sMœ2u­´cS©:­ròÆ Üü¾Œ%?õ²†‡I È²ÄU¦“ç¿öô/Í6•EÕW¦fIEND®B`‚calamares-calamares-2d126ae/src/modules/packagechooserq/images/no-selection.png.license000066400000000000000000000001401430147706700313730ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 demmm SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/packagechooserq/images/plasma.png000066400000000000000000001046701430147706700266450ustar00rootroot00000000000000‰PNG  IHDR@@! ާsBIT|dˆ pHYs)¤)¤'ògtEXtSoftwarewww.inkscape.org›î<‰5IDATxÚìÝ‹·Ös¾ÀñóWÆtŸÄn×.)IEÒM¥Ø©¤‹kî4©˜Ä))rI÷šQbFr ]¶.ŠQûs|Z³ÎÁqé²/Ïóü^¿µ^kÍš1ìžß÷÷ý<ëû¶Ÿç?"â?*‰@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/ € € €€ €  € € €€ € € € € € € € € € € € € €€ €  € € €€ €  € € € € € € € € € € € ^@iZW^O¥E@@@@@@DDD@@@@@@@@DDD@@@D@@@@@DD@@@D@@@@@DD@@@@æ±þ³€'€ ˆ"€  ˆ"€ €  ˆˆ"€ € ˆ€"€ ˆ"€€"€ € ˆ"€  ˆ"€ € ˆ€"€ € ˆ"€  ˆ"€ € ˆ€"€ €  ˆ€"€ ˆ"€  ˆˆ"€€"€  ˆ"€ € ˆ€"€ €  ˆ€"€ ˆ"€  ˆ"€ €  ˆ€"€ ˆ"€  ˆ"€ €  ˆˆ"€ € ˆ€"€ ˆ"€€"€ € ˆ"€  ˆ"€ €  ˆˆ"€ € ˆ€"€ ˆ"€  ˆˆ"€ € ˆ€"€ ˆ"€  ˆˆ"€€"€  ˆ"€ € ˆ€"€ €  ˆ€"€ ˆ"€  ˆâ!@@@D@D@@D@@@D@D@@D@@@D@@D@DD@@@D@@D@@D@@@D@@D@@D@@@@D@D@@DD@@D@@D@@@@D@D@@D@@@D@D@@D@@@D@@D@DD@@@D@@D@@@D@@D@D@@D@@D@D@@DD@@D@@D@@@@D@D@@ÄC€"€ € ˆ"€  ˆ"€ € ˆ€"€ € ˆ"€  ˆ"€ÀYþÑ‘XüV]<¾á½˜õÒq÷‚UqÓœ%qý½ÅÕS§Çµ·Æe£&Ç%Ã'DÏ«ÆF÷+FGu¿qaŸ!Ñ©çÀèPÓ?ÚTõ‰ó:_gw¨‰–mºœÿ9ÿ»üßò¯É¿6ÿ?ùÿÍ¿Gþ½òï™ïügä?+ÿ™ùÏΟ!–ü™òg˟ѽ@@bíîc±dëg1gÕÖ¸kþŠÿÀ¼2ñžè5d\Tõm»\gµ­Žÿüó…e!Öü™ógÏ?CþYòÏ”¶ü3æŸ5ÿÌî=ˆ"€ ”¹eïŽGV¿ý³Àqñà±Ñ¡û€¿…Q.q£¡äŸ9ÿìùü4äk”¯•5€"€ %dÍîcñÔëǽO¯‰Ú»‰¾#nŒv]/+\à8Sùšåk—¯a¾–ùš®ñ[# ˆï…÷Åì—7Çäً⪠wE—¾ÃË꣪ÊM¾¶ùçk¯y¾öy¬ED€Ó´®®>lú$¦Í[vâ#›:]4P”(y/òžä½É{”÷Êš@@ø«wG×¾“f.ŒËFMŽó:÷ÊDÞ«¼gyïòæ½´¦@€BZõéј½lS\wçœè1pLœÕ®«˜P)õã½Ì{š÷6ïqÞkkD@¨X‹¶ìŠ›ç<—ޏ1Zµ¯ "ïuÞó¼÷¹<  ˆ@Y[ññ·ñà cäÍ3â/=.8!×B®‰\¹F<+ ˆ@É[¸ùÓ˜òТè=t¼µâ¤>.+×J®™\;ž!D t>Úê¿wÅÄó£êÒaõ9#¹†r-åšòl € MnñÖº˜4kaT÷áàžF‘k+×X®5Ï€"€ æ¹wöÅ”‡Ÿ‰š£ÐÓ¤rÍåÚË5èY@DàŒ-ûàpÜ2÷¹èqåµÑ¢u•ÃxšU®Á\‹¹&smzFD@8iëêêcΪ·âÊqÓ¢UûnÞ)I¹6sæZÍ5ëÙ@DàW=¿í`Lš¹0:õ耲’k6×n®aÏ2€"€ ±vÏñ˜ùâëÑÌMѲmµÃtÊZ®á\˹¦sm{ÆD@ æÙwöƸûöÝú98§"åÚÎ5žkÝ3 € ˆPáæ½²=^{´lÓÅ!9Åø­×z®ù\ûöD@€ ’_=ó…qñà±Ä)´|òYð¥éˆ"€ elõΣqǼeqAïÁ¿á'ò™Èg#Ÿ{€"€ @™Xöþá¸aÆühSÕÇa7üŽ|FòYÉgÆÞ € ˆP¢–¼½7FÞò`œÝ±»Ãm8ùÌ䳓Ͻ@@ D,ý×yóŒ8«mµÃl8ù 峔ϔ½@@šÉ ïŠÑÓŠVík^CÊg*Ÿ­|Æì5ˆ"€ÐDòû jïžë£®  >+Ÿ5ß € hùGGbüýǹ.r8 M(Ÿ¹|öò´ ˆ@Yññ·1ñÁ§â¼Î½FC3Êg0ŸÅ|&íMˆ"€pšÖÕÕÇO.¶].uø %$ŸÉ|6óµW ˆÀ)xdõÛѵ߇ÍPÂòÍgÕž € `ÉÖÏâŠÚ[.CÉg6Ÿ]{€"€ üŠßDíÝs£Uûn”¡ å³›Ïp>Ëö4D@ Ï÷|€ï@@€ŠòèÚw|ÏTð÷ƒä3n¯@ 0–t$®ž:=Z´®rP ,Ÿñ|Öó™·÷ ˆPÑf,}5Úu½Ìá0H>óùìÛD¨8Ïo;—_w‹Ã`(°Ür/°' ˆPöò‹ï˜·,Îë|±`àÄ^{‚/I@ l=óæîè5dœC_àÿɽ!÷{%€"€ ecíîc1iÖÂhÕ¾ÆA/ð›rȽ"÷ {'€"€ %ÿ[5—_ãp8i¹gømD@JÖO.s:öp  œ²Ü;r±— ˆP2–}p8®¨½Õ!.pÆr/É=ÅÞ € @³š³ê­hß­Ÿƒ[ Áäž’{‹=@Dhrkvý×Ý9'Z´®r` 4¸Ü[rɽƞ  ˆ"€4‰§·ìŒ®ýF8¤]î5¹çØ{D@€Fuûã/ÅÙjÌM&÷œÜ{ìÁ€"€ @ƒ[õéÑ2ñ‡±@³É=(÷"{2 € ˆÐ –lý,ª}äPr/Ê=ÉÞ  ˆ"€œ‘Ù/oŽ?_ÐÛÁ+P2rOʽÉ  ˆ"€œ²uuõ1qÆühѺÊ+PrroÊ=*÷*{6 € ˆpR–t$úžê(y¹WåžeïD@~ׂ7>Žó/ä`(¹gåÞeD@~Õý‹×Ç9{8PÊNî]¹‡ÙËD@€Ÿ™øàSQ²—{™=@Dˆµ»Å°É÷;8*Fîi¹·ÙãD@  Vìø&ú\=Ñ)PqroË=Î^ ˆ"€³ô_û£KßáJŠ•{\îuö|@@(ˆù?ŠöÝú9 *^îu¹çÙûD@ Â=ôòæ8·ÓEFÂÈ=/÷>3@D*ÔO¼-ÛV;…2qN‡šèÚk` ^ã&Ýw=0;n¾ãY;)zí«z{NRî}¹š€"€ Pa&LÂ!(”Að¸~Òmñ÷W_/Ž“¹Ž=»öÔŪµbÊí÷E§n}½–¿#÷B3@D*Ęi;ø„6pØu±xé²8üÕ×q¦W}}}lÛþAüí±ùqùÐk£eë*¯ñ/äžh6ˆ"€ @[WWWOîÀJTçîýbóoƼ|~0¦Ïš­Ïïé5ÿ‰á?î¹Gš€"€ PfÖî>ƒÆßé JÔ¨±“ãÐ_FS]_}}$y|At¬îãõÿ·Ü#s¯43D@ L¬ÙõC ¸öfœP‚În×5žX°äÄGU5ÇõÝwGcáâç£ËÅ—»?ʽ2÷L³@DJܪO¾‹>WOt° %¨e›.±iËÖ(…ëØ±c'BÌŸ:v/ü}É=3÷N3@DJÔòG¢çUc4C‰Ê *µkמºÛå|å÷‚ô0¬°÷0÷ÚÜsÍ@@€F¶vÏñ¸¢öV‡ËP]=6*áúúÈ‘6zBaïcî¹¹÷šA€"€ d]]} ¾á.ËP&òËÄ+åúá‡c1ñ¦âî?¹÷ælˆ"€4Bü>uºCe(#ÿ|w{TÒuüøñY;©°÷3÷`@ ™ö°e(3ûöˆJ»¾ùæÛ¸tàˆÂÞÓÜ‹Í$@@€róœg&C™iÙºêÄoLTâµÿÀçqáEý {osO6›D@ÎЃϿ-ZW9P†2Ó©[ߨäëƒ>Ž6{òÞæžÛ[ÈÒ{ÀðÂßûÜãÍ:@@ p^¾Å—žC,\òB!Ȳ•k ïsϽÞÌD cÉÛ{ãÏôv8 0²vr!ÈñãÇ£º×…¿ÿ¹×çžoöˆ"€oõΣѵÿHÃPçv¬‰ï¾;ZÈ’¿ýb \xbÏÏ½ß D*ÚÐïu ³r͆B£GF‡.—X?Ê½ß D*Öó–9„êÕè(ê5åöû¬Ë`ˆ"€gÑ–]qvÇî¡ 6mÙZȲjí÷ÿßrä,0D@€Š±f÷1ßû7|ÌÄB¯¾>gµ­¶~ò} 9ÌF@@ "ÔÞ=×ÁÛ¶XÈrÕˆëÝÿŸÈ™`6ˆ"€eï‘Õ[£Eë*‡~@ŒŸ2­ä±'¹ÿ?‘3!gƒ  ˆ”­—?ü*ÚwëïÀ8¡e›.±sw]áÈ~ìþÿBΆœf% € P–޽ÍAð3×\?¥¿Ò¦sO÷ÿrF˜•€"€ @ٹ멕ø€_õâò5… ½úsïEÎ 3@(‹ßª‹sÿÒÃáð«Ú]Ø;>?x¨PdÄu7º÷¿"gEÎ ³@(yk÷îWŒv°ü®Ún)T¹ùŽÜ÷ß3#g‡  ˆ”´)-r œ”kþ^˜òÐÜ'Üóß‘³Ã DJú£¯ÎîPã08)«ûÄ¡/¾,Dyö…åîùïÈÙᣰD@€’Õ{èxyÀ)=nj¯¯¯ø²þ•î÷Èb–ˆ"€%çÎ'W8ÀNË]÷Ï®øòÜ‹öÈ“‘³ÄLDJÆ ïŠó:÷rxœ¶'>[ÑäáGç»Ï'!gIγ@( ÇÞæà8#-[WÅšõ¯Vl¹íîîóIÊ™b¶ˆ"€ÍîÁ|®=Ð0ÎíXoÿs[Eü®÷øäål1cD@€f³|Ç‘hß­ŸÃ: Át¬î;w×U\¹lÐ(÷÷älÉcÖ€"€ Ð,FÞì#]€†WÓgPÔíÝW1ñãû~ˆ6{º·§(gŒY ˆ"€ @“{lý»Ñ¢u•C: Qœ_Ó7¶mÿ "Èêõ¯º§§!gLÎ3D@€&³®®>º ðq.@ã:¯Sxåµ7Ê>€Œ“ûyšrÖäÌ1{@@hwÍ_á`h-Ût‰EϾX¶ñãÐ_F«vÕîåÈ™cö€"€ ÐèVìø&ÚV÷u(4©é³æF}}}ÙÏ<ïþ¡œ99{Ì`@DÕØ{u 4‹ñ“§Å7ß~[6ñ㇎E¯þÃÜ»³Ç D@ Ñ,ÞZ­Úws4›®½Ʀ-[Ë"€Ü?ó÷¬äìÉd€"€ Ð(.¿îq@³kѺ*n½ë¯qäÈ7%?^ݸùÄÏé~5œœAf1 ˆ"€ nΪ­à€’RuÑ€øÇë›K.~ì?p0:V÷qAÎ"3D@€³®®>ºôîð (ISn¿/õuIÄcÇŽÅÐk&¸/$gQÎ$³D@€qûã/9xJZÛ .Ž=}Ñlñ£nᄌbèµîG#Ë™d6€"€ pÆ–ï8mª|” PÎéP·ß3#ví©kÒø±fý«ÑöÂ^îAÈ™”³ÉŒD@àŒL˜þ„7 ì´lÓ%ÆO™Û¶بáãè÷ßÇ´{gzÍ›XÎ&3D@€Óöò‡_ÅŸÎïé° (k½ú‹f>›ß|ûÄwt4ÄõáŽO⯳ zô÷7ƒœM9£Ìj@DNËØ{uÐTÖÇ'uîco¼-–¾´2ê>ÛÇ?éè±wßþ˜·`q\:p„ײäŒ2«@@8e/nÿ"ÎéØÃ!Pñ•Õ¹{¿0d̉0r÷ô‡âÑ'žŽé³æÆ7ßW5}ÅŸ:v÷z•Ú÷½ü8£rV™Ù € ˆœ’kïø›6JZÎ*3D@€“öü¶ƒqv‡‡k”´œU9³Ìn@DNʨ[f:X ,äÌ2»@@øCϽ³/Îj×Õ¡e!gVÎ.3D@€ß5|êtj”•œ]f8 ˆ"€¿iñ[uѲmµÃ4ÊJήœaf9 ˆ"€¿jÄMu@YÊf–€"€ ðÿ¼¸ý‹8»CC4ÊRΰœef: ˆ"€?3aúÐ(k9ËÌt@Dþ×êG£MU‡g”µœe9ÓÌv@DN¸cÞ2gT„œif; ˆ"€±®®>.è=Ø¡!gZÎ63D@ àf½ô†3*ÊÌ_7ã@@Š®×q˨(9ÛÌx@D€{ò8( "åŒ3ë@@ jÐø;’P‘rÆ™õ € ˆ´ô_û£eÛj‡dT¤œq9ëÌ|@D€‚¹á¯O:  ¢å¬3ó@@ d]]}tè>Àá-g]Î<³D@  f/Ûä` €BÈ™gö€"€ Ä€koq(@!äÌ3û@@ à…m}ù9…ú2ôœ}Þ€"€ T¸I3: Pröyˆ"€ PÁò‹`;õè0 €BÉÙçËÐ@@*ØßV¾é €BÊè½ ˆ"€@žyœæ €BÊè½ ˆ"€@zéý/ã¬v]‚PH9szOˆ"€ Panš³Ä…–³Ð{@D€ ÓýŠÑ¿(´œ…Þ€"€ T%oïuð?Ê™è½ ˆ"€@…˜<ûi‡^ü¡ók.‹1ãoŠf>sç-ŒÅK—ÅÊ5bã¦7cÛöb÷žÏâðW_DZcÇâËÇcçîºø×¶÷ãµ7¶ÄòÕëcѳ/ÆÜÇÆ}Ή‘µ“£cu¯+Ö%'g¢÷ € ˆ¢kÿ‘½ø™<Y;)fÍy<Ö¿²1ö8qÕíݫ׽ÓgÍ¡×Lˆ6{zý±þhV9½7D@¨Ï¼¹ÇѲM—2jü‰«¾î³½Ñ\W}}}|²sW<±`Iôì{i¬?ëæ‘³Ñ{@D€27ñÁ§vT‹ÖUqåÕccáâçã󃇢¯=u{ã±'Å¥ý–’õgýÑtr6zˆ"€ Pæºôæ°«`òßlrá³±oÿ(§kç®=1ç¿žŠ‹û u­?ëF•³Ñ{@D€2öô–º dÄu7Æ[5p½òÚ¦¸|èµî«õgýÑhrFz¯ˆ"€ P¦&LÂ!WŒ75þùîö¨Äkã¦7cÐÕcÝgëÏú£ÁåŒô^D@ L]xɇ\üý µo÷Þÿ0Špm~óízÍ÷Þú³þh09#½WD@(C ÞøØWÿ÷îø$Šxm}çÝ8ì:ëÀú³þh9+½gD@(3“g?íp«ÂtêÖ7V­ÝE¿êëëãé%/Fëó{ZÖŸõÇÉYé= ˆ"€@™é5dœÃ­ rÓ´ûãðá¯Âõ×¾ýNü6‚õaýYœ®œ•Þ3€"€ ”‘;¾‰³ÚV;ܪÝ.¹26mÙê´ùw®•k6œøíëÅú³þ8U9+sfzïˆ"€ P&f,ý‡ƒ­ 8”›>kn|÷ÝQ'Ì'qåo'L½ý>kÇú³þ8e93½wD@(WOîP«Œ_Ó÷Ä—-»NýZÿÊFßÍ`ýYœ’œ™Þ;€"€ ”‰Ý8Ô*SýŽý>w’|׎?š>ƒ¬'ëÏúã¤äÌôÞD@  ,Üô©­25å¶{ãè÷ß;Anˆ$úêëY;ɺ²þ¬?NJÎNï!@@JÜÔ¿-v˜U†ß·0ÑsNø:^_â{,¬1ëÏúãäìôD@ Äõ~ƒÃ¬2Ò¾ªw¼±å-§Åx-_µ>þÔ±»õfýYü¦œÞC€"€ ”°UŸ|­Úws˜U&.ê;8þ‡½{q·zÚ=þg¹l{“Ñjé^JB$‰ä’bS¹$Ý\Š¢ %åVèŠØü""*‰t•j­îµZ«õ9Ú¿}~{oÑeÍ5çó5žçõ<ç9çw~ÛžsÌñÏçm͹eë6âfX«X—µ»Ú¾³ÿì?~Wzv¦g¨» ˆ"€@‰znÞ2ƒ¬r>÷ì;vÖ˜ 7ãZ¿aS´nomÿÙü¾ô u—D@(Qw>>Ñ« tîÙ7vÖÔšBÛö%$=CÝ%@@JT‡ëb>[²~Ù˜†Ð=í?Ëþãߤg¨» ˆ"€@)þþdžº8§eµ!V ërÍÍQS»Ë¸Ö†›+nmÿÙü±ô MÏRw @D€óÒ¢o °JX×^ý ŸKp}y‡kì?Ëþã_Ò³ÔD@ ÄÜÿì Ã+ÿæ½uŠkã¦-Ù¡í?û“—ž¥î € ˆ%¦ç€¡†W%¨Uu÷غí7“Þ^«ø1þÖªƒýgÙ{–ºS€"€ ”·6Æù—w5¼*1¹èÊøúÛïMxË`-X¼4ÎjQeÿYö_…KÏÒôLu·D@| DÌøâƒ«ôöÜù&»e´ž{qªýgÙ{¦º[€"€ >„P"›2ÏЪÄ<=v¢‰n™­ÆÆÆ¸ûïØ–ýWáÒ3ÕÝDñ!€qÓ}OZ•[ïº?Ž9b¢[†ëà¡CÑýú[í?Ëþ«`é™ênˆ"€ø@‰¸¬SoC«Ñéê›bï¾ý&¹e¼~ݶ=.½²‡ýgÙ*=SÝ-@@B(ﮩ5°*-¯è6n6ÁÍ`­X¹ê؈Û–ýW™Ò³ÕDŠì…÷¿4¬*ï-Xbr›ÑziÊ ûϲÿ*Tz¶ºc€"€ @‘ {a–aU H?^låµÒïhôê3Ðþ³ì¿ ”ž­î € Pd~½øZUwšÚ]&¶®õ6Å_[µ·ÿ,ûÏ¡ˆ"€Í­úš[ «ŠlÉÇÿ0©ÍxMŸù¦ýgÙ&=[Ý1@@ ˆ–lnˆs/ngXUD÷Ê„6óÕØØ}n½Çþ³ì¿ ’ž­é뮈"€E2ó‹ UEtEÇ^±gï>Ú X›·üç_ÖÑþ³ì¿ ’ž±î € P$ÏÌþȪˆ>[¶Üd¶‚Öì·ß³ÿ,û¯‚¤g¬» ˆÉ=O¿lHU$?>ÚD¶W¿÷ÚVÅï¿J‘ž±î € P$× |Ъ.hÝ)jjw™ÆVàúñ§õqö…mí?«b÷_%IÏXw @(’V®3¤*‚ISfšÄVðþÄûϪØýWIÒ3Ö]DŠàƒŸ÷PAU§k£®®Î¶‚×ΚÚc…aÿY•¶ÿ*QzÖºs€"€ @3{åãÕ†SEðÞ‚%&°V¼4e†ýgUÜþ«DéYëΈ"€ÍlÔ¬%†SÍý}ð}nÆÆFÓW+ª‹6zÙVÅì¿J•žµî € ÐÌþ>þ5éföõ7ß™¼ZÿZs?XlÿY³ÿ*UzÖºs€"€ @3ë7ôéft÷}ÃM\­[é¯1zÞ8Àþ³²ß•,=kÝ9@@ ™]Õï^éfrîEÕ±qóVWë¿Öò+í?+ëýWéÒ³ÖDšÙezN5“a>mÒjpÝ4`°ýge»ÿ*]zÖºs€"€ @3Z²åHœÓ²ÚpªœÕ¢*Öýü‹)«uÂõÉg_ØV–û6Çžµé™ëîˆ"€Íä­•¿L5“Ûî~À„ÕúÓÕµW?ûÏÊnÿq\zæº{€"€ @3yiÑ·†RÍdÙò¦«ÖŸ®wß_hÿYÙí?ŽKÏ\w@h&O¾¶ÀPªôè}›ÉªuR«¾¾!.ïpýge³ÿøÿÒ3×ÝDšÉ½c¦J5ƒ÷|h²jôšòêöŸ•ÍþãÿKÏ\w@h&}ÿ>ÒPªÀª:_ ¦ªÖI¯}û÷Ç…—w¶ÿ¬²ßü»ôÌu÷D@€fÒµï`C©›>óMUë”×èg_²ÿ¬²ßü»ôÌu÷D@€fRÕýfC©jyE—8pà iªuÊkûŽqîEÕöŸU¶ûßù‹¬£Ï\w@h&-Ûö0”* Gžk’jöºcÈCöŸU¶û߉’GŸ¹î € ÐLÎnéßð-¤¯¿ýÞÕ:íµ`ñRûÏ*ÛýÇKÏ\w@hü´ß@ª€ª»^o‚jѪ««;í£¶ÿ¬bî?N,={ÝA@@ Àf¯ØjU@Ͻ8ÅÕ:ãõàc£ì?«ìö'–ž½î € P`S–®1Œ* _6n2=µÎx}±üûÏ*»ýlj¥g¯; ˆØsó–FH¯>MN­&YG㊎½ì?«löò×YGŸ½î € P`OÍXhU 3ÞxÇäÔj²õ̳/ÙVÙì?þXzöºƒ€"€ @=8q¶aTœÓ²:jwí65µšl­]÷³ýg•ÅþãÏ¥g¯; ˆØ=O¿lU·ß3ÌÄÔjòÕõÚ~öŸUòû?—ž½î € P`ýcUóæ/6-µš|½øÊköŸUòû?—ž½î € P`×ßýˆaT;«EUÔÔî2-µš|}¿z­ýg•ôþãä¤g¯; ˆXÏC £šXÞ·™”ZYGã’¶WÙVÉî?NNzöºƒ€"€ @]u˽†QMlì “MJ­‚­{|Üþ³JvÿqrÒ³×D ¬sŸA†QMì˯¾1%µ ¶Þž·Àþ³JvÿqrÒ³×D ¬Ãõ £šÐù—uŒúúSR«`kûŽöŸU’û“—ž½î € P`Õ×ÜjÕ„n¿g˜ ©UðÕµW?ûÏ*¹ýÇÉKÏ^w@(°6ÝûF5¡o¼c:j|7Ñþ³JnÿqòÒ³×D ì²Î½ £šÐ†›MG­‚¯Ï—}eÿY%·ÿ8yéÙëˆ"€vIû^†QM¤m—ëLF­fYuuuñ×Víí?«dö§&={ÝA@@ À.¬ênÕD†=6ÊdÔj¶uÓ€ÁöŸU2ûS“ž½î € P`ç_ÞÅ0ÊïXe¸þówì?«˜ûS“ž½î € P`¹Äט4•+W™ŠZͶÞ[°Äþ³JfÿqjÒ³×D ìì ÛF5³[TŃME­f[?¯ß`ÿY%±ÿ8gÆÑg¯; ˆ˜ATÓèØ£‰¨Õ¬ëHccü­UûÏ*úþãô¸ƒ€"€ €R† a"z ë·í;â¾ü:fÎy7ƽðrÌ~û½X¾be쬩õâœÂº¶ïöŸýWôý‡ˆ"€ €dìåé³LCÿ`ÕîÚÏ¿4-®¾a@œYÇ?|-[^ÑåØ`uêŒÙqà€¯uú£õØÈqöŸýWôý‡ˆ"€ €dìó/¾6 ýµiËÖ1r|üµUûÓz]Ó0zì “cÇÎ/æï¬9ï¼oÿÙEß € ˆHÆvíÞcúƒçÁÕ]®÷BØEÛç´¬ö@@@\ ü Iè?׫³Þj²ëþDþÖªC,X¼Ô‹ýÏõø¨g½ö_ÑV×kûy € ˆH®žóBÅA××ǃjÖ×ýÙ‰S¢±±±â_û·æÎ·ÿì¿¢­;ï}Øs@D@@r5uÆìÊþœºº¸¡ÿ ¢¼öC†Ž¨ø!ôËWØö_ÑÖÏ<ç9 €€"€  ¹Z¸¤²¿çá#‹úú§¿’×/6Ùö_ÑÖ”Wßð@@@\­\µ¦rsáõ·ŠþúŸÕ¢*}øIž»wï±ÿì¿¢­ù‹?ö@@@\mßQS¡_½ôMœÓ²º$Þƒó/ík×ý\‘ïC}}½ýgÿm}³r•瀈"€ €äè/]Y‘¿°õ×mqIÛ«J꽨îz}ìªà¿†°ÿì¿b¬ß¶ïð,@@@]ÙµwÅ <46FÏ”äû1`ÐPuÀþ³ÿšùý(•¿Ä@D@¤ õ¹õžŠx¾óÞÂ’~O>[¶\%°ÿì¿f\U¯ó<@@@ÜÜ?ü©Št:TWtìUÒïÉU×õ?öo¥[öŸý×<ë†þƒ<@D$7ã'¼RQƒÎ_y­,Þ—ôW–ýgÿ5ÏúûCOz € ˆHn^Ÿ3·b†œ5µ»â‚ÖÊâ}iÓ©WÔÕÕ)öŸý× kô³/y € ˆHnÞ}¿rþMïGŸWVïͤ©3UûÏþk†5aòtÏD@@ÉÍÂ%K+bÀ¹eë¶8û¶eõÞ\xyç8pð r`ÿÙ^S^}Ãó@D@@r³ôË*äßð~µ,ߟ¹ï/Rì?û¯Àkæìw<@D$7Ë–¯¨ˆg‡î}ÊòýéwÇ}êýgÿx½5w¾çˆ"€ €äæÛïVg?Ü\¹jMÙ¾?ék“¶ï¨Qì?û¯€ëƒ…y € ˆHn~øñ§ì‡›z¶¬ß£)¯ÍVì?û¯€ëÃ¥Ÿy € ˆHn~Ù¸)ëÁfCCC\Òöª²~®º®¿Š`ÿÙ\Ÿ-[îy €€"€  ¹ÙöÛö¬›ú?Y¼O?þ´^M°ÿì¿­¯¿ùÎó@D@@r³k÷ž¬›Ã}:‹÷éù—¦© öŸýW µjÍZÏD@@ÉÍ¡CuY6;õì›Åûtë]÷« öŸýW õóú ž ˆ"€€’›#Ù58g·¨Êâ}º¸ª›š`ÿÙZ›¶lõ<@@@ÜÔÕåû ËW¬Ìê½Ú¼åWUÁþ³ÿ ñ ¿lô<@@@ÜìÞ“ïo€L1;«÷êƒE© öŸýW€µú‡=@D$7¿mß‘íPsȰY½W£ÆMTì?û¯ëëo¿÷<@@@ÜlÜ´%Û¡f»«nÈ꽺±ÿ UÁþ³ÿ °>ÿâkÏD@@ÉÍÚu?g9Ðܳw_œ•ÉPÿ¯ó/í˜õÖÛö_±ÖGŸ|îy €€"€  ¹YùýšL¿Ó]–ï׎5ê‚ýgÿ5ñJ¿oây €€"€  ™ùbù7Y4—-_‘åûõóú ê‚ýgÿ5ñz{î|ÏD@@ÉÍ'Ÿ-Ër ¹pÉÒ,߯+W© öŸý×Äkæœw=@D$7‹>ü$Ëæì·ß¬,ûÏþ;©5åµÙž ˆ"€€’›¹ï/Êr 9yÚëY¾_óæ/Vì?û¯‰×„ɯz € ˆHnÞxk^–ÍÑϾ”åû5sö;ê‚ýgÿ5ñûüdÏD@@ÉÍs/NÍr 9ü‰1Y¾__~U]°ÿì¿&^ éy €€"€  ¹öب,šwÿý‘,߯§ÇNTì?û¯‰×M{ € ˆHnn¾ýÞ,š?˜åûõä3Ï« öŸý×Ä«]·Þž ˆ"€€’›öÝoÌr 9ô‘‘¾²Ì²ÿì¿?]qÞÅí<@D$7ç]Ò>Ëôȱ²|¿¦Í˜£.Øö_®5µž ˆ"€€’«šÚ]Ù 5'L~5Ë÷êíy ²{¯ì?û¯hë»U?x € ˆH®V­Y›ÝPsæìw²|¯–|üìÞ«={÷Úö_ÑÖ¢?ñ@@@\å8Ô|oÁ’,ß«/¿þ6»÷jãæ­öŸýW´5}曞 ˆ"€€’«Wg½•ÝPóÓÏ¿Ìò½úáÇŸ²{¯¾Z±Òþ³ÿü^‹ ˆ MoÔ¸‰Ù 5W~¿&Ë÷jë¶ß²{¯Þyo¡ýgÿmÝý÷G<@D$Wi˜ÛJƒÚÜÞ§³[TÅ¡CuÙ½WÏ<û’ýgÿm]}ÃÏD@@ÉU»n½#ÇuqU·¬Þ§®½úe÷544Dçž7Ûö_Ñößy—´÷@@@\Õ¢*öíߟÝp³ÿ÷gõ> {lTvïÑëÖÛö_Q÷Ÿg€ˆ"€ €dny†?D=~Â+Y½G³Þœ›Ý{ôîû í?û¯èûD@@ÉØ«¯¿•ÝpóÃ¥Ÿeõ­Z³6»÷è©1/Øö_Ñ÷ ˆ"€€’±†Ìn¸ùÛöÙ¼?ç]Ü.êë²{nì?Èþ³ÿоÿ@@@Œu½6¿8N«uû«³xzÝ40»÷¦±±1Z´îlÿÙEß € ˆHÆÎiYuuuÙ 9~0‹÷ç‰gžËî½Ù¸y«ýgÿ•ÄþCD@@2÷ýêü¾ãÿõ9s³xo>ùì‹ìÞ›…K–Úö_Éì?@D$c³ß~/»!ç®Ý{âÜ‹ªËú}iUÝ=òûý…q/¼lÿÙ%³ÿ@@@Œ=úÔ¸,‡¡Ü¿†èÉgžÏò}¹õ®ûí?û¯dö ˆ"€€’±N=ûf9è\°¸¼¿êæ»U?d÷ž¤¿(øÏ ¶ÿì¿bî?@D$s¿n۞ݰ3ý¸ö…——ç°³c>YF¯¿ùÎþ³ÿJnÿ!€€"€  {óݲx>4♲|?&¾üj–ïdz§Øö_Éí?@D$c÷<ðh–Ï/¿ú¦ìÞ‹³ZTÅæ-¿fù~\ÓçvûÏþ+¹ý‡ˆ"€ €dì¢6ÝâHcc–CÏkûÞQVïÅ¡#²|víÞg·¨²ÿì¿’Û € ˆHæV~¿&ËÁ犕«Êæ=øËEWƦ-[³|>Xô‘ýgÿ•ìþCD@@26aòôÈuÝý÷GÊâ=xjÌ Ù¾ÃeÿÙ%»ÿ@@@ŒõîwW¶ÃÏ›¶Ä¹U—ôëßòŠ.Ǿ¦'×uy‡kì?û¯d÷ ˆ"€€’±sZVÇÞ}û³€>9úù’~ý_ž>+Û×~ÝÏ¿Øö_Iï?@D$s‹>ú4Û!hú·ÛÓ¿å^Н{U§k£®®.Û×~êŒÙöŸýWòûD@@ÉØa#"çµèÃOâ¬U%õš§¯FZ¾beÖ¯ûµ}ï°ÿì¿’ß € ˆHÆþÚª}ìß ëaèø ¯”Ôkþúœ¹Y¿Þ7oµÿ쿲Ø € ˆHæÞž· ëè‘ÆÆ0hhI¼Öß¹¯ “§Ûö_Ùì?@D$c} É~(š~l»c>E}{÷»+××gÿZ·ï~£ýgÿ•ÍþCD@@2vv‹ªØöÛöì£?ÿ²1Z´î\”×øŠŽ½bgMmö¯ñÊUkì?û¯¬ö ˆ"€€’¹—§ÏŠJXk×ým»\׬¯m÷ëo­¿n«ˆ×÷‰gž³ÿ쿲Û € ˆHƺöꕲjw펛 n–×uÈÐqðСŠx]¢UuwûÏþ+»ý‡ˆ"€ €dnÍÚu3„NÃÒBþÛâék&M•´>ùì ûÏþ+Ûý‡ˆ"€ €dlÔ¸‰Qiëí¹ó£e›®Mú:¶nß3>ùlYŽ–÷=ø„ýgÿ•íþCD@@2vé•=âp}}Å N8ÓfÌ9öCÑgòúuìÑ'Þ|÷ƒÊx ì¨ßq臣/àWqx×Òøà­Gâ£÷‹/?~*VùLlü~|Ô¬ŸuÛ&“þÏéÿ.ý¿¥ÿ™ô?;oÎCñú´bÒ ƒãé‘÷Dý¡ÍÇÿwÛöß)¬={öÆßZupŽ € ˆ'öÖÜùQ©«¾¾!Þž· :õì{J¯Y¯>cñGŸÆ‘ÆÆÌ"LjÃ["­‰8ðEÄÞÅ»ßЍQóJaÕN?úŸõNľþg/?úÏðãÑ7h[DcýW)ûïÖ‹¯¼æü@@@þXçž}£±‚©i¥ÿþ7m9ö5BÓg¾7ß~ï±Áô­wÝO>ó|ÌœýN|¾ì«Øúë¶LþKލ?úA;¸2bf>rœ®]s"ö-8´úè?óŽTjì¿ ^u‡ûë5ç·ˆ"€ €ð§*ñ÷*k‰hØyü/;ö}zü¯:j¦”nðøSÓ"öÌ‹ØtßÖý|ô¿Þoq­Ùo¿çÜ@@@NNŸÛ›ªæ¶j#~±wáñ¯—*ÛØq²_¡53bßÇu?ÿ*/+Û¿Öêнs[D@@8y«Ö¬5]-÷ßï¨[±ï“ˆ]¯ç<þÌî·ÿŽÉáÍõöG&kÉÇÿp^ € ˆ§fȰ¦«eõ¯Â×î§!öWzðøÓ¯Ìšü÷NÒWYe»®¿ùN絈"€ €pjξ°mlÙê–K;zލû)bï’ˆÚiÂÆiÿ¨úëû??þ#ðÑh_•ÉZ±r•³ZD@@8=OŽ~Þ”µä¢GÝñߵػ(¢fªxQˆßÙÿYÄá-bH‰¯;†<äœ@@@NÏù—vŒ;kLZ‹=Fú!bš)"E³Åûÿqü«Åâˆ}XBkíºŸã¬UÎiD@@áô=üøhÓÖ¢EÕ{>=J"†¼±ïӈÛüeH ¬~ïu> € ˆgø[ -ªâÇuëM\›e‰8¼!bïbÑ£Ô¿&+ýØ|C­-[„õÉgËœÍ ˆ"€€BӸ县›ºr5ÔDì_v|°.0”—Ýsÿ¥Núm«ð‰ðÈ‘èܳ¯sYD@@h:Ÿ~þ¥ék“~ÅÕ¡ˆC«"v¿#"daZľþù{!¾"«PkÖ›sÇ ˆ"€€BÓêrÍÍÇþík댪GÄá{?Œ¨™*äj׬ˆ_E4ì¶å›píÛ¿?ZUww € ˆMï·æ™ÂžÖ÷öˆ8ðuÄ._qUqö¼Q÷óñßw±Îh}~²sXD@@(Œôo_ïßÀ$ödWý¶ã_‹äÍÙõzÄÁÇc˜uÊkë¯Ûâ¼KÚ;‡@D„ÂóÜ$ÓØ?ü–«†ˆC?úmN`jľ¥õ;|VNa :Âù+€€"€  Ö9-«ã»U?˜Èþ××\í‹8°<¢v†!?'ùõXs#ê~òõX²ô©³WD@@h®¾)êêêLf}ÍÕÖˆ½K|ÍgðõX3#øz¬ß[5µ»üð¹ˆ"€ €Ð¼FŽPÉßsQ·.b÷Û†÷4ý×c5Ô*ÿ\wÝ7Üy+€€"€  4¯³ZTÅ—_[aãØôûk"vÍ6¬§°Ò_Uøï„Ì}‘³VD@@(޶]®‹ýû+àk{ë#~±ëuƒyš9„,ˆ¨ßVqñcÛoÛ£å]œ³ ˆ"€€Bñ<üøèŒÃG]ÄÁµ¯ÄSäL?âðæŠ ýî¸Ïù*€€"€  ß'Ÿ-Ëkúš~ŒúÀ—µÓ Þ)-»ß8¼!ëøñúœ¹ÎUD@@¡4\ÖîêØ¾cgácoÄþÏ#j§´Sâ!ä툺ŸÒŸ)e?~üi}œiG窈"€ €P:zõuuueúUW#öÿODÍTƒuÊË®9u볈»vï‰ê®×;O@@@(=èÉ2 ‡#|í«®Èà/BæFÔo-ÛøÑÐÐ}nì@D@@¡t½<}V9|×UÄ¡Uµ3 ÎÉËÞ å÷utçü@D@@¡´Ý¢*–þ£T½1¢n]Ä®7 ÊÉÛ¾ÿ¦=GD@@h:-ZwŽŸÖo(­)ëáMÇ8ÚpœŠ1õøoۤ߸)ÑõåWßÄ9-«› €  ”vÝzÇî={Š?a­ÿ-bÏû†áT®ô7VD4Ö—TüØ´ek\\ÕÍy)€ˆ"€†På§Ï­÷ÄÁC‡Šô3û"ö}hø ÿ !3#ýpü«àмjjwEçž}“ €  €”¯› næÒqðÛãÿÖ»¡7ü·ÝïFÔï(jüèÚ«ŸóQD þä¶Áqà`3üAú]s ¸ádìÿGDã¡f]®¹Ù¹(€ˆ"€H^_‡U°rdoÄÞÅÚpÊ_‹õZÄ¡5ÍòµX¾öJDlÝØPÓFÆôuW+"j§dÃ-Öö‚Å5µâ‡ ˆ y»!EMAoŒØ5ÛàJük±v쬉N⇠ˆ • ÷-wÇž={Oóë®öDì]dP eðµX¿nÛ®¾É¹'€ˆ"€HåhwÕ ñÓú §ò}W‡Vùº+h¶¯ÅšÑP{Úñã«+£Uuwç ˆ •ç‚ÖbÉÇÿ8¹9ßó¾44»i¿=å¿™õæÜ8÷¢jçœ ˆ •ë¬Uñ¤iÑØx‚kú*žÚéÑPL{Ò_ƒìúÓðQ_ßßãl@D@„ÿu×}ÃÿýÇÑì‹Ø3ßàJê¯AVžð¯AvÖÔFï~w9Ï@@@á?u¹ææØ¸ykÄ¡µµ¯8CIþ5ȼˆ†Ýÿ?¾_½6®èØË9&€ˆ"€¿çòvâó%O0C©«M ò]Ô××DŽɯÆy·s† €"€ €Âïyà[bÏÆ –¡Œü°||tèÖÍ&€ˆ"€ÿéÂÖíbÑ»&C™:ôë¤x|Äç™ ˆ ü¯½®Žß7D† ,xgx\pÙ•Î6@@*Û#Ão‹ºm“ Ž!#¾ÝzöpÆ €"€ €RyοôÊxï͇ ‹!ã¯Äzè¡þÎ;@@*G—ÝãçoÇCxgÖƒñ·VÕÎ>@@ò6tè-qpë$ƒa¨ ?~=&:^ÕÍ(€ˆ"€H~þzIu¼5s˜a0T¨[^Š!÷Þì<@D@$í»v¿c ÄëÓˆó.nël@D@¤¼ÝÐ÷ÚØ½a¢Á/ð/+>—TupF €"€ €Rž† éuÛ&øÿeãwãýu˜³RD²2zÔѸÓ8±]¿LŒÞ7õrf €"€ €Rúξ°êØwüî'#ý•Xúk1ç§ ˆˆ!TÉ:ÿÒ+ãã3ÔNIúk±±ÏÜé@D@@¡ô\ZÝ1¾_6Ê08m³_ç´¬r¦ €"€ €P:u¿*¶¬~Ö8cŸ.|<.¸ìJg« ˆÅuCßkcφ‰·@“ùaù踼]'g¬ˆ"€ €P¼øqpë$[ É¥¿*kÓ¡³³VD@@h^×ÝxMØò’A-P0¿ï/A@D„æÓ󺞱wÓ‹´@Áý²r\\VÝÑÙ+€€"€  V÷^=üæЬ~Z16ZUup € ˆ…ÑõêîQ»~‚,Ðì~üjL\ܦ½³XD@@hZ®ê5?‹@ñ¬þò™hy…"€€"€  4‘v]»Æöu/ÀE÷ý²QqaëvÎfD@@áÌTwî¿þðœÁ+P2¾ýìé¸à²+Ñ ˆ"€€Âéiyy»ØøÝxW ä|ñÑ“qNË*gµˆ"€ €pjÎnQŸ.|Ü (Y3§Þï¼@@@Nͤ°%ú;³@D„“3èž› V²pø·ÉqÝ×8»@D„?Öõêîq`ËK«@ÙØñÓ qy»NÎpD@@ÁžyYùù¨8ïâ¶ÎrD@@ÁžyygÖƒÎsD@@Ážùyò‰Ûé ˆ"€€Âqwò£ç@Žìx9úÞr³]D@@*ÝEW´šõ NlüúÃsqþ¥W:ã@D¤’Í™1ÔÀÈÎô—ïsÆ € ˆH¥ê}S¯hÜiP äùUXW_wµ³^D@@*͹-ÛÆºc Jl­þâ™8ûÂ*g¾ˆ"€ €T’±£ï2 ²÷ôSù ˆ"€€R)ª;w‰C¿N2²w`ËKQÕ¡³³_D@@*Á§ 7*ÆÒù#œý ˆ"€€’»ÁCúˆçžÁ}=@D$gÛ|Þ0¨8¿=û<@D$cû6½h Tœtöy € ˆHƶþðœa(PqÒÙç €€"€  [ûÕhÃP â¤³Ï3@D@@2¶|éS†¡@ÅIgŸg€ˆ"€ €dlÞœ‡ CŠ“Î>ÏD@@ÉØ˜Qw†'}ž ˆ"€€’±Ûn¿Á0¨8éìó @@@ŒµéÐÙ0¨8éìó @@@ÌÕü<Á@¨éÌsö € ˆHx}Ú†¢@ÅHgž³_D@@*@ï›zŠ#yÎ~D@@©gµh[×90¶¿l (}öÓà,@D@$K½oê›W=k $}æÓgß(€ˆ"€HÖþÖª:¦Nº/Žìð× ³ôOŸõô™wö €"€ €R1®¹¾g¬ýj´A1d(}¶ÓgÜY'€ˆ"€HE:·eÛ7ú®¨Û6ÙÐ2>Ëé3>ÛÎ8@@*^‡nÝbùÒ§ ¡Œ¥Ïpú,;Ó@@@áÿ8«E›xdøm±wÓ‹†ÉPFöý̦Ïnú ;Ë@@@áZ·ë¾÷¨Á2”ôYMŸYg— ˆ œ¤;îêë¿gÈ %(}6ÓgÔY%€ˆ"€§áœ–Uñè#·ÅΟ^0t†>‹é3™>›Î(@@8Cç_zec鳿ÌAD@„fv}Ÿ^ñõ§# «¡ ¥ÏTúl9c@@@@¡Èî¼»O¬ZöŒá5œôJŸ%g  ˆâC%ææþ×Ç狟0̆S>3é³ã AD@@(q=z]¼õpÙáÇÒá÷¤ÏFúŒ¤ÏŠ3D@@¡ÌTwî3§Þ‡~dè G¥ÏBúL¤Ï†3D@@¡Ì]RÕ!&<{Oìúe¢!8)íýôHŸg ˆ"€€BfþÖª:ž|üöغæ9Cq*BÚëiϧ½ï @D@@ÈÜ9-«âîA7Å' FÄ‘~'„Ì~ßãèžN{;íñ´×}æ@@@*P›ãùñƒbëþ*„2ÿk£{8íå´§}¶@@@8æìUqë€Þ±hî#Q¿}²:e!íÕ´gÓÞM{ØgD@@º´ºcŒugløn¼!;%)íÍ´GÓ^õ™ED@@à”õ¹ùÚ˜7硨Û6Éà¢J{0íÅ´'}6@@@2²xS½!EÓòòvñàƒýãÓ…ûŠ,šõ+®ÒžK{/íAŸEŠ%=ƒÝE@@ @Þ[»ÇŠÒˆ!W´aÃúÇ' Fˆ!$z¤½•öXÚk>s”‚ô vD@€yså6C(Jò/C†½%–·C8=iï¤=”ö’¿ô ¥g°» ˆÈŒeë ¡(ùòÀ·ÄÇ<&†pRÑ#í•´gDJ]z»‹€"€ @¼òÑ*C(ÊÆ…­ÛÅý÷÷‹Eï>{6L4ð瘴ÒžH{#íŸÊEz»‹€"€ @L˜ÿ•!eéì «¢× ×Äsc? Û_*Dz¯Ó{žÞû´Ò^ð™ ¥g°» ˆÈØ·>5„" \ve ¼óƘ9õþØðÝx¡ 3é=MïmzÓ{mÏ“ƒô vD@€yêµ…†Pd©m§.1üá[c¡¯Ë*Û¯µJï]zÓ{iO“£ô vD@€6á C(òÿº¬UÑ«wÏxê‰ñÁ[ÇæUÏŠ %&½'é½IïQz¯Ò{fï’»ô vD@€¹eØhC(*R«¶Ž}Ò‹ÏŽÏ—<{7½(D4“ôZ§×<½öé=Hï…=I%JÏ`w@(Î}BÁQgµhº_Æõ7^} Ö|9:ŽìðÃêg*½†éµL¯izmÓkœ^k{Ú{»‹€"€ @\XÕÝ Nào­ªãº¯‰ìS^º7–οGv #ÿ:޾&éµI¯Qz­Òk–^»ôÚKðûÒ3Ø]D àýu{  à4œwqutëÙ#† éϼ=<Ö~5:ê¶MÊ>t¤ÿŽé¿kúïœþ»§× ½é5±7àÔ¥g±;  ˆ4±W>^møMücëWvîÞ=z[Lx3ch|²`D¬þò™ØñÓ %ý×#éŸ-ý3¦ÖôÏœþÙÓ‡ôß%ýwJÿÝü894­ô,v'D@€&öäk Ÿ ¹#É…UѺ]§¸úº«ãö;nŒáßÏ»ûØod,|÷‘c_!õÅGOÆ·Ÿ=?,¾ÛÖ>»~™‡~;O0Òÿ[úŸIÿ³éÿOúÿ›þw¤ÿ]égúßþ3ÒVúÏLÿÙéŸ!ý³¤¦ôÏæ=‚敞Åî$ € ÐÄœløeú\]Ñ>.o×é˜ôöTPžÒ³ØDšX[ï7|€"JÏbw@hB‹77Äy­:>@1ÿ¢ëè³8=“ÝM@@ ‰L^òÁ”€ôLv7D@€&rߨé†NPÒ3ÙÝDšH×¾÷:@ HÏdw@h 7ÔŹ·3t€žÉéÙ쎈"€gh₯ œ „¤g³;  ˆœ¡AOO6l€’žÍî( € p†Zw¹Ñ° JHz6»£€"€ Àxå£UMP‚Ò3Ú]DNÓm3d€”žÑî* € poª ®èfÈ%(=£Ó³ÚDNÑØ·>5`€–žÕî, € pŠ®½óaÃ%(aéYíΈ"€§à½µ{✖ՆKPÂÒ³:=³Ý]@@à$ }~–Á”ôÌvwD@€“°pC]´lÛÃP Ê@zf§g·;  ˆü‰á“Þ6P€2’žÝî0 € ðonˆKÚ÷2L€2’žÝéî.ˆ"€'ðø´÷ ’  =1ýw@ø=K¶‰Ö]n0D€2”žáéYîNˆ"€ÿaÔ¬%HPÆÒ³ÜDþEûëÈà¯@Ò3ÝÝDþé¾q¯@Ò3ÝÝDŽšóͯqîÅí 陞žíî8 € T¼ž†@FÒ³ÝD€Š6þÏ Š Céﮈ"€@EZøË¡hÕá:C"ÈPzƧg½; ˆgÐÈÉD±ô¬wçD@ ¢¼¸ð›8«E•ád,=ëÓ3ßÝD€ŠðîšÚhY}µÁT€ôÌOÏ~w @²öáÖÆ¸ªß½BPAÒ³?ÝÜ…@@ÈÖ½c¦@Jww!@2ýÝ~÷*ú÷@V¸€"€ Ùï~¬®ñ»à÷@ŽÝ Ü@@ÈÂüõ£Ýµ ~€cw‚t7pGD@ ¬-ÞTWÝâGÏ€ÿó£èGïéŽà®ˆ"€@YúpkcÜ0x„Að_Ò!ÝÜ™@@(;·?ú¼pBé®àΈ"€@YyàÙ™;ÀŸJww'@ÊÂcSæè'-ÝÜ¡@@𗀿D@héGLýæp¦¿ â‡Ñ@@(‹7ÕÇ ƒGÜg,Ý)ÒÝ D€¢š¿þ`\u˽6@“Iw‹tÇp×@@ŠâÝÕ5ÑîÚ5@“KwŒt×pç@@šÕ‹ WDËê« h€‚Iwtçp÷@@ .ý0é½c¦ÅY-ª f€‚KwŽt÷ðãè ˆ"€@á¾òjMm\ÕÏï}Eø]£wtq'@@šø+¯¾ñ•W@ |%Ö7îf ˆ"€À™[øË¡4r²¯¼Jæ+±ÒÝ$ÝQÜÕ@D€Ó2þÏ¢U‡ë [€’“î(é®â΀"€ œ´9ßü= 5\J^º³¤»‹;ˆ"€ pB‹6Žûƽç^ÜÞ@(éî’î0é.ãN€"€ üË’-GbÔ¬%ÑºË †(@ÙJw™t§Iww<D@¨`‹77ÄÓ?>€ìBHºã¤»Ž;ˆ"€ T…êbø¤·ã’ö½ I€l¥»Nºó¤»; ˆ"€ dì½µ{bèó³¢eÛ†"@ÅHwŸtJw!wBD@Èåk®6ÕÇØ·>kï|8ÎiYmT¬tJw¢t7Jw$wED@(C¯|´*n{x\\pE7€ÿîHé®”îLîŽ ˆ"€Pâ¿ë1qÁ×1èéÉѺË'ý£é7»C¥»”ß @@€bµÕ憘¼ä»¸oìôèÚwpœ{q; €3”îT]ûÞs쎕îZéÎåî €"€ P ï¯Û¯|¼:ž|mA 99zÜzœ×ª£!@¥;Wº{¥;Xº‹¥;Yº›¹£ € üÞ_olª÷Öî‰7Wn‹ËÖûîé ó¿:öƒœO½¶0†Mx#n6::÷Vu7|(1鎖îjéΖîné—îréN—îv鎗îzéÎç×@D@@D@DD@@@D@@D@@BDD@@D@@D@DD@@D@@D@DD@@@D@@D@@@D@@D@Dñ!@@@D@D@@D@@@D@@D@DD@@@D@@D@@@DøíÝ¿kÔwÇqNÎ!â¢8Ñ-8XN‚Kt£{ÀAšºêäRg²©ƒ-BP((¸F«Ð¥–PKèˆZ¥ïOù¶Cý•ïÝ÷{÷ù~¿áñ|¿îé}D@D@@D@@@D@D@@D@@@D@@D@DD@@@D@@D@@@D@@D@D@@D@@D@D@@DD@@D@@D@@@@D@D@@DD@@D@@D@DD@@D@@D@DD@@@D@@D@@@D@@D@DñG€"€ € ˆ"€  ˆ"€ € ˆ€"€ € ˆ"€  ˆ"€ € ˆ€"€t(€@  ˆˆ  € €"€€"€ € €"€ˆ  ˆˆ  € €"€€"€ €   € €"€ˆˆ"€€"€ˆ  € €   € €"€ˆˆ"€€"€ˆ  € €  ˆˆ  € €"€€"€ € €"€ˆ  ˆˆ  € €"€€"€ € ÞH € €"€ˆˆ"€€"€ € €"€ˆ  ˆˆ  € €"€€"€ € €"€ˆ  ˆˆâMˆ  € € ÐÐxÿX¢Å¼Ç@@@@A@@@@A@D@DDD@D@D@@@@@@A@@@DD@@@@@@AA@D@@A@D@D@@DD@@@A@DA@D@@A@D@D@@@DD@D@D@@@@@A@@@@DD@@@D@@Ä @@@@@@@@@DD@@@D@@@@@DD@@@¼‰@@DDD@@@D@@@@@DD@@@D@@DD@@@@@@@@DDD@@@@@@@@DDD@@@D@@.ºõLîþøÐP:ˆˆ€€  € ˆ    € € € €   €"€ € €ˆ€ € €€€"€ˆˆ€€âCd@@@@@DDD@@@D@@@@@@@@D@@@@@@DD@@@D@@@@@@@@@DD@@@@@@@D@@@@@D@@@/€"€ˆ     €   €"€ €  € € € €€€"€€"€ € € €   €"€ € €ˆ    ˆˆ€€  € ˆ    € € € €   €"€ € €ˆ€ € €€€"€ˆˆ€€  €  ˆ    € € € €     €   €âßDDD@@@D@@@@@@@@D@@@@@@DD@@ñ!2  €  ˆ    € € € €     €   €"€   € € € €€€"€€"€ € €ˆ€€ €€"€ˆ     €   €"€ €  € € € €€€"€€"€ € € €   €"€ € €ˆ    ˆˆ€€  € PâCä]aæÂ|¸.‡káF¸„'áYxÖÃVîP¹­â|U܆OŠ[ñvq;^+nÉ Åm9WÜš»ÜÞ €@‘£†ál¸VÂZø`ÈP³Åí¹RÜ¢g‹Û4ݨ=7; °ØÑ3áb¸VÃ[£€L½-nÖ[Å ›nÙ¾Û^ñX…p?lÑ4ÜFqÛ.·®o‰ €@G¢Ç¡â™ÊwŠg0É´Ùzqû¦øM€íz¬ÕlX ¯ `:îuqÏz\43|WÃ#>éMq3¶!@ ïè±?,†Æ,”ò¢¸¥÷Û GôØ΄‡á½á #y_ÜÖéÆÞms €ÀøÃÇ xvñ¦‘ µØ,nî €õ‡™pÏ€±J7øŒM€Õ‡ãá‘á •nòã6 Œ=záTxjh@Vž·zÏv@€í‡átX5, k«Åí¾Ã–@€/ǹð³! ’nø9›>ÓaÅp€FK7ý´€€ðñÝ÷SáRØ2 ¶ŠÊæ@ «ñc6üb @+¥[ÿ¤í€@—ÂÇp× €NH·ÿ[€6‡a1lÐ)›ÅØi €Ð¶øq$¼4ü ÓÒ&8b# €Ð†ðÑ áOc(¶AÚ=› €¦Æ½aÙÀ>!m…½¶M‹GÚQ|AÚ Gm(šòÈ«óá1lûbCx$ÙÆ}áBÚûl+r‹ÇÂoF0‚´)ŽÙX ä?Î…¿Œ5 i[œ³µ@˜tü¸b 5¸bs €0‰ðÑ72 Fisôm0Æ?¦Â²1ŒAÚS¶uÇ=᱌QÚ {l2êŠß„çÆ0i‹|c› €Puü˜¿]À¥M2m£ €PUüø6ünlHÛä[[ €*âdž‘ddC@`ÔÇ^ùæë7A< €¡~ðÜo~¹ÿ&ˆF@`ÛñcOxnL ¶Ë[€¯Å©ð؈$m˜)›€ÏÅ~X6ž€J[¦oÛ €ð©rÓhì¦m€ÀÿãÇc h+6ÿÆsFÐ"çl=¼âDZð—´HÚ8Çl>€îÆ}á7ãh¡´uöÙ~Ý‹½ðƒQ´XÚ<=@ [ä¼1tÀy@ ;ñãhxg¶ÏQ[@ ýñcoX3‚€Ih¯M €ÐîßýX6~€Zö{ í FÐa ¶!€@ûâÇ‘ð§ÁtXÚDGlD€öÄᥱðÏ6Úi+ ´#€,9ÿY´š?„Mà?i#°š@î7¹k3 47~œ4j>ë¤í €Ð¼ø1~1h>+m¦)@ Yä’1ðU—lH€æÄé°eÈ|UÚNÓ¶$€@3ÈŠ°m+¶$€@þñcÎx(mΦ@È7~ì?.¥¥-µÃ¶@È3€œ6Z†vÚ¶@È/~ôªÁ0´´©z6&€@^ä”±0²S6&€@^ä©¡0²§6&€@>ñ㸑P™ã¶&€@ä‘P™G¶&€ÀäãÇŒqP¹›@`²äžaP¹{6'€ÀäâÇÀ(¨ÍÀö@˜LY2Hj³d{ Œ?~ì› @mÒæÚmƒ Œ7€œ1FjwÆ@oyhˆÔî¡ €0¾ø±?¼7Dj—¶×~[@`<dÑ›E[@`<ä…06/lQ€úãÇaã`ìÛ¤õ«†ÀØ]µIê‹ýðÆð»´Åú¶)€@=dÖ蘘YÛ@ ž²dpLÌ’m €POympLÌkÛ@ úøqÈØ˜¸C6*€@µdÞИ¸y@ ÚrÇИ¸;6*€@uñ£Ö €‰KÛ¬g« T@F@6¶*€@5dÁÀÈÆ‚­ €PM¹o`dã¾­ €0züè‡  i£õmV€ÑÈŒq›@`´rѰÈÎE›@`´r˰ÈÎ-›@`´²jXdgÕf@>~ôÂ[à ;i«õlW€áÈA£ [mW€áÈ ƒ ['lW€áÈYƒ [gmW€áÈuƒ [×mW€áÈŠA­Û@`¸²fPdkÍv@(?v…@¶ÒfÛeà ” c {@ \™3$²7gà ” ó†@öæmX€rä‚!½ 6,€@¹rÙÈÞe@ \¹fHdïš €P.€Ü0$²wÆ@(@nÙ»mà ”  €ì=°aÊ'†@öžØ°åÈ3C {ÏlX€rä•!½W6,€@¹²nHdo݆@(@¶ €ìmÙ°€ € € € € € € € € € € €  € € €€ €  € € €€ € € € € € € € € € €âE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@€6ùÃ2pÁaNÄIEND®B`‚calamares-calamares-2d126ae/src/modules/packagechooserq/images/plasma.png.license000066400000000000000000000001501430147706700302520ustar00rootroot00000000000000SPDX-FileCopyrightText: 2021 pngegg SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/packagechooserq/packagechooserq.conf000066400000000000000000000051051430147706700274140ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Configuration for the low-density software chooser, QML implementation # # The example QML implementation uses single-selection, rather than # a model for the available packages. That makes it simpler: the # QML itself codes the available options, descriptions and images # -- after all, this is **low density** selection, so a custom UI # can make sense for the few choices that need to be made. # # --- # Software installation method: # # - "legacy" or "custom" or "contextualprocess" # When set to "legacy", writes a GlobalStorage value for the choice that # has been made. The key is *packagechooser_*. The module's # instance name is used; see the *instances* section of `settings.conf`. # If there is just one packagechooserq module, and no special instance is set, # resulting GS key is probably *packagechooser_packagechooserq*. # (Do note that the prefix of the GS key remains "packagechooser_") # # The GS value is a comma-separated list of the IDs of the selected # packages, or an empty string if none is selected. # # With "legacy" installation, you should have a contextualprocess or similar # module somewhere in the `exec` phase to process the GlobalStorage key # and actually **do** something for the packages. # # - "packages" # When set to "packages", writes GlobalStorage values suitable for # consumption by the *packages* module (which should appear later # in the `exec` section. These package settings will then be handed # off to whatever package manager is configured there. # # There is no need to put this module in the `exec` section. There # are no jobs that this module provides. You should put **other** # modules, either *contextualprocess* or *packages* or some custom # module, in the `exec` section to do the actual work. # method: legacy # Human-visible strings in this module. These are all optional. # The following translated keys are used: # - *step*, used in the overall progress view (left-hand pane) # # Each key can have a [locale] added to it, which is used as # the translated string for that locale. For the strings # associated with the "no-selection" item, see *items*, below # with the explicit item-*id* "". # labels: step: "Packages" step[nl]: "Pakketten" # The *packageChoice* value is used for setting the default selection # in the QML view; this should match one of the keys used in the QML # module for package names. # # (e.g. the sample QML uses "no_office_suite", "minimal_install" and # "libreoffice" as possible choices). # packageChoice: libreoffice calamares-calamares-2d126ae/src/modules/packagechooserq/packagechooserq.qml000066400000000000000000000206461430147706700272670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ import io.calamares.core 1.0 import io.calamares.ui 1.0 import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.3 Item { width: parent.width height: parent.height Rectangle { anchors.fill: parent color: "#f2f2f2" ButtonGroup { id: switchGroup } Column { id: column anchors.centerIn: parent spacing: 5 Rectangle { //id: rectangle width: 700 height: 150 color: "#ffffff" radius: 10 border.width: 0 Text { width: 450 height: 104 anchors.centerIn: parent text: qsTr("LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.
Default option.") font.pointSize: 10 anchors.verticalCenterOffset: -10 anchors.horizontalCenterOffset: 100 wrapMode: Text.WordWrap } Switch { id: element2 x: 500 y: 110 width: 187 height: 14 text: qsTr("LibreOffice") checked: true hoverEnabled: true ButtonGroup.group: switchGroup indicator: Rectangle { implicitWidth: 40 implicitHeight: 14 radius: 10 color: element2.checked ? "#3498db" : "#B9B9B9" border.color: element2.checked ? "#3498db" : "#cccccc" Rectangle { x: element2.checked ? parent.width - width : 0 y: (parent.height - height) / 2 width: 20 height: 20 radius: 10 color: element2.down ? "#cccccc" : "#ffffff" border.color: element2.checked ? (element1.down ? "#3498db" : "#3498db") : "#999999" } } onCheckedChanged: { if ( checked ) { config.packageChoice = "libreoffice" } } } Image { id: image2 x: 8 y: 25 height: 100 fillMode: Image.PreserveAspectFit source: "images/libreoffice.jpg" } } Rectangle { width: 700 height: 150 radius: 10 border.width: 0 Text { width: 450 height: 104 anchors.centerIn: parent text: qsTr("If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives.") font.pointSize: 10 anchors.verticalCenterOffset: -10 anchors.horizontalCenterOffset: 100 wrapMode: Text.WordWrap } Switch { id: element1 x: 500 y: 110 width: 187 height: 14 text: qsTr("No Office Suite") checked: false hoverEnabled: true ButtonGroup.group: switchGroup indicator: Rectangle { implicitWidth: 40 implicitHeight: 14 radius: 10 color: element1.checked ? "#3498db" : "#B9B9B9" border.color: element1.checked ? "#3498db" : "#cccccc" Rectangle { x: element1.checked ? parent.width - width : 0 y: (parent.height - height) / 2 width: 20 height: 20 radius: 10 color: element1.down ? "#cccccc" : "#ffffff" border.color: element1.checked ? (element1.down ? "#3498db" : "#3498db") : "#999999" } } onCheckedChanged: { if ( checked ) { config.packageChoice = "no_office_suite" } } } Image { id: image x: 8 y: 25 height: 100 fillMode: Image.PreserveAspectFit source: "images/no-selection.png" } } Rectangle { width: 700 height: 150 color: "#ffffff" radius: 10 border.width: 0 Text { width: 450 height: 104 anchors.centerIn: parent text: qsTr("Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser.") font.pointSize: 10 anchors.verticalCenterOffset: -10 anchors.horizontalCenterOffset: 100 wrapMode: Text.WordWrap } Switch { id: element3 x: 500 y: 110 width: 187 height: 14 text: qsTr("Minimal Install") checked: false hoverEnabled: true ButtonGroup.group: switchGroup indicator: Rectangle { implicitWidth: 40 implicitHeight: 14 radius: 10 color: element3.checked ? "#3498db" : "#B9B9B9" border.color: element3.checked ? "#3498db" : "#cccccc" Rectangle { x: element3.checked ? parent.width - width : 0 y: (parent.height - height) / 2 width: 20 height: 20 radius: 10 color: element3.down ? "#cccccc" : "#ffffff" border.color: element3.checked ? (element3.down ? "#3498db" : "#3498db") : "#999999" } } onCheckedChanged: { if ( checked ) { config.packageChoice = "minimal_install" } } } Image { id: image3 x: 8 y: 25 height: 100 fillMode: Image.PreserveAspectFit source: "images/plasma.png" } } Rectangle { width: 700 height: 25 color: "#f2f2f2" border.width: 0 Text { height: 25 anchors.centerIn: parent text: qsTr("Please select an option for your install, or use the default: LibreOffice included.") font.pointSize: 10 wrapMode: Text.WordWrap } } } } } calamares-calamares-2d126ae/src/modules/packagechooserq/packagechooserq.qrc000066400000000000000000000003271430147706700272550ustar00rootroot00000000000000 packagechooserq.qml images/libreoffice.jpg images/no-selection.png images/plasma.png calamares-calamares-2d126ae/src/modules/packages/000077500000000000000000000000001430147706700220245ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/packages/main.py000066400000000000000000000631561430147706700233350ustar00rootroot00000000000000#!/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 # A PM object may set this to a string (take care of translations!) # to override the string produced by pretty_status_message() custom_status_message = None INSTALL = object() REMOVE = object() mode_packages = None # Changes to INSTALL or REMOVE 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 custom_status_message is not None: return custom_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 __init__(self): import re progress_match = re.compile("^\\((\\d+)/(\\d+)\\)") def line_cb(line): if line.startswith(":: "): self.in_package_changes = "package" in line or "hooks" in line else: if self.in_package_changes and line.endswith("...\n"): # Update the message, untranslated; do not change the # progress percentage, since there may be more "installing..." # lines in the output for the group, than packages listed # explicitly. We don't know how to calculate proper progress. global custom_status_message custom_status_message = "pacman: " + line.strip() libcalamares.job.setprogress(self.progress_fraction) libcalamares.utils.debug(line) self.in_package_changes = False self.line_cb = line_cb pacman = libcalamares.job.configuration.get("pacman", None) if pacman is None: pacman = dict() if type(pacman) is not dict: libcalamares.utils.warning("Job configuration *pacman* will be ignored.") pacman = dict() self.pacman_num_retries = pacman.get("num_retries", 0) self.pacman_disable_timeout = pacman.get("disable_download_timeout", False) self.pacman_needed_only = pacman.get("needed_only", False) def reset_progress(self): self.in_package_changes = False # These are globals self.progress_fraction = (completed_packages * 1.0 / total_packages) def run_pacman(self, command, callback=False): """ Call pacman in a loop until it is successful or the number of retries is exceeded :param command: The pacman command to run :param callback: An optional boolean that indicates if this pacman run should use the callback :return: """ pacman_count = 0 while pacman_count <= self.pacman_num_retries: pacman_count += 1 try: if False: # callback: libcalamares.utils.target_env_process_output(command, self.line_cb) else: libcalamares.utils.target_env_process_output(command) return except subprocess.CalledProcessError: if pacman_count <= self.pacman_num_retries: pass else: raise def install(self, pkgs, from_local=False): command = ["pacman"] if from_local: command.append("-U") else: command.append("-S") # Don't ask for user intervention, take the default action command.append("--noconfirm") # Don't report download progress for each file command.append("--noprogressbar") if self.pacman_needed_only is True: command.append("--needed") if self.pacman_disable_timeout is True: command.append("--disable-download-timeout") command += pkgs self.reset_progress() self.run_pacman(command, True) def remove(self, pkgs): self.reset_progress() self.run_pacman(["pacman", "-Rs", "--noconfirm"] + pkgs, True) def update_db(self): self.run_pacman(["pacman", "-Sy"]) def update_system(self): command = ["pacman", "-Su", "--noconfirm"] if self.pacman_disable_timeout is True: command.append("--disable-download-timeout") self.run_pacman(command) class PMPamac(PackageManager): backend = "pamac" def del_db_lock(self, lock="/var/lib/pacman/db.lck"): # In case some error or crash, the database will be locked, # resulting in remaining packages not being installed. check_target_env_call(["rm", "-f", lock]) def install(self, pkgs, from_local=False): self.del_db_lock() check_target_env_call([self.backend, "install", "--no-confirm"] + pkgs) def remove(self, pkgs): self.del_db_lock() check_target_env_call([self.backend, "remove", "--no-confirm"] + pkgs) def update_db(self): self.del_db_lock() check_target_env_call([self.backend, "update", "--no-confirm"]) def update_system(self): self.del_db_lock() check_target_env_call([self.backend, "upgrade", "--no-confirm"]) class PMPisi(PackageManager): backend = "pisi" 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-calamares-2d126ae/src/modules/packages/module.desc000066400000000000000000000002301430147706700241440ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "packages" interface: "python" script: "main.py" calamares-calamares-2d126ae/src/modules/packages/packages.conf000066400000000000000000000210551430147706700244540ustar00rootroot00000000000000# 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 # pacman specific options # # *num_retries* should be a positive integer which specifies the # number of times the call to pacman will be retried in the event of a # failure. If it is missing, it will be set to 0. # # *disable_download_timeout* is a boolean that, when true, includes # the flag --disable-download-timeout on calls to pacman. When missing, # false is assumed. # # *needed_only* is a boolean that includes the pacman argument --needed # when set to true. If missing, false is assumed. pacman: num_retries: 0 disable_download_timeout: false needed_only: false # # List of maps with package operations such as install or remove. # Distro developers can provide a list of packages to remove # 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-calamares-2d126ae/src/modules/packages/packages.schema.yaml000066400000000000000000000027531430147706700257340ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/packages additionalProperties: false type: object properties: backend: type: string enum: - apk - apt - dnf - entropy - luet - packagekit - pacman - pamac - portage - yum - zypp - dummy update_db: { type: boolean, default: true } update_system: { type: boolean, default: false } skip_if_no_internet: { type: boolean, default: false } pacman: additionalProperties: false type: object properties: num_retries: { type: integer, default: 0 } disable_download_timeout: { type: boolean, default: false } needed_only: { type: boolean, default: false } operations: type: array items: additionalProperties: false type: object properties: # TODO: these are either-string-or-struct items, # need their own little schema. install: { type: array } remove: { type: array } try_install: { type: array } try_remove: { type: array } localInstall: { type: array } source: { type: string } required: [ backend ] calamares-calamares-2d126ae/src/modules/packages/tests/000077500000000000000000000000001430147706700231665ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/packages/tests/1.global000066400000000000000000000001251430147706700245060ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 rootMountPoint: /tmp calamares-calamares-2d126ae/src/modules/packages/tests/2.job000066400000000000000000000003641430147706700240260ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 backend: dummy operations: - install: - pre-script: touch /tmp/foo package: vi post-script: rm /tmp/foo - wget - binutils - remove: - vi - wget calamares-calamares-2d126ae/src/modules/packages/tests/CMakeTests.txt000066400000000000000000000032661430147706700257410ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # We have tests to load (some) of the package-managers specifically, to # test their configuration code and implementation. Those tests conventionally # live in Python files here in the tests/ directory. Add them. # Pacman (Arch) tests set(_pm pacman) add_test( NAME configure-packages-${_pm} COMMAND env PYTHONPATH=.: python3 ${CMAKE_CURRENT_LIST_DIR}/test-pm-${_pm}.py WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) add_test( NAME configure-packages-${_pm}-ops-1 COMMAND env PYTHONPATH=.: python3 ${CMAKE_CURRENT_LIST_DIR}/test-pm-${_pm}.py ${CMAKE_CURRENT_LIST_DIR}/pm-pacman-1.yaml 4 1 1 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) add_test( NAME configure-packages-${_pm}-ops-2 COMMAND env PYTHONPATH=.: python3 ${CMAKE_CURRENT_LIST_DIR}/test-pm-${_pm}.py ${CMAKE_CURRENT_LIST_DIR}/pm-pacman-2.yaml 3 0 0 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) if ( BUILD_TESTING AND BUILD_SCHEMA_TESTING AND PYTHONINTERP_FOUND AND PYTHON_EXECUTABLE ) set( _module packages ) set( _schema_file "${CMAKE_CURRENT_SOURCE_DIR}/${_module}/${_module}.schema.yaml" ) message(STATUS "Schema ${_schema_file}") foreach( _cf pm-pacman-1.yaml pm-pacman-2.yaml ) set( _conf_file "${CMAKE_CURRENT_SOURCE_DIR}/${_module}/tests/${_cf}" ) if ( EXISTS "${_schema_file}" AND EXISTS "${_conf_file}" ) add_test( NAME validate-packages-${_cf} COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_SOURCE_DIR}/ci/configvalidator.py" "${_schema_file}" "${_conf_file}" ) else() message(FATAL_ERROR "Missing ${_conf_file}") endif() endforeach() endif() calamares-calamares-2d126ae/src/modules/packages/tests/pm-pacman-1.yaml000066400000000000000000000002651430147706700260640ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 backend: pacman operations: [] pacman: num_retries: 4 disable_download_timeout: true needed_only: true calamares-calamares-2d126ae/src/modules/packages/tests/pm-pacman-2.yaml000066400000000000000000000002341430147706700260610ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 backend: pacman operations: [] # Leave some things unspecified pacman: num_retries: 3 calamares-calamares-2d126ae/src/modules/packages/tests/test-pm-pacman.py000066400000000000000000000022751430147706700263740ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Calamares Boilerplate import libcalamares libcalamares.globalstorage = libcalamares.GlobalStorage(None) libcalamares.globalstorage.insert("testing", True) # Module prep-work from src.modules.packages import main # .. we don't have a job in this test, so fake one class Job(object): def __init__(self, filename): self.configuration = libcalamares.utils.load_yaml(filename) if filename is not None else dict() import sys if len(sys.argv) > 4: filename = sys.argv[1] retry = int(sys.argv[2]) timeout = bool(int(sys.argv[3])) needed = bool(int(sys.argv[4])) else: filename = None retry = 0 timeout = False needed = False libcalamares.utils.warning("Expecting {!s} retry={!s} timeout={!s} needed={!s}".format(filename, retry, timeout, needed)) # Specific PM test libcalamares.job = Job(filename) p = main.PMPacman() assert p.pacman_num_retries == retry, "{!r} vs {!r}".format(p.pacman_num_retries, retry) assert p.pacman_disable_timeout == timeout, "{!r} vs {!r}".format(p.pacman_disable_timeout, timeout) assert p.pacman_needed_only == needed, "{!r} vs {!r}".format(p.pacman_needed_only, needed) calamares-calamares-2d126ae/src/modules/partition/000077500000000000000000000000001430147706700222575ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/partition/CMakeLists.txt000066400000000000000000000114651430147706700250260ustar00rootroot00000000000000# === 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_BAIL_OUT, at which point you are welcome to shoot # yourself in the foot. # # Independently, DEBUG_PARTITION_SKIP will not do the actual partitioning # through KPMCore, but it **will** save the global storage setup as if # it has done the partitioning. This is going to confuse subsequent # modules since the partitions on disk won't match GS, but it can be # useful for debugging simulated installations that don't need to # mount the target filesystems. option(DEBUG_PARTITION_UNSAFE "Allow unsafe partitioning choices." OFF) option( DEBUG_PARTITION_BAIL_OUT "Unsafe partitioning will error out on exec." ON ) option(DEBUG_PARTITION_SKIP "Don't actually do any partitioning." OFF) # This is very chatty, useful mostly if you don't know what KPMCore offers. option(DEBUG_FILESYSTEMS "Log all available Filesystems from KPMCore." OFF) include_directories(${CMAKE_SOURCE_DIR}) # For 3rdparty set(_partition_defs) if(DEBUG_PARTITION_UNSAFE) if(DEBUG_PARTITION_BAIL_OUT) list(APPEND _partition_defs DEBUG_PARTITION_BAIL_OUT) endif() list(APPEND _partition_defs DEBUG_PARTITION_UNSAFE) endif() if(DEBUG_FILESYSTEMS) list(APPEND _partition_defs DEBUG_FILESYSTEMS) endif() if(DEBUG_PARTITION_SKIP) list(APPEND _partition_defs DEBUG_PARTITION_SKIP) endif() find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE) 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-calamares-2d126ae/src/modules/partition/Config.cpp000066400000000000000000000327371430147706700242040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Config.h" #include "core/PartUtils.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/PartitionSize.h" #include "utils/Logger.h" #include "utils/Variant.h" Config::Config( QObject* parent ) : QObject( parent ) { } const NamedEnumTable< Config::InstallChoice >& Config::installChoiceNames() { static const NamedEnumTable< InstallChoice > names { { QStringLiteral( "none" ), InstallChoice::NoChoice }, { QStringLiteral( "nochoice" ), InstallChoice::NoChoice }, { QStringLiteral( "alongside" ), InstallChoice::Alongside }, { QStringLiteral( "erase" ), InstallChoice::Erase }, { QStringLiteral( "replace" ), InstallChoice::Replace }, { QStringLiteral( "manual" ), InstallChoice::Manual } }; return names; } const NamedEnumTable< Config::SwapChoice >& Config::swapChoiceNames() { static const NamedEnumTable< SwapChoice > names { { QStringLiteral( "none" ), SwapChoice::NoSwap }, { QStringLiteral( "small" ), SwapChoice::SmallSwap }, { QStringLiteral( "suspend" ), SwapChoice::FullSwap }, { QStringLiteral( "reuse" ), SwapChoice::ReuseSwap }, { QStringLiteral( "file" ), SwapChoice::SwapFile } }; return names; } Config::SwapChoice pickOne( const Config::SwapChoiceSet& s ) { if ( s.count() == 0 ) { return Config::SwapChoice::NoSwap; } if ( s.count() == 1 ) { return *( s.begin() ); } if ( s.contains( Config::SwapChoice::NoSwap ) ) { return Config::SwapChoice::NoSwap; } // Here, count > 1 but NoSwap is not a member. return *( s.begin() ); } static Config::SwapChoiceSet getSwapChoices( const QVariantMap& configurationMap ) { // SWAP SETTINGS // // This is a bit convoluted because there's legacy settings to handle as well // as the new-style list of choices, with mapping back-and-forth. if ( configurationMap.contains( "userSwapChoices" ) && ( configurationMap.contains( "ensureSuspendToDisk" ) || configurationMap.contains( "neverCreateSwap" ) ) ) { cError() << "Partition-module configuration mixes old- and new-style swap settings."; } if ( configurationMap.contains( "ensureSuspendToDisk" ) ) { cWarning() << "Partition-module setting *ensureSuspendToDisk* is deprecated."; } bool ensureSuspendToDisk = CalamaresUtils::getBool( configurationMap, "ensureSuspendToDisk", true ); if ( configurationMap.contains( "neverCreateSwap" ) ) { cWarning() << "Partition-module setting *neverCreateSwap* is deprecated."; } bool neverCreateSwap = CalamaresUtils::getBool( configurationMap, "neverCreateSwap", false ); Config::SwapChoiceSet choices; // Available swap choices if ( configurationMap.contains( "userSwapChoices" ) ) { // We've already warned about overlapping settings with the // legacy *ensureSuspendToDisk* and *neverCreateSwap*. QStringList l = configurationMap[ "userSwapChoices" ].toStringList(); for ( const auto& item : l ) { bool ok = false; auto v = Config::swapChoiceNames().find( item, ok ); if ( ok ) { choices.insert( v ); } } if ( choices.isEmpty() ) { cWarning() << "Partition-module configuration for *userSwapChoices* is empty:" << l; choices.insert( Config::SwapChoice::FullSwap ); } // suspend if it's one of the possible choices; suppress swap only if it's // the **only** choice available. ensureSuspendToDisk = choices.contains( Config::SwapChoice::FullSwap ); neverCreateSwap = ( choices.count() == 1 ) && choices.contains( Config::SwapChoice::NoSwap ); } else { // Convert the legacy settings into a single setting for now. if ( neverCreateSwap ) { choices.insert( Config::SwapChoice::NoSwap ); } else if ( ensureSuspendToDisk ) { choices.insert( Config::SwapChoice::FullSwap ); } else { choices.insert( Config::SwapChoice::SmallSwap ); } } // Not all are supported right now // FIXME static const char unsupportedSetting[] = "Partition-module does not support *userSwapChoices* setting"; #define COMPLAIN_UNSUPPORTED( x ) \ if ( choices.contains( x ) ) \ { \ bool bogus = false; \ cWarning() << unsupportedSetting << Config::swapChoiceNames().find( x, bogus ); \ choices.remove( x ); \ } COMPLAIN_UNSUPPORTED( Config::SwapChoice::ReuseSwap ) #undef COMPLAIN_UNSUPPORTED return choices; } void updateGlobalStorage( Config::InstallChoice installChoice, Config::SwapChoice swapChoice ) { auto* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( gs ) { QVariantMap m; m.insert( "install", Config::installChoiceNames().find( installChoice ) ); m.insert( "swap", Config::swapChoiceNames().find( swapChoice ) ); gs->insert( "partitionChoices", m ); } } void Config::setInstallChoice( int c ) { if ( ( c < InstallChoice::NoChoice ) || ( c > InstallChoice::Manual ) ) { cWarning() << "Invalid install choice (int)" << c; c = InstallChoice::NoChoice; } setInstallChoice( static_cast< InstallChoice >( c ) ); } void Config::setInstallChoice( InstallChoice c ) { if ( c != m_installChoice ) { m_installChoice = c; Q_EMIT installChoiceChanged( c ); ::updateGlobalStorage( c, m_swapChoice ); } } void Config::setSwapChoice( int c ) { if ( ( c < SwapChoice::NoSwap ) || ( c > SwapChoice::SwapFile ) ) { cWarning() << "Invalid swap choice (int)" << c; c = SwapChoice::NoSwap; } setSwapChoice( static_cast< SwapChoice >( c ) ); } void Config::setSwapChoice( Config::SwapChoice c ) { if ( c != m_swapChoice ) { m_swapChoice = c; Q_EMIT swapChoiceChanged( c ); ::updateGlobalStorage( m_installChoice, c ); } } void Config::setEraseFsTypeChoice( const QString& choice ) { QString canonicalChoice = PartUtils::canonicalFilesystemName( choice, nullptr ); if ( canonicalChoice != m_eraseFsTypeChoice ) { m_eraseFsTypeChoice = canonicalChoice; Q_EMIT eraseModeFilesystemChanged( canonicalChoice ); } } bool Config::acceptPartitionTableType( PartitionTable::TableType tableType ) const { return m_requiredPartitionTableType.empty() || m_requiredPartitionTableType.contains( PartitionTable::tableTypeToName( tableType ) ); } static void fillGSConfigurationEFI( Calamares::GlobalStorage* gs, const QVariantMap& configurationMap ) { // Set up firmwareType global storage entry. This is used, e.g. by the bootloader module. QString firmwareType( PartUtils::isEfiSystem() ? QStringLiteral( "efi" ) : QStringLiteral( "bios" ) ); gs->insert( "firmwareType", firmwareType ); gs->insert( "efiSystemPartition", CalamaresUtils::getString( configurationMap, "efiSystemPartition", QStringLiteral( "/boot/efi" ) ) ); // Read and parse key efiSystemPartitionSize if ( configurationMap.contains( "efiSystemPartitionSize" ) ) { const QString sizeString = CalamaresUtils::getString( configurationMap, "efiSystemPartitionSize" ); CalamaresUtils::Partition::PartitionSize part_size = CalamaresUtils::Partition::PartitionSize( sizeString ); if ( part_size.isValid() ) { // Insert once as string, once as a size-in-bytes; // changes to these keys should be synchronized with PartUtils.cpp gs->insert( "efiSystemPartitionSize", sizeString ); gs->insert( "efiSystemPartitionSize_i", part_size.toBytes() ); // Assign long long int to long unsigned int to prevent compilation warning size_t unsigned_part_size = part_size.toBytes(); if ( unsigned_part_size != PartUtils::efiFilesystemMinimumSize() ) { cWarning() << "EFI partition size" << sizeString << "has been adjusted to" << PartUtils::efiFilesystemMinimumSize() << "bytes"; } } else { cWarning() << "EFI partition size" << sizeString << "is invalid, ignored"; } } // Read and parse key efiSystemPartitionName if ( configurationMap.contains( "efiSystemPartitionName" ) ) { gs->insert( "efiSystemPartitionName", CalamaresUtils::getString( configurationMap, "efiSystemPartitionName" ) ); } } void Config::fillConfigurationFSTypes( const QVariantMap& configurationMap ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); // The defaultFileSystemType setting needs a bit more processing, // as we want to cover various cases (such as different cases) QString fsName = CalamaresUtils::getString( configurationMap, "defaultFileSystemType" ); QString fsRealName; FileSystem::Type fsType = FileSystem::Type::Unknown; if ( fsName.isEmpty() ) { cWarning() << "Partition-module setting *defaultFileSystemType* is missing, will use ext4"; fsRealName = PartUtils::canonicalFilesystemName( QStringLiteral( "ext4" ), &fsType ); } else { fsRealName = PartUtils::canonicalFilesystemName( fsName, &fsType ); if ( fsType == FileSystem::Type::Unknown ) { cWarning() << "Partition-module setting *defaultFileSystemType* is bad (" << fsName << ") using ext4 instead"; fsRealName = PartUtils::canonicalFilesystemName( QStringLiteral( "ext4" ), &fsType ); } else if ( fsRealName != fsName ) { cWarning() << "Partition-module setting *defaultFileSystemType* changed to" << fsRealName; } } Q_ASSERT( fsType != FileSystem::Type::Unknown ); m_defaultFsType = fsType; gs->insert( "defaultFileSystemType", fsRealName ); // TODO: canonicalize the names? How is translation supposed to work? m_eraseFsTypes = CalamaresUtils::getStringList( configurationMap, "availableFileSystemTypes" ); if ( !m_eraseFsTypes.contains( fsRealName ) ) { if ( !m_eraseFsTypes.isEmpty() ) { // Explicitly set, and doesn't include the default cWarning() << "Partition-module *availableFileSystemTypes* does not contain the default" << fsRealName; m_eraseFsTypes.prepend( fsRealName ); } else { // Not explicitly set, so it's empty; don't complain m_eraseFsTypes = QStringList { fsRealName }; } } Q_ASSERT( !m_eraseFsTypes.isEmpty() ); Q_ASSERT( m_eraseFsTypes.contains( fsRealName ) ); m_eraseFsTypeChoice = fsRealName; Q_EMIT eraseModeFilesystemChanged( m_eraseFsTypeChoice ); } void Config::setConfigurationMap( const QVariantMap& configurationMap ) { // Settings that overlap with the Welcome module m_requiredStorageGiB = CalamaresUtils::getDouble( configurationMap, "requiredStorage", -1.0 ); m_swapChoices = getSwapChoices( configurationMap ); bool nameFound = false; // In the name table (ignored, falls back to first entry in table) m_initialInstallChoice = installChoiceNames().find( CalamaresUtils::getString( configurationMap, "initialPartitioningChoice" ), nameFound ); setInstallChoice( m_initialInstallChoice ); m_initialSwapChoice = swapChoiceNames().find( CalamaresUtils::getString( configurationMap, "initialSwapChoice" ), nameFound ); if ( !m_swapChoices.contains( m_initialSwapChoice ) ) { cWarning() << "Configuration for *initialSwapChoice* is not one of the *userSwapChoices*"; if ( nameFound ) { cWarning() << Logger::SubEntry << "Choice" << swapChoiceNames().find( m_initialSwapChoice ) << "added."; m_swapChoices.insert( m_initialSwapChoice ); } m_initialSwapChoice = pickOne( m_swapChoices ); } setSwapChoice( m_initialSwapChoice ); m_allowManualPartitioning = CalamaresUtils::getBool( configurationMap, "allowManualPartitioning", true ); m_requiredPartitionTableType = CalamaresUtils::getStringList( configurationMap, "requiredPartitionTableType" ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); fillGSConfigurationEFI( gs, configurationMap ); fillConfigurationFSTypes( configurationMap ); } void Config::fillGSSecondaryConfiguration() const { // If there's no setting (e.g. from the welcome page) for required storage // then use ours, if it was set. auto* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( m_requiredStorageGiB >= 0.0 && gs && !gs->contains( "requiredStorageGiB" ) ) { gs->insert( "requiredStorageGiB", m_requiredStorageGiB ); } } calamares-calamares-2d126ae/src/modules/partition/Config.h000066400000000000000000000145771430147706700236530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PARTITION_CONFIG_H #define PARTITION_CONFIG_H #include "utils/NamedEnum.h" #include #include #include #include class Config : public QObject { Q_OBJECT ///@brief The installation choice (Erase, Alongside, ...) Q_PROPERTY( InstallChoice installChoice READ installChoice WRITE setInstallChoice NOTIFY installChoiceChanged ) ///@brief The swap choice (None, Small, Hibernate, ...) which only makes sense when Erase is chosen Q_PROPERTY( SwapChoice swapChoice READ swapChoice WRITE setSwapChoice NOTIFY swapChoiceChanged ) ///@brief Name of the FS that will be used when erasing type disk (e.g. "default filesystem") Q_PROPERTY( QString eraseModeFilesystem READ eraseFsType WRITE setEraseFsTypeChoice NOTIFY eraseModeFilesystemChanged ) Q_PROPERTY( bool allowManualPartitioning READ allowManualPartitioning CONSTANT FINAL ) public: Config( QObject* parent ); ~Config() override = default; enum InstallChoice { NoChoice, Alongside, Erase, Replace, Manual }; Q_ENUM( InstallChoice ) static const NamedEnumTable< InstallChoice >& installChoiceNames(); /** @brief Choice of swap (size and type) */ enum SwapChoice { NoSwap, // don't create any swap, don't use any ReuseSwap, // don't create, but do use existing SmallSwap, // up to 8GiB of swap FullSwap, // ensureSuspendToDisk -- at least RAM size SwapFile // use a file (if supported) }; Q_ENUM( SwapChoice ) static const NamedEnumTable< SwapChoice >& swapChoiceNames(); using SwapChoiceSet = QSet< SwapChoice >; using EraseFsTypesSet = QStringList; void setConfigurationMap( const QVariantMap& ); /** @brief Set GS values where other modules configuration has priority * * Some "required" values are duplicated between modules; if some * othe module hasn't already set the GS value, take a value from * the partitioning configuration. * * Applicable GS keys: * - requiredStorageGiB */ void fillGSSecondaryConfiguration() const; /** @brief What kind of installation (partitioning) is requested **initially**? * * @return the partitioning choice (may be @c NoChoice) */ InstallChoice initialInstallChoice() const { return m_initialInstallChoice; } /** @brief What kind of installation (partition) is requested **now**? * * This changes depending on what the user selects (unlike the initial choice, * which is fixed by the configuration). * * @return the partitioning choice (may be @c NoChoice) */ InstallChoice installChoice() const { return m_installChoice; } /** @brief The set of swap choices enabled for this install * * Not all swap choices are supported by each distro, so they * can choose to enable or disable them. This method * returns a set (hopefully non-empty) of configured swap choices. */ SwapChoiceSet swapChoices() const { return m_swapChoices; } /** @brief What kind of swap selection is requested **initially**? * * @return The swap choice (may be @c NoSwap ) */ SwapChoice initialSwapChoice() const { return m_initialSwapChoice; } /** @brief What kind of swap selection is requested **now**? * * A choice of swap only makes sense when install choice Erase is made. * * @return The swap choice (may be @c NoSwap). */ SwapChoice swapChoice() const { return m_swapChoice; } /** @brief Get the list of configured FS types to use with *erase* mode * * This list is not empty. */ EraseFsTypesSet eraseFsTypes() const { return m_eraseFsTypes; } /** @brief Currently-selected FS type for *erase* mode */ QString eraseFsType() const { return m_eraseFsTypeChoice; } /** @brief Configured default FS type (for other modes than erase) * * This is not "Unknown" or "Unformatted" */ FileSystem::Type defaultFsType() const { return m_defaultFsType; } /// @brief Is manual partitioning allowed (not explicitly disabled in the config file)? bool allowManualPartitioning() const { return m_allowManualPartitioning; } /** @brief Will @p tableType be ok? * * If no required types are specified, it's ok, otherwise the * type must be named in the list of required types. */ bool acceptPartitionTableType( PartitionTable::TableType tableType ) const; /// @brief Returns list of acceptable types. May be empty. QStringList partitionTableTypes() const { return m_requiredPartitionTableType; } public Q_SLOTS: void setInstallChoice( int ); ///< Translates a button ID or so to InstallChoice void setInstallChoice( InstallChoice ); void setSwapChoice( int ); ///< Translates a button ID or so to SwapChoice void setSwapChoice( SwapChoice ); void setEraseFsTypeChoice( const QString& filesystemName ); ///< See property eraseModeFilesystem Q_SIGNALS: void installChoiceChanged( InstallChoice ); void swapChoiceChanged( SwapChoice ); void eraseModeFilesystemChanged( const QString& ); private: /** @brief Handle FS-type configuration, for erase and default */ void fillConfigurationFSTypes( const QVariantMap& configurationMap ); EraseFsTypesSet m_eraseFsTypes; QString m_eraseFsTypeChoice; FileSystem::Type m_defaultFsType; SwapChoiceSet m_swapChoices; SwapChoice m_initialSwapChoice = NoSwap; SwapChoice m_swapChoice = NoSwap; InstallChoice m_initialInstallChoice = NoChoice; InstallChoice m_installChoice = NoChoice; qreal m_requiredStorageGiB = 0.0; // May duplicate setting in the welcome module QStringList m_requiredPartitionTableType; bool m_allowManualPartitioning = true; }; /** @brief Given a set of swap choices, return a sensible value from it. * * "Sensible" here means: if there is one value, use it; otherwise, use * NoSwap if there are no choices, or if NoSwap is one of the choices, in the set. * If that's not possible, any value from the set. */ Config::SwapChoice pickOne( const Config::SwapChoiceSet& s ); #endif calamares-calamares-2d126ae/src/modules/partition/PartitionViewStep.cpp000066400000000000000000000643751430147706700264420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 2020, Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-FileCopyrightText: 2020 Anke Boersma #include #include #include #include PartitionViewStep::PartitionViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_config( new Config( this ) ) , m_core( nullptr ) , m_widget( new QStackedWidget() ) , m_choicePage( nullptr ) , m_manualPartitionPage( nullptr ) { m_widget->setContentsMargins( 0, 0, 0, 0 ); m_waitingWidget = new WaitingWidget( QString() ); m_widget->addWidget( m_waitingWidget ); CALAMARES_RETRANSLATE( if ( m_waitingWidget ) { m_waitingWidget->setText( tr( "Gathering system information..." ) ); } ); m_core = new PartitionCoreModule( this ); // Unusable before init is complete! // We're not done loading, but we need the configuration map first. } void PartitionViewStep::initPartitionCoreModule() { Q_ASSERT( m_core ); m_core->init(); } void PartitionViewStep::continueLoading() { Q_ASSERT( !m_choicePage ); m_choicePage = new ChoicePage( m_config ); m_choicePage->init( m_core ); m_widget->addWidget( m_choicePage ); // Instantiate the manual partitioning page as needed. // Q_ASSERT( !m_manualPartitionPage ); // m_manualPartitionPage = new PartitionPage( m_core ); // m_widget->addWidget( m_manualPartitionPage ); m_widget->removeWidget( m_waitingWidget ); m_waitingWidget->deleteLater(); m_waitingWidget = nullptr; connect( m_core, &PartitionCoreModule::hasRootMountPointChanged, this, &PartitionViewStep::nextPossiblyChanged ); connect( m_choicePage, &ChoicePage::nextStatusChanged, this, &PartitionViewStep::nextPossiblyChanged ); } PartitionViewStep::~PartitionViewStep() { if ( m_choicePage && m_choicePage->parent() == nullptr ) { m_choicePage->deleteLater(); } if ( m_manualPartitionPage && m_manualPartitionPage->parent() == nullptr ) { m_manualPartitionPage->deleteLater(); } delete m_core; } QString PartitionViewStep::prettyName() const { return tr( "Partitions" ); } /** @brief Gather the pretty descriptions of all the partitioning jobs * * Returns a QStringList of each job's pretty description, including * empty strings and duplicates. The list is in-order of how the * jobs will be run. */ static QStringList jobDescriptions( const Calamares::JobList& jobs ) { QStringList jobsLines; for ( const Calamares::job_ptr& job : qAsConst( jobs ) ) { if ( !job->prettyDescription().isEmpty() ) { jobsLines.append( job->prettyDescription() ); } } return jobsLines; } /** @brief A top-level description of what @p choice does * * Returns a (branded) string describing what @p choice will do. */ static QString modeDescription( Config::InstallChoice choice ) { const auto* branding = Calamares::Branding::instance(); static const char context[] = "PartitionViewStep"; switch ( choice ) { case Config::InstallChoice::Alongside: return QCoreApplication::translate( context, "Install %1 alongside another operating system." ) .arg( branding->shortVersionedName() ); case Config::InstallChoice::Erase: return QCoreApplication::translate( context, "Erase disk and install %1." ) .arg( branding->shortVersionedName() ); case Config::InstallChoice::Replace: return QCoreApplication::translate( context, "Replace a partition with %1." ) .arg( branding->shortVersionedName() ); case Config::InstallChoice::NoChoice: case Config::InstallChoice::Manual: return QCoreApplication::translate( context, "Manual partitioning." ); } return QString(); } /** @brief A top-level description of what @p choice does to disk @p info * * Returns a (branded, and device-specific) string describing what * will be done to device @p info when @p choice is made. The @p listLength * is used to provide context; when more than one disk is in use, the description * works differently. */ static QString diskDescription( int listLength, const PartitionCoreModule::SummaryInfo& info, Config::InstallChoice choice ) { const auto* branding = Calamares::Branding::instance(); static const char context[] = "PartitionViewStep"; if ( listLength == 1 ) // this is the only disk preview { switch ( choice ) { case Config::Alongside: return QCoreApplication::translate( context, "Install %1 alongside another operating system on disk " "%2 (%3)." ) .arg( branding->shortVersionedName() ) .arg( info.deviceNode ) .arg( info.deviceName ); case Config::Erase: return QCoreApplication::translate( context, "Erase disk %2 (%3) and install %1." ) .arg( branding->shortVersionedName() ) .arg( info.deviceNode ) .arg( info.deviceName ); case Config::Replace: return QCoreApplication::translate( context, "Replace a partition on disk %2 (%3) with %1." ) .arg( branding->shortVersionedName() ) .arg( info.deviceNode ) .arg( info.deviceName ); case Config::NoChoice: case Config::Manual: return QCoreApplication::translate( context, "Manual partitioning on disk %1 (%2)." ) .arg( info.deviceNode ) .arg( info.deviceName ); } return QString(); } else // multiple disk previews! { return QCoreApplication::translate( context, "Disk %1 (%2)" ) .arg( info.deviceNode ) .arg( info.deviceName ); } } QString PartitionViewStep::prettyStatus() const { const Config::InstallChoice choice = m_config->installChoice(); const QList< PartitionCoreModule::SummaryInfo > list = m_core->createSummaryInfo(); cDebug() << "Summary for Partition" << list.length() << choice; auto joinDiskInfo = [ choice = choice ]( QString& s, const PartitionCoreModule::SummaryInfo& i ) { return s + diskDescription( 1, i, choice ); }; const QString diskInfoLabel = std::accumulate( list.begin(), list.end(), QString(), joinDiskInfo ); const QString jobsLabel = jobDescriptions( jobs() ).join( QStringLiteral( "
" ) ); return diskInfoLabel + "
" + jobsLabel; } QWidget* PartitionViewStep::createSummaryWidget() const { QWidget* widget = new QWidget; QVBoxLayout* mainLayout = new QVBoxLayout; widget->setLayout( mainLayout ); mainLayout->setMargin( 0 ); Config::InstallChoice choice = m_config->installChoice(); QFormLayout* formLayout = new QFormLayout( widget ); const int MARGIN = CalamaresUtils::defaultFontHeight() / 2; formLayout->setContentsMargins( MARGIN, 0, MARGIN, MARGIN ); mainLayout->addLayout( formLayout ); #if defined( DEBUG_PARTITION_UNSAFE ) || defined( DEBUG_PARTITION_BAIL_OUT ) || defined( DEBUG_PARTITION_SKIP ) auto specialRow = [ = ]( CalamaresUtils::ImageType t, const QString& s ) { QLabel* icon = new QLabel; icon->setPixmap( CalamaresUtils::defaultPixmap( t ) ); formLayout->addRow( icon, new QLabel( s ) ); }; #endif #if defined( DEBUG_PARTITION_UNSAFE ) specialRow( CalamaresUtils::ImageType::StatusWarning, tr( "Unsafe partition actions are enabled." ) ); #endif #if defined( DEBUG_PARTITION_BAIL_OUT ) specialRow( CalamaresUtils::ImageType::Information, tr( "Partitioning is configured to always fail." ) ); #endif #if defined( DEBUG_PARTITION_SKIP ) specialRow( CalamaresUtils::ImageType::Information, tr( "No partitions will be changed." ) ); #endif const QList< PartitionCoreModule::SummaryInfo > list = m_core->createSummaryInfo(); if ( list.length() > 1 ) // There are changes on more than one disk { //NOTE: all of this should only happen when Manual partitioning is active. // Any other choice should result in a list.length() == 1. QLabel* modeLabel = new QLabel; formLayout->addRow( modeLabel ); modeLabel->setText( modeDescription( choice ) ); } for ( const auto& info : list ) { QLabel* diskInfoLabel = new QLabel; diskInfoLabel->setText( diskDescription( list.length(), info, choice ) ); formLayout->addRow( diskInfoLabel ); PartitionBarsView* preview; PartitionLabelsView* previewLabels; QVBoxLayout* field; PartitionBarsView::NestedPartitionsMode mode = Calamares::JobQueue::instance()->globalStorage()->value( "drawNestedPartitions" ).toBool() ? PartitionBarsView::DrawNestedPartitions : PartitionBarsView::NoNestedPartitions; preview = new PartitionBarsView; preview->setNestedPartitionsMode( mode ); previewLabels = new PartitionLabelsView; previewLabels->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); preview->setModel( info.partitionModelBefore ); previewLabels->setModel( info.partitionModelBefore ); preview->setSelectionMode( QAbstractItemView::NoSelection ); previewLabels->setSelectionMode( QAbstractItemView::NoSelection ); info.partitionModelBefore->setParent( widget ); field = new QVBoxLayout; CalamaresUtils::unmarginLayout( field ); field->setSpacing( 6 ); field->addWidget( preview ); field->addWidget( previewLabels ); formLayout->addRow( tr( "Current:" ), field ); preview = new PartitionBarsView; preview->setNestedPartitionsMode( mode ); previewLabels = new PartitionLabelsView; previewLabels->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); preview->setModel( info.partitionModelAfter ); previewLabels->setModel( info.partitionModelAfter ); preview->setSelectionMode( QAbstractItemView::NoSelection ); previewLabels->setSelectionMode( QAbstractItemView::NoSelection ); previewLabels->setCustomNewRootLabel( Calamares::Branding::instance()->string( Calamares::Branding::BootloaderEntryName ) ); info.partitionModelAfter->setParent( widget ); field = new QVBoxLayout; CalamaresUtils::unmarginLayout( field ); field->setSpacing( 6 ); field->addWidget( preview ); field->addWidget( previewLabels ); formLayout->addRow( tr( "After:" ), field ); } const QStringList jobsLines = jobDescriptions( jobs() ); if ( !jobsLines.isEmpty() ) { QLabel* jobsLabel = new QLabel( widget ); mainLayout->addWidget( jobsLabel ); jobsLabel->setText( jobsLines.join( "
" ) ); jobsLabel->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); QPalette pal; pal.setColor( WindowBackground, pal.window().color().lighter( 108 ) ); jobsLabel->setAutoFillBackground( true ); jobsLabel->setPalette( pal ); } return widget; } QWidget* PartitionViewStep::widget() { return m_widget; } void PartitionViewStep::next() { if ( m_choicePage == m_widget->currentWidget() ) { if ( m_config->installChoice() == Config::InstallChoice::Manual ) { if ( !m_manualPartitionPage ) { m_manualPartitionPage = new PartitionPage( m_core ); m_widget->addWidget( m_manualPartitionPage ); } m_widget->setCurrentWidget( m_manualPartitionPage ); m_manualPartitionPage->selectDeviceByIndex( m_choicePage->lastSelectedDeviceIndex() ); if ( m_core->isDirty() ) { m_manualPartitionPage->onRevertClicked(); } } cDebug() << "Choice applied: " << m_config->installChoice(); } } void PartitionViewStep::back() { if ( m_widget->currentWidget() != m_choicePage ) { m_widget->setCurrentWidget( m_choicePage ); m_choicePage->setLastSelectedDeviceIndex( m_manualPartitionPage->selectedDeviceIndex() ); if ( m_manualPartitionPage ) { m_manualPartitionPage->deleteLater(); m_manualPartitionPage = nullptr; } } } bool PartitionViewStep::isNextEnabled() const { if ( m_choicePage && m_widget->currentWidget() == m_choicePage ) { return m_choicePage->isNextEnabled(); } if ( m_manualPartitionPage && m_widget->currentWidget() == m_manualPartitionPage ) { return m_core->hasRootMountPoint(); } return false; } void PartitionViewStep::nextPossiblyChanged( bool ) { Q_EMIT nextStatusChanged( isNextEnabled() ); } bool PartitionViewStep::isBackEnabled() const { return true; } bool PartitionViewStep::isAtBeginning() const { if ( m_widget->currentWidget() != m_choicePage ) { return false; } return true; } bool PartitionViewStep::isAtEnd() const { if ( m_widget->currentWidget() == m_choicePage ) { auto choice = m_config->installChoice(); if ( Config::InstallChoice::Erase == choice || Config::InstallChoice::Replace == choice || Config::InstallChoice::Alongside == choice ) { return true; } return false; } return true; } void PartitionViewStep::onActivate() { m_config->fillGSSecondaryConfiguration(); // if we're coming back to PVS from the next VS if ( m_widget->currentWidget() == m_choicePage && m_config->installChoice() == Config::InstallChoice::Alongside ) { m_choicePage->applyActionChoice( Config::InstallChoice::Alongside ); // m_choicePage->reset(); //FIXME: ReplaceWidget should be reset maybe? } } static bool shouldWarnForGPTOnBIOS( const PartitionCoreModule* core ) { if ( PartUtils::isEfiSystem() ) { return false; } const QString biosFlagName = PartitionTable::flagName( KPM_PARTITION_FLAG( BiosGrub ) ); auto [ r, device ] = core->bootLoaderModel()->findBootLoader( core->bootLoaderInstallPath() ); Q_UNUSED( r ); if ( device ) { auto* table = device->partitionTable(); cDebug() << "Found device for bootloader" << device->deviceNode(); if ( table && table->type() == PartitionTable::TableType::gpt ) { // So this is a BIOS system, and the bootloader will be installed on a GPT system for ( const auto& partition : qAsConst( table->children() ) ) { using CalamaresUtils::Units::operator""_MiB; if ( ( partition->activeFlags() & KPM_PARTITION_FLAG( BiosGrub ) ) && ( partition->fileSystem().type() == FileSystem::Unformatted ) && ( partition->capacity() >= 8_MiB ) ) { cDebug() << Logger::SubEntry << "Partition" << partition->devicePath() << partition->partitionPath() << "is a suitable" << biosFlagName << "partition"; return false; } } } cDebug() << Logger::SubEntry << "No suitable partition for" << biosFlagName << "found"; } else { cDebug() << "Found no device for" << core->bootLoaderInstallPath(); } return true; } void PartitionViewStep::onLeave() { if ( m_widget->currentWidget() == m_choicePage ) { m_choicePage->onLeave(); return; } const auto* branding = Calamares::Branding::instance(); if ( m_widget->currentWidget() == m_manualPartitionPage ) { if ( PartUtils::isEfiSystem() ) { const QString espMountPoint = Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString(); #ifdef WITH_KPMCORE4API const auto espFlag = PartitionTable::Flag::Boot; #else const auto espFlag = PartitionTable::FlagEsp; #endif Partition* esp = m_core->findPartitionByMountPoint( espMountPoint ); QString message; QString description; Logger::Once o; const bool okType = esp && PartUtils::isEfiFilesystemSuitableType( esp ); const bool okSize = esp && PartUtils::isEfiFilesystemSuitableSize( esp ); const bool okFlag = esp && PartUtils::isEfiBootable( esp ); if ( !esp ) { message = tr( "No EFI system partition configured" ); } else if ( !( okType && okSize && okFlag ) ) { message = tr( "EFI system partition configured incorrectly" ); } if ( !esp || !( okType && okSize && okFlag ) ) { description = tr( "An EFI system partition is necessary to start %1." "

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

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

" "To configure a GPT partition table on BIOS, " "(if not done so already) go back " "and set the partition table to GPT, next create a 8 MB " "unformatted partition with the " "%2 flag enabled.

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

" "There are security concerns with this kind of " "setup, because important system files are kept " "on an unencrypted partition.
" "You may continue if you wish, but filesystem " "unlocking will happen later during system startup." "
To encrypt the boot partition, go back and " "recreate it, selecting Encrypt " "in the partition creation window." ); QMessageBox mb( QMessageBox::Warning, message, description, QMessageBox::Ok, m_manualPartitionPage ); Calamares::fixButtonLabels( &mb ); mb.exec(); } } } } void PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( configurationMap ); // Copy the efiSystemPartition setting to the global storage. It is needed not only in // the EraseDiskPage, but also in the bootloader configuration modules (grub, bootloader). Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); // Read and parse key swapPartitionName if ( configurationMap.contains( "swapPartitionName" ) ) { gs->insert( "swapPartitionName", CalamaresUtils::getString( configurationMap, "swapPartitionName" ) ); } // OTHER SETTINGS // gs->insert( "drawNestedPartitions", CalamaresUtils::getBool( configurationMap, "drawNestedPartitions", false ) ); gs->insert( "alwaysShowPartitionLabels", CalamaresUtils::getBool( configurationMap, "alwaysShowPartitionLabels", true ) ); gs->insert( "enableLuksAutomatedPartitioning", CalamaresUtils::getBool( configurationMap, "enableLuksAutomatedPartitioning", true ) ); QString partitionTableName = CalamaresUtils::getString( configurationMap, "defaultPartitionTableType" ); if ( partitionTableName.isEmpty() ) { cWarning() << "Partition-module setting *defaultPartitionTableType* is unset, " "will use gpt for efi or msdos for bios"; } gs->insert( "defaultPartitionTableType", partitionTableName ); // Now that we have the config, we load the PartitionCoreModule in the background // because it could take a while. Then when it's done, we can set up the widgets // and remove the spinner. m_future = new QFutureWatcher< void >(); connect( m_future, &QFutureWatcher< void >::finished, this, [ this ] { continueLoading(); this->m_future->deleteLater(); this->m_future = nullptr; } ); QFuture< void > future = QtConcurrent::run( this, &PartitionViewStep::initPartitionCoreModule ); m_future->setFuture( future ); m_core->partitionLayout().init( m_config->defaultFsType(), configurationMap.value( "partitionLayout" ).toList() ); } Calamares::JobList PartitionViewStep::jobs() const { return m_core->jobs( m_config ); } Calamares::RequirementsList PartitionViewStep::checkRequirements() { if ( m_future ) { m_future->waitForFinished(); } Calamares::RequirementsList l; l.append( { QLatin1String( "partitions" ), [] { return tr( "has at least one disk device available." ); }, [] { return tr( "There are no partitions to install on." ); }, m_core->deviceModel()->rowCount() > 0, // satisfied #ifdef DEBUG_PARTITION_UNSAFE false // optional #else true // required #endif } ); return l; } CALAMARES_PLUGIN_FACTORY_DEFINITION( PartitionViewStepFactory, registerPlugin< PartitionViewStep >(); ) calamares-calamares-2d126ae/src/modules/partition/PartitionViewStep.h000066400000000000000000000042631430147706700260750ustar00rootroot00000000000000/* === 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; QString prettyStatus() 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-calamares-2d126ae/src/modules/partition/README.md000066400000000000000000000075131430147706700235440ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/partition/core/000077500000000000000000000000001430147706700232075ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/partition/core/BootLoaderModel.cpp000066400000000000000000000121011430147706700267210ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/core/BootLoaderModel.h000066400000000000000000000037721430147706700264040ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/core/ColorUtils.cpp000066400000000000000000000126401430147706700260150ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/core/ColorUtils.h000066400000000000000000000023321430147706700254570ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/core/DeviceList.cpp000066400000000000000000000136511430147706700257540ustar00rootroot00000000000000/* === 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/CalamaresUtilsSystem.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; } /** @brief Check if @p path holds an iso9660 filesystem * * The @p path should point to a device; blkid is used to check the FS type. */ static bool blkIdCheckIso9660( const QString& path ) { // If blkid fails, there's no output, but we don't care auto r = CalamaresUtils::System::runCommand( { "blkid", path }, std::chrono::seconds( 30 ) ); return r.getOutput().contains( "iso9660" ); } /// @brief Convenience to check if @p partition holds an iso9660 filesystem static bool blkIdCheckIso9660P( const Partition* partition ) { return blkIdCheckIso9660( partition->partitionPath() ); } /** @brief Check if the @p device is an iso9660 device * * An iso9660 device is **probably** a CD-ROM. If the device holds an * iso9660 FS, or any of its partitions do, then we call it an iso9660 device. */ static bool isIso9660( const Device* device ) { const QString path = device->deviceNode(); if ( path.isEmpty() ) { return false; } if ( blkIdCheckIso9660( path ) ) { return true; } if ( device->partitionTable() && !device->partitionTable()->children().isEmpty() ) { const auto& p = device->partitionTable()->children(); return std::any_of( p.cbegin(), p.cend(), blkIdCheckIso9660P ); } return false; } static inline bool isZRam( const Device* device ) { const QString path = device->deviceNode(); return path.startsWith( "/dev/zram" ); } static inline bool isFloppyDrive( const Device* device ) { const QString path = device->deviceNode(); return path.startsWith( "/dev/fd" ) || path.startsWith( "/dev/floppy" ); } static inline QDebug& operator<<( QDebug& s, QList< Device* >::iterator& it ) { 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 ( !backend ) { cWarning() << "No KPM backend found."; return {}; } #if defined( WITH_KPMCORE4API ) DeviceList devices = backend->scanDevices( /* not includeReadOnly, not includeLoopback */ ScanFlag( 0 ) ); #else DeviceList devices = backend->scanDevices( /* excludeReadOnly */ true ); #endif /* The list of devices is cleaned up for use: * - some devices can **never** be used (e.g. floppies, nullptr) * - some devices can be used if unsafe mode is on, but not in normal operation * Two lambda's are defined, * - removeInAllModes() * - removeInSafeMode() * To handle the difference. */ #ifdef DEBUG_PARTITION_UNSAFE cWarning() << "Allowing unsafe partitioning choices." << devices.count() << "candidates."; #ifdef DEBUG_PARTITION_BAIL_OUT cDebug() << Logger::SubEntry << "unsafe partitioning has been lamed, and will fail."; #endif // Unsafe partitioning auto removeInAllModes = []( DeviceList& l, DeviceList::iterator& it ) { return erase( l, it ); }; auto removeInSafeMode = []( DeviceList&, DeviceList::iterator& it ) { return ++it; }; #else // Safe partitioning auto removeInAllModes = []( DeviceList& l, DeviceList::iterator& it ) { return erase( l, it ); }; auto& removeInSafeMode = removeInAllModes; #endif cDebug() << "Removing unsuitable devices:" << devices.count() << "candidates."; bool writableOnly = ( which == DeviceType::WritableOnly ); // Remove the device which contains / from the list for ( DeviceList::iterator it = devices.begin(); it != devices.end(); ) { if ( !( *it ) ) { cDebug() << Logger::SubEntry << "Skipping nullptr device"; it = 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-calamares-2d126ae/src/modules/partition/core/DeviceList.h000066400000000000000000000017601430147706700254170ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/core/DeviceModel.cpp000066400000000000000000000071461430147706700261030ustar00rootroot00000000000000/* === 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 "DeviceModel.h" #include "core/PartitionModel.h" #include "core/SizeUtils.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" // KPMcore #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( 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-calamares-2d126ae/src/modules/partition/core/DeviceModel.h000066400000000000000000000024661430147706700255500ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/core/KPMHelpers.cpp000066400000000000000000000207671430147706700257010ustar00rootroot00000000000000/* === 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" #include "utils/String.h" #include #include #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() ); } #ifndef WITH_KPMCORE4API // This function was added in KPMCore 4, implementation copied from src/fs/luks.cpp /* SPDX-FileCopyrightText: 2010 Volker Lanz SPDX-FileCopyrightText: 2012-2019 Andrius Štikonas SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac SPDX-FileCopyrightText: 2016 Chantara Tith SPDX-FileCopyrightText: 2017 Christian Morlok SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho SPDX-FileCopyrightText: 2020 Arnaud Ferraris SPDX-FileCopyrightText: 2020 Gaël PORTAY SPDX-License-Identifier: GPL-3.0-or-later */ static bool testPassphrase( FS::luks* fs, const QString& deviceNode, const QString& passphrase ) { ExternalCommand cmd( QStringLiteral( "cryptsetup" ), { QStringLiteral( "open" ), QStringLiteral( "--tries" ), QStringLiteral( "1" ), QStringLiteral( "--test-passphrase" ), deviceNode } ); if ( cmd.write( passphrase.toLocal8Bit() + '\n' ) && cmd.start( -1 ) && cmd.exitCode() == 0 ) { return true; } return false; } #else static bool testPassphrase( FS::luks* fs, const QString& deviceNode, const QString& passphrase ) { return fs->testPassphrase( deviceNode, passphrase ); } #endif // Adapted from src/fs/luks.cpp cryptOpen which always opens a dialog to ask for a passphrase SavePassphraseValue savePassphrase( Partition* partition, const QString& passphrase ) { if ( passphrase.isEmpty() ) { return SavePassphraseValue::EmptyPassphrase; } if ( partition->fileSystem().type() != FileSystem::Luks ) { return SavePassphraseValue::NotLuksPartition; } FS::luks* luksFs = dynamic_cast< FS::luks* >( &partition->fileSystem() ); const QString deviceNode = partition->partitionPath(); // Test the given passphrase if ( !testPassphrase( luksFs, deviceNode, passphrase ) ) { return SavePassphraseValue::IncorrectPassphrase; } if ( luksFs->isCryptOpen() ) { if ( !luksFs->mapperName().isEmpty() ) { return SavePassphraseValue::NoError; } else { cDebug() << Logger::SubEntry << "No mapper node found"; luksFs->setCryptOpen( false ); } } ExternalCommand openCmd( QStringLiteral( "cryptsetup" ), { QStringLiteral( "open" ), deviceNode, luksFs->suggestedMapperName( deviceNode ) } ); if ( !( openCmd.write( passphrase.toLocal8Bit() + '\n' ) && openCmd.start( -1 ) && openCmd.exitCode() == 0 ) ) { cWarning() << Logger::SubEntry << openCmd.exitCode() << ": cryptsetup command failed"; return SavePassphraseValue::CryptsetupError; } // Save the existing passphrase luksFs->setPassphrase( passphrase ); luksFs->scan( deviceNode ); if ( luksFs->mapperName().isEmpty() ) { return SavePassphraseValue::NoMapperNode; } luksFs->loadInnerFileSystem( luksFs->mapperName() ); luksFs->setCryptOpen( luksFs->innerFS() != nullptr ); if ( !luksFs->isCryptOpen() ) { return SavePassphraseValue::DeviceNotDecrypted; } return SavePassphraseValue::NoError; } Calamares::JobResult execute( Operation& operation, const QString& failureMessage ) { operation.setStatus( Operation::StatusRunning ); Report report( nullptr ); if ( operation.execute( report ) ) { return Calamares::JobResult::ok(); } // Remove the === lines from the report by trimming them to empty QStringList l = report.toText().split( '\n' ); std::for_each( l.begin(), l.end(), []( QString& s ) { CalamaresUtils::removeLeading( s, '=' ); } ); return Calamares::JobResult::error( failureMessage, l.join( '\n' ) ); } } // namespace KPMHelpers calamares-calamares-2d126ae/src/modules/partition/core/KPMHelpers.h000066400000000000000000000103471430147706700253370ustar00rootroot00000000000000/* === 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 #include "Job.h" #include #include #include #include #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 { /** @brief Return (errors) for savePassphrase() * * There's a handful of things that can go wrong when * saving a passphrase for a given partition; this * expresses clearly which ones are wrong. * * @c NoError is "Ok" when saving the passphrase succeeds. */ enum class SavePassphraseValue { NoError, EmptyPassphrase, NotLuksPartition, IncorrectPassphrase, CryptsetupError, NoMapperNode, DeviceNotDecrypted }; /** * 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 ); /** @brief Save an existing passphrase for a previously encrypted partition. * * Tries to apply the passphrase to the partition; this checks if the * @p partition is one that can have a passphrase applied, and * runs `cryptsetup` to check that the passphrase actually works * for the partition. Returns `NoError` on success, or an explanatory * other value if it fails. */ SavePassphraseValue savePassphrase( Partition* partition, const QString& passphrase ); /** @brief Return a result for an @p operation * * Executes the operation, and if successful, returns a success result. * Otherwise returns an error using @p failureMessage as the primary part * of the error, and details obtained from the operation. */ Calamares::JobResult execute( Operation& operation, const QString& failureMessage ); /** @brief Return a result for an @p operation * * It's acceptable to use an rvalue: the operation-running is the effect * you're interested in, rather than keeping the temporary around. */ static inline Calamares::JobResult execute( Operation&& operation, const QString& failureMessage ) { return execute( operation, failureMessage ); } } // namespace KPMHelpers #endif /* KPMHELPERS_H */ calamares-calamares-2d126ae/src/modules/partition/core/OsproberEntry.h000066400000000000000000000025641430147706700262040ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/core/PartUtils.cpp000066400000000000000000000462651430147706700256570ustar00rootroot00000000000000/* === 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; } if ( !candidate->fileSystem().supportGrow() || !candidate->fileSystem().supportShrink() ) { cDebug() << o << "Can not resize" << convenienceName( candidate ) << ", filesystem" << candidate->fileSystem().name() << "does not support resize."; return false; } if ( isPartitionFreeSpace( candidate ) ) { cDebug() << o << "Can not resize" << convenienceName( candidate ) << ", partition is free space"; return false; } if ( candidate->isMounted() ) { cDebug() << o << "Can not resize" << convenienceName( candidate ) << ", partition is mounted"; return false; } if ( candidate->roles().has( PartitionRole::Primary ) ) { PartitionTable* table = dynamic_cast< PartitionTable* >( candidate->parent() ); if ( !table ) { cDebug() << o << "Can not resize" << convenienceName( candidate ) << ", no partition table found"; return false; } if ( table->numPrimaries() >= table->maxPrimaries() ) { cDebug() << o << "Can not resize" << convenienceName( candidate ) << ", partition table already has" << table->maxPrimaries() << "primary partitions."; return false; } } bool ok = false; double requiredStorageGiB = getRequiredStorageGiB( ok ); if ( !ok ) { cDebug() << o << "Can not resize" << convenienceName( candidate ) << ", 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 ) { if ( partitionPath.startsWith( "/dev/" ) ) { for ( int i = 0; i < dm->rowCount(); ++i ) { Device* dev = dm->deviceForIndex( dm->index( i ) ); Partition* candidate = CalamaresUtils::Partition::findPartitionByPath( { dev }, partitionPath ); if ( candidate ) { return canBeResized( candidate, o ); } } cWarning() << "Can not resize" << partitionPath << ", no Partition* found."; return false; } else { cWarning() << "Can not resize" << partitionPath << ", does not start with /dev"; 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" ); 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(); const int lineCount = fstabEntries.count(); std::remove_if( fstabEntries.begin(), fstabEntries.end(), []( const FstabEntry& x ) { return !x.isValid(); } ); cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "fstab entries from" << lineCount << "lines in" << fstabFile.fileName(); } 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 isEfiFilesystemSuitableType( const Partition* candidate ) { auto type = candidate->fileSystem().type(); QT_WARNING_PUSH QT_WARNING_DISABLE_CLANG( "-Wswitch-enum" ) switch ( type ) { case FileSystem::Type::Fat32: return true; #ifdef WITH_KPMCORE4API case FileSystem::Type::Fat12: #endif case FileSystem::Type::Fat16: cWarning() << "FAT12 and FAT16 are probably not supported by EFI"; return false; default: cWarning() << "EFI boot partition must be FAT32"; return false; } QT_WARNING_POP } bool isEfiFilesystemSuitableSize( const Partition* candidate ) { auto size = candidate->capacity(); // bytes if ( size <= 0 ) { return false; } if ( size_t( size ) >= efiFilesystemMinimumSize() ) { return true; } else { cWarning() << "Filesystem for EFI is too small (" << size << "bytes)"; return false; } } bool isEfiBootable( const Partition* candidate ) { 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 } // TODO: this is configurable via the config file **already** size_t efiFilesystemMinimumSize() { using CalamaresUtils::Units::operator""_MiB; size_t uefisys_part_sizeB = 300_MiB; // The default can be overridden; the key used here comes // from the partition module Config.cpp auto* gs = Calamares::JobQueue::instance()->globalStorage(); if ( gs->contains( "efiSystemPartitionSize_i" ) ) { qint64 v = gs->value( "efiSystemPartitionSize_i" ).toLongLong(); uefisys_part_sizeB = v > 0 ? static_cast< size_t >( v ) : 0; } // There is a lower limit of what can be configured if ( uefisys_part_sizeB < 32_MiB ) { uefisys_part_sizeB = 32_MiB; } return uefisys_part_sizeB; } QString canonicalFilesystemName( const QString& fsName, FileSystem::Type* fsType ) { cScopedAssignment type( fsType ); if ( fsName.isEmpty() ) { 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-calamares-2d126ae/src/modules/partition/core/PartUtils.h000066400000000000000000000102761430147706700253150ustar00rootroot00000000000000/* === 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). */ bool isEfiFilesystemSuitableType( const Partition* candidate ); /** * @brief Is the @p partition suitable as an EFI boot partition? * Checks for filesystem size (300MiB, see efiFilesystemMinimumSize). */ bool isEfiFilesystemSuitableSize( const Partition* candidate ); /** @brief Returns the minimum size of an EFI boot partition in bytes. * * This is determined as 300MiB, based on the FAT32 standard * and EFI documentation (and not a little discussion in Calamares * issues about what works, what is effective, and what is mandated * by the standard and how all of those are different). * * This can be configured through the `partition.conf` file, * key *efiSystemPartitionSize*, which will then apply to both * automatic partitioning **and** the warning for manual partitioning. * * A minimum of 32MiB (which is bonkers-small) is enforced. */ size_t efiFilesystemMinimumSize(); /** * @brief Is the given @p partition bootable in EFI? Depending on * the partition table layout, this may mean different flags. */ 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-calamares-2d126ae/src/modules/partition/core/PartitionActions.cpp000066400000000000000000000233201430147706700272050ustar00rootroot00000000000000/* === 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 = qRound64( suggestedSwapSizeB * overestimationFactor ); // don't use more than 10% of available space if ( !ensureSuspendToDisk ) { suggestedSwapSizeB = qMin( suggestedSwapSizeB, availableSpaceB / 10 /* 10% is 0.1 */ ); } cDebug() << "Suggested swap size:" << CalamaresUtils::BytesToGiB( suggestedSwapSizeB ) << "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->partitionLayout().setDefaultFsType( type == FileSystem::Unknown ? FileSystem::Ext4 : type ); core->createPartitionTable( dev, partType ); if ( isEfi ) { size_t uefisys_part_sizeB = PartUtils::efiFilesystemMinimumSize(); qint64 efiSectorCount = CalamaresUtils::bytesToSectors( uefisys_part_sizeB, dev->logicalSize() ); Q_ASSERT( efiSectorCount > 0 ); // 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-calamares-2d126ae/src/modules/partition/core/PartitionActions.h000066400000000000000000000052661430147706700266630ustar00rootroot00000000000000/* === 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" qint64 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 ? 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-calamares-2d126ae/src/modules/partition/core/PartitionCoreModule.cpp000066400000000000000000001024761430147706700276550ustar00rootroot00000000000000/* === 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_BAIL_OUT #include "JobExample.h" #endif #include "partition/PartitionIterator.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/Traits.h" #include "utils/Variant.h" // KPMcore #include #include #include #include #include #include #include #include #include // Qt #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 ) { if ( device ) { // Gives ownership of the Device* to the DeviceInfo object auto deviceInfo = new DeviceInfo( device ); m_deviceInfos << deviceInfo; cDebug() << Logger::SubEntry << device->deviceNode() << device->capacity() << Logger::RedactedName( "DevName", device->name() ) << Logger::RedactedName( "DevNamePretty", device->prettyName() ); } else { cDebug() << Logger::SubEntry << "(skipped null device)"; } } cDebug() << Logger::SubEntry << devices.count() << "devices detected."; m_deviceModel->init( devices ); // The following PartUtils::runOsprober call in turn calls PartUtils::canBeResized, // which relies on a working DeviceModel. m_osproberLines = PartUtils::runOsprober( this->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 ); } STATICTEST QStringList findEssentialLVs( const QList< PartitionCoreModule::DeviceInfo* >& infos ) { QStringList doNotClose; cDebug() << "Checking LVM use on" << infos.count() << "devices"; for ( const auto* info : infos ) { if ( info->device->type() != Device::Type::LVM_Device ) { continue; } for ( const auto& j : qAsConst( info->jobs() ) ) { FormatPartitionJob* format = dynamic_cast< FormatPartitionJob* >( j.data() ); if ( format ) { // device->deviceNode() is /dev/ // partition()->partitionPath() is /dev// const auto* partition = format->partition(); const QString partPath = partition->partitionPath(); const QString devicePath = info->device->deviceNode() + '/'; const bool isLvm = partition->roles().has( PartitionRole::Lvm_Lv ); if ( isLvm && partPath.startsWith( devicePath ) ) { cDebug() << Logger::SubEntry << partPath << "is an essential LV filesystem=" << partition->fileSystem().type(); QString lvName = partPath.right( partPath.length() - devicePath.length() ); doNotClose.append( info->device->name() + '-' + lvName ); } } } } return doNotClose; } Calamares::JobList PartitionCoreModule::jobs( const Config* config ) const { Calamares::JobList lst; QList< Device* > devices; #ifdef DEBUG_PARTITION_UNSAFE #ifdef DEBUG_PARTITION_BAIL_OUT cDebug() << "Unsafe partitioning is enabled."; cDebug() << Logger::SubEntry << "it has been lamed, and will fail."; lst << Calamares::job_ptr( new Calamares::FailJob( QStringLiteral( "Partition" ) ) ); #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() ); #ifdef DEBUG_PARTITION_SKIP cWarning() << "Partitioning actions are skipped."; #else const QStringList doNotClose = findEssentialLVs( m_deviceInfos ); for ( const auto* info : m_deviceInfos ) { if ( info->isDirty() ) { auto* job = new ClearMountsJob( info->device.data() ); job->setMapperExceptions( doNotClose ); lst << Calamares::job_ptr( job ); } } #endif for ( const auto* info : m_deviceInfos ) { #ifdef DEBUG_PARTITION_SKIP cWarning() << Logger::SubEntry << "Skipping jobs for" << info->device.data()->deviceNode(); #else lst << info->jobs(); #endif devices << info->device.data(); } lst << Calamares::job_ptr( new FillGlobalStorageJob( 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->deviceNode(); for ( const auto& job : info->jobs() ) { cDebug() << Logger::SubEntry << "-" << job->metaObject()->className(); } } } 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; } static void applyDefaultLabel( Partition* p, bool ( *predicate )( const Partition* ), const QString& label ) { if ( p->label().isEmpty() && predicate( p ) ) { p->setLabel( label ); } } 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. // // If the layout hasn't applied a label to the partition, // apply a default label (to boot and root, at least). const auto is_boot = []( const Partition* p ) -> bool { const QString boot = QStringLiteral( "/boot" ); return PartitionInfo::mountPoint( p ) == boot || p->mountPoint() == boot; }; const auto is_root = []( const Partition* p ) -> bool { const QString root = QStringLiteral( "/" ); return PartitionInfo::mountPoint( p ) == root || p->mountPoint() == root; }; const bool separate_boot_partition = std::find_if( partList.constBegin(), partList.constEnd(), is_boot ) != partList.constEnd(); for ( Partition* part : partList ) { applyDefaultLabel( part, is_root, QStringLiteral( "root" ) ); applyDefaultLabel( part, is_boot, QStringLiteral( "boot" ) ); if ( ( separate_boot_partition && is_boot( part ) ) || ( !separate_boot_partition && is_root( part ) ) ) { createPartition( 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-calamares-2d126ae/src/modules/partition/core/PartitionCoreModule.h000066400000000000000000000213331430147706700273120ustar00rootroot00000000000000/* === 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; }; struct DeviceInfo; 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 Get the partition layout that will be applied. * * Layouts are applied only for erase and replace operations. */ PartitionLayout& partitionLayout() { return m_partLayout; } void layoutApply( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase ); void layoutApply( Device* dev, 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: 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-calamares-2d126ae/src/modules/partition/core/PartitionInfo.cpp000066400000000000000000000046461430147706700265120ustar00rootroot00000000000000/* === 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( const Partition* partition ) { return partition->property( MOUNT_POINT_PROPERTY ).toString(); } void setMountPoint( Partition* partition, const QString& value ) { partition->setProperty( MOUNT_POINT_PROPERTY, value ); } bool format( const 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-calamares-2d126ae/src/modules/partition/core/PartitionInfo.h000066400000000000000000000031631430147706700261500ustar00rootroot00000000000000/* === 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( const Partition* partition ); void setMountPoint( Partition* partition, const QString& value ); bool format( const 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-calamares-2d126ae/src/modules/partition/core/PartitionLayout.cpp000066400000000000000000000334311430147706700270660ustar00rootroot00000000000000/* === 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; QT_WARNING_PUSH QT_WARNING_DISABLE_CLANG( "-Wswitch-enum" ) 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; } QT_WARNING_POP 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; // Encryption for zfs is handled in the zfs module if ( luksPassphrase.isEmpty() || correctFS( entry.partFileSystem ) == FileSystem::Zfs ) { part = KPMHelpers::createNewPartition( parent, *dev, role, correctFS( entry.partFileSystem ), entry.partLabel, currentSector, currentSector + sectors - 1, KPM_PARTITION_FLAG( None ) ); } else { part = KPMHelpers::createNewEncryptedPartition( parent, *dev, role, correctFS( entry.partFileSystem ), entry.partLabel, currentSector, currentSector + sectors - 1, luksPassphrase, KPM_PARTITION_FLAG( None ) ); } // For zfs, we need to make the passphrase available to later modules if ( correctFS( entry.partFileSystem ) == FileSystem::Zfs ) { Calamares::GlobalStorage* storage = Calamares::JobQueue::instance()->globalStorage(); QList< QVariant > zfsInfoList; QVariantMap zfsInfo; // Save the information subsequent modules will need zfsInfo[ "encrypted" ] = !luksPassphrase.isEmpty(); zfsInfo[ "passphrase" ] = luksPassphrase; zfsInfo[ "mountpoint" ] = entry.partMountPoint; // Add it to the list and insert it into global storage zfsInfoList.append( zfsInfo ); storage->insert( "zfsInfo", zfsInfoList ); } 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-calamares-2d126ae/src/modules/partition/core/PartitionLayout.h000066400000000000000000000104101430147706700265230ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/core/PartitionModel.cpp000066400000000000000000000231451430147706700266520ustar00rootroot00000000000000/* === 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 "PartitionModel.h" #include "core/ColorUtils.h" #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "core/SizeUtils.h" #include "partition/FileSystem.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" // CalaPM #include #include #include #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 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 = 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-calamares-2d126ae/src/modules/partition/core/PartitionModel.h000066400000000000000000000066121430147706700263170ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/core/SizeUtils.h000066400000000000000000000015641430147706700253210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PARTITION_CORE_SIZEUTILS_H #define PARTITION_CORE_SIZEUTILS_H #include /** @brief Helper function for printing sizes consistently. * * Most of Calamares uses a qint64 for partition sizes, so use that * parameter type. However, the human-visible formatting doesn't need * to bother with one-byte accuracy (and anyway, a double has at least 50 bits * at which point we're printing giga (or gibi) bytes). */ static inline QString formatByteSize( qint64 sizeValue ) { return Capacity::formatByteSize( static_cast< double >( sizeValue ) ); } #endif // PARTITION_CORE_SIZEUTILS_H calamares-calamares-2d126ae/src/modules/partition/gui/000077500000000000000000000000001430147706700230435ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/partition/gui/BootInfoWidget.cpp000066400000000000000000000072601430147706700264370ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/BootInfoWidget.h000066400000000000000000000011271430147706700261000ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/ChoicePage.cpp000066400000000000000000001735731430147706700255560ustar00rootroot00000000000000/* === 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 #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_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 ); updateNextEnabled(); } 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() ); } // Whole disk encryption isn't implemented for zfs so disable the option for now if ( m_eraseFsTypesChoiceComboBox != nullptr && m_enableEncryptionWidget ) { if ( m_eraseFsTypesChoiceComboBox->currentText() == "zfs" ) { m_encryptWidget->hide(); } else { m_encryptWidget->show(); } } updateNextEnabled(); } 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 ); updateNextEnabled(); } 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; } QString describePartitionTypes( const QStringList& types ) { if ( types.empty() ) { return QCoreApplication::translate( ChoicePage::staticMetaObject.className(), "any", "any partition-table type" ); } if ( types.size() == 1 ) { return types.first(); } if ( types.size() == 2 ) { return QCoreApplication::translate( ChoicePage::staticMetaObject.className(), "%1 or %2", "partition-table types" ) .arg( types.at( 0 ), types.at( 1 ) ); } // More than two, rather unlikely return types.join( ", " ); } /** * @brief ChoicePage::setupActions happens every time a new Device* is selected in the * device picker. Sets up the text and visibility of the partitioning actions based * on the currently selected Device*, bootloader and os-prober output. */ 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_config->acceptPartitionTableType( tableType ); } for ( auto it = PartitionIterator::begin( currentDevice ); it != PartitionIterator::end( currentDevice ); ++it ) { if ( PartUtils::canBeResized( *it, o ) ) { cDebug() << Logger::SubEntry << "contains resizable" << it; atLeastOneCanBeResized = true; } if ( PartUtils::canBeReplaced( *it, 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_BAIL_OUT // 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( describePartitionTypes( m_config->partitionTableTypes() ) ) ); m_messageLabel->show(); cWarning() << "Partition table" << PartitionTable::tableTypeToName( tableType ) << "does not match the requirement " << m_config->partitionTableTypes().join( ',' ) << ", ENABLING erase feature and DISABLING alongside, replace and manual features."; m_eraseButton->show(); m_alongsideButton->hide(); m_replaceButton->hide(); m_somethingElseButton->hide(); cDebug() << "Replace button suppressed because partition table type mismatch."; force_uncheck( m_grp, m_replaceButton ); } if ( m_somethingElseButton->isHidden() && m_alongsideButton->isHidden() && m_replaceButton->isHidden() && m_eraseButton->isHidden() ) { if ( atLeastOneIsMounted ) { m_messageLabel->setText( tr( "This storage device has one of its partitions mounted." ) ); } else { m_messageLabel->setText( tr( "This storage device is a part of an inactive RAID device." ) ); } m_messageLabel->show(); cWarning() << "No buttons available" << "replaced?" << atLeastOneCanBeReplaced << "resized?" << atLeastOneCanBeResized << "erased? (not-mounted and not-raid)" << !atLeastOneIsMounted << "and" << !isInactiveRAID; } } 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 { auto sm_p = m_beforePartitionBarsView ? m_beforePartitionBarsView->selectionModel() : nullptr; switch ( m_config->installChoice() ) { case InstallChoice::NoChoice: cDebug() << "No partitioning choice has been made yet"; return false; case InstallChoice::Replace: case InstallChoice::Alongside: if ( !( sm_p && sm_p->currentIndex().isValid() ) ) { cDebug() << "No partition selected for alongside or replace"; return false; } break; case InstallChoice::Erase: case InstallChoice::Manual: // Nothing to check for these break; } 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 or passphrase mismatch."; 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-calamares-2d126ae/src/modules/partition/gui/ChoicePage.h000066400000000000000000000116731430147706700252130ustar00rootroot00000000000000/* === 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; bool m_enableEncryptionWidget; QMutex m_coreMutex; }; #endif // CHOICEPAGE_H calamares-calamares-2d126ae/src/modules/partition/gui/ChoicePage.ui000066400000000000000000000145751430147706700254050ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/partition/gui/CreatePartitionDialog.cpp000066400000000000000000000313351430147706700277710ustar00rootroot00000000000000/* === 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 "Settings.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() ) { // We need to ensure zfs is added to the list if the zfs module is enabled if ( ( fs->type() == FileSystem::Type::Zfs && Calamares::Settings::instance()->isModuleEnabled( "zfs" ) ) || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) ) { fsNames << userVisibleFS( fs ); // This is put into the combobox if ( fs->type() == defaultFSType ) { defaultFsIndex = fsCounter; } fsCounter++; } } 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() && fsType != FileSystem::Zfs ) { 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() ); } // For zfs, we let the zfs module handle the encryption but we need to make the passphrase available to later modules if ( fsType == FileSystem::Zfs ) { Calamares::GlobalStorage* storage = Calamares::JobQueue::instance()->globalStorage(); QList< QVariant > zfsInfoList; QVariantMap zfsInfo; // If this is not the first encrypted zfs partition, get the old list first if ( storage->contains( "zfsInfo" ) ) { zfsInfoList = storage->value( "zfsInfo" ).toList(); storage->remove( "zfsInfo" ); } // Save the information subsequent modules will need zfsInfo[ "encrypted" ] = m_ui->encryptWidget->state() == EncryptWidget::Encryption::Confirmed && !luksPassphrase.isEmpty(); zfsInfo[ "passphrase" ] = luksPassphrase; zfsInfo[ "mountpoint" ] = selectedMountPoint( m_ui->mountPointComboBox ); // Add it to the list and insert it into global storage zfsInfoList.append( zfsInfo ); storage->insert( "zfsInfo", zfsInfoList ); } if ( m_device->type() == Device::Type::LVM_Device ) { partition->setPartitionPath( m_device->deviceNode() + QStringLiteral( "/" ) + m_ui->lvNameLineEdit->text().trimmed() ); } PartitionInfo::setMountPoint( partition, selectedMountPoint( m_ui->mountPointComboBox ) ); 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() { validateMountPoint( selectedMountPoint( m_ui->mountPointComboBox ), m_usedMountPoints, m_ui->mountPointExplanation, m_ui->buttonBox->button( QDialogButtonBox::Ok ) ); } void CreatePartitionDialog::initPartResizerWidget( Partition* partition ) { QColor color = CalamaresUtils::Partition::isPartitionFreeSpace( partition ) ? ColorUtils::colorForPartitionInFreeSpace( partition ) : ColorUtils::colorForPartition( partition ); m_partitionSizeController->init( m_device, partition, color ); m_partitionSizeController->setPartResizerWidget( m_ui->partResizerWidget ); m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox ); } calamares-calamares-2d126ae/src/modules/partition/gui/CreatePartitionDialog.h000066400000000000000000000053751430147706700274430ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/CreatePartitionDialog.ui000066400000000000000000000220521430147706700276200ustar00rootroot00000000000000 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 Primar&y 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 0 0 true -1 Flags: true QAbstractItemView::NoSelection true Qt::Vertical 17 13 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-calamares-2d126ae/src/modules/partition/gui/CreatePartitionTableDialog.ui000066400000000000000000000067541430147706700306030ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/partition/gui/CreateVolumeGroupDialog.cpp000066400000000000000000000024121430147706700302760ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/CreateVolumeGroupDialog.h000066400000000000000000000015771430147706700277560ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/DeviceInfoWidget.cpp000066400000000000000000000136721430147706700267370ustar00rootroot00000000000000/* === 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; QString toolTipString; // fix up if the name shouldn't be uppercase: switch ( m_tableType ) { case PartitionTable::msdos: case PartitionTable::msdos_sectorbased: typeString = "MBR"; toolTipString += tr( "

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

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

This is the recommended partition table type for modern " "systems which start from an EFI boot " "environment." ); break; case PartitionTable::loop: typeString = "loop"; toolTipString = tr( "This is a loop " "device.

" "It is a pseudo-device with no partition table " "that makes a file accessible as a block device. " "This kind of setup usually only contains a single filesystem." ); break; #if defined( WITH_KPMCORE42API ) case PartitionTable::none: #endif case PartitionTable::unknownTableType: typeString = " ? "; toolTipString = tr( "This installer cannot detect a partition table on the " "selected storage device.

" "The device either has no partition " "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; // The next ones need to have the name adjusted, but the default tooltip is OK case PartitionTable::mac: typeString = "Mac"; break; case PartitionTable::amiga: typeString = "Amiga"; break; case PartitionTable::sun: typeString = "Sun"; break; // Peculiar tables, do nothing and use default type and tooltip strings case PartitionTable::aix: case PartitionTable::bsd: case PartitionTable::dasd: case PartitionTable::dvh: case PartitionTable::pc98: case PartitionTable::vmd: break; } if ( typeString.isEmpty() ) { typeString = PartitionTable::tableTypeToName( m_tableType ).toUpper(); } if ( toolTipString.isEmpty() ) { toolTipString = tr( "This device has a %1 partition " "table." ) .arg( typeString ); } m_ptLabel->setText( typeString ); m_ptLabel->setToolTip( toolTipString ); m_ptIcon->setToolTip( tr( "The type of partition table on the " "selected storage device.

" "The only way to change the partition table type is to " "erase and recreate the partition table from scratch, " "which destroys all data on the storage device.
" "This installer will keep the current partition table " "unless you explicitly choose otherwise.
" "If unsure, on modern systems GPT is preferred." ) ); } calamares-calamares-2d126ae/src/modules/partition/gui/DeviceInfoWidget.h000066400000000000000000000013651430147706700264000ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/EditExistingPartitionDialog.cpp000066400000000000000000000350151430147706700311650ustar00rootroot00000000000000/* === 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/KPMHelpers.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 "Settings.h" #include "partition/FileSystem.h" #include "utils/Logger.h" #include "widgets/TranslationFix.h" #include #include #include #include #include #include #include #include #include using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget ) : 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 ); m_ui->encryptWidget->hide(); standardMountPoints( *( m_ui->mountPointComboBox ), PartitionInfo::mountPoint( partition ) ); QColor color = ColorUtils::colorForPartition( m_partition ); m_partitionSizeController->init( m_device, m_partition, color ); m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox ); connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, this, &EditExistingPartitionDialog::checkMountPointSelection ); // 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() ) { // We need to ensure zfs is added to the list if the zfs module is enabled if ( ( fs->type() == FileSystem::Type::Zfs && Calamares::Settings::instance()->isModuleEnabled( "zfs" ) ) || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) ) { fsNames << userVisibleFS( fs ); // For the combo box } } m_ui->fileSystemComboBox->addItems( fsNames ); FileSystem::Type defaultFSType; QString untranslatedFSName = PartUtils::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() ); // Force a format if the existing device is a zfs device since reusing a zpool isn't currently supported m_ui->formatRadioButton->setChecked( m_partition->fileSystem().type() == FileSystem::Type::Zfs ); m_ui->formatRadioButton->setEnabled( !( m_partition->fileSystem().type() == FileSystem::Type::Zfs ) ); m_ui->keepRadioButton->setChecked( !( m_partition->fileSystem().type() == FileSystem::Type::Zfs ) ); m_ui->keepRadioButton->setEnabled( !( m_partition->fileSystem().type() == FileSystem::Type::Zfs ) ); setFlagList( *( m_ui->m_listFlags ), m_partition->availableFlags(), PartitionInfo::flags( m_partition ) ); } EditExistingPartitionDialog::~EditExistingPartitionDialog() {} 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 ); } // Update the existing luks partition const QString passphrase = m_ui->encryptWidget->passphrase(); if ( !passphrase.isEmpty() ) { if ( KPMHelpers::savePassphrase( m_partition, passphrase ) != KPMHelpers::SavePassphraseValue::NoError ) { QString message = tr( "Passphrase for existing partition" ); QString description = tr( "Partition %1 could not be decrypted " "with the given passphrase." "

" "Edit the partition again and give the correct passphrase " "or delete and create a new encrypted partition." ) .arg( m_partition->partitionPath() ); QMessageBox mb( QMessageBox::Information, message, description, QMessageBox::Ok, this->parentWidget() ); Calamares::fixButtonLabels( &mb ); mb.exec(); } } } } 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() ); } toggleEncryptWidget(); } void EditExistingPartitionDialog::checkMountPointSelection() { if ( validateMountPoint( selectedMountPoint( m_ui->mountPointComboBox ), m_usedMountPoints, m_ui->mountPointExplanation, m_ui->buttonBox->button( QDialogButtonBox::Ok ) ) ) { toggleEncryptWidget(); } } void EditExistingPartitionDialog::toggleEncryptWidget() { // Show/hide encryptWidget: // check if partition is a previously luks formatted partition // and not currently formatted // and its mount point not a standard mount point except when it's /home QString mp = selectedMountPoint( m_ui->mountPointComboBox ); if ( !mp.isEmpty() && m_partition->fileSystem().type() == FileSystem::Luks && !m_ui->formatRadioButton->isChecked() && ( !standardMountPoints().contains( mp ) || mp == "/home" ) ) { m_ui->encryptWidget->show(); m_ui->encryptWidget->reset( false ); } // TODO: When formatting a partition user must be able to encrypt that partition // Probably need to delete this partition and create a new one // else if ( m_ui->formatRadioButton->isChecked() // && !mp.isEmpty()) // { // m_ui->encryptWidget->show(); // m_ui->encryptWidget->reset(); // } else { m_ui->encryptWidget->reset(); m_ui->encryptWidget->hide(); } } calamares-calamares-2d126ae/src/modules/partition/gui/EditExistingPartitionDialog.h000066400000000000000000000034011430147706700306240ustar00rootroot00000000000000/* === 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: struct FreeSpace { Partition* p; }; 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(); void toggleEncryptWidget(); }; #endif /* EDITEXISTINGPARTITIONDIALOG_H */ calamares-calamares-2d126ae/src/modules/partition/gui/EditExistingPartitionDialog.ui000066400000000000000000000176501430147706700310250ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> SPDX-License-Identifier: GPL-3.0-or-later EditExistingPartitionDialog 0 0 570 689 0 0 Edit Existing Partition QLayout::SetMinimumSize 0 0 0 59 QFormLayout::ExpandingFieldsGrow Con&tent: keepRadioButton &Keep true Format 0 0 300 0 Warning: Formatting the partition will erase all existing data. true &Mount Point: mountPointComboBox 0 0 true -1 Si&ze: sizeSpinBox MiB Fi&le System: fileSystemComboBox Flags: true QAbstractItemView::NoSelection true Label for the filesystem 16 FS Label: Qt::Vertical QSizePolicy::Fixed 20 13 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok PartResizerWidget QWidget
kpmcore/gui/partresizerwidget.h
1
EncryptWidget QWidget
gui/EncryptWidget.h
1
sizeSpinBox keepRadioButton formatRadioButton mountPointComboBox buttonBox buttonBox accepted() EditExistingPartitionDialog accept() 248 254 157 274 buttonBox rejected() EditExistingPartitionDialog reject() 316 260 286 274
calamares-calamares-2d126ae/src/modules/partition/gui/EncryptWidget.cpp000066400000000000000000000127211430147706700263420ustar00rootroot00000000000000/* === 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 "Branding.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Retranslator.h" /** @brief Does this system support whole-disk encryption? * * Returns @c true if the system is likely to support encryption * with sufficient performance to be usable. A machine that can't * doe hardware-assisted AES is **probably** too slow, so we could * warn the user that ticking the "encrypt system" box is a bad * idea. * * Since we don't have an oracle that can answer that question, * just pretend every system can do it. */ static inline bool systemSupportsEncryptionAcceptably() { return true; } EncryptWidget::EncryptWidget( QWidget* parent ) : QWidget( parent ) , m_ui( new Ui::EncryptWidget ) , 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(); // TODO: this deserves better rendering, an icon or something, but that will // depend on having a non-bogus implementation of systemSupportsEncryptionAcceptably if ( systemSupportsEncryptionAcceptably() ) { m_ui->m_encryptionUnsupportedLabel->hide(); } else { // This is really ugly, but the character is unicode "unlocked" m_ui->m_encryptionUnsupportedLabel->setText( QStringLiteral( "🔓" ) ); m_ui->m_encryptionUnsupportedLabel->show(); } connect( m_ui->m_encryptCheckBox, &QCheckBox::stateChanged, this, &EncryptWidget::onCheckBoxStateChanged ); connect( m_ui->m_passphraseLineEdit, &QLineEdit::textEdited, this, &EncryptWidget::onPassphraseEdited ); 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( bool checkVisible ) { m_ui->m_passphraseLineEdit->clear(); m_ui->m_confirmLineEdit->clear(); m_ui->m_encryptCheckBox->setChecked( false ); m_ui->m_encryptCheckBox->setVisible( checkVisible ); m_ui->m_passphraseLineEdit->setVisible( !checkVisible ); m_ui->m_confirmLineEdit->setVisible( !checkVisible ); } EncryptWidget::Encryption EncryptWidget::state() const { Encryption newState = Encryption::Unconfirmed; if ( m_ui->m_encryptCheckBox->isChecked() || !m_ui->m_encryptCheckBox->isVisible() ) { if ( !m_ui->m_passphraseLineEdit->text().isEmpty() && m_ui->m_passphraseLineEdit->text() == m_ui->m_confirmLineEdit->text() ) { newState = Encryption::Confirmed; } else { newState = Encryption::Unconfirmed; } } else { newState = Encryption::Disabled; } return newState; } 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 = state(); 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-calamares-2d126ae/src/modules/partition/gui/EncryptWidget.h000066400000000000000000000021001430147706700257750ustar00rootroot00000000000000/* === 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( bool checkVisible = true ); 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-calamares-2d126ae/src/modules/partition/gui/EncryptWidget.ui000066400000000000000000000050461430147706700261770ustar00rootroot00000000000000 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 Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. 🔓 Qt::AlignCenter QLineEdit::Password Passphrase QLineEdit::Password Confirm passphrase Qt::Horizontal 40 20 Qt::AlignCenter calamares-calamares-2d126ae/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp000066400000000000000000000016071430147706700313360ustar00rootroot00000000000000/* === 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 "core/SizeUtils.h" ListPhysicalVolumeWidgetItem::ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked ) : QListWidgetItem( QString( "%1 | %2" ).arg( partition->deviceNode(), 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; } ListPhysicalVolumeWidgetItem::~ListPhysicalVolumeWidgetItem() {} calamares-calamares-2d126ae/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h000066400000000000000000000013521430147706700310000ustar00rootroot00000000000000/* === 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 ); ~ListPhysicalVolumeWidgetItem() override; const Partition* partition() const; private: const Partition* m_partition; }; #endif // LISTPHYSICALVOLUMEWIDGETITEM_H calamares-calamares-2d126ae/src/modules/partition/gui/PartitionBarsView.cpp000066400000000000000000000400311430147706700271610ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/PartitionBarsView.h000066400000000000000000000061211430147706700266300ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/PartitionDialogHelpers.cpp000066400000000000000000000070611430147706700301670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PartitionDialogHelpers.h" #include "core/PartUtils.h" #include "gui/CreatePartitionDialog.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include #include #include #include #include QStringList standardMountPoints() { QStringList mountPoints { "/", "/boot", "/home", "/opt", "/srv", "/usr", "/var" }; if ( PartUtils::isEfiSystem() ) { mountPoints << Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString(); } mountPoints.removeDuplicates(); mountPoints.sort(); return mountPoints; } void standardMountPoints( QComboBox& combo ) { combo.clear(); combo.lineEdit()->setPlaceholderText( QObject::tr( "(no mount point)" ) ); combo.addItems( standardMountPoints() ); } void standardMountPoints( QComboBox& combo, const QString& selected ) { standardMountPoints( combo ); setSelectedMountPoint( combo, selected ); } QString selectedMountPoint( QComboBox& combo ) { return combo.currentText(); } void setSelectedMountPoint( QComboBox& combo, const QString& selected ) { if ( selected.isEmpty() ) { combo.setCurrentIndex( -1 ); // (no mount point) } else { for ( int i = 0; i < combo.count(); ++i ) { if ( selected == combo.itemText( i ) ) { combo.setCurrentIndex( i ); return; } } combo.addItem( selected ); combo.setCurrentIndex( combo.count() - 1 ); } } bool validateMountPoint( const QString& mountPoint, const QStringList& inUse, QLabel* label, QPushButton* button ) { QString msg; bool ok = true; if ( inUse.contains( mountPoint ) ) { msg = CreatePartitionDialog::tr( "Mountpoint already in use. Please select another one." ); ok = false; } else if ( !mountPoint.isEmpty() && !mountPoint.startsWith( '/' ) ) { msg = CreatePartitionDialog::tr( "Mountpoint must start with a /." ); ok = false; } if ( label ) { label->setText( msg ); } if ( button ) { button->setEnabled( ok ); } return ok; } PartitionTable::Flags flagsFromList( const QListWidget& list ) { 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-calamares-2d126ae/src/modules/partition/gui/PartitionDialogHelpers.h000066400000000000000000000046221430147706700276340ustar00rootroot00000000000000/* === 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 QPushButton; class QComboBox; class QLabel; 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 ); } /** @brief Validate a @p mountPoint and adjust the UI * * If @p mountPoint is valid -- unused and starts with a /, for instance -- * then the button is enabled, label is cleared, and returns @c true. * * If it is not valid, returns @c false and sets the UI * to explain why. */ bool validateMountPoint( const QString& mountPoint, const QStringList& inUse, QLabel* label, QPushButton* button ); /** * Get the flags that have been checked in the list widget. */ PartitionTable::Flags flagsFromList( const QListWidget& list ); void setFlagList( QListWidget& list, PartitionTable::Flags available, PartitionTable::Flags checked ); #endif calamares-calamares-2d126ae/src/modules/partition/gui/PartitionLabelsView.cpp000066400000000000000000000414121430147706700275000ustar00rootroot00000000000000/* === 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 "core/SizeUtils.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Units.h" #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" ), 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-calamares-2d126ae/src/modules/partition/gui/PartitionLabelsView.h000066400000000000000000000057121430147706700271500ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/PartitionPage.cpp000066400000000000000000000565121430147706700263260ustar00rootroot00000000000000/* === 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 "Branding.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "widgets/TranslationFix.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 allow_create = false, allow_create_table = false, allow_edit = false, allow_delete = false; bool currentDeviceIsVG = false, isDeactivable = false; bool isRemovable = false, isVGdeactivated = false; QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( index.isValid() ) { const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Q_ASSERT( model ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); const bool isFree = CalamaresUtils::Partition::isPartitionFreeSpace( partition ); const bool isExtended = partition->roles().has( PartitionRole::Extended ); // An extended partition can have a "free space" child; that one does // not count as a real child. If there are more children, at least one // is a real one and we should not allow the extended partition to be // deleted. const bool hasChildren = isExtended && ( partition->children().length() > 1 || ( partition->children().length() == 1 && !CalamaresUtils::Partition::isPartitionFreeSpace( partition->children().at( 0 ) ) ) ); const bool isInVG = m_core->isInVG( partition ); allow_create = isFree; // Keep it simple for now: do not support editing extended partitions as // it does not work with our current edit implementation which is // 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 allow_edit = !isFree && !isExtended; allow_delete = !isFree && !isInVG && !hasChildren; } 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 ) { allow_create_table = true; #ifdef WITH_KPMCORE4API if ( device->type() == Device::Type::SoftwareRAID_Device && static_cast< SoftwareRAID* >( device )->status() == SoftwareRAID::Status::Inactive ) { allow_create_table = false; allow_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( allow_create ); m_ui->editButton->setEnabled( allow_edit ); m_ui->deleteButton->setEnabled( allow_delete ); m_ui->newPartitionTableButton->setEnabled( allow_create_table ); m_ui->resizeVolumeGroupButton->setEnabled( currentDeviceIsVG && !isVGdeactivated ); m_ui->deactivateVolumeGroupButton->setEnabled( currentDeviceIsVG && isDeactivable && !isVGdeactivated ); m_ui->removeVolumeGroupButton->setEnabled( currentDeviceIsVG && isRemovable ); } 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 mb( QMessageBox::Warning, tr( "Can not create new partition" ), tr( "The partition table on %1 already has %2 primary partitions, and no more can be added. " "Please remove one primary partition and add an extended partition, instead." ) .arg( device->name() ) .arg( table->numPrimaries() ), QMessageBox::Ok ); Calamares::fixButtonLabels( &mb ); mb.exec(); 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-calamares-2d126ae/src/modules/partition/gui/PartitionPage.h000066400000000000000000000047211430147706700257660ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/PartitionPage.ui000066400000000000000000000144541430147706700261600ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/partition/gui/PartitionSizeController.cpp000066400000000000000000000142261430147706700304240ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/PartitionSizeController.h000066400000000000000000000035561430147706700300750ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/PartitionSplitterWidget.cpp000066400000000000000000000476431430147706700304310ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/PartitionSplitterWidget.h000066400000000000000000000056231430147706700300660ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/PartitionViewSelectionFilter.h000066400000000000000000000007561430147706700310440ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/ReplaceWidget.cpp000066400000000000000000000340471430147706700262760ustar00rootroot00000000000000/* === 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; } } // The loss of precision is ok; we're not going to fall over from a single byte if ( static_cast< double >( partition->capacity() ) < requiredSpaceB ) { updateStatus( CalamaresUtils::Fail, tr( "%4

" "The partition %1 is too small for %2. Please select a partition " "with capacity at least %3 GiB." ) .arg( partition->partitionPath() ) .arg( 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-calamares-2d126ae/src/modules/partition/gui/ReplaceWidget.h000066400000000000000000000026211430147706700257340ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/ReplaceWidget.ui000066400000000000000000000072041430147706700261240ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp000066400000000000000000000034221430147706700303360ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/ResizeVolumeGroupDialog.h000066400000000000000000000016661430147706700300130ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/ScanningDialog.cpp000066400000000000000000000041321430147706700264270ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/ScanningDialog.h000066400000000000000000000020251430147706700260730ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/VolumeGroupBaseDialog.cpp000066400000000000000000000103401430147706700277440ustar00rootroot00000000000000/* === 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 "core/SizeUtils.h" #include "gui/ListPhysicalVolumeWidgetItem.h" #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( 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( 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-calamares-2d126ae/src/modules/partition/gui/VolumeGroupBaseDialog.h000066400000000000000000000025701430147706700274170ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/gui/VolumeGroupBaseDialog.ui000066400000000000000000000130701430147706700276020ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/partition/jobs/000077500000000000000000000000001430147706700232145ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/partition/jobs/AutoMountManagementJob.cpp000066400000000000000000000017121430147706700303040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "AutoMountManagementJob.h" #include "utils/Logger.h" AutoMountManagementJob::AutoMountManagementJob( bool disable ) : m_disable( disable ) { } QString AutoMountManagementJob::prettyName() const { return tr( "Manage auto-mount settings" ); } Calamares::JobResult AutoMountManagementJob::exec() { if ( m_stored ) { cDebug() << "Restore automount settings"; CalamaresUtils::Partition::automountRestore( m_stored ); m_stored.reset(); } else { cDebug() << "Set automount to" << ( m_disable ? "disable" : "enable" ); m_stored = CalamaresUtils::Partition::automountDisable( m_disable ); } return Calamares::JobResult::ok(); } calamares-calamares-2d126ae/src/modules/partition/jobs/AutoMountManagementJob.h000066400000000000000000000022471430147706700277550ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/ChangeFilesystemLabelJob.cpp000066400000000000000000000034441430147706700305520ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/ChangeFilesystemLabelJob.h000066400000000000000000000017211430147706700302130ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/ClearMountsJob.cpp000066400000000000000000000300741430147706700266130ustar00rootroot00000000000000/* === 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 #include using CalamaresUtils::Partition::PartitionIterator; /** @brief Returns list of partitions on a given @p deviceName * * The @p deviceName is a (whole-block) device, like "sda", and the partitions * returned are then "sdaX". The whole-block device itself is ignored, if * present. Partitions are returned with their full /dev/ path (e.g. /dev/sda1). * * The format for /etc/partitions is, e.g. * major minor #blocks name * 8 0 33554422 sda * 8 1 33554400 sda1 */ STATICTEST QStringList getPartitionsForDevice( const QString& deviceName ) { QStringList partitions; QFile dev_partitions( "/proc/partitions" ); if ( dev_partitions.open( QFile::ReadOnly ) ) { cDebug() << "Reading from" << dev_partitions.fileName() << "looking for" << deviceName; QTextStream in( &dev_partitions ); (void)in.readLine(); // That's the header line, skip it while ( !in.atEnd() ) { // The fourth column (index from 0, so index 3) is the name of the device; // keep it if it is followed by something. QStringList columns = in.readLine().split( ' ', SplitSkipEmptyParts ); if ( ( columns.count() >= 4 ) && ( columns[ 3 ].startsWith( deviceName ) ) && ( columns[ 3 ] != deviceName ) ) { partitions.append( QStringLiteral( "/dev/" ) + columns[ 3 ] ); } } } else { cDebug() << "Could not open" << dev_partitions.fileName(); } return partitions; } STATICTEST QStringList getSwapsForDevice( const QString& deviceName ) { QProcess process; // 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", deviceName } ); 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(); } return swapPartitions; } static inline bool isControl( const QString& baseName ) { return baseName == "control"; } static inline bool isFedoraSpecial( const QString& baseName ) { // Fedora live images use /dev/mapper/live-* internally. We must not // unmount those devices, because they are used by the live image and // because we need /dev/mapper/live-base in the unpackfs module. return baseName.startsWith( "live-" ); } /** @brief Returns a list of unneeded crypto devices * * These are the crypto devices to unmount and close; some are "needed" * for system operation: on Fedora, the live- mappers are special. * Some other devices are special, too, so those do not end up in * the list. */ STATICTEST QStringList getCryptoDevices( const QStringList& mapperExceptions ) { QDir mapperDir( "/dev/mapper" ); const QFileInfoList fiList = mapperDir.entryInfoList( QDir::Files ); QStringList list; for ( const QFileInfo& fi : fiList ) { QString baseName = fi.baseName(); if ( isControl( baseName ) || isFedoraSpecial( baseName ) || mapperExceptions.contains( baseName ) ) { continue; } list.append( fi.absoluteFilePath() ); } return list; } STATICTEST QStringList getLVMVolumes() { QProcess process; // First we umount all LVM logical volumes we can find process.start( "lvscan", { "-a" } ); process.waitForFinished(); if ( process.exitCode() == 0 ) //means LVM2 tools are installed { QStringList lvscanLines = QString::fromLocal8Bit( process.readAllStandardOutput() ).split( '\n' ); // Get the second column (`value(1)`) sinec that is the device name, // remove quoting. std::transform( lvscanLines.begin(), lvscanLines.end(), lvscanLines.begin(), []( const QString& lvscanLine ) { return lvscanLine.simplified().split( ' ' ).value( 1 ).replace( '\'', "" ); } ); return lvscanLines; } else { cWarning() << "this system does not seem to have LVM2 tools."; } return QStringList(); } STATICTEST QStringList getPVGroups( const QString& deviceName ) { QProcess process; // Then we go looking for volume groups that use this device for physical volumes process.start( "pvdisplay", { "-C", "--noheadings" } ); process.waitForFinished(); 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 ); } // toList() was deprecated, but old-old versions don't support QStringList construction like this #if QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 ) return vgSet.toList(); #else return QStringList { vgSet.cbegin(), vgSet.cend() }; #endif } } else { cWarning() << "this system does not seem to have LVM2 tools."; } return QStringList(); } /* * The tryX() free functions, below, return an empty QString on * failure, or a non-empty QString on success. The string is * meant **only** for debugging and is not displayed to the user, * which is why no translation is applied. * * The MessageAndPath class stores a C-style pointer to a character * array -- from QT_TRANSLATE_NOOP() -- and a path to substitute into it. * * When the tryX() functions return an "empty string", it is an * empty MessageAndPath which acts like an empty string (in particular, * isEmpty() is true). */ class MessageAndPath { public: ///@brief An unsuccessful attempt at something MessageAndPath() {} ///@brief A success at doing @p thing to @p path MessageAndPath( const char* thing, const QString& path ) : m_message( thing ) , m_path( path ) { } bool isEmpty() const { return !m_message; } explicit operator QString() const { return isEmpty() ? QString() : QCoreApplication::translate( "ClearMountsJob", m_message ).arg( m_path ); } private: const char* m_message = nullptr; QString m_path; }; STATICTEST inline QDebug& operator<<( QDebug& s, const MessageAndPath& m ) { if ( m.isEmpty() ) { return s; } return s << QString( m ); } ///@brief Returns a debug-string if @p partPath could be unmounted STATICTEST MessageAndPath tryUmount( const QString& partPath ) { QProcess process; process.start( "umount", { partPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) { return { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully unmounted %1." ), partPath }; } process.start( "swapoff", { partPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) { return { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully disabled swap %1." ), partPath }; } return {}; } ///@brief Returns a debug-string if @p partPath was swap and could be cleared STATICTEST MessageAndPath tryClearSwap( const QString& partPath ) { QProcess process; process.start( "blkid", { "-s", "UUID", "-o", "value", partPath } ); process.waitForFinished(); QString swapPartUuid = QString::fromLocal8Bit( process.readAllStandardOutput() ).simplified(); if ( process.exitCode() != 0 || swapPartUuid.isEmpty() ) { return {}; } process.start( "mkswap", { "-U", swapPartUuid, partPath } ); process.waitForFinished(); if ( process.exitCode() != 0 ) { return {}; } return { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully cleared swap %1." ), partPath }; } ///@brief Returns a debug-string if @p mapperPath could be closed STATICTEST MessageAndPath tryCryptoClose( const QString& mapperPath ) { /* ignored */ tryUmount( mapperPath ); QProcess process; process.start( "cryptsetup", { "close", mapperPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) { return { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully closed mapper device %1." ), mapperPath }; } return {}; } STATICTEST MessageAndPath tryVGDisable( const QString& vgName ) { QProcess vgProcess; vgProcess.start( "vgchange", { "-an", vgName } ); vgProcess.waitForFinished(); return ( vgProcess.exitCode() == 0 ) ? MessageAndPath { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully disabled volume group %1." ), vgName } : MessageAndPath {}; } ///@brief Apply @p f to all the @p paths, appending successes to @p news template < typename F > void apply( const QStringList& paths, F f, QList< MessageAndPath >& news ) { for ( const QString& p : qAsConst( paths ) ) { auto n = f( p ); if ( !n.isEmpty() ) { news.append( n ); } } } STATICTEST QStringList stringify( const QList< MessageAndPath >& news ) { QStringList l; for ( const auto& m : qAsConst( news ) ) { l << QString( m ); } return l; } ClearMountsJob::ClearMountsJob( Device* device ) : Calamares::Job() , m_deviceNode( device->deviceNode() ) { } QString ClearMountsJob::prettyName() const { return tr( "Clear mounts for partitioning operations on %1" ).arg( m_deviceNode ); } QString ClearMountsJob::prettyStatusMessage() const { return tr( "Clearing mounts for partitioning operations on %1." ).arg( m_deviceNode ); } Calamares::JobResult ClearMountsJob::exec() { const QString deviceName = m_deviceNode.split( '/' ).last(); CalamaresUtils::Partition::Syncer s; QList< MessageAndPath > goodNews; apply( getCryptoDevices( m_mapperExceptions ), tryCryptoClose, goodNews ); apply( getLVMVolumes(), tryUmount, goodNews ); apply( getPVGroups( deviceName ), tryVGDisable, goodNews ); apply( getCryptoDevices( m_mapperExceptions ), tryCryptoClose, goodNews ); apply( getPartitionsForDevice( deviceName ), tryUmount, goodNews ); apply( getSwapsForDevice( m_deviceNode ), tryClearSwap, goodNews ); Calamares::JobResult ok = Calamares::JobResult::ok(); ok.setMessage( tr( "Cleared all mounts for %1" ).arg( m_deviceNode ) ); ok.setDetails( stringify( goodNews ).join( "\n" ) ); cDebug() << "ClearMountsJob finished. Here's what was done:" << Logger::DebugListT< MessageAndPath >( goodNews ); return ok; } calamares-calamares-2d126ae/src/modules/partition/jobs/ClearMountsJob.h000066400000000000000000000033531430147706700262600ustar00rootroot00000000000000/* === 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. * * - partitions on the device are unmounted * - swap on the device is disabled and cleared * - physical volumes for LVM on the device are disabled * * In addition, regardless of device: * - almost all(*) /dev/mapper entries (crypto / LUKS, also LVM) are closed * - all logical volumes for LVM are unmounted * Exceptions to "all /dev/mapper" may be configured through * the setMapperExceptions() method. Pass in names of mapper * files that should not be closed (e.g. "myvg-mylv"). * * (*) Some exceptions always exist: /dev/mapper/control is never * closed. /dev/mapper/live-* is never closed. * */ class ClearMountsJob : public Calamares::Job { Q_OBJECT public: /** @brief Creates a job freeing mounts on @p device * * No ownership is transferred; the @p device is used only to access * the device node (name). */ explicit ClearMountsJob( Device* device ); QString prettyName() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; ///@brief Sets the list of exceptions (names) when closing /dev/mapper void setMapperExceptions( const QStringList& names ) { m_mapperExceptions = names; } private: const QString m_deviceNode; QStringList m_mapperExceptions; }; #endif // CLEARMOUNTSJOB_H calamares-calamares-2d126ae/src/modules/partition/jobs/ClearTempMountsJob.cpp000066400000000000000000000036541430147706700274450ustar00rootroot00000000000000/* === 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 "partition/Mount.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. using MtabInfo = CalamaresUtils::Partition::MtabInfo; auto targetMounts = MtabInfo::fromMtabFilteredByPrefix( QStringLiteral( "/tmp/calamares-" ) ); if ( targetMounts.isEmpty() ) { return Calamares::JobResult::ok(); } std::sort( targetMounts.begin(), targetMounts.end(), MtabInfo::mountPointOrder ); QStringList goodNews; for ( const auto& m : qAsConst( targetMounts ) ) { cDebug() << o << "Will try to umount path" << m.mountPoint; if ( CalamaresUtils::Partition::unmount( m.mountPoint, { "-lv" } ) == 0 ) { // Returns the program's exit code, so 0 is success goodNews.append( QString( "Successfully unmounted %1." ).arg( m.mountPoint ) ); } } 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-calamares-2d126ae/src/modules/partition/jobs/ClearTempMountsJob.h000066400000000000000000000013521430147706700271030ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/CreatePartitionJob.cpp000066400000000000000000000254261430147706700274610ustar00rootroot00000000000000/* === 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 "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "partition/FileSystem.h" #include "partition/PartitionQuery.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Units.h" #include #include #include #include #include #include #include #include #include using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; /** @brief Create * * Uses sfdisk to remove @p partition. This should only be used in cases * where using kpmcore to remove the partition would not be appropriate * */ static Calamares::JobResult createZfs( Partition* partition, Device* device ) { auto r = CalamaresUtils::System::instance()->runCommand( { "sh", "-c", "echo start=" + QString::number( partition->firstSector() ) + " size=" + QString::number( partition->length() ) + " | sfdisk --append --force " + partition->devicePath() }, std::chrono::seconds( 5 ) ); if ( r.getExitCode() != 0 ) { return Calamares::JobResult::error( QCoreApplication::translate( CreatePartitionJob::staticMetaObject.className(), "Failed to create partition" ), QCoreApplication::translate( CreatePartitionJob::staticMetaObject.className(), "Failed to create zfs partition with output: " + r.getOutput().toLocal8Bit() ) ); } // Now we need to do some things that would normally be done by kpmcore // First we get the device node from the output and set it as the partition path QString deviceNode; { QRegularExpression re( QStringLiteral( "Created a new partition (\\d+)" ) ); QRegularExpressionMatch rem = re.match( r.getOutput() ); if ( rem.hasMatch() ) { if ( partition->devicePath().back().isDigit() ) { deviceNode = partition->devicePath() + QLatin1Char( 'p' ) + rem.captured( 1 ); } else { deviceNode = partition->devicePath() + rem.captured( 1 ); } } partition->setPartitionPath( deviceNode ); } // If it is a gpt device, set the partition UUID if ( device->partitionTable()->type() == PartitionTable::gpt && partition->uuid().isEmpty() ) { r = CalamaresUtils::System::instance()->runCommand( { "sfdisk", "--list", "--output", "Device,UUID", partition->devicePath() }, std::chrono::seconds( 5 ) ); if ( r.getExitCode() == 0 ) { QRegularExpression re( deviceNode + QStringLiteral( " +(.+)" ) ); QRegularExpressionMatch rem = re.match( r.getOutput() ); if ( rem.hasMatch() ) { partition->setUUID( rem.captured( 1 ) ); } } } return Calamares::JobResult::ok(); } CreatePartitionJob::CreatePartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) , m_device( device ) { } static QString prettyGptType( const Partition* partition ) { #ifdef WITH_KPMCORE42API static const QMap< QString, QString > gptTypePrettyStrings = { { "44479540-f297-41b2-9af7-d131d5f0458a", "Linux Root Partition (x86)" }, { "4f68bce3-e8cd-4db1-96e7-fbcaf984b709", "Linux Root Partition (x86-64)" }, { "69dad710-2ce4-4e3c-b16c-21a1d49abed3", "Linux Root Partition (32-bit ARM)" }, { "b921b045-1df0-41c3-af44-4c6f280d3fae", "Linux Root Partition (64-bit ARM)" }, { "993d8d3d-f80e-4225-855a-9daf8ed7ea97", "Linux Root Partition (Itanium/IA-64)" }, { "d13c5d3b-b5d1-422a-b29f-9454fdc89d76", "Linux Root Verity Partition (x86)" }, { "2c7357ed-ebd2-46d9-aec1-23d437ec2bf5", "Linux Root Verity Partition (x86-64)" }, { "7386cdf2-203c-47a9-a498-f2ecce45a2d6", "Linux Root Verity Partition (32-bit ARM)" }, { "df3300ce-d69f-4c92-978c-9bfb0f38d820", "Linux Root Verity Partition (64-bit ARM/AArch64)" }, { "86ed10d5-b607-45bb-8957-d350f23d0571", "Linux Root Verity Partition (Itanium/IA-64)" }, { "75250d76-8cc6-458e-bd66-bd47cc81a812", "Linux /usr Partition (x86)" }, { "8484680c-9521-48c6-9c11-b0720656f69e", "Linux /usr Partition (x86-64)" }, { "7d0359a3-02b3-4f0a-865c-654403e70625", "Linux /usr Partition (32-bit ARM)" }, { "b0e01050-ee5f-4390-949a-9101b17104e9", "Linux /usr Partition (64-bit ARM/AArch64)" }, { "4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea", "Linux /usr Partition (Itanium/IA-64)" }, { "8f461b0d-14ee-4e81-9aa9-049b6fb97abd", "Linux /usr Verity Partition (x86)" }, { "77ff5f63-e7b6-4633-acf4-1565b864c0e6", "Linux /usr Verity Partition (x86-64)" }, { "c215d751-7bcd-4649-be90-6627490a4c05", "Linux /usr Verity Partition (32-bit ARM)" }, { "6e11a4e7-fbca-4ded-b9e9-e1a512bb664e", "Linux /usr Verity Partition (64-bit ARM/AArch64)" }, { "6a491e03-3be7-4545-8e38-83320e0ea880", "Linux /usr Verity Partition (Itanium/IA-64)" }, { "933ac7e1-2eb4-4f13-b844-0e14e2aef915", "Linux Home Partition" }, { "3b8f8425-20e0-4f3b-907f-1a25a76f98e8", "Linux Server Data Partition" }, { "4d21b016-b534-45c2-a9fb-5c16e091fd2d", "Linux Variable Data Partition" }, { "7ec6f557-3bc5-4aca-b293-16ef5df639d1", "Linux Temporary Data Partition" }, { "0657fd6d-a4ab-43c4-84e5-0933c84b4f4f", "Linux Swap" }, { "c12a7328-f81f-11d2-ba4b-00a0c93ec93b", "EFI System Partition" }, { "bc13c2ff-59e6-4262-a352-b275fd6f7172", "Extended Boot Loader Partition" }, { "0fc63daf-8483-4772-8e79-3d69d8477de4", "Other Data Partitions" }, { "ebd0a0a2-b9e5-4433-87c0-68b6b72699c7", "Microsoft basic data" }, }; auto type = partition->type(); return gptTypePrettyStrings.value( type.toLower(), type ); #else return QString(); #endif } static QString prettyGptEntries( const Partition* partition ) { if ( !partition ) { return QString(); } QStringList list; if ( !partition->label().isEmpty() ) { list += partition->label(); } QString type = prettyGptType( partition ); if ( !type.isEmpty() ) { list += type; } return list.join( QStringLiteral( ", " ) ); } QString CreatePartitionJob::prettyName() const { const PartitionTable* table = CalamaresUtils::Partition::getPartitionTable( m_partition ); if ( table && table->type() == PartitionTable::TableType::gpt ) { QString entries = prettyGptEntries( m_partition ); if ( !entries.isEmpty() ) { return tr( "Create new %1MiB partition on %3 (%2) with entries %4." ) .arg( CalamaresUtils::BytesToMiB( m_partition->capacity() ) ) .arg( m_device->name() ) .arg( m_device->deviceNode() ) .arg( entries ); } else { return tr( "Create new %1MiB partition on %3 (%2)." ) .arg( CalamaresUtils::BytesToMiB( m_partition->capacity() ) ) .arg( m_device->name() ) .arg( m_device->deviceNode() ); } } return tr( "Create new %2MiB partition on %4 (%3) with file system %1." ) .arg( userVisibleFS( m_partition->fileSystem() ) ) .arg( CalamaresUtils::BytesToMiB( m_partition->capacity() ) ) .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() { // kpmcore doesn't currently handle this case properly so for now, we manually create the partion // The zfs module can later deal with creating a zpool in the partition if ( m_partition->fileSystem().type() == FileSystem::Type::Zfs ) { return createZfs( m_partition, m_device ); } return KPMHelpers::execute( NewOperation( *m_device, m_partition ), tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ) ); } void CreatePartitionJob::updatePreview() { m_device->partitionTable()->removeUnallocated(); m_partition->parent()->insert( m_partition ); m_device->partitionTable()->updateUnallocated( *m_device ); } calamares-calamares-2d126ae/src/modules/partition/jobs/CreatePartitionJob.h000066400000000000000000000020561430147706700271200ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/CreatePartitionTableJob.cpp000066400000000000000000000071111430147706700304200ustar00rootroot00000000000000/* === 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/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "core/KPMHelpers.h" #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() { 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( "" ) ); } auto lsblkResult = CalamaresUtils::System::runCommand( { "lsblk" }, std::chrono::seconds( 30 ) ); cDebug() << Logger::SubEntry << "lsblk output:\n" << Logger::NoQuote << lsblkResult.getOutput(); auto mountResult = CalamaresUtils::System::runCommand( { "mount" }, std::chrono::seconds( 30 ) ); cDebug() << Logger::SubEntry << "mount output:\n" << Logger::NoQuote << mountResult.getOutput(); } return KPMHelpers::execute( CreatePartitionTableOperation( *m_device, table ), tr( "The installer failed to create a partition table on %1." ).arg( m_device->name() ) ); } 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-calamares-2d126ae/src/modules/partition/jobs/CreatePartitionTableJob.h000066400000000000000000000023661430147706700300740ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/CreateVolumeGroupJob.cpp000066400000000000000000000034301430147706700277630ustar00rootroot00000000000000/* === 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" #include "core/KPMHelpers.h" #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() { return KPMHelpers::execute( CreateVolumeGroupOperation( m_vgName, m_pvList, m_peSize ), tr( "The installer failed to create a volume group named '%1'." ).arg( m_vgName ) ); } void 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-calamares-2d126ae/src/modules/partition/jobs/CreateVolumeGroupJob.h000066400000000000000000000020301430147706700274230ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp000066400000000000000000000024571430147706700306410ustar00rootroot00000000000000/* === 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 "core/KPMHelpers.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() { DeactivateVolumeGroupOperation op( *m_device ); auto r = KPMHelpers::execute( op, tr( "The installer failed to deactivate a volume group named %1." ).arg( m_device->name() ) ); if ( r ) { op.preview(); } return r; } calamares-calamares-2d126ae/src/modules/partition/jobs/DeactivateVolumeGroupJob.h000066400000000000000000000015331430147706700303000ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/DeletePartitionJob.cpp000066400000000000000000000074731430147706700274620ustar00rootroot00000000000000/* === 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" #include "core/KPMHelpers.h" #include "utils/CalamaresUtilsSystem.h" #include #include #include #include #include #include #include /** @brief Determine if the given partition is of type Zfs * * Returns true if @p partition is of type Zfs * */ static bool isZfs( Partition* partition ) { return partition->fileSystem().type() == FileSystem::Type::Zfs; } /** @brief Remove the given partition manually * * Uses sfdisk to remove @p partition. This should only be used in cases * where using kpmcore to remove the partition would not be appropriate * */ static Calamares::JobResult removePartition( Partition* partition ) { auto r = CalamaresUtils::System::instance()->runCommand( { "sfdisk", "--delete", "--force", partition->devicePath(), QString::number( partition->number() ) }, std::chrono::seconds( 5 ) ); if ( r.getExitCode() != 0 || r.getOutput().contains( "failed" ) ) { return Calamares::JobResult::error( QCoreApplication::translate( DeletePartitionJob::staticMetaObject.className(), "Deletion Failed" ), QCoreApplication::translate( DeletePartitionJob::staticMetaObject.className(), "Failed to delete the partition with output: " ) + r.getOutput() ); } else { return Calamares::JobResult::ok(); } } DeletePartitionJob::DeletePartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) , m_device( device ) { } 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() { // The current implementation of remove() for zfs in kpmcore trys to destroy the zpool by label // This isn't what we want here so we delete the partition instead. if ( isZfs( m_partition ) ) { return removePartition( m_partition ); } return KPMHelpers::execute( DeleteOperation( *m_device, m_partition ), tr( "The installer failed to delete partition %1." ).arg( m_partition->devicePath() ) ); } 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-calamares-2d126ae/src/modules/partition/jobs/DeletePartitionJob.h000066400000000000000000000021701430147706700271140ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/FillGlobalStorageJob.cpp000066400000000000000000000322071430147706700277130ustar00rootroot00000000000000/* === 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 >; // clang-format off deb << Logger::SubEntry << "mapping for" << partition->partitionPath() << partition->deviceNode() << TR( "partlabel", map[ "partlabel" ].toString() ) << TR( "partition-uuid (partuuid)", Logger::RedactedName( "PartUUID", map[ "partuuid" ].toString() ) ) << TR( "parttype", map[ "parttype" ].toString() ) << TR( "partattrs", map[ "partattrs" ].toString() ) << TR( "mountPoint:", PartitionInfo::mountPoint( partition ) ) << TR( "fs:", map[ "fs" ].toString() ) << TR( "fsName", map[ "fsName" ].toString() ) << TR( "filesystem-uuid (uuid)", Logger::RedactedName( "FSUUID", uuid ) ) << TR( "claimed", map[ "claimed" ].toString() ); // clang-format on if ( partition->roles().has( PartitionRole::Luks ) ) { const FileSystem& fsRef = partition->fileSystem(); 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-calamares-2d126ae/src/modules/partition/jobs/FillGlobalStorageJob.h000066400000000000000000000024471430147706700273630ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/FormatPartitionJob.cpp000066400000000000000000000060121430147706700274740ustar00rootroot00000000000000/* === 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 "core/KPMHelpers.h" #include "partition/FileSystem.h" #include "utils/CalamaresUtilsSystem.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 { QString partitionLabel = m_partition->label().isEmpty() ? m_partition->partitionPath() : tr( "%1 (%2)", "partition label %1 (device path %2)" ) .arg( m_partition->label(), m_partition->partitionPath() ); return tr( "Formatting partition %1 with " "file system %2." ) .arg( partitionLabel, userVisibleFS( m_partition->fileSystem() ) ); } Calamares::JobResult FormatPartitionJob::exec() { const auto fsType = m_partition->fileSystem().type(); auto r = KPMHelpers::execute( CreateFileSystemOperation( *m_device, *m_partition, fsType ), tr( "The installer failed to format partition %1 on disk '%2'." ) .arg( m_partition->partitionPath(), m_device->name() ) ); if ( fsType == FileSystem::Xfs && r.succeeded() ) { // We are going to try to set modern timestamps for the filesystem, // (ignoring whether this succeeds). Requires a sufficiently-new // xfs_admin and xfs_repair and might be made obsolete by newer // kpmcore releases. CalamaresUtils::System::runCommand( { "xfs_admin", "-O", "bigtime=1", m_partition->partitionPath() }, std::chrono::seconds( 60 ) ); } return r; } calamares-calamares-2d126ae/src/modules/partition/jobs/FormatPartitionJob.h000066400000000000000000000020471430147706700271450ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/PartitionJob.cpp000066400000000000000000000011201430147706700263160ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/PartitionJob.h000066400000000000000000000020541430147706700257720ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp000066400000000000000000000023041430147706700300140ustar00rootroot00000000000000/* === 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 "core/KPMHelpers.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() { return KPMHelpers::execute( RemoveVolumeGroupOperation( *m_device ), tr( "The installer failed to remove a volume group named '%1'." ).arg( m_device->name() ) ); } calamares-calamares-2d126ae/src/modules/partition/jobs/RemoveVolumeGroupJob.h000066400000000000000000000015361430147706700274670ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/ResizePartitionJob.cpp000066400000000000000000000063431430147706700275140ustar00rootroot00000000000000/* === 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 "core/KPMHelpers.h" #include "utils/Units.h" #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() { // 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 ); connect( &op, &Operation::progress, this, &ResizePartitionJob::iprogress ); return KPMHelpers::execute( op, tr( "The installer failed to resize partition %1 on disk '%2'." ) .arg( m_partition->partitionPath() ) .arg( m_device->name() ) ); } 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-calamares-2d126ae/src/modules/partition/jobs/ResizePartitionJob.h000066400000000000000000000022431430147706700271540ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp000066400000000000000000000041331430147706700300220ustar00rootroot00000000000000/* === 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" #include "core/KPMHelpers.h" #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() { return KPMHelpers::execute( ResizeVolumeGroupOperation( *m_device, m_partitionList ), tr( "The installer failed to resize a volume group named '%1'." ).arg( m_device->name() ) ); } 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-calamares-2d126ae/src/modules/partition/jobs/ResizeVolumeGroupJob.h000066400000000000000000000020671430147706700274730ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/jobs/SetPartitionFlagsJob.cpp000066400000000000000000000120001430147706700277460ustar00rootroot00000000000000/* === 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 "core/KPMHelpers.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 ); SetPartFlagsOperation op( *m_device, *partition(), m_flags ); connect( &op, &Operation::progress, this, &SetPartFlagsJob::iprogress ); return KPMHelpers::execute( op, tr( "The installer failed to set flags on partition %1." ).arg( m_partition->partitionPath() ) ); } calamares-calamares-2d126ae/src/modules/partition/jobs/SetPartitionFlagsJob.h000066400000000000000000000021051430147706700274200ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/partition.conf000066400000000000000000000243571430147706700251520ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # This setting specifies the mount point of the EFI system partition. Some # distributions (Fedora, Debian, Manjaro, etc.) use /boot/efi, others (KaOS, # etc.) use just /boot. # # Defaults to "/boot/efi", may be empty (but weird effects ensue) efiSystemPartition: "/boot/efi" # This optional setting specifies the size of the EFI system partition. # If nothing is specified, the default size of 300MiB will be used. # # This size applies both to automatic partitioning and the checks # during manual partitioning. A minimum of 32MiB is enforced, # 300MiB is the default, M is treated as MiB, and if you really want # one-million (10^6) bytes, use MB. # # efiSystemPartitionSize: 300M # This optional setting specifies the name of the EFI system partition (see # PARTLABEL; gpt only; requires KPMCore >= 4.2.0). # If nothing is specified, the partition name is left unset. # efiSystemPartitionName: EFI # In autogenerated partitioning, allow the user to select a swap size? # If there is exactly one choice, no UI is presented, and the user # cannot make a choice -- this setting is used. If there is more than # 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-calamares-2d126ae/src/modules/partition/partition.schema.yaml000066400000000000000000000025141430147706700264150ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/partition/tests/000077500000000000000000000000001430147706700234215ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/partition/tests/AutoMountTests.cpp000066400000000000000000000045121430147706700271050ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/tests/CMakeLists.txt000066400000000000000000000041131430147706700261600ustar00rootroot00000000000000# === 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( partitionjobtest 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( partitionclearmountsjobtest SOURCES ${PartitionModule_SOURCE_DIR}/jobs/ClearMountsJob.cpp ClearMountsJobTests.cpp LIBRARIES kpmcore DEFINITIONS ${_partition_defs} ) calamares_add_test( partitioncreatelayoutstest SOURCES CreateLayoutsTests.cpp ${PartitionModule_SOURCE_DIR}/core/KPMHelpers.cpp ${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp ${PartitionModule_SOURCE_DIR}/core/PartitionLayout.cpp ${PartitionModule_SOURCE_DIR}/core/PartUtils.cpp ${PartitionModule_SOURCE_DIR}/core/DeviceModel.cpp LIBRARIES kpmcore Calamares::calamaresui DEFINITIONS ${_partition_defs} ) calamares_add_test( partitionautomounttest SOURCES ${PartitionModule_SOURCE_DIR}/jobs/AutoMountManagementJob.cpp AutoMountTests.cpp DEFINITIONS ${_partition_defs} ) calamares_add_test( partitiondevicestest SOURCES DevicesTests.cpp ${PartitionModule_SOURCE_DIR}/core/DeviceList.cpp LIBRARIES kpmcore DEFINITIONS ${_partition_defs} ) calamares-calamares-2d126ae/src/modules/partition/tests/ClearMountsJobTests.cpp000066400000000000000000000037631430147706700300500ustar00rootroot00000000000000/* === 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 ); /* At one point, the partitions-list was read from /proc/partitions by * running awk and grep, as below. Check that the current implementation * matches that crufty one. * * Update 2021-11-02: the newer implementation prepends /dev/ to the * names of the partitions, for simplicity elsewhere, so that needs * to be added in to the awk(1) program, too. */ QStringList getPartitionsForDevice_other( const QString& deviceName ) { QProcess process; process.setProgram( "sh" ); process.setArguments( { "-c", QString( "echo $(awk '{print \"/dev/\"$4}' /proc/partitions | sed -e '/name/d' -e '/^$/d' " "-e '/[1-9]/!d' | grep %1)" ) .arg( deviceName ) } ); process.start(); process.waitForFinished(); const QString partitions = process.readAllStandardOutput().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-calamares-2d126ae/src/modules/partition/tests/ClearMountsJobTests.h000066400000000000000000000007601430147706700275070ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/tests/CreateLayoutsTests.cpp000066400000000000000000000110101430147706700277250ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/tests/CreateLayoutsTests.h000066400000000000000000000015571430147706700274110ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/tests/DevicesTests.cpp000066400000000000000000000037741430147706700265450ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "core/DeviceList.h" #include "partition/KPMManager.h" #include "utils/Logger.h" #include #include #include #include #include #include class DevicesTests : public QObject { Q_OBJECT public: DevicesTests(); private Q_SLOTS: void testKPMScanDevices(); void testPartUtilScanDevices(); private: std::unique_ptr< CalamaresUtils::Partition::KPMManager > m_d; bool m_isRoot = false; }; DevicesTests::DevicesTests() : m_d( std::make_unique< CalamaresUtils::Partition::KPMManager >() ) , m_isRoot( geteuid() == 0 ) { } void DevicesTests::testKPMScanDevices() { Logger::setupLogLevel( Logger::LOGVERBOSE ); cDebug() << "Getting devices via KPMCore"; CoreBackend* backend = CoreBackendManager::self()->backend(); QVERIFY( backend ); #if defined( WITH_KPMCORE4API ) auto flags = ScanFlag( ~0 ); #else auto flags = true; #endif auto devices = backend->scanDevices( flags ); // These flags try to get "all" cDebug() << Logger::SubEntry << "Done getting devices."; if ( !m_isRoot ) { QEXPECT_FAIL( "", "Test invalid when not root", Continue ); } QVERIFY( devices.count() > 0 ); } void DevicesTests::testPartUtilScanDevices() { Logger::setupLogLevel( Logger::LOGVERBOSE ); cDebug() << "Getting devices via PartUtils"; auto devices = PartUtils::getDevices(); cDebug() << Logger::SubEntry << "Done getting devices."; if ( !m_isRoot ) { QEXPECT_FAIL( "", "Test invalid when not root", Continue ); } QVERIFY( devices.count() > 0 ); } QTEST_GUILESS_MAIN( DevicesTests ) #include "utils/moc-warnings.h" #include "DevicesTests.moc" calamares-calamares-2d126ae/src/modules/partition/tests/PartitionJobTests.cpp000066400000000000000000000350131430147706700275560ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/partition/tests/PartitionJobTests.h000066400000000000000000000030021430147706700272140ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/plasmalnf/000077500000000000000000000000001430147706700222235ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/plasmalnf/CMakeLists.txt000066400000000000000000000030631430147706700247650ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/plasmalnf/Config.cpp000066400000000000000000000106511430147706700241370ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/plasmalnf/Config.h000066400000000000000000000041511430147706700236020ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/plasmalnf/PlasmaLnfJob.cpp000066400000000000000000000041211430147706700252350ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/plasmalnf/PlasmaLnfJob.h000066400000000000000000000013011430147706700246770ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/plasmalnf/PlasmaLnfPage.cpp000066400000000000000000000111131430147706700253760ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/plasmalnf/PlasmaLnfPage.h000066400000000000000000000015351430147706700250520ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/plasmalnf/PlasmaLnfViewStep.cpp000066400000000000000000000031121430147706700262700ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/plasmalnf/PlasmaLnfViewStep.h000066400000000000000000000022461430147706700257440ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/plasmalnf/ThemeInfo.cpp000066400000000000000000000174651430147706700246220ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/plasmalnf/ThemeInfo.h000066400000000000000000000041571430147706700242610ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/plasmalnf/page_plasmalnf.qrc000066400000000000000000000001061430147706700257000ustar00rootroot00000000000000 view-preview.png calamares-calamares-2d126ae/src/modules/plasmalnf/page_plasmalnf.ui000066400000000000000000000016171430147706700255400ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/plasmalnf/plasmalnf.conf000066400000000000000000000070731430147706700250560ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/plasmalnf/view-preview.png000066400000000000000000000010601430147706700253570ustar00rootroot00000000000000‰PNG  IHDRxPÒ›±‰ pHYsÄÄ•+âIDATxœíÚMª£@…áÓMCÆ‚;pê"’Áq&®Á[ˆÁÔ&dœìA—á’‘=·¹éütnsµ’ÊûL„ŠŸUJÀ ~Ø.à;DQÔ9ÿf³yÙçôËvße½^2ï|>dÞ±ü´]†åLÖuŒ1jÛV’†¡Ò4•ïû–+ŸsÜu²,SªªJUU)eY¦®ël—7:ç6Æ(Žc%I"Ïóäyž’$QÇ2ÆØ.otÎܶ­f³ÙÅøt:ýóÊ~'ÎŒsΆ¡v»ÝÅø~¿W†*²Ë¹]tš¦Ê²LÒéµ,­ëZeYZ¬Ìçö}_eYÊ£º®%ºº,Ë›ŸIÇãQ“ÉdÌ2ñQõÿ«iš~±XôMÓ\½?ô1èМ[ƒ¿¢m[E¡$ITÅ[î²_Â#|8îvî­N~õv¿~4ÌkãüîüÚjµ:»ÞZs›¦é—Ë%?“[?Ú¹÷ð¸ð­0ÿ^‹]ØÉ]ôÇî8Ïó‹Ó«wûÞu.à{á¾#çÞn·„û‰sG•yžÛ.á©8×Á8çL¿úߌæ7BK`# sIIEND®B`‚calamares-calamares-2d126ae/src/modules/plasmalnf/view-preview.png.license000066400000000000000000000001701430147706700270010ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-calamares-2d126ae/src/modules/plasmalnf/view-preview.svg000066400000000000000000000010721430147706700253750ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/plasmalnf/view-preview.svg.license000066400000000000000000000001701430147706700270140ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-calamares-2d126ae/src/modules/plymouthcfg/000077500000000000000000000000001430147706700226075ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/plymouthcfg/main.py000066400000000000000000000036741430147706700241170ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/plymouthcfg/module.desc000066400000000000000000000002331430147706700247320ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "plymouthcfg" interface: "python" script: "main.py" calamares-calamares-2d126ae/src/modules/plymouthcfg/plymouthcfg.conf000066400000000000000000000017351430147706700260250ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/plymouthcfg/plymouthcfg.schema.yaml000066400000000000000000000004411430147706700272720ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/preservefiles/000077500000000000000000000000001430147706700231245ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/preservefiles/CMakeLists.txt000066400000000000000000000007531430147706700256710ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # calamares_add_plugin(preservefiles TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES Item.cpp PreserveFiles.cpp # REQUIRES mount # To set the rootMountPoint SHARED_LIB EMERGENCY ) calamares_add_test( preservefilestest SOURCES Item.cpp Tests.cpp ) calamares-calamares-2d126ae/src/modules/preservefiles/Item.cpp000066400000000000000000000103501430147706700245250ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018, 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "Item.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Units.h" #include "utils/Variant.h" #include using namespace CalamaresUtils::Units; static bool copy_file( const QString& source, const QString& dest ) { QFile sourcef( source ); if ( !sourcef.open( QFile::ReadOnly ) ) { cWarning() << "Could not read" << source; return false; } QFile destf( dest ); if ( !destf.open( QFile::WriteOnly ) ) { sourcef.close(); cWarning() << "Could not open" << destf.fileName() << "for writing; could not copy" << source; return false; } QByteArray b; do { b = sourcef.read( 1_MiB ); destf.write( b ); } while ( b.count() > 0 ); sourcef.close(); destf.close(); return true; } Item Item::fromVariant( const QVariant& v, const CalamaresUtils::Permissions& defaultPermissions ) { if ( v.type() == QVariant::String ) { QString filename = v.toString(); if ( !filename.isEmpty() ) { return { filename, filename, defaultPermissions, ItemType::Path, false }; } else { cWarning() << "Empty filename for preservefiles, item" << v; return {}; } } else if ( v.type() == QVariant::Map ) { const auto map = v.toMap(); CalamaresUtils::Permissions perm( defaultPermissions ); ItemType t = ItemType::None; bool optional = CalamaresUtils::getBool( map, "optional", false ); { QString perm_string = map[ "perm" ].toString(); if ( !perm_string.isEmpty() ) { perm = CalamaresUtils::Permissions( perm_string ); } } { QString from = map[ "from" ].toString(); t = ( from == "log" ) ? ItemType::Log : ( from == "config" ) ? ItemType::Config : ItemType::None; if ( t == ItemType::None && !map[ "src" ].toString().isEmpty() ) { t = ItemType::Path; } } QString dest = map[ "dest" ].toString(); if ( dest.isEmpty() ) { cWarning() << "Empty dest for preservefiles, item" << v; return {}; } switch ( t ) { case ItemType::Config: return { QString(), dest, perm, t, optional }; case ItemType::Log: return { QString(), dest, perm, t, optional }; case ItemType::Path: return { map[ "src" ].toString(), dest, perm, t, optional }; case ItemType::None: cWarning() << "Invalid type for preservefiles, item" << v; return {}; } } cWarning() << "Invalid type for preservefiles, item" << v; return {}; } bool Item::exec( const std::function< QString( QString ) >& replacements ) const { QString expanded_dest = replacements( dest ); QString full_dest = CalamaresUtils::System::instance()->targetPath( expanded_dest ); bool success = false; switch ( m_type ) { case ItemType::None: cWarning() << "Invalid item for preservefiles skipped."; return false; case ItemType::Config: if ( !( success = Calamares::JobQueue::instance()->globalStorage()->saveJson( full_dest ) ) ) { cWarning() << "Could not write a JSON dump of global storage to" << full_dest; } break; case ItemType::Log: if ( !( success = copy_file( Logger::logFile(), full_dest ) ) ) { cWarning() << "Could not preserve log file to" << full_dest; } break; case ItemType::Path: if ( !( success = copy_file( source, full_dest ) ) ) { cWarning() << "Could not preserve" << source << "to" << full_dest; } break; } if ( !success ) { CalamaresUtils::System::instance()->removeTargetFile( expanded_dest ); return false; } else { return perm.apply( full_dest ); } } calamares-calamares-2d126ae/src/modules/preservefiles/Item.h000066400000000000000000000036131430147706700241760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018, 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef PRESERVEFILES_ITEM_H #define PRESERVEFILES_ITEM_H #include "utils/Permissions.h" #include #include #include enum class ItemType { None, Path, Log, Config }; /** @brief Represents one item to copy * * All item types need a destination (to place the data), this is * intepreted within the target system. All items need a permission, * which is applied to the data once written. * * The source may be a path, but not all types need a source. */ class Item { QString source; QString dest; CalamaresUtils::Permissions perm; ItemType m_type = ItemType::None; bool m_optional = false; public: Item( const QString& src, const QString& d, CalamaresUtils::Permissions p, ItemType t, bool optional ) : source( src ) , dest( d ) , perm( std::move( p ) ) , m_type( t ) , m_optional( optional ) { } Item() : m_type( ItemType::None ) { } operator bool() const { return m_type != ItemType::None; } ItemType type() const { return m_type; } bool isOptional() const { return m_optional; } bool exec( const std::function< QString( QString ) >& replacements ) const; /** @brief Create an Item -- or one of its subclasses -- from @p v * * Depending on the structure and contents of @p v, a pointer * to an Item is returned. If @p v cannot be interpreted meaningfully, * then a nullptr is returned. * * When the entry contains a *perm* key, use that permission, otherwise * apply @p defaultPermissions to the item. */ static Item fromVariant( const QVariant& v, const CalamaresUtils::Permissions& defaultPermissions ); }; #endif calamares-calamares-2d126ae/src/modules/preservefiles/PreserveFiles.cpp000066400000000000000000000056671430147706700264240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "PreserveFiles.h" #include "Item.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/CommandList.h" #include "utils/Logger.h" #include "utils/Units.h" #include using namespace CalamaresUtils::Units; 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 ..." ); } Calamares::JobResult PreserveFiles::exec() { if ( m_items.empty() ) { return Calamares::JobResult::error( tr( "No files configured to save for later." ) ); } int count = 0; for ( const auto& it : qAsConst( m_items ) ) { if ( !it ) { // Invalid entries are nullptr, ignore them but count as a success // because they shouldn't block the installation. There are // warnings in the log showing what the configuration problem is. ++count; continue; } // Try to preserve the file. If it's marked as optional, count it // as a success regardless. if ( it.exec( atReplacements ) || it.isOptional() ) { ++count; } } return count == m_items.size() ? Calamares::JobResult::ok() : Calamares::JobResult::error( tr( "Not all of the configured files could be preserved." ) ); } void PreserveFiles::setConfigurationMap( const QVariantMap& configurationMap ) { 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" ); } CalamaresUtils::Permissions perm( defaultPermissions ); for ( const auto& li : files.toList() ) { m_items.push_back( Item::fromVariant( li, perm ) ); } } CALAMARES_PLUGIN_FACTORY_DEFINITION( PreserveFilesFactory, registerPlugin< PreserveFiles >(); ) calamares-calamares-2d126ae/src/modules/preservefiles/PreserveFiles.h000066400000000000000000000014751430147706700260620ustar00rootroot00000000000000/* === 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/PluginFactory.h" class Item; class PLUGINDLLEXPORT PreserveFiles : public Calamares::CppJob { Q_OBJECT 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-calamares-2d126ae/src/modules/preservefiles/Tests.cpp000066400000000000000000000051631430147706700247370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Item.h" #include "Settings.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Yaml.h" #include class PreserveFilesTests : public QObject { Q_OBJECT public: PreserveFilesTests(); ~PreserveFilesTests() override {} private Q_SLOTS: void initTestCase(); void testItems_data(); void testItems(); }; PreserveFilesTests::PreserveFilesTests() {} void PreserveFilesTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "PreserveFiles test started."; // Ensure we have a system object, expect it to be a "bogus" one CalamaresUtils::System* system = CalamaresUtils::System::instance(); QVERIFY( system ); cDebug() << Logger::SubEntry << "System @" << Logger::Pointer( system ); const auto* settings = Calamares::Settings::instance(); if ( !settings ) { (void)new Calamares::Settings( true ); } } void PreserveFilesTests::testItems_data() { QTest::addColumn< QString >( "filename" ); QTest::addColumn< bool >( "ok" ); QTest::addColumn< int >( "type_i" ); QTest::newRow( "log " ) << QString( "1a-log.conf" ) << true << smash( ItemType::Log ); QTest::newRow( "config " ) << QString( "1b-config.conf" ) << true << smash( ItemType::Config ); QTest::newRow( "src " ) << QString( "1c-src.conf" ) << true << smash( ItemType::Path ); QTest::newRow( "filename" ) << QString( "1d-filename.conf" ) << true << smash( ItemType::Path ); QTest::newRow( "empty " ) << QString( "1e-empty.conf" ) << false << smash( ItemType::None ); QTest::newRow( "bad " ) << QString( "1f-bad.conf" ) << false << smash( ItemType::None ); } void PreserveFilesTests::testItems() { QFETCH( QString, filename ); QFETCH( bool, ok ); QFETCH( int, type_i ); QFile fi( QString( "%1/tests/%2" ).arg( BUILD_AS_TEST, filename ) ); QVERIFY( fi.exists() ); bool config_file_ok = false; const auto map = CalamaresUtils::loadYaml( fi, &config_file_ok ); QVERIFY( config_file_ok ); CalamaresUtils::Permissions perm( QStringLiteral( "adridg:adridg:0750" ) ); auto i = Item::fromVariant( map[ "item" ], perm ); QCOMPARE( bool( i ), ok ); QCOMPARE( smash( i.type() ), type_i ); } QTEST_GUILESS_MAIN( PreserveFilesTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-calamares-2d126ae/src/modules/preservefiles/preservefiles.conf000066400000000000000000000057421430147706700266610ustar00rootroot00000000000000# 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 will be ignored (since the # destination is the same as the source). # - a map with a *dest* key. The *dest* value is a path interpreted in the # target system (if the global *dontChroot* is true, then the host is the # target as well). Relative paths are not recommended. There are two # ways to select the source data for the file: # - *from*, which must have one of the values, below; it is used to # preserve files whose pathname is known to Calamares internally. # - *src*, to refer to a path interpreted in the host system. Relative # paths are not recommended, and are interpreted relative to where # Calamares is being run. # Exactly one of the two source keys (either *from* or *src*) must be set. # # Special values for the key *from* are: # - *log*, for the complete log file (up to the moment the preservefiles # module is run), # - *config*, for a JSON dump of the contents of global storage. # Note that this may contain sensitive information, and should be # given restrictive permissions. # # A map with a *dest* key can have these additional fields: # - *perm*, is a colon-separated tuple of :: # where is in octal (e.g. 4777 for wide-open, 0400 for read-only # by owner). If set, the file's ownership and permissions are set to # those values within the target system; if not set, no permissions # are changed. # - *optional*, is a boolean; if this is set to `true` then failure to # preserve the file will **not** be counted as a failure of the # module, and installation will proceed. Set this for files that might # not exist in the host system (e.g. nvidia configuration files that # are created in some boot scenarios and not in others). # # The target path (*dest*) is modified as follows: # - `@@ROOT@@` is replaced by the path to the target root (may be /). # There is never any reason to use this, since the *dest* is already # interpreted in the target system. # - `@@USER@@` is replaced by the username entered by on the user # page (may be empty, for instance if no user page is enabled) # # # files: - from: log dest: /var/log/Calamares.log perm: root:wheel:600 - from: config dest: /var/log/Calamares-install.json perm: root:wheel:600 # - src: /var/log/nvidia.conf # dest: /var/log/Calamares-nvidia.conf # optional: true # The *perm* key contains a default value to apply to all files listed # above that do not have a *perm* key of their own. If not set, # root:root:0400 (highly restrictive) is used. # # perm: "root:root:0400" calamares-calamares-2d126ae/src/modules/preservefiles/preservefiles.schema.yaml000066400000000000000000000025301430147706700301250ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/preservefiles additionalProperties: false type: object properties: # TODO: it's a particularly-formatted string perm: { type: string } files: type: array items: # There are three entries here because: string, or an entry with # a src (but no from) or an entry with from (but no src). anyOf: - type: string - type: object properties: dest: { type: string } src: { type: string } # TODO: it's a particularly-formatted string perm: { type: string } optional: { type: boolean } required: [ dest ] additionalProperties: false - type: object properties: dest: { type: string } from: { type: string, enum: [config, log] } # TODO: it's a particularly-formatted string perm: { type: string } optional: { type: boolean } required: [ dest ] additionalProperties: false required: [ files ] calamares-calamares-2d126ae/src/modules/preservefiles/tests/000077500000000000000000000000001430147706700242665ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/preservefiles/tests/1a-log.conf000066400000000000000000000002201430147706700262070ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # item: from: log dest: /var/log/Calamares.log perm: root:wheel:601 calamares-calamares-2d126ae/src/modules/preservefiles/tests/1b-config.conf000066400000000000000000000002321430147706700266770ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 item: from: config dest: /var/log/Calamares-install.json perm: root:wheel:600 calamares-calamares-2d126ae/src/modules/preservefiles/tests/1c-src.conf000066400000000000000000000002541430147706700262260ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 item: src: /root/.cache/calamares/session.log dest: /var/log/Calamares.log perm: root:wheel:600 calamares-calamares-2d126ae/src/modules/preservefiles/tests/1d-filename.conf000066400000000000000000000002541430147706700272200ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 item: src: /root/.cache/calamares/session.log dest: /var/log/Calamares.log perm: root:wheel:600 calamares-calamares-2d126ae/src/modules/preservefiles/tests/1e-empty.conf000066400000000000000000000001111430147706700265670ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 item: [] calamares-calamares-2d126ae/src/modules/preservefiles/tests/1f-bad.conf000066400000000000000000000001211430147706700261610ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 item: bop: 1 calamares-calamares-2d126ae/src/modules/rawfs/000077500000000000000000000000001430147706700213705ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/rawfs/main.py000066400000000000000000000145301430147706700226710ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/rawfs/module.desc000066400000000000000000000003321430147706700235130ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/rawfs/rawfs.conf000066400000000000000000000022241430147706700233610ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/rawfs/tests/000077500000000000000000000000001430147706700225325ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/rawfs/tests/1.global000066400000000000000000000003571430147706700240610ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/rawfs/tests/1.job000066400000000000000000000004441430147706700233700ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/rawfs/tests/CMakeTests.txt000066400000000000000000000005251430147706700253000ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/removeuser/000077500000000000000000000000001430147706700224425ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/removeuser/CMakeLists.txt000066400000000000000000000004731430147706700252060ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/removeuser/RemoveUserJob.cpp000066400000000000000000000033351430147706700257010ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/removeuser/RemoveUserJob.h000066400000000000000000000016001430147706700253370ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/removeuser/removeuser.conf000066400000000000000000000006541430147706700255120ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/removeuser/removeuser.schema.yaml000066400000000000000000000004611430147706700267620ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/services-openrc/000077500000000000000000000000001430147706700233555ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/services-openrc/main.py000066400000000000000000000120551430147706700246560ustar00rootroot00000000000000#!/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-calamares-2d126ae/src/modules/services-openrc/module.desc000066400000000000000000000002371430147706700255040ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "services-openrc" interface: "python" script: "main.py" calamares-calamares-2d126ae/src/modules/services-openrc/services-openrc.conf000066400000000000000000000031151430147706700273330ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/services-systemd/000077500000000000000000000000001430147706700235575ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/services-systemd/main.py000066400000000000000000000103341430147706700250560ustar00rootroot00000000000000#!/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 == "enable" and suffix == ".timer": description = _("Cannot enable systemd timer {name!s}.") elif command == "disable" and suffix == ".service": description = _("Cannot enable systemd service {name!s}.") elif command == "disable" and suffix == ".target": 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("timers", []), "enable", ".timer") 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-calamares-2d126ae/src/modules/services-systemd/module.desc000066400000000000000000000002401430147706700257000ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "services-systemd" interface: "python" script: "main.py" calamares-calamares-2d126ae/src/modules/services-systemd/services-systemd.conf000066400000000000000000000050421430147706700277400ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Systemd services manipulation. # # This module can enable services, timers and targets for systemd # (if packaging doesn't already do that). It can also # disable services and targets as well as mask units. # # The order of operations is fixed. Enable services, enable targets, # enable timers, disable services, disable targets and finally apply masks. --- # There are several configuration keys for this module: # *services*, *targets*, *timers*, *disable*, *disable-targets* and *mask*. # The value of each key is a list of entries. Each entry has two keys: # - *name* is the (string) name of the service or target that is being # changed. Use quotes. Don't include unit suffix in the name. For # example, it should be "NetworkManager", not "NetworkManager.service" # - *mandatory* is a boolean option, which states whether the change # must be done successfully. If systemd reports an error while changing # a mandatory entry, the installation will fail. When mandatory is false, # errors for that systemd unit are ignored. If mandatory # is not specified, the default is false. # # An entry may also be given as a single string, which is then # 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 # # # Enables .timer # timers: # - name: "fstrim" # mandatory: false # # # 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: [] timers: [] disable: [] disable-targets: [] mask: [] calamares-calamares-2d126ae/src/modules/services-systemd/services-systemd.schema.yaml000066400000000000000000000017661430147706700312250ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/services-systemd definitions: service: $id: '#definitions/service' type: object description: a name and a flag for services, targets, and others additionalProperties: false properties: name: { type: string } mandatory: { type: boolean, default: false } required: [ name ] additionalProperties: false type: object properties: services: { type: array, items: { $ref: '#definitions/service' } } targets: { type: array, items: { $ref: '#definitions/service' } } timers: { type: array, items: { $ref: '#definitions/service' } } disable: { type: array, items: { $ref: '#definitions/service' } } disable-targets: { type: array, items: { $ref: '#definitions/service' } } mask: { type: array, items: { $ref: '#definitions/service' } } calamares-calamares-2d126ae/src/modules/shellprocess/000077500000000000000000000000001430147706700227545ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/shellprocess/CMakeLists.txt000066400000000000000000000006601430147706700255160ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/shellprocess/ShellProcessJob.cpp000066400000000000000000000043521430147706700265250ustar00rootroot00000000000000/* === 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 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-calamares-2d126ae/src/modules/shellprocess/ShellProcessJob.h000066400000000000000000000021361430147706700261700ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/shellprocess/Tests.cpp000066400000000000000000000127601430147706700245700ustar00rootroot00000000000000/* === 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; QString filename = QStringLiteral( "shellprocess.conf" ); QFile fi( QString( "%1/%2" ).arg( BUILD_AS_TEST, filename ) ); QVERIFY( fi.exists() ); doc = YAML::LoadFile( fi.fileName().toStdString() ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) ); QVERIFY( !cl.isEmpty() ); 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-calamares-2d126ae/src/modules/shellprocess/Tests.h000066400000000000000000000016751430147706700242400ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/shellprocess/shellprocess.conf000066400000000000000000000071461430147706700263410ustar00rootroot00000000000000# 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 list of items (if the touch command fails, it is # ignored; the slowloris command has a different timeout from the # other commands in the list): script: - "-touch @@ROOT@@/tmp/thingy" - "/usr/bin/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-calamares-2d126ae/src/modules/shellprocess/shellprocess.schema.yaml000066400000000000000000000036661430147706700276200ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/summary/000077500000000000000000000000001430147706700217435ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/summary/CMakeLists.txt000066400000000000000000000006771430147706700245150ustar00rootroot00000000000000# === 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 Config.cpp SummaryPage.cpp SummaryViewStep.cpp UI SHARED_LIB NO_CONFIG ) calamares-calamares-2d126ae/src/modules/summary/Config.cpp000066400000000000000000000074541430147706700236660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020, Camilo Higuita * SPDX-FileCopyrightText: 2021 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Config.h" #include "Branding.h" #include "Settings.h" #include "ViewManager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "viewpages/ExecutionViewStep.h" SummaryModel::SummaryModel( QObject* parent ) : QAbstractListModel( parent ) { } QHash< int, QByteArray > SummaryModel::roleNames() const { // Not including WidgetRole here because that wouldn't make sense // in a QML context which is where the roleNames are important. return { { TitleRole, "title" }, { MessageRole, "message" } }; } QVariant SummaryModel::data( const QModelIndex& index, int role ) const { if ( !index.isValid() ) { return QVariant(); } auto& item = m_summary.at( index.row() ); switch ( role ) { case TitleRole: return item.title; case MessageRole: return item.message; case WidgetRole: return item.widget ? QVariant::fromValue( item.widget ) : QVariant(); default: return QVariant(); } } int SummaryModel::rowCount( const QModelIndex& ) const { return m_summary.count(); } void SummaryModel::setSummaryList( const Calamares::ViewStepList& steps, bool withWidgets ) { beginResetModel(); m_summary.clear(); for ( Calamares::ViewStep* step : steps ) { QString text = step->prettyStatus(); QWidget* widget = withWidgets ? step->createSummaryWidget() : nullptr; if ( text.isEmpty() && !widget ) { continue; } m_summary << StepSummary { step->prettyName(), text, widget }; } endResetModel(); } Config::Config( QObject* parent ) : QObject( parent ) , m_summary( new SummaryModel( this ) ) { CALAMARES_RETRANSLATE_SLOT( &Config::retranslate ); retranslate(); } void Config::retranslate() { m_title = tr( "Summary" ); if ( Calamares::Settings::instance()->isSetupMode() ) { m_message = tr( "This is an overview of what will happen once you start " "the setup procedure." ); } else { m_message = tr( "This is an overview of what will happen once you start " "the install procedure." ); } Q_EMIT titleChanged( m_title ); Q_EMIT messageChanged( m_message ); } Calamares::ViewStepList Config::stepsForSummary( const Calamares::ViewStep* upToHere ) { Calamares::ViewStepList steps; for ( Calamares::ViewStep* step : Calamares::ViewManager::instance()->viewSteps() ) { // *Assume* that if there's an exec step in the sequence, // we don't need a summary for steps before it. This works in // practice if there's a summary step before each exec -- // and in practice, there's only one of each. if ( qobject_cast< Calamares::ExecutionViewStep* >( step ) ) { steps.clear(); continue; } // Having reached the parent view-step of the Config object, // we know we're providing a summary of steps up until this // view step, so we now have steps since the previous exec, up // to this summary. if ( upToHere == step ) { break; } steps.append( step ); } return steps; } void Config::collectSummaries( const Calamares::ViewStep* upToHere, Widgets withWidgets ) { m_summary->setSummaryList( stepsForSummary( upToHere ), withWidgets == Widgets::Enabled ); } void Config::clearSummaries() { m_summary->setSummaryList( {}, false ); } calamares-calamares-2d126ae/src/modules/summary/Config.h000066400000000000000000000060541430147706700233260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020, Adriaan de Groot * SPDX-FileCopyrightText: 2020, Camilo Higuita * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef SUMMARY_CONFIG_H #define SUMMARY_CONFIG_H #include "viewpages/ViewStep.h" #include #include #include class Config; /** @brief Data for one step * * A step generally has a text description, but **may** have a * QWidget. There is no ownership of the QWidget, that is assumed * to be handed off to some owning parent-widget. */ struct StepSummary { QString title; QString message; QWidget* widget = nullptr; }; class SummaryModel : public QAbstractListModel { Q_OBJECT friend class Config; public: enum Roles : int { TitleRole = Qt::DisplayRole, // Name of the step MessageRole = Qt::UserRole, // String saying what it will do WidgetRole, // Pointer to widget }; explicit SummaryModel( QObject* parent = nullptr ); int rowCount( const QModelIndex& = QModelIndex() ) const override; QVariant data( const QModelIndex& index, int role ) const override; protected: QHash< int, QByteArray > roleNames() const override; private: /** @brief Sets the model data from @p steps * * Replaces the list of summaries with summaries given by * the jobs and ViewSteps objects in @p steps. If @p withWidgets * is @c true, then also queries for widget summaries alongside * the text summaries for each step. */ void setSummaryList( const Calamares::ViewStepList& steps, bool withWidgets = false ); QVector< StepSummary > m_summary; }; class Config : public QObject { Q_OBJECT ///@brief Name of this summary (generally, "Summary") Q_PROPERTY( QString title READ title NOTIFY titleChanged ) ///@brief Description of what the summary means Q_PROPERTY( QString message READ message NOTIFY messageChanged ) Q_PROPERTY( QAbstractListModel* summaryModel READ summaryModel CONSTANT FINAL ) public: explicit Config( QObject* parent = nullptr ); ///@brief Include widgets in the model? enum class Widgets { Disabled, Enabled }; static Calamares::ViewStepList stepsForSummary( const Calamares::ViewStep* upToHere ); ///@brief Called later, to load the model once all viewsteps are there void collectSummaries( const Calamares::ViewStep* upToHere, Widgets withWidgets ); ///@brief Clear the model of steps (to avoid dangling widgets) void clearSummaries(); QAbstractListModel* summaryModel() const { return m_summary; } QString title() const { return m_title; } QString message() const { return m_message; } private: void retranslate(); SummaryModel* m_summary; QString m_title; QString m_message; Q_SIGNALS: void titleChanged( QString title ); void messageChanged( QString message ); }; #endif calamares-calamares-2d126ae/src/modules/summary/SummaryPage.cpp000066400000000000000000000127731430147706700247130ustar00rootroot00000000000000/* === 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 SummaryPage::SummaryPage( Config* config, QWidget* parent ) : QWidget() , m_contentWidget( nullptr ) , m_scrollArea( new QScrollArea( this ) ) { Q_UNUSED( parent ) this->setObjectName( "summaryStep" ); QVBoxLayout* layout = new QVBoxLayout( this ); layout->setContentsMargins( 0, 0, 0, 0 ); QLabel* headerLabel = new QLabel( this ); headerLabel->setObjectName( "summaryTitle" ); headerLabel->setText( config->message() ); connect( config, &Config::messageChanged, headerLabel, &QLabel::setText ); layout->addWidget( headerLabel ); layout->addWidget( m_scrollArea ); m_scrollArea->setWidgetResizable( true ); 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 ); } static QLabel* createTitleLabel( const QString& text, const QFont& titleFont ) { QLabel* label = new QLabel( text ); label->setObjectName( "summaryItemTitle" ); label->setFont( titleFont ); label->setContentsMargins( 0, 0, 0, 0 ); return label; } static QLabel* createBodyLabel( const QString& text, const QPalette& bodyPalette ) { QLabel* label = new QLabel; label->setObjectName( "summaryItemBody" ); label->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); label->setAutoFillBackground( true ); label->setPalette( bodyPalette ); label->setText( text ); return label; } static QWidget* createStepWidget( const QString& description, QWidget* innerWidget, const QPalette& palette ) { QWidget* w = new QWidget(); QHBoxLayout* itemBodyLayout = new QHBoxLayout; w->setLayout( itemBodyLayout ); // Indent the inner box by a bit itemBodyLayout->addSpacing( CalamaresUtils::defaultFontHeight() * 2 ); QVBoxLayout* itemBodyCoreLayout = new QVBoxLayout; itemBodyLayout->addLayout( itemBodyCoreLayout ); CalamaresUtils::unmarginLayout( itemBodyLayout ); itemBodyCoreLayout->addSpacing( CalamaresUtils::defaultFontHeight() / 2 ); if ( innerWidget ) { itemBodyCoreLayout->addWidget( innerWidget ); } else { itemBodyCoreLayout->addWidget( createBodyLabel( description, palette ) ); } return w; } static void ensureSize( QWidget* parent, QScrollArea* container, Calamares::ViewStep* viewstep ) { auto summarySize = container->widget()->sizeHint(); if ( summarySize.height() > container->size().height() ) { auto enlarge = 2 + summarySize.height() - container->size().height(); auto widgetSize = parent->size(); widgetSize.setHeight( widgetSize.height() + enlarge ); cDebug() << "Summary widget is larger than viewport, enlarge by" << enlarge << "to" << widgetSize; emit viewstep->ensureSize( widgetSize ); // Only expand height } } // Adds a widget for those ViewSteps that want a summary; // see SummaryPage documentation and also ViewStep docs. void SummaryPage::buildWidgets( Config* config, SummaryViewStep* viewstep ) { const int SECTION_SPACING = 12; delete m_contentWidget; // It might have been created previously m_contentWidget = new QWidget; m_layout = new QVBoxLayout( m_contentWidget ); CalamaresUtils::unmarginLayout( m_layout ); QFont titleFont = font(); titleFont.setWeight( QFont::Light ); titleFont.setPointSize( CalamaresUtils::defaultFontSize() * 2 ); QPalette bodyPalette( palette() ); bodyPalette.setColor( WindowBackground, palette().window().color().lighter( 108 ) ); const auto* model = config->summaryModel(); const auto rowCount = model->rowCount(); for ( int row = 0; row < rowCount; row++ ) { const auto rowIndex = model->index( row ); QString title = model->data( rowIndex, SummaryModel::TitleRole ).toString(); QString text = model->data( rowIndex, SummaryModel::MessageRole ).toString(); QWidget* widget = model->data( rowIndex, SummaryModel::WidgetRole ).value< QWidget* >(); if ( text.isEmpty() && !widget ) { continue; } if ( row > 0 ) { m_layout->addSpacing( SECTION_SPACING ); } m_layout->addWidget( createTitleLabel( title, titleFont ) ); m_layout->addWidget( createStepWidget( text, widget, bodyPalette ) ); } m_layout->addStretch(); m_scrollArea->setWidget( m_contentWidget ); ensureSize( this, m_scrollArea, viewstep ); } void SummaryPage::cleanup() { delete m_contentWidget; m_contentWidget = nullptr; } calamares-calamares-2d126ae/src/modules/summary/SummaryPage.h000066400000000000000000000033621430147706700243520ustar00rootroot00000000000000/* === 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 Config; class SummaryViewStep; class QLabel; class QScrollArea; class QVBoxLayout; /** @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( Config* config, QWidget* parent = nullptr ); /// @brief Create contents showing all of the summary void buildWidgets( Config* config, SummaryViewStep* viewstep ); /// @brief Clean up the widgets void cleanup(); private: QVBoxLayout* m_layout = nullptr; QWidget* m_contentWidget = nullptr; QScrollArea* m_scrollArea = nullptr; }; #endif // SUMMARYPAGE_H calamares-calamares-2d126ae/src/modules/summary/SummaryViewStep.cpp000066400000000000000000000027501430147706700255770ustar00rootroot00000000000000/* === 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_config( new Config( this ) ) , m_widget( new SummaryPage( m_config ) ) { emit nextStatusChanged( true ); } SummaryViewStep::~SummaryViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } delete m_config; } QString SummaryViewStep::prettyName() const { return m_config->title(); } 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; } Calamares::JobList SummaryViewStep::jobs() const { return {}; } void SummaryViewStep::onActivate() { m_config->collectSummaries( this, Config::Widgets::Enabled ); m_widget->buildWidgets( m_config, this ); } void SummaryViewStep::onLeave() { m_config->clearSummaries(); m_widget->cleanup(); } calamares-calamares-2d126ae/src/modules/summary/SummaryViewStep.h000066400000000000000000000022001430147706700252320ustar00rootroot00000000000000/* === 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 "Config.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.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; Calamares::JobList jobs() const override; void onActivate() override; void onLeave() override; private: Config* m_config = nullptr; SummaryPage* m_widget = nullptr; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( SummaryViewStepFactory ) #endif // SUMMARYPAGEPLUGIN_H calamares-calamares-2d126ae/src/modules/summaryq/000077500000000000000000000000001430147706700221245ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/summaryq/CMakeLists.txt000066400000000000000000000012041430147706700246610ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2021 Anke Boersma # SPDX-License-Identifier: BSD-2-Clause # if(NOT WITH_QML) calamares_skip_module( "summaryq (QML is not supported in this build)" ) return() endif() set(_summary ${CMAKE_CURRENT_SOURCE_DIR}/../summary) include_directories(${_summary}) calamares_add_plugin(summaryq TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES SummaryQmlViewStep.cpp ${_summary}/Config.cpp UI RESOURCES summaryq.qrc LINK_PRIVATE_LIBRARIES calamaresui SHARED_LIB ) calamares-calamares-2d126ae/src/modules/summaryq/SummaryQmlViewStep.cpp000066400000000000000000000024741430147706700264350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015, Teo Mrnjavac * SPDX-FileCopyrightText: 2020, Camilo Higuita * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "SummaryQmlViewStep.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( SummaryQmlViewStepFactory, registerPlugin< SummaryQmlViewStep >(); ) SummaryQmlViewStep::SummaryQmlViewStep( QObject* parent ) : Calamares::QmlViewStep( parent ) , m_config( new Config( this ) ) { emit nextStatusChanged( true ); } SummaryQmlViewStep::~SummaryQmlViewStep() {} QString SummaryQmlViewStep::prettyName() const { return m_config->title(); } bool SummaryQmlViewStep::isNextEnabled() const { return true; } bool SummaryQmlViewStep::isBackEnabled() const { return true; } bool SummaryQmlViewStep::isAtBeginning() const { return true; } bool SummaryQmlViewStep::isAtEnd() const { return true; } Calamares::JobList SummaryQmlViewStep::jobs() const { return {}; } void SummaryQmlViewStep::onActivate() { // Collect the steps before this one: those need to have their // summary (text or widget) displayed. m_config->collectSummaries( this, Config::Widgets::Disabled ); } calamares-calamares-2d126ae/src/modules/summaryq/SummaryQmlViewStep.h000066400000000000000000000022311430147706700260710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015, Teo Mrnjavac * SPDX-FileCopyrightText: 2020, Camilo Higuita * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef SUMMARYQMLVIEWSTEP_H #define SUMMARYQMLVIEWSTEP_H #include "Config.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/QmlViewStep.h" class PLUGINDLLEXPORT SummaryQmlViewStep : public Calamares::QmlViewStep { Q_OBJECT public: explicit SummaryQmlViewStep( QObject* parent = nullptr ); virtual ~SummaryQmlViewStep() override; QString prettyName() const override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; Calamares::JobList jobs() const override; void onActivate() override; QObject* getConfig() override { return m_config; } private: Config* m_config; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( SummaryQmlViewStepFactory ) #endif // SUMMARYQMLVIEWSTEP_H calamares-calamares-2d126ae/src/modules/summaryq/img/000077500000000000000000000000001430147706700227005ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/summaryq/img/keyboard.svg000066400000000000000000000130411430147706700252200ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/summaryq/img/keyboard.svg.license000066400000000000000000000001671430147706700266460ustar00rootroot00000000000000SPDX-FileCopyrightText: 2021 KDE Visual Design Group SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/summaryq/img/lokalize.svg000066400000000000000000000074051430147706700252410ustar00rootroot00000000000000 calamares-calamares-2d126ae/src/modules/summaryq/img/lokalize.svg.license000066400000000000000000000001671430147706700266600ustar00rootroot00000000000000SPDX-FileCopyrightText: 2021 KDE Visual Design Group SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/summaryq/summaryq.qml000066400000000000000000000074501430147706700245230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ import io.calamares.core 1.0 import io.calamares.ui 1.0 import QtQuick 2.15 import QtQuick.Controls 2.13 import QtQuick.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami import QtGraphicalEffects 1.0 import QtQuick.Window 2.3 Kirigami.ScrollablePage { width: 860 //parent.width //860 height: 640 //parent.height //640 Kirigami.Theme.backgroundColor: "#EFF0F1" Kirigami.Theme.textColor: "#1F1F1F" header: Kirigami.Heading { Layout.fillWidth: true height: 100 horizontalAlignment: Qt.AlignHCenter color: Kirigami.Theme.textColor font.weight: Font.Medium font.pointSize: 12 text: config.message } RowLayout { width: parent.width Component { id: _delegate Rectangle { id: rect border.color: "#BDC3C7" width: parent.width - 80 implicitHeight: message.implicitHeight + title.implicitHeight + 20 anchors.horizontalCenter: parent.horizontalCenter Item { width: parent.width - 80 implicitHeight: message.implicitHeight + title.implicitHeight + 20 Kirigami.FormLayout { GridLayout { anchors { //left: parent.left top: parent.top right: parent.right } rowSpacing: Kirigami.Units.largeSpacing columnSpacing: Kirigami.Units.largeSpacing columns: width > Kirigami.Units.gridUnit * 20 ? 4 : 2 Image { id: image Layout.maximumHeight: Kirigami.Units.iconSizes.huge Layout.preferredWidth: height Layout.alignment: Qt.AlignTop fillMode: Image.PreserveAspectFit source: index === 0 ? "img/lokalize.svg" : ( index === 1 ? "img/keyboard.svg" : ( index === 2 ? "qrc:/data/images/partition-manual.svg" : "qrc:/data/images/partition-partition.svg" ) ) } ColumnLayout { Label { id: title Layout.fillWidth: true wrapMode: Text.WordWrap text: model.title font.weight: Font.Medium font.pointSize: 16 } Rectangle { height: 2 width: 200 border.color: "#BDC3C7" } Label { id: message Layout.fillWidth: true text: model.message } } } } } } } } ListView { anchors.fill: parent spacing: 20 model: config.summaryModel delegate: _delegate } } calamares-calamares-2d126ae/src/modules/summaryq/summaryq.qrc000066400000000000000000000002341430147706700245100ustar00rootroot00000000000000 summaryq.qml img/keyboard.svg img/lokalize.svg calamares-calamares-2d126ae/src/modules/tracking/000077500000000000000000000000001430147706700220505ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/tracking/CMakeLists.txt000066400000000000000000000010611430147706700246060ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/tracking/Config.cpp000066400000000000000000000155071430147706700237710ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/tracking/Config.h000066400000000000000000000141251430147706700234310ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/tracking/Tests.cpp000066400000000000000000000021451430147706700236600ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/tracking/TrackingJobs.cpp000066400000000000000000000231771430147706700251460ustar00rootroot00000000000000/* === 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 // Namespace keeps all the actual jobs anonymous, the // public API is the addJob() functions below the namespace. namespace { /** @brief Install-tracking job (gets a URL) * * The install-tracking job (there is only one kind) does a GET * on a configured URL with some additional information about * the machine (if configured into the URL). * * No persistent tracking is done. */ class TrackingInstallJob : public Calamares::Job { public: TrackingInstallJob( const QString& url ); ~TrackingInstallJob() override; QString prettyName() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: const QString m_url; }; /** @brief Tracking machines, update-manager style * * The machine has a machine-id, and this is sed(1)'ed into the * update-manager configuration, to report the machine-id back * to distro servers. */ class TrackingMachineUpdateManagerJob : public Calamares::Job { public: ~TrackingMachineUpdateManagerJob() override; QString prettyName() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; }; /** @brief Turn on KUserFeedback in target system * * This writes suitable files for turning on KUserFeedback for the * normal user configured in Calamares. The feedback can be reconfigured * by the user through Plasma's user-feedback dialog. */ class TrackingKUserFeedbackJob : public Calamares::Job { public: TrackingKUserFeedbackJob( const QString& username, const QStringList& areas ); ~TrackingKUserFeedbackJob() override; QString prettyName() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: QString m_username; QStringList m_areas; }; TrackingInstallJob::TrackingInstallJob( const QString& url ) : m_url( url ) { } TrackingInstallJob::~TrackingInstallJob() {} QString TrackingInstallJob::prettyName() const { return QCoreApplication::translate( "TrackingInstallJob", "Installation feedback" ); } QString TrackingInstallJob::prettyStatusMessage() const { return QCoreApplication::translate( "TrackingInstallJob", "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( QCoreApplication::translate( "TrackingInstallJob", "Internal error in install-tracking." ), QCoreApplication::translate( "TrackingInstallJob", "HTTP request timed out." ) ); } return Calamares::JobResult::ok(); } TrackingMachineUpdateManagerJob::~TrackingMachineUpdateManagerJob() {} QString TrackingMachineUpdateManagerJob::prettyName() const { return QCoreApplication::translate( "TrackingMachineUpdateManagerJob", "Machine feedback" ); } QString TrackingMachineUpdateManagerJob::prettyStatusMessage() const { return QCoreApplication::translate( "TrackingMachineUpdateManagerJob", "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( QCoreApplication::translate( "TrackingMachineUpdateManagerJob", "Error in machine feedback configuration." ), QCoreApplication::translate( "TrackingMachineUpdateManagerJob", "Could not configure machine feedback correctly, script error %1." ) .arg( r ) ); } else { return Calamares::JobResult::error( QCoreApplication::translate( "TrackingMachineUpdateManagerJob", "Error in machine feedback configuration." ), QCoreApplication::translate( "TrackingMachineUpdateManagerJob", "Could not configure machine feedback correctly, Calamares error %1." ) .arg( r ) ); } } TrackingKUserFeedbackJob::TrackingKUserFeedbackJob( const QString& username, const QStringList& areas ) : m_username( username ) , m_areas( areas ) { } TrackingKUserFeedbackJob::~TrackingKUserFeedbackJob() {} QString TrackingKUserFeedbackJob::prettyName() const { return QCoreApplication::translate( "TrackingKUserFeedbackJob", "KDE user feedback" ); } QString TrackingKUserFeedbackJob::prettyStatusMessage() const { return QCoreApplication::translate( "TrackingKUserFeedbackJob", "Configuring KDE user feedback." ); } Calamares::JobResult TrackingKUserFeedbackJob::exec() { // This is the contents of a config file to turn on some kind // of KUserFeedback tracking; the level (16) is chosen for minimal // but not zero tracking. static const char config[] = R"x([Global] FeedbackLevel=16 )x"; for ( const QString& area : m_areas ) { QString path = QStringLiteral( "/home/%1/.config/%2" ).arg( m_username, area ); cDebug() << "Configuring KUserFeedback" << path; int r = CalamaresUtils::System::instance()->createTargetFile( path, config ); if ( r > 0 ) { return Calamares::JobResult::error( QCoreApplication::translate( "TrackingKUserFeedbackJob", "Error in KDE user feedback configuration." ), QCoreApplication::translate( "TrackingKUserFeedbackJob", "Could not configure KDE user feedback correctly, script error %1." ) .arg( r ) ); } else if ( r < 0 ) { return Calamares::JobResult::error( QCoreApplication::translate( "TrackingKUserFeedbackJob", "Error in KDE user feedback configuration." ), QCoreApplication::translate( "TrackingKUserFeedbackJob", "Could not configure KDE user feedback correctly, Calamares error %1." ) .arg( r ) ); } } return Calamares::JobResult::ok(); } } // namespace void addJob( Calamares::JobList& list, InstallTrackingConfig* config ) { if ( config->isEnabled() ) { const auto* s = CalamaresUtils::System::instance(); QHash< QString, QString > map { std::initializer_list< std::pair< QString, QString > > { { QStringLiteral( "CPU" ), s->getCpuDescription() }, { QStringLiteral( "MEMORY" ), QString::number( s->getTotalMemoryB().first ) }, { QStringLiteral( "DISK" ), QString::number( s->getTotalDiskB() ) } } }; QString installUrl = KMacroExpander::expandMacros( config->installTrackingUrl(), map ); cDebug() << Logger::SubEntry << "install-tracking URL" << installUrl; list.append( Calamares::job_ptr( new TrackingInstallJob( installUrl ) ) ); } } void addJob( Calamares::JobList& list, MachineTrackingConfig* config ) { if ( config->isEnabled() ) { const auto style = config->machineTrackingStyle(); if ( style == "updatemanager" ) { list.append( Calamares::job_ptr( new TrackingMachineUpdateManagerJob() ) ); } else { cWarning() << "Unsupported machine tracking style" << style; } } } void addJob( Calamares::JobList& list, UserTrackingConfig* config ) { if ( config->isEnabled() ) { const auto* gs = Calamares::JobQueue::instance()->globalStorage(); static const auto key = QStringLiteral( "username" ); QString username = ( gs && gs->contains( key ) ) ? gs->value( key ).toString() : QString(); if ( username.isEmpty() ) { cWarning() << "No username is set in GlobalStorage, skipping user-tracking."; return; } const auto style = config->userTrackingStyle(); if ( style == "kuserfeedback" ) { list.append( Calamares::job_ptr( new TrackingKUserFeedbackJob( username, config->userTrackingAreas() ) ) ); } else { cWarning() << "Unsupported user tracking style" << style; } } } calamares-calamares-2d126ae/src/modules/tracking/TrackingJobs.h000066400000000000000000000023571430147706700246100ustar00rootroot00000000000000/* === 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; /** @section Tracking Jobs * * The tracking jobs do the actual work of configuring tracking on the * target machine. Tracking jobs may have *styles*, variations depending * on the distro or environment of the target system. At the root of * each family of tracking jobs (installation, machine, user) there is * free function `addJob()` that takes the configuration * information from the relevant Config sub-object and optionally * adds the right job (subclass!) to the list of jobs. * * There are no job-classes defined here because you need to be using the * `addJob()` interface instead. */ void addJob( Calamares::JobList& list, InstallTrackingConfig* config ); void addJob( Calamares::JobList& list, MachineTrackingConfig* config ); void addJob( Calamares::JobList& list, UserTrackingConfig* config ); #endif calamares-calamares-2d126ae/src/modules/tracking/TrackingPage.cpp000066400000000000000000000120561430147706700251170ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/tracking/TrackingPage.h000066400000000000000000000032121430147706700245560ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/tracking/TrackingType.h000066400000000000000000000012621430147706700246260ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/tracking/TrackingViewStep.cpp000066400000000000000000000042731430147706700260130ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/tracking/TrackingViewStep.h000066400000000000000000000023561430147706700254600ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/tracking/level-install.svg000066400000000000000000000162151430147706700253510ustar00rootroot00000000000000 image/svg+xml ! calamares-calamares-2d126ae/src/modules/tracking/level-install.svg.license000066400000000000000000000001701430147706700267630ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-calamares-2d126ae/src/modules/tracking/level-machine.svg000066400000000000000000000277161430147706700253170ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/src/modules/tracking/level-machine.svg.license000066400000000000000000000001701430147706700267210ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-calamares-2d126ae/src/modules/tracking/level-none.svg000066400000000000000000000166741430147706700246530ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/src/modules/tracking/level-none.svg.license000066400000000000000000000001701430147706700262540ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-calamares-2d126ae/src/modules/tracking/level-user.svg000066400000000000000000000213111430147706700246520ustar00rootroot00000000000000 image/svg+xml calamares-calamares-2d126ae/src/modules/tracking/level-user.svg.license000066400000000000000000000001701430147706700262730ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-calamares-2d126ae/src/modules/tracking/page_trackingstep.qrc000066400000000000000000000003711430147706700262520ustar00rootroot00000000000000 level-none.svg level-install.svg level-machine.svg level-user.svg ../../../data/images/information.svgz calamares-calamares-2d126ae/src/modules/tracking/page_trackingstep.ui000066400000000000000000000221601430147706700261020ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/tracking/tracking.conf000066400000000000000000000113541430147706700245250ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/umount/000077500000000000000000000000001430147706700215755ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/umount/CMakeLists.txt000066400000000000000000000006051430147706700243360ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2021 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # calamares_add_plugin(umount TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES UmountJob.cpp SHARED_LIB EMERGENCY ) calamares_add_test( umounttest SOURCES Tests.cpp ) calamares-calamares-2d126ae/src/modules/umount/Tests.cpp000066400000000000000000000016231430147706700234050ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "UmountJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include #include // Internals of UmountJob.cpp // Actual tests class UmountTests : public QObject { Q_OBJECT public: UmountTests() {} ~UmountTests() override {} private Q_SLOTS: void initTestCase(); void testTrue(); }; void UmountTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); } void UmountTests::testTrue() { QVERIFY( true ); } QTEST_GUILESS_MAIN( UmountTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-calamares-2d126ae/src/modules/umount/UmountJob.cpp000066400000000000000000000121261430147706700242250ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Tags from the Python version of this module: * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Anke Boersma * SPDX-FileCopyrightText: 2018 Adriaan de Groot * Tags for the C++ version of this module: * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "UmountJob.h" #include "partition/Mount.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "GlobalStorage.h" #include "JobQueue.h" #include #include #include UmountJob::UmountJob( QObject* parent ) : Calamares::CppJob( parent ) { } UmountJob::~UmountJob() {} QString UmountJob::prettyName() const { return tr( "Unmount file systems." ); } static Calamares::JobResult unmountTargetMounts( const QString& rootMountPoint ) { QDir targetMount( rootMountPoint ); if ( !targetMount.exists() ) { return Calamares::JobResult::internalError( QCoreApplication::translate( UmountJob::staticMetaObject.className(), "Could not unmount target system." ), QCoreApplication::translate( UmountJob::staticMetaObject.className(), "The target system is not mounted at '%1'." ) .arg( rootMountPoint ), Calamares::JobResult::GenericError ); } QString targetMountPath = targetMount.absolutePath(); if ( !targetMountPath.endsWith( '/' ) ) { targetMountPath.append( '/' ); } using MtabInfo = CalamaresUtils::Partition::MtabInfo; auto targetMounts = MtabInfo::fromMtabFilteredByPrefix( targetMountPath ); std::sort( targetMounts.begin(), targetMounts.end(), MtabInfo::mountPointOrder ); cDebug() << "Read" << targetMounts.count() << "entries from" << targetMountPath; for ( const auto& m : qAsConst( targetMounts ) ) { // Returns the program's exit code, so 0 is success and non-0 // (truthy) is a failure. if ( CalamaresUtils::Partition::unmount( m.mountPoint, { "-lv" } ) ) { return Calamares::JobResult::error( QCoreApplication::translate( UmountJob::staticMetaObject.className(), "Could not unmount target system." ), QCoreApplication::translate( UmountJob::staticMetaObject.className(), "The device '%1' is mounted in the target system. It is mounted at '%2'. " "The device could not be unmounted." ) .arg( m.device, m.mountPoint ) ); } } return Calamares::JobResult::ok(); } static Calamares::JobResult exportZFSPools( const QString& rootMountPoint ) { auto* gs = Calamares::JobQueue::instance()->globalStorage(); QStringList poolNames; { // The pools are dictionaries / VariantMaps auto zfs_pool_list = gs->value( "zfsPoolInfo" ).toList(); for ( const auto& v : zfs_pool_list ) { auto m = v.toMap(); QString poolName = m.value( "poolName" ).toString(); if ( !poolName.isEmpty() ) { poolNames.append( poolName ); } } poolNames.sort(); } for ( const auto& poolName : poolNames ) { auto result = CalamaresUtils::System::runCommand( { "zpool", "export", poolName }, std::chrono::seconds( 30 ) ); if ( result.getExitCode() ) { cWarning() << "Failed to export pool" << result.getOutput(); } } // Exporting ZFS pools does not cause the install to fail return Calamares::JobResult::ok(); } Calamares::JobResult UmountJob::exec() { const auto* sys = CalamaresUtils::System::instance(); if ( !sys ) { return Calamares::JobResult::internalError( "UMount", tr( "No target system available." ), Calamares::JobResult::InvalidConfiguration ); } Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( !gs || gs->value( "rootMountPoint" ).toString().isEmpty() ) { return Calamares::JobResult::internalError( "UMount", tr( "No rootMountPoint is set." ), Calamares::JobResult::InvalidConfiguration ); } // Do the unmounting of target-system filesystems { auto r = unmountTargetMounts( gs->value( "rootMountPoint" ).toString() ); if ( !r ) { return r; } } // For ZFS systems, export the pools { auto r = exportZFSPools( gs->value( "rootMountPoint" ).toString() ); if ( !r ) { return r; } } return Calamares::JobResult::ok(); } void UmountJob::setConfigurationMap( const QVariantMap& map ) { } CALAMARES_PLUGIN_FACTORY_DEFINITION( UmountJobFactory, registerPlugin< UmountJob >(); ) calamares-calamares-2d126ae/src/modules/umount/UmountJob.h000066400000000000000000000016331430147706700236730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef UMOUNTJOB_H #define UMOUNTJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include #include #include /** @brief Write 'random' data: machine id, entropy, UUIDs * */ class PLUGINDLLEXPORT UmountJob : public Calamares::CppJob { Q_OBJECT public: explicit UmountJob( QObject* parent = nullptr ); ~UmountJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( UmountJobFactory ) #endif // UMOUNTJOB_H calamares-calamares-2d126ae/src/modules/umount/umount.conf000066400000000000000000000006141430147706700237740ustar00rootroot00000000000000# 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. After this, there is no regular way # to modify the target system anymore. # --- # Setting emergency to true will make it so this module is still run # when a prior module fails emergency: false calamares-calamares-2d126ae/src/modules/umount/umount.schema.yaml000066400000000000000000000004301430147706700252440ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/umount additionalProperties: false type: object properties: emergency: { type: boolean } calamares-calamares-2d126ae/src/modules/unpackfs/000077500000000000000000000000001430147706700220605ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/unpackfs/main.py000066400000000000000000000437021430147706700233640ustar00rootroot00000000000000#!/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 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 _("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. """ # Need a name we can use like a global class counter(object): count = 0 def cb_count(s): counter.count += 1 if self.sourcefs == "squashfs": libcalamares.utils.host_env_process_output(["unsquashfs", "-l", self.source], cb_count) elif self.sourcefs == "ext4": libcalamares.utils.host_env_process_output(["find", self.mountPoint, "-type", "f"], cb_count) elif self.is_file(): # Hasn't been mounted, copy directly; find handles both # files and directories. libcalamares.utils.host_env_process_output(["find", self.source, "-type", "f"], cb_count) self.total = counter.count 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 = libcalamares.utils.mount(self.source, imgmountdir, "", "--bind") elif os.path.isfile(self.source): r = libcalamares.utils.mount(self.source, imgmountdir, self.sourcefs, "loop") else: # self.source is a device r = libcalamares.utils.mount(self.source, imgmountdir, self.sourcefs, "") if r != 0: libcalamares.utils.debug("Failed to mount '{}' (fs={}) (target={})".format(self.source, self.sourcefs, imgmountdir)) raise subprocess.CalledProcessError(r, "mount") ON_POSIX = 'posix' in sys.builtin_module_names def global_excludes(): """ List excludes for rsync. """ lst = [] extra_mounts = libcalamares.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 # `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]) # last_num_files_copied trails num_files_copied, and whenever at least 107 more # files (file_count_chunk) have been copied, progress is reported and # last_num_files_copied is updated. The chunk size isn't "tidy" # so that all the digits of the progress-reported number change. # file_count_chunk = 107 class counter(object): last_num_files_copied = 0 last_timestamp_reported = time.time() last_total_reported = 0 def output_cb(line): # rsync outputs progress in parentheses. Each line will have an # xfer and a chk item (either ir-chk or to-chk) as follows: # # - 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) 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 - counter.last_num_files_copied >= file_count_chunk) or (now - counter.last_timestamp_reported > 0.5): counter.last_num_files_copied = num_files_copied counter.last_timestamp_reported = now counter.last_total_reported = num_files_total_local progress_cb(num_files_copied, num_files_total_local) try: returncode = libcalamares.utils.host_env_process_output(args, output_cb) except subprocess.CalledProcessError as e: returncode = e.returncode progress_cb(counter.last_num_files_copied, counter.last_total_reported) # Push towards 100% # Mark this entry as really done entry.copied = entry.total # 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 returncode != 0 and returncode != 23: libcalamares.utils.warning("rsync failed with error code {}.".format(returncode)) return _("rsync failed with error code {}.").format(returncode) return None 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) libcalamares.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) libcalamares.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: libcalamares.utils.warning("Could not set / to safe permissions: {}".format(e)) # But ignore it def extract_weight(entry): """ Given @p entry, a dict representing a single entry in the *unpack* list, returns its weight (1, or whatever is set if it is sensible). """ w = entry.get("weight", None) if w: try: wi = int(w) return wi if wi > 0 else 1 except ValueError: libcalamares.utils.warning("*weight* setting {!r} is not valid.".format(w)) except TypeError: libcalamares.utils.warning("*weight* setting {!r} must be number.".format(w)) return 1 def run(): """ Unsquash filesystem. """ root_mount_point = libcalamares.globalstorage.value("rootMountPoint") if not root_mount_point: libcalamares.utils.warning("No mount point for root partition") return (_("No mount point for root partition"), _("globalstorage does not contain a \"rootMountPoint\" key.")) if not os.path.exists(root_mount_point): libcalamares.utils.warning("Bad root mount point \"{}\"".format(root_mount_point)) return (_("Bad mount point for root partition"), _("rootMountPoint is \"{}\", which does not exist.".format(root_mount_point))) if libcalamares.job.configuration.get("unpack", None) is None: libcalamares.utils.warning("No *unpack* key in job configuration.") return (_("Bad unpackfs configuration"), _("There is no configuration information.")) supported_filesystems = get_supported_filesystems() # Bail out before we start when there are obvious problems # - unsupported filesystems # - non-existent sources # - missing tools for specific FS for entry in libcalamares.job.configuration["unpack"]: source = os.path.abspath(entry["source"]) sourcefs = entry["sourcefs"] if sourcefs not in supported_filesystems: libcalamares.utils.warning("The filesystem for \"{}\" ({}) is not supported by your current kernel".format(source, sourcefs)) libcalamares.utils.warning(" ... modprobe {} may solve the problem".format(sourcefs)) return (_("Bad unpackfs configuration"), _("The filesystem for \"{}\" ({}) is not supported by your current kernel").format(source, sourcefs)) if not os.path.exists(source): libcalamares.utils.warning("The source filesystem \"{}\" does not exist".format(source)) return (_("Bad unpackfs configuration"), _("The source filesystem \"{}\" does not exist").format(source)) if sourcefs == "squashfs": if shutil.which("unsquashfs") is None: libcalamares.utils.warning("Failed to find unsquashfs") return (_("Bad unpackfs configuration"), _("Failed to find unsquashfs, make sure you have the squashfs-tools package installed.") + " " + _("Failed to unpack image \"{}\"").format(source)) unpack = list() is_first = True for entry in libcalamares.job.configuration["unpack"]: source = os.path.abspath(entry["source"]) sourcefs = entry["sourcefs"] destination = os.path.abspath(root_mount_point + entry["destination"]) if not os.path.isdir(destination) and sourcefs != "file": libcalamares.utils.warning(("The destination \"{}\" in the target system is not a directory").format(destination)) if is_first: return (_("Bad unpackfs configuration"), _("The destination \"{}\" in the target system is not a directory").format(destination)) else: libcalamares.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-calamares-2d126ae/src/modules/unpackfs/module.desc000066400000000000000000000003271430147706700242070ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/unpackfs/runtests.sh000066400000000000000000000017101430147706700243020ustar00rootroot00000000000000#! /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-calamares-2d126ae/src/modules/unpackfs/tests/000077500000000000000000000000001430147706700232225ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/unpackfs/tests/1.global000066400000000000000000000001201430147706700245350ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- bogus: true calamares-calamares-2d126ae/src/modules/unpackfs/tests/2.global000066400000000000000000000001641430147706700245460ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir/ calamares-calamares-2d126ae/src/modules/unpackfs/tests/3.global000066400000000000000000000001651430147706700245500ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-calamares-2d126ae/src/modules/unpackfs/tests/3.job000066400000000000000000000001171430147706700240570ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: [] calamares-calamares-2d126ae/src/modules/unpackfs/tests/4.global000066400000000000000000000001651430147706700245510ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-calamares-2d126ae/src/modules/unpackfs/tests/4.job000066400000000000000000000001601430147706700240560ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . sourcefs: bogus calamares-calamares-2d126ae/src/modules/unpackfs/tests/5.global000066400000000000000000000001651430147706700245520ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-calamares-2d126ae/src/modules/unpackfs/tests/5.job000066400000000000000000000002251430147706700240610ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: - source: ./fakesource sourcefs: ext4 destination: fakedest calamares-calamares-2d126ae/src/modules/unpackfs/tests/6.global000066400000000000000000000001651430147706700245530ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-calamares-2d126ae/src/modules/unpackfs/tests/6.job000066400000000000000000000002121430147706700240560ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . sourcefs: ext4 destination: fakedest calamares-calamares-2d126ae/src/modules/unpackfs/tests/7.global000066400000000000000000000001651430147706700245540ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-calamares-2d126ae/src/modules/unpackfs/tests/7.job000066400000000000000000000002121430147706700240570ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . sourcefs: ext4 destination: realdest calamares-calamares-2d126ae/src/modules/unpackfs/tests/8.global000066400000000000000000000002161430147706700245520ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir/ localeConf: - LANG: nl calamares-calamares-2d126ae/src/modules/unpackfs/tests/8.job000066400000000000000000000002121430147706700240600ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . sourcefs: ext4 destination: realdest calamares-calamares-2d126ae/src/modules/unpackfs/tests/9.global000066400000000000000000000002611430147706700245530ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/unpackfs/tests/9.job000066400000000000000000000003071430147706700240660ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/unpackfs/unpackfs.conf000066400000000000000000000076761430147706700245610ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/unpackfs/unpackfs.schema.yaml000066400000000000000000000013531430147706700260170ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/users/000077500000000000000000000000001430147706700214075ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/users/CMakeLists.txt000066400000000000000000000052071430147706700241530ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/users/CheckPWQuality.cpp000066400000000000000000000366601430147706700247630ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/users/CheckPWQuality.h000066400000000000000000000050451430147706700244210ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/users/Config.cpp000066400000000000000000000731431430147706700233300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Config.h" #include "CreateUserJob.h" #include "MiscJobs.h" #include "SetHostNameJob.h" #include "SetPasswordJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include "utils/String.h" #include "utils/Variant.h" #include #include #include #include #include #include #ifdef HAVE_ICU #include #include //Needed for ICU to apply some transliteration ruleset. //Still needs to be adjusted to fit the needs of the most of users static const char TRANSLITERATOR_ID[] = "Russian-Latin/BGN;" "Greek-Latin/UNGEGN;" "Any-Latin;" "Latin-ASCII"; #endif #include static const QRegExp USERNAME_RX( "^[a-z_][a-z0-9_-]*[$]?$" ); static constexpr const int USERNAME_MAX_LENGTH = 31; static const QRegExp HOSTNAME_RX( "^[a-zA-Z0-9][-a-zA-Z0-9_]*$" ); static constexpr const int HOSTNAME_MIN_LENGTH = 2; static constexpr const int HOSTNAME_MAX_LENGTH = 63; static void updateGSAutoLogin( bool doAutoLogin, const QString& login ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( !gs ) { cWarning() << "No Global Storage available"; return; } if ( doAutoLogin && !login.isEmpty() ) { gs->insert( "autoLoginUser", login ); } else { gs->remove( "autoLoginUser" ); } if ( login.isEmpty() ) { gs->remove( "username" ); } else { gs->insert( "username", login ); } } static const QStringList& alwaysForbiddenLoginNames() { static QStringList s { QStringLiteral( "root" ), QStringLiteral( "nobody" ) }; return s; } static const QStringList& alwaysForbiddenHostNames() { static QStringList s { QStringLiteral( "localhost" ) }; return s; } const NamedEnumTable< HostNameAction >& hostnameActionNames() { // *INDENT-OFF* // clang-format off static const NamedEnumTable< HostNameAction > names { { QStringLiteral( "none" ), HostNameAction::None }, { QStringLiteral( "etcfile" ), HostNameAction::EtcHostname }, { QStringLiteral( "etc" ), HostNameAction::EtcHostname }, { QStringLiteral( "hostnamed" ), HostNameAction::SystemdHostname }, { QStringLiteral( "transient" ), HostNameAction::Transient }, }; // clang-format on // *INDENT-ON* return names; } Config::Config( QObject* parent ) : Calamares::ModuleSystem::Config( parent ) , m_forbiddenHostNames( alwaysForbiddenHostNames() ) , m_forbiddenLoginNames( alwaysForbiddenLoginNames() ) { emit readyChanged( m_isReady ); // false // Gang together all the changes of status to one readyChanged() signal connect( this, &Config::hostnameStatusChanged, this, &Config::checkReady ); connect( this, &Config::loginNameStatusChanged, this, &Config::checkReady ); connect( this, &Config::fullNameChanged, this, &Config::checkReady ); connect( this, &Config::userPasswordStatusChanged, this, &Config::checkReady ); connect( this, &Config::rootPasswordStatusChanged, this, &Config::checkReady ); connect( this, &Config::reuseUserPasswordForRootChanged, this, &Config::checkReady ); connect( this, &Config::requireStrongPasswordsChanged, this, &Config::checkReady ); } Config::~Config() {} void Config::setUserShell( const QString& shell ) { if ( !shell.isEmpty() && !shell.startsWith( '/' ) ) { cWarning() << "User shell" << shell << "is not an absolute path."; return; } if ( shell != m_userShell ) { m_userShell = shell; emit userShellChanged( shell ); // The shell is put into GS as well. auto* gs = Calamares::JobQueue::instance()->globalStorage(); if ( gs ) { gs->insert( "userShell", shell ); } } } static inline void insertInGlobalStorage( const QString& key, const QString& group ) { auto* gs = Calamares::JobQueue::instance()->globalStorage(); if ( !gs || group.isEmpty() ) { return; } gs->insert( key, group ); } void Config::setAutoLoginGroup( const QString& group ) { if ( group != m_autoLoginGroup ) { m_autoLoginGroup = group; insertInGlobalStorage( QStringLiteral( "autoLoginGroup" ), group ); emit autoLoginGroupChanged( group ); } } QStringList Config::groupsForThisUser() const { QStringList l; l.reserve( defaultGroups().size() + 1 ); for ( const auto& g : defaultGroups() ) { l << g.name(); } if ( doAutoLogin() && !autoLoginGroup().isEmpty() ) { l << autoLoginGroup(); } return l; } void Config::setSudoersGroup( const QString& group ) { if ( group != m_sudoersGroup ) { m_sudoersGroup = group; insertInGlobalStorage( QStringLiteral( "sudoersGroup" ), group ); emit sudoersGroupChanged( group ); } } void Config::setLoginName( const QString& login ) { CONFIG_PREVENT_EDITING( QString, "loginName" ); if ( login != m_loginName ) { m_customLoginName = !login.isEmpty(); m_loginName = login; updateGSAutoLogin( doAutoLogin(), login ); emit loginNameChanged( login ); emit loginNameStatusChanged( loginNameStatus() ); } } const QStringList& Config::forbiddenLoginNames() const { return m_forbiddenLoginNames; } QString Config::loginNameStatus() const { // An empty login is "ok", even if it isn't really if ( m_loginName.isEmpty() ) { return QString(); } if ( m_loginName.length() > USERNAME_MAX_LENGTH ) { return tr( "Your username is too long." ); } QRegExp validateFirstLetter( "^[a-z_]" ); if ( validateFirstLetter.indexIn( m_loginName ) != 0 ) { return tr( "Your username must start with a lowercase letter or underscore." ); } if ( !USERNAME_RX.exactMatch( m_loginName ) ) { return tr( "Only lowercase letters, numbers, underscore and hyphen are allowed." ); } // Although we've made the list lower-case, and the RE above forces lower-case, still pass the flag if ( forbiddenLoginNames().contains( m_loginName, Qt::CaseInsensitive ) ) { return tr( "'%1' is not allowed as username." ).arg( m_loginName ); } return QString(); } void Config::setHostName( const QString& host ) { if ( hostnameAction() != HostNameAction::EtcHostname && hostnameAction() != HostNameAction::SystemdHostname ) { cDebug() << "Ignoring hostname" << host << "No hostname will be set."; return; } if ( host != m_hostname ) { m_customHostName = !host.isEmpty(); m_hostname = host; Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( host.isEmpty() ) { gs->remove( "hostname" ); } else { gs->insert( "hostname", host ); } emit hostnameChanged( host ); emit hostnameStatusChanged( hostnameStatus() ); } } const QStringList& Config::forbiddenHostNames() const { return m_forbiddenHostNames; } QString Config::hostnameStatus() const { // An empty hostname is "ok", even if it isn't really if ( m_hostname.isEmpty() ) { return QString(); } if ( m_hostname.length() < HOSTNAME_MIN_LENGTH ) { return tr( "Your hostname is too short." ); } if ( m_hostname.length() > HOSTNAME_MAX_LENGTH ) { return tr( "Your hostname is too long." ); } // "LocalHost" is just as forbidden as "localhost" if ( forbiddenHostNames().contains( m_hostname, Qt::CaseInsensitive ) ) { return tr( "'%1' is not allowed as hostname." ).arg( m_hostname ); } if ( !HOSTNAME_RX.exactMatch( m_hostname ) ) { return tr( "Only letters, numbers, underscore and hyphen are allowed." ); } return QString(); } static QString cleanupForHostname( const QString& s ) { QRegExp dmirx( "[^a-zA-Z0-9]", Qt::CaseInsensitive ); return s.toLower().replace( dmirx, " " ).remove( ' ' ); } /** @brief Guess the machine's name * * If there is DMI data, use that; otherwise, just call the machine "-pc". * Reads the DMI data just once. */ static QString guessProductName() { static bool tried = false; static QString dmiProduct; if ( !tried ) { QFile dmiFile( QStringLiteral( "/sys/devices/virtual/dmi/id/product_name" ) ); if ( dmiFile.exists() && dmiFile.open( QIODevice::ReadOnly ) ) { dmiProduct = cleanupForHostname( QString::fromLocal8Bit( dmiFile.readAll().simplified().data() ) ); } if ( dmiProduct.isEmpty() ) { dmiProduct = QStringLiteral( "pc" ); } tried = true; } return dmiProduct; } #ifdef HAVE_ICU static QString transliterate( const QString& input ) { static auto ue = UErrorCode::U_ZERO_ERROR; static auto transliterator = std::unique_ptr< icu::Transliterator >( icu::Transliterator::createInstance( TRANSLITERATOR_ID, UTRANS_FORWARD, ue ) ); if ( ue != UErrorCode::U_ZERO_ERROR ) { cWarning() << "Can't create transliterator"; //it'll be checked later for non-ASCII characters return input; } icu::UnicodeString transliterable( input.utf16() ); transliterator->transliterate( transliterable ); return QString::fromUtf16( transliterable.getTerminatedBuffer() ); } #else static QString transliterate( const QString& input ) { return input; } #endif static QString makeLoginNameSuggestion( const QStringList& parts ) { if ( parts.isEmpty() || parts.first().isEmpty() ) { return QString(); } QString usernameSuggestion = parts.first(); for ( int i = 1; i < parts.length(); ++i ) { if ( !parts.value( i ).isEmpty() ) { usernameSuggestion.append( parts.value( i ).at( 0 ) ); } } return USERNAME_RX.indexIn( usernameSuggestion ) != -1 ? usernameSuggestion : QString(); } /** @brief Return an invalid string for use in a hostname, if @p s is empty * * Maps empty to "^" (which is invalid in a hostname), everything else * returns @p s itself. */ static QString invalidEmpty( const QString& s ) { return s.isEmpty() ? QStringLiteral( "^" ) : s; } STATICTEST QString makeHostnameSuggestion( const QString& templateString, const QStringList& fullNameParts, const QString& loginName ) { QHash< QString, QString > replace; // User data replace.insert( QStringLiteral( "first" ), invalidEmpty( fullNameParts.isEmpty() ? QString() : cleanupForHostname( fullNameParts.first() ) ) ); replace.insert( QStringLiteral( "name" ), invalidEmpty( cleanupForHostname( fullNameParts.join( QString() ) ) ) ); replace.insert( QStringLiteral( "login" ), invalidEmpty( cleanupForHostname( loginName ) ) ); // Hardware data replace.insert( QStringLiteral( "product" ), guessProductName() ); replace.insert( QStringLiteral( "product2" ), cleanupForHostname( QSysInfo::prettyProductName() ) ); replace.insert( QStringLiteral( "cpu" ), cleanupForHostname( QSysInfo::currentCpuArchitecture() ) ); // Hostname data replace.insert( QStringLiteral( "host" ), invalidEmpty( cleanupForHostname( QSysInfo::machineHostName() ) ) ); QString hostnameSuggestion = KMacroExpander::expandMacros( templateString, replace, '$' ); // RegExp for valid hostnames; if the suggestion produces a valid name, return it static const QRegExp HOSTNAME_RX( "^[a-zA-Z0-9][-a-zA-Z0-9_]*$" ); return HOSTNAME_RX.indexIn( hostnameSuggestion ) != -1 ? hostnameSuggestion : QString(); } void Config::setFullName( const QString& name ) { CONFIG_PREVENT_EDITING( QString, "fullName" ); if ( name.isEmpty() && !m_fullName.isEmpty() ) { if ( !m_customHostName ) { setHostName( name ); } if ( !m_customLoginName ) { setLoginName( name ); } m_fullName = name; emit fullNameChanged( name ); } if ( name != m_fullName ) { m_fullName = name; Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( name.isEmpty() ) { gs->remove( "fullname" ); } else { gs->insert( "fullname", name ); } emit fullNameChanged( name ); // Build login and hostname, if needed static QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive ); const QString cleanName = CalamaresUtils::removeDiacritics( transliterate( name ) ) .replace( QRegExp( "[-']" ), "" ) .replace( rx, " " ) .toLower() .simplified(); QStringList cleanParts = cleanName.split( ' ' ); if ( !m_customLoginName ) { const QString login = makeLoginNameSuggestion( cleanParts ); if ( !login.isEmpty() && login != m_loginName ) { setLoginName( login ); // It's **still** not custom, though setLoginName() sets that m_customLoginName = false; } } if ( !m_customHostName ) { const QString hostname = makeHostnameSuggestion( m_hostnameTemplate, cleanParts, loginName() ); if ( !hostname.isEmpty() && hostname != m_hostname ) { setHostName( hostname ); // Still not custom m_customHostName = false; } } } } void Config::setAutoLogin( bool b ) { if ( b != m_doAutoLogin ) { m_doAutoLogin = b; updateGSAutoLogin( b, loginName() ); emit autoLoginChanged( b ); } } void Config::setReuseUserPasswordForRoot( bool reuse ) { if ( reuse != m_reuseUserPasswordForRoot ) { m_reuseUserPasswordForRoot = reuse; emit reuseUserPasswordForRootChanged( reuse ); { auto rp = rootPasswordStatus(); emit rootPasswordStatusChanged( rp.first, rp.second ); } } } void Config::setRequireStrongPasswords( bool strong ) { if ( strong != m_requireStrongPasswords ) { m_requireStrongPasswords = strong; emit requireStrongPasswordsChanged( strong ); { auto rp = rootPasswordStatus(); emit rootPasswordStatusChanged( rp.first, rp.second ); } { auto up = userPasswordStatus(); emit userPasswordStatusChanged( up.first, up.second ); } } } void Config::setUserPassword( const QString& s ) { if ( s != m_userPassword ) { m_userPassword = s; const auto p = passwordStatus( m_userPassword, m_userPasswordSecondary ); emit userPasswordStatusChanged( p.first, p.second ); emit userPasswordChanged( s ); } } void Config::setUserPasswordSecondary( const QString& s ) { if ( s != m_userPasswordSecondary ) { m_userPasswordSecondary = s; const auto p = passwordStatus( m_userPassword, m_userPasswordSecondary ); emit userPasswordStatusChanged( p.first, p.second ); emit userPasswordSecondaryChanged( s ); } } /** @brief Checks two copies of the password for validity * * Given two copies of the password -- generally the password and * the secondary fields -- checks them for validity and returns * a pair of . * */ Config::PasswordStatus Config::passwordStatus( const QString& pw1, const QString& pw2 ) const { if ( pw1 != pw2 ) { return qMakePair( PasswordValidity::Invalid, tr( "Your passwords do not match!" ) ); } bool failureIsFatal = requireStrongPasswords(); for ( const auto& pc : m_passwordChecks ) { QString message = pc.filter( pw1 ); if ( !message.isEmpty() ) { return qMakePair( failureIsFatal ? PasswordValidity::Invalid : PasswordValidity::Weak, message ); } } return qMakePair( PasswordValidity::Valid, tr( "OK!" ) ); } Config::PasswordStatus Config::userPasswordStatus() const { return passwordStatus( m_userPassword, m_userPasswordSecondary ); } int Config::userPasswordValidity() const { auto p = userPasswordStatus(); return p.first; } QString Config::userPasswordMessage() const { auto p = userPasswordStatus(); return p.second; } void Config::setRootPassword( const QString& s ) { if ( writeRootPassword() && s != m_rootPassword ) { m_rootPassword = s; const auto p = passwordStatus( m_rootPassword, m_rootPasswordSecondary ); emit rootPasswordStatusChanged( p.first, p.second ); emit rootPasswordChanged( s ); } } void Config::setRootPasswordSecondary( const QString& s ) { if ( writeRootPassword() && s != m_rootPasswordSecondary ) { m_rootPasswordSecondary = s; const auto p = passwordStatus( m_rootPassword, m_rootPasswordSecondary ); emit rootPasswordStatusChanged( p.first, p.second ); emit rootPasswordSecondaryChanged( s ); } } QString Config::rootPassword() const { if ( writeRootPassword() ) { if ( reuseUserPasswordForRoot() ) { return userPassword(); } return m_rootPassword; } return QString(); } QString Config::rootPasswordSecondary() const { if ( writeRootPassword() ) { if ( reuseUserPasswordForRoot() ) { return userPasswordSecondary(); } return m_rootPasswordSecondary; } return QString(); } Config::PasswordStatus Config::rootPasswordStatus() const { if ( writeRootPassword() && !reuseUserPasswordForRoot() ) { return passwordStatus( m_rootPassword, m_rootPasswordSecondary ); } else { return userPasswordStatus(); } } int Config::rootPasswordValidity() const { auto p = rootPasswordStatus(); return p.first; } QString Config::rootPasswordMessage() const { auto p = rootPasswordStatus(); return p.second; } bool Config::isReady() const { bool readyFullName = !fullName().isEmpty(); // Needs some text bool readyHostname = hostnameStatus().isEmpty(); // .. no warning message bool readyUsername = !loginName().isEmpty() && loginNameStatus().isEmpty(); // .. no warning message bool readyUserPassword = userPasswordValidity() != Config::PasswordValidity::Invalid; bool readyRootPassword = rootPasswordValidity() != Config::PasswordValidity::Invalid; return readyFullName && readyHostname && readyUsername && readyUserPassword && readyRootPassword; } /** @brief Update ready status and emit signal * * This is a "concentrator" private slot for all the status-changed * signals, so that readyChanged() is emitted only when needed. */ void Config::checkReady() { bool b = isReady(); if ( b != m_isReady ) { m_isReady = b; emit readyChanged( b ); } } STATICTEST void setConfigurationDefaultGroups( const QVariantMap& map, QList< GroupDescription >& defaultGroups ) { defaultGroups.clear(); const QString key( "defaultGroups" ); auto groupsFromConfig = map.value( key ).toList(); if ( groupsFromConfig.isEmpty() ) { if ( map.contains( key ) && map.value( key ).isValid() && map.value( key ).canConvert( QVariant::List ) ) { // Explicitly set, but empty: this is valid, but unusual. cDebug() << key << "has explicit empty value."; } else { // By default give the user a handful of "traditional" groups, if // none are specified at all. These are system (GID < 1000) groups. cWarning() << "Using fallback groups. Please check *defaultGroups* value in users.conf"; for ( const auto& s : { "lp", "video", "network", "storage", "wheel", "audio" } ) { defaultGroups.append( GroupDescription( s, GroupDescription::CreateIfNeeded {}, GroupDescription::SystemGroup {} ) ); } } } else { for ( const auto& v : groupsFromConfig ) { if ( v.type() == QVariant::String ) { defaultGroups.append( GroupDescription( v.toString() ) ); } else if ( v.type() == QVariant::Map ) { const auto innermap = v.toMap(); QString name = CalamaresUtils::getString( innermap, "name" ); if ( !name.isEmpty() ) { defaultGroups.append( GroupDescription( name, CalamaresUtils::getBool( innermap, "must_exist", false ), CalamaresUtils::getBool( innermap, "system", false ) ) ); } else { cWarning() << "Ignoring *defaultGroups* entry without a name" << v; } } else { cWarning() << "Unknown *defaultGroups* entry" << v; } } } } STATICTEST HostNameAction getHostNameAction( const QVariantMap& configurationMap ) { HostNameAction setHostName = HostNameAction::EtcHostname; QString hostnameActionString = CalamaresUtils::getString( configurationMap, "location" ); if ( !hostnameActionString.isEmpty() ) { bool ok = false; setHostName = hostnameActionNames().find( hostnameActionString, ok ); if ( !ok ) { setHostName = HostNameAction::EtcHostname; // Rather than none } } return setHostName; } /** @brief Process entries in the passwordRequirements config entry * * Called once for each item in the config entry, which should * be a key-value pair. What makes sense as a value depends on * the key. Supported keys are documented in users.conf. * * @return if the check was added, returns @c true */ STATICTEST bool addPasswordCheck( const QString& key, const QVariant& value, PasswordCheckList& passwordChecks ) { if ( key == "minLength" ) { add_check_minLength( passwordChecks, value ); } else if ( key == "maxLength" ) { add_check_maxLength( passwordChecks, value ); } else if ( key == "nonempty" ) { if ( value.toBool() ) { passwordChecks.push_back( PasswordCheck( []() { return QCoreApplication::translate( "PWQ", "Password is empty" ); }, []( const QString& s ) { return !s.isEmpty(); }, PasswordCheck::Weight( 1 ) ) ); } else { cDebug() << "nonempty check is mentioned but set to false"; return false; } } #ifdef CHECK_PWQUALITY else if ( key == "libpwquality" ) { add_check_libpwquality( passwordChecks, value ); } #endif // CHECK_PWQUALITY else { cWarning() << "Unknown password-check key" << key; return false; } return true; } /** @brief Returns a value of either key from the map * * Takes a function (e.g. getBool, or getString) and two keys, * returning the value in the map of the one that is there (or @p defaultArg) */ template < typename T, typename U > T either( T ( *f )( const QVariantMap&, const QString&, U ), const QVariantMap& configurationMap, const QString& oldKey, const QString& newKey, U defaultArg ) { if ( configurationMap.contains( oldKey ) ) { return f( configurationMap, oldKey, defaultArg ); } else { return f( configurationMap, newKey, defaultArg ); } } // TODO:3.3: Remove static void copyLegacy( const QVariantMap& source, const QString& sourceKey, QVariantMap& target, const QString& targetKey ) { if ( source.contains( sourceKey ) ) { if ( target.contains( targetKey ) ) { cWarning() << "Legacy *users* key" << sourceKey << "ignored."; } else { const QVariant legacyValue = source.value( sourceKey ); cWarning() << "Legacy *users* key" << sourceKey << "overrides hostname-settings."; target.insert( targetKey, legacyValue ); } } } /** @brief Tidy up a list of names * * Remove duplicates, apply lowercase, sort. */ static void tidy( QStringList& l ) { std::for_each( l.begin(), l.end(), []( QString& s ) { s = s.toLower(); } ); l.sort(); l.removeDuplicates(); } void Config::setConfigurationMap( const QVariantMap& configurationMap ) { // Handle *user* key and subkeys and legacy settings { bool ok = false; // Ignored QVariantMap userSettings = CalamaresUtils::getSubMap( configurationMap, "user", ok ); // TODO:3.3: Remove calls to copyLegacy copyLegacy( configurationMap, "userShell", userSettings, "shell" ); QString shell( QLatin1String( "/bin/bash" ) ); // as if it's not set at all if ( userSettings.contains( "shell" ) ) { shell = CalamaresUtils::getString( userSettings, "shell" ); } // Now it might be explicitly set to empty, which is ok setUserShell( shell ); m_forbiddenLoginNames = CalamaresUtils::getStringList( userSettings, "forbidden_names" ); m_forbiddenLoginNames << alwaysForbiddenLoginNames(); tidy( m_forbiddenLoginNames ); } setAutoLoginGroup( either< QString, const QString& >( CalamaresUtils::getString, configurationMap, "autologinGroup", "autoLoginGroup", QString() ) ); setSudoersGroup( CalamaresUtils::getString( configurationMap, "sudoersGroup" ) ); m_sudoStyle = CalamaresUtils::getBool( configurationMap, "sudoersConfigureWithGroup", false ) ? SudoStyle::UserAndGroup : SudoStyle::UserOnly; // Handle *hostname* key and subkeys and legacy settings { bool ok = false; // Ignored QVariantMap hostnameSettings = CalamaresUtils::getSubMap( configurationMap, "hostname", ok ); // TODO:3.3: Remove calls to copyLegacy copyLegacy( configurationMap, "setHostname", hostnameSettings, "location" ); copyLegacy( configurationMap, "writeHostsFile", hostnameSettings, "writeHostsFile" ); m_hostnameAction = getHostNameAction( hostnameSettings ); m_writeEtcHosts = CalamaresUtils::getBool( hostnameSettings, "writeHostsFile", true ); m_hostnameTemplate = CalamaresUtils::getString( hostnameSettings, "template", QStringLiteral( "${first}-${product}" ) ); m_forbiddenHostNames = CalamaresUtils::getStringList( hostnameSettings, "forbidden_names" ); m_forbiddenHostNames << alwaysForbiddenHostNames(); tidy( m_forbiddenHostNames ); } setConfigurationDefaultGroups( configurationMap, m_defaultGroups ); // Renaming of Autologin -> AutoLogin in 4ffa79d4cf also affected // configuration keys, which was not intended. Accept both. m_doAutoLogin = either( CalamaresUtils::getBool, configurationMap, QStringLiteral( "doAutologin" ), QStringLiteral( "doAutoLogin" ), false ); m_writeRootPassword = CalamaresUtils::getBool( configurationMap, "setRootPassword", true ); Calamares::JobQueue::instance()->globalStorage()->insert( "setRootPassword", m_writeRootPassword ); m_reuseUserPasswordForRoot = CalamaresUtils::getBool( configurationMap, "doReusePassword", false ); m_permitWeakPasswords = CalamaresUtils::getBool( configurationMap, "allowWeakPasswords", false ); m_requireStrongPasswords = !m_permitWeakPasswords || !CalamaresUtils::getBool( configurationMap, "allowWeakPasswordsDefault", false ); // If the value doesn't exist, or isn't a map, this gives an empty map -- no problem auto pr_checks( configurationMap.value( "passwordRequirements" ).toMap() ); for ( decltype( pr_checks )::const_iterator i = pr_checks.constBegin(); i != pr_checks.constEnd(); ++i ) { addPasswordCheck( i.key(), i.value(), m_passwordChecks ); } std::sort( m_passwordChecks.begin(), m_passwordChecks.end() ); updateGSAutoLogin( doAutoLogin(), loginName() ); checkReady(); ApplyPresets( *this, configurationMap ) << "fullName" << "loginName"; } void Config::finalizeGlobalStorage() const { updateGSAutoLogin( doAutoLogin(), loginName() ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( writeRootPassword() ) { gs->insert( "reuseRootPassword", reuseUserPasswordForRoot() ); } gs->insert( "password", CalamaresUtils::obscure( userPassword() ) ); } Calamares::JobList Config::createJobs() const { Calamares::JobList jobs; if ( !isReady() ) { return jobs; } Calamares::Job* j; if ( !m_sudoersGroup.isEmpty() ) { j = new SetupSudoJob( m_sudoersGroup, m_sudoStyle ); jobs.append( Calamares::job_ptr( j ) ); } j = new SetupGroupsJob( this ); jobs.append( Calamares::job_ptr( j ) ); j = new CreateUserJob( this ); jobs.append( Calamares::job_ptr( j ) ); j = new SetPasswordJob( loginName(), userPassword() ); jobs.append( Calamares::job_ptr( j ) ); j = new SetPasswordJob( "root", rootPassword() ); jobs.append( Calamares::job_ptr( j ) ); j = new SetHostNameJob( this ); jobs.append( Calamares::job_ptr( j ) ); return jobs; } calamares-calamares-2d126ae/src/modules/users/Config.h000066400000000000000000000316551430147706700227770ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef USERS_CONFIG_H #define USERS_CONFIG_H #include "CheckPWQuality.h" #include "Job.h" #include "modulesystem/Config.h" #include "utils/NamedEnum.h" #include #include #include enum class HostNameAction { None, EtcHostname, // Write to /etc/hostname directly SystemdHostname, // Set via hostnamed(1) Transient, // Force target system transient, remove /etc/hostname }; const NamedEnumTable< HostNameAction >& hostnameActionNames(); /** @brief Settings for a single group * * The list of defaultgroups from the configuration can be * set up in a fine-grained way, with both user- and system- * level groups; this class stores a configuration for each. */ class GroupDescription { public: // TODO: still too-weakly typed, add a macro to define strongly-typed bools class MustExist : public std::true_type { }; class CreateIfNeeded : public std::false_type { }; class SystemGroup : public std::true_type { }; class UserGroup : public std::false_type { }; ///@brief An invalid, empty group GroupDescription() {} ///@brief A group with full details GroupDescription( const QString& name, bool mustExistAlready = CreateIfNeeded {}, bool isSystem = UserGroup {} ) : m_name( name ) , m_isValid( !name.isEmpty() ) , m_mustAlreadyExist( mustExistAlready ) , m_isSystem( isSystem ) { } bool isValid() const { return m_isValid; } bool isSystemGroup() const { return m_isSystem; } bool mustAlreadyExist() const { return m_mustAlreadyExist; } QString name() const { return m_name; } ///@brief Equality of groups depends only on name and kind bool operator==( const GroupDescription& rhs ) const { return rhs.name() == name() && rhs.isSystemGroup() == isSystemGroup(); } private: QString m_name; bool m_isValid = false; bool m_mustAlreadyExist = false; bool m_isSystem = false; }; class PLUGINDLLEXPORT Config : public Calamares::ModuleSystem::Config { Q_OBJECT Q_PROPERTY( QString userShell READ userShell WRITE setUserShell NOTIFY userShellChanged ) Q_PROPERTY( QString autoLoginGroup READ autoLoginGroup WRITE setAutoLoginGroup NOTIFY autoLoginGroupChanged ) Q_PROPERTY( QString sudoersGroup READ sudoersGroup WRITE setSudoersGroup NOTIFY sudoersGroupChanged ) Q_PROPERTY( bool doAutoLogin READ doAutoLogin WRITE setAutoLogin NOTIFY autoLoginChanged ) Q_PROPERTY( QString fullName READ fullName WRITE setFullName NOTIFY fullNameChanged ) Q_PROPERTY( QString loginName READ loginName WRITE setLoginName NOTIFY loginNameChanged ) Q_PROPERTY( QString loginNameStatus READ loginNameStatus NOTIFY loginNameStatusChanged ) Q_PROPERTY( QString hostname READ hostname WRITE setHostName NOTIFY hostnameChanged ) Q_PROPERTY( QString hostnameStatus READ hostnameStatus NOTIFY hostnameStatusChanged ) Q_PROPERTY( HostNameAction hostnameAction READ hostnameAction CONSTANT ) Q_PROPERTY( QString userPassword READ userPassword WRITE setUserPassword NOTIFY userPasswordChanged ) Q_PROPERTY( QString userPasswordSecondary READ userPasswordSecondary WRITE setUserPasswordSecondary NOTIFY userPasswordSecondaryChanged ) Q_PROPERTY( int userPasswordValidity READ userPasswordValidity NOTIFY userPasswordStatusChanged STORED false ) Q_PROPERTY( QString userPasswordMessage READ userPasswordMessage NOTIFY userPasswordStatusChanged STORED false ) Q_PROPERTY( QString rootPassword READ rootPassword WRITE setRootPassword NOTIFY rootPasswordChanged ) Q_PROPERTY( QString rootPasswordSecondary READ rootPasswordSecondary WRITE setRootPasswordSecondary NOTIFY rootPasswordSecondaryChanged ) Q_PROPERTY( int rootPasswordValidity READ rootPasswordValidity NOTIFY rootPasswordStatusChanged STORED false ) Q_PROPERTY( QString rootPasswordMessage READ rootPasswordMessage NOTIFY rootPasswordStatusChanged STORED false ) Q_PROPERTY( bool writeRootPassword READ writeRootPassword CONSTANT ) Q_PROPERTY( bool reuseUserPasswordForRoot READ reuseUserPasswordForRoot WRITE setReuseUserPasswordForRoot NOTIFY reuseUserPasswordForRootChanged ) Q_PROPERTY( bool permitWeakPasswords READ permitWeakPasswords CONSTANT ) Q_PROPERTY( bool requireStrongPasswords READ requireStrongPasswords WRITE setRequireStrongPasswords NOTIFY requireStrongPasswordsChanged ) Q_PROPERTY( bool ready READ isReady NOTIFY readyChanged STORED false ) public: /** @brief Validity (status) of a password * * Valid passwords are: * - primary and secondary are equal **and** * - all the password-strength checks pass * Weak passwords: * - primary and secondary are equal **and** * - not all the checks pass **and** * - permitWeakPasswords is @c true **and** * - requireStrongPasswords is @c false * Invalid passwords (all other cases): * - the primary and secondary values are not equal **or** * - not all the checks pass and weak passwords are not permitted */ enum PasswordValidity { Valid = 0, Weak = 1, Invalid = 2 }; /** @brief Full password status * * A password's status is in two parts: * - a validity (valid, weak or invalid) * - a message describing that validity * The message is empty when the password is valid, but * weak and invalid passwords have an explanatory message. */ using PasswordStatus = QPair< PasswordValidity, QString >; Config( QObject* parent = nullptr ); ~Config() override; void setConfigurationMap( const QVariantMap& ) override; /** @brief Fill Global Storage with some settings * * This should be called when moving on from the view step, * and copies some things to GS that otherwise would not. */ void finalizeGlobalStorage() const; /** @brief Jobs for creating user, setting passwords * * If the Config object isn't ready yet, returns an empty list. */ Calamares::JobList createJobs() const; /** @brief Full path to the user's shell executable * * Typically this will be /bin/bash, but it can be set from * the config file with the *userShell* setting. */ QString userShell() const { return m_userShell; } /// The group of which auto-login users must be a member QString autoLoginGroup() const { return m_autoLoginGroup; } enum class SudoStyle { UserOnly, UserAndGroup }; /// The group of which users who can "sudo" must be a member QString sudoersGroup() const { return m_sudoersGroup; } SudoStyle sudoStyle() const { return m_sudoStyle; } /// The full (GECOS) name of the user QString fullName() const { return m_fullName; } /// The login name of the user QString loginName() const { return m_loginName; } /// Status message about login -- empty for "ok" QString loginNameStatus() const; /// The host name (name for the system) QString hostname() const { return ( ( hostnameAction() == HostNameAction::EtcHostname ) || ( hostnameAction() == HostNameAction::SystemdHostname ) ) ? m_hostname : QString(); } /// Status message about hostname -- empty for "ok" QString hostnameStatus() const; /// How to write the hostname HostNameAction hostnameAction() const { return m_hostnameAction; } /// Write /etc/hosts ? bool writeEtcHosts() const { return m_writeEtcHosts; } /// Should the user be automatically logged-in? bool doAutoLogin() const { return m_doAutoLogin; } /// Should the root password be written (if false, no password is set and the root account is disabled for login) bool writeRootPassword() const { return m_writeRootPassword; } /// Should the user's password be used for root, too? (if root is written at all) bool reuseUserPasswordForRoot() const { return m_reuseUserPasswordForRoot; } /// Show UI to change the "require strong password" setting? bool permitWeakPasswords() const { return m_permitWeakPasswords; } /// Current setting for "require strong password"? bool requireStrongPasswords() const { return m_requireStrongPasswords; } const QList< GroupDescription >& defaultGroups() const { return m_defaultGroups; } /** @brief the names of all the groups for the current user * * Takes into account defaultGroups and autoLogin behavior. */ QStringList groupsForThisUser() const; // The user enters a password (and again in a separate UI element) QString userPassword() const { return m_userPassword; } QString userPasswordSecondary() const { return m_userPasswordSecondary; } int userPasswordValidity() const; QString userPasswordMessage() const; PasswordStatus userPasswordStatus() const; // The root password **may** be entered in the UI, or may be suppressed // entirely when writeRootPassword is off, or may be equal to // the user password when reuseUserPasswordForRoot is on. QString rootPassword() const; QString rootPasswordSecondary() const; int rootPasswordValidity() const; QString rootPasswordMessage() const; PasswordStatus rootPasswordStatus() const; bool isReady() const; const QStringList& forbiddenLoginNames() const; const QStringList& forbiddenHostNames() const; public Q_SLOTS: /** @brief Sets the user's shell if possible * * If the path is empty, that's ok: no shell will be explicitly set, * so the user will get whatever shell is set to default in the target. * * The given non-empty @p path must be an absolute path (for use inside * the target system!); if it is not, the shell is not changed. */ void setUserShell( const QString& path ); /// Sets the autoLogin group; empty is ignored void setAutoLoginGroup( const QString& group ); /// Sets the sudoer group; empty is ignored void setSudoersGroup( const QString& group ); /// Sets the full name, may guess a loginName void setFullName( const QString& name ); /// Sets the login name (flags it as "custom") void setLoginName( const QString& login ); /// Sets the host name (flags it as "custom") void setHostName( const QString& host ); /// Sets the autoLogin flag void setAutoLogin( bool b ); /// Set to true to use the user password, unchanged, for root too void setReuseUserPasswordForRoot( bool reuse ); /// Change setting for "require strong password" void setRequireStrongPasswords( bool strong ); void setUserPassword( const QString& ); void setUserPasswordSecondary( const QString& ); void setRootPassword( const QString& ); void setRootPasswordSecondary( const QString& ); signals: void userShellChanged( const QString& ); void autoLoginGroupChanged( const QString& ); void sudoersGroupChanged( const QString& ); void fullNameChanged( const QString& ); void loginNameChanged( const QString& ); void loginNameStatusChanged( const QString& ); void hostnameChanged( const QString& ); void hostnameStatusChanged( const QString& ); void autoLoginChanged( bool ); void reuseUserPasswordForRootChanged( bool ); void requireStrongPasswordsChanged( bool ); void userPasswordChanged( const QString& ); void userPasswordSecondaryChanged( const QString& ); void userPasswordStatusChanged( int, const QString& ); void rootPasswordChanged( const QString& ); void rootPasswordSecondaryChanged( const QString& ); void rootPasswordStatusChanged( int, const QString& ); void readyChanged( bool ) const; private: PasswordStatus passwordStatus( const QString&, const QString& ) const; void checkReady(); QList< GroupDescription > m_defaultGroups; QString m_userShell; QString m_autoLoginGroup; QString m_sudoersGroup; SudoStyle m_sudoStyle = SudoStyle::UserOnly; QString m_fullName; QString m_loginName; QString m_hostname; QString m_userPassword; QString m_userPasswordSecondary; // enter again to be sure QString m_rootPassword; QString m_rootPasswordSecondary; bool m_doAutoLogin = false; bool m_writeRootPassword = true; bool m_reuseUserPasswordForRoot = false; bool m_permitWeakPasswords = false; bool m_requireStrongPasswords = true; bool m_customLoginName = false; bool m_customHostName = false; bool m_isReady = false; ///< Used to reduce readyChanged signals HostNameAction m_hostnameAction = HostNameAction::EtcHostname; bool m_writeEtcHosts = false; QString m_hostnameTemplate; QStringList m_forbiddenHostNames; QStringList m_forbiddenLoginNames; PasswordCheckList m_passwordChecks; }; #endif calamares-calamares-2d126ae/src/modules/users/CreateUserJob.cpp000066400000000000000000000122541430147706700246140ustar00rootroot00000000000000/* === 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 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-calamares-2d126ae/src/modules/users/CreateUserJob.h000066400000000000000000000013271430147706700242600ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/users/MiscJobs.cpp000066400000000000000000000142771430147706700236370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "MiscJobs.h" #include "Config.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Permissions.h" #include #include #include SetupSudoJob::SetupSudoJob( const QString& group, Config::SudoStyle style ) : m_sudoGroup( group ) , m_sudoStyle( style ) { } QString SetupSudoJob::prettyName() const { return tr( "Configure
sudo
users." ); } static QString designatorForStyle( Config::SudoStyle style ) { switch ( style ) { case Config::SudoStyle::UserOnly: return QStringLiteral( "(ALL)" ); case Config::SudoStyle::UserAndGroup: return QStringLiteral( "(ALL:ALL)" ); } __builtin_unreachable(); } Calamares::JobResult SetupSudoJob::exec() { if ( m_sudoGroup.isEmpty() ) { cDebug() << "Skipping sudo 10-installer because the sudoGroup is empty."; return Calamares::JobResult::ok(); } // One % for the sudo format, keep it outside of the string to avoid accidental replacement QString sudoersLine = QChar( '%' ) + QString( "%1 ALL=%2 ALL\n" ).arg( m_sudoGroup, designatorForStyle( m_sudoStyle ) ); auto fileResult = CalamaresUtils::System::instance()->createTargetFile( QStringLiteral( "/etc/sudoers.d/10-installer" ), sudoersLine.toUtf8().constData(), CalamaresUtils::System::WriteMode::Overwrite ); if ( fileResult ) { if ( !CalamaresUtils::Permissions::apply( fileResult.path(), 0440 ) ) { return Calamares::JobResult::error( tr( "Cannot chmod sudoers file." ) ); } } else { return Calamares::JobResult::error( tr( "Cannot create sudoers file for writing." ) ); } return Calamares::JobResult::ok(); } STATICTEST QStringList groupsInTargetSystem() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( !gs ) { return QStringList(); } QDir targetRoot( gs->value( "rootMountPoint" ).toString() ); QFileInfo groupsFi( targetRoot.absoluteFilePath( "etc/group" ) ); QFile groupsFile( groupsFi.absoluteFilePath() ); if ( !groupsFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) { return QStringList(); } QString groupsData = QString::fromLocal8Bit( groupsFile.readAll() ); QStringList groupsLines = groupsData.split( '\n' ); QStringList::iterator it = groupsLines.begin(); while ( it != groupsLines.end() ) { if ( it->startsWith( '#' ) ) { it = groupsLines.erase( it ); continue; } int indexOfFirstToDrop = it->indexOf( ':' ); if ( indexOfFirstToDrop < 1 ) { it = groupsLines.erase( it ); continue; } it->truncate( indexOfFirstToDrop ); ++it; } return groupsLines; } /** @brief Create groups in target system as needed * * Given a list of groups that already exist, @p availableGroups, * go through the @p wantedGroups and create each of them. Groups that * fail, or which should have already been there, are added to * @p missingGroups by name. */ static bool ensureGroupsExistInTarget( const QList< GroupDescription >& wantedGroups, const QStringList& availableGroups, QStringList& missingGroups ) { int failureCount = 0; for ( const auto& group : wantedGroups ) { if ( group.isValid() && !availableGroups.contains( group.name() ) ) { if ( group.mustAlreadyExist() ) { // Should have been there already: don't create it missingGroups.append( group.name() ); continue; } QStringList cmd; #ifdef __FreeBSD__ if ( group.isSystemGroup() ) { cWarning() << "Ignoring must-be-a-system group for" << group.name() << "on FreeBSD"; } cmd = QStringList { "pw", "groupadd", "-n", group.name() }; #else cmd << QStringLiteral( "groupadd" ); if ( group.isSystemGroup() ) { cmd << "--system"; } cmd << group.name(); #endif if ( CalamaresUtils::System::instance()->targetEnvCall( cmd ) ) { failureCount++; missingGroups.append( group.name() + QChar( '*' ) ); } } } if ( !missingGroups.isEmpty() ) { cWarning() << "Missing groups in target system (* for groupadd failure):" << Logger::DebugList( missingGroups ); } return failureCount == 0; } SetupGroupsJob::SetupGroupsJob( const Config* config ) : m_config( config ) { } QString SetupGroupsJob::prettyName() const { return tr( "Preparing groups." ); } Calamares::JobResult SetupGroupsJob::exec() { const auto& defaultGroups = m_config->defaultGroups(); QStringList availableGroups = groupsInTargetSystem(); QStringList missingGroups; if ( !ensureGroupsExistInTarget( defaultGroups, availableGroups, missingGroups ) ) { return Calamares::JobResult::error( tr( "Could not create groups in target system" ) ); } if ( !missingGroups.isEmpty() ) { return Calamares::JobResult::error( tr( "Could not create groups in target system" ), tr( "These groups are missing in the target system: %1" ).arg( missingGroups.join( ',' ) ) ); } if ( m_config->doAutoLogin() && !m_config->autoLoginGroup().isEmpty() ) { const QString autoLoginGroup = m_config->autoLoginGroup(); (void)ensureGroupsExistInTarget( QList< GroupDescription >() << GroupDescription( autoLoginGroup ), availableGroups, missingGroups ); } return Calamares::JobResult::ok(); } calamares-calamares-2d126ae/src/modules/users/MiscJobs.h000066400000000000000000000021141430147706700232670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ /**@file Various small jobs * * This file collects miscellaneous jobs that need to be run to prepare * the system for the user-creation job. */ #ifndef USERS_MISCJOBS_H #define USERS_MISCJOBS_H #include "Config.h" #include "Job.h" class SetupSudoJob : public Calamares::Job { Q_OBJECT public: SetupSudoJob( const QString& group, Config::SudoStyle style ); QString prettyName() const override; Calamares::JobResult exec() override; public: QString m_sudoGroup; Config::SudoStyle m_sudoStyle; }; class SetupGroupsJob : public Calamares::Job { Q_OBJECT public: SetupGroupsJob( const Config* config ); QString prettyName() const override; Calamares::JobResult exec() override; public: const Config* m_config; }; #endif calamares-calamares-2d126ae/src/modules/users/SetHostNameJob.cpp000066400000000000000000000112671430147706700247470ustar00rootroot00000000000000/* === 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 Config* c ) : Calamares::Job() , m_config( c ) { } QString SetHostNameJob::prettyName() const { return tr( "Set hostname %1" ).arg( m_config->hostname() ); } QString SetHostNameJob::prettyDescription() const { return tr( "Set hostname %1." ).arg( m_config->hostname() ); } QString SetHostNameJob::prettyStatusMessage() const { return tr( "Setting hostname %1." ).arg( m_config->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 const QString standard_hosts = QStringLiteral( R"(# Standard host addresses 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters )" ); const QString this_host = QStringLiteral( R"(# This host address 127.0.1.1 %1 )" ); const QString etc_hosts = standard_hosts + ( hostname.isEmpty() ? QString() : this_host.arg( hostname ) ); return CalamaresUtils::System::instance()->createTargetFile( QStringLiteral( "/etc/hosts" ), etc_hosts.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" ) ); } switch ( m_config->hostnameAction() ) { case HostNameAction::None: break; case HostNameAction::EtcHostname: if ( !setFileHostname( m_config->hostname() ) ) { cError() << "Can't write to hostname file"; return Calamares::JobResult::error( tr( "Cannot write hostname to target system" ) ); } break; case HostNameAction::SystemdHostname: // Does its own logging setSystemdHostname( m_config->hostname() ); break; case HostNameAction::Transient: CalamaresUtils::System::instance()->removeTargetFile( QStringLiteral( "/etc/hostname" ) ); break; } if ( m_config->writeEtcHosts() ) { if ( !writeFileEtcHosts( m_config->hostname() ) ) { cError() << "Can't write to hosts file"; return Calamares::JobResult::error( tr( "Cannot write hostname to target system" ) ); } } return Calamares::JobResult::ok(); } calamares-calamares-2d126ae/src/modules/users/SetHostNameJob.h000066400000000000000000000015141430147706700244060ustar00rootroot00000000000000/* === 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 Config* c ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: const Config* m_config; }; #endif // SETHOSTNAMEJOB_CPP_H calamares-calamares-2d126ae/src/modules/users/SetPasswordJob.cpp000066400000000000000000000061241430147706700250270ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/users/SetPasswordJob.h000066400000000000000000000014561430147706700244770ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/users/TestGroupInformation.cpp000066400000000000000000000114231430147706700262560ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/users/TestPasswordJob.cpp000066400000000000000000000022221430147706700252060ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/users/TestSetHostNameJob.cpp000066400000000000000000000112401430147706700255760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "SetHostNameJob.h" // Implementation details extern bool setFileHostname( const QString& ); extern bool writeFileEtcHosts( const QString& ); extern bool setSystemdHostname( const QString& ); #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include class UsersTests : public QObject { Q_OBJECT public: UsersTests(); ~UsersTests() override {} private Q_SLOTS: void initTestCase(); void testEtcHostname(); void testEtcHosts(); void testHostnamed(); void cleanup(); private: QTemporaryDir m_dir; QString m_originalHostName; }; UsersTests::UsersTests() : m_dir( QStringLiteral( "/tmp/calamares-usertest" ) ) { } void UsersTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "Users test started."; cDebug() << "Test dir" << m_dir.path(); // Ensure we have a system object, expect it to be a "bogus" one CalamaresUtils::System* system = CalamaresUtils::System::instance(); QVERIFY( system ); QVERIFY( system->doChroot() ); // Ensure we have a system-wide GlobalStorage with /tmp as root if ( !Calamares::JobQueue::instance() ) { cDebug() << "Creating new JobQueue"; (void)new Calamares::JobQueue(); } Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; QVERIFY( gs ); gs->insert( "rootMountPoint", m_dir.path() ); if ( m_originalHostName.isEmpty() ) { QFile hostname( QStringLiteral( "/etc/hostname" ) ); if ( hostname.exists() && hostname.open( QIODevice::ReadOnly | QIODevice::Text ) ) { m_originalHostName = hostname.readAll().trimmed(); } } } void UsersTests::testEtcHostname() { cDebug() << "Test dir" << m_dir.path(); QVERIFY( QFile::exists( m_dir.path() ) ); QVERIFY( !QFile::exists( m_dir.filePath( "etc" ) ) ); const QString testHostname = QStringLiteral( "tubophone.calamares.io" ); // Doesn't create intermediate directories QVERIFY( !setFileHostname( testHostname ) ); QVERIFY( CalamaresUtils::System::instance()->createTargetDirs( "/etc" ) ); QVERIFY( QFile::exists( m_dir.filePath( "etc" ) ) ); // Does write the file QVERIFY( setFileHostname( testHostname ) ); QVERIFY( QFile::exists( m_dir.filePath( "etc/hostname" ) ) ); // 22 for the test string, above, and 1 for the newline QCOMPARE( QFileInfo( m_dir.filePath( "etc/hostname" ) ).size(), testHostname.length() + 1 ); } void UsersTests::testEtcHosts() { // Assume previous tests did their work QVERIFY( QFile::exists( m_dir.path() ) ); QVERIFY( QFile::exists( m_dir.filePath( "etc" ) ) ); const QString testHostname = QStringLiteral( "tubophone.calamares.io" ); QVERIFY( writeFileEtcHosts( testHostname ) ); QVERIFY( QFile::exists( m_dir.filePath( "etc/hosts" ) ) ); // The skeleton contains %1 which has the hostname substituted in, so we lose two, // and the rest of the blabla is 145 (the "standard" part) and 34 (the "for this host" part) QCOMPARE( QFileInfo( m_dir.filePath( "etc/hosts" ) ).size(), 145 + 34 + testHostname.length() - 2 ); } void UsersTests::testHostnamed() { // Since the service might not be running (e.g. non-systemd systems, // FreeBSD, docker, ..) we're not going to fail a test here. // There's also the permissions problem to think of. But if we're // root, assume it will succeed. if ( geteuid() != 0 ) { QEXPECT_FAIL( "", "Hostname changes are access-controlled", Continue ); } QVERIFY( setSystemdHostname( QStringLiteral( "tubophone.calamares.io" ) ) ); if ( !m_originalHostName.isEmpty() ) { // If the previous test succeeded (to change the hostname to something bogus) // then this one should, also; or, if the previous one failed, then this // changes to whatever-the-hostname-is, and systemd dbus seems to call that // a success, as well (since nothing changes). So no failure-expectation here. setSystemdHostname( m_originalHostName ); } } void UsersTests::cleanup() { if ( QTest::currentTestFailed() ) { m_dir.setAutoRemove( false ); } } QTEST_GUILESS_MAIN( UsersTests ) #include "utils/moc-warnings.h" #include "TestSetHostNameJob.moc" calamares-calamares-2d126ae/src/modules/users/Tests.cpp000066400000000000000000000424561430147706700232300ustar00rootroot00000000000000/* === 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 HostNameAction getHostNameAction( const QVariantMap& configurationMap ); extern bool addPasswordCheck( const QString& key, const QVariant& value, PasswordCheckList& passwordChecks ); extern QString makeHostnameSuggestion( const QString& templateString, const QStringList& fullNameParts, const QString& loginName ); /** @brief Test Config object methods and internals * */ class UserTests : public QObject { Q_OBJECT public: 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 testHostActions2(); void testHostSuggestions_data(); void testHostSuggestions(); void testPasswordChecks(); void testUserPassword(); void testAutoLogin_data(); void testAutoLogin(); void testUserYAML_data(); void testUserYAML(); }; 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 ); } // Test forbidden login names { QVERIFY( c.forbiddenLoginNames().contains( QStringLiteral( "root" ) ) ); QVERIFY( c.loginNameStatus().isEmpty() ); // it's ok now c.setLoginName( "root" ); QVERIFY( !c.loginNameStatus().isEmpty() ); // can't be root } } void UserTests::testDefaultGroups() { { QList< GroupDescription > groups; QVariantMap hweelGroup; QVERIFY( groups.isEmpty() ); hweelGroup.insert( "defaultGroups", QStringList { "hweel" } ); setConfigurationDefaultGroups( hweelGroup, groups ); QCOMPARE( groups.count(), 1 ); QVERIFY( groups.contains( GroupDescription( "hweel" ) ) ); } { QStringList desired { "wheel", "root", "operator" }; QList< GroupDescription > groups; QVariantMap threeGroup; QVERIFY( groups.isEmpty() ); threeGroup.insert( "defaultGroups", desired ); setConfigurationDefaultGroups( threeGroup, groups ); QCOMPARE( groups.count(), 3 ); QVERIFY( !groups.contains( GroupDescription( "hweel" ) ) ); for ( const auto& s : desired ) { QVERIFY( groups.contains( GroupDescription( s ) ) ); } } { QList< GroupDescription > groups; QVariantMap explicitEmpty; QVERIFY( groups.isEmpty() ); explicitEmpty.insert( "defaultGroups", QStringList() ); setConfigurationDefaultGroups( explicitEmpty, groups ); QCOMPARE( groups.count(), 0 ); } { QList< GroupDescription > groups; QVariantMap missing; QVERIFY( groups.isEmpty() ); setConfigurationDefaultGroups( missing, groups ); QCOMPARE( groups.count(), 6 ); // because of fallback! QVERIFY( groups.contains( GroupDescription( "lp", false, GroupDescription::SystemGroup {} ) ) ); } { QList< GroupDescription > groups; QVariantMap typeMismatch; QVERIFY( groups.isEmpty() ); typeMismatch.insert( "defaultGroups", 1 ); setConfigurationDefaultGroups( typeMismatch, groups ); QCOMPARE( groups.count(), 6 ); // because of fallback! QVERIFY( groups.contains( GroupDescription( "lp", false, GroupDescription::SystemGroup {} ) ) ); } } void UserTests::testDefaultGroupsYAML_data() { QTest::addColumn< QString >( "filename" ); QTest::addColumn< int >( "count" ); QTest::addColumn< QString >( "group" ); QTest::newRow( "users.conf" ) << "users.conf" << 7 << "video"; QTest::newRow( "dashed list" ) << "tests/4-audio.conf" << 4 << "audio"; QTest::newRow( "blocked list" ) << "tests/3-wing.conf" << 3 << "wing"; QTest::newRow( "issue 1523" ) << "tests/5-issue-1523.conf" << 4 << "foobar"; } void UserTests::testDefaultGroupsYAML() { if ( !Calamares::JobQueue::instance() ) { (void)new Calamares::JobQueue(); } QFETCH( QString, filename ); QFETCH( int, count ); QFETCH( QString, group ); // BUILD_AS_TEST is the source-directory path QFile fi( QString( "%1/%2" ).arg( BUILD_AS_TEST, filename ) ); QVERIFY( fi.exists() ); bool ok = false; const auto map = CalamaresUtils::loadYaml( fi, &ok ); QVERIFY( ok ); QVERIFY( map.count() > 0 ); Config c; c.setConfigurationMap( map ); QCOMPARE( c.defaultGroups().count(), count ); QVERIFY( c.defaultGroups().contains( group ) ); } void UserTests::testHostActions_data() { QTest::addColumn< bool >( "set" ); QTest::addColumn< QString >( "string" ); QTest::addColumn< int >( "result" ); QTest::newRow( "unset " ) << false << QString() << int( HostNameAction::EtcHostname ); QTest::newRow( "empty " ) << true << QString() << int( HostNameAction::EtcHostname ); QTest::newRow( "bad " ) << true << QString( "derp" ) << int( HostNameAction::EtcHostname ); QTest::newRow( "none " ) << true << QString( "none" ) << int( HostNameAction::None ); QTest::newRow( "systemd" ) << true << QString( "Hostnamed" ) << int( HostNameAction::SystemdHostname ); QTest::newRow( "etc(1) " ) << true << QString( "etcfile" ) << int( HostNameAction::EtcHostname ); QTest::newRow( "etc(2) " ) << true << QString( "etc" ) << int( HostNameAction::EtcHostname ); QTest::newRow( "etc-bad" ) << true << QString( "etchost" ) << int( HostNameAction::EtcHostname ); // This isn't a valid name, but defaults to EtcHostname QTest::newRow( "ci-sysd" ) << true << QString( "hOsTnaMed" ) << int( HostNameAction::SystemdHostname ); // Case-insensitive QTest::newRow( "trbs " ) << true << QString( "transient" ) << int( HostNameAction::Transient ); QTest::newRow( "ci-trns" ) << true << QString( "trANSient" ) << int( HostNameAction::Transient ); } void UserTests::testHostActions() { QFETCH( bool, set ); QFETCH( QString, string ); QFETCH( int, result ); QVariantMap m; if ( set ) { m.insert( "location", string ); } // action is independent of writeHostsFile QCOMPARE( getHostNameAction( m ), HostNameAction( result ) ); m.insert( "writeHostsFile", false ); QCOMPARE( getHostNameAction( m ), HostNameAction( result ) ); m.insert( "writeHostsFile", true ); QCOMPARE( getHostNameAction( m ), HostNameAction( result ) ); } void UserTests::testHostActions2() { Config c; QVariantMap legacy; // Test defaults c.setConfigurationMap( legacy ); QCOMPARE( c.hostnameAction(), HostNameAction::EtcHostname ); QCOMPARE( c.writeEtcHosts(), true ); legacy.insert( "writeHostsFile", false ); legacy.insert( "setHostname", "Hostnamed" ); c.setConfigurationMap( legacy ); QCOMPARE( c.hostnameAction(), HostNameAction::SystemdHostname ); QCOMPARE( c.writeEtcHosts(), false ); } void UserTests::testHostSuggestions_data() { QTest::addColumn< QString >( "templateString" ); QTest::addColumn< QString >( "result" ); QTest::newRow( "unset " ) << QString() << QString(); QTest::newRow( "const " ) << QStringLiteral( "derp" ) << QStringLiteral( "derp" ); QTest::newRow( "escaped" ) << QStringLiteral( "$$" ) << QString(); // Because invalid QTest::newRow( "default" ) << QStringLiteral( "${first}-pc" ) << QStringLiteral( "chuck-pc" ); // Avoid ${product} because it's DMI-based QTest::newRow( "full " ) << QStringLiteral( "${name}" ) << QStringLiteral( "chuckyeager" ); QTest::newRow( "login+ " ) << QStringLiteral( "${login}-${first}" ) << QStringLiteral( "bill-chuck" ); // This is a bit dodgy: assumes CPU architecture of the testing host QTest::newRow( " cpu " ) << QStringLiteral( "${cpu}X" ) << QStringLiteral( "x8664X" ); // Assume we don't test on non-amd64 // These have X X in the template to indicate that they are bogus. Mostly we want // to see what the template engine does for these. QTest::newRow( "@prod " ) << QStringLiteral( "X${product}X" ) << QString(); QTest::newRow( "@prod2 " ) << QStringLiteral( "X${product2}X" ) << QString(); QTest::newRow( "@host " ) << QStringLiteral( "X${host}X" ) << QString(); } void UserTests::testHostSuggestions() { const QStringList fullName { "Chuck", "Yeager" }; const QString login { "bill" }; QFETCH( QString, templateString ); QFETCH( QString, result ); if ( templateString.startsWith( 'X' ) && templateString.endsWith( 'X' ) ) { QEXPECT_FAIL( "", "Test is too host-specific", Continue ); cWarning() << Logger::SubEntry << "Next test" << templateString << "->" << makeHostnameSuggestion( templateString, fullName, login ); } QCOMPARE( makeHostnameSuggestion( templateString, fullName, login ), result ); } void UserTests::testPasswordChecks() { { PasswordCheckList l; QCOMPARE( l.length(), 0 ); QVERIFY( !addPasswordCheck( "nonempty", QVariant( false ), l ) ); // a silly setting QCOMPARE( l.length(), 0 ); QVERIFY( addPasswordCheck( "nonempty", QVariant( true ), l ) ); QCOMPARE( l.length(), 1 ); } } void UserTests::testUserPassword() { if ( !Calamares::JobQueue::instance() ) { (void)new Calamares::JobQueue( nullptr ); } { Config c; QVERIFY( c.userPassword().isEmpty() ); QVERIFY( c.userPasswordSecondary().isEmpty() ); // There are no validity checks, so no check for nonempty QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); c.setUserPassword( "bogus" ); QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Invalid ); QCOMPARE( c.userPassword(), "bogus" ); c.setUserPasswordSecondary( "bogus" ); QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); } { Config c; QVariantMap m; m.insert( "allowWeakPasswords", true ); m.insert( "allowWeakPasswordsDefault", true ); m.insert( "defaultGroups", QStringList { "wheel" } ); QVariantMap pwreq; pwreq.insert( "nonempty", true ); pwreq.insert( "minLength", 6 ); m.insert( "passwordRequirements", pwreq ); c.setConfigurationMap( m ); QVERIFY( c.userPassword().isEmpty() ); QVERIFY( c.userPasswordSecondary().isEmpty() ); // There is now a nonempty check, but weak passwords are ok QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Weak ) ); c.setUserPassword( "bogus" ); QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Invalid ) ); c.setUserPasswordSecondary( "bogus" ); QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Weak ) ); QVERIFY( !c.requireStrongPasswords() ); c.setRequireStrongPasswords( true ); QVERIFY( c.requireStrongPasswords() ); // Now changed requirements make the password invalid QCOMPARE( c.userPassword(), "bogus" ); QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Invalid ) ); } { Config c; QVERIFY( c.userPassword().isEmpty() ); QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); QSignalSpy spy_pwChanged( &c, &Config::userPasswordChanged ); QSignalSpy spy_pwSecondaryChanged( &c, &Config::userPasswordSecondaryChanged ); QSignalSpy spy_pwStatusChanged( &c, &Config::userPasswordStatusChanged ); c.setUserPassword( "bogus" ); c.setUserPassword( "bogus" ); QCOMPARE( spy_pwChanged.count(), 1 ); QCOMPARE( spy_pwStatusChanged.count(), 1 ); QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Invalid ); c.setUserPassword( "sugob" ); c.setUserPasswordSecondary( "sugob" ); QCOMPARE( spy_pwChanged.count(), 2 ); QCOMPARE( spy_pwSecondaryChanged.count(), 1 ); QCOMPARE( spy_pwStatusChanged.count(), 3 ); QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); } } void UserTests::testAutoLogin_data() { QTest::addColumn< QString >( "filename" ); QTest::addColumn< bool >( "autoLoginIsSet" ); QTest::addColumn< QString >( "autoLoginGroupName" ); QTest::newRow( "old, old" ) << "tests/6a-issue-1672.conf" << true << "derp"; QTest::newRow( "old, new" ) << "tests/6b-issue-1672.conf" << true << "derp"; QTest::newRow( "new, old" ) << "tests/6c-issue-1672.conf" << true << "derp"; QTest::newRow( "new, new" ) << "tests/6d-issue-1672.conf" << true << "derp"; QTest::newRow( "default" ) << "tests/6e-issue-1672.conf" << false << QString(); } void UserTests::testAutoLogin() { QFETCH( QString, filename ); QFETCH( bool, autoLoginIsSet ); QFETCH( QString, autoLoginGroupName ); // BUILD_AS_TEST is the source-directory path QFile fi( QString( "%1/%2" ).arg( BUILD_AS_TEST, filename ) ); QVERIFY( fi.exists() ); bool ok = false; const auto map = CalamaresUtils::loadYaml( fi, &ok ); QVERIFY( ok ); QVERIFY( map.count() > 0 ); Config c; c.setConfigurationMap( map ); QCOMPARE( c.doAutoLogin(), autoLoginIsSet ); QCOMPARE( c.autoLoginGroup(), autoLoginGroupName ); } void UserTests::testUserYAML_data() { QTest::addColumn< QString >( "filename" ); QTest::addColumn< QString >( "shell" ); QTest::newRow( "old, unset " ) << "tests/7ao-shell.conf" << "/bin/bash"; QTest::newRow( "old, empty " ) << "tests/7bo-shell.conf" << ""; QTest::newRow( "old, relative" ) << "tests/7co-shell.conf" << "/bin/ls"; // Setting is ignored QTest::newRow( "old, invalid " ) << "tests/7do-shell.conf" << ""; QTest::newRow( "old, absolute" ) << "tests/7eo-shell.conf" << "/usr/bin/dash"; QTest::newRow( "new, unset " ) << "tests/7an-shell.conf" << "/bin/bash"; QTest::newRow( "new, empty " ) << "tests/7bn-shell.conf" << ""; QTest::newRow( "new, relative" ) << "tests/7cn-shell.conf" << "/bin/ls"; // Setting is ignored QTest::newRow( "new, invalid " ) << "tests/7dn-shell.conf" << ""; QTest::newRow( "new, absolute" ) << "tests/7en-shell.conf" << "/usr/bin/dash"; } void UserTests::testUserYAML() { Config c; c.setUserShell( QStringLiteral( "/bin/ls" ) ); QFETCH( QString, filename ); QFETCH( QString, shell ); // BUILD_AS_TEST is the source-directory path QFile fi( QString( "%1/%2" ).arg( BUILD_AS_TEST, filename ) ); QVERIFY( fi.exists() ); bool ok = false; const auto map = CalamaresUtils::loadYaml( fi, &ok ); QVERIFY( ok ); QVERIFY( map.count() > 0 ); QCOMPARE( c.userShell(), QStringLiteral( "/bin/ls" ) ); c.setConfigurationMap( map ); QCOMPARE( c.userShell(), shell ); } QTEST_GUILESS_MAIN( UserTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-calamares-2d126ae/src/modules/users/UsersPage.cpp000066400000000000000000000255311430147706700240170ustar00rootroot00000000000000/* === 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 ); // If the hostname is going to be written out, then show the field if ( ( m_config->hostnameAction() == HostNameAction::EtcHostname ) || ( m_config->hostnameAction() == HostNameAction::SystemdHostname ) ) { ui->textBoxHostname->setText( config->hostname() ); connect( ui->textBoxHostname, &QLineEdit::textEdited, config, &Config::setHostName ); connect( config, &Config::hostnameChanged, [ this ]( const QString& name ) { if ( !ui->textBoxHostname->hasFocus() ) { ui->textBoxHostname->setText( name ); } } ); connect( config, &Config::hostnameStatusChanged, this, &UsersPage::reportHostNameStatus ); } else { // Need to hide the hostname parts individually because there's no widget-group ui->hostnameLabel->hide(); ui->labelHostname->hide(); ui->textBoxHostname->hide(); ui->labelHostnameError->hide(); } ui->textBoxLoginName->setText( config->loginName() ); connect( ui->textBoxLoginName, &QLineEdit::textEdited, config, &Config::setLoginName ); connect( config, &Config::loginNameChanged, ui->textBoxLoginName, &QLineEdit::setText ); connect( config, &Config::loginNameStatusChanged, this, &UsersPage::reportLoginNameStatus ); ui->checkBoxDoAutoLogin->setChecked( m_config->doAutoLogin() ); connect( ui->checkBoxDoAutoLogin, &QCheckBox::stateChanged, this, [ this ]( int checked ) { m_config->setAutoLogin( checked != Qt::Unchecked ); } ); connect( config, &Config::autoLoginChanged, ui->checkBoxDoAutoLogin, &QCheckBox::setChecked ); ui->checkBoxReusePassword->setVisible( m_config->writeRootPassword() ); ui->checkBoxReusePassword->setChecked( m_config->reuseUserPasswordForRoot() ); if ( m_config->writeRootPassword() ) { connect( config, &Config::reuseUserPasswordForRootChanged, ui->checkBoxReusePassword, &QCheckBox::setChecked ); connect( ui->checkBoxReusePassword, &QCheckBox::stateChanged, this, &UsersPage::onReuseUserPasswordChanged ); } ui->checkBoxRequireStrongPassword->setVisible( m_config->permitWeakPasswords() ); ui->checkBoxRequireStrongPassword->setChecked( m_config->requireStrongPasswords() ); if ( m_config->permitWeakPasswords() ) { connect( ui->checkBoxRequireStrongPassword, &QCheckBox::stateChanged, this, [ this ]( int checked ) { m_config->setRequireStrongPasswords( checked != Qt::Unchecked ); } ); connect( config, &Config::requireStrongPasswordsChanged, ui->checkBoxRequireStrongPassword, &QCheckBox::setChecked ); } CALAMARES_RETRANSLATE_SLOT( &UsersPage::retranslate ); onReuseUserPasswordChanged( m_config->reuseUserPasswordForRoot() ); onFullNameTextEdited( m_config->fullName() ); reportLoginNameStatus( m_config->loginNameStatus() ); reportHostNameStatus( m_config->hostnameStatus() ); ui->textBoxLoginName->setEnabled( m_config->isEditable( "loginName" ) ); ui->textBoxFullName->setEnabled( m_config->isEditable( "fullName" ) ); retranslate(); } UsersPage::~UsersPage() { 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-calamares-2d126ae/src/modules/users/UsersPage.h000066400000000000000000000024301430147706700234550ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/users/UsersViewStep.cpp000066400000000000000000000037531430147706700247130ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/users/UsersViewStep.h000066400000000000000000000024151430147706700243520ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/users/images/000077500000000000000000000000001430147706700226545ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/users/images/invalid.png000066400000000000000000000172161430147706700250170ustar00rootroot00000000000000‰PNG  IHDRifÈÔ¿ïbKGDÿÿÿ ½§“ pHYs  šœtIMEÝ !,ÝöØiTXtCommentCreated with GIMPd.eòIDATxÚíyp\Ç}ç¿ÝýΙÁ}’ ’ ÁC$%¢%+òîÊ:x(Ζ“H›òfïÊŽ7ÒF–@ʛıUN–¶+Ž\+Ù+‘Z™IÉ’Ê*§tX”(/Ëñ®’ÍF”xƒ ž Ìàšã]}ì3B0Ž`ˆ¢ºªk€©7ýºûó~¿þõ¯Ýø4}š>MŸ¦k"‘OJCml,ö4M7•2ẩAx×Óë| i6!´´D„ë.1t­N§t¡Fh €fJÈìê † 8d2 94™LAù~Z*†kŸgõ•Jÿ†Ò44Ë1-PÆ@”‚rRH âr,Šã½Qu)™<èòà‰H¼þÀÙsÞ5é¿-[VCÿz±aþѲòòš–ºù(ol«®‚Àûú!ûbi0B„¤+J X]¥ ²Àˆe‚Z¨¦ƒðþP—z{q¤»]ñø¯]üð‘3¯>ûÆÆ¬Bz”@3—,¹'¢é±¢¼lùò†”-Z ZU î¸à—/Aö@>@èu5ÓIèwMµ­40¥ ¡;Å{]]ò|"ñs|ó¿¶µÿDBúNóâU6Óv4D"›×Õדy--ÐêæC¤øÎC R\3—I)€1PÛ³mP)á âô¥.º|¹¿ßu#®ûß9aðiGKË}å†þ½u55eÍK– ´t)„ðÏœèëƒR „²é«”¡ $dƒYh`0Å‘‹q¢¯ÿ`BŠû¿yªýØU é Vr]û~c¤è?ܼ°‰V¯¼¤²þù ð/^„(ýøÏ&•4,c "‘DG×Eüß®K=ƒÿÐ7Nµï›ÉÛÏØãû½æÅ« Ó|ᆪʻoZ¾‚”¯_Éœ#GÁ£½é‹®@YƒE H×…R„QŽ`že…‡ç ‹‹J~«¾þ×/wW ¤Kš§X7~úÙuËW­YƒÐu+áu÷Àm;™6 ®8c U@ú`[EÐQÁùMýƒƒkï*.ÙÿÖÀ@êciÇ’æ_a˜Ï~®±¡¬yí:èHµµ!8î“ãÍ•Êó (ƒ cžeASXrÉón¼½¢bÿÛ±Xâc é{Kšÿ°2Úù¯šZõëÖƒT”#ñþ}}éþ'))åûiõWAeÃPªéR2yóÍo, ¨‚AúÞÒ%_ª°íÿºi¡U·~=H$Œä¡÷!SÉ«Z½MÊŠPRF¨²mèBÔG“Éõw½^(ÕWHß]Òüù2Ëzös áºuëÓDâÐ!HÏýD9NsÛF•e‚ð ©ËóVßYSóó·z{ƒ9‡´£¥eE±n¼rËüù•k×¶øïCúþ5èŠDq(%ACaT›xà7÷$µ¿W_ÿ‹W/wË9ƒ´£yq…ÅØO7ÖÔ¬h¾þÐ’ÄézŸ¼1({‚s@)°PU†¤çßp1>”<Ð×÷¿ç Ò••]W^þ;«V®€Y·ñ£G   ¸æò0(z(ŒrÆÐë8·|¦¤ôÈ;±XÛ¬CúnKËÕ…ìoo\¼˜–,mAòôiøýé‰ßµHhD–t–e¡Ð.Æãn*.þÙÁþþø¬AúëE‹ZJ ã¥ÏÖÕ…k¯[§§ÎÅ®ôB[f¥ôZÏÒ÷AL]áAy¯ëÔßÒ×÷ÊÁ)ÄUä éÑ–#¤iϬ­(_³xÅ (MC¼³3=xr­ Ñ•¬¤`vÅ”¡/•ZîŸ8ë;6ã6UVÞS }ㆅM×7`¨ý„çÍýòÂÇÒâP”À°,„•"]‰äšÏ„ì—%g ÒŽæÅ–®?scMuuí²åpz{áÆ¢×¤%—«WBrbšk|߯è28þ2Ÿb´¼.fÚŸ. ‡WÖΛ¥—.¥ë"ÅôÛ“u8Ïu¿º\ H$aDÂXXR‚³ÉäWÿzÑ¢çþ²³³­à’ôýÆÆ!Ãxêúêª¢Š¦&$º."H&¦­æ¥p=ÄR®‹@*JÁfY}úR"ázH¤RHù>¸T Œ¢:Br¢ë05 Ò÷C=A D£¿(8¤;jklŽDînnj1t ]¼LÓPp¤D2 V7%7n„ÝÒ?0ÔÝ Â´Y2D’B` ™„ÞÔ„’ÏÜ«i!\ÏÅP4 ¦i`Ó¬G:.PA³-˜R¢;‘\rkQÑß¿Ýß+˜º{´¥¥ÜdìË JK`–•bèÒ%H)Ó&÷“'%S)TüÖ­Xôõ¯Ã¬©IKV,†Ýoí‡ …blÆÂs€”J¥PsÇXøÀÐ+*ÒõëîFçc!ö¿BI(sšã® |0a!l‡ÐP)?ÊùøFÁ$iSEùØ¡?nYPfˆ_¾<½ p”n܈–¿ú+åW* ¡ìÆDcˆ?ÂôR}I!0ä8˜·y š[[¡•”\yz#”m܈Äé 9K×§=NI© Û縔J5Þ:¯vï;Ý=©iCzôÖ[5+å<¶¢´¤©¶¾Éþ~xÉä”U]Vÿ» XúÈ7jlúÍ'\×Q¶a¼žÄŽ¡ Z]M).O¥P»i3š[[AC¡ß¨5M˜ÕÕ¸¼?4B¦­ö$ç †ƒP 9Nñ€ë¾ ;:mu§ww_Wdè+ŠKBà f¬Ë©+!!$c0kkǽ†Ú6š[[A\zãu(ˆ­fùËá 7-A‹[[Am{ÜkÍÚZ(ÆÒuÎ@šzÃ%׃a¨ Ùä‚ã|À “ýlRE«+¹¹Ö´ìHqRñ8χ •šrVHÇnóøÄ®, ¡yÛ6ÔlÞ‚A×A’‹iÝW*…$tÔlÞ‚æmÛÀÆ XÐñxz3À4Û,•‚¤çBQ‚bÛF„±õ6/^:-Hhe›+mše#58”®¬TÓÊ €ò=t½òÊGc»Ç‘¨%­­˜¿y ®ƒP2m-åz¿ìõ©ŒÍß¼K&‘ Ì ‚®W^ò=°´[Êôä–sÓ0QeY¥6¥ÿfZcÒ盚ZÊlëÏ—•Yv8‚¡htÚ–Öpü5¥ˆ?Å”­[7á|‹ê:Êo¼^o/b'ŽƒP–×<*kî'<ó¶lEK)ѹó)œ{ñEغ}ºªnØ ¡  `&|ÏÅeÏ÷ߊF_š2¤;jj¶Î7­{*+¡nôts¶Ñ½‡B líÄ ˆ®£|ÃøÑhÉi®HúæoÙŠ¥­­9úp÷nØš›²ÂÎͤ‚ašA€nÇ mŒDöœ bBHwUVÞß­­©ªB2ž€ï¹ gei™¸ïž÷Þ8Gy®ÕÓ‹èñ tr‹Ë• ÏÇü-[Ѳ}{N€:žzÏ> [Ó`PflÓ- €BÔI…%ßx'Öw.oH;¯_£ )¿Ó‰T—–” >4‘Ù†RÈ”5R¢H. ¢QÄÚN‚²ñ]Hž’Hê¶lŲTœÊHPç³ÏÂÊš‰$¥Õ4h”"éz¬Ÿó÷ߎFÿ)o¼Çõ*(­± ‚sž—¶rHáçÿ&E):þç3PRbñŸ|mBÏ: …°lûv(¥pñµ× LÆ(P¾RHz>ê¶nŲíÛÁ&1TV‚žù ,]ƒ™éÌ™qŽ+p߇n‡b X?¥y•¢ÉÔµ ]ÓÀ.Ä••×H!º†ÓÏ> E)š¿òÕ‰AÙ6–oß‚ ¯½†¡ÃÈò,¸ûn,ß¶-7@;ŸÂéÝ»aéZº.jf÷Š\À`2JÈÊ—)ØïIˆ¼ÔÝ]•U·U›ÖjKJ ¤DÊq¦íPl€×2›Æzß{é1j2ÕW±qcÚ3qò$(¥RÇ‚-[°â‘GrƒN?õ$:vï†É¬ÌýfŒBS*ã˜eH2ݯ$ã]g@E^^¦`“é#`梙ÁUS ŠœÞ· ÀŠ˜zŒ¹”8ñã¥Q-óðÍEÊú@%Ùãv"yAúU}£¶ *3WP™åß¹:-‰AAgûÒ[S—O"QãA'ûöA§LÌ á1IJ°Ì„Y)eåIwR”Ø6É”uµÏe¢\€1Šö½{¡,ÿÚ×@ #7ò}œxêIœÞ»:% \Ì) aHYU«¨R4¯¥ŠDo/W„È[T(Lchß³]ïȹCºÞ9€ögŸÓ˜›ö‘óNB¼¼ íTàPŠ !‡Õ‘Ôç*s ‰†»ïFõÍ7ç ©úæ›Ñp÷ÝàB‚klÎÛ‘Í„H•ŽùPJ¥òµî”$d0ȬH邿2pQ2.ê7oÆêmÛ MæIér*)ÅêmÛ ”Âù7Þ€b Tˆ¹UwIÊfúò÷Ý)™™1I{æ(Þ[é8€†Í[°úá‡ó4ÜÐPk¶m¡çÞxÕ@>§˜Æ¸¾Jä I)Õ( Î(¥sfÙ)]' wmÂêÖÖ)nl8ŒÕ­­PJáÜ›¿€¦Ï!¨ŒËÍ—¾”Qª?H„œáJ F)”’f70_:!hØ´k¦ h´DœûÅ`ºâÏþ¹ƒ”RÀ Ôôž¼! ¥Ú])á CÓg2›/ )qôÉÿ‘öÝM²¥…BXÓÚ ¤Aú¬‚J¯JPBàèë‰E/å ‰ç\!žS72{*O:$¥hØ´×ç0)¥p|×N´g&»„1¬øÊW'\æÐB!\ßÚ:,QtA)%Á´ôÏ èœèxìq!±TòC)êö¹ˆ í¶€³04t(JÑpצœAJÛµí{ö€dêwê¹ç \wßW&t!i¡®øa 3FCf”`&<Îá§§8ïMìq'òº-DIKÄ4H@ðÞÓ€d Y ‡s’ S{ö€pž>ï‡sJ;z’sTå°pX½~=œh ”@ñ™m§T U%ÅHy>.'Sp€¼ÝÛÛ–7$¸½ººÞ"äv;³ýà ‚3ÉiKÐ ­­“ÊHЩ={€  ‘žî+ T­];1(Ã@õ† pzz0ÐÑÂXúì×JÓPYA,™@¯ëõùRî8‹õM Ry9QÀ—ÂLc–®Ã ‚™¤ih¼knÈE‚¤Äñ§w¡mï>@|ÐHP` }GåJ×Q“•¨;A(PJ)„L%¡º0Äù{Mím½<ÿzâÖúC„‹{BŒ•‡3:´ÐŽVjYPš††;ïÂÚUÜÑ];Ó€x™‰½óÚ Eìè1 :‰ªÙ°©ž^ ~Ø™–(^Øy”PUT ¡$º“I$„Üs_oô)Ipàr·wGUÕ*ƒ`]H×Bà°ÒÔ¶ÆÐp×&¬}è¡IA©´ŠÛ÷¼l3ÕøoK7PdZèM$â"A•|)§a!—‹°7.ä@Ò Q mºA씂ê¬Ìfæ‰yzÚö=øÓôP¶}ÏãÈÓ»&eUWƒèTÆÉØÙ~¼`”àS>àJ˜W\ŒTà£Ïq(õZ2ñ¿ríúœCnÞŠFÏÝVQ±R#ä:2ºgŠæ¸’ ñ à  zõj°LP ÷¼´ŠËŽA©‚³}e €ô?\µTK»3ƒD‡~ücœyóMp×M?LSð¶(¥`ëWV¢=CŸç ¡ÔŸ=ØÑq"gE>÷#Œ}?%ä&Ý÷JÊB!˜š—ù/«î¹£èxõU tt dÑ"PÆ0xö ¢‡€Ï0 lÊJiÛK/#vò$J› …À`g'bǧϲ;L‚æªJÄœú]¾RoG,s^Ý•ïM°lÙ‹û³bÀmèèwœió3ÃÕµ4JÂsguýŠ™ˆ®}$JWŸú»­¤R¨)*Bsyþùâô{~Âîh=qâݼ|}ùÞXøþ÷“¦ùÛŒ Mƒ­éHþ”ƒT¸ç>ùyÑlÇSp×¼ÂÕCÐCsy>ìïC2à”zªõäÉwó-+ïõðí]BÊ?w„TC¾ËÐa0–Kšª!‘Ëw3 \!Zªª |\ŒÇ‘’ò¨ÏƒS’ò©üè³}±ãZUÕBJ°F) lð8¿:^Ú: IH…¦²2Ì+*Æ¡K]ˆÜ•À}ÛO:<%çT~ô-I„øz*àÿÏá.PlZñé]íGN ©P aiEŽöt§Õœ”?|èĉ7¦<^Nõ‡ûc1gSUÕQ¡ð»RIËbéÝÔç×,%!†Žõó磣¿çáH¹_Áy»¿ßŸuHðf4zá¶ŠŠ^¥ÔV¡$ ë:¥ðç8:t.RÚ7§aã‚zô$“8‹ÁQê$€ßomoï–å9Ýʽº½²Ò „Ü(‰°aP¤¼æÝ¼ ƒž‹#½½ð¤êR‚ñ¡¶SmÓ-¿ §IÜ\QñkÔ`] "†™Þk{ H”T vPÜ÷ð^w7ÜÖöbA½!…,ìÍžwkÈ~ç¬ 7úBÀÐ4„uÞâquÊx!–”—aUUNõÅÐÞ×_©~®Ô}­„™ÔB-[ö0%äotJM[cé’Ôn7)„z³5†ë««aë:>èéÅ€ëB(u8ü+­§ÚÿiFüŠ3Õ ýÑè»·WUUJ}V*”øJ"¢°4 ¾’W•ú“™]y Š‹pCM ’~€÷º»‘ð}pàï}]ûƒmÇOœœ©ûÏøxþÝæÅM¦nüØ t6 ˜ŒÁå~0ç;'„“Qo¥¦å••°CûÀºIxRºþ".åßjkóg²¤€¿¯,ù·+V„©RBÖ )a” Ø0A A"ðáüceffB†Ž¦âÌ ‡Ð•H¢spAzñ?r)¿ýp[Ûþ Ük*Çï ‰Œ¸žŒ‘Ç*Œx(ý¿\´h]©a|['d£”šCXÓB |8\ Ÿ2gj @Äб ¨Õ!CžÎÁ$ü\©>_ðÇÛ<ÿG?9{6 À§óÕHÞc¸øT>ÀH×Ì3V ÔXeû•€ùŸ.ü·%–õ NÈJ ÀÐ"º À<ë”üˆ*$3(1 €I)J- u‘†Ž×Ã…D ?€PÊs¥|³3ß±³«ëÒ‡‰Ñ ÀŒ!ÇÉ*Wé"yHPˆ–18´Ìÿl¨±`©Q{ÂáÊÏWUm-³¬/„¬ÖÆ(Bš“1H¥à GB¦÷F02 qü!¦ÆP¤é¨°-”fúà^'…¨ãÀá\Ê”«Ô;g‰çžºxñ]¤cJô1Ú3žôÈÌo$žù›UPHl=ó©€6$rUó+ýâ¼ÚÛ„#÷”®Ò1)!0…–^D“ð‡ŸÙRÏ…>3n²¤Q Qh”ÂfBº†"Ý€ÁÒg: øú]©€ƒK‰@Êh"~y,éåžÞÃ#àITFÈBÉæ`,1è(úˆ¬8ZÒ1ưÑ÷UJHè·KK–­(-û|©a|N§´AÏìÒÓ…N)L¦Á¤”Ña©È$¤žl2FÓï– é÷QÊÒŸ„€KG$ýàò´Û*2éHqüR*µÿÐÀà?þŸD"{º°>ÉXƒPFª31R0"óÒ¤fRÝi£ V£Õ ÇØ £êÀ¨ÆÊn-+[ÙßPjèk ¦Õ„”ÑÌr6%Í@ $}ì¡é—ce €¬ë&= •„@ 3'‘ð¤”\©Kާ{Rο´Åãürh¨€;â¡oð©ÎF«µÑª¨ Fƒb£TßhH£Çª‰€OeCèëlkþ’pdѼpxicõ–Æê(¡% (a„˜¥cÚƒ<­…R©!_Š˜ËÅ…Àï<ŸL¶ÿóPüÌe!úqåÀm9öð1T‘s4UœŒêüñ2às4°É$-Û°ìuú"]/m´¬ÊbÃÙŒ†)¡4ÌX1%D÷…Hø€ãs8‚;Ý®;xÒõbq¥â#:¸-•‹¤¨1€Œõ9^-=5ÁÇ3ÇGwòèÌÆ¢Ñ“1Ìx2µHF£LÆ0kG—9ÞœEQæh#`¤©q@ejË1î9+n¡‰&¶t’ÏñàŒþ“LšÉmQ9ÌaFwÜXOûXßËI>Ç+N}wd‚ÏÑL'€;ò2ާ9šÆ™ù«jpÂwÐO…3ÓV2Áÿd’ï²êˆäXr”¤É ìt2¨˹º¼à9Þ‡Àm…¤)ßkTÊžvúÿæ®Sãu °IEND®B`‚calamares-calamares-2d126ae/src/modules/users/images/invalid.png.license000066400000000000000000000001421430147706700264260ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/users/images/valid.png000066400000000000000000000161641430147706700244710ustar00rootroot00000000000000‰PNG  IHDRii9‚ :bKGDÿÿÿ ½§“ pHYs  šœtIMEÝ "#f‚¸ŠiTXtCommentCreated with GIMPd.eØIDATxÚíy´]U™à{ŸéÎoÊ<'@fPÀ* íXe×,MœèEµ]‚8UëêjKБ¥lÅ®ªÆ`( X®.™TÚBÁ @€ džó¦ûît†=ô÷%<^½áÞ——á…쬽îË]÷ìsÎþíoØßÞç;pºœ.§Ëérºœ.§ËéÒ`§Ê\s{ºP”‰WHA¹¨ªeE÷}šÚiHDZüõÿÊçLÀYÈd¦ïËùR¸‹¤gZa§K)dàË´8®ãx‰R‘ѨX™ÈZªX»K»Ñ*½)1ì6‰ÚqçUñVÀž†tT’A  ÙåŽÃù®ã¼1¸äóþ´LÊϵRä³™ EÚ\×CŽ”h£ÑÆb´BYM-Ž(Õj”J }¥Ð†QÜYì‹¶*cÇúqkÕ3ßùH´ý4¤ʪûp:JÙs=O®L§Ý·µ‚…“:r™Éí9&åÚȧ2N OxH\\L¿0X,ž,ýwg1h«1B‘舚Š)Õ*tKè,ÑÓ[=ØWŽžŽ"µÖ“æ±[¯wž†4¨\ýOÙÖ±ï ÿímÁy3§·ffO™DG¶•¬›'i°mŠe‰‰P6ÁX=ýLôßXýS‰+<¤pq„D B`­&¶!•¸Fg©{;9p°o¹¦ŒC{ŠK?»ó*’W5¤OÝÌS®{e6íxöÌ–¹ógMaZ~2m~> MdBj¦BlB´MŽHÎËߨ-F(Ä®ðpE€#$KBH±VbO/[·wÙC=åÇ’(¹ÞêÿýÖÕD¯*H×þCaªIÙOç²îGçÍiŸº`æ4fægRpZ±ʺŠî#6ý ÉßR—:Ù/iž p„ƒšjRaoO'›¶äPwåñ¨jn¹ýC}ëÇßÙ8®®¿·óÌì噌÷· æ¶/9sÖ ff‘­Ä&¦WuQ5et¿ '` I$¾ ðd€–ª®°¯§“¶ì7V£ä‹ßýhíùSÒÕw¥ÎvïkÓ§æ.Yvæ,± c.­n±‰èŠRÕåÃãú$°’ƒ/}|'a)Çe¶îÛÏÆ-{J¥puXÕ·ÝyUX¶îèy,ã«ïøpmĆôÙµî¤D§oš:5û‘s—Ε ÛÏ +ZèLÑtb¬>)á …K —”LáJIÍ„lÝ·Ÿç_Üw°\‰>ó­V~0!!]}WËÙA–;Ï\ÐqáòyóY]€6š]ÑNBSCžj­ùâ Ÿ@¦ÐB±¿¯“g6ìÖ]ݵ[Û î¿ôöîê„tõ]…Ks÷ÛË—NŸ¾|æ™L÷gÒwq Þ‡±f‚HÏð*ÐÁ!í¤ú¢>6lÝÍÖ—z~êJ÷Ãß|_wçIé“w>Thñî|Íò™©åSÑ&ÛÙí¢;éEŠS&ž‹@Ⱦt)ë ›vìeã¦ÎǢмÿÛ)íÏs9ãê ü óáÖ¶ôç=;uÎÔ%dž-Õ—èS}ˆSPÝÿ³$6ÁZH;)ZZÒ8¾×Û[]qî;ü{ê¸|ÒIÒµÿœ¹¢PÈ~ï¼sf§^;e ›Ë[ˆLŒ’SµX ôI9>¡ Ù¼k/¼xð1i÷Ž—êIºfMæ­…–Ô]¯={vöÜ©Kññy¡´™È&Úþ4Z”ÕhkI;)òùFêy‡ºËç¼áÒÔ¿^%'Ò5ÿ'½4SÖ-_6kÒyÓð|i3±Uõ f¿±=•+€Bc¬!-Sä >ÊÆgv÷FÓÎy[ôÓ§‚9a>±fRGk/™ºô¼Y ÉËJ[HÌ«Ð+@±šŒ“&W¨Åá¹Õ•õëâ_0H+Þ뮞» õÒsçžÉô`2/”¶긮â^M„RV#€´›&•s(öU_ö%Þ³ë×E;¤Oý0ÿÑöŽôu¯]4O.ÌÏeky7½I !ä«’ÏËœ‰Õ8H2~/#ܮξ?9ïb÷Gëœ”Ž¤k]”Jy÷.[6+ûÚIgp ÖÃÞ°!œW5 ÃÕ‰QøÂ'•ò0Ò´÷öF³/>'Z÷ØcÍ/u¸Ípý} ýuà›sæ··/ê˜I¢»«úÝQÍéR/¨¨*9/ÃÌimtuVVuYó#(ÝÛl[MO`ºã=«Ú;Ro_0}*ínŽÍ¥½$Ö`ú/ìt­W„&¡¦"r^š¹óÛ¥8_ùøw)ÇTÝ}â·Ãéur+3R-ì¨"6 )ÄÄØaxT‹Åh°Ö"¥@H1 &>z MD` ™ Sfä;vTõ'€OŽ;$‰weÇôÜôÙ-mD:áPXÆ"0§2!@ņj%"I4‰E“ |2yŸFC’(Ç-AšŽö‡2¥^ûƒì·~°²qÜ }ú½vÇ•WNjÏ39ȳ½Ü2GÈ£‹wœ´ÒS/qh(•j´g°|Î*Ò^ûKÏòâ¡(öTÉ·HG`íèíEVkM>•¢cz¶½²U øÂ¸9\ž[Ù69ý±E³¦“’.ÛË=ýÆñTýQhè+–™Y¸€·/ºù-oarf ó[ßÌäܶuýŠjX ܆zÂÆZ²®O" ½]Õ¹ç_’º{ýaõ¨!]ÿÿp“jjõŒ¹­óµOá`­D1®Ò]jJ¥2³ò+xûY·Pðg¼¢OZSóhËÌcÓ¡GÇ“Åö¬!å¸HWR ÃB¥ZûÃúuÉsGíÝõlÏ/÷Ó…CQ XéWm]Åõ«u@‹n!çO²_´¾…éùó £ckߨ& iéÓÚž®t¯›d}.)t¤Ó“Ó9zâµ$Æ9E=º$²”ûê€.9ërÞÔìŒCÚm'Ñ c·ÌµD‘õ|2ééŒûºOÜ›]xÇe•Mc†týõ¸EG^’ϧÈ{Ûûú°Öž’ÎB×ÍnYÁ;ÞJÎ90 mL1Ü”c²š„X%d|—\»ßZÛ•ü0vH=gdÎJ§Üå…t c,}qýð”r³#(—«Ì.\Ä;Þ2* €?ìÿ!{J¿'óë4Ø%¨¨„¼ï“ÎàTþ3ð£°IÎé‚×Ò¤¨$ ¡6˜~ÝzJT q¥R•Ùù¼sÑ·ÈûÓFt`-?ßv#®'žhú¼¡R |\Ï9ÿ³kÛ'Y’„'_ŸJûä=CÕj=Ô!N- ª”kÌ)¬à‹o%߈XËÃ[¾„t5~ÆkiV±ÄÚ %íyioF¥V[ü{Óþê{xRˆ R‡ ã¨îÅœ".ƒN R ™Ûº‚w-¾•¼?uÔc~à‡<¼ùz„§ñ3²)5÷ •g-a¢ðI:çx¥^yî˜ AaŽëË©ß#6†Hi¬µœ ŒtÕJÄœÂE\ºø–Æí_ËC›¯C¸ ?%ª/,PS ­A ×sq¥xݘl’pÅ<Çs:RŽK¢ ±6GV'rU T*³ +x÷ÒÛ²A¿ß¿–·\®ÆOK¬8ú눵A p} ËVÝ7|`aXI’–ùAÆ‘¾#©$ÚhäßähA­1§eï^Ò˜Šûݾµ<¸åï@jü ¾su<æ ±µcð‰ã‰)óœ fS„d¾t<)(ÅŠ‰®éšÛ²‚•Kok Ðþµ<¸ù:p4~šºÓ4N mݺ»B ¥h­ÖrS¡¯IH‚¹ÂxB& kä„õ쌄µ„9-ÿ‰÷,k\‚~ºù: ^Pç(ÕÖ`ŒÁ•鉬kÄä¦Õ•L–„€Hk¬Õ2Ò`´CTXÐöfÞ³ôfrþäQY¿÷û<¼ù«àÄx©þ÷8«c-Jk žïˆª4-MCˆGH´1(c¬ÙO8@µ„moæÝÚ³†‡¶|!c¿î.‹b-(cqG ¥éh Òªûp„!¶`ŒÅ˜ ”ˆH€=èM¬\ºšœ?iÔÃ~³g oþ*ÖQ8~}`Úc¤> m-®¨«+!d®)HÓ÷ã2)¬Åƒ6fBMb­r‰CU´ìæ†=´ùï±NŒë›c®9lÿà²?‹5©¦ ¹ Ò‚0X´©Obí ªZí‡ ÚÞÀÊe«É7h÷÷yhó X'Æñ4ÇãVë}jê»­¬e¤‡ˆ‡„TÉ¡r¶ì>ìÕõ…[Õ²>zHׂ4ã(‰ g´½‰•ËonК: !=Ãñ‹u.ý«Û°"j*âpçU(°ÊôOŽÄaÑkU:tñL “SKÉ»³Ð‘‹½ñ[óÖªЪe«É7à$üf÷Þ|VDHOsd2xœªý›XŒE]mÖ»³`‹Zë—S•uˆ –N¹˜7Ï¿šÖÔL"]åûÖñËí·¡cƒðT}$4{ŠÃÇ[æµ^ÄÊeß$LjÐW1"BxƒR°q|Ô'!6k-BÊîæ]pK§Öc,ŽèV5ëÞY;œ3í¼cñWðl=xëæyã¼ÿFÖkçß6}“„7iž’­ŸCÇ0¯å"V-¿…|ЀíZÃ#[nĈáêzCÇyh-øRRM*6hiz›ŸÌ ±×jK¬ žcÓÕÚ³ ø‹³¾pÐÀrþÌËA~ºñz´á$My‘ºèD0·õBV-_M!=’°~÷Ý<¼å¬ˆÁINXd_"p… Q•ØH+ÕÓ<$c·[c‰´Æ•õYw³‚d´aZvɈ‹içϸ °ütãWÐ pã†$J­s[.hÐÞ|#VÄX'æDÍÎÄì„%6 kLÑú`óêNˆÍ:ÒDÊq1Ý@Éì8R9Æå€àÁ_F+Fí@a=Œ’Ìk½€•ÍHÐæ1„XÉœRXð<#Qb@Óïk’1fg™r¤L.ç¹HÑü} )ÙÓ÷G:+/1){Æ( .kypÓߣµÀÈpx@Z2·åÂ~@£/y×mÐMh¢¨îÌ8uǺ¼fëêˆO=ìªê%Û0ö@¬4B€+ê g›Úm(4åh??yá‹ôEF—¨™—sñÂ/âFšGâ2ýUZ:û憭ß}7nù:†ˆ¬> vajò¾K5ÖeÂþndû5L¹sUXÄØ q¢0ÆâIyd—g£ÕX…• ;‹ëY÷Üg(†£§Ü9oæe¼­”0Á‘‰´´>FIæ´\ÀʳTq»ÖðèæQ6Äb¬iêúem ú"Ej,<5&Hýáôǵ2TMÚ›]2Ä vô¬çþ ÿ½A‰ºŒ·-ü;<‘EÚ4’ŒË¼Ö û.AOíº›G·ÜT$BN–-‡”çÐ%$¡é¶ÊUqÎûEŸ¯Ë@¶çjbPÆŒqÕm[±¶}¥Yб‚ÀÍxÌôü2R^ Æ.]v…Ô´}eª(jp’-Uc™Ûš&Ò†ýŪ¦×ü×£ŸY’î\­µ¿PJMÖ“õ{ã(Ò6ÆŠ„=Orÿ³Óú“Yïç}¯¹ƒ–=½ç~Ö/AŠÚqÅ5R=GÒ‘ñ8T‰ˆk:±ˆGFŸøŽF^‰ÇUmJQÝ.ísIÊF³£÷IØðyú¢ƒ£Î¶<'Ý {yxÓ $¦Š²ÕúR'YkiK{H)è©Æ˜ÄnhÍ˧ŽRµ>žDf[-J¸kŽÎµÑ&ı£ç îös IÔHå·{ÖòȦHt•ÄTú×iìIW±ÌÌ*ÇDaÆþk#y[G…tçUaÑbïÑJQ …@n…ê3ÆFìì}’žû<}áÁ1zz÷=<ºñkĺBbÊ'¥Š;ì0ä|‡¶¬ÃÞbHTÕe eGih·£òî°bzûj ®”øŽ—Á¥L„¶;{Ÿàþçþ¦i‰úíî{xdó$¦JbÊý«'¥a¬eN[†¾ÐP¬Æ`xìæ+zŸ7H·\Öó‚Ñö'Jk*±&¸ãYQ&BÙˆ=Oòãç¾Ð°D=½ç^Ýt#±.ëòI½¼o-¤=É̶Û»ªÄ5¥­wÕØÌ³á}ÃÒˆÿWUX|<§!pªÖ!ÚÖØÑó놼¾ßG7}D—HT餵A/Û"ÃJaLW9B'ößUgþö}ù…žøQ¸ó¢•Á2é²Ü‘iORÇob¬®'¥°¿oó;V¸Ù!lн<ºùFbÕ/A'ù.&c!¸,Ÿ•ã»Ëô•"µ×Þú±ƒ/4¾öÔÔŠ¯sS\ÓÅR¨ð¤$íÉ—·ßŽCÕ:B™;{~ÍýÏ|ŽmÝO¢L @¢C~³ãûu§Êĺôò‚ÝI\……×Ìʳ¯ÓS 1‰}¤\œ÷PsK>M–O¯m¹%w¯Íø¹”Ë¡R2ÎöÀâʮ̸y¦–Ó–žCWeûJÏè*±ê›ûµ±ÌîHqöÌ¿x±›R).k¥ÿâ–÷õ=ÑL;M'%L„ºIVy§€ù)_ Ūaå0Zš{º¶ì«’ƒQ<‰×}óý=0•± ~7®Ä€ß‹!êPí‰Q|åÙó Þu®ËÅŽ+eÊäÒõÕ’J¨¨E¥ëGo^‡Ÿò)Éœ©S[ŠeÅ–ý!¥P¡Û­bó­½OUï¸ï6Õ ¤†é|;°YþcŠð¦2‰&~#úGÌPu(PCµ{“>üåì» íî§\O,sIàÔÕ tµØP­)"õr>Ÿc%aGV=¬%åIÚr.³&§È¥$=eÅÎΈ¾Pa”’ªyp÷ÆÚ×ÖÝ< øCHÐp)ïl£Ò%š Ã@Üþp’Ûÿg¨¡`ÙAG‹_/&]¸2ó—-“+¼@žãºOJ2©úú”±–0¶Ô"E’X”ye«b ’2ðs¤|A>ã2¹Å§%ë`å`1á`1®ï{W¦ªjægû6ªïßwCí êï¯ò†¸Ÿá¤ç𻿠 úÿVƒ@+$g¯ÿÓm HU“æÑúÖ+Ó>y¾ÿ>?%Îv]H!¤ “rð= ýÉ’¢Ø+ÒuwXiÛŸö•'˜rFðëíâ»õ< ½•„î²¢j”±¨ÈtÖJæç[[»÷‘ï©gÀ£¨68 åpMÀÒÇ’ÅPÝ«@9„ cˆ>M¤'2oø€»øŒsý·æ&¹or}1Ç÷ë¯Bõ‰çJR¾ÀwëÏšÖó.ˆ#öK÷g³\G …ÀsA‰#-RH¤¨/ÈUCC52T"]w£™JT1ÏÚ¥Úô«ðÉ?>bvö_Ÿ7Š­a”êL€” ¨j€4Ùc©îÜA«ÀÁjPãlˆA× [˜IÛŸ¾Ý[6c¡wn®Ý}M’³€6Ç©ç“\)p¥@JH\„8²þx‰¥¾|P±mI´E[[_N 1Êî +vK÷^õô¶?Ä|ú_õV 0è†3þÕÙ`µ6Xµ©a+¤Á œAªo0¤Á¶j$`ÃÁ³ý7#oÑäŒyg» &Íqf Îì -fJO´)Z¤´ï 1”w¡”Ek«­¦l4}*¶]QEï.u™­{¶&›7<®··Û^N%âŽc$0mBÕ ~/cÃÞX\p1¨ó‡«r„ÏÁÀF“´Ã7vøwÞ”%¢uÞb1)“w2~Fd…ƒÌdÇzqHYE¶–D"‰+ºÖ¹W·o°]µƒ”t*¼¼[ªI±Cês¤fš!Tå¸OfÅ’5œkî !EƒÿC¸ñboQ r<ßðP/ÛÜæps;D›ƒ€d‡5”«m†8çq 4±•£|gð÷Œ2i#Ü‹m`3¸ã†íC}oFù®ý»#|î`9Ü¿ÃD:hÐH fæo¨Á‘^(fFÍx€9ÖV1ÂÿÅ(ßVG¢ÁvhP’Fƒ6°ÓÅ`lgbEÁ<‡° HS³¿±ãÐö„4Q®ã„@­ü…å©°gSâIEND®B`‚calamares-calamares-2d126ae/src/modules/users/images/valid.png.license000066400000000000000000000001421430147706700260770ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/users/page_usersetup.ui000066400000000000000000000423111430147706700250020ustar00rootroot00000000000000 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-calamares-2d126ae/src/modules/users/tests/000077500000000000000000000000001430147706700225515ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/users/tests/3-wing.conf000066400000000000000000000001541430147706700245240ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- defaultGroups: [ wing, wheel, users ] calamares-calamares-2d126ae/src/modules/users/tests/4-audio.conf000066400000000000000000000002021430147706700246540ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- defaultGroups: - users - lp - wheel - audio calamares-calamares-2d126ae/src/modules/users/tests/5-issue-1523.conf000066400000000000000000000003761430147706700253100ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/users/tests/6a-issue-1672.conf000066400000000000000000000001631430147706700254510ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- autologinGroup: derp doAutologin: true calamares-calamares-2d126ae/src/modules/users/tests/6b-issue-1672.conf000066400000000000000000000001631430147706700254520ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- autologinGroup: derp doAutoLogin: true calamares-calamares-2d126ae/src/modules/users/tests/6c-issue-1672.conf000066400000000000000000000001631430147706700254530ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- autoLoginGroup: derp doAutologin: true calamares-calamares-2d126ae/src/modules/users/tests/6d-issue-1672.conf000066400000000000000000000001631430147706700254540ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- autoLoginGroup: derp doAutoLogin: true calamares-calamares-2d126ae/src/modules/users/tests/6e-issue-1672.conf000066400000000000000000000001571430147706700254600ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- doautologin: true autologingroup: wheel calamares-calamares-2d126ae/src/modules/users/tests/7an-shell.conf000066400000000000000000000002401430147706700252060ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Unset (bogus needed to keep it valid YAML) user: # shell: /usr/bin/dash bogus: true calamares-calamares-2d126ae/src/modules/users/tests/7ao-shell.conf000066400000000000000000000002321430147706700252100ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Unset (bogus needed to keep it valid YAML) # userShell: /usr/bin/dash bogus: true calamares-calamares-2d126ae/src/modules/users/tests/7bn-shell.conf000066400000000000000000000001541430147706700252130ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Explicitly empty user: shell: "" calamares-calamares-2d126ae/src/modules/users/tests/7bo-shell.conf000066400000000000000000000001501430147706700252100ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Explicitly empty userShell: "" calamares-calamares-2d126ae/src/modules/users/tests/7cn-shell.conf000066400000000000000000000001721430147706700252140ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Non-absolute path is ignored user: shell: dash calamares-calamares-2d126ae/src/modules/users/tests/7co-shell.conf000066400000000000000000000001661430147706700252200ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Non-absolute path is ignored userShell: dash calamares-calamares-2d126ae/src/modules/users/tests/7dn-shell.conf000066400000000000000000000002261430147706700252150ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Invalid setting (should be string), won't pass validation user: shell: [1] calamares-calamares-2d126ae/src/modules/users/tests/7do-shell.conf000066400000000000000000000002221430147706700252120ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Invalid setting (should be string), won't pass validation userShell: [1] calamares-calamares-2d126ae/src/modules/users/tests/7en-shell.conf000066400000000000000000000002041430147706700252120ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Explicitly set with full path user: shell: /usr/bin/dash calamares-calamares-2d126ae/src/modules/users/tests/7eo-shell.conf000066400000000000000000000002001430147706700252070ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Explicitly set with full path userShell: /usr/bin/dash calamares-calamares-2d126ae/src/modules/users/tests/7fb-shell.conf000066400000000000000000000002511430147706700252010ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Explicitly set with full path user: shell: /usr/bin/new bogus: true userShell: /usr/bin/old calamares-calamares-2d126ae/src/modules/users/tests/7fn-shell.conf000066400000000000000000000002531430147706700252170ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Explicitly set with full path user: shell: /usr/bin/new bogus: true # userShell: /usr/bin/old calamares-calamares-2d126ae/src/modules/users/tests/7fo-shell.conf000066400000000000000000000002531430147706700252200ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- # Explicitly set with full path user: # shell: /usr/bin/new bogus: true userShell: /usr/bin/old calamares-calamares-2d126ae/src/modules/users/users.conf000066400000000000000000000221211430147706700234150ustar00rootroot00000000000000# 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 # If set to `false` (the default), writes a sudoers file with `(ALL)` # so that the command can be run as any user. If set to `true`, writes # `(ALL:ALL)` so that any user and any group can be chosen. sudoersConfigureWithGroup: false # Setting this to false, causes the root account to be disabled. # When disabled, hides the "Use the same password for administrator" # 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 # User settings # # The user can enter a username, but there are some other # hidden settings for the user which are configurable in Calamares. # # Key *user* has the following sub-keys: # # - *shell* Shell to be used for the regular user of the target system. # There are three possible kinds of settings: # - unset (i.e. commented out, the default), act as if set to /bin/bash # - empty (explicit), don't pass shell information to useradd at all # and rely on a correct configuration file in /etc/default/useradd # - set, non-empty, use that path as shell. No validation is done # that the shell actually exists or is executable. # - *forbidden_names* Login names that may not be used. This list always # contains "root" and "nobody", but may be extended to list other special # names for a given distro (eg. "video", or "mysql" might not be a valid # end-user login name). user: shell: /bin/bash forbidden_names: [ root ] # TODO:3.3: Remove this setting # # This is the legacy setting for user.shell userShell: /bin/bash # Hostname settings # # The user can enter a hostname; this is configured into the system # in some way. There are settings for how a hostname is guessed (as # a default / suggestion) and where (or how) the hostname is set in # the target system. # # Key *hostname* has the following sub-keys: # # - *location* How the hostname is set in the target system: # - *None*, to not set the hostname at all # - *EtcFile*, to write to `/etc/hostname` directly # - *Etc*, identical to above # - *Hostnamed*, to use systemd hostnamed(1) over DBus # - *Transient*, to remove `/etc/hostname` from the target # The default is *EtcFile*. Setting this to *None* or *Transient* will # hide the hostname field. # - *writeHostsFile* Should /etc/hosts be written with a hostname for # this machine (also adds localhost and some ipv6 standard entries). # Defaults to *true*. # - *template* Is a simple template for making a suggestion for the # hostname, based on user data. The default is "${first}-${product}". # This is used only if the hostname field is shown. KMacroExpander is # used; write `${key}` where `key` is one of the following: # - *first* User's first name (whatever is first in the User Name field, # which is first-in-order but not necessarily a "first name" as in # "given name" or "name by which you call someone"; beware of western bias) # - *name* All the text in the User Name field. # - *login* The login name (which may be suggested based on User Name) # - *product* The hardware product, based on DMI data # - *product2* The product as described by Qt # - *cpu* CPU name # - *host* Current hostname (which may be a transient hostname) # Literal text in the template is preserved. Calamares tries to map # `${key}` values to something that will fit in a hostname, but does not # apply the same to literal text in the template. Do not use invalid # characters in the literal text, or no suggeston will be done. # - *forbidden_names* lists hostnames that may not be used. This list # always contains "localhost", but may list others that are unsuitable # or broken in special ways. hostname: location: EtcFile writeHostsFile: true template: "derp-${cpu}" forbidden_names: [ localhost ] # TODO:3.3: Remove this setting # # This is a legacy setting for hostname.location; if it is set # at all, and there is no setting for hostname.location, it is used. setHostname: EtcFile # TODO:3.3: Remove this setting # # This is a legacy setting for hostname.writeHostsFile writeHostsFile: true presets: fullName: # value: "OEM User" editable: true loginName: # value: "oem" editable: true calamares-calamares-2d126ae/src/modules/users/users.qrc000066400000000000000000000002071430147706700232560ustar00rootroot00000000000000 images/invalid.png images/valid.png calamares-calamares-2d126ae/src/modules/users/users.schema.yaml000066400000000000000000000055001430147706700246730ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/users additionalProperties: false type: object properties: # User shell, should be path to /bin/sh or so userShell: { type: string } user: additionalProperties: false type: object properties: shell: { type: string } # Overrides userShell forbidden_names: { type: array, items: { type: string } } # Group settings defaultGroups: type: array items: oneOf: - type: string - type: object properties: name: { type: string } must_exist: { type: boolean, default: false } system: { type: boolean, default: false } additionalProperties: false required: [ name ] autologinGroup: { type: string } sudoersGroup: { type: string } sudoersConfigureWithGroup: { type: boolean, default: false } # Skip login (depends on displaymanager support) doAutologin: { type: boolean, default: true } # Root password separate from user password? setRootPassword: { type: boolean, default: true } doReusePassword: { type: boolean, default: true } # Passwords that don't pass a quality test allowWeakPasswords: { type: boolean, default: false } allowWeakPasswordsDefault: { type: boolean, default: false } passwordRequirements: additionalProperties: false type: object properties: nonempty: { type: boolean, default: true } minLength: { type: number } maxLength: { type: number } libpwquality: { type: array, items: { type: string } } # Don't know what libpwquality supports hostname: additionalProperties: false type: object properties: location: { type: string, enum: [ None, EtcFile, Hostnamed, Transient ] } writeHostsFile: { type: boolean, default: true } template: { type: string, default: "${first}-${product}" } forbidden_names: { type: array, items: { type: string } } # Legacy Hostname setting setHostname: { type: string, enum: [ None, EtcFile, Hostnamed ] } writeHostsFile: { type: boolean, default: true } # Presets # # TODO: lift up somewhere, since this will return in many modules; # the type for each field (fullName, loginName) is a # preset-description (value, editable). presets: type: object additionalProperties: false properties: fullName: { type: object } loginName: { type: object } required: - defaultGroups - autologinGroup - sudoersGroup calamares-calamares-2d126ae/src/modules/usersq/000077500000000000000000000000001430147706700215705ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/usersq/CMakeLists.txt000066400000000000000000000027041430147706700243330ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/usersq/UsersQmlViewStep.cpp000066400000000000000000000033541430147706700255430ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/usersq/UsersQmlViewStep.h000066400000000000000000000024611430147706700252060ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/usersq/usersq.conf000066400000000000000000000014241430147706700237620ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/usersq/usersq.qml000066400000000000000000000375771430147706700236500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 - 2022 Anke Boersma * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ import io.calamares.core 1.0 import io.calamares.ui 1.0 import QtQuick 2.15 import QtQuick.Controls 2.10 import QtQuick.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami import QtGraphicalEffects 1.0 import QtQuick.Window 2.3 Kirigami.ScrollablePage { // You can hard-code a color here, or bind to a Kirigami theme color, // or use a color from Calamares branding, or .. readonly property color unfilledFieldColor: "#FBFBFB" //Kirigami.Theme.backgroundColor readonly property color positiveFieldColor: "#F0FFF0" //Kirigami.Theme.positiveBackgroundColor readonly property color negativeFieldColor: "#EBCED1" //Kirigami.Theme.negativeBackgroundColor readonly property color unfilledFieldOutlineColor: "#F1F1F1" readonly property color positiveFieldOutlineColor: "#DCFFDC" readonly property color negativeFieldOutlineColor: "#BE5F68" readonly property color headerTextColor: "#1F1F1F" readonly property color commentsColor: "#6D6D6D" width: parent.width height: parent.height header: Kirigami.Heading { Layout.fillWidth: true height: 50 horizontalAlignment: Qt.AlignHCenter color: headerTextColor font.weight: Font.Medium font.pointSize: 12 text: qsTr("Pick your user name and credentials to login and perform admin tasks") } ColumnLayout { id: _formLayout spacing: Kirigami.Units.smallSpacing Column { Layout.fillWidth: true spacing: Kirigami.Units.smallSpacing Label { width: parent.width text: qsTr("What is your name?") } TextField { id: _userNameField width: parent.width enabled: config.isEditable("fullName") placeholderText: qsTr("Your Full Name") text: config.fullName onTextChanged: config.setFullName(text) palette.base: _userNameField.text.length ? positiveFieldColor : unfilledFieldColor palette.highlight : _userNameField.text.length ? positiveFieldOutlineColor : unfilledFieldOutlineColor } } Column { Layout.fillWidth: true spacing: Kirigami.Units.smallSpacing Label { width: parent.width text: qsTr("What name do you want to use to log in?") } TextField { id: _userLoginField width: parent.width enabled: config.isEditable("loginName") placeholderText: qsTr("Login Name") text: config.loginName validator: RegularExpressionValidator { regularExpression: /[a-z_][a-z0-9_-]*[$]?$/ } onTextChanged: acceptableInput ? ( _userLoginField.text === "root" ? forbiddenMessage.visible=true : ( config.setLoginName(text), userMessage.visible = false,forbiddenMessage.visible=false ) ) : ( userMessage.visible = true,console.log("Invalid") ) palette.base: _userLoginField.text.length ? ( acceptableInput ? ( _userLoginField.text === "root" ? negativeFieldColor : positiveFieldColor ) : negativeFieldColor ) : unfilledFieldColor palette.highlight : _userLoginField.text.length ? ( acceptableInput ? ( _userLoginField.text === "root" ? negativeFieldOutlineColor : positiveFieldOutlineColor ) : negativeFieldOutlineColor ) : unfilledFieldOutlineColor } Label { width: parent.width text: qsTr("If more than one person will use this computer, you can create multiple accounts after installation.") font.weight: Font.Thin font.pointSize: 8 color: commentsColor } } Kirigami.InlineMessage { id: userMessage Layout.fillWidth: true showCloseButton: true visible: false type: Kirigami.MessageType.Error text: qsTr("Only lowercase letters, numbers, underscore and hyphen are allowed.") } Kirigami.InlineMessage { id: forbiddenMessage Layout.fillWidth: true showCloseButton: true visible: false type: Kirigami.MessageType.Error text: qsTr("root is not allowed as username.") } Column { Layout.fillWidth: true spacing: Kirigami.Units.smallSpacing Label { width: parent.width text: qsTr("What is the name of this computer?") } TextField { id: _hostName width: parent.width placeholderText: qsTr("Computer Name") text: config.hostname validator: RegularExpressionValidator { regularExpression: /[a-zA-Z0-9][-a-zA-Z0-9_]+/ } onTextChanged: acceptableInput ? ( _hostName.text === "localhost" ? forbiddenHost.visible=true : ( config.setHostName(text), hostMessage.visible = false,forbiddenHost.visible = false ) ) : hostMessage.visible = true palette.base: _hostName.text.length ? ( acceptableInput ? ( _hostName.text === "localhost" ? negativeFieldColor : positiveFieldColor ) : negativeFieldColor) : unfilledFieldColor palette.highlight : _hostName.text.length ? ( acceptableInput ? ( _hostName.text === "localhost" ? negativeFieldOutlineColor : positiveFieldOutlineColor ) : negativeFieldOutlineColor) : unfilledFieldOutlineColor } Label { width: parent.width text: qsTr("This name will be used if you make the computer visible to others on a network.") font.weight: Font.Thin font.pointSize: 8 color: commentsColor } } Kirigami.InlineMessage { id: hostMessage Layout.fillWidth: true showCloseButton: true visible: false type: Kirigami.MessageType.Error text: qsTr("Only letters, numbers, underscore and hyphen are allowed, minimal of two characters.") } Kirigami.InlineMessage { id: forbiddenHost Layout.fillWidth: true showCloseButton: true visible: false type: Kirigami.MessageType.Error text: qsTr("localhost is not allowed as hostname.") } Column { Layout.fillWidth: true spacing: Kirigami.Units.smallSpacing Label { width: parent.width text: qsTr("Choose a password to keep your account safe.") } Row { width: parent.width spacing: 20 TextField { id: _passwordField width: parent.width / 2 - 10 placeholderText: qsTr("Password") text: config.userPassword onTextChanged: config.setUserPassword(text) palette.base: _passwordField.text.length ? positiveFieldColor : unfilledFieldColor palette.highlight : _passwordField.text.length ? positiveFieldOutlineColor : unfilledFieldOutlineColor echoMode: TextInput.Password passwordMaskDelay: 300 inputMethodHints: Qt.ImhNoAutoUppercase } TextField { id: _verificationPasswordField width: parent.width / 2 - 10 placeholderText: qsTr("Repeat Password") text: config.userPasswordSecondary onTextChanged: _passwordField.text === _verificationPasswordField.text ? ( config.setUserPasswordSecondary(text), passMessage.visible = false, validityMessage.visible = true ) : ( passMessage.visible = true, validityMessage.visible = false ) palette.base: _verificationPasswordField.text.length ? ( _passwordField.text === _verificationPasswordField.text ? positiveFieldColor : negativeFieldColor ) : unfilledFieldColor palette.highlight : _verificationPasswordField.text.length ? ( _passwordField.text === _verificationPasswordField.text ? positiveFieldOutlineColor : negativeFieldOutlineColor ) : unfilledFieldOutlineColor echoMode: TextInput.Password passwordMaskDelay: 300 inputMethodHints: Qt.ImhNoAutoUppercase } } Label { width: parent.width text: qsTr("Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.") font.weight: Font.Thin font.pointSize: 8 wrapMode: Text.WordWrap color: commentsColor } } Kirigami.InlineMessage { id: passMessage Layout.fillWidth: true showCloseButton: true visible: false type: Kirigami.MessageType.Error text: config.userPasswordMessage } Kirigami.InlineMessage { id: validityMessage Layout.fillWidth: true showCloseButton: true visible: false type: config.userPasswordValidity ? ( config.requireStrongPasswords ? Kirigami.MessageType.Error : Kirigami.MessageType.Warning ) : Kirigami.MessageType.Positive text: config.userPasswordMessage } CheckBox { id: root visible: config.writeRootPassword text: qsTr("Reuse user password as root password") checked: config.reuseUserPasswordForRoot onCheckedChanged: config.setReuseUserPasswordForRoot(checked) } Label { visible: root.checked width: parent.width text: qsTr("Use the same password for the administrator account.") font.weight: Font.Thin font.pointSize: 8 color: commentsColor } Column { visible: ! root.checked Layout.fillWidth: true spacing: Kirigami.Units.smallSpacing Label { width: parent.width text: qsTr("Choose a root password to keep your account safe.") } Row { width: parent.width spacing: 20 TextField { id: _rootPasswordField width: parent.width / 2 -10 placeholderText: qsTr("Root Password") text: config.rootPassword onTextChanged: config.setRootPassword(text) palette.base: _rootPasswordField.text.length ? positiveFieldColor : unfilledFieldColor palette.highlight : _rootPasswordField.text.length ? positiveFieldOutlineColor : unfilledFieldOutlineColor echoMode: TextInput.Password passwordMaskDelay: 300 inputMethodHints: Qt.ImhNoAutoUppercase } TextField { id: _verificationRootPasswordField width: parent.width / 2 -10 placeholderText: qsTr("Repeat Root Password") text: config.rootPasswordSecondary onTextChanged: _rootPasswordField.text === _verificationRootPasswordField.text ? ( config.setRootPasswordSecondary(text), rootPassMessage.visible = false,rootValidityMessage.visible = true ) : ( rootPassMessage.visible = true,rootValidityMessage.visible = false ) palette.base: _verificationRootPasswordField.text.length ? ( _rootPasswordField.text === _verificationRootPasswordField.text ? positiveFieldColor : negativeFieldColor) : unfilledFieldColor palette.highlight : _verificationRootPasswordField.text.length ? ( _rootPasswordField.text === _verificationRootPasswordField.text ? positiveFieldOutlineColor : negativeFieldOutlineColor) : unfilledFieldOutlineColor echoMode: TextInput.Password passwordMaskDelay: 300 inputMethodHints: Qt.ImhNoAutoUppercase } } Label { visible: ! root.checked width: parent.width text: qsTr("Enter the same password twice, so that it can be checked for typing errors.") font.weight: Font.Thin font.pointSize: 8 color: commentsColor } } Kirigami.InlineMessage { id: rootPassMessage Layout.fillWidth: true showCloseButton: true visible: false type: Kirigami.MessageType.Error text: config.rootPasswordMessage } Kirigami.InlineMessage { id: rootValidityMessage Layout.fillWidth: true showCloseButton: true visible: false type: config.rootPasswordValidity ? ( config.requireStrongPasswords ? Kirigami.MessageType.Error : Kirigami.MessageType.Warning ) : Kirigami.MessageType.Positive text: config.rootPasswordMessage } CheckBox { Layout.alignment: Qt.AlignCenter text: qsTr("Log in automatically without asking for the password") checked: config.doAutoLogin onCheckedChanged: config.setAutoLogin(checked) } CheckBox { visible: config.permitWeakPasswords Layout.alignment: Qt.AlignCenter text: qsTr("Validate passwords quality") checked: config.requireStrongPasswords onCheckedChanged: config.setRequireStrongPasswords(checked), rootPassMessage.visible = false } Label { visible: config.permitWeakPasswords width: parent.width Layout.alignment: Qt.AlignCenter text: qsTr("When this box is checked, password-strength checking is done and you will not be able to use a weak password.") font.weight: Font.Thin font.pointSize: 8 color: commentsColor } } } calamares-calamares-2d126ae/src/modules/usersq/usersq.qrc000066400000000000000000000001161430147706700236170ustar00rootroot00000000000000 usersq.qml calamares-calamares-2d126ae/src/modules/webview/000077500000000000000000000000001430147706700217165ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/webview/CMakeLists.txt000066400000000000000000000036231430147706700244620ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/webview/WebViewConfig.h.in000066400000000000000000000003611430147706700251720ustar00rootroot00000000000000/* 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-calamares-2d126ae/src/modules/webview/WebViewStep.cpp000066400000000000000000000045121430147706700246300ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/webview/WebViewStep.h000066400000000000000000000031061430147706700242730ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/webview/owncloud.conf000066400000000000000000000002001430147706700244070ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- prettyName: "OwnCloud" url: "https://owncloud.org" calamares-calamares-2d126ae/src/modules/webview/webview.conf000066400000000000000000000001771430147706700242420ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- prettyName: "Webview" url: "https://calamares.io" calamares-calamares-2d126ae/src/modules/welcome/000077500000000000000000000000001430147706700217015ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/welcome/CMakeLists.txt000066400000000000000000000023761430147706700244510ustar00rootroot00000000000000# === 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(PARTMAN_LIB ${LIBPARTED_LIBRARY}) else() set(PARTMAN_SRC) set(PARTMAN_LIB) add_definitions(-DWITHOUT_LIBPARTED) endif() calamares_add_plugin(welcome TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES checker/CheckerContainer.cpp checker/GeneralRequirements.cpp checker/ResultWidget.cpp checker/ResultsListWidget.cpp ${PARTMAN_SRC} WelcomeViewStep.cpp Config.cpp Config.h WelcomePage.cpp UI WelcomePage.ui RESOURCES welcome.qrc LINK_PRIVATE_LIBRARIES ${PARTMAN_LIB} Qt5::DBus Qt5::Network SHARED_LIB ) calamares_add_test( welcometest SOURCES checker/GeneralRequirements.cpp ${PARTMAN_SRC} Config.cpp Tests.cpp LIBRARIES ${PARTMAN_LIB} Qt5::DBus Qt5::Network Qt5::Widgets Calamares::calamaresui ) calamares-calamares-2d126ae/src/modules/welcome/Config.cpp000066400000000000000000000331511430147706700236150ustar00rootroot00000000000000/* === 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 "CalamaresAbout.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 >() ) , m_requirementsChecker( std::make_unique< GeneralRequirements >( this ) ) { 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() { const auto* branding = Calamares::Branding::instance(); const auto* settings = Calamares::Settings::instance(); m_genericWelcomeMessage = genericWelcomeMessage().arg( branding ? branding->versionedName() : QString() ); emit genericWelcomeMessageChanged( m_genericWelcomeMessage ); const auto* r = requirementsModel(); if ( r && !r->satisfiedRequirements() ) { QString message; const bool setup = settings ? settings->isSetupMode() : false; 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( branding ? branding->shortVersionedName() : QString() ); } else { m_warningMessage = tr( "This program will ask you some questions and " "set up %2 on your computer." ) .arg( branding ? branding->productName() : QString() ); } emit warningMessageChanged( m_warningMessage ); } CalamaresUtils::Locale::TranslationsModel* Config::languagesModel() const { return m_languages; } Calamares::RequirementsModel* Config::requirementsModel() const { auto* manager = Calamares::ModuleManager::instance(); return manager ? manager->requirementsModel() : nullptr; } QAbstractItemModel* Config::unsatisfiedRequirements() const { if ( !m_filtermodel->sourceModel() ) { m_filtermodel->setFilterRole( Calamares::RequirementsModel::Roles::Satisfied ); m_filtermodel->setFilterFixedString( QStringLiteral( "false" ) ); m_filtermodel->setSourceModel( requirementsModel() ); } return m_filtermodel.get(); } QString Config::languageIcon() const { return m_languageIcon; } void Config::initLanguages() { // Find the best initial translation CalamaresUtils::Locale::Translation defaultTranslation; cDebug() << "Trying to match locale" << defaultTranslation.id(); int matchedLocaleIndex = m_languages->find( defaultTranslation.id() ); // Need to match by some other means than the exact translation Id if ( matchedLocaleIndex < 0 ) { QLocale defaultLocale = defaultTranslation.locale(); cDebug() << "Trying to match locale" << defaultLocale; matchedLocaleIndex = m_languages->find( [ & ]( const QLocale& x ) { return x.language() == defaultLocale.language() && x.country() == defaultLocale.country(); } ); if ( matchedLocaleIndex < 0 ) { cDebug() << Logger::SubEntry << "Trying to match approximate locale" << defaultLocale.language(); matchedLocaleIndex = m_languages->find( [ & ]( const QLocale& x ) { return x.language() == defaultLocale.language(); } ); } if ( matchedLocaleIndex < 0 ) { QLocale en_us( QLocale::English, QLocale::UnitedStates ); cDebug() << Logger::SubEntry << "Trying to match English (US)"; matchedLocaleIndex = m_languages->find( en_us ); // Now, if it matched, because we didn't match the system locale, switch to the one found if ( matchedLocaleIndex >= 0 ) { QLocale::setDefault( m_languages->locale( matchedLocaleIndex ).locale() ); } } } if ( matchedLocaleIndex >= 0 ) { setLocaleIndex( matchedLocaleIndex ); } else { cWarning() << "No available translation matched" << defaultTranslation.id() << defaultTranslation.locale(); } } 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& selectedTranslation = m_languages->locale( m_localeIndex ); cDebug() << "Index" << index << "Selected locale" << selectedTranslation.id().name; QLocale::setDefault( selectedTranslation.locale() ); const auto* branding = Calamares::Branding::instance(); CalamaresUtils::installTranslator( selectedTranslation.id(), branding ? branding->translationsDirectory() : QString() ); if ( Calamares::JobQueue::instance() && Calamares::JobQueue::instance()->globalStorage() ) { CalamaresUtils::Locale::insertGS( *Calamares::JobQueue::instance()->globalStorage(), QStringLiteral( "LANG" ), CalamaresUtils::translatorLocaleName().name ); } emit localeIndexChanged( m_localeIndex ); } 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::aboutMessage() const { return Calamares::aboutString(); } QString Config::genericWelcomeMessage() const { QString message; const auto* settings = Calamares::Settings::instance(); const auto* branding = Calamares::Branding::instance(); const bool welcomeStyle = branding ? branding->welcomeStyleCalamares() : true; if ( settings ? settings->isSetupMode() : false ) { message = welcomeStyle ? tr( "

Welcome to the Calamares setup program for %1

" ) : tr( "

Welcome to %1 setup

" ); } else { message = welcomeStyle ? 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 ); 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."; } } calamares-calamares-2d126ae/src/modules/welcome/Config.h000066400000000000000000000121661430147706700232650ustar00rootroot00000000000000/* === 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 "checker/GeneralRequirements.h" #include "locale/TranslationsModel.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::TranslationsModel* languagesModel READ languagesModel CONSTANT FINAL ) /** @brief The requirements (from modules) and their checked-status * * The model grows rows over time as each module is checked and its * requirements are taken into account. The model **as a whole** * has properties *satisfiedRequirements* and *satisfiedMandatory* * to say if all of the requirements held in the model have been * satisfied. See the model documentation for details. */ Q_PROPERTY( Calamares::RequirementsModel* requirementsModel READ requirementsModel CONSTANT FINAL ) /** @brief The requirements (from modules) that are **unsatisfied** * * This is the same as requirementsModel(), except filtered so * that only those requirements that are not satisfied are exposed. * Note that the type is different, so you should still use the * requirementsModel() for overall status like *satisfiedMandatory*. */ Q_PROPERTY( QAbstractItemModel* unsatisfiedRequirements READ unsatisfiedRequirements CONSTANT FINAL ) Q_PROPERTY( QString languageIcon READ languageIcon CONSTANT FINAL ) Q_PROPERTY( QString countryCode MEMBER m_countryCode NOTIFY countryCodeChanged FINAL ) Q_PROPERTY( int localeIndex READ localeIndex WRITE setLocaleIndex NOTIFY localeIndexChanged ) Q_PROPERTY( QString aboutMessage READ aboutMessage CONSTANT FINAL ) 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 aboutMessage() const; QString genericWelcomeMessage() const; QString warningMessage() const; public slots: CalamaresUtils::Locale::TranslationsModel* languagesModel() const; void retranslate(); ///@brief The **global** requirements model, from ModuleManager Calamares::RequirementsModel* requirementsModel() const; QAbstractItemModel* unsatisfiedRequirements() const; /// @brief Check the general requirements Calamares::RequirementsList checkRequirements() const { return m_requirementsChecker->checkRequirements(); } signals: void countryCodeChanged( QString countryCode ); void localeIndexChanged( int localeIndex ); 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::TranslationsModel* m_languages = nullptr; std::unique_ptr< QSortFilterProxyModel > m_filtermodel; std::unique_ptr< GeneralRequirements > m_requirementsChecker; 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-calamares-2d126ae/src/modules/welcome/Tests.cpp000066400000000000000000000116101430147706700235060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Config.h" #include "Branding.h" #include "Settings.h" #include "network/Manager.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include class WelcomeTests : public QObject { Q_OBJECT public: WelcomeTests(); ~WelcomeTests() override {} private Q_SLOTS: void initTestCase(); void testOneUrl(); void testUrls_data(); void testUrls(); void testBadConfigDoesNotResetUrls(); }; WelcomeTests::WelcomeTests() {} void WelcomeTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "Welcome test started."; // Ensure we have a system object, expect it to be a "bogus" one CalamaresUtils::System* system = CalamaresUtils::System::instance(); QVERIFY( system ); cDebug() << Logger::SubEntry << "System @" << Logger::Pointer( system ); const auto* settings = Calamares::Settings::instance(); if ( !settings ) { (void)new Calamares::Settings( true ); } } void WelcomeTests::testOneUrl() { Config c; // BUILD_AS_TEST is the source-directory path QString filename = QStringLiteral( "1a-checkinternet.conf" ); QFile fi( QString( "%1/tests/%2" ).arg( BUILD_AS_TEST, filename ) ); QVERIFY( fi.exists() ); bool ok = false; const auto map = CalamaresUtils::loadYaml( fi, &ok ); QVERIFY( ok ); QVERIFY( map.count() > 0 ); QVERIFY( map.contains( "requirements" ) ); c.setConfigurationMap( map ); QCOMPARE( CalamaresUtils::Network::Manager::instance().getCheckInternetUrls().count(), 1 ); } void WelcomeTests::testUrls_data() { QTest::addColumn< QString >( "filename" ); QTest::addColumn< int >( "result" ); QTest::newRow( "one " ) << QString( "1a-checkinternet.conf" ) << 1; QTest::newRow( "none " ) << QString( "1b-checkinternet.conf" ) << 0; QTest::newRow( "blank" ) << QString( "1c-checkinternet.conf" ) << 1; QTest::newRow( "bogus" ) << QString( "1d-checkinternet.conf" ) << 1; QTest::newRow( "[] " ) << QString( "1e-checkinternet.conf" ) << 1; QTest::newRow( "-3 " ) << QString( "1f-checkinternet.conf" ) << 3; QTest::newRow( "[3] " ) << QString( "1g-checkinternet.conf" ) << 3; QTest::newRow( "some " ) << QString( "1h-checkinternet.conf" ) << 3; } void WelcomeTests::testUrls() { QFETCH( QString, filename ); QFETCH( int, result ); Config c; // BUILD_AS_TEST is the source-directory path QFile fi( QString( "%1/tests/%2" ).arg( BUILD_AS_TEST, filename ) ); QVERIFY( fi.exists() ); bool ok = false; const auto map = CalamaresUtils::loadYaml( fi, &ok ); QVERIFY( ok ); CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( QVector< QUrl > {} ); QCOMPARE( CalamaresUtils::Network::Manager::instance().getCheckInternetUrls().count(), 0 ); c.setConfigurationMap( map ); QCOMPARE( CalamaresUtils::Network::Manager::instance().getCheckInternetUrls().count(), result ); } void WelcomeTests::testBadConfigDoesNotResetUrls() { auto& nam = CalamaresUtils::Network::Manager::instance(); CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( QVector< QUrl > {} ); QCOMPARE( nam.getCheckInternetUrls().count(), 0 ); nam.setCheckHasInternetUrl( QVector< QUrl > { QUrl( "http://example.com" ), QUrl( "https://www.kde.org" ) } ); QCOMPARE( nam.getCheckInternetUrls().count(), 2 ); Config c; // This is slightly surprising: if there is **no** requirements // configuration, the list of check-URLs is left unchanged. { const QString filename = QStringLiteral( "1b-checkinternet.conf" ); // "none" // BUILD_AS_TEST is the source-directory path QFile fi( QString( "%1/tests/%2" ).arg( BUILD_AS_TEST, filename ) ); QVERIFY( fi.exists() ); bool ok = false; const auto map = CalamaresUtils::loadYaml( fi, &ok ); QVERIFY( ok ); c.setConfigurationMap( map ); } QCOMPARE( nam.getCheckInternetUrls().count(), 2 ); // But if the config contains a requirements entry, even if broken, // the list is changed (to the default). { const QString filename = QStringLiteral( "1d-checkinternet.conf" ); // "bogus" // BUILD_AS_TEST is the source-directory path QFile fi( QString( "%1/tests/%2" ).arg( BUILD_AS_TEST, filename ) ); QVERIFY( fi.exists() ); bool ok = false; const auto map = CalamaresUtils::loadYaml( fi, &ok ); QVERIFY( ok ); c.setConfigurationMap( map ); } QCOMPARE( nam.getCheckInternetUrls().count(), 1 ); } QTEST_GUILESS_MAIN( WelcomeTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-calamares-2d126ae/src/modules/welcome/WelcomePage.cpp000066400000000000000000000152121430147706700245760ustar00rootroot00000000000000/* === 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 "CalamaresAbout.h" #include "CalamaresVersion.h" #include "Config.h" #include "Settings.h" #include "ViewManager.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 ); // 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( 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 ) { cWarning() << "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 { cWarning() << "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() { const QString message = m_conf->genericWelcomeMessage(); ui->mainText->setText( message.arg( Calamares::Branding::instance()->versionedName() ) ); ui->retranslateUi( this ); ui->supportButton->setText( tr( "%1 support" ).arg( Calamares::Branding::instance()->shortProductName() ) ); } 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::TranslationsModel::EnglishLabelRole ).toString() ); } calamares-calamares-2d126ae/src/modules/welcome/WelcomePage.h000066400000000000000000000036721430147706700242520ustar00rootroot00000000000000/* === 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/TranslationsModel.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(); 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::TranslationsModel* 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-calamares-2d126ae/src/modules/welcome/WelcomePage.ui000066400000000000000000000147761430147706700244470ustar00rootroot00000000000000 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 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-calamares-2d126ae/src/modules/welcome/WelcomeViewStep.cpp000066400000000000000000000037751430147706700255030ustar00rootroot00000000000000/* === 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 "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 ) ) { 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 ); //here init the qml or qwidgets needed bits m_widget->init(); } Calamares::RequirementsList WelcomeViewStep::checkRequirements() { return m_conf->checkRequirements(); } calamares-calamares-2d126ae/src/modules/welcome/WelcomeViewStep.h000066400000000000000000000033221430147706700251340ustar00rootroot00000000000000/* === 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; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WelcomeViewStepFactory ) #endif // WELCOMEVIEWSTEP_H calamares-calamares-2d126ae/src/modules/welcome/checker/000077500000000000000000000000001430147706700233055ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/welcome/checker/CheckerContainer.cpp000066400000000000000000000052631430147706700272260ustar00rootroot00000000000000/* === 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 ); const bool satisfied = model.data( index, Calamares::RequirementsModel::Satisfied ).toBool(); const bool mandatory = model.data( index, Calamares::RequirementsModel::Mandatory ).toBool(); if ( !satisfied ) { cDebug() << Logger::SubEntry << i << model.data( index, Calamares::RequirementsModel::Name ).toString() << "not-satisfied" << "mandatory?" << mandatory; } } } layout()->removeWidget( m_waitingWidget ); m_waitingWidget->deleteLater(); m_waitingWidget = nullptr; // Don't delete in destructor m_checkerWidget = new ResultsListWidget( m_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-calamares-2d126ae/src/modules/welcome/checker/CheckerContainer.h000066400000000000000000000026061430147706700266710ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/welcome/checker/GeneralRequirements.cpp000066400000000000000000000355171430147706700300050ustar00rootroot00000000000000/* === 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; } /** @brief Loads the check-internet URLs * * There may be zero or one or more URLs specified; returns * @c true if the configuration is incomplete or damaged in some way. */ static bool getCheckInternetUrls( const QVariantMap& configurationMap ) { const QString exampleUrl = QStringLiteral( "http://example.com" ); bool incomplete = false; QStringList checkInternetSetting = CalamaresUtils::getStringList( configurationMap, "internetCheckUrl" ); if ( !checkInternetSetting.isEmpty() ) { QVector< QUrl > urls; for ( const auto& urlString : qAsConst( checkInternetSetting ) ) { QUrl url( urlString.trimmed() ); if ( url.isValid() ) { urls.append( url ); } else { cWarning() << "GeneralRequirements entry 'internetCheckUrl' in welcome.conf contains invalid" << urlString; } } if ( urls.empty() ) { cWarning() << "GeneralRequirements entry 'internetCheckUrl' contains no valid URLs, " << "reverting to default (" << exampleUrl << ")."; CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( QUrl( exampleUrl ) ); incomplete = true; } else { CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( urls ); } } else { cWarning() << "GeneralRequirements entry 'internetCheckUrl' is undefined in welcome.conf, " "reverting to default (" << exampleUrl << ")."; CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( QUrl( exampleUrl ) ); incomplete = true; } return incomplete; } void GeneralRequirements::setConfigurationMap( const QVariantMap& configurationMap ) { 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; } incompleteConfiguration |= getCheckInternetUrls( configurationMap ); 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-calamares-2d126ae/src/modules/welcome/checker/GeneralRequirements.h000066400000000000000000000021311430147706700274340ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/welcome/checker/ResultWidget.cpp000066400000000000000000000031351430147706700264350ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/welcome/checker/ResultWidget.h000066400000000000000000000021231430147706700260760ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/welcome/checker/ResultsListWidget.cpp000066400000000000000000000212131430147706700274510ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/welcome/checker/ResultsListWidget.h000066400000000000000000000016351430147706700271240ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/welcome/checker/partman_devices.c000066400000000000000000000061221430147706700266160ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/welcome/checker/partman_devices.h000066400000000000000000000007351430147706700266270ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/welcome/language-icon-128px.png000066400000000000000000000110321430147706700257750ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aË pHYs  ÒÝ~ütEXtCreation Time01/29/13?pÅtEXtSoftwareAdobe Fireworks CS5qµã6iTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmphíÛËŽ›0à}žÂr·ÛäV, ªºIUu"Íhvœ JÀÈx“Wë¢ÔW¨sm&ªº¨ÚÝï(Q0çœÏ>xK4éê4Û(K–j]T1ýñí;%EÓ‡áœÏë©z.>팺ß}^d»Mæt’ô¢Nve]*›’®ÜVìbšæz©¤û¿Ÿf”Bì&¦÷7Èãü ™j£ÈÐç^ÆGœŒ„/úƒñxüž\pÆ&OŒe?œ“Ó IÏýF&_ɯ³»ç®búlm-kÛÖoû¾6k&Â0Ü— ÏExÍkeÓΫšwÇ"ç:3Õd¦¨m¡+²¿N—úÅÆ”öÈÕ8í«¬/PÕø‡=ú™.Y—ÖLøœ]*ï‹»h95*µÚ,´Þ&ÇßFµÚl2½á²Ügða@Š*×m±Û¼ß•T3÷M\£ú^.‚@ö…ò§«ücÐMú\çÅêõ*=ôøháúÌG28§_[Ånzõ·=̳K ë³=<©ÀóYëYÊÞÏyöïÙ¿ï~Þ÷³A¡P( …B¡P( …B¡P( …B¡P(“Ñtq~ÌnVµÆšã]~L£k‰ÐD¯?¢ g–1¼…–ñ2 ¸ÛXs<ÊDà/´pºŸŸŸøûû7þýˆqæC£ƒ8¬†h—»üø]>M&“ÄÄÄÈo¼!çΓ!C†(Øfà „e  ŒÖ'i‘§èèhÙ°aƒœ>}Zô(ØuÀnà_€ž†XÚ6À?ÇÐJ±&Û£¢¢$==]N:%­¡à\¨þ üè}“›ŒÖj/¢…ÓÇ'¯¼òŠ”––¶êt% W —€Íx¯'ÑèôB´*ªÉ–Q£FÉË/¿,'Nœ‹Åâã•Ú/}ðTO"XŽÖiæôÈÈHY½zµ;vÌi§+h¸SúÐÞžÄ` p€N:t¨¬ZµJŽ9Ò.§+hxJÁ‚ã=‰[€…À út $+W®”¢¢"·9] @ÃÓÐ[=‰``ðŸÀu}üÈ’%KäàÁƒb6›Ýît_@€5€@àá¡­õþ; ´1BXX³fÍ"))‰iÓ¦áïïoŒ¥^¦«@O`zã<ðÏ=÷÷ß?Fö,¡Ë 44”#FPRRÀgŸ}ÆåË—IHH !!±cÇb2u¥ù)ãðZ 44TæÏŸ/»ví’k×®INNN«q###eÕªURXXèñúßÚFâQ´tºž¶ ááá²xñbÙ·oŸÔÕÕ)¸·  -§»"}èÓ§$''K~~¾ÔÖÖ*¸· Ñérýúu‡nº+Ї=zHbb¢|ðÁråÊ%qY®8ÝЇ   ‰—Í›7Ëùó畜À)´×鞀>øùùILLŒlذA~øá%;Ø@Ÿ>}dÁ‚nqº7Ð2Œ?^Ö®]+_ýu«ÃÈ]U}€]xÑéF@î¸ãyöÙg¥¨¨¨Y÷²+ ˜ÐbìÝN7Zú!‹/–ýû÷ËàÁƒ;µB€dàà-œž’’"»wïöŠÓ}I­„?Ý<ãïó8ð7|Èé@T9À\´‡§C2Ý:9_qº€>\C›Â^ˆöæP‡!´Á_rºž"}hžö€¯<7ؽ{w~øaO%ßÕðúz"a?O$ªè8(¸‰èèh‚‚‚Œ6Ãi”ÜÀðáÃ),,äâÅ‹ää䜜L¿~ýŒ6Ë!:„ªªªÈËËcÉ’%ÄÄÄðÖ[omR3ž~úiüüüèÝ»7³gÏfÛ¶mœ?ž¼¼<£M3„X@œnŸ>}ZŠ‹‹åܹsòå—_ÊÆ%..N›µŠGí3½€àà`¹pá‚ÍëX,‰ˆˆp×µV{ÂY>µ&000)S¦`6›ÛŒ7aÂ/YdŸÄÄDÂÂl¿v`2™˜1cÙÙÙ^¶Êq|ª 0`ÉÉÉmÆ™0a¯¿þº—,²Ï¢E‹Ú<ï%K|‡X\¬DDjkk%))ɪ —ôôô6—z?~\¾ùæ¯UcÆŒ±û¶Ð¥K—ÄÏÏÏg«OK; ¢ÕÅÅŲiÓ&Ù¶m›=zTlƽvíšdeeÉ=÷Ü#€lÚ´ÉnúîÀ›o¾éP~&Mš¤àn$;;[?Ÿ.€ìÚµËîoÝ!€=zÈ/¿üâ­kÖ¬ñYøTÀÊÊÊÈÌÌdìØ±¤¤¤PVVÖt.22Òkuîܹs ql®«µbqs P^^.7n”‰'¶ù”¼ûçŽàÈ‘#6Ó>~ü¸Õ±úúz ñÉÀÄâ\¸pA¶lÙ"qqqV¨ÐÐPyüñÇeòäÉMÇn¿ýv‡_Þh¯&NœØjãoúôéR^^nu|Ö¬YJma±X¤´´T6lØ Ó¦MÓïŸ' õRSSeÿþýRWW'ׯ_—Ûn»­éüÖ­[¾V{ÐÚµNž<)&“I²³³­Î½ýöÛJz~ûí7)))‘÷Þ{O–.]*#FŒh–က™Ü©W·Ú#€ÐÐP©©©±™îòåˤ¤$«s?þø£€žÜÜ\›íÕ«—äææJUUU«¿­««“áÇ7ýÆÑºßXºt©Í4kjj$44T¹å–[¤¾¾¾Ùy‹Å"#GŽTh¤ªªJî¼óN«ŒÆÆÆÚu`vvvSü‘#G:ýâf{ÐÚ@Ó;ï¼Ó,^aa¡UœeË–)詪ª’ŒŒ Y¶l™<ÿüó’ŸŸoõä´¤åÓ¿sçNǼ®ÃUL›6Ífz‹E¢¢¢šÅ}饗¬â(´—¬¬¬¦›òàƒº´q“«ؾ}»ÍôŠŠŠ¬âNš4É*^MM+¸Êõë×eèСH`` œ8qÂ¥t\@XXX«óÉÉÉVñýüüäâÅ‹Vqãââ|Jj$0++‹Ÿ~ú €´´4Fíµk?ùä“[¿té}ô‘Õq‹ÅÂÞ½{­Žw…QÁX>¾é)jkM€£TWW»´Wð¢E‹¤°°Ðê v¡î@²²²¬lËÌÌTГžž.€„„„ÈÉ“'þ½£8Ó ¼õÖ[%%%Eòóó¥²²²©tr6Ì™3ÇÊŽS§N)4òÅ_H@@€øûû·{¨×®N;Sô· }ûöµÙh¹®Ðyg+**HJJ¢¡¡ŒŒ Ÿ1³÷Òj[TVVrôèQ«ãFçÕp\½z•„„ÊËËIMM%55Õh“<†­éá3f`ÉM €Åb!%%…ââb{ì1222:õçZöíÛgu,66ÖЭe Àš5kرcS¦LaÇŽøÔvn§¨¨ˆ_ýµÙ±ž={cE ++‹W_}•{ï½—‚‚ºwïn”)^£¾¾ž¨¨(ÒÒÒøüóÏ©¯¯Œo¸›XìôrssÅßß_fϞݮ•=®â+EöéÓGæÍ›'/¾ø¢a½¯—¹"BDDßÿ=C† éÔu¾=®\¹ÂöíÛ µÁë0™LDGG{û²ŠV0¼èmD„òòr£Íð:w³û"BII 999|üñÇÍ6•èêtZØqz=Ú§â?îâèDkp†N%;No;€<àÒãz h_ïå=«;±¸8è ;Š=óÌ3VF¡9ý¿Å@íï<¼ \¤Ý<7‡Î=è f³¹-§›Ñžô%ÀÀvæÅ¸x8ƒ÷®à„Ó¿–Ê— ˜üøÝgq¼ºžÌf³IZZZ³ý€¸éôB`0È€|Ž^Žâ1t 8àô" lX­ ¬D«zPpNvœnŠg€Û Ë•ãôþø;->ÙÎй`6›¥°°PV®\iÏéC ËIû þø¨¡« @ïtÝ'S;›Ó[ã€ßÛ€JºŠì8]_§w„âÝ]ÓM@9Q½zõjËé‡ÐM]Éé­aîÖßÑYÐ"4Ã.Ø.[Gâ.àeàKšw/;ŒîDsx°ø0ÀP‹:.ÃC+1Ÿ÷Ä<µgÚ8ú¥ïkL2Ñ&˜*oü«ÿ%Ú U{î‡?Zõ©ðQþFëõwÐ1¾$©p™¡@-¶ðwãÌ긄à¡/f{ÕØÀ|#ê¨|\Cëõ4ØGˆò±vþU ·vuX ¸yËÑzÖ{µO/´n[57G4õÝ·®ùa7`¸y3Ï¢úÂ’­´"ÿ7í;ÄÕ›c”…àOÀ¯Ü¼©UÀÿh€=cІpŸøFaþ¼'ü†Õ@ççÍKôÖçh>ôÀ¿£‰ÁSãÃÐJžÿ¥yñ^†¶ ÉÖŠâÀ‡²§K$»Ñ–wë\hÅo* ôp!} ÌE[ xœæN7£-'ŸCÛ«ªІu}šŽþbÞ@`60ˆZ¾hoN£=©gÑ“—¸9¢fB«bÂn¤5Íù-…c޹hËÊ;Í›%]zz£­àжxs<®7-@)ÚTõÿ{ón°ÑçèLh‰ ­î‰ödB{Êmu%A[ö} mJ¶mTO¡P( …B¡P( …B¡P( …B¡è¸ü?ßÅXBˆü†ØIEND®B`‚calamares-calamares-2d126ae/src/modules/welcome/language-icon-128px.png.license000066400000000000000000000002121430147706700274140ustar00rootroot00000000000000SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/welcome/language-icon-48px.png000066400000000000000000000044131430147706700257230ustar00rootroot00000000000000‰PNG  IHDR00Wù‡ pHYs  ÒÝ~ütEXtCreation Time01/29/13?pÅtEXtSoftwareAdobe Fireworks CS5qµã6iTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmphíÛËŽ›0à}žÂr·ÛäV, ªºIUu"Íhvœ JÀÈx“Wë¢ÔW¨sm&ªº¨ÚÝï(Q0çœÏ>xK4éê4Û(K–j]T1ýñí;%EÓ‡áœÏë©z.>팺ß}^d»Mæt’ô¢Nve]*›’®ÜVìbšæz©¤û¿Ÿf”Bì&¦÷7Èãü ™j£ÈÐç^ÆGœŒ„/úƒñxüž\pÆ&OŒe?œ“Ó IÏýF&_ɯ³»ç®búlm-kÛÖoû¾6k&Â0Ü— ÏExÍkeÓΫšwÇ"ç:3Õd¦¨m¡+²¿N—úÅÆ”öÈÕ8í«¬/PÕø‡=ú™.Y—ÖLøœ]*ï‹»h95*µÚ,´Þ&ÇßFµÚl2½á²Ügða@Š*×m±Û¼ß•T3÷M\£ú^.‚@ö…ò§«ücÐMú\çÅêõ*=ôøháúÌG28§_[Ånzõ·=̳K ë³=<©‰€eË–‰Ýn—®®.‰D"""òîÝ;±X,ôSEÖ­['Ç—GI4ýÆœD§Ó‰Éd»Ý.·nÝ’ááá„•NÀÔf0¤¦¦F>,7€,^¼—Ëʼn'xùò%»víÂf³ …2²w8F¾9±XŒ/^ÐÖÖÆÞ½{ihhàÉ“'TWW³råJÓŽa4Ù³gŠ¢pêÔ)Þ¼yÃÆY¸paÎ"RñAtttÈŠ+dÓ¦MÒ××'‘HD"‘ˆlÞ¼YNŸ>ýAµJ–¢ªªƒA1›Írûöm‰ÇãRWW—Sd% ‹ßï—p8üþ7·Û-‹%aHv”èíí‘¶¶6QEš››EUU9vìØì'±N§Ãl6SZªûÇÆÆ8yò$.—‹âââ´ö6l ¶¶€–/_ŽÇã`ûöíIËuJŸ²¶˜Â… X°`>ŸçÏŸ311‘²¿ÝnÇ`0pôèQ?~̹sçgÍš5TTTÌÄi™véïï—õë×K §OŸÊ–-[dçÎïcúãš7ožŒŒŒˆªªòðáCù`ûúïðg´¯9_åiÞY©½ 0í‹£‚öM-ügæšcŽÿ{þ •^J¹ïIEND®B`‚calamares-calamares-2d126ae/src/modules/welcome/language-icon-48px.png.license000066400000000000000000000002121430147706700273350ustar00rootroot00000000000000SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/welcome/tests/000077500000000000000000000000001430147706700230435ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/welcome/tests/1a-checkinternet.conf000066400000000000000000000002011430147706700270300ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- requirements: internetCheckUrl: http://example.com calamares-calamares-2d126ae/src/modules/welcome/tests/1b-checkinternet.conf000066400000000000000000000001461430147706700270410ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Nothing at all --- bogus: 1 calamares-calamares-2d126ae/src/modules/welcome/tests/1c-checkinternet.conf000066400000000000000000000002021430147706700270330ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Set to blank --- requirements: internetCheckUrl: "" calamares-calamares-2d126ae/src/modules/welcome/tests/1d-checkinternet.conf000066400000000000000000000002201430147706700270340ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Set to something broken --- requirements: internetCheckUrl: false calamares-calamares-2d126ae/src/modules/welcome/tests/1e-checkinternet.conf000066400000000000000000000002001430147706700270330ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Empty list --- requirements: internetCheckUrl: [] calamares-calamares-2d126ae/src/modules/welcome/tests/1f-checkinternet.conf000066400000000000000000000003551430147706700270470ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Multiple, all valid --- requirements: internetCheckUrl: - http://example.com - http://bogus.example.com - http://nonexistent.example.com calamares-calamares-2d126ae/src/modules/welcome/tests/1g-checkinternet.conf000066400000000000000000000003511430147706700270440ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Multiple, all valid, in short-list form --- requirements: internetCheckUrl: [ http://example.com, http://bogus.example.com, http://nonexistent.example.com ] calamares-calamares-2d126ae/src/modules/welcome/tests/1h-checkinternet.conf000066400000000000000000000003641430147706700270510ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # "0" is a valid URL (?) but "" is not --- requirements: internetCheckUrl: - http://example.com - 0 - "" - http://nonexistent.example.com calamares-calamares-2d126ae/src/modules/welcome/welcome.conf000066400000000000000000000110261430147706700242030ustar00rootroot00000000000000# 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 # # This may be a single URL, or a list or URLs, in which case the # URLs will be checked one-by-one; if any of them returns data, # internet is assumed to be OK. This can be used to check via # a number of places, where some domains may be down or blocked. # # To use a list of URLs, just use YAML list syntax (e.g. # # internetCheckUrl: # - http://www.kde.org # - http://www.freebsd.org # # or short-form # # internetCheckUrl: [ http://www.kde.org, http://www.freebsd.org ] # List conditions to check. Each listed condition will be # probed in some way, and yields true or false according to # 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-calamares-2d126ae/src/modules/welcome/welcome.qrc000066400000000000000000000002301430147706700240360ustar00rootroot00000000000000 language-icon-128px.png language-icon-48px.png calamares-calamares-2d126ae/src/modules/welcome/welcome.schema.yaml000066400000000000000000000031611430147706700254600ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/welcomeq/000077500000000000000000000000001430147706700220625ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/welcomeq/CMakeLists.txt000066400000000000000000000023441430147706700246250ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/modules/welcomeq/Recommended.qml000066400000000000000000000053621430147706700250250ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/welcomeq/Requirements.qml000066400000000000000000000071441430147706700252660ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/welcomeq/WelcomeQmlViewStep.cpp000066400000000000000000000040171430147706700263240ustar00rootroot00000000000000/* === 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/TranslationsModel.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 ) ) { 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 { return true; } bool WelcomeQmlViewStep::isAtEnd() const { return true; } Calamares::JobList WelcomeQmlViewStep::jobs() const { return Calamares::JobList(); } void WelcomeQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( configurationMap ); Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last } Calamares::RequirementsList WelcomeQmlViewStep::checkRequirements() { return m_config->checkRequirements(); } QObject* WelcomeQmlViewStep::getConfig() { return m_config; } calamares-calamares-2d126ae/src/modules/welcomeq/WelcomeQmlViewStep.h000066400000000000000000000033161430147706700257720ustar00rootroot00000000000000/* === 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 // 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; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WelcomeQmlViewStepFactory ) #endif // WELCOME_QMLVIEWSTEP_H calamares-calamares-2d126ae/src/modules/welcomeq/img/000077500000000000000000000000001430147706700226365ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/welcomeq/img/chevron-left-solid.svg000066400000000000000000000007421430147706700270660ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/welcomeq/img/chevron-left-solid.svg.license000066400000000000000000000001401430147706700304770ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 demmm SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/welcomeq/img/language-icon-48px.png000066400000000000000000000044131430147706700266600ustar00rootroot00000000000000‰PNG  IHDR00Wù‡ pHYs  ÒÝ~ütEXtCreation Time01/29/13?pÅtEXtSoftwareAdobe Fireworks CS5qµã6iTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmphíÛËŽ›0à}žÂr·ÛäV, ªºIUu"Íhvœ JÀÈx“Wë¢ÔW¨sm&ªº¨ÚÝï(Q0çœÏ>xK4éê4Û(K–j]T1ýñí;%EÓ‡áœÏë©z.>팺ß}^d»Mæt’ô¢Nve]*›’®ÜVìbšæz©¤û¿Ÿf”Bì&¦÷7Èãü ™j£ÈÐç^ÆGœŒ„/úƒñxüž\pÆ&OŒe?œ“Ó IÏýF&_ɯ³»ç®búlm-kÛÖoû¾6k&Â0Ü— ÏExÍkeÓΫšwÇ"ç:3Õd¦¨m¡+²¿N—úÅÆ”öÈÕ8í«¬/PÕø‡=ú™.Y—ÖLøœ]*ï‹»h95*µÚ,´Þ&ÇßFµÚl2½á²Ügða@Š*×m±Û¼ß•T3÷M\£ú^.‚@ö…ò§«ücÐMú\çÅêõ*=ôøháúÌG28§_[Ånzõ·=̳K ë³=<©‰€eË–‰Ýn—®®.‰D"""òîÝ;±X,ôSEÖ­['Ç—GI4ýÆœD§Ó‰Éd»Ý.·nÝ’ááá„•NÀÔf0¤¦¦F>,7€,^¼—Ëʼn'xùò%»víÂf³ …2²w8F¾9±XŒ/^ÐÖÖÆÞ½{ihhàÉ“'TWW³råJÓŽa4Ù³gŠ¢pêÔ)Þ¼yÃÆY¸paÎ"RñAtttÈŠ+dÓ¦MÒ××'‘HD"‘ˆlÞ¼YNŸ>ýAµJ–¢ªªƒA1›Írûöm‰ÇãRWW—Sd% ‹ßï—p8üþ7·Û-‹%aHv”èíí‘¶¶6QEš››EUU9vìØì'±N§Ãl6SZªûÇÆÆ8yò$.—‹âââ´ö6l ¶¶€–/_ŽÇã`ûöíIËuJŸ²¶˜Â… X°`>ŸçÏŸ311‘²¿ÝnÇ`0pôèQ?~̹sçgÍš5TTTÌÄi™véïï—õë×K §OŸÊ–-[dçÎïcúãš7ožŒŒŒˆªªòðáCù`ûúïðg´¯9_åiÞY©½ 0í‹£‚öM-ügæšcŽÿ{þ •^J¹ïIEND®B`‚calamares-calamares-2d126ae/src/modules/welcomeq/img/language-icon-48px.png.license000066400000000000000000000002121430147706700302720ustar00rootroot00000000000000SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/welcomeq/img/squid.png000066400000000000000000000201711430147706700244720ustar00rootroot00000000000000‰PNG  IHDR\r¨fsBIT|dˆ pHYsX•X•Ùm7ÓtEXtSoftwarewww.inkscape.org›î<öIDATxœíy°%U}Ç¿§»ï½oófcö•e`†d ¥¢(Á}IÔ²RV“*£–eEC”XFMR©TÊŠ•ABÀ2„RRj©,ƒÂà 0ÌÀ0ÀÀlo7ïݵoŸüÑ}ºÏ½·û¾»ôÞ¿õxsÏí{úÜÓçûíßYÞi†xö#¸qü[ç"ˆ4Àn¿è>|/èó(AŸ€ ˆøB@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0ZÔ ‚ghÇu»þ]}fæ‘ zðÑ€JDÄ2€ PX>&Þþ']}fîå§qú¹Ç1ž«T*"P€ðdÁP0¯«Qƒ2Â`A'H3d„7Üüeš5•4BW•èˆ]%H!tE‰Ž`ÉR]MÂ.ý›I©‹ÔHt% WXÃoÙugÈR]EÂGüMé X¬“ ¤º‚DÜÅ/ H>tõˆŽ‘Å/ H6t刎p?`Í $ºjÄ’´¿è$,Ö, $ºb„;–²;¿`L qÐÕ"<éFü""dAWŠèŠvâÌ7u2¤@W‰è˜NÄ/ Ht…ˆŽèFüâ êĺ:Ä’ô"~ñÆba±NÍ,®Ð•!ÚÒø :™@\¡«BxÀ}¿H^ÔÈb]¿Ä/(’ ĺDÇô#~™@¼ +At„âé%a‘fb]bIü¿ X'ˆtˆ¶!~™@ôPíî0K´»™‰>ˆ0ÿÖ d0,ê^GAC@xãy×o|“5¿åõ99¹ …L "ȈÎh#~¯ÃÝÞc¬Qü2h  –¦ñ»¦KÂwëU”êdaC@´'ñ»o½A&.d„;¡‹_Pª+(ÖÉ€ €pÅhsxâuš-êñ„Kÿ„%~ñFÉŠ†5ω>¡ dògmSsQcIŒ&Í-~¦æ0¸f[ËeZ'(d!RX>6ÿíÃØðù‚å Q§cÂÿùŸ¿»¿ù†7ïjɧl02€(lÚ…ÍwüÚ²5¹äfløÜ}‰0°Ä¿âê÷!7¾ ÝùsŒl¿´eGâRL ÈB °i6ågPGWÚiI00Å/ÐF&°ëއ0²íÒ–üËd¾C0nâ$Áš Rümd6™€È‡LÀ_ȤøI20Ä/M ù¼dþAˆ_SüaÃ.ÝJÙÓ„Dï@7âÄÙ¢¿ÀÍäî™@øL/âÄÑ¢¿@6·î™@ïøH?âÄÉâ ~AÛî€A&Ð+d>2rñ»ú¿Ï%7cýgïŠtÅ Ÿâßñù»ú¿@™À²Ýos-™@oøÈôÿ~“÷|Ù—¼F¯ü@ìV özç_yõû}9ÿÑ{¿Ž7ô–òÊd]Cà3S|Ë7ˆUw ‚°_æè½_ÇÑ{¿ÞRžæÓW †2™@Ç@ÚL )â·gÈ:† ÒbI¿H,×É: @’n‰ÓfƒdKC0I5¶âoÞÕ1 å:ÈÚ@I5Oñ7§ÇNüU®›ƒƒD+d!‘4p}PbÄß ™€;d!’4Ú‡ØI¿½³™@ d!“$H“ødD@L *ñËk.B¿âTÈlÈ"" &…øÝŠ`A¸–©;ñ‹äJ¨’ DI¬MÀUüZ$â÷.Sk!Ý"û½¦×e22€¨‰µ H˜âÿAìÅïFCÑDÖ#2€wSübßOñ{¥ËÝ¬Ž Ä„¸š@ØâÂ3ÕŒš@Œˆ› dEü"Ÿšan6š%ÈbF\L€iÙ¿ Æ³eôtà2õÀ·€ÜV}ø«}ç5rÉÍ<ûÊ®?·é¾‚ÜXÿۛɿ ÆÔ‚êñ¡A@L™ºÿk¾E½ìS˜Uñ‹ãuÎP©{|0EÄ?»QTñ ²`d1'©&tñ Ònd i&ñ Òld !)&6ñ tÎP5:80a$ˆ¸›@ZÅ/¨é32€„WH»øE>i‹ÈHÜL +â¤ÉÈJ\L +ñ»ì&œ4ñ j)12€µ t-þ’)~ñ׊:g¨%Üh)p™zà[€UûF¨çíOü½íâÓqzâ/jœàÈ%ôVšÐb2aG$~H_ƒ£f ±‘@JËHüh¿È_O¨ ¤ˆ M€ÄWñ ’h42‚â÷mñ tË’2&bÝàw$°”øHür>uîAÜ!H)~™@'âoHh9¢‘n¶í^2=†âè 12€Ó¯ !~7"—÷\Óc,~AL€ÆRN¯c^âëÒÞvŸñ<>@ñ‹ãë€h1½ÕÆ´X„Ÿt $Müí"/¿ Îcd¡SH¢ø»Ák "(ñ êÜŠb@†Xʲ ~Ï÷Ä?¿@7âg41¼Æ²,~IüAAèP»ýA@iŽ2/þ†?Sî^üÝŽAÄ)  £ˆ‡”ëŒÄ/½«<¢ŽÈ2ÌÔý_C¹ÎÀšZ7‰?œòÄÁ¨ qTŽ!ÕQ‰?ÜòÜü‰ 2y¥ÑHüá”G$×#42€0ƒÄRyš“£22Â&¯ÃªµdÄXy¼ò‰¢;@@4S€µyÝ*‰?hñ‹ô°M€ €hAS€ÑœÆ&Èm’ ~îúÂü>q¿Àà@Í»˜¾B@¸¢2`TãPššaRÄÏäÒ?â.~¯ƒ!}’ž( ‘L€Äß}yÚžwé|¬Q2¢-¼«ø{˧‹òjdÄ’( v1oùt[ë#h• €èašèxGâoŸOâ—gú®W2¢c€!ÉÜÞwM'ñ÷T´NÁ°6ÙôѶ (­é®Ç“ø{*OeújdD×0Cªó@Lû||,ÜðÅȈžT9ò-ˆÄ¿Dzïâ—íÛȈ¾P9òªóÚkÓM€ÄßGyÚ-îËhC¢o Š)K¯cöÒBIü6^â—ÓY›ãÚB@øBAáj¼±)û%4Gé]C]Â7 ª¹¯€À/¡5ä•ñ3¼øŠŸÉ+GÕèNjqÙ¶»“¼B¸ó{á»)P@øNNã·m»—Ê««ô‹ €s¡Ge‰H )y´Ë+©â( DSÌiB/’"þvD’Å£2Óš‘$ñ{¥»½çç:Ð,‘T (Ž ¤AüÝæÓm™Tï·|  BA±L y‹±R(þnËÓÅ_ö  3g<Û7‰ß ÷ÝY}€ €a- ÄïE ›„“¡£0  r(¢m'lÛî°Êƒ€ÅÁ`.Ví6žî¥½Ý–Gñ^ ì+dDd0yP‰¿Ÿ|ú €ˆÇ<Þ'ñ 9¢;ÐïSˆ<ó'ñ{B@Ć‚ ¨bŸA(±"¯ eÇa‰ßȈؑSZÇHüÁ@@Ä’œ‚%ŸB䉿s؉ɩŸE¯æy¥8øyˆÔ¡×uÔªµV­xüQó•ç|»â¾s óø€ÒÑÖEr>î÷X¯üí÷ CEhùjW'ë6;w:”Ñ+º®C×kök/‘{©ÜKlqKÚˆˆ=š¦1½Vó>(fbN‚ø ‚ªªÐr9÷7c&椈  „ªªÈåó‰1s’Ä CQÓÚìœ7‘ÇUü ÕôzÔe ˆîaJÃÀ ô†ûá$~W´™Ù¹¨Ë@=Á9‡®ëàÜúk€ř6ñ€žŒš¦B×u+¥µ-›"ì<Ýû\ÝåÓmþQ¡Å¿ˆÑÆ jêõº ˜ÉæÝ·¹}{¥·?…ûîݦÇ-1%%TEµM€1æªp¯ô¶yw™W/çˆê©@tš#çý^B~´|Æ+½—sÄê©BQ[M Û¼—HšôM¨ @¤ŽNº^¤=äo†©DUUšæë'Ù¾¢ Šª ^ïl¡›Þ»÷ë»IO©¦“H ‹w~©Ga nxÏd¨Ïß Í™€) À9¸aH‰é]àÓ)´€È ŒÁ|æ–aX/Ò·´·[¨ @d 0Å—î@ .‘=Ä ¥1ì—¡.‘IÄ@¾½X(Ca¿ uˆÌÂÀÌ;|Ý´A]‚h2´‡ý2´ˆ à,îIÓ"ŸNˆ~ `q8ü8Ø«OŸzlæ5 Zô 0¸ šÆV›.ß|°q7ˆ¶ÌIdê0pd/ØkOS¯ ³@i¨ë@~X¶|ù`ãÅÀÖ«€uD]âÐ1µß»t]ÇÉ'pìÍ7pâÄq‹ETÊ”JEhš†|¾€ññq,›˜ÀÚuë±aãF úVþ^`Ï<ÿbøÀ9Ø¡_í½8¼0ºØ˜t`üâ÷ƒ_ñq`åÖàʘªE°g{ònàä¡®>ÊWl.ùø ŒTÀt07;‹çö?‹—DµZéøsŒ)ظi3v^x!6nÚIôº°#O€=ô àäÁ>3bÀ®[`¼ëKÀð  —¸öÛûÀ~þ@étYF€ko¿öV@Ë/ý ±¸¸ˆ_ïy ¯~Éu ±V¬\…k¯»k×­÷©tžÔJ`?¹lßýÍw` õw|ìòø›oR™~ʾ}Úß|Wn…þÁoƒ­Û™¹~²/x¿ÞóXWwü¥`ŒaÇù;ñ–k¯CÎë)H>Þ~î@ð0÷&”»o›<Ø)Ê—|¹÷~`j`çˆ;ìÈo Üû—@y>ü¹šÃÜ ŸÃèõ”YàÜÀžGÅ ÏïìËWà]7ß‚ÑÑÑÀÎ!ÜØÔa°ÿøØ™SAžPÛþ{P>ñ¯€’½gž²ý?6ïü†¾ôÁ}ˆaþ-ŸÁÐ;>›90 ?ý¿Ÿàõ×^ ü\ÃÃ#øý÷¼Ë&&=O°Ó€ó'Àîº-ñ@îð#à÷}è³?–4Øk{¡<ðåàÅœcìñï¢øËï®Á9ÇÿüE(â€ÅÅüøÁpæÌ™@Ï£Þþ§vG 9ëUhß¿lò•@²÷B™zºa€m»2ÔóF›zê~ ¨–B=oáè^Ì-ßÂY[B=oTìÛ÷ö?ûL¨ç¬Öª8yâ8Îݱ#°hK‚øQ~þOÀ±)ôRä÷|úëÏò½bõcPþç¯r°w WŒ:ƺ³ÇŽF_ÿLMNbßÞ½‘œûÔÉSØûÄoË?˜.À©CPž¼+¬;¨Cyà˨UÊÑ•!ØS÷€½áóhhÅIäû.æfg#+CÐpnàÑ_ý †¼‘HÈìæLOM’·„±(?ûNw‹{ ?ý Šß½^úÌOµõÿâkõÂø‹bñøK˜›‹¾Nø9tð &'ÃÃòÂ0 <ùäoù~ 8‡Ÿ?ìØóP^~,Ô òbtÿý8uò¤¹3¬Ïß3êåé6Ý×FûïÇÂü<ÎÌŸŽ¼^üüá†ýÏDaɼñú똞šôý;ú>_¦ø½Ð§ò³G0øâC8=s&–M@QÒ3m¥<ñý¨‹`3røxùÜcvn££cŽºH¾033™™™¨‹àœãà¸æºë}Í×ß?æu°ò3ǾYõè?D]„Ô£ÔŠ8õðam Àòy ¹-ö›Ã/¿„«¯½Î×_Ù±`}®='’É6œ²7Ú¬ÖjÐõÖ$dŒr¹Œ™i}PŽîóµpDrX[=ÀyVN¥R%€Çû;àk`ꈟ¹ b¸26hL8GµZhZö–fÅìì,üÔ¬¿]€ÓÇüÌŽHŠ¡c„—lñ‹]7©;à/‹ ¾æ§ûè'ÕEÿò"G:œ‡npŒÕjŒ™Ïé#ú£Z­ÀOÍúÛˆxñ-*¯ÖT+‡õ˜~P­VQ( (´ e?†ß.rÑîoFDKU1§þšÅ/¨T«‘.©M~oâësøÐrÿ2#’c(¡Î›Äoµ/Ó€j¥Š|¡%c{ øÅÀÀ üÔ¬¯»ó[|Ë‹Håü8*ȹÞù9œmppÔªäryêôÀ²eËà§f}0ÖžïcnD’˜ÎŸÌ{SeÌ·2Ãepsv —Ë‘ tÉò•+ã;Pßx™9LdŽ×Õµïüv‚$~ù˜Z­Fc] ( ÎZ³Ö×<ý}6`aÆ–« ùµ™öGiý娞Àé›Ú0³_*·ZkÛ9Rãü£1'ÑÏeâÑÓ'`ÞÇ»—¦+Ôç4žÙ WãlÍ|~À³ÆÌ bVE0Æì*…Åvv`aá Þ8z4êbج[¿ù\Þß1]ïA!&Àóغñ+0òCVÃcö5cD#µÓ˜Ùpá4Z‘ûîå4bóîÆ­|Ä8»œÖøØ)9­Wò´§ïï+¿(¯¹ç½åíÄwdv}Ü®g»ŽÍ#!ªUa ††‡cgÕj÷Ýs·½¢1j¶Ÿ}.üÖ«ï5^¿à&ãþ†)½rfÇÍ©?Ô®údlº[ó»Íg2ô"~óÁœ¥R)vÝ|>sÏÛu1Ã##زm›ïùú¿' Ó _óiß Ú-Fnó~ÐlxÜ„bÜ£†x ƒ0ó8p«[G±†ãìî€Á!§Ú•ã¬1UL‹IyøQÏ|ùÔwÜFU¶¥²zJ믴¾³ëÛõ5hÕ±]?°ÓaýæG¹T†Q7üm}þ\°sWhéhÇÅ—\…)¾?…Ãÿÿj»?cÝΫ¨‘Ù+>…úðJ€½vŠq³KÊÌrŠN8¿aÀnVº}œý9€sÃÊGNçp~Ägå<ü¬çÊ_‚x„'LÁô5(Ö]ªGQÏ"M¾ õØuip•J7h•½ý742ŒK/¿"ÜzmbÕêÕ8ûÜsù~ÁÄLAå–;#[X^³‹;ßÛ>ìa*Šåv藍)¼÷ûÅg‚ û›á#+QyÛ_ùžo§Ì]üqÔVϰ¿©ë‘æRg¬.G¥RE¿ÏÚó“ìĪի#9·¦i¸î†·¸-x@+¶¢òî¯ºÌ ‹>ºS7þ Dï&­â·¿ïî÷£vùÇËߋ҆Ëqú²OÂOñ‹YÎ T«ñ1ÆÞzã;122òyk¯¿ãããC½õ¶ÏÜTæÆªsÀ ÃÐBš0 £8qówP]c6<Þ½ø™s`ìÅ/¨o½Êä!(Ó¯~.¨¬:§nú;p­ €t'þÖÁU˜}©º¸ÁÁ ‰‘Ëå°nÃ9ü²¹Él\yõ58'àAHõÓ·Ý~G'0Ö_cpê+{½Œú蜼ùï¡Olv¿hhðIüöP`äâåÕÏ»¬8õD°c)¯Û“7Ý ^v¿S—ýˆß®;fŽ·¨j>¸†«¯¹;.~Mýt€€ ºz¦7bøø>(,^)Ÿu!N¾û›¨­ÍžøLAmÛuX(×0tr?|ÝçÃé ?ˆé¾ž \üöt«E\Ö bëöí˜?ÐÔÐR.~ Ã0°pè ,ßóÏœ:èKžµñ ˜¾úÏQÚp©ó½¹S`Šßz­(JlL€µM÷ øÝo÷¢Zë¡ö³ÏÁåW\…ÁðÏC3À4S§&Q˜<€Ïý7FÞÜ ±4¤ê…q,œ{Nïúêƒ L².~a˜™žDáÅŸbùÁ10ýROùÔF×áôEÅÂ9ïWµÈÄ/×kœLŠÅ"<¿/:ˆJ¢c`ظi3ví¾+W­  „Kœÿñ½ûBjÕk5LNM¨È•¦0öê#>¶“/B©{;i}hJk.BqýeXÜú{€V°‰¿Î9f¦gP®”00}c¯>†¡SÏc`æ0À½WÜUÇ7¢´îb,n¹•5Z•(‰:BñËÇÆº®ãµWà7Žâä‰ã(‹žÇjª†U«Wc݆ غu;†Cž]a{ž ×Ó¦¦¦Pç†Ùh8  †üÂIäæA­•ÁêUƒc¨ÆQ^‰ÚèYfwMƒDh#~Kø}UëóNëk¿Ó¸“)~ç³33(UÊö¸ˆª‘;sjå4´Ò< ðÜ ôáU¨Žo€‘±DkæÁ3µê%~}-9ãÒ(~»ºR ~7P*Q©”Q.—¡©*´\ccã‹Í÷ˆÄ@×uLMM¨s0Æ­†&™$`«Q‘ø{ƒsŽÙ¹YTJe;Z‚UÏN=A|IÆðuG ®N¬©X¹r%¦§§ÁºÙÐ8`62!hn‰ŸKâÄ’\fŸ¶QH!> "LCj°"7¤™I†“Î%ñKiŒ5+ VÜ` X>19Ì¢T.Yâ‡mº¶³ÚFÊ­Ï1pë3©µ~8¸%~§>Å9…§6Ôwòo¼&.iR½&¡ž“Š¿»w‰ªiX¾|9fffÁ­ÝNÅ„7ÝùE«àÒRºóoS¶¦58}yÑ"í; È°ïü¼)ݼa5¥I¿íÏ'€ñ‰ `Ž¡T*ÛQ•³~_Ü­a7C˜07ë‘ÉÊd€óÎæÔ‘}ý`Ö% Õ“ðr3ÑÉ.iR½&­ž“†¿‚ôR-‡å˜apGØV+3Û›¶‹M'Ò­–gÞ$šÂ~qgñc§Y¯¹8'kÈ5Ë… ¤ð6a­r||;r© É᜜K)ìwjÑü—Âþ†ú¦ÐZOö \ªSæ¨òN@ÌzN±˜SÑr9LL,‡¢©öÝÉnPpéóËé€~6÷ùc㤈@ˆ¿©ÏÉš~'¹/:66ŽçÎÏìÚACŸ’ø³ë¸³…Vh­O ¡N]Ó¤zMz='ßwê5§aÙ²e˜›ç†Ó‰4o±ïȨš†¡!»ŸjwC)ì÷\>0 R©Z*§°?ÄnÀRhš†ˆñ@û./âSšç÷\.B¡Ð0@óüéBó}óÈÐT¬0`†¨£Á%cÝW.…ýr³‹4¢•œ¦œ£V«9Ý-¹Q×\ ûëÕsLIT@FQUä ó¶˜yįyÁŠöh O w´\` µš&­pF÷à’&=fê9¶hsgæ£.C_†z]·^‰9LµÒì0Öi”̉ˆ0ëÚz(“îêv‚0;…ê9æhǦ'£.A‘¸A@‚ üƒ € 2 Ad2‚È0d‘aþä‡êok\IEND®B`‚calamares-calamares-2d126ae/src/modules/welcomeq/img/squid.png.license000066400000000000000000000001421430147706700261070ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-calamares-2d126ae/src/modules/welcomeq/release_notes.qml000066400000000000000000000043621430147706700254320ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/modules/welcomeq/welcomeq.conf000066400000000000000000000020341430147706700245440ustar00rootroot00000000000000# 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-calamares-2d126ae/src/modules/welcomeq/welcomeq.qml000066400000000000000000000134341430147706700244160ustar00rootroot00000000000000/* === 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("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-calamares-2d126ae/src/modules/welcomeq/welcomeq.qrc000066400000000000000000000006171430147706700244110ustar00rootroot00000000000000 welcomeq.qml release_notes.qml Recommended.qml Requirements.qml img/squid.png img/chevron-left-solid.svg img/language-icon-48px.png calamares-calamares-2d126ae/src/modules/zfs/000077500000000000000000000000001430147706700210505ustar00rootroot00000000000000calamares-calamares-2d126ae/src/modules/zfs/CMakeLists.txt000066400000000000000000000004551430147706700236140ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # calamares_add_plugin(zfs TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ZfsJob.cpp SHARED_LIB ) calamares-calamares-2d126ae/src/modules/zfs/README.md000066400000000000000000000024401430147706700223270ustar00rootroot00000000000000## zfs Module Notes There are a few considerations to be aware of when enabling the zfs module * You must provide zfs kernel modules or kernel support on the ISO for the zfs module to function * The zfs kernel module must be loaded prior to the partition module running * One way to achieve this is by running `modprobe zfs` * Support for zfs in the partition module is conditional on the zfs module being enabled * The config for the default pools and datasets is configured and described in modules/zfs.conf * If you use grub with zfs, you must have `ZPOOL_VDEV_NAME_PATH=1` in your environment when running grub-install or grub-mkconfig. * Calamares will ensure this happens during the bootloader module. * It will also add it to `/etc/environment` so it will be available in the installation * If you have an scripts or other processes that trigger grub-mkconfig during the install process, be sure to add that to the environment * In most cases, you will need to enable services for zfs support appropriate to your distro. For example, when testing on Arch the following services were enabled: * zfs.target * zfs-import-cache * zfs-mount * zfs-import.target calamares-calamares-2d126ae/src/modules/zfs/ZfsJob.cpp000066400000000000000000000300551430147706700227540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Evan James * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ZfsJob.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include #include /** @brief Returns the alphanumeric portion of a string * * @p input is the input string * */ static QString alphaNumeric( QString input ) { return input.remove( QRegExp( "[^a-zA-Z\\d\\s]" ) ); } /** @brief Returns the best available device for zpool creation * * zfs partitions generally don't have UUID until the zpool is created. Generally, * they are formed using either the id or the partuuid. The id isn't stored by kpmcore * so this function checks to see if we have a partuuid. If so, it forms a device path * for it. As a backup, it uses the device name i.e. /dev/sdax. * * The function returns a fully qualified path to the device or an empty string if no device * is found * * @p pMap is the partition map from global storage * */ static QString findBestZfsDevice( QVariantMap pMap ) { // Find the best device identifier, if one isn't available, skip this partition QString deviceName; if ( pMap[ "partuuid" ].toString() != "" ) { return "/dev/disk/by-partuuid/" + pMap[ "partuuid" ].toString().toLower(); } else if ( pMap[ "device" ].toString() != "" ) { return pMap[ "device" ].toString().toLower(); } else { return QString(); } } /** @brief Converts the value in a QVariant to a string which is a valid option for canmount * * Storing "on" and "off" in QVariant results in a conversion to boolean. This function takes * the Qvariant in @p canMount and converts it to a QString holding "on", "off" or the string * value in the QVariant. * */ static QString convertCanMount( QVariant canMount ) { if ( canMount == true ) { return "on"; } else if ( canMount == false ) { return "off"; } else { return canMount.toString(); } } ZfsJob::ZfsJob( QObject* parent ) : Calamares::CppJob( parent ) { } ZfsJob::~ZfsJob() {} QString ZfsJob::prettyName() const { return tr( "Create ZFS pools and datasets" ); } void ZfsJob::collectMountpoints( const QVariantList& partitions ) { m_mountpoints.empty(); for ( const QVariant& partition : partitions ) { if ( partition.canConvert( QVariant::Map ) ) { QString mountpoint = partition.toMap().value( "mountPoint" ).toString(); if ( !mountpoint.isEmpty() ) { m_mountpoints.append( mountpoint ); } } } } bool ZfsJob::isMountpointOverlapping( const QString& targetMountpoint ) const { for ( const QString& mountpoint : m_mountpoints ) { if ( mountpoint != '/' && targetMountpoint.startsWith( mountpoint ) ) { return true; } } return false; } ZfsResult ZfsJob::createZpool( QString deviceName, QString poolName, QString poolOptions, bool encrypt, QString passphrase ) const { // zfs doesn't wait for the devices so pause for 2 seconds to ensure we give time for the device files to be created sleep( 2 ); QStringList command; if ( encrypt ) { command = QStringList() << "zpool" << "create" << poolOptions.split( ' ' ) << "-O" << "encryption=aes-256-gcm" << "-O" << "keyformat=passphrase" << poolName << deviceName; } else { command = QStringList() << "zpool" << "create" << poolOptions.split( ' ' ) << poolName << deviceName; } auto r = CalamaresUtils::System::instance()->runCommand( CalamaresUtils::System::RunLocation::RunInHost, command, QString(), passphrase, std::chrono::seconds( 10 ) ); if ( r.getExitCode() != 0 ) { cWarning() << "Failed to run zpool create. The output was: " + r.getOutput(); return { false, tr( "Failed to create zpool on " ) + deviceName }; } return { true, QString() }; } Calamares::JobResult ZfsJob::exec() { QVariantList partitions; Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( gs && gs->contains( "partitions" ) && gs->value( "partitions" ).canConvert( QVariant::List ) ) { partitions = gs->value( "partitions" ).toList(); } else { cWarning() << "No *partitions* defined."; return Calamares::JobResult::internalError( tr( "Configuration Error" ), tr( "No partitions are available for ZFS." ), Calamares::JobResult::InvalidConfiguration ); } const CalamaresUtils::System* system = CalamaresUtils::System::instance(); QVariantList poolNames; // Check to ensure the list of zfs info from the partition module is available and convert it to a list if ( !gs->contains( "zfsInfo" ) && gs->value( "zfsInfo" ).canConvert( QVariant::List ) ) { return Calamares::JobResult::error( tr( "Internal data missing" ), tr( "Failed to create zpool" ) ); } QVariantList zfsInfoList = gs->value( "zfsInfo" ).toList(); for ( auto& partition : qAsConst( partitions ) ) { QVariantMap pMap; if ( partition.canConvert( QVariant::Map ) ) { pMap = partition.toMap(); } // If it isn't a zfs partition, ignore it if ( pMap[ "fsName" ] != "zfs" ) { continue; } // Find the best device identifier, if one isn't available, skip this partition QString deviceName = findBestZfsDevice( pMap ); if ( deviceName.isEmpty() ) { continue; } // If the partition doesn't have a mountpoint, skip it QString mountpoint = pMap[ "mountPoint" ].toString(); if ( mountpoint.isEmpty() ) { continue; } // Build a poolname off config pool name and the mountpoint, this is not ideal but should work until there is UI built for zfs QString poolName = m_poolName; if ( mountpoint != '/' ) { poolName += alphaNumeric( mountpoint ); } // Look in the zfs info list to see if this partition should be encrypted bool encrypt = false; QString passphrase; for ( const QVariant& zfsInfo : qAsConst( zfsInfoList ) ) { if ( zfsInfo.canConvert( QVariant::Map ) && zfsInfo.toMap().value( "encrypted" ).toBool() && mountpoint == zfsInfo.toMap().value( "mountpoint" ) ) { encrypt = true; passphrase = zfsInfo.toMap().value( "passphrase" ).toString(); } } // Create the zpool ZfsResult zfsResult; if ( encrypt ) { zfsResult = createZpool( deviceName, poolName, m_poolOptions, true, passphrase ); } else { zfsResult = createZpool( deviceName, poolName, m_poolOptions, false ); } if ( !zfsResult.success ) { return Calamares::JobResult::error( tr( "Failed to create zpool" ), zfsResult.failureMessage ); } // Save the poolname, dataset name and mountpoint. It will later be added to a list and placed in global storage. // This will be used by later modules including mount and umount QVariantMap poolNameEntry; poolNameEntry[ "poolName" ] = poolName; poolNameEntry[ "mountpoint" ] = mountpoint; poolNameEntry[ "dsName" ] = "none"; // If the mountpoint is /, create datasets per the config file. If not, create a single dataset mounted at the partitions mountpoint if ( mountpoint == '/' ) { collectMountpoints( partitions ); QVariantList datasetList; for ( const auto& dataset : qAsConst( m_datasets ) ) { QVariantMap datasetMap = dataset.toMap(); // Make sure all values are valid if ( datasetMap[ "dsName" ].toString().isEmpty() || datasetMap[ "mountpoint" ].toString().isEmpty() || datasetMap[ "canMount" ].toString().isEmpty() ) { cWarning() << "Bad dataset entry"; continue; } // We should skip this dataset if it conflicts with a permanent mountpoint if ( isMountpointOverlapping( datasetMap[ "mountpoint" ].toString() ) ) { continue; } QString canMount = convertCanMount( datasetMap[ "canMount" ].toString() ); // Create the dataset auto r = system->runCommand( { QStringList() << "zfs" << "create" << m_datasetOptions.split( ' ' ) << "-o" << "canmount=" + canMount << "-o" << "mountpoint=" + datasetMap[ "mountpoint" ].toString() << poolName + "/" + datasetMap[ "dsName" ].toString() }, std::chrono::seconds( 10 ) ); if ( r.getExitCode() != 0 ) { cWarning() << "Failed to create dataset" << datasetMap[ "dsName" ].toString(); continue; } // Add the dataset to the list for global storage this information is used later to properly set // the mount options on each dataset datasetMap[ "zpool" ] = m_poolName; datasetList.append( datasetMap ); } // If the list isn't empty, add it to global storage if ( !datasetList.isEmpty() ) { gs->insert( "zfsDatasets", datasetList ); } } else { QString dsName = mountpoint; dsName = alphaNumeric( mountpoint ); auto r = system->runCommand( { QStringList() << "zfs" << "create" << m_datasetOptions.split( ' ' ) << "-o" << "canmount=on" << "-o" << "mountpoint=" + mountpoint << poolName + "/" + dsName }, std::chrono::seconds( 10 ) ); if ( r.getExitCode() != 0 ) { return Calamares::JobResult::error( tr( "Failed to create dataset" ), tr( "The output was: " ) + r.getOutput() ); } poolNameEntry[ "dsName" ] = dsName; } poolNames.append( poolNameEntry ); // Export the zpool so it can be reimported at the correct location later auto r = system->runCommand( { "zpool", "export", poolName }, std::chrono::seconds( 10 ) ); if ( r.getExitCode() != 0 ) { cWarning() << "Failed to export pool" << m_poolName; } } // Put the list of zpools into global storage if ( !poolNames.isEmpty() ) { gs->insert( "zfsPoolInfo", poolNames ); } return Calamares::JobResult::ok(); } void ZfsJob::setConfigurationMap( const QVariantMap& map ) { m_poolName = CalamaresUtils::getString( map, "poolName" ); m_poolOptions = CalamaresUtils::getString( map, "poolOptions" ); m_datasetOptions = CalamaresUtils::getString( map, "datasetOptions" ); m_datasets = CalamaresUtils::getList( map, "datasets" ); } CALAMARES_PLUGIN_FACTORY_DEFINITION( ZfsJobFactory, registerPlugin< ZfsJob >(); ) calamares-calamares-2d126ae/src/modules/zfs/ZfsJob.h000066400000000000000000000050721430147706700224220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2021 Evan James * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef ZFSJOB_H #define ZFSJOB_H #include #include #include #include "CppJob.h" #include "utils/PluginFactory.h" #include "DllMacro.h" struct ZfsResult { bool success; QString failureMessage; // This message is displayed to the user and should be translated at the time of population }; /** @brief Create zpools and zfs datasets * */ class PLUGINDLLEXPORT ZfsJob : public Calamares::CppJob { Q_OBJECT public: explicit ZfsJob( QObject* parent = nullptr ); ~ZfsJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: QString m_poolName; QString m_poolOptions; QString m_datasetOptions; QStringList m_mountpoints; QList< QVariant > m_datasets; /** @brief Creates a zpool based on the provided arguments * * @p deviceName is a full path to the device the zpool should be created on * @p poolName is a string containing the name of the pool to create * @p poolOptions are the options to pass to zpool create * @p encrypt is a boolean which determines if the pool should be encrypted * @p passphrase is a string continaing the passphrase * */ ZfsResult createZpool( QString deviceName, QString poolName, QString poolOptions, bool encrypt, QString passphrase = QString() ) const; /** @brief Collects all the mountpoints from the partitions * * Iterates over @p partitions to gather each mountpoint present * in the list of maps and populates m_mountpoints * */ void collectMountpoints( const QVariantList& partitions ); /** @brief Check to see if a given mountpoint overlaps with one of the defined moutnpoints * * Iterates over m_partitions and checks if @p targetMountpoint overlaps with them by comparing * the beginning of targetMountpoint with all the values in m_mountpoints. Of course, / is excluded * since all the mountpoints would begin with / * */ bool isMountpointOverlapping( const QString& targetMountpoint ) const; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( ZfsJobFactory ) #endif // ZFSJOB_H calamares-calamares-2d126ae/src/modules/zfs/zfs.conf000066400000000000000000000027131430147706700225240ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # The zfs module creates the zfs pools and datasets # # # --- # The name to be used for the zpool poolName: zpcala # A list of options that will be passed to zpool create # # Encryption options should generally not be added here since they will be added by # selecting the encrypt disk option in the partition module poolOptions: "-f -o ashift=12 -O mountpoint=none -O acltype=posixacl -O relatime=on" # A list of options that will be passed to zfs create when creating each dataset # Do not include "canmount" or "mountpoint" as those are set below in the datasets array datasetOptions: "-o compression=lz4 -o atime=off -o xattr=sa" # An array of datasets that will be created on the zpool mounted at / # # This default configuration is commonly used when support for booting more than one distro # out of a single zpool is desired. If you decide to keep this default configuration, # you should replace "distro" with an identifier that represents your distro. datasets: - dsName: ROOT mountpoint: none canMount: off - dsName: ROOT/distro mountpoint: none canMount: off - dsName: ROOT/distro/root mountpoint: / canMount: noauto - dsName: ROOT/distro/home mountpoint: /home canMount: on - dsName: ROOT/distro/varcache mountpoint: /var/cache canMount: on - dsName: ROOT/distro/varlog mountpoint: /var/log canMount: on calamares-calamares-2d126ae/src/modules/zfs/zfs.schema.yaml000066400000000000000000000015511430147706700237770ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/zfs additionalProperties: false type: object properties: poolName: { type: string } poolOptions: { type: string } datasetOptions: { type: string } datasets: type: array items: type: object additionalProperties: false properties: dsName: { type: string } mountpoint: { type: string } # Nominally a string, but "on" and "off" are valid and get # turned into a boolean in the YAML parser. canMount: { anyOf: [ { type: string }, { type: boolean } ] } required: [ dsName, mountpoint, canMount ] required: [ poolName, datasets ] calamares-calamares-2d126ae/src/qml/000077500000000000000000000000001430147706700173675ustar00rootroot00000000000000calamares-calamares-2d126ae/src/qml/calamares/000077500000000000000000000000001430147706700213175ustar00rootroot00000000000000calamares-calamares-2d126ae/src/qml/calamares/CMakeLists.txt000066400000000000000000000040441430147706700240610ustar00rootroot00000000000000# === 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-calamares-2d126ae/src/qml/calamares/slideshow/000077500000000000000000000000001430147706700233205ustar00rootroot00000000000000calamares-calamares-2d126ae/src/qml/calamares/slideshow/BackButton.qml000066400000000000000000000005771430147706700261000ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/qml/calamares/slideshow/ForwardButton.qml000066400000000000000000000006071430147706700266360ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/qml/calamares/slideshow/NavButton.qml000066400000000000000000000027021430147706700257540ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/qml/calamares/slideshow/Presentation.qml000066400000000000000000000213031430147706700265050ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/qml/calamares/slideshow/Slide.qml000066400000000000000000000153221430147706700250760ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/qml/calamares/slideshow/SlideCounter.qml000066400000000000000000000013671430147706700264420ustar00rootroot00000000000000/* === 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-calamares-2d126ae/src/qml/calamares/slideshow/qmldir000066400000000000000000000003241430147706700245320ustar00rootroot00000000000000module 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-calamares-2d126ae/src/qml/calamares/slideshow/qmldir.license000066400000000000000000000000741430147706700261550ustar00rootroot00000000000000SPDX-FileCopyrightText: no SPDX-License-Identifier: CC0-1.0