Merge branch 'calamares' of https://github.com/calamares/calamares into development
This commit is contained in:
commit
589afbea30
20
CHANGES
20
CHANGES
@ -7,7 +7,23 @@ 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.33 (2020-11-03) #
|
||||
# 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
|
||||
@ -31,6 +47,8 @@ This release contains contributions from (alphabetically by first name):
|
||||
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
|
||||
|
@ -41,10 +41,10 @@
|
||||
# TODO:3.3: Require CMake 3.12
|
||||
cmake_minimum_required( VERSION 3.3 FATAL_ERROR )
|
||||
project( CALAMARES
|
||||
VERSION 3.2.33
|
||||
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
|
||||
#
|
||||
@ -141,10 +141,10 @@ set( CALAMARES_DESCRIPTION_SUMMARY
|
||||
# `txstats.py -e`. See also
|
||||
#
|
||||
# Total 71 languages
|
||||
set( _tx_complete be ca cs_CZ da fi_FI fur he hi hr ja pt_BR sq sv
|
||||
tg uk vi zh_TW )
|
||||
set( _tx_good as ast az az_AZ de es fa fr hu it_IT ko lt ml nl
|
||||
pt_PT ru sk tr_TR zh_CN )
|
||||
set( _tx_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
|
||||
|
@ -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"
|
||||
|
@ -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,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>
|
||||
|
@ -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"/>
|
||||
|
@ -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>
|
||||
|
@ -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"/>
|
||||
|
@ -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"/>
|
||||
|
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
169
lang/python.pot
169
lang/python.pot
@ -2,32 +2,32 @@
|
||||
# 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.
|
||||
#
|
||||
#
|
||||
#, fuzzy
|
||||
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 ""
|
||||
|
@ -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"
|
||||
|
@ -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" )
|
||||
|
@ -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 );
|
||||
|
@ -16,20 +16,28 @@
|
||||
|
||||
#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 ( p )
|
||||
if ( !preserve )
|
||||
{
|
||||
p->deleteLater();
|
||||
if ( p )
|
||||
{
|
||||
p->deleteLater();
|
||||
}
|
||||
p = nullptr;
|
||||
}
|
||||
p = nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -168,17 +168,17 @@ TZLoader::tryLoad( QTranslator* translator )
|
||||
static void
|
||||
loadSingletonTranslator( TranslationLoader&& loader, QTranslator*& translator_p )
|
||||
{
|
||||
QTranslator* translator = new QTranslator();
|
||||
loader.tryLoad( translator );
|
||||
|
||||
if ( translator_p )
|
||||
if ( !translator_p )
|
||||
{
|
||||
QCoreApplication::removeTranslator( translator_p );
|
||||
delete translator_p;
|
||||
QTranslator* translator = new QTranslator();
|
||||
loader.tryLoad( translator );
|
||||
QCoreApplication::installTranslator( translator );
|
||||
translator_p = translator;
|
||||
}
|
||||
else
|
||||
{
|
||||
loader.tryLoad( translator_p );
|
||||
}
|
||||
|
||||
QCoreApplication::installTranslator( translator );
|
||||
translator_p = translator;
|
||||
}
|
||||
|
||||
namespace 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
|
||||
|
@ -2,41 +2,41 @@
|
||||
# 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.
|
||||
#
|
||||
#
|
||||
#, fuzzy
|
||||
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 ""
|
||||
|
@ -560,3 +560,9 @@ Config::setConfigurationMap( const QVariantMap& configurationMap )
|
||||
m_writeEtcDefaultKeyboard = true;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Config::retranslate()
|
||||
{
|
||||
retranslateKeyboardModels();
|
||||
}
|
||||
|
@ -58,6 +58,17 @@ public:
|
||||
*/
|
||||
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();
|
||||
|
||||
|
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()
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -11,9 +11,26 @@
|
||||
#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 )
|
||||
{
|
||||
@ -41,6 +58,14 @@ XKBListModel::data( const QModelIndex& index, int role ) const
|
||||
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;
|
||||
@ -93,6 +118,8 @@ XKBListModel::setCurrentIndex( int index )
|
||||
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() );
|
||||
@ -110,6 +137,7 @@ KeyboardModelsModel::KeyboardModelsModel( QObject* parent )
|
||||
}
|
||||
|
||||
cDebug() << "Loaded" << m_list.count() << "keyboard models";
|
||||
setCurrentIndex(); // If pc105 was seen, select it now
|
||||
}
|
||||
|
||||
|
||||
@ -138,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:
|
||||
@ -159,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()
|
||||
{
|
||||
@ -207,6 +256,7 @@ KeyboardLayoutModel::currentIndex() const
|
||||
KeyboardVariantsModel::KeyboardVariantsModel( QObject* parent )
|
||||
: XKBListModel( parent )
|
||||
{
|
||||
m_contextname = "kb_variants";
|
||||
}
|
||||
|
||||
void
|
||||
@ -219,5 +269,6 @@ KeyboardVariantsModel::setVariants( QMap< QString, QString > variants )
|
||||
{
|
||||
m_list << ModelInfo { variants[ key ], key };
|
||||
}
|
||||
m_currentIndex = -1;
|
||||
endResetModel();
|
||||
}
|
||||
|
@ -21,7 +21,6 @@
|
||||
*
|
||||
* This model acts like it has a single selection, as well.
|
||||
*/
|
||||
|
||||
class XKBListModel : public QAbstractListModel
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -70,6 +69,7 @@ protected:
|
||||
};
|
||||
QVector< ModelInfo > m_list;
|
||||
int m_currentIndex = -1;
|
||||
const char* m_contextname = nullptr;
|
||||
};
|
||||
|
||||
|
||||
@ -118,6 +118,13 @@ public:
|
||||
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;
|
||||
|
||||
@ -146,4 +153,8 @@ public:
|
||||
void setVariants( QMap< QString, QString > variants );
|
||||
};
|
||||
|
||||
/** @brief Adjust to changes in application language.
|
||||
*/
|
||||
void retranslateKeyboardModels();
|
||||
|
||||
#endif // KEYBOARDLAYOUTMODEL_H
|
||||
|
@ -70,8 +70,9 @@ KeyboardPage::KeyboardPage( Config* config, QWidget* parent )
|
||||
cDebug() << "Variants now" << model->rowCount() << model->currentIndex();
|
||||
}
|
||||
|
||||
connect(
|
||||
ui->buttonRestore, &QPushButton::clicked, [config = config] { config->keyboardModels()->setCurrentIndex(); } );
|
||||
connect( ui->buttonRestore, &QPushButton::clicked, [ config = config ] {
|
||||
config->keyboardModels()->setCurrentIndex();
|
||||
} );
|
||||
|
||||
connect( ui->physicalModelSelector,
|
||||
QOverload< int >::of( &QComboBox::currentIndexChanged ),
|
||||
@ -82,23 +83,35 @@ KeyboardPage::KeyboardPage( Config* config, QWidget* parent )
|
||||
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 ) {
|
||||
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 ) {
|
||||
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( ui->retranslateUi( this ); )
|
||||
CALAMARES_RETRANSLATE_SLOT( &KeyboardPage::retranslate )
|
||||
}
|
||||
|
||||
KeyboardPage::~KeyboardPage()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void
|
||||
KeyboardPage::retranslate()
|
||||
{
|
||||
ui->retranslateUi( this );
|
||||
m_config->retranslate();
|
||||
}
|
||||
|
@ -37,6 +37,8 @@ public:
|
||||
explicit KeyboardPage( Config* config, QWidget* parent = nullptr );
|
||||
~KeyboardPage() override;
|
||||
|
||||
void retranslate();
|
||||
|
||||
private:
|
||||
Ui::Page_Keyboard* ui;
|
||||
KeyBoardPreview* m_keyboardPreview;
|
||||
|
@ -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)
|
||||
|
@ -5,3 +5,4 @@
|
||||
|
||||
#layout additional-layout additional-variant vconsole-keymap
|
||||
ru us - ruwin_alt_sh-UTF-8
|
||||
ua us - ua-utf
|
||||
|
@ -91,10 +91,16 @@ LocalePage::LocalePage( Config* config, QWidget* parent )
|
||||
|
||||
// Set up the location before connecting signals, to avoid a signal
|
||||
// storm as various parts interact.
|
||||
m_regionCombo->setModel( m_config->regionModel() );
|
||||
m_zoneCombo->setModel( m_config->regionalZonesModel() );
|
||||
locationChanged( m_config->currentLocation() ); // doesn't inform TZ widget
|
||||
m_tzWidget->setCurrentLocation( m_config->currentLocation() );
|
||||
{
|
||||
auto* regions = m_config->regionModel();
|
||||
auto* zones = m_config->regionalZonesModel();
|
||||
auto* location = m_config->currentLocation();
|
||||
zones->setRegion( location->region() );
|
||||
m_regionCombo->setModel( regions );
|
||||
m_zoneCombo->setModel( zones );
|
||||
m_tzWidget->setCurrentLocation( location );
|
||||
locationChanged( location ); // doesn't inform TZ widget
|
||||
}
|
||||
|
||||
connect( config, &Config::currentLCStatusChanged, m_formatsLabel, &QLabel::setText );
|
||||
connect( config, &Config::currentLanguageStatusChanged, m_localeLabel, &QLabel::setText );
|
||||
|
@ -56,7 +56,7 @@ def mount_partition(root_mount_point, partition, partitions):
|
||||
raise
|
||||
|
||||
fstype = partition.get("fs", "").lower()
|
||||
if not fstype or fstype == "unformatted":
|
||||
if fstype == "unformatted":
|
||||
return
|
||||
|
||||
if fstype == "fat16" or fstype == "fat32":
|
||||
|
@ -12,10 +12,13 @@
|
||||
# Extra filesystems to mount. The key's value is a list of entries; each
|
||||
# entry has four keys:
|
||||
# - device The device node to mount
|
||||
# - fs The filesystem type to use
|
||||
# - fs (optional) The filesystem type to use
|
||||
# - mountPoint Where to mount the filesystem
|
||||
# - options (optional) Extra options to pass to mount(8)
|
||||
#
|
||||
# The device is not mounted if the mountPoint is unset or if the fs is
|
||||
# set to unformatted.
|
||||
#
|
||||
extraMounts:
|
||||
- device: proc
|
||||
fs: proc
|
||||
|
@ -190,7 +190,7 @@ Config::setSwapChoice( int c )
|
||||
{
|
||||
if ( ( c < SwapChoice::NoSwap ) || ( c > SwapChoice::SwapFile ) )
|
||||
{
|
||||
cWarning() << "Instalid swap choice (int)" << c;
|
||||
cWarning() << "Invalid swap choice (int)" << c;
|
||||
c = SwapChoice::NoSwap;
|
||||
}
|
||||
setSwapChoice( static_cast< SwapChoice >( c ) );
|
||||
|
@ -196,7 +196,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO
|
||||
KPM_PARTITION_FLAG( None ) );
|
||||
}
|
||||
PartitionInfo::setFormat( swapPartition, true );
|
||||
if ( gs->contains( "swapPartitionName" ))
|
||||
if ( gs->contains( "swapPartitionName" ) )
|
||||
{
|
||||
swapPartition->setLabel( gs->value( "swapPartitionName" ).toString() );
|
||||
}
|
||||
|
@ -64,7 +64,8 @@ CreateLayoutsTests::testFixedSizePartition()
|
||||
QFAIL( qPrintable( "Unable to create / partition" ) );
|
||||
}
|
||||
|
||||
partitions = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role );
|
||||
partitions
|
||||
= layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role );
|
||||
|
||||
QCOMPARE( partitions.count(), 1 );
|
||||
|
||||
@ -84,7 +85,8 @@ CreateLayoutsTests::testPercentSizePartition()
|
||||
QFAIL( qPrintable( "Unable to create / partition" ) );
|
||||
}
|
||||
|
||||
partitions = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role );
|
||||
partitions
|
||||
= layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role );
|
||||
|
||||
QCOMPARE( partitions.count(), 1 );
|
||||
|
||||
@ -114,7 +116,8 @@ CreateLayoutsTests::testMixedSizePartition()
|
||||
QFAIL( qPrintable( "Unable to create /bkup partition" ) );
|
||||
}
|
||||
|
||||
partitions = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role );
|
||||
partitions
|
||||
= layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role );
|
||||
|
||||
QCOMPARE( partitions.count(), 3 );
|
||||
|
||||
@ -155,6 +158,4 @@ TestDevice::TestDevice( const QString& name, const qint64 logicalSectorSize, con
|
||||
}
|
||||
#endif
|
||||
|
||||
TestDevice::~TestDevice()
|
||||
{
|
||||
}
|
||||
TestDevice::~TestDevice() {}
|
||||
|
@ -14,36 +14,30 @@
|
||||
#include "utils/CalamaresUtilsSystem.h"
|
||||
#include "utils/Logger.h"
|
||||
|
||||
#ifdef WITH_KCONFIG
|
||||
#include <KConfigGroup>
|
||||
#include <KSharedConfig>
|
||||
#endif
|
||||
|
||||
PlasmaLnfJob::PlasmaLnfJob( const QString& lnfPath, const QString& id )
|
||||
: m_lnfPath( lnfPath )
|
||||
, m_id( id )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
PlasmaLnfJob::~PlasmaLnfJob() {}
|
||||
|
||||
|
||||
QString
|
||||
PlasmaLnfJob::prettyName() const
|
||||
{
|
||||
return tr( "Plasma Look-and-Feel Job" );
|
||||
}
|
||||
|
||||
QString
|
||||
PlasmaLnfJob::prettyStatusMessage() const
|
||||
{
|
||||
return prettyName();
|
||||
}
|
||||
|
||||
|
||||
Calamares::JobResult
|
||||
PlasmaLnfJob::exec()
|
||||
{
|
||||
cDebug() << "Plasma Look-and-Feel Job";
|
||||
|
||||
auto system = CalamaresUtils::System::instance();
|
||||
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
|
||||
auto* system = CalamaresUtils::System::instance();
|
||||
auto* gs = Calamares::JobQueue::instance()->globalStorage();
|
||||
|
||||
QStringList command( { "sudo",
|
||||
"-E",
|
||||
@ -59,8 +53,20 @@ PlasmaLnfJob::exec()
|
||||
|
||||
int r = system->targetEnvCall( command );
|
||||
if ( r )
|
||||
{
|
||||
return Calamares::JobResult::error( tr( "Could not select KDE Plasma Look-and-Feel package" ),
|
||||
tr( "Could not select KDE Plasma Look-and-Feel package" ) );
|
||||
}
|
||||
|
||||
#ifdef WITH_KCONFIG
|
||||
// This is a workaround for lookandfeeltool **not** writing
|
||||
// the LookAndFeelPackage key in kdeglobals; this happens
|
||||
// with the lnftool and Plasma 5.20 (possibly other combinations
|
||||
// as well).
|
||||
QString targetConfig = system->targetPath( "/home/" + gs->value( "username" ).toString() + "/.config/kdeglobals" );
|
||||
KConfigGroup cg( KSharedConfig::openConfig( targetConfig ), "KDE" );
|
||||
cg.writeEntry( "LookAndFeelPackage", m_id );
|
||||
#endif
|
||||
|
||||
return Calamares::JobResult::ok();
|
||||
}
|
||||
|
@ -24,7 +24,6 @@ public:
|
||||
~PlasmaLnfJob() override;
|
||||
|
||||
QString prettyName() const override;
|
||||
QString prettyStatusMessage() const override;
|
||||
|
||||
Calamares::JobResult exec() override;
|
||||
|
||||
|
@ -14,10 +14,6 @@
|
||||
#include "utils/PluginFactory.h"
|
||||
#include "viewpages/ViewStep.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <QUrl>
|
||||
#include <QVariantMap>
|
||||
|
||||
class PlasmaLnfPage;
|
||||
|
||||
class PLUGINDLLEXPORT PlasmaLnfViewStep : public Calamares::ViewStep
|
||||
|
@ -21,6 +21,18 @@ if( LibPWQuality_FOUND )
|
||||
add_definitions( -DCHECK_PWQUALITY -DHAVE_LIBPWQUALITY )
|
||||
endif()
|
||||
|
||||
find_package( ICU COMPONENTS uc i18n )
|
||||
set_package_properties(
|
||||
ICU PROPERTIES
|
||||
PURPOSE "Transliteration support for full name to username conversion"
|
||||
)
|
||||
|
||||
if( ICU_FOUND )
|
||||
list( APPEND USER_EXTRA_LIB ICU::uc ICU::i18n )
|
||||
include_directories( ${ICU_INCLUDE_DIRS} )
|
||||
add_definitions( -DHAVE_ICU )
|
||||
endif()
|
||||
|
||||
include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui )
|
||||
|
||||
set( _users_src
|
||||
|
@ -104,7 +104,6 @@ public:
|
||||
|
||||
PWSettingsHolder()
|
||||
: m_settings( pwquality_default_settings() )
|
||||
, m_auxerror( nullptr )
|
||||
{
|
||||
}
|
||||
|
||||
@ -113,27 +112,73 @@ public:
|
||||
/// Sets an option via the configuration string @p v, <key>=<value> style.
|
||||
int set( const QString& v ) { return pwquality_set_option( m_settings, v.toUtf8().constData() ); }
|
||||
|
||||
/// Checks the given password @p pwd against the current configuration
|
||||
/** @brief Checks the given password @p pwd against the current configuration
|
||||
*
|
||||
* Resets m_errorString and m_errorCount and then sets them appropriately
|
||||
* so that explanation() can be called afterwards. Sets m_rv as well.
|
||||
*/
|
||||
|
||||
int check( const QString& pwd )
|
||||
{
|
||||
void* auxerror = nullptr;
|
||||
int r = pwquality_check( m_settings, pwd.toUtf8().constData(), nullptr, nullptr, &auxerror );
|
||||
m_rv = r;
|
||||
return r;
|
||||
m_rv = pwquality_check( m_settings, pwd.toUtf8().constData(), nullptr, nullptr, &auxerror );
|
||||
|
||||
// Positive return values could be ignored; some negative ones
|
||||
// place extra information in auxerror, which is a void* and
|
||||
// which needs interpretation to long- or string-values.
|
||||
m_errorCount = 0;
|
||||
m_errorString = QString();
|
||||
|
||||
switch ( m_rv )
|
||||
{
|
||||
case PWQ_ERROR_CRACKLIB_CHECK:
|
||||
if ( auxerror )
|
||||
{
|
||||
/* Here the string comes from cracklib, don't free? */
|
||||
m_errorString = mungeString( auxerror );
|
||||
}
|
||||
break;
|
||||
case PWQ_ERROR_MEM_ALLOC:
|
||||
case PWQ_ERROR_UNKNOWN_SETTING:
|
||||
case PWQ_ERROR_INTEGER:
|
||||
case PWQ_ERROR_NON_INT_SETTING:
|
||||
case PWQ_ERROR_NON_STR_SETTING:
|
||||
if ( auxerror )
|
||||
{
|
||||
m_errorString = mungeString( auxerror );
|
||||
free( auxerror );
|
||||
}
|
||||
break;
|
||||
case PWQ_ERROR_MIN_DIGITS:
|
||||
case PWQ_ERROR_MIN_UPPERS:
|
||||
case PWQ_ERROR_MIN_LOWERS:
|
||||
case PWQ_ERROR_MIN_OTHERS:
|
||||
case PWQ_ERROR_MIN_LENGTH:
|
||||
case PWQ_ERROR_MIN_CLASSES:
|
||||
case PWQ_ERROR_MAX_CONSECUTIVE:
|
||||
case PWQ_ERROR_MAX_CLASS_REPEAT:
|
||||
case PWQ_ERROR_MAX_SEQUENCE:
|
||||
if ( auxerror )
|
||||
{
|
||||
m_errorCount = mungeLong( auxerror );
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return m_rv;
|
||||
}
|
||||
|
||||
bool hasExplanation() const { return m_rv < 0; }
|
||||
|
||||
/* This is roughly the same as the function pwquality_strerror,
|
||||
/** @brief Explain the results of the last call to check()
|
||||
*
|
||||
* This is roughly the same as the function pwquality_strerror,
|
||||
* only with QStrings instead, and using the Qt translation scheme.
|
||||
* It is used under the terms of the GNU GPL v3 or later, as
|
||||
* allowed by the libpwquality license (LICENSES/GPLv2+-libpwquality)
|
||||
*/
|
||||
QString explanation()
|
||||
{
|
||||
void* auxerror = m_auxerror;
|
||||
m_auxerror = nullptr;
|
||||
|
||||
if ( m_rv >= arbitrary_minimum_strength )
|
||||
{
|
||||
return QString();
|
||||
@ -146,12 +191,10 @@ public:
|
||||
switch ( m_rv )
|
||||
{
|
||||
case PWQ_ERROR_MEM_ALLOC:
|
||||
if ( auxerror )
|
||||
if ( !m_errorString.isEmpty() )
|
||||
{
|
||||
QString s = QCoreApplication::translate( "PWQ", "Memory allocation error when setting '%1'" )
|
||||
.arg( mungeString( auxerror ) );
|
||||
free( auxerror );
|
||||
return s;
|
||||
return QCoreApplication::translate( "PWQ", "Memory allocation error when setting '%1'" )
|
||||
.arg( m_errorString );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "Memory allocation error" );
|
||||
case PWQ_ERROR_SAME_PASSWORD:
|
||||
@ -170,73 +213,75 @@ public:
|
||||
case PWQ_ERROR_BAD_WORDS:
|
||||
return QCoreApplication::translate( "PWQ", "The password contains forbidden words in some form" );
|
||||
case PWQ_ERROR_MIN_DIGITS:
|
||||
if ( auxerror )
|
||||
if ( m_errorCount )
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 digits" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains fewer than %n digits", nullptr, m_errorCount );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too few digits" );
|
||||
case PWQ_ERROR_MIN_UPPERS:
|
||||
if ( auxerror )
|
||||
if ( m_errorCount )
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 uppercase letters" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains fewer than %n uppercase letters", nullptr, m_errorCount );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too few uppercase letters" );
|
||||
case PWQ_ERROR_MIN_LOWERS:
|
||||
if ( auxerror )
|
||||
if ( m_errorCount )
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 lowercase letters" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains fewer than %n lowercase letters", nullptr, m_errorCount );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too few lowercase letters" );
|
||||
case PWQ_ERROR_MIN_OTHERS:
|
||||
if ( auxerror )
|
||||
if ( m_errorCount )
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ",
|
||||
"The password contains less than %1 non-alphanumeric characters" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains fewer than %n non-alphanumeric characters", nullptr, m_errorCount );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too few non-alphanumeric characters" );
|
||||
case PWQ_ERROR_MIN_LENGTH:
|
||||
if ( auxerror )
|
||||
if ( m_errorCount )
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "The password is shorter than %1 characters" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password is shorter than %n characters", nullptr, m_errorCount );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password is too short" );
|
||||
case PWQ_ERROR_ROTATED:
|
||||
return QCoreApplication::translate( "PWQ", "The password is just rotated old one" );
|
||||
return QCoreApplication::translate( "PWQ", "The password is a rotated version of the previous one" );
|
||||
case PWQ_ERROR_MIN_CLASSES:
|
||||
if ( auxerror )
|
||||
if ( m_errorCount )
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 character classes" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains fewer than %n character classes", nullptr, m_errorCount );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password does not contain enough character classes" );
|
||||
case PWQ_ERROR_MAX_CONSECUTIVE:
|
||||
if ( auxerror )
|
||||
if ( m_errorCount )
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ",
|
||||
"The password contains more than %1 same characters consecutively" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains more than %n same characters consecutively", nullptr, m_errorCount );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too many same characters consecutively" );
|
||||
case PWQ_ERROR_MAX_CLASS_REPEAT:
|
||||
if ( auxerror )
|
||||
if ( m_errorCount )
|
||||
{
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains more than %1 characters of the same class consecutively" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
"PWQ",
|
||||
"The password contains more than %n characters of the same class consecutively",
|
||||
nullptr,
|
||||
m_errorCount );
|
||||
}
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains too many characters of the same class consecutively" );
|
||||
case PWQ_ERROR_MAX_SEQUENCE:
|
||||
if ( auxerror )
|
||||
if ( m_errorCount )
|
||||
{
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains monotonic sequence longer than %1 characters" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
"PWQ",
|
||||
"The password contains monotonic sequence longer than %n characters",
|
||||
nullptr,
|
||||
m_errorCount );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ",
|
||||
"The password contains too long of a monotonic character sequence" );
|
||||
@ -248,46 +293,34 @@ public:
|
||||
return QCoreApplication::translate( "PWQ",
|
||||
"Password generation failed - required entropy too low for settings" );
|
||||
case PWQ_ERROR_CRACKLIB_CHECK:
|
||||
if ( auxerror )
|
||||
if ( !m_errorString.isEmpty() )
|
||||
{
|
||||
/* Here the string comes from cracklib, don't free? */
|
||||
return QCoreApplication::translate( "PWQ", "The password fails the dictionary check - %1" )
|
||||
.arg( mungeString( auxerror ) );
|
||||
.arg( m_errorString );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password fails the dictionary check" );
|
||||
case PWQ_ERROR_UNKNOWN_SETTING:
|
||||
if ( auxerror )
|
||||
if ( !m_errorString.isEmpty() )
|
||||
{
|
||||
QString s = QCoreApplication::translate( "PWQ", "Unknown setting - %1" ).arg( mungeString( auxerror ) );
|
||||
free( auxerror );
|
||||
return s;
|
||||
return QCoreApplication::translate( "PWQ", "Unknown setting - %1" ).arg( m_errorString );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "Unknown setting" );
|
||||
case PWQ_ERROR_INTEGER:
|
||||
if ( auxerror )
|
||||
if ( !m_errorString.isEmpty() )
|
||||
{
|
||||
QString s = QCoreApplication::translate( "PWQ", "Bad integer value of setting - %1" )
|
||||
.arg( mungeString( auxerror ) );
|
||||
free( auxerror );
|
||||
return s;
|
||||
return QCoreApplication::translate( "PWQ", "Bad integer value of setting - %1" ).arg( m_errorString );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "Bad integer value" );
|
||||
case PWQ_ERROR_NON_INT_SETTING:
|
||||
if ( auxerror )
|
||||
if ( !m_errorString.isEmpty() )
|
||||
{
|
||||
QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of integer type" )
|
||||
.arg( mungeString( auxerror ) );
|
||||
free( auxerror );
|
||||
return s;
|
||||
return QCoreApplication::translate( "PWQ", "Setting %1 is not of integer type" ).arg( m_errorString );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "Setting is not of integer type" );
|
||||
case PWQ_ERROR_NON_STR_SETTING:
|
||||
if ( auxerror )
|
||||
if ( !m_errorString.isEmpty() )
|
||||
{
|
||||
QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of string type" )
|
||||
.arg( mungeString( auxerror ) );
|
||||
free( auxerror );
|
||||
return s;
|
||||
return QCoreApplication::translate( "PWQ", "Setting %1 is not of string type" ).arg( m_errorString );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "Setting is not of string type" );
|
||||
case PWQ_ERROR_CFGFILE_OPEN:
|
||||
@ -302,9 +335,11 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
pwquality_settings_t* m_settings;
|
||||
int m_rv;
|
||||
void* m_auxerror;
|
||||
QString m_errorString; ///< Textual error from last call to check()
|
||||
int m_errorCount = 0; ///< Count (used in %n) error from last call to check()
|
||||
int m_rv = 0; ///< Return value from libpwquality
|
||||
|
||||
pwquality_settings_t* m_settings = nullptr;
|
||||
};
|
||||
|
||||
DEFINE_CHECK_FUNC( libpwquality )
|
||||
|
@ -24,6 +24,18 @@
|
||||
#include <QFile>
|
||||
#include <QRegExp>
|
||||
|
||||
#ifdef HAVE_ICU
|
||||
#include <unicode/translit.h>
|
||||
#include <unicode/unistr.h>
|
||||
|
||||
//Needed for ICU to apply some transliteration ruleset.
|
||||
//Still needs to be adjusted to fit the needs of the most of users
|
||||
static const char TRANSLITERATOR_ID[] = "Russian-Latin/BGN;"
|
||||
"Greek-Latin/UNGEGN;"
|
||||
"Any-Latin;"
|
||||
"Latin-ASCII";
|
||||
#endif
|
||||
|
||||
static const QRegExp USERNAME_RX( "^[a-z_][a-z0-9_-]*[$]?$" );
|
||||
static constexpr const int USERNAME_MAX_LENGTH = 31;
|
||||
|
||||
@ -91,7 +103,7 @@ Config::Config( QObject* parent )
|
||||
connect( this, &Config::requireStrongPasswordsChanged, this, &Config::checkReady );
|
||||
}
|
||||
|
||||
Config::~Config() {}
|
||||
Config::~Config() { }
|
||||
|
||||
void
|
||||
Config::setUserShell( const QString& shell )
|
||||
@ -314,6 +326,33 @@ guessProductName()
|
||||
}
|
||||
return dmiProduct;
|
||||
}
|
||||
#ifdef HAVE_ICU
|
||||
static QString
|
||||
transliterate( const QString& input )
|
||||
{
|
||||
static auto ue = UErrorCode::U_ZERO_ERROR;
|
||||
static auto transliterator = std::unique_ptr< icu::Transliterator >(
|
||||
icu::Transliterator::createInstance( TRANSLITERATOR_ID, UTRANS_FORWARD, ue ) );
|
||||
|
||||
if ( ue != UErrorCode::U_ZERO_ERROR )
|
||||
{
|
||||
cWarning() << "Can't create transliterator";
|
||||
|
||||
//it'll be checked later for non-ASCII characters
|
||||
return input;
|
||||
}
|
||||
|
||||
icu::UnicodeString transliterable( input.utf16() );
|
||||
transliterator->transliterate( transliterable );
|
||||
return QString::fromUtf16( transliterable.getTerminatedBuffer() );
|
||||
}
|
||||
#else
|
||||
static QString
|
||||
transliterate( const QString& input )
|
||||
{
|
||||
return input;
|
||||
}
|
||||
#endif
|
||||
|
||||
static QString
|
||||
makeLoginNameSuggestion( const QStringList& parts )
|
||||
@ -372,8 +411,15 @@ Config::setFullName( const QString& name )
|
||||
emit fullNameChanged( name );
|
||||
|
||||
// Build login and hostname, if needed
|
||||
QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive );
|
||||
QString cleanName = CalamaresUtils::removeDiacritics( name ).toLower().replace( rx, " " ).simplified();
|
||||
static QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive );
|
||||
|
||||
QString cleanName = CalamaresUtils::removeDiacritics( transliterate( name ) )
|
||||
.replace( QRegExp( "[-']" ), "" )
|
||||
.replace( rx, " " )
|
||||
.toLower()
|
||||
.simplified();
|
||||
|
||||
|
||||
QStringList cleanParts = cleanName.split( ' ' );
|
||||
|
||||
if ( !m_customLoginName )
|
||||
@ -815,7 +861,7 @@ Config::createJobs() const
|
||||
|
||||
Calamares::Job* j;
|
||||
|
||||
if ( m_sudoersGroup.isEmpty() )
|
||||
if ( !m_sudoersGroup.isEmpty() )
|
||||
{
|
||||
j = new SetupSudoJob( m_sudoersGroup );
|
||||
jobs.append( Calamares::job_ptr( j ) );
|
||||
|
@ -38,6 +38,7 @@ SetupSudoJob::exec()
|
||||
{
|
||||
if ( m_sudoGroup.isEmpty() )
|
||||
{
|
||||
cDebug() << "Skipping sudo 10-installer because the sudoGroup is empty.";
|
||||
return Calamares::JobResult::ok();
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,9 @@ private Q_SLOTS:
|
||||
|
||||
void testReadGroup();
|
||||
void testCreateGroup();
|
||||
|
||||
void testSudoGroup();
|
||||
void testJobCreation();
|
||||
};
|
||||
|
||||
GroupTests::GroupTests() {}
|
||||
@ -73,7 +76,8 @@ GroupTests::testReadGroup()
|
||||
}
|
||||
}
|
||||
|
||||
void GroupTests::testCreateGroup()
|
||||
void
|
||||
GroupTests::testCreateGroup()
|
||||
{
|
||||
// BUILD_AS_TEST is the source-directory path
|
||||
QFile fi( QString( "%1/tests/5-issue-1523.conf" ).arg( BUILD_AS_TEST ) );
|
||||
@ -93,10 +97,80 @@ void GroupTests::testCreateGroup()
|
||||
|
||||
Calamares::JobQueue::instance()->globalStorage()->insert( "rootMountPoint", "/" );
|
||||
|
||||
SetupGroupsJob j(&c);
|
||||
SetupGroupsJob j( &c );
|
||||
QVERIFY( !j.exec() ); // running as regular user this should fail
|
||||
}
|
||||
|
||||
void
|
||||
GroupTests::testSudoGroup()
|
||||
{
|
||||
// Test programmatic changes
|
||||
{
|
||||
Config c;
|
||||
QSignalSpy spy( &c, &Config::sudoersGroupChanged );
|
||||
QCOMPARE( c.sudoersGroup(), QString() );
|
||||
c.setSudoersGroup( QStringLiteral( "wheel" ) );
|
||||
QCOMPARE( c.sudoersGroup(), QStringLiteral( "wheel" ) );
|
||||
QCOMPARE( spy.count(), 1 ); // Changed to wheel
|
||||
// Do it again, no change
|
||||
c.setSudoersGroup( QStringLiteral( "wheel" ) );
|
||||
QCOMPARE( c.sudoersGroup(), QStringLiteral( "wheel" ) );
|
||||
QCOMPARE( spy.count(), 1 );
|
||||
c.setSudoersGroup( QStringLiteral( "roue" ) );
|
||||
QCOMPARE( c.sudoersGroup(), QStringLiteral( "roue" ) );
|
||||
QCOMPARE( spy.count(), 2 );
|
||||
}
|
||||
|
||||
|
||||
// Test config loading
|
||||
{
|
||||
Config c;
|
||||
QSignalSpy spy( &c, &Config::sudoersGroupChanged );
|
||||
QCOMPARE( c.sudoersGroup(), QString() );
|
||||
|
||||
QVariantMap m;
|
||||
c.setConfigurationMap( m );
|
||||
QCOMPARE( c.sudoersGroup(), QString() );
|
||||
QCOMPARE( spy.count(), 0 ); // Unchanged
|
||||
|
||||
const auto key = QStringLiteral( "sudoersGroup" );
|
||||
const auto v0 = QStringLiteral( "wheel" );
|
||||
const auto v1 = QStringLiteral( "roue" );
|
||||
m.insert( key, v0 );
|
||||
c.setConfigurationMap( m );
|
||||
QCOMPARE( c.sudoersGroup(), v0 );
|
||||
QCOMPARE( spy.count(), 1 );
|
||||
}
|
||||
}
|
||||
|
||||
/** @brief Are all the expected jobs (and no others) created?
|
||||
*
|
||||
* - A sudo job is created only when the sudoers group is set;
|
||||
* - Groups job
|
||||
* - User job
|
||||
* - Password job
|
||||
* - Root password job
|
||||
* - Hostname job are always created.
|
||||
*/
|
||||
void
|
||||
GroupTests::testJobCreation()
|
||||
{
|
||||
const int expectedJobs = 5;
|
||||
Config c;
|
||||
QVERIFY( !c.isReady() );
|
||||
|
||||
// Needs some setup
|
||||
c.setFullName( QStringLiteral( "Goodluck Jonathan" ) );
|
||||
c.setLoginName( QStringLiteral( "goodj" ) );
|
||||
QVERIFY( c.isReady() );
|
||||
|
||||
QCOMPARE( c.sudoersGroup(), QString() );
|
||||
QCOMPARE( c.createJobs().count(), expectedJobs );
|
||||
|
||||
c.setSudoersGroup( QStringLiteral( "wheel" ) );
|
||||
QCOMPARE( c.sudoersGroup(), QString( "wheel" ) );
|
||||
QCOMPARE( c.createJobs().count(), expectedJobs + 1 );
|
||||
}
|
||||
|
||||
|
||||
QTEST_GUILESS_MAIN( GroupTests )
|
||||
|
@ -28,6 +28,19 @@ if( LibPWQuality_FOUND )
|
||||
add_definitions( -DCHECK_PWQUALITY -DHAVE_LIBPWQUALITY )
|
||||
endif()
|
||||
|
||||
#needed for ${_users}/Config.cpp
|
||||
find_package( ICU COMPONENTS uc i18n )
|
||||
set_package_properties(
|
||||
ICU PROPERTIES
|
||||
PURPOSE "Transliteration support for full name to username conversion"
|
||||
)
|
||||
|
||||
if( ICU_FOUND )
|
||||
list( APPEND USER_EXTRA_LIB ICU::uc ICU::i18n )
|
||||
include_directories( ${ICU_INCLUDE_DIRS} )
|
||||
add_definitions( -DHAVE_ICU )
|
||||
endif()
|
||||
|
||||
calamares_add_plugin( usersq
|
||||
TYPE viewmodule
|
||||
EXPORT_MACRO PLUGINDLLEXPORT_PRO
|
||||
|
Loading…
Reference in New Issue
Block a user