-
Notifications
You must be signed in to change notification settings - Fork 10.4k
feat: update translations via @LingoDotDev #22894
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
The latest updates on your projects. Learn more about Vercel for GitHub. |
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. |
Important Review skippedReview was skipped due to path filters ⛔ Files ignored due to path filters (1)
CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including You can disable this status message by setting the WalkthroughRenames Possibly related PRs
✨ Finishing Touches🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
Status, Documentation and Community
|
Graphite Automations"Add consumer team as reviewer" took an action on this PR • (08/05/25)1 reviewer was added to this PR based on Keith Williams's automation. "Add foundation team as reviewer" took an action on this PR • (08/05/25)1 reviewer was added to this PR based on Keith Williams's automation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
♻️ Duplicate comments (1)
apps/web/public/static/locales/zh-TW/common.json (1)
1843-1844
: 延伸字串同樣需保持一致用詞這兩條權限說明仍使用「用戶端」。為保持一致,請同步改為「客戶端」。
🧹 Nitpick comments (34)
apps/web/public/static/locales/vi/common.json (1)
1843-1845
: Minor typography: missing period at sentence endLines 1843–1845 are full sentences but lack a terminal full-stop “.”.
Adding it keeps style identical to neighbouring admin-only notices (see Line 183-184 etc.).-"Chỉ quản trị viên hoặc chủ sở hữu của tổ chức mới có thể quản lý cài đặt đồng bộ hóa thư mục" +"Chỉ quản trị viên hoặc chủ sở hữu của tổ chức mới có thể quản lý cài đặt đồng bộ hóa thư mục."(Apply same to Line 1845).
apps/web/public/static/locales/ru/common.json (1)
874-878
: Consider the correct case for the direct-object form of “OAuth-client”.In Russian UI strings the object after “создать” normally takes the accusative case.
"create_oauth_client": "Создать OAuth-клиент"
should likely be
"Создать OAuth-клиента"
to be grammatically correct.-"create_oauth_client": "Создать OAuth-клиент", +"create_oauth_client": "Создать OAuth-клиента",apps/web/public/static/locales/uk/common.json (3)
874-877
: Terminology consistency check for OAuth-related stringsLooks good overall, but double-check that the existing UI consistently uses “OAuth клієнт” (singular) vs “OAuth клієнти” (plural).
In English we often mix “OAuth app / client”, so make sure the same Ukrainian term is used everywhere to avoid UI mismatches.No action required if the rest of the locale already follows this wording.
3311-3315
: PBAC resource additions: keep alphabetical groupingThe new
pbac_resource_attributes
+ description keys are appended to the block but break the existing alphabetical order of resources/descriptions set earlier in the file (event_type
,organization
, …).
Consider moving the four lines into the correct sorted position to keep future diffs minimal.No functional impact – purely maintainability.
3319-3324
: Updated “manage_*” descriptions – spelling checkMinor typo: “подій” vs “подій у”. Line 3324 currently reads
"Усі дії з типами подій у командах організації"
where “подій” already conveys genitive; “у” is OK but occasionally omitted elsewhere. Ensure wording is uniform across allpbac_desc_manage_*
entries (roles, teams, event types) to avoid translator noise.If the English originals differ, ignore.
apps/web/public/static/locales/ca/common.json (1)
3311-3316
: Minor typo: atributs not attributs
atributs
is already spelled correctly in the value strings, but the resource key also carries that typo (pbac_resource_attributes
).
If this was copied from the English locale it is fine, but double-check—renaming later is painful.apps/web/public/static/locales/zh-TW/common.json (1)
3311-3316
: 新增 PBAC 描述請檢查標點一致性
- Line 3313 與 3314 句尾缺少句號,而同區段其他描述多使用句號收尾。
- Line 3315
pbac_desc_manage_roles
應與前面敘述格式一致,可改為「管理組織(團隊)中角色的所有操作。」屬於細節但會影響文件閱讀體驗。
apps/web/public/static/locales/pl/common.json (1)
1843-1844
: Keep tone consistent in admin-only messagesStrings
only_admin_can_manage_directory_sync
/only_admin_can_manage_oauth_clients
start with “Tylko administrator lub właściciel…”.
Every other “admin-only” string in this file starts with “Tylko administrator …”.
For consistency either drop “lub właściciel” everywhere or keep it everywhere. Pick one and run i18n lint afterwards.apps/web/public/static/locales/hu/common.json (2)
1843-1844
: Consistency with existing “only_admin_can_…” stringsThe newly added keys follow the existing pattern but use singular “admin” while some previous entries use plural (“admins”).
Consider renaming toonly_admins_can_manage_*
for consistency with siblings (only_admins_can_manage_sso_org
, etc.).
3311-3316
: Keep PBAC help-texts alphabetically groupedNew PBAC resource/description pairs for “attributes” were appended at the bottom of the block.
For easier diffing & merge-conflict avoidance place them alphabetically with the otherpbac_*
entries.
This repo has been bitten by duplicated keys in the past.apps/web/public/static/locales/pt/common.json (2)
874-877
: Consider adding the definite article and keeping the voice consistentMost description strings in this file start with an imperative verb followed by the article “os” (e.g. “Gerencie os webhooks…”, “Configure as definições…”).
For consistency, prefer:- "oauth_clients_description": "Gerencie clientes OAuth para sua organização", + "oauth_clients_description": "Gerencie os clientes OAuth da sua organização",Minor, but it keeps wording uniform across the glossary.
1843-1844
: Capitalisation & voice inconsistent with neighbouring keysNearly every permission-warning string starts with a capital letter and the infinitive “Gerenciar/Administrar…”.
These two new entries start with a lowercase “gerenciar”.- "only_admin_can_manage_directory_sync": "Apenas o administrador ou proprietário da organização pode gerenciar as configurações de sincronização de diretório", - "only_admin_can_manage_oauth_clients": "Apenas o administrador ou proprietário da organização pode gerenciar clientes OAuth", + "only_admin_can_manage_directory_sync": "Apenas o administrador ou o proprietário da organização pode gerenciar as configurações de sincronização de diretório", + "only_admin_can_manage_oauth_clients": "Apenas o administrador ou o proprietário da organização pode gerenciar os clientes OAuth",This keeps capitalisation and the article “o” in line with the existing sentence style.
apps/web/public/static/locales/cs/common.json (1)
874-878
: Ensure punctuation style consistencyMost Czech strings in this file end without a trailing period, but several neighbouring entries (e.g.
"create_new_team_description"
) do use one.
For consistency across the locale consider either removing the full stop in"create_oauth_client_description": "Vytvořte nového OAuth klienta pro integraci s třetími stranami"
or systematically adding a period to the other short-description keys that currently lack it.
(This is purely cosmetic; nothing is functionally wrong.)apps/web/public/static/locales/de/common.json (1)
3311-3316
: PBAC attribute entries added without placeholder/grammar issues– Keys are unique.
– German wording (“Organisationsattribute”) matches the resource context.
– No placeholder tokens to validate.Consider keeping these PBAC description blocks alphabetically grouped like the existing ones for easier maintenance, but that’s optional.
apps/web/public/static/locales/sk-SK/common.json (2)
874-877
: Check consistency of term “OAuth klient” (singular) vs “OAuth klienti” (plural).In the Slovak strings you mix:
"oauth_clients"
→ OAuth klienti (plural, correct)"create_oauth_client"
→ Vytvoriť OAuth klienta (singular, genitive) – fine"create_oauth_client_description"
→ … klienta (singular) – also fineHowever,
"oauth_clients_description"
reads Spravujte OAuth klientov (genitive plural). The heading is plural nominative (klienti), while the description uses genitive plural (klientov). That’s grammatically correct, but double-check the UI: if the heading appears right above the description it may read odd ( OAuth klienti – Spravujte OAuth klientov ). Consider using nominative plural in the description (Spravujte OAuth klienti vo vašej organizácii) or rewriting the heading ( Správa OAuth klientov ) so both lines do not repeat the noun back-to-back.
1843-1844
: Minor wording alignment for admin-only notices.Both keys are admin-gate messages; first ends with nastavenia synchronizácie adresára, second with OAuth klientov. For parallelism consider:
"Iba administrátor alebo vlastník organizácie môže spravovať synchronizáciu adresára" "Iba administrátor alebo vlastník organizácie môže spravovať OAuth klientov"
This removes the extra word nastavenia so the two strings scan identically.
apps/web/public/static/locales/pt-BR/common.json (1)
1843-1844
: Use one term for “owner” across the fileEarlier keys (e.g.
only_admin_can_manage_sso_org
, Line 1841) use “dono da organização”, whereas the two new strings adopt “proprietário da organização”. Mixing “dono” and “proprietário” might confuse translators and users.- "Apenas o administrador ou proprietário da organização pode gerenciar ..." + "Apenas o administrador ou dono da organização pode gerenciar ..."apps/web/public/static/locales/bg/common.json (1)
874-876
: Consider keeping new OAuth-related keys grouped with existing OAuth strings for maintainabilityThese keys are inserted ~200 lines above the other OAuth strings that start at Line 878.
Moving them next to the existing block (or vice-versa) keeps the file logically grouped and eases future diff reviews.apps/web/public/static/locales/sr/common.json (2)
874-878
: Validate new OAuth-related keys & keep alphabetical orderingThe newly added keys (
oauth_clients
…create_oauth_client_description
) break the existing alphabetic ordering of the JSON (they appear after nameless_team).
While order does not affect runtime, keeping the file sorted greatly reduces merge-conflicts in the enormouscommon.json
.- "nameless_team": "Tim bez imena", - "oauth_clients": "OAuth klijenti", - ... + "nameless_team": "Tim bez imena", + // --- keep alphabetic ordering: place below “offer_seats” block ---Consider moving the block accordingly before merging.
No functional issues with the Serbian strings themselves.
1843-1845
: Plural consistency for admin-only strings
only_admin_can_manage_directory_sync
andonly_admin_can_manage_oauth_clients
start with “Samo administrator ili vlasnik … može” (singular) but end with “mogu” (plural).
Recommend aligning the verb with the subject for readability:- "only_admin_can_manage_directory_sync": "Samo administrator ili vlasnik organizacije može upravljati podešavanjima sinhronizacije direktorijuma", + "only_admin_can_manage_directory_sync": "Samo administrator ili vlasnik organizacije može da upravlja podešavanjima sinhronizacije direktorijuma", - "only_admin_can_manage_oauth_clients": "Samo administrator ili vlasnik organizacije može upravljati OAuth klijentima" + "only_admin_can_manage_oauth_clients": "Samo administrator ili vlasnik organizacije može da upravlja OAuth klijentima"apps/web/public/static/locales/ar/common.json (1)
3311-3316
: PBAC attribute keys added – just verify uniqueness
Keys for the new PBAC resource (pbac_resource_attributes
) and its CRUD descriptions are correct. Run a quick duplicate-key check on the whole JSON file to ensure these identifiers don’t collide with earlier ones; large locale files sometimes accumulate silent duplicates.apps/web/public/static/locales/no/common.json (2)
874-877
: Unify the Norwegian term for OAuth clientEarlier in the same file (
line 240 → webhook_update_form_description
) the term is written as “OAuthClient” (camel-cased, no hyphen), whereas the four new keys use “OAuth-klient”.
For consistency and to avoid confusion in the UI, stick to one variant throughout the locale file (ideally the hyphenated “OAuth-klient”, which reads better in Norwegian).
3311-3315
: Minor formatting – last item can drop the trailing commaLine 3315 ends with a comma while the following line already starts a new top-level key. JSON allows the extra comma in many runtimes, but pruning it prevents accidental linting errors in stricter parsers.
- "pbac_desc_create_organization_attributes": "Opprett organisasjonsegenskaper", + "pbac_desc_create_organization_attributes": "Opprett organisasjonsegenskaper"apps/web/public/static/locales/ko/common.json (1)
1842-1845
: Minor wording inconsistencyLines 1842-1845 mix “관리자 또는 소유자” with “관리자만”.
For perfect consistency with the neighbouring permission strings (e.g. 1838-1841) consider aligning the wording, e.g.- "조직의 관리자 또는 소유자만 디렉토리 동기화 설정을 관리할 수 있습니다" + "조직의 관리자(소유자 포함)만 디렉토리 동기화 설정을 관리할 수 있습니다"apps/web/public/static/locales/he/common.json (1)
1843-1845
: Missing plural-gender neutralityThe two strings use “מנהל או בעלים” in singular masculine form.
Other Hebrew translations in the file avoid gendered phrasing by using neutral participles (e.g. “מנהל/ת מערכת”).
Consider aligning:- "רק מנהל או בעלים של הארגון..." + "רק מנהל/ת מערכת או בעל/ת הארגון..."apps/web/public/static/locales/es-419/common.json (1)
1843-1844
: Minor consistency issue in admin-only strings
Line 1843 already says “Solo el administrador o propietario…”. At 1844 you add essentially the same pattern. Consider moving both messages into a single placeholder‐based template to avoid copy-paste drift when wording changes in the future.apps/web/public/static/locales/es/common.json (1)
874-878
: Polish OAuth-related strings for consistency and grammar
- Use an article before “cliente” to match Spanish idiom (“Crear un cliente OAuth”).
- Capitalise the first word in the description for consistency with neighbouring keys (“Gestiona los…” → “Gestiona los…”)
- Consider adding “los” to keep parallelism with other descriptions (“Gestiona los clientes OAuth…”).
-"oauth_clients": "Clientes OAuth", -"oauth_clients_description": "Gestiona los clientes OAuth para tu organización", -"create_oauth_client": "Crear cliente OAuth", -"create_oauth_client_description": "Crea un nuevo cliente OAuth para integraciones de terceros", +"oauth_clients": "Clientes OAuth", +"oauth_clients_description": "Gestiona los clientes OAuth de tu organización", +"create_oauth_client": "Crear un cliente OAuth", +"create_oauth_client_description": "Crea un nuevo cliente OAuth para integraciones de terceros",apps/web/public/static/locales/km/common.json (2)
874-877
: Confirm wording for “OAuth client” — current Khmer phrasing sounds like a “machine”
The term «ម៉ាស៊ីនភ្ញៀវ» literally means “client machine”. In most Khmer UIs we usually keep OAuth client untranslated or borrow the English word “client” (e.g. «OAuth Client» or «Client OAuth») instead of “ម៉ាស៊ីនភ្ញៀវ”.
Please double-check with your localisation guide to make sure the term is recognisable to end-users.
1843-1844
: Minor consistency nit – reuse existing wording for “organization”
In earlier strings the project consistently uses «អង្គការ» for “organization”. Here the translation for
only_admin_can_manage_directory_sync
andonly_admin_can_manage_oauth_clients
introduces the variant «អង្គភាព».
Consider standardising on one term (preferably the one already used elsewhere) to avoid confusion.apps/web/public/static/locales/it/common.json (2)
874-877
: Add the missing indefinite article in the new “OAuth client” strings
In Italian the action labels generally include an article (“Crea un …”) to read naturally, e.g. earlier keys such ascreate_webhook
use “Crea un Webhook”.
Consider:- "create_oauth_client": "Crea client OAuth", - "create_oauth_client_description": "Crea un nuovo client OAuth per integrazioni di terze parti" + "create_oauth_client": "Crea un client OAuth", + "create_oauth_client_description": "Crea un nuovo client OAuth per integrazioni di terze parti"
3312-3316
: Minor consistency touch-up: keep the noun order aligned with similar PBAC keys
Most existing PBAC descriptions start with the verb and keep the resource near the end, e.g. “Crea attributi dell’organizzazione”. For perfect alignment you may want to mirror the wording used for other resources (eventi, ruoli, …). Current text is already correct, so this is only stylistic.apps/web/public/static/locales/fr/common.json (2)
1842-1843
: Minor wording nit-pick
"Seul l'administrateur ou le propriétaire de l'organisation peut gérer …"
reads well, but every other permission string in this file begins with “Seul l’administrateur* de l’organisation** ou son propriétaire …”* (note the extra “de l’organisation” after administrateur).For perfect consistency you could tweak:
-"Seul l'administrateur ou le propriétaire de l'organisation peut gérer les paramètres de synchronisation d'annuaire", -"Seul l'administrateur ou le propriétaire de l'organisation peut gérer les clients OAuth", +"Seul l'administrateur de l'organisation ou son propriétaire peut gérer les paramètres de synchronisation d'annuaire", +"Seul l'administrateur de l'organisation ou son propriétaire peut gérer les clients OAuth",
3312-3316
: Uniform wording for attribute-related PBAC descriptionsThree existing PBAC descriptions use “de l'organisation” (view / update / delete) while the new one for create reads “d'organisation”.
Recommend unifying the article for searchability and visual consistency:-"pbac_desc_create_organization_attributes": "Créer des attributs d'organisation", +"pbac_desc_create_organization_attributes": "Créer des attributs de l'organisation",apps/web/public/static/locales/eu/common.json (1)
874-878
: Consistent naming, but singular/plural wording could be tighter
oauth_clients
→ “OAuth bezeroak” (plural) andcreate_oauth_client
→ “OAuth bezeroa” (singular) are correct, yetoauth_clients_description
still uses the plural (“bezeroak”).
To keep the glossaries aligned with most other locales you may want to switch to the singular in the description, e.g.-"Kudeatu zure erakundearen OAuth bezeroak" +"Zure erakundearen OAuth bezeroa kudeatu"
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
i18n.lock
is excluded by!**/*.lock
📒 Files selected for processing (36)
apps/web/public/static/locales/ar/common.json
(6 hunks)apps/web/public/static/locales/az/common.json
(6 hunks)apps/web/public/static/locales/bg/common.json
(6 hunks)apps/web/public/static/locales/bn/common.json
(6 hunks)apps/web/public/static/locales/ca/common.json
(6 hunks)apps/web/public/static/locales/cs/common.json
(6 hunks)apps/web/public/static/locales/da/common.json
(6 hunks)apps/web/public/static/locales/de/common.json
(6 hunks)apps/web/public/static/locales/el/common.json
(6 hunks)apps/web/public/static/locales/es-419/common.json
(6 hunks)apps/web/public/static/locales/es/common.json
(6 hunks)apps/web/public/static/locales/et/common.json
(6 hunks)apps/web/public/static/locales/eu/common.json
(6 hunks)apps/web/public/static/locales/fi/common.json
(6 hunks)apps/web/public/static/locales/fr/common.json
(6 hunks)apps/web/public/static/locales/he/common.json
(6 hunks)apps/web/public/static/locales/hu/common.json
(6 hunks)apps/web/public/static/locales/it/common.json
(6 hunks)apps/web/public/static/locales/ja/common.json
(6 hunks)apps/web/public/static/locales/km/common.json
(6 hunks)apps/web/public/static/locales/ko/common.json
(6 hunks)apps/web/public/static/locales/nl/common.json
(6 hunks)apps/web/public/static/locales/no/common.json
(6 hunks)apps/web/public/static/locales/pl/common.json
(6 hunks)apps/web/public/static/locales/pt-BR/common.json
(6 hunks)apps/web/public/static/locales/pt/common.json
(6 hunks)apps/web/public/static/locales/ro/common.json
(6 hunks)apps/web/public/static/locales/ru/common.json
(6 hunks)apps/web/public/static/locales/sk-SK/common.json
(6 hunks)apps/web/public/static/locales/sr/common.json
(6 hunks)apps/web/public/static/locales/sv/common.json
(6 hunks)apps/web/public/static/locales/tr/common.json
(6 hunks)apps/web/public/static/locales/uk/common.json
(6 hunks)apps/web/public/static/locales/vi/common.json
(6 hunks)apps/web/public/static/locales/zh-CN/common.json
(6 hunks)apps/web/public/static/locales/zh-TW/common.json
(6 hunks)
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: bandhan-majumder
PR: calcom/cal.com#22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
📚 Learning: when making localization changes for new features, it's often safer to add new strings rather than m...
Learnt from: bandhan-majumder
PR: calcom/cal.com#22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
Applied to files:
apps/web/public/static/locales/zh-CN/common.json
apps/web/public/static/locales/pl/common.json
apps/web/public/static/locales/et/common.json
apps/web/public/static/locales/ca/common.json
apps/web/public/static/locales/pt-BR/common.json
apps/web/public/static/locales/uk/common.json
apps/web/public/static/locales/sv/common.json
apps/web/public/static/locales/da/common.json
apps/web/public/static/locales/bn/common.json
apps/web/public/static/locales/de/common.json
apps/web/public/static/locales/az/common.json
apps/web/public/static/locales/km/common.json
apps/web/public/static/locales/zh-TW/common.json
apps/web/public/static/locales/hu/common.json
apps/web/public/static/locales/ro/common.json
apps/web/public/static/locales/cs/common.json
apps/web/public/static/locales/ru/common.json
apps/web/public/static/locales/sr/common.json
apps/web/public/static/locales/el/common.json
apps/web/public/static/locales/bg/common.json
apps/web/public/static/locales/vi/common.json
apps/web/public/static/locales/pt/common.json
apps/web/public/static/locales/ar/common.json
apps/web/public/static/locales/tr/common.json
apps/web/public/static/locales/sk-SK/common.json
apps/web/public/static/locales/eu/common.json
apps/web/public/static/locales/ja/common.json
apps/web/public/static/locales/no/common.json
📚 Learning: applies to docs/api-reference/v2/openapi.json : when docs changes are made in `/docs/api-reference/v...
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-28T11:50:23.946Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in `/docs/api-reference/v2/openapi.json`, ensure 'summary' fields are short, concise, do not end with a period, and are written in proper American English
Applied to files:
apps/web/public/static/locales/pt/common.json
apps/web/public/static/locales/eu/common.json
apps/web/public/static/locales/nl/common.json
🔇 Additional comments (77)
apps/web/public/static/locales/zh-CN/common.json (4)
873-878
: OAuth client keys correctly addedNew keys follow existing naming conventions, include the mandatory Chinese brand-terminology “OAuth 客户端”, and preserve punctuation/placeholder style. ✅
1842-1843
: Admin-only management strings read wellBoth strings are clear and align with the other “only_admin_can_…” messages already present. No issues.
3311-3316
: PBAC attribute entries are syntactically soundKeys are unique, descriptive, and comma-terminated; translations stay consistent with the earlier PBAC block.
3433-3434
: Minor follow-up: check for duplicate key “stats” across localesI don’t see “stats” defined elsewhere in this file, but please run a quick grep across all locale JSONs to be certain a second definition hasn’t slipped in (the last-one-wins rule would silently mask the earlier value).
apps/web/public/static/locales/da/common.json (4)
874-878
: Translations look consistent – no issues found.Keys for OAuth-client administration are new, unique, and follow the existing naming/translation style.
1843-1845
: Key names are fine; just check for duplicate entries.
only_admin_can_manage_directory_sync
/…oauth_clients
are new and do not appear elsewhere in the file. Nothing to change.
3311-3315
: PBAC attribute strings added correctly.The new permission-related strings align with previous PBAC keys. No conflicts detected.
3433-3435
: New “stats” / “booking_status” keys are fine.Names are intuitive and translations match existing tone.
apps/web/public/static/locales/ro/common.json (3)
874-877
: Translations look accurate; validate comma placementRomanian strings read naturally and match the English semantics.
Just ensure the trailing comma on Line 877 is retained only when another key follows, otherwise JSON becomes invalid.
1843-1844
: Consistent terminology with previous OAuth stringsThe wording keeps the previously-introduced “clienți OAuth” phrasing, maintaining consistency – good job.
No issues found.
3311-3315
: New PBAC attribute keys translated correctlyAll four permission-description strings preserve the meaning of “attributes” and follow the existing PBAC prefix style.
Looks good.apps/web/public/static/locales/vi/common.json (2)
874-877
: Verify capital-letter consistency in new OAuth stringsThe surrounding strings use “OAuth client” as “Ứng dụng OAuth” (Line 874) and “Tạo ứng dụng OAuth” (Line 876).
Elsewhere in the file (e.g. Line 240"webhook_update_form_description"
), “OAuthClient” is left untranslated. Consider keeping the term consistent across the whole locale – either always translate as “Ứng dụng OAuth” or keep the original “OAuth client”.
3311-3315
: Ensure PBAC action descriptions stay imperativeThe new permission descriptions (Lines 3312-3315) start with “Xem/Cập nhật/Xóa/Tạo thuộc tính …” which follows the existing imperative style (e.g.
pbac_desc_view_roles
).
LGTM, no further action.apps/web/public/static/locales/ru/common.json (3)
1843-1844
: Wording is clear – good addition.The admin-only notices are concise and match existing phrasing. No issues spotted.
3311-3316
: Verify uniqueness of newly added PBAC keys.The new attribute-related PBAC keys look correct, but please ensure there are no existing entries with the same identifiers elsewhere in this file (e.g. produced by earlier merges).
Duplicate keys would silently override each other at runtime.
3405-3405
: Potential duplicate key “stats”.A generic key such as
"stats"
is prone to already exist in large locale files.
Run a quick check; if a prior “stats” key is found, rename one of them (e.g.stats_menu
vsstats_header
) to avoid overwriting.apps/web/public/static/locales/uk/common.json (1)
1843-1844
: Permission-gate strings added – verify key reuseThese two keys mirror the pattern used for other only_admin_can_ strings.
Just confirm there are no earlier keys with the exact same id but a slightly different text (e.g. leftover from previous PRs) – duplicate ids silently override values at runtime.apps/web/public/static/locales/ca/common.json (3)
874-878
: Check cross-locale consistency for newly introduced OAuth stringsThe four keys for OAuth client management are present only in this Catalan file.
Please make sure identical keys (with English text) exist in your base locale (en/common.json
) and in any other mandatory locales; otherwise the i18n layer will fall back to the key name at runtime.
1843-1844
: Wording aligns with existing pattern – looks goodThe new admin-only warning strings follow the same style used by the surrounding
"only_admin_can_manage_*"
messages, so no changes needed.
3405-3406
: Possible duplicate key ― verifystats
uniqueness
"stats": "Estadístiques"
is introduced here.
Search the full file (and other locale files) for an existingstats
entry; duplicate keys in a JSON object silently override earlier definitions and make maintenance harder.apps/web/public/static/locales/az/common.json (2)
874-877
: Strings look consistent – no issues foundThe four newly-added OAuth keys follow the existing naming convention, punctuation and placeholder-less pattern used throughout this file. JSON syntax is also valid (commas are present).
No action required.
1842-1843
: Consistent admin-scope phrasingThe two new admin-only messages mirror the wording style of the neighbouring
only_admin_can_manage_*
entries and end with the correct “idarə edə bilər” phrase. JSON syntax is intact.
LGTM.apps/web/public/static/locales/pl/common.json (2)
3311-3316
: Align new PBAC keys with existing naming patternExisting PBAC keys use resource singular (
organization_attribute
) not plural.
New keys introduced underpbac_resource_attributes
& related descriptions are pluralised (attributes
).
If the backend expects the singular resource id, rename to avoid mismatched permissions look-up.
874-878
: No duplicate OAuth translation keys detected
- Verified that
oauth_clients
,oauth_clients_description
,create_oauth_client
, andcreate_oauth_client_description
each appear only once (lines 874–877) in apps/web/public/static/locales/pl/common.json.apps/web/public/static/locales/el/common.json (2)
874-878
: New OAuth-related keys are well-formed and consistently translatedKey names follow the existing snake-case convention and the Greek strings accurately reflect their English intent. No placeholder or punctuation issues spotted.
1843-1844
: Admin-only notices read clearly and match prior patternThe added permission messages reuse the same phrasing as similar keys (
only_admin_can_*
) and keep the wording concise. Nothing to change.apps/web/public/static/locales/hu/common.json (1)
874-877
: Verify new OAuth-related keys are covered by the UI and back-end look-upsThese four string IDs are brand-new.
Please double-check that:
- The UI components use exactly these keys (
oauth_clients
,oauth_clients_description
, …).- Server-side permission checks / PBAC rules reference the same IDs (case-sensitive).
Missing look-ups will silently fall back to English at runtime.
apps/web/public/static/locales/et/common.json (2)
874-877
: Strings look good – placeholders preservedNo syntax issues and the terminology (“OAuth kliendid”, “Halda …”) is consistent with the rest of the file.
1843-1844
: Consistent admin-permission phrasingBoth new keys keep the established “Ainult … saab …” formulation and correctly reference “organisatsiooni administraator või omanik”.
apps/web/public/static/locales/pt/common.json (2)
3311-3315
: LGTM – new PBAC strings are accurate & follow existing patternThe new attribute-related permission texts use the same infinitive pattern (“Visualizar”, “Atualizar”, …) used in the surrounding PBAC entries. No issues found.
3433-3434
: Potential semantic clash betweenstats
and existinganalytics
"stats": "Estatísticas"
duplicates the Portuguese word already used for the keyanalytics
.
If both keys are rendered in the same UI area the labels will be indistinguishable.
Consider differentiating, e.g.:"stats": "Métricas"or leave as-is if the two keys never appear together.
apps/web/public/static/locales/sv/common.json (4)
874-877
: New OAuth-related keys look good– Terminology (“OAuth-klient(er)”) is consistent with previously-used wording
– Plural/singular forms match the context (“klienter” vs “Skapa … klient”)
No action required.
1843-1844
: Admin-only sentences read correctlyBoth strings are grammatically correct Swedish and mirror the existing “only_admin…” keys.
No further changes needed.
3311-3315
: PBAC attribute permissions – translation consistent“Egenskaper” is already the Swedish term used for attributes elsewhere in the file, so the new permission phrases stay coherent.
All verbs (“Visa”, “Uppdatera”, “Ta bort”, “Skapa”) follow the existing style.
3434-3435
: New generic UI strings OK“Statistik” and “Bokningsstatus” are accurate and not duplicated elsewhere in the file.
JSON syntax around the additions is valid.apps/web/public/static/locales/cs/common.json (2)
1843-1844
: Wording aligns with existing permission strings – LGTMBoth messages follow the identical pattern already used for analogous lines such as
"only_admin_can_manage_sso_org"
.
No placeholder variables are involved, Czech phrasing is clear.
3311-3316
: Verify PBAC key alignment with other localesNew keys for attribute-related PBAC descriptions were added.
Before merging, please make sure the same keys are present (even in English) in the defaulten/common.json
; otherwise the permission UI might render blank in English while Czech works.apps/web/public/static/locales/de/common.json (2)
874-878
: New OAuth-related strings look consistent and syntactically correct• Keys are unique and follow the existing naming style.
• Translation keeps the English term “OAuth-Client” – consistent with the rest of the file.
No issues spotted.
1842-1845
: Admin-only guard messages align with earlier patternsStrings reuse the “Nur der Administrator … kann …” phrasing already used for similar permissions, so tone & terminology stay consistent.
Good addition.apps/web/public/static/locales/fi/common.json (3)
873-876
: OAuth-terminologia OKUudet OAuth-asiakas-avaimet on lisätty selkeästi ja johdonmukaisesti (asiakas / asiakkaat). Ei JSON-rakenteen ongelmia.
1843-1844
: Lisätyt käyttöoikeusviestit kunnossaTekstit noudattavat aiempaa “only_admin_can_manage_*” ‑muotoa ja sisältävät oikean sijamuodon (“järjestelmänvalvoja”).
3311-3315
: PBAC-sanasto täydentyy loogisestiUudet attribuuttikohtaiset PBAC-kuvaukset on lisätty yhdenmukaisessa muodossa. Ei avain- tai pilkkuvirheitä.
apps/web/public/static/locales/tr/common.json (3)
874-877
: Translations look good – no placeholder/escaping issues detectedThe four new OAuth-related keys contain no ICU placeholders, punctuation is consistent with neighbouring strings, and terminology (“OAuth İstemcisi”) matches existing usage. Nothing to fix here.
1842-1844
: String additions are consistent with existing styleThe admin-only directory-sync / OAuth-client warnings read naturally in Turkish and reuse the “yalnızca … yönetebilir” pattern already present elsewhere. No action required.
3311-3324
: PBAC attribute/role/event-type additions LGTM• Keys are correctly namespaced (
pbac_resource_*
,pbac_desc_*
).
• Placeholders or Markdown are not required and therefore safely absent.
• Terminology (“Öznitelikler”, “Tüm kaynaklarda tüm işlemler”) aligns with earlier PBAC entries.No translation, syntax, or consistency issues detected.
Also applies to: 3333-3350
apps/web/public/static/locales/pt-BR/common.json (3)
874-877
: Consistent singular × plural wordingThe plural key
"oauth_clients"
is translated as “Clientes OAuth”, while the singular key"create_oauth_client"
is translated with “Cliente OAuth”.
Wording and capitalisation are consistent and no interpolation variables are involved – looks good.
3311-3316
: New PBAC strings look correctThe newly-added PBAC resource & description entries follow the same style and terminology as existing permission strings. Pluralisation and capitalisation match previous entries.
3433-3435
: Check for duplicate keysKeys
"stats"
and"booking_status"
are appended here.
Before merging, quickly grep for these keys in the other locale files to ensure they are not already defined; duplicate keys silently overwrite previous values during the build.If they already exist, remove the duplicates or merge the translations intentionally.
apps/web/public/static/locales/bg/common.json (2)
1843-1844
: Key names follow the pattern but introduce a small duplication risk
only_admin_can_manage_directory_sync
andonly_admin_can_manage_oauth_clients
mirror previously-definedonly_admin_can_manage_sso_org
.
Double-check the whole file for accidental duplicates of these two new keys—JSON won’t complain but the last one wins at runtime.
3311-3316
: PBAC permission keys added – verify consistency with server side enumsThe new attribute-related permission strings (
pbac_resource_attributes
,pbac_desc_*_organization_attributes
) look fine.
Ensure that corresponding constants / enums exist in the RBAC/PBAC backend; otherwise UI will render labels for permissions that the API doesn’t recognise.apps/web/public/static/locales/sr/common.json (1)
3311-3316
: Check PBAC translations for domain accuracyThe newly introduced PBAC keys map technical RBAC concepts (e.g.
pbac_resource_attributes
,pbac_desc_create_organization_attributes
).
Current translations (“Atributi”, “Kreiranje atributa organizacije”) look correct, but please verify with the product/legal team that:
- “Atribut” is indeed the chosen term in the Serbian governance UI (some teams use “svojstvo”).
- The plural/singular forms match the in-app phrasing (e.g. “Kreiranje atributa” vs “Kreiranje atributa organizacije”).
No code change required if confirmed.
apps/web/public/static/locales/ar/common.json (2)
874-878
: OAuth-related strings look correct
New keys for OAuth client management are well-formed, use consistent naming, keep the English placeholders intact, and the Arabic wording is clear.
1842-1845
: Admin-only guard strings are fine
Translations read naturally and the placeholders match the key names. No issues spotted.apps/web/public/static/locales/ko/common.json (3)
874-877
: Verify new OAuth-client strings are included in all localesThe newly-added keys (
oauth_clients*
) look correct here, but remember to add the same keys tocommon.json
for every other supported locale (at leasten
, since it is used as the fallback).
If they are missing the UI will silently fall back to the key name.
3311-3316
: Duplicate-key riskThe PBAC description keys you added (
pbac_desc_*_organization_attributes
) are fine, but make sure the same keys are not present earlier in this file.
JSON does not forbid duplicate keys – whichever appears last wins – and that is extremely hard to notice at runtime.
Run a quick duplicate-key check before merging.
3433-3434
: Potential key collision
"stats"
and"booking_status"
are very generic identifiers; do a quick grep to be certain they don’t already exist elsewhere in the file (or in other locale files).
A silent overwrite would break previously translated text.apps/web/public/static/locales/nl/common.json (3)
874-878
: Translation keys add proper OAuth-client context — looks goodNew keys align with existing naming conventions (
oauth_clients*
), translations are clear, and no interpolation placeholders are required.
No issues spotted.
1843-1845
: Admin-only guard strings consistentThe two
only_admin_can_manage_*
entries reuse the same sentence pattern already established for earlier keys, keeping UX wording uniform.
Good addition.
3311-3316
: PBAC attribute strings added correctlyNew PBAC-related keys (
pbac_resource_attributes
, view/update/delete/create) follow the existing permission-string scheme and pluralisation.
No JSON or placeholder issues detected.apps/web/public/static/locales/ja/common.json (3)
874-877
: Ensure newly-added OAuth client strings exist in the source localeFour keys (
oauth_clients*
) are introduced here.
Please confirm that the same keys are present in the reference/default locale (usuallyen/common.json
).
If they are missing, the UI will fall back to the raw key names for every other language.
3433-3434
: Verify key uniqueness for"stats"
and"booking_status"
These appear late in the file.
If the same keys were defined earlier, JSON-parsing will keep only the last occurrence, shadowing the first and causing hard-to-trace i18n bugs.
A quick rip-grep across the repo is recommended.
3311-3315
: Wire up PBAC “attributes” resource end-to-endI see the new locale keys and registry entries for
pbac_resource_attributes
, but I couldn’t find a static resources list or seed script that pulls in “attributes.” Please verify and, if missing, update:• packages/features/pbac/domain/types/permission-registry.ts
– Ensure thepbac_resource_attributes
block with its CRUD actions is present (it appears at lines 360–384).• UI matrix component (e.g. packages/features/pbac/components/PermissionMatrix.tsx)
– Add “attributes” to the resources array so the grid renders the new column.• Seed data script (e.g. packages/features/pbac/seed/permissions.ts or backend migration)
– Include the “attributes” resource and its actions so new installs don’t show “unknown permission.”apps/web/public/static/locales/he/common.json (2)
874-878
: Ensure placeholder consistency with other localesFor the newly-added OAuth strings, verify that the key set (oauth_clients, …_description, create_oauth_client, …_description) exists in the reference/source locale and that parameter placeholders (e.g.
{{clientName}}
,{{appName}}
) are preserved 1-for-1.
If the English originals contain interpolation tokens that are missing here, runtime rendering will explode.
3311-3316
: Double-check PBAC attribute descriptionsThe PBAC entries are duplicated for “organization attributes”, yet the Hebrew wording refers to “מאפייני הארגון” four times; that is correct but easy to mix up with team-level wording.
Confirm that you really want the org-level strings here and not the team-level ones.
No code change needed if intentional.apps/web/public/static/locales/es-419/common.json (3)
3311-3315
: PBAC attribute keys look fine, but validate cross-locale coverage
The five newpbac_*attributes
strings are translated correctly. Make sure the same keys exist in the fallback (en
) locale; otherwise permission screens will show raw keys for users whose language falls back to English.
3405-3406
: Watch out for key collisions:"failed_bookings"
,"stats"
&"booking_status"
stats
is a very generic identifier and is frequently present in other locale segments. Ensure this is not re-declared earlier (it was in several other locales). Duplicate keys break translators’ tooling and may hide older strings.Also applies to: 3433-3435
874-877
: No conflicts within es-419/common.json or across locale files – duplicates across languages are expected
The four new keys only appear once ines-419/common.json
. Having the same identifiers in other language files (including the fallbackes/common.json
) is intentional: each locale implements the same key structure, andes-419
overrides the Spanish defaults as expected. There are no silent overwrites within a single file and no need to rename or merge keys.Likely an incorrect or invalid review comment.
apps/web/public/static/locales/es/common.json (1)
3311-3316
: Looks good – matches existing PBAC phrasing
Las nuevas descripciones siguen el mismo patrón (“Ver …”, “Actualizar …”) que el resto de claves PBAC.apps/web/public/static/locales/it/common.json (2)
1842-1845
: Looks good – translation keeps style & terminology consistent
No issues spotted with these permission-warning strings.
3433-3435
: Double-check for duplicate keys before merge
"stats"
and"booking_status"
are appended very close to the end of the file.
Search the file (and other locale files) to be sure these keys are not already defined earlier; JSON duplicates silently overwrite and are painful to track at runtime.apps/web/public/static/locales/fr/common.json (3)
874-877
: Looks good – consistent terminology for OAuth stringsThe four newly-added keys follow the existing naming pattern (
oauth_*
) and the French phrasing is concise and accurate. No action required.
3405-3405
: Key added but headline translation duplicates existing vocabulary
"failed_bookings": "Réservations échouées"
is technically correct, yet earlier keys use “annulées” (cancelled) and “non confirmées” for negative states. Double-check with product to ensure "échouées" conveys the intended nuance (payment failure vs. user cancel). If alignment is desired, consider “Réservations échouées” → “Réservations en échec”.
3433-3434
: Potential collision with existing ‘stats’ keyA quick grep shows
stats
already added here; confirm this key does not exist in other locale files (e.g.en/common.json
). Duplicate keys with divergent casing break i18n extraction tools. If the key already exists, reuse it rather than redefining.apps/web/public/static/locales/eu/common.json (1)
1843-1844
: JSON validity looks good, but mind the trailing commaBoth newly-added keys end with a comma even though
only_admin_can_manage_oauth_clients
is the last key inside that logical block. While JSON5 tolerates it, the project still ships pure JSON.
Double-check that the next line (1845) is indeed another key; otherwise remove the trailing comma to keep the file strictly valid.apps/web/public/static/locales/bn/common.json (3)
874-878
: Placeholders & context look correct – no action neededThe newly-added OAuth-related strings accurately preserve terminology (“OAuth ক্লায়েন্ট”) and contain no dynamic placeholders that could break formatting.
1843-1844
: Consistent admin-only phrasing – good workBoth permission warnings follow the existing convention (“শুধুমাত্র সংগঠনের অ্যাডমিন বা মালিক …”), so end-user messaging will stay uniform across the UI.
3311-3316
: PBAC attribute translations align with peer keysThe added PBAC strings (“বৈশিষ্ট্য”) fit the permission taxonomy and don’t introduce placeholder/grammar issues.
08d6858
to
d0bb352
Compare
d0bb352
to
cf60caf
Compare
cf60caf
to
ff1670c
Compare
ff1670c
to
61ca62a
Compare
96c1192
to
3af470e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
apps/web/public/static/locales/bn/common.json (1)
1843-1845
: Nit: finish sentences with the same punctuation as neighboursMost neighbouring strings in this block end with a full-stop (“।”), but these two lines do not. Add the period for visual consistency.
- "only_admin_can_manage_directory_sync": "শুধুমাত্র সংগঠনের অ্যাডমিন বা মালিক ডিরেক্টরি সিঙ্ক সেটিংস পরিচালনা করতে পারেন", - "only_admin_can_manage_oauth_clients": "শুধুমাত্র সংগঠনের অ্যাডমিন বা মালিক OAuth ক্লায়েন্ট পরিচালনা করতে পারেন", + "only_admin_can_manage_directory_sync": "শুধুমাত্র সংগঠনের অ্যাডমিন বা মালিক ডিরেক্টরি সিঙ্ক সেটিংস পরিচালনা করতে পারেন।", + "only_admin_can_manage_oauth_clients": "শুধুমাত্র সংগঠনের অ্যাডমিন বা মালিক OAuth ক্লায়েন্ট পরিচালনা করতে পারেন।",
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
i18n.lock
is excluded by!**/*.lock
📒 Files selected for processing (36)
apps/web/public/static/locales/ar/common.json
(6 hunks)apps/web/public/static/locales/az/common.json
(6 hunks)apps/web/public/static/locales/bg/common.json
(6 hunks)apps/web/public/static/locales/bn/common.json
(6 hunks)apps/web/public/static/locales/ca/common.json
(6 hunks)apps/web/public/static/locales/cs/common.json
(6 hunks)apps/web/public/static/locales/da/common.json
(6 hunks)apps/web/public/static/locales/de/common.json
(6 hunks)apps/web/public/static/locales/el/common.json
(6 hunks)apps/web/public/static/locales/es-419/common.json
(6 hunks)apps/web/public/static/locales/es/common.json
(6 hunks)apps/web/public/static/locales/et/common.json
(6 hunks)apps/web/public/static/locales/eu/common.json
(6 hunks)apps/web/public/static/locales/fi/common.json
(6 hunks)apps/web/public/static/locales/fr/common.json
(6 hunks)apps/web/public/static/locales/he/common.json
(6 hunks)apps/web/public/static/locales/hu/common.json
(6 hunks)apps/web/public/static/locales/it/common.json
(6 hunks)apps/web/public/static/locales/ja/common.json
(6 hunks)apps/web/public/static/locales/km/common.json
(6 hunks)apps/web/public/static/locales/ko/common.json
(6 hunks)apps/web/public/static/locales/nl/common.json
(6 hunks)apps/web/public/static/locales/no/common.json
(6 hunks)apps/web/public/static/locales/pl/common.json
(6 hunks)apps/web/public/static/locales/pt-BR/common.json
(6 hunks)apps/web/public/static/locales/pt/common.json
(6 hunks)apps/web/public/static/locales/ro/common.json
(6 hunks)apps/web/public/static/locales/ru/common.json
(6 hunks)apps/web/public/static/locales/sk-SK/common.json
(6 hunks)apps/web/public/static/locales/sr/common.json
(6 hunks)apps/web/public/static/locales/sv/common.json
(6 hunks)apps/web/public/static/locales/tr/common.json
(6 hunks)apps/web/public/static/locales/uk/common.json
(6 hunks)apps/web/public/static/locales/vi/common.json
(6 hunks)apps/web/public/static/locales/zh-CN/common.json
(6 hunks)apps/web/public/static/locales/zh-TW/common.json
(6 hunks)
✅ Files skipped from review due to trivial changes (2)
- apps/web/public/static/locales/bg/common.json
- apps/web/public/static/locales/cs/common.json
🚧 Files skipped from review as they are similar to previous changes (33)
- apps/web/public/static/locales/da/common.json
- apps/web/public/static/locales/zh-CN/common.json
- apps/web/public/static/locales/pt-BR/common.json
- apps/web/public/static/locales/eu/common.json
- apps/web/public/static/locales/sv/common.json
- apps/web/public/static/locales/ro/common.json
- apps/web/public/static/locales/az/common.json
- apps/web/public/static/locales/pt/common.json
- apps/web/public/static/locales/hu/common.json
- apps/web/public/static/locales/vi/common.json
- apps/web/public/static/locales/zh-TW/common.json
- apps/web/public/static/locales/fi/common.json
- apps/web/public/static/locales/tr/common.json
- apps/web/public/static/locales/sr/common.json
- apps/web/public/static/locales/el/common.json
- apps/web/public/static/locales/nl/common.json
- apps/web/public/static/locales/he/common.json
- apps/web/public/static/locales/ru/common.json
- apps/web/public/static/locales/ja/common.json
- apps/web/public/static/locales/ca/common.json
- apps/web/public/static/locales/es-419/common.json
- apps/web/public/static/locales/it/common.json
- apps/web/public/static/locales/ko/common.json
- apps/web/public/static/locales/pl/common.json
- apps/web/public/static/locales/ar/common.json
- apps/web/public/static/locales/sk-SK/common.json
- apps/web/public/static/locales/es/common.json
- apps/web/public/static/locales/no/common.json
- apps/web/public/static/locales/km/common.json
- apps/web/public/static/locales/et/common.json
- apps/web/public/static/locales/uk/common.json
- apps/web/public/static/locales/fr/common.json
- apps/web/public/static/locales/de/common.json
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: bandhan-majumder
PR: calcom/cal.com#22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
📚 Learning: when making localization changes for new features, it's often safer to add new strings rather than m...
Learnt from: bandhan-majumder
PR: calcom/cal.com#22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
Applied to files:
apps/web/public/static/locales/bn/common.json
🔇 Additional comments (2)
apps/web/public/static/locales/bn/common.json (2)
874-878
: Translations look good – no action neededThe added OAuth-related keys are translated consistently, preserve the original technical term “OAuth”, and contain no missing placeholders.
3311-3316
: Confirm no key duplicationThe new PBAC “attributes” keys are useful additions. Double-check that these IDs (
pbac_resource_attributes
,pbac_desc_*_organization_attributes
) are not already present elsewhere in the same file to avoid JSON-object key collisions at runtime.
3af470e
to
cc04ed1
Compare
823bd7d
to
56eba1e
Compare
56eba1e
to
404abc0
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 11
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
apps/web/public/static/locales/sr/common.json (1)
3339-3372
: Critical: Localization and ICU placeholder fixes required incommon.json
The verification script has uncovered several issues that must be addressed before merging:
Literal English “Round Robin” remains in the Serbian locale (should be fully translated). Occurrences at:
round_robin_host_unavailable_for_booking
(≈ line 123)round_robin
(≈ line 807)salesforce_route_to_owner
(≈ line 2979)salesforce_do_not_route_to_owner
(≈ line 2981)reset_interval_weighted_rr
(≈ line 3117)rr_interval_successfully_updated
(≈ line 3134)rr_settings_successfully_updated
(≈ line 3279)distribution_basis_weighted_rr
(≈ line 3280)rr_load_balancing_disabled_with_groups
(≈ line 3382)PBAC role descriptions still reference “u timovima organizacije” (team-scoped phrasing). Keys to update:
pbac_desc_manage_roles
(≈ line 3339)pbac_desc_manage_event_types
(≈ line 3349)pbac_desc_manage_bookings
(≈ line 3372)Non-ASCII ICU variable identifiers will break runtime formatting. In particular:
event_type_has_been_rescheduled_on_time_date
(≈ line 168) uses{{титле}}
and{{дате}}
– must be ASCII, e.g.{{title}}
and{{date}}
.Please replace each with the proper Serbian translation and ensure all ICU placeholders use ASCII-only identifiers that match your code’s variable names.
apps/web/public/static/locales/es/common.json (1)
3331-3372
: Fix Spanish duplication/regression in PBAC teams descriptor.We previously removed redundancy here; this PR reintroduces it (“en equipos en todos los equipos…”). Please restore the concise phrasing.
- "pbac_desc_manage_teams": "Todas las acciones en equipos en todos los equipos de la organización", + "pbac_desc_manage_teams": "Todas las acciones en los equipos de la organización",apps/web/public/static/locales/nl/common.json (1)
73-73
: Critical: Lowercase “url” in NL locale translations must be uppercased to “URL”The sweep confirms that all “round robin” and “OAuth client(s)” entries are already unhyphenated and correct—no changes needed there. However, there are numerous occurrences of lowercase “url” in the NL translations that should be “URL”. Please update every value matching the regex
/\burl\b/
toURL
inapps/web/public/static/locales/nl/common.json
.Key locations include (but are not limited to):
- Line 77:
"you_can_view_booking_details_with_this_url": "…deze url {{url}}…"
- Line 2714:
"skip_rr_description": "URL moet het e-mailadres…"
(fix the “url” in the description)- Lines 2745–2748:
"rating_url_variable"
"rating_url_info"
"no_show_url_variable"
"no_show_url_info"
- Lines 2970–2971:
"copy_redirect_url"
"redirect_url_on_exit"
And similarly for any other entries the RG search reported (e.g. lines 2305, 2468, etc.). Ensure each translation string uses uppercase “URL”.
apps/web/public/static/locales/sk-SK/common.json (1)
2843-2843
: Standardize “Round Robin” hyphenation in sk-SK localeOnly one entry uses a hyphenated form—update it to match the rest of the file’s non-hyphenated “Round Robin.”
• apps/web/public/static/locales/sk-SK/common.json: line 2843
- "reschedule_with_same_round_robin_host_title": "Preložiť termín s rovnakým Round-Robin hostiteľom", + "reschedule_with_same_round_robin_host_title": "Preložiť termín s rovnakým Round Robin hostiteľom",
"oauth_clients": "عملاء OAuth", | ||
"oauth_clients_description": "إدارة عملاء OAuth لمؤسستك", | ||
"create_oauth_client": "إنشاء عميل OAuth", | ||
"create_oauth_client_description": "إنشاء عميل OAuth جديد للتكاملات مع الأطراف الثالثة", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Automate a quick terminology and webhook consistency check (optional).
Run the script to surface any remaining inconsistencies (organization term, webhook spelling variants, round‑robin wording, “حدث/فعالية” drift). Then commit the diffs above.
Also applies to: 1851-1852, 3332-3335, 3339-3339, 3382-3382, 3460-3491, 935-935, 1002-1002, 3485-3485
🏁 Script executed:
#!/bin/bash
set -euo pipefail
FILE="apps/web/public/static/locales/ar/common.json"
echo "— Org term in admin/PBAC keys —"
rg -nP '"(only_admin_can_manage_[^"]+|pbac_desc_[^"]+)"\s*:\s*"[^"]*المؤسسة[^"]*"' "$FILE" || echo "OK: no 'المؤسسة' left in targeted keys"
echo -e "\n— Webhook spelling variants (normalize to الويبهوك/الويبهوكس) —"
rg -n 'ويب هوك|ويبهوك(?!س)|الويب هوك|ويب هوكس' "$FILE" | head -n 50 || echo "OK: webhook spelling normalized"
echo -e "\n— Round-robin wording —"
rg -nP 'round robin|Round Robin|التناوب الدائري|الترتيب الدوري' "$FILE" | sed -n '1,120p'
echo -e "\n— Event term drift (فعالية vs حدث) in changed keys —"
rg -nP '"(event_name_in_calendar|new_event_type_to_book_description|webhook_event_and_booking)"\s*:\s*"[^"]*(فعالية|الفعالية)[^"]*"' "$FILE" || echo "OK: unified to 'حدث'"
Length of output: 4392
Ensure Arabic translation consistency in common.json
The terminology check script surfaced several inconsistencies in apps/web/public/static/locales/ar/common.json:
• Admin/PBAC keys still use “المؤسسة” – should be unified to the approved term (e.g. “المنظمة”):
– Lines 1851, 1852, 3332–3335, 3339, 3359–3365, 3369
• Event terminology drift – keys using “فعالية”/“الفعالية” should be switched to “حدث”:
– Line 935: event_name_in_calendar
– Line 3485: webhook_event_and_booking
• Webhook spelling variants weren’t verified due to regex limitations – please re-run your check with PCRE2 (rg --pcre2
) or simplified patterns and normalize all instances to “الويبهوك”/“الويبهوكس.”
• Round-robin wording is mixed between English (“round robin”) and multiple Arabic phrases (“الترتيب الدوري” vs. “التناوب الدائري”); pick the standard translation (e.g. “التناوب الدائري”) and apply it consistently across all keys.
Once these refactors are applied, commit the updated JSON diffs.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/ar/common.json (reference lines 876–879 and
the other lines called out in the review:
1851,1852,3332–3335,3339,3359–3365,3369,935,3485), update and normalize
terminology: replace all occurrences of "المؤسسة" with the approved term
"المنظمة" on the listed Admin/PBAC keys; change any "فعالية" or "الفعالية" to
"حدث" for event-related keys (e.g., line 935 and 3485); normalize webhook
spelling across the entire file to the chosen form "الويبهوك" / "الويبهوكس" (use
ripgrep with PCRE2: rg --pcre2 to find regex variants and replace consistently);
and unify round-robin translations to "التناوب الدائري" everywhere it appears
(replace English "round robin" and other Arabic variants). After making these
replacements run the terminology check again, verify no remaining variants, and
commit the updated JSON diffs.
"webhook_created_at": "ពេលវេលានៃ webhook", | ||
"webhook_type": "slug ប្រភេទព្រឹត្តិការណ៍", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Webhook labels: capitalize “Webhook”, improve “Type”, and remove “first attendee”.
Use “ពេលបង្កើត Webhook”, “Slug ប្រភេទព្រឹត្តិការណ៍”, and drop “ដំបូង” from attendee fields.
- "webhook_created_at": "ពេលវេលានៃ webhook",
+ "webhook_created_at": "ពេលបង្កើត Webhook",
- "webhook_type": "slug ប្រភេទព្រឹត្តិការណ៍",
+ "webhook_type": "Slug ប្រភេទព្រឹត្តិការណ៍",
- "webhook_attendee_name": "ឈ្មោះរបស់អ្នកចូលរួមដំបូង",
- "webhook_attendee_email": "អ៊ីមែលរបស់អ្នកចូលរួមដំបូង",
- "webhook_attendee_timezone": "តំបន់ពេលវេលារបស់អ្នកចូលរួមដំបូង",
- "webhook_attendee_locale": "ភាសាតំបន់របស់អ្នកចូលរួមដំបូង",
+ "webhook_attendee_name": "ឈ្មោះអ្នកចូលរួម",
+ "webhook_attendee_email": "អ៊ីមែលអ្នកចូលរួម",
+ "webhook_attendee_timezone": "តំបន់ពេលវេលារបស់អ្នកចូលរួម",
+ "webhook_attendee_locale": "ភាសាតំបន់របស់អ្នកចូលរួម",
Also applies to: 3476-3479
🤖 Prompt for AI Agents
In apps/web/public/static/locales/km/common.json around lines 3461-3462 (and
also update lines 3476-3479), update the Khmer labels to capitalize "Webhook",
improve "Type" wording, and remove the word "ដំបូង" (first) from attendee
fields: change "ពេលវេលានៃ webhook" to "ពេលបង្កើត Webhook", change "slug
ប្រភេទព្រឹត្តិការណ៍" to "Slug ប្រភេទព្រឹត្តិការណ៍", and remove "ដំបូង" from the
affected attendee-related keys at lines 3476-3479 so they no longer include
"ដំបូង". Ensure spacing and punctuation follow existing JSON string style.
@@ -120,7 +120,7 @@ | |||
"already_signed_up_for_this_booking_error": "Već ste se prijavili za ovu rezervaciju.", | |||
"hosts_unavailable_for_booking": "Neki od domaćina nisu dostupni za rezervaciju.", | |||
"fixed_hosts_unavailable_for_booking": "Neki od fiksnih domaćina nisu dostupni za rezervaciju.", | |||
"round_robin_hosts_unavailable_for_booking": "Nijedan Round Robin domaćin nije dostupan za rezervaciju.", | |||
"round_robin_host_unavailable_for_booking": "Round Robin domaćin nije dostupan za rezervaciju.", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Localize “Round Robin” to Serbian for consistency
Replace literal English with the established Serbian term to align with the rest of the locale and avoid mixed-language UI.
- "round_robin_host_unavailable_for_booking": "Round Robin domaćin nije dostupan za rezervaciju.",
+ "round_robin_host_unavailable_for_booking": "Domaćin kružnog dodeljivanja nije dostupan za rezervaciju.",
📝 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.
"round_robin_host_unavailable_for_booking": "Round Robin domaćin nije dostupan za rezervaciju.", | |
"round_robin_host_unavailable_for_booking": "Domaćin kružnog dodeljivanja nije dostupan za rezervaciju.", |
🤖 Prompt for AI Agents
In apps/web/public/static/locales/sr/common.json around line 123, the English
phrase "Round Robin" is used in the value; replace it with the established
Serbian term to avoid mixed-language UI—for example change the string to use
"naizmenično dodeljivanje" (e.g., "Domaćin naizmeničnog dodeljivanja nije
dostupan za rezervaciju.") so the message is fully localized and grammatically
correct.
@@ -3343,6 +3379,7 @@ | |||
"use_booker_timezone_info": "Primeni izabrani raspored ograničenja u vremenskoj zoni rezervatora", | |||
"load_balancing_warning": "Ovo će onemogućiti balansiranje opterećenja na svim vašim round robin tipovima događaja", | |||
"rr_load_balancing_disabled": "Balansiranje opterećenja je dostupno samo kada je osnova vremenske oznake postavljena na Vreme kreiranja rezervacije", | |||
"rr_load_balancing_disabled_with_groups": "Balansiranje opterećenja nije dostupno sa Round Robin grupama", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Localize “Round Robin” in load‑balancing notice
Avoid mixed language; use the same Serbian term as in Line 123.
- "rr_load_balancing_disabled_with_groups": "Balansiranje opterećenja nije dostupno sa Round Robin grupama",
+ "rr_load_balancing_disabled_with_groups": "Balansiranje opterećenja nije dostupno sa grupama kružnog dodeljivanja",
📝 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.
"rr_load_balancing_disabled_with_groups": "Balansiranje opterećenja nije dostupno sa Round Robin grupama", | |
"rr_load_balancing_disabled_with_groups": "Balansiranje opterećenja nije dostupno sa grupama kružnog dodeljivanja", |
🤖 Prompt for AI Agents
In apps/web/public/static/locales/sr/common.json around line 3382, the value for
"rr_load_balancing_disabled_with_groups" contains the English term "Round
Robin"; replace it with the same Serbian translation used at line 123 (use the
exact Serbian term/phrase from line 123) so the message is fully localized and
consistent with other strings.
"webhook_trigger_event": "Назва події-тригера (наприклад, BOOKING_CREATED, BOOKING_CANCELLED)", | ||
"webhook_created_at": "Час створення вебхука", | ||
"webhook_type": "Слаг типу події", | ||
"webhook_title": "Назва типу події", | ||
"webhook_start_time": "Час початку події", | ||
"webhook_end_time": "Час завершення події", | ||
"webhook_description": "Опис події, як зазначено в налаштуваннях типу події", | ||
"webhook_location": "Місце проведення події", | ||
"webhook_uid": "UID бронювання", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Follow‑up: sweep for remaining inconsistencies (webhook/OAuth/round‑robin/URL)
There are likely stragglers outside the changed hunks (e.g., earlier “вебхук/вебхука”, un‑hyphenated “OAuth клієнт”, English “round robin”, plain “URL”). Run the script to verify and queue a small follow‑up commit.
🏁 Script executed:
#!/bin/bash
set -euo pipefail
FILE="apps/web/public/static/locales/uk/common.json"
echo "1) JSON validity:"; python3 -c "import json; import sys; json.load(open(sys.argv[1], encoding='utf-8')); print('OK')" "$FILE"
echo -e "\n2) Webhook spelling (prefer: вебгук):"
rg -n -C1 $'вебхук|вебхука|вебхуки|вебгук|вебгука|вебгуки' "$FILE" || true
echo -e "\n3) OAuth hyphenation/case (prefer: OAuth‑клієнт(и)):"
rg -n -C1 $'\\boAuth\\b|OAuth клієнт|OAuth-?клієнт' "$FILE" || true
echo -e "\n4) Round-robin terminology (avoid English):"
rg -n -C1 $'Round Robin|round robin' "$FILE" || true
echo -e "\n5) Plain 'URL' not hyphenated (prefer: URL‑адреса):"
rg -nP --pcre2 '\bURL\b(?!-адреса)' "$FILE" || true
Length of output: 18130
Follow-up: sweep for remaining translation inconsistencies
Please queue a small follow-up commit to address residual inconsistencies in apps/web/public/static/locales/uk/common.json:
-
Webhook terminology
Replace all variants of “вебхук/вебхука/вебхуки” with the standardized “вебгук(–а/–и)” form. -
OAuth client syntax
Ensure all references use “OAuth-клієнт(и)” with an uppercase “OAuth” and a Unicode non-breaking hyphen; remove any lowercase “oAuth” or mis-hyphenated forms. -
Round-robin localization
Replace English “round robin” occurrences in values with the appropriate Ukrainian translation (e.g., “циклічне розподілення”). -
URL hyphenation
Convert any plain “URL” usages in values to “URL-адреса” (using a non-breaking hyphen).
🤖 Prompt for AI Agents
In apps/web/public/static/locales/uk/common.json around lines 3460-3468, sweep
the file and standardize terminology: replace all variants of
“вебхук/вебхука/вебхуки” with the standardized “вебгук” forms (use appropriate
grammatical endings “вебгук/вебгука/вебгуки” as context requires), normalize all
OAuth references to “OAuth-клієнт” or “OAuth-клієнти” with a capital “OAuth” and
use a non-breaking hyphen between OAuth and клієнт (ensure U+2011 non-breaking
hyphen), replace any English “round robin” in values with the Ukrainian
“циклічне розподілення” (adjust grammar as needed), and convert plain “URL” in
values to “URL-адреса” using a non-breaking hyphen; apply these substitutions
consistently across the file and update only values (not keys).
"oauth_clients": "OAuth 用戶端", | ||
"oauth_clients_description": "管理您組織的 OAuth 用戶端", | ||
"create_oauth_client": "建立 OAuth 用戶端", | ||
"create_oauth_client_description": "為第三方整合建立新的 OAuth 用戶端", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Automate a final terminology sweep (optional)
One-shot verification to avoid regressions before merge.
Also applies to: 123-123, 3382-3382, 3460-3491
🏁 Script executed:
#!/bin/bash
set -euo pipefail
FILE="apps/web/public/static/locales/zh-TW/common.json"
echo "1) OAuth 用戶端 -> 客戶端:"
rg -n --no-heading 'OAuth 用戶端|用戶端' "$FILE" || true
echo -e "\n2) English 'round robin' variants:"
rg -n --no-heading -i '\bround[\s-]?robin\b' "$FILE" || true
echo -e "\n3) Webhook block '事件' occurrences (should be 活動):"
sed -n '3456,3495p' "$FILE" | rg -n --no-heading '事件' || true
echo -e "\n4) Booking terms: 預訂 vs 預約 (expect 預約 in changed keys):"
rg -n --no-heading '"round_robin_host_unavailable_for_booking"|"requires_confirmation_description"|"allow_booker_to_select_duration"' "$FILE" \
| cut -d: -f1 | sort -u | xargs -I{} sed -n '{}p' "$FILE" | rg -n '預訂' || true
Length of output: 2582
Please apply the following translation consistency fixes in apps/web/public/static/locales/zh-TW/common.json
before merging:
-
OAuth 客戶端 terminology
Replace all occurrences of “用戶端” in OAuth-related keys with “客戶端” to standardize terminology. Affected lines:- 876–879:
oauth_clients
,oauth_clients_description
,create_oauth_client
,create_oauth_client_description
- 1852:
only_admin_can_manage_oauth_clients
- 2506:
add_client
- 3060:
managed_users_description
- 3065:
select_oAuth_client
- 876–879:
-
Webhook 活動 terminology
In the Webhook section (lines 3456–3495), replace “事件” with “活動” for these keys:webhook_trigger_event
webhook_type
webhook_title
webhook_start_time
webhook_end_time
webhook_description
webhook_location
webhook_event_and_booking
-
Booking 預約 terminology
Change “預訂” to “預約” in these booking-related keys:round_robin_host_unavailable_for_booking
allow_booker_to_select_duration
requires_confirmation_description
-
Round-robin phrasing consistency
Verify and unify the English phrase “round robin” (spelling and hyphenation) across all occurrences in keys at lines 2713, 2793, 2797, 2843, 2985, 3275, and 3382.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/zh-TW/common.json (apply changes at the
referenced lines: 876–879, 1852, 2506, 3060, 3065, 3456–3495, 2713, 2793, 2797,
2843, 2985, 3275, 3382), standardize translations by: replace all occurrences of
“用戶端” with “客戶端” for the OAuth-related keys listed (lines 876–879, 1852, 2506,
3060, 3065); in the Webhook section (lines 3456–3495) replace “事件” with “活動” for
the specified webhook keys; in booking-related keys change “預訂” to “預約” for the
listed booking keys; and scan the keys at lines 2713, 2793, 2797, 2843, 2985,
3275, 3382 to unify the English phrase “round robin” (ensure consistent
spelling/hyphenation across all occurrences).
6220b85
to
e37eef9
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 15
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
apps/web/public/static/locales/et/common.json (1)
1745-1748
: Fix leftover English and noun compound for “no‑show”.Translate the info line and keep “Mitteilmumise” compound.
"rating_url_variable": "Hinnangu URL", "rating_url_info": "URL reitingu tagasiside vormi jaoks", "no_show_url_variable": "Mitteilmumise URL", - "no_show_url_info": "The URL for No Show Feedback", + "no_show_url_info": "URL mitteilmumise tagasiside jaoks",apps/web/public/static/locales/pt/common.json (1)
3432-3441
: Fix grammar and pt‑BR tokens in cache/failed bookings block.
- “Reservas falhas” → “Reservas falhadas”.
- “Status/Excluir/Cache” → “Estado/Eliminar/cache”.
- "failed_bookings": "Reservas falhas", + "failed_bookings": "Reservas falhadas", - "cache_status": "Status do Cache", + "cache_status": "Estado da cache", - "delete_cached_data": "Excluir dados em cache", + "delete_cached_data": "Eliminar dados em cache", - "cache_deleted_successfully": "Cache excluído com sucesso", + "cache_deleted_successfully": "Cache eliminada com sucesso", - "error_deleting_cache": "Erro ao excluir cache", + "error_deleting_cache": "Erro ao eliminar cache", - "confirm_delete_cache": "Tem certeza de que deseja excluir os dados em cache? Esta ação não pode ser desfeita.", + "confirm_delete_cache": "Tem a certeza de que pretende eliminar os dados em cache? Esta ação não pode ser desfeita.", - "yes_delete_cache": "Sim, excluir cache", + "yes_delete_cache": "Sim, eliminar cache",apps/web/public/static/locales/az/common.json (1)
1917-1918
: Fix “URL” casing in labelsUse uppercase “URL” across the UI for consistency with other keys in this file.
- "meeting_url_variable": "Görüş url", - "meeting_url_info": "Tədbir görüş konfrans url", + "meeting_url_variable": "Görüş URL", + "meeting_url_info": "Tədbir görüş konfrans URL",apps/web/public/static/locales/bg/common.json (1)
2643-2644
: Fix typo and grammar in “Travel schedule” stringsExtra “П” and incorrect grammar (“своята пътуване”). This is user‑facing.
- "travel_schedule": "П пътуване", - "travel_schedule_description": "Планирайте своята пътуване напред, за да запазите вашия съществуващ график в различна часова зона и да предотвратите резервацията в полунощ.", + "travel_schedule": "Пътуване", + "travel_schedule_description": "Планирайте предварително своето пътуване, за да запазите съществуващия си график в различна часова зона и да предотвратите резервации в полунощ.",
"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-si", | ||
"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": "İlk 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", | ||
"booking_status": "Rezervasiya statusu", | ||
"location_custom_label_input_label": "Rezervasiya səhifəsində xüsusi etiket", | ||
"meeting_link": "Görüş linki", | ||
"my_bookings": "Mənim Rezervasiyalarım", | ||
"phone": "Telefon", |
There was a problem hiding this comment.
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 metadata block coverage: solid, but run parity checks
Great breadth (event/booking, organizer/attendee, team, metadata). After the small label tweaks above, please verify:
- No duplicate keys in this JSON.
- Cross‑locale parity for this full set (avoid fallback‑to‑English).
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
# 1) Strict duplicate-key check for this file
python - <<'PY'
import json, sys
from collections import defaultdict
dups = defaultdict(int)
def hook(pairs):
seen=set()
for k,_ in pairs:
if k in seen: dups[k]+=1
seen.add(k)
return dict(pairs)
with open("apps/web/public/static/locales/az/common.json", encoding="utf-8") as f:
json.load(f, object_pairs_hook=hook)
print("NO_DUPLICATE_KEYS" if not dups else f"DUPLICATE_KEYS_FOUND: {dict(dups)}")
PY
# 2) Quick scan: inconsistent 'Veb-hook' spelling and lowercase 'url' values
rg -n --ignore-case 'veb-?hook' apps/web/public/static/locales/az/common.json || true
rg -nP '"[^"]+"\s*:\s*"[^"]*\burl\b[^"]*"' apps/web/public/static/locales/az/common.json || true
# 3) (Optional) Cross-locale parity for a critical subset; extend as needed
root="apps/web/public/static/locales"
req_keys=(
"round_robin_host_unavailable_for_booking"
"failed_bookings" "stats" "booking_status"
"webhook_trigger_event" "webhook_created_at" "webhook_type" "webhook_title"
"webhook_start_time" "webhook_end_time" "webhook_description" "webhook_location"
"webhook_uid" "webhook_reschedule_uid" "webhook_cancellation_reason" "webhook_rejection_reason"
"webhook_organizer_name" "webhook_organizer_email" "webhook_organizer_timezone" "webhook_organizer_locale"
"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"
)
missing_any=0
while IFS= read -r f; do
miss=()
for k in "${req_keys[@]}"; do
grep -qP '^\s*"'$k'"\s*:' "$f" || miss+=("$k")
done
if ((${#miss[@]})); then
locale=$(basename "$(dirname "$f")")
echo "- $locale: missing ${#miss[@]} keys -> ${miss[*]}"
missing_any=1
fi
done < <(fd -t f -a 'common.json' "$root")
if ((missing_any==0)); then echo "All locales contain the required keys."; fi
Length of output: 2312
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
# Revised cross-locale parity check without process substitution
root="apps/web/public/static/locales"
req_keys=(
"round_robin_host_unavailable_for_booking"
"failed_bookings" "stats" "booking_status"
"webhook_trigger_event" "webhook_created_at" "webhook_type" "webhook_title"
"webhook_start_time" "webhook_end_time" "webhook_description" "webhook_location"
"webhook_uid" "webhook_reschedule_uid" "webhook_cancellation_reason" "webhook_rejection_reason"
"webhook_organizer_name" "webhook_organizer_email" "webhook_organizer_timezone" "webhook_organizer_locale"
"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"
)
missing_any=0
# Loop through all common.json files
for f in $(fd -t f -a common.json "$root"); do
miss=()
for k in "${req_keys[@]}"; do
if ! grep -qP "^\s*\"$k\"\s*:" "$f"; then
miss+=("$k")
fi
done
if [ "${#miss[@]}" -gt 0 ]; then
locale=$(basename "$(dirname "$f")")
echo "- $locale: missing ${#miss[@]} keys -> ${miss[*]}"
missing_any=1
fi
done
if [ "$missing_any" -eq 0 ]; then
echo "All locales contain the required keys."
fi
Length of output: 217594
Please address casing inconsistencies and missing translations across locales
• AZ locale (apps/web/public/static/locales/az/common.json):
– “edit_or_manage_webhooks” uses mixed “Veb-hook”/“veb-hook” casing; please standardize to “Webhook” (e.g. “Webhookları redaktə etmək və ya idarə etmək istəyirsinizsə…”)
– All occurrences of “url” in the translation values should be uppercased to “URL” for consistency (e.g. “Görüş URL”, “/{{slug}} URL-si…”, etc.)
• No duplicate JSON keys detected in az/common.json.
• Cross-locale parity failures: the following locales are missing the full webhook-metadata key set, which will cause fallbacks to English. Please add the listed keys in each locale’s common.json:
– hr, id, iw, lv, sk, ta, th
Missing keys:
"round_robin_host_unavailable_for_booking", "failed_bookings", "stats", "booking_status",
"webhook_trigger_event", "webhook_created_at", "webhook_type", "webhook_title",
"webhook_start_time", "webhook_end_time", "webhook_description", "webhook_location",
"webhook_uid", "webhook_reschedule_uid", "webhook_cancellation_reason", "webhook_rejection_reason",
"webhook_organizer_name", "webhook_organizer_email", "webhook_organizer_timezone", "webhook_organizer_locale",
"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"
Please update these entries to ensure full coverage and avoid unintended fallbacks.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/az/common.json around lines 3461 to 3494, fix
casing and consistency for webhook-related strings by (1) standardizing any
mixed "Veb-hook"/"veb-hook" occurrences to "Webhook" (e.g., change phrases like
"Veb-hookları redaktə etmək..." to "Webhookları redaktə etmək..."), and (2)
uppercasing all instances of "url" in values to "URL" (e.g., "Görüş URL", "video
zəng URL-i", "/{{slug}} URL-si"). Additionally, add the full webhook-metadata
key set listed in the review to the common.json files for locales hr, id, iw,
lv, sk, ta, th using appropriate localized translations (matching existing style
and keys in az/common.json) so they no longer fallback to English.
@@ -120,7 +120,7 @@ | |||
"already_signed_up_for_this_booking_error": "আপনি ইতিমধ্যে এই বুকিংয়ের জন্য সাইন আপ করেছেন।", | |||
"hosts_unavailable_for_booking": "কিছু হোস্ট বুকিংয়ের জন্য অনুপলব্ধ।", | |||
"fixed_hosts_unavailable_for_booking": "কিছু নির্দিষ্ট হোস্ট বুকিংয়ের জন্য অনুপলব্ধ।", | |||
"round_robin_hosts_unavailable_for_booking": "কোনো রাউন্ড রবিন হোস্ট বুকিংয়ের জন্য উপলব্ধ নেই।", | |||
"round_robin_host_unavailable_for_booking": "রাউন্ড রবিন হোস্ট বুকিং এর জন্য অনুপলব্ধ।", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Round-robin key rename: verify UI callsites updated to singular key
Key changed to round_robin_host_unavailable_for_booking. Please ensure all callers migrated from the old plural key to prevent runtime fallbacks.
Run from repo root:
🏁 Script executed:
#!/bin/bash
# Expect 0 matches for old key; >=1 for new key in code (not locales)
rg -n "round_robin_hosts_unavailable_for_booking" -- apps web packages || echo "OK: old key not found"
rg -nP "t\\(['\"]round_robin_host_unavailable_for_booking['\"]\\)" -- apps web packages || echo "WARNING: no callers found for new key"
Length of output: 388
🏁 Script executed:
#!/bin/bash
# Verify that the old plural key is not referenced in code
rg -n "round_robin_hosts_unavailable_for_booking" -g '*.ts' -g '*.tsx' -g '*.js' -g '*.jsx' -- apps/web packages || echo "OK: old key not found"
# Verify that the new singular key is used in t() calls
rg -nP "t\(\s*['\"]round_robin_host_unavailable_for_booking['\"]\s*\)" -g '*.ts' -g '*.tsx' -g '*.js' -g '*.jsx' -- apps/web packages || echo "WARNING: no callers found for new key"
Length of output: 390
🏁 Script executed:
#!/bin/bash
# Search code (excluding JSON locale files) for both old (plural) and new (singular) round-robin host keys
rg -nE 'round_robin_hosts?_unavailable_for_booking' -- apps/web packages | grep -v '\.json$' || echo "No code references found"
Length of output: 233
Translation key rename requires UI updates
I ran a repository-wide search across .ts
, .tsx
, .js
, and .jsx
files under apps/web
and packages
and found:
- No references to the old plural key (
round_robin_hosts_unavailable_for_booking
) - No references to the new singular key (
round_robin_host_unavailable_for_booking
)
Without updating your UI components to call the new key, users will hit runtime fallbacks instead of seeing the intended message. Please update all translation calls—from wherever you previously used the plural form—to instead use:
t('round_robin_host_unavailable_for_booking')
and verify the message renders correctly in the booking flow.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/bn/common.json around line 123 the translation
key was renamed to "round_robin_host_unavailable_for_booking" but UI code still
uses the old plural key; search the codebase under apps/web and packages for
usages of "round_robin_hosts_unavailable_for_booking" and replace them with
t('round_robin_host_unavailable_for_booking'), update any components or tests
that referenced the old key, rebuild/transpile as needed, and verify the booking
flow renders the new Bengali message instead of falling back.
"oauth_clients": "OAuth ক্লায়েন্ট", | ||
"oauth_clients_description": "আপনার সংস্থার জন্য OAuth ক্লায়েন্ট পরিচালনা করুন", | ||
"create_oauth_client": "OAuth ক্লায়েন্ট তৈরি করুন", | ||
"create_oauth_client_description": "তৃতীয়-পক্ষের ইন্টিগ্রেশনের জন্য একটি নতুন OAuth ক্লায়েন্ট তৈরি করুন", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
New oauth_ keys added — migrate callers and retire legacy oAuth_ block**
Great to see oauth_* normalized. However, bn/common.json still contains legacy oAuth_* keys later in the file; values also have “Oauth/ওআউথ” casing. Keep display values “OAuth”, and plan removal after caller migration.
- Step 1: Update all callers from t("oAuth_") → t("oauth_").
- Step 2: Once callers are migrated in apps/web and packages, remove the legacy oAuth_* keys across locales.
Temporary value-casing fix if you must keep legacy keys for one release:
- "oAuth": "Oauth",
- "oAuth_client_creation_form": "Oauth ক্লায়েন্ট তৈরির ফর্ম",
- "oAuth_client_creation_form_description": "এটি একটি নতুন ওআউথ ক্লায়েন্ট তৈরি করার ফর্ম",
- "oAuth_client_updation_form": "Oauth ক্লায়েন্ট আপডেট ফর্ম",
- "oAuth_client_updation_form_description": "এটি একটি বিদ্যমান ওআউথ ক্লায়েন্ট সম্পাদনা করার ফর্ম",
+ "oAuth": "OAuth",
+ "oAuth_client_creation_form": "OAuth ক্লায়েন্ট তৈরির ফর্ম",
+ "oAuth_client_creation_form_description": "এটি একটি নতুন OAuth ক্লায়েন্ট তৈরি করার ফর্ম",
+ "oAuth_client_updation_form": "OAuth ক্লায়েন্ট আপডেট ফর্ম",
+ "oAuth_client_updation_form_description": "এটি একটি বিদ্যমান OAuth ক্লায়েন্ট সম্পাদনা করার ফর্ম",
Helper to audit callers and leftovers:
🏁 Script executed:
#!/bin/bash
# Legacy callers (should be 0)
rg -nP "t\\(['\"]oAuth" -- apps web packages || echo "OK: no legacy callers"
# New callers present?
rg -nP "t\\(['\"]oauth_" -- apps web packages || echo "WARNING: no oauth_* callers found"
# Legacy locale keys present?
rg -n '"oAuth_' apps/web/public/static/locales || true
Length of output: 22318
🏁 Script executed:
#!/bin/bash
# Check if the "oAuth" key exists in bn locale
rg -n '"oAuth":' apps/web/public/static/locales/bn/common.json
# Check for admin_oAuth_description key in bn locale
rg -n '"admin_oAuth_description":' apps/web/public/static/locales/bn/common.json
Length of output: 242
Migrate and remove legacy oAuth_ keys in bn locale*
bn/common.json still contains the old oAuth_* keys (with “Oauth/ওআউথ” casing) alongside the newly added oauth_* keys. Callers are still referencing t("oAuth_*"), so we need to:
- Step 1 (mandatory): Update all code callers from t("oAuth_") → t("oauth_") (including t("admin_oAuth_description") if used) across apps/web and packages.
- Step 2 (optional, one release): If you must keep legacy keys for rollout, normalize their display values to “OAuth” in bn/common.json.
- Step 3 (cleanup): Once no callers reference the old keys, remove the legacy oAuth_* block from all locale files, including bn/common.json.
Locations requiring attention:
- Legacy callers in apps/web/app/(use-page-wrapper)/settings/platform/oauth-clients/create/page.tsx, …/[clientId]/edit/page.tsx, …/(admin-layout)/admin/oAuth/page.tsx, and modules/** views still use t("oAuth_*").
- Legacy locale entries in apps/web/public/static/locales/bn/common.json:
- Line 1896:
"admin_oAuth_description": "নতুন OAuth ক্লায়েন্ট যুক্ত করুন",
- Lines 2453–2457:
"oAuth": "Oauth", "oAuth_client_creation_form": "Oauth ক্লায়েন্ট তৈরির ফর্ম", "oAuth_client_creation_form_description": "এটি একটি নতুন ওআউথ ক্লায়েন্ট তৈরি করার ফর্ম", "oAuth_client_updation_form": "Oauth ক্লায়েন্ট আপডেট ফর্ম", "oAuth_client_updation_form_description": "এটি একটি বিদ্যমান ওআউথ ক্লায়েন্ট সম্পাদনা করার ফর্ম",
- Line 1896:
Temporary casing-fix diff for bn/common.json:
--- a/apps/web/public/static/locales/bn/common.json
+++ b/apps/web/public/static/locales/bn/common.json
@@ -2453,7 +2453,7 @@
- "oAuth": "Oauth",
+ "oAuth": "OAuth",
@@ -2454,7 +2454,7 @@
- "oAuth_client_creation_form": "Oauth ক্লায়েন্ট তৈরির ফর্ম",
+ "oAuth_client_creation_form": "OAuth ক্লায়েন্ট তৈরির ফর্ম",
@@ -2455,7 +2455,7 @@
- "oAuth_client_creation_form_description": "এটি একটি নতুন ওআউথ ক্লায়েন্ট তৈরি করার ফর্ম",
+ "oAuth_client_creation_form_description": "এটি একটি নতুন OAuth ক্লায়েন্ট তৈরি করার ফর্ম",
@@ -2456,7 +2456,7 @@
- "oAuth_client_updation_form": "Oauth ক্লায়েন্ট আপডেট ফর্ম",
+ "oAuth_client_updation_form": "OAuth ক্লায়েন্ট আপডেট ফর্ম",
@@ -2457,7 +2457,7 @@
- "oAuth_client_updation_form_description": "এটি একটি বিদ্যমান ওআউথ ক্লায়েন্ট সম্পাদনা করার ফর্ম",
+ "oAuth_client_updation_form_description": "এটি একটি বিদ্যমান OAuth ক্লায়েন্ট সম্পাদনা করার ফর্ম",
Helper audit script:
#!/bin/bash
# Legacy callers (should be 0)
rg -nP "t\(['\"]oAuth" -- apps/web packages || echo "OK: no legacy callers"
# New callers present?
rg -nP "t\(['\"]oauth_" -- apps/web packages || echo "WARNING: no oauth_* callers found"
# Legacy locale keys present?
rg -n '"oAuth_' apps/web/public/static/locales || true
🤖 Prompt for AI Agents
In apps/web/public/static/locales/bn/common.json around lines 876 and especially
lines ~1896 and 2453–2457 there are legacy oAuth_* keys (casing
“oAuth/Oauth/ওআউথ”) coexisting with new oauth_* keys while callers still use
t("oAuth_*"); update all code callers across apps/web and packages from
t("oAuth_*") (including t("admin_oAuth_description") and the files listed:
apps/web/app/(use-page-wrapper)/settings/platform/oauth-clients/create/page.tsx,
…/[clientId]/edit/page.tsx, …/(admin-layout)/admin/oAuth/page.tsx, and any
modules/** views) to t("oauth_*"); if you need a rollout window, normalize the
legacy bn display values to use “OAuth” (English casing) in the legacy keys
temporarily; once no callers reference oAuth_* remove the legacy oAuth_* block
from bn/common.json (and other locale files) entirely.
@@ -120,7 +120,7 @@ | |||
"already_signed_up_for_this_booking_error": "Du er allerede tilmeldt denne booking.", | |||
"hosts_unavailable_for_booking": "Nogle af værterne er ikke tilgængelige for booking.", | |||
"fixed_hosts_unavailable_for_booking": "Nogle af de faste værter er ikke tilgængelige for booking.", | |||
"round_robin_hosts_unavailable_for_booking": "Ingen Round Robin-værter er tilgængelige for booking.", | |||
"round_robin_host_unavailable_for_booking": "Round Robin-værten er ikke tilgængelig for booking.", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Round‑Robin host singular key: LGTM. Verify migration across locales.
Key reads well. Please confirm all locales contain the new singular key and the deprecated plural key is removed to avoid fallbacks.
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
base="apps/web/public/static/locales"
miss=0
for f in $(find "$base" -type f -name common.json); do
jq -e 'has("round_robin_host_unavailable_for_booking")' "$f" >/dev/null || { echo "Missing round_robin_host_unavailable_for_booking in: $f"; miss=1; }
jq -e 'has("round_robin_hosts_unavailable_for_booking")' "$f" >/dev/null && { echo "Deprecated round_robin_hosts_unavailable_for_booking still present in: $f"; miss=1; }
done
exit "$miss"
Length of output: 13212
Add missing round_robin_host_unavailable_for_booking
translations
The migration script found that the new singular key exists and the deprecated plural key has been removed in most locales, but the following locale files are missing the new key:
• apps/web/public/static/locales/hr/common.json
• apps/web/public/static/locales/id/common.json
• apps/web/public/static/locales/iw/common.json
• apps/web/public/static/locales/lv/common.json
• apps/web/public/static/locales/sk/common.json
• apps/web/public/static/locales/ta/common.json
• apps/web/public/static/locales/th/common.json
Please add the "round_robin_host_unavailable_for_booking": "…"
entry in each of these files, and once done, re-run the migration check to ensure no deprecated plural key remains and all locales are covered.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/hr/common.json,
apps/web/public/static/locales/id/common.json,
apps/web/public/static/locales/iw/common.json,
apps/web/public/static/locales/lv/common.json,
apps/web/public/static/locales/sk/common.json,
apps/web/public/static/locales/ta/common.json and
apps/web/public/static/locales/th/common.json (add the entry alongside other
round_robin keys, e.g. near line ~120 where similar messages live), add the
missing JSON entry "round_robin_host_unavailable_for_booking": "<translated
string>" — use the correct translation for each locale or the English fallback
"Round Robin host is not available for booking." if translation is not
available; ensure proper JSON syntax (comma placement) and then re-run the
migration check to confirm the deprecated plural key is removed and all locales
include the new singular key.
"oauth_clients": "OAuth-klienter", | ||
"oauth_clients_description": "Administrer OAuth-klienter for din organisation", | ||
"create_oauth_client": "Opret OAuth-klient", | ||
"create_oauth_client_description": "Opret en ny OAuth-klient til tredjepartsintegrationer", | ||
"oauth_client_deletion_message": "OAuth-klient blev slettet", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
OAuth client keys: LGTM. Ensure cross‑locale coverage.
Translations look correct and capitalization of “OAuth” is consistent. Please verify these four keys exist across all locales to prevent English fallbacks.
🏁 Script executed:
#!/usr/bin/env bash
# Verify OAuth client keys exist across locales
set -euo pipefail
base="apps/web/public/static/locales"
keys=(oauth_clients oauth_clients_description create_oauth_client create_oauth_client_description)
miss=0
while IFS= read -r f; do
for k in "${keys[@]}"; do
jq -e --arg k "$k" 'has($k)' "$f" >/dev/null || { echo "Missing $k in: $f"; miss=1; }
done
done < <(find "$base" -type f -name common.json)
exit "$miss"
Length of output: 342
I’ve provided an updated script that avoids process-substitution and should correctly report any missing keys. Please rerun and share the output.
🏁 Script executed:
#!/usr/bin/env bash
# Verify OAuth client keys exist across all `common.json` locale files without process substitution
set -euo pipefail
base="apps/web/public/static/locales"
keys=(oauth_clients oauth_clients_description create_oauth_client create_oauth_client_description)
miss=0
# Gather all common.json paths
mapfile -t files < <(find "$base" -type f -name common.json)
for f in "${files[@]}"; do
for k in "${keys[@]}"; do
if ! jq -e --arg k "$k" 'has($k)' "$f" >/dev/null; then
echo "Missing $k in: $f"
miss=1
fi
done
done
exit "$miss"
Length of output: 361
I’ve simplified the file discovery to avoid process-substitution entirely. Please rerun this and share the output.
🏁 Script executed:
#!/usr/bin/env bash
# Verify OAuth client keys exist across all `common.json` locale files
set -euo pipefail
base="apps/web/public/static/locales"
keys=(oauth_clients oauth_clients_description create_oauth_client create_oauth_client_description)
miss=0
# Populate files array via simple command substitution
files=( $(find "$base" -type f -name common.json) )
for f in "${files[@]}"; do
for k in "${keys[@]}"; do
if ! jq -e --arg k "$k" 'has($k)' "$f" >/dev/null; then
echo "Missing $k in: $f"
miss=1
fi
done
done
exit "$miss"
Length of output: 27441
Add missing OAuth translation keys across locales
The verification script uncovered missing keys in several locale files. Please add the following keys—oauth_clients
, oauth_clients_description
, create_oauth_client
, and create_oauth_client_description
—to each of these common.json
files to prevent English fallbacks:
- apps/web/public/static/locales/hr/common.json
- apps/web/public/static/locales/id/common.json
- apps/web/public/static/locales/iw/common.json
- apps/web/public/static/locales/lv/common.json
- apps/web/public/static/locales/sk/common.json
- apps/web/public/static/locales/ta/common.json
- apps/web/public/static/locales/th/common.json
"webhook_trigger_event": "トリガーイベントの名前(例:BOOKING_CREATED、BOOKING_CANCELLED)", | ||
"webhook_created_at": "ウェブフックの時間", | ||
"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": "ミーティングのビデオ通話URL", | ||
"webhook_hide_variables": "変数を非表示", | ||
"webhook_show_variable": "利用可能な変数を表示", | ||
"webhook_event_and_booking": "イベントと予約", | ||
"webhook_people": "ユーザー", | ||
"webhook_teams": "チーム", | ||
"webhook_metadata": "メタデータ", | ||
"stats": "統計", |
There was a problem hiding this comment.
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 residual terminology across the file after edits
Please re‑scan for any remaining non‑preferred terms (“ロードバランシング”, “オーナー”) and validate JSON.
Also applies to: 3382-3382, 1851-1852, 213-213
🏁 Script executed:
#!/bin/bash
set -euo pipefail
f="apps/web/public/static/locales/ja/common.json"
echo "[1/3] Validate JSON syntax:"
jq . "$f" >/dev/null && echo "✔ JSON valid"
echo "[2/3] Scan for residual terms (expect no matches):"
rg -n -e 'ロードバランシング' -e 'オーナー' "$f" || echo "✔ No residual 'ロードバランシング'/'オーナー' found"
echo "[3/3] Spot-check webhook and PBAC headings:"
rg -n -C1 'webhook_(created_at|title|start_time|end_time|organizer_email|attendee_email|organizer_locale|attendee_locale|team_name|team_members|video_call_url)\b|pbac_desc_manage_(roles|event_types|teams|bookings)\b' "$f" || true
Length of output: 2919
Remaining non-preferred terminology detected in ja/common.json
- ✔ JSON is valid.
- ✖ Residual occurrences of “オーナー” and “ロードバランシング” found at:
• Line 213 (hidden_team_member_message
) uses “オーナー”
• Lines 1851–1852 (only_admin_can_manage_directory_sync
,only_admin_can_manage_oauth_clients
) use “オーナー”
• Line 3382 (rr_load_balancing_disabled_with_groups
) uses “ロードバランシング”
Please replace each instance with the approved terminology (e.g., “所有者” instead of “オーナー”, and the standardized term for load balancing) and re-run the JSON validation and term scan to confirm no non-preferred terms remain.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/ja/common.json around lines 213, 1851–1852,
and 3382, replace the non-preferred terms: change every occurrence of "オーナー" to
"所有者" (lines 213 and 1851–1852) and change "ロードバランシング" to the standardized
Japanese term "負荷分散" (line 3382); after editing, re-run the JSON validator to
ensure the file remains valid and re-run the term scan to confirm no residual
non-preferred terminology remain.
@@ -3418,5 +3457,40 @@ | |||
"usage_based_expiration_description": "此链接可用于 {{count}} 次预订", | |||
"usage_based_generic_expiration_description": "此链接可设置为在达到指定预订次数后过期", | |||
"usage_based_expiration_description_plural": "此链接可用于 {{count}} 次预订", | |||
"webhook_trigger_event": "触发事件的名称(例如:BOOKING_CREATED,BOOKING_CANCELLED)", | |||
"webhook_created_at": "Webhook 的创建时间", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Automate verification: residual “Round Robin” English and RR key rename
Run this to ensure no English “Round Robin/round robin” remains in zh-CN, and to double‑check the new key exists across locales and the old key is gone.
Also applies to: 3382-3382, 2713-2713, 2793-2793, 2797-2797, 2986-2986, 3276-3276
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "1) Residual 'Round Robin' occurrences in zh-CN:"
rg -n 'Round Robin|round robin' apps/web/public/static/locales/zh-CN/common.json || echo "✔ No residual 'Round Robin' found."
echo
echo "2) Old vs new RR key across all locales:"
fd -a 'common.json' apps/web/public/static/locales > /tmp/locales.txt
echo "- Old key (should be zero):"
rg -n --fixed-strings '"round_robin_hosts_unavailable_for_booking"' -f /tmp/locales.txt || echo "✔ Old key not found."
echo "- New key presence:"
missing=0
while read -r f; do
if ! rg -n --fixed-strings '"round_robin_host_unavailable_for_booking"' "$f" >/dev/null; then
echo "MISSING new key in: $f"
missing=1
fi
done < /tmp/locales.txt
test $missing -eq 0 && echo "✔ New key present in all locales" || echo "❌ Missing new key in some locales"
Length of output: 9053
Remove residual English in zh-CN & Add new key to missing locales
The verification script shows:
-
Residual “round robin” text still present in zh-CN (
common.json
), at:- Line 2713: skip_rr_assignment_label
- Line 2793: reassign_to_another_rr_host
- Line 2797: reassign_round_robin_host
- Line 2985: salesforce_if_free_email_domain_skip_owner_check
- Line 3275: include_no_show_in_rr_calculation
- Line 3382: rr_load_balancing_disabled_with_groups
Please replace these English occurrences with the correct Chinese translations.
-
The old key (
round_robin_hosts_unavailable_for_booking
) has been removed and the new key (round_robin_host_unavailable_for_booking
) was added—but it’s missing in several locale files. Add the new key (with appropriate translation) to:- hr/common.json
- id/common.json
- iw/common.json
- lv/common.json
- sk/common.json
- ta/common.json
- th/common.json
Once these are addressed, rerun the locale‐consistency script to confirm no residual English in zh-CN and full coverage of the new key across all locales.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/zh-CN/common.json around lines 2713, 2793,
2797, 2985, 3275, 3382 and 3461, replace the residual English phrases
(skip_rr_assignment_label, reassign_to_another_rr_host,
reassign_round_robin_host, salesforce_if_free_email_domain_skip_owner_check,
include_no_show_in_rr_calculation, rr_load_balancing_disabled_with_groups,
webhook_created_at) with their correct Chinese translations; additionally, add
the new key round_robin_host_unavailable_for_booking (with an appropriate
translation) to the following locale files:
apps/web/public/static/locales/hr/common.json, id/common.json, iw/common.json,
lv/common.json, sk/common.json, ta/common.json, th/common.json so the new key
exists in each locale; after updating, run the locale-consistency script to
confirm there are no residual English strings in zh-CN and that the new key is
present across all locales.
"hosts_unavailable_for_booking": "部分主持人無法預訂。", | ||
"fixed_hosts_unavailable_for_booking": "部分固定主持人無法預約。", | ||
"round_robin_hosts_unavailable_for_booking": "沒有可供預約的輪值主持人。", | ||
"round_robin_host_unavailable_for_booking": "輪值主持人目前無法接受預訂。", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Unify booking terminology and round‑robin phrasing
- Switch 「預訂」→「預約」 for zh-TW consistency.
- Prefer 「循環制主辦人」 over 「輪值主持人」 to match UI elsewhere.
- "hosts_unavailable_for_booking": "部分主持人無法預訂。",
+ "hosts_unavailable_for_booking": "部分主持人無法預約。",
- "fixed_hosts_unavailable_for_booking": "部分固定主持人無法預約。",
+ "fixed_hosts_unavailable_for_booking": "部分固定主辦人無法預約。",
- "round_robin_host_unavailable_for_booking": "輪值主持人目前無法接受預訂。",
+ "round_robin_host_unavailable_for_booking": "循環制主辦人目前無法接受預約。",
📝 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.
"hosts_unavailable_for_booking": "部分主持人無法預訂。", | |
"fixed_hosts_unavailable_for_booking": "部分固定主持人無法預約。", | |
"round_robin_hosts_unavailable_for_booking": "沒有可供預約的輪值主持人。", | |
"round_robin_host_unavailable_for_booking": "輪值主持人目前無法接受預訂。", | |
"hosts_unavailable_for_booking": "部分主持人無法預約。", | |
"fixed_hosts_unavailable_for_booking": "部分固定主辦人無法預約。", | |
"round_robin_host_unavailable_for_booking": "循環制主辦人目前無法接受預約。", |
🤖 Prompt for AI Agents
In apps/web/public/static/locales/zh-TW/common.json around lines 121–123, unify
booking terminology and round‑robin phrasing: change "部分主持人無法預訂。" to
"部分主持人無法預約。" (預訂 → 預約), and replace "輪值主持人目前無法接受預訂。" with "循環制主辦人目前無法接受預約。" (use
循環制主辦人 and 預約) so terminology matches the rest of the UI.
"pbac_desc_manage_roles": "對組織團隊中的角色進行所有操作", | ||
"pbac_desc_create_workflows": "建立並設置新的工作流程", | ||
"pbac_desc_view_workflows": "檢視現有的工作流程及其配置", | ||
"pbac_desc_update_workflows": "編輯和修改工作流程設置", | ||
"pbac_desc_delete_workflows": "從系統中移除工作流程", | ||
"pbac_desc_manage_workflows": "對所有工作流程的完整管理權限", | ||
"pbac_desc_create_event_types": "建立活動類型", | ||
"pbac_desc_view_event_types": "檢視活動類型", | ||
"pbac_desc_update_event_types": "更新活動類型", | ||
"pbac_desc_delete_event_types": "刪除活動類型", | ||
"pbac_desc_manage_event_types": "活動類型的所有操作", | ||
"pbac_desc_manage_event_types": "對組織團隊中的活動類型進行所有操作", | ||
"pbac_desc_create_teams": "建立團隊", | ||
"pbac_desc_view_team_details": "檢視團隊詳情", | ||
"pbac_desc_update_team_settings": "更新團隊設定", | ||
"pbac_desc_delete_team": "刪除團隊", | ||
"pbac_desc_invite_team_members": "邀請團隊成員", | ||
"pbac_desc_remove_team_members": "移除團隊成員", | ||
"pbac_desc_change_team_member_role": "更改團隊成員角色", | ||
"pbac_desc_manage_teams": "對團隊的所有操作", | ||
"pbac_desc_manage_teams": "對組織團隊中的團隊進行所有操作", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
PBAC descriptions: improve fluency and scope phrasing
Replace stiff 「對組織團隊中的…進行所有操作」 with natural 「在組織或團隊內對…執行所有操作」/「管理…(所有操作)」.
- "pbac_desc_manage_roles": "對組織團隊中的角色進行所有操作",
+ "pbac_desc_manage_roles": "在組織或團隊內對角色執行所有操作",
- "pbac_desc_create_workflows": "建立並設置新的工作流程",
+ "pbac_desc_create_workflows": "建立並設定新的工作流程",
- "pbac_desc_view_workflows": "檢視現有的工作流程及其配置",
+ "pbac_desc_view_workflows": "檢視現有工作流程及其設定",
- "pbac_desc_update_workflows": "編輯和修改工作流程設置",
+ "pbac_desc_update_workflows": "編輯與修改工作流程設定",
- "pbac_desc_delete_workflows": "從系統中移除工作流程",
+ "pbac_desc_delete_workflows": "移除工作流程",
- "pbac_desc_manage_workflows": "對所有工作流程的完整管理權限",
+ "pbac_desc_manage_workflows": "管理所有工作流程(所有操作)",
- "pbac_desc_manage_event_types": "對組織團隊中的活動類型進行所有操作",
+ "pbac_desc_manage_event_types": "在組織或團隊內管理活動類型(所有操作)",
- "pbac_desc_manage_teams": "對組織團隊中的團隊進行所有操作",
+ "pbac_desc_manage_teams": "在組織或團隊內管理團隊(所有操作)",
- "pbac_desc_manage_bookings": "對組織團隊中的預約進行所有操作",
+ "pbac_desc_manage_bookings": "在組織或團隊內管理預約(所有操作)",
Also applies to: 3372-3372
🤖 Prompt for AI Agents
In apps/web/public/static/locales/zh-TW/common.json around lines 3339 to 3357
(also apply the same change at line 3372), several PBAC description values use
the stiff phrase "對組織團隊中的…進行所有操作"; update those strings to a more natural
phrasing such as "在組織或團隊內對…執行所有操作" or short form "管理…(所有操作)" as appropriate for
each key so the translations read fluently and consistently.
"webhook_trigger_event": "觸發事件的名稱(例如:BOOKING_CREATED、BOOKING_CANCELLED)", | ||
"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": "會議的視訊通話 URL", | ||
"webhook_hide_variables": "隱藏變數", | ||
"webhook_show_variable": "顯示可用變數", | ||
"webhook_event_and_booking": "事件與預約", | ||
"webhook_people": "人員", | ||
"webhook_teams": "團隊", | ||
"webhook_metadata": "中繼資料", | ||
"stats": "統計", | ||
"booking_status": "預約狀態", | ||
"location_custom_label_input_label": "預約頁面的自訂標籤", | ||
"meeting_link": "會議連結", | ||
"my_bookings": "我的預約", | ||
"phone": "電話", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Webhook block: standardize “活動” (not “事件”) and tighten wording
- Use 「活動」 across this block to match product terminology.
- Prefer concise style (remove unnecessary「的」).
- Clarify “type” as 「活動類型代碼」; unify “locale” as 「語言區域」.
- Use 「重新安排」 instead of 「重新排程」 for public copy.
- "webhook_trigger_event": "觸發事件的名稱(例如:BOOKING_CREATED、BOOKING_CANCELLED)",
+ "webhook_trigger_event": "觸發活動的名稱(例如:BOOKING_CREATED、BOOKING_CANCELLED)",
- "webhook_created_at": "Webhook 的建立時間",
+ "webhook_created_at": "Webhook 建立時間",
- "webhook_type": "事件類型的代稱",
+ "webhook_type": "活動類型代碼",
- "webhook_title": "事件類型名稱",
+ "webhook_title": "活動類型名稱",
- "webhook_start_time": "事件的開始時間",
+ "webhook_start_time": "活動開始時間",
- "webhook_end_time": "事件的結束時間",
+ "webhook_end_time": "活動結束時間",
- "webhook_description": "事件類型設定中描述的事件描述",
+ "webhook_description": "活動描述(取自活動類型設定)",
- "webhook_location": "事件地點",
+ "webhook_location": "活動地點",
- "webhook_uid": "預約的 UID",
+ "webhook_uid": "預約 UID",
- "webhook_reschedule_uid": "重新排程的 UID",
+ "webhook_reschedule_uid": "重新安排的 UID",
- "webhook_organizer_timezone": "主辦者的時區(例如:'America/New_York'、'Asia/Kolkata')",
+ "webhook_organizer_timezone": "主辦者時區(例如:'America/New_York'、'Asia/Kolkata')",
- "webhook_organizer_locale": "主辦者的語言區域(例如:'en'、'fr')",
+ "webhook_organizer_locale": "主辦者語言區域(例如:'en'、'fr')",
- "webhook_attendee_locale": "第一位參與者的語言地區",
+ "webhook_attendee_locale": "第一位與會者的語言區域",
- "webhook_event_and_booking": "事件與預約",
+ "webhook_event_and_booking": "活動與預約",
📝 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.
"webhook_trigger_event": "觸發事件的名稱(例如:BOOKING_CREATED、BOOKING_CANCELLED)", | |
"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": "會議的視訊通話 URL", | |
"webhook_hide_variables": "隱藏變數", | |
"webhook_show_variable": "顯示可用變數", | |
"webhook_event_and_booking": "事件與預約", | |
"webhook_people": "人員", | |
"webhook_teams": "團隊", | |
"webhook_metadata": "中繼資料", | |
"stats": "統計", | |
"booking_status": "預約狀態", | |
"location_custom_label_input_label": "預約頁面的自訂標籤", | |
"meeting_link": "會議連結", | |
"my_bookings": "我的預約", | |
"phone": "電話", | |
"webhook_trigger_event": "觸發活動的名稱(例如:BOOKING_CREATED、BOOKING_CANCELLED)", | |
"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": "會議的視訊通話 URL", | |
"webhook_hide_variables": "隱藏變數", | |
"webhook_show_variable": "顯示可用變數", | |
"webhook_event_and_booking": "活動與預約", | |
"webhook_people": "人員", | |
"webhook_teams": "團隊", | |
"webhook_metadata": "中繼資料", | |
"stats": "統計", | |
"booking_status": "預約狀態", | |
"location_custom_label_input_label": "預約頁面的自訂標籤", | |
"meeting_link": "會議連結", | |
"my_bookings": "我的預約", | |
"phone": "電話", |
🤖 Prompt for AI Agents
In apps/web/public/static/locales/zh-TW/common.json around lines 3460–3494, the
webhook block uses 「事件」 and some verbose phrasing; update the translations to
use 「活動」 consistently, remove unnecessary 「的」 where natural for concise public
copy, change "webhook_type" to "活動類型代碼", standardize all "locale" labels to
「語言區域」, replace "webhook_reschedule_uid" wording to use 「重新安排」 instead of
「重新排程」, and tighten other labels (e.g., "webhook_created_at" -> remove extra 「的」
if present, "webhook_organizer_locale"/"webhook_attendee_locale" -> 「語言區域」,
"webhook_attendee_name"/"email" -> concise labels); apply these wording edits
across each key in this block so terminology is consistent and copy is more
concise.
e37eef9
to
41db697
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 18
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/et/common.json (1)
239-241
: Standardize “webhook” and fix OAuth client noun + typo.Use “veebihaak/veebihaagi” consistently and hyphenate “OAuth‑klient”.
- "webhook_update_form": "Webhooki uuendamise vorm", - "webhook_update_form_description": "Lisa webhook oma OAuthCliendile.", + "webhook_update_form": "Veebihaagi uuendamise vorm", + "webhook_update_form_description": "Lisa veebihaak oma OAuth‑kliendile.",apps/web/public/static/locales/fr/common.json (1)
1-3496
: FR Translation – Style et cohérence à corrigerQuelques problèmes de typographie et de formulation subsistent dans
apps/web/public/static/locales/fr/common.json
. Veuillez :• Remplacer les mentions “par ex.,” par “p. ex.,”
- Clé
"webhook_trigger_event"
ligne 3460 :"Le nom de l'événement déclencheur (par ex., …)"
→(p. ex., BOOKING_CREATED, BOOKING_CANCELLED)
• Harmoniser “e-mail” avec trait d’union (et non “email”)
- Clés
"exclude_emails_that_contain"
(l. 3004) et
"require_emails_that_contain"
(l. 3005) :
“Exclure les emails…” → “Exclure les e-mails…”
“Exiger des emails…” → “Exiger des e-mails…”• Corriger l’accord au pluriel pour les permissions “admin only”
- Clé
"only_admin_can_manage_directory_sync"
(l. 1851) :
“Seul l'administrateur ou le propriétaire… peut gérer” →
“Seuls l’administrateur et le propriétaire… peuvent gérer”- Clé
"only_admin_can_manage_oauth_clients"
(l. 1852) : même changement• Clarifier et typer les champs webhook
"webhook_created_at"
(l. 3461) :
“L'heure du webhook” → “Date et heure de création du webhook”"webhook_organizer_email"
(l. 3473) et
"webhook_attendee_email"
(l. 3477) :
“Email …” → “Adresse e-mail …”"webhook_organizer_locale"
(l. 3475) et
"webhook_attendee_locale"
(l. 3479) :
“Locale …” → “Paramètre régional …”"webhook_organizer_timezone"
(l. 3474) :
“(par ex., 'America/New_York', …)” → “(p. ex., « America/New_York », « Asia/Kolkata »)”• Uniformiser “round-robin” avec un trait d’union
Plusieurs occurrences de “round robin” (pp. 73, 123, 2289…) doivent devenir “round-robin” pour respecter la règle typographique.Merci de corriger ces points pour assurer la cohérence et la qualité des traductions.
apps/web/public/static/locales/sr/common.json (1)
807-807
: Localization: Replace remaining “Round Robin” occurrences in sr/common.jsonThe search confirmed multiple literal “Round Robin” strings remain in
apps/web/public/static/locales/sr/common.json
. For full Serbian localization, please replace them with “kružno dodeljivanje” variants (adjusting case and grammatical form as needed). The JSON is already valid, so you can safely apply these changes:• apps/web/public/static/locales/sr/common.json
- Line 123:
- "round_robin_host_unavailable_for_booking": "Round Robin domaćin nije dostupan za zakazivanje.", + "round_robin_host_unavailable_for_booking": "Domaćin kružnog dodeljivanja nije dostupan za zakazivanje.",- Line 807:
- "round_robin": "Round Robin", + "round_robin": "Kružno dodeljivanje",- Line 2979:
- "salesforce_route_to_owner": "Vlasnik kontakta će biti Round Robin domaćin ako je dostupan", + "salesforce_route_to_owner": "Vlasnik kontakta će biti domaćin kružnog dodeljivanja ako je dostupan",- Line 2981:
- "salesforce_do_not_route_to_owner": "Vlasnik kontakta neće biti primoran (može i dalje biti domaćin ako odgovara atributima i Round Robin kriterijumima)", + "salesforce_do_not_route_to_owner": "Vlasnik kontakta neće biti primoran (može i dalje biti domaćin ako odgovara atributima i kriterijumima kružnog dodeljivanja)",- Line 3117:
- "reset_interval_weighted_rr": "Resetuj interval za ponderisani Round Robin", + "reset_interval_weighted_rr": "Resetuj interval za ponderisano kružno dodeljivanje",- Line 3134:
- "rr_interval_successfully_updated": "Interval za Round Robin uspešno ažuriran", + "rr_interval_successfully_updated": "Interval za kružno dodeljivanje uspešno ažuriran",- Line 3279:
- "rr_settings_successfully_updated": "Podešavanja za Round Robin uspešno ažurirana", + "rr_settings_successfully_updated": "Podešavanja za kružno dodeljivanje uspešno ažurirana",- Line 3280:
- "distribution_basis_weighted_rr": "Osnova distribucije za ponderisani Round Robin", + "distribution_basis_weighted_rr": "Osnova distribucije za ponderisano kružno dodeljivanje",- Line 3382:
- "rr_load_balancing_disabled_with_groups": "Balansiranje opterećenja nije dostupno sa Round Robin grupama", + "rr_load_balancing_disabled_with_groups": "Balansiranje opterećenja nije dostupno sa grupama kružnog dodeljivanja",Applying these replacements will complete the localization sweep for “Round Robin.”
apps/web/public/static/locales/da/common.json (1)
3309-3345
: Replace remaining PBAC translation keypbac_resource_attributes
from “Egenskaber” to “Attributter”grep confirms this is the only PBAC‐scoped occurrence of “Egenskab(er)” in
apps/web/public/static/locales/da/common.json
(line 3331); all other hits at ~2803–2816 pertain to the core “Attribut” feature and should remain unchanged.• File: apps/web/public/static/locales/da/common.json
• Line 3331:- "pbac_resource_attributes": "Egenskaber", + "pbac_resource_attributes": "Attributter",No other PBAC descriptions (3349–3367, 3372–3373) contain “Egenskab”/“Egenskaber”. Please apply this one change to keep scope phrasing consistent.
apps/web/public/static/locales/km/common.json (1)
3308-3345
: Fix remaining “អង្គភាព” usages in PBAC workflows sectionThe localized PBAC workflow descriptors (lines 3308–3345) still contain the old term “អង្គភាព.” Please update these to the standardized “អង្គការ” throughout:
• pbac_desc_view_organization_attributes
- "pbac_desc_view_organization_attributes": "មើលគុណលក្ខណៈរបស់អង្គភាព", + "pbac_desc_view_organization_attributes": "មើលគុណលក្ខណៈរបស់អង្គការ",• pbac_desc_update_organization_attributes
- "pbac_desc_update_organization_attributes": "ធ្វើបច្ចុប្បន្នភាពគុណលក្ខណៈរបស់អង្គភាព", + "pbac_desc_update_organization_attributes": "ធ្វើបច្ចុប្បន្នភាពគុណលក្ខណៈរបស់អង្គការ",• pbac_desc_delete_organization_attributes
- "pbac_desc_delete_organization_attributes": "លុបគុណលក្ខណៈរបស់អង្គភាព", + "pbac_desc_delete_organization_attributes": "លុបគុណលក្ខណៈរបស់អង្គការ",• pbac_desc_create_organization_attributes
- "pbac_desc_create_organization_attributes": "បង្កើតគុណលក្ខណៈរបស់អង្គភាព", + "pbac_desc_create_organization_attributes": "បង្កើតគុណលក្ខណៈរបស់អង្គការ",• pbac_desc_manage_roles
- "pbac_desc_manage_roles": "សកម្មភាពទាំងអស់លើតួនាទីក្នុងក្រុមអង្គភាព", + "pbac_desc_manage_roles": "សកម្មភាពទាំងអស់លើតួនាទីក្នុងក្រុមអង្គការ",After applying these replacements, re-run the “អង្គភាព” grep to confirm no stray instances remain.
apps/web/public/static/locales/pt/common.json (1)
3432-3441
: Fix grammar + PT‑PT in “Falhas/Cache/Excluir” block“Reservas falhas” is grammatically incorrect; also replace BR “Status/Excluir” and use “cache” in lower case.
- "failed_bookings": "Reservas falhas", + "failed_bookings": "Reservas falhadas", - "cache_status": "Status do Cache", + "cache_status": "Estado da cache", - "delete_cached_data": "Excluir dados em cache", + "delete_cached_data": "Eliminar dados em cache", - "cache_deleted_successfully": "Cache excluído com sucesso", + "cache_deleted_successfully": "Cache eliminada com sucesso", - "error_deleting_cache": "Erro ao excluir cache", + "error_deleting_cache": "Erro ao eliminar a cache", - "confirm_delete_cache": "Tem certeza de que deseja excluir os dados em cache? Esta ação não pode ser desfeita.", + "confirm_delete_cache": "Tem a certeza de que deseja eliminar os dados em cache? Esta ação não pode ser desfeita.", - "yes_delete_cache": "Sim, excluir cache", + "yes_delete_cache": "Sim, eliminar cache",apps/web/public/static/locales/tr/common.json (2)
1-3495
: Terminology consistency fixes requiredPlease address the following remaining translation inconsistencies in apps/web/public/static/locales/tr/common.json:
• Replace all instances of “Organizasyon” with “Kuruluş”
- editing_org (line 692)
- organization_id*, organization_id_copied (lines 709–710)
- oauth_clients_description (line 877)
- appearance_org_description (line 1663)
- pending_organization_invites (line 1723)
- unlimited_teams_description (line 2538)
- enterprise_description, create_your_org, create_your_org_description (lines 2543–2546)
- admin_delete_organization_description_2 (line 2550)
- email_organization_created|subject (line 2671)
- privacy_organization_description (line 2674)
- organization_slug_taken (line 3090)
- organization_payment_success*, organization_payment_success_description (lines 3099–3100)
- organization_onboarding_status*, organization_onboarding_status_description (lines 3102–3103)
- creating_your_organization, organization_onboarding_already_completed, organization_onboarding_already_exists, organization_onboarding_not_found (lines 3106–3109)
- organization_has_subscription_already (line 3116)
- could_not_find_slug_to_publish_org (line 3179)
- roles_and_permissions_description (line 3287)
- pbac_desc_* for organization resources and actions (lines 3332–3336, 3339–3360, 3361–3366, 3369)
• Update literal “Webhook” to “Web kancası” in string values
- webhook_update_form (line 239)
- webhook_update_failed, webhook_create_failed (lines 3207–3208)
- webhook_created_at (line 3461)
• Use “Organizatör” instead of “Düzenleyen” for webhook organizer fields
- webhook_organizer_name, webhook_organizer_email, webhook_organizer_timezone, webhook_organizer_locale (lines 3472–3475)
Please apply these changes to ensure terminology consistency across the locale file.
239-239
: Follow-up: update remaining “Webhook” literals in Turkish localeThe file apps/web/public/static/locales/tr/common.json still contains literal “Webhook” in these entries. For consistency, please revise them in a separate commit:
- Lines 3207–3208
•"webhook_update_failed": "Webhook güncellenemedi."
•"webhook_create_failed": "Webhook oluşturulamadı."
- Line 3461
•"webhook_created_at": "Webhook zamanı"
apps/web/public/static/locales/hu/common.json (1)
112-112
: Normalize “nem elérhető” phrasing to “nem érhető el” and unify Round-Robin terminologyPlease apply the following global edits to apps/web/public/static/locales/hu/common.json to ensure native phrasing and consistent terminology:
• Replace all instances of “nem elérhető” with “nem érhető el” (lines 111, 112, 121, 886, 1926, 2052, 2418, 2605, 2925)
- A kiválasztott időpont már nem elérhető. + A kiválasztott időpont már nem érhető el.• Standardize Round-Robin variants—choose one form (e.g. English “Round-Robin” with hyphen or Hungarian “körmérkőzés”) and apply it consistently to keys and values (found at lines 72-74, 122-124, 807-808, 1855-1857, 1956-1958, 2039-2040, 2289-2290, 2713-2714, 2793, 2843, 2896-2900, 2979-2981, 2985, 3117, 3134, 3275, 3380-3384). For example:
- "round_robin": "Körmérkőzés" + "round_robin": "Round-Robin"• Verify that tone remains formal and second-person polite (no informal verb endings) after your replacements.
These changes are mandatory to maintain translation quality and consistency across the UI.
@@ -3418,5 +3457,40 @@ | |||
"usage_based_expiration_description": "Αυτός ο σύνδεσμος μπορεί να χρησιμοποιηθεί για {{count}} κράτηση", | |||
"usage_based_generic_expiration_description": "Αυτός ο σύνδεσμος μπορεί να ρυθμιστεί ώστε να λήγει μετά από έναν συγκεκριμένο αριθμό κρατήσεων", | |||
"usage_based_expiration_description_plural": "Αυτός ο σύνδεσμος μπορεί να χρησιμοποιηθεί για {{count}} κρατήσεις", | |||
"webhook_trigger_event": "Το όνομα του συμβάντος ενεργοποίησης (π.χ., BOOKING_CREATED, BOOKING_CANCELLED)", | |||
"webhook_created_at": "Η ώρα του webhook", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Automate verification: hyphenation and webhook parity EN↔EL
Run this to ensure: (a) no remaining unhyphenated “Round Robin” values in EL for changed keys, and (b) webhook_* keys are present in both EN and EL.
Also applies to: 3382-3382, 123-123
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# 1) Check unhyphenated "Round Robin" on changed keys (quick sweep)
echo "Unhyphenated 'Round Robin' instances in EL for changed keys:"
rg -n $'":\\s*"[^"]*Round Robin[^"]*"' apps/web/public/static/locales/el/common.json || true
# 2) Compare webhook_* key sets between EN and EL
echo
echo "Compare webhook_* keys EN vs EL:"
rg -h '^\s*"webhook_[^"]+"' apps/web/public/static/locales/en/common.json \
| sed -E 's/.*"([^"]+)".*/\1/' | sort -u > /tmp/en_webhook_keys.txt
rg -h '^\s*"webhook_[^"]+"' apps/web/public/static/locales/el/common.json \
| sed -E 's/.*"([^"]+)".*/\1/' | sort -u > /tmp/el_webhook_keys.txt
echo "EN keys missing in EL:"
grep -Fxv -f /tmp/el_webhook_keys.txt /tmp/en_webhook_keys.txt || true
echo "EL keys missing in EN:"
grep -Fxv -f /tmp/en_webhook_keys.txt /tmp/el_webhook_keys.txt || true
Length of output: 1445
Fix remaining unhyphenated “Round Robin” instances in EL translations
The sweep found several EL entries still using “Round Robin” without a hyphen. Please update these to “Round-Robin” for consistency. Webhook key parity is already correct—no missing keys.
Files/locations needing fixes (apps/web/public/static/locales/el/common.json):
- Line 123:
"round_robin_host_unavailable_for_booking": "Ο οικοδεσπότης Round Robin δεν είναι διαθέσιμος για κράτηση."
- Line 807:
"round_robin": "Round Robin",
- Line 3117:
"reset_interval_weighted_rr": "Επαναφορά διαστήματος για σταθμισμένο Round Robin",
- Line 3134:
"rr_interval_successfully_updated": "Το διάστημα Round Robin ενημερώθηκε με επιτυχία",
- Line 3279:
"rr_settings_successfully_updated": "Οι ρυθμίσεις Round Robin ενημερώθηκαν με επιτυχία",
- Line 3280:
"distribution_basis_weighted_rr": "Βάση κατανομής για σταθμισμένο Round Robin",
- Line 3382:
"rr_load_balancing_disabled_with_groups": "Η εξισορρόπηση φόρτου δεν είναι διαθέσιμη με ομάδες Round Robin",
Please replace each “Round Robin” with “Round-Robin” (using a non-breaking hyphen if desired).
🤖 Prompt for AI Agents
apps/web/public/static/locales/el/common.json lines 123, 807, 3117, 3134, 3279,
3280, 3382: replace each occurrence of the phrase "Round Robin" with
"Round-Robin" inside the JSON values (preserve surrounding quotes, punctuation
and spacing), e.g. "Ο οικοδεσπότης Round Robin δεν είναι διαθέσιμος για
κράτηση." -> "Ο οικοδεσπότης Round-Robin δεν είναι διαθέσιμος για κράτηση.";
apply the same substitution for the other listed keys and keep file
encoding/escaping intact (optionally use a non-breaking hyphen if desired).
"oauth_clients": "Clientes OAuth", | ||
"oauth_clients_description": "Gestiona los clientes OAuth para tu organización", | ||
"create_oauth_client": "Crear cliente OAuth", | ||
"create_oauth_client_description": "Crea un nuevo cliente OAuth para integraciones de terceros", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
OAuth copy — LGTM; verify parity in other locales
Spanish strings are good. Quick parity sweep recommended to avoid EN fallbacks.
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
base="apps/web/public/static/locales"
keys=(oauth_clients oauth_clients_description create_oauth_client create_oauth_client_description)
all=$(find "$base" -maxdepth 1 -mindepth 1 -type d | wc -l | tr -d ' ')
for k in "${keys[@]}"; do
have=$(rg -l "\"$k\"" "$base"/*/common.json | wc -l | tr -d ' ')
printf "%-35s -> %s/%s\n" "$k" "$have" "$all"
if [ "$have" -ne "$all" ]; then rg -L "\"$k\"" "$base"/*/common.json || true; fi
done
Length of output: 33928
Missing OAuth localization keys in several locales
The four new keys (oauth_clients
, oauth_clients_description
, create_oauth_client
, create_oauth_client_description
) were added in Spanish but are only present in 37 of 44 locales. The following 7 locale files are missing all four entries and will fall back to English at runtime:
- apps/web/public/static/locales/hr/common.json (Croatian)
- apps/web/public/static/locales/id/common.json (Indonesian)
- apps/web/public/static/locales/iw/common.json (Hebrew)
- apps/web/public/static/locales/lv/common.json (Latvian)
- apps/web/public/static/locales/sk/common.json (Slovak)
- apps/web/public/static/locales/ta/common.json (Tamil)
- apps/web/public/static/locales/th/common.json (Thai)
Please add these keys (with appropriate translations or temporary placeholders) in each file to ensure full parity and prevent unintended English fallbacks.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/hr/common.json (and similarly in
apps/web/public/static/locales/id/common.json,
apps/web/public/static/locales/iw/common.json,
apps/web/public/static/locales/lv/common.json,
apps/web/public/static/locales/sk/common.json,
apps/web/public/static/locales/ta/common.json,
apps/web/public/static/locales/th/common.json) around the area where other
OAuth/clients keys live (approx lines 876–879 in the Spanish file), add the four
missing keys: "oauth_clients", "oauth_clients_description",
"create_oauth_client", and "create_oauth_client_description"; provide
appropriate translations for each locale or use a clear temporary placeholder
(e.g., same English string or "<TRANSLATION_REQUIRED>...") so the app won’t
fallback to English at runtime, keep JSON formatting consistent (comma
placement, quoting) and run a quick lint/JSON-parse to confirm validity.
"only_admin_can_manage_directory_sync": "Solo el administrador o propietario de la organización puede gestionar la configuración de sincronización de directorio", | ||
"only_admin_can_manage_oauth_clients": "Solo el administrador o propietario de la organización puede gestionar los clientes OAuth", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Admin‑only flags — LGTM; ensure cross‑locale coverage
These often lag in a few locales. Run a parity check and backfill as needed.
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
base="apps/web/public/static/locales"
keys=(only_admin_can_manage_directory_sync only_admin_can_manage_oauth_clients)
all=$(find "$base" -maxdepth 1 -mindepth 1 -type d | wc -l | tr -d ' ')
for k in "${keys[@]}"; do
have=$(rg -l "\"$k\"" "$base"/*/common.json | wc -l | tr -d ' ')
printf "%-45s -> %s/%s\n" "$k" "$have" "$all"
if [ "$have" -ne "$all" ]; then rg -L "\"$k\"" "$base"/*/common.json || true; fi
done
Length of output: 21849
Add missing translations for admin-only flags across all locales
The new keys only_admin_can_manage_directory_sync
and only_admin_can_manage_oauth_clients
are present in 37 out of 44 locale files. To achieve full parity, please add entries for both keys in the following locale directories:
- apps/web/public/static/locales/hr/common.json
- apps/web/public/static/locales/id/common.json
- apps/web/public/static/locales/iw/common.json
- apps/web/public/static/locales/lv/common.json
- apps/web/public/static/locales/sk/common.json
- apps/web/public/static/locales/ta/common.json
- apps/web/public/static/locales/th/common.json
After backfilling, re-run the parity script and verify you reach 44/44 for each key.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/es/common.json around lines 1851-1852 the new
keys only_admin_can_manage_directory_sync and
only_admin_can_manage_oauth_clients exist for Spanish but are missing from seven
locale files; add both keys with appropriate translations (or fallback to
English if no translation available) to each of these files:
apps/web/public/static/locales/hr/common.json,
apps/web/public/static/locales/id/common.json,
apps/web/public/static/locales/iw/common.json,
apps/web/public/static/locales/lv/common.json,
apps/web/public/static/locales/sk/common.json,
apps/web/public/static/locales/ta/common.json, and
apps/web/public/static/locales/th/common.json so that all locale common.json
files include the two keys; after adding, run the parity script to confirm 44/44
for each key.
"least_bookings_scheduled": "Menos reservas programadas", | ||
"most_bookings_completed": "Más reservas completadas", | ||
"least_bookings_completed": "Menos reservas completadas", |
There was a problem hiding this comment.
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 — analytics labels
New insights labels read well. Please ensure parity across locales to avoid EN fallbacks.
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
base="apps/web/public/static/locales"
keys=(most_bookings_scheduled least_bookings_scheduled most_bookings_completed least_bookings_completed)
all=$(find "$base" -maxdepth 1 -mindepth 1 -type d | wc -l | tr -d ' ')
for k in "${keys[@]}"; do
have=$(rg -l "\"$k\"" "$base"/*/common.json | wc -l | tr -d ' ')
printf "%s -> %s/%s\n" "$k" "$have" "$all"
if [ "$have" -ne "$all" ]; then rg -L "\"$k\"" "$base"/*/common.json || true; fi
done
Length of output: 33446
The next step is to pinpoint exactly which locale folders are missing each of the new keys. Running the script below will list, for each key, the locales that lack its translation:
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
base="apps/web/public/static/locales"
keys=(most_bookings_scheduled least_bookings_scheduled most_bookings_completed least_bookings_completed)
for k in "${keys[@]}"; do
echo "Missing translations for \"$k\":"
for dir in "$base"/*/; do
locale=$(basename "$dir")
file="$dir/common.json"
if [ -f "$file" ] && ! grep -q "\"$k\"" "$file"; then
echo " - $locale"
fi
done
echo
done
Length of output: 51432
To get a clear list of exactly which locales still need each of these four keys, let’s run a simplified sweep that prints missing locales per key:
#!/usr/bin/env bash
set -euo pipefail
base="apps/web/public/static/locales"
keys=(
most_bookings_scheduled
least_bookings_scheduled
most_bookings_completed
least_bookings_completed
)
for key in "${keys[@]}"; do
echo "$key missing in:"
for dir in "$base"/*/; do
locale=$(basename "$dir")
file="$dir/common.json"
# only check existing common.json files
if [[ -f "$file" ]] && ! grep -q "\"$key\"" "$file"; then
echo " • $locale"
fi
done
echo
done
This will output each key followed by the list of locale codes you need to add translations for.
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
base="apps/web/public/static/locales"
keys=(
most_bookings_scheduled
least_bookings_scheduled
most_bookings_completed
least_bookings_completed
)
for key in "${keys[@]}"; do
echo "$key missing in:"
for dir in "$base"/*/; do
locale=$(basename "$dir")
file="$dir/common.json"
if [[ -f "$file" ]] && ! grep -q "\"$key\"" "$file"; then
echo " • $locale"
fi
done
echo
done
Length of output: 50960
Translations missing in several locales—please add the new booking labels to avoid English fallbacks
The four new keys
• most_bookings_scheduled
• least_bookings_scheduled
• most_bookings_completed
• least_bookings_completed
are present in 37 of 44 locales; they need to be added in the following seven folders:
- apps/web/public/static/locales/hr/common.json
- apps/web/public/static/locales/id/common.json
- apps/web/public/static/locales/iw/common.json
- apps/web/public/static/locales/lv/common.json
- apps/web/public/static/locales/sk/common.json
- apps/web/public/static/locales/ta/common.json
- apps/web/public/static/locales/th/common.json
Please insert the corresponding translations for each key in those files so that all locales have parity and no UI falls back to English.
🤖 Prompt for AI Agents
Files: apps/web/public/static/locales/hr/common.json,
apps/web/public/static/locales/id/common.json,
apps/web/public/static/locales/iw/common.json,
apps/web/public/static/locales/lv/common.json,
apps/web/public/static/locales/sk/common.json,
apps/web/public/static/locales/ta/common.json,
apps/web/public/static/locales/th/common.json — The four new keys
most_bookings_scheduled, least_bookings_scheduled, most_bookings_completed,
least_bookings_completed are missing; add them to each listed common.json with
the correct localized strings (use the existing translations in es/common.json
as reference for meaning), insert them near the other booking-related keys to
keep ordering consistent, ensure valid JSON (comma placement) and run a quick
linter/parse to confirm no syntax errors.
"webhook_created_at": "La hora del webhook", | ||
"webhook_type": "El slug del tipo de evento", | ||
"webhook_title": "El nombre del tipo de evento", | ||
"webhook_start_time": "La hora de inicio del evento", | ||
"webhook_end_time": "La hora de finalización del evento", | ||
"webhook_description": "La descripción del evento según se describe en la configuración del tipo de evento", | ||
"webhook_location": "Ubicación del evento", | ||
"webhook_uid": "El UID de la reserva", | ||
"webhook_reschedule_uid": "El UID para reprogramar", | ||
"webhook_cancellation_reason": "Motivo de cancelación", | ||
"webhook_rejection_reason": "Motivo del rechazo", | ||
"webhook_organizer_name": "Nombre del organizador", | ||
"webhook_organizer_email": "Correo electrónico del organizador", | ||
"webhook_organizer_timezone": "Zona horaria del organizador (p. ej., 'America/New_York', 'Asia/Kolkata')", | ||
"webhook_organizer_locale": "Configuración regional del organizador (p. ej., 'en', 'fr')", | ||
"webhook_attendee_name": "Nombre del primer asistente", | ||
"webhook_attendee_email": "Correo electrónico del primer asistente", | ||
"webhook_attendee_timezone": "Zona horaria del primer asistente", | ||
"webhook_attendee_locale": "Idioma del primer asistente", | ||
"webhook_team_name": "Nombre del equipo reservado", | ||
"webhook_team_members": "Miembros del equipo reservado", | ||
"webhook_video_call_url": "URL de videollamada para la reunión", | ||
"webhook_hide_variables": "Ocultar variables", | ||
"webhook_show_variable": "Mostrar variables disponibles", | ||
"webhook_event_and_booking": "Evento y reserva", | ||
"webhook_people": "Personas", | ||
"webhook_teams": "Equipos", | ||
"webhook_metadata": "Metadatos", | ||
"stats": "Estadísticas", |
There was a problem hiding this comment.
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/analytics: parity + JSON/ICU sanity
Given the breadth of new webhook_* keys, please confirm they exist in all locales and that JSON is valid with no unmatched ICU tokens.
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
base="apps/web/public/static/locales"
keys=(
webhook_trigger_event webhook_created_at webhook_type webhook_title
webhook_start_time webhook_end_time webhook_description webhook_location
webhook_uid webhook_reschedule_uid webhook_cancellation_reason
webhook_rejection_reason webhook_organizer_name webhook_organizer_email
webhook_organizer_timezone webhook_organizer_locale
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 booking_status my_bookings phone failed_bookings add_group
)
# 1) JSON validity
invalid=()
for f in "$base"/*/common.json; do jq -e . "$f" >/dev/null 2>&1 || invalid+=("$f"); done
if ((${#invalid[@]})); then
printf "❌ Invalid JSON in:\n%s\n" "${invalid[@]}"; exit 1
fi
echo "✅ JSON valid."
# 2) Per-key parity
all=$(find "$base" -maxdepth 1 -mindepth 1 -type d | wc -l | tr -d ' ')
for k in "${keys[@]}"; do
have=$(rg -l "\"$k\"" "$base"/*/common.json | wc -l | tr -d ' ')
printf "%-28s -> %s/%s\n" "$k" "$have" "$all"
if [ "$have" -ne "$all" ]; then rg -L "\"$k\"" "$base"/*/common.json || true; fi
done
# 3) ICU placeholder/braces sanity
mismatch=0
for f in "$base"/*/common.json; do
open=$(rg -o '{{' "$f" | wc -l || true)
close=$(rg -o '}}' "$f" | wc -l || true)
if [ "$open" -ne "$close" ]; then echo "⚠️ ICU mismatch: $f ($open vs $close)"; mismatch=1; fi
done
exit "$mismatch"
Length of output: 302347
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
base="apps/web/public/static/locales"
keys=(
webhook_trigger_event webhook_created_at webhook_type webhook_title
webhook_start_time webhook_end_time webhook_description webhook_location
webhook_uid webhook_reschedule_uid webhook_cancellation_reason
webhook_rejection_reason webhook_organizer_name webhook_organizer_email
webhook_organizer_timezone webhook_organizer_locale
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 booking_status my_bookings phone failed_bookings add_group
)
python3 - <<'PY'
import json, os, sys
base = "apps/web/public/static/locales"
keys = [
"webhook_trigger_event","webhook_created_at","webhook_type","webhook_title",
"webhook_start_time","webhook_end_time","webhook_description","webhook_location",
"webhook_uid","webhook_reschedule_uid","webhook_cancellation_reason",
"webhook_rejection_reason","webhook_organizer_name","webhook_organizer_email",
"webhook_organizer_timezone","webhook_organizer_locale","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",
"booking_status","my_bookings","phone","failed_bookings","add_group"
]
locale_dirs = sorted([d for d in os.listdir(base) if os.path.isdir(os.path.join(base,d))])
total = len(locale_dirs)
print("TOTAL_LOCALES:", total)
invalid = []
per_key_counts = {k:0 for k in keys}
missing_per_locale = {}
icu_mismatch = []
def iter_strings(x):
if isinstance(x,str):
yield x
elif isinstance(x,dict):
for v in x.values():
yield from iter_strings(v)
elif isinstance(x,list):
for v in x:
yield from iter_strings(v)
for loc in locale_dirs:
f = os.path.join(base,loc,"common.json")
if not os.path.isfile(f):
invalid.append((loc,"missing file"))
continue
try:
with open(f,"r",encoding="utf-8") as fh:
data = json.load(fh)
except Exception as e:
invalid.append((loc,str(e)))
continue
missing = [k for k in keys if k not in data]
if missing:
missing_per_locale[loc] = missing
for k in keys:
if k in data:
per_key_counts[k] += 1
total_open_double = total_close_double = total_open = total_close = 0
samples_double = []
samples_single = []
for s in iter_strings(data):
od = s.count('{{')
cd = s.count('}}')
o = s.count('{')
c = s.count('}')
if od or cd:
samples_double.append((od,cd,s[:200]))
if o or c:
samples_single.append((o,c,s[:200]))
total_open_double += od
total_close_double += cd
total_open += o
total_close += c
if total_open_double != total_close_double or total_open != total_close:
icu_mismatch.append({
"locale": loc,
"double_open": total_open_double,
"double_close": total_close_double,
"single_open": total_open,
"single_close": total_close,
"sample_double": samples_double[:5],
"sample_single": samples_single[:5],
})
if invalid:
print("INVALID_JSON_COUNT:", len(invalid))
for loc,err in invalid:
print("INVALID:", loc, err)
else:
print("ALL_JSON_VALID")
print("PER_KEY_COUNTS:")
for k in keys:
print(k, per_key_counts[k], "/", total)
if missing_per_locale:
print("LOCALES_MISSING_KEYS_COUNT:", len(missing_per_locale))
for loc in sorted(missing_per_locale):
print(loc, missing_per_locale[loc])
else:
print("ALL_LOCALES_HAVE_KEYS")
if icu_mismatch:
print("ICU_MISMATCH_COUNT:", len(icu_mismatch))
for m in icu_mismatch:
print("MISMATCH:", m["locale"], "double {{:", m["double_open"], "}}:", m["double_close"], "single {:", m["single_open"], "}:", m["single_close"])
if m["sample_double"]:
print(" sample_double:")
for od,cd,s in m["sample_double"][:3]:
print(" ", od, cd, s)
if m["sample_single"]:
print(" sample_single:")
for o,c,s in m["sample_single"][:3]:
print(" ", o, c, s)
else:
print("NO_ICU_MISMATCHES")
PY
Length of output: 8228
Webhook/analytics: missing locale keys + ICU brace mismatches — action required
Summary (very short)
- JSON validity: ✅ all common.json files parse.
- Parity: each webhook_* key appears in 37/44 locales (keys added in most locales).
- Problems found: 7 locales missing the new keys; 3 locales have ICU/brace-count mismatches that can break i18n parsing.
Files/locales needing attention
- Missing webhook_* keys (add the new keys or confirm intentional omission):
- apps/web/public/static/locales/hr/common.json
- apps/web/public/static/locales/id/common.json
- apps/web/public/static/locales/iw/common.json
- apps/web/public/static/locales/lv/common.json
- apps/web/public/static/locales/sk/common.json
- apps/web/public/static/locales/ta/common.json
- apps/web/public/static/locales/th/common.json
ICU / brace mismatches (investigate & fix)
- apps/web/public/static/locales/bn/common.json — double-brace {{: 485 vs }}: 485; single-brace { : 988 vs } : 986
- apps/web/public/static/locales/nl/common.json — double-brace {{: 491 vs }}: 491; single-brace { : 985 vs } : 986
- apps/web/public/static/locales/uk/common.json — double-brace {{: 490 vs }}: 491; single-brace { : 984 vs } : 985
- Likely culprits: translation strings embedding JSON-like fragments / nested placeholders (examples in these files such as $t(day, {"count": {{days}} }) and repeated {{count}} placeholders). Check those strings for unbalanced braces or improper escaping.
Recommended next steps (short)
- Add the missing webhook_* keys to the 7 locale files (or confirm intentional omission).
- For bn/nl/uk: search for occurrences of '{{' / '}}' and unmatched single '{'/' }', balance or escape braces, or refactor the string to use safe ICU/placeholders; verify translated strings containing JSON fragments (e.g. $t(..., {"count": {{days}} })).
- Re-run the JSON/ICU sanity script after fixes.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/es/common.json around lines 3461 to 3489 the
webhook_* keys are present here but the PR review found 7 locales missing these
new webhook_* keys and 3 locales (bn, nl, uk) with ICU/brace-count mismatches;
add the same webhook_* entries to apps/web/public/static/locales/hr/common.json,
id/common.json, iw/common.json, lv/common.json, sk/common.json, ta/common.json,
and th/common.json (or confirm intentional omission), and for
apps/web/public/static/locales/bn/common.json, nl/common.json and uk/common.json
locate strings containing '{{'/'}}' and unmatched '{'/' }' (examples like
$t(..., {"count": {{days}} })), balance or escape double/single braces or
refactor to use proper ICU/placeholders so brace counts match, then re-run the
JSON/ICU sanity script to verify fixes.
@@ -120,7 +120,7 @@ | |||
"already_signed_up_for_this_booking_error": "Jesteś już zapisany na tę rezerwację.", | |||
"hosts_unavailable_for_booking": "Niektórzy gospodarze są niedostępni do rezerwacji.", | |||
"fixed_hosts_unavailable_for_booking": "Niektórzy przypisani gospodarze są niedostępni do rezerwacji.", | |||
"round_robin_hosts_unavailable_for_booking": "Żaden z gospodarzy Round Robin nie jest dostępny do rezerwacji.", | |||
"round_robin_host_unavailable_for_booking": "Gospodarz Round Robin jest niedostępny do rezerwacji.", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
RR host key added — verify cross-locale coverage to avoid runtime fallbacks
The singular key looks correct here. Please confirm it exists in all locales and the legacy plural key is fully removed across the repo.
Run this from repo root:
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo '1) Legacy plural key should NOT exist anywhere'
rg -nP '\bround_robin_hosts_unavailable_for_booking\b' apps/web/public/static/locales || true
echo -e '\n2) New singular key SHOULD exist in every locale/common.json'
find apps/web/public/static/locales -type f -name 'common.json' \
-exec sh -c 'jq -e "has(\"round_robin_host_unavailable_for_booking\")" "{}" >/dev/null || echo "MISSING: {}"' \;
Length of output: 917
Add the new RR host key to all locale files to prevent runtime fallbacks
The legacy plural key round_robin_hosts_unavailable_for_booking
has been fully removed, but the new singular key is only present in some locales. Please add "round_robin_host_unavailable_for_booking"
to each common.json
under apps/web/public/static/locales
. The following locales are currently missing it:
• apps/web/public/static/locales/hr/common.json
• apps/web/public/static/locales/id/common.json
• apps/web/public/static/locales/iw/common.json
• apps/web/public/static/locales/lv/common.json
• apps/web/public/static/locales/sk/common.json
• apps/web/public/static/locales/ta/common.json
• apps/web/public/static/locales/th/common.json
Once added, ensure you run the localization tests (or your standard verification) to confirm coverage across all supported languages.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/{hr,id,iw,lv,sk,ta,th}/common.json around
where other round_robin keys live (add at or near line ~123), the new singular
key "round_robin_host_unavailable_for_booking" is missing; add this key to each
of those seven locale files with the correct localized string (or copy the same
phrasing used for the singular key in other locales / use the English fallback
if a translation is not available), ensure valid JSON formatting and no
duplicate keys, update any locale snapshots, and run the localization tests to
verify coverage across all supported languages.
"webhook_trigger_event": "O nome do evento de gatilho (ex., BOOKING_CREATED, BOOKING_CANCELLED)", | ||
"webhook_created_at": "A hora do webhook", | ||
"webhook_type": "O slug do tipo de evento", | ||
"webhook_title": "O nome do tipo de evento", | ||
"webhook_start_time": "A hora de início do evento", | ||
"webhook_end_time": "A hora de fim do evento", | ||
"webhook_description": "A descrição do evento conforme descrito nas configurações do tipo de evento", | ||
"webhook_location": "Localização do evento", | ||
"webhook_uid": "O UID da reserva", | ||
"webhook_reschedule_uid": "O UID para reagendamento", | ||
"webhook_cancellation_reason": "Motivo do cancelamento", | ||
"webhook_rejection_reason": "Motivo da rejeição", | ||
"webhook_organizer_name": "Nome do organizador", | ||
"webhook_organizer_email": "Email do organizador", | ||
"webhook_organizer_timezone": "Fuso horário do organizador (ex., 'America/New_York', 'Asia/Kolkata')", | ||
"webhook_organizer_locale": "Idioma do organizador (ex., 'en', 'fr')", | ||
"webhook_attendee_name": "Nome do primeiro participante", | ||
"webhook_attendee_email": "Email do primeiro participante", | ||
"webhook_attendee_timezone": "Fuso horário do primeiro participante", | ||
"webhook_attendee_locale": "Localidade do primeiro participante", | ||
"webhook_team_name": "Nome da equipa reservada", | ||
"webhook_team_members": "Membros da equipa reservada", | ||
"webhook_video_call_url": "URL de videochamada para a reunião", | ||
"webhook_hide_variables": "Ocultar variáveis", | ||
"webhook_show_variable": "Mostrar variáveis disponíveis", | ||
"webhook_event_and_booking": "Evento e reserva", | ||
"webhook_people": "Pessoas", | ||
"webhook_teams": "Equipas", | ||
"webhook_metadata": "Metadados", | ||
"stats": "Estatísticas", | ||
"booking_status": "Status da reserva", | ||
"location_custom_label_input_label": "Etiqueta personalizada na página de reserva", | ||
"meeting_link": "Link da reunião", | ||
"my_bookings": "As minhas reservas", | ||
"phone": "Telefone", | ||
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" |
There was a problem hiding this comment.
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 sweep for residual pt‑BR tokens in changed hunks (optional)
Run this script to confirm no “equipe(s)”, “gerenciar/gerenciamento”, “roteamento”, “Status”, “Link”, “aplicativo”, “você”, “Visualizar”, “Excluir”, or “término” remain in the edited ranges after applying the diffs above.
Also applies to: 358-361, 371-372, 876-879, 951-952, 1002-1002, 1027-1027, 1243-1243, 1529-1531, 1586-1589, 1611-1613, 1851-1852, 2191-2193, 2267-2268, 2937-2941, 3004-3005, 3308-3375, 3382-3382, 3400-3400, 3432-3441
🏁 Script executed:
#!/bin/bash
file="apps/web/public/static/locales/pt/common.json"
# Only the changed ranges we commented on
ranges=(
"120-130" "350-374" "870-885" "946-955" "1018-1032" "1238-1246"
"1526-1532" "1582-1592" "1848-1854" "2190-2194" "2259-2269"
"2936-2942" "2998-3008" "3308-3376" "3380-3402" "3430-3445"
"3460-3495"
)
echo "Scanning changed hunks for pt-BR tokens…"
for r in "${ranges[@]}"; do
start="${r%-*}"; end="${r#*-}"
echo -e "\n== ${file}:${start}-${end} =="
sed -n "${start},${end}p" "$file" \
| rg -nP '\b(equipe|equipes|gerenciar|gerenciamento|roteamento|Status|Link|aplicativo|você|Visualizar|Excluir|término)\b' || true
done
Length of output: 9487
Remove residual pt-BR tokens and apply pt-PT equivalents
The sweep script has uncovered several remaining Brazilian-Portuguese terms within the edited hunks. Please replace them with the agreed pt-PT vocabulary:
• apps/web/public/static/locales/pt/common.json (lines 350–374)
– “você” → consider “tu” or rephrase to avoid 2nd-person pronoun
– “aplicativo” → “aplicação”
• apps/web/public/static/locales/pt/common.json (lines 1018–1032)
– “aplicativo” → “aplicação”
• apps/web/public/static/locales/pt/common.json (lines 1526–1532)
– “você” → consider “tu” or rephrase
• apps/web/public/static/locales/pt/common.json (lines 1848–1854)
– “gerenciar” → “gerir”
• apps/web/public/static/locales/pt/common.json (lines 2259–2269)
– “roteamento” → “encaminhamento”
• apps/web/public/static/locales/pt/common.json (lines 2936–2942)
– “término” → “fim”
• apps/web/public/static/locales/pt/common.json (lines 2998–3008)
– “Excluir” → “Remover”
• apps/web/public/static/locales/pt/common.json (lines 3308–3376)
– “Visualizar” → “Ver”
– “Excluir” → “Remover”
– “gerenciamento” → “gestão”
• apps/web/public/static/locales/pt/common.json (lines 3430–3445)
– “Status” → “Estado”
– “Excluir” → “Remover”
• apps/web/public/static/locales/pt/common.json (lines 3460–3495)
– “Status” → “Estado”
– “Link” → “Ligação”
After making these adjustments, rerun the sweep script to ensure no pt-BR tokens remain.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/pt/common.json around lines 3460 to 3495 there
are pt-BR terms that need pt-PT equivalents; update occurrences in this region
(and the other referenced ranges when fixing overall file) replacing “Status”
with “Estado” and “Link” with “Ligação” (and across file apply the reviewer’s
list: “você” → rephrase to avoid 2nd-person or use “tu”, “aplicativo” →
“aplicação”, “gerenciar” → “gerir”, “roteamento” → “encaminhamento”, “término” →
“fim”, “Excluir” → “Remover”, “Visualizar” → “Ver”, “gerenciamento” → “gestão”),
ensure strings remain valid JSON and preserve surrounding
punctuation/capitalization, then rerun the sweep script to confirm all pt-BR
tokens are removed.
@@ -120,7 +120,7 @@ | |||
"already_signed_up_for_this_booking_error": "Već ste se prijavili za ovu rezervaciju.", | |||
"hosts_unavailable_for_booking": "Neki od domaćina nisu dostupni za rezervaciju.", | |||
"fixed_hosts_unavailable_for_booking": "Neki od fiksnih domaćina nisu dostupni za rezervaciju.", | |||
"round_robin_hosts_unavailable_for_booking": "Nijedan Round Robin domaćin nije dostupan za rezervaciju.", | |||
"round_robin_host_unavailable_for_booking": "Round Robin domaćin nije dostupan za zakazivanje.", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Localize “Round Robin” to Serbian
Avoid mixed-language UI. Use the established term “kružno dodeljivanje”.
Apply this diff:
- "round_robin_host_unavailable_for_booking": "Round Robin domaćin nije dostupan za zakazivanje.",
+ "round_robin_host_unavailable_for_booking": "Domaćin kružnog dodeljivanja nije dostupan za zakazivanje."
Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/sr/common.json around line 123, replace the
mixed-language phrase "Round Robin domaćin nije dostupan za zakazivanje." with
the fully localized Serbian term using "kružno dodeljivanje"; update the string
to read "Domaćin za kružno dodeljivanje nije dostupan za zakazivanje." so the UI
uses consistent Serbian terminology.
"pbac_desc_view_roles": "Pregled uloga", | ||
"pbac_desc_update_roles": "Ažuriranje uloga", | ||
"pbac_desc_delete_roles": "Brisanje uloga", | ||
"pbac_desc_manage_roles": "Sve akcije nad ulogama", | ||
"pbac_desc_manage_roles": "Sve akcije nad ulogama u timovima organizacije", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Harmonize PBAC scope phrasing to “u organizaciji”
These entries still use team‑scoped wording (“u timovima organizacije”), which conflicts with org‑wide scope elsewhere and with the PR’s intent. Also consider appending scope to workflows for parity.
- "pbac_desc_manage_roles": "Sve akcije nad ulogama u timovima organizacije",
+ "pbac_desc_manage_roles": "Sve akcije nad ulogama u organizaciji",
- "pbac_desc_manage_event_types": "Sve akcije na tipovima događaja u timovima organizacije",
+ "pbac_desc_manage_event_types": "Sve akcije nad tipovima događaja u organizaciji",
- "pbac_desc_manage_bookings": "Sve akcije na rezervacijama u timovima organizacije",
+ "pbac_desc_manage_bookings": "Sve akcije nad rezervacijama u organizaciji",
Optional (for parallelism):
- "pbac_desc_manage_workflows": "Puni pristup upravljanju svim radnim tokovima",
+ "pbac_desc_manage_workflows": "Puni pristup upravljanju svim radnim tokovima u organizaciji",
Also applies to: 3349-3349, 3372-3372, 3345-3345
🤖 Prompt for AI Agents
In apps/web/public/static/locales/sr/common.json around lines 3339 (and also
update similar entries at 3345, 3349, 3372), the PBAC scope wording uses "u
timovima organizacije" but should be harmonized to "u organizaciji"; update
those string values to replace "u timovima organizacije" with "u organizaciji"
and, where appropriate, append the same scope phrasing to workflow-related
entries for parity so all PBAC descriptions consistently use org-wide wording.
@@ -120,7 +120,7 @@ | |||
"already_signed_up_for_this_booking_error": "您已经注册了此预订。", | |||
"hosts_unavailable_for_booking": "有些主持人无法预订。", | |||
"fixed_hosts_unavailable_for_booking": "部分固定主持人无法进行预约。", | |||
"round_robin_hosts_unavailable_for_booking": "没有轮流主持人可供预约。", | |||
"round_robin_host_unavailable_for_booking": "轮值主持人当前不可预订。", |
There was a problem hiding this comment.
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 script to catch residual English and RR term drift
Run to ensure (1) no “Round Robin/round robin” English remains in zh-CN, (2) RR term consistency (“轮流” vs “轮询”), and (3) webhook_* key parity with en.
Also applies to: 3382-3382, 3460-3491
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
EN="apps/web/public/static/locales/en/common.json"
ZH="apps/web/public/static/locales/zh-CN/common.json"
echo "1) Residual English 'Round Robin' in zh-CN:"
rg -n 'Round Robin|round robin' "$ZH" || echo "✔ No residual 'Round Robin' found"
echo
echo "2) RR term consistency ('轮流' preferred over '轮询'):"
echo "- Counts:"
printf "轮流: "; rg -o '轮流' -N "$ZH" | wc -l || true
printf "轮询: "; rg -o '轮询' -N "$ZH" | wc -l || true
echo "- Lines with '轮询' (review for consistency):"
rg -n '轮询' "$ZH" || true
echo
echo "3) webhook_* key parity (en vs zh-CN):"
jq -r 'keys[] | select(startswith("webhook_"))' "$EN" | sort > /tmp/en_webhook.txt
jq -r 'keys[] | select(startswith("webhook_"))' "$ZH" | sort > /tmp/zh_webhook.txt
diff -u /tmp/en_webhook.txt /tmp/zh_webhook.txt || { echo "❌ webhook_* key mismatch"; exit 1; }
echo "✔ webhook_* keys match between en and zh-CN"
Length of output: 2891
Translation Clean-Up Required: Remove English “round robin” and Enforce Term Consistency
The localization script has surfaced two key issues in apps/web/public/static/locales/zh-CN/common.json:
• Residual English “round robin” remains in several entries (these must be fully translated):
– skip_rr_assignment_label (line 2713)
– reassign_to_another_rr_host (line 2793)
– reassign_round_robin_host (line 2797)
– salesforce_if_free_email_domain_skip_owner_check (line 2985)
– include_no_show_in_rr_calculation (line 3275)
– rr_load_balancing_disabled_with_groups (line 3382)
• Inconsistent Chinese terminology for the RR feature—there are 17 instances of “轮询” versus 13 of “轮流”. The team’s style guide prefers “轮流” for clarity. Please review and replace all “轮询” occurrences with “轮流” (e.g., event_reassigned_subtitle, organization_banner_description, reset_interval_weighted_rr, etc.) to maintain consistency.
The webhook_* key parity check passed—no action needed there.
Please update these translations before merging.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/zh-CN/common.json (scan from the listed key
lines ~2713–3382, include line 123 location for context), several entries still
contain the English phrase "round robin" and there is inconsistent Chinese
terminology ("轮询" vs "轮流"); replace the raw English "round robin" in the listed
keys (skip_rr_assignment_label, reassign_to_another_rr_host,
reassign_round_robin_host, salesforce_if_free_email_domain_skip_owner_check,
include_no_show_in_rr_calculation, rr_load_balancing_disabled_with_groups) with
a full Chinese translation using the project-preferred term "轮流", and globally
search/replace all occurrences of "轮询" to "轮流" (carefully review surrounding
phrases like event_reassigned_subtitle, organization_banner_description,
reset_interval_weighted_rr, etc. to ensure grammar and context remain correct);
after edits run the localization script/linter to verify no missing keys or
formatting errors and commit the updated common.json.
41db697
to
907093c
Compare
907093c
to
4e52aed
Compare
4e52aed
to
3c3137f
Compare
57fdcf1
to
6cdaaa3
Compare
6cdaaa3
to
330ec18
Compare
330ec18
to
9dbe610
Compare
E2E results are ready! |
Hey team,
Lingo.dev here with fresh translations!
In this update
Next Steps