Skip to content

Comments

feat: update translations via @LingoDotDev#23528

Merged
keithwillcode merged 1 commit intomainfrom
lingo.dev/main
Sep 3, 2025
Merged

feat: update translations via @LingoDotDev#23528
keithwillcode merged 1 commit intomainfrom
lingo.dev/main

Conversation

@calcom-bot
Copy link
Collaborator

@calcom-bot calcom-bot commented Sep 2, 2025

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 Sep 2, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

2 Skipped Deployments
Project Deployment Preview Comments Updated (UTC)
cal Ignored Ignored Sep 3, 2025 9:54am
cal-eu Ignored Ignored Sep 3, 2025 9:54am

@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 Sep 2, 2025

Walkthrough

Renames the i18n key round_robin_hosts_unavailable_for_bookinground_robin_host_unavailable_for_booking and adds a large set of new translation keys across apps/web/public/static/locales//common.json files. New keys cover SIP/telephony (termination_uri, sip_trunk_ , phone number flows), Cal AI agent/test-call flows, OAuth client management, PBAC permission descriptors, webhook_* event metadata, onboarding/setup prompts, round‑robin/group helpers, booking analytics (most/least bookings), and template variables (timezone/location/notes/rating/no_show). PBAC entries are reorganized into workflow-specific descriptors.

Possibly related PRs

✨ 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

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 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.
    • 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.
  • 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 the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

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

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore or @coderabbit 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.

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • 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 September 2, 2025 23:54
@keithwillcode keithwillcode added core area: core, team members only foundation labels Sep 2, 2025
@dosubot dosubot bot added the i18n area: i18n, translations label Sep 2, 2025
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: 26

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
apps/web/public/static/locales/hu/common.json (1)

267-267: Replace “Cal.ai” in every locale’s common.json with the new brand token.
Grep uncovered “Cal.ai” in apps/web/public/static/locales/*/common.json (e.g. zh-CN, zh-TW, tr, vi, ro, pt/pt-BR, pl, nl, no, ja, ko, hu, it, he, km, fr, eu, et, es/es-419, en, el, de, da, cs, ca, bn, bg, az, sk-SK, ru, fi, uk, ar, sv, sr).

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

1178-1178: Untranslated string in Finnish locale.

Leftover English: “Set the calendars to check for conflicts to prevent double bookings.” Please translate.

-  "installed_app_calendar_description": "Set the calendars to check for conflicts to prevent double bookings.",
+  "installed_app_calendar_description": "Määritä kalenterit, joista tarkistetaan päällekkäisyydet kaksoisvarausten estämiseksi.",

2745-2749: Multiple email invite strings still in English.

These are user-facing and should be localized.

-  "email_team_invite|content|added_to_subteam": "{{invitedBy}} has added you to the team <strong>{{teamName}}</strong> in their organization {{parentTeamName}}. {{appName}} is the event-juggling scheduler that enables you and your team to schedule meetings without the email tennis.",
-  "email_team_invite|content|invited_to_subteam": "{{invitedBy}} has invited you to join the team <strong>{{teamName}}</strong> in their organization {{parentTeamName}}. {{appName}} is the event-juggling scheduler that enables you and your team to schedule meetings without the email tennis.",
-  "email_team_invite|content|invited_to_regular_team": "{{invitedBy}} has invited you to join their team {{teamName}} on {{appName}}. {{appName}} is the event-juggling scheduler that enables you and your team to schedule meetings without the email tennis.",
+  "email_team_invite|content|added_to_subteam": "{{invitedBy}} on lisännyt sinut tiimiin <strong>{{teamName}}</strong> organisaatiossaan {{parentTeamName}}. {{appName}} on ajanvaraus­työkalu, jonka avulla sinä ja tiimisi voitte sopia tapaamisia ilman loputonta sähköpostirumbaa.",
+  "email_team_invite|content|invited_to_subteam": "{{invitedBy}} on kutsunut sinut liittymään tiimiin <strong>{{teamName}}</strong> organisaatiossaan {{parentTeamName}}. {{appName}} on ajanvaraus­työkalu, jonka avulla sinä ja tiimisi voitte sopia tapaamisia ilman loputonta sähköpostirumbaa.",
+  "email_team_invite|content|invited_to_regular_team": "{{invitedBy}} on kutsunut sinut liittymään tiimiinsä {{teamName}} palvelussa {{appName}}. {{appName}} on ajanvaraus­työkalu, jonka avulla sinä ja tiimisi voitte sopia tapaamisia ilman loputonta sähköpostirumbaa.",
apps/web/public/static/locales/el/common.json (1)

2744-2749: Untranslated English sentences in the Greek locale

These remain in English; propose Greek translations for consistency.

-  "email_team_invite|content|added_to_org": "{{invitedBy}} has added you to the <strong>{{teamName}}</strong> organization.",
-  "email_team_invite|content|invited_to_org": "{{invitedBy}} has invited you to join the {{teamName}} organization.",
-  "email_team_invite|content|added_to_subteam": "{{invitedBy}} has added you to the team <strong>{{teamName}}</strong> in their organization {{parentTeamName}}. {{appName}} is the event-juggling scheduler that enables you and your team to schedule meetings without the email tennis.",
-  "email_team_invite|content|invited_to_subteam": "{{invitedBy}} has invited you to join the team <strong>{{teamName}}</strong> in their organization {{parentTeamName}}. {{appName}} is the event-juggling scheduler that enables you and your team to schedule meetings without the email tennis.",
-  "email_team_invite|content|invited_to_regular_team": "{{invitedBy}} has invited you to join their team {{teamName}} on {{appName}}. {{appName}} is the event-juggling scheduler that enables you and your team to schedule meetings without the email tennis.",
+  "email_team_invite|content|added_to_org": "Ο/Η {{invitedBy}} σας πρόσθεσε στον οργανισμό <strong>{{teamName}}</strong>.",
+  "email_team_invite|content|invited_to_org": "Ο/Η {{invitedBy}} σας προσκάλεσε να συμμετάσχετε στον οργανισμό {{teamName}}.",
+  "email_team_invite|content|added_to_subteam": "Ο/Η {{invitedBy}} σας πρόσθεσε στην ομάδα <strong>{{teamName}}</strong> του οργανισμού {{parentTeamName}}. Το {{appName}} είναι ο προγραμματιστής συναντήσεων που σας βοηθά να κλείνετε ραντεβού χωρίς ατελείωτα email.",
+  "email_team_invite|content|invited_to_subteam": "Ο/Η {{invitedBy}} σας προσκάλεσε να συμμετάσχετε στην ομάδα <strong>{{teamName}}</strong> του οργανισμού {{parentTeamName}}. Το {{appName}} είναι ο προγραμματιστής συναντήσεων που σας βοηθά να κλείνετε ραντεβού χωρίς ατελείωτα email.",
+  "email_team_invite|content|invited_to_regular_team": "Ο/Η {{invitedBy}} σας προσκάλεσε να συμμετάσχετε στην ομάδα {{teamName}} στο {{appName}}. Το {{appName}} είναι ο προγραμματιστής συναντήσεων που σας βοηθά να κλείνετε ραντεβού χωρίς ατελείωτα email.",
apps/web/public/static/locales/cs/common.json (1)

1-3595: Fix localization for “workflow” and standardize brand naming

  • JSON is valid; no malformed placeholders or double braces.
  • Translate all English “workflow” occurrences to Czech “pracovní postup” (e.g. workflow_validation_failed, workflow_automation_description, create_new_workflow_agent, atd.).
  • Unify brand terminology: replace “cal.ai”/“Cal.ai” variants with “Cal AI” throughout the file.

Comment on lines +2345 to 2346
"use_our_headless_routing_api": "Použijte naše bezstavové směrovací API a vlastní formulář pro odesílání.",
"need_help_embedding": "Potřebujete pomoc? Prohlédněte si naše průvodce pro vložení Cal do Wixu, Squarespace nebo WordPressu, podívejte se na naše nejčastější dotazy nebo prozkoumejte pokročilé možnosti vložení.",
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

“Headless” mistranslated as “bezstavové” (stateless)

“Headless” = “bez UI” (or “bezhlavé”), not stateless. Update to avoid confusion.

-  "use_our_headless_routing_api": "Použijte naše bezstavové směrovací API a vlastní formulář pro odesílání.",
+  "use_our_headless_routing_api": "Použijte naše bez‑UI směrovací API a vlastní formulář pro odesílá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
"use_our_headless_routing_api": "Použijte naše bezstavové směrovací API a vlastní formulář pro odesílání.",
"need_help_embedding": "Potřebujete pomoc? Prohlédněte si naše průvodce pro vložení Cal do Wixu, Squarespace nebo WordPressu, podívejte se na naše nejčastější dotazy nebo prozkoumejte pokročilé možnosti vložení.",
"use_our_headless_routing_api": "Použijte naše bez-UI směrovací API a vlastní formulář pro odesílání.",
"need_help_embedding": "Potřebujete pomoc? Prohlédněte si naše průvodce pro vločení Cal do Wixu, Squarespace nebo WordPressu, podívejte se na naše nejčastější dotazy nebo prozkoumejte pokročilé možnosti vložení.",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/cs/common.json around lines 2345 to 2346 the
English “Headless” was mistranslated as “bezstavové” (stateless); update the
value for "use_our_headless_routing_api" to use a correct Czech term such as
“bezhlavé” or “bez UI” to indicate headless (no UI) rather than stateless,
keeping the rest of the sentence unchanged.

Comment on lines 2829 to 2830
"no_show_url_info": "The URL for No Show Feedback",
"no_support_needed": "Kas tuge pole vaja?",
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

Leftover English string.

Translate “no_show_url_info”.

   "no_show_url_variable": "Mitteosalemise URL",
-  "no_show_url_info": "The URL for No Show Feedback",
+  "no_show_url_info": "URL mitteilmumise tagasiside vormi jaoks",
📝 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
"no_show_url_info": "The URL for No Show Feedback",
"no_support_needed": "Kas tuge pole vaja?",
"no_show_url_variable": "Mitteosalemise URL",
"no_show_url_info": "URL mitteilmumise tagasiside vormi jaoks",
"no_support_needed": "Kas tuge pole vaja?",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/et/common.json around lines 2829-2830 the key
"no_show_url_info" currently contains an English placeholder; replace its value
with the correct Estonian translation. Edit the JSON entry so the value is an
Estonian string conveying "The URL for No Show Feedback" (for example:
"Mitteilmumise tagasiside URL") ensuring proper JSON quoting and punctuation.

"hosts_unavailable_for_booking": "Valaki a szervezők közül nem elérhető foglalásra.",
"fixed_hosts_unavailable_for_booking": "Néhány rögzített házigazda nem érhető el foglalásra.",
"round_robin_hosts_unavailable_for_booking": "Nincs elérhető körforgó házigazda a foglaláshoz.",
"round_robin_host_unavailable_for_booking": "A körforgó házigazda nem elérhető foglalásra.",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Verify callers migrated to the renamed key.

Ensure no code still references the old key “round_robin_hosts_unavailable_for_booking”.

Run from repo root:


🏁 Script executed:

#!/bin/bash
set -euo pipefail
# 1) Check for old key usage anywhere (TS/TSX/JS/JSON)
rg -nP "round_robin_hosts_unavailable_for_booking" -S -g '!**/node_modules/**' || echo "No old key references found."

# 2) Sanity-check all locale files define the new key
fd common.json apps/web/public/static/locales \
  | xargs -I{} jq -er 'has("round_robin_host_unavailable_for_booking")' {} >/dev/null \
  && echo "All locales include new key (jq check passed)" \
  || echo "One or more locales missing new key"

Length of output: 371


🏁 Script executed:

#!/bin/bash
set -euo pipefail
echo "Locales missing new key definitions:"
fd common.json apps/web/public/static/locales \
  | while read file; do
      if ! jq -e 'has("round_robin_host_unavailable_for_booking")' "$file" >/dev/null; then
          echo "$file"
      fi
    done

Length of output: 5975


Add missing translation keys in all locales
The new key round_robin_host_unavailable_for_booking is absent in these locale files, so translation lookups will fail for those languages. Please add appropriate entries under apps/web/public/static/locales/*/common.json for:

  • hr
  • id
  • iw
  • lv
  • sk
  • ta
  • th

"account_already_linked": "アカウントは既にリンクされています",
"send_email": "メールを送信",
"cal_ai_phone_call_action": "Cal.ai音声エージェントを使用して参加者に電話する",
"cal_ai_agent_configuration": "Cal.aiエージェント設定",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Request verification: cross-locale/keys consistency

  • Confirm all locales use the same branding for “Cal AI” (not “Cal.ai”) and telephony term “終端 URI”.
  • Ensure the old key round_robin_hosts_unavailable_for_booking is fully removed/unused across the codebase.

You can grep the repo to verify:

Also applies to: 807-807, 821-821


🏁 Script executed:

#!/bin/bash
# Check inconsistent branding
rg -nP 'Cal\.ai|Cal AI' apps/web/public/static/locales -S

# Check telephony term consistency in JA
rg -nP '終端 ?URI|ターミネーションURI' apps/web/public/static/locales/ja -S

# Find any remaining old key usages
rg -nP 'round_robin_hosts_unavailable_for_booking' -S

Length of output: 48841


Update translation strings for consistent branding and telephony term

  • Replace all “Cal.ai” with “Cal AI” in apps/web/public/static/locales/*/common.json
  • In ja/common.json, unify on “終端 URI” (with space) and replace the “ターミネーションURI” instance in learn_how_to_get_your_terminator (and ensure termination_uri and termination_uri_info_tooltip use “終端 URI”)
  • The old key round_robin_hosts_unavailable_for_booking has been fully removed 🚀
🤖 Prompt for AI Agents
In apps/web/public/static/locales/ja/common.json around line 2716, update
branding and telephony terms: replace "Cal.ai" with "Cal AI" wherever it appears
(including the key at line 2716), change any instance of "ターミネーションURI" to "終端
URI" (with a space) specifically in the value for
learn_how_to_get_your_terminator and ensure the keys termination_uri and
termination_uri_info_tooltip use "終端 URI" wording consistently, and remove the
obsolete key round_robin_hosts_unavailable_for_booking entirely if present.

"open": "Öppna",
"close": "Stäng",
"upgrade": "Uppgradera",
"buy_us_number_button": "Köp ett amerikanskt nummer för {{priceInDollars}}$/månad",
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

Currency placeholder order bug ($ after number).

“{{priceInDollars}}$/månad” will read awkwardly. Use $ before placeholder to match other strings (e.g., line 885).

-  "buy_us_number_button": "Köp ett amerikanskt nummer för {{priceInDollars}}$/månad",
+  "buy_us_number_button": "Köp ett amerikanskt nummer för ${{priceInDollars}}/månad",
📝 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
"buy_us_number_button": "Köp ett amerikanskt nummer för {{priceInDollars}}$/månad",
"buy_us_number_button": "Köp ett amerikanskt nummer för ${{priceInDollars}}/månad",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/sv/common.json around line 1541, the currency
symbol is placed after the placeholder ("{{priceInDollars}}$/månad"), which
reads awkwardly and is inconsistent with other entries; update the string to
place the dollar sign before the placeholder (e.g., "${{priceInDollars}}/månad")
so formatting matches line 885 and other translations, preserving the
placeholder name exactly and keeping surrounding text unchanged.

"hosts_unavailable_for_booking": "Bazı ev sahipleri rezervasyon için müsait değil.",
"fixed_hosts_unavailable_for_booking": "Bazı sabit ev sahipleri rezervasyon için uygun değil.",
"round_robin_hosts_unavailable_for_booking": "Rezervasyon için hiçbir Sırayla Değişen ev sahibi uygun değil.",
"round_robin_host_unavailable_for_booking": "Round Robin sunucusu rezervasyon için uygun değil.",
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

Fix mistranslation: “host” ≠ “sunucu”

Use “ev sahibi” (not “sunucu”) for round-robin host.

Apply:

-  "round_robin_host_unavailable_for_booking": "Round Robin sunucusu rezervasyon için uygun değil.",
+  "round_robin_host_unavailable_for_booking": "Round robin ev sahibi rezervasyon için uygun değil.",
📝 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
"round_robin_host_unavailable_for_booking": "Round Robin sunucusu rezervasyon için uygun değil.",
"round_robin_host_unavailable_for_booking": "Round robin ev sahibi rezervasyon için uygun değil.",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/tr/common.json around line 123 the translation
uses “sunucu” for “host”; change the value to use “ev sahibi” instead so the key
"round_robin_host_unavailable_for_booking" reads with “ev sahibi” (e.g., replace
"Round Robin sunucusu rezervasyon için uygun değil." with the same sentence
using "ev sahibi").

"open": "Відкрити",
"close": "Закрити",
"upgrade": "Перейти",
"buy_us_number_button": "Купити номер США за {{priceInDollars}}$/місяць",
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

Currency placement fix.

Use $ before the amount to match English source and common UA style (“$10/місяць”), not “10$/місяць”.

-  "buy_us_number_button": "Купити номер США за {{priceInDollars}}$/місяць",
+  "buy_us_number_button": "Купити номер США за ${{priceInDollars}}/місяць",
📝 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
"buy_us_number_button": "Купити номер США за {{priceInDollars}}$/місяць",
"buy_us_number_button": "Купити номер США за ${{priceInDollars}}/місяць",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/uk/common.json around line 1541, the currency
symbol is placed after the amount ("{{priceInDollars}}$/місяць"); update the
translation value so the dollar sign precedes the variable (e.g., "Купити номер
США за ${{priceInDollars}}/місяць") with no extra spaces, and save the JSON
ensuring it remains valid.

"hosts_unavailable_for_booking": "有些主持人无法预订。",
"fixed_hosts_unavailable_for_booking": "部分固定主持人无法进行预约。",
"round_robin_hosts_unavailable_for_booking": "没有轮流主持人可供预约。",
"round_robin_host_unavailable_for_booking": "轮询主持人当前不可预订。",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Repo-wide verification for key rename and brand consistency.

  • Ensure the old key round_robin_hosts_unavailable_for_booking is no longer referenced.
  • Find any remaining “Cal AI” vs “Cal.ai” mismatches.
  • Optionally scan for duplicate JSON keys in this file.

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "1) Check for old key usages:"
rg -n --hidden -S "\bround_robin_hosts_unavailable_for_booking\b" || echo "No old key references found."

echo -e "\n2) Check brand casing inconsistencies in locales and UI:"
rg -n --hidden -S "Cal AI|cal.ai" apps/web/public/static/locales zh packages apps

echo -e "\n3) Detect duplicate keys in this JSON (best-effort):"
python - << 'PY'
import re, sys, json
from collections import defaultdict
p = "apps/web/public/static/locales/zh-CN/common.json"
text = open(p, 'r', encoding='utf-8').read()
# naive key scan
keys = re.findall(r'^\s*"([^"]+)"\s*:', text, flags=re.M)
counts = defaultdict(int)
for k in keys: counts[k]+=1
dups = [k for k,c in counts.items() if c>1]
print("Duplicate keys:" , dups if dups else "None")
# sanity: check unmatched handlebars
opens = text.count('{{'); closes = text.count('}}')
print(f"Handlebars placeholders balanced? {{opens}}={{ {opens} }}, {{closes}}={{ {closes} }} ->", "OK" if opens==closes else "UNBALANCED")
PY

Length of output: 132780


Repo-wide key and brand consistency check

  • No references to the old key round_robin_hosts_unavailable_for_booking remain.
  • Found numerous “Cal AI” vs “Cal.ai” inconsistencies across locale and code files; standardize all occurrences to “Cal.ai”.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/zh-CN/common.json around line 123, the locale
key was normalized to "round_robin_host_unavailable_for_booking" but the repo
may still contain references to the old key
"round_robin_hosts_unavailable_for_booking" and inconsistent brand mentions; run
a repo-wide search for "round_robin_hosts_unavailable_for_booking" and replace
any occurrences with "round_robin_host_unavailable_for_booking" (or add a
mapping/alias if backward compatibility is required), then search for all
occurrences of "Cal AI", "CalAI", or other variants and standardize them to
"Cal.ai" across locale and code files, updating translations where necessary and
ensuring tests/consumers use the updated key and brand string.

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: 33

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
apps/web/public/static/locales/km/common.json (4)

1211-1211: Remove Vietnamese text; replace with Khmer (or EN fallback).

Key enterprise_license_locally is Vietnamese, not Khmer. This is a user-facing string and must be localized correctly.

Apply this diff (fallback to English if Khmer translation isn’t ready):

-"enterprise_license_locally": "Bạn có thể thử tính năng này tại địa phương nhưng không phải trên môi trường sản xuất.",
+"enterprise_license_locally": "អ្នកអាចសាកល្បងមុខងារនេះក្នុងបរិស្ថានមូលដ្ឋាន ប៉ុន្តែមិននៅលើបរិស្ថានផលិតកម្មទេ។"

1594-1594: Fix non-Khmer (Vietnamese) string.

Key apply_to_all_event_types contains Vietnamese. Replace with Khmer (or EN fallback).

-"apply_to_all_event_types": "Áp dụng cho tất cả, bao gồm cả các loại sự kiện trong tương lai",
+"apply_to_all_event_types": "អនុវត្តចំពោះទាំងអស់ រួមទាំងប្រភេទព្រឹត្តិការណ៍អនាគត"

2722-2725: Replace Vietnamese with Khmer for travel schedule strings.

Keys travel_schedule, travel_schedule_description, schedule_timezone_change are Vietnamese.

-"travel_schedule": "ការ lên lịch trình du lịch",
-"travel_schedule_description": "Lập kế hoạch chuyến đi của bạn trước để giữ lịch trình hiện tại của bạn ở múi giờ khác và tránh bị đặt chỗ vào nửa đêm.",
-"schedule_timezone_change": "Thay đổi múi giờ lịch trình",
+"travel_schedule": "កាលវិភាគធ្វើដំណើរ",
+"travel_schedule_description": "រៀបចំដំណើររបស់អ្នកជាមុន ដើម្បីរក្សាកាលវិភាគបច្ចុប្បន្ននៅក្នុងតំបន់ពេលវេលាផ្សេង និងជៀសវាងការកក់ពាក់កណ្តាលយប់។",
+"schedule_timezone_change": "ផ្លាស់ប្តូរតំបន់ពេលវេលាកាលវិភាគ",

Also fix:

-"schedule_tz_without_end_date": "Lịch trình múi giờ không có ngày kết thúc",
+"schedule_tz_without_end_date": "កាលវិភាគតំបន់ពេលវេលាដោយគ្មានថ្ងៃបញ្ចប់",

2809-2816: Multiple OOO keys are Vietnamese; localize to Khmer.

Keys like ooo_not_forwarding, ooo_empty_title, ooo_empty_description, ooo_user_is_ooo, ooo_slots_returning, ooo_slots_book_with, ooo_select_reason contain Vietnamese.

Example fixes (adjust wording as needed):

-"ooo_not_forwarding": "Không chuyển tiếp",
+"ooo_not_forwarding": "មិនបញ្ជូនបន្ត",
-"ooo_empty_title": "Tạo một OOO",
+"ooo_empty_title": "បង្កើតស្ថានភាព OOO",
-"ooo_empty_description": "Thông báo cho người đặt chỗ của bạn khi bạn không thể nhận đặt chỗ. Họ vẫn có thể đặt chỗ cho bạn khi bạn trở lại hoặc bạn có thể chuyển tiếp họ đến thành viên trong đội.",
+"ooo_empty_description": "ជូនដំណឹងដល់អ្នកកក់នៅពេលអ្នកមិនអាចទទួលការកក់បាន។ ពួកគេអាចកក់ម្ដងទៀតនៅពេលអ្នកត្រឡប់ជាប្រចាំ ឬបញ្ជូនបន្តទៅសមាជិកក្រុមផ្សេងទៀត។",
-"ooo_user_is_ooo": "{{displayName}} đang là OOO",
+"ooo_user_is_ooo": "{{displayName}} កំពុង OOO",
-"ooo_slots_returning": "<0>{{displayName}}</0> có thể tham dự cuộc họp của họ khi họ đang vắng mặt.",
+"ooo_slots_returning": "<0>{{displayName}}</0> នឹងអាចចូលរួមការប្រជុំបាននៅពេលត្រឡប់។",
-"ooo_slots_book_with": "Đặt chỗ với {{displayName}}",
+"ooo_slots_book_with": "កក់ជាមួយ {{displayName}}",
-"ooo_select_reason": "Chọn lý do",
+"ooo_select_reason": "ជ្រើសមូលហេតុ",
apps/web/public/static/locales/sr/common.json (1)

807-891: Correct translation typos and brand casing

  • buy_a_phone_number_or_import_one_you_already_have: capitalize “Twilio” in the value.
  • cal_ai_assistant, cal_ai_phone_numbers, cal_ai_phone_numbers_description, import_phone_number_description: replace “Cal AI” with “Cal.ai” for consistent brand usage.
  • buy_us_number_button: change “US broj” to “američki broj” to match existing terminology.
♻️ Duplicate comments (20)
apps/web/public/static/locales/no/common.json (1)

1541-1541: Currency formatting bug (“$” after amount) in buy_us_number_button

-  "buy_us_number_button": "Kjøp US-nummer for {{priceInDollars}}$/måned",
+  "buy_us_number_button": "Kjøp et US-nummer for ${{priceInDollars}} per måned",
apps/web/public/static/locales/et/common.json (1)

2827-2830: Leftover English and terminology alignment (“no-show”).

Translate “no_show_url_info” and keep “mitteilmumine” consistent with nearby strings.

   "rating_url_variable": "Hinnangu URL",
   "rating_url_info": "URL reitingu tagasiside vormi jaoks",
   "no_show_url_variable": "Mitteosalemise URL",
-  "no_show_url_info": "The URL for No Show Feedback",
+  "no_show_url_info": "Mitteilmumise tagasiside URL",
apps/web/public/static/locales/uk/common.json (1)

1541-1541: Currency placement fix (duplicate of earlier review).

Place $ before the amount.

-  "buy_us_number_button": "Купити номер США за {{priceInDollars}}$/місяць",
+  "buy_us_number_button": "Купити номер США за ${{priceInDollars}}/місяць",
apps/web/public/static/locales/ro/common.json (1)

1541-1541: Fix currency placeholder position and switch to polite tone.

Keep $ before the variable and use “Cumpărați …” to match the rest of the locale.

-  "buy_us_number_button": "Cumpără un număr din SUA pentru {{priceInDollars}}$/lună",
+  "buy_us_number_button": "Cumpărați un număr din SUA pentru ${{priceInDollars}}/lună",
apps/web/public/static/locales/tr/common.json (1)

123-123: Fix “host” mistranslation and casing consistency.

Use “ev sahibi” instead of “sunucu” and prefer “round robin” in sentence case to match the rest of the locale.

-  "round_robin_host_unavailable_for_booking": "Round Robin sunucusu rezervasyon için uygun değil.",
+  "round_robin_host_unavailable_for_booking": "Round robin ev sahibi rezervasyon için uygun değil.",
apps/web/public/static/locales/sv/common.json (1)

1541-1541: Currency placeholder order bug ($ after number).

Same as previously flagged; move $ before placeholder for consistency with other strings.

-  "buy_us_number_button": "Köp ett amerikanskt nummer för {{priceInDollars}}$/månad",
+  "buy_us_number_button": "Köp ett amerikanskt nummer för ${{priceInDollars}}/månad",
apps/web/public/static/locales/km/common.json (1)

866-874: Branding “Cal.ai” vs “Cal AI” — looks aligned; verify across EN and KM.

Khmer strings mirror “Cal.ai” for agent/config/action and “Cal AI” for phone-numbers. Confirm against English to avoid regressions.

#!/bin/bash
# Compare EN vs KM branding for cal_ai* keys
paste -d ' | ' \
  <(rg -n '^\\s*"cal_ai_.*":' apps/web/public/static/locales/en/common.json) \
  <(rg -n '^\\s*"cal_ai_.*":' apps/web/public/static/locales/km/common.json)

Also applies to: 2715-2718

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

807-825: SIP/telephony terminology: use standard terms (Termination URI, Elastic SIP).

Current strings read awkward (“종료 URI”, “탄력적 SIP”). Use recognized terminology.

-  "termination_uri": "종료 URI",
+  "termination_uri": "종단(termination) URI",
-  "sip_trunk_username": "SIP 트렁크 사용자 이름",
+  "sip_trunk_username": "SIP 트렁크 사용자명",
-  "sip_trunk_password": "SIP 트렁크 비밀번호",
+  "sip_trunk_password": "SIP 트렁크 비밀번호",
-  "phone_number_imported_successfully": "전화번호가 성공적으로 가져와져 에이전트에 연결되었습니다",
+  "phone_number_imported_successfully": "전화번호를 성공적으로 가져와 에이전트에 연결했습니다",
-  "phone_number_deleted_successfully": "전화번호가 성공적으로 삭제되었습니다",
+  "phone_number_deleted_successfully": "전화번호를 성공적으로 삭제했습니다",
-  "termination_uri_info_tooltip": "탄력적 SIP 트렁크를 고유하게 식별하는 종료 URI입니다. 이는 발신 통화에 사용됩니다. Twilio 탄력적 SIP 트렁크의 경우 항상 .pstn.twilio.com으로 끝납니다.",
+  "termination_uri_info_tooltip": "Elastic SIP Trunking을 고유하게 식별하는 Termination URI입니다. 발신 통화에 사용되며, Twilio의 경우 항상 .pstn.twilio.com으로 끝납니다.",
-  "sip_trunk_username_info_tooltip": "SIP 트렁크 인증에 사용되는 사용자 이름입니다.",
+  "sip_trunk_username_info_tooltip": "SIP 트렁크 인증에 사용하는 사용자명입니다.",
-  "sip_trunk_password_info_tooltip": "SIP 트렁크 인증에 사용되는 비밀번호입니다.",
+  "sip_trunk_password_info_tooltip": "SIP 트렁크 인증에 사용하는 비밀번호입니다."

851-874: Brand casing: standardize to “Cal AI”.

Strings mix “Cal.ai” and “Cal AI”. Apply single style “Cal AI”.

-  "create_new_workflow_agent": "새 워크플로우 cal.ai 음성 에이전트 만들기",
-  "create_new_workflow_agent_description": "워크플로우를 자동화할 새 워크플로우 cal.ai 음성 에이전트 만들기",
+  "create_new_workflow_agent": "새 워크플로 Cal AI 음성 에이전트 만들기",
+  "create_new_workflow_agent_description": "워크플로를 자동화할 새 워크플로 Cal AI 음성 에이전트 만들기",
-  "cal_ai_agent": "Cal.ai 에이전트",
-  "test_cal_ai_agent": "Cal.ai 에이전트 테스트",
+  "cal_ai_agent": "Cal AI 에이전트",
+  "test_cal_ai_agent": "Cal AI 에이전트 테스트",
-  "cal_ai_phone_numbers_description": "Cal AI 전화번호 관리하기",
+  "cal_ai_phone_numbers_description": "Cal AI 전화번호 관리",
-  "cal_ai_phone_call_action": "Cal.ai 음성 에이전트를 사용하여 참석자에게 전화하기",
+  "cal_ai_phone_call_action": "Cal AI 음성 에이전트로 참석자에게 전화하기",
-  "import_phone_number_description": "Cal AI Phone에서 사용할 Twilio 전화번호 가져오기",
+  "import_phone_number_description": "Cal AI Phone에서 사용할 Twilio 전화번호 가져오기"

If your brand guide prefers “Cal.ai”, I can flip these and batch-generate a patch across ko/* accordingly.

Also applies to: 866-868


2715-2717: Brand casing again in later section.

Mirror earlier “Cal AI” fix.

-  "cal_ai_phone_call_action": "Cal.ai 음성 에이전트를 사용하여 참석자에게 전화하기",
-  "cal_ai_agent_configuration": "Cal.ai 에이전트 구성",
+  "cal_ai_phone_call_action": "Cal AI 음성 에이전트로 참석자에게 전화하기",
+  "cal_ai_agent_configuration": "Cal AI 에이전트 구성",
apps/web/public/static/locales/pt-BR/common.json (3)

849-891: Normalize brand to “Cal AI” (consistency).

Substitua “Cal.ai” por “Cal AI” nestas chaves do bloco.

Aplicar:

- "create_new_workflow_agent": "Criar novo agente de voz cal.ai para fluxo de trabalho",
- "create_new_workflow_agent_description": "Crie um novo agente de voz cal.ai para fluxo de trabalho para automatizar seus processos",
+ "create_new_workflow_agent": "Criar novo agente de voz Cal AI para fluxo de trabalho",
+ "create_new_workflow_agent_description": "Crie um novo agente de voz Cal AI para fluxo de trabalho para automatizar seus processos",

- "cal_ai_agent": "Agente Cal.ai",
- "test_cal_ai_agent": "Testar agente Cal.ai",
+ "cal_ai_agent": "Agente Cal AI",
+ "test_cal_ai_agent": "Testar agente Cal AI"

1541-1541: Currency glyph placement.

Coloque “$” antes do valor.

- "buy_us_number_button": "Comprar número dos EUA por {{priceInDollars}}$/mês",
+ "buy_us_number_button": "Comprar número dos EUA por ${{priceInDollars}}/mês",

2715-2718: Normalize brand to “Cal AI” here too.

Padronize marca.

- "cal_ai_phone_call_action": "Ligar para o participante usando o Agente de Voz Cal.ai",
- "cal_ai_agent_configuration": "Configuração do agente Cal.ai",
+ "cal_ai_phone_call_action": "Ligar para o participante usando o Agente de Voz Cal AI",
+ "cal_ai_agent_configuration": "Configuração do agente Cal AI",
apps/web/public/static/locales/cs/common.json (1)

2345-2346: “Headless” wording: prefer “bez‑UI” (duplicate of prior review).
“Bezrozhraní” is uncommon; “bez‑UI” is clearer to CZ users.

-  "use_our_headless_routing_api": "Použijte naše bezrozhraní API pro směrování a vlastní formulář pro odesílání.",
+  "use_our_headless_routing_api": "Použijte naše bez‑UI směrovací API a vlastní formulář pro odesílání.",
apps/web/public/static/locales/pt/common.json (4)

807-841: Telephony block: normalizar para PT‑PT (Eliminar/Guardar/Ligar/Subscrição, “êxito”)

Há vários BR-PT (“Excluir”, “Salvar”, “Conectar”, “Atualizando”, “Assinatura”, “Você”). Proposta de normalização:

- "termination_uri": "URI de Terminação",
+ "termination_uri": "URI de terminação",
- "sip_trunk_username": "Nome de Usuário do Tronco SIP",
+ "sip_trunk_username": "Nome de utilizador do tronco SIP",
- "sip_trunk_password": "Senha do Tronco SIP",
+ "sip_trunk_password": "Palavra‑passe do tronco SIP",
- "nickname": "Apelido",
+ "nickname": "Nome curto",
- "delete_phone_number": "Excluir Número de Telefone",
+ "delete_phone_number": "Eliminar número de telefone",
- "phone_number_deleted_successfully": "Número de telefone excluído com sucesso",
+ "phone_number_deleted_successfully": "Número de telefone eliminado com êxito",
- "yes_delete_phone_number": "Sim, excluir número de telefone",
+ "yes_delete_phone_number": "Sim, eliminar número de telefone",
- "save_and_test_call": "Salvar e Testar Chamada",
+ "save_and_test_call": "Guardar e testar chamada",
- "call_initiated_successfully": "Chamada iniciada com sucesso",
+ "call_initiated_successfully": "Chamada iniciada com êxito",
- "please_enter_phone_number": "Por favor, insira um número de telefone",
+ "please_enter_phone_number": "Por favor, introduza um número de telefone",
- "agent_updated_successfully": "Agente atualizado com sucesso",
+ "agent_updated_successfully": "Agente atualizado com êxito",
- "agent_created_successfully": "Agente criado com sucesso",
+ "agent_created_successfully": "Agente criado com êxito",
- "phone_number_unsubscribed_successfully": "Número de telefone cancelado com sucesso",
+ "phone_number_unsubscribed_successfully": "Número de telefone cancelado com êxito",
- "updating": "Atualizando",
+ "updating": "A atualizar"

849-891: Subscrição/Cancelar: coerência PT‑PT e evitar “Excluir/Conectar/Assinatura”

- "enter_phone_number_to_test_call": "Digite o número de telefone para teste de chamada",
+ "enter_phone_number_to_test_call": "Introduza o número de telefone para testar a chamada",
- "buy_a_phone_number_or_import_one_you_already_have": "Compre um número de telefone ou importe um que você já tenha na Twilio",
+ "buy_a_phone_number_or_import_one_you_already_have": "Compre um número de telefone ou importe um que já possua na Twilio",
- "phone_numbers": "Números de telefone",
+ "phone_numbers": "Números de telefone",
- "unsubscribe": "Cancelar inscrição",
+ "unsubscribe": "Cancelar subscrição",
- "delete_workflow_step": "Excluir etapa do fluxo de trabalho",
+ "delete_workflow_step": "Eliminar etapa do fluxo de trabalho",
- "unsubscribe_phone_number": "Cancelar inscrição do número de telefone",
+ "unsubscribe_phone_number": "Cancelar subscrição do número de telefone",
- "only_us_phone_numbers_can_be_purchased_here": "Você só pode comprar números de telefone dos EUA. Para outros países, você pode importar seu próprio número de telefone da Twilio.",
+ "only_us_phone_numbers_can_be_purchased_here": "Só pode comprar números de telefone dos EUA. Para outros países, pode importar o seu próprio número da Twilio.",
- "no_phone_number_connected": "Nenhum número de telefone conectado",
+ "no_phone_number_connected": "Nenhum número de telefone associado",
- "are_you_sure_you_want_to_delete_workflow_step": "Tem certeza que deseja eliminar esta etapa do fluxo de trabalho?",
+ "are_you_sure_you_want_to_delete_workflow_step": "Tem a certeza de que pretende eliminar esta etapa do fluxo de trabalho?",
- "do_you_still_want_to_unsubscribe": "Ainda deseja cancelar a assinatura do número de telefone deste agente?",
+ "do_you_still_want_to_unsubscribe": "Ainda deseja cancelar a subscrição do número de telefone deste agente?",
- "connect_phone_number": "Conectar número de telefone",
+ "connect_phone_number": "Associar número de telefone",
- "cal_ai_phone_numbers_description": "Gerencie seus números de telefone Cal AI",
+ "cal_ai_phone_numbers_description": "Faça a gestão dos seus números de telefone Cal AI",
- "active_subscription": "Assinatura ativa",
+ "active_subscription": "Subscrição ativa",
- "cancel_your_phone_number_subscription": "Cancelar sua assinatura de número de telefone",
+ "cancel_your_phone_number_subscription": "Cancelar a sua subscrição do número de telefone",
- "unauthorized_create_workflow": "Você não está autorizado a criar este fluxo de trabalho",
+ "unauthorized_create_workflow": "Não está autorizado a criar este fluxo de trabalho",
- "import_phone_number_description": "Importe seu número de telefone Twilio para usar com o Cal AI Phone",
+ "import_phone_number_description": "Importe o seu número de telefone Twilio para usar com o Cal AI Phone",
- "buy_new_number": "Comprar novo número",
+ "buy_new_number": "Comprar um novo número",
- "no_phone_numbers": "Sem números de telefone",
+ "no_phone_numbers": "Não existem números de telefone",
- "cancel_phone_number_subscription": "Cancelar subscrição do número de telefone",
+ "cancel_phone_number_subscription": "Cancelar a subscrição do número de telefone",
- "yes_cancel_subscription": "Sim, cancelar subscrição",
+ "yes_cancel_subscription": "Sim, cancelar a subscrição",
- "cancel_phone_number_subscription_confirmation": "Tem certeza que deseja cancelar esta subscrição de número de telefone? Esta ação não pode ser desfeita e você perderá o acesso a este número de telefone.",
+ "cancel_phone_number_subscription_confirmation": "Tem a certeza de que deseja cancelar esta subscrição do número de telefone? Esta ação não pode ser desfeita e perderá o acesso a este número."

3549-3577: Webhook: singular vs. plural e PT-PT em labels

Alinhar “webhook_show_variable” (singular) e melhorar “created_at”.

- "webhook_show_variable": "Mostrar variáveis disponíveis",
+ "webhook_show_variable": "Mostrar variável disponível",
- "webhook_created_at": "A hora do webhook",
+ "webhook_created_at": "Hora de criação do webhook",
- "webhook_video_call_url": "URL de videochamada para a reunião",
+ "webhook_video_call_url": "URL da videoconferência"

1541-1541: Moeda: corrigir posição do símbolo ($10/mês, não 10$/mês)

- "buy_us_number_button": "Comprar número dos EUA por {{priceInDollars}}$/mês",
+ "buy_us_number_button": "Comprar número dos EUA por ${{priceInDollars}}/mês"
apps/web/public/static/locales/zh-CN/common.json (2)

121-124: Key rename looks good; verify no remaining references to the old key.

The new key round_robin_host_unavailable_for_booking is present. Please confirm the repo no longer references round_robin_hosts_unavailable_for_booking or ship a mapping if any clients still use it.

#!/bin/bash
# repo-wide check for old key usage
rg -n --hidden -S '\bround_robin_hosts_unavailable_for_booking\b' || echo "No old key references found."

806-841: Sanity checks: placeholders, braces, and style.

Given the volume, run a quick validation for balanced handlebars and “Cal AI” vs “Cal.ai” brand consistency within this file.

#!/bin/bash
set -euo pipefail
f="apps/web/public/static/locales/zh-CN/common.json"

# 1) Brand consistency in this file
echo "Occurrences of brand variants in zh-CN/common.json:"
rg -n --hidden -S "Cal AI|cal.ai|Cal.ai" "$f" || true

# 2) Handlebars/placeholder balance check (best-effort)
python - <<'PY'
import re
p="apps/web/public/static/locales/zh-CN/common.json"
s=open(p,'r',encoding='utf-8').read()
opens=s.count('{{'); closes=s.count('}}')
print("Handlebars balanced:", opens==closes, f"opens={opens} closes={closes}")
PY

Also applies to: 849-891, 3392-3451, 3549-3577

Comment on lines 3549 to 3577
"webhook_created_at": "Webhook yaradılma vaxtı",
"webhook_type": "Tədbir növünün slug-ı",
"webhook_title": "Tədbir növünün adı",
"webhook_start_time": "Tədbirin başlama vaxtı",
"webhook_end_time": "Tədbirin bitmə vaxtı",
"webhook_description": "Tədbir növü parametrlərində təsvir edildiyi kimi tədbirin təsviri",
"webhook_location": "Tədbirin yeri",
"webhook_uid": "Rezervasiyanın UID-i",
"webhook_reschedule_uid": "Yenidən planlaşdırma üçün UID",
"webhook_cancellation_reason": "Ləğv etmə səbəbi",
"webhook_rejection_reason": "Rədd etmə səbəbi",
"webhook_organizer_name": "Təşkilatçının adı",
"webhook_organizer_email": "Təşkilatçının e-poçtu",
"webhook_organizer_timezone": "Təşkilatçının saat qurşağı (məs., 'America/New_York', 'Asia/Kolkata')",
"webhook_organizer_locale": "Təşkilatçının lokalı (məs., 'en', 'fr')",
"webhook_attendee_name": "Birinci iştirakçının adı",
"webhook_attendee_email": "Birinci iştirakçının e-poçtu",
"webhook_attendee_timezone": "Birinci iştirakçının saat qurşağı",
"webhook_attendee_locale": "Birinci iştirakçının lokalı",
"webhook_team_name": "Rezervasiya edilmiş komandanın adı",
"webhook_team_members": "Rezervasiya edilmiş komandanın üzvləri",
"webhook_video_call_url": "Görüş üçün video zəng URL-i",
"webhook_hide_variables": "Dəyişənləri gizlət",
"webhook_show_variable": "Mövcud dəyişənləri göstər",
"webhook_event_and_booking": "Tədbir və Rezervasiya",
"webhook_people": "İnsanlar",
"webhook_teams": "Komandalar",
"webhook_metadata": "Metadata",
"stats": "Statistika",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Case and suffix fix; “slug-ı” should be “slug-u”.

Keep “URL/UID” casing consistent; adjust slug suffix for Azerbaijani vowel harmony.

-  "webhook_type": "Tədbir növünün slug-ı",
+  "webhook_type": "Tədbir növünün slug-u",

🏁 Script executed:

#!/bin/bash
# Hunt any remaining “slug-ı” in locale files
rg -n "slug-ı" apps/web/public/static/locales

Length of output: 149


Fix Azerbaijani vowel harmony for “slug” suffix
Change “Tədbir növünün slug-ı” to “Tədbir növünün slug-u” in apps/web/public/static/locales/az/common.json (line 3550). No other “slug-ı” instances remain.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/az/common.json around lines 3549 to 3577, the
Azerbaijani translation uses incorrect vowel harmony "Tədbir növünün slug-ı" at
line 3550; update that value to "Tədbir növünün slug-u" (only change that
string) and save the file, leaving all other lines untouched.

Comment on lines +807 to +840
"termination_uri": "Ukončovací URI",
"sip_trunk_username": "Uživatelské jméno SIP Trunku",
"sip_trunk_password": "Heslo SIP Trunku",
"nickname": "Přezdívka",
"delete_phone_number": "Smazat telefonní číslo",
"workflow_validation_failed": "Validace workflow selhala",
"workflow_validation_empty_fields": "Jeden nebo více kroků workflow má prázdný obsah zprávy",
"workflow_validation_unverified_contacts": "Jedno nebo více telefonních čísel nebo e-mailových adres není ověřeno",
"phone_number_imported_successfully": "Telefonní číslo bylo úspěšně importováno a propojeno s agentem",
"phone_number_deleted_successfully": "Telefonní číslo bylo úspěšně smazáno",
"delete_phone_number_confirmation": "Opravdu chcete smazat toto telefonní číslo? Tuto akci nelze vrátit zpět.",
"yes_delete_phone_number": "Ano, smazat telefonní číslo",
"phone_number_info_tooltip": "Číslo, které se pokoušíte importovat, musí být ve formátu E.164 (+kód země následovaný číslem, bez mezer nebo speciálních znaků), např. +1234567890",
"termination_uri_info_tooltip": "Ukončovací URI pro jednoznačnou identifikaci vašeho elastického SIP trunku. Používá se pro odchozí hovory. Pro elastické SIP trunky Twilio vždy končí na .pstn.twilio.com.",
"sip_trunk_username_info_tooltip": "Uživatelské jméno používané k ověření SIP trunku.",
"sip_trunk_password_info_tooltip": "Heslo používané k ověření SIP trunku.",
"nickname_info_tooltip": "Přezdívka čísla. Slouží pouze pro vaši orientaci.",
"save_and_test_call": "Uložit a otestovat hovor",
"call_initiated_successfully": "Hovor byl úspěšně zahájen",
"please_enter_phone_number": "Zadejte prosím telefonní číslo",
"agent_updated_successfully": "Agent byl úspěšně aktualizován",
"agent_created_successfully": "Agent byl úspěšně vytvořen",
"phone_number_unsubscribed_successfully": "Telefonní číslo bylo úspěšně odhlášeno",
"general_prompt_description": "Tento prompt definuje roli agenta a jeho hlavní cíle",
"prompt": "Prompt",
"call_to": "Volat na",
"make_test_call_to_verify_configuration": "Uskutečnit testovací hovor pro ověření konfigurace",
"initial_message": "Úvodní zpráva",
"initial_message_description": "První zpráva, kterou agent řekne při zahájení hovoru",
"having_trouble_importing": "Máte potíže s importem?",
"learn": "Zjistit více",
"learn_how_to_get_your_terminator": "Zjistěte, jak získat vaše URI pro ukončení a přihlašovací údaje k SIP trunku",
"phone_number_subscription_cancelled_successfully": "Předplatné telefonního čísla bylo úspěšně zrušeno",
"updating": "Aktualizuji",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Sanity-check for placeholders and terminology across new keys.
Please verify:

  • All examples in parentheses remain in English where intended (e.g., event slugs, tz IDs).
  • Placeholders like {{priceInDollars}}, {{workflowName}} preserved exactly.
  • Consistent use of “round robin” vs “Round Robin” within a single sentence.

Run:

Also applies to: 851-873, 2716-2727, 3358-3359, 3549-3577


🏁 Script executed:

#!/bin/bash
# Validate JSON and scan for inconsistent terms
jq empty apps/web/public/static/locales/cs/common.json || exit 1

echo "Occurrences of 'Cal.ai' (should be zero):"
rg -n 'Cal\.ai' apps/web/public/static/locales/cs/common.json

echo "Occurrences of 'SIP Trunku' (should be zero):"
rg -n 'SIP Trunku' apps/web/public/static/locales/cs/common.json

echo "Bare 'Prompt' label (should be translated):"
rg -nP '"prompt"\s*:\s*"Prompt"' apps/web/public/static/locales/cs/common.json

echo "English 'workflow' where CZ preferred:"
rg -nP '"[^"]*workflow[^"]*"\s*:\s*".*workflow' apps/web/public/static/locales/cs/common.json

Length of output: 2571


🏁 Script executed:

#!/bin/bash
# Check for 'round robin' variations
rg -nP 'round robin' apps/web/public/static/locales/cs/common.json
rg -nP 'Round Robin' apps/web/public/static/locales/cs/common.json

# Check for placeholders
rg -n '{{priceInDollars}}' apps/web/public/static/locales/cs/common.json
rg -n '{{workflowName}}' apps/web/public/static/locales/cs/common.json

Length of output: 3302


🏁 Script executed:

#!/bin/bash
# Search for literal placeholders in common.json
rg -F '{{priceInDollars}}' -n apps/web/public/static/locales/cs/common.json
rg -F '{{workflowName}}' -n apps/web/public/static/locales/cs/common.json

Length of output: 767


Translate bare “Prompt” key
– In apps/web/public/static/locales/cs/common.json at line 831, the value for "prompt" is still "Prompt" and needs a Czech translation.
Placeholders ({{priceInDollars}}, {{workflowName}}) remain intact and parentheses examples are correct; casing of “round robin” vs “Round Robin” is consistent.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/cs/common.json around lines 807 to 840
(specifically line ~831), the "prompt" key value is still the English word
"Prompt"; replace this with the Czech translation (e.g., "Výzva") while
preserving any placeholders or surrounding punctuation/spacing exactly as in
other entries.

Comment on lines 807 to 841
"termination_uri": "Termination URI",
"sip_trunk_username": "SIP Trunk-brugernavn",
"sip_trunk_password": "SIP Trunk-adgangskode",
"nickname": "Kaldenavn",
"delete_phone_number": "Slet telefonnummer",
"workflow_validation_failed": "Workflow-validering mislykkedes",
"workflow_validation_empty_fields": "Et eller flere workflow-trin har tomt meddelelsesindhold",
"workflow_validation_unverified_contacts": "Et eller flere telefonnumre eller e-mailadresser er ikke verificeret",
"phone_number_imported_successfully": "Telefonnummer importeret og knyttet til agenten med succes",
"phone_number_deleted_successfully": "Telefonnummer slettet med succes",
"delete_phone_number_confirmation": "Er du sikker på, at du vil slette dette telefonnummer? Denne handling kan ikke fortrydes.",
"yes_delete_phone_number": "Ja, slet telefonnummer",
"phone_number_info_tooltip": "Det nummer, du forsøger at importere, skal være i E.164-format (+landekode efterfulgt af nummeret, uden mellemrum eller specialtegn), f.eks. +1234567890",
"termination_uri_info_tooltip": "Termination URI'en til entydigt at identificere din elastiske SIP-trunk. Dette bruges til udgående opkald. For Twilio elastiske SIP-trunks ender det altid med .pstn.twilio.com.",
"sip_trunk_username_info_tooltip": "Brugernavnet, der bruges til at godkende SIP-trunken.",
"sip_trunk_password_info_tooltip": "Adgangskoden, der bruges til at godkende SIP-trunken.",
"nickname_info_tooltip": "Kaldenavn for nummeret. Dette er kun til din reference.",
"save_and_test_call": "Gem og test opkald",
"call_initiated_successfully": "Opkald startet med succes",
"please_enter_phone_number": "Indtast venligst et telefonnummer",
"agent_updated_successfully": "Agent opdateret med succes",
"agent_created_successfully": "Agent oprettet med succes",
"phone_number_unsubscribed_successfully": "Telefonnummer afmeldt med succes",
"general_prompt_description": "Denne prompt definerer agentens rolle og primære mål",
"prompt": "Prompt",
"call_to": "Ring til",
"make_test_call_to_verify_configuration": "Foretag testopkald for at verificere konfigurationen",
"initial_message": "Første besked",
"initial_message_description": "Den første besked, agenten vil sige, når opkaldet starter",
"having_trouble_importing": "Har du problemer med at importere?",
"learn": "Lær",
"learn_how_to_get_your_terminator": "Lær, hvordan du får din Termination URI og SIP-trunk-legitimationsoplysninger",
"phone_number_subscription_cancelled_successfully": "Telefonnummerabonnement annulleret med succes",
"updating": "Opdaterer",
"round_robin": "Round Robin",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Batch QA: validate JSON and scan for branding inconsistencies

Large surface area added; suggest quick automated checks.

Also applies to: 849-891, 952-956, 1104-1104, 1666-1667, 1688-1690, 2203-2203, 2268-2271, 3392-3430, 3469-3469, 3486-3486, 3578-3594


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 1) Validate JSON
jq -e . apps/web/public/static/locales/da/common.json >/dev/null && echo "JSON valid"

# 2) Scan for 'Cal.ai' vs 'Cal AI' inconsistencies across locales
rg -n "Cal\.ai|Cal AI" apps/web/public/static/locales --glob '!**/node_modules/**'

# 3) Find any remaining 'round_robin_hosts_unavailable_for_booking' usages
rg -n "round_robin_hosts_unavailable_for_booking" -g "!**/node_modules/**"

# 4) Optional: grep for mixed 'SIP Trunk' vs 'SIP-trunk'
rg -nP "SIP[ -]Trunk" apps/web/public/static/locales/da/common.json

Length of output: 48549


Standardize “Cal.ai” branding in da/common.json
JSON is valid; da/common.json mixes “Cal AI” (lines 26, 871–873, 881) and “Cal.ai” (lines 806, 866, 2624, 2715–2716). Pick one form and apply it consistently.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/da/common.json (affects occurrences around
lines 26, 806, 866, 871-873, 881, 2624, 2715-2716), the file mixes two brand
spellings ("Cal AI" and "Cal.ai"); update all instances to a single consistent
form — replace every "Cal AI" with "Cal.ai" (preserve punctuation/casing exactly
as "Cal.ai") throughout the file and run a quick search to ensure no remaining
"Cal AI" variants remain.

"close": "Schließen",
"upgrade": "Upgraden",
"buy_us_number_button": "US-Nummer für {{priceInDollars}}$/Monat kaufen",
"upgrade_to_access_recordings_title": "Upgraden, um auf Aufnahmen zuzugreifen",
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

Currency order (US locale vs German locale)

Current order renders as “10$/Monat”. In German, prefer “$10/Monat”.

-  "buy_us_number_button": "US-Nummer für {{priceInDollars}}$/Monat kaufen",
+  "buy_us_number_button": "US-Nummer für ${{priceInDollars}}/Monat kaufen",

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/de/common.json around line 1542, the German
translation renders currency after the amount (e.g., "10$/Monat"); update the
translation key(s) that build the price string so the currency symbol precedes
the number (e.g., "$10/Monat") — either swap the placeholder and symbol in the
string to "${{price}}/Monat" (or the project’s interpolation format) or switch
to an ICU/NumberFormat currency pattern that outputs symbol before amount for de
locale.

Comment on lines 807 to 841
"termination_uri": "URI za terminaciju",
"sip_trunk_username": "Korisničko ime SIP tranka",
"sip_trunk_password": "Lozinka SIP tranka",
"nickname": "Nadimak",
"delete_phone_number": "Obriši broj telefona",
"workflow_validation_failed": "Validacija toka rada nije uspela",
"workflow_validation_empty_fields": "Jedan ili više koraka toka rada imaju prazan sadržaj poruke",
"workflow_validation_unverified_contacts": "Jedan ili više brojeva telefona ili email adresa nisu verifikovani",
"phone_number_imported_successfully": "Broj telefona je uspešno uvezen i povezan sa agentom",
"phone_number_deleted_successfully": "Broj telefona je uspešno obrisan",
"delete_phone_number_confirmation": "Da li ste sigurni da želite da obrišete ovaj broj telefona? Ova akcija se ne može poništiti.",
"yes_delete_phone_number": "Da, obriši broj telefona",
"phone_number_info_tooltip": "Broj koji pokušavate da uvezete mora biti u E.164 formatu (+kod zemlje praćen brojem, bez razmaka ili specijalnih karaktera), npr. +1234567890",
"termination_uri_info_tooltip": "URI za terminaciju koji jedinstveno identifikuje vaš elastični SIP trank. Koristi se za odlazne pozive. Za Twilio elastične SIP trankove uvek se završava sa .pstn.twilio.com.",
"sip_trunk_username_info_tooltip": "Korisničko ime koje se koristi za autentifikaciju SIP tranka.",
"sip_trunk_password_info_tooltip": "Lozinka koja se koristi za autentifikaciju SIP tranka.",
"nickname_info_tooltip": "Nadimak broja. Ovo je samo za vašu referencu.",
"save_and_test_call": "Sačuvaj i testiraj poziv",
"call_initiated_successfully": "Poziv je uspešno iniciran",
"please_enter_phone_number": "Molimo unesite broj telefona",
"agent_updated_successfully": "Agent je uspešno ažuriran",
"agent_created_successfully": "Agent je uspešno kreiran",
"phone_number_unsubscribed_successfully": "Broj telefona je uspešno odjavljen",
"general_prompt_description": "Ovaj prompt definiše ulogu agenta i primarne ciljeve",
"prompt": "Prompt",
"call_to": "Pozovi",
"make_test_call_to_verify_configuration": "Obavi test poziv za proveru konfiguracije",
"initial_message": "Početna poruka",
"initial_message_description": "Prva poruka koju će agent izgovoriti na početku poziva",
"having_trouble_importing": "Imate problema sa uvozom?",
"learn": "Saznajte",
"learn_how_to_get_your_terminator": "Saznajte kako da dobijete svoj Termination URI i SIP trunk kredencijale",
"phone_number_subscription_cancelled_successfully": "Pretplata za broj telefona je uspešno otkazana",
"updating": "Ažuriranje",
"round_robin": "Round Robin",
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

Fix Serbian terminology for “SIP trunk” (currently “SIP trank”).

Use “SIP trunk” (English term) consistently; “trank” is a misspelling in Serbian.

Apply:

- "sip_trunk_username": "Korisničko ime SIP tranka",
- "sip_trunk_password": "Lozinka SIP tranka",
- "termination_uri_info_tooltip": "URI za terminaciju koji jedinstveno identifikuje vaš elastični SIP trank. Koristi se za odlazne pozive. Za Twilio elastične SIP trankove uvek se završava sa .pstn.twilio.com.",
- "sip_trunk_username_info_tooltip": "Korisničko ime koje se koristi za autentifikaciju SIP tranka.",
- "sip_trunk_password_info_tooltip": "Lozinka koja se koristi za autentifikaciju SIP tranka.",
+ "sip_trunk_username": "Korisničko ime SIP trunk‑a",
+ "sip_trunk_password": "Lozinka SIP trunk‑a",
+ "termination_uri_info_tooltip": "URI za terminaciju koji jedinstveno identifikuje vaš Elastic SIP trunk. Koristi se za odlazne pozive. Za Twilio Elastic SIP trunk‑ove uvek se završava sa .pstn.twilio.com.",
+ "sip_trunk_username_info_tooltip": "Korisničko ime koje se koristi za autentifikaciju SIP trunk‑a.",
+ "sip_trunk_password_info_tooltip": "Lozinka koja se koristi za autentifikaciju SIP trunk‑a.",
📝 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
"termination_uri": "URI za terminaciju",
"sip_trunk_username": "Korisničko ime SIP tranka",
"sip_trunk_password": "Lozinka SIP tranka",
"nickname": "Nadimak",
"delete_phone_number": "Obriši broj telefona",
"workflow_validation_failed": "Validacija toka rada nije uspela",
"workflow_validation_empty_fields": "Jedan ili više koraka toka rada imaju prazan sadržaj poruke",
"workflow_validation_unverified_contacts": "Jedan ili više brojeva telefona ili email adresa nisu verifikovani",
"phone_number_imported_successfully": "Broj telefona je uspešno uvezen i povezan sa agentom",
"phone_number_deleted_successfully": "Broj telefona je uspešno obrisan",
"delete_phone_number_confirmation": "Da li ste sigurni da želite da obrišete ovaj broj telefona? Ova akcija se ne može poništiti.",
"yes_delete_phone_number": "Da, obriši broj telefona",
"phone_number_info_tooltip": "Broj koji pokušavate da uvezete mora biti u E.164 formatu (+kod zemlje praćen brojem, bez razmaka ili specijalnih karaktera), npr. +1234567890",
"termination_uri_info_tooltip": "URI za terminaciju koji jedinstveno identifikuje vaš elastični SIP trank. Koristi se za odlazne pozive. Za Twilio elastične SIP trankove uvek se završava sa .pstn.twilio.com.",
"sip_trunk_username_info_tooltip": "Korisničko ime koje se koristi za autentifikaciju SIP tranka.",
"sip_trunk_password_info_tooltip": "Lozinka koja se koristi za autentifikaciju SIP tranka.",
"nickname_info_tooltip": "Nadimak broja. Ovo je samo za vašu referencu.",
"save_and_test_call": "Sačuvaj i testiraj poziv",
"call_initiated_successfully": "Poziv je uspešno iniciran",
"please_enter_phone_number": "Molimo unesite broj telefona",
"agent_updated_successfully": "Agent je uspešno ažuriran",
"agent_created_successfully": "Agent je uspešno kreiran",
"phone_number_unsubscribed_successfully": "Broj telefona je uspešno odjavljen",
"general_prompt_description": "Ovaj prompt definiše ulogu agenta i primarne ciljeve",
"prompt": "Prompt",
"call_to": "Pozovi",
"make_test_call_to_verify_configuration": "Obavi test poziv za proveru konfiguracije",
"initial_message": "Početna poruka",
"initial_message_description": "Prva poruka koju će agent izgovoriti na početku poziva",
"having_trouble_importing": "Imate problema sa uvozom?",
"learn": "Saznajte",
"learn_how_to_get_your_terminator": "Saznajte kako da dobijete svoj Termination URI i SIP trunk kredencijale",
"phone_number_subscription_cancelled_successfully": "Pretplata za broj telefona je uspešno otkazana",
"updating": "Ažuriranje",
"round_robin": "Round Robin",
"termination_uri": "URI za terminaciju",
- "sip_trunk_username": "Korisničko ime SIP tranka",
"sip_trunk_username": "Korisničko ime SIP trunk-a",
"sip_trunk_password": "Lozinka SIP trunk-a",
"nickname": "Nadimak",
"delete_phone_number": "Obriši broj telefona",
// …
- "termination_uri_info_tooltip": "URI za terminaciju koji jedinstveno identifikuje vaš elastični SIP trank. Koristi se za odlazne pozive. Za Twilio elastične SIP trankove uvek se završava sa .pstn.twilio.com.",
- "sip_trunk_username_info_tooltip": "Korisničko ime koje se koristi za autentifikaciju SIP tranka.",
"termination_uri_info_tooltip": "URI za terminaciju koji jedinstveno identifikuje vaš Elastic SIP trunk. Koristi se za odlazne pozive. Za Twilio Elastic SIP trunk-ove uvek se završava sa .pstn.twilio.com.",
"sip_trunk_username_info_tooltip": "Korisničko ime koje se koristi za autentifikaciju SIP trunk-a.",
"sip_trunk_password_info_tooltip": "Lozinka koja se koristi za autentifikaciju SIP trunk-a.",
"nickname_info_tooltip": "Nadimak broja. Ovo je samo za vašu referencu.",
// …

Comment on lines 849 to 891
"enter_phone_number_to_test_call": "Unesite broj telefona za test poziv",
"make_test_call": "Obavi test poziv",
"create_new_workflow_agent": "Kreiraj novog cal.ai glasovnog agenta za tok rada",
"create_new_workflow_agent_description": "Kreirajte novog cal.ai glasovnog agenta za tok rada da automatizujete svoje radne procese",
"phone_number_for_ai_call": "Broj telefona (koji će naš agent pozvati)",
"buy_a_phone_number_or_import_one_you_already_have": "Kupite broj telefona ili uvezite onaj koji već imate na twilio",
"test_agent": "Testiraj agenta",
"phone_numbers": "Brojevi telefona",
"unsubscribe": "Odjavi se",
"delete_workflow_step": "Obriši korak toka rada",
"unsubscribe_phone_number": "Odjavi broj telefona",
"buy_a_new_number": "Kupi novi broj",
"only_us_phone_numbers_can_be_purchased_here": "Možete kupiti samo američke brojeve telefona. Za druge zemlje, možete uvesti svoj Twilio broj telefona.",
"buy_number_for_x_per_month": "Kupite američki broj za ${{priceInDollars}} mesečno",
"supported_call_destinations": "Podržane destinacije za pozive",
"no_phone_number_connected": "Nema povezanog telefonskog broja",
"failed_to_get_workflow_step_id": "Neuspešno dobijanje ID-a koraka radnog toka",
"cal_ai_agent": "Cal.ai agent",
"test_cal_ai_agent": "Testirajte Cal.ai agenta",
"are_you_sure_you_want_to_delete_workflow_step": "Da li ste sigurni da želite da obrišete ovaj korak radnog toka?",
"do_you_still_want_to_unsubscribe": "Da li i dalje želite da odjavite telefonski broj sa ovog agenta?",
"the_action_will_disconnect_phone_number": "Ova akcija će prekinuti vezu telefonskog broja sa agentom. Agent neće moći da obavlja pozive dok se ne poveže novi telefonski broj.",
"cal_ai_phone_numbers": "Cal AI telefonski brojevi",
"connect_phone_number": "Povežite telefonski broj",
"cal_ai_phone_numbers_description": "Upravljajte svojim Cal AI telefonskim brojevima",
"import_number": "Uvezite broj",
"this_action_will_also": "Ova akcija će takođe:",
"import_phone_number": "Uvezite telefonski broj",
"active_subscription": "Aktivna pretplata",
"cancel_your_phone_number_subscription": "Otkažite pretplatu za telefonski broj",
"delete_associated_phone_number": "Obrišite povezani telefonski broj",
"unauthorized_create_workflow": "Niste ovlašćeni da kreirate ovaj radni tok",
"import_phone_number_description": "Uvezite svoj Twilio telefonski broj za korišćenje sa Cal AI telefonom",
"phone_number_cost": "${{price}}/mesečno",
"buy_new_number": "Kupite novi broj",
"buy_number_cost_x_per_month": "Kupovina telefonskog broja košta ${{priceInDollars}} mesečno. Naplaćivaće vam se mesečno za svaki aktivni telefonski broj.",
"area_code_optional": "Pozivni broj (opciono)",
"no_phone_numbers": "Nema telefonskih brojeva",
"phone_number_purchased_successfully": "Telefonski broj je uspešno kupljen",
"cancel_phone_number_subscription": "Otkaži pretplatu za telefonski broj",
"yes_cancel_subscription": "Da, otkaži pretplatu",
"cancel_phone_number_subscription_confirmation": "Da li ste sigurni da želite da otkažete pretplatu za ovaj telefonski broj? Ova akcija se ne može poništiti i izgubićete pristup ovom telefonskom broju.",
"add_members": "Dodajte članove...",
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

Brand/style consistency and casing tweaks (Cal.ai, Twilio, currency).

  • Use “Cal.ai” consistently vs “Cal AI”.
  • Capitalize “Twilio”.
  • Keep currency formatting consistent.

Proposed fixes:

- "buy_a_phone_number_or_import_one_you_already_have": "Kupite broj telefona ili uvezite onaj koji već imate na twilio",
+ "buy_a_phone_number_or_import_one_you_already_have": "Kupite broj telefona ili uvezite onaj koji već imate na Twilio",

- "cal_ai_phone_numbers": "Cal AI telefonski brojevi",
- "cal_ai_phone_numbers_description": "Upravljajte svojim Cal AI telefonskim brojevima",
+ "cal_ai_phone_numbers": "Cal.ai telefonski brojevi",
+ "cal_ai_phone_numbers_description": "Upravljajte svojim Cal.ai telefonskim brojevima",

- "buy_us_number_button": "Kupite US broj za {{priceInDollars}}$/mesečno",
+ "buy_us_number_button": "Kupite američki broj za ${{priceInDollars}}/mesečno",

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/sr/common.json around lines 849 to 891, fix
brand/style and currency casing: replace all occurrences of "Cal AI" and "Cal AI
telefonski brojevi" (and any other "Cal AI" variants) with "Cal.ai", capitalize
"Twilio" wherever "twilio" appears, and normalize currency placeholders to a
consistent format (use either ${{price}} or ${{priceInDollars}} across related
keys — update keys like "buy_number_for_x_per_month" and
"buy_number_cost_x_per_month" to the chosen placeholder and ensure surrounding
spacing/formatting matches other currency keys such as "phone_number_cost").
Ensure no other brand or currency instances remain inconsistent.

"hosts_unavailable_for_booking": "Några av värdarna är inte tillgängliga för bokning.",
"fixed_hosts_unavailable_for_booking": "Några av de fasta värdarna är inte tillgängliga för bokning.",
"round_robin_hosts_unavailable_for_booking": "Inga Round Robin-värdar är tillgängliga för bokning.",
"round_robin_host_unavailable_for_booking": "Round Robin-värden är inte tillgänglig för bokning.",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Quick sanity checks to prevent regressions.

Automate checks for:

  • stale old key uses,
  • currency formatting,
  • “Cal AI” vs “Cal.ai” brand,
  • “testanrop” vs “testsamtal”.

Also applies to: 1541-1541, 2715-2718, 849-891


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 1) Old key usage
echo "== Old key references =="
rg -n 'round_robin_hosts_unavailable_for_booking' || true

# 2) Currency formatting issues like {{var}}$/månad
echo -e "\n== Currency formatting issues =="
rg -nP '\{\{[^}]+\}\}\$/månad' apps/web/public/static/locales/sv/common.json || true

# 3) Brand consistency (Cal AI vs Cal.ai)
echo -e "\n== Brand occurrences (Cal AI vs Cal.ai) =="
rg -n 'Cal AI|Cal\.ai' apps/web/public/static/locales/sv/common.json || true

# 4) Test call phrasing consistency
echo -e "\n== testsamtal vs testanrop =="
rg -n 'testanrop|testsamtal' apps/web/public/static/locales/sv/common.json || true

Length of output: 1822


Fix localization inconsistencies in sv/common.json

  • Line 1541: add a space before the currency symbol—change
    "Köp ett amerikanskt nummer för {{priceInDollars}}$/månad"
    to
    "Köp ett amerikanskt nummer för {{priceInDollars}} $/månad".
  • Brand mentions: standardize on “Cal.ai” across all entries—replace “Cal AI” at lines 26, 871, 873, 881 and ensure “Cal.ai” in descriptions at 806, 866–867, 2624, 2715–2716.
  • Test-call phrasing: use “testsamtal” consistently—change line 2717’s “testanrop” to “testsamtal” to match lines 833–850.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/sv/common.json update the referenced lines:
add a space before the dollar sign at line 1541 so the string reads "...
{{priceInDollars}} $/månad"; standardize the brand to "Cal.ai" by replacing any
"Cal AI" at lines 26, 871, 873, and 881 and ensure entries already mentioning
the brand at lines 806, 866–867, 2624, and 2715–2716 also use "Cal.ai"; and make
test-call wording consistent by changing "testanrop" to "testsamtal" at line
2717 to match lines 833–850.

"schedule_timezone_change": "Program saat dilimi değişikliği",
"date": "Tarih",
"enter_the_general_prompt_for_the_agent": "Ajan için genel istemi girin",
"overlaps_with_existing_schedule": "Bu, mevcut bir programla çakışıyor. Lütfen farklı bir tarih seçin.",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

LGTM, and please align other “Prompt/İstem” strings accordingly.

This uses “istem”, which we standardize above.

Run the script below to find remaining occurrences of “Komut” and “Cal.ai” to normalize:


🏁 Script executed:

#!/bin/bash
# Find inconsistent terminology across locales
rg -n --hidden -S 'Cal\.ai|Komut' apps/web/public/static/locales | sed -E 's/^/MISMATCH: /'

Length of output: 34219


LGTM — normalize Turkish “prompt” and all “Cal.ai” references

  • apps/web/public/static/locales/tr/common.json: change
    "prompt": "Komut" (line 831) → "prompt": "İstem"
    "kbar_search_placeholder": "Komut girin veya arayın..." (line 1910) → "İstem girin veya arayın..."
  • Review every “Cal.ai” occurrence across all locale files (per rg output) and update to the agreed standard form (e.g. “Cal.ai Agent” without hyphens)

"create_new_workflow_agent_description": "Створіть нового голосового агента cal.ai для автоматизації ваших робочих процесів",
"phone_number_for_ai_call": "Номер телефону (для дзвінка нашого агента)",
"buy_a_phone_number_or_import_one_you_already_have": "Купіть номер телефону або імпортуйте той, який у вас вже є в twilio",
"test_agent": "Тестовий агент",
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

Capitalize brand “Twilio”.

Proper noun; avoid lower‑case “twilio”.

-  "buy_a_phone_number_or_import_one_you_already_have": "Купіть номер телефону або імпортуйте той, який у вас вже є в twilio",
+  "buy_a_phone_number_or_import_one_you_already_have": "Купіть номер телефону або імпортуйте той, який у вас вже є в Twilio",

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/uk/common.json around line 855, replace any
lowercase occurrence of the brand name "twilio" on that line with the correctly
capitalized "Twilio" so the proper noun is capitalized in the Ukrainian locale
string.

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: 21

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (9)
apps/web/public/static/locales/bg/common.json (2)

2729-2731: Untranslated user-facing strings (left in English).

These should be localized into Bulgarian.

Apply:

-  "org_admin_no_slots|heading": "No availability found for {{name}}",
+  "org_admin_no_slots|heading": "Няма налични часове за {{name}}",
-  "org_admin_no_slots|cta": "Open users availability",
+  "org_admin_no_slots|cta": "Отворете наличността на потребителя",

1-3594: Translate remaining English strings in bg/common.json

The following keys contain English text and need Bulgarian translations:

  • “email_placeholder”: “jdoe@example.com
  • “round_robin”: “Round Robin”
  • “external_redirect_url”: “https://example.com/redirect-to-my-success-page”
  • “saml_sp_entity_id”: “SP Entity ID”
  • “scheduler”: “{Scheduler}”
  • “directory_scim_token”: “SCIM Bearer Token”
  • “org_admin_no_slots|heading”: “No availability found for {{name}}”
  • “org_admin_no_slots|cta”: “Open users availability”

Replace each value with the appropriate Bulgarian equivalent while preserving placeholders (e.g. {{name}}) and URLs.

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

680-683: Fix visible typos (HU) in high-traffic texts.

These are user-facing and should be corrected.

- "reschedule": "átütmezés",
+ "reschedule": "átütemezés",

- "book_a_team_member": "Foglaljon inkáb egy másik csapattagnál",
+ "book_a_team_member": "Foglaljon inkább egy másik csapattagnál",

- "search_giphy": "Keresls Giphy-n",
+ "search_giphy": "Keresés a Giphy-n",

- "rescheduled_event_type_subject": "Átütemezési kérés kikülve: {{eventType}}, {{name}}, {{date}}",
+ "rescheduled_event_type_subject": "Átütemezési kérés kiküldve: {{eventType}}, {{name}}, {{date}}"

Also applies to: 1382-1382, 176-176

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

2729-2731: Untranslated strings in EU locale (user‑facing).

These keys are still in English:

  • org_admin_no_slots|heading
  • org_admin_no_slots|cta

Suggested translations:

-"org_admin_no_slots|heading": "No availability found for {{name}}",
+"org_admin_no_slots|heading": "Ez da erabilgarritasunik aurkitu {{name}}-rako",
-"org_admin_no_slots|cta": "Open users availability",
+"org_admin_no_slots|cta": "Ireki erabiltzailearen eskuragarritasuna",

I can provide translations for the long body (org_admin_no_slots|content) if you want it included in this PR.


2745-2749: More English leftovers in EU file.

These values are English:

  • email_team_invite|content|added_to_org
  • email_team_invite|content|added_to_subteam
  • email_team_invite|content|invited_to_subteam
  • email_team_invite|content|invited_to_regular_team

Please localize them before merge. I can draft Basque translations on request.


1-3594: Localize leftover English strings in EU locale
Replace the following entries in apps/web/public/static/locales/eu/common.json with these Basque translations:

• org_admin_no_slots|cta

  • was: “Open users availability”
  • now: “Erabiltzaileen erabilgarritasuna ireki”

• email_team_invite|subject|added_to_org

  • was: “{{user}} added you to the organization {{team}} on {{appName}}”
  • now: “{{user}}-(e)k {{team}} erakundera gehitu zaitu {{appName}}(e)n”

• email_team_invite|subject|invited_to_org

  • was: “{{user}} invited you to join the organization {{team}} on {{appName}}”
  • now: “{{user}}-(e)k {{team}} erakundera gonbidatu zaitu {{appName}}(e)n”

• email_team_invite|subject|added_to_subteam

  • was: “{{user}} added you to the team {{team}} of organization {{parentTeamName}} on {{appName}}”
  • now: “{{user}}-(e)k {{parentTeamName}} erakundeko {{team}} taldean gehitu zaitu {{appName}}(e)n”

• email_team_invite|subject|invited_to_regular_team

  • was: “{{user}} invited you to join the team {{team}} on {{appName}}”
  • now: “{{user}}-(e)k {{team}} taldera gonbidatu zaitu {{appName}}(e)n”

• email_team_invite|content|added_to_org

  • was: “{{invitedBy}} has added you to the {{teamName}} organization.”
  • now: “{{invitedBy}}-(e)k {{teamName}} erakundera gehitu zaitu.”

• email_team_invite|content|invited_to_org

  • was: “{{invitedBy}} has invited you to join the {{teamName}} organization.”
  • now: “{{invitedBy}}-(e)k {{teamName}} erakundera gonbidatu zaitu.”

• email_team_invite|content|added_to_subteam

  • was: “{{invitedBy}} has added you to the team {{teamName}} in their organization {{parentTeamName}}. {{appName}} is the event-juggling scheduler that enables you and your team to schedule meetings without the email tennis.”
  • now: “{{invitedBy}}-(e)k bere {{parentTeamName}} erakundeko {{teamName}} taldera gehitu zaitu. {{appName}} da bileren programaziorako antolatzailea, posta elektroniko truke etengabea saihestuz zure taldeari bilerak antolatzen laguntzen diona.”

• email_team_invite|content|invited_to_subteam

  • was: “{{invitedBy}} has invited you to join the team {{teamName}} in their organization {{parentTeamName}}. {{appName}} is the event-juggling scheduler that enables you and your team to schedule meetings without the email tennis.”
  • now: “{{invitedBy}}-(e)k bere {{parentTeamName}} erakundeko {{teamName}} taldera gonbidatu zaitu. {{appName}} da bileren programaziorako antolatzailea, posta elektroniko truke etengabea saihestuz zure taldeari bilerak antolatzen laguntzen diona.”

• email_team_invite|content|invited_to_regular_team

  • was: “{{invitedBy}} has invited you to join their team {{teamName}} on {{appName}}. {{appName}} is the event-juggling scheduler that enables you and your team to schedule meetings without the email tennis.”
  • now: “{{invitedBy}}-(e)k bere {{teamName}} taldera gonbidatu zaitu {{appName}}(e)n. {{appName}} da bileren programaziorako antolatzailea, posta elektroniko truke etengabea saihestuz zure taldeari bilerak antolatzen laguntzen diona.”
apps/web/public/static/locales/da/common.json (1)

1-3595: Batch sanity checks passed except currency placeholder

  • JSON is valid.

  • Legacy round_robin_hosts_unavailable_for_booking key has been removed.

  • Branding tokens (Cal AI, Cal.ai) appear as expected.

  • Mustache placeholders balanced (493 “{{” / 493 “}}”).

  • apps/web/public/static/locales/da/common.json (line 1541): currency placeholder wrongly formatted:

    - "buy_us_number_button": "Køb et amerikansk nummer for {{priceInDollars}}$/måned",
    + "buy_us_number_button": "Køb et amerikansk nummer for ${{priceInDollars}}/måned",
apps/web/public/static/locales/el/common.json (1)

1-3595: Housekeeping: i18n checks passed – JSON is valid and contains no duplicate keys

  • Fix inconsistent currency formatting (e.g. "Αγοράστε αριθμό ΗΠΑ για {{priceInDollars}}$/μήνα" should use a unified {{amount, currency}} pattern)
  • Unify brand references: both “Cal AI” and “Cal.ai” appear; choose one style and apply consistently

Block merge until the contributor signs the CLA.

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

2641-2641: Critical mistranslation (“publier” → “calendrier”).

User-facing error; must be fixed.

-"please_install_a_calendar": "Veuillez installer un publier",
+"please_install_a_calendar": "Veuillez installer un calendrier",
♻️ Duplicate comments (37)
apps/web/public/static/locales/tr/common.json (1)

123-123: Fix mistranslation: “host” ≠ “sunucu”

Use “ev sahibi” for “host” in round-robin context.

-  "round_robin_host_unavailable_for_booking": "Round Robin sunucusu rezervasyon için uygun değil.",
+  "round_robin_host_unavailable_for_booking": "Round robin ev sahibi rezervasyon için uygun değil."
apps/web/public/static/locales/de/common.json (1)

1541-1541: Fix USD currency placement in German string (follow prior guidance).

Use "$" before the amount and keep "/Monat".

-  "buy_us_number_button": "US-Nummer für {{priceInDollars}}$/Monat kaufen",
+  "buy_us_number_button": "US-Nummer für ${{priceInDollars}}/Monat kaufen",
apps/web/public/static/locales/no/common.json (1)

1541-1541: Currency formatting bug — move “$” before amount (duplicate of existing comment).

Keep style aligned with nearby strings (e.g., line 862).

-  "buy_us_number_button": "Kjøp US-nummer for {{priceInDollars}}$/måned",
+  "buy_us_number_button": "Kjøp et US-nummer for ${{priceInDollars}} per måned",
apps/web/public/static/locales/sv/common.json (1)

882-882: Currency placeholder order bug and inconsistent monthly phrasing.

Place $ before the placeholder and use the same “per månad” phrasing used elsewhere.

-  "phone_number_cost": "${{price}}/månad",
+  "phone_number_cost": "${{price}} per månad",
-  "buy_us_number_button": "Köp ett amerikanskt nummer för {{priceInDollars}}$/månad",
+  "buy_us_number_button": "Köp ett amerikanskt nummer för ${{priceInDollars}} per månad",

Also applies to: 1541-1541

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

807-823: SIP/telephony terminology and toast grammar (technical accuracy + natural Korean).

Reword for correct industry terms and more natural phrasing.

-  "termination_uri": "종료 URI",
+  "termination_uri": "종단(termination) URI",
-  "sip_trunk_username": "SIP 트렁크 사용자 이름",
+  "sip_tr렁크 사용자명": "SIP 트렁크 사용자명",
-  "sip_trunk_password": "SIP 트렁크 비밀번호",
+  "sip_trunk_password": "SIP 트렁크 비밀번호",
@@
-  "phone_number_imported_successfully": "전화번호가 성공적으로 가져와져 에이전트에 연결되었습니다",
+  "phone_number_imported_successfully": "전화번호를 성공적으로 가져와 에이전트에 연결했습니다",
-  "phone_number_deleted_successfully": "전화번호가 성공적으로 삭제되었습니다",
+  "phone_number_deleted_successfully": "전화번호를 성공적으로 삭제했습니다",
@@
-  "termination_uri_info_tooltip": "탄력적 SIP 트렁크를 고유하게 식별하는 종료 URI입니다. 이는 발신 통화에 사용됩니다. Twilio 탄력적 SIP 트렁크의 경우 항상 .pstn.twilio.com으로 끝납니다.",
+  "termination_uri_info_tooltip": "Elastic SIP Trunking을 고유하게 식별하는 Termination URI입니다. 발신 통화에 사용됩니다. Twilio의 경우 항상 .pstn.twilio.com으로 끝납니다.",
-  "sip_trunk_username_info_tooltip": "SIP 트렁크 인증에 사용되는 사용자 이름입니다.",
+  "sip_trunk_username_info_tooltip": "SIP 트렁크 인증에 사용하는 사용자명입니다.",
-  "sip_trunk_password_info_tooltip": "SIP 트렁크 인증에 사용되는 비밀번호입니다.",
+  "sip_trunk_password_info_tooltip": "SIP 트렁크 인증에 사용하는 비밀번호입니다.",

Also applies to: 815-816

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

851-852: Brand casing: “Cal.ai” must start with capital C.

Keep brand capitalization consistent with English source.

-"create_new_workflow_agent": "បង្កើតភ្នាក់ងារសំឡេង cal.ai លំហូរការងារថ្មី",
-"create_new_workflow_agent_description": "បង្កើតភ្នាក់ងារសំឡេង cal.ai លំហូរការងារថ្មីដើម្បីស្វ័យប្រវត្តិកម្មលំហូរការងាររបស់អ្នក",
+"create_new_workflow_agent": "បង្កើតភ្នាក់ងារសំឡេង Cal.ai លំហូរការងារថ្មី",
+"create_new_workflow_agent_description": "បង្កើតភ្នាក់ងារសំឡេង Cal.ai លំហូរការងារថ្មីដើម្បីស្វ័យប្រវត្តិកម្មលំហូរការងាររបស់អ្នក",

855-855: Capitalize “Twilio”.

Align with brand style used elsewhere in this file (e.g., Line 861).

-"buy_a_phone_number_or_import_one_you_already_have": "ទិញលេខទូរស័ព្ទមួយឬនាំចូលលេខដែលអ្នកមានរួចហើយនៅលើ twilio",
+"buy_a_phone_number_or_import_one_you_already_have": "ទិញលេខទូរស័ព្ទមួយឬនាំចូលលេខដែលអ្នកមានរួចហើយនៅលើ Twilio",
apps/web/public/static/locales/et/common.json (2)

1542-1542: Fix duplicated currency symbol and awkward “/kuus”.

Align with app-wide pattern: “${{priceInDollars}} kuus”.

Apply this diff:

-  "buy_us_number_button": "Osta USA number hinnaga {{priceInDollars}}$/kuus",
+  "buy_us_number_button": "Osta USA number hinnaga ${{priceInDollars}} kuus",

2829-2830: Leftover English string.

Translate “no_show_url_info”.

   "no_show_url_variable": "Mitteosalemise URL",
-  "no_show_url_info": "The URL for No Show Feedback",
+  "no_show_url_info": "Mitteilmumise tagasiside vormi URL",
apps/web/public/static/locales/it/common.json (3)

851-867: Standardize brand: “Cal AI”, not “Cal.ai/cal.ai”.

Use “Cal AI” consistently (matches other locales and “Cal Video”).

Apply:

-  "create_new_workflow_agent": "Crea un nuovo agente vocale cal.ai per il workflow",
-  "create_new_workflow_agent_description": "Crea un nuovo agente vocale cal.ai per automatizzare i tuoi workflow",
+  "create_new_workflow_agent": "Crea un nuovo agente vocale Cal AI per il workflow",
+  "create_new_workflow_agent_description": "Crea un nuovo agente vocale Cal AI per automatizzare i tuoi workflow",
-  "cal_ai_agent": "Agente Cal.ai",
-  "test_cal_ai_agent": "Testa l'agente Cal.ai",
+  "cal_ai_agent": "Agente Cal AI",
+  "test_cal_ai_agent": "Testa l'agente Cal AI",
-  "cal_ai_phone_call_action": "Chiama il partecipante usando l'agente vocale Cal.ai",
-  "cal_ai_agent_configuration": "Configurazione agente Cal.ai",
+  "cal_ai_phone_call_action": "Chiama il partecipante usando l'agente vocale Cal AI",
+  "cal_ai_agent_configuration": "Configurazione dell'agente Cal AI",

Note: There are other occurrences in this file (e.g., use_cal_ai_to_make_call_description, create_your_enterprise_description) unchanged in this PR; consider aligning them too.

Also applies to: 2715-2717


861-865: US→USA and price formatting “${{x}}/mese”.

Prefer “USA” and keep price as “${{priceInDollars}}/mese”.

Apply:

-  "only_us_phone_numbers_can_be_purchased_here": "Puoi acquistare solo numeri di telefono statunitensi. Per altri paesi, puoi importare il tuo numero di telefono Twilio.",
+  "only_us_phone_numbers_can_be_purchased_here": "Puoi acquistare solo numeri di telefono USA. Per altri paesi puoi importare il tuo numero di telefono Twilio.",
-  "buy_number_for_x_per_month": "Acquista un numero USA per ${{priceInDollars}} al mese",
+  "buy_number_for_x_per_month": "Acquista un numero USA per ${{priceInDollars}}/mese",
-  "buy_number_cost_x_per_month": "L'acquisto di un numero di telefono costa ${{priceInDollars}} al mese. Ti verrà addebitato un costo mensile per ogni numero di telefono attivo.",
+  "buy_number_cost_x_per_month": "L'acquisto di un numero di telefono costa ${{priceInDollars}}/mese. Ti verrà addebitato un costo mensile per ogni numero di telefono attivo.",
-  "buy_us_number_button": "Acquista numero US per {{priceInDollars}}$/mese",
+  "buy_us_number_button": "Acquista numero USA per ${{priceInDollars}}/mese",

Also applies to: 884-885, 1541-1541


1687-1690: Translate “Timezone” label.

Keep variable labels consistent; use “Fuso orario”.

Apply:

-  "timezone_variable": "Timezone",
+  "timezone_variable": "Fuso orario",

(Other related variable labels in this hunk already look consistent.)

Also applies to: 2202-2204, 3018-3022

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

123-123: Cross-locale presence of renamed key (FYI).

Previous verification flagged missing keys in other locales (hr, id, iw, lv, sk, ta, th). This HU file is good; ensure the global follow-up tracks those.

Run to recheck repo-wide:

#!/bin/bash
set -euo pipefail
echo "Searching for old key usages..."
rg -nP "round_robin_hosts_unavailable_for_booking" -S -g '!**/node_modules/**' || echo "No old key references found."
echo
echo "Locales missing new key:"
fd common.json apps/web/public/static/locales \
 | while read -r f; do
   jq -e 'has("round_robin_host_unavailable_for_booking")' "$f" >/dev/null || echo "$f"
 done
apps/web/public/static/locales/nl/common.json (2)

620-620: Fix stray brace in placeholder.

"Moet {{limit}}} of minder tekens lang zijn" has an extra "}". It will break interpolation.

Apply:

-"max_limit_allowed_hint": "Moet {{limit}}} of minder tekens lang zijn",
+"max_limit_allowed_hint": "Moet {{limit}} of minder tekens lang zijn",

3518-3521: Run placeholder/token lint across NL file and compare with EN.

Given many new tokens and prior brace issues, run the i18n placeholder and mismatched-key lints to catch any remaining brace or variable-name mismatches.

#!/bin/bash
# Find stray braces like '{{...}}}'
rg -nP '\{\{[^}]+\}\}\}' apps/web/public/static/locales/nl/common.json

# List tokens to spot typos (e.g., {{priceInDollars}}, {{workflowName}})
rg -nP '\{\{[a-zA-Z0-9_., ]+\}\}' apps/web/public/static/locales/nl/common.json

# Compare key sets with EN
jq -r 'paths | join(".")' apps/web/public/static/locales/en/common.json | sort > /tmp/en.keys
jq -r 'paths | join(".")' apps/web/public/static/locales/nl/common.json | sort > /tmp/nl.keys
comm -3 /tmp/en.keys /tmp/nl.keys

# Optional: flag 'Cal\.ai' occurrences to normalize brand
rg -n 'Cal\.ai' apps/web/public/static/locales/nl/common.json

Also applies to: 3581-3594

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

281-281: Polite tone for consistency

Switch to polite imperative.

-  "make_field_required": "Fă acest câmp obligatoriu",
+  "make_field_required": "Faceți acest câmp obligatoriu",

1103-1103: Polite tone + possessive (dvs.)

Match the formal register used elsewhere.

-  "connect_your_video": "Conectează aplicația ta de videoconferință",
+  "connect_your_video": "Conectați aplicația dvs. de videoconferință",

1607-1607: Polite CTA

Use formal imperative.

-  "finish_and_start": "Finalizează configurarea și începe",
+  "finish_and_start": "Finalizați configurarea și începeți",

1665-1667: Polite tone for onboarding steps

Align with polite form used across the file.

-  "connect_calendar_first": "Conectează mai întâi un calendar",
+  "connect_calendar_first": "Conectați mai întâi un calendar",
-  "complete_profile": "Completează-ți profilul",
+  "complete_profile": "Completați-vă profilul",

838-838: Incorrect Romanian term “acreditivele” → “acreditările”

Use the correct term for “credentials.”

-  "learn_how_to_get_your_terminator": "Aflați cum să obțineți URI-ul de terminare și acreditivele pentru SIP trunk",
+  "learn_how_to_get_your_terminator": "Aflați cum să obțineți URI-ul de terminare și acreditările pentru SIP trunk",

871-874: Brand consistency: “Cal.ai”, not “Cal AI”

Align with established branding.

-  "cal_ai_phone_numbers": "Numere de telefon Cal AI",
+  "cal_ai_phone_numbers": "Numere de telefon Cal.ai",
   "connect_phone_number": "Conectați numărul de telefon",
-  "cal_ai_phone_numbers_description": "Gestionați numerele de telefon Cal AI",
+  "cal_ai_phone_numbers_description": "Gestionați numerele de telefon Cal.ai",

1541-1541: Currency placement and tone

Place $ before the variable and use polite form.

-  "buy_us_number_button": "Cumpără un număr din SUA pentru {{priceInDollars}}$/lună",
+  "buy_us_number_button": "Cumpărați un număr din SUA pentru ${{priceInDollars}}/lună",
apps/web/public/static/locales/sr/common.json (2)

123-123: Key rename present; usage elsewhere should be updated

The Serbian locale includes the new key round_robin_host_unavailable_for_booking. Please ensure all references to the old pluralized key were removed across code and locales.

Run to verify:

#!/bin/bash
set -euo pipefail
rg -nP 'round_robin_hosts_unavailable_for_booking' -g '!**/node_modules/**'
fd common.json apps/web/public/static/locales | xargs -I{} jq -e . "{}" >/dev/null

808-823: Fix misspelling and terminology: “SIP trunk”, not “SIP trank”

Multiple user‑facing strings use “trank”. Use the standard “SIP trunk” (keep English term) and “Elastic SIP trunk”. Also adjust Twilio phrase.

Apply:

- "sip_trunk_username": "Korisničko ime SIP tranka",
- "sip_trunk_password": "Lozinka SIP tranka",
+ "sip_trunk_username": "Korisničko ime SIP trunk‑a",
+ "sip_trunk_password": "Lozinka SIP trunk‑a",
@@
- "termination_uri_info_tooltip": "URI za terminaciju koji jedinstveno identifikuje vaš elastični SIP trank. Koristi se za odlazne pozive. Za Twilio elastične SIP trankove uvek se završava sa .pstn.twilio.com.",
+ "termination_uri_info_tooltip": "URI za terminaciju koji jedinstveno identifikuje vaš Elastic SIP trunk. Koristi se za odlazne pozive. Za Twilio Elastic SIP trunk‑ove uvek se završava sa .pstn.twilio.com.",
- "sip_trunk_username_info_tooltip": "Korisničko ime koje se koristi za autentifikaciju SIP tranka.",
- "sip_trunk_password_info_tooltip": "Lozinka koja se koristi za autentifikaciju SIP tranka.",
+ "sip_trunk_username_info_tooltip": "Korisničko ime koje se koristi za autentifikaciju SIP trunk‑a.",
+ "sip_trunk_password_info_tooltip": "Lozinka koja se koristi za autentifikaciju SIP trunk‑a.",
apps/web/public/static/locales/az/common.json (1)

3549-3577: Use “slug-u”, not “slaqı” (repeat of prior guidance).

Keep the English term “slug” and apply correct vowel harmony suffix “-u”. Also keeps terminology consistent across locales/docs.

-  "webhook_type": "Tədbir növünün slaqı",
+  "webhook_type": "Tədbir növünün slug-u",
apps/web/public/static/locales/eu/common.json (1)

1541-1541: Currency placeholder order is inconsistent; place $ before the variable (match buy_number_for_x_per_month).

-"buy_us_number_button": "Erosi AEBetako zenbakia {{priceInDollars}}$/hilabeteko",
+"buy_us_number_button": "Erosi AEBetako zenbakia ${{priceInDollars}} hilabeteko",
apps/web/public/static/locales/da/common.json (1)

866-873: Brand consistency: “Cal AI” vs “Cal.ai”.

This file mixes “Cal AI” and “Cal.ai”. Past review already flagged this; apply one style (repo typically uses “Cal.ai”).

-  "cal_ai_phone_numbers": "Cal AI-telefonnumre",
+  "cal_ai_phone_numbers": "Cal.ai-telefonnumre",
-  "cal_ai_phone_numbers_description": "Administrer dine Cal AI-telefonnumre",
+  "cal_ai_phone_numbers_description": "Administrer dine Cal.ai-telefonnumre",
-  "import_phone_number_description": "Importer dit Twilio-telefonnummer til brug med Cal AI-telefon",
+  "import_phone_number_description": "Importer dit Twilio-telefonnummer til brug med Cal.ai-telefon",
-  "cal_ai_phone_call_action": "Ring til deltager ved hjælp af Cal.ai Voice Agent",
+  "cal_ai_phone_call_action": "Ring til deltager ved hjælp af Cal.ai‑stemmeagent"
#!/bin/bash
# Repo-wide scan for branding variants
rg -n "Cal\.ai|Cal AI" apps/web/public/static/locales -g '!**/node_modules/**'

Also applies to: 879-883, 2715-2717

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

123-123: Rename acknowledged; ensure EN locale has the new key and no old usages remain.

The singular key round_robin_host_unavailable_for_booking looks good here. Please verify:

  • No remaining references to the old plural key round_robin_hosts_unavailable_for_booking.
  • apps/web/public/static/locales/en/common.json contains the new key.
#!/bin/bash
# 1) Find any usage of the old key
rg -nS "round_robin_hosts_unavailable_for_booking" -g '!**/node_modules/**'

# 2) Verify the new key exists in EN
jq -e 'has("round_robin_host_unavailable_for_booking")' apps/web/public/static/locales/en/common.json >/dev/null || {
  echo "EN locale missing: round_robin_host_unavailable_for_booking"; exit 1; }
apps/web/public/static/locales/fr/common.json (2)

813-813: Grammar fix: agreement and verb choice.

Replace “Un ou plusieurs étapes … ont …” with proper agreement and verb.

-"workflow_validation_empty_fields": "Un ou plusieurs étapes du workflow ont un contenu de message vide",
+"workflow_validation_empty_fields": "Une ou plusieurs étapes du workflow contiennent un message vide",

1541-1541: Currency + wording consistency (align with line 863).

Use “américain” and place “$” before the number without “{{price}}$”.

-"buy_us_number_button": "Acheter un numéro US pour {{priceInDollars}}$/mois",
+"buy_us_number_button": "Acheter un numéro américain pour ${{priceInDollars}}/mois",
apps/web/public/static/locales/uk/common.json (2)

855-855: Capitalize brand “Twilio”.

Proper noun; replace lower-case “twilio” with “Twilio”.

-  "buy_a_phone_number_or_import_one_you_already_have": "Купіть номер телефону або імпортуйте той, який у вас вже є в twilio",
+  "buy_a_phone_number_or_import_one_you_already_have": "Купіть номер телефону або імпортуйте той, який у вас вже є в Twilio",

1541-1541: Currency placement fix.

Use $ before the amount and “/місяць” for consistency (“${{price}}/місяць”).

-  "buy_us_number_button": "Купити номер США за {{priceInDollars}}$/місяць",
+  "buy_us_number_button": "Купити номер США за ${{priceInDollars}}/місяць",
apps/web/public/static/locales/ja/common.json (1)

123-123: Key rename looks correct; verify old key is fully removed and unused.

Confirm no lingering usages of round_robin_hosts_unavailable_for_booking.

#!/bin/bash
rg -nP 'round_robin_hosts_unavailable_for_booking' -S
apps/web/public/static/locales/pt-BR/common.json (2)

851-852: Normalize brand to “Cal AI” (consistency with rest of file).

Several strings still use “Cal.ai”. Standardize to “Cal AI”.

-  "create_new_workflow_agent": "Criar novo agente de voz cal.ai para fluxo de trabalho",
-  "create_new_workflow_agent_description": "Crie um novo agente de voz cal.ai para fluxo de trabalho para automatizar seus processos",
+  "create_new_workflow_agent": "Criar novo agente de voz Cal AI para fluxo de trabalho",
+  "create_new_workflow_agent_description": "Crie um novo agente de voz Cal AI para fluxo de trabalho para automatizar seus processos",

-  "cal_ai_agent": "Agente Cal.ai",
-  "test_cal_ai_agent": "Testar agente Cal.ai",
+  "cal_ai_agent": "Agente Cal AI",
+  "test_cal_ai_agent": "Testar agente Cal AI",
-  "cal_ai_phone_call_action": "Ligar para o participante usando o Agente de Voz Cal.ai",
-  "cal_ai_agent_configuration": "Configuração do agente Cal.ai",
+  "cal_ai_phone_call_action": "Ligar para o participante usando o Agente de Voz Cal AI",
+  "cal_ai_agent_configuration": "Configuração do agente Cal AI",

Also applies to: 866-867, 2716-2717


1541-1541: Fix currency glyph placement.

Place “$” before the value: ${{priceInDollars}}/mês.

-  "buy_us_number_button": "Comprar número dos EUA por {{priceInDollars}}$/mês",
+  "buy_us_number_button": "Comprar número dos EUA por ${{priceInDollars}}/mês",
apps/web/public/static/locales/zh-CN/common.json (2)

123-123: Key rename looks correct; ensure callers updated.

round_robin_host_unavailable_for_booking replaces the old pluralized key. Confirm no remaining references to round_robin_hosts_unavailable_for_booking in code or templates.

Run to double‑check:

#!/bin/bash
rg -n --hidden -S '\bround_robin_hosts_unavailable_for_booking\b' || echo 'OK: no old key references.'

867-874: Standardize brand to “Cal.ai” (dot, no space).

This file mixes “Cal.ai” and “Cal AI”. Please normalize to “Cal.ai” per brand usage.

Apply:

-  "cal_ai_phone_numbers": "Cal AI 电话号码",
+  "cal_ai_phone_numbers": "Cal.ai 电话号码",
-  "cal_ai_phone_numbers_description": "管理您的 Cal AI 电话号码",
+  "cal_ai_phone_numbers_description": "管理您的 Cal.ai 电话号码"

Spot any remaining variants:

#!/bin/bash
rg -n 'Cal AI|CalAI' apps/web/public/static/locales/zh-CN/common.json

Also applies to: 871-873

Comment on lines +807 to 841
"termination_uri": "Sonlandırma URI",
"sip_trunk_username": "SIP Trunk istifadəçi adı",
"sip_trunk_password": "SIP Trunk şifrəsi",
"nickname": "Ləqəb",
"delete_phone_number": "Telefon nömrəsini sil",
"workflow_validation_failed": "İş axını doğrulaması uğursuz oldu",
"workflow_validation_empty_fields": "Bir və ya daha çox iş axını addımında boş mesaj məzmunu var",
"workflow_validation_unverified_contacts": "Bir və ya daha çox telefon nömrəsi və ya e-poçt ünvanı təsdiqlənməyib",
"phone_number_imported_successfully": "Telefon nömrəsi uğurla idxal edildi və agentə bağlandı",
"phone_number_deleted_successfully": "Telefon nömrəsi uğurla silindi",
"delete_phone_number_confirmation": "Bu telefon nömrəsini silmək istədiyinizə əminsiniz? Bu əməliyyat geri qaytarıla bilməz.",
"yes_delete_phone_number": "Bəli, telefon nömrəsini sil",
"phone_number_info_tooltip": "İdxal etməyə çalışdığınız nömrə E.164 formatında olmalıdır (+ölkə kodu və ardınca nömrə, boşluq və ya xüsusi simvollar olmadan), məsələn, +1234567890",
"termination_uri_info_tooltip": "Elastik SIP trunkunuzu unikal şəkildə müəyyən etmək üçün sonlandırma URI. Bu, gedən zənglər üçün istifadə olunur. Twilio elastik SIP trunkları üçün həmişə .pstn.twilio.com ilə bitir.",
"sip_trunk_username_info_tooltip": "SIP trunku təsdiqləmək üçün istifadə olunan istifadəçi adı.",
"sip_trunk_password_info_tooltip": "SIP trunku təsdiqləmək üçün istifadə olunan şifrə.",
"nickname_info_tooltip": "Nömrənin ləqəbi. Bu yalnız sizin istinadınız üçündür.",
"save_and_test_call": "Saxla və zəngi test et",
"call_initiated_successfully": "Zəng uğurla başladıldı",
"please_enter_phone_number": "Zəhmət olmasa telefon nömrəsini daxil edin",
"agent_updated_successfully": "Agent uğurla yeniləndi",
"agent_created_successfully": "Agent uğurla yaradıldı",
"phone_number_unsubscribed_successfully": "Telefon nömrəsi uğurla abunəlikdən çıxarıldı",
"general_prompt_description": "Bu sorğu agentin rolunu və əsas məqsədlərini müəyyən edir",
"prompt": "Sorğu",
"call_to": "Zəng et",
"make_test_call_to_verify_configuration": "Konfiqurasiyanı yoxlamaq üçün test zəngi edin",
"initial_message": "İlkin mesaj",
"initial_message_description": "Zəng başlayarkən agentin deyəcəyi ilk mesaj",
"having_trouble_importing": "İdxal etməkdə çətinlik çəkirsiniz?",
"learn": "Öyrən",
"learn_how_to_get_your_terminator": "Sonlandırma URI və SIP trunk məlumatlarınızı necə əldə edəcəyinizi öyrənin",
"phone_number_subscription_cancelled_successfully": "Telefon nömrəsi abunəliyi uğurla ləğv edildi",
"updating": "Yenilənir",
"round_robin": "Round Robin",
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

Brand/style: Twilio capitalization.

Capitalize brand “Twilio” in user-facing text.

Apply this diff:

-  "buy_a_phone_number_or_import_one_you_already_have": "Telefon nömrəsi alın və ya artıq twilio-da malik olduğunuz nömrəni idxal edin",
+  "buy_a_phone_number_or_import_one_you_already_have": "Telefon nömrəsi alın və ya artıq Twilio-da malik olduğunuz nömrəni idxal edin",

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
apps/web/public/static/locales/az/common.json around lines 807 to 841: ensure
all user-facing occurrences of the brand name "twilio" are capitalized as
"Twilio" (but do not alter hostnames/domains like .pstn.twilio.com); update any
lowercase "twilio" tokens in the visible strings to "Twilio" while leaving
domain strings unchanged.

💡 Verification agent

🧩 Analysis chain

Quick consistency check (script).

Run to spot remaining brand/casing issues in AZ locale.

Also applies to: 852-874, 1541-1541, 2345-2346, 2827-2829, 3549-3577


🏁 Script executed:

#!/bin/bash
# From repo root
set -euo pipefail
f="apps/web/public/static/locales/az/common.json"

echo "Find mixed Cal AI vs Cal.ai:"
rg -n "Cal\.ai|cal\.ai|Cal AI" "$f"

echo "Find lowercase 'twilio':"
rg -n "\btwilio\b" "$f"

echo "Find lowercase 'url' tokens:"
rg -nP '\burl(-i)?\b' "$f"

echo "Find any 'slaq' vs 'slug':"
rg -n "slaq|slug" "$f"

echo "Check inconsistent currency placement around priceInDollars:"
rg -n "priceInDollars" "$f" -n -C1

Length of output: 6599


Unify brand and formatting in AZ locale translations

  • Standardize “Cal.ai” brand styling: replace mixed usages (“Cal AI”, “cal.ai”) with “Cal.ai” in keys and values (lines 26, 806, 851–852, 866–867, 871–873, 881, 2624, 2715–2716).
  • Capitalize “Twilio”: update lowercase mentions (e.g. line 854).
  • Use consistent “URL” casing: replace all lowercased “url” tokens in keys and texts with “URL” (lines 77, 894, 900, 1242, 1606, 1994–1995, 2242–2245, 2826–2828).
  • Standardize “slug” translation: choose one term (“slug” vs “slaq”) and apply consistently (lines 1944–1947, 2009, 2242–2245, 2404, 2419, 2462, 2729, 3171, 3550).
  • Ensure uniform USD formatting around priceInDollars: place $ consistently before or after the variable (lines 862, 884 vs 1541).

Also verify and apply these fixes in the following ranges: 852–874, 1541–1541, 2345–2346, 2827–2829, 3549–3577.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/az/common.json around lines 807–841 (and also
apply changes in ranges 26, 77, 77–900, 852–874, 851–873, 862–884, 894–900,
1242, 1541, 1606, 1944–1947, 1994–1995, 2009, 2242–2245, 2345–2346, 2404, 2419,
2462, 2624, 2715–2716, 2729, 2826–2829, 3171, 3549–3577), unify
branding/formatting: replace any variant of “Cal AI”, “cal.ai” or similar with
“Cal.ai”; capitalize “Twilio” wherever lowercased; change all occurrences of
“url” in keys/text to “URL”; pick one translation for “slug” (use either “slug”
or “slaq”) and apply it consistently across the listed lines; and normalize USD
formatting by placing the $ consistently (e.g., always prefix priceInDollars
with $). Make these string-only edits without changing key structure or JSON
punctuation, and run a JSON lint after edits to ensure no syntax errors.

Comment on lines +852 to +874
"create_new_workflow_agent_description": "İş axınlarınızı avtomatlaşdırmaq üçün yeni iş axını cal.ai səs agenti yaradın",
"phone_number_for_ai_call": "Telefon nömrəsi (agentimizin zəng edəcəyi)",
"buy_a_phone_number_or_import_one_you_already_have": "Telefon nömrəsi alın və ya artıq twilio-da malik olduğunuz nömrəni idxal edin",
"test_agent": "Test agent",
"phone_numbers": "Telefon nömrələri",
"unsubscribe": "Abunəlikdən çıx",
"delete_workflow_step": "İş axını addımını sil",
"unsubscribe_phone_number": "Telefon nömrəsini abunəlikdən çıxarın",
"buy_a_new_number": "Yeni nömrə alın",
"only_us_phone_numbers_can_be_purchased_here": "Yalnız ABŞ telefon nömrələrini ala bilərsiniz. Digər ölkələr üçün öz Twilio telefon nömrənizi idxal edə bilərsiniz.",
"buy_number_for_x_per_month": "ABŞ nömrəsini ayda ${{priceInDollars}} qiymətinə alın",
"supported_call_destinations": "Dəstəklənən Zəng Təyinat Yerləri",
"no_phone_number_connected": "Qoşulmuş telefon nömrəsi yoxdur",
"failed_to_get_workflow_step_id": "İş axını addımının ID-sini əldə etmək alınmadı",
"cal_ai_agent": "Cal.ai Agenti",
"test_cal_ai_agent": "Cal.ai Agentini Test et",
"are_you_sure_you_want_to_delete_workflow_step": "Bu iş axını addımını silmək istədiyinizə əminsiniz?",
"do_you_still_want_to_unsubscribe": "Bu agentdən telefon nömrəsinin abunəliyini ləğv etmək istəyirsiniz?",
"the_action_will_disconnect_phone_number": "Bu əməliyyat telefon nömrəsini agentdən ayıracaq. Yeni telefon nömrəsi qoşulana qədər agent zəng edə bilməyəcək.",
"cal_ai_phone_numbers": "Cal AI Telefon Nömrələri",
"connect_phone_number": "Telefon Nömrəsini Qoş",
"cal_ai_phone_numbers_description": "Cal AI Telefon Nömrələrinizi idarə edin",
"import_number": "Nömrəni İdxal et",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Cal AI brand consistency.

Use a single brand form. File mixes “Cal AI” and “Cal.ai”. Suggest aligning to “Cal AI” (used elsewhere: “Cal AI Köməkçisi”, “Cal AI Telefon Nömrələri”).

Proposed diffs:

-  "create_new_workflow_agent": "Yeni iş axını cal.ai səs agenti yaradın",
-  "create_new_workflow_agent_description": "İş axınlarınızı avtomatlaşdırmaq üçün yeni iş axını cal.ai səs agenti yaradın",
+  "create_new_workflow_agent": "Yeni iş axını Cal AI səs agenti yaradın",
+  "create_new_workflow_agent_description": "İş axınlarınızı avtomatlaşdırmaq üçün yeni iş axını Cal AI səs agenti yaradın",

-  "cal_ai_agent": "Cal.ai Agenti",
+  "cal_ai_agent": "Cal AI Agenti",

Would you like me to propagate the same normalization across all locales in this PR?


🏁 Script executed:

#!/bin/bash
# Search for “Cal.ai” occurrences in the Azerbaijani locale file
rg -n '"Cal\\.ai' -C2 apps/web/public/static/locales/az/common.json

# Search for “Cal AI” occurrences in the Azerbaijani locale file
rg -n '"Cal AI' -C2 apps/web/public/static/locales/az/common.json

# Search across all locale common.json files for both variants
rg -n '"Cal\\.ai' -C2 apps/web/public/static/locales/**/common.json
rg -n '"Cal AI' -C2 apps/web/public/static/locales/**/common.json

Length of output: 35907


🏁 Script executed:

#!/bin/bash
# Check for any occurrences of “Cal.ai” or “cal.ai” in the Azerbaijani locale file
rg -n -C2 -i '"cal\.ai' apps/web/public/static/locales/az/common.json

Length of output: 972


🏁 Script executed:

#!/bin/bash
# Verify presence of create_new_workflow_agent keys in the Azerbaijani locale file
rg -n '"create_new_workflow_agent' -C2 apps/web/public/static/locales/az/common.json

Length of output: 644


Normalize “Cal.ai” to “Cal AI” in Azerbaijani locale

  • Replace all “Cal.ai” occurrences with “Cal AI” for keys:
    • create_new_workflow_agent
    • create_new_workflow_agent_description
    • cal_ai_agent
    • test_cal_ai_agent
    • cal_ai_phone_call_action
    • cal_ai_agent_configuration
  • Propagate this normalization across other locale files in this PR.
🤖 Prompt for AI Agents
apps/web/public/static/locales/az/common.json lines 852-874: several entries use
the text "Cal.ai" (e.g., create_new_workflow_agent_description and cal_ai_agent)
— update those values to use "Cal AI" instead of "Cal.ai" (e.g., "İş
axınlarınızı avtomatlaşdırmaq üçün yeni iş axını Cal AI səs agenti yaradın" and
"Cal AI Agenti"), and ensure the same normalization is applied to the other
specified keys (create_new_workflow_agent,
create_new_workflow_agent_description, cal_ai_agent, test_cal_ai_agent,
cal_ai_phone_call_action, cal_ai_agent_configuration) and propagated
consistently across all other locale files in this PR by performing a
project-wide search-and-replace of the "Cal.ai" token in locale values to "Cal
AI" while preserving surrounding text and key names.

Comment on lines +2345 to 2346
"use_our_headless_routing_api": "Göndərmələr üçün bizim başsız yönləndirmə API-mizdan və öz formunuzdan istifadə edin.",
"need_help_embedding": "Kömək lazımdır? Cal-ı Wix, Squarespace və ya WordPress-də yerləşdirmək üçün təlimatlarımıza baxın, ümumi suallarımızı yoxlayın və ya inkişaf etmiş yerləşdirmə seçimlərini araşdırı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

Case/grammar: postposition on “API-mizdən”.

“API-mizdan” → “API-mizdən”.

-  "use_our_headless_routing_api": "Göndərmələr üçün bizim başsız yönləndirmə API-mizdan və öz formunuzdan istifadə edin.",
+  "use_our_headless_routing_api": "Göndərmələr üçün bizim başsız yönləndirmə API-mizdən və öz formunuzdan istifadə edin.",
📝 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
"use_our_headless_routing_api": "Göndərmələr üçün bizim başsız yönləndirmə API-mizdan və öz formunuzdan istifadə edin.",
"need_help_embedding": "Kömək lazımdır? Cal-ı Wix, Squarespace və ya WordPress-də yerləşdirmək üçün təlimatlarımıza baxın, ümumi suallarımızı yoxlayın və ya inkişaf etmiş yerləşdirmə seçimlərini araşdırın.",
"use_our_headless_routing_api": "Göndərmələr üçün bizim başsız yönləndirmə API-mizdən və öz formunuzdan istifadə edin.",
"need_help_embedding": "Kömək lazımdır? Cal-ı Wix, Squarespace və ya WordPress-də yerləşdirmək üçün təlimatlarımıza baxın, ümumi suallarımızı yoxlayın və ya inkişaf etmiş yerləşdirmə seçimlərini araşdırın.",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/az/common.json around lines 2345-2346 the
Azerbaijani string uses the incorrect vowel in the postposition ("API-mizdan");
replace "API-mizdan" with the correct form "API-mizdən" in that translation
value so the postposition uses the proper character and grammar.

"hosts_unavailable_for_booking": "কিছু হোস্ট বুকিংয়ের জন্য অনুপলব্ধ।",
"fixed_hosts_unavailable_for_booking": "কিছু নির্দিষ্ট হোস্ট বুকিংয়ের জন্য অনুপলব্ধ।",
"round_robin_hosts_unavailable_for_booking": "কোনো রাউন্ড রবিন হোস্ট বুকিংয়ের জন্য উপলব্ধ নেই।",
"round_robin_host_unavailable_for_booking": "রাউন্ড রবিন হোস্ট বুকিং এর জন্য অনুপলব্ধ।",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Key rename LGTM; verify no stale references remain.

The new key round_robin_host_unavailable_for_booking reads well. Please confirm the old plural key isn’t referenced anywhere to avoid runtime fallbacks.


🏁 Script executed:

#!/bin/bash
# stale usages of the old key
rg -n --no-ignore -S "round_robin_hosts_unavailable_for_booking"

# spot-check new key exists across all locales
fd common.json apps/web/public/static/locales | xargs -I{} jq -er 'has("round_robin_host_unavailable_for_booking")' {} >/dev/null || echo "Missing in some locales"

Length of output: 246


Ensure translation key present in all locales

  • No stale references to round_robin_hosts_unavailable_for_booking remain.
  • round_robin_host_unavailable_for_booking is missing in some common.json locale files; add it everywhere to prevent missing translations at runtime.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/bn/common.json around line 123, the
translation key used in the repo should be
round_robin_host_unavailable_for_booking but some locale files still miss it
(and there are stale references to round_robin_hosts_unavailable_for_booking);
add the exact key "round_robin_host_unavailable_for_booking" with the Bengali
translation to every locale's common.json, remove or replace any occurrences of
the old pluralized key round_robin_hosts_unavailable_for_booking across the
codebase and locale files, and run a quick search to verify all locales have the
consistent key to avoid runtime missing-translation errors.

Comment on lines 1688 to 1690
"location_info": "ইভেন্টের অবস্থান",
"additional_notes_variable": "অতিরিক্ত নোট",
"additional_notes_info": "বুকিংয়ের অতিরিক্ত নোট",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Variables: standardize “URL” Bengali rendering for consistency.

Elsewhere “ইউআরএল” is used; here “url” appears in Latin. Recommend aligning.

-  "rating_url_variable": "রেটিং url",
+  "rating_url_variable": "রেটিং ইউআরএল",
-  "no_show_url_variable": "নো শো url",
+  "no_show_url_variable": "নো শো ইউআরএল",

Also applies to: 2203-2203, 3019-3022


🏁 Script executed:

#!/bin/bash
# Token parity check between en and bn for variable-bearing strings
for key in rating_url_variable no_show_url_variable location_variable timezone_variable event_start_time_in_attendee_timezone_variable event_end_time_in_attendee_timezone_variable; do
  en=$(jq -r --arg k "$key" '.[$k]' apps/web/public/static/locales/en/common.json)
  bn=$(jq -r --arg k "$key" '.[$k]' apps/web/public/static/locales/bn/common.json)
  echo "== $key ==" 
  printf 'EN tokens: '; grep -o '{{[^}]\+}}' <<<"$en" | sort -u | xargs -r echo
  printf 'BN tokens: '; grep -o '{{[^}]\+}}' <<<"$bn" | sort -u | xargs -r echo
done

Length of output: 4208


🏁 Script executed:

#!/bin/bash
# Verify translation entries for URL consistency in bn/common.json

# Show context for rating_url_variable
grep -n '"rating_url_variable"' -C2 apps/web/public/static/locales/bn/common.json

# Show context for no_show_url_variable
grep -n '"no_show_url_variable"' -C2 apps/web/public/static/locales/bn/common.json

# List occurrences of the Bengali transliteration “ইউআরএল”
grep -n 'ইউআরএল' apps/web/public/static/locales/bn/common.json | head -n 10

Length of output: 1874


Fix Bengali “url” translations to use “ইউআরএল”.

apps/web/public/static/locales/bn/common.json, around lines 2826–2828:

-  "rating_url_variable": "রেটিং url",
+  "rating_url_variable": "রেটিং ইউআরএল",
-  "no_show_url_variable": "নো শো url",
+  "no_show_url_variable": "নো শো ইউআরএল",
📝 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
"location_info": "ইভেন্টের অবস্থান",
"additional_notes_variable": "অতিরিক্ত নোট",
"additional_notes_info": "বুকিংয়ের অতিরিক্ত নোট",
"rating_url_variable": "রেটিং ইউআরএল",
"no_show_url_variable": "নো শো ইউआरএল",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/bn/common.json around lines 1688-1690, the
Bengali translations for keys referencing "url" must use the term "ইউআরএল"; find
the entries in this file (and nearby lines reported around 2826–2828) where
"url" is translated differently and replace those translations with "ইউআরএল"
(preserve surrounding punctuation and spacing), then save the file and run any
i18n validation/linting to ensure JSON remains valid.

Comment on lines +871 to +874
"cal_ai_phone_numbers": "Numere de telefon Cal AI",
"connect_phone_number": "Conectați numărul de telefon",
"cal_ai_phone_numbers_description": "Gestionați numerele de telefon Cal AI",
"import_number": "Importați numărul",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Quick verification checks

Run to catch remaining branding/currency/tone issues and stale key refs.

Also applies to: 1541-1541, 838-838


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 1) Old key references should be gone
rg -n "round_robin_hosts_unavailable_for_booking"

# 2) Branding: enforce "Cal.ai"
rg -n "Cal AI" apps/web/public/static/locales/ro/common.json || true
rg -n "Cal AI Phone" apps/web/public/static/locales/ro/common.json || true

# 3) Currency: catch $ placed after variable (e.g., {{price}}$)
rg -nP '\{\{[^}]+\}\}\$' apps/web/public/static/locales/ro/common.json || true

# 4) Misused term
rg -n "acreditive" apps/web/public/static/locales/ro/common.json || true

# 5) Informal imperatives likely needing polish
rg -n 'Conectează|Finalizează|Completează-ți|Folosește|Cumpără' apps/web/public/static/locales/ro/common.json || true

Length of output: 69


🏁 Script executed:

#!/bin/bash
set -euo pipefail

FILE="apps/web/public/static/locales/ro/common.json"

# 1) Old key references should be gone
rg -n "round_robin_hosts_unavailable_for_booking" "$FILE" || true

# 2) Branding: enforce "Cal.ai"
rg -n "Cal AI" "$FILE" || true
rg -n "Cal AI Phone" "$FILE" || true

# 3) Currency: catch $ placed after variable (e.g., {{price}}$)
rg -nP '\{\{[^}]+\}\}\$' "$FILE" || true

# 4) Misused term
rg -n "acreditive" "$FILE" || true

# 5) Informal imperatives likely needing polish
rg -n 'Conectează|Finalizează|Completează-ți|Folosește|Cumpără' "$FILE" || true

Length of output: 4605


Fix branding, currency symbol placement, and mistranslation in common.json

  • Lines 871/873/881: replace occurrences of “Cal AI” or “Cal AI Phone” with “Cal.ai” (e.g.
    "Numere de telefon Cal AI""Numere de telefon Cal.ai").
  • Line 1541: move $ before the variable:
    "{{priceInDollars}}$/lună""${{priceInDollars}}/lună".
  • Line 838: replace “acreditivele” with the correct term for credentials (e.g. “date de autentificare”).
🤖 Prompt for AI Agents
In apps/web/public/static/locales/ro/common.json around lines 838, 871–874 and
881, and 1541, fix branding, mistranslation and currency placement: replace
occurrences of “Cal AI” or “Cal AI Phone” with the correct brand “Cal.ai” (e.g.,
change the strings on ~lines 871–874 and 881 accordingly), on line ~838 replace
“acreditivele” with the correct Romanian term for credentials such as “date de
autentificare”, and on line ~1541 move the dollar sign before the variable so
the string reads with the $ preceding the interpolation (e.g.,
"${{priceInDollars}}/lună"). Ensure string keys and punctuation remain unchanged
while updating only the translated values.

"workflow_validation_failed": "Xác thực quy trình làm việc thất bại",
"workflow_validation_empty_fields": "Một hoặc nhiều bước quy trình làm việc có nội dung tin nhắn trống",
"workflow_validation_unverified_contacts": "Một hoặc nhiều số điện thoại hoặc địa chỉ email chưa được xác minh",
"phone_number_imported_successfully": "Số điện thoại đã được nhập và liên kết với đại lý thành công",
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

Normalize “Agent/Cal AI” terminology; fix Twilio capitalization (user-facing brand consistency).

Replace “đại lý/tác nhân/agent” → “Trợ lý”; “Cal.ai” → “Cal AI”; capitalize “Twilio”.

Apply:

-  "phone_number_imported_successfully": "Số điện thoại đã được nhập và liên kết với đại lý thành công",
+  "phone_number_imported_successfully": "Số điện thoại đã được nhập và liên kết với Trợ lý thành công",

-  "agent_updated_successfully": "Đại lý đã được cập nhật thành công",
+  "agent_updated_successfully": "Trợ lý đã được cập nhật thành công",
-  "agent_created_successfully": "Đại lý đã được tạo thành công",
+  "agent_created_successfully": "Trợ lý đã được tạo thành công",
-  "general_prompt_description": "Lời nhắc này xác định vai trò và mục tiêu chính của tác nhân",
+  "general_prompt_description": "Lời nhắc này xác định vai trò và mục tiêu chính của trợ lý",
-  "initial_message_description": "Tin nhắn đầu tiên mà tác nhân sẽ nói khi bắt đầu cuộc gọi",
+  "initial_message_description": "Tin nhắn đầu tiên mà trợ lý sẽ nói khi bắt đầu cuộc gọi",

-  "create_new_workflow_agent": "Tạo tác nhân giọng nói cal.ai cho quy trình làm việc mới",
+  "create_new_workflow_agent": "Tạo Trợ lý giọng nói Cal AI cho quy trình làm việc mới",
-  "create_new_workflow_agent_description": "Tạo tác nhân giọng nói cal.ai cho quy trình làm việc mới để tự động hóa quy trình của bạn",
+  "create_new_workflow_agent_description": "Tạo Trợ lý giọng nói Cal AI cho quy trình làm việc mới để tự động hóa quy trình của bạn",
-  "phone_number_for_ai_call": "Số điện thoại (để tác nhân của chúng tôi gọi)",
+  "phone_number_for_ai_call": "Số điện thoại (để Trợ lý của chúng tôi gọi)",
-  "buy_a_phone_number_or_import_one_you_already_have": "Mua số điện thoại mới hoặc nhập số bạn đã có trên twilio",
+  "buy_a_phone_number_or_import_one_you_already_have": "Mua số điện thoại mới hoặc nhập số bạn đã có trên Twilio",

-  "cal_ai_agent": "Trợ lý Cal.ai",
+  "cal_ai_agent": "Trợ lý Cal AI",
-  "test_cal_ai_agent": "Kiểm tra trợ lý Cal.ai",
+  "test_cal_ai_agent": "Kiểm tra Trợ lý Cal AI",

-  "cal_ai_phone_call_action": "Gọi cho người tham dự bằng Trợ lý Giọng nói Cal.ai",
+  "cal_ai_phone_call_action": "Gọi cho người tham dự bằng Trợ lý giọng nói Cal AI",
-  "cal_ai_agent_configuration": "Cấu hình Agent Cal.ai",
+  "cal_ai_agent_configuration": "Cấu hình Trợ lý Cal AI",

-  "enter_the_general_prompt_for_the_agent": "Nhập lời nhắc chung cho agent",
+  "enter_the_general_prompt_for_the_agent": "Nhập lời nhắc chung cho trợ lý"

Also applies to: 827-835, 851-855, 866-868, 2716-2717, 2727-2727

🤖 Prompt for AI Agents
In apps/web/public/static/locales/vi/common.json around lines 815 (and also
update occurrences at 827-835, 851-855, 866-868, 2716-2717, 2727), several
user-facing strings use inconsistent terminology and capitalization; replace any
Vietnamese translations using “đại lý”, “tác nhân”, or “agent” with “Trợ lý”,
change “Cal.ai” to “Cal AI”, and ensure “Twilio” is capitalized; update each
affected string accordingly while preserving original meaning and punctuation.

Comment on lines +866 to +868
"cal_ai_agent": "Trợ lý Cal.ai",
"test_cal_ai_agent": "Kiểm tra trợ lý Cal.ai",
"are_you_sure_you_want_to_delete_workflow_step": "Bạn có chắc muốn xóa bước quy trình làm việc này không?",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Note: consistent capitalization of “Trợ lý”.

Ensure “Trợ lý” remains capitalized when used as a proper product role title next to “Cal AI”.


🏁 Script executed:

#!/bin/bash
# Check remaining inconsistent brand/term usage in this locale
rg -nP 'cal\.ai|\\b(đại lý|tác nhân)\\b|\\btwilio\\b' apps/web/public/static/locales/vi/common.json -n

Length of output: 339


Capitalize “Trợ lý” in create_new_workflow_agent translations
apps/web/public/static/locales/vi/common.json:851–852
Replace

"Tạo tác nhân giọng nói cal.ai cho quy trình làm việc mới",
"Tạo tác nhân giọng nói cal.ai cho quy trình làm việc mới để tự động hóa quy trình của bạn",

with

"Tạo Trợ lý giọng nói Cal.ai cho quy trình làm việc mới",
"Tạo Trợ lý giọng nói Cal.ai cho quy trình làm việc mới để tự động hóa quy trình của bạn",
🤖 Prompt for AI Agents
apps/web/public/static/locales/vi/common.json around lines 851-852: two
Vietnamese translation strings for create_new_workflow_agent use lowercase "Trợ
lý" and need capitalization; update the two entries by changing "Tạo tác nhân
giọng nói cal.ai cho quy trình làm việc mới" and "Tạo tác nhân giọng nói cal.ai
cho quy trình làm việc mới để tự động hóa quy trình của bạn" to use "Tạo Trợ lý
giọng nói Cal.ai cho quy trình làm việc mới" and "Tạo Trợ lý giọng nói Cal.ai
cho quy trình làm việc mới để tự động hóa quy trình của bạn" respectively,
preserving surrounding JSON formatting and quotes.

"open": "Mở",
"close": "Đóng",
"upgrade": "Nâng cấp",
"buy_us_number_button": "Mua số điện thoại Mỹ với giá {{priceInDollars}}$/tháng",
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

Fix currency formatting to match existing pattern.

Use "${{priceInDollars}}/tháng" (not "{{priceInDollars}}$/tháng").

-  "buy_us_number_button": "Mua số điện thoại Mỹ với giá {{priceInDollars}}$/tháng",
+  "buy_us_number_button": "Mua số điện thoại Mỹ với giá ${{priceInDollars}}/tháng",
📝 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
"buy_us_number_button": "Mua số điện thoại Mỹ với giá {{priceInDollars}}$/tháng",
"buy_us_number_button": "Mua số điện thoại Mỹ với giá ${{priceInDollars}}/tháng",
🤖 Prompt for AI Agents
In apps/web/public/static/locales/vi/common.json around line 1541, the currency
formatting is inconsistent: the value currently uses
"{{priceInDollars}}$/tháng"; update the string to use the existing pattern by
placing the dollar sign before the placeholder as "${{priceInDollars}}/tháng" so
it reads "Mua số điện thoại Mỹ với giá ${{priceInDollars}}/tháng".

Comment on lines +3549 to +3577
"webhook_created_at": "Webhook 创建时间",
"webhook_type": "事件类型标识",
"webhook_title": "事件类型名称",
"webhook_start_time": "事件的开始时间",
"webhook_end_time": "事件的结束时间",
"webhook_description": "事件类型设置中描述的事件描述",
"webhook_location": "事件的位置",
"webhook_uid": "预订的 UID",
"webhook_reschedule_uid": "重新安排的 UID",
"webhook_cancellation_reason": "取消原因",
"webhook_rejection_reason": "拒绝原因",
"webhook_organizer_name": "组织者姓名",
"webhook_organizer_email": "组织者的电子邮件",
"webhook_organizer_timezone": "组织者的时区(例如:'America/New_York','Asia/Kolkata')",
"webhook_organizer_locale": "组织者的语言环境(例如:'en','fr')",
"webhook_attendee_name": "第一位参与者的姓名",
"webhook_attendee_email": "第一位参与者的电子邮件",
"webhook_attendee_timezone": "第一位参与者的时区",
"webhook_attendee_locale": "第一位参与者的语言环境",
"webhook_team_name": "已预约团队的名称",
"webhook_team_members": "已预约团队的成员",
"webhook_video_call_url": "会议的视频通话链接",
"webhook_hide_variables": "隐藏变量",
"webhook_show_variable": "显示可用变量",
"webhook_event_and_booking": "事件和预约",
"webhook_people": "人员",
"webhook_teams": "团队",
"webhook_metadata": "元数据",
"stats": "统计",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Webhook variable labels: OK; add quick QA guardrails.

Copy is descriptive; consider a lightweight validation to keep placeholders aligned with en/common.json.

Run consistency checks (duplicates, placeholder balance, and en↔zh placeholder count):


🏁 Script executed:

#!/bin/bash
set -euo pipefail

ZH='apps/web/public/static/locales/zh-CN/common.json'
EN='apps/web/public/static/locales/en/common.json'

# 1) Detect duplicate keys (JSON allows last-one-wins; we want to catch it)
python - <<'PY'
import re,sys,collections,io
p=sys.argv[1]
text=io.open(p,'r',encoding='utf-8').read()
keys=re.findall(r'^\s*"([^"]+)"\s*:',text,flags=re.M)
dups=[k for k,c in collections.Counter(keys).items() if c>1]
print("Duplicate keys:", ", ".join(dups) if dups else "None")
PY "$ZH"

# 2) Placeholder count parity between en and zh (best-effort {{var}} occurrences)
python - <<'PY'
import json, re, io, sys
en_p, zh_p = sys.argv[1], sys.argv[2]
en=json.load(io.open(en_p,'r',encoding='utf-8'))
zh=json.load(io.open(zh_p,'r',encoding='utf-8'))
bad=[]
rx=re.compile(r'\{\{[^}]+\}\}')
for k,v in en.items():
    if k in zh and isinstance(v,str) and isinstance(zh[k],str):
        ce=len(rx.findall(v))
        cz=len(rx.findall(zh[k]))
        if ce!=cz:
            bad.append((k,ce,cz))
print("Placeholder count mismatches:", len(bad))
for k,ce,cz in bad[:50]:
    print(f"- {k}: en={ce}, zh={cz}")
PY "$EN" "$ZH"

Length of output: 358


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

ZH='apps/web/public/static/locales/zh-CN/common.json'
EN='apps/web/public/static/locales/en/common.json'

# 1) Detect duplicate keys
echo "Duplicate keys:"
jq -r 'keys[]' "$ZH" | sort | uniq -c | awk '$1>1{print $2}' || echo "None"

# 2) Placeholder count parity between en and zh
python3 - <<'PY'
import json, re, sys
en = json.load(open(sys.argv[1], encoding='utf-8'))
zh = json.load(open(sys.argv[2], encoding='utf-8'))
rx = re.compile(r'\{\{[^}]+\}\}')
mismatches = []
for k, v in en.items():
    if k in zh and isinstance(v, str) and isinstance(zh[k], str):
        ce, cz = len(rx.findall(v)), len(rx.findall(zh[k]))
        if ce != cz:
            mismatches.append((k, ce, cz))
print("Placeholder count mismatches:", len(mismatches))
for key, ce, cz in mismatches:
    print(f"- {key}: en={ce}, zh={cz}")
PY "$EN" "$ZH"

Length of output: 514


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

ZH="apps/web/public/static/locales/zh-CN/common.json"
EN="apps/web/public/static/locales/en/common.json"

# 1) Detect duplicate keys
echo "Duplicate keys:"
jq -r 'keys[]' "$ZH" | sort | uniq -d || echo "None"

# 2) Placeholder count parity between en and zh
python3 <<EOF
import json, re
en = json.load(open("$EN", encoding="utf-8"))
zh = json.load(open("$ZH", encoding="utf-8"))
rx = re.compile(r'\{\{[^}]+\}\}')
mismatches = []
for k, v in en.items():
    if k in zh and isinstance(v, str) and isinstance(zh[k], str):
        ce = len(rx.findall(v))
        cz = len(rx.findall(zh[k]))
        if ce != cz:
            mismatches.append((k, ce, cz))
print(f"Placeholder count mismatches: {len(mismatches)}")
for key, ce, cz in mismatches:
    print(f"- {key}: en={ce}, zh={cz}")
EOF

Length of output: 488


Align zh-CN placeholder counts with en translations.

Placeholder mismatches detected in apps/web/public/static/locales/zh-CN/common.json:

  • meeting_with_user: en=0, zh=1
  • cal_provide_jitsi_meeting_url: en=0, zh=1
  • invalid_credential: en=1, zh=0
  • invalid_event_name_variables: en=1, zh=0
  • team_is_unpublished_description: en=0, zh=2

No duplicate keys found. Update the Chinese strings so each key’s {{…}} count matches the English source.

🤖 Prompt for AI Agents
In apps/web/public/static/locales/zh-CN/common.json around lines 3549-3577,
several Chinese entries have mismatched placeholder counts versus the English
source; update the listed keys so their {{…}} placeholder counts and names
exactly match the English translations: remove the stray placeholder in
meeting_with_user and cal_provide_jitsi_meeting_url (en=0, zh=1 → delete the
{{…}}), add the missing single placeholder to invalid_credential and
invalid_event_name_variables to match en (en=1, zh=0 → insert the same {{token}}
used in English), and remove both placeholders from
team_is_unpublished_description so it has zero placeholders like English (en=0,
zh=2 → delete both {{…}}). Ensure placeholder names/spacing match the English
source exactly.

@keithwillcode keithwillcode added this to the v5.7 milestone Sep 3, 2025
@keithwillcode keithwillcode enabled auto-merge (squash) September 3, 2025 13:39
@github-actions
Copy link
Contributor

github-actions bot commented Sep 3, 2025

E2E results are ready!

@keithwillcode keithwillcode merged commit a218964 into main Sep 3, 2025
62 of 65 checks passed
@keithwillcode keithwillcode deleted the lingo.dev/main branch September 3, 2025 14:29
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 ready-for-e2e size/XXL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants