Michael Bromley 6c85b28e92 feat(dashboard): Full localization for 25 languages (#3847) há 3 meses atrás
..
README.md 6c85b28e92 feat(dashboard): Full localization for 25 languages (#3847) há 3 meses atrás
i18n-tool.js 6c85b28e92 feat(dashboard): Full localization for 25 languages (#3847) há 3 meses atrás

README.md

Vendure Dashboard Translation Tooling

The script in this dir allow the efficient addition of new translations to the dashboard.

Adding a New Language

  1. Add the new language code to packages/dashboard/lingui.config.js
  2. run lingui extract

This will create the new, empty .po file in packages/dashboard/src/i18n/locales

Generating new translations

When you add new localized strings to the Dashboard app, you can generate translations in each supported language like this:

  1. run npm run i18n:extract
  2. this will output a missing-translations.txt file in the dashboard dir
  3. paste this into an LLM
  4. save the output into translations.txt in the dashboard dir
  5. run npm run i18n:apply translations.txt

Translation Guidelines

General Principles

  1. Preserve Technical Terms: Keep terms like "API", "GraphQL", "JSON", "SKU" untranslated
  2. Maintain Placeholders: Never modify placeholders like {0}, {formattedDiff}, {entityName}
  3. Use Formal Address: Use formal addressing appropriate for business software
  4. Brand Names: Keep "Vendure" and other brand names untranslated
  5. Context Awareness: Consider the UI context when translating

Critical Lingui-Specific Rules

  1. Explicit ID Translations: For entries marked with "js-lingui-explicit-id" (e.g., orderState.PartiallyDelivered), translate ONLY the human-readable part, NOT the namespace:

    • "orderState.PartiallyDelivered""Partiellement livré" (French)
    • "orderState.PartiallyDelivered""orderState.Partiellement livré"
  2. E-commerce Domain Context: Always assume e-commerce context unless clearly indicated otherwise:

    • "order" = e-commerce order (goods being purchased)
    • "customer" = e-commerce customer (buyer)
    • "product" = e-commerce product (item for sale)
    • "variant" = product variant (size, color, etc.)

File Structure

packages/dashboard/src/i18n/locales/
├── en.po          # Source English file
├── de.po          # German translations
├── fr.po          # French translations (after creation)
└── ...            # Other language files

Tips for Quality Translations

  1. Test in Context: Always test translations in the actual UI
  2. Consistency: Use consistent terminology across the application
  3. Length Considerations: Some languages are more verbose - ensure UI still works
  4. Cultural Adaptation: Consider cultural differences in business terminology
  5. Regular Updates: Keep translations updated when English source changes