Subject: [PATCH] fix #14806 v2 --- Index: scribus/scribus.cpp IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/scribus/scribus.cpp b/scribus/scribus.cpp --- a/scribus/scribus.cpp (revision 27539) +++ b/scribus/scribus.cpp (date 1777720470764) @@ -1429,7 +1429,7 @@ zoomSpinBox->setValue( 100 ); zoomSpinBox->setSingleStep(10); zoomSpinBox->setFocusPolicy(Qt::ClickFocus); - zoomSpinBox->setSuffix( tr( " %" ) ); + updateZoomSuffix(); layerMenu = new QComboBox( this ); layerMenu->setObjectName("layerMenu"); layerMenu->setEditable(false); @@ -7380,6 +7380,19 @@ } } +void ScribusMainWindow::updateZoomSuffix() +{ + // Determine the current text direction based on the GUI language setting + const auto direction = QLocale(ScCore->getGuiLanguage()).textDirection(); + // If in RTL mode, wrap the suffix in RLE (Right-to-Left Embedding \u202B) + // and PDF (Pop Directional Formatting \u202C) control characters. + // This forces the rendering engine to treat the suffix as an isolated RTL block, + // preventing neutral characters like '%' from causing layout issues. + const auto suffix = (direction == Qt::RightToLeft) + ? QStringLiteral("\u202B %\u202C") + : QStringLiteral(" %"); + zoomSpinBox->setSuffix(suffix); +} void ScribusMainWindow::gotoLayer(int l) { @@ -8555,6 +8568,7 @@ void ScribusMainWindow::statusBarLanguageChange() { + updateZoomSuffix(); zoomSpinBox->setToolTip( tr("Current zoom level")); zoomDefaultToolbarButton->setToolTip( tr("Zoom to 100%")); zoomOutToolbarButton->setToolTip( tr("Zoom out by the stepping value in Tools preferences")); Index: scribus/scribus.h IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/scribus/scribus.h b/scribus/scribus.h --- a/scribus/scribus.h (revision 27539) +++ b/scribus/scribus.h (date 1777720364656) @@ -185,6 +185,7 @@ void RestoreBookMarks(); QStringList scrapbookNames() const; void updateLayerMenu(); + void updateZoomSuffix(); void emergencySave(); QStringList findRecoverableFile(); bool recoverFile(const QStringList& foundFiles);