Skip to content

Complete missing translations across all modules#6374

Merged
VelikovPetar merged 4 commits intodevelopfrom
chore/fix-missing-translations
Apr 20, 2026
Merged

Complete missing translations across all modules#6374
VelikovPetar merged 4 commits intodevelopfrom
chore/fix-missing-translations

Conversation

@andremion
Copy link
Copy Markdown
Contributor

@andremion andremion commented Apr 16, 2026

Goal

Fill all missing translations across the 4 translatable modules and 7 locales (es, fr, hi, in, it, ja, ko), and fix existing translation quality issues. This replaces the Localazy-based workflow with AI-generated translations.

Implementation

Indonesian locale consolidation:

  • Merged values-id into values-in (the standard Android qualifier for Indonesian) across client, ui-common, and ui-components
  • Deleted all values-id directories
  • Created a new values-in locale for compose (previously missing)

Quality fixes in existing translations:

  • Fixed full-width percent sign (%) in Japanese compose strings
  • Translated 8 strings left in English across ui-components locales (hint_cannot_send_message, sending_links_not_allowed)
  • Fixed corrupted CDATA in Hindi ui-components (pinned_message_list_empty_description)
  • Fixed "entrain" → "en train" in French typing indicator
  • Fixed "Reación" → "Reacción" typo in Spanish
  • Removed orphaned keys marked translatable="false" from locale files

Missing translations added (~2,500 total):

  • client: 1–2 keys per locale (reminder, notifications)
  • ui-components: ~40–60 keys per locale (polls, audio, threads, errors)
  • ui-common: ~100–130 keys per locale (channel info, permissions, polls, attachments, moderation)
  • compose: ~150–195 keys per locale (polls, audio, threads, channel menu, quotes, previews, attachments)

No UI changes.

Testing

  • ./gradlew spotlessApply passes with no changes
  • ./gradlew assembleDebug compiles all 4 modules successfully — no broken format specifiers or invalid XML
  • Verify translations render correctly on a device by switching the system language to each locale and navigating through channel list, message list, and settings screens

Summary by CodeRabbit

Release Notes

  • New Features

    • Added notification reminder messages and permission blocking notifications
    • Enhanced message composition with audio recording, poll creation, and improved attachment handling
    • Added message translation support with options to view original and translated content
    • Expanded message actions including mark as unread, block user, and improved moderation controls
    • Improved thread management and channel organization features
    • Added support for multiple new locales
  • Localization

    • Expanded language support and improved translations across Spanish, French, Hindi, Italian, Japanese, Korean, and Indonesian

@andremion andremion added the pr:improvement Improvement label Apr 16, 2026
@andremion andremion requested a review from a team as a code owner April 16, 2026 10:33
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 16, 2026

PR checklist ✅

All required conditions are satisfied:

  • Title length is OK (or ignored by label).
  • At least one pr: label exists.
  • Sections ### Goal, ### Implementation, and ### Testing are filled.

🎉 Great job! This PR is ready for review.

@andremion
Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 16, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 16, 2026

SDK Size Comparison 📏

SDK Before After Difference Status
stream-chat-android-client 5.82 MB 5.82 MB 0.00 MB 🟢
stream-chat-android-ui-components 10.95 MB 11.02 MB 0.06 MB 🟢
stream-chat-android-compose 12.23 MB 12.32 MB 0.09 MB 🟢

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 16, 2026

Walkthrough

This pull request adds and updates localization strings across multiple Stream Chat Android libraries (client, compose, ui-common, and ui-components) for seven languages (Spanish, French, Hindi, Indonesian, Italian, Japanese, and Korean). New notification reminder, permission, and UI strings are introduced, with significant expansion of compose and message handling features.

Changes

Cohort / File(s) Summary
Client Library — Notification Localization
stream-chat-android-client/src/main/res/values-es/strings.xml, values-fr/strings.xml, values-it/strings.xml, values-ja/strings.xml, values-ko/strings.xml
Added new notification reminder and permission-blocked strings (stream_chat_notification_reminder_due_title, stream_ui_message_input_permission_notifications_message) across Spanish, French, Italian, Japanese, and Korean locales.
Client Library — Hindi Localization
stream-chat-android-client/src/main/res/values-hi/strings.xml
Updated Hindi strings with spelling corrections and added new notification reminder and permission strings; added trailing newline.
Client Library — Indonesian Localization
stream-chat-android-client/src/main/res/values-id/strings.xml, values-in/strings.xml
Removed Indonesian id locale file entirely; updated in locale with xliff namespace, quoted string values, and new notification/permission strings.
Compose Library — Localization Expansion
stream-chat-android-compose/src/main/res/values-es/strings.xml, values-fr/strings.xml, values-hi/strings.xml, values-in/strings.xml, values-it/strings.xml, values-ja/strings.xml, values-ko/strings.xml
Substantially expanded Spanish, French, Hindi, Italian, Japanese, and Korean locales with 100+ new strings and plurals for composer actions, attachments, polls, threads, reactions, and channel management; added new Indonesian in locale file with complete compose UI translation.
UI Common Library — Localization Expansion
stream-chat-android-ui-common/src/main/res/values-es/strings.xml, values-fr/strings.xml, values-hi/strings.xml, values-in/strings.xml, values-it/strings.xml, values-ja/strings.xml, values-ko/strings.xml
Added 100+ new strings and plurals for Spanish, French, Hindi, Italian, Japanese, and Korean covering attachment picker errors, channel info, message composer permissions, message list states, moderation, and poll UI; removed Indonesian id locale; updated in locale with xliff namespace and restructured content.
UI Components Library — Comprehensive Localization Update
stream-chat-android-ui-components/src/main/res/values-es/strings.xml, values-fr/strings.xml, values-hi/strings.xml, values-in/strings.xml, values-it/strings.xml, values-ja/strings.xml, values-ko/strings.xml
Added xliff namespace and expanded Spanish, French, Hindi, Italian, Japanese, and Korean with gallery/attachment UI, channel header states, message actions/errors, translation/original display, poll creation/voting, and thread list strings; removed Indonesian id locale; updated in locale with restructured resources.

Estimated Code Review Effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 Across seven tongues, translations bloom,
Notifications, polls, and rooms abound,
Channel headers dance, threads find their zoom,
Localization spreads with xliff-bound,
A hop through strings, the app sings true! 🌍

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: completing missing translations across all modules for multiple locales. It is directly related to the changeset.
Description check ✅ Passed The description provides a comprehensive explanation covering Goal, Implementation details, and Testing strategy. It follows the template structure with well-organized sections addressing the main objectives and implementation approach.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/fix-missing-translations

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 18

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@stream-chat-android-client/src/main/res/values-es/strings.xml`:
- Line 26: Update the Spanish string resource
stream_chat_notification_reminder_due_title to use a direct non-reflexive
phrasing; replace the current text with a natural alternative such as "Has
pedido que te recordemos este mensaje" so the notification reads clearly.

In `@stream-chat-android-client/src/main/res/values-hi/strings.xml`:
- Line 26: The localized string stream_chat_notification_reminder_due_title uses
a first-person phrasing ("मुझसे") which personifies the app; update the Hindi
text to a neutral app voice by removing or replacing "मुझसे" (for example change
to a neutral phrase like "आपने इस संदेश के बारे में याद दिलाने को कहा था") so
the notification copy matches the app's neutral tone; edit the value of
stream_chat_notification_reminder_due_title accordingly.

In `@stream-chat-android-compose/src/main/res/values-es/strings.xml`:
- Around line 246-249: The plural resource stream_compose_member_count uses
incorrect format specifiers ("%1d") which can break string formatting; update
both <item> entries for quantity="one" and quantity="other" to use the correct
Android positional format "%1$d" so they read "%1$d Miembro" and "%1$d Miembros"
respectively, ensuring the plural name stream_compose_member_count retains the
same text but with proper specifiers.

In `@stream-chat-android-compose/src/main/res/values-fr/strings.xml`:
- Around line 246-249: The plural resource stream_compose_member_count uses the
wrong format specifier (%1d) which is interpreted as width, not positional
argument; update both items in the <plurals name="stream_compose_member_count">
("one" and "other") to use the positional integer specifier %1$d so the runtime
substitutes the first argument correctly.

In `@stream-chat-android-compose/src/main/res/values-hi/strings.xml`:
- Around line 26-29: The plural resource stream_compose_member_count uses an
incorrect format specifier "%1d सदस्य"; update both <item> strings in the
plurals named "stream_compose_member_count" to use the correct Android
positional specifier "%1$d सदस्य" so the integer parameter is formatted properly
at runtime.

In `@stream-chat-android-compose/src/main/res/values-in/strings.xml`:
- Around line 244-246: The plural resource stream_compose_member_count contains
an incorrect format specifier "%1d"; update the string item for
stream_compose_member_count to use a proper Android format specifier (either "%d
Anggota" or "%1$d Anggota") so it matches other locale files and prevents
runtime formatting errors.

In `@stream-chat-android-compose/src/main/res/values-it/strings.xml`:
- Around line 26-29: The plural resource stream_compose_member_count uses an
incorrect format specifier ("%1d") in both <item> entries; update each
occurrence to the correct Android positional format "%1$d" so the integer
argument is formatted properly (modify the items inside the plurals named
stream_compose_member_count).

In `@stream-chat-android-compose/src/main/res/values-ja/strings.xml`:
- Around line 99-101: The plural string stream_compose_member_count contains an
incorrect format specifier "%1dメンバー"; replace it with a proper positional or
standard specifier (e.g., "%1$dメンバー" or "%dメンバー") so Android's String.format
receives the argument correctly; update the item with quantity="other" to use
"%1$dメンバー" for consistency with other locales.

In `@stream-chat-android-compose/src/main/res/values-ko/strings.xml`:
- Around line 99-101: The plural resource stream_compose_member_count uses an
incorrect format specifier "%1d" which treats 1 as field width instead of a
positional argument; update the item value to use the positional integer
specifier "%1$d" (i.e., change "%1d명의 멤버" to "%1$d명의 멤버") so the member count is
formatted correctly when using the plural resource.

In `@stream-chat-android-ui-common/src/main/res/values-es/strings.xml`:
- Line 94: The Spanish confirmation string resource
stream_ui_channel_info_remove_member_modal_message contains an extra space
before the question mark ("%s ?"); update the resource value so the placeholder
is directly followed by the question mark ("%s?") while preserving the newline
and surrounding punctuation to remove the awkward spacing.

In `@stream-chat-android-ui-common/src/main/res/values-it/strings.xml`:
- Line 94: Update the Italian string resource
stream_ui_channel_info_remove_member_modal_message to remove the extra space
before the question mark so the formatting becomes "%s?" (i.e., change "Sei
sicuro di voler rimuovere\n%s ?" to "Sei sicuro di voler rimuovere\n%s?")
ensuring the placeholder and punctuation are adjacent and preserving any
intended newline or surrounding quotes formatting in the XML entry.

In `@stream-chat-android-ui-components/src/main/res/values-es/strings.xml`:
- Around line 39-42: The plural resource stream_ui_channel_header_member_count
uses the incorrect format specifier `%1d`; update the English source plural in
values/strings.xml (stream_ui_channel_header_member_count) to use the positional
specifier `%1$d` so Java's Formatter treats it as the first integer argument,
then propagate the same change to all locale variants (es, fr, it, hi, in, ja,
ko) so translations mirror the corrected source.

In `@stream-chat-android-ui-components/src/main/res/values-fr/strings.xml`:
- Around line 39-42: The plural resource stream_ui_channel_header_member_count
uses inconsistent format specifiers ("%1d"); update both <item> entries to use
the positional integer specifier "%1$d" (i.e., replace "%1d Membre" and "%1d
Membres" with "%1$d Membre" and "%1$d Membres") to match the rest of the strings
and ensure consistent formatting.

In `@stream-chat-android-ui-components/src/main/res/values-hi/strings.xml`:
- Around line 39-42: The plural resource stream_ui_channel_header_member_count
uses an invalid format specifier `%1d`; update both <item> strings to use a
correct specifier (`%d` for a single argument or `%1$d` for explicit positional)
so the plural entries (quantity="one" and quantity="other") format correctly at
runtime.

In `@stream-chat-android-ui-components/src/main/res/values-in/strings.xml`:
- Around line 39-41: The plural string resource
stream_ui_channel_header_member_count uses an incorrect format specifier "%1d";
update the item value to use the correct Android positional format "%1$d" so the
integer member count is formatted safely (replace "%1d Anggota" with "%1$d
Anggota" in the stream_ui_channel_header_member_count plural entry).

In `@stream-chat-android-ui-components/src/main/res/values-it/strings.xml`:
- Around line 39-42: The plural resource stream_ui_channel_header_member_count
uses an incorrect format specifier `%1d`; update both <item quantity="one"> and
<item quantity="other"> entries to use the correct Android/Java positional
specifier `%1$d` (e.g., replace `%1d` with `%1$d`) so runtime string formatting
works properly with the integer argument.

In `@stream-chat-android-ui-components/src/main/res/values-ja/strings.xml`:
- Around line 178-180: The plural entry named
stream_ui_channel_header_member_count contains an incorrect format specifier
("%1d人のメンバー"); change the positional placeholder to the correct syntax ("%1$d")
so it matches other locales and Android's positional argument format—update the
<item> content for stream_ui_channel_header_member_count accordingly.

In `@stream-chat-android-ui-components/src/main/res/values-ko/strings.xml`:
- Around line 178-180: The plural resource stream_ui_channel_header_member_count
uses a non-positional specifier "%1d명"; update the item string to use the
positional format "%1$d명" so it matches other locales and Android formatting
expectations—locate the <plurals name="stream_ui_channel_header_member_count">
entry and replace the item content accordingly.
🪄 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: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a31e3cde-e6b6-402d-be57-c2686d2eb4de

📥 Commits

Reviewing files that changed from the base of the PR and between 65508ae and 93e35f5.

📒 Files selected for processing (31)
  • stream-chat-android-client/src/main/res/values-es/strings.xml
  • stream-chat-android-client/src/main/res/values-fr/strings.xml
  • stream-chat-android-client/src/main/res/values-hi/strings.xml
  • stream-chat-android-client/src/main/res/values-id/strings.xml
  • stream-chat-android-client/src/main/res/values-in/strings.xml
  • stream-chat-android-client/src/main/res/values-it/strings.xml
  • stream-chat-android-client/src/main/res/values-ja/strings.xml
  • stream-chat-android-client/src/main/res/values-ko/strings.xml
  • stream-chat-android-compose/src/main/res/values-es/strings.xml
  • stream-chat-android-compose/src/main/res/values-fr/strings.xml
  • stream-chat-android-compose/src/main/res/values-hi/strings.xml
  • stream-chat-android-compose/src/main/res/values-in/strings.xml
  • stream-chat-android-compose/src/main/res/values-it/strings.xml
  • stream-chat-android-compose/src/main/res/values-ja/strings.xml
  • stream-chat-android-compose/src/main/res/values-ko/strings.xml
  • stream-chat-android-ui-common/src/main/res/values-es/strings.xml
  • stream-chat-android-ui-common/src/main/res/values-fr/strings.xml
  • stream-chat-android-ui-common/src/main/res/values-hi/strings.xml
  • stream-chat-android-ui-common/src/main/res/values-id/strings.xml
  • stream-chat-android-ui-common/src/main/res/values-in/strings.xml
  • stream-chat-android-ui-common/src/main/res/values-it/strings.xml
  • stream-chat-android-ui-common/src/main/res/values-ja/strings.xml
  • stream-chat-android-ui-common/src/main/res/values-ko/strings.xml
  • stream-chat-android-ui-components/src/main/res/values-es/strings.xml
  • stream-chat-android-ui-components/src/main/res/values-fr/strings.xml
  • stream-chat-android-ui-components/src/main/res/values-hi/strings.xml
  • stream-chat-android-ui-components/src/main/res/values-id/strings.xml
  • stream-chat-android-ui-components/src/main/res/values-in/strings.xml
  • stream-chat-android-ui-components/src/main/res/values-it/strings.xml
  • stream-chat-android-ui-components/src/main/res/values-ja/strings.xml
  • stream-chat-android-ui-components/src/main/res/values-ko/strings.xml
💤 Files with no reviewable changes (3)
  • stream-chat-android-ui-components/src/main/res/values-id/strings.xml
  • stream-chat-android-ui-common/src/main/res/values-id/strings.xml
  • stream-chat-android-client/src/main/res/values-id/strings.xml

Comment thread stream-chat-android-client/src/main/res/values-es/strings.xml Outdated
Comment thread stream-chat-android-client/src/main/res/values-hi/strings.xml Outdated
Comment thread stream-chat-android-compose/src/main/res/values-es/strings.xml
Comment thread stream-chat-android-compose/src/main/res/values-fr/strings.xml
Comment thread stream-chat-android-compose/src/main/res/values-hi/strings.xml
@andremion andremion force-pushed the chore/fix-missing-translations branch from 93e35f5 to ac409ca Compare April 17, 2026 07:40
@andremion andremion force-pushed the chore/fix-missing-translations branch from ac409ca to e9d1672 Compare April 17, 2026 07:48
@andremion andremion force-pushed the chore/fix-missing-translations branch from e9d1672 to 47df82f Compare April 17, 2026 09:19
@sonarqubecloud
Copy link
Copy Markdown

@VelikovPetar VelikovPetar merged commit 7b35c23 into develop Apr 20, 2026
15 checks passed
@VelikovPetar VelikovPetar deleted the chore/fix-missing-translations branch April 20, 2026 08:35
@stream-public-bot stream-public-bot added the released Included in a release label Apr 24, 2026
@stream-public-bot
Copy link
Copy Markdown
Contributor

🚀 Available in v7.0.1

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

Labels

pr:improvement Improvement released Included in a release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants