🔖(minor) release version 0.9.0#761
Conversation
📝 WalkthroughWalkthroughVersion metadata, release automation, changelog references, and Russian and Ukrainian frontend locales were updated for the 0.9.0 release. The jmap-email package version was set to 0.1.0, and release manifest filtering was centralized. Changes0.9.0 Release Updates
Estimated code review effort: 3 (Moderate) | ~25 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 Checkov (3.3.8)src/e2e/package.jsonTraceback (most recent call last): src/frontend/package.jsonTraceback (most recent call last): src/frontend/public/locales/common/ru-RU.jsonTraceback (most recent call last):
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: 10
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/frontend/public/locales/common/ru-RU.json`:
- Line 309: Update the “Data will be POSTed to this URL in the format selected
below.” translation in src/frontend/public/locales/common/ru-RU.json at lines
309-309 to say the data will be sent to the URL via POST, using wording
equivalent to “Данные будут отправлены на этот URL методом POST…”. Apply the
same wording correction in src/frontend/public/locales/common/uk-UA.json at
lines 309-309, using wording equivalent to “Дані буде надіслано на цей URL
методом POST…”.
- Around line 36-37: Update the draft-delete plural messages at
src/frontend/public/locales/common/ru-RU.json:36-37 and
src/frontend/public/locales/common/uk-UA.json:36-37 by adding locale-specific
_few and _many forms alongside _one and _other. In the corresponding user-count
plural entries at src/frontend/public/locales/common/ru-RU.json:194-195 and
src/frontend/public/locales/common/uk-UA.json:194-195, replace the hardcoded one
in the _one value with {{count}}. The entries at
src/frontend/public/locales/common/ru-RU.json:74-75 and
src/frontend/public/locales/common/uk-UA.json:74-75 require no direct change.
In `@src/frontend/public/locales/common/uk-UA.json`:
- Line 682: Update the Ukrainian translation for the “Share and assign the
thread” key to use a grammatical action label with consistent imperative forms,
preserving both sharing and assignment actions.
- Line 190: Update the Ukrainian translation for the key “An error occurred
while updating the address.” to use “оновленні” for updating rather than
“відновленні,” preserving the intended meaning of the source message.
- Line 149: Update the Ukrainian translation for "{{name}} will no longer have
access to the mailbox \"{{mailboxName}}\"." by replacing the Russian spelling
"почтової" with the Ukrainian "поштової", preserving the existing placeholders
and punctuation.
- Line 789: Update the Ukrainian translation for the credential message in
common/uk-UA.json, replacing “повернути його” with wording that clearly means
the credential can be replaced or rotated later when a new one is needed.
Preserve the rest of the translation unchanged.
- Line 758: Update the Ukrainian translation for “The shared mailbox...” in
common/uk-UA.json to use the Ukrainian equivalent of “shared mailbox,” such as
“Спільна поштова скринька,” while preserving the mailboxAddress placeholder and
markup structure.
- Line 431: Update the Ukrainian translation for the key “How the receiver
authenticates our requests. The credential is shown once at creation.” to
preserve both meanings: the receiver authenticates requests, and the credential
is displayed only once when created. Replace the current “automatically accepts”
wording without changing the key or surrounding translations.
- Line 226: Update the Ukrainian translation value for the authentication
failure message to use “автентифікації” instead of “авторизації,” matching the
terminology used by the adjacent Authentication translation and the source text.
- Around line 519-520: Update the Ukrainian translation for “Message inbound —
blocking, before the spam check; can shape the message before it is scanned” so
it is grammatically clear, preserves the singular message subject, and
explicitly conveys that the inbound webhook blocks before spam checking and can
modify the message before scanning.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 0a5788ba-19a6-4955-8353-4616379b517e
⛔ Files ignored due to path filters (5)
src/backend/uv.lockis excluded by!**/*.locksrc/e2e/package-lock.jsonis excluded by!**/package-lock.jsonsrc/frontend/package-lock.jsonis excluded by!**/package-lock.jsonsrc/mta-in/uv.lockis excluded by!**/*.locksrc/mta-out/uv.lockis excluded by!**/*.lock
📒 Files selected for processing (9)
CHANGELOG.mdsrc/backend/pyproject.tomlsrc/e2e/package.jsonsrc/frontend/package.jsonsrc/frontend/public/locales/common/ru-RU.jsonsrc/frontend/public/locales/common/uk-UA.jsonsrc/jmap-email/pyproject.tomlsrc/mta-in/pyproject.tomlsrc/mta-out/pyproject.toml
| "{{count}} drafts have been deleted._one": "Черновик удалён.", | ||
| "{{count}} drafts have been deleted._other": "Удалено {{count}} черновиков.", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== locale file locations ==\n'
git ls-files 'src/frontend/public/locales/common/*.json'
printf '\n== relevant snippets in ru-RU ==\n'
sed -n '1,220p' src/frontend/public/locales/common/ru-RU.json | nl -ba | sed -n '1,220p'
printf '\n== relevant snippets in uk-UA ==\n'
sed -n '1,220p' src/frontend/public/locales/common/uk-UA.json | nl -ba | sed -n '1,220p'
printf '\n== i18n/pluralization usage ==\n'
rg -n --hidden -S 'i18next|plural|_one"|_few"|_many"|_other"|count' src/frontend | sed -n '1,220p'Repository: suitenumerique/messages
Length of output: 724
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo 'ping'Repository: suitenumerique/messages
Length of output: 166
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== ru-RU relevant lines ==\n'
sed -n '30,210p' src/frontend/public/locales/common/ru-RU.json | cat -n
printf '\n== uk-UA relevant lines ==\n'
sed -n '30,210p' src/frontend/public/locales/common/uk-UA.json | cat -n
printf '\n== pluralization config / usage ==\n'
rg -n -S --hidden 'i18next|plural|Intl.PluralRules|_one"|_few"|_many"|_other"|count' src/frontend | sed -n '1,240p'Repository: suitenumerique/messages
Length of output: 50379
Use the locale-specific plural forms.
src/frontend/public/locales/common/ru-RU.json#L36-L37andsrc/frontend/public/locales/common/uk-UA.json#L36-L37: add_few/_manyfor the draft-delete message;_otheralone will misrender counts like 2–4.src/frontend/public/locales/common/ru-RU.json#L194-L195andsrc/frontend/public/locales/common/uk-UA.json#L194-L195: replace the hardcoded1in_onewith{{count}}, or 21 users will render as “1 user”.
📍 Affects 2 files
src/frontend/public/locales/common/ru-RU.json#L36-L37(this comment)src/frontend/public/locales/common/ru-RU.json#L74-L75src/frontend/public/locales/common/ru-RU.json#L194-L195src/frontend/public/locales/common/uk-UA.json#L36-L37src/frontend/public/locales/common/uk-UA.json#L74-L75src/frontend/public/locales/common/uk-UA.json#L194-L195
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/ru-RU.json` around lines 36 - 37, Update
the draft-delete plural messages at
src/frontend/public/locales/common/ru-RU.json:36-37 and
src/frontend/public/locales/common/uk-UA.json:36-37 by adding locale-specific
_few and _many forms alongside _one and _other. In the corresponding user-count
plural entries at src/frontend/public/locales/common/ru-RU.json:194-195 and
src/frontend/public/locales/common/uk-UA.json:194-195, replace the hardcoded one
in the _one value with {{count}}. The entries at
src/frontend/public/locales/common/ru-RU.json:74-75 and
src/frontend/public/locales/common/uk-UA.json:74-75 require no direct change.
| "An error occurred while loading maildomains.": "Помилка при завантаженні поштових доменів.", | ||
| "An error occurred while resetting the password.": "Помилка під час скидання пароля.", | ||
| "An error occurred while saving the integration.": "Помилка при збереженні інтеграції.", | ||
| "An error occurred while updating the address.": "Помилка при відновленні адреси.", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Translate “updating” as “оновленні,” not “відновленні.”
The current value says an error occurred while restoring the address, changing the meaning of the original message.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/uk-UA.json` at line 190, Update the
Ukrainian translation for the key “An error occurred while updating the
address.” to use “оновленні” for updating rather than “відновленні,” preserving
the intended meaning of the source message.
| "Attachments": "Вкладення", | ||
| "Attachments must be less than {{size}}.": "Вкладення повинно бути менше ніж {{size}}.", | ||
| "Authentication": "Автентифікація", | ||
| "Authentication failed. Please check your credentials and ensure you have enabled IMAP connections in your account.": "Помилка авторизації. Перевірте свої облікові дані та переконайтеся, що у вас ввімкнене з'єднання IMAP у вашому обліковому записі.", |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win
Use authentication terminology consistently.
авторизації means authorization, but this message concerns IMAP authentication. Use автентифікації to match the adjacent Authentication translation and the source text.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/uk-UA.json` at line 226, Update the
Ukrainian translation value for the authentication failure message to use
“автентифікації” instead of “авторизації,” matching the terminology used by the
adjacent Authentication translation and the source text.
| "Message from {referer_domain}": "Повідомлення від {referer_domain}", | ||
| "Message inbound — blocking, before the spam check; can shape the message before it is scanned": "У повідомленнях що приходять - блокування повідомлення перед перевіркою спаму; можуть формувати повідомлення перед його скануванням", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Correct the inbound webhook lifecycle wording.
The translation at Line 520 is grammatically unclear and changes the subject to plural “incoming messages,” making it unclear that this webhook blocks before spam checking and can modify the message before scanning.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/uk-UA.json` around lines 519 - 520, Update
the Ukrainian translation for “Message inbound — blocking, before the spam
check; can shape the message before it is scanned” so it is grammatically clear,
preserves the singular message subject, and explicitly conveys that the inbound
webhook blocks before spam checking and can modify the message before scanning.
| "Sent on": "Надіслано", | ||
| "Set up automatic replies sent to senders while the mailbox is unattended. Only one auto-reply can be active at a time.": "Налаштування автоматичних відповідей, які відправляються тоді, коли поштова скринька без уваги власника. Тільки один автовідповідач може бути активований за раз.", | ||
| "Settings": "Налаштування", | ||
| "Share and assign the thread": "Поділіться та призначити участь в обговоренні", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Fix the malformed action label.
Поділіться та призначити участь в обговоренні mixes imperative and infinitive forms and does not clearly express “Share and assign the thread.” Replace it with a grammatical action label preserving both actions.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/uk-UA.json` at line 682, Update the
Ukrainian translation for the “Share and assign the thread” key to use a
grammatical action label with consistent imperative forms, preserving both
sharing and assignment actions.
| "The personal mailbox <strong>{{mailboxAddress}}</strong> has been created successfully.": "Персональну поштову скриньку <1>{{mailboxAddress}}</1> успішно створено.", | ||
| "The PST archive is unreadable: the file is corrupt or its internal structure is incomplete. Retrying will not help — please try to re-generate the archive.": "PST архів не можна прочитати: файл пошкоджений або його внутрішня структура є неповною. Повторна спроба не допоможе - будь ласка, спробуйте повторно створити архів.", | ||
| "The redirect mailbox <strong>{{mailboxAddress}}</strong> has been created successfully.": "Перенаправлення для поштової скриньки <1>{{mailboxAddress}}</1> успішно створено.", | ||
| "The shared mailbox <strong>{{mailboxAddress}}</strong> has been created successfully.": "Публічна поштова скринька <1>{{mailboxAddress}}</1> успішно створена.", |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win
Do not translate “shared mailbox” as “public mailbox.”
Публічна поштова скринька changes the mailbox type and can imply broader visibility than a shared mailbox. Use the Ukrainian equivalent of “shared mailbox,” such as Спільна поштова скринька.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/uk-UA.json` at line 758, Update the
Ukrainian translation for “The shared mailbox...” in common/uk-UA.json to use
the Ukrainian equivalent of “shared mailbox,” such as “Спільна поштова
скринька,” while preserving the mailboxAddress placeholder and markup structure.
There was a problem hiding this comment.
Actionable comments posted: 7
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Around line 345-346: Update bin/release.py:update_changelog() to construct the
changelog comparison URL explicitly as v{last_version}...v{version}, rather than
replacing the previous version throughout the existing link. Preserve the
expected [unreleased] link format for each subsequent release.
In `@src/frontend/public/locales/common/ru-RU.json`:
- Line 436: Update the Russian translation for the identity-synchronization
message so “identity synchronization” uses terminology equivalent to
“синхронизация идентификации,” while preserving the existing meaning and
surrounding message content.
- Line 759: Update the Russian translation for “The text of this link does not
match its real target, it may be unsafe.” to use feminine agreement with
“ссылки,” replacing “его реальной цели” with “её реальной цели” or equivalent
neutral wording.
- Line 604: Update the “Payload format” translation in
src/frontend/public/locales/common/ru-RU.json at lines 604-604 to use technical
request-payload terminology, replacing “Формат нагрузки” with “Формат полезной
нагрузки” or an equivalent. Make the corresponding change in
src/frontend/public/locales/common/uk-UA.json at lines 604-604, replacing
“Формат навантаження” with “Формат корисного навантаження” or an equivalent.
In `@src/frontend/public/locales/common/uk-UA.json`:
- Line 302: Update the Ukrainian translation for
create_mailbox_modal.success.credential_text to use “Ваші облікові дані:” and
remove the “для повідомлень” wording, while preserving the email, password
placeholders, and remaining text.
- Line 861: Update the Ukrainian translation for the key “You are about to leave
this page and be redirected to:” to use the grammatically correct construction
“Ви збираєтеся залишити цю сторінку, і вас буде перенаправлено на:”.
- Line 833: Update the Ukrainian translation for the “URL must include a valid
host.” key to use grammatically correct wording, replacing “включати дійсного
хосту” with phrasing such as “містити коректний хост”.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 5ca5db5d-3830-43d9-be86-99543cc7f7d7
⛔ Files ignored due to path filters (5)
src/backend/uv.lockis excluded by!**/*.locksrc/e2e/package-lock.jsonis excluded by!**/package-lock.jsonsrc/frontend/package-lock.jsonis excluded by!**/package-lock.jsonsrc/mta-in/uv.lockis excluded by!**/*.locksrc/mta-out/uv.lockis excluded by!**/*.lock
📒 Files selected for processing (10)
CHANGELOG.mdbin/release.pysrc/backend/pyproject.tomlsrc/e2e/package.jsonsrc/frontend/package.jsonsrc/frontend/public/locales/common/ru-RU.jsonsrc/frontend/public/locales/common/uk-UA.jsonsrc/jmap-email/pyproject.tomlsrc/mta-in/pyproject.tomlsrc/mta-out/pyproject.toml
| "The PST archive is unreadable: the file is corrupt or its internal structure is incomplete. Retrying will not help — please try to re-generate the archive.": "PST архив нечитаем: файл повреждён или его внутренняя структура неполная. Повторная попытка не поможет — пожалуйста, попробуйте пересоздать архив.", | ||
| "The redirect mailbox <strong>{{mailboxAddress}}</strong> has been created successfully.": "Успешно создана переадресация для почтового ящика <1>{{mailboxAddress}}</1>.", | ||
| "The shared mailbox <strong>{{mailboxAddress}}</strong> has been created successfully.": "Общий почтовый ящик <1>{{mailboxAddress}}</1> успешно создан.", | ||
| "The text of this link does not match its real target, it may be unsafe.": "Текст этой ссылки не соответствует его реальной цели, может быть небезопасным.", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Fix the gender agreement in the link-safety warning.
ссылки is feminine, but the translation uses его реальной цели. Use её реальной цели or neutral wording.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/ru-RU.json` at line 759, Update the
Russian translation for “The text of this link does not match its real target,
it may be unsafe.” to use feminine agreement with “ссылки,” replacing “его
реальной цели” with “её реальной цели” or equivalent neutral wording.
| "Create reusable message templates shared by all users of this mailbox.": "Створити повторно використовувані шаблони повідомлень, поширені між усіма користувачами цієї поштової скриньки.", | ||
| "Create standardized signatures that can be used by all users of this mailbox.": "Створити стандартизовані підписи, які можуть бути використані усіма користувачами цієї поштової скриньки.", | ||
| "Create the label \"{{label}}\"": "Створити мітку \"{{label}}\"", | ||
| "create_mailbox_modal.success.credential_text": "Ваші облікові дані для повідомлень:\n- Електронна адреса: {{id}}\n- Пароль: {{password}}\n\nПід час першого входу вам буде запропоновано змінити пароль.", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Do not add “for messages” to the credentials notice.
The source says “Your credentials”; облікові дані для повідомлень suggests a separate message-specific credential. Use Ваші облікові дані:.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/uk-UA.json` at line 302, Update the
Ukrainian translation for create_mailbox_modal.success.credential_text to use
“Ваші облікові дані:” and remove the “для повідомлень” wording, while preserving
the email, password placeholders, and remaining text.
Do not upgrade jmap_email as it has its own release process. Then ignore vite build folder than contain package.json
Update all version files and changelog for minor release.
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/frontend/public/locales/common/ru-RU.json`:
- Around line 156-157: Update the Russian translations for “Access sharing” and
“Access sharing to the mailbox” to use noun phrases meaning “Общий доступ” and
“Общий доступ к почтовому ящику”, preserving the intended access-sharing UI
meaning.
In `@src/frontend/public/locales/common/uk-UA.json`:
- Line 846: Update the Ukrainian translation for the “Webhook signing secret”
key to use wording equivalent to “Секрет підпису вебобробника,” replacing the
current phrase that means “secret signature.”
- Line 149: Update the Ukrainian translation for the key "{{name}} will no
longer have access to the mailbox \"{{mailboxName}}\"." to retain the literal
quotation marks around the {{mailboxName}} placeholder, matching the source
message.
- Line 625: Update the Ukrainian translation value for the credential rotation
message so it clearly states that the receiver must be updated with the new
value before it can verify webhooks again. Replace the inaccurate wording for
“verify webhooks” and make the receiver-update sentence natural, while
preserving the immediate invalidation meaning.
- Around line 30-43: Update the "{{count}} drafts have been deleted."
pluralization entries in the locale data by adding the missing few and many
forms. Use the appropriate Ukrainian wording: few for 2–4 drafts and many for
larger counts, while preserving the existing one and correcting the other form
as needed.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 100a313a-5c2f-4e1f-9410-45f137ad4282
⛔ Files ignored due to path filters (5)
src/backend/uv.lockis excluded by!**/*.locksrc/e2e/package-lock.jsonis excluded by!**/package-lock.jsonsrc/frontend/package-lock.jsonis excluded by!**/package-lock.jsonsrc/mta-in/uv.lockis excluded by!**/*.locksrc/mta-out/uv.lockis excluded by!**/*.lock
📒 Files selected for processing (10)
CHANGELOG.mdbin/release.pysrc/backend/pyproject.tomlsrc/e2e/package.jsonsrc/frontend/package.jsonsrc/frontend/public/locales/common/ru-RU.jsonsrc/frontend/public/locales/common/uk-UA.jsonsrc/jmap-email/pyproject.tomlsrc/mta-in/pyproject.tomlsrc/mta-out/pyproject.toml
| "Access sharing": "Поделиться доступом", | ||
| "Access sharing to the mailbox": "Поделиться почтовым ящиком", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Use noun phrases for the access-sharing labels.
These strings are rendered as the mailbox-settings tab and title. Поделиться доступом is an imperative (“share access”), while Поделиться почтовым ящиком means sharing the mailbox itself. Use wording such as Общий доступ and Общий доступ к почтовому ящику to preserve the UI meaning.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/ru-RU.json` around lines 156 - 157, Update
the Russian translations for “Access sharing” and “Access sharing to the
mailbox” to use noun phrases meaning “Общий доступ” and “Общий доступ к
почтовому ящику”, preserving the intended access-sharing UI meaning.
| "{{count}} auto-reply_one": "Автовідповідачів: {{count}}", | ||
| "{{count}} auto-reply_other": "Автовідповідачів: {{count}}", | ||
| "{{count}} conflicting events_one": "Конфліктних подій: {{count}}", | ||
| "{{count}} conflicting events_other": "Конфліктних подій: {{count}}", | ||
| "{{count}} days ago_one": "{{count}} дн. тому", | ||
| "{{count}} days ago_other": "{{count}} дн. тому", | ||
| "{{count}} drafts have been deleted._one": "Чернетку видалено.", | ||
| "{{count}} drafts have been deleted._other": "Видалено {{count}} чернеток.", | ||
| "{{count}} hours ago_one": "{{count}} год. тому", | ||
| "{{count}} hours ago_other": "{{count}} год. тому", | ||
| "{{count}} integration_one": "Інтеграцій: {{count}}", | ||
| "{{count}} integration_other": "Інтеграцій: {{count}}", | ||
| "{{count}} message template_one": "Шаблонів повідомлень: {{count}}", | ||
| "{{count}} message template_other": "Шаблонів повідомлень: {{count}}", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
rg -n '"[^"]+_(one|few|many|other)"' src/frontend/public/locales/common/uk-UA.json
rg -n 'compatibilityJSON|plural|i18next' src/frontend/src src/frontend/package.jsonRepository: suitenumerique/messages
Length of output: 40583
🏁 Script executed:
#!/bin/bash
set -euo pipefail
sed -n '1,220p' src/frontend/src/features/i18n/initI18n.ts
printf '\n--- conf ---\n'
sed -n '1,220p' src/frontend/src/features/i18n/conf.ts
printf '\n--- locale samples ---\n'
for f in src/frontend/public/locales/common/en-US.json src/frontend/public/locales/common/uk-UA.json; do
echo "### $f"
python3 - <<'PY' "$f"
import json, sys
path = sys.argv[1]
with open(path, encoding='utf-8') as fh:
data = json.load(fh)
for key in [
"{{count}} days ago_one",
"{{count}} days ago_other",
"{{count}} drafts have been deleted._one",
"{{count}} drafts have been deleted._other",
]:
if key in data:
print(f"{key}: {data[key]}")
PY
done
printf '\n--- i18next plural docs from package? ---\n'
rg -n '"pluralSeparator"|compatibilityJSON|fallbackLng|lng:|load:|plural' src/frontend/src/features/i18n src/frontend/package.json src/frontend/public/locales/common/en-US.json src/frontend/public/locales/common/uk-UA.jsonRepository: suitenumerique/messages
Length of output: 3829
🏁 Script executed:
#!/bin/bash
set -euo pipefail
python3 - <<'PY'
import json
from pathlib import Path
for p in [
Path('src/frontend/public/locales/common/en-US.json'),
Path('src/frontend/public/locales/common/uk-UA.json'),
]:
if not p.exists():
print(f"missing {p}")
continue
data = json.loads(p.read_text(encoding='utf-8'))
forms = sorted({k.rsplit('_',1)[-1] for k in data if k.endswith(('_one','_few','_many','_other'))})
print(p, forms[:20], len(forms))
PYRepository: suitenumerique/messages
Length of output: 291
🏁 Script executed:
#!/bin/bash
set -euo pipefail
cat -n src/frontend/src/features/i18n/initI18n.ts
printf '\n---\n'
cat -n src/frontend/src/features/i18n/conf.tsRepository: suitenumerique/messages
Length of output: 3462
Add the missing few/many forms for the draft-deletion string. other currently uses чернеток, which is wrong for 2–4.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/uk-UA.json` around lines 30 - 43, Update
the "{{count}} drafts have been deleted." pluralization entries in the locale
data by adding the missing few and many forms. Use the appropriate Ukrainian
wording: few for 2–4 drafts and many for larger counts, while preserving the
existing one and correcting the other form as needed.
| "{{date}} at {{time}}": "{{date}} о {{time}}", | ||
| "{{name}} assigned to this thread": "{{name}} тепер є учасником цього обговорення", | ||
| "{{name}} unassigned from this thread": "{{name}} більше не є учасником цього обговорення", | ||
| "{{name}} will no longer have access to the mailbox \"{{mailboxName}}\".": "{{name}} більше не має доступу до почтової скриньки {{mailboxName}}.", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Preserve the mailbox-name quotes.
The source message includes literal quotes around {{mailboxName}}, but the translation omits them.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/uk-UA.json` at line 149, Update the
Ukrainian translation for the key "{{name}} will no longer have access to the
mailbox \"{{mailboxName}}\"." to retain the literal quotation marks around the
{{mailboxName}} placeholder, matching the source message.
| "Refresh": "Оновити", | ||
| "Refresh summary": "Оновити дані короткого змісту", | ||
| "Regenerate credential": "Повторно створити облікові дані", | ||
| "Regenerating the credential invalidates the old one immediately. The receiver must be updated with the new value before it can verify webhooks again.": "Повторне створення облікових даних негайно скасовує старі значення. Отримувач повинен бути оновлений з новим значенням, перш ніж він зможе знову підтвердити вебобробники.", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Clarify credential rotation and webhook verification.
підтвердити вебобробники means confirming handlers, not verifying webhooks, and the sentence about updating the receiver is awkward. Use wording equivalent to: “The receiver must be updated with the new value before it can verify webhooks again.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/uk-UA.json` at line 625, Update the
Ukrainian translation value for the credential rotation message so it clearly
states that the receiver must be updated with the new value before it can verify
webhooks again. Replace the inaccurate wording for “verify webhooks” and make
the receiver-update sentence natural, while preserving the immediate
invalidation meaning.
| "Visit the Help center": "Відвідати центр допомоги", | ||
| "Webhook": "Вебобробник", | ||
| "Webhook API key": "API ключ вебобробника", | ||
| "Webhook signing secret": "Секретний підпис вебобробника", |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win
Translate “signing secret” accurately.
Секретний підпис means “secret signature,” not the secret used to sign webhook requests. Use wording equivalent to Секрет підпису вебобробника.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/frontend/public/locales/common/uk-UA.json` at line 846, Update the
Ukrainian translation for the “Webhook signing secret” key to use wording
equivalent to “Секрет підпису вебобробника,” replacing the current phrase that
means “secret signature.”
Update all version files and changelog for minor release.
Purpose
Bump to version 0.9.0
Added
nextparam at login to restore the requested route after authX-Mailerheader on outbound messagesChanged
cancellation and a list UI in the settings modal ✨(imports) refactor import code: retries, continuous mode, list UI #742
email.utils.make_msgid👔(backend) use builtin method to generate message-id #730make bootstrapsetup time and overall DevXdjango-lasuiteto 0.0.27Removed
TESTDOMAINfeature, superseded by autojoin domainsreact-emailcomponent from outbound message renderingFixed
lang=enthat might trigger auto-translateSecurity
Summary by CodeRabbit