Skip to content

locale: translate all locales (7.6.0) - #9337

Open
DawoudIO wants to merge 43 commits into
masterfrom
locales/7.6.0-2026-08-01-110111
Open

locale: translate all locales (7.6.0)#9337
DawoudIO wants to merge 43 commits into
masterfrom
locales/7.6.0-2026-08-01-110111

Conversation

@DawoudIO

@DawoudIO DawoudIO commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Automated locale translation for ChurchCRM 7.6.0.

Translation Summary

  • Group A (Latin America & Iberia): es, es-MX, pt-br, pt, es-AR ✅
  • Group B (Romance & Europe): es-CO, es-SV, fr, it, ro ✅
  • Group C (Eastern Europe): ru, uk, pl, cs, hu ✅
  • Group D (Northern Europe): de, nl, sv, nb, fi, et ✅
  • Group E (Asia Pacific): fil, ko, id, vi, zh-CN ✅
  • Group F (More Asia): zh-TW, hi, ja, ta, te ✅
  • Group G (Africa & Other): sw, am, af, sq, ml ✅
  • Group H (Completion): ar, el, he, th, sk, tr, hr ✅

Total: 43 locales, 115 terms translated

Changes

All translations applied via locale/scripts/locale-translate.js --apply. Plural forms (one/other) handled correctly per locale. Church-appropriate vocabulary used throughout with denomination context.

Next Steps

  1. Review and merge this PR
  2. Run: npm run locale:upload:missing -- --yes (requires POEDITOR_TOKEN — maintainer runs manually after merge)

DawoudIO added 30 commits August 1, 2026 11:02
@DawoudIO
DawoudIO requested a review from a team as a code owner August 1, 2026 11:14
Copilot AI review requested due to automatic review settings August 1, 2026 11:14
@DawoudIO

DawoudIO commented Aug 1, 2026

Copy link
Copy Markdown
Contributor Author

🔍 Automated PR review started. Follow the reviewer discussion here: https://agentic-platform.docker.com/shared/b7b8ae17-8ccb-4378-94bb-67fb50212fe2

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

Several newly added translations contain clear spelling issues due to missing diacritics/UTF-8 characters (e.g., Turkish, Vietnamese, Slovak, Croatian, German), which should be corrected before merging.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Pull request overview

This PR applies automated translations to the locale/terms/missing/* JSON term files for the 7.6.0 release, filling previously-empty strings across 43 locales so runtime UI messages have localized text.

Changes:

  • Filled missing locale term translations (including plural one/other variants) across 43 locales.
  • Added translations for a small set of additional non-plural UI terms (e.g., “Code”, “Items”, “Important”) where they were previously empty.
File summaries
File Description
locale/terms/missing/zh-TW/zh-TW-1.json Fill missing zh-TW terms (including pluralized blocks and %d placeholders).
locale/terms/missing/zh-CN/zh-CN-1.json Fill missing zh-CN terms (including pluralized blocks and %d placeholders).
locale/terms/missing/vi/vi-1.json Fill missing Vietnamese pluralized terms.
locale/terms/missing/uk/uk-1.json Fill missing Ukrainian pluralized terms.
locale/terms/missing/tr/tr-1.json Fill missing Turkish pluralized terms.
locale/terms/missing/th/th-1.json Fill missing Thai terms (including pluralized blocks and %d placeholders).
locale/terms/missing/te/te-1.json Fill missing Telugu pluralized terms.
locale/terms/missing/ta/ta-1.json Fill missing Tamil pluralized terms.
locale/terms/missing/sw/sw-1.json Fill missing Swahili pluralized terms.
locale/terms/missing/sv/sv-1.json Fill missing Swedish pluralized terms.
locale/terms/missing/sq/sq-1.json Fill missing Albanian pluralized terms.
locale/terms/missing/sk/sk-1.json Fill missing Slovak pluralized terms.
locale/terms/missing/ru/ru-1.json Fill missing Russian pluralized terms.
locale/terms/missing/ro/ro-1.json Fill missing Romanian terms (includes a few additional non-plural keys).
locale/terms/missing/pt/pt-1.json Fill missing Portuguese (pt) pluralized terms.
locale/terms/missing/pt-br/pt-br-1.json Fill missing Portuguese (pt-BR) pluralized terms.
locale/terms/missing/pl/pl-1.json Fill missing Polish pluralized terms.
locale/terms/missing/nl/nl-1.json Fill missing Dutch terms (includes a few additional non-plural keys).
locale/terms/missing/nb/nb-1.json Fill missing Norwegian Bokmål pluralized terms.
locale/terms/missing/ml/ml-1.json Fill missing Malayalam pluralized terms.
locale/terms/missing/ko/ko-1.json Fill missing Korean pluralized terms.
locale/terms/missing/ja/ja-1.json Fill missing Japanese terms (including pluralized blocks and %d placeholders).
locale/terms/missing/it/it-1.json Fill missing Italian terms (includes a few additional non-plural keys).
locale/terms/missing/id/id-1.json Fill missing Indonesian pluralized terms.
locale/terms/missing/hu/hu-1.json Fill missing Hungarian pluralized terms.
locale/terms/missing/hr/hr-1.json Fill missing Croatian pluralized terms.
locale/terms/missing/hi/hi-1.json Fill missing Hindi pluralized terms.
locale/terms/missing/he/he-1.json Fill missing Hebrew pluralized terms.
locale/terms/missing/fr/fr-1.json Fill missing French terms (includes a few additional non-plural keys).
locale/terms/missing/fil/fil-1.json Fill missing Filipino/Tagalog terms (includes multiple additional non-plural keys).
locale/terms/missing/fi/fi-1.json Fill missing Finnish pluralized terms.
locale/terms/missing/et/et-1.json Fill missing Estonian pluralized terms.
locale/terms/missing/es/es-1.json Fill missing Spanish pluralized terms.
locale/terms/missing/es-SV/es-SV-1.json Fill missing Spanish (El Salvador) pluralized terms.
locale/terms/missing/es-MX/es-MX-1.json Fill missing Spanish (Mexico) pluralized terms.
locale/terms/missing/es-CO/es-CO-1.json Fill missing Spanish (Colombia) pluralized terms.
locale/terms/missing/es-AR/es-AR-1.json Fill missing Spanish (Argentina) pluralized terms.
locale/terms/missing/el/el-1.json Fill missing Greek pluralized terms.
locale/terms/missing/de/de-1.json Fill missing German terms (includes a few additional non-plural keys).
locale/terms/missing/cs/cs-1.json Fill missing Czech terms (includes a few additional non-plural keys).
locale/terms/missing/ar/ar-1.json Fill missing Arabic pluralized terms.
locale/terms/missing/am/am-1.json Fill missing Amharic pluralized terms.
locale/terms/missing/af/af-1.json Fill missing Afrikaans terms (includes a few additional non-plural keys).
Review details

Suppressed comments (5)

locale/terms/missing/tr/tr-1.json:12

  • Same Turkish diacritics issue repeats in the plural ("other") block; both blocks should use proper Turkish characters for readability.
    locale/terms/missing/vi/vi-1.json:12
  • Same Vietnamese diacritics issue repeats in the plural ("other") block; both blocks should use proper Vietnamese spelling.
    locale/terms/missing/sk/sk-1.json:12
  • Slovak plural ("other") block also has missing diacritics (e.g., Skopírovaných/členov/príjemcov/príliš/Použite/Kopírovať/Zostáva).
    locale/terms/missing/hr/hr-1.json:12
  • Croatian plural ("other") block repeats the missing-diacritics spelling issues (članova, previše, e-pošte, još).
    "Copied {{count}} members": "Kopirano {{count}} clanova",
    "This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "Ovaj popis ima {{count}} primatelja — previse za mailto: vezu. Umjesto toga upotrijebite Kopiraj adrese.",
    "Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "Previse primatelja za klijent e-poste ({{count}} > {{max}}). Umjesto toga upotrijebite Kopiraj adrese.",
    "{{count}} min left": "Jos {{count}} min"

locale/terms/missing/de/de-1.json:12

  • German plural ("other") block repeats the ASCII transliteration (Empfaenger/fuer); should be updated consistently to proper umlauts.
    "This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "Diese Liste hat {{count}} Empfaenger - zu viele fuer einen mailto:-Link. Verwenden Sie stattdessen Adressen kopieren.",
    "Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "Zu viele Empfaenger fuer den E-Mail-Client ({{count}} > {{max}}). Verwenden Sie stattdessen Adressen kopieren.",
  • Files reviewed: 43/43 changed files
  • Comments generated: 5
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Comment on lines +3 to +6
"Copied {{count}} members": "{{count}} uye kopyalandi",
"This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "Bu listede {{count}} alici var — mailto: baglantisi icin cok fazla. Bunun yerine Adresleri Kopyala'yi kullanin.",
"Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "E-posta istemcisi icin cok fazla alici ({{count}} > {{max}}). Bunun yerine Adresleri Kopyala'yi kullanin.",
"{{count}} min left": "{{count}} dakika kaldi"
Comment on lines +3 to +6
"Copied {{count}} members": "Da sao chep {{count}} thanh vien",
"This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "Danh sach nay co {{count}} nguoi nhan — qua nhieu cho lien ket mailto:. Vui long su dung Sao chep dia chi.",
"Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "Qua nhieu nguoi nhan cho ung dung email ({{count}} > {{max}}). Vui long su dung Sao chep dia chi.",
"{{count}} min left": "Con {{count}} phut"
Comment on lines +3 to +6
"Copied {{count}} members": "Skopirovaný {{count}} clen",
"This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "Tento zoznam ma {{count}} prijemcu — prilis vela pre odkaz mailto:. Pouzite namiesto toho Kopirovat adresy.",
"Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "Prilis vela prijemcov pre e-mailoveho klienta ({{count}} > {{max}}). Pouzite namiesto toho Kopirovat adresy.",
"{{count}} min left": "Zostava {{count}} min"
Comment on lines +3 to +6
"Copied {{count}} members": "Kopiran {{count}} clan",
"This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "Ovaj popis ima {{count}} primatelja — previse za mailto: vezu. Umjesto toga upotrijebite Kopiraj adrese.",
"Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "Previse primatelja za klijent e-poste ({{count}} > {{max}}). Umjesto toga upotrijebite Kopiraj adrese.",
"{{count}} min left": "Jos {{count}} min"
Comment on lines +5 to +6
"This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "Diese Liste hat {{count}} Empfaenger - zu viele fuer einen mailto:-Link. Verwenden Sie stattdessen Adressen kopieren.",
"Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "Zu viele Empfaenger fuer den E-Mail-Client ({{count}} > {{max}}). Verwenden Sie stattdessen Adressen kopieren.",

@DawoudIO DawoudIO left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated PR Reviewthis comment was posted by the pr-reviewer bot, not by a human or the implementer agent

Assessment: 🟡 NEEDS ATTENTION

This PR fills in 115 previously-empty translation strings across 43 locales — a valuable contribution. However, 5 locales have systematic encoding issues where language-specific characters were replaced with ASCII substitutes, making the translations incorrect or unreadable for native speakers.

Issues Found

Locale File Problem
Vietnamese (vi) vi/vi-1.json All tone marks stripped — text is meaningless without diacritics
Turkish (tr) tr/tr-1.json All Turkish characters missing (ü, ı, ğ, ş, ç, ö)
Slovak (sk) sk/sk-1.json Wrong word "Zostava" (noun: lineup) vs. "Zostáva" (verb: remains) + widespread missing diacritics
Croatian (hr) hr/hr-1.json All Croatian diacritics missing (č, š, ž)
German (de) de/de-1.json ASCII substitutions for umlauts: "Empfaenger"→"Empfänger", "fuer"→"für"

These appear to be artifacts of the automated translation script stripping non-ASCII characters before writing the JSON files. The remaining 38 locales use correct UTF-8 characters (Greek, Arabic, Hebrew, Cyrillic, CJK scripts all look correct in the diff).

Suggested Fix

Re-run the translation script for the 5 affected locales ensuring UTF-8 output is preserved, or patch the strings directly in the JSON files.

CI: all 7 checks passed ✅

"This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "",
"Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "",
"{{count}} min left": ""
"Copied {{count}} members": "Da sao chep {{count}} thanh vien",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated PR Reviewthis comment was posted by the pr-reviewer bot, not by a human or the implementer agent

[MEDIUM] Vietnamese translations are ASCII-only — all tone marks stripped

Every string in this file uses plain ASCII, completely removing Vietnamese diacritics and tone marks. Vietnamese is a tonal language where these marks are not optional — they change word meaning entirely.

Examples from this file:

  • "Da sao chep" → should be "Đã sao chép" ("Đã" = past tense; "Da" = skin)
  • "thanh vien" → should be "thành viên" (member)
  • "qua nhieu" → should be "quá nhiều" (too many)
  • "Con {{count}} phut" → should be "Còn {{count}} phút" (minutes left)

The translations are unreadable/incorrect to Vietnamese speakers as-is. Please re-run the translation script with UTF-8 output preserved for this locale.

"This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "",
"Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "",
"{{count}} min left": ""
"Copied {{count}} members": "{{count}} uye kopyalandi",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated PR Reviewthis comment was posted by the pr-reviewer bot, not by a human or the implementer agent

[MEDIUM] Turkish translations strip all Turkish-specific characters

All Turkish diacritics are replaced with ASCII equivalents throughout this file:

  • "uye" → should be "üye" (member)
  • "alici" → should be "alıcı" (recipient)
  • "baglantisi" → should be "bağlantısı" (link/connection)
  • "icin" → should be "için" (for)
  • "cok" → should be "çok" (too/many)
  • "kullanin" → should be "kullanın" (use)
  • "kaldi" → should be "kaldı" (left/remaining)

Turkish uses ü, ö, ç, ş, ğ, and dotless-ı as distinct letters. Please re-run with proper UTF-8 encoding for this locale.

"This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "",
"Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "",
"{{count}} min left": ""
"Copied {{count}} members": "Skopirovaný {{count}} clen",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated PR Reviewthis comment was posted by the pr-reviewer bot, not by a human or the implementer agent

[MEDIUM] Slovak: wrong word "Zostava" + widespread missing diacritics

Two issues in this file:

  1. Wrong word: "Zostava {{count}} min" uses "Zostava" — a Slovak noun meaning "lineup" or "formation" (e.g., a sports roster). For "minutes remaining", the correct word is the verb "Zostáva" (3rd person of zostávať = to remain): "Zostáva {{count}} min".

  2. Missing diacritics throughout:

    • "clen""člen" (member)
    • "prilis vela""príliš veľa" (too many)
    • "Kopirovat""Kopírovať" (to copy)
    • "prijemcu""príjemcu" (recipient)
    • "Pouzite""Použite" (use/utilize)

"This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "",
"Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "",
"{{count}} min left": ""
"Copied {{count}} members": "Kopiran {{count}} clan",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated PR Reviewthis comment was posted by the pr-reviewer bot, not by a human or the implementer agent

[MEDIUM] Croatian translations strip diacritics (č, š, ž) throughout

Croatian diacritics are entirely missing from all strings in this file:

  • "clan""član" (member)
  • "clanova""članova" (members, genitive plural)
  • "previse""previše" (too many)
  • "e-poste""e-pošte" (email, genitive)
  • "Jos""Još" (still/remaining)

In Croatian orthography, č, š, and ž are distinct letters — not stylistic variants. The current text is misspelled.

"Too many recipients for email client ({{count}} > {{max}}). Use Copy Addresses instead.": "",
"{{count}} min left": ""
"Copied {{count}} members": "{{count}} Gemeindemitglied kopiert",
"This list has {{count}} recipients — too many for a mailto: link. Use Copy Addresses instead.": "Diese Liste hat {{count}} Empfaenger - zu viele fuer einen mailto:-Link. Verwenden Sie stattdessen Adressen kopieren.",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated PR Reviewthis comment was posted by the pr-reviewer bot, not by a human or the implementer agent

[MEDIUM] German translations use ASCII substitutes for umlauts

Two strings in both one and other blocks use old-style ASCII umlaut substitutions:

  • "Empfaenger" → should be "Empfänger" (recipients)
  • "fuer" → should be "für" (for)

Example: "Diese Liste hat {{count}} Empfaenger - zu viele fuer einen mailto:-Link." should be "Diese Liste hat {{count}} Empfänger – zu viele für einen mailto:-Link."

The "{{count}} Min. verbleibend" string is correct. Only the two "recipients" strings need fixing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants