feat: update translations via @LingoDotDev#22722
Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎ |
|
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. |
WalkthroughThis pull request updates the Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20–25 minutes
Possibly related PRs
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. ✨ Finishing Touches🧪 Generate unit tests
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
Graphite Automations"Add consumer team as reviewer" took an action on this PR • (07/24/25)1 reviewer was added to this PR based on Keith Williams's automation. "Add foundation team as reviewer" took an action on this PR • (07/24/25)1 reviewer was added to this PR based on Keith Williams's automation. |
There was a problem hiding this comment.
Actionable comments posted: 31
🔭 Outside diff range comments (5)
apps/web/public/static/locales/es-419/common.json (1)
1722-1727: Duplicate keys – later value silently overwrites the first one
minute_one,minute_one_short,minute_other,hour_one,hour_one_short,hour_other
are already defined ~280 lines above (around 1421-1427).
JSON objects cannot hold duplicates – whichever comes last wins, which is easy to miss and a future merge-conflict magnet.Remove the duplicates or keep just one canonical definition:
- "minute_one": "{{count}} minuto", - "minute_one_short": "{{count}}m", - "minute_other": "{{count}} minutos", - "hour_one": "{{count}} hora", - "hour_one_short": "{{count}}h", - "hour_other": "{{count}} horas",apps/web/public/static/locales/pt/common.json (1)
960-969: Inconsistent locale variant – “usuário” vs “utilizador”.The new string introduces the Brazilian-Portuguese spelling “nome de usuário” whereas the rest of the file (e.g. "nome de utilizador") consistently follows European-Portuguese.
Please stick to one variant across the file to avoid a mixed voice.- "multiple_private_links_description": "Gere URLs privados sem expor o nome de usuário, com limites configuráveis de expiração e uso" + "multiple_private_links_description": "Gere URLs privados sem expor o nome de utilizador, com limites configuráveis de expiração e uso"apps/web/public/static/locales/bg/common.json (1)
3356-3360: Collision with pre-existing card-error strings.
your_card_was_declined,your_card_does_not_support_this_type_of_purchase,
amount_must_convert_to_at_least,could_not_charge_cardlook almost identical to
the earlier keys (couldnt_charge_card_error, etc.).
To avoid dead, unreachable translations keep only one canonical key per message and update code references accordingly.
Otherwise translators will have to maintain two parallel strings for the same error.apps/web/public/static/locales/et/common.json (1)
2451-2452: Duplicate key"dismiss"overrides the first occurrence
"dismiss"was already defined earlier (line 248).
JSON objects must not contain duplicate keys; parsers usually keep only the last one, so the earlier translation will be silently discarded.- "dismiss": "Ignoreeri",Remove the duplicate or give the new entry a unique key.
apps/web/public/static/locales/uk/common.json (1)
2335-2343: File-upload messages: variables dropped & max-files wording
•"file_size_limit_exceed"normally contains{{maxSize}}.
•"invalid_file_type_extension"expects{{acceptedTypes}}.
•"max_files_exceeded"may need{{maxFiles}}.
Make sure translators kept ICU placeholders – otherwise runtime strings will be incomplete.
🧹 Nitpick comments (65)
apps/web/public/static/locales/cs/common.json (2)
2172-2175: Missing noun decreases clarity
"Nejvíce rezervovaní"/"Nejméně rezervovaní"does not say who.
Readers will understand faster with the noun included.-"most_booked_members": "Nejvíce rezervovaní", -"least_booked_members": "Nejméně rezervovaní", +"most_booked_members": "Nejvíce rezervovaní členové", +"least_booked_members": "Nejméně rezervovaní členové",
2172-2173: Terminology consistency
"Rezervace podle hodin"sounds unnatural; common CZ UI wording is „Rezervace podle hodiny“ or „Rezervace po hodinách“.-"bookings_by_hour": "Rezervace podle hodin", +"bookings_by_hour": "Rezervace po hodinách",apps/web/public/static/locales/no/common.json (2)
122-123: Inconsistent phrasing / missing article
"fixed_hosts_unavailable_for_booking": "Noen av de faste vertene er ikke tilgjengelige for booking",
uses the definite article de (“de faste vertene”).
Current translation is missing that article (“faste vertene”) which is ungrammatical.-"fixed_hosts_unavailable_for_booking": "Noen av faste vertene er ikke tilgjengelige for booking.", +"fixed_hosts_unavailable_for_booking": "Noen av de faste vertene er ikke tilgjengelige for booking.",
1721-1724: Key terms dropped – members are lost in translation
most_booked_members/least_booked_membersshould keep the “members” part to avoid ambiguity.-"most_booked_members": "Mest booket", -"least_booked_members": "Minst booket", +"most_booked_members": "Mest bookede medlemmer", +"least_booked_members": "Minst bookede medlemmer",apps/web/public/static/locales/ca/common.json (3)
965-965: Plural disagreement –URLsvs.URL
In Catalan, the borrowed acronym “URL” is normally kept invariable in the plural form. “Genera URL privades” is therefore preferred to “Genera URLs privades”.-"multiple_private_links_description": "Genera URLs privades sense exposar el nom d'usuari, amb límits d'expiració i ús configurables", +"multiple_private_links_description": "Genera URL privades sense exposar el nom d'usuari, amb límits d'expiració i ús configurables",
2173-2174: Add missing noun for clarity
Both strings omit the word “membres”, which makes the metric unclear in Catalan.-"most_booked_members": "Més reservats", -"least_booked_members": "Menys reservats", +"most_booked_members": "Membres més reservats", +"least_booked_members": "Membres menys reservats",
3156-3156: Consistency with other KPI strings
"most_cancelled_bookings": "Més cancel·lacions"loses the noun “reserves”, unlike neighbouring metrics (“Reserves per hora”). Suggest:-"most_cancelled_bookings": "Més cancel·lacions", +"most_cancelled_bookings": "Més reserves cancel·lades",apps/web/public/static/locales/az/common.json (4)
51-51: Possible mistranslation of “recording”
“avtomatik yazılışı aktivləşdir” sounds like enable automatic spelling. A more accurate phrase for meeting recording is “avtomatik yazını aktivləşdir”.
122-123: Term “host” left untranslated
“sabit ev sahibləri / round robin ev sahibləri” mixes AZ + EN. Consider “sabit aparıcılar” / “növbəli aparıcılar” (or your established glossary term).
687-687: Capitalisation
“Rola Bax” – everywhere else you use sentence-case (“Tədbiri redaktə et”). Prefer “Rola bax” for consistency.
2172-2175: Missing noun
“Ən Çox Rezervasiya Edilən” / “Ən Az Rezervasiya Edilən” omit the subject. In reports these usually read “Ən çox rezervasiya edilən üzvlər”. Add “üzvlər” (or “üzv”).apps/web/public/static/locales/ar/common.json (2)
2204-2208: Minor wording – keep error messages consistent with the existing payment copyCurrent Arabic copy:
"your_card_was_declined": "تم رفض الدفع. يرجى تجربة بطاقة أخرى ..." "your_card_does_not_support_this_type_of_purchase": "هذا النوع من البطاقات غير مدعوم لهذا الشراء ..." "amount_must_convert_to_at_least": "الحد الأدنى لمبلغ الدفع هو 0.50 دولار أمريكي ..." "could_not_charge_card": "تعذر تنفيذ عملية الدفع من البطاقة."Every other Stripe error message in the file starts with “لا يمكن …” or “تعذّر …”.
For full consistency, align the first three strings with that pattern:-"your_card_was_declined": "تم رفض الدفع. يرجى تجربة بطاقة أخرى ...", +"your_card_was_declined": "تعذّر إتمام الدفع بالبطاقة. يرجى تجربة بطاقة أخرى ...", -"your_card_does_not_support_this_type_of_purchase": "هذا النوع من البطاقات غير مدعوم لهذا الشراء ...", +"your_card_does_not_support_this_type_of_purchase": "تعذّر إتمام الدفع: نوع البطاقة لا يدعم هذا الشراء ...", -"amount_must_convert_to_at_least": "الحد الأدنى لمبلغ الدفع هو 0.50 دولار أمريكي. يرجى زيادة مبلغ الدفع.", +"amount_must_convert_to_at_least": "تعذّر إتمام الدفع: الحد الأدنى هو 0.50 دولار أمريكي. يرجى زيادة المبلغ.",Purely cosmetic, but it keeps the UX copy tight and uniform.
3156-3157: Key still in English – please translate
"most_cancelled_bookings": "الأكثر إلغاءً للحجوزات"Looks fine, but the adjacent key
"picklist"(line 3155) was not translated and remains"picklist".
Unless it is a brand / technical term, translate it (e.g. “قائمة اختيار”) to avoid mixed-language UI.apps/web/public/static/locales/es/common.json (3)
51-51: Use consistent action verb (“Activar” vs. “Habilitar”).Line 50 already uses “Activar transcripción automática…”.
For UI copy consistency, prefer the same verb here:-"Habilitar grabación automática después de que el organizador se una a la reunión" +"Activar grabación automática después de que el organizador se una a la reunión"
688-688: Minor grammar tweak (optional).“Ver rol” is understandable, but “Ver rol” occasionally sounds abrupt.
If you want a more descriptive label:-"Ver rol" +"Ver detalles del rol"
2205-2208: Punctuation style differs from existing error messages.Most previous error strings omit the trailing period. To keep UI copy uniform you might drop them here:
-"Pago rechazado. Por favor, intente con otra tarjeta o contacte a su banco para obtener ayuda." +"Pago rechazado. Por favor intente con otra tarjeta o contacte a su banco para obtener ayuda"Apply the same rule to the other three lines if desired.
apps/web/public/static/locales/ko/common.json (5)
51-54: Consider grouping new Cal-video keys together and keep alpha-ordering
The three newly added Cal-video strings (enable_automatic_recording,edit_event,view_session_details) break the existing alphabetical ordering of keys in this block. The file is already >3000 lines – keeping strict ordering is invaluable when translators grep for a key or resolve merge conflicts.
80-81: Context might be lost for “취소자”
cancelled_byis translated as just “취소자”. In UI this is usually followed by a name, e.g. “Cancelled by John”.
A more natural Korean label would be"취소한 사람"(noun phrase) or"취소한 사용자"to read well when concatenated.
122-123: Parallel wording for host messages
The two new error strings diverge slightly in tone:fixed_hosts_unavailable_for_booking → "일부 고정 호스트는 예약할 수 없습니다." round_robin_hosts_unavailable_for_booking → "예약 가능한 라운드 로빈 호스트가 없습니다."Consider harmonising:
"일부 고정 호스트를 예약할 수 없습니다."
"라운드 로빈 호스트를 예약할 수 없습니다."
for consistent subject-object order.
3395-3400: Cache-management keys miss a namespace prefix
The new cache strings (cache_status,cache_last_updated, …) are top-level. Group-prefixed keys (cache.*oradmin.cache.*) make accidental collisions far less likely in huge files like this.
3410-3414: Consistency with other usage-limit strings
You introducedusage_based_expiration_description_pluralbut left the singular keyusage_based_expiration_descriptionwithout the_onesuffix used elsewhere (event_remaining_one/other).
Align naming (_one/_other) to keep i18next plural detection automatic.apps/web/public/static/locales/eu/common.json (2)
122-123: Avoid mixed end-punctuation to keep UI strings consistentNeighbouring booking-error messages (
hosts_unavailable_for_booking/timeslot_unavailable_short, etc.) are written without a trailing full stop.
Keeping the same style helps avoid visual jitter in toast/pop-ups.- "fixed_hosts_unavailable_for_booking": "Finkatutako ostalari batzuk ez daude erreserbatzeko eskuragarri.", - "round_robin_hosts_unavailable_for_booking": "Ez dago txandakako ostalarik erreserbatzeko eskuragarri.", + "fixed_hosts_unavailable_for_booking": "Finkatutako ostalari batzuk ez daude erreserbatzeko eskuragarri", + "round_robin_hosts_unavailable_for_booking": "Ez dago txandakako ostalarik erreserbatzeko eskuragarri"
688-688: Keep terminology aligned with the rest of the fileEarlier keys translate “role” as “eginkizuna” (
edit_role,role), while here it becomes rola.
Using one term prevents confusion when the strings are concatenated in the UI.- "view_role": "Ikusi rola", + "view_role": "Ikusi eginkizuna",apps/web/public/static/locales/pt-BR/common.json (1)
120-124: Round-robin wording inconsistent with rest of file
round_robin_hosts_unavailable_for_bookinguses “rodízio” elsewhere (“Nenhum anfitrião de rodízio…”), but PT-BR throughout the file prefers “round robin” in English. Pick one form and reuse it to avoid two different terms for the same concept.If you want to stay Portuguese-only:
-"round_robin_hosts_unavailable_for_booking": "Nenhum anfitrião de rodízio está disponível para reserva.", +"round_robin_hosts_unavailable_for_booking": "Nenhum anfitrião de round-robin está disponível para reserva.",apps/web/public/static/locales/fr/common.json (1)
51-51: Grammar nit : use past tense after “après que”In French, the indicative past is required after “après que”.
-"Activer l'enregistrement automatique après que l'organisateur rejoint la réunion" +"Activer l'enregistrement automatique après que l'organisateur a rejoint la réunion"apps/web/public/static/locales/da/common.json (1)
2172-2175: Clarify plural form for member-based metricsThe new keys “most_booked_members” and “least_booked_members” are plural-context metrics, but the Danish values read singular (“Mest booket” / “Mindst booket”).
Recommend switching to a plural noun to avoid ambiguity:-"most_booked_members": "Mest booket", -"least_booked_members": "Mindst booket", +"most_booked_members": "Mest bookede medlemmer", +"least_booked_members": "Mindst bookede medlemmer",apps/web/public/static/locales/it/common.json (1)
2179-2181: Potential key-collision: “events” & “performance” require namespace verificationThe new general-purpose keys
"events": "Eventi", "performance": "Prestazioni"look fine linguistically, but they’re very generic.
Please double-check that:
- No other
"events"/"performance"keys already exist in sibling locale files (or in this same JSON further up) – a silent overwrite will be hard to notice.- Call-sites are updated to use the intended qualifiers (
analytics.events,insights.performance, etc.) to avoid string collisions.If uniqueness is not guaranteed, consider prefixing (e.g.,
"insights_events","insights_performance").apps/web/public/static/locales/ro/common.json (1)
80-80: Minor nitpick: consider definite article
Anulat dereads well, butAnulat de cătreis slightly more formal / complete. Optional.apps/web/public/static/locales/de/common.json (2)
2173-2175: Missing subject noun reduces clarity
"most_booked_members"/"least_booked_members"were shortened to
“Am häufigsten gebucht” / “Am wenigsten gebucht”.Without the noun (“Mitglieder”) the metric label is ambiguous (events? users?).
Consider keeping the original intent:-"most_booked_members": "Am häufigsten gebucht", -"least_booked_members": "Am wenigsten gebucht", +"most_booked_members": "Am häufigsten gebuchte Mitglieder", +"least_booked_members": "Am wenigsten gebuchte Mitglieder",
122-123: Terminology mismatch between “Host” and “Gastgeber”The newly added strings keep “fixed hosts” / “round robin hosts”, but the
existing UI consistently uses “Gastgeber”.
For linguistic consistency and to avoid mixed English/German UI, translate:-"fixed_hosts_unavailable_for_booking": "Einige der festen Gastgeber sind für Buchungen nicht verfügbar.", -"round_robin_hosts_unavailable_for_booking": "Kein Round-Robin-Gastgeber ist für Buchungen verfügbar.", +"fixed_hosts_unavailable_for_booking": "Einige der festen Gastgeber sind nicht verfügbar.", +"round_robin_hosts_unavailable_for_booking": "Kein Gastgeber im Rotationsprinzip ist verfügbar.",apps/web/public/static/locales/hu/common.json (1)
80-80: Consider adding a clarifying colon after the label
Most UIs rendercancelled_byas a label followed by a name (e.g. “Cancelled by John Doe”).
Adding a trailing colon keeps the Hungarian string consistent with that pattern:-"cancelled_by": "Lemondta" +"cancelled_by": "Lemondta:"apps/web/public/static/locales/pl/common.json (1)
2172-2181: Metrics wording could be clearer
"bookings_by_hour": "Rezerwacje według godzin"reads a bit awkwardly.
Consider the singular-collective “Rezerwacje według godziny” or “Rezerwacje / godzinę” to emphasise the histogram.
Pure wording – no functional impact.apps/web/public/static/locales/sv/common.json (2)
3363-3366: Odd Swedish wording – replace “Routningsfunnel”“Routningsfunnel” is an English/Swedish mix and will look unpolished in the UI.
Suggested alternatives:- "routing_funnel": "Routningsfunnel", + "routing_funnel": "Routningsflöde",The same applies to the two keys immediately below – consider “Totalt inskickade” / “Lyckade omdirigeringar” / “Godkända bokningar” for full localisation.
2172-2175: Plural clarity & localisation“Most/Least booked members” translated as “Mest/Minst bokade” omits the noun and may confuse. A clearer Swedish rendering:
- "most_booked_members": "Mest bokade", - "least_booked_members": "Minst bokade", + "most_booked_members": "Mest bokade medlemmar", + "least_booked_members": "Minst bokade medlemmar",apps/web/public/static/locales/sk-SK/common.json (5)
51-54: Be consistent with Cal Video option labels
enable_automatic_recording,edit_event, andview_session_detailsfollow the same feature block as the already-existingenable_automatic_transcription, but the wording of the Slovak translations is subtly different (e.g. “Povoliť automatické nahrávanie …”, “Upraviť udalosť”).
Double-check that the UI uses the same tense/capitalisation for all four options so the settings panel doesn’t look stitched together.
80-80: Singular / plural mismatch in “cancelled_by”
"Zrušené používateľom"reads as singular masculine. If the UI can also show other agents (system, admin, integrácia …) consider a gender-neutral phrasing like-"Zrušené používateľom" +"Zrušil/-a"or keep it generic:
+"Zrušil účastník"Otherwise Slovak users may see grammatically odd combinations.
965-965: Plural description out of sync
multiple_private_links_descriptionspeaks about “limitmi použitia” (plural) but the new expiry strings below (lines 3403+) separate singular/plural again. Confirm that this description still matches the new UX (single vs. multiple links).
2204-2207: Card-error strings: keep wording parallelThe four new payment error messages mix “platba” / “karta” / “suma” wording. For clear support copy, keep the subject first:
- „Vaša karta bola zamietnutá.“
- „Vaša karta nepodporuje tento typ nákupu.“
- „Suma sa musí konvertovať minimálne na …“
- „Platbu sa nepodarilo zaúčtovať na kartu.“
Small, but improves in-product consistency.
3396-3402: Cache-management wordingThe trio (
cache_status,delete_cached_data, …) will surface in a danger-zone modal. Verify that the confirmation message (line 3401) is reused for both success and failure flows or provide a dedicated"confirm_delete_cache_description".apps/web/public/static/locales/bg/common.json (1)
3395-3401: Place-holder consistency / term harmonisation.Good to see
{{timestamp}}preserved, but for complete locale consistency you may want to:
- Keep the same capitalisation pattern used elsewhere (“Кешът беше изтрит успешно” vs “Кешът е изтрит успешно”).
- Re-use existing verbs – earlier strings use “Изтриване на кеша”, here you have “Изтрий кеширани данни”. Aligning terminology avoids mixed phrasing in the UI.
Nit only, no functional impact.
apps/web/public/static/locales/vi/common.json (5)
122-124: Keep error-code keys semantically consistent
fixed_hosts_unavailable_for_booking/round_robin_hosts_unavailable_for_bookingfollow the same naming style as the pre-existing generic error. 👍
Consider appending_errorto keep them grouped (*_error) – helps grepping and avoids mixing UI labels with error strings.
965-969: Plural / singular messages share the same sentence
multiple_private_links_descriptiondescribes plural usage; make sure there is a singular partner (or usescountinterpolation) to avoid grammatically wrong output for “1 link”.
If the component already passescount, consider following i18next pluralisation instead of separate keys.
2204-2208: Card-error strings: keep the prefix homogeneousExisting errors start with
payment_*. The newly-added keys (your_card_*) break grouping.
Recommend renaming topayment_card_*(or similar) so callers can map uniformly.-"your_card_was_declined" +"payment_card_declined"Same for the three sibling keys.
3395-3402: Cache-management strings: tech jargon exposedThese keys will be user-facing; “cache” is not obvious in Vietnamese.
Consider a more descriptive term (e.g. “bộ nhớ tạm”) or add a short tooltip explaining what is deleted.
3403-3421: Plural logic already covered by i18next – redundant keys
remainder_of_maximum_use_left_singular/_pluralcan be expressed with i18next plural forms instead of two separate keys.
Simplifies maintenance:"remainder_of_maximum_uses_left": "Còn {{remainder}} / {{maximum}} lần sử dụng"Same comment for “expires_on_date”, etc.
apps/web/public/static/locales/tr/common.json (3)
122-123: Use a single Turkish term for “Round-Robin” across the file
round_robin_hosts_unavailable_for_bookingcurrently uses “Sırayla Değişen”, while other keys keep the original “Round Robin” (e.g."round_robin"at 805).
Sticking to one variant avoids confusing end-users and eases searchability.-"Rezervasyon için hiçbir Sırayla Değişen ev sahibi uygun değil." +"Rezervasyon için hiçbir Round Robin ev sahibi uygun değil."
2172-2175: Metric labels miss the subject (“üyeler”)For dashboards these strings should clearly indicate what is most/least booked:
-"En Çok Rezervasyon Yapılan" +"En Çok Rezervasyon Yapılan Üyeler" - -"En Az Rezervasyon Yapılan" +"En Az Rezervasyon Yapılan Üyeler"Same applies to
bookings_by_hourif the chart shows booking sayısı:-"Saate Göre Rezervasyonlar" +"Saatlik Rezervasyon Sayısı"
3403-3404: Singular/plural strings are identical – users will never see the 1-item form
remainder_of_maximum_use_left_singularshould drop the plural suffix:- "{{maximum}} kullanımın {{remainder}} tanesi kaldı" + "{{maximum}} kullanımın {{remainder}} tanesi kaldı" # plural + "{{maximum}} kullanımın {{remainder}} tane kaldı" # singular (remainder=1)Otherwise both variants render the same text, defeating i18n-pluralisation.
apps/web/public/static/locales/he/common.json (2)
2172-2174: Hebrew phrasing can be improved for readability
most_booked_membersis fine, but
least_booked_membersreads a bit awkwardly (“המוזמנים הפחות”).
A clearer, grammatical alternative is “המוזמנים הכי פחות” (or “המוזמנים המועטים ביותר”).-"least_booked_members": "המוזמנים הפחות", +"least_booked_members": "המוזמנים הכי פחות",
965-965: Minor punctuation / style nitConsider inserting a comma before “עם הגבלות…” for better flow:
-"multiple_private_links_description": "יצירת קישורים פרטיים מבלי לחשוף את שם המשתמש, עם הגבלות תפוגה ושימוש הניתנות להגדרה", +"multiple_private_links_description": "יצירת קישורים פרטיים, מבלי לחשוף את שם המשתמש, עם הגבלות תפוגה ושימוש הניתנות להגדרה",apps/web/public/static/locales/et/common.json (1)
2173-2181: Tweak wording & avoid overly generic key
- A closer Estonian rendering for “Rescheduled events” would be “Ümber ajastatud sündmused” rather than “Üritatud sündmused”.
- The bare key
eventsis very generic and easy to collide with future additions; consider something more specific such asevents_label.- "events_rescheduled": "Üritatud sündmused", + "events_rescheduled": "Ümber ajastatud sündmused",apps/web/public/static/locales/uk/common.json (6)
51-55: Check for terminology consistency in new Cal Video options
"enable_automatic_recording"is introduced right next to existing Cal Video keys. Earlier strings use “запис”, here you translate it as “запис … після приєднання організатора”. Please verify this wording against the adjacent string"enable_automatic_transcription"so end-users don’t see two different patterns for essentially the same “after-host-joins” behaviour.
80-80: UI label needs actor context
"cancelled_by": "Скасовано"is ambiguous – in UI it often appears as “Скасовано (ким)”. Consider expanding to something like “Скасовано користувачем”/“Скасовано організатором” to avoid confusion.
122-123: New error keys inconsistent with sibling message
You now have three variants:
•hosts_unavailable_for_booking(line 121)
•fixed_hosts_unavailable_for_booking
•round_robin_hosts_unavailable_for_bookingThe first two start with “Деякі…”, the round-robin version starts with “Жоден…”. Make sure the nuance is deliberate – otherwise users may wonder why RR gets dramatically different wording.
965-965: Missing article breaks sentence flow
"multiple_private_links_description": "Створюйте приватні URL-адреси …"– consider adding “декілька” or “кілька” after “створюйте” for a smoother Ukrainian phrase.
3395-3402: Cache operation strings – action/confirmation mismatch
The action key is"delete_cached_data"(“Видалити кешовані дані”) but confirm message says “Видалити кеш”. Consider using the same noun (“кешовані дані”) in both to avoid support tickets about “що саме видалилось?”.
2514-2517: Email-verification copy: casual vs formal
"verify_email": "Підтвердити ел. пошту"is very short. In most Ukrainian UI copy a slightly more formal “Підтвердити електронну адресу” is preferred. Consider length trade-off.apps/web/public/static/locales/bn/common.json (2)
2173-2175: Minor Bengali wording nitpickFor consistency with the rest of the file, consider using the singular form “সদস্য” only when the string is actually singular.
most_booked_members/least_booked_membersare plural, but the translation uses the singular “সদস্য”.
Suggested tweak:- "most_booked_members": "সবচেয়ে বেশি বুক করা সদস্য", - "least_booked_members": "সবচেয়ে কম বুক করা সদস্য", + "most_booked_members": "সবচেয়ে বেশি বুক করা সদস্যরা", + "least_booked_members": "সবচেয়ে কম বুক করা সদস্যরা",
2514-2517: Potential key collision with existingverify_email-family keys
"verify_email"is introduced here but the file already contains several closely-named keys (verify_email_button,verify_email_subject, …).
Double-check that this new key is intentional and will not be confused with the button text key; if it is meant to be the generic verb, give it a more specific id (e.g.verify_email_action) to avoid future clash.apps/web/public/static/locales/sr/common.json (2)
51-54: Consistency with existing Cal Video settingsEarlier keys (
enable_automatic_transcription,disable_recording_for_*) use the infinitive form “Omogući / Onemogući …”.
enable_automatic_recordingkeeps the pattern, but the two new UI-strings below it (edit_event,view_session_details) break the thematic grouping and will be harder to locate later.51 "enable_automatic_recording": "Omogući automatsko snimanje nakon što se organizator pridruži sastanku", 53 "edit_event": "Izmeni događaj", 54 "view_session_details": "Pregledaj detalje sesije",Recommendation: move the two UI-centric keys further down (e.g. near the other event/session verbs) to keep feature blocks together.
No functional issue — just maintainability.
965-966: Glossary sync
multiple_private_links_descriptionmentions “privatni URL-ove … sa podesivim ograničenjima”. Earlier similar sentence (line 962) uses “privatni linkovi”. Prefer one term across the file.apps/web/public/static/locales/zh-CN/common.json (2)
80-80: Minor wording nit-pick.“取消者”有些生硬,可考虑换成“取消人”或“由谁取消”。
不强制,仅供参考。
2172-2173: Improve phrase brevity.
"按小时统计的预约"可简化为"每小时预约数",更贴近仪表盘指标常用表述,且字符更少。-"bookings_by_hour": "按小时统计的预约", +"bookings_by_hour": "每小时预约数",apps/web/public/static/locales/ja/common.json (1)
2362-2366: Minor JP terminology nitpick“ルーティングファネル” is understandable but “ファネル” tends to be transliterated as “ファネル” (without the small “ン”).
Consider the following diff for consistency with other JP UIs:-"routing_funnel": "ルーティングファネル", +"routing_funnel": "ルーティングファネル",apps/web/public/static/locales/zh-TW/common.json (1)
2173-2174: Prefer keeping the noun to avoid ambiguity
"最多預約"/"最少預約"loses the subject (“成員”).
Consider restoring it for clarity and consistency with similar keys:-"most_booked_members": "最多預約", -"least_booked_members": "最少預約", +"most_booked_members": "最多預約的成員", +"least_booked_members": "最少預約的成員",
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
i18n.lockis excluded by!**/*.lock
📒 Files selected for processing (36)
apps/web/public/static/locales/ar/common.json(13 hunks)apps/web/public/static/locales/az/common.json(13 hunks)apps/web/public/static/locales/bg/common.json(13 hunks)apps/web/public/static/locales/bn/common.json(12 hunks)apps/web/public/static/locales/ca/common.json(13 hunks)apps/web/public/static/locales/cs/common.json(13 hunks)apps/web/public/static/locales/da/common.json(13 hunks)apps/web/public/static/locales/de/common.json(13 hunks)apps/web/public/static/locales/el/common.json(12 hunks)apps/web/public/static/locales/es-419/common.json(13 hunks)apps/web/public/static/locales/es/common.json(13 hunks)apps/web/public/static/locales/et/common.json(13 hunks)apps/web/public/static/locales/eu/common.json(13 hunks)apps/web/public/static/locales/fi/common.json(13 hunks)apps/web/public/static/locales/fr/common.json(13 hunks)apps/web/public/static/locales/he/common.json(13 hunks)apps/web/public/static/locales/hu/common.json(13 hunks)apps/web/public/static/locales/it/common.json(12 hunks)apps/web/public/static/locales/ja/common.json(13 hunks)apps/web/public/static/locales/km/common.json(12 hunks)apps/web/public/static/locales/ko/common.json(12 hunks)apps/web/public/static/locales/nl/common.json(13 hunks)apps/web/public/static/locales/no/common.json(13 hunks)apps/web/public/static/locales/pl/common.json(12 hunks)apps/web/public/static/locales/pt-BR/common.json(13 hunks)apps/web/public/static/locales/pt/common.json(13 hunks)apps/web/public/static/locales/ro/common.json(12 hunks)apps/web/public/static/locales/ru/common.json(13 hunks)apps/web/public/static/locales/sk-SK/common.json(13 hunks)apps/web/public/static/locales/sr/common.json(13 hunks)apps/web/public/static/locales/sv/common.json(13 hunks)apps/web/public/static/locales/tr/common.json(13 hunks)apps/web/public/static/locales/uk/common.json(12 hunks)apps/web/public/static/locales/vi/common.json(13 hunks)apps/web/public/static/locales/zh-CN/common.json(13 hunks)apps/web/public/static/locales/zh-TW/common.json(12 hunks)
🧰 Additional context used
🧠 Learnings (31)
📓 Common learnings
Learnt from: bandhan-majumder
PR: calcom/cal.com#22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.
apps/web/public/static/locales/cs/common.json (2)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.
apps/web/public/static/locales/ko/common.json (2)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.
apps/web/public/static/locales/ru/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/es/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/az/common.json (2)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.
apps/web/public/static/locales/es-419/common.json (2)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.
apps/web/public/static/locales/no/common.json (2)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.
apps/web/public/static/locales/ca/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/sv/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/ar/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/km/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/it/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/da/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/pt-BR/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/tr/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/fr/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/eu/common.json (2)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-21T13:54:11.770Z
Learning: Applies to docs/api-reference/v2/openapi.json : When docs changes are made in /docs/api-reference/v2/openapi.json, ensure the following: 'summary' fields are written in proper American english.
apps/web/public/static/locales/sr/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/bn/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/ro/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/hu/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/pl/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/zh-TW/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/et/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/uk/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/sk-SK/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/bg/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/zh-CN/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/ja/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
apps/web/public/static/locales/pt/common.json (1)
Learnt from: bandhan-majumder
PR: #22359
File: packages/lib/server/locales/en/common.json:1336-1339
Timestamp: 2025-07-14T16:31:45.233Z
Learning: When making localization changes for new features, it's often safer to add new strings rather than modify existing ones to avoid breaking existing functionality that depends on the original strings. This approach allows for feature-specific customization while maintaining backward compatibility.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Socket Security: Pull Request Alerts
🔇 Additional comments (61)
apps/web/public/static/locales/cs/common.json (3)
122-124: Minor wording – Czech subject–verb agreement
"Někteří z pevně stanovených hostitelů …"is fine, but the second string reads a bit clunky:-"Žádný z hostitelů Round Robin není k dispozici pro rezervaci." +"Žádný z hostitelů Round-robin není k dispozici pro rezervaci."• Adds a non-breaking space after the foreign term
• Keeps consistent capitalisation with the first sentence.
[ suggest_nitpick ]
51-56: Check terminology for “session”You translated
view_session_detailsas “Zobrazit detaily relace”.
Elsewhere in the UI the project uses „schůzka“ or „jednání“.
Consider unifying:-"view_session_details": "Zobrazit detaily relace", +"view_session_details": "Zobrazit podrobnosti schůzky",Consistency helps users scanning labels.
2205-2208: Good coverage of new payment-error stringsThe four Stripe-error messages are idiomatic Czech, keep punctuation and tone consistent with neighbouring entries.
apps/web/public/static/locales/no/common.json (2)
2204-2207: Placeholder check – keep variables intactEnsure the three new card-error strings keep exactly the same placeholders as the English source (
{{amount}},{{currency}}etc.).
Double-check upstream—any mismatch will break runtime interpolation.
No changes requested if the placeholders are confirmed identical.
2514-2516: Possible duplicate keyKey
verify_emailis newly added here but there are already multipleverify_email_*entries earlier.
Confirm that plainverify_emaildoes not already exist elsewhere in the same JSON – duplicated keys are silently overridden at runtime.apps/web/public/static/locales/es-419/common.json (1)
3382-3390: Place-holder consistency & i18n lint
Several newly-added attachment strings embed variables – make sure they keep the double-brace syntax and coincide with the codebase:
{{acceptedTypes}},{{maxSize}}in"file_upload_instructions"{{acceptedTypes}}in"invalid_file_type_extension"Verify that the frontend really injects those exact tokens (same spelling & case). A mismatch will surface as a raw placeholder in production.
apps/web/public/static/locales/az/common.json (2)
53-54: Plural consistency
Line 54 uses “Sessiya Təfərrüatlarına Bax” (plural “detalları”), while line 53 keeps the singular “Tədbiri redaktə et”. That’s fine, just ensure UI keeps the same noun form everywhere (“Təfərrüat” vs “Təfərrüatlar”).
80-80: OK – context preserved
Keycancelled_bykeeps the placeholder-free text. No issues spotted.apps/web/public/static/locales/ar/common.json (2)
2172-2174: Metric labels translated correctlyKey terms (
"bookings_by_hour","most_booked_members","least_booked_members") are rendered in natural-sounding Arabic and keep the original business context.
No placeholders are involved, so there’s nothing to break at runtime.
2500-2505: Double-check placeholder spelling
"cache_last_updated": "آخر تحديث: {{timestamp}}"The placeholder
{{timestamp}}matches the English key and is used nowhere else in Arabic strings, so runtime injection is safe.Just make sure the backend actually sends the same token (
timestamp) – any mismatch will surface only at run-time.apps/web/public/static/locales/es/common.json (6)
53-54: Looks good.Both new strings are short, clear and correctly capitalised.
80-80: LGTM.Key-value pair is accurate and keeps the concise style of neighbouring entries.
122-124: Good terminology alignment with existing booking errors.Translations read naturally and preserve “anfitrión fijo / Round Robin” phrasing used elsewhere.
965-965: Excellent addition.The description is fluent, matches glossary style and keeps placeholders intact.
2171-2175: Plural consistency check.Consider harmonising plural forms with earlier analytics keys (e.g. “reservas por hora” vs “reservas por hora” used elsewhere). Not blocking, just ensure there aren’t duplicate keys with slightly different wording.
2179-2181: No issues.“Eventos” and “Rendimiento” correctly mirror the English originals.
apps/web/public/static/locales/ko/common.json (2)
2173-2175: Pluralisation — keep the “_one / _other” pattern
most_booked_members/least_booked_membersare added without the usual ICU plural pair. Other keys use the_one / _othersuffix to support proper plural forms (seenumber_member_one/number_member_other).
If these strings will ever be used with a numeric count, add explicit_one/_othervariants now to avoid a breaking translation change later.
3420-3420: Typo guard – ensure sentinel comment remains last
ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTSis great, but remember CI fails if new keys accidentally land below it. A unit that asserts this sentinel is last would prevent regressions.apps/web/public/static/locales/pt-BR/common.json (1)
2172-2176: Plural / singular mismatch in analytic keys
bookings_by_hour,most_booked_members,least_booked_membersall refer to plural objects, buteventsre-introduces a generic plural without a qualifying noun (“Eventos”). At runtime this can collide with other keys namedevents.Consider a more specific key (e.g.
analytic_events) or keep parity with the English namespace to avoid future collisions.apps/web/public/static/locales/ro/common.json (9)
51-51: Consistent wording – no action neededTranslation accurately conveys the meaning of the source string.
53-54: Good reuse of imperative form
Editează/Vizualizeazăfollow the same imperative mood already used elsewhere – keeps UX consistent.
122-123: Terminology consistency
gazdele fixe/gazdă Round Robinalign with earlier strings – good.
688-688: Role wording is clearNo issues; matches UI terminology.
965-965: Clarity maintainedSentence flows naturally and keeps glossary terms intact.
2172-2174: Plural agreement – looks correctAll three keys use the right plural forms (
membri).
2179-2180: Potential key duplicationKey
eventsis introduced here. Please ensure it isn’t already defined earlier in the same file; JSON parsers allow duplicates but only the last one survives, which can lead to lost translations.
2204-2207: Finance terminology – approvedMessages keep the polite form and give clear guidance.
2515-2517: Error copy consistentStrings match the surrounding cancellation-flow language.
apps/web/public/static/locales/pl/common.json (3)
51-54: Minor consistency nit – headline capitalisation
Most action labels start with a capital letter (e.g. “Wyłącz nagrywanie…”, “Edytuj wydarzenie”).
"enable_automatic_recording"is translated as “Włącz automatyczne nagrywanie…”, which keeps the style – good.
No change required, just flagging for uniformity.
122-124: Good plurals & phrasing
The newly added round-robin / fixed-host strings are clear and keep terminology (“gospodarze”).
2515-2516: Re-use existing placeholders
proceed_with_cancellation_description&proceed_with_cancellation_erroromit any{{email}}placeholder that exists in the English originals.
If the backend inserts the email address, localised string should keep{{email}}:- "proceed_with_cancellation_description": "Wprowadź adres e-mail użyty do tej rezerwacji, aby kontynuować anulowanie", + "proceed_with_cancellation_description": "Wprowadź adres e-mail ({{email}}) użyty do tej rezerwacji, aby kontynuować anulowanie",Double-check against the source JSON.
apps/web/public/static/locales/pt/common.json (1)
2510-2516: Redundant key – potential future collision.Key
"verify_email"was just added, but several keys with the same semantic domain (verify_email_subject,verify_email_button, etc.) already exist.
Double-check that a generic"verify_email"is indeed required and does not shadow an existing translation in runtime look-ups.If it’s merely an alias, consider removing it or namespacing (e.g.
verify_email_link_title) to prevent accidental overrides.apps/web/public/static/locales/sv/common.json (2)
3396-3404: Minor wording – adopt consistent cache terminologyLines mix “cache” (EN) and Swedish. For consistency:
- "cache_status": "Cache-status", - "delete_cached_data": "Radera cachelagrade data", + "cache_status": "Cache-status", + "delete_cached_data": "Rensa cache",(Cache-status keeps the tech term while “Rensa cache” is a common Swedish phrase.)
2203-2208: Strings left untranslated – please provide Swedish versions
your_card_was_declined,your_card_does_not_support_this_type_of_purchase,
amount_must_convert_to_at_least,could_not_charge_cardare still in English, breaking the language consistency of the file and giving end-users a mixed-language UI.- "your_card_was_declined": "Betalningen avslogs. Försök med ett annat kort eller kontakta din bank för hjälp.", - "your_card_does_not_support_this_type_of_purchase": "Denna korttyp stöds inte för detta köp. Vänligen använd en annan betalningsmetod.", - "amount_must_convert_to_at_least": "Minsta betalningsbelopp är $0,50 USD. Vänligen öka ditt betalningsbelopp.", - "could_not_charge_card": "Kunde inte debitera kortet för betalning." + "your_card_was_declined": "Ditt kort avslogs. Försök med ett annat kort eller kontakta din bank för hjälp.", + "your_card_does_not_support_this_type_of_purchase": "Ditt kort stöder inte den här typen av köp. Välj en annan betalningsmetod.", + "amount_must_convert_to_at_least": "Minsta möjliga betalningsbelopp är 0,50 USD. Öka beloppet och försök igen.", + "could_not_charge_card": "Det gick inte att debitera kortet."Likely an incorrect or invalid review comment.
apps/web/public/static/locales/sk-SK/common.json (2)
2362-2365: Routing-funnel keys: check analytics code pathsThe four new funnel metrics look good; ensure the BE returns them in the
/insights/*responses, otherwise the Slovak UI will fall back to English.
2172-2180: No duplicate keys detected — disregard this commentI’ve verified the top-level keys in
apps/web/public/static/locales/sk-SK/common.jsonand found no duplicates. You can safely ignore the original concern.Likely an incorrect or invalid review comment.
apps/web/public/static/locales/bg/common.json (1)
2172-2180: Possible duplicate keys – verify “events” / “performance”.These identifiers already exist earlier in the file for other strings (they were introduced in older sections around lines 1400-1500).
Having the same key twice in one JSON object will silently override the first value during load – the runtime keeps only the last occurrence.
Double-check whether this override is intentional; if not, rename the new keys (e.g.events_dashboard,performance_kpi) or delete the old ones.apps/web/public/static/locales/vi/common.json (2)
51-55: Ensure newly-added keys follow existing placeholder conventionsAll four additions look fine, but double-check that the {{…}} placeholder names (
organizer/session) match the runtime variables expected by the front-end.
A mismatch here will surface as a blank string at runtime and is painful to trace in i18n bundles.
No further action if the variables already exist in the calling code.
3382-3391: File-upload keys: validate placeholder lists
invalid_file_type_extensionembeds{{acceptedTypes}}.
Make sure the caller provides a comma-separated Vietnamese list, not an English MIME list – otherwise the message becomes unreadable for end-users.apps/web/public/static/locales/he/common.json (1)
80-80: Check placeholder coverage
"cancelled_by": "בוטל על ידי"has no placeholder.
If the frontend concatenates a name afterwards ("Cancelled by {{name}}"), everything is OK.
If the English source string already contains a placeholder (e.g."Cancelled by {{user}}") you need to keep it here as well:"cancelled_by": "בוטל על-ידי {{user}}"Please verify against the source keys.
apps/web/public/static/locales/nl/common.json (1)
3382-3390: Attachment-related keys added – double-check size/error text consistencyThe new attachment block introduces several messages (
file_size_limit_exceed,invalid_file_type, …).
Before wiring them in UI, confirm:
- Units are consistent (MB vs MiB) and match backend validation.
acceptedTypes&maxSizeplaceholders are always provided; otherwise interpolation throws.No action required in this JSON, but keep an eye during integration tests.
apps/web/public/static/locales/uk/common.json (2)
687-687: Role verbs: keep Edit/View pair uniform
"view_role": "Переглянути роль"is fine, but check screens where"edit_role"(already present) appears – caption style should mirror (“Редагувати роль / Переглянути роль”).
2172-2181: Plural-forms & duplicates in analytics keys
"bookings_by_hour"/"events"/"performance"introduce dashboard captions. If these headings can be plural/singular (e.g. “1 подія”), provide *_one / *_other forms or make wording neutral (“Події”).- Verify that
"events"wasn’t defined earlier – duplicate keys overwrite silently.apps/web/public/static/locales/bn/common.json (1)
3362-3366: ICU placeholder missingKeys such as
"attachment_optional","send_message"etc. were added above without placeholders, that’s fine, but"remainder_of_maximum_uses_left_plural"/"remainder_of_maximum_use_left_singular"use{{maximum}}and{{remainder}}placeholders.
Double-check that both Bengali strings keep both variables in the same order; currently they do, so ✅.
(No change required – just a heads-up.)apps/web/public/static/locales/sr/common.json (2)
122-123: Key-name alignment
fixed_hosts_unavailable_for_booking&round_robin_hosts_unavailable_for_bookingare fine, but you already expose
hosts_unavailable_for_booking(generic). Make sure caller code picks the more specific key; otherwise the generic
will continue to show.
687-688: Potential duplicateA generic
view_rolestring exists in several locale files. Quickly grep to ensure we didn’t introduce a duplicate entry earlier in this file; a second occurrence would overwrite the first at runtime.apps/web/public/static/locales/fi/common.json (2)
3386-3389: No placeholders to add – translations match the English sourceVerified the English locale (
apps/web/public/static/locales/en/common.json):
"file_size_limit_exceed": "File size exceeds limit""max_files_exceeded": "Maximum number of files exceeded"Both strings are static (no
{{maxSize}}or{{maxFiles}}), so the Finnish entries correctly mirror the source. No change required.Likely an incorrect or invalid review comment.
2204-2207: No placeholder in English source—translation matches upstreamThe English source (
apps/web/public/static/locales/en/common.jsonat line 2206) also hard-codes the amount (“Minimum payment amount is $0.50 USD…”), so the Finnish entry is consistent and correct as is.
- If you intend to introduce a runtime placeholder (e.g.
{{amount}}), first update the English source and then propagate that change to all locale files.Likely an incorrect or invalid review comment.
apps/web/public/static/locales/zh-CN/common.json (7)
51-51: Translation looks good – no action required.
53-54: Key additions LGTM.Both new keys are concise and match existing tone/terminology.
122-124: Consistent wording – good job.
687-687: Key reads well – no issues.
965-965: Nice clarity on multiple-link feature.
2179-2181: Potential key collision.
events与现有大量以event_*开头的键语义接近,容易在代码搜索时混淆;
若英文源同样为裸events可忽略,否则建议加前缀(如events_metric)以减少歧义。
3396-3402: Cache-management strings OK, placeholders intact.apps/web/public/static/locales/ja/common.json (4)
2204-2208: Placeholders preserved – looks goodAll new Stripe-related error strings keep the English originals’ lack of placeholders, so nothing is lost in translation.
Wording also follows the existing style guide. 👍
3382-3389: Placeholders correctly mirrored
acceptedTypesとmaxSizeの両プレースホルダーが日本語訳にも残っており、実行時置換が壊れません。👌
変更なしで OK です。
3395-3400: Variable braces are intact
{{timestamp}}が訳文にもそのまま維持されています。JSON も正当で、誤植なし。
問題なし。
3402-3421: Plural-form variables included – all good
remainder/maximumプレースホルダーが singlular / plural の両方で維持されています。
インターポレーション崩れの心配はありません。apps/web/public/static/locales/ru/common.json (1)
51-55: No functional problems found in new keys – looks goodAll added keys follow the existing naming conventions, include the expected ICU placeholders (where relevant) and keep the JSON valid.
Also applies to: 80-81, 122-124, 688-688, 965-966, 2172-2175, 2180-2181, 2514-2516, 2756-2756
apps/web/public/static/locales/zh-TW/common.json (1)
51-54: LGTM – translations and placeholder syntax look correctNo variable loss, punctuation matches the rest of the file, and keys are new (no duplicates found).
Nice incremental coverage.Also applies to: 80-80, 122-123, 688-688, 965-965, 2172-2172, 2179-2181, 2514-2517
| "events": "Tədbirlər", | ||
| "performance": "Performans", | ||
| "from_last_period": "son dövrdən", |
There was a problem hiding this comment.
Key collision risk
New key “events” duplicates an existing base key earlier in the file (line 147 etc.). Different meanings will clash at runtime. Rename (e.g. analytics_events) or namespace.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/az/common.json around lines 2179 to 2181, the
key "events" duplicates an existing key earlier in the file, causing a collision
at runtime. Rename this key to a unique name such as "analytics_events" or add a
namespace prefix to differentiate it from the existing "events" key and avoid
conflicts.
| "your_card_was_declined": "Ödəniş rədd edildi. Zəhmət olmasa başqa kart sınayın və ya yardım üçün bankinizlə əlaqə saxlayın.", | ||
| "your_card_does_not_support_this_type_of_purchase": "Bu kart növü bu alış üçün dəstəklənmir. Zəhmət olmasa başqa ödəniş üsulu istifadə edin.", | ||
| "amount_must_convert_to_at_least": "Minimum ödəniş məbləği 0.50 USD-dir. Zəhmət olmasa ödəniş məbləğinizi artırın.", | ||
| "could_not_charge_card": "Ödəniş üçün kartdan pul çıxıla bilmədi.", | ||
| "insights": "Görüşlər", |
There was a problem hiding this comment.
Placeholder lost – will break dynamic amount
Original string amount_must_convert_to_at_least contains a “{{amount}}” placeholder. The translation hard-codes “0.50 USD”, losing runtime flexibility. Keep the token:
- "amount_must_convert_to_at_least": "Minimum ödəniş məbləği 0.50 USD-dir. Zəhmət olmasa ödəniş məbləğinizi artırın.",
+ "amount_must_convert_to_at_least": "Minimum ödəniş məbləği {{amount}}-dir. Zəhmət olmasa ödəniş məbləğinizi artırın.",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "your_card_was_declined": "Ödəniş rədd edildi. Zəhmət olmasa başqa kart sınayın və ya yardım üçün bankinizlə əlaqə saxlayın.", | |
| "your_card_does_not_support_this_type_of_purchase": "Bu kart növü bu alış üçün dəstəklənmir. Zəhmət olmasa başqa ödəniş üsulu istifadə edin.", | |
| "amount_must_convert_to_at_least": "Minimum ödəniş məbləği 0.50 USD-dir. Zəhmət olmasa ödəniş məbləğinizi artırın.", | |
| "could_not_charge_card": "Ödəniş üçün kartdan pul çıxıla bilmədi.", | |
| "insights": "Görüşlər", | |
| "your_card_was_declined": "Ödəniş rədd edildi. Zəhmət olmasa başqa kart sınayın və ya yardım üçün bankinizlə əlaqə saxlayın.", | |
| "your_card_does_not_support_this_type_of_purchase": "Bu kart növü bu alış üçün dəstəklənmir. Zəhmət olmasa başqa ödəniş üsulu istifadə edin.", | |
| "amount_must_convert_to_at_least": "Minimum ödəniş məbləği {{amount}}-dir. Zəhmət olmasa ödəniş məbləğinizi artırın.", | |
| "could_not_charge_card": "Ödəniş üçün kartdan pul çıxıla bilmədi.", | |
| "insights": "Görüşlər", |
🤖 Prompt for AI Agents
In apps/web/public/static/locales/az/common.json around lines 2204 to 2208, the
translation for "amount_must_convert_to_at_least" has lost the dynamic
"{{amount}}" placeholder and instead hardcodes "0.50 USD". Restore the
"{{amount}}" placeholder in the translated string to maintain runtime
flexibility for different amounts.
| "average_event_duration": "গড় ইভেন্টের সময়কাল", | ||
| "most_booked_members": "বেশিরভাগ বুক করা সদস্য", | ||
| "least_booked_members": "কমপক্ষে বুক করা সদস্য", | ||
| "bookings_by_hour": "ঘন্টা অনুসারে বুকিং", | ||
| "most_booked_members": "সবচেয়ে বেশি বুক করা সদস্য", | ||
| "least_booked_members": "সবচেয়ে কম বুক করা সদস্য", | ||
| "events_created": "ইভেন্টগুলি তৈরি", |
There was a problem hiding this comment.
Duplicate key recent_ratings will shadow the previous value
The key recent_ratings already exists at line 2171 and is re-declared at line 2731.
When this JSON file is parsed the second occurrence silently overwrites the first one – most i18n loaders won’t warn you. Decide which translation is the correct one and delete the other, or merge the wording if both are needed.
- "recent_ratings": "সাম্প্রতিক রেটিং",
+ // keep *one* of the following, remove the duplicate
+ "recent_ratings": "সাম্প্রতিক রেটিং",Also applies to: 2729-2733
🤖 Prompt for AI Agents
In apps/web/public/static/locales/bn/common.json between lines 2171 and 2175 and
also around lines 2729 to 2733, the key `recent_ratings` is duplicated, causing
the latter to overwrite the former silently. Review both occurrences of
`recent_ratings`, decide which translation is correct or merge their content if
both are needed, then remove the duplicate key to ensure only one unique
`recent_ratings` entry remains in the JSON file.
| "no_show_fee_charged": "Penalització per incompareixença cobrada", | ||
| "your_card_was_declined": "Pagament rebutjat. Si us plau, prova amb una targeta diferent o contacta amb el teu banc per obtenir assistència.", | ||
| "your_card_does_not_support_this_type_of_purchase": "Aquest tipus de targeta no és compatible amb aquesta compra. Si us plau, utilitza un mètode de pagament diferent.", | ||
| "amount_must_convert_to_at_least": "L'import mínim de pagament és de 0,50 USD. Si us plau, augmenta l'import del pagament.", |
There was a problem hiding this comment.
Hard-coded currency may be wrong at runtime
amount_must_convert_to_at_least bakes “USD” into the message, but the backend might pass a different currency. Keep the string currency-agnostic and rely on the variable interpolation:
-"L'import mínim de pagament és de 0,50 USD. Si us plau, augmenta l'import del pagament."
+"L'import mínim de pagament és de {{minimum, currency}}. Si us plau, augmenta l'import."(Use the same placeholder the EN source employs, e.g. {{amount, currency}} / {{minimum}}).
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "amount_must_convert_to_at_least": "L'import mínim de pagament és de 0,50 USD. Si us plau, augmenta l'import del pagament.", | |
| "amount_must_convert_to_at_least": "L'import mínim de pagament és de {{minimum, currency}}. Si us plau, augmenta l'import." |
🤖 Prompt for AI Agents
In apps/web/public/static/locales/ca/common.json at line 2206, the message
hard-codes "USD" as the currency, which may be incorrect at runtime. Replace the
fixed "USD" text with a currency placeholder matching the English source, such
as {{amount, currency}} or {{minimum}}, to make the string currency-agnostic and
allow dynamic interpolation of the correct currency value.
| "cancelled_by": "Zrušeno uživatelem", | ||
| "cancellation_reason_host": "Důvod zrušení", | ||
| "cancellation_reason_placeholder": "Proč rušíte?\n", |
There was a problem hiding this comment.
Potential placeholder lost in cancelled_by
The English source key often takes a parameter, e.g. "Cancelled by {{user}}".
Your translation hard-codes “uživatelem”, dropping any placeholder.
If the placeholder really exists upstream, the app will render the literal token instead of the user’s name.
-"cancelled_by": "Zrušeno uživatelem",
+"cancelled_by": "Zrušeno uživatelem {{user}}",Please cross-check the source file and keep the interpolation token intact.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "cancelled_by": "Zrušeno uživatelem", | |
| "cancellation_reason_host": "Důvod zrušení", | |
| "cancellation_reason_placeholder": "Proč rušíte?\n", | |
| "cancelled_by": "Zrušeno uživatelem {{user}}", | |
| "cancellation_reason_host": "Důvod zrušení", | |
| "cancellation_reason_placeholder": "Proč rušíte?\n", |
🤖 Prompt for AI Agents
In apps/web/public/static/locales/cs/common.json around lines 80 to 82, the
translation for "cancelled_by" hard-codes the word "uživatelem" instead of
preserving the placeholder token from the English source, which likely uses a
parameter like "{{user}}". To fix this, verify the original English key for
"cancelled_by" and update the Czech translation to include the same
interpolation token, ensuring the placeholder is intact for proper dynamic
rendering.
| "remainder_of_maximum_use_left_singular": "Залишилось {{remainder}} з {{maximum}} використання", | ||
| "expires_on_date": "Термін дії закінчується {{date}}, в кінці дня", | ||
| "single_use": "Одноразове використання", | ||
| "time_based_expiration": "Обмеження за часом", | ||
| "usage_based_expiration": "Обмеження за кількістю використань", | ||
| "number_of_uses": "Кількість використань", | ||
| "expires_on": "Термін дії закінчується", | ||
| "max_usage_count": "Максимальна кількість використань", | ||
| "link_settings": "Налаштування посилання", | ||
| "link_expired_on_date": "Термін дії цього посилання закінчився {{date}}, в кінці дня", | ||
| "usage_limit_reached": "Досягнуто ліміту використань", | ||
| "usage_count_error": "Максимальна кількість використань має бути більшою за поточну кількість використань", | ||
| "private_link_expired": "Термін дії цього посилання закінчився", | ||
| "time_based_expiration_description": "Це посилання можна використовувати для бронювань до кінця {{date}}", | ||
| "time_based_generic_expiration_description": "Для цього посилання можна налаштувати закінчення терміну дії після встановленої дати", | ||
| "usage_based_expiration_description": "Це посилання можна використати для {{count}} бронювання", | ||
| "usage_based_generic_expiration_description": "Для цього посилання можна налаштувати закінчення терміну дії після встановленої кількості бронювань", | ||
| "usage_based_expiration_description_plural": "Це посилання можна використати для {{count}} бронювань", | ||
| "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Private-link expiry strings need plural-rules refactor
Keys like "usage_based_expiration_description" vs. "usage_based_expiration_description_plural" mix singular/plural outside the standard i18next _one/_other scheme. This breaks automatic selection and forces manual code. Recommend:
"usage_based_expiration_description_one": "Це посилання можна використати для {{count}} бронювання",
"usage_based_expiration_description_other": "Це посилання можна використати для {{count}} бронювань"Apply the same pattern to "remainder_of_maximum_use_left_*" etc.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/uk/common.json around lines 3403 to 3421, the
pluralization keys like "usage_based_expiration_description" and
"usage_based_expiration_description_plural" do not follow the i18next standard
of using "_one" and "_other" suffixes for singular and plural forms. To fix
this, rename these keys to use the "_one" and "_other" suffixes, for example,
change "usage_based_expiration_description" to
"usage_based_expiration_description_one" and
"usage_based_expiration_description_plural" to
"usage_based_expiration_description_other". Apply the same renaming pattern to
other similar keys such as "remainder_of_maximum_use_left_singular" and its
plural counterpart to ensure proper automatic pluralization handling by i18next.
| "you_can_view_booking_details_with_this_url": "Bạn có thể xem chi tiết đặt chỗ từ đường dẫn này {{url}} và thêm sự kiện vào lịch của bạn", | ||
| "no_options_available": "Không tùy chọn nào khả dụng", | ||
| "cancellation_reason": "Lý do hủy", | ||
| "cancelled_by": "Bị hủy bởi", |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Potential collision with existing key “cancelled_by”
A quick scan shows cancellation_reason_host & friends already present, but not cancelled_by.
If any other locale already defined this key with a different wording, this insertion will silently override when merging bundles.
Verify uniqueness across all locale files.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/vi/common.json at line 80, the key
"cancelled_by" may collide with the same key in other locale files, potentially
causing silent overrides during bundle merges. Review all locale files to
confirm if "cancelled_by" is already defined elsewhere with different
translations. If duplicates exist, rename this key to a unique identifier or
align the translations to avoid conflicts.
| "view_role": "Xem vai trò", | ||
| "edit_team": "Chỉnh sửa nhóm", |
There was a problem hiding this comment.
Duplicate vocabulary check
"view_role" was just introduced – confirm no other key with the same literal exists (e.g. older "view_role" in another block). JSON does not allow duplicate keys; last one wins and the earlier translation will be dropped without warning.
🤖 Prompt for AI Agents
In apps/web/public/static/locales/vi/common.json around lines 687 to 688, there
is a duplicate key "view_role" which can cause earlier translations to be
overwritten silently. Search the entire JSON file for any other occurrences of
the "view_role" key and remove or rename duplicates to ensure each key is unique
and translations are not lost.
| "bookings_by_hour": "Lịch hẹn theo giờ", | ||
| "most_booked_members": "Thành viên được đặt nhiều nhất", | ||
| "least_booked_members": "Thành viên được đặt ít nhất", | ||
| "events_created": "Những sự kiện đã tạo", | ||
| "events_completed": "Những sự kiện đã hoàn thành", | ||
| "events_cancelled": "Các sự kiện đã bị hủy", | ||
| "events_rescheduled": "Những sự kiện đã đặt lịch lại", | ||
| "events": "Sự kiện", | ||
| "performance": "Hiệu suất", | ||
| "from_last_period": "từ thời gian gần nhất", |
There was a problem hiding this comment.
“events” & “performance” keys already exist earlier – JSON duplicates break build
Both keys are defined much earlier in this file (search lines <150 & ~170).
Node/i18next will silently keep the last occurrence, shadowing the first and causing hard-to-trace disappearances in the UI.
- "events": "Sự kiện",
- "performance": "Hiệu suất",
+ "events_insights_tab": "Sự kiện",
+ "performance_insights_tab": "Hiệu suất",Please rename or remove duplicates before shipping.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "bookings_by_hour": "Lịch hẹn theo giờ", | |
| "most_booked_members": "Thành viên được đặt nhiều nhất", | |
| "least_booked_members": "Thành viên được đặt ít nhất", | |
| "events_created": "Những sự kiện đã tạo", | |
| "events_completed": "Những sự kiện đã hoàn thành", | |
| "events_cancelled": "Các sự kiện đã bị hủy", | |
| "events_rescheduled": "Những sự kiện đã đặt lịch lại", | |
| "events": "Sự kiện", | |
| "performance": "Hiệu suất", | |
| "from_last_period": "từ thời gian gần nhất", | |
| "bookings_by_hour": "Lịch hẹn theo giờ", | |
| "most_booked_members": "Thành viên được đặt nhiều nhất", | |
| "least_booked_members": "Thành viên được đặt ít nhất", | |
| "events_created": "Những sự kiện đã tạo", | |
| "events_completed": "Những sự kiện đã hoàn thành", | |
| "events_cancelled": "Các sự kiện đã bị hủy", | |
| "events_rescheduled": "Những sự kiện đã đặt lịch lại", | |
| "events_insights_tab": "Sự kiện", | |
| "performance_insights_tab": "Hiệu suất", | |
| "from_last_period": "từ thời gian gần nhất", |
🤖 Prompt for AI Agents
In apps/web/public/static/locales/vi/common.json around lines 2172 to 2181, the
keys "events" and "performance" are duplicates of keys defined earlier in the
file, which breaks the build. Locate the earlier definitions of these keys and
either remove the duplicates in this section or rename these keys to unique
names to avoid shadowing and ensure the UI displays correctly.
| "your_card_does_not_support_this_type_of_purchase": "此卡片類型不支援此類購買。請使用其他付款方式。", | ||
| "amount_must_convert_to_at_least": "最低付款金額為 0.50 美元。請增加您的付款金額。", | ||
| "could_not_charge_card": "無法扣款。", | ||
| "insights": "洞察", |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Don’t hard-code amounts – keep the placeholder
The English source uses a dynamic amount placeholder (e.g. {{amount}}).
Hard-coding 0.50 美元 (or omitting the token) breaks future currency/threshold changes and translation parity.
-"amount_must_convert_to_at_least": "最低付款金額為 0.50 美元。請增加您的付款金額。",
+"amount_must_convert_to_at_least": "付款金額至少需達 {{amount}}。請增加付款金額。",Verify the other three error strings still match upstream placeholders ({{currency}}, etc.) to avoid runtime formatting errors.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "your_card_does_not_support_this_type_of_purchase": "此卡片類型不支援此類購買。請使用其他付款方式。", | |
| "amount_must_convert_to_at_least": "最低付款金額為 0.50 美元。請增加您的付款金額。", | |
| "could_not_charge_card": "無法扣款。", | |
| "insights": "洞察", | |
| "your_card_does_not_support_this_type_of_purchase": "此卡片類型不支援此類購買。請使用其他付款方式。", | |
| - "amount_must_convert_to_at_least": "最低付款金額為 0.50 美元。請增加您的付款金額。", | |
| + "amount_must_convert_to_at_least": "付款金額至少需達 {{amount}}。請增加付款金額。", | |
| "could_not_charge_card": "無法扣款。", | |
| "insights": "洞察", |
🤖 Prompt for AI Agents
In apps/web/public/static/locales/zh-TW/common.json around lines 2205 to 2208,
the translation for "amount_must_convert_to_at_least" hard-codes the amount as
"0.50 美元" instead of using the dynamic placeholder {{amount}} as in the English
source. Replace the hard-coded amount with the {{amount}} placeholder to
maintain translation parity and support future currency or threshold changes.
Also, review the other three strings in this section to ensure they correctly
include any required placeholders like {{currency}} to prevent runtime
formatting errors.
|
Closing this due to merge conflicts, I reckon it'll reopen with latest translations. |
Hey team,
Lingo.dev here with fresh translations!
In this update
Next Steps