Hello,
I will attach a new version while I still have some time and waiting
for account approval.
16 May 2023 tarihinde 16:41 itibarıyla David Kalnischkies <da...@kalnischkies.de> şunu yazdı:The first hunk seems wrong as our 'strprintf' 'prints to a std::string'given as first argument and doesn't return anything. Meantime, yourchange also uses std::printf which means it would print directly tostdout, which this code shouldn't do either.
Oops, silly mistake. Should be fine with the new patch.
In general, I suppose the formatting currently is "Progress: [ 42%]" so"Progress: [ %42]" is your target?
Yes, correct.
I think we could go with a "%d%%" string for all (four) cases (which ismy other remark) and assemble the individual strings with e.g."Progress: [%s]". The code could format a "%100" first to establish themaximum length and prepend spaces as needed for the real value.
I left the other three as-is for now, since it would probably require casts or
type changes from int to double etc. Feel free to correct me though. I am
new to C-like languages.
Oh, and one more thing: Comments in code meant for translators are perconvention prefixed with: "TRANSLATORS: " (see existing usages) andshould try a little harder to convey what a string is used for,meanwhile a "localize according to your locale settings" could besaid about each and every string…
Done.
Best regards,
Emir
From 4e7e0db117990e9469295934b0c7462e8c11255f Mon Sep 17 00:00:00 2001 From: Emir SARI <emir_s...@icloud.com> Date: Fri, 5 May 2023 18:58:03 +0300 Subject: [PATCH] Apply i18n to percentage display
Languages like Turkish and French (and some other more), use a custom percentage format, other than the standard 100%. Allowing i18n to these values, make the apt interface a lot coherent with the rest of the output, since they mostly appear next to translated strings. This commit also fixes the issue of "Progress: [100%]" to have extra blank characters when the percentage sign is prepended to the number; e.g. "Progress: [ %1]". Previously, it output [% 1] due to the absolute placeholder format. --- apt-pkg/install-progress.cc | 12 +++++++++++- apt-private/acqprogress.cc | 9 ++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc index c7f7573..8378200 100644 --- a/apt-pkg/install-progress.cc +++ b/apt-pkg/install-progress.cc @@ -56,7 +56,17 @@ bool PackageManager::StatusChanged(std::string /*PackageName*/, { int reporting_steps = _config->FindI("DpkgPM::Reporting-Steps", 1); percentage = StepsDone/(double)TotalSteps * 100.0; - strprintf(progress_str, _("Progress: [%3li%%]"), std::lround(percentage)); + + std::string percent_str; + // TRANSLATORS: Percentage value; %d is the number, %% is the sign + strprintf(percent_str, _("%d%%"), std::lround(percentage)); + + if (percentage < 10) + percent_str.insert(0, " "); + else if (percentage < 100) + percent_str.insert(0, " "); + + strprintf(progress_str, _("Progress: [%s]"), percent_str.c_str()); if(percentage < (last_reported_progress + reporting_steps)) return false; diff --git a/apt-private/acqprogress.cc b/apt-private/acqprogress.cc index fa7edfc..f54d732 100644 --- a/apt-private/acqprogress.cc +++ b/apt-private/acqprogress.cc @@ -232,9 +232,11 @@ bool AcqTextStatus::Pulse(pkgAcquire *Owner) if (I->CurrentItem->TotalSize > 0 && I->CurrentItem->Owner->Complete == false) { if (Mode == Short) - ioprintf(S, " %.0f%%", (I->CurrentItem->CurrentSize*100.0)/I->CurrentItem->TotalSize); + // TRANSLATORS: Percentage value; %0.f is the number, %% is the sign + ioprintf(S, _(" %.0f%%"), (I->CurrentItem->CurrentSize*100.0)/I->CurrentItem->TotalSize); else - ioprintf(S, "/%sB %.0f%%", SizeToStr(I->CurrentItem->TotalSize).c_str(), + // TRANSLATORS: Percentage value; %0.f is the number, %% is the sign + ioprintf(S, _("/%sB %.0f%%"), SizeToStr(I->CurrentItem->TotalSize).c_str(), (I->CurrentItem->CurrentSize*100.0)/I->CurrentItem->TotalSize); } S << "]"; @@ -249,7 +251,8 @@ bool AcqTextStatus::Pulse(pkgAcquire *Owner) // Put in the percent done { std::stringstream S; - ioprintf(S, "%.0f%%", Percent); + // TRANSLATORS: Percentage value; %0.f is the number, %% is the sign + ioprintf(S, _("%.0f%%"), Percent); S << Line; Line = S.str(); S.clear(); -- 2.34.1