Merge branch 'calamares' of https://github.com/calamares/calamares into 3.2.x-stable
This commit is contained in:
commit
d807944cbe
@ -19,5 +19,5 @@ install:
|
||||
- docker build -t calamares .
|
||||
|
||||
script:
|
||||
- docker run -v $PWD:/src --tmpfs /build:rw,size=81920k -e SRCDIR=/src -e BUILDDIR=/build calamares "/src/ci/travis.sh"
|
||||
- docker run -v $PWD:/src --tmpfs /build:rw,size=112M -e SRCDIR=/src -e BUILDDIR=/build calamares "/src/ci/travis.sh"
|
||||
|
||||
|
49
CHANGES
49
CHANGES
@ -7,6 +7,55 @@ contributors are listed. Note that Calamares does not have a historical
|
||||
changelog -- this log starts with version 3.2.0. The release notes on the
|
||||
website will have to do for older versions.
|
||||
|
||||
# 3.2.34 (unreleased) #
|
||||
|
||||
This release contains contributions from (alphabetically by first name):
|
||||
- Artem Grinev
|
||||
|
||||
## Core ##
|
||||
- No core changes yet
|
||||
|
||||
## Modules ##
|
||||
- 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,
|
||||
|
@ -41,10 +41,10 @@
|
||||
# TODO:3.3: Require CMake 3.12
|
||||
cmake_minimum_required( VERSION 3.3 FATAL_ERROR )
|
||||
project( CALAMARES
|
||||
VERSION 3.2.32.1
|
||||
VERSION 3.2.34
|
||||
LANGUAGES C CXX )
|
||||
|
||||
set( CALAMARES_VERSION_RC 0 ) # Set to 0 during release cycle, 1 during development
|
||||
set( CALAMARES_VERSION_RC 1 ) # Set to 0 during release cycle, 1 during development
|
||||
|
||||
### OPTIONS
|
||||
#
|
||||
@ -140,12 +140,13 @@ set( CALAMARES_DESCRIPTION_SUMMARY
|
||||
# NOTE: update these lines by running `txstats.py`, or for full automation
|
||||
# `txstats.py -e`. See also
|
||||
#
|
||||
# Total 70 languages
|
||||
set( _tx_complete ca cs_CZ he hr sq tr_TR uk )
|
||||
set( _tx_good as ast az az_AZ be da de es fa fi_FI fr hi hu it_IT
|
||||
ja ko lt ml nl pt_BR pt_PT ru sk sv tg zh_CN zh_TW )
|
||||
set( _tx_ok ar bg bn el en_GB es_MX es_PR et eu fur gl id is mr nb
|
||||
pl ro sl sr sr@latin th )
|
||||
# Total 71 languages
|
||||
set( _tx_complete az az_AZ be ca cs_CZ da de fi_FI fur he hi hr ja
|
||||
pt_BR sq sv tg uk vi zh_TW )
|
||||
set( _tx_good as ast es fa fr hu it_IT ko lt ml nl pt_PT ru sk
|
||||
tr_TR zh_CN )
|
||||
set( _tx_ok ar bg bn el en_GB es_MX es_PR et eu gl id is mr nb pl
|
||||
ro sl sr sr@latin th )
|
||||
set( _tx_incomplete ca@valencia eo fr_CH gu ie kk kn lo lv mk ne_NP
|
||||
te ur uz )
|
||||
|
||||
@ -190,23 +191,30 @@ include( CMakeColors )
|
||||
|
||||
### C++ SETUP
|
||||
#
|
||||
set( CMAKE_CXX_STANDARD 14 )
|
||||
set( CMAKE_CXX_STANDARD 17 )
|
||||
set( CMAKE_CXX_STANDARD_REQUIRED ON )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror=return-type" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "-g ${CMAKE_CXX_FLAGS_DEBUG}" )
|
||||
set( CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" )
|
||||
set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g" )
|
||||
|
||||
set( CMAKE_C_STANDARD 99 )
|
||||
set( CMAKE_C_STANDARD_REQUIRED ON )
|
||||
|
||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall" )
|
||||
set( CMAKE_C_FLAGS_DEBUG "-g" )
|
||||
set( CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" )
|
||||
set( CMAKE_C_FLAGS_RELEASE "-O4 -DNDEBUG" )
|
||||
set( CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g" )
|
||||
|
||||
set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined -Wl,--fatal-warnings" )
|
||||
|
||||
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
message( STATUS "Found Clang ${CMAKE_CXX_COMPILER_VERSION}, setting up Clang-specific compiler flags." )
|
||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall" )
|
||||
set( CMAKE_C_FLAGS_DEBUG "-g" )
|
||||
set( CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" )
|
||||
set( CMAKE_C_FLAGS_RELEASE "-O4 -DNDEBUG" )
|
||||
set( CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g" )
|
||||
|
||||
# Clang warnings: doing *everything* is counter-productive, since it warns
|
||||
# about things which we can't fix (e.g. C++98 incompatibilities, but
|
||||
# Calamares is C++14).
|
||||
# Calamares is C++17).
|
||||
foreach( CLANG_WARNINGS
|
||||
-Weverything
|
||||
-Wno-c++98-compat
|
||||
@ -218,40 +226,26 @@ if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
-Wno-missing-prototypes
|
||||
-Wno-documentation-unknown-command
|
||||
-Wno-unknown-warning-option
|
||||
-Werror=return-type
|
||||
)
|
||||
string( APPEND CMAKE_CXX_FLAGS " ${CLANG_WARNINGS}" )
|
||||
endforeach()
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOTREACHED='//' -DFALLTHRU='[[clang::fallthrough]]'")
|
||||
|
||||
# Third-party code where we don't care so much about compiler warnings
|
||||
# (because it's uncomfortable to patch) get different flags; use
|
||||
# mark_thirdparty_code( <file> [<file>...] )
|
||||
# to switch off warnings for those sources.
|
||||
set( SUPPRESS_3RDPARTY_WARNINGS "-Wno-everything" )
|
||||
set( SUPPRESS_BOOST_WARNINGS " -Wno-zero-as-null-pointer-constant -Wno-disabled-macro-expansion" )
|
||||
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "-g ${CMAKE_CXX_FLAGS_DEBUG}" )
|
||||
set( CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" )
|
||||
set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g" )
|
||||
|
||||
set( CMAKE_TOOLCHAIN_PREFIX "llvm-" )
|
||||
|
||||
set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" )
|
||||
|
||||
# The path prefix is only relevant for CMake 3.16 and later, fixes #1286
|
||||
set( CMAKE_AUTOMOC_PATH_PREFIX OFF )
|
||||
set( CALAMARES_AUTOMOC_OPTIONS "-butils/moc-warnings.h" )
|
||||
set( CALAMARES_AUTOUIC_OPTIONS --include utils/moc-warnings.h )
|
||||
else()
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--no-undefined" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--fatal-warnings -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Woverloaded-virtual" )
|
||||
|
||||
set( SUPPRESS_3RDPARTY_WARNINGS "" )
|
||||
set( SUPPRESS_BOOST_WARNINGS "" )
|
||||
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOTREACHED='__builtin_unreachable();' -DFALLTHRU='/* */'" )
|
||||
endif()
|
||||
|
||||
# Use mark_thirdparty_code() to reduce warnings from the compiler
|
||||
|
@ -42,6 +42,8 @@ function( calamares_add_test )
|
||||
Qt5::Test
|
||||
)
|
||||
calamares_automoc( ${TEST_NAME} )
|
||||
# We specifically pass in the source directory of the test-being-
|
||||
# compiled, so that it can find test-files in that source dir.
|
||||
target_compile_definitions( ${TEST_NAME} PRIVATE -DBUILD_AS_TEST="${CMAKE_CURRENT_SOURCE_DIR}" ${TEST_DEFINITIONS} )
|
||||
if( TEST_GUI )
|
||||
target_link_libraries( ${TEST_NAME} calamaresui Qt5::Gui )
|
||||
|
10
README.md
10
README.md
@ -10,8 +10,10 @@
|
||||
[![Coverity Scan Build Status](https://scan.coverity.com/projects/5389/badge.svg)](https://scan.coverity.com/projects/5389)
|
||||
[![GitHub license](https://img.shields.io/github/license/calamares/calamares.svg)](https://github.com/calamares/calamares/blob/calamares/LICENSE)
|
||||
|
||||
| [Report a Bug](https://github.com/calamares/calamares/issues/new) | [Translate](https://www.transifex.com/projects/p/calamares/) | [Contribute](CONTRIBUTING.md) | [Freenode (IRC): #calamares](https://webchat.freenode.net/?channel=#calamares?nick=guest|) | [Wiki](https://github.com/calamares/calamares/wiki) |
|
||||
|:-----------------------------------------:|:----------------------:|:-----------------------:|:--------------------------:|:--------------------------:|
|
||||
|
||||
| [Report a Bug](https://github.com/calamares/calamares/issues/new) | [Translate](https://www.transifex.com/projects/p/calamares/) | [Contribute](CONTRIBUTING.md) | [Freenode (IRC): #calamares](https://webchat.freenode.net/?channel=#calamares?nick=guest) | [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
|
||||
@ -37,8 +39,8 @@ Clone Calamares from GitHub. The default branch is called *calamares*.
|
||||
git clone https://github.com/calamares/calamares.git
|
||||
```
|
||||
|
||||
Calamares is a KDE-Frameworks and Qt-based, C++14, CMake-built application.
|
||||
The dependencies are explainged in [CONTRIBUTING.md](CONTRIBUTING.md).
|
||||
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
|
||||
|
||||
|
@ -201,6 +201,10 @@ Name[uk]=Встановити Систему
|
||||
Icon[uk]=calamares
|
||||
GenericName[uk]=Встановлювач системи
|
||||
Comment[uk]=Calamares - Встановлювач системи
|
||||
Name[vi]=Cài đặt hệ thống
|
||||
Icon[vi]=calamares
|
||||
GenericName[vi]=Bộ cài đặt hệ thống
|
||||
Comment[vi]=Calamares — Bộ cài đặt hệ thống
|
||||
Name[zh_CN]=安装系统
|
||||
Icon[zh_CN]=calamares
|
||||
GenericName[zh_CN]=系统安装程序
|
||||
|
@ -22,7 +22,7 @@ export LANG LC_ALL LC_NUMERIC
|
||||
|
||||
AS=$( which astyle )
|
||||
|
||||
CF_VERSIONS="clang-format-7 clang-format-8 clang-format70 clang-format80 clang-format-9.0.1 clang-format"
|
||||
CF_VERSIONS="clang-format-7 clang-format-8 clang-format70 clang-format80 clang-format90 clang-format-9.0.1 clang-format"
|
||||
for _cf in $CF_VERSIONS
|
||||
do
|
||||
# Not an error if this particular clang-format isn't found
|
||||
|
@ -45,6 +45,7 @@ ERR_IMPORT, ERR_USAGE, ERR_FILE_NOT_FOUND, ERR_SYNTAX, ERR_INVALID = range(1,6)
|
||||
#
|
||||
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)
|
||||
|
11
ci/txpush.sh
11
ci/txpush.sh
@ -92,9 +92,16 @@ done
|
||||
# those are done separately.
|
||||
_srcdirs="src/calamares src/libcalamares src/libcalamaresui src/modules src/qml"
|
||||
$LUPDATE -no-obsolete $_srcdirs -ts lang/calamares_en.ts
|
||||
# Updating the TZ only needs to happen when the TZ themselves are updated,
|
||||
# very-very-rarely.
|
||||
# Non-Transifex special-cases
|
||||
#
|
||||
# - timezone names can be translated, but that's 700+ strings I don't want
|
||||
# to inflict on translators normally
|
||||
# - keyboard layouts can be translated, but that's 767 strings
|
||||
#
|
||||
# For both of these, the language / translation only needs to be updated
|
||||
# when the source data is updated, which is very very rarely.
|
||||
# $LUPDATE -no-obsolete -extensions cxxtr src/libcalamares/locale -ts lang/tz_en.ts
|
||||
# $LUPDATE -no-obsolete -extensions cxxtr src/modules/keyboard -ts lang/kb_en.ts
|
||||
|
||||
if test -n "$XMLLINT" ; then
|
||||
TS_FILE="lang/calamares_en.ts"
|
||||
|
@ -619,17 +619,17 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir.</transl
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>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/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Bu yaddaş qurğusunda bölmələrdən biri <strong>quraşdırılmışdır</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Bu yaddaş qurğusu <strong>qeyri-aktiv RAİD</strong> qurğusunun bir hissəsidir.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
@ -2869,7 +2869,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="83"/>
|
||||
<source>Directory not found</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Qovluq tapılmadı</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="84"/>
|
||||
|
@ -619,17 +619,17 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir.</transl
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>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/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Bu yaddaş qurğusunda bölmələrdən biri <strong>quraşdırılmışdır</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Bu yaddaş qurğusu <strong>qeyri-aktiv RAİD</strong> qurğusunun bir hissəsidir.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
@ -2869,7 +2869,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="83"/>
|
||||
<source>Directory not found</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Qovluq tapılmadı</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="84"/>
|
||||
|
@ -532,7 +532,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="305"/>
|
||||
<source><strong>Manual partitioning</strong><br/>You can create or resize partitions yourself.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>Уласнаручная разметка</strong><br/>Вы можаце самастойна ствараць раздзелы або змяняць іх памеры.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="831"/>
|
||||
@ -621,17 +621,17 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>На гэтай прыладзе ўжо ўсталяваная аперацыйная сістэма, але табліца раздзелаў <strong>%1</strong> не такая, як патрэбна <strong>%2</strong>.<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Адзін з раздзелаў гэтай назапашвальнай прылады<strong>прымантаваны</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Гэтая назапашвальная прылада ёсць часткай<strong>неактыўнага RAID</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
@ -734,7 +734,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/Config.cpp" line="334"/>
|
||||
<source>Set timezone to %1/%2.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Вызначыць часавы пояс %1/%2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/Config.cpp" line="372"/>
|
||||
@ -794,22 +794,22 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/Config.cpp" line="244"/>
|
||||
<source><h1>Welcome to the Calamares setup program for %1</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>Вітаем у праграме ўсталёўкі Calamares для %1</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/Config.cpp" line="245"/>
|
||||
<source><h1>Welcome to %1 setup</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>Вітаем у праграме ўсталёўкі %1</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/Config.cpp" line="250"/>
|
||||
<source><h1>Welcome to the Calamares installer for %1</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>Вітаем у праграме ўсталёўкі Calamares для %1</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/Config.cpp" line="251"/>
|
||||
<source><h1>Welcome to the %1 installer</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>Вітаем у праграме ўсталёўкі %1</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="164"/>
|
||||
@ -819,7 +819,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="170"/>
|
||||
<source>'%1' is not allowed as username.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>'%1' немагчыма выкарыстаць як імя карыстальніка.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="177"/>
|
||||
@ -844,7 +844,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="237"/>
|
||||
<source>'%1' is not allowed as hostname.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>'%1' немагчыма выкарыстаць як назву хоста.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="243"/>
|
||||
@ -1817,14 +1817,16 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Map.qml" line="243"/>
|
||||
<source>Timezone: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Часавы пояс: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Map.qml" line="264"/>
|
||||
<source>Please select your preferred location on the map so the installer can suggest the locale
|
||||
and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging
|
||||
to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Калі ласка, абярыце неабходнае месца на мапе, каб праграма прапанавала мову
|
||||
і налады часавога пояса. Вы можаце дакладна наладзіць прапанаваныя параметры ніжэй. Месца на мапе можна абраць перацягваючы
|
||||
яе пры дапамозе мышы. Для павелічэння і памяншэння выкарыстоўвайце кнопкі +/- і кола мышы.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1944,7 +1946,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/oemid/OEMPage.ui" line="42"/>
|
||||
<source><html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html></source>
|
||||
<translation><html><head/><body><p>Увядзіце сюды масавы ідэнтыфікатар. Ён захавецца ў мэтавай сістэме.</p></body></html></translation>
|
||||
<translation><html><head/><body><p>Увядзіце сюды масавы ідэнтыфікатар. Ён захаваецца ў мэтавай сістэме.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/oemid/OEMPage.ui" line="52"/>
|
||||
@ -1970,29 +1972,29 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="37"/>
|
||||
<source>Select your preferred Region, or use the default one based on your current location.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Абярыце пераважны рэгіён альбо выкарыстоўвайце прадвызначаны ў залежнасці ад вашага бягучага месцазнаходжання.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="94"/>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="169"/>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="213"/>
|
||||
<source>Timezone: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Часавы пояс: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="111"/>
|
||||
<source>Select your preferred Zone within your Region.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Абярыце часавы пояс для вашага рэгіёна.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="182"/>
|
||||
<source>Zones</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Часавыя паясы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="229"/>
|
||||
<source>You can fine-tune Language and Locale settings below.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ніжэй вы можаце наладзіць мову і мясцовасць.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2644,12 +2646,12 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="427"/>
|
||||
<source>An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Для таго, каб пачаць %1, патрабуецца сістэмны раздзел EFI.<br/><br/> Каб наладзіць сістэмны раздзел EFI, вярніцеся назад, абярыце альбо стварыце файлавую сістэму FAT32 са сцягам <strong>%3</strong> і пунктам мантавання <strong>%2</strong>.<br/><br/>Вы можаце працягнуць і без наладкі сістэмнага раздзела EFI, але ваша сістэма можа не загрузіцца.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="441"/>
|
||||
<source>An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Для таго, каб пачаць %1, патрабуецца сістэмны раздзел EFI.<br/><br/>Быў наладжаны раздзел з пунктам мантавання<strong>%2</strong> але яго сцяг <strong>%3</strong> не вызначаны.<br/>Каб вызначыць сцяг, вярніцеся назад і адрэдагуйце раздзел.<br/><br/> Вы можаце працягнуць без наладкі раздзела, але ваша сістэма можа не загрузіцца.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="440"/>
|
||||
@ -2868,7 +2870,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="83"/>
|
||||
<source>Directory not found</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Каталог не знойдзены</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="84"/>
|
||||
@ -2903,7 +2905,8 @@ Output:
|
||||
<location filename="../src/modules/welcomeq/Recommended.qml" line="40"/>
|
||||
<source><p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/>
|
||||
Setup can continue, but some features might be disabled.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><p>Гэты камп’ютар адпавядае не ўсім патрэбам для ўсталёўкі %1.<br/>
|
||||
Можна працягнуць усталёўку, але некаторыя магчымасці могуць быць недаступнымі.</p></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3014,13 +3017,15 @@ Output:
|
||||
<location filename="../src/modules/welcomeq/Requirements.qml" line="38"/>
|
||||
<source><p>This computer does not satisfy the minimum requirements for installing %1.<br/>
|
||||
Installation cannot continue.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><p>Гэты камп’ютар не адпавядае мінімальным патрэбам для ўсталёўкі %1.<p>
|
||||
Немагчыма працягнуць. <br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcomeq/Requirements.qml" line="40"/>
|
||||
<source><p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/>
|
||||
Setup can continue, but some features might be disabled.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><p>Гэты камп’ютар адпавядае не ўсім патрэбам для ўсталёўкі %1.<br/>
|
||||
Можна працягнуць усталёўку, але некаторыя магчымасці могуць быць недаступнымі.</p></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3038,7 +3043,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="170"/>
|
||||
<source>The file-system resize job has an invalid configuration and will not run.</source>
|
||||
<translation>У задачы па змене памеру файлавай сістэмы хібная канфігурафыя, таму яна не будзе выконвацца.</translation>
|
||||
<translation>У задачы па змене памеру файлавай сістэмы хібная канфігурацыя, таму яна не будзе выконвацца.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="175"/>
|
||||
@ -3486,28 +3491,28 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="122"/>
|
||||
<source>KDE user feedback</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Зваротная сувязь KDE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="128"/>
|
||||
<source>Configuring KDE user feedback.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Наладка зваротнай сувязі KDE.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="150"/>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="156"/>
|
||||
<source>Error in KDE user feedback configuration.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Падчас наладкі зваротнай сувязі KDE адбылася памылка.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="151"/>
|
||||
<source>Could not configure KDE user feedback correctly, script error %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Не атрымалася наладзіць зваротную сувязь KDE, памылка скрыпта %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="157"/>
|
||||
<source>Could not configure KDE user feedback correctly, Calamares error %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Не атрымалася наладзіць зваротную сувязь KDE, памылка Calamares %1.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3554,7 +3559,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/page_trackingstep.ui" line="76"/>
|
||||
<source><html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><html><head/><body><p>Пстрыкніце сюды, каб не адпраўляць <span style=" font-weight:600;">ніякіх звестак</span> пра вашу ўсталёўку.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/page_trackingstep.ui" line="275"/>
|
||||
@ -3564,22 +3569,22 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingPage.cpp" line="86"/>
|
||||
<source>Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Адсочванне дапамагае праекту %1 бачыць, як часта ён усталёўваецца, на якім абсталяванні ён усталёўваецца, якія праграмы выкарыстоўваюцца. Каб убачыць, што будзе адпраўлена, пстрыкніце па значку ля кожнай вобласці.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingPage.cpp" line="91"/>
|
||||
<source>By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Абраўшы гэты пункт вы адправіце звесткі пра сваю канфігурацыю ўсталёўкі і ваша абсталяванне. Звесткі адправяцца <b>адзін раз</b> пасля завяршэння ўсталёўкі.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingPage.cpp" line="94"/>
|
||||
<source>By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Абраўшы гэты пункт вы будзеце перыядычна адпраўляць звесткі пра усталёўку, абсталяванне і праграмы вашага <b>камп'ютара</b> на %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingPage.cpp" line="98"/>
|
||||
<source>By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Абраўшы гэты пункт вы будзеце перыядычна адпраўляць звесткі пра усталёўку, абсталяванне, праграмы <b>карыстальніка</b> і вобласці іх выкарыстання на %1.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3625,7 +3630,7 @@ Output:
|
||||
<location filename="../src/calamares/VariantModel.cpp" line="232"/>
|
||||
<source>Key</source>
|
||||
<comment>Column header for key/value</comment>
|
||||
<translation>Клавіша</translation>
|
||||
<translation>Ключ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/calamares/VariantModel.cpp" line="236"/>
|
||||
@ -3783,7 +3788,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="238"/>
|
||||
<source><h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Аўтарскія правы 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Аўтарскія правы 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Шчырыя падзякі <a href="https://calamares.io/team/">камандзе распрацоўкі Calamares</a> і <a href="https://www.transifex.com/calamares/calamares/">камандзе перакладчыкаў Calamares</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> распрацоўваецца пры падтрымцы<br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3818,7 +3823,17 @@ Output:
|
||||
development is sponsored by <br/>
|
||||
<a href='http://www.blue-systems.com/'>Blue Systems</a> -
|
||||
Liberating Software.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>%1</h1><br/>
|
||||
<strong>%2<br/>
|
||||
for %3</strong><br/><br/>
|
||||
Аўтарскія правы 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>
|
||||
Аўтарскія правы 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>
|
||||
Шчырыя падзякі <a href='https://calamares.io/team/'>камандзе распрацоўкі Calamares </a>
|
||||
і <a href='https://www.transifex.com/calamares/calamares/'> перакладчыкам Calamares</a>.<br/><br/>
|
||||
<a href='https://calamares.io/'>Calamares</a>
|
||||
распрацоўваецца пры падтрымцы <br/>
|
||||
<a href='http://www.blue-systems.com/'>Blue Systems</a> -
|
||||
Liberating Software.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcomeq/about.qml" line="96"/>
|
||||
@ -3832,13 +3847,15 @@ Output:
|
||||
<location filename="../src/modules/localeq/i18n.qml" line="46"/>
|
||||
<source><h1>Languages</h1> </br>
|
||||
The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>Мовы</h1></br>
|
||||
Сістэмныя рэгіянальныя налады вызначаюць мову і кадаванне для пэўных элементаў інтэрфейсу загаднага радка. Бягучыя налады <strong>%1</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/i18n.qml" line="106"/>
|
||||
<source><h1>Locales</h1> </br>
|
||||
The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>Рэгіянальныя налады</h1></br>
|
||||
Сістэмныя рэгіянальныя налады вызначаюць фармат нумароў і датаў. Бягучыя налады <strong>%1</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/i18n.qml" line="158"/>
|
||||
@ -3866,7 +3883,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="60"/>
|
||||
<source>Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Пстрыкніце на пераважную мадэль клавіятуры, каб абраць раскладку і варыянт, альбо выкарыстоўвайце прадвызначаную ў залежнасці ад выяўленага абсталявання.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="253"/>
|
||||
@ -3881,7 +3898,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="276"/>
|
||||
<source>Keyboard Variant</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Варыянт клавіятуры</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="386"/>
|
||||
@ -3894,7 +3911,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/localeq.qml" line="81"/>
|
||||
<source>Change</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Змяніць</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3932,7 +3949,28 @@ Output:
|
||||
</ul>
|
||||
|
||||
<p>The vertical scrollbar is adjustable, current width set to 10.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h3>%1</h3>
|
||||
<p>Гэта прыклад файла QML, у якім паказваюцца параметры RichText са зменным змесцівам.</p>
|
||||
|
||||
<p>QML з RichText можа выкарыстоўваць пазнакі HTML. Зменнае змесціва карысна для сэнсарных экранаў.</p>
|
||||
|
||||
<p><b>Гэта паўтлусты тэкст</b></p>
|
||||
<p><i>Гэта тэкст курсівам</i></p>
|
||||
<p><u>Гэта падкрэслены</u></p>
|
||||
<p><center>Гэта выраўнаваны па цэнтры тэкст.</center><s>
|
||||
<p><s>Гэта закрэслены тэкст</s></p>
|
||||
|
||||
<p>Прыклад кода:
|
||||
<code>ls -l /
|
||||
/home</code></p>
|
||||
|
||||
<p><b>Спісы:</b></p>
|
||||
<ul>
|
||||
<li>Сістэмы з Intel CPU</li>
|
||||
<li>Сістэмы з AMD CPU</li>
|
||||
</ul>
|
||||
|
||||
<p>Вертыкальная паласа пракруткі наладжваецца. Бягучая шырыня - 10.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcomeq/release_notes.qml" line="76"/>
|
||||
@ -3945,7 +3983,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="36"/>
|
||||
<source>Pick your user name and credentials to login and perform admin tasks</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Абярыце свае імя карыстальніка і ўліковыя даныя для ўваходу і выканання задач адміністратара</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="52"/>
|
||||
@ -3965,12 +4003,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="87"/>
|
||||
<source>Login Name</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Лагін</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="103"/>
|
||||
<source>If more than one person will use this computer, you can create multiple accounts after installation.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Калі камп’ютарам карыстаецца некалькі чалавек, то вы можаце стварыць для іх акаўнты пасля завяршэння ўсталёўкі.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="118"/>
|
||||
@ -3985,7 +4023,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="140"/>
|
||||
<source>This name will be used if you make the computer visible to others on a network.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Назва будзе выкарыстоўвацца для пазначэння камп’ютара ў сетцы.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="155"/>
|
||||
@ -4005,12 +4043,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="204"/>
|
||||
<source>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Увядзіце двойчы аднолькавы пароль. Гэта неабходна для таго, каб пазбегнуць памылак. Надзейны пароль павінен складацца з літар, лічбаў, знакаў пунктуацыі. Ён павінен змяшчаць прынамсі 8 знакаў, яго перыядычна трэба змяняць.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="216"/>
|
||||
<source>Validate passwords quality</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Праверка якасці пароляў</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="226"/>
|
||||
@ -4020,12 +4058,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="234"/>
|
||||
<source>Log in automatically without asking for the password</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Аўтаматычна ўваходзіць без уводу пароля</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="243"/>
|
||||
<source>Reuse user password as root password</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Выкарыстоўваць пароль карыстальніка як пароль адміністратара</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="253"/>
|
||||
@ -4035,22 +4073,22 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="268"/>
|
||||
<source>Choose a root password to keep your account safe.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Абярыце пароль адміністратара для абароны вашага акаўнта.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="279"/>
|
||||
<source>Root Password</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Пароль адміністратара</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="298"/>
|
||||
<source>Repeat Root Password</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Паўтарыце пароль адміністратара</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="318"/>
|
||||
<source>Enter the same password twice, so that it can be checked for typing errors.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Увядзіце пароль двойчы, каб пазбегнуць памылак уводу.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4059,7 +4097,8 @@ Output:
|
||||
<location filename="../src/modules/welcomeq/welcomeq.qml" line="35"/>
|
||||
<source><h3>Welcome to the %1 <quote>%2</quote> installer</h3>
|
||||
<p>This program will ask you some questions and set up %1 on your computer.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h3>Вітаем у %1, праграме ўсталёўкі<quote>%2</quote> </h3>
|
||||
<p>Гэтая праграма дапаможа вам усталяваць %1 на ваш камп'ютар.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="61"/>
|
||||
<source>The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode.</source>
|
||||
<translation><strong>Среда за начално зареждане</strong> на тази система.<br><br>Старите x86 системи поддържат само <strong>BIOS</strong>.<br>Модерните системи обикновено използват <strong>EFI</strong>, но може също така да използват BIOS, ако са стартирани в режим на съвместимост.</translation>
|
||||
<translation><strong>Средата за начално зареждане</strong> на тази система.<br><br>Старите x86 системи поддържат само <strong>BIOS</strong>.<br>Модерните системи обикновено използват <strong>EFI</strong>, но може също така да използват BIOS, ако са стартирани в режим на съвместимост.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="71"/>
|
||||
@ -132,7 +132,7 @@
|
||||
<message>
|
||||
<location filename="../src/libcalamares/JobExample.cpp" line="29"/>
|
||||
<source>Job failed (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Задачата се провали (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/JobExample.cpp" line="30"/>
|
||||
@ -153,7 +153,7 @@
|
||||
<message>
|
||||
<location filename="../src/libcalamares/JobExample.cpp" line="17"/>
|
||||
<source>Example job (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Примерна задача (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -199,7 +199,7 @@
|
||||
<message>
|
||||
<location filename="../src/libcalamares/PythonJob.cpp" line="229"/>
|
||||
<source>Main script file %1 for python job %2 is not readable.</source>
|
||||
<translation>Файлът на главен скрипт %1 за python задача %2 не се чете.</translation>
|
||||
<translation>Файла на главен скрипт %1 за python задача %2 не се чете.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/PythonJob.cpp" line="297"/>
|
||||
@ -3755,12 +3755,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="222"/>
|
||||
<source><h1>Welcome to the Calamares installer for %1.</h1></source>
|
||||
<translation><h1>Добре дошли при инсталатора Calamares на %1.</h1></translation>
|
||||
<translation><h1>Добре дошли в инсталатора Calamares за %1.</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="223"/>
|
||||
<source><h1>Welcome to the %1 installer.</h1></source>
|
||||
<translation><h1>Добре дошли при инсталатора на %1.</h1></translation>
|
||||
<translation><h1>Добре дошли в инсталатора на %1.</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="228"/>
|
||||
|
@ -3337,7 +3337,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="40"/>
|
||||
<source>Set password for user %1</source>
|
||||
<translation>ব্যবহারকারীর জন্য গুপ্ত-সংকেত নির্ধারণ করুন % 1</translation>
|
||||
<translation>ব্যবহারকারীর জন্য গুপ্ত-সংকেত নির্ধারণ করুন %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="47"/>
|
||||
@ -3352,7 +3352,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="82"/>
|
||||
<source>rootMountPoint is %1</source>
|
||||
<translation>রুটমাউন্টপয়েন্টটি % 1</translation>
|
||||
<translation>রুটমাউন্টপয়েন্টটি %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="88"/>
|
||||
@ -3367,7 +3367,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="97"/>
|
||||
<source>Cannot set password for user %1.</source>
|
||||
<translation>% 1 ব্যবহারকারীর জন্য পাসওয়ার্ড নির্ধারণ করা যাচ্ছে না।</translation>
|
||||
<translation>%1 ব্যবহারকারীর জন্য পাসওয়ার্ড নির্ধারণ করা যাচ্ছে না।</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="98"/>
|
||||
|
@ -619,7 +619,7 @@ L'instal·lador es tancarà i tots els canvis es perdran.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Aquest dispositiu d'emmagatzematge ja té un sistema operatiu, però la taula de particions <strong>%1</strong> és diferent de la necessària: <strong>%2</strong>.<br/> </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
|
@ -623,7 +623,7 @@ Instalační program bude ukončen a všechny změny ztraceny.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Na tomto úložném zařízení se už nachází operační systém, ale tabulka rozdělení <strong>%1</strong> je jiná než potřebná <strong>%2</strong>.<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
|
@ -619,17 +619,17 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt.</translation
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Lagerenheden har allerede et styresystem på den men partitionstabellen <strong>%1</strong> er ikke magen til den nødvendige <strong>%2</strong>.<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Lagerenhden har en af sine partitioner <strong>monteret</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Lagringsenheden er en del af en <strong>inaktiv RAID</strong>-enhed.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
|
@ -619,17 +619,17 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren.
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Auf diesem Speichergerät befindet sich bereits ein Betriebssystem, aber die Partitionstabelle <strong>%1</strong> unterscheidet sich von den erforderlichen <strong>%2</strong><br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Bei diesem Speichergerät ist eine seiner Partitionen <strong>eingehängt</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Dieses Speichergerät ist ein Teil eines <strong>inaktiven RAID</strong>-Geräts.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
@ -2868,7 +2868,7 @@ Ausgabe:
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="83"/>
|
||||
<source>Directory not found</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Verzeichnis nicht gefunden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="84"/>
|
||||
|
@ -4,17 +4,17 @@
|
||||
<context>
|
||||
<name>BootInfoWidget</name>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="61"/>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="62"/>
|
||||
<source>The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode.</source>
|
||||
<translation>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.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="71"/>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="72"/>
|
||||
<source>This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own.</source>
|
||||
<translation>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.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="83"/>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="84"/>
|
||||
<source>This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own.</source>
|
||||
<translation>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.</translation>
|
||||
</message>
|
||||
@ -533,7 +533,7 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<translation><strong>Manual partitioning</strong><br/>You can create or resize partitions yourself.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="831"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="828"/>
|
||||
<source>Reuse %1 as home partition for %2.</source>
|
||||
<translation>Reuse %1 as home partition for %2.</translation>
|
||||
</message>
|
||||
@ -558,101 +558,101 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<translation><strong>Select a partition to install on</strong></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1146"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1148"/>
|
||||
<source>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</source>
|
||||
<translation>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1154"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1156"/>
|
||||
<source>The EFI system partition at %1 will be used for starting %2.</source>
|
||||
<translation>The EFI system partition at %1 will be used for starting %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1162"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1164"/>
|
||||
<source>EFI system partition:</source>
|
||||
<translation>EFI system partition:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1296"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1297"/>
|
||||
<source>This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source>
|
||||
<translation>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.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1301"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1338"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1360"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1385"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1302"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1339"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1361"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1386"/>
|
||||
<source><strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device.</source>
|
||||
<translation><strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1305"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1334"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1356"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1381"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1306"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1335"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1357"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1382"/>
|
||||
<source><strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1.</source>
|
||||
<translation><strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1309"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1343"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1364"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1389"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1310"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1344"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1365"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1390"/>
|
||||
<source><strong>Replace a partition</strong><br/>Replaces a partition with %1.</source>
|
||||
<translation><strong>Replace a partition</strong><br/>Replaces a partition with %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1328"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1329"/>
|
||||
<source>This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source>
|
||||
<translation>This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1351"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1352"/>
|
||||
<source>This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source>
|
||||
<translation>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.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1376"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1377"/>
|
||||
<source>This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source>
|
||||
<translation>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.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1449"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation>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/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1472"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation>This storage device has one of its partitions <strong>mounted</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1477"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation>This storage device is a part of an <strong>inactive RAID</strong> device.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1604"/>
|
||||
<source>No Swap</source>
|
||||
<translation>No Swap</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1611"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1612"/>
|
||||
<source>Reuse Swap</source>
|
||||
<translation>Reuse Swap</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1614"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1615"/>
|
||||
<source>Swap (no Hibernate)</source>
|
||||
<translation>Swap (no Hibernate)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1617"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1618"/>
|
||||
<source>Swap (with Hibernate)</source>
|
||||
<translation>Swap (with Hibernate)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1620"/>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1621"/>
|
||||
<source>Swap to file</source>
|
||||
<translation>Swap to file</translation>
|
||||
</message>
|
||||
@ -720,12 +720,12 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<context>
|
||||
<name>Config</name>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/Config.cpp" line="340"/>
|
||||
<location filename="../src/modules/keyboard/Config.cpp" line="326"/>
|
||||
<source>Set keyboard model to %1.<br/></source>
|
||||
<translation>Set keyboard model to %1.<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/Config.cpp" line="347"/>
|
||||
<location filename="../src/modules/keyboard/Config.cpp" line="333"/>
|
||||
<source>Set keyboard layout to %1/%2.</source>
|
||||
<translation>Set keyboard layout to %1/%2.</translation>
|
||||
</message>
|
||||
@ -810,47 +810,47 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<translation><h1>Welcome to the %1 installer</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="164"/>
|
||||
<location filename="../src/modules/users/Config.cpp" line="200"/>
|
||||
<source>Your username is too long.</source>
|
||||
<translation>Your username is too long.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="170"/>
|
||||
<location filename="../src/modules/users/Config.cpp" line="206"/>
|
||||
<source>'%1' is not allowed as username.</source>
|
||||
<translation>'%1' is not allowed as username.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="177"/>
|
||||
<location filename="../src/modules/users/Config.cpp" line="213"/>
|
||||
<source>Your username must start with a lowercase letter or underscore.</source>
|
||||
<translation>Your username must start with a lowercase letter or underscore.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="181"/>
|
||||
<location filename="../src/modules/users/Config.cpp" line="217"/>
|
||||
<source>Only lowercase letters, numbers, underscore and hyphen are allowed.</source>
|
||||
<translation>Only lowercase letters, numbers, underscore and hyphen are allowed.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="227"/>
|
||||
<location filename="../src/modules/users/Config.cpp" line="262"/>
|
||||
<source>Your hostname is too short.</source>
|
||||
<translation>Your hostname is too short.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="231"/>
|
||||
<location filename="../src/modules/users/Config.cpp" line="266"/>
|
||||
<source>Your hostname is too long.</source>
|
||||
<translation>Your hostname is too long.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="237"/>
|
||||
<location filename="../src/modules/users/Config.cpp" line="272"/>
|
||||
<source>'%1' is not allowed as hostname.</source>
|
||||
<translation>'%1' is not allowed as hostname.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="243"/>
|
||||
<location filename="../src/modules/users/Config.cpp" line="278"/>
|
||||
<source>Only letters, numbers, underscore and hyphen are allowed.</source>
|
||||
<translation>Only letters, numbers, underscore and hyphen are allowed.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="446"/>
|
||||
<location filename="../src/modules/users/Config.cpp" line="481"/>
|
||||
<source>Your passwords do not match!</source>
|
||||
<translation>Your passwords do not match!</translation>
|
||||
</message>
|
||||
@ -1018,29 +1018,39 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<context>
|
||||
<name>CreateUserJob</name>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="40"/>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="36"/>
|
||||
<source>Create user %1</source>
|
||||
<translation>Create user %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="47"/>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="43"/>
|
||||
<source>Create user <strong>%1</strong>.</source>
|
||||
<translation>Create user <strong>%1</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="54"/>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="50"/>
|
||||
<source>Creating user %1.</source>
|
||||
<translation>Creating user %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="186"/>
|
||||
<source>Cannot create sudoers file for writing.</source>
|
||||
<translation>Cannot create sudoers file for writing.</translation>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="126"/>
|
||||
<source>Preserving home directory</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="181"/>
|
||||
<source>Cannot chmod sudoers file.</source>
|
||||
<translation>Cannot chmod sudoers file.</translation>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="143"/>
|
||||
<source>Creating user %1</source>
|
||||
<translation type="unfinished">Creating user %1. {1?}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="151"/>
|
||||
<source>Configuring user %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CreateUserJob.cpp" line="159"/>
|
||||
<source>Setting file permissions</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1243,7 +1253,7 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<translation>Flags:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/EditExistingPartitionDialog.cpp" line="272"/>
|
||||
<location filename="../src/modules/partition/gui/EditExistingPartitionDialog.cpp" line="275"/>
|
||||
<source>Mountpoint already in use. Please select another one.</source>
|
||||
<translation>Mountpoint already in use. Please select another one.</translation>
|
||||
</message>
|
||||
@ -1558,23 +1568,10 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<translation>Script</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeyboardPage</name>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/KeyboardPage.cpp" line="204"/>
|
||||
<source>Set keyboard model to %1.<br/></source>
|
||||
<translation>Set keyboard model to %1.<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/KeyboardPage.cpp" line="208"/>
|
||||
<source>Set keyboard layout to %1/%2.</source>
|
||||
<translation>Set keyboard layout to %1/%2.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeyboardQmlViewStep</name>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/KeyboardQmlViewStep.cpp" line="33"/>
|
||||
<location filename="../src/modules/keyboardq/KeyboardQmlViewStep.cpp" line="32"/>
|
||||
<source>Keyboard</source>
|
||||
<translation>Keyboard</translation>
|
||||
</message>
|
||||
@ -1582,7 +1579,7 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<context>
|
||||
<name>KeyboardViewStep</name>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/KeyboardViewStep.cpp" line="45"/>
|
||||
<location filename="../src/modules/keyboard/KeyboardViewStep.cpp" line="42"/>
|
||||
<source>Keyboard</source>
|
||||
<translation>Keyboard</translation>
|
||||
</message>
|
||||
@ -1664,59 +1661,59 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<context>
|
||||
<name>LicenseWidget</name>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="87"/>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="88"/>
|
||||
<source>URL: %1</source>
|
||||
<translation>URL: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="108"/>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="109"/>
|
||||
<source><strong>%1 driver</strong><br/>by %2</source>
|
||||
<extracomment>%1 is an untranslatable product name, example: Creative Audigy driver</extracomment>
|
||||
<translation><strong>%1 driver</strong><br/>by %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="115"/>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="116"/>
|
||||
<source><strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font></source>
|
||||
<extracomment>%1 is usually a vendor name, example: Nvidia graphics driver</extracomment>
|
||||
<translation><strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="121"/>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="122"/>
|
||||
<source><strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font></source>
|
||||
<translation><strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="127"/>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="128"/>
|
||||
<source><strong>%1 codec</strong><br/><font color="Grey">by %2</font></source>
|
||||
<translation><strong>%1 codec</strong><br/><font color="Grey">by %2</font></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="133"/>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="134"/>
|
||||
<source><strong>%1 package</strong><br/><font color="Grey">by %2</font></source>
|
||||
<translation><strong>%1 package</strong><br/><font color="Grey">by %2</font></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="139"/>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="140"/>
|
||||
<source><strong>%1</strong><br/><font color="Grey">by %2</font></source>
|
||||
<translation><strong>%1</strong><br/><font color="Grey">by %2</font></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="162"/>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="163"/>
|
||||
<source>File: %1</source>
|
||||
<translation>File: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="185"/>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="186"/>
|
||||
<source>Hide license text</source>
|
||||
<translation>Hide license text</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="185"/>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="186"/>
|
||||
<source>Show the license text</source>
|
||||
<translation>Show the license text</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="189"/>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="190"/>
|
||||
<source>Open license agreement in browser.</source>
|
||||
<translation>Open license agreement in browser.</translation>
|
||||
</message>
|
||||
@ -1724,18 +1721,18 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<context>
|
||||
<name>LocalePage</name>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/LocalePage.cpp" line="124"/>
|
||||
<location filename="../src/modules/locale/LocalePage.cpp" line="130"/>
|
||||
<source>Region:</source>
|
||||
<translation>Region:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/LocalePage.cpp" line="125"/>
|
||||
<location filename="../src/modules/locale/LocalePage.cpp" line="131"/>
|
||||
<source>Zone:</source>
|
||||
<translation>Zone:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/LocalePage.cpp" line="126"/>
|
||||
<location filename="../src/modules/locale/LocalePage.cpp" line="127"/>
|
||||
<location filename="../src/modules/locale/LocalePage.cpp" line="132"/>
|
||||
<location filename="../src/modules/locale/LocalePage.cpp" line="133"/>
|
||||
<source>&Change...</source>
|
||||
<translation>&Change...</translation>
|
||||
</message>
|
||||
@ -2057,188 +2054,215 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<source>The password contains forbidden words in some form</source>
|
||||
<translation>The password contains forbidden words in some form</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="175"/>
|
||||
<source>The password contains less than %1 digits</source>
|
||||
<translation>The password contains less than %1 digits</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="178"/>
|
||||
<source>The password contains too few digits</source>
|
||||
<translation>The password contains too few digits</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="182"/>
|
||||
<source>The password contains less than %1 uppercase letters</source>
|
||||
<translation>The password contains less than %1 uppercase letters</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="185"/>
|
||||
<source>The password contains too few uppercase letters</source>
|
||||
<translation>The password contains too few uppercase letters</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="189"/>
|
||||
<source>The password contains less than %1 lowercase letters</source>
|
||||
<translation>The password contains less than %1 lowercase letters</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="192"/>
|
||||
<source>The password contains too few lowercase letters</source>
|
||||
<translation>The password contains too few lowercase letters</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="196"/>
|
||||
<source>The password contains less than %1 non-alphanumeric characters</source>
|
||||
<translation>The password contains less than %1 non-alphanumeric characters</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="200"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="201"/>
|
||||
<source>The password contains too few non-alphanumeric characters</source>
|
||||
<translation>The password contains too few non-alphanumeric characters</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="204"/>
|
||||
<source>The password is shorter than %1 characters</source>
|
||||
<translation>The password is shorter than %1 characters</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="207"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="208"/>
|
||||
<source>The password is too short</source>
|
||||
<translation>The password is too short</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="209"/>
|
||||
<source>The password is just rotated old one</source>
|
||||
<translation>The password is just rotated old one</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="213"/>
|
||||
<source>The password contains less than %1 character classes</source>
|
||||
<translation>The password contains less than %1 character classes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="216"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="217"/>
|
||||
<source>The password does not contain enough character classes</source>
|
||||
<translation>The password does not contain enough character classes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="220"/>
|
||||
<source>The password contains more than %1 same characters consecutively</source>
|
||||
<translation>The password contains more than %1 same characters consecutively</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="224"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="226"/>
|
||||
<source>The password contains too many same characters consecutively</source>
|
||||
<translation>The password contains too many same characters consecutively</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="228"/>
|
||||
<source>The password contains more than %1 characters of the same class consecutively</source>
|
||||
<translation>The password contains more than %1 characters of the same class consecutively</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="232"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="236"/>
|
||||
<source>The password contains too many characters of the same class consecutively</source>
|
||||
<translation>The password contains too many characters of the same class consecutively</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="237"/>
|
||||
<source>The password contains monotonic sequence longer than %1 characters</source>
|
||||
<translation>The password contains monotonic sequence longer than %1 characters</translation>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="175"/>
|
||||
<source>The password contains fewer than %n digits</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform/>
|
||||
<numerusform/>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="182"/>
|
||||
<source>The password contains fewer than %n uppercase letters</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform/>
|
||||
<numerusform/>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="189"/>
|
||||
<source>The password contains fewer than %n lowercase letters</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform/>
|
||||
<numerusform/>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="196"/>
|
||||
<source>The password contains fewer than %n non-alphanumeric characters</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform/>
|
||||
<numerusform/>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="205"/>
|
||||
<source>The password is shorter than %n characters</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform/>
|
||||
<numerusform/>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="210"/>
|
||||
<source>The password is a rotated version of the previous one</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="214"/>
|
||||
<source>The password contains fewer than %n character classes</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform/>
|
||||
<numerusform/>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="221"/>
|
||||
<source>The password contains more than %n same characters consecutively</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform/>
|
||||
<numerusform/>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="230"/>
|
||||
<source>The password contains more than %n characters of the same class consecutively</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform/>
|
||||
<numerusform/>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="241"/>
|
||||
<source>The password contains monotonic sequence longer than %n characters</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform/>
|
||||
<numerusform/>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="247"/>
|
||||
<source>The password contains too long of a monotonic character sequence</source>
|
||||
<translation>The password contains too long of a monotonic character sequence</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="244"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="250"/>
|
||||
<source>No password supplied</source>
|
||||
<translation>No password supplied</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="246"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="252"/>
|
||||
<source>Cannot obtain random numbers from the RNG device</source>
|
||||
<translation>Cannot obtain random numbers from the RNG device</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="248"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="254"/>
|
||||
<source>Password generation failed - required entropy too low for settings</source>
|
||||
<translation>Password generation failed - required entropy too low for settings</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="254"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="260"/>
|
||||
<source>The password fails the dictionary check - %1</source>
|
||||
<translation>The password fails the dictionary check - %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="257"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="263"/>
|
||||
<source>The password fails the dictionary check</source>
|
||||
<translation>The password fails the dictionary check</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="261"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="267"/>
|
||||
<source>Unknown setting - %1</source>
|
||||
<translation>Unknown setting - %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="265"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="271"/>
|
||||
<source>Unknown setting</source>
|
||||
<translation>Unknown setting</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="269"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="275"/>
|
||||
<source>Bad integer value of setting - %1</source>
|
||||
<translation>Bad integer value of setting - %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="274"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="280"/>
|
||||
<source>Bad integer value</source>
|
||||
<translation>Bad integer value</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="278"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="284"/>
|
||||
<source>Setting %1 is not of integer type</source>
|
||||
<translation>Setting %1 is not of integer type</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="283"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="289"/>
|
||||
<source>Setting is not of integer type</source>
|
||||
<translation>Setting is not of integer type</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="287"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="293"/>
|
||||
<source>Setting %1 is not of string type</source>
|
||||
<translation>Setting %1 is not of string type</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="292"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="298"/>
|
||||
<source>Setting is not of string type</source>
|
||||
<translation>Setting is not of string type</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="294"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="300"/>
|
||||
<source>Opening the configuration file failed</source>
|
||||
<translation>Opening the configuration file failed</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="296"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="302"/>
|
||||
<source>The configuration file is malformed</source>
|
||||
<translation>The configuration file is malformed</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="298"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="304"/>
|
||||
<source>Fatal failure</source>
|
||||
<translation>Fatal failure</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="300"/>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="306"/>
|
||||
<source>Unknown error</source>
|
||||
<translation>Unknown error</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="651"/>
|
||||
<location filename="../src/modules/users/Config.cpp" line="729"/>
|
||||
<source>Password is empty</source>
|
||||
<translation>Password is empty</translation>
|
||||
</message>
|
||||
@ -2572,117 +2596,117 @@ The installer will quit and all changes will be lost.</translation>
|
||||
<context>
|
||||
<name>PartitionViewStep</name>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="69"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="70"/>
|
||||
<source>Gathering system information...</source>
|
||||
<translation>Gathering system information...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="124"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="125"/>
|
||||
<source>Partitions</source>
|
||||
<translation>Partitions</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="162"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="163"/>
|
||||
<source>Install %1 <strong>alongside</strong> another operating system.</source>
|
||||
<translation>Install %1 <strong>alongside</strong> another operating system.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="166"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="167"/>
|
||||
<source><strong>Erase</strong> disk and install %1.</source>
|
||||
<translation><strong>Erase</strong> disk and install %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="169"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="170"/>
|
||||
<source><strong>Replace</strong> a partition with %1.</source>
|
||||
<translation><strong>Replace</strong> a partition with %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="173"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="174"/>
|
||||
<source><strong>Manual</strong> partitioning.</source>
|
||||
<translation><strong>Manual</strong> partitioning.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="186"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="187"/>
|
||||
<source>Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3).</source>
|
||||
<translation>Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="193"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="194"/>
|
||||
<source><strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1.</source>
|
||||
<translation><strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="199"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="200"/>
|
||||
<source><strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1.</source>
|
||||
<translation><strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="206"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="207"/>
|
||||
<source><strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2).</source>
|
||||
<translation><strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="215"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="216"/>
|
||||
<source>Disk <strong>%1</strong> (%2)</source>
|
||||
<translation>Disk <strong>%1</strong> (%2)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="241"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="242"/>
|
||||
<source>Current:</source>
|
||||
<translation>Current:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="259"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="260"/>
|
||||
<source>After:</source>
|
||||
<translation>After:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="426"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="427"/>
|
||||
<source>No EFI system partition configured</source>
|
||||
<translation>No EFI system partition configured</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="427"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="428"/>
|
||||
<source>An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start.</source>
|
||||
<translation>An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="441"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="442"/>
|
||||
<source>An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start.</source>
|
||||
<translation>An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="440"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="441"/>
|
||||
<source>EFI system partition flag not set</source>
|
||||
<translation>EFI system partition flag not set</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="467"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="468"/>
|
||||
<source>Option to use GPT on BIOS</source>
|
||||
<translation>Option to use GPT on BIOS</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="468"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="469"/>
|
||||
<source>A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT.</source>
|
||||
<translation>A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="496"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="497"/>
|
||||
<source>Boot partition not encrypted</source>
|
||||
<translation>Boot partition not encrypted</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="497"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="498"/>
|
||||
<source>A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window.</source>
|
||||
<translation>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.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="626"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="627"/>
|
||||
<source>has at least one disk device available.</source>
|
||||
<translation>has at least one disk device available.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="627"/>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="628"/>
|
||||
<source>There are no partitions to install on.</source>
|
||||
<translation>There are no partitions to install on.</translation>
|
||||
</message>
|
||||
@ -2842,13 +2866,8 @@ Output:
|
||||
<translation>swap</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="90"/>
|
||||
<source>Default Keyboard Model</source>
|
||||
<translation>Default Keyboard Model</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="136"/>
|
||||
<location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="173"/>
|
||||
<location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="130"/>
|
||||
<location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="167"/>
|
||||
<source>Default</source>
|
||||
<translation>Default</translation>
|
||||
</message>
|
||||
@ -3232,29 +3251,29 @@ Output:
|
||||
<context>
|
||||
<name>SetKeyboardLayoutJob</name>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="53"/>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="55"/>
|
||||
<source>Set keyboard model to %1, layout to %2-%3</source>
|
||||
<translation>Set keyboard model to %1, layout to %2-%3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="356"/>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="368"/>
|
||||
<source>Failed to write keyboard configuration for the virtual console.</source>
|
||||
<translation>Failed to write keyboard configuration for the virtual console.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="357"/>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="361"/>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="368"/>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="369"/>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="397"/>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="414"/>
|
||||
<source>Failed to write to %1</source>
|
||||
<translation>Failed to write to %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="360"/>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="396"/>
|
||||
<source>Failed to write keyboard configuration for X11.</source>
|
||||
<translation>Failed to write keyboard configuration for X11.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="367"/>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="413"/>
|
||||
<source>Failed to write keyboard configuration to existing /etc/default directory.</source>
|
||||
<translation>Failed to write keyboard configuration to existing /etc/default directory.</translation>
|
||||
</message>
|
||||
@ -3423,6 +3442,43 @@ Output:
|
||||
<translation>Cannot open /etc/timezone for writing</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupGroupsJob</name>
|
||||
<message>
|
||||
<location filename="../src/modules/users/MiscJobs.cpp" line="166"/>
|
||||
<source>Preparing groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/MiscJobs.cpp" line="178"/>
|
||||
<location filename="../src/modules/users/MiscJobs.cpp" line="183"/>
|
||||
<source>Could not create groups in target system</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/MiscJobs.cpp" line="184"/>
|
||||
<source>These groups are missing in the target system: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SetupSudoJob</name>
|
||||
<message>
|
||||
<location filename="../src/modules/users/MiscJobs.cpp" line="33"/>
|
||||
<source>Configure <pre>sudo</pre> users.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/MiscJobs.cpp" line="55"/>
|
||||
<source>Cannot chmod sudoers file.</source>
|
||||
<translation type="unfinished">Cannot chmod sudoers file.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/MiscJobs.cpp" line="60"/>
|
||||
<source>Cannot create sudoers file for writing.</source>
|
||||
<translation type="unfinished">Cannot create sudoers file for writing.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ShellProcessJob</name>
|
||||
<message>
|
||||
@ -3443,12 +3499,12 @@ Output:
|
||||
<context>
|
||||
<name>SummaryPage</name>
|
||||
<message>
|
||||
<location filename="../src/modules/summary/SummaryPage.cpp" line="47"/>
|
||||
<location filename="../src/modules/summary/SummaryPage.cpp" line="48"/>
|
||||
<source>This is an overview of what will happen once you start the setup procedure.</source>
|
||||
<translation>This is an overview of what will happen once you start the setup procedure.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/summary/SummaryPage.cpp" line="49"/>
|
||||
<location filename="../src/modules/summary/SummaryPage.cpp" line="50"/>
|
||||
<source>This is an overview of what will happen once you start the install procedure.</source>
|
||||
<translation>This is an overview of what will happen once you start the install procedure.</translation>
|
||||
</message>
|
||||
|
@ -162,12 +162,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
|
||||
<message>
|
||||
<location filename="../src/libcalamares/ProcessJob.cpp" line="43"/>
|
||||
<source>Run command '%1' in target system.</source>
|
||||
<translation>Ejecutar el comando '% 1' en el sistema de destino.</translation>
|
||||
<translation>Ejecutar el comando '%1' en el sistema de destino.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/ProcessJob.cpp" line="43"/>
|
||||
<source> Run command '%1'.</source>
|
||||
<translation>Ejecutar el comando '% 1'.</translation>
|
||||
<translation>Ejecutar el comando '%1'.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/ProcessJob.cpp" line="50"/>
|
||||
@ -1120,7 +1120,7 @@ Saldrá del instalador y se perderán todos los cambios.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="97"/>
|
||||
<source>This device has a <strong>%1</strong> partition table.</source>
|
||||
<translation>Este dispositivo tiene un <strong>% 1 </ strong> tabla de particiones.</translation>
|
||||
<translation>Este dispositivo tiene un <strong>%1</strong> tabla de particiones.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="104"/>
|
||||
|
@ -1080,17 +1080,17 @@ El instalador terminará y se perderán todos los cambios.</translation>
|
||||
<location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="24"/>
|
||||
<location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="36"/>
|
||||
<source>Deactivate volume group named %1.</source>
|
||||
<translation>Desactivar el grupo de volúmenes llamado%1.</translation>
|
||||
<translation>Desactivar el grupo de volúmenes llamado %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="30"/>
|
||||
<source>Deactivate volume group named <strong>%1</strong>.</source>
|
||||
<translation>Desactivar el grupo de volúmenes llamado<strong>% 1</strong>.</translation>
|
||||
<translation>Desactivar el grupo de volúmenes llamado<strong>%1</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="48"/>
|
||||
<source>The installer failed to deactivate a volume group named %1.</source>
|
||||
<translation>El instalador no pudo desactivar un grupo de volúmenes llamado%1.</translation>
|
||||
<translation>El instalador no pudo desactivar un grupo de volúmenes llamado %1.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1330,7 +1330,7 @@ El instalador terminará y se perderán todos los cambios.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/finished/FinishedPage.cpp" line="44"/>
|
||||
<source><h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system.</source>
|
||||
<translation><h1>Todo listo.</h1><br/>% 1 se ha configurado en su computadora. <br/>Ahora puede comenzar a usar su nuevo sistema.</translation>
|
||||
<translation><h1>Todo listo.</h1><br/>%1 se ha configurado en su computadora. <br/>Ahora puede comenzar a usar su nuevo sistema.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/finished/FinishedPage.cpp" line="48"/>
|
||||
@ -2198,7 +2198,7 @@ El instalador terminará y se perderán todos los cambios.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="278"/>
|
||||
<source>Setting %1 is not of integer type</source>
|
||||
<translation>Ajuste de % 1 no es de tipo entero</translation>
|
||||
<translation>Ajuste de %1 no es de tipo entero</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="283"/>
|
||||
@ -3260,7 +3260,7 @@ Salida
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="43"/>
|
||||
<source>Set flags on partition %1.</source>
|
||||
<translation>Establecer indicadores en la partición% 1.</translation>
|
||||
<translation>Establecer indicadores en la partición %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="49"/>
|
||||
@ -3335,7 +3335,7 @@ Salida
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="156"/>
|
||||
<source>The installer failed to set flags on partition %1.</source>
|
||||
<translation>El instalador no pudo establecer indicadores en la partición% 1.</translation>
|
||||
<translation>El instalador no pudo establecer indicadores en la partición %1.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3530,12 +3530,12 @@ Salida
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="101"/>
|
||||
<source>Could not configure machine feedback correctly, script error %1.</source>
|
||||
<translation>No se pudo configurar correctamente la retroalimentación de la máquina, error de script% 1.</translation>
|
||||
<translation>No se pudo configurar correctamente la retroalimentación de la máquina, error de script %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="107"/>
|
||||
<source>Could not configure machine feedback correctly, Calamares error %1.</source>
|
||||
<translation>No se pudo configurar la retroalimentación de la máquina correctamente, Calamares error% 1.</translation>
|
||||
<translation>No se pudo configurar la retroalimentación de la máquina correctamente, Calamares error %1.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -619,17 +619,17 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tässä kiintolevyssä on jo käyttöjärjestelmä, mutta osiotaulukko <strong>%1</strong> on erilainen kuin tarvittava <strong>%2</strong>.<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tähän kiintolevyyn on <strong>asennettu</strong> yksi osioista.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tämä kiintolevy on osa <strong>passiivista RAID</strong> -laitetta.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -11,12 +11,12 @@
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="71"/>
|
||||
<source>This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own.</source>
|
||||
<translation>מערכת זו הופעלה בתצורת אתחול <strong>EFI</strong>.<br><br> כדי להגדיר הפעלה מתצורת אתחול EFI, על אשף ההתקנה להתקין מנהל אתחול מערכת, לדוגמה <strong>GRUB</strong> או <strong>systemd-boot</strong> על <strong>מחיצת מערכת EFI</strong>. פעולה זו היא אוטומטית, אלא אם כן העדפתך היא להגדיר מחיצות באופן ידני, במקרה זה עליך לבחור זאת או להגדיר בעצמך.</translation>
|
||||
<translation>מערכת זו הופעלה בתצורת אתחול <strong>EFI</strong>.<br><br> כדי להגדיר הפעלה מתצורת אתחול EFI, על תכנית ההתקנה להתקין מנהל אתחול מערכת, לדוגמה <strong>GRUB</strong> או <strong>systemd-boot</strong> על <strong>מחיצת מערכת EFI</strong>. פעולה זו היא אוטומטית, אלא אם כן העדפתך היא להגדיר מחיצות באופן ידני, במקרה זה יש לבחור זאת או להגדיר בעצמך.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="83"/>
|
||||
<source>This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own.</source>
|
||||
<translation>מערכת זו הופעלה בתצורת אתחול <strong>BIOS</strong>.<br><br> כדי להגדיר הפעלה מתצורת אתחול BIOS, על אשף ההתקנה להתקין מנהל אתחול מערכת, לדוגמה <strong>GRUB</strong>, בתחילת המחיצה או על ה־<strong>Master Boot Record</strong> בצמוד להתחלה של טבלת המחיצות (מועדף). פעולה זו היא אוטומטית, אלא אם כן תבחר להגדיר מחיצות באופן ידני, במקרה זה עליך להגדיר זאת בעצמך.</translation>
|
||||
<translation>מערכת זו הופעלה בתצורת אתחול <strong>BIOS</strong>.<br><br> כדי להגדיר הפעלה מתצורת אתחול BIOS, על תכנית ההתקנה להתקין מנהל אתחול מערכת, לדוגמה <strong>GRUB</strong>, בתחילת המחיצה או על ה־<strong>Master Boot Record</strong> בצמוד להתחלה של טבלת המחיצות (מועדף). פעולה זו היא אוטומטית, אלא אם כן תבחר להגדיר מחיצות באופן ידני, במקרה זה יש להגדיר זאת בעצמך.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -340,7 +340,7 @@
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="332"/>
|
||||
<source>The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong></source>
|
||||
<translation>אשף ההתקנה של %1 הולך לבצע שינויים בכונן שלך לטובת התקנת %2.<br/><strong>לא תוכל לבטל את השינויים הללו.</strong></translation>
|
||||
<translation>תכנית ההתקנה של %1 עומדת לבצע שינויים בכונן שלך לטובת התקנת %2.<br/><strong>לא תהיה אפשרות לבטל את השינויים הללו.</strong></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="335"/>
|
||||
@ -375,7 +375,7 @@
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="395"/>
|
||||
<source>The installation is complete. Close the installer.</source>
|
||||
<translation>תהליך ההתקנה הושלם. נא לסגור את אשף ההתקנה.</translation>
|
||||
<translation>תהליך ההתקנה הושלם. נא לסגור את תכנית ההתקנה.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="397"/>
|
||||
@ -428,8 +428,8 @@ The setup program will quit and all changes will be lost.</source>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="514"/>
|
||||
<source>Do you really want to cancel the current install process?
|
||||
The installer will quit and all changes will be lost.</source>
|
||||
<translation>האם ברצונך לבטל את תהליך ההתקנה?
|
||||
אשף ההתקנה ייסגר וכל השינויים יאבדו.</translation>
|
||||
<translation>האם אכן ברצונך לבטל את תהליך ההתקנה?
|
||||
תכנית ההתקנה תיסגר וכל השינויים יאבדו.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -437,7 +437,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/PythonHelper.cpp" line="288"/>
|
||||
<source>Unknown exception type</source>
|
||||
<translation>טיפוס חריגה אינו מוכר</translation>
|
||||
<translation>סוג חריגה לא מוכר</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/PythonHelper.cpp" line="306"/>
|
||||
@ -495,7 +495,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/calamares/CalamaresWindow.cpp" line="305"/>
|
||||
<source>%1 Installer</source>
|
||||
<translation>אשף התקנה של %1</translation>
|
||||
<translation>תכנית התקנת %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -638,7 +638,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
<source>No Swap</source>
|
||||
<translation>בלי החלפה</translation>
|
||||
<translation>ללא החלפה</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1611"/>
|
||||
@ -1117,7 +1117,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="56"/>
|
||||
<source>The installer failed to delete partition %1.</source>
|
||||
<translation>אשף ההתקנה נכשל בעת מחיקת מחיצה %1.</translation>
|
||||
<translation>תכנית ההתקנה כשלה במחיקת המחיצה %1.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1644,7 +1644,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicensePage.cpp" line="146"/>
|
||||
<source>If you do not agree with the terms, the setup procedure cannot continue.</source>
|
||||
<translation>אם התנאים האלה אינם מקובלים עליך, אי אפשר להמשיך בתהליך ההתקנה.</translation>
|
||||
<translation>אם התנאים האלה אינם מקובלים עליכם, אי אפשר להמשיך בתהליך ההתקנה.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicensePage.cpp" line="151"/>
|
||||
@ -1654,7 +1654,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicensePage.cpp" line="156"/>
|
||||
<source>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead.</source>
|
||||
<translation>אם תנאים אלו אינם מקובלים עליך, לא תותקן תכנה קניינית וייעשה שימוש בחלופות בקוד פתוח במקום.</translation>
|
||||
<translation>אם התנאים הללו אינם מקובלים עליכם, תוכנה קניינית לא תותקן, ובמקומן יעשה שימוש בחלופות בקוד פתוח.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1826,8 +1826,8 @@ The installer will quit and all changes will be lost.</source>
|
||||
<source>Please select your preferred location on the map so the installer can suggest the locale
|
||||
and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging
|
||||
to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.</source>
|
||||
<translation>נא לבחור את המיקום המועדף עליך על המפה כדי שתכנית ההתקנה תוכל להציע הגדרות מקומיות
|
||||
ואזור זמן עבורך. ניתן לכוונן את ההגדרות המוצעות להלן. לחפש במפה על ידי משיכה להזזתה ובכפתורים +/- כדי להתקרב/להתרחק
|
||||
<translation>נא לבחור את המיקום המועדף עליכם על המפה כדי שתכנית ההתקנה תוכל להציע הגדרות מקומיות
|
||||
ואזור זמן עבורכם. ניתן לכוונן את ההגדרות המוצעות להלן. לחפש במפה על ידי משיכה להזזתה ובכפתורים +/- כדי להתקרב/להתרחק
|
||||
או להשתמש בגלילת העכבר לטובת שליטה בתקריב.</translation>
|
||||
</message>
|
||||
</context>
|
||||
@ -1974,7 +1974,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="37"/>
|
||||
<source>Select your preferred Region, or use the default one based on your current location.</source>
|
||||
<translation>נא לבחור את המחוז המועדף עליך או להשתמש בבררת המחדל לפי המיקום הנוכחי שלך.</translation>
|
||||
<translation>נא לבחור את המחוז המועדף עליכם או להשתמש בברירת המחדל לפי המיקום הנוכחי שלכם.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="94"/>
|
||||
@ -2029,7 +2029,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="158"/>
|
||||
<source>The password is the same as the old one</source>
|
||||
<translation>הססמה זהה לישנה</translation>
|
||||
<translation>הססמה הזו זהה לישנה</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="160"/>
|
||||
@ -2413,7 +2413,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<location filename="../src/modules/users/page_usersetup.ui" line="519"/>
|
||||
<location filename="../src/modules/users/page_usersetup.ui" line="544"/>
|
||||
<source><small>Enter the same password twice, so that it can be checked for typing errors.</small></source>
|
||||
<translation><small>עליך להקליד את אותה הססמה פעמיים כדי לאפשר זיהוי של שגיאות הקלדה.</small></translation>
|
||||
<translation><small>יש להקליד את אותה הססמה פעמיים כדי לאפשר זיהוי של שגיאות הקלדה.</small></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2648,12 +2648,12 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="427"/>
|
||||
<source>An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start.</source>
|
||||
<translation>מחיצת מערכת EFI נדרשת כדי להפעיל את %1.<br/><br/> כדי להגדיר מחיצת מערכת EFI, עליך לחזור ולבחור או ליצור מערכת קבצים מסוג FAT32 עם סימון <strong>%3</strong> פעיל ועם נקודת עיגון <strong>%2</strong>.<br/><br/> ניתן להמשיך ללא הגדרת מחיצת מערכת EFI אך טעינת המערכת עשויה להיכשל.</translation>
|
||||
<translation>מחיצת מערכת EFI נדרשת כדי להפעיל את %1.<br/><br/> כדי להגדיר מחיצת מערכת EFI, יש לחזור ולבחור או ליצור מערכת קבצים מסוג FAT32 עם סימון <strong>%3</strong> פעיל ועם נקודת עיגון <strong>%2</strong>.<br/><br/> ניתן להמשיך ללא הגדרת מחיצת מערכת EFI אך טעינת המערכת עשויה להיכשל.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="441"/>
|
||||
<source>An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start.</source>
|
||||
<translation>לצורך הפעלת %1 נדרשת מחיצת מערכת EFI.<br/><br/> הוגדרה מחיצה עם נקודת עיגון <strong>%2</strong> אך לא הוגדר סימון <strong>%3</strong>.<br/> כדי לסמן את המחיצה, עליך לחזור ולערוך את המחיצה.<br/><br/> ניתן להמשיך ללא הוספת הסימון אך טעינת המערכת עשויה להיכשל.</translation>
|
||||
<translation>לצורך הפעלת %1 נדרשת מחיצת מערכת EFI.<br/><br/> הוגדרה מחיצה עם נקודת עיגון <strong>%2</strong> אך לא הוגדר סימון <strong>%3</strong>.<br/> כדי לסמן את המחיצה, יש לחזור ולערוך את המחיצה.<br/><br/> ניתן להמשיך ללא הוספת הסימון אך טעינת המערכת עשויה להיכשל.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="440"/>
|
||||
@ -2843,7 +2843,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/libcalamares/partition/FileSystem.cpp" line="34"/>
|
||||
<source>swap</source>
|
||||
<translation>דפדוף, swap</translation>
|
||||
<translation>דפדוף swap</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="90"/>
|
||||
@ -3886,7 +3886,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="60"/>
|
||||
<source>Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.</source>
|
||||
<translation>נא ללחוץ על דרם המקלדת המועדף עליך כדי לבחור בפריסה ובהגוון או להשתמש בבררת המחדל בהתאם לחומרה שזוהתה.</translation>
|
||||
<translation>נא ללחוץ על דגם המקלדת המועדף עליכם כדי לבחור בפריסה ובהגוון או להשתמש בברירת המחדל בהתאם לחומרה שזוהתה.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="253"/>
|
||||
|
@ -619,17 +619,17 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>इस संचय उपकरण पर पहले से ऑपरेटिंग सिस्टम है, परंतु <strong>%1</strong> विभाजन तालिका अपेक्षित <strong>%2</strong> से भिन्न है।<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>इस संचय उपकरण के विभाजनों में से कोई एक विभाजन <strong>माउंट</strong> है।</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>यह संचय उपकरण एक <strong>निष्क्रिय RAID</strong> उपकरण का हिस्सा है।</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
|
@ -621,7 +621,7 @@ Instalacijski program će izaći i sve promjene će biti izgubljene.</translatio
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ovaj uređaj za pohranu već ima operativni sustav, ali njegova particijska tablica <strong>%1</strong> razlikuje se od potrebne <strong>%2</strong>.<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
@ -3067,12 +3067,12 @@ Postavljanje se može nastaviti, ali neke će značajke možda biti onemogućene
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="186"/>
|
||||
<source>The filesystem %1 could not be found in this system, and cannot be resized.</source>
|
||||
<translation>Datotečni sustav % 1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina.</translation>
|
||||
<translation>Datotečni sustav %1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="187"/>
|
||||
<source>The device %1 could not be found in this system, and cannot be resized.</source>
|
||||
<translation>Uređaj % 1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina.</translation>
|
||||
<translation>Uređaj %1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="195"/>
|
||||
|
@ -1620,7 +1620,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a></
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicensePage.ui" line="26"/>
|
||||
<source><h1>License Agreement</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>Licenszszerződés</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicensePage.cpp" line="136"/>
|
||||
|
@ -617,7 +617,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>このストレージデバイスにはすでにオペレーティングシステムがインストールされていますが、パーティションテーブル <strong>%1</strong> は必要な <strong>%2</strong> とは異なります。<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
|
@ -304,12 +304,12 @@
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="208"/>
|
||||
<source>Calamares Initialization Failed</source>
|
||||
<translation>Calamares 초기화 실패</translation>
|
||||
<translation>깔라마레스 초기화 실패</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="209"/>
|
||||
<source>%1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution.</source>
|
||||
<translation>%1 가 설치될 수 없습니다. Calamares가 모든 구성된 모듈을 불러올 수 없었습니다. 이것은 Calamares가 분포에 의해 사용되는 방식에서 비롯된 문제입니다.</translation>
|
||||
<translation>%1 가 설치될 수 없습니다. 깔라마레스가 모든 구성된 모듈을 불러올 수 없었습니다. 이것은 깔라마레스가 배포판에서 사용되는 방식에서 발생한 문제입니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="215"/>
|
||||
@ -617,17 +617,17 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>이 스토리지 장치에는 이미 운영 체제가 설치되어 있으나 <strong>%1</strong> 파티션 테이블이 필요로 하는 <strong>%2</strong>와 다릅니다.<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>이 스토리지 장치는 하나 이상의 <strong>마운트된</strong> 파티션을 갖고 있습니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>이 스토리지 장치는 <strong>비활성화된 RAID</strong> 장치의 일부입니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
@ -730,7 +730,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/Config.cpp" line="334"/>
|
||||
<source>Set timezone to %1/%2.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>표준시간대를 %1/%2로 설정합니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/Config.cpp" line="372"/>
|
||||
@ -790,22 +790,22 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/Config.cpp" line="244"/>
|
||||
<source><h1>Welcome to the Calamares setup program for %1</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1> 깔라마레스 설치 프로그램 %1에 오신 것을 환영합니다</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/Config.cpp" line="245"/>
|
||||
<source><h1>Welcome to %1 setup</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>%1 설치에 오신 것을 환영합니다</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/Config.cpp" line="250"/>
|
||||
<source><h1>Welcome to the Calamares installer for %1</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>깔라마레스 인스톨러 %1에 오신 것을 환영합니다</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/Config.cpp" line="251"/>
|
||||
<source><h1>Welcome to the %1 installer</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>%1 인스톨러에 오신 것을 환영합니다</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="164"/>
|
||||
@ -815,7 +815,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="170"/>
|
||||
<source>'%1' is not allowed as username.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>'%1'은 사용자 이름으로 허용되지 않습니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="177"/>
|
||||
@ -840,7 +840,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="237"/>
|
||||
<source>'%1' is not allowed as hostname.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>'%1'은 호스트 이름으로 허용되지 않습니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/Config.cpp" line="243"/>
|
||||
@ -1813,7 +1813,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Map.qml" line="243"/>
|
||||
<source>Timezone: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>표준시간대: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Map.qml" line="264"/>
|
||||
@ -1945,7 +1945,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/oemid/OEMPage.ui" line="52"/>
|
||||
<source><html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html></source>
|
||||
<translation><html><head/><body><h1>OEM 구성</h1> <p>Calamares는 대상 시스템을 구성하는 동안 OEM 설정을 사용합니다.</p></body></html></translation>
|
||||
<translation><html><head/><body><h1>OEM 구성</h1> <p>깔라마레스는 대상 시스템을 구성하는 동안 OEM 설정을 사용합니다.</p></body></html></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1973,22 +1973,22 @@ The installer will quit and all changes will be lost.</source>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="169"/>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="213"/>
|
||||
<source>Timezone: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>표준시간대: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="111"/>
|
||||
<source>Select your preferred Zone within your Region.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>선호하는 표준시간대와 지역을 선택하세요.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="182"/>
|
||||
<source>Zones</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>표준시간대</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/Offline.qml" line="229"/>
|
||||
<source>You can fine-tune Language and Locale settings below.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>아래에서 언어 및 로케일을 상세하게 설정할 수 있습니다.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2864,7 +2864,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="83"/>
|
||||
<source>Directory not found</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>디렉터리를 찾을 수 없습니다</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="84"/>
|
||||
@ -3044,7 +3044,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="176"/>
|
||||
<source>Calamares cannot start KPMCore for the file-system resize job.</source>
|
||||
<translation>Calamares는 파일 시스템 크기 조정 작업을 위해 KPMCore를 시작할 수 없습니다.</translation>
|
||||
<translation>깔라마레스는 파일 시스템 크기 조정 작업을 위해 KPMCore를 시작할 수 없습니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="184"/>
|
||||
@ -3482,18 +3482,18 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="122"/>
|
||||
<source>KDE user feedback</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KDE 사용자 의견</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="128"/>
|
||||
<source>Configuring KDE user feedback.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KDE 사용자 의견을 설정하는 중입니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="150"/>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="156"/>
|
||||
<source>Error in KDE user feedback configuration.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KDE 사용자 의견 설정 중에 오류가 발생했습니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="151"/>
|
||||
@ -3744,7 +3744,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="216"/>
|
||||
<source><h1>Welcome to the Calamares setup program for %1.</h1></source>
|
||||
<translation><h1>%1에 대한 Calamares 설정 프로그램에 오신 것을 환영합니다.</h1></translation>
|
||||
<translation><h1>%1에 대한 깔라마레스 설정 프로그램에 오신 것을 환영합니다.</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="217"/>
|
||||
@ -3754,7 +3754,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="222"/>
|
||||
<source><h1>Welcome to the Calamares installer for %1.</h1></source>
|
||||
<translation><h1>%1을 위한 Calamares 설치 관리자에 오신 것을 환영합니다.</h1></translation>
|
||||
<translation><h1>%1을 위한 깔라마레스 설치 관리자에 오신 것을 환영합니다.</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="223"/>
|
||||
@ -3877,7 +3877,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="276"/>
|
||||
<source>Keyboard Variant</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>키보드 유형</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="386"/>
|
||||
@ -3890,7 +3890,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/localeq/localeq.qml" line="81"/>
|
||||
<source>Change</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>변경</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3941,7 +3941,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="36"/>
|
||||
<source>Pick your user name and credentials to login and perform admin tasks</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>로그인 및 관리자 작업을 수행하려면 사용자 이름과 자격 증명을 선택하세요</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="52"/>
|
||||
@ -3961,7 +3961,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="87"/>
|
||||
<source>Login Name</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>로그인 이름</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="103"/>
|
||||
@ -4006,7 +4006,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="216"/>
|
||||
<source>Validate passwords quality</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>패스워드 품질 검증</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="226"/>
|
||||
@ -4016,12 +4016,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="234"/>
|
||||
<source>Log in automatically without asking for the password</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>패스워드를 묻지 않고 자동으로 로그인합니다</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="243"/>
|
||||
<source>Reuse user password as root password</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>사용자 패스워드를 루트 패스워드로 재사용합니다</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="253"/>
|
||||
@ -4031,22 +4031,22 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="268"/>
|
||||
<source>Choose a root password to keep your account safe.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>당신의 계정을 안전하게 보호하기 위해서 루트 패스워드를 선택하세요.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="279"/>
|
||||
<source>Root Password</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>루트 패스워드</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="298"/>
|
||||
<source>Repeat Root Password</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>루트 패스워드 확인</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="318"/>
|
||||
<source>Enter the same password twice, so that it can be checked for typing errors.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>입력 오류를 확인하기 위해서 동일한 패스워드를 두번 입력해주세요.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4060,7 +4060,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/>
|
||||
<source>About</source>
|
||||
<translation>Calamares에 대하여</translation>
|
||||
<translation>깔라마레스에 대하여</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcomeq/welcomeq.qml" line="80"/>
|
||||
|
@ -2870,7 +2870,7 @@ Išvestis:
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="83"/>
|
||||
<source>Directory not found</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Katalogas nerastas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="84"/>
|
||||
@ -3885,7 +3885,7 @@ Išvestis:
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="276"/>
|
||||
<source>Keyboard Variant</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Klaviatūros variantas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="386"/>
|
||||
@ -3989,7 +3989,7 @@ Išvestis:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="87"/>
|
||||
<source>Login Name</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Prisijungimo vardas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="103"/>
|
||||
@ -4009,7 +4009,7 @@ Išvestis:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="140"/>
|
||||
<source>This name will be used if you make the computer visible to others on a network.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Šis vardas bus naudojamas, jeigu padarysite savo kompiuterį matomą kitiems naudotojams tinkle.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="155"/>
|
||||
@ -4074,7 +4074,7 @@ Išvestis:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="318"/>
|
||||
<source>Enter the same password twice, so that it can be checked for typing errors.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Norint įsitikinti, kad rašydami slaptažodį nesuklydote, įrašykite tą patį slaptažodį du kartus.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -3012,7 +3012,7 @@ Uitvoer:
|
||||
<location filename="../src/modules/welcomeq/Requirements.qml" line="38"/>
|
||||
<source><p>This computer does not satisfy the minimum requirements for installing %1.<br/>
|
||||
Installation cannot continue.</p></source>
|
||||
<translation>Deze computer voldoet niet aan de minimale vereisten voor het installeren van % 1.
|
||||
<translation>Deze computer voldoet niet aan de minimale vereisten voor het installeren van %1.
|
||||
De installatie kan niet doorgaan.</translation>
|
||||
</message>
|
||||
<message>
|
||||
|
@ -619,17 +619,17 @@ O instalador será fechado e todas as alterações serão perdidas.</translation
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>O dispositivo de armazenamento já possui um sistema operacional, mas a tabela de partições <strong>%1</strong> é diferente da necessária <strong>%2</strong>.<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>O dispositivo de armazenamento tem uma de suas partições <strong>montada</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>O dispositivo de armazenamento é parte de um dispositivo <strong>RAID inativo</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
@ -2015,7 +2015,7 @@ O instalador será fechado e todas as alterações serão perdidas.</translation
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="151"/>
|
||||
<source>Memory allocation error when setting '%1'</source>
|
||||
<translation>Erro de alocação de memória ao definir '% 1'</translation>
|
||||
<translation>Erro de alocação de memória ao definir '%1'</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="156"/>
|
||||
|
@ -623,17 +623,18 @@ Inštalátor sa ukončí a všetky zmeny budú stratené.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>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/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Toto úložné zariadenie má jeden zo svojich oddielov <strong>pripojený</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Toto úložné zariadenie je súčasťou zariadenia s <strong>neaktívnym RAIDom</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
@ -1826,7 +1827,8 @@ Inštalátor sa ukončí a všetky zmeny budú stratené.</translation>
|
||||
<source>Please select your preferred location on the map so the installer can suggest the locale
|
||||
and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging
|
||||
to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>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.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2127,7 +2129,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="220"/>
|
||||
<source>The password contains more than %1 same characters consecutively</source>
|
||||
<translation>Heslo obsahuje viac ako% 1 rovnakých znakov za sebou</translation>
|
||||
<translation>Heslo obsahuje viac ako %1 rovnakých znakov za sebou</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="224"/>
|
||||
@ -2137,7 +2139,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="228"/>
|
||||
<source>The password contains more than %1 characters of the same class consecutively</source>
|
||||
<translation>Heslo obsahuje postupne viac ako% 1 znakov toho istého typu</translation>
|
||||
<translation>Heslo obsahuje postupne viac ako %1 znakov toho istého typu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="232"/>
|
||||
@ -2870,7 +2872,7 @@ Výstup:
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="83"/>
|
||||
<source>Directory not found</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Adresár sa nenašiel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/machineid/MachineIdJob.cpp" line="84"/>
|
||||
@ -3873,7 +3875,7 @@ Výstup:
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="60"/>
|
||||
<source>Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kliknutím na preferovaný model klávesnice vyberiete rozloženie, alebo použite predvolený, ktorý bol vybraný podľa rozpoznaného hardvéru.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboardq/keyboardq.qml" line="253"/>
|
||||
@ -4012,12 +4014,12 @@ Výstup:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="204"/>
|
||||
<source>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>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é.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="216"/>
|
||||
<source>Validate passwords quality</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Overiť kvalitu hesiel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="226"/>
|
||||
@ -4032,7 +4034,7 @@ Výstup:
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="243"/>
|
||||
<source>Reuse user password as root password</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Znovu použiť používateľské heslo ako heslo správcu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/usersq/usersq.qml" line="253"/>
|
||||
|
@ -618,17 +618,17 @@ Alla ändringar kommer att gå förlorade.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Denna lagringsenhet har redan ett operativsystem installerat på sig, men partitionstabellen <strong>%1</strong> skiljer sig från den som behövs <strong>%2</strong>.<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Denna lagringsenhet har en av dess partitioner <strong>monterad</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Denna lagringsenhet är en del av en <strong>inaktiv RAID</strong>enhet. </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
|
@ -25,7 +25,7 @@ automatic ఉంటుంది, మీరు మాన్యువల్ వి
|
||||
<message>
|
||||
<location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="58"/>
|
||||
<source>Master Boot Record of %1</source>
|
||||
<translation>% 1 యొక్క మాస్టర్ బూట్ రికార్డ్</translation>
|
||||
<translation>%1 యొక్క మాస్టర్ బూట్ రికార్డ్</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="91"/>
|
||||
@ -134,7 +134,7 @@ automatic ఉంటుంది, మీరు మాన్యువల్ వి
|
||||
<message>
|
||||
<location filename="../src/libcalamares/JobExample.cpp" line="29"/>
|
||||
<source>Job failed (%1)</source>
|
||||
<translation>జాబ్ విఫలమైంది (% 1)</translation>
|
||||
<translation>జాబ్ విఫలమైంది (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/JobExample.cpp" line="30"/>
|
||||
|
@ -620,17 +620,17 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ин дастгоҳи захирагоҳ аллакай дорои низоми амалкунанда мебошад, аммо ҷадвали қисми диски <strong>%1</strong> аз диски лозимии <strong>%2</strong> фарқ мекунад.<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Яке аз қисмҳои диски ин дастгоҳи захирагоҳ <strong>васлшуда</strong> мебошад.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ин дастгоҳи захирагоҳ қисми дасгоҳи <strong>RAID-и ғайрифаъол</strong> мебошад.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
|
4124
lang/calamares_vi.ts
Normal file
4124
lang/calamares_vi.ts
Normal file
File diff suppressed because it is too large
Load Diff
@ -617,17 +617,17 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
|
||||
<source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>此儲存裝置上已有作業系統,但分割表 <strong>%1</strong> 與需要的 <strong>%2</strong> 不同。<br/></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
|
||||
<source>This storage device has one of its partitions <strong>mounted</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>此裝置<strong>已掛載</strong>其中一個分割區。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
|
||||
<source>This storage device is a part of an <strong>inactive RAID</strong> device.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>此儲存裝置是<strong>非作用中 RAID</strong> 裝置的一部份。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
|
||||
|
4621
lang/kb_en.ts
Normal file
4621
lang/kb_en.ts
Normal file
File diff suppressed because it is too large
Load Diff
4621
lang/kb_tg.ts
Normal file
4621
lang/kb_tg.ts
Normal file
File diff suppressed because it is too large
Load Diff
167
lang/python.pot
167
lang/python.pot
@ -8,26 +8,26 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-10-16 22:35+0200\n"
|
||||
"POT-Creation-Date: 2020-11-09 15:12+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"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."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/mount/main.py:29
|
||||
#: src/modules/mount/main.py:30
|
||||
msgid "Mounting partitions."
|
||||
msgstr "Mounting partitions."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/mount/main.py:141 src/modules/initcpiocfg/main.py:196
|
||||
#: src/modules/initcpiocfg/main.py:200
|
||||
#: src/modules/mount/main.py:127 src/modules/initcpiocfg/main.py:199
|
||||
#: src/modules/initcpiocfg/main.py:203
|
||||
#: src/modules/luksopenswaphookcfg/main.py:86
|
||||
#: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164
|
||||
#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89
|
||||
@ -36,327 +36,312 @@ msgstr "Mounting partitions."
|
||||
#: src/modules/fstab/main.py:367 src/modules/localecfg/main.py:135
|
||||
#: src/modules/networkcfg/main.py:39
|
||||
msgid "Configuration Error"
|
||||
msgstr "Configuration Error"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/mount/main.py:142 src/modules/initcpiocfg/main.py:197
|
||||
#: src/modules/mount/main.py:128 src/modules/initcpiocfg/main.py:200
|
||||
#: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165
|
||||
#: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:70
|
||||
#: src/modules/fstab/main.py:362
|
||||
msgid "No partitions are defined for <pre>{!s}</pre> to use."
|
||||
msgstr "No partitions are defined for <pre>{!s}</pre> to use."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/services-systemd/main.py:26
|
||||
msgid "Configure systemd services"
|
||||
msgstr "Configure systemd services"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/services-systemd/main.py:59
|
||||
#: src/modules/services-openrc/main.py:93
|
||||
msgid "Cannot modify service"
|
||||
msgstr "Cannot modify service"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/services-systemd/main.py:60
|
||||
msgid ""
|
||||
"<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}."
|
||||
msgstr ""
|
||||
"<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}."
|
||||
|
||||
#: src/modules/services-systemd/main.py:63
|
||||
#: src/modules/services-systemd/main.py:67
|
||||
msgid "Cannot enable systemd service <code>{name!s}</code>."
|
||||
msgstr "Cannot enable systemd service <code>{name!s}</code>."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/services-systemd/main.py:65
|
||||
msgid "Cannot enable systemd target <code>{name!s}</code>."
|
||||
msgstr "Cannot enable systemd target <code>{name!s}</code>."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/services-systemd/main.py:69
|
||||
msgid "Cannot disable systemd target <code>{name!s}</code>."
|
||||
msgstr "Cannot disable systemd target <code>{name!s}</code>."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/services-systemd/main.py:71
|
||||
msgid "Cannot mask systemd unit <code>{name!s}</code>."
|
||||
msgstr "Cannot mask systemd unit <code>{name!s}</code>."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/services-systemd/main.py:73
|
||||
msgid ""
|
||||
"Unknown systemd commands <code>{command!s}</code> and "
|
||||
"<code>{suffix!s}</code> for unit {name!s}."
|
||||
"Unknown systemd commands <code>{command!s}</code> and <code>{suffix!s}</"
|
||||
"code> for unit {name!s}."
|
||||
msgstr ""
|
||||
"Unknown systemd commands <code>{command!s}</code> and "
|
||||
"<code>{suffix!s}</code> for unit {name!s}."
|
||||
|
||||
#: src/modules/umount/main.py:31
|
||||
msgid "Unmount file systems."
|
||||
msgstr "Unmount file systems."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:35
|
||||
msgid "Filling up filesystems."
|
||||
msgstr "Filling up filesystems."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:254
|
||||
msgid "rsync failed with error code {}."
|
||||
msgstr "rsync failed with error code {}."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:299
|
||||
msgid "Unpacking image {}/{}, file {}/{}"
|
||||
msgstr "Unpacking image {}/{}, file {}/{}"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:314
|
||||
msgid "Starting to unpack {}"
|
||||
msgstr "Starting to unpack {}"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:463
|
||||
msgid "Failed to unpack image \"{}\""
|
||||
msgstr "Failed to unpack image \"{}\""
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:430
|
||||
msgid "No mount point for root partition"
|
||||
msgstr "No mount point for root partition"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:431
|
||||
msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing"
|
||||
msgstr "globalstorage does not contain a \"rootMountPoint\" key, doing nothing"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:436
|
||||
msgid "Bad mount point for root partition"
|
||||
msgstr "Bad mount point for root partition"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:437
|
||||
msgid "rootMountPoint is \"{}\", which does not exist, doing nothing"
|
||||
msgstr "rootMountPoint is \"{}\", which does not exist, doing nothing"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:453 src/modules/unpackfs/main.py:457
|
||||
#: src/modules/unpackfs/main.py:477
|
||||
msgid "Bad unsquash configuration"
|
||||
msgstr "Bad unsquash configuration"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:454
|
||||
msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel"
|
||||
msgstr "The filesystem for \"{}\" ({}) is not supported by your current kernel"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:458
|
||||
msgid "The source filesystem \"{}\" does not exist"
|
||||
msgstr "The source filesystem \"{}\" does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/unpackfs/main.py:464
|
||||
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:478
|
||||
msgid "The destination \"{}\" in the target system is not a directory"
|
||||
msgstr "The destination \"{}\" in the target system is not a directory"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:514
|
||||
msgid "Cannot write KDM configuration file"
|
||||
msgstr "Cannot write KDM configuration file"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:515
|
||||
msgid "KDM config file {!s} does not exist"
|
||||
msgstr "KDM config file {!s} does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:576
|
||||
msgid "Cannot write LXDM configuration file"
|
||||
msgstr "Cannot write LXDM configuration file"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:577
|
||||
msgid "LXDM config file {!s} does not exist"
|
||||
msgstr "LXDM config file {!s} does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:660
|
||||
msgid "Cannot write LightDM configuration file"
|
||||
msgstr "Cannot write LightDM configuration file"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:661
|
||||
msgid "LightDM config file {!s} does not exist"
|
||||
msgstr "LightDM config file {!s} does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:735
|
||||
msgid "Cannot configure LightDM"
|
||||
msgstr "Cannot configure LightDM"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:736
|
||||
msgid "No LightDM greeter installed."
|
||||
msgstr "No LightDM greeter installed."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:767
|
||||
msgid "Cannot write SLIM configuration file"
|
||||
msgstr "Cannot write SLIM configuration file"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:768
|
||||
msgid "SLIM config file {!s} does not exist"
|
||||
msgstr "SLIM config file {!s} does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:894
|
||||
msgid "No display managers selected for the displaymanager module."
|
||||
msgstr "No display managers selected for the displaymanager module."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/displaymanager/main.py:895
|
||||
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:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
msgstr "Display manager configuration was incomplete"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/initcpiocfg/main.py:28
|
||||
msgid "Configuring mkinitcpio."
|
||||
msgstr "Configuring mkinitcpio."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/initcpiocfg/main.py:201
|
||||
#: src/modules/initcpiocfg/main.py:204
|
||||
#: src/modules/luksopenswaphookcfg/main.py:91
|
||||
#: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:74
|
||||
#: src/modules/fstab/main.py:368 src/modules/localecfg/main.py:136
|
||||
#: src/modules/networkcfg/main.py:40
|
||||
msgid "No root mount point is given for <pre>{!s}</pre> to use."
|
||||
msgstr "No root mount point is given for <pre>{!s}</pre> to use."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/luksopenswaphookcfg/main.py:26
|
||||
msgid "Configuring encrypted swap."
|
||||
msgstr "Configuring encrypted swap."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/rawfs/main.py:26
|
||||
msgid "Installing data."
|
||||
msgstr "Installing data."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/services-openrc/main.py:29
|
||||
msgid "Configure OpenRC services"
|
||||
msgstr "Configure OpenRC services"
|
||||
msgstr ""
|
||||
|
||||
#: 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}."
|
||||
msgstr ""
|
||||
|
||||
#: 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}."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/services-openrc/main.py:61
|
||||
msgid ""
|
||||
"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-"
|
||||
"level {level!s}."
|
||||
msgstr ""
|
||||
"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-"
|
||||
"level {level!s}."
|
||||
|
||||
#: src/modules/services-openrc/main.py:94
|
||||
msgid ""
|
||||
"<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}."
|
||||
msgstr ""
|
||||
"<code>rc-update {arg!s}</code> 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"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/services-openrc/main.py:102
|
||||
msgid ""
|
||||
"The path for runlevel {level!s} is <code>{path!s}</code>, which does not "
|
||||
"exist."
|
||||
msgstr ""
|
||||
"The path for runlevel {level!s} is <code>{path!s}</code>, which does not "
|
||||
"exist."
|
||||
|
||||
#: src/modules/services-openrc/main.py:110
|
||||
msgid "Target service does not exist"
|
||||
msgstr "Target service does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/services-openrc/main.py:111
|
||||
msgid ""
|
||||
"The path for service {name!s} is <code>{path!s}</code>, which does not "
|
||||
"exist."
|
||||
"The path for service {name!s} is <code>{path!s}</code>, which does not exist."
|
||||
msgstr ""
|
||||
"The path for service {name!s} is <code>{path!s}</code>, which does not "
|
||||
"exist."
|
||||
|
||||
#: src/modules/plymouthcfg/main.py:27
|
||||
msgid "Configure Plymouth theme"
|
||||
msgstr "Configure Plymouth theme"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/packages/main.py:50 src/modules/packages/main.py:59
|
||||
#: src/modules/packages/main.py:69
|
||||
msgid "Install packages."
|
||||
msgstr "Install packages."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/packages/main.py:57
|
||||
#, python-format
|
||||
msgid "Processing packages (%(count)d / %(total)d)"
|
||||
msgstr "Processing packages (%(count)d / %(total)d)"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/packages/main.py:62
|
||||
#, python-format
|
||||
msgid "Installing one package."
|
||||
msgid_plural "Installing %(num)d packages."
|
||||
msgstr[0] "Installing one package."
|
||||
msgstr[1] "Installing %(num)d packages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: src/modules/packages/main.py:65
|
||||
#, python-format
|
||||
msgid "Removing one package."
|
||||
msgid_plural "Removing %(num)d packages."
|
||||
msgstr[0] "Removing one package."
|
||||
msgstr[1] "Removing %(num)d packages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: src/modules/bootloader/main.py:42
|
||||
msgid "Install bootloader."
|
||||
msgstr "Install bootloader."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/hwclock/main.py:26
|
||||
msgid "Setting hardware clock."
|
||||
msgstr "Setting hardware clock."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/mkinitfs/main.py:27
|
||||
msgid "Creating initramfs with mkinitfs."
|
||||
msgstr "Creating initramfs with mkinitfs."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/mkinitfs/main.py:49
|
||||
msgid "Failed to run mkinitfs on the target"
|
||||
msgstr "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 "The exit code was {}"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/dracut/main.py:27
|
||||
msgid "Creating initramfs with dracut."
|
||||
msgstr "Creating initramfs with dracut."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/dracut/main.py:49
|
||||
msgid "Failed to run dracut on the target"
|
||||
msgstr "Failed to run dracut on the target"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/initramfscfg/main.py:32
|
||||
msgid "Configuring initramfs."
|
||||
msgstr "Configuring initramfs."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/openrcdmcryptcfg/main.py:25
|
||||
msgid "Configuring OpenRC dmcrypt service."
|
||||
msgstr "Configuring OpenRC dmcrypt service."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/fstab/main.py:29
|
||||
msgid "Writing fstab."
|
||||
msgstr "Writing fstab."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/dummypython/main.py:35
|
||||
msgid "Dummy python job."
|
||||
msgstr "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 "Dummy python step {}"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/localecfg/main.py:30
|
||||
msgid "Configuring locales."
|
||||
msgstr "Configuring locales."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/networkcfg/main.py:28
|
||||
msgid "Saving network configuration."
|
||||
msgstr "Saving network configuration."
|
||||
msgstr ""
|
||||
|
@ -206,6 +206,8 @@ 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:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
|
@ -206,6 +206,8 @@ 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:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
@ -318,11 +320,11 @@ msgstr "Aparat saatını ayarlamaq."
|
||||
|
||||
#: src/modules/mkinitfs/main.py:27
|
||||
msgid "Creating initramfs with mkinitfs."
|
||||
msgstr "mkinitfs ilə initramfs yaradılır."
|
||||
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ə dracut başladılmadı"
|
||||
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 {}"
|
||||
|
@ -201,6 +201,8 @@ msgid ""
|
||||
"The displaymanagers list is empty or undefined in both globalstorage and "
|
||||
"displaymanager.conf."
|
||||
msgstr ""
|
||||
"Спіс дысплейных кіраўнікоў пусты альбо не вызначаны ў both globalstorage і "
|
||||
"displaymanager.conf."
|
||||
|
||||
#: src/modules/displaymanager/main.py:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
@ -314,11 +316,11 @@ msgstr "Наладка апаратнага гадзінніка."
|
||||
|
||||
#: src/modules/mkinitfs/main.py:27
|
||||
msgid "Creating initramfs with mkinitfs."
|
||||
msgstr ""
|
||||
msgstr "Стварэнне initramfs праз mkinitfs."
|
||||
|
||||
#: src/modules/mkinitfs/main.py:49
|
||||
msgid "Failed to run mkinitfs on the target"
|
||||
msgstr ""
|
||||
msgstr "Не атрымалася запусціць mkinitfs у пункце прызначэння"
|
||||
|
||||
#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50
|
||||
msgid "The exit code was {}"
|
||||
|
@ -4,7 +4,7 @@
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Georgi Georgiev, 2020
|
||||
# Жоро, 2020
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
@ -13,7 +13,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-10-16 22:35+0200\n"
|
||||
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
|
||||
"Last-Translator: Georgi Georgiev, 2020\n"
|
||||
"Last-Translator: Жоро, 2020\n"
|
||||
"Language-Team: Bulgarian (https://www.transifex.com/calamares/teams/20061/bg/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -204,6 +204,8 @@ msgid ""
|
||||
"The displaymanagers list is empty or undefined in both globalstorage and "
|
||||
"displaymanager.conf."
|
||||
msgstr ""
|
||||
"La llista de gestors de pantalla és buida o no definida ni a globalstorage "
|
||||
"ni a displaymanager.conf."
|
||||
|
||||
#: src/modules/displaymanager/main.py:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
|
@ -204,6 +204,8 @@ msgid ""
|
||||
"The displaymanagers list is empty or undefined in both globalstorage and "
|
||||
"displaymanager.conf."
|
||||
msgstr ""
|
||||
"Displayhåndteringerlisten er tom eller udefineret i både globalstorage og "
|
||||
"displaymanager.conf."
|
||||
|
||||
#: src/modules/displaymanager/main.py:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
|
@ -4,9 +4,9 @@
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Andreas Eitel <github-aneitel@online.de>, 2020
|
||||
# Adriaan de Groot <groot@kde.org>, 2020
|
||||
# Christian Spaan, 2020
|
||||
# Andreas Eitel <github-aneitel@online.de>, 2020
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
@ -15,7 +15,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-10-16 22:35+0200\n"
|
||||
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
|
||||
"Last-Translator: Christian Spaan, 2020\n"
|
||||
"Last-Translator: Andreas Eitel <github-aneitel@online.de>, 2020\n"
|
||||
"Language-Team: German (https://www.transifex.com/calamares/teams/20061/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -208,6 +208,8 @@ 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:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
|
@ -201,6 +201,8 @@ msgid ""
|
||||
"The displaymanagers list is empty or undefined in both globalstorage and "
|
||||
"displaymanager.conf."
|
||||
msgstr ""
|
||||
"Luettelo on tyhjä tai määrittelemätön, sekä globalstorage, että "
|
||||
"displaymanager.conf tiedostossa."
|
||||
|
||||
#: src/modules/displaymanager/main.py:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
|
@ -23,11 +23,11 @@ msgstr ""
|
||||
|
||||
#: src/modules/grubcfg/main.py:28
|
||||
msgid "Configure GRUB."
|
||||
msgstr ""
|
||||
msgstr "Configure GRUB."
|
||||
|
||||
#: src/modules/mount/main.py:29
|
||||
msgid "Mounting partitions."
|
||||
msgstr ""
|
||||
msgstr "Montaç des partizions."
|
||||
|
||||
#: src/modules/mount/main.py:141 src/modules/initcpiocfg/main.py:196
|
||||
#: src/modules/initcpiocfg/main.py:200
|
||||
|
@ -200,6 +200,8 @@ msgid ""
|
||||
"The displaymanagers list is empty or undefined in both globalstorage and "
|
||||
"displaymanager.conf."
|
||||
msgstr ""
|
||||
"globalstorage व displaymanager.conf में डिस्प्ले प्रबंधक सूची रिक्त या "
|
||||
"अपरिभाषित है।"
|
||||
|
||||
#: src/modules/displaymanager/main.py:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
|
@ -4,7 +4,7 @@
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# 김지현 <potatogim@potatogim.net>, 2018
|
||||
# Ji-Hyeon Gim <potatogim@potatogim.net>, 2018
|
||||
# JungHee Lee <daemul72@gmail.com>, 2020
|
||||
#
|
||||
#, fuzzy
|
||||
|
@ -205,6 +205,8 @@ msgid ""
|
||||
"The displaymanagers list is empty or undefined in both globalstorage and "
|
||||
"displaymanager.conf."
|
||||
msgstr ""
|
||||
"Skärmhanterar listan är tom eller odefinierad i både globalstorage och "
|
||||
"displaymanager.conf."
|
||||
|
||||
#: src/modules/displaymanager/main.py:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
|
@ -205,6 +205,8 @@ msgid ""
|
||||
"The displaymanagers list is empty or undefined in both globalstorage and "
|
||||
"displaymanager.conf."
|
||||
msgstr ""
|
||||
"Рӯйхати displaymanagers ҳам дар globalstorage ва ҳам дар displaymanager.conf"
|
||||
" холӣ ё номаълум аст."
|
||||
|
||||
#: src/modules/displaymanager/main.py:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
|
363
lang/python/vi/LC_MESSAGES/python.po
Normal file
363
lang/python/vi/LC_MESSAGES/python.po
Normal file
@ -0,0 +1,363 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# T. Tran <transifex@emiu.net>, 2020
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-10-16 22:35+0200\n"
|
||||
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
|
||||
"Last-Translator: T. Tran <transifex@emiu.net>, 2020\n"
|
||||
"Language-Team: Vietnamese (https://www.transifex.com/calamares/teams/20061/vi/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: vi\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: src/modules/grubcfg/main.py:28
|
||||
msgid "Configure GRUB."
|
||||
msgstr "Cấu hình GRUB"
|
||||
|
||||
#: src/modules/mount/main.py:29
|
||||
msgid "Mounting partitions."
|
||||
msgstr "Đang gắn kết các phân vùng."
|
||||
|
||||
#: src/modules/mount/main.py:141 src/modules/initcpiocfg/main.py:196
|
||||
#: src/modules/initcpiocfg/main.py:200
|
||||
#: src/modules/luksopenswaphookcfg/main.py:86
|
||||
#: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164
|
||||
#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89
|
||||
#: src/modules/openrcdmcryptcfg/main.py:69
|
||||
#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:361
|
||||
#: src/modules/fstab/main.py:367 src/modules/localecfg/main.py:135
|
||||
#: src/modules/networkcfg/main.py:39
|
||||
msgid "Configuration Error"
|
||||
msgstr "Lỗi cấu hình"
|
||||
|
||||
#: src/modules/mount/main.py:142 src/modules/initcpiocfg/main.py:197
|
||||
#: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165
|
||||
#: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:70
|
||||
#: src/modules/fstab/main.py:362
|
||||
msgid "No partitions are defined for <pre>{!s}</pre> to use."
|
||||
msgstr "Không có phân vùng nào được định nghĩa cho <pre>{!s}</pre> để dùng."
|
||||
|
||||
#: src/modules/services-systemd/main.py:26
|
||||
msgid "Configure systemd services"
|
||||
msgstr "Cấu hình các dịch vụ systemd"
|
||||
|
||||
#: src/modules/services-systemd/main.py:59
|
||||
#: src/modules/services-openrc/main.py:93
|
||||
msgid "Cannot modify service"
|
||||
msgstr "Không thể sửa đổi dịch vụ"
|
||||
|
||||
#: src/modules/services-systemd/main.py:60
|
||||
msgid ""
|
||||
"<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}."
|
||||
msgstr ""
|
||||
"<code>systemctl {arg!s}</code> trong môi trường chroot trả về lỗi {num!s}."
|
||||
|
||||
#: src/modules/services-systemd/main.py:63
|
||||
#: src/modules/services-systemd/main.py:67
|
||||
msgid "Cannot enable systemd service <code>{name!s}</code>."
|
||||
msgstr "Không thể bật dịch vụ systemd <code>{name!s}</code>."
|
||||
|
||||
#: src/modules/services-systemd/main.py:65
|
||||
msgid "Cannot enable systemd target <code>{name!s}</code>."
|
||||
msgstr "Không thể bật nhóm dịch vụ systemd <code>{name!s}</code>."
|
||||
|
||||
#: src/modules/services-systemd/main.py:69
|
||||
msgid "Cannot disable systemd target <code>{name!s}</code>."
|
||||
msgstr "Không thể tắt nhóm dịch vụ systemd <code>{name!s}</code>."
|
||||
|
||||
#: src/modules/services-systemd/main.py:71
|
||||
msgid "Cannot mask systemd unit <code>{name!s}</code>."
|
||||
msgstr "Không thể đánh dấu đơn vị systemd <code>{name!s}</code>."
|
||||
|
||||
#: src/modules/services-systemd/main.py:73
|
||||
msgid ""
|
||||
"Unknown systemd commands <code>{command!s}</code> and "
|
||||
"<code>{suffix!s}</code> for unit {name!s}."
|
||||
msgstr ""
|
||||
"Không nhận ra lệnh systemd <code>{command!s}</code> và "
|
||||
"<code>{suffix!s}</code> cho đơn vị {name!s}."
|
||||
|
||||
#: src/modules/umount/main.py:31
|
||||
msgid "Unmount file systems."
|
||||
msgstr "Gỡ kết nối các hệ thống tập tin."
|
||||
|
||||
#: src/modules/unpackfs/main.py:35
|
||||
msgid "Filling up filesystems."
|
||||
msgstr "Đang làm đầy các hệ thống tập tin."
|
||||
|
||||
#: src/modules/unpackfs/main.py:254
|
||||
msgid "rsync failed with error code {}."
|
||||
msgstr "rsync thất bại với lỗi {}."
|
||||
|
||||
#: src/modules/unpackfs/main.py:299
|
||||
msgid "Unpacking image {}/{}, file {}/{}"
|
||||
msgstr "Đang bung hình ảnh {}/{}, tập tin {}/{}"
|
||||
|
||||
#: src/modules/unpackfs/main.py:314
|
||||
msgid "Starting to unpack {}"
|
||||
msgstr "Bắt đầu bung nội dung {}"
|
||||
|
||||
#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:463
|
||||
msgid "Failed to unpack image \"{}\""
|
||||
msgstr "Bung hình ảnh thất bại \"{}\""
|
||||
|
||||
#: src/modules/unpackfs/main.py:430
|
||||
msgid "No mount point for root partition"
|
||||
msgstr "Không có điểm kết nối cho phân vùng gốc"
|
||||
|
||||
#: src/modules/unpackfs/main.py:431
|
||||
msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing"
|
||||
msgstr "globalstorage không có khoá \"rootMountPoint\", sẽ không làm gì cả"
|
||||
|
||||
#: src/modules/unpackfs/main.py:436
|
||||
msgid "Bad mount point for root partition"
|
||||
msgstr "Sai điểm kết nối cho phân vùng gốc"
|
||||
|
||||
#: src/modules/unpackfs/main.py:437
|
||||
msgid "rootMountPoint is \"{}\", which does not exist, doing nothing"
|
||||
msgstr "rootMountPoint không tồn tại, có giá trị là \"{}\", sẽ không làm gì cả"
|
||||
|
||||
#: src/modules/unpackfs/main.py:453 src/modules/unpackfs/main.py:457
|
||||
#: src/modules/unpackfs/main.py:477
|
||||
msgid "Bad unsquash configuration"
|
||||
msgstr "Sai cấu hình bung nén"
|
||||
|
||||
#: src/modules/unpackfs/main.py:454
|
||||
msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel"
|
||||
msgstr "Hệ thống tập tin cho \"{}\" ({}) không được hỗ trợ bởi nhân hiện tại"
|
||||
|
||||
#: src/modules/unpackfs/main.py:458
|
||||
msgid "The source filesystem \"{}\" does not exist"
|
||||
msgstr "Hệ thống tập tin nguồn \"{}\" không tồn tại"
|
||||
|
||||
#: src/modules/unpackfs/main.py:464
|
||||
msgid ""
|
||||
"Failed to find unsquashfs, make sure you have the squashfs-tools package "
|
||||
"installed"
|
||||
msgstr "Không tìm thấy lệnh unsquashfs, vui lòng cài đặt gói squashfs-tools"
|
||||
|
||||
#: src/modules/unpackfs/main.py:478
|
||||
msgid "The destination \"{}\" in the target system is not a directory"
|
||||
msgstr "Hệ thống đích \"{}\" không phải là một thư mục"
|
||||
|
||||
#: src/modules/displaymanager/main.py:514
|
||||
msgid "Cannot write KDM configuration file"
|
||||
msgstr "Không thể ghi vào tập tin cấu hình KDM"
|
||||
|
||||
#: src/modules/displaymanager/main.py:515
|
||||
msgid "KDM config file {!s} does not exist"
|
||||
msgstr "Tập tin cấu hình KDM {!s} không tồn tại"
|
||||
|
||||
#: src/modules/displaymanager/main.py:576
|
||||
msgid "Cannot write LXDM configuration file"
|
||||
msgstr "Không thể ghi vào tập tin cấu hình LXDM"
|
||||
|
||||
#: src/modules/displaymanager/main.py:577
|
||||
msgid "LXDM config file {!s} does not exist"
|
||||
msgstr "Tập tin cấu hình LXDM {!s} không tồn tại"
|
||||
|
||||
#: src/modules/displaymanager/main.py:660
|
||||
msgid "Cannot write LightDM configuration file"
|
||||
msgstr "Không thể ghi vào tập tin cấu hình LightDM"
|
||||
|
||||
#: src/modules/displaymanager/main.py:661
|
||||
msgid "LightDM config file {!s} does not exist"
|
||||
msgstr "Tập tin cấu hình LightDM {!s} không tồn tại"
|
||||
|
||||
#: src/modules/displaymanager/main.py:735
|
||||
msgid "Cannot configure LightDM"
|
||||
msgstr "Không thể cấu hình LXDM"
|
||||
|
||||
#: src/modules/displaymanager/main.py:736
|
||||
msgid "No LightDM greeter installed."
|
||||
msgstr "Màn hình chào mừng LightDM không được cài đặt."
|
||||
|
||||
#: src/modules/displaymanager/main.py:767
|
||||
msgid "Cannot write SLIM configuration file"
|
||||
msgstr "Không thể ghi vào tập tin cấu hình SLIM"
|
||||
|
||||
#: src/modules/displaymanager/main.py:768
|
||||
msgid "SLIM config file {!s} does not exist"
|
||||
msgstr "Tập tin cấu hình SLIM {!s} không tồn tại"
|
||||
|
||||
#: src/modules/displaymanager/main.py:894
|
||||
msgid "No display managers selected for the displaymanager module."
|
||||
msgstr ""
|
||||
"Không có trình quản lý hiển thị nào được chọn cho mô-đun quản lý hiển thị"
|
||||
|
||||
#: src/modules/displaymanager/main.py:895
|
||||
msgid ""
|
||||
"The displaymanagers list is empty or undefined in both globalstorage and "
|
||||
"displaymanager.conf."
|
||||
msgstr ""
|
||||
"Danh sách quản lý hiện thị trống hoặc không được định nghĩa cả trong "
|
||||
"globalstorage và displaymanager.conf."
|
||||
|
||||
#: src/modules/displaymanager/main.py:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
msgstr "Cầu hình quản lý hiện thị không hoàn tất"
|
||||
|
||||
#: src/modules/initcpiocfg/main.py:28
|
||||
msgid "Configuring mkinitcpio."
|
||||
msgstr "Đang cấu hình mkinitcpio."
|
||||
|
||||
#: src/modules/initcpiocfg/main.py:201
|
||||
#: src/modules/luksopenswaphookcfg/main.py:91
|
||||
#: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:74
|
||||
#: src/modules/fstab/main.py:368 src/modules/localecfg/main.py:136
|
||||
#: src/modules/networkcfg/main.py:40
|
||||
msgid "No root mount point is given for <pre>{!s}</pre> to use."
|
||||
msgstr "Không có điểm kết nối gốc cho <pre>{!s}</pre> để dùng."
|
||||
|
||||
#: src/modules/luksopenswaphookcfg/main.py:26
|
||||
msgid "Configuring encrypted swap."
|
||||
msgstr "Đang cấu hình hoán đổi mã hoá"
|
||||
|
||||
#: src/modules/rawfs/main.py:26
|
||||
msgid "Installing data."
|
||||
msgstr "Đang cài đặt dữ liệu."
|
||||
|
||||
#: src/modules/services-openrc/main.py:29
|
||||
msgid "Configure OpenRC services"
|
||||
msgstr "Cấu hình dịch vụ OpenRC"
|
||||
|
||||
#: src/modules/services-openrc/main.py:57
|
||||
msgid "Cannot add service {name!s} to run-level {level!s}."
|
||||
msgstr "Không thể thêm dịch vụ {name!s} vào run-level {level!s}."
|
||||
|
||||
#: src/modules/services-openrc/main.py:59
|
||||
msgid "Cannot remove service {name!s} from run-level {level!s}."
|
||||
msgstr "Không thể loại bỏ dịch vụ {name!s} từ run-level {level!s}."
|
||||
|
||||
#: src/modules/services-openrc/main.py:61
|
||||
msgid ""
|
||||
"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-"
|
||||
"level {level!s}."
|
||||
msgstr ""
|
||||
"Không nhận ra thao tác <code>{arg!s}</code> cho dịch vụ {name!s} ở run-level"
|
||||
" {level!s}."
|
||||
|
||||
#: src/modules/services-openrc/main.py:94
|
||||
msgid ""
|
||||
"<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}."
|
||||
msgstr ""
|
||||
"Lệnh <code>rc-update {arg!s}</code> trong môi trường chroot trả về lỗi "
|
||||
"{num!s}."
|
||||
|
||||
#: src/modules/services-openrc/main.py:101
|
||||
msgid "Target runlevel does not exist"
|
||||
msgstr "Nhóm dịch vụ khởi động không tồn tại"
|
||||
|
||||
#: src/modules/services-openrc/main.py:102
|
||||
msgid ""
|
||||
"The path for runlevel {level!s} is <code>{path!s}</code>, which does not "
|
||||
"exist."
|
||||
msgstr ""
|
||||
"Đường dẫn cho runlevel {level!s} là <code>{path!s}</code>, nhưng không tồn "
|
||||
"tại."
|
||||
|
||||
#: src/modules/services-openrc/main.py:110
|
||||
msgid "Target service does not exist"
|
||||
msgstr "Nhóm dịch vụ không tồn tại"
|
||||
|
||||
#: src/modules/services-openrc/main.py:111
|
||||
msgid ""
|
||||
"The path for service {name!s} is <code>{path!s}</code>, which does not "
|
||||
"exist."
|
||||
msgstr ""
|
||||
"Đường dẫn cho dịch vụ {name!s} là <code>{path!s}</code>, nhưng không tồn "
|
||||
"tại."
|
||||
|
||||
#: src/modules/plymouthcfg/main.py:27
|
||||
msgid "Configure Plymouth theme"
|
||||
msgstr "Cấu hình giao diện Plymouth"
|
||||
|
||||
#: src/modules/packages/main.py:50 src/modules/packages/main.py:59
|
||||
#: src/modules/packages/main.py:69
|
||||
msgid "Install packages."
|
||||
msgstr "Đang cài đặt các gói ứng dụng."
|
||||
|
||||
#: src/modules/packages/main.py:57
|
||||
#, python-format
|
||||
msgid "Processing packages (%(count)d / %(total)d)"
|
||||
msgstr "Đang xử lý gói (%(count)d / %(total)d)"
|
||||
|
||||
#: src/modules/packages/main.py:62
|
||||
#, python-format
|
||||
msgid "Installing one package."
|
||||
msgid_plural "Installing %(num)d packages."
|
||||
msgstr[0] "Đang cài đặt %(num)d gói ứng dụng."
|
||||
|
||||
#: src/modules/packages/main.py:65
|
||||
#, python-format
|
||||
msgid "Removing one package."
|
||||
msgid_plural "Removing %(num)d packages."
|
||||
msgstr[0] "Đang gỡ bỏ %(num)d gói ứng dụng."
|
||||
|
||||
#: src/modules/bootloader/main.py:42
|
||||
msgid "Install bootloader."
|
||||
msgstr "Đang cài đặt bộ khởi động."
|
||||
|
||||
#: src/modules/hwclock/main.py:26
|
||||
msgid "Setting hardware clock."
|
||||
msgstr "Đang thiết lập đồng hồ máy tính."
|
||||
|
||||
#: src/modules/mkinitfs/main.py:27
|
||||
msgid "Creating initramfs with mkinitfs."
|
||||
msgstr "Đang tạo initramfs bằng mkinitfs."
|
||||
|
||||
#: src/modules/mkinitfs/main.py:49
|
||||
msgid "Failed to run mkinitfs on the target"
|
||||
msgstr "Chạy mkinitfs thất bại ở hệ thống đích"
|
||||
|
||||
#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50
|
||||
msgid "The exit code was {}"
|
||||
msgstr "Mã lỗi trả về là {}"
|
||||
|
||||
#: src/modules/dracut/main.py:27
|
||||
msgid "Creating initramfs with dracut."
|
||||
msgstr "Đang tạo initramfs bằng dracut."
|
||||
|
||||
#: src/modules/dracut/main.py:49
|
||||
msgid "Failed to run dracut on the target"
|
||||
msgstr "Chạy dracut thất bại ở hệ thống đích"
|
||||
|
||||
#: src/modules/initramfscfg/main.py:32
|
||||
msgid "Configuring initramfs."
|
||||
msgstr "Đang cấu hình initramfs."
|
||||
|
||||
#: src/modules/openrcdmcryptcfg/main.py:25
|
||||
msgid "Configuring OpenRC dmcrypt service."
|
||||
msgstr "Đang cấu hình dịch vụ OpenRC dmcrypt."
|
||||
|
||||
#: src/modules/fstab/main.py:29
|
||||
msgid "Writing fstab."
|
||||
msgstr "Đang viết vào fstab."
|
||||
|
||||
#: src/modules/dummypython/main.py:35
|
||||
msgid "Dummy python job."
|
||||
msgstr "Ví dụ công việc python."
|
||||
|
||||
#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93
|
||||
#: src/modules/dummypython/main.py:94
|
||||
msgid "Dummy python step {}"
|
||||
msgstr "Ví dụ python bước {}"
|
||||
|
||||
#: src/modules/localecfg/main.py:30
|
||||
msgid "Configuring locales."
|
||||
msgstr "Đang cấu hình ngôn ngữ."
|
||||
|
||||
#: src/modules/networkcfg/main.py:28
|
||||
msgid "Saving network configuration."
|
||||
msgstr "Đang lưu cấu hình mạng."
|
@ -199,7 +199,7 @@ msgstr "未在顯示管理器模組中選取顯示管理器。"
|
||||
msgid ""
|
||||
"The displaymanagers list is empty or undefined in both globalstorage and "
|
||||
"displaymanager.conf."
|
||||
msgstr ""
|
||||
msgstr "顯示管理器清單為空或在 globalstorage 與 displaymanager.conf 中皆未定義。"
|
||||
|
||||
#: src/modules/displaymanager/main.py:977
|
||||
msgid "Display manager configuration was incomplete"
|
||||
|
2617
lang/tz_vi.ts
Normal file
2617
lang/tz_vi.ts
Normal file
File diff suppressed because it is too large
Load Diff
@ -42,7 +42,7 @@ set( calamares_i18n_qrc_content "" )
|
||||
|
||||
# calamares and qt language files
|
||||
foreach( lang ${CALAMARES_TRANSLATION_LANGUAGES} )
|
||||
foreach( tlsource "calamares_${lang}" "tz_${lang}" )
|
||||
foreach( tlsource "calamares_${lang}" "tz_${lang}" "kb_${lang}" )
|
||||
if( EXISTS "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" )
|
||||
set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}<file>${tlsource}.qm</file>\n" )
|
||||
list( APPEND TS_FILES "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" )
|
||||
|
@ -271,7 +271,7 @@ flavoredWidget( Calamares::Branding::PanelFlavor flavor,
|
||||
case Calamares::Branding::PanelFlavor::None:
|
||||
return nullptr;
|
||||
}
|
||||
NOTREACHED return nullptr; // All enum values handled above
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
/** @brief Adds widgets to @p layout if they belong on this @p side
|
||||
|
@ -86,9 +86,6 @@ if( WITH_PYTHON )
|
||||
PythonJob.cpp
|
||||
PythonJobApi.cpp
|
||||
)
|
||||
set_source_files_properties( PythonJob.cpp
|
||||
PROPERTIES COMPILE_FLAGS "${SUPPRESS_BOOST_WARNINGS}"
|
||||
)
|
||||
|
||||
include_directories(${PYTHON_INCLUDE_DIRS})
|
||||
link_directories(${PYTHON_LIBRARIES})
|
||||
@ -148,8 +145,8 @@ calamares_automoc( calamares )
|
||||
target_link_libraries( calamares
|
||||
LINK_PRIVATE
|
||||
${OPTIONAL_PRIVATE_LIBRARIES}
|
||||
yamlcpp
|
||||
LINK_PUBLIC
|
||||
yamlcpp
|
||||
Qt5::Core
|
||||
KF5::CoreAddons
|
||||
${OPTIONAL_PUBLIC_LIBRARIES}
|
||||
|
@ -249,6 +249,7 @@ JobQueue::~JobQueue()
|
||||
}
|
||||
|
||||
delete m_storage;
|
||||
s_instance = nullptr;
|
||||
}
|
||||
|
||||
|
||||
|
@ -284,7 +284,7 @@ PythonJob::exec()
|
||||
return JobResult::error( message, description );
|
||||
}
|
||||
}
|
||||
catch ( bp::error_already_set )
|
||||
catch ( bp::error_already_set& )
|
||||
{
|
||||
QString msg;
|
||||
if ( PyErr_Occurred() )
|
||||
|
@ -101,7 +101,7 @@ create_interface( Handler::Type t, const QString& selector )
|
||||
case Handler::Type::Fixed:
|
||||
return std::make_unique< GeoIPFixed >( selector );
|
||||
}
|
||||
NOTREACHED return nullptr;
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
static RegionZonePair
|
||||
|
@ -37,7 +37,7 @@ main( int argc, char** argv )
|
||||
QString format( argv[ 1 ] );
|
||||
QString selector = argc == 3 ? QString( argv[ 2 ] ) : QString();
|
||||
|
||||
Logger::setupLogLevel(Logger::LOGVERBOSE);
|
||||
Logger::setupLogLevel( Logger::LOGVERBOSE );
|
||||
cDebug() << "Doing GeoIP interpretation with format=" << format << "selector=" << selector;
|
||||
|
||||
Interface* handler = nullptr;
|
||||
|
@ -86,7 +86,8 @@ moduleConfigurationCandidates( bool assumeBuildDir, const QString& moduleName, c
|
||||
return paths;
|
||||
}
|
||||
|
||||
void Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Exception
|
||||
void
|
||||
Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Exception
|
||||
{
|
||||
QStringList configCandidates
|
||||
= moduleConfigurationCandidates( Settings::instance()->debugMode(), name(), configFileName );
|
||||
|
@ -85,16 +85,11 @@ void
|
||||
RequirementsModel::describe() const
|
||||
{
|
||||
cDebug() << "Requirements model has" << m_requirements.count() << "items";
|
||||
bool acceptable = true;
|
||||
int count = 0;
|
||||
for ( const auto& r : m_requirements )
|
||||
{
|
||||
cDebug() << Logger::SubEntry << "requirement" << count << r.name << "satisfied?" << r.satisfied << "mandatory?"
|
||||
<< r.mandatory;
|
||||
if ( r.mandatory && !r.satisfied )
|
||||
{
|
||||
acceptable = false;
|
||||
}
|
||||
++count;
|
||||
}
|
||||
}
|
||||
|
43
src/libcalamares/partition/KPMHelper.h
Normal file
43
src/libcalamares/partition/KPMHelper.h
Normal file
@ -0,0 +1,43 @@
|
||||
/* === This file is part of Calamares - <https://calamares.io> ===
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* Calamares is Free Software: see the License-Identifier above.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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 <backend/corebackend.h>
|
||||
#include <core/device.h>
|
||||
#include <core/lvmdevice.h>
|
||||
#include <core/partition.h>
|
||||
#include <core/partitionrole.h>
|
||||
#include <core/partitiontable.h>
|
||||
#include <fs/filesystem.h>
|
||||
#include <fs/filesystemfactory.h>
|
||||
|
||||
#ifdef __clang__
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
|
||||
#endif
|
@ -27,14 +27,14 @@ using ::Device;
|
||||
using ::Partition;
|
||||
|
||||
bool
|
||||
isPartitionFreeSpace( Partition* partition )
|
||||
isPartitionFreeSpace( const Partition* partition )
|
||||
{
|
||||
return partition->roles().has( PartitionRole::Unallocated );
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
isPartitionNew( Partition* partition )
|
||||
isPartitionNew( const Partition* partition )
|
||||
{
|
||||
#if defined( WITH_KPMCORE4API )
|
||||
constexpr auto NewState = Partition::State::New;
|
||||
@ -67,11 +67,15 @@ findPartitionByPath( const QList< Device* >& devices, const QString& path )
|
||||
}
|
||||
|
||||
for ( auto device : devices )
|
||||
{
|
||||
for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it )
|
||||
{
|
||||
if ( ( *it )->partitionPath() == path.simplified() )
|
||||
{
|
||||
return *it;
|
||||
}
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -81,11 +85,15 @@ findPartitions( const QList< Device* >& devices, std::function< bool( Partition*
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -34,14 +34,14 @@ using ::Device;
|
||||
using ::Partition;
|
||||
|
||||
/** @brief Is this a free-space area? */
|
||||
bool isPartitionFreeSpace( Partition* );
|
||||
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( Partition* );
|
||||
bool isPartitionNew( const Partition* );
|
||||
|
||||
/**
|
||||
* Iterates on all devices and return the first partition which is (already)
|
||||
|
@ -139,9 +139,7 @@ PartitionSize::toBytes( qint64 totalSectors, qint64 sectorSize ) const
|
||||
case SizeUnit::GiB:
|
||||
return toBytes();
|
||||
}
|
||||
|
||||
// notreached
|
||||
return -1;
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
qint64
|
||||
@ -178,9 +176,7 @@ PartitionSize::toBytes( qint64 totalBytes ) const
|
||||
case SizeUnit::GiB:
|
||||
return toBytes();
|
||||
}
|
||||
|
||||
// notreached
|
||||
return -1;
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
qint64
|
||||
@ -211,7 +207,7 @@ PartitionSize::toBytes() const
|
||||
case SizeUnit::GiB:
|
||||
return CalamaresUtils::GiBtoBytes( static_cast< unsigned long long >( value() ) );
|
||||
}
|
||||
NOTREACHED return -1;
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
bool
|
||||
@ -237,7 +233,7 @@ PartitionSize::operator<( const PartitionSize& other ) const
|
||||
case SizeUnit::GiB:
|
||||
return ( toBytes() < other.toBytes() );
|
||||
}
|
||||
NOTREACHED return false;
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
bool
|
||||
@ -263,7 +259,7 @@ PartitionSize::operator>( const PartitionSize& other ) const
|
||||
case SizeUnit::GiB:
|
||||
return ( toBytes() > other.toBytes() );
|
||||
}
|
||||
NOTREACHED return false;
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
bool
|
||||
@ -289,7 +285,7 @@ PartitionSize::operator==( const PartitionSize& other ) const
|
||||
case SizeUnit::GiB:
|
||||
return ( toBytes() == other.toBytes() );
|
||||
}
|
||||
NOTREACHED return false;
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
} // namespace Partition
|
||||
|
@ -16,21 +16,29 @@
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
/// @brief Convenience to zero out and deleteLater of any QObject-derived-class
|
||||
/** @brief Convenience to zero out and deleteLater of any QObject-derived-class
|
||||
*
|
||||
* If, before destruction, preserve is set to @c true, then
|
||||
* the object is "preserved", and not deleted at all.
|
||||
*/
|
||||
template < typename T >
|
||||
struct cqDeleter
|
||||
{
|
||||
T*& p;
|
||||
bool preserve = false;
|
||||
|
||||
~cqDeleter()
|
||||
{
|
||||
static_assert( std::is_base_of< QObject, T >::value, "Not a QObject-class" );
|
||||
if ( !preserve )
|
||||
{
|
||||
if ( p )
|
||||
{
|
||||
p->deleteLater();
|
||||
}
|
||||
p = nullptr;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/// @brief Sets a bool to @p value and resets to !value on destruction
|
||||
|
@ -168,17 +168,17 @@ TZLoader::tryLoad( QTranslator* translator )
|
||||
static void
|
||||
loadSingletonTranslator( TranslationLoader&& loader, QTranslator*& translator_p )
|
||||
{
|
||||
if ( !translator_p )
|
||||
{
|
||||
QTranslator* translator = new QTranslator();
|
||||
loader.tryLoad( translator );
|
||||
|
||||
if ( translator_p )
|
||||
{
|
||||
QCoreApplication::removeTranslator( translator_p );
|
||||
delete translator_p;
|
||||
}
|
||||
|
||||
QCoreApplication::installTranslator( translator );
|
||||
translator_p = translator;
|
||||
}
|
||||
else
|
||||
{
|
||||
loader.tryLoad( translator_p );
|
||||
}
|
||||
}
|
||||
|
||||
namespace CalamaresUtils
|
||||
@ -193,10 +193,9 @@ installTranslator( const QLocale& locale, const QString& brandingTranslationsPre
|
||||
{
|
||||
loadSingletonTranslator( BrandingLoader( locale, brandingTranslationsPrefix ), s_brandingTranslator );
|
||||
loadSingletonTranslator( TZLoader( locale ), s_tztranslator );
|
||||
loadSingletonTranslator( CalamaresLoader( locale ), s_translator );
|
||||
|
||||
CalamaresLoader l( locale ); // because we want the extracted localeName
|
||||
loadSingletonTranslator( std::move( l ), s_translator );
|
||||
s_translatorLocaleName = l.m_localeName;
|
||||
s_translatorLocaleName = CalamaresLoader::mungeLocaleName( locale );
|
||||
}
|
||||
|
||||
|
||||
@ -206,6 +205,12 @@ translatorLocaleName()
|
||||
return s_translatorLocaleName;
|
||||
}
|
||||
|
||||
bool
|
||||
loadTranslator( const QLocale& locale, const QString& prefix, QTranslator* translator )
|
||||
{
|
||||
return ::tryLoad( translator, prefix, locale.name() );
|
||||
}
|
||||
|
||||
Retranslator*
|
||||
Retranslator::retranslatorFor( QObject* parent )
|
||||
{
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
class QEvent;
|
||||
class QLocale;
|
||||
class QTranslator;
|
||||
|
||||
namespace CalamaresUtils
|
||||
{
|
||||
@ -31,8 +32,29 @@ namespace CalamaresUtils
|
||||
*/
|
||||
DLLEXPORT void installTranslator( const QLocale& locale, const QString& brandingTranslationsPrefix );
|
||||
|
||||
/** @brief The name of the (locale of the) most recently installed translator
|
||||
*
|
||||
* May return something different from the locale.name() of the
|
||||
* QLocale passed in, because Calamares will munge some names and
|
||||
* may remap translations.
|
||||
*/
|
||||
DLLEXPORT QString translatorLocaleName();
|
||||
|
||||
/** @brief Loads <prefix><locale> translations into the given @p translator
|
||||
*
|
||||
* This function is not intended for general use: it is for those special
|
||||
* cases where modules need their own translator / translations for data
|
||||
* that is locale to the module. Tries to load a .qm from "sensible"
|
||||
* locations, which are the same ones that installTranslator() would use.
|
||||
* Takes local-translations into account.
|
||||
*
|
||||
* Note that @p prefix should end with an underscore '_' -- this function
|
||||
* does not introduce one by itself.
|
||||
*
|
||||
* @returns @c true on success
|
||||
*/
|
||||
DLLEXPORT bool loadTranslator( const QLocale& locale, const QString& prefix, QTranslator* translator );
|
||||
|
||||
/** @brief Set @p allow to true to load translations from current dir.
|
||||
*
|
||||
* If false, (or never called) the translations are loaded only from
|
||||
|
@ -52,9 +52,7 @@ yamlToVariant( const YAML::Node& node )
|
||||
case YAML::NodeType::Undefined:
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
// NOTREACHED
|
||||
return QVariant();
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
|
||||
|
42
src/libcalamaresui/utils/QtCompat.h
Normal file
42
src/libcalamaresui/utils/QtCompat.h
Normal file
@ -0,0 +1,42 @@
|
||||
/* === This file is part of Calamares - <https://calamares.io> ===
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
* Calamares is Free Software: see the License-Identifier above.
|
||||
*
|
||||
*/
|
||||
|
||||
/**@file Handle compatibility and deprecations across Qt versions
|
||||
*
|
||||
* Since Calamares is supposed to work with Qt 5.9 or later, it covers a
|
||||
* lot of changes in the Qt API. Especially the later Qt 5.15 (last LTS)
|
||||
* versions deprecate a number of enum values and parts of the QWidgets
|
||||
* API. This file adjusts for that by introducing suitable aliases
|
||||
* and workaround-functions.
|
||||
*
|
||||
* For a similar approach for QtCore, see libcalamares/utils/String.h
|
||||
*/
|
||||
|
||||
#ifndef UTILS_QTCOMPAT_H
|
||||
#define UTILS_QTCOMPAT_H
|
||||
|
||||
#include <QPalette>
|
||||
|
||||
/* Avoid warnings about QPalette changes */
|
||||
constexpr static const auto WindowBackground =
|
||||
#if QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 )
|
||||
QPalette::Background
|
||||
#else
|
||||
QPalette::Window
|
||||
#endif
|
||||
;
|
||||
|
||||
constexpr static const auto WindowText =
|
||||
#if QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 )
|
||||
QPalette::Foreground
|
||||
#else
|
||||
QPalette::WindowText
|
||||
#endif
|
||||
;
|
||||
|
||||
#endif
|
@ -42,7 +42,7 @@ makeSlideshow( QWidget* parent )
|
||||
return new Calamares::SlideshowPictures( parent );
|
||||
#ifdef WITH_QML
|
||||
case 1:
|
||||
FALLTHRU;
|
||||
[[fallthrough]];
|
||||
case 2:
|
||||
return new Calamares::SlideshowQML( parent );
|
||||
#endif
|
||||
|
@ -8,35 +8,35 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-10-15 12:53+0200\n"
|
||||
"POT-Creation-Date: 2020-11-09 15:12+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: \n"
|
||||
|
||||
#: src/modules/dummypythonqt/main.py:75
|
||||
msgid "Click me!"
|
||||
msgstr "Click me!"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/dummypythonqt/main.py:85
|
||||
msgid "A new QLabel."
|
||||
msgstr "A new QLabel."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/dummypythonqt/main.py:88
|
||||
msgid "Dummy PythonQt ViewStep"
|
||||
msgstr "Dummy PythonQt ViewStep"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/dummypythonqt/main.py:174
|
||||
msgid "The Dummy PythonQt Job"
|
||||
msgstr "The Dummy PythonQt Job"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/dummypythonqt/main.py:177
|
||||
msgid "This is the Dummy PythonQt Job. The dummy job says: {}"
|
||||
msgstr "This is the Dummy PythonQt Job. The dummy job says: {}"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/dummypythonqt/main.py:181
|
||||
msgid "A status message for Dummy PythonQt Job."
|
||||
msgstr "A status message for Dummy PythonQt Job."
|
||||
msgstr ""
|
||||
|
@ -161,6 +161,9 @@ def modify_mkinitcpio_conf(partitions, root_mount_point):
|
||||
hooks.append("usr")
|
||||
|
||||
if encrypt_hook:
|
||||
if detect_plymouth():
|
||||
hooks.append("plymouth-encrypt")
|
||||
else:
|
||||
hooks.append("encrypt")
|
||||
if not unencrypted_separate_boot and \
|
||||
os.path.isfile(
|
||||
|
25
src/modules/keyboard/AdditionalLayoutInfo.h
Normal file
25
src/modules/keyboard/AdditionalLayoutInfo.h
Normal file
@ -0,0 +1,25 @@
|
||||
/* === This file is part of Calamares - <https://calamares.io> ===
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2020 Artem Grinev <agrinev@manjaro.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* Calamares is Free Software: see the License-Identifier above.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef KEYBOARD_ADDITIONAL_LAYOUT_INFO_H
|
||||
#define KEYBOARD_ADDITIONAL_LAYOUT_INFO_H
|
||||
|
||||
#include <QString>
|
||||
|
||||
struct AdditionalLayoutInfo
|
||||
{
|
||||
QString additionalLayout;
|
||||
QString additionalVariant;
|
||||
|
||||
QString groupSwitcher;
|
||||
|
||||
QString vconsoleKeymap;
|
||||
};
|
||||
|
||||
#endif
|
@ -7,6 +7,7 @@ calamares_add_plugin( keyboard
|
||||
TYPE viewmodule
|
||||
EXPORT_MACRO PLUGINDLLEXPORT_PRO
|
||||
SOURCES
|
||||
Config.cpp
|
||||
KeyboardViewStep.cpp
|
||||
KeyboardPage.cpp
|
||||
KeyboardLayoutModel.cpp
|
||||
|
@ -18,170 +18,28 @@
|
||||
#include "utils/Logger.h"
|
||||
#include "utils/Retranslator.h"
|
||||
#include "utils/String.h"
|
||||
#include "utils/Variant.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QProcess>
|
||||
#include <QTimer>
|
||||
|
||||
KeyboardModelsModel::KeyboardModelsModel( QObject* parent )
|
||||
: QAbstractListModel( parent )
|
||||
/* Returns stringlist with suitable setxkbmap command-line arguments
|
||||
* to set the given @p model.
|
||||
*/
|
||||
static inline QStringList
|
||||
xkbmap_model_args( const QString& model )
|
||||
{
|
||||
detectModels();
|
||||
QStringList r { "-model", model };
|
||||
return r;
|
||||
}
|
||||
|
||||
void
|
||||
KeyboardModelsModel::detectModels()
|
||||
{
|
||||
beginResetModel();
|
||||
const auto models = KeyboardGlobal::getKeyboardModels();
|
||||
auto index = -1;
|
||||
for ( const auto& key : models.keys() )
|
||||
{
|
||||
index++;
|
||||
m_list << QMap< QString, QString > { { "label", key }, { "key", models[ key ] } };
|
||||
if ( models[ key ] == "pc105" )
|
||||
{
|
||||
this->setCurrentIndex( index );
|
||||
}
|
||||
}
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
void
|
||||
KeyboardModelsModel::refresh()
|
||||
{
|
||||
m_list.clear();
|
||||
setCurrentIndex( -1 );
|
||||
detectModels();
|
||||
}
|
||||
|
||||
QVariant
|
||||
KeyboardModelsModel::data( const QModelIndex& index, int role ) const
|
||||
{
|
||||
if ( !index.isValid() )
|
||||
{
|
||||
return QVariant();
|
||||
}
|
||||
const auto item = m_list.at( index.row() );
|
||||
return role == Qt::DisplayRole ? item[ "label" ] : item[ "key" ];
|
||||
}
|
||||
|
||||
int
|
||||
KeyboardModelsModel::rowCount( const QModelIndex& ) const
|
||||
{
|
||||
return m_list.count();
|
||||
}
|
||||
|
||||
QHash< int, QByteArray >
|
||||
KeyboardModelsModel::roleNames() const
|
||||
{
|
||||
return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } };
|
||||
}
|
||||
|
||||
int
|
||||
KeyboardModelsModel::currentIndex() const
|
||||
{
|
||||
return m_currentIndex;
|
||||
}
|
||||
|
||||
const QMap< QString, QString >
|
||||
KeyboardModelsModel::item( const int& index ) const
|
||||
{
|
||||
if ( index >= m_list.count() || index < 0 )
|
||||
{
|
||||
return QMap< QString, QString >();
|
||||
}
|
||||
|
||||
return m_list.at( index );
|
||||
}
|
||||
|
||||
const QMap< QString, QString >
|
||||
KeyboardVariantsModel::item( const int& index ) const
|
||||
{
|
||||
if ( index >= m_list.count() || index < 0 )
|
||||
{
|
||||
return QMap< QString, QString >();
|
||||
}
|
||||
|
||||
return m_list.at( index );
|
||||
}
|
||||
|
||||
void
|
||||
KeyboardModelsModel::setCurrentIndex( const int& index )
|
||||
{
|
||||
if ( index >= m_list.count() || index < 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_currentIndex = index;
|
||||
emit currentIndexChanged( m_currentIndex );
|
||||
}
|
||||
|
||||
KeyboardVariantsModel::KeyboardVariantsModel( QObject* parent )
|
||||
: QAbstractListModel( parent )
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
KeyboardVariantsModel::currentIndex() const
|
||||
{
|
||||
return m_currentIndex;
|
||||
}
|
||||
|
||||
void
|
||||
KeyboardVariantsModel::setCurrentIndex( const int& index )
|
||||
{
|
||||
if ( index >= m_list.count() || index < 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_currentIndex = index;
|
||||
emit currentIndexChanged( m_currentIndex );
|
||||
}
|
||||
|
||||
QVariant
|
||||
KeyboardVariantsModel::data( const QModelIndex& index, int role ) const
|
||||
{
|
||||
if ( !index.isValid() )
|
||||
{
|
||||
return QVariant();
|
||||
}
|
||||
const auto item = m_list.at( index.row() );
|
||||
return role == Qt::DisplayRole ? item[ "label" ] : item[ "key" ];
|
||||
}
|
||||
|
||||
int
|
||||
KeyboardVariantsModel::rowCount( const QModelIndex& ) const
|
||||
{
|
||||
return m_list.count();
|
||||
}
|
||||
|
||||
QHash< int, QByteArray >
|
||||
KeyboardVariantsModel::roleNames() const
|
||||
{
|
||||
return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } };
|
||||
}
|
||||
|
||||
void
|
||||
KeyboardVariantsModel::setVariants( QMap< QString, QString > variants )
|
||||
{
|
||||
m_list.clear();
|
||||
beginResetModel();
|
||||
for ( const auto& key : variants.keys() )
|
||||
{
|
||||
const auto item = QMap< QString, QString > { { "label", key }, { "key", variants[ key ] } };
|
||||
m_list << item;
|
||||
}
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
/* Returns stringlist with suitable setxkbmap command-line arguments
|
||||
* to set the given @p layout and @p variant.
|
||||
*/
|
||||
static inline QStringList
|
||||
xkbmap_args( const QString& layout, const QString& variant )
|
||||
xkbmap_layout_args( const QString& layout, const QString& variant )
|
||||
{
|
||||
QStringList r { "-layout", layout };
|
||||
if ( !variant.isEmpty() )
|
||||
@ -191,6 +49,103 @@ xkbmap_args( const QString& layout, const QString& variant )
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline QStringList
|
||||
xkbmap_layout_args( const QStringList& layouts,
|
||||
const QStringList& variants,
|
||||
const QString& switchOption = "grp:alt_shift_toggle" )
|
||||
{
|
||||
if ( layouts.size() != variants.size() )
|
||||
{
|
||||
cError() << "Number of layouts and variants must be equal (empty string should be used if there is no "
|
||||
"corresponding variant)";
|
||||
return QStringList();
|
||||
}
|
||||
|
||||
QStringList r { "-layout", layouts.join( "," ) };
|
||||
|
||||
if ( !variants.isEmpty() )
|
||||
{
|
||||
r << "-variant" << variants.join( "," );
|
||||
}
|
||||
|
||||
if ( !switchOption.isEmpty() )
|
||||
{
|
||||
r << "-option" << switchOption;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Returns group-switch setxkbd option if set
|
||||
* or an empty string otherwise
|
||||
*/
|
||||
static inline QString
|
||||
xkbmap_query_grp_option()
|
||||
{
|
||||
QProcess setxkbmapQuery;
|
||||
setxkbmapQuery.start( "setxkbmap", { "-query" } );
|
||||
setxkbmapQuery.waitForFinished();
|
||||
|
||||
QString outputLine;
|
||||
|
||||
do
|
||||
{
|
||||
outputLine = setxkbmapQuery.readLine();
|
||||
} while ( setxkbmapQuery.canReadLine() && !outputLine.startsWith( "options:" ) );
|
||||
|
||||
if ( !outputLine.startsWith( "options:" ) )
|
||||
{
|
||||
return QString();
|
||||
}
|
||||
|
||||
int index = outputLine.indexOf( "grp:" );
|
||||
|
||||
if ( index == -1 )
|
||||
{
|
||||
return QString();
|
||||
}
|
||||
|
||||
//it's either in the end of line or before the other option so \s or ,
|
||||
int lastIndex = outputLine.indexOf( QRegExp( "[\\s,]" ), index );
|
||||
|
||||
return outputLine.mid( index, lastIndex - index );
|
||||
}
|
||||
|
||||
AdditionalLayoutInfo
|
||||
Config::getAdditionalLayoutInfo( const QString& layout )
|
||||
{
|
||||
QFile layoutTable( ":/non-ascii-layouts" );
|
||||
|
||||
if ( !layoutTable.open( QIODevice::ReadOnly | QIODevice::Text ) )
|
||||
{
|
||||
cError() << "Non-ASCII layout table could not be opened";
|
||||
return AdditionalLayoutInfo();
|
||||
}
|
||||
|
||||
QString tableLine;
|
||||
|
||||
do
|
||||
{
|
||||
tableLine = layoutTable.readLine();
|
||||
} while ( layoutTable.canReadLine() && !tableLine.startsWith( layout ) );
|
||||
|
||||
if ( !tableLine.startsWith( layout ) )
|
||||
{
|
||||
return AdditionalLayoutInfo();
|
||||
}
|
||||
|
||||
QStringList tableEntries = tableLine.split( " ", SplitSkipEmptyParts );
|
||||
|
||||
AdditionalLayoutInfo r;
|
||||
|
||||
r.additionalLayout = tableEntries[ 1 ];
|
||||
r.additionalVariant = tableEntries[ 2 ] == "-" ? "" : tableEntries[ 2 ];
|
||||
|
||||
r.vconsoleKeymap = tableEntries[ 3 ];
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
Config::Config( QObject* parent )
|
||||
: QObject( parent )
|
||||
, m_keyboardModelsModel( new KeyboardModelsModel( this ) )
|
||||
@ -201,9 +156,9 @@ Config::Config( QObject* parent )
|
||||
|
||||
// Connect signals and slots
|
||||
connect( m_keyboardModelsModel, &KeyboardModelsModel::currentIndexChanged, [&]( int index ) {
|
||||
m_selectedModel = m_keyboardModelsModel->item( index ).value( "key", "pc105" );
|
||||
// Set Xorg keyboard model
|
||||
QProcess::execute( "setxkbmap", QStringList { "-model", m_selectedModel } );
|
||||
m_selectedModel = m_keyboardModelsModel->key( index );
|
||||
QProcess::execute( "setxkbmap", xkbmap_model_args( m_selectedModel ) );
|
||||
emit prettyStatusChanged();
|
||||
} );
|
||||
|
||||
@ -214,9 +169,9 @@ Config::Config( QObject* parent )
|
||||
} );
|
||||
|
||||
connect( m_keyboardVariantsModel, &KeyboardVariantsModel::currentIndexChanged, [&]( int index ) {
|
||||
m_selectedVariant = m_keyboardVariantsModel->item( index )[ "key" ];
|
||||
// Set Xorg keyboard layout + variant
|
||||
m_selectedVariant = m_keyboardVariantsModel->key( index );
|
||||
|
||||
// Set Xorg keyboard layout
|
||||
if ( m_setxkbmapTimer.isActive() )
|
||||
{
|
||||
m_setxkbmapTimer.stop();
|
||||
@ -224,8 +179,32 @@ Config::Config( QObject* parent )
|
||||
}
|
||||
|
||||
connect( &m_setxkbmapTimer, &QTimer::timeout, this, [=] {
|
||||
QProcess::execute( "setxkbmap", xkbmap_args( m_selectedLayout, m_selectedVariant ) );
|
||||
m_additionalLayoutInfo = getAdditionalLayoutInfo( m_selectedLayout );
|
||||
|
||||
if ( !m_additionalLayoutInfo.additionalLayout.isEmpty() )
|
||||
{
|
||||
m_additionalLayoutInfo.groupSwitcher = xkbmap_query_grp_option();
|
||||
|
||||
if ( m_additionalLayoutInfo.groupSwitcher.isEmpty() )
|
||||
{
|
||||
m_additionalLayoutInfo.groupSwitcher = "grp:alt_shift_toggle";
|
||||
}
|
||||
|
||||
QProcess::execute( "setxkbmap",
|
||||
xkbmap_layout_args( { m_additionalLayoutInfo.additionalLayout, m_selectedLayout },
|
||||
{ m_additionalLayoutInfo.additionalVariant, m_selectedVariant },
|
||||
m_additionalLayoutInfo.groupSwitcher ) );
|
||||
|
||||
|
||||
cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant << "(added "
|
||||
<< m_additionalLayoutInfo.additionalLayout << "-" << m_additionalLayoutInfo.additionalVariant
|
||||
<< " since current layout is not ASCII-capable)";
|
||||
}
|
||||
else
|
||||
{
|
||||
QProcess::execute( "setxkbmap", xkbmap_layout_args( m_selectedLayout, m_selectedVariant ) );
|
||||
cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant;
|
||||
}
|
||||
m_setxkbmapTimer.disconnect( this );
|
||||
} );
|
||||
m_setxkbmapTimer.start( QApplication::keyboardInputInterval() );
|
||||
@ -269,7 +248,7 @@ findLayout( const KeyboardLayoutModel* klm, const QString& currentLayout )
|
||||
}
|
||||
|
||||
void
|
||||
Config::init()
|
||||
Config::detectCurrentKeyboardLayout()
|
||||
{
|
||||
//### Detect current keyboard layout and variant
|
||||
QString currentLayout;
|
||||
@ -281,18 +260,25 @@ Config::init()
|
||||
{
|
||||
const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts );
|
||||
|
||||
for ( QString line : list )
|
||||
// A typical line looks like
|
||||
// xkb_symbols { include "pc+latin+ru:2+inet(evdev)+group(alt_shift_toggle)+ctrl(swapcaps)" };
|
||||
for ( const auto& line : list )
|
||||
{
|
||||
line = line.trimmed();
|
||||
if ( !line.startsWith( "xkb_symbols" ) )
|
||||
if ( !line.trimmed().startsWith( "xkb_symbols" ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
line = line.remove( "}" ).remove( "{" ).remove( ";" );
|
||||
line = line.mid( line.indexOf( "\"" ) + 1 );
|
||||
int firstQuote = line.indexOf( '"' );
|
||||
int lastQuote = line.lastIndexOf( '"' );
|
||||
|
||||
QStringList split = line.split( "+", SplitSkipEmptyParts );
|
||||
if ( firstQuote < 0 || lastQuote < 0 || lastQuote <= firstQuote )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
QStringList split = line.mid( firstQuote + 1, lastQuote - firstQuote ).split( "+", SplitSkipEmptyParts );
|
||||
cDebug() << split;
|
||||
if ( split.size() >= 2 )
|
||||
{
|
||||
currentLayout = split.at( 1 );
|
||||
@ -338,11 +324,11 @@ Config::prettyStatus() const
|
||||
{
|
||||
QString status;
|
||||
status += tr( "Set keyboard model to %1.<br/>" )
|
||||
.arg( m_keyboardModelsModel->item( m_keyboardModelsModel->currentIndex() )[ "label" ] );
|
||||
.arg( m_keyboardModelsModel->label( m_keyboardModelsModel->currentIndex() ) );
|
||||
|
||||
QString layout = m_keyboardLayoutsModel->item( m_keyboardLayoutsModel->currentIndex() ).second.description;
|
||||
QString variant = m_keyboardVariantsModel->currentIndex() >= 0
|
||||
? m_keyboardVariantsModel->item( m_keyboardVariantsModel->currentIndex() )[ "label" ]
|
||||
? m_keyboardVariantsModel->label( m_keyboardVariantsModel->currentIndex() )
|
||||
: QString( "<default>" );
|
||||
status += tr( "Set keyboard layout to %1/%2." ).arg( layout, variant );
|
||||
|
||||
@ -350,16 +336,17 @@ Config::prettyStatus() const
|
||||
}
|
||||
|
||||
Calamares::JobList
|
||||
Config::createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard )
|
||||
Config::createJobs()
|
||||
{
|
||||
QList< Calamares::job_ptr > list;
|
||||
|
||||
Calamares::Job* j = new SetKeyboardLayoutJob( m_selectedModel,
|
||||
m_selectedLayout,
|
||||
m_selectedVariant,
|
||||
xOrgConfFileName,
|
||||
convertedKeymapPath,
|
||||
writeEtcDefaultKeyboard );
|
||||
m_additionalLayoutInfo,
|
||||
m_xOrgConfFileName,
|
||||
m_convertedKeymapPath,
|
||||
m_writeEtcDefaultKeyboard );
|
||||
list.append( Calamares::job_ptr( j ) );
|
||||
|
||||
return list;
|
||||
@ -393,13 +380,12 @@ Config::guessLayout( const QStringList& langParts )
|
||||
cDebug() << "Next level:" << *countryPart;
|
||||
for ( int variantnumber = 0; variantnumber < m_keyboardVariantsModel->rowCount(); ++variantnumber )
|
||||
{
|
||||
if ( m_keyboardVariantsModel->item( variantnumber )[ "key" ].compare( *countryPart,
|
||||
Qt::CaseInsensitive ) )
|
||||
if ( m_keyboardVariantsModel->key( variantnumber ).compare( *countryPart, Qt::CaseInsensitive )
|
||||
== 0 )
|
||||
{
|
||||
m_keyboardVariantsModel->setCurrentIndex( variantnumber );
|
||||
cDebug() << Logger::SubEntry << "matched variant"
|
||||
<< m_keyboardVariantsModel->item( variantnumber )[ "key" ] << ' '
|
||||
<< m_keyboardVariantsModel->item( variantnumber )[ "key" ];
|
||||
cDebug() << Logger::SubEntry << "matched variant" << *countryPart << ' '
|
||||
<< m_keyboardVariantsModel->key( variantnumber );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -507,6 +493,13 @@ Config::finalize()
|
||||
{
|
||||
gs->insert( "keyboardLayout", m_selectedLayout );
|
||||
gs->insert( "keyboardVariant", m_selectedVariant ); //empty means default variant
|
||||
|
||||
if ( !m_additionalLayoutInfo.additionalLayout.isEmpty() )
|
||||
{
|
||||
gs->insert( "keyboardAdditionalLayout", m_additionalLayoutInfo.additionalLayout );
|
||||
gs->insert( "keyboardAdditionalLayout", m_additionalLayoutInfo.additionalVariant );
|
||||
gs->insert( "keyboardVConsoleKeymap", m_additionalLayoutInfo.vconsoleKeymap );
|
||||
}
|
||||
}
|
||||
|
||||
//FIXME: also store keyboard model for something?
|
||||
@ -529,3 +522,47 @@ Config::updateVariants( const QPersistentModelIndex& currentItem, QString curren
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Config::setConfigurationMap( const QVariantMap& configurationMap )
|
||||
{
|
||||
using namespace CalamaresUtils;
|
||||
|
||||
if ( configurationMap.contains( "xOrgConfFileName" )
|
||||
&& configurationMap.value( "xOrgConfFileName" ).type() == QVariant::String
|
||||
&& !getString( configurationMap, "xOrgConfFileName" ).isEmpty() )
|
||||
{
|
||||
m_xOrgConfFileName = getString( configurationMap, "xOrgConfFileName" );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_xOrgConfFileName = "00-keyboard.conf";
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "convertedKeymapPath" )
|
||||
&& configurationMap.value( "convertedKeymapPath" ).type() == QVariant::String
|
||||
&& !getString( configurationMap, "convertedKeymapPath" ).isEmpty() )
|
||||
{
|
||||
m_convertedKeymapPath = getString( configurationMap, "convertedKeymapPath" );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_convertedKeymapPath = QString();
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "writeEtcDefaultKeyboard" )
|
||||
&& configurationMap.value( "writeEtcDefaultKeyboard" ).type() == QVariant::Bool )
|
||||
{
|
||||
m_writeEtcDefaultKeyboard = getBool( configurationMap, "writeEtcDefaultKeyboard", true );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_writeEtcDefaultKeyboard = true;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Config::retranslate()
|
||||
{
|
||||
retranslateKeyboardModels();
|
||||
}
|
||||
|
@ -11,6 +11,7 @@
|
||||
#ifndef KEYBOARD_CONFIG_H
|
||||
#define KEYBOARD_CONFIG_H
|
||||
|
||||
#include "AdditionalLayoutInfo.h"
|
||||
#include "Job.h"
|
||||
#include "KeyboardLayoutModel.h"
|
||||
|
||||
@ -20,63 +21,6 @@
|
||||
#include <QTimer>
|
||||
#include <QUrl>
|
||||
|
||||
class KeyboardModelsModel : public QAbstractListModel
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY( int currentIndex WRITE setCurrentIndex READ currentIndex NOTIFY currentIndexChanged )
|
||||
|
||||
public:
|
||||
explicit KeyboardModelsModel( QObject* parent = nullptr );
|
||||
int rowCount( const QModelIndex& = QModelIndex() ) const override;
|
||||
QVariant data( const QModelIndex& index, int role ) const override;
|
||||
|
||||
void setCurrentIndex( const int& index );
|
||||
int currentIndex() const;
|
||||
const QMap< QString, QString > item( const int& index ) const;
|
||||
|
||||
public slots:
|
||||
void refresh();
|
||||
|
||||
protected:
|
||||
QHash< int, QByteArray > roleNames() const override;
|
||||
|
||||
private:
|
||||
int m_currentIndex = -1;
|
||||
QVector< QMap< QString, QString > > m_list;
|
||||
void detectModels();
|
||||
|
||||
signals:
|
||||
void currentIndexChanged( int index );
|
||||
};
|
||||
|
||||
class KeyboardVariantsModel : public QAbstractListModel
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY( int currentIndex WRITE setCurrentIndex READ currentIndex NOTIFY currentIndexChanged )
|
||||
|
||||
public:
|
||||
explicit KeyboardVariantsModel( QObject* parent = nullptr );
|
||||
void setVariants( QMap< QString, QString > variants );
|
||||
|
||||
int rowCount( const QModelIndex& = QModelIndex() ) const override;
|
||||
QVariant data( const QModelIndex& index, int role ) const override;
|
||||
|
||||
void setCurrentIndex( const int& index );
|
||||
int currentIndex() const;
|
||||
|
||||
const QMap< QString, QString > item( const int& index ) const;
|
||||
|
||||
protected:
|
||||
QHash< int, QByteArray > roleNames() const override;
|
||||
|
||||
private:
|
||||
int m_currentIndex = -1;
|
||||
QVector< QMap< QString, QString > > m_list;
|
||||
|
||||
signals:
|
||||
void currentIndexChanged( int index );
|
||||
};
|
||||
|
||||
class Config : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -88,15 +32,46 @@ class Config : public QObject
|
||||
public:
|
||||
Config( QObject* parent = nullptr );
|
||||
|
||||
void init();
|
||||
void detectCurrentKeyboardLayout();
|
||||
|
||||
Calamares::JobList
|
||||
createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard );
|
||||
Calamares::JobList createJobs();
|
||||
QString prettyStatus() const;
|
||||
|
||||
void onActivate();
|
||||
void finalize();
|
||||
|
||||
void setConfigurationMap( const QVariantMap& configurationMap );
|
||||
|
||||
static AdditionalLayoutInfo getAdditionalLayoutInfo( const QString& layout );
|
||||
|
||||
/* A model is a physical configuration of a keyboard, e.g. 105-key PC
|
||||
* or TKL 88-key physical size.
|
||||
*/
|
||||
KeyboardModelsModel* keyboardModels() const;
|
||||
/* A layout describes the basic keycaps / language assigned to the
|
||||
* keys of the physical keyboard, e.g. English (US) or Russian.
|
||||
*/
|
||||
KeyboardLayoutModel* keyboardLayouts() const;
|
||||
/* A variant describes a variant of the basic keycaps; this can
|
||||
* concern options (dead keys), or different placements of the keycaps
|
||||
* (dvorak).
|
||||
*/
|
||||
KeyboardVariantsModel* keyboardVariants() const;
|
||||
|
||||
/** @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();
|
||||
|
||||
signals:
|
||||
void prettyStatusChanged();
|
||||
|
||||
private:
|
||||
void guessLayout( const QStringList& langParts );
|
||||
void updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant = QString() );
|
||||
@ -108,16 +83,16 @@ private:
|
||||
QString m_selectedLayout;
|
||||
QString m_selectedModel;
|
||||
QString m_selectedVariant;
|
||||
|
||||
// Layout (and corresponding info) added if current one doesn't support ASCII (e.g. Russian or Japanese)
|
||||
AdditionalLayoutInfo m_additionalLayoutInfo;
|
||||
|
||||
QTimer m_setxkbmapTimer;
|
||||
|
||||
protected:
|
||||
KeyboardModelsModel* keyboardModels() const;
|
||||
KeyboardLayoutModel* keyboardLayouts() const;
|
||||
KeyboardVariantsModel* keyboardVariants() const;
|
||||
|
||||
|
||||
signals:
|
||||
void prettyStatusChanged();
|
||||
// From configuration
|
||||
QString m_xOrgConfFileName;
|
||||
QString m_convertedKeymapPath;
|
||||
bool m_writeEtcDefaultKeyboard = true;
|
||||
};
|
||||
|
||||
|
||||
|
825
src/modules/keyboard/KeyboardData_p.cxxtr
Normal file
825
src/modules/keyboard/KeyboardData_p.cxxtr
Normal file
@ -0,0 +1,825 @@
|
||||
/* GENERATED FILE DO NOT EDIT
|
||||
*
|
||||
* === This file is part of Calamares - <https://calamares.io> ===
|
||||
*
|
||||
* 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()
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -10,8 +10,136 @@
|
||||
|
||||
#include "KeyboardLayoutModel.h"
|
||||
|
||||
#include "utils/Logger.h"
|
||||
#include "utils/RAII.h"
|
||||
#include "utils/Retranslator.h"
|
||||
|
||||
#include <QTranslator>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
static QTranslator* s_kbtranslator = nullptr;
|
||||
|
||||
void
|
||||
retranslateKeyboardModels()
|
||||
{
|
||||
if ( !s_kbtranslator )
|
||||
{
|
||||
s_kbtranslator = new QTranslator;
|
||||
}
|
||||
(void)CalamaresUtils::loadTranslator( QLocale(), QStringLiteral( "kb_" ), s_kbtranslator );
|
||||
}
|
||||
|
||||
|
||||
XKBListModel::XKBListModel( QObject* parent )
|
||||
: QAbstractListModel( parent )
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
XKBListModel::rowCount( const QModelIndex& ) const
|
||||
{
|
||||
return m_list.count();
|
||||
}
|
||||
|
||||
QVariant
|
||||
XKBListModel::data( const QModelIndex& index, int role ) const
|
||||
{
|
||||
if ( !index.isValid() )
|
||||
{
|
||||
return QVariant();
|
||||
}
|
||||
if ( index.row() < 0 || index.row() >= m_list.count() )
|
||||
{
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
const auto item = m_list.at( index.row() );
|
||||
switch ( role )
|
||||
{
|
||||
case LabelRole:
|
||||
if ( s_kbtranslator && !s_kbtranslator->isEmpty() && m_contextname )
|
||||
{
|
||||
auto s = s_kbtranslator->translate( m_contextname, item.label.toUtf8().data() );
|
||||
if ( !s.isEmpty() )
|
||||
{
|
||||
return s;
|
||||
}
|
||||
}
|
||||
return item.label;
|
||||
case KeyRole:
|
||||
return item.key;
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
QString
|
||||
XKBListModel::key( int index ) const
|
||||
{
|
||||
if ( index < 0 || index >= m_list.count() )
|
||||
{
|
||||
return QString();
|
||||
}
|
||||
return m_list[ index ].key;
|
||||
}
|
||||
|
||||
QString
|
||||
XKBListModel::label( int index ) const
|
||||
{
|
||||
if ( index < 0 || index >= m_list.count() )
|
||||
{
|
||||
return QString();
|
||||
}
|
||||
return m_list[ index ].label;
|
||||
}
|
||||
|
||||
QHash< int, QByteArray >
|
||||
XKBListModel::roleNames() const
|
||||
{
|
||||
return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } };
|
||||
}
|
||||
|
||||
void
|
||||
XKBListModel::setCurrentIndex( int index )
|
||||
{
|
||||
if ( index >= m_list.count() || index < 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( m_currentIndex != index )
|
||||
{
|
||||
m_currentIndex = index;
|
||||
emit currentIndexChanged( m_currentIndex );
|
||||
}
|
||||
}
|
||||
|
||||
KeyboardModelsModel::KeyboardModelsModel( QObject* parent )
|
||||
: XKBListModel( parent )
|
||||
{
|
||||
m_contextname = "kb_models";
|
||||
|
||||
// The models map is from human-readable names (!) to xkb identifier
|
||||
const auto models = KeyboardGlobal::getKeyboardModels();
|
||||
m_list.reserve( models.count() );
|
||||
int index = 0;
|
||||
for ( const auto& key : models.keys() )
|
||||
{
|
||||
// So here *key* is the key in the map, which is the human-readable thing,
|
||||
// while the struct fields are xkb-id, and human-readable
|
||||
m_list << ModelInfo { models[ key ], key };
|
||||
if ( models[ key ] == "pc105" )
|
||||
{
|
||||
m_defaultPC105 = index;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
|
||||
cDebug() << "Loaded" << m_list.count() << "keyboard models";
|
||||
setCurrentIndex(); // If pc105 was seen, select it now
|
||||
}
|
||||
|
||||
|
||||
KeyboardLayoutModel::KeyboardLayoutModel( QObject* parent )
|
||||
: QAbstractListModel( parent )
|
||||
@ -38,7 +166,18 @@ KeyboardLayoutModel::data( const QModelIndex& index, int role ) const
|
||||
switch ( role )
|
||||
{
|
||||
case Qt::DisplayRole:
|
||||
return m_layouts.at( index.row() ).second.description;
|
||||
{
|
||||
auto description = m_layouts.at( index.row() ).second.description;
|
||||
if ( s_kbtranslator && !s_kbtranslator->isEmpty() )
|
||||
{
|
||||
auto s = s_kbtranslator->translate( "kb_layouts", description.toUtf8().data() );
|
||||
if ( !s.isEmpty() )
|
||||
{
|
||||
return s;
|
||||
}
|
||||
}
|
||||
return description;
|
||||
}
|
||||
case KeyboardVariantsRole:
|
||||
return QVariant::fromValue( m_layouts.at( index.row() ).second.variants );
|
||||
case KeyboardLayoutKeyRole:
|
||||
@ -59,6 +198,16 @@ KeyboardLayoutModel::item( const int& index ) const
|
||||
return m_layouts.at( index );
|
||||
}
|
||||
|
||||
QString
|
||||
KeyboardLayoutModel::key( int index ) const
|
||||
{
|
||||
if ( index >= m_layouts.count() || index < 0 )
|
||||
{
|
||||
return QString();
|
||||
}
|
||||
return m_layouts.at( index ).first;
|
||||
}
|
||||
|
||||
void
|
||||
KeyboardLayoutModel::init()
|
||||
{
|
||||
@ -83,15 +232,18 @@ KeyboardLayoutModel::roleNames() const
|
||||
}
|
||||
|
||||
void
|
||||
KeyboardLayoutModel::setCurrentIndex( const int& index )
|
||||
KeyboardLayoutModel::setCurrentIndex( int index )
|
||||
{
|
||||
if ( index >= m_layouts.count() || index < 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( m_currentIndex != index )
|
||||
{
|
||||
m_currentIndex = index;
|
||||
emit currentIndexChanged( m_currentIndex );
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
@ -99,3 +251,24 @@ KeyboardLayoutModel::currentIndex() const
|
||||
{
|
||||
return m_currentIndex;
|
||||
}
|
||||
|
||||
|
||||
KeyboardVariantsModel::KeyboardVariantsModel( QObject* parent )
|
||||
: XKBListModel( parent )
|
||||
{
|
||||
m_contextname = "kb_variants";
|
||||
}
|
||||
|
||||
void
|
||||
KeyboardVariantsModel::setVariants( QMap< QString, QString > variants )
|
||||
{
|
||||
beginResetModel();
|
||||
m_list.clear();
|
||||
m_list.reserve( variants.count() );
|
||||
for ( const auto& key : variants.keys() )
|
||||
{
|
||||
m_list << ModelInfo { variants[ key ], key };
|
||||
}
|
||||
m_currentIndex = -1;
|
||||
endResetModel();
|
||||
}
|
||||
|
@ -17,6 +17,85 @@
|
||||
#include <QMetaType>
|
||||
#include <QObject>
|
||||
|
||||
/** @brief A list model with an xkb key and a human-readable string
|
||||
*
|
||||
* This model acts like it has a single selection, as well.
|
||||
*/
|
||||
class XKBListModel : public QAbstractListModel
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY( int currentIndex WRITE setCurrentIndex READ currentIndex NOTIFY currentIndexChanged )
|
||||
|
||||
public:
|
||||
enum
|
||||
{
|
||||
LabelRole = Qt::DisplayRole, ///< Human-readable
|
||||
KeyRole = Qt::UserRole ///< xkb identifier
|
||||
};
|
||||
|
||||
explicit XKBListModel( QObject* parent = nullptr );
|
||||
|
||||
int rowCount( const QModelIndex& = QModelIndex() ) const override;
|
||||
QVariant data( const QModelIndex& index, int role ) const override;
|
||||
/** @brief xkb key for a given index (row)
|
||||
*
|
||||
* This is like calling data( QModelIndex( index ), KeyRole ).toString(),
|
||||
* but shorter and faster. Can return an empty string if index is invalid.
|
||||
*/
|
||||
QString key( int index ) const;
|
||||
|
||||
/** @brief human-readable label for a given index (row)
|
||||
*
|
||||
* This is like calling data( QModelIndex( index ), LabelRole ).toString(),
|
||||
* but shorter and faster. Can return an empty string if index is invalid.
|
||||
*/
|
||||
QString label( int index ) const;
|
||||
|
||||
QHash< int, QByteArray > roleNames() const override;
|
||||
|
||||
void setCurrentIndex( int index );
|
||||
int currentIndex() const { return m_currentIndex; }
|
||||
|
||||
signals:
|
||||
void currentIndexChanged( int index );
|
||||
|
||||
protected:
|
||||
struct ModelInfo
|
||||
{
|
||||
/// XKB identifier
|
||||
QString key;
|
||||
/// Human-readable
|
||||
QString label;
|
||||
};
|
||||
QVector< ModelInfo > m_list;
|
||||
int m_currentIndex = -1;
|
||||
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
|
||||
@ -35,10 +114,17 @@ public:
|
||||
|
||||
QVariant data( const QModelIndex& index, int role ) const override;
|
||||
|
||||
void setCurrentIndex( const int& index );
|
||||
void setCurrentIndex( int index );
|
||||
int currentIndex() const;
|
||||
const QPair< QString, KeyboardGlobal::KeyboardInfo > item( const int& index ) const;
|
||||
|
||||
/** @brief xkb key for a given index (row)
|
||||
*
|
||||
* This is like calling data( QModelIndex( index ), KeyboardLayoutKeyRole ).toString(),
|
||||
* but shorter and faster. Can return an empty string if index is invalid.
|
||||
*/
|
||||
QString key( int index ) const;
|
||||
|
||||
protected:
|
||||
QHash< int, QByteArray > roleNames() const override;
|
||||
|
||||
@ -51,4 +137,24 @@ signals:
|
||||
void currentIndexChanged( int index );
|
||||
};
|
||||
|
||||
/** @brief A list of variants (xkb id and human-readable)
|
||||
*
|
||||
* The variants that are available depend on the Layout that is used,
|
||||
* so the `setVariants()` function can be used to update the variants
|
||||
* when the two models are related.
|
||||
*/
|
||||
class KeyboardVariantsModel : public XKBListModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit KeyboardVariantsModel( QObject* parent = nullptr );
|
||||
|
||||
void setVariants( QMap< QString, QString > variants );
|
||||
};
|
||||
|
||||
/** @brief Adjust to changes in application language.
|
||||
*/
|
||||
void retranslateKeyboardModels();
|
||||
|
||||
#endif // KEYBOARDLAYOUTMODEL_H
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
#include "KeyboardPage.h"
|
||||
|
||||
#include "Config.h"
|
||||
#include "KeyboardLayoutModel.h"
|
||||
#include "SetKeyboardLayoutJob.h"
|
||||
#include "keyboardwidget/keyboardpreview.h"
|
||||
@ -40,451 +41,77 @@ public:
|
||||
|
||||
LayoutItem::~LayoutItem() {}
|
||||
|
||||
static QPersistentModelIndex
|
||||
findLayout( const KeyboardLayoutModel* klm, const QString& currentLayout )
|
||||
{
|
||||
QPersistentModelIndex currentLayoutItem;
|
||||
|
||||
for ( int i = 0; i < klm->rowCount(); ++i )
|
||||
{
|
||||
QModelIndex idx = klm->index( i );
|
||||
if ( idx.isValid() && idx.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString() == currentLayout )
|
||||
{
|
||||
currentLayoutItem = idx;
|
||||
}
|
||||
}
|
||||
|
||||
return currentLayoutItem;
|
||||
}
|
||||
|
||||
KeyboardPage::KeyboardPage( QWidget* parent )
|
||||
KeyboardPage::KeyboardPage( Config* config, QWidget* parent )
|
||||
: QWidget( parent )
|
||||
, ui( new Ui::Page_Keyboard )
|
||||
, m_keyboardPreview( new KeyBoardPreview( this ) )
|
||||
, m_defaultIndex( 0 )
|
||||
, m_config( config )
|
||||
{
|
||||
ui->setupUi( this );
|
||||
|
||||
// Keyboard Preview
|
||||
ui->KBPreviewLayout->addWidget( m_keyboardPreview );
|
||||
|
||||
m_setxkbmapTimer.setSingleShot( true );
|
||||
{
|
||||
auto* model = config->keyboardModels();
|
||||
model->setCurrentIndex(); // To default PC105
|
||||
ui->physicalModelSelector->setModel( model );
|
||||
ui->physicalModelSelector->setCurrentIndex( model->currentIndex() );
|
||||
}
|
||||
{
|
||||
auto* model = config->keyboardLayouts();
|
||||
ui->layoutSelector->setModel( model );
|
||||
ui->layoutSelector->setCurrentIndex( model->index( model->currentIndex() ) );
|
||||
}
|
||||
{
|
||||
auto* model = config->keyboardVariants();
|
||||
ui->variantSelector->setModel( model );
|
||||
ui->variantSelector->setCurrentIndex( model->index( model->currentIndex() ) );
|
||||
cDebug() << "Variants now" << model->rowCount() << model->currentIndex();
|
||||
}
|
||||
|
||||
// Connect signals and slots
|
||||
connect( ui->listVariant, &QListWidget::currentItemChanged, this, &KeyboardPage::onListVariantCurrentItemChanged );
|
||||
|
||||
connect(
|
||||
ui->buttonRestore, &QPushButton::clicked, [this] { ui->comboBoxModel->setCurrentIndex( m_defaultIndex ); } );
|
||||
|
||||
connect( ui->comboBoxModel, &QComboBox::currentTextChanged, [this]( const QString& text ) {
|
||||
QString model = m_models.value( text, "pc105" );
|
||||
|
||||
// Set Xorg keyboard model
|
||||
QProcess::execute( "setxkbmap", QStringList { "-model", model } );
|
||||
connect( ui->buttonRestore, &QPushButton::clicked, [ config = config ] {
|
||||
config->keyboardModels()->setCurrentIndex();
|
||||
} );
|
||||
|
||||
CALAMARES_RETRANSLATE( ui->retranslateUi( this ); )
|
||||
}
|
||||
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::init()
|
||||
KeyboardPage::retranslate()
|
||||
{
|
||||
//### Detect current keyboard layout and variant
|
||||
QString currentLayout;
|
||||
QString currentVariant;
|
||||
QProcess process;
|
||||
process.start( "setxkbmap", QStringList() << "-print" );
|
||||
|
||||
if ( process.waitForFinished() )
|
||||
{
|
||||
const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts );
|
||||
|
||||
for ( QString line : list )
|
||||
{
|
||||
line = line.trimmed();
|
||||
if ( !line.startsWith( "xkb_symbols" ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
line = line.remove( "}" ).remove( "{" ).remove( ";" );
|
||||
line = line.mid( line.indexOf( "\"" ) + 1 );
|
||||
|
||||
QStringList split = line.split( "+", SplitSkipEmptyParts );
|
||||
if ( split.size() >= 2 )
|
||||
{
|
||||
currentLayout = split.at( 1 );
|
||||
|
||||
if ( currentLayout.contains( "(" ) )
|
||||
{
|
||||
int parenthesisIndex = currentLayout.indexOf( "(" );
|
||||
currentVariant = currentLayout.mid( parenthesisIndex + 1 ).trimmed();
|
||||
currentVariant.chop( 1 );
|
||||
currentLayout = currentLayout.mid( 0, parenthesisIndex ).trimmed();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//### Models
|
||||
m_models = KeyboardGlobal::getKeyboardModels();
|
||||
QMapIterator< QString, QString > mi( m_models );
|
||||
|
||||
ui->comboBoxModel->blockSignals( true );
|
||||
|
||||
while ( mi.hasNext() )
|
||||
{
|
||||
mi.next();
|
||||
|
||||
if ( mi.value() == "pc105" )
|
||||
{
|
||||
m_defaultIndex = ui->comboBoxModel->count();
|
||||
}
|
||||
|
||||
ui->comboBoxModel->addItem( mi.key() );
|
||||
}
|
||||
|
||||
ui->comboBoxModel->blockSignals( false );
|
||||
|
||||
// Set to default value pc105
|
||||
ui->comboBoxModel->setCurrentIndex( m_defaultIndex );
|
||||
|
||||
|
||||
//### Layouts and Variants
|
||||
|
||||
KeyboardLayoutModel* klm = new KeyboardLayoutModel( this );
|
||||
ui->listLayout->setModel( klm );
|
||||
connect( ui->listLayout->selectionModel(),
|
||||
&QItemSelectionModel::currentChanged,
|
||||
this,
|
||||
&KeyboardPage::onListLayoutCurrentItemChanged );
|
||||
|
||||
// Block signals
|
||||
ui->listLayout->blockSignals( true );
|
||||
|
||||
QPersistentModelIndex currentLayoutItem = findLayout( klm, currentLayout );
|
||||
if ( !currentLayoutItem.isValid() && ( ( currentLayout == "latin" ) || ( currentLayout == "pc" ) ) )
|
||||
{
|
||||
currentLayout = "us";
|
||||
currentLayoutItem = findLayout( klm, currentLayout );
|
||||
}
|
||||
|
||||
// Set current layout and variant
|
||||
if ( currentLayoutItem.isValid() )
|
||||
{
|
||||
ui->listLayout->setCurrentIndex( currentLayoutItem );
|
||||
updateVariants( currentLayoutItem, currentVariant );
|
||||
}
|
||||
|
||||
// Unblock signals
|
||||
ui->listLayout->blockSignals( false );
|
||||
|
||||
// Default to the first available layout if none was set
|
||||
// Do this after unblocking signals so we get the default variant handling.
|
||||
if ( !currentLayoutItem.isValid() && klm->rowCount() > 0 )
|
||||
{
|
||||
ui->listLayout->setCurrentIndex( klm->index( 0 ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QString
|
||||
KeyboardPage::prettyStatus() const
|
||||
{
|
||||
QString status;
|
||||
status += tr( "Set keyboard model to %1.<br/>" ).arg( ui->comboBoxModel->currentText() );
|
||||
|
||||
QString layout = ui->listLayout->currentIndex().data().toString();
|
||||
QString variant = ui->listVariant->currentItem() ? ui->listVariant->currentItem()->text() : QString( "<default>" );
|
||||
status += tr( "Set keyboard layout to %1/%2." ).arg( layout, variant );
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
QList< Calamares::job_ptr >
|
||||
KeyboardPage::createJobs( const QString& xOrgConfFileName,
|
||||
const QString& convertedKeymapPath,
|
||||
bool writeEtcDefaultKeyboard )
|
||||
{
|
||||
QList< Calamares::job_ptr > list;
|
||||
QString selectedModel = m_models.value( ui->comboBoxModel->currentText(), "pc105" );
|
||||
|
||||
Calamares::Job* j = new SetKeyboardLayoutJob( selectedModel,
|
||||
m_selectedLayout,
|
||||
m_selectedVariant,
|
||||
xOrgConfFileName,
|
||||
convertedKeymapPath,
|
||||
writeEtcDefaultKeyboard );
|
||||
list.append( Calamares::job_ptr( j ) );
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
KeyboardPage::guessLayout( const QStringList& langParts )
|
||||
{
|
||||
const KeyboardLayoutModel* klm = dynamic_cast< KeyboardLayoutModel* >( ui->listLayout->model() );
|
||||
bool foundCountryPart = false;
|
||||
for ( auto countryPart = langParts.rbegin(); !foundCountryPart && countryPart != langParts.rend(); ++countryPart )
|
||||
{
|
||||
cDebug() << Logger::SubEntry << "looking for locale part" << *countryPart;
|
||||
for ( int i = 0; i < klm->rowCount(); ++i )
|
||||
{
|
||||
QModelIndex idx = klm->index( i );
|
||||
QString name
|
||||
= idx.isValid() ? idx.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString() : QString();
|
||||
if ( idx.isValid() && ( name.compare( *countryPart, Qt::CaseInsensitive ) == 0 ) )
|
||||
{
|
||||
cDebug() << Logger::SubEntry << "matched" << name;
|
||||
ui->listLayout->setCurrentIndex( idx );
|
||||
foundCountryPart = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( foundCountryPart )
|
||||
{
|
||||
++countryPart;
|
||||
if ( countryPart != langParts.rend() )
|
||||
{
|
||||
cDebug() << "Next level:" << *countryPart;
|
||||
for ( int variantnumber = 0; variantnumber < ui->listVariant->count(); ++variantnumber )
|
||||
{
|
||||
LayoutItem* variantdata = dynamic_cast< LayoutItem* >( ui->listVariant->item( variantnumber ) );
|
||||
if ( variantdata && ( variantdata->data.compare( *countryPart, Qt::CaseInsensitive ) == 0 ) )
|
||||
{
|
||||
ui->listVariant->setCurrentItem( variantdata );
|
||||
cDebug() << Logger::SubEntry << "matched variant" << variantdata->data << ' '
|
||||
<< variantdata->text();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
KeyboardPage::onActivate()
|
||||
{
|
||||
/* Guessing a keyboard layout based on the locale means
|
||||
* mapping between language identifiers in <lang>_<country>
|
||||
* format to keyboard mappings, which are <country>_<layout>
|
||||
* format; in addition, some countries have multiple languages,
|
||||
* so fr_BE and nl_BE want different layouts (both Belgian)
|
||||
* and sometimes the language-country name doesn't match the
|
||||
* keyboard-country name at all (e.g. Ellas vs. Greek).
|
||||
*
|
||||
* This is a table of language-to-keyboard mappings. The
|
||||
* language identifier is the key, while the value is
|
||||
* a string that is used instead of the real language
|
||||
* identifier in guessing -- so it should be something
|
||||
* like <layout>_<country>.
|
||||
*/
|
||||
static constexpr char arabic[] = "ara";
|
||||
static const auto specialCaseMap = QMap< std::string, std::string >( {
|
||||
/* Most Arab countries map to Arabic keyboard (Default) */
|
||||
{ "ar_AE", arabic },
|
||||
{ "ar_BH", arabic },
|
||||
{ "ar_DZ", arabic },
|
||||
{ "ar_EG", arabic },
|
||||
{ "ar_IN", arabic },
|
||||
{ "ar_IQ", arabic },
|
||||
{ "ar_JO", arabic },
|
||||
{ "ar_KW", arabic },
|
||||
{ "ar_LB", arabic },
|
||||
{ "ar_LY", arabic },
|
||||
/* Not Morocco: use layout ma */
|
||||
{ "ar_OM", arabic },
|
||||
{ "ar_QA", arabic },
|
||||
{ "ar_SA", arabic },
|
||||
{ "ar_SD", arabic },
|
||||
{ "ar_SS", arabic },
|
||||
/* Not Syria: use layout sy */
|
||||
{ "ar_TN", arabic },
|
||||
{ "ar_YE", arabic },
|
||||
{ "ca_ES", "cat_ES" }, /* Catalan */
|
||||
{ "as_ES", "ast_ES" }, /* Asturian */
|
||||
{ "en_CA", "us" }, /* Canadian English */
|
||||
{ "el_CY", "gr" }, /* Greek in Cyprus */
|
||||
{ "el_GR", "gr" }, /* Greek in Greeze */
|
||||
{ "ig_NG", "igbo_NG" }, /* Igbo in Nigeria */
|
||||
{ "ha_NG", "hausa_NG" } /* Hausa */
|
||||
} );
|
||||
|
||||
ui->listLayout->setFocus();
|
||||
|
||||
// Try to preselect a layout, depending on language and locale
|
||||
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
|
||||
QString lang = gs->value( "localeConf" ).toMap().value( "LANG" ).toString();
|
||||
|
||||
cDebug() << "Got locale language" << lang;
|
||||
if ( !lang.isEmpty() )
|
||||
{
|
||||
// Chop off .codeset and @modifier
|
||||
int index = lang.indexOf( '.' );
|
||||
if ( index >= 0 )
|
||||
{
|
||||
lang.truncate( index );
|
||||
}
|
||||
index = lang.indexOf( '@' );
|
||||
if ( index >= 0 )
|
||||
{
|
||||
lang.truncate( index );
|
||||
}
|
||||
|
||||
lang.replace( '-', '_' ); // Normalize separators
|
||||
}
|
||||
if ( !lang.isEmpty() )
|
||||
{
|
||||
std::string lang_s = lang.toStdString();
|
||||
if ( specialCaseMap.contains( lang_s ) )
|
||||
{
|
||||
QString newLang = QString::fromStdString( specialCaseMap.value( lang_s ) );
|
||||
cDebug() << Logger::SubEntry << "special case language" << lang << "becomes" << newLang;
|
||||
lang = newLang;
|
||||
}
|
||||
}
|
||||
if ( !lang.isEmpty() )
|
||||
{
|
||||
const auto langParts = lang.split( '_', SplitSkipEmptyParts );
|
||||
|
||||
// Note that this his string is not fit for display purposes!
|
||||
// It doesn't come from QLocale::nativeCountryName.
|
||||
QString country = QLocale::countryToString( QLocale( lang ).country() );
|
||||
cDebug() << Logger::SubEntry << "extracted country" << country << "::" << langParts;
|
||||
|
||||
guessLayout( langParts );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
KeyboardPage::finalize()
|
||||
{
|
||||
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
|
||||
if ( !m_selectedLayout.isEmpty() )
|
||||
{
|
||||
gs->insert( "keyboardLayout", m_selectedLayout );
|
||||
gs->insert( "keyboardVariant", m_selectedVariant ); //empty means default variant
|
||||
}
|
||||
|
||||
//FIXME: also store keyboard model for something?
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
KeyboardPage::updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant )
|
||||
{
|
||||
// Block signals
|
||||
ui->listVariant->blockSignals( true );
|
||||
|
||||
QMap< QString, QString > variants
|
||||
= currentItem.data( KeyboardLayoutModel::KeyboardVariantsRole ).value< QMap< QString, QString > >();
|
||||
QMapIterator< QString, QString > li( variants );
|
||||
LayoutItem* defaultItem = nullptr;
|
||||
|
||||
ui->listVariant->clear();
|
||||
|
||||
while ( li.hasNext() )
|
||||
{
|
||||
li.next();
|
||||
|
||||
LayoutItem* item = new LayoutItem();
|
||||
item->setText( li.key() );
|
||||
item->data = li.value();
|
||||
ui->listVariant->addItem( item );
|
||||
|
||||
// currentVariant defaults to QString(). It is only non-empty during the
|
||||
// initial setup.
|
||||
if ( li.value() == currentVariant )
|
||||
{
|
||||
defaultItem = item;
|
||||
}
|
||||
}
|
||||
|
||||
// Unblock signals
|
||||
ui->listVariant->blockSignals( false );
|
||||
|
||||
// Set to default value
|
||||
if ( defaultItem )
|
||||
{
|
||||
ui->listVariant->setCurrentItem( defaultItem );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
KeyboardPage::onListLayoutCurrentItemChanged( const QModelIndex& current, const QModelIndex& previous )
|
||||
{
|
||||
Q_UNUSED( previous )
|
||||
if ( !current.isValid() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
updateVariants( QPersistentModelIndex( current ) );
|
||||
}
|
||||
|
||||
/* Returns stringlist with suitable setxkbmap command-line arguments
|
||||
* to set the given @p layout and @p variant.
|
||||
*/
|
||||
static inline QStringList
|
||||
xkbmap_args( const QString& layout, const QString& variant )
|
||||
{
|
||||
QStringList r { "-layout", layout };
|
||||
if ( !variant.isEmpty() )
|
||||
{
|
||||
r << "-variant" << variant;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
void
|
||||
KeyboardPage::onListVariantCurrentItemChanged( QListWidgetItem* current, QListWidgetItem* previous )
|
||||
{
|
||||
Q_UNUSED( previous )
|
||||
|
||||
QPersistentModelIndex layoutIndex = ui->listLayout->currentIndex();
|
||||
LayoutItem* variantItem = dynamic_cast< LayoutItem* >( current );
|
||||
|
||||
if ( !layoutIndex.isValid() || !variantItem )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
QString layout = layoutIndex.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString();
|
||||
QString variant = variantItem->data;
|
||||
|
||||
m_keyboardPreview->setLayout( layout );
|
||||
m_keyboardPreview->setVariant( variant );
|
||||
|
||||
//emit checkReady();
|
||||
|
||||
// Set Xorg keyboard layout
|
||||
if ( m_setxkbmapTimer.isActive() )
|
||||
{
|
||||
m_setxkbmapTimer.stop();
|
||||
m_setxkbmapTimer.disconnect( this );
|
||||
}
|
||||
|
||||
connect( &m_setxkbmapTimer, &QTimer::timeout, this, [=] {
|
||||
QProcess::execute( "setxkbmap", xkbmap_args( layout, variant ) );
|
||||
cDebug() << "xkbmap selection changed to: " << layout << '-' << variant;
|
||||
m_setxkbmapTimer.disconnect( this );
|
||||
} );
|
||||
m_setxkbmapTimer.start( QApplication::keyboardInputInterval() );
|
||||
|
||||
m_selectedLayout = layout;
|
||||
m_selectedVariant = variant;
|
||||
ui->retranslateUi( this );
|
||||
m_config->retranslate();
|
||||
}
|
||||
|
@ -27,42 +27,22 @@ namespace Ui
|
||||
class Page_Keyboard;
|
||||
}
|
||||
|
||||
class Config;
|
||||
class KeyBoardPreview;
|
||||
|
||||
class KeyboardPage : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit KeyboardPage( QWidget* parent = nullptr );
|
||||
explicit KeyboardPage( Config* config, QWidget* parent = nullptr );
|
||||
~KeyboardPage() override;
|
||||
|
||||
void init();
|
||||
|
||||
QString prettyStatus() const;
|
||||
|
||||
Calamares::JobList
|
||||
createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard );
|
||||
|
||||
void onActivate();
|
||||
void finalize();
|
||||
|
||||
protected slots:
|
||||
void onListLayoutCurrentItemChanged( const QModelIndex& current, const QModelIndex& previous );
|
||||
void onListVariantCurrentItemChanged( QListWidgetItem* current, QListWidgetItem* previous );
|
||||
void retranslate();
|
||||
|
||||
private:
|
||||
/// Guess a layout based on the split-apart locale
|
||||
void guessLayout( const QStringList& langParts );
|
||||
void updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant = QString() );
|
||||
|
||||
Ui::Page_Keyboard* ui;
|
||||
KeyBoardPreview* m_keyboardPreview;
|
||||
int m_defaultIndex;
|
||||
QMap< QString, QString > m_models;
|
||||
|
||||
QString m_selectedLayout;
|
||||
QString m_selectedVariant;
|
||||
QTimer m_setxkbmapTimer;
|
||||
Config* m_config;
|
||||
};
|
||||
|
||||
#endif // KEYBOARDPAGE_H
|
||||
|
@ -76,7 +76,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBoxModel">
|
||||
<widget class="QComboBox" name="physicalModelSelector">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@ -110,10 +110,10 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QListView" name="listLayout"/>
|
||||
<widget class="QListView" name="layoutSelector"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListWidget" name="listVariant"/>
|
||||
<widget class="QListView" name="variantSelector"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
@ -139,9 +139,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>comboBoxModel</tabstop>
|
||||
<tabstop>listLayout</tabstop>
|
||||
<tabstop>listVariant</tabstop>
|
||||
<tabstop>physicalModelSelector</tabstop>
|
||||
<tabstop>layoutSelector</tabstop>
|
||||
<tabstop>variantSelector</tabstop>
|
||||
<tabstop>LE_TestKeyboard</tabstop>
|
||||
<tabstop>buttonRestore</tabstop>
|
||||
</tabstops>
|
||||
|
@ -9,24 +9,21 @@
|
||||
|
||||
#include "KeyboardViewStep.h"
|
||||
|
||||
#include "Config.h"
|
||||
#include "KeyboardPage.h"
|
||||
|
||||
#include "GlobalStorage.h"
|
||||
#include "JobQueue.h"
|
||||
|
||||
#include "utils/Variant.h"
|
||||
|
||||
CALAMARES_PLUGIN_FACTORY_DEFINITION( KeyboardViewStepFactory, registerPlugin< KeyboardViewStep >(); )
|
||||
|
||||
KeyboardViewStep::KeyboardViewStep( QObject* parent )
|
||||
: Calamares::ViewStep( parent )
|
||||
, m_widget( new KeyboardPage() )
|
||||
, m_nextEnabled( false )
|
||||
, m_writeEtcDefaultKeyboard( true )
|
||||
, m_config( new Config( this ) )
|
||||
, m_widget( new KeyboardPage( m_config ) )
|
||||
{
|
||||
m_widget->init();
|
||||
m_nextEnabled = true;
|
||||
emit nextStatusChanged( m_nextEnabled );
|
||||
m_config->detectCurrentKeyboardLayout();
|
||||
emit nextStatusChanged( true );
|
||||
}
|
||||
|
||||
|
||||
@ -49,7 +46,7 @@ KeyboardViewStep::prettyName() const
|
||||
QString
|
||||
KeyboardViewStep::prettyStatus() const
|
||||
{
|
||||
return m_prettyStatus;
|
||||
return m_config->prettyStatus();
|
||||
}
|
||||
|
||||
|
||||
@ -63,7 +60,7 @@ KeyboardViewStep::widget()
|
||||
bool
|
||||
KeyboardViewStep::isNextEnabled() const
|
||||
{
|
||||
return m_nextEnabled;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -91,60 +88,26 @@ KeyboardViewStep::isAtEnd() const
|
||||
QList< Calamares::job_ptr >
|
||||
KeyboardViewStep::jobs() const
|
||||
{
|
||||
return m_jobs;
|
||||
return m_config->createJobs();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
KeyboardViewStep::onActivate()
|
||||
{
|
||||
m_widget->onActivate();
|
||||
m_config->onActivate();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
KeyboardViewStep::onLeave()
|
||||
{
|
||||
m_widget->finalize();
|
||||
m_jobs = m_widget->createJobs( m_xOrgConfFileName, m_convertedKeymapPath, m_writeEtcDefaultKeyboard );
|
||||
m_prettyStatus = m_widget->prettyStatus();
|
||||
m_config->finalize();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
KeyboardViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
||||
{
|
||||
using namespace CalamaresUtils;
|
||||
|
||||
if ( configurationMap.contains( "xOrgConfFileName" )
|
||||
&& configurationMap.value( "xOrgConfFileName" ).type() == QVariant::String
|
||||
&& !getString( configurationMap, "xOrgConfFileName" ).isEmpty() )
|
||||
{
|
||||
m_xOrgConfFileName = getString( configurationMap, "xOrgConfFileName" );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_xOrgConfFileName = "00-keyboard.conf";
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "convertedKeymapPath" )
|
||||
&& configurationMap.value( "convertedKeymapPath" ).type() == QVariant::String
|
||||
&& !getString( configurationMap, "convertedKeymapPath" ).isEmpty() )
|
||||
{
|
||||
m_convertedKeymapPath = getString( configurationMap, "convertedKeymapPath" );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_convertedKeymapPath = QString();
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "writeEtcDefaultKeyboard" )
|
||||
&& configurationMap.value( "writeEtcDefaultKeyboard" ).type() == QVariant::Bool )
|
||||
{
|
||||
m_writeEtcDefaultKeyboard = getBool( configurationMap, "writeEtcDefaultKeyboard", true );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_writeEtcDefaultKeyboard = true;
|
||||
}
|
||||
m_config->setConfigurationMap( configurationMap );
|
||||
}
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class Config;
|
||||
class KeyboardPage;
|
||||
|
||||
class PLUGINDLLEXPORT KeyboardViewStep : public Calamares::ViewStep
|
||||
@ -46,15 +47,8 @@ public:
|
||||
void setConfigurationMap( const QVariantMap& configurationMap ) override;
|
||||
|
||||
private:
|
||||
Config* m_config;
|
||||
KeyboardPage* m_widget;
|
||||
bool m_nextEnabled;
|
||||
QString m_prettyStatus;
|
||||
|
||||
QString m_xOrgConfFileName;
|
||||
QString m_convertedKeymapPath;
|
||||
bool m_writeEtcDefaultKeyboard;
|
||||
|
||||
Calamares::JobList m_jobs;
|
||||
};
|
||||
|
||||
CALAMARES_PLUGIN_FACTORY_DECLARATION( KeyboardViewStepFactory )
|
||||
|
@ -33,6 +33,7 @@
|
||||
SetKeyboardLayoutJob::SetKeyboardLayoutJob( const QString& model,
|
||||
const QString& layout,
|
||||
const QString& variant,
|
||||
const AdditionalLayoutInfo& additionalLayoutInfo,
|
||||
const QString& xOrgConfFileName,
|
||||
const QString& convertedKeymapPath,
|
||||
bool writeEtcDefaultKeyboard )
|
||||
@ -40,6 +41,7 @@ SetKeyboardLayoutJob::SetKeyboardLayoutJob( const QString& model,
|
||||
, m_model( model )
|
||||
, m_layout( layout )
|
||||
, m_variant( variant )
|
||||
, m_additionalLayoutInfo( additionalLayoutInfo )
|
||||
, m_xOrgConfFileName( xOrgConfFileName )
|
||||
, m_convertedKeymapPath( convertedKeymapPath )
|
||||
, m_writeEtcDefaultKeyboard( writeEtcDefaultKeyboard )
|
||||
@ -177,6 +179,8 @@ SetKeyboardLayoutJob::findLegacyKeymap() const
|
||||
bool
|
||||
SetKeyboardLayoutJob::writeVConsoleData( const QString& vconsoleConfPath, const QString& convertedKeymapPath ) const
|
||||
{
|
||||
cDebug() << "Writing vconsole data to" << vconsoleConfPath;
|
||||
|
||||
QString keymap = findConvertedKeymap( convertedKeymapPath );
|
||||
if ( keymap.isEmpty() )
|
||||
{
|
||||
@ -203,15 +207,20 @@ SetKeyboardLayoutJob::writeVConsoleData( const QString& vconsoleConfPath, const
|
||||
file.close();
|
||||
if ( stream.status() != QTextStream::Ok )
|
||||
{
|
||||
cError() << "Could not read lines from" << file.fileName();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Write out the existing lines and replace the KEYMAP= line
|
||||
file.open( QIODevice::WriteOnly | QIODevice::Text );
|
||||
if ( !file.open( QIODevice::WriteOnly | QIODevice::Text ) )
|
||||
{
|
||||
cError() << "Could not open" << file.fileName() << "for writing.";
|
||||
return false;
|
||||
}
|
||||
QTextStream stream( &file );
|
||||
bool found = false;
|
||||
foreach ( const QString& existingLine, existingLines )
|
||||
for ( const QString& existingLine : qAsConst( existingLines ) )
|
||||
{
|
||||
if ( existingLine.trimmed().startsWith( "KEYMAP=" ) )
|
||||
{
|
||||
@ -231,7 +240,7 @@ SetKeyboardLayoutJob::writeVConsoleData( const QString& vconsoleConfPath, const
|
||||
stream.flush();
|
||||
file.close();
|
||||
|
||||
cDebug() << "Written KEYMAP=" << keymap << "to vconsole.conf";
|
||||
cDebug() << Logger::SubEntry << "Written KEYMAP=" << keymap << "to vconsole.conf" << stream.status();
|
||||
|
||||
return ( stream.status() == QTextStream::Ok );
|
||||
}
|
||||
@ -240,8 +249,14 @@ SetKeyboardLayoutJob::writeVConsoleData( const QString& vconsoleConfPath, const
|
||||
bool
|
||||
SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const
|
||||
{
|
||||
cDebug() << "Writing X11 configuration to" << keyboardConfPath;
|
||||
|
||||
QFile file( keyboardConfPath );
|
||||
file.open( QIODevice::WriteOnly | QIODevice::Text );
|
||||
if ( !file.open( QIODevice::WriteOnly | QIODevice::Text ) )
|
||||
{
|
||||
cError() << "Could not open" << file.fileName() << "for writing.";
|
||||
return false;
|
||||
}
|
||||
QTextStream stream( &file );
|
||||
|
||||
stream << "# Read and parsed by systemd-localed. It's probably wise not to edit this file\n"
|
||||
@ -250,19 +265,34 @@ SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const
|
||||
" Identifier \"system-keyboard\"\n"
|
||||
" MatchIsKeyboard \"on\"\n";
|
||||
|
||||
|
||||
if ( m_additionalLayoutInfo.additionalLayout.isEmpty() )
|
||||
{
|
||||
if ( !m_layout.isEmpty() )
|
||||
{
|
||||
stream << " Option \"XkbLayout\" \"" << m_layout << "\"\n";
|
||||
}
|
||||
|
||||
if ( !m_model.isEmpty() )
|
||||
if ( !m_variant.isEmpty() )
|
||||
{
|
||||
stream << " Option \"XkbModel\" \"" << m_model << "\"\n";
|
||||
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_variant << "\"\n";
|
||||
stream << " Option \"XkbVariant\" \"" << m_additionalLayoutInfo.additionalVariant << "," << m_variant
|
||||
<< "\"\n";
|
||||
}
|
||||
|
||||
stream << " Option \"XkbOptions\" \"" << m_additionalLayoutInfo.groupSwitcher << "\"\n";
|
||||
}
|
||||
|
||||
stream << "EndSection\n";
|
||||
@ -270,8 +300,8 @@ SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const
|
||||
|
||||
file.close();
|
||||
|
||||
cDebug() << "Written XkbLayout" << m_layout << "; XkbModel" << m_model << "; XkbVariant" << m_variant
|
||||
<< "to X.org file" << keyboardConfPath;
|
||||
cDebug() << Logger::SubEntry << "Written XkbLayout" << m_layout << "; XkbModel" << m_model << "; XkbVariant"
|
||||
<< m_variant << "to X.org file" << keyboardConfPath << stream.status();
|
||||
|
||||
return ( stream.status() == QTextStream::Ok );
|
||||
}
|
||||
@ -280,8 +310,14 @@ SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const
|
||||
bool
|
||||
SetKeyboardLayoutJob::writeDefaultKeyboardData( const QString& defaultKeyboardPath ) const
|
||||
{
|
||||
cDebug() << "Writing default keyboard data to" << defaultKeyboardPath;
|
||||
|
||||
QFile file( defaultKeyboardPath );
|
||||
file.open( QIODevice::WriteOnly | QIODevice::Text );
|
||||
if ( !file.open( QIODevice::WriteOnly | QIODevice::Text ) )
|
||||
{
|
||||
cError() << "Could not open" << defaultKeyboardPath << "for writing";
|
||||
return false;
|
||||
}
|
||||
QTextStream stream( &file );
|
||||
|
||||
stream << "# KEYBOARD CONFIGURATION FILE\n\n"
|
||||
@ -296,8 +332,8 @@ SetKeyboardLayoutJob::writeDefaultKeyboardData( const QString& defaultKeyboardPa
|
||||
|
||||
file.close();
|
||||
|
||||
cDebug() << "Written XKBMODEL" << m_model << "; XKBLAYOUT" << m_layout << "; XKBVARIANT" << m_variant
|
||||
<< "to /etc/default/keyboard file" << defaultKeyboardPath;
|
||||
cDebug() << Logger::SubEntry << "Written XKBMODEL" << m_model << "; XKBLAYOUT" << m_layout << "; XKBVARIANT"
|
||||
<< m_variant << "to /etc/default/keyboard file" << defaultKeyboardPath << stream.status();
|
||||
|
||||
return ( stream.status() == QTextStream::Ok );
|
||||
}
|
||||
@ -312,9 +348,29 @@ SetKeyboardLayoutJob::exec()
|
||||
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
|
||||
QDir destDir( gs->value( "rootMountPoint" ).toString() );
|
||||
|
||||
{
|
||||
// Get the path to the destination's /etc/vconsole.conf
|
||||
QString vconsoleConfPath = destDir.absoluteFilePath( "etc/vconsole.conf" );
|
||||
|
||||
// Get the path to the destination's 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;
|
||||
@ -335,37 +391,29 @@ SetKeyboardLayoutJob::exec()
|
||||
}
|
||||
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" );
|
||||
}
|
||||
|
||||
// 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 ) );
|
||||
|
||||
if ( !writeX11Data( keyboardConfPath ) )
|
||||
return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for X11." ),
|
||||
tr( "Failed to write to %1" ).arg( keyboardConfPath ) );
|
||||
|
||||
if ( !defaultKeyboardPath.isEmpty() && m_writeEtcDefaultKeyboard )
|
||||
{
|
||||
if ( !writeDefaultKeyboardData( defaultKeyboardPath ) )
|
||||
{
|
||||
return Calamares::JobResult::error(
|
||||
tr( "Failed to write keyboard configuration to existing /etc/default directory." ),
|
||||
tr( "Failed to write to %1" ).arg( keyboardConfPath ) );
|
||||
tr( "Failed to write to %1" ).arg( defaultKeyboardPath ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Calamares::JobResult::ok();
|
||||
|
@ -11,6 +11,7 @@
|
||||
#ifndef SETKEYBOARDLAYOUTJOB_H
|
||||
#define SETKEYBOARDLAYOUTJOB_H
|
||||
|
||||
#include "AdditionalLayoutInfo.h"
|
||||
#include "Job.h"
|
||||
|
||||
|
||||
@ -21,6 +22,7 @@ public:
|
||||
SetKeyboardLayoutJob( const QString& model,
|
||||
const QString& layout,
|
||||
const QString& variant,
|
||||
const AdditionalLayoutInfo& additionaLayoutInfo,
|
||||
const QString& xOrgConfFileName,
|
||||
const QString& convertedKeymapPath,
|
||||
bool writeEtcDefaultKeyboard );
|
||||
@ -38,6 +40,7 @@ private:
|
||||
QString m_model;
|
||||
QString m_layout;
|
||||
QString m_variant;
|
||||
AdditionalLayoutInfo m_additionalLayoutInfo;
|
||||
QString m_xOrgConfFileName;
|
||||
QString m_convertedKeymapPath;
|
||||
const bool m_writeEtcDefaultKeyboard;
|
||||
|
@ -2,5 +2,6 @@
|
||||
<qresource prefix="/">
|
||||
<file>kbd-model-map</file>
|
||||
<file>images/restore.png</file>
|
||||
<file>non-ascii-layouts</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -75,7 +75,7 @@ parseKeyboardModels( const char* filepath )
|
||||
break;
|
||||
}
|
||||
|
||||
// here we are in the model section, otherwhise we would continue or break
|
||||
// here we are in the model section, otherwise we would continue or break
|
||||
QRegExp rx;
|
||||
rx.setPattern( "^\\s+(\\S+)\\s+(\\w.*)\n$" );
|
||||
|
||||
@ -84,12 +84,6 @@ parseKeyboardModels( const char* filepath )
|
||||
{
|
||||
QString modelDesc = rx.cap( 2 );
|
||||
QString model = rx.cap( 1 );
|
||||
|
||||
if ( model == "pc105" )
|
||||
{
|
||||
modelDesc += " - " + QObject::tr( "Default Keyboard Model" );
|
||||
}
|
||||
|
||||
models.insert( modelDesc, model );
|
||||
}
|
||||
}
|
||||
|
96
src/modules/keyboard/layout-extractor.py
Normal file
96
src/modules/keyboard/layout-extractor.py
Normal file
@ -0,0 +1,96 @@
|
||||
#! /usr/bin/env python3
|
||||
#
|
||||
# === This file is part of Calamares - <https://calamares.io> ===
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
|
||||
# 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 - <https://calamares.io> ===
|
||||
*
|
||||
* 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)
|
||||
|
8
src/modules/keyboard/non-ascii-layouts
Normal file
8
src/modules/keyboard/non-ascii-layouts
Normal file
@ -0,0 +1,8 @@
|
||||
# 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
|
@ -2,6 +2,7 @@
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac <teo@kde.org>
|
||||
* SPDX-FileCopyrightText: 2020 Camilo Higuita <milo.h@aol.com>
|
||||
* SPDX-FileCopyrightText: 2020 Anke Boersma <demm@kaosx.us>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* Calamares is Free Software: see the License-Identifier above.
|
||||
@ -10,21 +11,19 @@
|
||||
|
||||
#include "KeyboardQmlViewStep.h"
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#include "GlobalStorage.h"
|
||||
#include "JobQueue.h"
|
||||
#include "utils/Variant.h"
|
||||
|
||||
CALAMARES_PLUGIN_FACTORY_DEFINITION( KeyboardQmlViewStepFactory, registerPlugin< KeyboardQmlViewStep >(); )
|
||||
|
||||
KeyboardQmlViewStep::KeyboardQmlViewStep( QObject* parent )
|
||||
: Calamares::QmlViewStep( parent )
|
||||
, m_config( new Config( this ) )
|
||||
, m_nextEnabled( false )
|
||||
, m_writeEtcDefaultKeyboard( true )
|
||||
{
|
||||
m_config->init();
|
||||
m_nextEnabled = true;
|
||||
emit nextStatusChanged( m_nextEnabled );
|
||||
m_config->detectCurrentKeyboardLayout();
|
||||
emit nextStatusChanged( true );
|
||||
}
|
||||
|
||||
QString
|
||||
@ -36,13 +35,13 @@ KeyboardQmlViewStep::prettyName() const
|
||||
QString
|
||||
KeyboardQmlViewStep::prettyStatus() const
|
||||
{
|
||||
return m_prettyStatus;
|
||||
return m_config->prettyStatus();
|
||||
}
|
||||
|
||||
bool
|
||||
KeyboardQmlViewStep::isNextEnabled() const
|
||||
{
|
||||
return m_nextEnabled;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
@ -66,7 +65,7 @@ KeyboardQmlViewStep::isAtEnd() const
|
||||
Calamares::JobList
|
||||
KeyboardQmlViewStep::jobs() const
|
||||
{
|
||||
return m_jobs;
|
||||
return m_config->createJobs();
|
||||
}
|
||||
|
||||
void
|
||||
@ -79,8 +78,6 @@ void
|
||||
KeyboardQmlViewStep::onLeave()
|
||||
{
|
||||
m_config->finalize();
|
||||
m_jobs = m_config->createJobs( m_xOrgConfFileName, m_convertedKeymapPath, m_writeEtcDefaultKeyboard );
|
||||
m_prettyStatus = m_config->prettyStatus();
|
||||
}
|
||||
|
||||
QObject*
|
||||
@ -92,39 +89,6 @@ KeyboardQmlViewStep::getConfig()
|
||||
void
|
||||
KeyboardQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
||||
{
|
||||
using namespace CalamaresUtils;
|
||||
|
||||
if ( configurationMap.contains( "xOrgConfFileName" )
|
||||
&& configurationMap.value( "xOrgConfFileName" ).type() == QVariant::String
|
||||
&& !getString( configurationMap, "xOrgConfFileName" ).isEmpty() )
|
||||
{
|
||||
m_xOrgConfFileName = getString( configurationMap, "xOrgConfFileName" );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_xOrgConfFileName = "00-keyboard.conf";
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "convertedKeymapPath" )
|
||||
&& configurationMap.value( "convertedKeymapPath" ).type() == QVariant::String
|
||||
&& !getString( configurationMap, "convertedKeymapPath" ).isEmpty() )
|
||||
{
|
||||
m_convertedKeymapPath = getString( configurationMap, "convertedKeymapPath" );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_convertedKeymapPath = QString();
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "writeEtcDefaultKeyboard" )
|
||||
&& configurationMap.value( "writeEtcDefaultKeyboard" ).type() == QVariant::Bool )
|
||||
{
|
||||
m_writeEtcDefaultKeyboard = getBool( configurationMap, "writeEtcDefaultKeyboard", true );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_writeEtcDefaultKeyboard = true;
|
||||
}
|
||||
|
||||
m_config->setConfigurationMap( configurationMap );
|
||||
Calamares::QmlViewStep::setConfigurationMap( configurationMap );
|
||||
}
|
||||
|
@ -13,14 +13,12 @@
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#include <DllMacro.h>
|
||||
#include <utils/PluginFactory.h>
|
||||
#include <viewpages/QmlViewStep.h>
|
||||
#include "DllMacro.h"
|
||||
#include "utils/PluginFactory.h"
|
||||
#include "viewpages/QmlViewStep.h"
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class KeyboardPage;
|
||||
|
||||
class PLUGINDLLEXPORT KeyboardQmlViewStep : public Calamares::QmlViewStep
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -47,14 +45,6 @@ public:
|
||||
|
||||
private:
|
||||
Config* m_config;
|
||||
bool m_nextEnabled;
|
||||
QString m_prettyStatus;
|
||||
|
||||
QString m_xOrgConfFileName;
|
||||
QString m_convertedKeymapPath;
|
||||
bool m_writeEtcDefaultKeyboard;
|
||||
|
||||
Calamares::JobList m_jobs;
|
||||
};
|
||||
|
||||
CALAMARES_PLUGIN_FACTORY_DECLARATION( KeyboardQmlViewStepFactory )
|
||||
|
@ -3,5 +3,6 @@
|
||||
<file alias="kbd-model-map">../keyboard/kbd-model-map</file>
|
||||
<file alias="images/restore.png">../keyboard/images/restore.png</file>
|
||||
<file>keyboardq.qml</file>
|
||||
<file alias="non-ascii-layouts">../keyboard/non-ascii-layouts</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "LicenseWidget.h"
|
||||
|
||||
#include "utils/Logger.h"
|
||||
#include "utils/QtCompat.h"
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QFile>
|
||||
@ -48,7 +49,7 @@ LicenseWidget::LicenseWidget( LicenseEntry entry, QWidget* parent )
|
||||
, m_isExpanded( m_entry.expandByDefault() )
|
||||
{
|
||||
QPalette pal( palette() );
|
||||
pal.setColor( QPalette::Background, palette().window().color().lighter( 108 ) );
|
||||
pal.setColor( WindowBackground, palette().window().color().lighter( 108 ) );
|
||||
|
||||
setObjectName( "licenseItem" );
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user