i18n(es): complete dynamic UI translations (#4306)

* i18n(es): complete dynamic UI translations

* es.tsv: keep Blur Angle once after merging main

---------

Co-authored-by: gorevyoneticisi <gorevyoneticisi@users.noreply.github.com>
Co-authored-by: Brandon Thomas <echelon@gmail.com>
This commit is contained in:
Efe
2026-10-14 15:36:32 -04:00
committed by GitHub
co-authored by gorevyoneticisi Brandon Thomas
parent 7e0f48a290
commit 8d840eab59
6 changed files with 1322 additions and 20 deletions
+1
View File
@@ -13,6 +13,7 @@ next to them.
| `crates/codecs/src/codecs/xpm/x11_colors.rs` | X11 `rgb.txt` color-name lookup table (normalized X.Org RGB values) | X.Org Foundation and X11 contributors | <https://cgit.freedesktop.org/xorg/app/rgb/tree/rgb.txt> | MIT (X.Org app/rgb) |
| `crates/ui-egui/src/i18n/el.tsv` | Greek UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, [`LICENSE-translations.txt`](crates/ui-egui/src/i18n/LICENSE-translations.txt) |
| `crates/ui-egui/src/i18n/de.tsv` | German UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, [`LICENSE-translations.txt`](crates/ui-egui/src/i18n/LICENSE-translations.txt) |
| `crates/ui-egui/src/i18n/es.tsv` | Spanish UI translations | @gorevyoneticisi; AI contributor: OpenAI Codex | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, [`LICENSE-translations.txt`](crates/ui-egui/src/i18n/LICENSE-translations.txt) |
| `crates/ui-egui/src/i18n/it.tsv` | Italian UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, [`LICENSE-translations.txt`](crates/ui-egui/src/i18n/LICENSE-translations.txt) |
| `crates/ui-egui/src/i18n/ko.tsv` | Korean UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, [`LICENSE-translations.txt`](crates/ui-egui/src/i18n/LICENSE-translations.txt) |
| `crates/ui-egui/src/i18n/nl.tsv` | Dutch UI translations | PhotoCraft contributors | Original translations of PhotoCraft's English labels | MIT OR Apache-2.0, [`LICENSE-translations.txt`](crates/ui-egui/src/i18n/LICENSE-translations.txt) |
+6
View File
@@ -1367,6 +1367,12 @@ mod tests {
assert!(missing.is_empty(), "missing Italian dynamic labels: {missing:#?}");
}
#[test]
fn spanish_covers_generated_filter_options_and_gallery_names() {
let missing = missing_generated_filter_labels(crate::i18n::lang_from_tag("es-ES").unwrap());
assert!(missing.is_empty(), "missing Spanish dynamic labels: {missing:#?}");
}
/// The Select menu's generated dialogs (Select and Mask, Modify ▸ …) show their
/// params, choices and title in every UI language, not just Korean.
#[test]
@@ -1,5 +1,6 @@
PhotoCraft's Korean, German, Brazilian Portuguese, Italian, Ukrainian, Dutch, Czech, Turkish,
Hungarian and Serbian UI translation catalogs are licensed under MIT OR Apache-2.0, at your option.
PhotoCraft's Korean, German, Spanish, Brazilian Portuguese, Italian, Ukrainian, Dutch, Czech,
Turkish, Hungarian and Serbian UI translation catalogs are licensed under MIT OR Apache-2.0,
at your option.
The full license texts are in ../../../../LICENSE-MIT and ../../../../LICENSE-APACHE.
Korean translations: PhotoCraft contributors, original translations of
@@ -8,6 +9,11 @@ PhotoCraft's English labels; no proprietary translation resources were used.
German translations: PhotoCraft contributors, original translations of
PhotoCraft's English labels; no proprietary translation resources were used.
Spanish translations: contributed by @gorevyoneticisi with OpenAI Codex as an AI contributor.
The resulting catalog is licensed under MIT OR Apache-2.0 as stated above; the translations are
original translations of PhotoCraft's English labels, and no proprietary translation resources
were used.
Brazilian Portuguese translations: PhotoCraft contributors, original translations of
PhotoCraft's English labels; no proprietary translation resources were used.
File diff suppressed because it is too large Load Diff
+27 -12
View File
@@ -1,12 +1,12 @@
# Spanish terminology
# Spanish terminology and dynamic UI labels
This note goes with the review of the Spanish catalog
(`crates/ui-egui/src/i18n/es.tsv`). The catalog already covered every measured key; the review
aligned its wording with the terminology a Spanish-speaking Photoshop user already knows, fixed
mistranslations, and made the register consistent. No proprietary translation resources, fonts,
screenshots or user documents are included: the terms are the ones a Spanish Photoshop user sees
in the product and its public help, and each was checked against the meaning of PhotoCraft's own
English label.
This note goes with the review and completion of the Spanish catalog
(`crates/ui-egui/src/i18n/es.tsv`). It already covered every key measured by
`cargo xtask i18n-coverage`; the terminology review aligned its wording with the vocabulary a
Spanish-speaking image editor already knows, fixed mistranslations, and made the register
consistent. A later pass added the 1,276 runtime-only labels it still lacked. No proprietary
translation resources, fonts, screenshots or user documents are included: every translation was
written from the meaning of PhotoCraft's own English label.
## Register and style
@@ -17,6 +17,19 @@ English label.
- Quotation marks are «angulares»: «{name}».
- Neutral Spanish, matching Adobe's single Spanish catalog (for example «coma flotante»).
## Dynamic UI coverage
After merging the newer upstream catalog rows, the catalog has 4,010 entries. It covers the
complete Italian runtime key set and retains two Spanish profile-prompt labels that other
catalogs also use. The additional labels include filter and adjustment parameters and choices,
Filter Gallery names, Camera Raw, Lighting Effects, History and Layers controls, metadata,
dialogs, status wrappers and System Info labels. Before this pass, those controls fell back to
English because many are assembled dynamically and cannot be found by the static coverage scan.
`spanish_covers_generated_filter_options_and_gallery_names` in `filter_dialog.rs` enumerates the
generated filter and adjustment surface and fails if a future label has no Spanish row. A few
unused legacy labels are retained so the complete catalogs stay aligned.
## Terminology
| English source | Spanish UI | Was |
@@ -61,7 +74,9 @@ Raw, droplet, OpenType, sRGB, Wayland) are not translated.
## Out of scope
Engine error, status and parameter-help messages are still English in every language (see
[`localization-parity.md`](localization-parity.md)); this review does not change that. The review
was AI-assisted, row by row against Photoshop's Spanish terminology; a review by a native
speaker is still welcome.
Engine-generated error details, status text and parameter help that do not pass through the UI
catalog remain English in every language (see
[`localization-parity.md`](localization-parity.md)). User document, layer and preset names and
automation command IDs also remain unchanged. The completion was contributed by
@gorevyoneticisi with OpenAI Codex as an AI contributor under the repository's MIT OR
Apache-2.0 terms; a review by a native speaker is still welcome.
+4 -2
View File
@@ -1,6 +1,6 @@
# Localization parity
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-12 · **Change:** minor (Serbian catalog; previously minor: Italian native review) · **Target:** Adobe Photoshop 2026
> **Last reviewed:** 2026-10-12 · **Last updated:** 2026-10-13 · **Change:** minor (Spanish dynamic labels; previously minor: Serbian catalog) · **Target:** Adobe Photoshop 2026
Per-language status of PhotoCraft's UI. How catalogs work and how to add one:
[`localization.md`](localization.md). Language notes: [Korean](localization-ko.md), [Spanish](localization-es.md),
@@ -32,7 +32,7 @@ speakers, ~55% ready. Remaining: 80–140 h, plus native-speaker review (recorde
|---|---|---|---:|---|---|---|---|---:|
| English | `en` | 1,608 / 1,608 (100%) | source | all | Latin | – | full | 0 h |
| Simplified Chinese | `zh-hans` | 1,608 / 1,608 (100%) | 2,366 | dialogs, tooltips yes; engine messages English | CJK fonts (lazy loader), IME preedit/commit, vertical type | no | partial | 8–12 h |
| Spanish | `es` | 1,608 / 1,608 (100%) | 2,413 | as above | Latin | no | partial | 6–10 h |
| Spanish | `es` | 1,844 / 1,844 (100%) | 4,010 | as above; complete dynamic UI key set | Latin | no | partial | 6–10 h |
| Hindi | `hi` | 0 (0%) | – | – | Devanagari shaping in the text engine (parley/HarfRust); no Devanagari fallback font (TYPE-218-3) | no | none | 20–30 h |
| Arabic | `ar` | 0 (0%) | – | – | Arabic shaping and bidi in the text engine, Arabic fallback font; RTL shell layout but not inside panels, and UI labels in LTR word order (DIST-220-4), paragraph direction has no UI (TYPE-218-2), layer names as tofu (#1408, #1693) | no | none | 40–60 h |
| French | `fr` | 1,608 / 1,608 (100%) | 2,766 | as above | Latin | no | partial | 6–10 h |
@@ -47,6 +47,7 @@ speakers, ~55% ready. Remaining: 80–140 h, plus native-speaker review (recorde
8 more, each at 1,608 / 1,608 measured keys, status `partial` for the same reason: Traditional
Chinese `zh-hant` (2,329 rows), Russian `ru` (2,544), Ukrainian `uk` (3,375), Czech `cs` (3,522),
Polish `pl` (3,366), Greek `el` (3,481), Dutch `nl` (3,568), Italian `it` (4,008; also every dynamic label the
Polish `pl` (3,366), Greek `el` (3,481), Dutch `nl` (3,568), Italian `it` (4,164; also every dynamic label the
other catalogs translate; reviewed by a native speaker, [notes](localization-it.md)). Turkish `tr`
(3,731 rows) also covers every measured key. Serbian `sr` (4,022 rows, Latin script, Ekavian, added 2026-10-12) covers every
@@ -83,5 +84,6 @@ engine localization or native review is complete.
| 2026-10-11 | minor | Czech review follow-ups: English System Info diagnostics, id-aware shortcut labels, display-only auto translation, warning punctuation and wording; catalog row count refreshed |
| 2026-10-11 | minor | Italian: 1,287 dynamic labels added (filter parameters, Camera Raw, lighting, panels, dialogs) and terminology made consistent |
| 2026-10-12 | minor | Added Turkish (`tr`) catalog with 100% measured UI coverage |
| 2026-10-12 | minor | Spanish: 1,276 runtime-only labels added (filter and adjustment parameters, Camera Raw, panels, dialogs and status wrappers); generated-label coverage test added |
| 2026-10-12 | minor | Italian native-speaker review: mistranslations (Trap, HDR Toning, Display Text) and phrasing fixed |
| 2026-10-12 | minor | Serbian (`sr`, Latin, Ekavian) catalog: every measured key plus the dynamic labels of the other catalogs |