Skip to content

Comments

feat: update translations via @LingoDotDev#22722

Closed
calcom-bot wants to merge 1 commit intomainfrom
lingo.dev/main
Closed

feat: update translations via @LingoDotDev#22722
calcom-bot wants to merge 1 commit intomainfrom
lingo.dev/main

Conversation

@calcom-bot
Copy link
Collaborator

Hey team,

Lingo.dev here with fresh translations!

In this update

  • Added missing translations
  • Performed brand voice, context and glossary checks
  • Enhanced translations using Lingo.dev Localization Engine

Next Steps

  • Review the changes
  • Merge when ready

@vercel
Copy link

vercel bot commented Jul 24, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

2 Skipped Deployments
Name Status Preview Comments Updated (UTC)
cal ⬜️ Ignored (Inspect) Jul 24, 2025 8:12pm
cal-eu ⬜️ Ignored (Inspect) Jul 24, 2025 8:12pm

@CLAassistant
Copy link

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.


Lingo.dev seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jul 24, 2025

Walkthrough

This pull request updates the common.json localization files for a wide range of supported languages in the web application. The changes are purely within these JSON resource files and include the addition of numerous new translation keys as well as modifications to existing ones. The new keys support recently added features such as automatic video recording, enhanced event and session management, more granular booking and cancellation messages, detailed payment error handling, routing funnel analytics, cache management, file attachment handling, and private link expiration/usage limits. Several existing strings were reworded for clarity, consistency, or improved pluralization. No changes were made to exported code entities or logic—only to user-facing text resources.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20–25 minutes

  • Complexity: Moderate. The changes span many files (one per supported language), but each file contains straightforward additions and modifications to translation strings. There are no changes to application logic or function signatures, but the review requires careful attention to ensure consistency and accuracy across all language files and to verify that new keys are correctly added and existing ones are properly updated.

Possibly related PRs

  • fix: improve restriction schedule description #22517: Updates localization JSON files by adding and modifying translation keys, including renaming "choose_restriction_schedule_description" to "restriction_schedule_description"—directly related to similar changes in this PR.
  • feat: update translations via @LingoDotDev #22426: Updates the same localization JSON files with identical new and modified translation keys for features such as video meeting settings, event management, payment errors, routing analytics, file attachments, cache management, and private link settings, indicating a direct connection as a related or precursor localization update.

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch lingo.dev/main

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@graphite-app graphite-app bot requested review from a team July 24, 2025 20:12
@keithwillcode keithwillcode added core area: core, team members only foundation labels Jul 24, 2025
@dosubot dosubot bot added the i18n area: i18n, translations label Jul 24, 2025
@graphite-app
Copy link

graphite-app bot commented Jul 24, 2025

Graphite Automations

"Add consumer team as reviewer" took an action on this PR • (07/24/25)

1 reviewer was added to this PR based on Keith Williams's automation.

"Add foundation team as reviewer" took an action on this PR • (07/24/25)

1 reviewer was added to this PR based on Keith Williams's automation.

Copy link
Contributor

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

🔭 Outside diff range comments (5)
apps/web/public/static/locales/es-419/common.json (1)

1722-1727: Duplicate keys – later value silently overwrites the first one
minute_one, minute_one_short, minute_other, hour_one, hour_one_short, hour_other
are already defined ~280 lines above (around 1421-1427).
JSON objects cannot hold duplicates – whichever comes last wins, which is easy to miss and a future merge-conflict magnet.

Remove the duplicates or keep just one canonical definition:

-  "minute_one": "{{count}} minuto",
-  "minute_one_short": "{{count}}m",
-  "minute_other": "{{count}} minutos",
-  "hour_one": "{{count}} hora",
-  "hour_one_short": "{{count}}h",
-  "hour_other": "{{count}} horas",
apps/web/public/static/locales/pt/common.json (1)

960-969: Inconsistent locale variant – “usuário” vs “utilizador”.

The new string introduces the Brazilian-Portuguese spelling “nome de usuário” whereas the rest of the file (e.g. "nome de utilizador") consistently follows European-Portuguese.
Please stick to one variant across the file to avoid a mixed voice.

- "multiple_private_links_description": "Gere URLs privados sem expor o nome de usuário, com limites configuráveis de expiração e uso"
+ "multiple_private_links_description": "Gere URLs privados sem expor o nome de utilizador, com limites configuráveis de expiração e uso"
apps/web/public/static/locales/bg/common.json (1)

3356-3360: Collision with pre-existing card-error strings.

your_card_was_declined, your_card_does_not_support_this_type_of_purchase,
amount_must_convert_to_at_least, could_not_charge_card look almost identical to
the earlier keys (couldnt_charge_card_error, etc.).
To avoid dead, unreachable translations keep only one canonical key per message and update code references accordingly.
Otherwise translators will have to maintain two parallel strings for the same error.

apps/web/public/static/locales/et/common.json (1)

2451-2452: Duplicate key "dismiss" overrides the first occurrence

"dismiss" was already defined earlier (line 248).
JSON objects must not contain duplicate keys; parsers usually keep only the last one, so the earlier translation will be silently discarded.

-  "dismiss": "Ignoreeri",

Remove the duplicate or give the new entry a unique key.

apps/web/public/static/locales/uk/common.json (1)

2335-2343: File-upload messages: variables dropped & max-files wording
"file_size_limit_exceed" normally contains {{maxSize}}.
"invalid_file_type_extension" expects {{acceptedTypes}}.
"max_files_exceeded" may need {{maxFiles}}.
Make sure translators kept ICU placeholders – otherwise runtime strings will be incomplete.

🧹 Nitpick comments (65)
apps/web/public/static/locales/cs/common.json (2)

2172-2175: Missing noun decreases clarity

"Nejvíce rezervovaní" / "Nejméně rezervovaní" does not say who.
Readers will understand faster with the noun included.

-"most_booked_members": "Nejvíce rezervovaní",
-"least_booked_members": "Nejméně rezervovaní",
+"most_booked_members": "Nejvíce rezervovaní členové",
+"least_booked_members": "Nejméně rezervovaní členové",

2172-2173: Terminology consistency

"Rezervace podle hodin" sounds unnatural; common CZ UI wording is „Rezervace podle hodiny“ or „Rezervace po hodinách“.

-"bookings_by_hour": "Rezervace podle hodin",
+"bookings_by_hour": "Rezervace po hodinách",
apps/web/public/static/locales/no/common.json (2)

122-123: Inconsistent phrasing / missing article

"fixed_hosts_unavailable_for_booking": "Noen av de faste vertene er ikke tilgjengelige for booking",
uses the definite article de (“de faste vertene”).
Current translation is missing that article (“faste vertene”) which is ungrammatical.

-"fixed_hosts_unavailable_for_booking": "Noen av faste vertene er ikke tilgjengelige for booking.",
+"fixed_hosts_unavailable_for_booking": "Noen av de faste vertene er ikke tilgjengelige for booking.",

1721-1724: Key terms dropped – members are lost in translation

most_booked_members / least_booked_members should keep the “members” part to avoid ambiguity.

-"most_booked_members": "Mest booket",
-"least_booked_members": "Minst booket",
+"most_booked_members": "Mest bookede medlemmer",
+"least_booked_members": "Minst bookede medlemmer",
apps/web/public/static/locales/ca/common.json (3)

965-965: Plural disagreement – URLs vs. URL
In Catalan, the borrowed acronym “URL” is normally kept invariable in the plural form. “Genera URL privades” is therefore preferred to “Genera URLs privades”.

-"multiple_private_links_description": "Genera URLs privades sense exposar el nom d'usuari, amb límits d'expiració i ús configurables",
+"multiple_private_links_description": "Genera URL privades sense exposar el nom d'usuari, amb límits d'expiració i ús configurables",

2173-2174: Add missing noun for clarity
Both strings omit the word “membres”, which makes the metric unclear in Catalan.

-"most_booked_members": "Més reservats",
-"least_booked_members": "Menys reservats",
+"most_booked_members": "Membres més reservats",
+"least_booked_members": "Membres menys reservats",

3156-3156: Consistency with other KPI strings
"most_cancelled_bookings": "Més cancel·lacions" loses the noun “reserves”, unlike neighbouring metrics (“Reserves per hora”). Suggest:

-"most_cancelled_bookings": "Més cancel·lacions",
+"most_cancelled_bookings": "Més reserves cancel·lades",
apps/web/public/static/locales/az/common.json (4)

51-51: Possible mistranslation of “recording”
“avtomatik yazılışı aktivləşdir” sounds like enable automatic spelling. A more accurate phrase for meeting recording is “avtomatik yazını aktivləşdir”.


122-123: Term “host” left untranslated
“sabit ev sahibləri / round robin ev sahibləri” mixes AZ + EN. Consider “sabit aparıcılar” / “növbəli aparıcılar” (or your established glossary term).


687-687: Capitalisation
“Rola Bax” – everywhere else you use sentence-case (“Tədbiri redaktə et”). Prefer “Rola bax” for consistency.


2172-2175: Missing noun
“Ən Çox Rezervasiya Edilən” / “Ən Az Rezervasiya Edilən” omit the subject. In reports these usually read “Ən çox rezervasiya edilən üzvlər”. Add “üzvlər” (or “üzv”).

apps/web/public/static/locales/ar/common.json (2)

2204-2208: Minor wording – keep error messages consistent with the existing payment copy

Current Arabic copy:

"your_card_was_declined": "تم رفض الدفع. يرجى تجربة بطاقة أخرى ..."
"your_card_does_not_support_this_type_of_purchase": "هذا النوع من البطاقات غير مدعوم لهذا الشراء ..."
"amount_must_convert_to_at_least": "الحد الأدنى لمبلغ الدفع هو 0.50 دولار أمريكي ..."
"could_not_charge_card": "تعذر تنفيذ عملية الدفع من البطاقة."

Every other Stripe error message in the file starts with “لا يمكن …” or “تعذّر …”.
For full consistency, align the first three strings with that pattern:

-"your_card_was_declined": "تم رفض الدفع. يرجى تجربة بطاقة أخرى ...",
+"your_card_was_declined": "تعذّر إتمام الدفع بالبطاقة. يرجى تجربة بطاقة أخرى ...",

-"your_card_does_not_support_this_type_of_purchase": "هذا النوع من البطاقات غير مدعوم لهذا الشراء ...",
+"your_card_does_not_support_this_type_of_purchase": "تعذّر إتمام الدفع: نوع البطاقة لا يدعم هذا الشراء ...",

-"amount_must_convert_to_at_least": "الحد الأدنى لمبلغ الدفع هو 0.50 دولار أمريكي. يرجى زيادة مبلغ الدفع.",
+"amount_must_convert_to_at_least": "تعذّر إتمام الدفع: الحد الأدنى هو ‎0.50‎ دولار أمريكي. يرجى زيادة المبلغ.",

Purely cosmetic, but it keeps the UX copy tight and uniform.


3156-3157: Key still in English – please translate

"most_cancelled_bookings": "الأكثر إلغاءً للحجوزات"

Looks fine, but the adjacent key "picklist" (line 3155) was not translated and remains "picklist".
Unless it is a brand / technical term, translate it (e.g. “قائمة اختيار”) to avoid mixed-language UI.

apps/web/public/static/locales/es/common.json (3)

51-51: Use consistent action verb (“Activar” vs. “Habilitar”).

Line 50 already uses “Activar transcripción automática…”.
For UI copy consistency, prefer the same verb here:

-"Habilitar grabación automática después de que el organizador se una a la reunión"
+"Activar grabación automática después de que el organizador se una a la reunión"

688-688: Minor grammar tweak (optional).

“Ver rol” is understandable, but “Ver rol” occasionally sounds abrupt.
If you want a more descriptive label:

-"Ver rol"
+"Ver detalles del rol"

2205-2208: Punctuation style differs from existing error messages.

Most previous error strings omit the trailing period. To keep UI copy uniform you might drop them here:

-"Pago rechazado. Por favor, intente con otra tarjeta o contacte a su banco para obtener ayuda."
+"Pago rechazado. Por favor intente con otra tarjeta o contacte a su banco para obtener ayuda"

Apply the same rule to the other three lines if desired.

apps/web/public/static/locales/ko/common.json (5)

51-54: Consider grouping new Cal-video keys together and keep alpha-ordering
The three newly added Cal-video strings (enable_automatic_recording, edit_event, view_session_details) break the existing alphabetical ordering of keys in this block. The file is already >3000 lines – keeping strict ordering is invaluable when translators grep for a key or resolve merge conflicts.


80-81: Context might be lost for “취소자”
cancelled_by is translated as just “취소자”. In UI this is usually followed by a name, e.g. “Cancelled by John”.
A more natural Korean label would be "취소한 사람" (noun phrase) or "취소한 사용자" to read well when concatenated.


122-123: Parallel wording for host messages
The two new error strings diverge slightly in tone:

fixed_hosts_unavailable_for_booking   → "일부 고정 호스트는 예약할 수 없습니다."
round_robin_hosts_unavailable_for_booking → "예약 가능한 라운드 로빈 호스트가 없습니다."

Consider harmonising:
"일부 고정 호스트를 예약할 수 없습니다."
"라운드 로빈 호스트를 예약할 수 없습니다."
for consistent subject-object order.


3395-3400: Cache-management keys miss a namespace prefix
The new cache strings (cache_status, cache_last_updated, …) are top-level. Group-prefixed keys (cache.* or admin.cache.*) make accidental collisions far less likely in huge files like this.


3410-3414: Consistency with other usage-limit strings
You introduced usage_based_expiration_description_plural but left the singular key usage_based_expiration_description without the _one suffix used elsewhere (event_remaining_one/other).
Align naming (_one / _other) to keep i18next plural detection automatic.

apps/web/public/static/locales/eu/common.json (2)

122-123: Avoid mixed end-punctuation to keep UI strings consistent

Neighbouring booking-error messages (hosts_unavailable_for_booking / timeslot_unavailable_short, etc.) are written without a trailing full stop.
Keeping the same style helps avoid visual jitter in toast/pop-ups.

-  "fixed_hosts_unavailable_for_booking": "Finkatutako ostalari batzuk ez daude erreserbatzeko eskuragarri.",
-  "round_robin_hosts_unavailable_for_booking": "Ez dago txandakako ostalarik erreserbatzeko eskuragarri.",
+  "fixed_hosts_unavailable_for_booking": "Finkatutako ostalari batzuk ez daude erreserbatzeko eskuragarri",
+  "round_robin_hosts_unavailable_for_booking": "Ez dago txandakako ostalarik erreserbatzeko eskuragarri"

688-688: Keep terminology aligned with the rest of the file

Earlier keys translate “role” as “eginkizuna” (edit_role, role), while here it becomes rola.
Using one term prevents confusion when the strings are concatenated in the UI.

-  "view_role": "Ikusi rola",
+  "view_role": "Ikusi eginkizuna",
apps/web/public/static/locales/pt-BR/common.json (1)

120-124: Round-robin wording inconsistent with rest of file

round_robin_hosts_unavailable_for_booking uses “rodízio” elsewhere (“Nenhum anfitrião de rodízio…”), but PT-BR throughout the file prefers “round robin” in English. Pick one form and reuse it to avoid two different terms for the same concept.

If you want to stay Portuguese-only:

-"round_robin_hosts_unavailable_for_booking": "Nenhum anfitrião de rodízio está disponível para reserva.",
+"round_robin_hosts_unavailable_for_booking": "Nenhum anfitrião de round-robin está disponível para reserva.",
apps/web/public/static/locales/fr/common.json (1)

51-51: Grammar nit : use past tense after “après que”

In French, the indicative past is required after “après que”.

-"Activer l'enregistrement automatique après que l'organisateur rejoint la réunion"
+"Activer l'enregistrement automatique après que l'organisateur a rejoint la réunion"
apps/web/public/static/locales/da/common.json (1)

2172-2175: Clarify plural form for member-based metrics

The new keys “most_booked_members” and “least_booked_members” are plural-context metrics, but the Danish values read singular (“Mest booket” / “Mindst booket”).
Recommend switching to a plural noun to avoid ambiguity:

-"most_booked_members": "Mest booket",
-"least_booked_members": "Mindst booket",
+"most_booked_members": "Mest bookede medlemmer",
+"least_booked_members": "Mindst bookede medlemmer",
apps/web/public/static/locales/it/common.json (1)

2179-2181: Potential key-collision: “events” & “performance” require namespace verification

The new general-purpose keys

"events": "Eventi",
"performance": "Prestazioni"

look fine linguistically, but they’re very generic.
Please double-check that:

  1. No other "events" / "performance" keys already exist in sibling locale files (or in this same JSON further up) – a silent overwrite will be hard to notice.
  2. Call-sites are updated to use the intended qualifiers (analytics.events, insights.performance, etc.) to avoid string collisions.

If uniqueness is not guaranteed, consider prefixing (e.g., "insights_events", "insights_performance").

apps/web/public/static/locales/ro/common.json (1)

80-80: Minor nitpick: consider definite article

Anulat de reads well, but Anulat de către is slightly more formal / complete. Optional.

apps/web/public/static/locales/de/common.json (2)

2173-2175: Missing subject noun reduces clarity

"most_booked_members" / "least_booked_members" were shortened to
“Am häufigsten gebucht” / “Am wenigsten gebucht”.

Without the noun (“Mitglieder”) the metric label is ambiguous (events? users?).
Consider keeping the original intent:

-"most_booked_members": "Am häufigsten gebucht",
-"least_booked_members": "Am wenigsten gebucht",
+"most_booked_members": "Am häufigsten gebuchte Mitglieder",
+"least_booked_members": "Am wenigsten gebuchte Mitglieder",

122-123: Terminology mismatch between “Host” and “Gastgeber”

The newly added strings keep “fixed hosts” / “round robin hosts”, but the
existing UI consistently uses “Gastgeber”.
For linguistic consistency and to avoid mixed English/German UI, translate:

-"fixed_hosts_unavailable_for_booking": "Einige der festen Gastgeber sind für Buchungen nicht verfügbar.",
-"round_robin_hosts_unavailable_for_booking": "Kein Round-Robin-Gastgeber ist für Buchungen verfügbar.",
+"fixed_hosts_unavailable_for_booking": "Einige der festen Gastgeber sind nicht verfügbar.",
+"round_robin_hosts_unavailable_for_booking": "Kein Gastgeber im Rotationsprinzip ist verfügbar.",
apps/web/public/static/locales/hu/common.json (1)

80-80: Consider adding a clarifying colon after the label
Most UIs render cancelled_by as a label followed by a name (e.g. “Cancelled by John Doe”).
Adding a trailing colon keeps the Hungarian string consistent with that pattern:

-"cancelled_by": "Lemondta"
+"cancelled_by": "Lemondta:"
apps/web/public/static/locales/pl/common.json (1)

2172-2181: Metrics wording could be clearer
"bookings_by_hour": "Rezerwacje według godzin" reads a bit awkwardly.
Consider the singular-collective “Rezerwacje według godziny” or “Rezerwacje / godzinę” to emphasise the histogram.
Pure wording – no functional impact.

apps/web/public/static/locales/sv/common.json (2)

3363-3366: Odd Swedish wording – replace “Routningsfunnel”

“Routningsfunnel” is an English/Swedish mix and will look unpolished in the UI.
Suggested alternatives:

-  "routing_funnel": "Routningsfunnel",
+  "routing_funnel": "Routningsflöde",

The same applies to the two keys immediately below – consider “Totalt inskickade” / “Lyckade omdirigeringar” / “Godkända bokningar” for full localisation.


2172-2175: Plural clarity & localisation

“Most/Least booked members” translated as “Mest/Minst bokade” omits the noun and may confuse. A clearer Swedish rendering:

-  "most_booked_members": "Mest bokade",
-  "least_booked_members": "Minst bokade",
+  "most_booked_members": "Mest bokade medlemmar",
+  "least_booked_members": "Minst bokade medlemmar",
apps/web/public/static/locales/sk-SK/common.json (5)

51-54: Be consistent with Cal Video option labels

enable_automatic_recording, edit_event, and view_session_details follow the same feature block as the already-existing enable_automatic_transcription, but the wording of the Slovak translations is subtly different (e.g. “Povoliť automatické nahrávanie …”, “Upraviť udalosť”).
Double-check that the UI uses the same tense/capitalisation for all four options so the settings panel doesn’t look stitched together.


80-80: Singular / plural mismatch in “cancelled_by”

"Zrušené používateľom" reads as singular masculine. If the UI can also show other agents (system, admin, integrácia …) consider a gender-neutral phrasing like

-"Zrušené používateľom"
+"Zrušil/-a"

or keep it generic:

+"Zrušil účastník"

Otherwise Slovak users may see grammatically odd combinations.


965-965: Plural description out of sync

multiple_private_links_description speaks about “limitmi použitia” (plural) but the new expiry strings below (lines 3403+) separate singular/plural again. Confirm that this description still matches the new UX (single vs. multiple links).


2204-2207: Card-error strings: keep wording parallel

The four new payment error messages mix “platba” / “karta” / “suma” wording. For clear support copy, keep the subject first:

  • „Vaša karta bola zamietnutá.“
  • „Vaša karta nepodporuje tento typ nákupu.“
  • „Suma sa musí konvertovať minimálne na …“
  • „Platbu sa nepodarilo zaúčtovať na kartu.“

Small, but improves in-product consistency.


3396-3402: Cache-management wording

The trio (cache_status, delete_cached_data, …) will surface in a danger-zone modal. Verify that the confirmation message (line 3401) is reused for both success and failure flows or provide a dedicated "confirm_delete_cache_description".

apps/web/public/static/locales/bg/common.json (1)

3395-3401: Place-holder consistency / term harmonisation.

Good to see {{timestamp}} preserved, but for complete locale consistency you may want to:

  1. Keep the same capitalisation pattern used elsewhere (“Кешът беше изтрит успешно” vs “Кешът е изтрит успешно”).
  2. Re-use existing verbs – earlier strings use “Изтриване на кеша”, here you have “Изтрий кеширани данни”. Aligning terminology avoids mixed phrasing in the UI.

Nit only, no functional impact.

apps/web/public/static/locales/vi/common.json (5)

122-124: Keep error-code keys semantically consistent

fixed_hosts_unavailable_for_booking / round_robin_hosts_unavailable_for_booking follow the same naming style as the pre-existing generic error. 👍
Consider appending _error to keep them grouped (*_error) – helps grepping and avoids mixing UI labels with error strings.


965-969: Plural / singular messages share the same sentence

multiple_private_links_description describes plural usage; make sure there is a singular partner (or uses count interpolation) to avoid grammatically wrong output for “1 link”.
If the component already passes count, consider following i18next pluralisation instead of separate keys.


2204-2208: Card-error strings: keep the prefix homogeneous

Existing errors start with payment_*. The newly-added keys (your_card_*) break grouping.
Recommend renaming to payment_card_* (or similar) so callers can map uniformly.

-"your_card_was_declined"
+"payment_card_declined"

Same for the three sibling keys.


3395-3402: Cache-management strings: tech jargon exposed

These keys will be user-facing; “cache” is not obvious in Vietnamese.
Consider a more descriptive term (e.g. “bộ nhớ tạm”) or add a short tooltip explaining what is deleted.


3403-3421: Plural logic already covered by i18next – redundant keys

remainder_of_maximum_use_left_singular / _plural can be expressed with i18next plural forms instead of two separate keys.
Simplifies maintenance:

"remainder_of_maximum_uses_left": "Còn {{remainder}} / {{maximum}} lần sử dụng"

Same comment for “expires_on_date”, etc.

apps/web/public/static/locales/tr/common.json (3)

122-123: Use a single Turkish term for “Round-Robin” across the file

round_robin_hosts_unavailable_for_booking currently uses “Sırayla Değişen”, while other keys keep the original “Round Robin” (e.g. "round_robin" at 805).
Sticking to one variant avoids confusing end-users and eases searchability.

-"Rezervasyon için hiçbir Sırayla Değişen ev sahibi uygun değil."
+"Rezervasyon için hiçbir Round Robin ev sahibi uygun değil."

2172-2175: Metric labels miss the subject (“üyeler”)

For dashboards these strings should clearly indicate what is most/least booked:

-"En Çok Rezervasyon Yapılan"
+"En Çok Rezervasyon Yapılan Üyeler"
-
-"En Az Rezervasyon Yapılan"
+"En Az Rezervasyon Yapılan Üyeler"

Same applies to bookings_by_hour if the chart shows booking sayısı:

-"Saate Göre Rezervasyonlar"
+"Saatlik Rezervasyon Sayısı"

3403-3404: Singular/plural strings are identical – users will never see the 1-item form

remainder_of_maximum_use_left_singular should drop the plural suffix:

- "{{maximum}} kullanımın {{remainder}} tanesi kaldı"
+ "{{maximum}} kullanımın {{remainder}} tanesi kaldı"   # plural
+ "{{maximum}} kullanımın {{remainder}} tane kaldı"     # singular (remainder=1)

Otherwise both variants render the same text, defeating i18n-pluralisation.

apps/web/public/static/locales/he/common.json (2)

2172-2174: Hebrew phrasing can be improved for readability

most_booked_members is fine, but
least_booked_members reads a bit awkwardly (“המוזמנים הפחות”).
A clearer, grammatical alternative is “המוזמנים הכי פחות” (or “המוזמנים המועטים ביותר”).

-"least_booked_members": "המוזמנים הפחות",
+"least_booked_members": "המוזמנים הכי פחות",

965-965: Minor punctuation / style nit

Consider inserting a comma before “עם הגבלות…” for better flow:

-"multiple_private_links_description": "יצירת קישורים פרטיים מבלי לחשוף את שם המשתמש, עם הגבלות תפוגה ושימוש הניתנות להגדרה",
+"multiple_private_links_description": "יצירת קישורים פרטיים, מבלי לחשוף את שם המשתמש, עם הגבלות תפוגה ושימוש הניתנות להגדרה",
apps/web/public/static/locales/et/common.json (1)

2173-2181: Tweak wording & avoid overly generic key

  1. A closer Estonian rendering for “Rescheduled events” would be “Ümber ajastatud sündmused” rather than “Üritatud sündmused”.
  2. The bare key events is very generic and easy to collide with future additions; consider something more specific such as events_label.
-  "events_rescheduled": "Üritatud sündmused",
+  "events_rescheduled": "Ümber ajastatud sündmused",
apps/web/public/static/locales/uk/common.json (6)

51-55: Check for terminology consistency in new Cal Video options
"enable_automatic_recording" is introduced right next to existing Cal Video keys. Earlier strings use “запис”, here you translate it as “запис … після приєднання організатора”. Please verify this wording against the adjacent string "enable_automatic_transcription" so end-users don’t see two different patterns for essentially the same “after-host-joins” behaviour.


80-80: UI label needs actor context
"cancelled_by": "Скасовано" is ambiguous – in UI it often appears as “Скасовано (ким)”. Consider expanding to something like “Скасовано користувачем”/“Скасовано організатором” to avoid confusion.


122-123: New error keys inconsistent with sibling message
You now have three variants:
hosts_unavailable_for_booking (line 121)
fixed_hosts_unavailable_for_booking
round_robin_hosts_unavailable_for_booking

The first two start with “Деякі…”, the round-robin version starts with “Жоден…”. Make sure the nuance is deliberate – otherwise users may wonder why RR gets dramatically different wording.


965-965: Missing article breaks sentence flow
"multiple_private_links_description": "Створюйте приватні URL-адреси …" – consider adding “декілька” or “кілька” after “створюйте” for a smoother Ukrainian phrase.


3395-3402: Cache operation strings – action/confirmation mismatch
The action key is "delete_cached_data" (“Видалити кешовані дані”) but confirm message says “Видалити кеш”. Consider using the same noun (“кешовані дані”) in both to avoid support tickets about “що саме видалилось?”.


2514-2517: Email-verification copy: casual vs formal
"verify_email": "Підтвердити ел. пошту" is very short. In most Ukrainian UI copy a slightly more formal “Підтвердити електронну адресу” is preferred. Consider length trade-off.

apps/web/public/static/locales/bn/common.json (2)

2173-2175: Minor Bengali wording nitpick

For consistency with the rest of the file, consider using the singular form “সদস্য” only when the string is actually singular.
most_booked_members / least_booked_members are plural, but the translation uses the singular “সদস্য”.
Suggested tweak:

-  "most_booked_members": "সবচেয়ে বেশি বুক করা সদস্য",
-  "least_booked_members": "সবচেয়ে কম বুক করা সদস্য",
+  "most_booked_members": "সবচেয়ে বেশি বুক করা সদস্যরা",
+  "least_booked_members": "সবচেয়ে কম বুক করা সদস্যরা",

2514-2517: Potential key collision with existing verify_email-family keys

"verify_email" is introduced here but the file already contains several closely-named keys (verify_email_button, verify_email_subject, …).
Double-check that this new key is intentional and will not be confused with the button text key; if it is meant to be the generic verb, give it a more specific id (e.g. verify_email_action) to avoid future clash.

apps/web/public/static/locales/sr/common.json (2)

51-54: Consistency with existing Cal Video settings

Earlier keys (enable_automatic_transcription, disable_recording_for_*) use the infinitive form “Omogući / Onemogući …”.
enable_automatic_recording keeps the pattern, but the two new UI-strings below it (edit_event, view_session_details) break the thematic grouping and will be harder to locate later.

51   "enable_automatic_recording": "Omogući automatsko snimanje nakon što se organizator pridruži sastanku",
53   "edit_event": "Izmeni događaj",
54   "view_session_details": "Pregledaj detalje sesije",

Recommendation: move the two UI-centric keys further down (e.g. near the other event/session verbs) to keep feature blocks together.
No functional issue — just maintainability.


965-966: Glossary sync

multiple_private_links_description mentions “privatni URL-ove … sa podesivim ograničenjima”. Earlier similar sentence (line 962) uses “privatni linkovi”. Prefer one term across the file.

apps/web/public/static/locales/zh-CN/common.json (2)

80-80: Minor wording nit-pick.

“取消者”有些生硬,可考虑换成“取消人”或“由谁取消”。
不强制,仅供参考。


2172-2173: Improve phrase brevity.

"按小时统计的预约" 可简化为 "每小时预约数",更贴近仪表盘指标常用表述,且字符更少。

-"bookings_by_hour": "按小时统计的预约",
+"bookings_by_hour": "每小时预约数",
apps/web/public/static/locales/ja/common.json (1)

2362-2366: Minor JP terminology nitpick

“ルーティングファネル” is understandable but “ファネル” tends to be transliterated as “ファネル” (without the small “ン”).
Consider the following diff for consistency with other JP UIs:

-"routing_funnel": "ルーティングファネル",
+"routing_funnel": "ルーティングファネル",
apps/web/public/static/locales/zh-TW/common.json (1)

2173-2174: Prefer keeping the noun to avoid ambiguity

"最多預約" / "最少預約" loses the subject (“成員”).
Consider restoring it for clarity and consistency with similar keys:

-"most_booked_members": "最多預約",
-"least_booked_members": "最少預約",
+"most_booked_members": "最多預約的成員",
+"least_booked_members": "最少預約的成員",
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f991669 and 29b0a6f.

⛔ Files ignored due to path filters (1)
  • i18n.lock is excluded by !**/*.lock
📒 Files selected for processing (36)
  • apps/web/public/static/locales/ar/common.json (13 hunks)
  • apps/web/public/static/locales/az/common.json (13 hunks)
  • apps/web/public/static/locales/bg/common.json (13 hunks)
  • apps/web/public/static/locales/bn/common.json (12 hunks)
  • apps/web/public/static/locales/ca/common.json (13 hunks)
  • apps/web/public/static/locales/cs/common.json (13 hunks)
  • apps/web/public/static/locales/da/common.json (13 hunks)
  • apps/web/public/static/locales/de/common.json (13 hunks)
  • apps/web/public/static/locales/el/common.json (12 hunks)
  • apps/web/public/static/locales/es-419/common.json (13 hunks)
  • apps/web/public/static/locales/es/common.json (13 hunks)
  • apps/web/public/static/locales/et/common.json (13 hunks)
  • apps/web/public/static/locales/eu/common.json (13 hunks)
  • apps/web/public/static/locales/fi/common.json (13 hunks)
  • apps/web/public/static/locales/fr/common.json (13 hunks)
  • apps/web/public/static/locales/he/common.json (13 hunks)
  • apps/web/public/static/locales/hu/common.json (13 hunks)
  • apps/web/public/static/locales/it/common.json (12 hunks)
  • apps/web/public/static/locales/ja/common.json (13 hunks)
  • apps/web/public/static/locales/km/common.json (12 hunks)
  • apps/web/public/static/locales/ko/common.json (12 hunks)
  • apps/web/public/static/locales/nl/common.json (13 hunks)
  • apps/web/public/static/locales/no/common.json (13 hunks)
  • apps/web/public/static/locales/pl/common.json (12 hunks)
  • apps/web/public/static/locales/pt-BR/common.json (13 hunks)
  • apps/web/public/static/locales/pt/common.json (13 hunks)
  • apps/web/public/static/locales/ro/common.json (12 hunks)
  • apps/web/public/static/locales/ru/common.json (13 hunks)
  • apps/web/public/static/locales/sk-SK/common.json (13 hunks)
  • apps/web/public/static/locales/sr/common.json (13 hunks)
  • apps/web/public/static/locales/sv/common.json (13 hunks)
  • apps/web/public/static/locales/tr/common.json (13 hunks)
  • apps/web/public/static/locales/uk/common.json (12 hunks)
  • apps/web/public/static/locales/vi/common.json (13 hunks)
  • apps/web/public/static/locales/zh-CN/common.json (13 hunks)
  • apps/web/public/static/locales/zh-TW/common.json (12 hunks)
🧰 Additional context used
🧠 Learnings (31)
📓 Common learnings
Learnt from: bandhan-majumder
PR: calcom/cal.com#22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.
apps/web/public/static/locales/cs/common.json (2)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.

apps/web/public/static/locales/ko/common.json (2)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.

apps/web/public/static/locales/ru/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/es/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/az/common.json (2)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.

apps/web/public/static/locales/es-419/common.json (2)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.

apps/web/public/static/locales/no/common.json (2)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.

apps/web/public/static/locales/ca/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/sv/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/ar/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/km/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/it/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/da/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/pt-BR/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/tr/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/fr/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/eu/common.json (2)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.

apps/web/public/static/locales/sr/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/bn/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/ro/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/hu/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/pl/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/zh-TW/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/et/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/uk/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/sk-SK/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/bg/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/zh-CN/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/ja/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

apps/web/public/static/locales/pt/common.json (1)

Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Socket Security: Pull Request Alerts
🔇 Additional comments (61)
apps/web/public/static/locales/cs/common.json (3)

122-124: Minor wording – Czech subject–verb agreement

"Někteří z pevně stanovených hostitelů …" is fine, but the second string reads a bit clunky:

-"Žádný z hostitelů Round Robin není k dispozici pro rezervaci."
+"Žádný z hostitelů Round-robin není k dispozici pro rezervaci."

• Adds a non-breaking space after the foreign term
• Keeps consistent capitalisation with the first sentence.
[ suggest_nitpick ]


51-56: Check terminology for “session”

You translated view_session_details as “Zobrazit detaily relace”.
Elsewhere in the UI the project uses „schůzka“ or „jednání“.
Consider unifying:

-"view_session_details": "Zobrazit detaily relace",
+"view_session_details": "Zobrazit podrobnosti schůzky",

Consistency helps users scanning labels.


2205-2208: Good coverage of new payment-error strings

The four Stripe-error messages are idiomatic Czech, keep punctuation and tone consistent with neighbouring entries.

apps/web/public/static/locales/no/common.json (2)

2204-2207: Placeholder check – keep variables intact

Ensure the three new card-error strings keep exactly the same placeholders as the English source ({{amount}}, {{currency}} etc.).
Double-check upstream—any mismatch will break runtime interpolation.
No changes requested if the placeholders are confirmed identical.


2514-2516: Possible duplicate key

Key verify_email is newly added here but there are already multiple verify_email_* entries earlier.
Confirm that plain verify_email does not already exist elsewhere in the same JSON – duplicated keys are silently overridden at runtime.

apps/web/public/static/locales/es-419/common.json (1)

3382-3390: Place-holder consistency & i18n lint
Several newly-added attachment strings embed variables – make sure they keep the double-brace syntax and coincide with the codebase:

  • {{acceptedTypes}}, {{maxSize}} in "file_upload_instructions"
  • {{acceptedTypes}} in "invalid_file_type_extension"

Verify that the frontend really injects those exact tokens (same spelling & case). A mismatch will surface as a raw placeholder in production.

apps/web/public/static/locales/az/common.json (2)

53-54: Plural consistency
Line 54 uses “Sessiya Təfərrüatlarına Bax” (plural “detalları”), while line 53 keeps the singular “Tədbiri redaktə et”. That’s fine, just ensure UI keeps the same noun form everywhere (“Təfərrüat” vs “Təfərrüatlar”).


80-80: OK – context preserved
Key cancelled_by keeps the placeholder-free text. No issues spotted.

apps/web/public/static/locales/ar/common.json (2)

2172-2174: Metric labels translated correctly

Key terms ("bookings_by_hour", "most_booked_members", "least_booked_members") are rendered in natural-sounding Arabic and keep the original business context.
No placeholders are involved, so there’s nothing to break at runtime.


2500-2505: Double-check placeholder spelling

"cache_last_updated": "آخر تحديث: {{timestamp}}"

The placeholder {{timestamp}} matches the English key and is used nowhere else in Arabic strings, so runtime injection is safe.

Just make sure the backend actually sends the same token (timestamp) – any mismatch will surface only at run-time.

apps/web/public/static/locales/es/common.json (6)

53-54: Looks good.

Both new strings are short, clear and correctly capitalised.


80-80: LGTM.

Key-value pair is accurate and keeps the concise style of neighbouring entries.


122-124: Good terminology alignment with existing booking errors.

Translations read naturally and preserve “anfitrión fijo / Round Robin” phrasing used elsewhere.


965-965: Excellent addition.

The description is fluent, matches glossary style and keeps placeholders intact.


2171-2175: Plural consistency check.

Consider harmonising plural forms with earlier analytics keys (e.g. “reservas por hora” vs “reservas por hora” used elsewhere). Not blocking, just ensure there aren’t duplicate keys with slightly different wording.


2179-2181: No issues.

“Eventos” and “Rendimiento” correctly mirror the English originals.

apps/web/public/static/locales/ko/common.json (2)

2173-2175: Pluralisation — keep the “_one / _other” pattern
most_booked_members / least_booked_members are added without the usual ICU plural pair. Other keys use the _one / _other suffix to support proper plural forms (see number_member_one / number_member_other).
If these strings will ever be used with a numeric count, add explicit _one / _other variants now to avoid a breaking translation change later.


3420-3420: Typo guard – ensure sentinel comment remains last
ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS is great, but remember CI fails if new keys accidentally land below it. A unit that asserts this sentinel is last would prevent regressions.

apps/web/public/static/locales/pt-BR/common.json (1)

2172-2176: Plural / singular mismatch in analytic keys

bookings_by_hour, most_booked_members, least_booked_members all refer to plural objects, but events re-introduces a generic plural without a qualifying noun (“Eventos”). At runtime this can collide with other keys named events.

Consider a more specific key (e.g. analytic_events) or keep parity with the English namespace to avoid future collisions.

apps/web/public/static/locales/ro/common.json (9)

51-51: Consistent wording – no action needed

Translation accurately conveys the meaning of the source string.


53-54: Good reuse of imperative form

Editează / Vizualizează follow the same imperative mood already used elsewhere – keeps UX consistent.


122-123: Terminology consistency

gazdele fixe / gazdă Round Robin align with earlier strings – good.


688-688: Role wording is clear

No issues; matches UI terminology.


965-965: Clarity maintained

Sentence flows naturally and keeps glossary terms intact.


2172-2174: Plural agreement – looks correct

All three keys use the right plural forms (membri).


2179-2180: Potential key duplication

Key events is introduced here. Please ensure it isn’t already defined earlier in the same file; JSON parsers allow duplicates but only the last one survives, which can lead to lost translations.


2204-2207: Finance terminology – approved

Messages keep the polite form and give clear guidance.


2515-2517: Error copy consistent

Strings match the surrounding cancellation-flow language.

apps/web/public/static/locales/pl/common.json (3)

51-54: Minor consistency nit – headline capitalisation
Most action labels start with a capital letter (e.g. “Wyłącz nagrywanie…”, “Edytuj wydarzenie”).
"enable_automatic_recording" is translated as “Włącz automatyczne nagrywanie…”, which keeps the style – good.
No change required, just flagging for uniformity.


122-124: Good plurals & phrasing
The newly added round-robin / fixed-host strings are clear and keep terminology (“gospodarze”).


2515-2516: Re-use existing placeholders
proceed_with_cancellation_description & proceed_with_cancellation_error omit any {{email}} placeholder that exists in the English originals.
If the backend inserts the email address, localised string should keep {{email}}:

- "proceed_with_cancellation_description": "Wprowadź adres e-mail użyty do tej rezerwacji, aby kontynuować anulowanie",
+ "proceed_with_cancellation_description": "Wprowadź adres e-mail ({{email}}) użyty do tej rezerwacji, aby kontynuować anulowanie",

Double-check against the source JSON.

apps/web/public/static/locales/pt/common.json (1)

2510-2516: Redundant key – potential future collision.

Key "verify_email" was just added, but several keys with the same semantic domain (verify_email_subject, verify_email_button, etc.) already exist.
Double-check that a generic "verify_email" is indeed required and does not shadow an existing translation in runtime look-ups.

If it’s merely an alias, consider removing it or namespacing (e.g. verify_email_link_title) to prevent accidental overrides.

apps/web/public/static/locales/sv/common.json (2)

3396-3404: Minor wording – adopt consistent cache terminology

Lines mix “cache” (EN) and Swedish. For consistency:

-  "cache_status": "Cache-status",
-  "delete_cached_data": "Radera cachelagrade data",
+  "cache_status": "Cache-status",
+  "delete_cached_data": "Rensa cache",

(Cache-status keeps the tech term while “Rensa cache” is a common Swedish phrase.)


2203-2208: Strings left untranslated – please provide Swedish versions

your_card_was_declined, your_card_does_not_support_this_type_of_purchase,
amount_must_convert_to_at_least, could_not_charge_card are still in English, breaking the language consistency of the file and giving end-users a mixed-language UI.

-  "your_card_was_declined": "Betalningen avslogs. Försök med ett annat kort eller kontakta din bank för hjälp.",
-  "your_card_does_not_support_this_type_of_purchase": "Denna korttyp stöds inte för detta köp. Vänligen använd en annan betalningsmetod.",
-  "amount_must_convert_to_at_least": "Minsta betalningsbelopp är $0,50 USD. Vänligen öka ditt betalningsbelopp.",
-  "could_not_charge_card": "Kunde inte debitera kortet för betalning."
+  "your_card_was_declined": "Ditt kort avslogs. Försök med ett annat kort eller kontakta din bank för hjälp.",
+  "your_card_does_not_support_this_type_of_purchase": "Ditt kort stöder inte den här typen av köp. Välj en annan betalningsmetod.",
+  "amount_must_convert_to_at_least": "Minsta möjliga betalningsbelopp är 0,50 USD. Öka beloppet och försök igen.",
+  "could_not_charge_card": "Det gick inte att debitera kortet."

Likely an incorrect or invalid review comment.

apps/web/public/static/locales/sk-SK/common.json (2)

2362-2365: Routing-funnel keys: check analytics code paths

The four new funnel metrics look good; ensure the BE returns them in the /insights/* responses, otherwise the Slovak UI will fall back to English.


2172-2180: No duplicate keys detected — disregard this comment

I’ve verified the top-level keys in apps/web/public/static/locales/sk-SK/common.json and found no duplicates. You can safely ignore the original concern.

Likely an incorrect or invalid review comment.

apps/web/public/static/locales/bg/common.json (1)

2172-2180: Possible duplicate keys – verify “events” / “performance”.

These identifiers already exist earlier in the file for other strings (they were introduced in older sections around lines 1400-1500).
Having the same key twice in one JSON object will silently override the first value during load – the runtime keeps only the last occurrence.
Double-check whether this override is intentional; if not, rename the new keys (e.g. events_dashboard, performance_kpi) or delete the old ones.

apps/web/public/static/locales/vi/common.json (2)

51-55: Ensure newly-added keys follow existing placeholder conventions

All four additions look fine, but double-check that the {{…}} placeholder names (organizer / session) match the runtime variables expected by the front-end.
A mismatch here will surface as a blank string at runtime and is painful to trace in i18n bundles.
No further action if the variables already exist in the calling code.


3382-3391: File-upload keys: validate placeholder lists

invalid_file_type_extension embeds {{acceptedTypes}}.
Make sure the caller provides a comma-separated Vietnamese list, not an English MIME list – otherwise the message becomes unreadable for end-users.

apps/web/public/static/locales/he/common.json (1)

80-80: Check placeholder coverage

"cancelled_by": "בוטל על ידי" has no placeholder.
If the frontend concatenates a name afterwards ("Cancelled by {{name}}"), everything is OK.
If the English source string already contains a placeholder (e.g. "Cancelled by {{user}}") you need to keep it here as well:

"cancelled_by": "בוטל על-ידי {{user}}"

Please verify against the source keys.

apps/web/public/static/locales/nl/common.json (1)

3382-3390: Attachment-related keys added – double-check size/error text consistency

The new attachment block introduces several messages (file_size_limit_exceed, invalid_file_type, …).
Before wiring them in UI, confirm:

  1. Units are consistent (MB vs MiB) and match backend validation.
  2. acceptedTypes & maxSize placeholders are always provided; otherwise interpolation throws.

No action required in this JSON, but keep an eye during integration tests.

apps/web/public/static/locales/uk/common.json (2)

687-687: Role verbs: keep Edit/View pair uniform
"view_role": "Переглянути роль" is fine, but check screens where "edit_role" (already present) appears – caption style should mirror (“Редагувати роль / Переглянути роль”).


2172-2181: Plural-forms & duplicates in analytics keys

  1. "bookings_by_hour"/"events"/"performance" introduce dashboard captions. If these headings can be plural/singular (e.g. “1 подія”), provide *_one / *_other forms or make wording neutral (“Події”).
  2. Verify that "events" wasn’t defined earlier – duplicate keys overwrite silently.
apps/web/public/static/locales/bn/common.json (1)

3362-3366: ICU placeholder missing

Keys such as "attachment_optional", "send_message" etc. were added above without placeholders, that’s fine, but "remainder_of_maximum_uses_left_plural" / "remainder_of_maximum_use_left_singular" use {{maximum}} and {{remainder}} placeholders.
Double-check that both Bengali strings keep both variables in the same order; currently they do, so ✅.
(No change required – just a heads-up.)

apps/web/public/static/locales/sr/common.json (2)

122-123: Key-name alignment

fixed_hosts_unavailable_for_booking & round_robin_hosts_unavailable_for_booking are fine, but you already expose
hosts_unavailable_for_booking (generic). Make sure caller code picks the more specific key; otherwise the generic
will continue to show.


687-688: Potential duplicate

A generic view_role string exists in several locale files. Quickly grep to ensure we didn’t introduce a duplicate entry earlier in this file; a second occurrence would overwrite the first at runtime.

apps/web/public/static/locales/fi/common.json (2)

3386-3389: No placeholders to add – translations match the English source

Verified the English locale (apps/web/public/static/locales/en/common.json):

  • "file_size_limit_exceed": "File size exceeds limit"
  • "max_files_exceeded": "Maximum number of files exceeded"

Both strings are static (no {{maxSize}} or {{maxFiles}}), so the Finnish entries correctly mirror the source. No change required.

Likely an incorrect or invalid review comment.


2204-2207: No placeholder in English source—translation matches upstream

The English source (apps/web/public/static/locales/en/common.json at line 2206) also hard-codes the amount (“Minimum payment amount is $0.50 USD…”), so the Finnish entry is consistent and correct as is.

  • If you intend to introduce a runtime placeholder (e.g. {{amount}}), first update the English source and then propagate that change to all locale files.

Likely an incorrect or invalid review comment.

apps/web/public/static/locales/zh-CN/common.json (7)

51-51: Translation looks good – no action required.


53-54: Key additions LGTM.

Both new keys are concise and match existing tone/terminology.


122-124: Consistent wording – good job.


687-687: Key reads well – no issues.


965-965: Nice clarity on multiple-link feature.


2179-2181: Potential key collision.

events 与现有大量以 event_* 开头的键语义接近,容易在代码搜索时混淆;
若英文源同样为裸 events 可忽略,否则建议加前缀(如 events_metric)以减少歧义。


3396-3402: Cache-management strings OK, placeholders intact.

apps/web/public/static/locales/ja/common.json (4)

2204-2208: Placeholders preserved – looks good

All new Stripe-related error strings keep the English originals’ lack of placeholders, so nothing is lost in translation.
Wording also follows the existing style guide. 👍


3382-3389: Placeholders correctly mirrored

acceptedTypesmaxSize の両プレースホルダーが日本語訳にも残っており、実行時置換が壊れません。👌
変更なしで OK です。


3395-3400: Variable braces are intact

{{timestamp}} が訳文にもそのまま維持されています。JSON も正当で、誤植なし。
問題なし。


3402-3421: Plural-form variables included – all good

remainder / maximum プレースホルダーが singlular / plural の両方で維持されています。
インターポレーション崩れの心配はありません。

apps/web/public/static/locales/ru/common.json (1)

51-55: No functional problems found in new keys – looks good

All added keys follow the existing naming conventions, include the expected ICU placeholders (where relevant) and keep the JSON valid.

Also applies to: 80-81, 122-124, 688-688, 965-966, 2172-2175, 2180-2181, 2514-2516, 2756-2756

apps/web/public/static/locales/zh-TW/common.json (1)

51-54: LGTM – translations and placeholder syntax look correct

No variable loss, punctuation matches the rest of the file, and keys are new (no duplicates found).
Nice incremental coverage.

Also applies to: 80-80, 122-123, 688-688, 965-965, 2172-2172, 2179-2181, 2514-2517

Comment on lines +2179 to 2181
"events": "Tədbirlər",
"performance": "Performans",
"from_last_period": "son dövrdən",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Key collision risk
New key “events” duplicates an existing base key earlier in the file (line 147 etc.). Different meanings will clash at runtime. Rename (e.g. analytics_events) or namespace.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/az/common.json around lines 2179 to 2181, the
key "events" duplicates an existing key earlier in the file, causing a collision
at runtime. Rename this key to a unique name such as "analytics_events" or add a
namespace prefix to differentiate it from the existing "events" key and avoid
conflicts.

Comment on lines +2204 to 2208
"your_card_was_declined": "Ödəniş rədd edildi. Zəhmət olmasa başqa kart sınayın və ya yardım üçün bankinizlə əlaqə saxlayın.",
"your_card_does_not_support_this_type_of_purchase": "Bu kart növü bu alış üçün dəstəklənmir. Zəhmət olmasa başqa ödəniş üsulu istifadə edin.",
"amount_must_convert_to_at_least": "Minimum ödəniş məbləği 0.50 USD-dir. Zəhmət olmasa ödəniş məbləğinizi artırın.",
"could_not_charge_card": "Ödəniş üçün kartdan pul çıxıla bilmədi.",
"insights": "Görüşlər",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Placeholder lost – will break dynamic amount
Original string amount_must_convert_to_at_least contains a “{{amount}}” placeholder. The translation hard-codes “0.50 USD”, losing runtime flexibility. Keep the token:

- "amount_must_convert_to_at_least": "Minimum ödəniş məbləği 0.50 USD-dir. Zəhmət olmasa ödəniş məbləğinizi artırın.",
+ "amount_must_convert_to_at_least": "Minimum ödəniş məbləği {{amount}}-dir. Zəhmət olmasa ödəniş məbləğinizi artırın.",
📝 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
"your_card_was_declined": "Ödəniş rədd edildi. Zəhmət olmasa başqa kart sınayın və ya yardım üçün bankinizlə əlaqə saxlayın.",
"your_card_does_not_support_this_type_of_purchase": "Bu kart növü bu alış üçün dəstəklənmir. Zəhmət olmasa başqa ödəniş üsulu istifadə edin.",
"amount_must_convert_to_at_least": "Minimum ödəniş məbləği 0.50 USD-dir. Zəhmət olmasa ödəniş məbləğinizi artırın.",
"could_not_charge_card": "Ödəniş üçün kartdan pul çıxıla bilmədi.",
"insights": "Görüşlər",
"your_card_was_declined": "Ödəniş rədd edildi. Zəhmət olmasa başqa kart sınayın və ya yardım üçün bankinizlə əlaqə saxlayın.",
"your_card_does_not_support_this_type_of_purchase": "Bu kart növü bu alış üçün dəstəklənmir. Zəhmət olmasa başqa ödəniş üsulu istifadə edin.",
"amount_must_convert_to_at_least": "Minimum ödəniş məbləği {{amount}}-dir. Zəhmət olmasa ödəniş məbləğinizi artırın.",
"could_not_charge_card": "Ödəniş üçün kartdan pul çıxıla bilmədi.",
"insights": "Görüşlər",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/az/common.json around lines 2204 to 2208, the
translation for "amount_must_convert_to_at_least" has lost the dynamic
"{{amount}}" placeholder and instead hardcodes "0.50 USD". Restore the
"{{amount}}" placeholder in the translated string to maintain runtime
flexibility for different amounts.

Comment on lines 2171 to 2175
"average_event_duration": "গড় ইভেন্টের সময়কাল",
"most_booked_members": "বেশিরভাগ বুক করা সদস্য",
"least_booked_members": "কমপক্ষে বুক করা সদস্য",
"bookings_by_hour": "ঘন্টা অনুসারে বুকিং",
"most_booked_members": "সবচেয়ে বেশি বুক করা সদস্য",
"least_booked_members": "সবচেয়ে কম বুক করা সদস্য",
"events_created": "ইভেন্টগুলি তৈরি",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Duplicate key recent_ratings will shadow the previous value

The key recent_ratings already exists at line 2171 and is re-declared at line 2731.
When this JSON file is parsed the second occurrence silently overwrites the first one – most i18n loaders won’t warn you. Decide which translation is the correct one and delete the other, or merge the wording if both are needed.

-  "recent_ratings": "সাম্প্রতিক রেটিং",
+  // keep *one* of the following, remove the duplicate
+  "recent_ratings": "সাম্প্রতিক রেটিং",

Also applies to: 2729-2733

🤖 Prompt for AI Agents
In apps/web/public/static/locales/bn/common.json between lines 2171 and 2175 and
also around lines 2729 to 2733, the key `recent_ratings` is duplicated, causing
the latter to overwrite the former silently. Review both occurrences of
`recent_ratings`, decide which translation is correct or merge their content if
both are needed, then remove the duplicate key to ensure only one unique
`recent_ratings` entry remains in the JSON file.

"no_show_fee_charged": "Penalització per incompareixença cobrada",
"your_card_was_declined": "Pagament rebutjat. Si us plau, prova amb una targeta diferent o contacta amb el teu banc per obtenir assistència.",
"your_card_does_not_support_this_type_of_purchase": "Aquest tipus de targeta no és compatible amb aquesta compra. Si us plau, utilitza un mètode de pagament diferent.",
"amount_must_convert_to_at_least": "L'import mínim de pagament és de 0,50 USD. Si us plau, augmenta l'import del pagament.",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Hard-coded currency may be wrong at runtime
amount_must_convert_to_at_least bakes “USD” into the message, but the backend might pass a different currency. Keep the string currency-agnostic and rely on the variable interpolation:

-"L'import mínim de pagament és de 0,50 USD. Si us plau, augmenta l'import del pagament."
+"L'import mínim de pagament és de {{minimum, currency}}. Si us plau, augmenta l'import."

(Use the same placeholder the EN source employs, e.g. {{amount, currency}} / {{minimum}}).

📝 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
"amount_must_convert_to_at_least": "L'import mínim de pagament és de 0,50 USD. Si us plau, augmenta l'import del pagament.",
"amount_must_convert_to_at_least": "L'import mínim de pagament és de {{minimum, currency}}. Si us plau, augmenta l'import."
🤖 Prompt for AI Agents
In apps/web/public/static/locales/ca/common.json at line 2206, the message
hard-codes "USD" as the currency, which may be incorrect at runtime. Replace the
fixed "USD" text with a currency placeholder matching the English source, such
as {{amount, currency}} or {{minimum}}, to make the string currency-agnostic and
allow dynamic interpolation of the correct currency value.

Comment on lines +80 to 82
"cancelled_by": "Zrušeno uživatelem",
"cancellation_reason_host": "Důvod zrušení",
"cancellation_reason_placeholder": "Proč rušíte?\n",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Potential placeholder lost in cancelled_by

The English source key often takes a parameter, e.g. "Cancelled by {{user}}".
Your translation hard-codes “uživatelem”, dropping any placeholder.
If the placeholder really exists upstream, the app will render the literal token instead of the user’s name.

-"cancelled_by": "Zrušeno uživatelem",
+"cancelled_by": "Zrušeno uživatelem {{user}}",

Please cross-check the source file and keep the interpolation token intact.

📝 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
"cancelled_by": "Zrušeno uživatelem",
"cancellation_reason_host": "Důvod zrušení",
"cancellation_reason_placeholder": "Proč rušíte?\n",
"cancelled_by": "Zrušeno uživatelem {{user}}",
"cancellation_reason_host": "Důvod zrušení",
"cancellation_reason_placeholder": "Proč rušíte?\n",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/cs/common.json around lines 80 to 82, the
translation for "cancelled_by" hard-codes the word "uživatelem" instead of
preserving the placeholder token from the English source, which likely uses a
parameter like "{{user}}". To fix this, verify the original English key for
"cancelled_by" and update the Czech translation to include the same
interpolation token, ensuring the placeholder is intact for proper dynamic
rendering.

Comment on lines +3403 to 3421
"remainder_of_maximum_use_left_singular": "Залишилось {{remainder}} з {{maximum}} використання",
"expires_on_date": "Термін дії закінчується {{date}}, в кінці дня",
"single_use": "Одноразове використання",
"time_based_expiration": "Обмеження за часом",
"usage_based_expiration": "Обмеження за кількістю використань",
"number_of_uses": "Кількість використань",
"expires_on": "Термін дії закінчується",
"max_usage_count": "Максимальна кількість використань",
"link_settings": "Налаштування посилання",
"link_expired_on_date": "Термін дії цього посилання закінчився {{date}}, в кінці дня",
"usage_limit_reached": "Досягнуто ліміту використань",
"usage_count_error": "Максимальна кількість використань має бути більшою за поточну кількість використань",
"private_link_expired": "Термін дії цього посилання закінчився",
"time_based_expiration_description": "Це посилання можна використовувати для бронювань до кінця {{date}}",
"time_based_generic_expiration_description": "Для цього посилання можна налаштувати закінчення терміну дії після встановленої дати",
"usage_based_expiration_description": "Це посилання можна використати для {{count}} бронювання",
"usage_based_generic_expiration_description": "Для цього посилання можна налаштувати закінчення терміну дії після встановленої кількості бронювань",
"usage_based_expiration_description_plural": "Це посилання можна використати для {{count}} бронювань",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Private-link expiry strings need plural-rules refactor
Keys like "usage_based_expiration_description" vs. "usage_based_expiration_description_plural" mix singular/plural outside the standard i18next _one/_other scheme. This breaks automatic selection and forces manual code. Recommend:

"usage_based_expiration_description_one": "Це посилання можна використати для {{count}} бронювання",
"usage_based_expiration_description_other": "Це посилання можна використати для {{count}} бронювань"

Apply the same pattern to "remainder_of_maximum_use_left_*" etc.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/uk/common.json around lines 3403 to 3421, the
pluralization keys like "usage_based_expiration_description" and
"usage_based_expiration_description_plural" do not follow the i18next standard
of using "_one" and "_other" suffixes for singular and plural forms. To fix
this, rename these keys to use the "_one" and "_other" suffixes, for example,
change "usage_based_expiration_description" to
"usage_based_expiration_description_one" and
"usage_based_expiration_description_plural" to
"usage_based_expiration_description_other". Apply the same renaming pattern to
other similar keys such as "remainder_of_maximum_use_left_singular" and its
plural counterpart to ensure proper automatic pluralization handling by i18next.

"you_can_view_booking_details_with_this_url": "Bạn có thể xem chi tiết đặt chỗ từ đường dẫn này {{url}} và thêm sự kiện vào lịch của bạn",
"no_options_available": "Không tùy chọn nào khả dụng",
"cancellation_reason": "Lý do hủy",
"cancelled_by": "Bị hủy bởi",
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Potential collision with existing key “cancelled_by”

A quick scan shows cancellation_reason_host & friends already present, but not cancelled_by.
If any other locale already defined this key with a different wording, this insertion will silently override when merging bundles.
Verify uniqueness across all locale files.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/vi/common.json at line 80, the key
"cancelled_by" may collide with the same key in other locale files, potentially
causing silent overrides during bundle merges. Review all locale files to
confirm if "cancelled_by" is already defined elsewhere with different
translations. If duplicates exist, rename this key to a unique identifier or
align the translations to avoid conflicts.

Comment on lines +687 to 688
"view_role": "Xem vai trò",
"edit_team": "Chỉnh sửa nhóm",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Duplicate vocabulary check

"view_role" was just introduced – confirm no other key with the same literal exists (e.g. older "view_role" in another block). JSON does not allow duplicate keys; last one wins and the earlier translation will be dropped without warning.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/vi/common.json around lines 687 to 688, there
is a duplicate key "view_role" which can cause earlier translations to be
overwritten silently. Search the entire JSON file for any other occurrences of
the "view_role" key and remove or rename duplicates to ensure each key is unique
and translations are not lost.

Comment on lines +2172 to 2181
"bookings_by_hour": "Lịch hẹn theo giờ",
"most_booked_members": "Thành viên được đặt nhiều nhất",
"least_booked_members": "Thành viên được đặt ít nhất",
"events_created": "Những sự kiện đã tạo",
"events_completed": "Những sự kiện đã hoàn thành",
"events_cancelled": "Các sự kiện đã bị hủy",
"events_rescheduled": "Những sự kiện đã đặt lịch lại",
"events": "Sự kiện",
"performance": "Hiệu suất",
"from_last_period": "từ thời gian gần nhất",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

“events” & “performance” keys already exist earlier – JSON duplicates break build

Both keys are defined much earlier in this file (search lines <150 & ~170).
Node/i18next will silently keep the last occurrence, shadowing the first and causing hard-to-trace disappearances in the UI.

-  "events": "Sự kiện",
-  "performance": "Hiệu suất",
+  "events_insights_tab": "Sự kiện",
+  "performance_insights_tab": "Hiệu suất",

Please rename or remove duplicates before shipping.

📝 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
"bookings_by_hour": "Lịch hẹn theo giờ",
"most_booked_members": "Thành viên được đặt nhiều nhất",
"least_booked_members": "Thành viên được đặt ít nhất",
"events_created": "Những sự kiện đã tạo",
"events_completed": "Những sự kiện đã hoàn thành",
"events_cancelled": "Các sự kiện đã bị hủy",
"events_rescheduled": "Những sự kiện đã đặt lịch lại",
"events": "Sự kiện",
"performance": "Hiệu suất",
"from_last_period": "từ thời gian gần nhất",
"bookings_by_hour": "Lịch hẹn theo giờ",
"most_booked_members": "Thành viên được đặt nhiều nhất",
"least_booked_members": "Thành viên được đặt ít nhất",
"events_created": "Những sự kiện đã tạo",
"events_completed": "Những sự kiện đã hoàn thành",
"events_cancelled": "Các sự kiện đã bị hủy",
"events_rescheduled": "Những sự kiện đã đặt lịch lại",
"events_insights_tab": "Sự kiện",
"performance_insights_tab": "Hiệu suất",
"from_last_period": "từ thời gian gần nhất",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/vi/common.json around lines 2172 to 2181, the
keys "events" and "performance" are duplicates of keys defined earlier in the
file, which breaks the build. Locate the earlier definitions of these keys and
either remove the duplicates in this section or rename these keys to unique
names to avoid shadowing and ensure the UI displays correctly.

Comment on lines +2205 to 2208
"your_card_does_not_support_this_type_of_purchase": "此卡片類型不支援此類購買。請使用其他付款方式。",
"amount_must_convert_to_at_least": "最低付款金額為 0.50 美元。請增加您的付款金額。",
"could_not_charge_card": "無法扣款。",
"insights": "洞察",
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Don’t hard-code amounts – keep the placeholder

The English source uses a dynamic amount placeholder (e.g. {{amount}}).
Hard-coding 0.50 美元 (or omitting the token) breaks future currency/threshold changes and translation parity.

-"amount_must_convert_to_at_least": "最低付款金額為 0.50 美元。請增加您的付款金額。",
+"amount_must_convert_to_at_least": "付款金額至少需達 {{amount}}。請增加付款金額。",

Verify the other three error strings still match upstream placeholders ({{currency}}, etc.) to avoid runtime formatting errors.

📝 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
"your_card_does_not_support_this_type_of_purchase": "此卡片類型不支援此類購買。請使用其他付款方式。",
"amount_must_convert_to_at_least": "最低付款金額為 0.50 美元。請增加您的付款金額。",
"could_not_charge_card": "無法扣款。",
"insights": "洞察",
"your_card_does_not_support_this_type_of_purchase": "此卡片類型不支援此類購買。請使用其他付款方式。",
- "amount_must_convert_to_at_least": "最低付款金額為 0.50 美元。請增加您的付款金額。",
+ "amount_must_convert_to_at_least": "付款金額至少需達 {{amount}}。請增加付款金額。",
"could_not_charge_card": "無法扣款。",
"insights": "洞察",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/zh-TW/common.json around lines 2205 to 2208,
the translation for "amount_must_convert_to_at_least" hard-codes the amount as
"0.50 美元" instead of using the dynamic placeholder {{amount}} as in the English
source. Replace the hard-coded amount with the {{amount}} placeholder to
maintain translation parity and support future currency or threshold changes.
Also, review the other three strings in this section to ensure they correctly
include any required placeholders like {{currency}} to prevent runtime
formatting errors.

@emrysal
Copy link
Contributor

emrysal commented Jul 24, 2025

Closing this due to merge conflicts, I reckon it'll reopen with latest translations.

@emrysal emrysal closed this Jul 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

core area: core, team members only foundation i18n area: i18n, translations

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants