#2829 landed on master and touched 173 of the same keys this branch
rewrites, which is where the conflicts came from.
Resolved by rule rather than by hand: for any key #2829 already fixed
and merged, master's value wins (54 keys); everything else keeps this
branch's version. That keeps the diff against master limited to what is
genuinely new here, and avoids re-editing work that is already upstream.
It also avoids a regression. This branch was cut before #2829, so it
still carried the old double-encoded UTF-8 in nine mailboxes strings
(confirm_warnallf, left_autoreply, left_folders, left_forward,
left_pass, left_sig, mail_fromfilter, mail_selread, mail_subfilter).
Taking master's value for those keeps them fixed. A mojibake scan over
the whole tree after the merge reports 0 remaining lines.
master also added acl/forgot_sudouser, which is translated here, so
lang/tr is still complete at 31,523 of 31,523 keys.
Every module now has a reviewed desc_tr and longdesc_tr in
module.info.tr - 245 strings across 125 modules. Previously 37 were
reviewed, 194 came from module.info.tr.auto and 14 were missing
entirely (grub2, hardware-info, kea-dhcp, logviewer, nftables, systemd,
xterm), so those modules showed English titles in the Webmin menu.
The reviewed strings are removed from module.info.tr.auto, which now
holds only name_tr - the same split the de and ca translations use.
Thirty-six of those files became empty and are deleted.
Some of the machine text this replaces was wrong rather than just
clumsy:
sarg "Squid Report Generator" had become "Kalamar Rapor
Oluşturucu" - the fish, not the proxy
heartbeat the product name was translated as "Kalp Atışı"
cluster-cron "Cron Jobs" had become "Cron İş İlanları" (job ads)
proc "renice" was translated as "rename"
samba "file and print shares" was split into "create a samba
file" and "print the shares"
exports, hpuxexports, sgiexports, inetd, init, mount, net
each repeated the file path mid-sentence
firewall, the "(iptables)" and "(ip6tables)" qualifiers that
firewall6 distinguish the two modules were dropped
Turkish capitalisation of English words was also wrong throughout
("İptables", "İnetd", "İscsitarget", "İnternet"), and three previously
reviewed strings were stored as double-encoded UTF-8 (cron/desc_tr,
mailboxes/desc_tr, mailboxes/longdesc_tr).
cluster-cron and ldap-server carried a stray desc_de_tr key - a German
key that had leaked into the Turkish file. It is removed.
Finishes the Turkish translation of six modules and removes their
machine-generated lang/tr.auto files:
useradmin 110 new strings - SSH keys, group batch files, export
quota 111 new strings - Btrfs subvolume quotas, mass updates
heartbeat 98 strings - Heartbeat cluster monitor
ppp-client 98 strings - WvDial dialup client
webminlog 96 new strings - action search, rollback, notification
ldap-useradmin 94 new strings - LDAP users, Samba and IMAP options
Also fixes five defects in the existing Turkish files:
quota/gfilesys_all was missing its $1 placeholder
quota/lusers_noquota was missing $1 and the <tt> tags
quota/lusers_info was missing $1
useradmin/batch_emove was missing $2
useradmin/export_eopen had a literal $! where $1 was meant
Corrects verifiable defects in the shipped Turkish translations across
25 modules. No .auto (machine-translated) files are touched.
Placeholder bugs (33 keys) - substitution variables were missing,
duplicated or renumbered relative to lang/en:
* fdisk/mkfs_desc1 used $1 twice, so the "all data will be permanently
erased" confirmation named the filesystem type instead of the target
device.
* apache/reconfig_ever linked to <a href='$1'> instead of $2, pointing
the "module configuration" link at the version string.
* useradmin/export_eopen contained the Perl special variable $! rather
than $1.
* adsl-client/index_stopdesc, inittab/log_rename, hpuxexports/save_ehost,
mysql/log_perm_* and others repeated $1 where $2/$3 was intended.
* cron/env_ename referenced $1, which lang/en does not provide.
HTML markup bugs (19 keys) - tags were dropped or swapped, breaking
rendering or links:
* useradmin/batch_desc6 and batch_desc3 contained the literal strings
"$batch_desc1" and "$batch_desc0" and rendered as plain text.
* bind8/mass_desc translated the literal named.conf keywords master,
slave, stub and forward, which would lead users to enter invalid
configuration values. These are now left untranslated.
* mysql/index_nomod, samba/esync_msg, squid/clear_msgclear and others
lost <tt>/<b> pairs present in lang/en.
Encoding (10 keys) - mailboxes/lang/tr contained double-encoded UTF-8
(mojibake), e.g. "klasöründen" instead of "klasöründen".
Untranslated strings (96 keys) - htaccess-htpasswd/lang/tr was a verbatim
copy of lang/en and is now fully translated. Remaining English strings in
fdisk, mount, shorewall, webalizer, xinetd and firewall are translated.
Technical identifiers (LVM VG/LV, IPsec AH) are deliberately kept in
English.
All modified files are valid UTF-8, keep their original key order and
line count, and their placeholders now match lang/en exactly.
This PR adds ability to use the `vfsv1` quota format for newly created user and group quota files when supported by quota-tools 4 or newer. This removes the `vfsv0` range limitation while preserving existing quota files and configured journal formats.
Quota creation remains scoped to the requested user or group type, safely normalizes configured `quotacheck` flags, and retains `vfsv0` and legacy fallbacks for compatibility.
Addresses issue report in:
https://forum.virtualmin.com/t/quota-out-of-range/137331?u=ilia
Add Btrfs subvolume quota support to the Disk Quotas module, including full and simple accounting modes, quota lifecycle actions, and qgroup usage and limit management.
Includes ACL enforcement, compatibility with older btrfs-progs versions, destructive-action confirmation, top-level qgroup protection, help, and tests.
Add Linux quota helpers for detecting Btrfs filesystems, reporting full and simple quota status, inspecting subvolume qgroups, and managing limits and qgroup hierarchies. Support older btrfs-progs releases through a compatibility fallback and add focused coverage for parsing, validation, command construction, and error propagation.