feat(i18n): add Polish (pl) language support#374
feat(i18n): add Polish (pl) language support#374mjeuforia wants to merge 4 commits intoWorklenz:mainfrom
Conversation
Add complete Polish language support to Worklenz, including:
- 72 locale JSON files with full Polish translations for all UI components
- Polish greeting strings ("Cześć", "Dobry poranek/dzień/wieczór")
- Polish date formatting ("Dziś jest" + dayjs pl locale)
- PL added to Language enum and LanguageSelector component
- Also added Korean (ko) locale mapping for date strings (was missing)
All translations were done with attention to Polish grammar and context.
Tested on self-hosted instance with 10+ team members.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
📝 WalkthroughWalkthroughAdds comprehensive Polish (pl) locale JSON files across the frontend, registers Polish in the language selector and enum, and adds Polish/Korean locale mappings and imports in date/greeting utilities; runtime behavior and public APIs remain unchanged. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 16
🧹 Nitpick comments (3)
worklenz-frontend/public/locales/pl/navbar.json (1)
1-32: Add trailing newline for consistency.JSON files should end with a trailing newline for better git diffs and POSIX compliance.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@worklenz-frontend/public/locales/pl/navbar.json` around lines 1 - 32, Add a trailing newline to the end of this JSON file (navbar.json) so the file ends with a single newline character; update the file containing keys like "logoAlt", "home", "projects", and the "notificationsDrawer" object to ensure the final character is a newline for POSIX/git consistency.worklenz-frontend/public/locales/pl/all-project-list.json (1)
1-34: Add trailing newline for consistency.JSON files should end with a trailing newline for better git diffs and POSIX compliance.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@worklenz-frontend/public/locales/pl/all-project-list.json` around lines 1 - 34, The JSON file all-project-list.json is missing a trailing newline at EOF; open the file (ending after the "noPermission" key) and add a single newline character at the end so the file ends with a trailing newline while preserving valid JSON formatting.worklenz-frontend/public/locales/pl/project-view/import-task-templates.json (1)
1-11: Add trailing newline for consistency.JSON files should end with a trailing newline for better git diffs and POSIX compliance.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@worklenz-frontend/public/locales/pl/project-view/import-task-templates.json` around lines 1 - 11, The JSON file defining translation keys (e.g., "importTaskTemplate", "templateName", "import") is missing a trailing newline at end-of-file; add a single newline character after the final closing brace so the file ends with a trailing newline to satisfy POSIX/git conventions and ensure consistent diffs.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@worklenz-frontend/public/locales/pl/admin-center/current-bill.json`:
- Line 125: Update the Polish locale's phone number pattern value for the
"phoneNumberPattern" key (currently "07xxxxxxxx") to reflect Polish numbering:
replace it with a 9-digit mobile format like "XXX XXX XXX" or "+48 XXX XXX XXX",
or use a more flexible pattern/regex that accepts 9-digit numbers and optional
"+48" prefix so Polish numbers such as "500123456", "600123456" or "+48 500 123
456" validate correctly.
In `@worklenz-frontend/public/locales/pl/auth/signup.json`:
- Line 25: The translation key "signInWithGoogleButton" currently reads as a
login action; update its value to use signup phrasing for the registration flow
(e.g., replace the value of signInWithGoogleButton with "Zarejestruj się za
pomocą Google" or similar) so the CTA on the signup screen correctly indicates
registration rather than sign-in.
In `@worklenz-frontend/public/locales/pl/common.json`:
- Around line 6-11: The translation strings for status keys are phrased as
finished states instead of ongoing/available states; update the values for
"reconnecting" and "update-available" in common.json so they reflect an
in-progress reconnect and an available update (e.g., change "reconnecting" from
"Rozłączono z serwerem." to a present-continuous like "Ponownie łączę..." or
"Trwa ponowne łączenie z serwerem", and change "update-available" from "Worklenz
zaktualizowany!" to "Dostępna aktualizacja Worklenz" or "Aktualizacja Worklenz
jest dostępna"); keep other keys ("connection-lost", "connection-restored",
"cancel", "update-description") unchanged.
In `@worklenz-frontend/public/locales/pl/project-drawer.json`:
- Line 5: Update the UI copy for the JSON key "hitEnterToCreate": locate the
"hitEnterToCreate" entry and change the value so the keyboard key name "Enter"
is capitalized (e.g., "Naciśnij Enter, aby utworzyć!"), preserving the rest of
the string and punctuation.
In `@worklenz-frontend/public/locales/pl/project-view-members.json`:
- Line 16: The empty-state translation for the members view is wrong: update the
"emptyText" value in project-view-members.json (the JSON key "emptyText") to a
members-appropriate Polish string such as "Brak członków w projekcie." and
ensure the JSON remains valid (quotes/commas intact).
In `@worklenz-frontend/public/locales/pl/project-view-updates.json`:
- Line 2: The JSON value for the key "inputPlaceholder" currently contains a
punctuation typo ("Dodaj komentarz.."); update the string value for
inputPlaceholder in project-view-updates.json to use a proper ellipsis
consistently (either the single Unicode ellipsis character … or three dots
"...") so the placeholder reads e.g. "Dodaj komentarz…" (or "Dodaj
komentarz...") without the double period.
In `@worklenz-frontend/public/locales/pl/reporting-members.json`:
- Line 11: The JSON key "EndDateInputPlaceholder" is incorrectly cased and
should match the lowerCamelCase key used elsewhere; update the key name from
"EndDateInputPlaceholder" to "endDateInputPlaceholder" in reporting-members.json
so the UI's lookup (e.g., endDateInputPlaceholder) resolves correctly and the
date filter placeholder displays as intended.
In `@worklenz-frontend/public/locales/pl/reporting-overview.json`:
- Around line 16-17: The plural translation for the key
memberWithOverdueTaskCountPlural is incorrect (uses singular "Członek"); update
the value for memberWithOverdueTaskCountPlural to the proper Polish plural form
"Członkowie z zaległymi zadaniami" so it matches other plural entries and
translations.
In `@worklenz-frontend/public/locales/pl/reporting-projects-drawer.json`:
- Line 36: The translation for the key loggedTimeColumn is inconsistent; update
its value from "Zalogowany czas" to "Zarejestrowany czas" in the
reporting-projects-drawer JSON so it matches the wording used in other reporting
files (e.g., reporting-members-drawer) and standardizes the "logged time"
terminology across the codebase.
- Line 13: Update the Polish translation for the JSON key "loggedHoursText" in
reporting-projects-drawer.json from "Zalogowane godziny" to the standardized
phrasing "Zarejestrowane godziny" to match reporting-members-drawer.json; ensure
the key name "loggedHoursText" remains unchanged and run a quick search to
standardize this value across all reporting-* locale files.
In `@worklenz-frontend/public/locales/pl/task-drawer/task-drawer.json`:
- Around line 84-85: The two translation entries "selectedFiles" and
"maxFilesError" use single-brace interpolation ({count}) which is inconsistent
with the rest of this locale file; update both values to use double-brace
interpolation ({{count}}) so the runtime i18n engine will correctly replace the
variable for the keys "selectedFiles" and "maxFilesError".
In `@worklenz-frontend/public/locales/pl/task-management.json`:
- Around line 26-32: Locale plural keys for Polish need three forms and the app
must use i18next pluralization; update the JSON keys from the current
singular/_plural scheme to i18next forms (e.g. "subtasks", "subtasks_few",
"subtasks_many", same for comments and attachments) and then refactor all places
that compute the translation suffix (replace the manual ternary like count === 1
? '' : '_plural') to call i18next with count, e.g. t('subtasks', { count }), in
the components named task-row.tsx, TitleColumn.tsx, kanbanTaskCard.tsx and
EnhancedKanbanTaskCard.tsx; finally ensure i18n.ts is configured to load Polish
plural rules (enable i18next's pluralization for 'pl') so the three-form keys
are selected correctly.
In `@worklenz-frontend/public/locales/pl/tasks/task-table-bulk-actions.json`:
- Around line 36-40: Replace the current two-form plural entries with the three
Polish plural categories i18next expects: add TASKS_SELECTED_one,
TASKS_SELECTED_few, TASKS_SELECTED_many (values: "{{count}} wybrane zadanie",
"{{count}} wybrane zadania", "{{count}} wybrane zadań") and likewise replace
DELETE_TASKS_CONFIRM and any other pluralized keys in the Polish locale with
*_one, *_few, *_many variants; remove the old base/_plural entries so
Intl.PluralRules maps counts to the correct Polish forms.
In `@worklenz-frontend/public/locales/pl/time-report.json`:
- Line 44: Update the Polish translation value for the JSON key "ungrouped" in
time-report.json from "Nie pogrupowane" to the correct single-word form
"Niepogrupowane" so the UI shows natural Polish wording.
In `@worklenz-frontend/src/utils/current-date-string.ts`:
- Around line 29-34: The app maps Polish ("pl") and Korean ("ko") locales in
current-date-string.ts and uses date.locale(locale).format(), but the Day.js
locales aren't registered and dateUtils.ts's getLocaleFromLanguage() localeMap
lacks entries; to fix, add imports "import 'dayjs/locale/pl'" and "import
'dayjs/locale/ko'" to dateUtils.ts so Day.js knows those locales, and add
localeMap entries 'pl': 'pl' and 'ko': 'ko' inside the
getLocaleFromLanguage()/localeMap so getLocaleFromLanguage() returns the correct
locale strings for current-date-string.ts's use of date.locale(locale).
In `@worklenz-frontend/src/utils/greetingString.ts`:
- Around line 50-55: In the Korean branch where language === 'ko' you set
greetingSuffix = '' which causes a double space when the final greeting is
assembled; modify the greeting construction logic (the code that concatenates
greetingPrefix, greetingSuffix and the time phrase) to only insert spaces when
suffix is non-empty (or trim the result) so
greetingPrefix/greetingSuffix/morning/afternoon/evening produce a single space
before the time phrase for Korean.
---
Nitpick comments:
In `@worklenz-frontend/public/locales/pl/all-project-list.json`:
- Around line 1-34: The JSON file all-project-list.json is missing a trailing
newline at EOF; open the file (ending after the "noPermission" key) and add a
single newline character at the end so the file ends with a trailing newline
while preserving valid JSON formatting.
In `@worklenz-frontend/public/locales/pl/navbar.json`:
- Around line 1-32: Add a trailing newline to the end of this JSON file
(navbar.json) so the file ends with a single newline character; update the file
containing keys like "logoAlt", "home", "projects", and the
"notificationsDrawer" object to ensure the final character is a newline for
POSIX/git consistency.
In `@worklenz-frontend/public/locales/pl/project-view/import-task-templates.json`:
- Around line 1-11: The JSON file defining translation keys (e.g.,
"importTaskTemplate", "templateName", "import") is missing a trailing newline at
end-of-file; add a single newline character after the final closing brace so the
file ends with a trailing newline to satisfy POSIX/git conventions and ensure
consistent diffs.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 50eb5841-1cde-4e3b-a0a1-8957fd96339b
📒 Files selected for processing (76)
worklenz-frontend/public/locales/pl/404-page.jsonworklenz-frontend/public/locales/pl/account-setup.jsonworklenz-frontend/public/locales/pl/admin-center/configuration.jsonworklenz-frontend/public/locales/pl/admin-center/current-bill.jsonworklenz-frontend/public/locales/pl/admin-center/overview.jsonworklenz-frontend/public/locales/pl/admin-center/projects.jsonworklenz-frontend/public/locales/pl/admin-center/sidebar.jsonworklenz-frontend/public/locales/pl/admin-center/teams.jsonworklenz-frontend/public/locales/pl/admin-center/users.jsonworklenz-frontend/public/locales/pl/all-project-list.jsonworklenz-frontend/public/locales/pl/auth/auth-common.jsonworklenz-frontend/public/locales/pl/auth/forgot-password.jsonworklenz-frontend/public/locales/pl/auth/login.jsonworklenz-frontend/public/locales/pl/auth/signup.jsonworklenz-frontend/public/locales/pl/auth/verify-reset-email.jsonworklenz-frontend/public/locales/pl/common.jsonworklenz-frontend/public/locales/pl/create-first-project-form.jsonworklenz-frontend/public/locales/pl/create-first-tasks.jsonworklenz-frontend/public/locales/pl/home.jsonworklenz-frontend/public/locales/pl/invite-initial-team-members.jsonworklenz-frontend/public/locales/pl/kanban-board.jsonworklenz-frontend/public/locales/pl/license-expired.jsonworklenz-frontend/public/locales/pl/navbar.jsonworklenz-frontend/public/locales/pl/organization-name-form.jsonworklenz-frontend/public/locales/pl/phases-drawer.jsonworklenz-frontend/public/locales/pl/project-drawer.jsonworklenz-frontend/public/locales/pl/project-view-files.jsonworklenz-frontend/public/locales/pl/project-view-insights.jsonworklenz-frontend/public/locales/pl/project-view-members.jsonworklenz-frontend/public/locales/pl/project-view-updates.jsonworklenz-frontend/public/locales/pl/project-view.jsonworklenz-frontend/public/locales/pl/project-view/import-task-templates.jsonworklenz-frontend/public/locales/pl/project-view/project-member-drawer.jsonworklenz-frontend/public/locales/pl/project-view/project-view-header.jsonworklenz-frontend/public/locales/pl/project-view/save-as-template.jsonworklenz-frontend/public/locales/pl/reporting-members-drawer.jsonworklenz-frontend/public/locales/pl/reporting-members.jsonworklenz-frontend/public/locales/pl/reporting-overview-drawer.jsonworklenz-frontend/public/locales/pl/reporting-overview.jsonworklenz-frontend/public/locales/pl/reporting-projects-drawer.jsonworklenz-frontend/public/locales/pl/reporting-projects-filters.jsonworklenz-frontend/public/locales/pl/reporting-projects.jsonworklenz-frontend/public/locales/pl/reporting-sidebar.jsonworklenz-frontend/public/locales/pl/schedule.jsonworklenz-frontend/public/locales/pl/settings/account-deletion.jsonworklenz-frontend/public/locales/pl/settings/appearance.jsonworklenz-frontend/public/locales/pl/settings/categories.jsonworklenz-frontend/public/locales/pl/settings/change-password.jsonworklenz-frontend/public/locales/pl/settings/clients.jsonworklenz-frontend/public/locales/pl/settings/job-titles.jsonworklenz-frontend/public/locales/pl/settings/labels.jsonworklenz-frontend/public/locales/pl/settings/language.jsonworklenz-frontend/public/locales/pl/settings/notifications.jsonworklenz-frontend/public/locales/pl/settings/profile.jsonworklenz-frontend/public/locales/pl/settings/project-templates.jsonworklenz-frontend/public/locales/pl/settings/sidebar.jsonworklenz-frontend/public/locales/pl/settings/task-templates.jsonworklenz-frontend/public/locales/pl/settings/team-members.jsonworklenz-frontend/public/locales/pl/settings/teams.jsonworklenz-frontend/public/locales/pl/survey.jsonworklenz-frontend/public/locales/pl/task-drawer/task-drawer-info-tab.jsonworklenz-frontend/public/locales/pl/task-drawer/task-drawer-recurring-config.jsonworklenz-frontend/public/locales/pl/task-drawer/task-drawer.jsonworklenz-frontend/public/locales/pl/task-list-filters.jsonworklenz-frontend/public/locales/pl/task-list-table.jsonworklenz-frontend/public/locales/pl/task-management.jsonworklenz-frontend/public/locales/pl/task-template-drawer.jsonworklenz-frontend/public/locales/pl/tasks/task-table-bulk-actions.jsonworklenz-frontend/public/locales/pl/template-drawer.jsonworklenz-frontend/public/locales/pl/templateDrawer.jsonworklenz-frontend/public/locales/pl/time-report.jsonworklenz-frontend/public/locales/pl/unauthorized.jsonworklenz-frontend/src/features/i18n/LanguageSelector.tsxworklenz-frontend/src/features/i18n/localesSlice.tsworklenz-frontend/src/utils/current-date-string.tsworklenz-frontend/src/utils/greetingString.ts
worklenz-frontend/public/locales/pl/admin-center/current-bill.json
Outdated
Show resolved
Hide resolved
| "tooltips": { | ||
| "subtasks": "{{count}} podzadanie", | ||
| "subtasks_plural": "{{count}} podzadania", | ||
| "comments": "{{count}} komentarz", | ||
| "comments_plural": "{{count}} komentarze", | ||
| "attachments": "{{count}} załącznik", | ||
| "attachments_plural": "{{count}} załączniki", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Search for i18next configuration and Polish pluralization rules
echo "=== Searching for i18next configuration files ==="
fd -e js -e ts -e json 'i18n' --exec echo "Found: {}"
echo -e "\n=== Checking for Polish plural rules configuration ==="
rg -n -C3 "pluralRules|pl.*plural" --type=ts --type=js
echo -e "\n=== Checking existing Polish locale files for plural patterns ==="
fd . 'public/locales/pl' --type f -x head -20 {} \; | rg "_plural|_few|_many|_other"Repository: Worklenz/worklenz
Length of output: 50496
🏁 Script executed:
#!/bin/bash
# Find Polish locale file (may not be in the exact path)
echo "=== Searching for Polish locale files ==="
fd -t f 'pl.*json' | head -20
echo -e "\n=== Looking for any task-management locale files ==="
fd -t f 'task-management.json'
echo -e "\n=== Checking i18n.ts configuration ==="
head -50 "worklenz-frontend/src/i18n.ts"Repository: Worklenz/worklenz
Length of output: 3195
🏁 Script executed:
#!/bin/bash
# Read the Polish locale file
echo "=== Polish locale file (task-management.json) ==="
cat "worklenz-frontend/public/locales/pl/task-management.json" | head -50
echo -e "\n=== English locale file for comparison ==="
cat "worklenz-frontend/public/locales/en/task-management.json" | head -50
echo -e "\n=== Searching for plural rules in i18next config ==="
rg -n "pluralRules|lng.*pl" "worklenz-frontend/src/" -t ts -t js -C 3
echo -e "\n=== Check if there's a more complete i18n configuration ==="
fd -t f 'i18n' "worklenz-frontend/src/" | xargs ls -laRepository: Worklenz/worklenz
Length of output: 2836
🏁 Script executed:
#!/bin/bash
# Search for how t() is called with count parameter
echo "=== Searching for i18next t() calls with count ==="
rg -n "\.t\(|i18n\.t\(" "worklenz-frontend/src/" -A 2 -t ts -t tsx -t js -t jsx | grep -i "count" -B 2 -A 2 | head -40
echo -e "\n=== Searching for pluralRules configuration anywhere ==="
rg -rn "pluralRules" . --type ts --type js 2>/dev/null | head -20
echo -e "\n=== Check for i18next backend configuration or plugin setup ==="
fd -t f -e ts -e js | xargs grep -l "i18next" | head -10 | xargs grep -l "plural" 2>/dev/null
echo -e "\n=== Look for Translation/i18n related files ==="
fd -t f "(i18n|translation|lang)" "worklenz-frontend/src/" | grep -E "\.(ts|tsx|js)$"Repository: Worklenz/worklenz
Length of output: 639
🏁 Script executed:
#!/bin/bash
# Search for usage of the tooltip translations
echo "=== Searching for tooltip translation usage ==="
rg -n "tooltips\." "worklenz-frontend/src/" -t ts -t js | head -20
echo -e "\n=== Search for indicator/tooltip component code ==="
fd -t f "indicator" "worklenz-frontend/src/" | head -10
echo -e "\n=== Search more broadly for subtasks/comments/attachments count usage ==="
rg -n "count.*subtask|subtask.*count" "worklenz-frontend/src/" -t ts -t js -B 2 -A 2 | head -50
echo -e "\n=== Check if i18next-plurals or similar package is used ==="
cat "worklenz-frontend/package.json" | grep -i "i18n\|plural\|translat"Repository: Worklenz/worklenz
Length of output: 8856
🏁 Script executed:
#!/bin/bash
# Check if there are any other locale files that might have plural forms
echo "=== Check Spanish locale for comparison (Romance language) ==="
cat "worklenz-frontend/public/locales/es/task-management.json" | grep -A 5 "tooltips"
echo -e "\n=== Check if any backend config has pluralRules ==="
rg -rn "pluralRules|ns_plural_suffix" "worklenz-frontend/" 2>/dev/null | head -10
echo -e "\n=== Look at the actual code pattern more carefully ==="
sed -n '1010,1035p' "worklenz-frontend/src/components/task-management/task-row.tsx"Repository: Worklenz/worklenz
Length of output: 1958
Incomplete Polish pluralization requires both locale file AND code architecture changes.
The review identifies a real issue, but the proposed fix is incomplete. Polish requires three plural forms (singular, few, many), but the code uses hardcoded manual pluralization (count === 1 ? '' : '_plural') that only ever selects between two branches. Simply adding _few and _many keys won't help—the code logic must also be refactored to use i18next's built-in pluralization system.
Required changes:
-
Update locale files with proper Polish plural forms. Instead of base +
_plural, use i18next's standard suffixes:subtasks: "{{count}} podzadanie"(singular: count=1)subtasks_few: "{{count}} podzadania"(few: 2-4, 22-24, etc.)subtasks_many: "{{count}} podzadań"(many: 0, 5-21, 25+, etc.)
-
Fix pluralization logic in code (task-row.tsx, TitleColumn.tsx, kanbanTaskCard.tsx, EnhancedKanbanTaskCard.tsx):
- Replace manual if/else:
count === 1 ? '' : '_plural' - Use i18next pluralization:
t('key', { count })
- Replace manual if/else:
-
Configure i18next with Polish plural rules in i18n.ts to recognize the three-form pattern.
Without these code changes, the architecture cannot support Polish pluralization regardless of locale file structure.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@worklenz-frontend/public/locales/pl/task-management.json` around lines 26 -
32, Locale plural keys for Polish need three forms and the app must use i18next
pluralization; update the JSON keys from the current singular/_plural scheme to
i18next forms (e.g. "subtasks", "subtasks_few", "subtasks_many", same for
comments and attachments) and then refactor all places that compute the
translation suffix (replace the manual ternary like count === 1 ? '' :
'_plural') to call i18next with count, e.g. t('subtasks', { count }), in the
components named task-row.tsx, TitleColumn.tsx, kanbanTaskCard.tsx and
EnhancedKanbanTaskCard.tsx; finally ensure i18n.ts is configured to load Polish
plural rules (enable i18next's pluralization for 'pl') so the three-form keys
are selected correctly.
worklenz-frontend/public/locales/pl/tasks/task-table-bulk-actions.json
Outdated
Show resolved
Hide resolved
| } else if (language === 'ko') { | ||
| greetingPrefix = '안녕하세요'; | ||
| greetingSuffix = ''; | ||
| morning = '좋은 아침'; | ||
| afternoon = '좋은 오후'; | ||
| evening = '좋은 저녁'; |
There was a problem hiding this comment.
Fix extra spacing in Korean greeting output.
Because greetingSuffix is empty on Line 52, Line 75 currently emits a double space before the time phrase.
💡 Minimal formatting-safe fix
- return `${greetingPrefix} ${name}, ${greetingSuffix} ${localizedTimePeriod}!`;
+ return `${greetingPrefix} ${name}, ${[greetingSuffix, localizedTimePeriod].filter(Boolean).join(' ')}!`;Also applies to: 75-75
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@worklenz-frontend/src/utils/greetingString.ts` around lines 50 - 55, In the
Korean branch where language === 'ko' you set greetingSuffix = '' which causes a
double space when the final greeting is assembled; modify the greeting
construction logic (the code that concatenates greetingPrefix, greetingSuffix
and the time phrase) to only insert spaces when suffix is non-empty (or trim the
result) so greetingPrefix/greetingSuffix/morning/afternoon/evening produce a
single space before the time phrase for Korean.
Fixes all 14 issues identified by CodeRabbit review:
- Fix phone number pattern from UK (07xxx) to Polish (500xxx) format
- Fix Google button text on signup page (login → register)
- Fix reconnecting/update-available status message semantics
- Capitalize "Enter" key name in UI copy
- Fix members view empty text (was showing attachments message)
- Fix double period in comment placeholder
- Fix plural form: "Członek" → "Członkowie" for plural context
- Standardize "Zalogowane" → "Zarejestrowane" for time tracking
- Fix {count} → {{count}} interpolation syntax in task-drawer
- Add proper Polish plural forms (_one, _few, _many) for i18next
- Fix "Nie pogrupowane" → "Niepogrupowane" spelling
- Add dayjs locale imports for pl and ko in dateUtils.ts
- Add pl and ko to locale map in dateUtils.ts
- Fix Korean greeting double space with empty greetingSuffix
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
worklenz-frontend/public/locales/pl/common.json (1)
33-33: Polish copy at Line [33] sounds unnatural in-progress.
"Kontaktowanie z pomocą techniczną..."is awkward. Consider a more natural in-progress phrasing (e.g., “Łączenie z pomocą techniczną...” or “Nawiązywanie kontaktu z pomocą techniczną...”).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@worklenz-frontend/public/locales/pl/common.json` at line 33, The Polish translation for the key "license-expired-contacting-support" reads unnaturally; update its value to a more natural in-progress phrasing such as "Łączenie z pomocą techniczną..." or "Nawiązywanie kontaktu z pomocą techniczną..." by replacing the current string value for "license-expired-contacting-support" in common.json.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@worklenz-frontend/public/locales/pl/common.json`:
- Around line 35-37: Update the Polish plural keys in common.json to use the
project's i18next Polish plural scheme instead of the incorrect _plural suffix:
replace "trial-expiring-soon" / "trial-expiring-soon_plural" with
"trial-expiring-soon_one", "trial-expiring-soon_few",
"trial-expiring-soon_many", and "trial-expiring-soon_other" (providing the
correct Polish strings for each), and ensure any other simplified keys like
"license-expired-days-remaining" follow the same pattern if they are used with
count; keep the {{days}} interpolation and verify that components (e.g.,
TrialExpirationAlert.tsx) pass the count parameter so i18next will select the
correct form.
---
Nitpick comments:
In `@worklenz-frontend/public/locales/pl/common.json`:
- Line 33: The Polish translation for the key
"license-expired-contacting-support" reads unnaturally; update its value to a
more natural in-progress phrasing such as "Łączenie z pomocą techniczną..." or
"Nawiązywanie kontaktu z pomocą techniczną..." by replacing the current string
value for "license-expired-contacting-support" in common.json.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: f5b88ead-dd82-4bed-ad6e-108464095c7b
📒 Files selected for processing (15)
worklenz-frontend/public/locales/pl/admin-center/current-bill.jsonworklenz-frontend/public/locales/pl/auth/signup.jsonworklenz-frontend/public/locales/pl/common.jsonworklenz-frontend/public/locales/pl/project-drawer.jsonworklenz-frontend/public/locales/pl/project-view-members.jsonworklenz-frontend/public/locales/pl/project-view-updates.jsonworklenz-frontend/public/locales/pl/reporting-overview.jsonworklenz-frontend/public/locales/pl/reporting-projects-drawer.jsonworklenz-frontend/public/locales/pl/task-drawer/task-drawer.jsonworklenz-frontend/public/locales/pl/task-management.jsonworklenz-frontend/public/locales/pl/tasks/task-table-bulk-actions.jsonworklenz-frontend/public/locales/pl/time-report.jsonworklenz-frontend/src/utils/current-date-string.tsworklenz-frontend/src/utils/dateUtils.tsworklenz-frontend/src/utils/greetingString.ts
✅ Files skipped from review due to trivial changes (12)
- worklenz-frontend/src/utils/dateUtils.ts
- worklenz-frontend/public/locales/pl/project-view-members.json
- worklenz-frontend/public/locales/pl/project-drawer.json
- worklenz-frontend/public/locales/pl/auth/signup.json
- worklenz-frontend/public/locales/pl/project-view-updates.json
- worklenz-frontend/public/locales/pl/time-report.json
- worklenz-frontend/public/locales/pl/task-drawer/task-drawer.json
- worklenz-frontend/public/locales/pl/task-management.json
- worklenz-frontend/public/locales/pl/reporting-overview.json
- worklenz-frontend/public/locales/pl/admin-center/current-bill.json
- worklenz-frontend/public/locales/pl/tasks/task-table-bulk-actions.json
- worklenz-frontend/public/locales/pl/reporting-projects-drawer.json
🚧 Files skipped from review as they are similar to previous changes (2)
- worklenz-frontend/src/utils/current-date-string.ts
- worklenz-frontend/src/utils/greetingString.ts
- Replace _plural suffix with _one/_few/_many/_other for Polish plural rules (trial-expiring-soon, license-expiring-soon, license-expired-grace-period, license-expired-days-remaining) - Fix unnatural "Kontaktowanie" → "Łączenie z pomocą techniczną..." Addresses CodeRabbit review feedback. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…slations - Add Polish locale to date-fns (format-date-time-with-locale.ts) - Add missing PL/KO locales to dayjs (dateUtils.ts) - Add new translation keys for navbar, home, task-drawer, billing, etc. - Ensures all UI strings use t() instead of hardcoded English Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
🧹 Nitpick comments (1)
worklenz-frontend/src/utils/format-date-time-with-locale.ts (1)
5-16: Albanian (alb) locale is missing from the map.The
Languageenum (inlocalesSlice.ts) includesALB = 'alb', but thelocaleMapdoesn't have a corresponding entry. Users selecting Albanian will fall back toenUS. This appears to be a pre-existing gap (the original code only supported en/es/pt), but since you're consolidating locale handling here, consider adding Albanian support using thesqlocale from date-fns.Additionally, the type
Record<string, any>is weak. You can use theLocaletype exported bydate-fns/localefor better type safety.♻️ Suggested improvement
import { format } from 'date-fns'; -import { enUS, es, pt, de, pl, ko, zhCN } from 'date-fns/locale'; +import { enUS, es, pt, de, pl, ko, zhCN, sq } from 'date-fns/locale'; +import type { Locale } from 'date-fns/locale'; import { getLanguageFromLocalStorage } from './language-utils'; const getDateFnsLocale = (lang: string) => { - const localeMap: Record<string, any> = { + const localeMap: Record<string, Locale> = { 'en': enUS, 'es': es, 'pt': pt, + 'alb': sq, 'de': de, 'pl': pl, 'ko': ko, 'zh_cn': zhCN, }; return localeMap[lang] || enUS; };🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@worklenz-frontend/src/utils/format-date-time-with-locale.ts` around lines 5 - 16, The localeMap in getDateFnsLocale is missing an entry for Albanian (Language.ALb / 'alb') and uses a weak type; import the Albanian locale (sq) from date-fns/locale, add a mapping 'alb': sq to the localeMap inside getDateFnsLocale, and replace the type Record<string, any> with the date-fns exported Locale type to improve type safety while keeping the existing fallback to enUS; reference getDateFnsLocale, localeMap and the Language enum when making these changes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@worklenz-frontend/src/utils/format-date-time-with-locale.ts`:
- Around line 5-16: The localeMap in getDateFnsLocale is missing an entry for
Albanian (Language.ALb / 'alb') and uses a weak type; import the Albanian locale
(sq) from date-fns/locale, add a mapping 'alb': sq to the localeMap inside
getDateFnsLocale, and replace the type Record<string, any> with the date-fns
exported Locale type to improve type safety while keeping the existing fallback
to enUS; reference getDateFnsLocale, localeMap and the Language enum when making
these changes.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 5bfa8ca5-70a8-43fc-a44d-2fe6bfd3d8b1
📒 Files selected for processing (16)
worklenz-frontend/public/locales/en/all-project-list.jsonworklenz-frontend/public/locales/en/home.jsonworklenz-frontend/public/locales/en/navbar.jsonworklenz-frontend/public/locales/en/settings/clients.jsonworklenz-frontend/public/locales/en/task-drawer/task-drawer.jsonworklenz-frontend/public/locales/en/task-list-filters.jsonworklenz-frontend/public/locales/en/task-management.jsonworklenz-frontend/public/locales/pl/all-project-list.jsonworklenz-frontend/public/locales/pl/home.jsonworklenz-frontend/public/locales/pl/navbar.jsonworklenz-frontend/public/locales/pl/settings/clients.jsonworklenz-frontend/public/locales/pl/task-drawer/task-drawer.jsonworklenz-frontend/public/locales/pl/task-list-filters.jsonworklenz-frontend/public/locales/pl/task-management.jsonworklenz-frontend/src/utils/current-date-string.tsworklenz-frontend/src/utils/format-date-time-with-locale.ts
✅ Files skipped from review due to trivial changes (13)
- worklenz-frontend/public/locales/en/settings/clients.json
- worklenz-frontend/public/locales/en/task-management.json
- worklenz-frontend/public/locales/en/home.json
- worklenz-frontend/public/locales/en/all-project-list.json
- worklenz-frontend/public/locales/en/task-drawer/task-drawer.json
- worklenz-frontend/public/locales/pl/settings/clients.json
- worklenz-frontend/public/locales/en/task-list-filters.json
- worklenz-frontend/public/locales/pl/navbar.json
- worklenz-frontend/public/locales/en/navbar.json
- worklenz-frontend/public/locales/pl/task-list-filters.json
- worklenz-frontend/public/locales/pl/all-project-list.json
- worklenz-frontend/public/locales/pl/task-management.json
- worklenz-frontend/public/locales/pl/home.json
🚧 Files skipped from review as they are similar to previous changes (1)
- worklenz-frontend/src/utils/current-date-string.ts
Summary
Changes
src/features/i18n/localesSlice.tsPL = 'pl'to Language enumsrc/features/i18n/LanguageSelector.tsxsrc/utils/greetingString.tssrc/utils/current-date-string.tssrc/pages/settings/language-and-region/src/pages/account-setup/account-setup.tsxpublic/locales/pl/(72 files)Database migration needed
After deploying, run:
Test plan
🤖 Generated with Claude Code
Summary by CodeRabbit