| Summary: | Ошибка при создании правила управления трафиком в PBS через веб-интерфейс, если выбран русский язык | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | Vera Blagoveschenskaya <vercha> | ||||
| Component: | proxmox-backup-server | Assignee: | Alexey Shabalin <shaba> | ||||
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||
| Severity: | normal | ||||||
| Priority: | P5 | CC: | antohami, darisishe, glinkinvd, jqt4, shaba, shevchenkodyu | ||||
| Version: | unstable | ||||||
| Hardware: | x86_64 | ||||||
| OS: | Linux | ||||||
| Attachments: |
|
||||||
|
Description
Vera Blagoveschenskaya
2025-06-16 17:57:15 MSK
Для архитектуры aarch64 указанная проблема также актуальна. > Предполагаю что ошибка заключается в том, что при передаче значений из веб-интерфейса, туда > же попадают кириллические символы МиБ , вместо MiB , что и вызывает ошибку.
Версии пакетов:
proxmox-widget-toolkit-5.0.4-alt1
proxmox-backup-server-4.0.14.1-alt2
Проблема связана с тем, что в API запрос подставляется переведённый вариант размера данных. Воспроизводится на тех языках, где единицы измерения данных переведены.
К примеру, на Итальянском, Немецком или Китайском - это не воспроизводится, поскольку перевод единиц измерения там не трогали.
Аналогичная ошибку можно получить и в терминале:
[root@proxmoxbackupserver ~]# proxmox-backup-debug api create /config/traffic-control/ --name 'test' --network '0.0.0.0/0' --rate-in '50 МиБ'
Error: parameter verification failed - 'rate-in': byte-size parse error for '50 МиБ': invalid float literal
В классе PBS.window.TrafficControlEdit (/usr/share/javascript/proxmox-backup/js/proxmox-backup-gui.js) у параметров rate-in, rate-out, burst-in, burst-out submitAutoScaledSizeUnit принимает значение true -> в /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js вызывается участок кода:
if (fieldContainer.submitAutoScaledSizeUnit) {
return Proxmox.Utils.format_size(v, !unit.endsWith('iB'));
} else {
return String(Math.floor(v / fieldContainer.backendFactor));
}
Судя по всему, здесь функция format_size и возвращает тот самый переведённый вариант:
format_size: function (size, useSI) {
let unitsSI = [
gettext('B'),
gettext('KB'),
gettext('MB'),
gettext('GB'),
gettext('TB'),
gettext('PB'),
gettext('EB'),
gettext('ZB'),
gettext('YB'),
];
let unitsIEC = [
gettext('B'),
gettext('KiB'),
gettext('MiB'),
gettext('GiB'),
gettext('TiB'),
gettext('PiB'),
gettext('EiB'),
gettext('ZiB'),
gettext('YiB'),
];
let order = 0;
let commaDigits = 2;
const baseValue = useSI ? 1000 : 1024;
while (size >= baseValue && order < unitsSI.length) {
size = size / baseValue;
order++;
}
let unit = useSI ? unitsSI[order] : unitsIEC[order];
if (order === 0) {
commaDigits = 0;
}
return `${size.toFixed(commaDigits)} ${unit}`;
},
Если убрать использование gettext в массивах unitsIEC и unitsSI - то проблема воспроизводится не будет.
|