Enhance the self-contained module architecture with locale/translation support:
ModuleDefinition changes:
- Add locales_path attribute for module-specific translations
- Add get_locales_dir() helper method
- Include locales in validate_structure() check
i18n module changes (app/utils/i18n.py):
- Add get_module_locale_dirs() to discover module locales
- Update load_translations() to merge module translations with core
- Module translations namespaced under module code (e.g., cms.title)
- Add _deep_merge() helper for nested dictionary merging
- Add _load_json_file() helper for cleaner JSON loading
CMS module locales:
- Add app/modules/cms/locales/ with translations for all 4 languages
- en.json, fr.json, de.json, lb.json with CMS-specific strings
- Covers: pages, page editing, SEO, navigation, publishing, homepage
sections, media library, themes, actions, and messages
Usage in templates:
{{ _("cms.title") }} -> "Content Management" (en)
{{ _("cms.pages.create") }} -> "Créer une page" (fr)
{{ _("cms.publishing.draft") }} -> "Entwurf" (de)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
127 lines
4.4 KiB
JSON
127 lines
4.4 KiB
JSON
{
|
|
"title": "Gestion de contenu",
|
|
"description": "Gestion des pages de contenu, de la bibliothèque de médias et des thèmes",
|
|
"pages": {
|
|
"title": "Pages de contenu",
|
|
"subtitle": "Gérez les pages de contenu de la plateforme et des vendeurs",
|
|
"create": "Créer une page",
|
|
"edit": "Modifier la page",
|
|
"delete": "Supprimer la page",
|
|
"list": "Toutes les pages",
|
|
"empty": "Aucune page trouvée",
|
|
"empty_search": "Aucune page ne correspond à votre recherche",
|
|
"create_first": "Créer la première page"
|
|
},
|
|
"page": {
|
|
"title": "Titre de la page",
|
|
"slug": "Slug",
|
|
"slug_help": "Identifiant URL (minuscules, chiffres, tirets uniquement)",
|
|
"content": "Contenu",
|
|
"content_format": "Format du contenu",
|
|
"format_html": "HTML",
|
|
"format_markdown": "Markdown",
|
|
"platform": "Plateforme",
|
|
"vendor_override": "Remplacement vendeur",
|
|
"vendor_override_none": "Aucun (page par défaut)",
|
|
"vendor_override_help_default": "Ceci est une page par défaut pour toute la plateforme",
|
|
"vendor_override_help_vendor": "Cette page remplace la page par défaut pour le vendeur sélectionné"
|
|
},
|
|
"tiers": {
|
|
"platform": "Marketing plateforme",
|
|
"vendor_default": "Défaut vendeur",
|
|
"vendor_override": "Remplacement vendeur"
|
|
},
|
|
"seo": {
|
|
"title": "SEO & Métadonnées",
|
|
"meta_description": "Meta Description",
|
|
"meta_description_help": "caractères (150-160 recommandés)",
|
|
"meta_keywords": "Mots-clés",
|
|
"meta_keywords_placeholder": "mot-clé1, mot-clé2, mot-clé3"
|
|
},
|
|
"navigation": {
|
|
"title": "Navigation & Affichage",
|
|
"display_order": "Ordre d'affichage",
|
|
"display_order_help": "Plus bas = premier",
|
|
"show_in_header": "Afficher dans l'en-tête",
|
|
"show_in_footer": "Afficher dans le pied de page",
|
|
"show_in_legal": "Afficher dans les mentions légales",
|
|
"show_in_legal_help": "Barre en bas à côté du copyright"
|
|
},
|
|
"publishing": {
|
|
"published": "Publié",
|
|
"draft": "Brouillon",
|
|
"publish_help": "Rendre cette page visible au public"
|
|
},
|
|
"homepage": {
|
|
"title": "Sections de la page d'accueil",
|
|
"subtitle": "Contenu multilingue",
|
|
"loading": "Chargement des sections...",
|
|
"hero": {
|
|
"title": "Section Hero",
|
|
"badge_text": "Texte du badge",
|
|
"main_title": "Titre",
|
|
"subtitle": "Sous-titre",
|
|
"buttons": "Boutons",
|
|
"add_button": "Ajouter un bouton"
|
|
},
|
|
"features": {
|
|
"title": "Section Fonctionnalités",
|
|
"section_title": "Titre de la section",
|
|
"cards": "Cartes de fonctionnalités",
|
|
"add_card": "Ajouter une carte",
|
|
"icon": "Nom de l'icône",
|
|
"feature_title": "Titre",
|
|
"feature_description": "Description"
|
|
},
|
|
"pricing": {
|
|
"title": "Section Tarifs",
|
|
"section_title": "Titre de la section",
|
|
"use_tiers": "Utiliser les niveaux d'abonnement de la base de données",
|
|
"use_tiers_help": "Si activé, les cartes de tarifs sont extraites dynamiquement de la configuration des niveaux d'abonnement."
|
|
},
|
|
"cta": {
|
|
"title": "Section Appel à l'action",
|
|
"main_title": "Titre",
|
|
"subtitle": "Sous-titre",
|
|
"buttons": "Boutons",
|
|
"add_button": "Ajouter un bouton"
|
|
}
|
|
},
|
|
"media": {
|
|
"title": "Bibliothèque de médias",
|
|
"upload": "Télécharger",
|
|
"upload_file": "Télécharger un fichier",
|
|
"delete": "Supprimer",
|
|
"empty": "Aucun fichier média",
|
|
"upload_first": "Téléchargez votre premier fichier"
|
|
},
|
|
"themes": {
|
|
"title": "Thèmes vendeurs",
|
|
"subtitle": "Gérez les personnalisations de thèmes des vendeurs"
|
|
},
|
|
"actions": {
|
|
"save": "Enregistrer",
|
|
"saving": "Enregistrement...",
|
|
"update": "Mettre à jour la page",
|
|
"create": "Créer la page",
|
|
"cancel": "Annuler",
|
|
"back_to_list": "Retour à la liste",
|
|
"preview": "Aperçu",
|
|
"revert_to_default": "Revenir à la valeur par défaut"
|
|
},
|
|
"messages": {
|
|
"created": "Page créée avec succès",
|
|
"updated": "Page mise à jour avec succès",
|
|
"deleted": "Page supprimée avec succès",
|
|
"reverted": "Retour à la page par défaut",
|
|
"error_loading": "Erreur lors du chargement de la page",
|
|
"error_saving": "Erreur lors de l'enregistrement de la page",
|
|
"confirm_delete": "Êtes-vous sûr de vouloir supprimer cette page ?"
|
|
},
|
|
"filters": {
|
|
"all_pages": "Toutes les pages",
|
|
"all_platforms": "Toutes les plateformes",
|
|
"search_placeholder": "Rechercher des pages..."
|
|
}
|
|
}
|