diff --git a/Furious/Window/LogPage.py b/Furious/Window/LogPage.py index bb6283e..03b9852 100644 --- a/Furious/Window/LogPage.py +++ b/Furious/Window/LogPage.py @@ -192,9 +192,9 @@ class LogPage(Mixins.QTranslatable, QMainWindow): self.manager = manager self.manager.setAutoClearEnabled(AppSettings.isStateON_(LOG_AUTO_CLEAR_SETTING)) - self.pageTitleLabel = AppQLabel(translatable=False) + self.pageTitleLabel = AppQLabel(_('Log')) self.pageTitleLabel.setObjectName('LogPageTitle') - self.filterLabel = AppQLabel(translatable=False) + self.filterLabel = AppQLabel(_('Log Type')) # Category names can be either translated built-ins or literal plugin # metadata, so LogPage rebuilds this application-styled selector with # the correct per-category translation policy. @@ -225,7 +225,7 @@ class LogPage(Mixins.QTranslatable, QMainWindow): line_width=3, radius=5, ) - self.highlightStatusLabel = AppQLabel(translatable=False) + self.highlightStatusLabel = AppQLabel(_('Processing...')) highlightLayout = QHBoxLayout(self.highlightOverlay) highlightLayout.setContentsMargins(16, 16, 16, 16) @@ -353,12 +353,12 @@ class LogPage(Mixins.QTranslatable, QMainWindow): popupMenu=self._viewMenu, ) - self.autoScrollLabel = AppQLabel(translatable=False) + self.autoScrollLabel = AppQLabel(_('Auto Scroll Down')) self.autoScrollSwitch = AppQSwitch() self.autoScrollSwitch.syncChecked(self._autoScrollDown) - self.autoClearLabel = AppQLabel(translatable=False) + self.autoClearLabel = AppQLabel(_('Auto Clear Log')) self.autoClearSwitch = AppQSwitch() self.autoClearSwitch.syncChecked(self.manager.autoClearEnabled) @@ -900,15 +900,9 @@ class LogPage(Mixins.QTranslatable, QMainWindow): self.manager.clear() def retranslate(self): - """Refresh translated page controls and filter labels.""" + """Refresh mixed-policy filter labels and rendered log text.""" selectedCategoryId = self.filterComboBox.currentData() - self.pageTitleLabel.setText(_('Log')) - self.filterLabel.setText(_('Log Type')) - self.autoScrollLabel.setText(_('Auto Scroll Down')) - self.autoClearLabel.setText(_('Auto Clear Log')) - self.highlightStatusLabel.setText(_('Processing...')) - self._populateFilters(selectedCategoryId) self._requestRefresh(immediate=True) diff --git a/tests/test_ui_behavior.py b/tests/test_ui_behavior.py index a160e0f..71fde0a 100644 --- a/tests/test_ui_behavior.py +++ b/tests/test_ui_behavior.py @@ -1312,6 +1312,30 @@ class UnifiedLogPageTest(unittest.TestCase): page.close() page.deleteLater() + def testLabelsOwnTheirDynamicTranslation(self): + """Let each AppQLabel translate itself without page-level setters.""" + with isolatedSettings(): + AppSettings.set('Language', 'EN') + page = LogPage(manager=LogManager(maximumEntries=5)) + labels = ( + (page.pageTitleLabel, 'Log'), + (page.filterLabel, 'Log Type'), + (page.autoScrollLabel, 'Auto Scroll Down'), + (page.autoClearLabel, 'Auto Clear Log'), + (page.highlightStatusLabel, 'Processing...'), + ) + + AppSettings.set('Language', 'ZH') + + for label, sourceText in labels: + self.assertTrue(label.translatable) + + label.retranslate() + + self.assertEqual(label.text(), _(sourceText)) + + self.disposePage(page) + def testHiddenPageRendersOneOrderedSnapshotWhenShown(self): """Do not mutate the document while hidden; catch up exactly once.""" with isolatedSettings():