Files
orion/app/modules/tenancy/locales/lb.json
Samir Boulahtit 0455e63a2e feat(tenancy): add merchant team CRUD with multi-store hub view
The merchant team page was read-only. Now merchant owners can invite,
edit roles, and remove team members across all their stores from a
single hub view.

Architecture: No new models — delegates to existing store_team_service.
Members are deduplicated across stores with per-store role badges.

New:
- 5 API endpoints: GET team (member-centric), GET store roles, POST
  invite (multi-store), PUT update role, DELETE remove member
- merchant-team.js Alpine component with invite/edit/remove modals
- Full CRUD template with stats cards, store filter, member table
- 7 Pydantic schemas for merchant team request/response
- 2 service methods: validate_store_ownership, get_merchant_team_members
- 25 new i18n keys across 4 tenancy locales + 1 core common key

Tests: 434 tenancy tests passing, arch-check green.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 18:57:45 +01:00

187 lines
9.1 KiB
JSON

{
"menu": {
"user_management": "Benotzerverwaltung",
"merchant_users": "Händler-Benotzer",
"platform_admin": "Plattform-Administratioun",
"content_management": "Inhaltsverwaltung",
"account_settings": "Kont-Astellungen",
"admin_users": "Admin-Benotzer",
"merchants": "Händler",
"stores": "Butteker",
"platforms": "Plattformen",
"team": "Team"
},
"team": {
"actions": "Aktiounen",
"active": "Aktiv",
"add_member": "Member derbäisetzen",
"all_stores": "All Geschäfter",
"edit_member": "Member änneren",
"editor": "Editeur",
"email": "E-Mail",
"email_placeholder": "E-Mail-Adress aginn",
"error_title": "Feeler beim Lueden vum Team",
"first_name": "Virnumm",
"invite_first_member": "Invitéiert Äert éischt Teammember",
"invite_member": "Member invitéieren",
"invitation_accepted": "Invitatioun ugeholl",
"invitation_sent": "Invitatioun geschéckt",
"last_name": "Nonumm",
"loading_team": "Team gëtt gelueden...",
"manage_members_description": "Teammemberen iwwer all Geschäfter verwalten",
"manager": "Manager",
"member": "Member",
"member_stores": "Geschäfter vum Member",
"members": "Memberen",
"no_members_description": "Invitéiert Teammemberen fir Är Geschäfter ze verwalten",
"no_members_title": "Nach keng Teammemberen",
"no_role": "Keng Roll",
"owner": "Proprietär",
"pending_invitations": "Aussteesend Invitatiounen",
"permissions": "Rechter",
"remove_confirmation": "Sidd Dir sécher, datt Dir ewechhuele wëllt",
"remove_from_all_stores": "Vun all Geschäfter ewechhuelen",
"remove_member": "Member ewechhuelen",
"role": "Roll",
"select_stores": "Geschäfter wielen",
"send_invitation": "Invitatioun schécken",
"status": "Status",
"store_roles": "Geschäftsrollen",
"stores_and_roles": "Geschäfter & Rollen",
"title": "Team",
"total_members": "Memberen total",
"viewer": "Betruechter"
},
"messages": {
"business_info_saved": "Business info saved",
"marketplace_settings_saved": "Marketplace settings saved",
"please_enter_a_url_first": "Please enter a URL first",
"could_not_validate_url_it_may_still_work": "Could not validate URL - it may still work",
"localization_settings_saved": "Localization settings saved",
"failed_to_load_email_settings": "Failed to load email settings",
"from_email_and_from_name_are_required": "From Email and From Name are required",
"email_settings_saved": "Email settings saved",
"please_enter_a_test_email_address": "Please enter a test email address",
"please_save_your_email_settings_first": "Please save your email settings first",
"test_email_sent_check_your_inbox": "Test email sent! Check your inbox.",
"please_fix_the_errors_before_saving": "Please fix the errors before saving",
"profile_updated_successfully": "Profile updated successfully",
"email_is_required": "Email is required",
"invitation_sent_successfully": "Invitation sent successfully",
"team_member_updated": "Team member updated",
"team_member_removed": "Team member removed",
"invalid_merchant_url": "Invalid merchant URL",
"failed_to_load_merchant_details": "Failed to load merchant details",
"merchant_deleted_successfully": "Merchant deleted successfully",
"merchant_details_refreshed": "Merchant details refreshed",
"invalid_admin_user_url": "Invalid admin user URL",
"failed_to_load_admin_user_details": "Failed to load admin user details",
"you_cannot_deactivate_your_own_account": "You cannot deactivate your own account",
"you_cannot_delete_your_own_account": "You cannot delete your own account",
"admin_user_deleted_successfully": "Admin user deleted successfully",
"admin_user_details_refreshed": "Admin user details refreshed",
"failed_to_initialize_page": "Failed to initialize page",
"failed_to_load_merchant": "Failed to load merchant",
"merchant_updated_successfully": "Merchant updated successfully",
"ownership_transferred_successfully": "Ownership transferred successfully",
"theme_saved_successfully": "Theme saved successfully",
"failed_to_apply_preset": "Failed to apply preset",
"theme_reset_to_default": "Theme reset to default",
"failed_to_reset_theme": "Failed to reset theme",
"failed_to_load_stores": "Failed to load stores",
"store_deleted_successfully": "Store deleted successfully",
"stores_list_refreshed": "Stores list refreshed",
"invalid_user_url": "Invalid user URL",
"failed_to_load_user_details": "Failed to load user details",
"user_deleted_successfully": "User deleted successfully",
"user_details_refreshed": "User details refreshed",
"invalid_store_url": "Invalid store URL",
"failed_to_load_store_details": "Failed to load store details",
"no_store_loaded": "No store loaded",
"subscription_created_successfully": "Subscription created successfully",
"store_details_refreshed": "Store details refreshed",
"failed_to_load_users": "Failed to load users",
"failed_to_delete_user": "Failed to delete user",
"failed_to_load_admin_users": "Failed to load admin users",
"failed_to_load_admin_user": "Failed to load admin user",
"you_cannot_demote_yourself_from_super_ad": "You cannot demote yourself from super admin",
"platform_assigned_successfully": "Platform assigned successfully",
"platform_admin_must_be_assigned_to_at_le": "Platform admin must be assigned to at least one platform",
"platform_removed_successfully": "Platform removed successfully",
"please_fix_the_errors_before_submitting": "Please fix the errors before submitting",
"failed_to_load_store": "Failed to load store",
"store_updated_successfully": "Store updated successfully",
"all_contact_fields_reset_to_merchant_defa": "All contact fields reset to merchant defaults",
"failed_to_load_user": "Failed to load user",
"user_updated_successfully": "User updated successfully"
},
"confirmations": {
"enable_all_modules": "All Moduler ginn aktivéiert. Weidermaachen?",
"disable_optional_modules": "All optional Moduler ginn deaktivéiert, nëmmen Kärmoduler bleiwen aktiv. Weidermaachen?",
"reset_theme": "Theme op Standard zrécksetzen? Dëst kann net réckgängeg gemaach ginn.",
"show_all_menu_items": "All Menüpunkten ginn ugewisen. Weidermaachen?",
"hide_all_menu_items": "All Menüpunkten ginn verstopp (ausser obligatoresch). Dir kënnt dann déi gewënscht aktivéieren. Weidermaachen?"
},
"features": {
"team_members": {
"name": "Team-Memberen",
"description": "Maximal Unzuel vu Team-Memberen",
"unit": "Memberen"
},
"single_user": {
"name": "Eenzel-Benotzer",
"description": "Eenzel-Benotzer Zougang"
},
"team_basic": {
"name": "Basis-Team",
"description": "Grondfunktiounen fir Team-Zesummenaarbecht"
},
"team_roles": {
"name": "Team-Rollen",
"description": "Rollebaséiert Zougangskontroll fir Team-Memberen"
},
"audit_log": {
"name": "Audit-Protokoll",
"description": "All Benotzeraktiounen an Ännerungen nospueren"
}
},
"permissions": {
"category": {
"dashboard": "Dashboard",
"products": "Produiten",
"stock": "Inventar",
"orders": "Bestellungen",
"customers": "Clienten",
"marketing": "Marketing",
"reports": "Berichter",
"settings": "Astellungen",
"team": "Team",
"imports": "Importatiounen",
"general": "Allgemeng",
"analytics": "Analytik",
"billing": "Ofrechnung",
"cart": "Kuerf",
"checkout": "Keess",
"cms": "Inhalter",
"loyalty": "Treiheet",
"marketplace": "Marché",
"messaging": "Messagen",
"payments": "Bezuelungen"
},
"team_view": "Team kucken",
"team_view_desc": "Team-Memberen an hir Rollen kucken",
"team_invite": "Memberen invitéieren",
"team_invite_desc": "Nei Memberen an d'Team invitéieren",
"team_edit": "Memberen änneren",
"team_edit_desc": "Rollen a Rechter vun de Memberen änneren",
"team_remove": "Memberen ewechhuelen",
"team_remove_desc": "Memberen aus dem Team ewechhuelen"
},
"onboarding": {
"customize_store": {
"title": "Äre Buttek personaliséieren",
"description": "Setzt eng Beschreiwung an e Logo fir Äre Buttek derbäi"
}
}
}