zitadel icon indicating copy to clipboard operation
zitadel copied to clipboard

feat(i18n): add Ukrainian language support

Open polaz opened this issue 3 months ago • 19 comments

Summary

  • Add comprehensive Ukrainian language support to ZITADEL
  • Complete translation of all user-facing interfaces
  • Integration with existing language configuration system

Changes Made

  • Console translations: Complete Ukrainian translation for admin console (2,861 translated strings)
  • Login interface: Ukrainian translations for authentication flows (535 strings)
  • Email notifications: Ukrainian translations for system emails (68 strings)
  • Common texts: Ukrainian translations for success/error messages (1,417 strings)
  • Language configuration: Added Ukrainian to supported languages and Angular locale registration
  • UI integration: Added Ukrainian option to language selection forms

Translation Quality

  • Professional translations using established Ukrainian IT terminology
  • Formal language appropriate for business software
  • Consistent terminology across all components (Users→Користувачі, Organization→Організація, etc.)
  • Preserved all technical placeholders, HTML tags, and formatting

Contributing Guidelines Compliance

  • ✅ Followed semantic commit message format
  • ✅ Added Ukrainian to all required configuration files
  • ✅ Maintained consistent file structure with existing languages
  • ✅ Used formal Ukrainian appropriate for business software

The Ukrainian translation is now ready for review by the ZITADEL team! 🚀

polaz avatar Sep 11 '25 01:09 polaz

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
docs Ready Ready Preview Comment Dec 11, 2025 1:51pm

vercel[bot] avatar Sep 11 '25 01:09 vercel[bot]

@polaz is attempting to deploy a commit to the zitadel Team on Vercel.

A member of the Team first needs to authorize it.

vercel[bot] avatar Sep 11 '25 01:09 vercel[bot]

Thank you for your contribution, we'll have a look as soon as we can @polaz

elinashoko avatar Sep 23 '25 01:09 elinashoko

View your CI Pipeline Execution ↗ for commit cf3cf3f800c219752fec19cfb318082be6228a0f

Command Status Duration Result
nx affected --nxBail --targets lint test build ... ✅ Succeeded 1m 44s View ↗

☁️ Nx Cloud last updated this comment at 2025-12-11 14:32:05 UTC

nx-cloud[bot] avatar Oct 27 '25 09:10 nx-cloud[bot]

Hi @polaz

There are some linting issues in your changes, hence the pipeline is failing. Can you fix those and submit and update?

Here there's a link to the pipeline running and the failed task.

IAM-marco avatar Oct 27 '25 10:10 IAM-marco

Hi @polaz

There are some linting issues in your changes, hence the pipeline is failing. Can you fix those and submit and update?

Here there's a link to the pipeline running and the failed task.

added a newline at the ond of file, prettier now doesnt warn

polaz avatar Oct 27 '25 11:10 polaz

Hi @IAM-marco,

Thank you for the review. I've added the missing keys:

  • LANGUAGES.uk: "Українська" (fixes the language selector display issue)
  • SMTP.DETAIL.TITLE: "Налаштування SMTP постачальника"
  • SMTP.EMPTY: "Немає доступного SMTP постачальника"
  • SMTP.STEPS.SENDGRID: {} (structure match)

Verification shows all 2026 English keys are now present in Ukrainian translation. The only extra key is LANGUAGES.uk which is expected.

Ready for re-review.

polaz avatar Nov 03 '25 16:11 polaz

Each translation file contains three LANGUAGES objects that must be kept synchronized:

  • SETTING.LANGUAGES.OPTIONS (settings page)
  • POLICY.LOGIN_TEXTS.LANGUAGES (login text customization)
  • LANGUAGES (root level UI selector)

Previous commit only added "uk" key to one location in uk.json. Now added to all three locations across all 21 translation files with appropriate translations (63 additions total).

polaz avatar Nov 03 '25 18:11 polaz

There's also linting to be fixed: https://cloud.nx.app/runs/3ufOzw4SNd

IAM-marco avatar Nov 04 '25 09:11 IAM-marco

Standardized Ukrainian language key display across all translation files.

Previously "uk" key showed translated versions (en: "Ukrainian", de: "Ukrainisch", etc). Now displays native form "Українська" in all files, matching the pattern used for Russian ("ru": "Русский" appears in all files).

Updated 60 occurrences across 20 translation files.

polaz avatar Nov 11 '25 01:11 polaz

Hi @polaz

Apologies for the delay.

I've looked at your changes, they seem good to me!

However, I tried running Zitadel in local, and Ukrainian language doesn't seem to be picked up by the interface. I am not sure why is that, I asked people from the frontend team to help me with this. I don't believe you missed anything, but somehow it still doesn't work. It just might be an issue on my side.

image

I will come back to you if anything needs changing.

IAM-marco avatar Nov 27 '25 10:11 IAM-marco

Hey @polaz

I asked @skewis6, who's doing frontend, but we don't seem to understand what is the issue exactly.

It seems like the system doesn't find the uk.json translation, despite being there.

I'm waiting for @conblem to be back (currently OOO) and I'll ask him to take a look.

IAM-marco avatar Nov 27 '25 14:11 IAM-marco

found the issue - i18n-iso-countries/langs/uk.json was missing from angular.json prebundle exclude list. all other language files were listed there except ukrainian.

polaz avatar Dec 04 '25 17:12 polaz

added Ukrainian to supported languages list in docs (texts.md) and documented the angular.json prebundle exclude requirement in CONTRIBUTING.md to prevent this issue for future language additions.

polaz avatar Dec 04 '25 17:12 polaz

added Ukrainian localization for login v2 (apps/login/locales/uk.json) and documented login v2 translation requirements in CONTRIBUTING.md.

polaz avatar Dec 04 '25 17:12 polaz

found the issue - i18n-iso-countries/langs/uk.json was missing from angular.json prebundle exclude list. all other language files were listed there except ukrainian.

We did spot that. However, even after adding it, it seems that the ukrainian language is still not recognised.

IAM-marco avatar Dec 04 '25 18:12 IAM-marco

Added Ukrainian translations to internal/query/v2-default.json to fix login v2 localization.

polaz avatar Dec 05 '25 15:12 polaz

The build-console target has "cache": true. When uk.json was added, the NX cache for build-console was computed before uk.json existed, so NX served the cached (stale) output instead of re-running the copy command.

so uk.json is missing in static assets and not go to statik bundle (go)

i actually don't know how to fix the build chain without using --skip-nx-cache or manually copying to static assets

polaz avatar Dec 05 '25 15:12 polaz

if i understand correctly - it seems that build-console target has no inputs defined, so NX cache hash is based only on apps/api/**/* files (default). dependsOn ensures task order but doesn't invalidate cache hash when console outputs change.

possible fix:

--- a/apps/api/project.json
+++ b/apps/api/project.json
@@ -211,6 +211,9 @@
             ],
             "command": "cp -r console/dist/console/* internal/api/ui/console/static",
             "cache": true,
+            "inputs": [
+                "{workspaceRoot}/console/dist/console/**/*"
+            ],
             "outputs": [
                 "{workspaceRoot}/internal/api/ui/console/static"
             ]

tested locally - works.

polaz avatar Dec 08 '25 22:12 polaz

Yeah you might be right, let me have a look!

IAM-marco avatar Dec 11 '25 11:12 IAM-marco

Ok got it working

image

@polaz can you push the changes for cache management in apps/api/project.json ?

IAM-marco avatar Dec 11 '25 12:12 IAM-marco