From edba81ff9dd1dc4c2cd9f3f1ba3bb146ad3fd710 Mon Sep 17 00:00:00 2001
From: "stirlingbot[bot]" <195170888+stirlingbot[bot]@users.noreply.github.com>
Date: Thu, 13 Nov 2025 17:46:51 +0000
Subject: [PATCH 1/2] :globe_with_meridians: [V2] Sync Translations + Update
README Progress Table (#4754)
### Description of Changes
This Pull Request was automatically generated to synchronize updates to
translation files and documentation for the **V2 branch**. Below are the
details of the changes made:
#### **1. Synchronization of Translation Files**
- Updated translation files
(`frontend/public/locales/*/translation.json`) to reflect changes in the
reference file `en-GB/translation.json`.
- Ensured consistency and synchronization across all supported language
files.
- Highlighted any missing or incomplete translations.
#### **2. Update README.md**
- Generated the translation progress table in `README.md`.
- Added a summary of the current translation status for all supported
languages.
- Included up-to-date statistics on translation coverage.
#### **Why these changes are necessary**
- Keeps translation files aligned with the latest reference updates.
- Ensures the documentation reflects the current translation progress.
---
Auto-generated by [create-pull-request][1].
[1]: https://github.com/peter-evans/create-pull-request
Co-authored-by: stirlingbot[bot] <195170888+stirlingbot[bot]@users.noreply.github.com>
---
README.md | 74 ++++++++++++++++-----------------
scripts/ignore_translation.toml | 1 -
2 files changed, 37 insertions(+), 38 deletions(-)
diff --git a/README.md b/README.md
index f8058d906..211301b99 100644
--- a/README.md
+++ b/README.md
@@ -115,46 +115,46 @@ Stirling-PDF currently supports 40 languages!
| Language | Progress |
| -------------------------------------------- | -------------------------------------- |
-| Arabic (العربية) (ar_AR) |  |
-| Azerbaijani (Azərbaycan Dili) (az_AZ) |  |
-| Basque (Euskara) (eu_ES) |  |
-| Bulgarian (Български) (bg_BG) |  |
-| Catalan (Català) (ca_CA) |  |
-| Croatian (Hrvatski) (hr_HR) |  |
-| Czech (Česky) (cs_CZ) |  |
-| Danish (Dansk) (da_DK) |  |
-| Dutch (Nederlands) (nl_NL) |  |
+| Arabic (العربية) (ar_AR) |  |
+| Azerbaijani (Azərbaycan Dili) (az_AZ) |  |
+| Basque (Euskara) (eu_ES) |  |
+| Bulgarian (Български) (bg_BG) |  |
+| Catalan (Català) (ca_CA) |  |
+| Croatian (Hrvatski) (hr_HR) |  |
+| Czech (Česky) (cs_CZ) |  |
+| Danish (Dansk) (da_DK) |  |
+| Dutch (Nederlands) (nl_NL) |  |
| English (English) (en_GB) |  |
| English (US) (en_US) |  |
-| French (Français) (fr_FR) |  |
-| German (Deutsch) (de_DE) |  |
-| Greek (Ελληνικά) (el_GR) |  |
-| Hindi (हिंदी) (hi_IN) |  |
-| Hungarian (Magyar) (hu_HU) |  |
-| Indonesian (Bahasa Indonesia) (id_ID) |  |
-| Irish (Gaeilge) (ga_IE) |  |
-| Italian (Italiano) (it_IT) |  |
-| Japanese (日本語) (ja_JP) |  |
-| Korean (한국어) (ko_KR) |  |
-| Norwegian (Norsk) (no_NB) |  |
-| Persian (فارسی) (fa_IR) |  |
-| Polish (Polski) (pl_PL) |  |
-| Portuguese (Português) (pt_PT) |  |
-| Portuguese Brazilian (Português) (pt_BR) |  |
-| Romanian (Română) (ro_RO) |  |
-| Russian (Русский) (ru_RU) |  |
-| Serbian Latin alphabet (Srpski) (sr_LATN_RS) |  |
-| Simplified Chinese (简体中文) (zh_CN) |  |
-| Slovakian (Slovensky) (sk_SK) |  |
-| Slovenian (Slovenščina) (sl_SI) |  |
-| Spanish (Español) (es_ES) |  |
-| Swedish (Svenska) (sv_SE) |  |
-| Thai (ไทย) (th_TH) |  |
+| French (Français) (fr_FR) |  |
+| German (Deutsch) (de_DE) |  |
+| Greek (Ελληνικά) (el_GR) |  |
+| Hindi (हिंदी) (hi_IN) |  |
+| Hungarian (Magyar) (hu_HU) |  |
+| Indonesian (Bahasa Indonesia) (id_ID) |  |
+| Irish (Gaeilge) (ga_IE) |  |
+| Italian (Italiano) (it_IT) |  |
+| Japanese (日本語) (ja_JP) |  |
+| Korean (한국어) (ko_KR) |  |
+| Norwegian (Norsk) (no_NB) |  |
+| Persian (فارسی) (fa_IR) |  |
+| Polish (Polski) (pl_PL) |  |
+| Portuguese (Português) (pt_PT) |  |
+| Portuguese Brazilian (Português) (pt_BR) |  |
+| Romanian (Română) (ro_RO) |  |
+| Russian (Русский) (ru_RU) |  |
+| Serbian Latin alphabet (Srpski) (sr_LATN_RS) |  |
+| Simplified Chinese (简体中文) (zh_CN) |  |
+| Slovakian (Slovensky) (sk_SK) |  |
+| Slovenian (Slovenščina) (sl_SI) |  |
+| Spanish (Español) (es_ES) |  |
+| Swedish (Svenska) (sv_SE) |  |
+| Thai (ไทย) (th_TH) |  |
| Tibetan (བོད་ཡིག་) (bo_CN) |  |
-| Traditional Chinese (繁體中文) (zh_TW) |  |
-| Turkish (Türkçe) (tr_TR) |  |
-| Ukrainian (Українська) (uk_UA) |  |
-| Vietnamese (Tiếng Việt) (vi_VN) |  |
+| Traditional Chinese (繁體中文) (zh_TW) |  |
+| Turkish (Türkçe) (tr_TR) |  |
+| Ukrainian (Українська) (uk_UA) |  |
+| Vietnamese (Tiếng Việt) (vi_VN) |  |
| Malayalam (മലയാളം) (ml_IN) |  |
## Stirling PDF Enterprise
diff --git a/scripts/ignore_translation.toml b/scripts/ignore_translation.toml
index f0d1d7d2b..83e2df925 100644
--- a/scripts/ignore_translation.toml
+++ b/scripts/ignore_translation.toml
@@ -242,7 +242,6 @@ ignore = [
'team.status',
'text',
'update.version',
- 'validateSignature.cert.bits',
'validateSignature.cert.version',
'validateSignature.status',
'watermark.type.1',
From 50760b5302251821913ee872b9a10db2683c14c2 Mon Sep 17 00:00:00 2001
From: EthanHealy01 <80844253+EthanHealy01@users.noreply.github.com>
Date: Thu, 13 Nov 2025 18:04:09 +0000
Subject: [PATCH 2/2] quick fix to compare (#4893)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
# Description of Changes
- Compare fix to stop the pages from getting stuck in loading state.
This code tracks which page images have actually finished loading in a
Map stored in a ref, and then uses a throwaway useState value
(setImageLoadedTick) just to force a re-render when that ref changes.
When an
fires onLoad, it marks that page as loaded in
imageLoadedRef and bumps the tick, causing React to re-render and
re-evaluate the condition for the loader overlay. Because the overlay is
only shown when imageLoadedRef.current.get(page.pageNumber) is false,
that re-render hides the blur/loader once the page’s image has loaded
and is in view, instead of the UI getting stuck in the “loading” state.
---
## Checklist
### General
- [ ] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [ ] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md)
(if applicable)
- [ ] I have performed a self-review of my own code
- [ ] My changes generate no new warnings
### Documentation
- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)
### Translations (if applicable)
- [ ] I ran
[`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md)
### UI Changes (if applicable)
- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)
### Testing (if applicable)
- [ ] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing)
for more details.
---
.../core/components/tools/compare/CompareDocumentPane.tsx | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/frontend/src/core/components/tools/compare/CompareDocumentPane.tsx b/frontend/src/core/components/tools/compare/CompareDocumentPane.tsx
index 78f9a4b75..18adf6ac6 100644
--- a/frontend/src/core/components/tools/compare/CompareDocumentPane.tsx
+++ b/frontend/src/core/components/tools/compare/CompareDocumentPane.tsx
@@ -1,5 +1,5 @@
import { Group, Loader, Stack, Text } from '@mantine/core';
-import { useMemo, useRef, useEffect } from 'react';
+import { useMemo, useRef, useEffect, useState } from 'react';
import type { PagePreview } from '@app/types/compare';
import type { TokenBoundingBox, CompareDocumentPaneProps } from '@app/types/compare';
import { mergeConnectedRects, normalizeRotation, groupWordRects, computePageLayoutMetrics } from '@app/components/tools/compare/compare';
@@ -53,6 +53,8 @@ const CompareDocumentPane = ({
// Track which page images have finished loading to avoid flashing between states
const imageLoadedRef = useRef