-
Notifications
You must be signed in to change notification settings - Fork 1.3k
fix(dashboard): Add several missing translation strings #4074
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
base: master
Are you sure you want to change the base?
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
WalkthroughAdds Lingui-based internationalization to several dashboard selector and table components and updates many locale PO files with new or relocated translation entries across multiple languages; no exported APIs or component signatures were changed. Changes
Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
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. Comment |
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
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/dashboard/src/i18n/locales/ar.po (1)
1-5150:⚠️ Critical: Unverified translations for non-German locales—Arabic translations lack native speaker review.Per your PR description, German translations were verified by you, but Arabic (and likely other non-German locales) were not. This represents a significant correctness risk: machine-generated or assistant-generated translations without expert review can contain semantic errors, cultural misalignments, or missing nuances that impact user experience.
Recommendation: Before merging, obtain verification from a native Arabic speaker or professional translator to review the translation accuracy and appropriateness of this locale file.
🧹 Nitpick comments (4)
packages/dashboard/src/i18n/locales/es.po (1)
1-5150: Recommendation: Add note to PR or documentation about unverified translations.While the German translations were verified by the author, the Spanish (and implicitly other language) translations were created with AI assistance ("produced with assistance from Claude Code") without explicit verification. This should be documented in the PR description or a follow-up issue to ensure stakeholders understand the verification status.
Suggested action: Consider adding a comment to the PR linking to a follow-up task for native Spanish speaker review, or note in the commit message that non-German translations require verification.
If you would like, I can help identify which specific translation entries were newly added (vs. updated references) by comparing the file, or assist in creating a verification checklist for the Spanish translation review.
packages/dashboard/src/i18n/locales/he.po (1)
1-5151: Translation verification recommended for Hebrew locale.According to the PR description, these Hebrew translations were generated with AI assistance (Claude Code) but have not been verified by a native Hebrew speaker. Only German translations were verified by the author.
While the technical structure of the
.pofile is correct and placeholders are properly preserved (e.g.,{0},{taxRate},{selectedRowCount}), I recommend:
- Native speaker review: Have a native Hebrew speaker or professional translator review the translations for accuracy, natural phrasing, and appropriate technical terminology
- Plural forms consideration: Hebrew has complex plural rules (different forms for 1, 2, and many items). Some strings like line 802 use a single plural form
שורות(rows) which may not be grammatically correct when the count is 1. Consider whether the.pofile should usemsgid_plural/msgstr[n]entries for these cases- Gender agreement: Hebrew has grammatical gender. Verify that adjectives and verb forms agree with the gender of the nouns they modify (e.g., lines 5185-5186 "Previous"→"הקודם" uses masculine, ensure this is appropriate)
- Technical terminology: Confirm that technical terms use standard Hebrew translations adopted by the software industry for consistency with other tools
Based on retrieved learnings, the codebase uses Lingui for localization, which should support plural forms through its ICU message format if needed.
packages/dashboard/src/i18n/locales/fa.po (1)
1-5150: AI-generated Persian translations should be verified by a native speaker.The technical aspects of this translation file are correct:
- All placeholders (
{0},{taxRate}, etc.) are properly preserved.pofile format is valid- HTML tags and special formatting are maintained
- Line references to source code are updated appropriately
However, as noted in the PR description, these Persian translations were generated using Claude Code and have not been verified by a native speaker. While AI translation tools have improved significantly, they can still miss cultural nuances, context-specific terminology, or produce awkward phrasing.
Recommendation: Consider having a native Persian speaker review these translations before merging, or clearly document in the PR/commit that these are unverified AI translations that may need future refinement based on user feedback.
Based on learnings, this follows the established Lingui internationalization pattern for the dashboard.
packages/dashboard/src/i18n/locales/en.po (1)
1-5151: LGTM! Translation additions are well-formatted and complete.The new translation entries in the English locale file follow proper Lingui conventions:
- All
msgid/msgstrpairs are correctly identical for English- Placeholders use valid formats (
{0},{named}, etc.)- Context markers are consistently applied
- Source file references are accurate
- No syntax errors or formatting issues detected
The additions comprehensively cover asset gallery, collections, orders, data tables, and various UI components mentioned in the PR objectives.
Optional: Verify translations in UI context
Since the PR objectives note that only German translations were verified by the author, you may want to verify a sample of these English strings in the actual UI to ensure they read naturally in context—particularly for the newer strings like:
- Asset gallery labels (lines 1192-1195, 1278-1281, 1641-1643, 3024-3027)
- Collection move dialog strings (lines 1329-1415, 1950-1965)
- Order modification summaries (lines 1266-1269, 1605-1608, etc.)
This is purely optional polish, as the translations themselves are technically correct.
Based on learnings, this properly supports the Lingui i18n framework used across the dashboard codebase.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (18)
packages/dashboard/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx(2 hunks)packages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx(2 hunks)packages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx(2 hunks)packages/dashboard/src/app/routes/_authenticated/_products/components/product-variants-table.tsx(3 hunks)packages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx(3 hunks)packages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx(2 hunks)packages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx(2 hunks)packages/dashboard/src/i18n/locales/ar.po(128 hunks)packages/dashboard/src/i18n/locales/cs.po(130 hunks)packages/dashboard/src/i18n/locales/de.po(130 hunks)packages/dashboard/src/i18n/locales/en.po(128 hunks)packages/dashboard/src/i18n/locales/es.po(130 hunks)packages/dashboard/src/i18n/locales/fa.po(130 hunks)packages/dashboard/src/i18n/locales/fr.po(130 hunks)packages/dashboard/src/i18n/locales/he.po(130 hunks)packages/dashboard/src/i18n/locales/hr.po(130 hunks)packages/dashboard/src/i18n/locales/it.po(130 hunks)packages/dashboard/src/i18n/locales/ja.po(130 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
packages/dashboard/src/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/dashboard.mdc)
packages/dashboard/src/**/*.{ts,tsx}: Use React as the UI framework for components in the dashboard package
Use TanStack Query (useQuery or useMutation) for data fetching, not Apollo Client
Import api from '@/graphql/api.js' and graphql from '@/graphql/graphql.js' for GraphQL queries and mutations
Use the api.query() pattern with graphql document when creating useQuery calls, including queryKey and staleTime configuration
Use the api.mutate() pattern with graphql document when creating useMutation calls, with onSuccess and onError handlers
Use FormFieldWrapper component for form controls instead of raw Shadcn react-hook-form components
Use @lingui/react/macro for localization with Trans component for markup and useLingui hook for programmatic strings
Set React component props objects to Readonly<> type for type safety
Files:
packages/dashboard/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_products/components/product-variants-table.tsxpackages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx
packages/dashboard/src/**/*.{ts,tsx,css}
📄 CodeRabbit inference engine (.cursor/rules/dashboard.mdc)
Use Shadcn UI & Tailwind CSS for styling and UI components in the dashboard
Files:
packages/dashboard/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_products/components/product-variants-table.tsxpackages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx
packages/dashboard/src/app/routes/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/dashboard.mdc)
packages/dashboard/src/app/routes/**/*.{ts,tsx}: Use TanStack Router for routing and navigation
Do not create new directories or files in /src/app/routes/ unless they follow TanStack Router conventions or are in /components, /hooks subdirectories, or end with .graphql.ts
Files:
packages/dashboard/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_products/components/product-variants-table.tsxpackages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx
🧠 Learnings (8)
📓 Common learnings
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Applies to packages/dashboard/src/**/*.{ts,tsx} : Use lingui/react/macro for localization with Trans component for markup and useLingui hook for programmatic strings
📚 Learning: 2025-11-27T14:21:55.972Z
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Applies to packages/dashboard/src/**/*.{ts,tsx} : Use lingui/react/macro for localization with Trans component for markup and useLingui hook for programmatic strings
Applied to files:
packages/dashboard/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_products/components/product-variants-table.tsxpackages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsxpackages/dashboard/src/i18n/locales/ja.popackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsxpackages/dashboard/src/i18n/locales/fr.popackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsxpackages/dashboard/src/i18n/locales/fa.popackages/dashboard/src/i18n/locales/he.popackages/dashboard/src/i18n/locales/de.popackages/dashboard/src/i18n/locales/ar.popackages/dashboard/src/i18n/locales/cs.popackages/dashboard/src/i18n/locales/en.popackages/dashboard/src/i18n/locales/it.popackages/dashboard/src/i18n/locales/es.popackages/dashboard/src/i18n/locales/hr.po
📚 Learning: 2025-12-17T11:01:43.370Z
Learnt from: biggamesmallworld
Repo: vendure-ecommerce/vendure PR: 4035
File: packages/dashboard/src/app/routes/_authenticated/_collections/collections.tsx:101-103
Timestamp: 2025-12-17T11:01:43.370Z
Learning: In Vendure's dashboard collections code, root-level collections are identified by parentId '__root_collection__' rather than null. Treat null parentId as an error condition for top-level items and ensure root collections use '__root_collection__' as their parentId. Update null checks accordingly and validate/construct root collections with the correct parentId.
Applied to files:
packages/dashboard/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx
📚 Learning: 2025-11-27T14:21:55.972Z
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Applies to packages/dashboard/src/**/*.{ts,tsx} : Use the api.mutate() pattern with graphql document when creating useMutation calls, with onSuccess and onError handlers
Applied to files:
packages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx
📚 Learning: 2025-11-27T14:21:55.972Z
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Applies to packages/dashboard/src/**/*.{ts,tsx} : Import api from '@/graphql/api.js' and graphql from '@/graphql/graphql.js' for GraphQL queries and mutations
Applied to files:
packages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsxpackages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx
📚 Learning: 2025-11-27T14:21:55.972Z
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Applies to packages/dashboard/src/app/routes/**/*.{ts,tsx} : Use TanStack Router for routing and navigation
Applied to files:
packages/dashboard/src/i18n/locales/ja.popackages/dashboard/src/i18n/locales/fr.popackages/dashboard/src/i18n/locales/fa.popackages/dashboard/src/i18n/locales/he.popackages/dashboard/src/i18n/locales/de.popackages/dashboard/src/i18n/locales/ar.popackages/dashboard/src/i18n/locales/cs.popackages/dashboard/src/i18n/locales/en.popackages/dashboard/src/i18n/locales/it.popackages/dashboard/src/i18n/locales/es.popackages/dashboard/src/i18n/locales/hr.po
📚 Learning: 2025-11-27T14:21:55.972Z
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Applies to packages/dashboard/src/app/routes/**/*.{ts,tsx} : Do not create new directories or files in /src/app/routes/ unless they follow TanStack Router conventions or are in /components, /hooks subdirectories, or end with .graphql.ts
Applied to files:
packages/dashboard/src/i18n/locales/ja.popackages/dashboard/src/i18n/locales/fr.popackages/dashboard/src/i18n/locales/fa.popackages/dashboard/src/i18n/locales/he.popackages/dashboard/src/i18n/locales/de.popackages/dashboard/src/i18n/locales/ar.popackages/dashboard/src/i18n/locales/cs.popackages/dashboard/src/i18n/locales/en.popackages/dashboard/src/i18n/locales/it.popackages/dashboard/src/i18n/locales/es.popackages/dashboard/src/i18n/locales/hr.po
📚 Learning: 2025-11-27T14:21:55.972Z
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Follow CRUD list/detail page patterns as exemplified in administrators.tsx and administrators_.$id.tsx for consistency
Applied to files:
packages/dashboard/src/i18n/locales/ja.popackages/dashboard/src/i18n/locales/fr.popackages/dashboard/src/i18n/locales/fa.popackages/dashboard/src/i18n/locales/he.popackages/dashboard/src/i18n/locales/de.popackages/dashboard/src/i18n/locales/ar.popackages/dashboard/src/i18n/locales/cs.popackages/dashboard/src/i18n/locales/en.popackages/dashboard/src/i18n/locales/it.popackages/dashboard/src/i18n/locales/es.popackages/dashboard/src/i18n/locales/hr.po
🧬 Code graph analysis (3)
packages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx (1)
packages/dashboard/src/lib/components/shared/configurable-operation-selector.tsx (1)
ConfigurableOperationSelector(69-156)
packages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx (1)
packages/dashboard/src/lib/components/shared/configurable-operation-selector.tsx (1)
ConfigurableOperationSelector(69-156)
packages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx (1)
packages/dashboard/src/lib/components/ui/select.tsx (1)
SelectValue(182-182)
🔇 Additional comments (23)
packages/dashboard/src/i18n/locales/es.po (5)
1-15: PO file header metadata appears intact.The file header (lines 1-14) contains valid PO file metadata including charset declaration, language tag (es), and Lingui generator attribution. File structure is preserved.
41-51: Translation entries are properly formatted, but accuracy is unverified.Sampled entries show correct PO syntax with paired msgid/msgstr for new translations. Format is consistent with existing entries. However, per the PR description, these Spanish translations were not verified by the author—only German translations were verified. This introduces risk of translation inaccuracy.
Examples of concern:
- Line 44-45: "Query extension error" → "Error de extensión de consulta" (format mirrors existing line 38-39 pattern ✓)
- Lines 734-735: ", {0} selected" → ", {0} seleccionado(s)" (uses parenthetical gender/number pattern consistent with other asset-related translations ✓)
- Lines 810-811: "{totalItems} {0} found" → "{totalItems} {0} encontrado(s)" (format placeholder alignment looks correct ✓)
The translations follow consistent stylistic patterns with existing entries (e.g., "Agregar X" for "Add X" actions appears throughout). However, without native Spanish speaker verification, semantic accuracy cannot be confirmed.
Consider requesting Spanish language review before merging, especially for new domain-specific terms like "Agregar filtro de colección" (line 876-877) or "Agregar recargo" (line 1010-1011) to ensure they align with Vendure's Spanish terminology standards.
Also applies to: 732-735, 799-802, 808-811
866-877: New translation strings follow consistent lexical patterns.Spot-check of newly added translations reveals consistent terminology choices:
- "Add X" actions → "Agregar X" (e.g., "Add asset" → "Agregar recurso", "Add collection filter" → "Agregar filtro de colección")
- Asset type labels → Spanish equivalents ("Binary" → "Binario", "Images" → "Imágenes", "Video" → "Video")
- Pagination/UI state → matching Spanish patterns ("{0} selected" → "{0} seleccionado(s)")
These align with existing translation patterns in the file and suggest consistency in style, even if absolute accuracy cannot be verified without domain expertise.
Also applies to: 1008-1012, 2938-2975
41-51: Placeholder alignment in new translations is correct.New entries like "Query extension error" (line 44-45) and "The page will continue with the default query." (lines 50-51) contain no format placeholders, so alignment is straightforward. More complex entries with
{0}or{variable}placeholders maintain correct structure in Spanish translations (e.g., lines 732-735, 799-802).
1-5150: File integrity and encoding preserved.The PO file maintains proper UTF-8 encoding, MIME type declaration, and all entries preserve the Lingui comment markers (
#. js-lingui-explicit-id) alongside source location references. No corruption or truncation detected.packages/dashboard/src/i18n/locales/ja.po (2)
1-5150: AI-generated Japanese translations require native speaker verification.According to the PR description, these Japanese translations were generated with AI assistance (Claude Code) but have not been verified by a native Japanese speaker (only German translations were verified by the author). While the translations appear structurally correct with proper placeholder preservation (e.g.,
{0},{1},<0>), their accuracy, naturalness, and contextual appropriateness cannot be guaranteed without review by a native Japanese speaker.Recommendations:
- Have a native Japanese speaker review these translations for accuracy and naturalness
- Pay special attention to:
- Technical terminology consistency
- Politeness levels (敬語) appropriate for a business dashboard
- Context-appropriate translations for UI strings
- Proper use of particles and sentence endings
Based on the project's learnings, Lingui is used for localization, so these translations will directly impact the Japanese user experience.
As per the PR description, translations were AI-generated and not verified for non-German languages.
732-735: LGTM - Placeholder formatting is correct.The placeholder formatting in the Japanese translations is properly preserved throughout the file:
- Numeric placeholders:
{0},{1}, etc.- Named placeholders:
{selectedRowCount},{totalItems},{buttonText}, etc.- HTML/JSX placeholders:
<0>,<1>, etc.- Complex interpolations maintained correctly
Examples:
- Line 802:
"{0}行中{selectedRowCount}行を選択。"correctly preserves both placeholders- Line 811:
"{totalItems}件の{0}が見つかりました"correctly uses named and numeric placeholders- Line 3656:
"前へ"for "Previous" - short, clear translationThe structural integrity of the translations is maintained. However, this does not validate the linguistic quality (see previous comment).
Also applies to: 799-802, 808-811, 1730-1732, 2556-2561, 2568-2570, 3184-3186, 3653-3656
packages/dashboard/src/i18n/locales/hr.po (1)
1-5150: Croatian translations should be verified by a native speaker.The technical structure of this translation file is correct—all placeholders are properly preserved, the file syntax is valid, and no translations are missing. However, as noted in the PR description, these Croatian translations were generated with AI assistance and have not been verified by a native speaker.
Recommendations:
Verify domain terminology: E-commerce and admin dashboard terminology should match standard Croatian usage. Examples to review:
- Line 811: "Pronađeno {totalItems} {0}" - Verify natural phrasing
- Line 3510: "Prag zaliha" (out-of-stock threshold) - Confirm this is standard terminology
- Line 4644: "Dodatna naknada" (surcharge) - Verify this is the correct business term
Check grammatical cases: Croatian has complex grammatical cases. Verify that plurals and cases are correct throughout, especially for dynamic content like:
- Line 802: "{selectedRowCount} od {0} redaka odabrano" - Verify plural forms
- Line 1032: "Dodavanje {0} stavki" - Check genitive plural
Verify consistency: With 5000+ lines, ensure consistent terminology for repeated concepts (e.g., "kanal" for channel, "narudžba" for order).
Test in context: Some translations may be technically correct but awkward in the UI context. Testing with Croatian users would help identify these cases.
Based on learnings, this aligns with the Lingui localization strategy for the dashboard, but translation accuracy needs human verification.
packages/dashboard/src/i18n/locales/cs.po (1)
1-5151: Czech translations added but not yet verified by native speaker.As noted in the PR objectives, these Czech translations were generated with AI assistance but have not been verified by a native speaker. Consider:
- Marking these translations for review by a Czech speaker
- Using a translation management system or community review process to validate accuracy
- Prioritizing verification of user-facing strings over internal/technical terms
This doesn't block the PR since the i18n infrastructure is correctly implemented, but translations should be verified before release.
Based on PR objectives stating: "German translations have been verified by the author; other languages were not verified."
packages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx (1)
5-5: LGTM! Proper Lingui i18n integration.The implementation correctly follows the project's localization guidelines:
- Uses
useLinguihook for programmatic strings- Template literal syntax with
tfor translation- No behavioral changes beyond text localization
As per coding guidelines: "Use lingui/react/macro for localization with Trans component for markup and useLingui hook for programmatic strings"
Also applies to: 24-24, 32-32
packages/dashboard/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx (1)
4-4: LGTM! Consistent i18n implementation.The localization follows the same clean pattern as other selector components in this PR, properly using the
useLinguihook and template literal syntax.As per coding guidelines.
Also applies to: 12-12, 21-21
packages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx (1)
5-5: LGTM! Proper localization applied.Follows the established i18n pattern consistently with other shipping method selectors.
Also applies to: 24-24, 32-32
packages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx (1)
5-5: LGTM! Consistent i18n implementation.The localization is properly applied following project guidelines.
Also applies to: 27-27, 35-35
packages/dashboard/src/app/routes/_authenticated/_products/components/product-variants-table.tsx (1)
18-18: LGTM! Column header properly localized.The implementation correctly translates the table column header using Lingui, maintaining consistency with the rest of the codebase.
Also applies to: 32-32, 74-74
packages/dashboard/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx (1)
4-4: LGTM! Multiple strings properly localized.Good attention to detail by translating both the button text and the empty state message.
Also applies to: 27-27, 35-36
packages/dashboard/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx (1)
6-6: LGTM! Select placeholder properly localized.The implementation correctly translates the select component's placeholder text using Lingui.
Also applies to: 25-26, 47-47
packages/dashboard/src/i18n/locales/it.po (1)
1-5150: LGTM! Italian translations are well-structured and complete.The Italian translation updates in this file are comprehensive and well-executed:
✅ Strengths:
- All changed entries have complete translations (no empty
msgstrvalues)- Placeholders are correctly preserved (e.g.,
{0},{1},<0>,{selectedRowCount})- Consistent terminology throughout (e.g., "Aggiungi" for "Add", "Elimina" for "Delete")
- Appropriate use of singular/plural forms with "/" notation (e.g., "selezionato/i", "trovato/i")
- Technical terms are appropriately translated or kept in English where standard (e.g., "SKU", "ID")
- HTML and XML tags are properly preserved in translations
- Context-specific translations are correctly applied (e.g., "Attivo" for "active language" vs. general "Active")
📋 Translation quality verified for:
- UI labels and buttons
- Error messages and notifications
- Form field labels and placeholders
- Navigation and menu items
- Data table headers and pagination
- Status indicators and badges
Based on learnings: Uses Lingui i18n framework correctly with proper msgid/msgstr pairs.
packages/dashboard/src/i18n/locales/ar.po (1)
41-51: Format & consistency look correct; placeholder variables preserved.Spot-check of changed entries confirms proper PO syntax:
- msgid/msgstr pairs well-formed
- Placeholder variables ({0}, {totalItems}, {selectedRowCount}, etc.) correctly retained in Arabic translations
- Context strings (msgctxt) properly applied where disambiguation is needed (e.g., "active language" context at line 841)
- Line reference comments (#:) correctly updated to reflect new source locations
Format is consistent across all changed segments. Assuming translation accuracy is correct (pending native review), the localization data structure itself is sound.
Also applies to: 732-735, 799-812, 875-877
packages/dashboard/src/i18n/locales/de.po (4)
41-51: LGTM!The new translations for query extension error messages are accurate and consistent with the existing terminology used in lines 18-39 (e.g., "Abfrageerweiterung" for "Query extension").
1099-1101: LGTM!The new asset selector and pagination translations follow standard German UI conventions. Pagination strings ("Weiter"/"Zurück", "Weitere Seiten", "Einträge pro Seite") are appropriate and consistent.
Also applies to: 2729-2731, 2934-2937, 3082-3084, 3653-3657
732-735: LGTM!All placeholders are preserved correctly in the translations. The German plural handling using slash notation (e.g., "{0} Zuschlag/Zuschläge") is a practical approach for handling singular/plural forms in a single string.
Also applies to: 799-802, 808-811, 1035-1038
1-14: Well-structured translation additions.The German translations in this PR are accurate, maintain consistent formal register ("Sie"), and properly preserve all placeholders. Technical terms like "Asset" are appropriately kept in English (common in German tech contexts), while compound words follow proper German hyphenation (e.g., "Asset-Typ", "Standard-Währungscode").
Per the PR description, translations for other languages were AI-generated and not verified by native speakers. For production quality, consider having native speakers review the other locale files (es.po, fr.po, etc.) before release.
packages/dashboard/src/i18n/locales/fr.po (1)
1-5150: French translations look good overall.The French translations in this file are accurate, follow proper French grammar conventions, and correctly preserve all placeholders. A few observations:
French typography conventions are correctly applied - Space before colons (e.g., "Contenu :" on line 1472) follows French standards.
Plural handling is consistent - Using
(s)notation for programmatic plurals (e.g., "sélectionné(s)", "supplément(s)") is appropriate.Terminology is consistent - Terms like "ressource" for "asset", "canal" for "channel", and "gestionnaire" for "handler" are used consistently throughout.
Since the PR author mentioned that German was verified but French was not, it would be beneficial to have a native French speaker review the translations before merging, particularly for user-facing strings in the dashboard.
Could you have a native French speaker verify the key UI-facing translations? While the translations appear grammatically correct, a native speaker review would help catch any unnatural phrasing or contextual issues.
|
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: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/dashboard/src/i18n/locales/he.po (1)
1-5163: Hebrew translations lack verification from a native speaker.According to the PR description, these Hebrew translations were generated with AI assistance but have not been verified by a Hebrew speaker. In contrast, the German translations were reviewed and validated by the author. Git history shows no prior dedicated Hebrew language work or maintenance in this repository.
Technical aspects are correct:
- All placeholders (
{0},{selectedRowCount}, etc.) are properly preserved between source and translated strings- HTML markup and tags are maintained where present
- File follows proper
.poformat structureHowever, automated translations may have issues with:
- Accuracy and natural phrasing specific to Hebrew grammar
- Cultural appropriateness and context-specific terminology
- Idiomatic expressions and tone
Since there is no Hebrew-speaking maintainer evident in the project history, these translations should be reviewed by a native Hebrew speaker from the Vendure community before merging to ensure translation quality and user experience.
🧹 Nitpick comments (1)
packages/dashboard/src/i18n/locales/cs.po (1)
1196-1198: Verify terminology consistency for technical terms.Several new translations for asset-related strings use "asset" as a loanword (e.g., "Typ assetu" at line 1198). While this is common in Czech technical contexts, ensure this aligns with your localization strategy:
- Line 1198: "Asset type" → "Typ assetu" (uses loanword "asset")
- Line 3996: "Search assets..." → "Hledat assety..." (uses loanword "asset")
- Line 4970: "Upload" → "Nahrát" (properly translated)
Consider whether you want to use Czech equivalents like "soubor" (file) consistently, or intentionally use the loanword "asset" for technical precision.
Also applies to: 3995-3997, 4969-4971
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (11)
packages/dashboard/src/i18n/locales/ar.po(127 hunks)packages/dashboard/src/i18n/locales/cs.po(129 hunks)packages/dashboard/src/i18n/locales/de.po(129 hunks)packages/dashboard/src/i18n/locales/en.po(127 hunks)packages/dashboard/src/i18n/locales/es.po(129 hunks)packages/dashboard/src/i18n/locales/fa.po(129 hunks)packages/dashboard/src/i18n/locales/fr.po(129 hunks)packages/dashboard/src/i18n/locales/he.po(129 hunks)packages/dashboard/src/i18n/locales/hr.po(129 hunks)packages/dashboard/src/i18n/locales/it.po(129 hunks)packages/dashboard/src/i18n/locales/ja.po(129 hunks)
✅ Files skipped from review due to trivial changes (1)
- packages/dashboard/src/i18n/locales/ar.po
🧰 Additional context used
🧠 Learnings (5)
📓 Common learnings
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Applies to packages/dashboard/src/**/*.{ts,tsx} : Use lingui/react/macro for localization with Trans component for markup and useLingui hook for programmatic strings
📚 Learning: 2025-11-27T14:21:55.972Z
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Applies to packages/dashboard/src/**/*.{ts,tsx} : Use lingui/react/macro for localization with Trans component for markup and useLingui hook for programmatic strings
Applied to files:
packages/dashboard/src/i18n/locales/fr.popackages/dashboard/src/i18n/locales/he.popackages/dashboard/src/i18n/locales/it.popackages/dashboard/src/i18n/locales/hr.popackages/dashboard/src/i18n/locales/de.popackages/dashboard/src/i18n/locales/en.popackages/dashboard/src/i18n/locales/es.popackages/dashboard/src/i18n/locales/fa.popackages/dashboard/src/i18n/locales/ja.popackages/dashboard/src/i18n/locales/cs.po
📚 Learning: 2025-11-27T14:21:55.972Z
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Applies to packages/dashboard/src/app/routes/**/*.{ts,tsx} : Use TanStack Router for routing and navigation
Applied to files:
packages/dashboard/src/i18n/locales/fr.popackages/dashboard/src/i18n/locales/he.popackages/dashboard/src/i18n/locales/it.popackages/dashboard/src/i18n/locales/hr.popackages/dashboard/src/i18n/locales/de.popackages/dashboard/src/i18n/locales/en.popackages/dashboard/src/i18n/locales/es.popackages/dashboard/src/i18n/locales/fa.popackages/dashboard/src/i18n/locales/ja.popackages/dashboard/src/i18n/locales/cs.po
📚 Learning: 2025-11-27T14:21:55.972Z
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Applies to packages/dashboard/src/app/routes/**/*.{ts,tsx} : Do not create new directories or files in /src/app/routes/ unless they follow TanStack Router conventions or are in /components, /hooks subdirectories, or end with .graphql.ts
Applied to files:
packages/dashboard/src/i18n/locales/fr.popackages/dashboard/src/i18n/locales/he.popackages/dashboard/src/i18n/locales/it.popackages/dashboard/src/i18n/locales/hr.popackages/dashboard/src/i18n/locales/de.popackages/dashboard/src/i18n/locales/en.popackages/dashboard/src/i18n/locales/es.popackages/dashboard/src/i18n/locales/fa.popackages/dashboard/src/i18n/locales/ja.popackages/dashboard/src/i18n/locales/cs.po
📚 Learning: 2025-11-27T14:21:55.972Z
Learnt from: CR
Repo: vendure-ecommerce/vendure PR: 0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-11-27T14:21:55.972Z
Learning: Follow CRUD list/detail page patterns as exemplified in administrators.tsx and administrators_.$id.tsx for consistency
Applied to files:
packages/dashboard/src/i18n/locales/fr.popackages/dashboard/src/i18n/locales/he.popackages/dashboard/src/i18n/locales/it.popackages/dashboard/src/i18n/locales/hr.popackages/dashboard/src/i18n/locales/de.popackages/dashboard/src/i18n/locales/en.popackages/dashboard/src/i18n/locales/es.popackages/dashboard/src/i18n/locales/fa.popackages/dashboard/src/i18n/locales/ja.popackages/dashboard/src/i18n/locales/cs.po
🔇 Additional comments (11)
packages/dashboard/src/i18n/locales/ja.po (1)
1-5158: Japanese translations look technically correct; note that manual verification is pending.The PO file changes are well-formed:
- All placeholders ({0}, {1}, {placeholder}, etc.) are correctly preserved in translations
- msgid/msgstr pairs are properly structured
- Context markers (msgctxt) are maintained where applicable
- Terminology usage appears consistent throughout the file
However, per the PR description, the author has only verified German translations. Japanese translations were AI-generated and have not been manually verified by a native speaker. Consider having a Japanese speaker review these translations before release to production, especially for user-facing strings in critical workflows (order management, payment processing, error messages).
If there's a Japanese-speaking team member or contributor available, consider running a spot-check on key UI strings, particularly:
- Error messages (Lines 1996-2416)
- Order/payment flow strings (Lines 2829-3000)
- New selector component strings (Lines 4075-4170)
packages/dashboard/src/i18n/locales/it.po (3)
1-5163: Italian translations unverified - recommend native speaker review.According to the PR objectives, these Italian translations were generated with AI assistance (Claude Code) but have not been verified by a native speaker. The author only verified German translations.
AI-generated translations can have contextual inaccuracies, inconsistent formality levels, technical terminology issues, or grammar problems. Since this is user-facing UI text for the dashboard, accuracy and natural language flow are important for user experience.
Recommendation: Have a native Italian speaker review these translations before merging, or flag this PR as requiring community verification. You might also consider:
- Marking this locale as "unverified" in documentation
- Opening a follow-up issue requesting Italian community verification
- Using a professional translation service for production UI strings
Based on PR objectives stating translations are unverified for languages other than German.
732-735: Placeholder formatting is correct.The placeholder syntax (e.g.,
{0},{selectedRowCount},{totalItems}) is correctly preserved in all Italian translations. The technical formatting of the PO file entries follows the correct structure with proper msgid/msgstr pairs and context comments.Examples verified:
, {0} selected→, {0} selezionato/i{selectedRowCount} of {0} row(s) selected.→{selectedRowCount} di {0} riga/e selezionata/e.{totalItems} {0} found→{totalItems} {0} trovato/iAlso applies to: 798-801, 807-810, 923-930, 1035-1042
1-5163: Translation coverage is complete.All newly added translation entries have non-empty
msgstrvalues, which is good. The translations cover various UI areas including:
- Asset management (gallery, types, properties)
- Collection operations (move, filters)
- Order modifications (surcharges, items, addresses)
- System UI (alerts, actions, selections, pagination)
- Table operations (sorting, filtering, bulk actions)
No missing translations detected in the additions.
packages/dashboard/src/i18n/locales/en.po (1)
1-5163: LGTM! Comprehensive internationalization additions.This is a well-structured addition of missing translation strings to the English locale file. The changes properly follow Lingui conventions:
- All
msgid/msgstrpairs correctly match (as expected for the English locale)- Placeholder syntax is consistent throughout (
{0},{selectedRowCount}, etc.)- Source location references are accurate
- PO file format is valid
The additions cover numerous dashboard components including asset galleries, collections, data tables, orders, and more, which aligns with the PR objectives.
Please verify that:
- The translations display correctly in the running dashboard application
- All placeholder values are properly substituted at runtime
- Consider regenerating the PO file if needed, as the
POT-Creation-Dateon Line 3 shows "2025-02-20" which predates this PRBased on learnings, this properly uses the Lingui framework for localization.
packages/dashboard/src/i18n/locales/cs.po (1)
732-735: This .po file uses Lingui's default ICU MessageFormat for plurals, not gettext-native plurals. The emptyPlural-Formsheader and absence ofmsgid_pluralentries are correct and expected for this format. The example string ", {0} selected" is a simple parameter placeholder without plural-dependent behavior, so Czech plural form rules do not apply here. Translation accuracy should be verified, but plural form handling is not a concern.Likely an incorrect or invalid review comment.
packages/dashboard/src/i18n/locales/hr.po (1)
1-5163: Native speaker verification is recommended before merging.While the technical structure of this Croatian translation file is sound, professional linguistic review is warranted for production use. Vendure's admin dashboard is available in 14+ languages, and the standard Croatian language is typically used to localize any product or service. However, Croatian society has strong status hierarchies evident in formal and informal address—people use "ti" (informal you) only with family and friends, and "Vi" (formal you) with everyone else. A native speaker should verify consistency in address form throughout the 5000+ strings.
Technical findings (verified):
- ✅ All placeholders (
{0},{taxRate}, etc.) correctly preserved in translations- ✅ No empty
msgstrentries detected- ✅ Proper escaping and quotation marks maintained
- ✅ File structure and metadata intact
Areas requiring native review:
- Terminology consistency (e.g., "narudžba" for orders, "varijanta" for variants)
- Formal/informal address consistency across all UI strings
- Natural phrasing and idiom usage appropriate for a business dashboard
- Domain-specific e-commerce terminology
packages/dashboard/src/i18n/locales/fr.po (1)
1-5163: LGTM - Well-structured translation additions with recommendation for native speaker reviewThis PR successfully adds extensive French translations to the dashboard. The technical implementation is sound:
✅ Format integrity: All PO file syntax is correct with proper msgid/msgstr pairs
✅ Placeholder preservation: Variables like{0},{selectedRowCount},<0>, etc. are correctly maintained
✅ Special characters: French accents and diacritics properly used throughout
✅ Technical terms: Appropriate terms kept in English (SKU, ID, API, etc.)However, as noted in the PR description, these French translations were AI-generated (unlike the German translations which were verified). While the translations appear grammatically correct and contextually appropriate, I recommend:
Consider having a native French speaker review the translations for naturalness and terminology consistency, particularly for:
- E-commerce-specific terms (e.g., "commande", "variante de produit", "expédition")
- UI action phrases (e.g., "Ajouter", "Modifier", "Supprimer")
- Error messages and user feedback strings
This is not a blocker for merging, but would improve the quality of the French localization for end users.
Based on learnings, this follows the Lingui localization approach correctly.
packages/dashboard/src/i18n/locales/es.po (1)
1-5163: Recommend native Spanish speaker review before merge—PR confirms translations are unverified.Per the PR description, while German translations were verified by the author, Spanish (and other languages) remain unverified. Since these translations were generated with AI assistance, they should be reviewed by a native Spanish speaker before merging.
Key concerns:
- Spanish adjectives must agree in gender and number with the nouns they describe, unlike English where adjectives remain unchanged. Gender agreement is critical for UI localization quality.
- Native speaker validation is a best practice for UI element quality.
- Some entries use non-standard plural notation (e.g., "seleccionado(s)" instead of the proper dual forms "seleccionado/seleccionada"). Professional Spanish translations should use proper grammatical forms rather than shortcuts.
- Technical aspects (placeholder preservation, structure) appear correct, but linguistic accuracy requires expert review.
packages/dashboard/src/i18n/locales/fa.po (1)
1-5163: Persian translation file is technically well-implemented.The PO file structure is correct, placeholders are properly preserved throughout (e.g.,
{0},{selectedRowCount},{totalItems}), and there are no syntax errors. The translations follow appropriate formatting for Persian text with proper Unicode encoding.As noted in the PR description, these Persian translations were generated with AI assistance and have not been verified by a native speaker. While the technical implementation is sound, consider flagging this locale for review by a Persian-speaking contributor when available to ensure translation quality, cultural appropriateness, and proper technical terminology usage.
Based on learnings, the Lingui framework usage is appropriate for this localization approach.
Consider documenting in the PR or a follow-up issue that the Persian locale should be reviewed by a native speaker to verify:
- Translation accuracy and naturalness
- Technical terminology appropriateness
- RTL-specific considerations
- Consistency with Persian UI conventions
packages/dashboard/src/i18n/locales/de.po (1)
1-5163: LGTM! German translation updates are well-structured.The translation file updates look good:
- All placeholders (e.g.,
{0},{selectedRowCount},<0>, etc.) are correctly preserved in the German translations- Gettext PO file format is valid with proper
msgid/msgstrpairs- Translations cover a comprehensive range of dashboard UI components
- As mentioned in the PR description, German translations have been verified by the author
Since these are pure localization changes with no impact on code logic or runtime behavior, and the German translations have been verified, these changes are ready to merge.
| #. placeholder {0}: selected.length | ||
| #: src/lib/components/shared/asset/asset-gallery.tsx:494 | ||
| msgid ", {0} selected" | ||
| msgstr ", {0} seleccionado(s)" |
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 | 🟠 Major
Replace informal plural notation with proper Spanish pluralization.
The use of (s) for plurals (e.g., "seleccionado(s)", "fila(s)") is informal and not standard in proper Spanish translation. This pattern appears in multiple places:
- Line 735:
"{0} seleccionado(s)" - Line 776:
"{0} seleccionado(s)" - Line 801:
"{selectedRowCount} de {0} fila(s) seleccionada(s)." - Line 810:
"{totalItems} {0} encontrado(s)"
Professional translations should use proper plural forms defined in the PO file's Plural-Forms header or handle pluralization in the application code. The Lingui framework supports proper pluralization.
Example of proper pluralization approach
Instead of:
msgid "{0} selected"
msgstr "{0} seleccionado(s)"Use Lingui's plural support in the source code:
plural(count, {
one: "# seleccionado",
other: "# seleccionados"
})Or if using ICU MessageFormat in PO files:
msgid "{count, plural, one {# selected} other {# selected}}"
msgstr "{count, plural, one {# seleccionado} other {# seleccionados}}"Based on learnings, the project uses Lingui for localization which fully supports proper plural forms.
Also applies to: 776-776, 801-801, 810-810



Description
I have found several occurrences of single strings not being (properly) translated yet. I have wrapped them in or t`` and added translations with the help of Claude Code.
German translations have been verified, the other languages I'm of no use unfortunately.
Breaking changes
No.
Screenshots
Checklist
📌 Always:
👍 Most of the time: