i18n(pl): citation style names, audit coverage and attribution (#750) (#1720)

* i18n(pl): citation style names, audit coverage and attribution (#750)

Follow-up to #871.
- pl.tsv: add the 12 citation style names (APA, Chicago, GOST, ISO 690,
  ...) that hu.tsv and bg.tsv already translate.
- tests.rs: Polish also checked against the citation styles; Italian and
  Hungarian may differ only by the obsolete "Style: APA".
- audit.rs: Polish joins the catalogs that must cover every looked-up string.
- ATTRIBUTION.md: credit Aleksander Kutycki (@olekkut) with Gemini 3.8 Flash for pl.tsv.
- contributors/people.toml: add [people.olekkut] entry.

Co-Authored-By: Gemini 3.8 Flash <noreply@google.com>

* i18n(pl): one-line equation gallery pieces (Large, Limit and, Log) so Polish matches Italian

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Gemini 3.8 Flash <noreply@google.com>
Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aleksander Kutycki
2026-10-18 04:23:54 -04:00
committed by GitHub
co-authored by Gemini 3.8 Flash Claude Opus 5.5 Brandon Thomas
parent c2b97f1180
commit 9acc34f22c
5 changed files with 33 additions and 5 deletions
+1 -1
View File
@@ -67,7 +67,7 @@ Generated-in-code art is original and has no file to list: the UI icon set (`cra
| craft-fonts (optional build input, not files in this repo): BIZ UDPGothic, BIZ UDMincho, Shippori Mincho, Noto Sans CJK SC, Noto Sans Arabic | see https://github.com/storytold/craft-fonts/blob/main/ATTRIBUTION.md | embedded only when built with `CRAFT_FONTS_DIR` (all official releases) | OFL-1.1 | Japanese and Chinese UI, Japanese document fallback |
| `crates/ui-egui/src/i18n/uk.tsv` | @dmatviichuk with Codex | Original translation from the English interface labels in this repository; no other product localisation copied | MIT OR Apache-2.0 | Ukrainian interface catalog; spelling checked with external VESUM and ULIF dictionaries, neither bundled |
| `crates/ui-egui/src/i18n/et.tsv` | @henno with Codex | Original translation from the English interface labels in this repository; no other product localisation copied | MIT OR Apache-2.0 | Estonian interface catalog |
| `crates/ui-egui/src/i18n/pl.tsv` | Konrad Witkowski with Claude (AI agent) | Original translation from the English interface labels in this repository; no other product localisation copied | MIT OR Apache-2.0 | Polish interface catalog; not yet reviewed by a second native speaker |
| `crates/ui-egui/src/i18n/pl.tsv` | Konrad Witkowski with Claude (AI agent); Aleksander Kutycki (@olekkut) with Gemini 3.8 Flash | Original translation from the English interface labels in this repository; no other product localisation copied | MIT OR Apache-2.0 | Polish interface catalog; not yet reviewed by a second native speaker |
| `crates/ui-egui/src/i18n/pt-br.tsv` | @edurbs with ZCode | Original translation from the English interface labels in this repository; no other product localisation copied | MIT OR Apache-2.0 | Brazilian Portuguese interface catalog; spelling checked with the external pt_BR Hunspell dictionary, not bundled |
| `crates/ui-egui/src/i18n/cs.tsv` | @DanielKnourek with Antigravity for VS Code | Original translation from the English interface labels in this repository; no other product localisation copied | MIT OR Apache-2.0 | Czech interface catalog; review suggestions by @Losminek |
| `crates/ui-egui/src/i18n/de.tsv` | @arekown with Kimi | Original translation from the English interface labels in this repository; no other product localisation copied | MIT OR Apache-2.0 | German interface catalog |
+5
View File
@@ -135,3 +135,8 @@ sync_github_name = false
real_name = "Andrej Škvorc"
display_name = "Andrej Škvorc"
sync_github_name = false
[people.olekkut]
real_name = "Aleksander Kutycki"
display_name = "Aleksander Kutycki"
sync_github_name = true
+4 -4
View File
@@ -333,9 +333,9 @@ fn untranslated_interface_text() {
complete_catalogs_have_every_string_the_interface_looked_up(pseudo::looked_up());
}
/// Russian, Hungarian, Turkish, Bulgarian, Italian, Swedish and Croatian cover everything the audit saw
/// translated, plus the equation gallery's labels (shown in menus the audit doesn't open one by
/// one). Numbered style names go through a template.
/// Russian, Hungarian, Turkish, Bulgarian, Italian, Swedish, Croatian and Polish cover everything the
/// audit saw translated, plus the equation gallery's labels (shown in menus the audit doesn't open
/// one by one). Numbered style names go through a template.
fn complete_catalogs_have_every_string_the_interface_looked_up(mut keys: std::collections::BTreeSet<String>) {
use wordcraft_engine::math_gallery::{BUILT_INS, STRUCTURES, SYMBOL_SETS};
keys.extend(BUILT_INS.iter().map(|(_, label, _)| label.to_string()));
@@ -379,7 +379,7 @@ fn complete_catalogs_have_every_string_the_interface_looked_up(mut keys: std::co
// translate: its placeholder names aren't words the interface shows.
let words = |s: &str| english_words(&s.split('{').map(|p| p.split_once('}').map_or(p, |(_, rest)| rest)).collect::<String>());
let mut report = String::new();
for code in ["ru", "hu", "tr", "bg", "it", "sv", "hr"] {
for code in ["ru", "hu", "tr", "bg", "it", "sv", "hr", "pl"] {
let lang = super::Lang::from_code(code).unwrap_or(super::Lang::EN);
let missing: Vec<&String> =
keys.iter().filter(|s| words(s) && !super::has(lang, s) && !numbered(s) && !same(s) && !script_error(s)).collect();
+15
View File
@@ -2575,6 +2575,21 @@ preview Title Tytuł
Suggested Sugerowane
Set Proofing Language… Ustaw język sprawdzania…
Language Preferences… Preferencje językowe…
APA APA
Chicago Chicago
GB/T 7714 GB/T 7714
GOST (name sort) GOST (sortowanie według nazwiska)
GOST (title sort) GOST (sortowanie według tytułu)
Harvard (Anglia) Harvard (Anglia)
IEEE IEEE
ISO 690 (author-date) ISO 690 (autor–data)
ISO 690 (numerical) ISO 690 (numeryczny)
MLA MLA
SIST02 SIST02
Turabian Turabian
Large Duży
Limit and Granica i
Log Logarytm
Printer Drukarka
Select a printer Wybierz drukarkę
Refresh printers Odśwież drukarki
Can't render this file because it contains an unexpected character in line 6 and column 25.
+8
View File
@@ -989,11 +989,17 @@ fn polish_covers_every_key_of_every_other_catalog() {
let polish = keys(lang("pl").0.source);
// Italian and Hungarian still carry "Style: APA", which the interface no longer shows;
// Hungarian and Bulgarian also name the citation styles, and Bulgarian has a few one-line
// pieces of gallery labels. Polish matches every other catalog, including the built-in style
// names, citation styles and equation gallery.
for other in Lang::all().filter(|l| *l != Lang::EN && !matches!(l.code(), "pl" | "it" | "hu" | "bg" | "vi" | "sv" | "hr")) {
let mut missing: Vec<String> = keys(other.0.source).difference(&polish).cloned().collect();
missing.sort();
assert!(missing.is_empty(), "pl lacks {}'s {missing:?}", other.code());
}
for code in ["it", "hu"] {
let missing: Vec<String> = keys(lang(code).0.source).difference(&polish).cloned().collect();
assert_eq!(missing, ["Style: APA"], "pl vs {code}");
}
let pl = lang("pl");
assert_eq!(tr(pl, "File"), "Plik");
assert_eq!(tr(pl, "Home"), "Start");
@@ -1002,6 +1008,8 @@ fn polish_covers_every_key_of_every_other_catalog() {
assert_eq!(tr(pl, "Save"), "Zapisz");
assert_eq!(tr(pl, "Spelling & Grammar"), "Pisownia i gramatyka");
assert_eq!(tr(pl, "Polish"), "Polski");
assert_eq!(tr(pl, "GOST (name sort)"), "GOST (sortowanie według nazwiska)");
assert_eq!(tr(pl, "ISO 690 (author-date)"), "ISO 690 (autor–data)");
assert_eq!(tr(pl, "unknown future label"), "unknown future label");
assert_eq!(fmt(tr(pl, "Exported {path}"), &[("path", "draft-{words}.docx")]), "Wyeksportowano: draft-{words}.docx");
assert_eq!(fmt(tr(pl, "Page {page} of {pages}"), &[("page", "3"), ("pages", "9")]), "Strona 3 z 9");