Skip to content

feat: add Japanese (ja) and Spanish (es) localization#96

Merged
haritabh-z01 merged 3 commits intoamicalhq:mainfrom
Mgtantheta:feature/add-l10n-japan
Feb 12, 2026
Merged

feat: add Japanese (ja) and Spanish (es) localization#96
haritabh-z01 merged 3 commits intoamicalhq:mainfrom
Mgtantheta:feature/add-l10n-japan

Conversation

@Mgtantheta
Copy link
Contributor

@Mgtantheta Mgtantheta commented Feb 11, 2026

Summary

Adds Japanese (ja) and Spanish (es) localization to the desktop app — the first non-English locales.

  • Create ja.json with full Japanese translations for all UI strings (~910 lines)
  • Create es.json with full LATAM Spanish translations for all UI strings (~910 lines)
  • Register ja and es locales in shared.ts (resources, supportedLocales)
  • Add ja and es options to language selector dropdown in Preferences
  • Add language options ("ja": "日本語", "es": "Español") across all locale files

screenshot

image

Changes

File Change
apps/desktop/src/i18n/locales/ja.json New — full Japanese translation
apps/desktop/src/i18n/locales/es.json New — full LATAM Spanish translation
apps/desktop/src/i18n/shared.ts Register ja and es in resources and supportedLocales
apps/desktop/src/i18n/locales/en.json Add ja and es language options
apps/desktop/src/renderer/.../preferences/index.tsx Add ja and es to language selector dropdown

Language can be switched at Settings → Preferences → Language. The app also respects the system locale on first launch.

Related

Test plan

  • Switch language to 日本語 in Settings → Preferences → Language, verify all pages
  • Switch language to Español in Settings → Preferences → Language, verify all pages
  • Switch back to English and confirm no regressions
  • Confirm system locale auto-detection works (e.g. Japanese system → Japanese UI)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added Spanish (Español) and Japanese (日本語) as selectable interface languages in Preferences.
    • Both languages provide full localization across the app: menus, settings, onboarding, AI model flows, shortcuts, vocabulary, notifications, and error messages.
    • Language selector and supported locales updated so the app recognizes and uses these new language options.

Add full Japanese translation for the desktop app UI, register the ja
locale in i18n config, and add the language option to the preferences
selector.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@coderabbitai
Copy link

coderabbitai bot commented Feb 11, 2026

📝 Walkthrough

Walkthrough

Adds Spanish (es) and Japanese (ja) locales: two new full locale JSON files, registers them in i18n resources and supportedLocales, and adds the new language options to the Preferences language selector.

Changes

Cohort / File(s) Summary
i18n configuration
apps/desktop/src/i18n/shared.ts, apps/desktop/src/i18n/locales/en.json
Register es and ja in resources and supportedLocales; updated en.json to include additional language option entries.
Spanish locale
apps/desktop/src/i18n/locales/es.json
Adds comprehensive Spanish translations for UI, onboarding, settings, models, dialogs, toasts, and placeholders (~+910 lines).
Japanese locale
apps/desktop/src/i18n/locales/ja.json
Adds comprehensive Japanese translations for UI, onboarding, settings, models, dialogs, toasts, and placeholders (~+910 lines).
Preferences UI
apps/desktop/src/renderer/main/pages/settings/preferences/index.tsx
Adds es and ja language options to the language selection dropdown.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

I nibble keys and stitch each phrase with care,
Español and 日本語 now float in the air,
Menus, toasts, and prompts all sing anew,
A hopping rabbit said, "Hola! こんにちは!" 🐇✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately and concisely summarizes the main change: adding Japanese and Spanish localization to the application.
Linked Issues check ✅ Passed The PR fully implements the coding requirements from #56 by adding comprehensive Spanish (es) and Japanese (ja) localization files with complete UI translations.
Out of Scope Changes check ✅ Passed All changes are directly aligned with the stated objective of adding Spanish and Japanese localization; no unrelated modifications are present.

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

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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.

Add LATAM Spanish translation for the desktop app UI, register the es
locale in i18n config, and add the language option to the preferences
selector across all locale files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@Mgtantheta Mgtantheta changed the title feat: add Japanese (ja) localization feat: add Japanese (ja) and Spanish (es) localization Feb 11, 2026
@Mgtantheta Mgtantheta marked this pull request as ready for review February 11, 2026 09:35
Copy link

@arendon1 arendon1 left a comment

Choose a reason for hiding this comment

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

Can't approve, but this is a fantastic rendition of the locale.
Can confirm that this adapts very well to most LATAM Spanish vocabulary and its usage.

Copy link

@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: 1

🤖 Fix all issues with AI agents
In `@apps/desktop/src/i18n/locales/es.json`:
- Around line 839-857: Fix spacing around interpolation placeholders in the
syncDialog locale entries: update "syncDialog.title" to have a space before "de"
(change "{{modelType}}de" → "{{modelType}} de"), update "syncDialog.description"
to have a space before "quieres" (change "{{modelType}}quieres" → "{{modelType}}
quieres"), and update "syncDialog.fetching" to add a space between "modelos" and
the "{{available}}" placeholder (change "modelos{{available}}" → "modelos
{{available}}"); modify the values for the keys syncDialog.title,
syncDialog.description, and syncDialog.fetching in
apps/desktop/src/i18n/locales/es.json accordingly.

Comment on lines +839 to +857
"syncDialog": {
"title": "Seleccionar modelos {{modelType}}de {{provider}}",
"description": "Elige qué modelos {{modelType}}quieres sincronizar de {{provider}}.",
"fetching": "Obteniendo modelos{{available}}...",
"available": " disponibles",
"fetchFailed": "No se pudieron obtener los modelos",
"fetchFailedWithMessage": "No se pudieron obtener los modelos: {{message}}",
"searchPlaceholder": "Buscar modelos...",
"clear": "Limpiar",
"size": "Tamaño: {{size}}",
"context": "Contexto: {{context}}",
"cancel": "Cancelar",
"syncing": "Sincronizando...",
"syncButton": "Sincronizar {{count}} modelo",
"syncButton_other": "Sincronizar {{count}} modelos",
"toast": {
"synced": "¡Modelos sincronizados con la base de datos correctamente!",
"syncFailed": "No se pudieron sincronizar los modelos con la base de datos. Por favor, inténtalo de nuevo."
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Missing spaces before words adjacent to interpolation placeholders.

Lines 840, 841, and 842 are missing spaces between the {{modelType}} / {{available}} placeholder and the following word. When the placeholder resolves to a non-empty string, the text will render correctly only by accident (if the interpolated value itself ends with a space). When the placeholder is empty, words will be concatenated without a separator.

  • Line 840: {{modelType}}de{{modelType}} de
  • Line 841: {{modelType}}quieres{{modelType}} quieres
  • Line 842: modelos{{available}}modelos {{available}}
🔧 Proposed fix
-        "title": "Seleccionar modelos {{modelType}}de {{provider}}",
-        "description": "Elige qué modelos {{modelType}}quieres sincronizar de {{provider}}.",
-        "fetching": "Obteniendo modelos{{available}}...",
+        "title": "Seleccionar modelos {{modelType}} de {{provider}}",
+        "description": "Elige qué modelos {{modelType}} quieres sincronizar de {{provider}}.",
+        "fetching": "Obteniendo modelos {{available}}...",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"syncDialog": {
"title": "Seleccionar modelos {{modelType}}de {{provider}}",
"description": "Elige qué modelos {{modelType}}quieres sincronizar de {{provider}}.",
"fetching": "Obteniendo modelos{{available}}...",
"available": " disponibles",
"fetchFailed": "No se pudieron obtener los modelos",
"fetchFailedWithMessage": "No se pudieron obtener los modelos: {{message}}",
"searchPlaceholder": "Buscar modelos...",
"clear": "Limpiar",
"size": "Tamaño: {{size}}",
"context": "Contexto: {{context}}",
"cancel": "Cancelar",
"syncing": "Sincronizando...",
"syncButton": "Sincronizar {{count}} modelo",
"syncButton_other": "Sincronizar {{count}} modelos",
"toast": {
"synced": "¡Modelos sincronizados con la base de datos correctamente!",
"syncFailed": "No se pudieron sincronizar los modelos con la base de datos. Por favor, inténtalo de nuevo."
}
"syncDialog": {
"title": "Seleccionar modelos {{modelType}} de {{provider}}",
"description": "Elige qué modelos {{modelType}} quieres sincronizar de {{provider}}.",
"fetching": "Obteniendo modelos {{available}}...",
"available": " disponibles",
"fetchFailed": "No se pudieron obtener los modelos",
"fetchFailedWithMessage": "No se pudieron obtener los modelos: {{message}}",
"searchPlaceholder": "Buscar modelos...",
"clear": "Limpiar",
"size": "Tamaño: {{size}}",
"context": "Contexto: {{context}}",
"cancel": "Cancelar",
"syncing": "Sincronizando...",
"syncButton": "Sincronizar {{count}} modelo",
"syncButton_other": "Sincronizar {{count}} modelos",
"toast": {
"synced": "¡Modelos sincronizados con la base de datos correctamente!",
"syncFailed": "No se pudieron sincronizar los modelos con la base de datos. Por favor, inténtalo de nuevo."
}
🤖 Prompt for AI Agents
In `@apps/desktop/src/i18n/locales/es.json` around lines 839 - 857, Fix spacing
around interpolation placeholders in the syncDialog locale entries: update
"syncDialog.title" to have a space before "de" (change "{{modelType}}de" →
"{{modelType}} de"), update "syncDialog.description" to have a space before
"quieres" (change "{{modelType}}quieres" → "{{modelType}} quieres"), and update
"syncDialog.fetching" to add a space between "modelos" and the "{{available}}"
placeholder (change "modelos{{available}}" → "modelos {{available}}"); modify
the values for the keys syncDialog.title, syncDialog.description, and
syncDialog.fetching in apps/desktop/src/i18n/locales/es.json accordingly.

@haritabh-z01
Copy link
Contributor

@Mgtantheta can you give my changes a review - 381cae3
I did some small adjustments.

@Mgtantheta
Copy link
Contributor Author

@haritabh-z01
Looks Nice thanks 🙇
LGTMeow

@Mgtantheta
Copy link
Contributor Author

Mgtantheta commented Feb 12, 2026

@arendon1
Thanks for confirming the LATAM Spanish! Really appreciate having a native speaker's perspective.
If you spot any phrasing that feels unnatural or could be improved, feel free to open a follow-up PR — contributions are welcome!

@haritabh-z01 haritabh-z01 merged commit b2d689b into amicalhq:main Feb 12, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[enhancement] Spanish Localization

4 participants