Enhance multi-page AJAX handling by enforcing context for translations in ajax_inscr_gestion and ajax_promoteur_hub. Introduce new language keys for improved user feedback and error messages. Increment version code to 4.72.806 to reflect these changes.

This commit is contained in:
2026-07-13 17:17:53 -04:00
parent af2ddba2fa
commit d3bb32eb97
15 changed files with 777 additions and 216 deletions

View File

@ -0,0 +1,99 @@
-- MSIN-4401 — Libellés Info manquants (gestion accès V2 promoteur)
-- Prérequis : sql/MSIN-4401-eve-acces-promoteur-page.sql (clés de base déjà en Info)
-- Notes : idempotent (DELETE + INSERT). Source de vérité = table info, pas le PHP.
DELETE FROM info
WHERE info_clef IN (
'eve_acces_promoteur_statut_actif',
'eve_acces_promoteur_statut_pending',
'eve_acces_promoteur_col_action',
'eve_acces_promoteur_field_courriel',
'eve_acces_promoteur_field_prenom',
'eve_acces_promoteur_field_nom',
'eve_acces_promoteur_field_kit',
'eve_acces_promoteur_field_jours',
'eve_acces_promoteur_jours_help',
'eve_acces_promoteur_invite_courriel_help',
'eve_acces_promoteur_btn_invite',
'eve_acces_promoteur_btn_resend',
'eve_acces_promoteur_btn_revoke',
'eve_acces_promoteur_confirm_revoke',
'eve_acces_promoteur_no_kits',
'eve_acces_promoteur_ok_existing',
'eve_acces_promoteur_ok_created',
'eve_acces_promoteur_ok_revoked',
'eve_acces_promoteur_ok_resent',
'eve_acces_promoteur_err_courriel',
'eve_acces_promoteur_err_kit',
'eve_acces_promoteur_err_nom',
'eve_acces_promoteur_err_inactive',
'eve_acces_promoteur_err_revoke',
'eve_acces_promoteur_err_resend',
'eve_acces_promoteur_err_generic',
'eve_acces_promoteur_check_exists',
'eve_acces_promoteur_check_new',
'eve_acces_promoteur_check_inactive',
'eve_acces_promoteur_check_invalid'
) AND info_prg = 'compte.php';
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation) VALUES
('eve_acces_promoteur_statut_actif', 'fr', 'Actif', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_statut_actif', 'en', 'Active', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_statut_pending', 'fr', 'Compte non activé', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_statut_pending', 'en', 'Account not activated', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_col_action', 'fr', 'Action', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_col_action', 'en', 'Action', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_field_courriel', 'fr', 'Courriel', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_field_courriel', 'en', 'Email', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_field_prenom', 'fr', 'Prénom', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_field_prenom', 'en', 'First name', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_field_nom', 'fr', 'Nom', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_field_nom', 'en', 'Last name', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_field_kit', 'fr', 'Kit d''accès', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_field_kit', 'en', 'Access kit', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_field_jours', 'fr', 'Durée (jours)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_field_jours', 'en', 'Duration (days)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_jours_help', 'fr', '0 = sans expiration. Utilisé surtout pour les nouveaux accès.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_jours_help', 'en', '0 = no expiration. Mainly for new access grants.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_invite_courriel_help', 'fr', 'Saisissez d''abord le courriel : on vérifie s''il existe déjà un compte MS1 avant de demander le nom.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_invite_courriel_help', 'en', 'Enter the email first: we check if an MS1 account already exists before asking for a name.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_btn_invite', 'fr', 'Assigner l''accès', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_btn_invite', 'en', 'Grant access', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_btn_resend', 'fr', 'Renvoyer le mail', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_btn_resend', 'en', 'Resend email', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_btn_revoke', 'fr', 'Retirer', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_btn_revoke', 'en', 'Revoke', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_confirm_revoke', 'fr', 'Retirer cet accès ?', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_confirm_revoke', 'en', 'Revoke this access?', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_no_kits', 'fr', 'Aucun kit délégable disponible. Demandez à un super admin d''activer « délégable » sur un kit.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_no_kits', 'en', 'No delegable kit available. Ask a super admin to mark a kit as delegable.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_ok_existing', 'fr', 'Accès assigné au compte existant. Un courriel a été envoyé.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_ok_existing', 'en', 'Access granted to the existing account. An email was sent.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_ok_created', 'fr', 'Compte créé et accès assigné. Un courriel avec le lien de mot de passe a été envoyé.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_ok_created', 'en', 'Account created and access granted. An email with the password link was sent.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_ok_revoked', 'fr', 'Accès retiré.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_ok_revoked', 'en', 'Access revoked.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_ok_resent', 'fr', 'Courriel d''invitation renvoyé.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_ok_resent', 'en', 'Invitation email resent.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_courriel', 'fr', 'Courriel invalide.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_courriel', 'en', 'Invalid email.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_kit', 'fr', 'Kit non autorisé.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_kit', 'en', 'Kit not allowed.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_nom', 'fr', 'Prénom et nom requis pour créer un nouveau compte.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_nom', 'en', 'First and last name required to create a new account.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_inactive', 'fr', 'Un compte existe avec ce courriel mais il est inactif. Contactez le support.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_inactive', 'en', 'An account exists with this email but it is inactive. Contact support.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_revoke', 'fr', 'Retrait impossible.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_revoke', 'en', 'Unable to revoke.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_resend', 'fr', 'Renvoi du courriel impossible.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_resend', 'en', 'Unable to resend the email.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_generic', 'fr', 'Une erreur est survenue.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_err_generic', 'en', 'An error occurred.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_check_exists', 'fr', 'Compte déjà existant. Un courriel de confirmation sera envoyé.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_check_exists', 'en', 'Existing account. A confirmation email will be sent.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_check_new', 'fr', 'Aucun compte avec ce courriel. Indiquez le prénom et le nom pour créer le compte.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_check_new', 'en', 'No account with this email. Enter first and last name to create the account.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_check_inactive', 'fr', 'Un compte existe avec ce courriel mais il est inactif. Contactez le support.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_check_inactive', 'en', 'An account exists with this email but it is inactive. Contact support.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_check_invalid', 'fr', 'Courriel invalide.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_check_invalid', 'en', 'Invalid email.', '', 'compte.php', '', 0, 1, '', '', '', NOW());

View File

@ -0,0 +1,290 @@
-- MSIN-4401 — Libellés Info V2 manquants (source de vérité)
-- Couvre : mobile invite, courriels accès, gestion inscriptions, OCR/JS, hub dashboard
-- Prérequis : scripts MSIN-4401-eve-acces-promoteur-*.sql déjà exécutés si applicable
-- Idempotent (DELETE + INSERT). Exécuter en pilote puis prod.
DELETE FROM info
WHERE info_prg = 'compte.php'
AND info_clef IN (
'mobile_invite_conflict_signed_as',
'mobile_invite_conflict_for',
'mobile_invite_conflict_btn_logout',
'mobile_invite_conflict_btn_stay',
'mobile_no_acces_v2',
'inscr_gestion_mobile_title',
'inscr_gestion_login_user',
'inscr_gestion_login_pass',
'inscr_gestion_login_btn',
'inscr_gestion_login_intro',
'inscr_gestion_login_err_user',
'inscr_gestion_login_err_pass',
'inscr_gestion_choose_event',
'inscr_gestion_back_events',
'tableau_promoteur_menueinscription_v2',
'eve_acces_promoteur_access_denied',
'eve_acces_promoteur_btn_back',
'eve_acces_promoteur_mail_new_subject',
'eve_acces_promoteur_mail_new_body',
'eve_acces_promoteur_mail_new_cta',
'eve_acces_promoteur_mail_existing_subject',
'eve_acces_promoteur_mail_existing_body',
'eve_acces_promoteur_mail_existing_cta',
'inscr_gestion_show_invoice',
'inscr_gestion_show_transaction',
'inscr_gestion_hide_transaction',
'inscr_gestion_renvoi',
'inscr_gestion_modifier_participant',
'inscr_gestion_search_prompt',
'inscr_gestion_annulation_titre',
'inscr_gestion_statut_annule',
'inscr_gestion_statut_transfert',
'inscr_gestion_back_bib',
'inscr_gestion_back_prev',
'inscr_gestion_back_full_account',
'inscr_gestion_back_mon_compte',
'inscr_gestion_chk_cancelled',
'inscr_gestion_rech_statut',
'inscr_gestion_rech_statut_all',
'inscr_gestion_rech_statut_n',
'inscr_gestion_bib_scan_found_search',
'inscr_gestion_bib_ocr_not_configured',
'inscr_gestion_bib_ocr_vision_prefix',
'inscr_gestion_bib_ocr_image_invalid',
'inscr_gestion_bib_ocr_network',
'inscr_gestion_err_load',
'inscr_gestion_err_network',
'inscr_gestion_err_refund',
'inscr_gestion_refund_ok',
'inscr_gestion_refund_cancel_hint',
'promoteur_hub_load_menu',
'promoteur_hub_load_dashboard',
'promoteur_hub_epreuves_title',
'promoteur_hub_produits_title',
'promoteur_hub_bibs_sold',
'promoteur_hub_restant',
'promoteur_hub_unlimited',
'promoteur_hub_prix_courant',
'promoteur_hub_prochain_prix',
'promoteur_hub_des',
'promoteur_hub_dossards_remis',
'promoteur_hub_liste_active',
'promoteur_hub_waiting_n',
'promoteur_hub_waiting_list',
'promoteur_hub_disponible',
'promoteur_hub_vendus_title',
'promoteur_hub_vendus_lbl',
'promoteur_hub_paniers_title',
'promoteur_hub_paniers_lbl',
'promoteur_hub_menu_features',
'promoteur_hub_flash_inscrits',
'promoteur_hub_flash_rempli',
'promoteur_hub_flash_places',
'promoteur_hub_flash_revenus',
'promoteur_hub_badge_completes',
'promoteur_hub_badge_presque',
'promoteur_hub_badge_attente',
'promoteur_hub_badge_limite',
'promoteur_hub_ajax_session',
'promoteur_hub_ajax_invalid',
'promoteur_hub_ajax_denied',
'promoteur_hub_ajax_not_found',
'promoteur_hub_ajax_error',
'promoteur_hub_rapport_chrono',
'promoteur_hub_rapport_finances',
'promoteur_hub_rapport_finances_all',
'promoteur_hub_rapport_finances_adh',
'promoteur_hub_rapport_finances_eve',
'promoteur_hub_rapport_adhesions',
'promoteur_hub_rapport_adhesions_annuelles',
'promoteur_hub_rapport_finances_capitaines',
'promoteur_hub_rapport_paiements',
'promoteur_hub_no_features'
);
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation) VALUES
('mobile_invite_conflict_signed_as', 'fr', 'Vous êtes actuellement connecté en tant que %name%.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('mobile_invite_conflict_signed_as', 'en', 'You are currently signed in as %name%.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('mobile_invite_conflict_for', 'fr', 'Cette invitation concerne le compte %name%%mail_part%. Déconnectez-vous d''abord, puis reconnectez-vous avec ce compte.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('mobile_invite_conflict_for', 'en', 'This invitation is for %name%%mail_part%. Sign out first, then sign in with that account.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('mobile_invite_conflict_btn_logout', 'fr', 'Se déconnecter et continuer', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('mobile_invite_conflict_btn_logout', 'en', 'Sign out and continue', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('mobile_invite_conflict_btn_stay', 'fr', 'Rester sur mon compte actuel', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('mobile_invite_conflict_btn_stay', 'en', 'Stay on my current account', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('mobile_no_acces_v2', 'fr', 'Aucun accès inscriptions mobile (v2) n''est actif pour ce compte.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('mobile_no_acces_v2', 'en', 'No active mobile registration access (v2) for this account.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_mobile_title', 'fr', 'Inscriptions mobile', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_mobile_title', 'en', 'Mobile registrations', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_user', 'fr', 'Nom d''utilisateur', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_user', 'en', 'Username', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_pass', 'fr', 'Mot de passe', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_pass', 'en', 'Password', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_btn', 'fr', 'Connexion', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_btn', 'en', 'Sign in', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_intro', 'fr', 'Connectez-vous pour accéder aux inscriptions mobile.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_intro', 'en', 'Sign in to access mobile registrations.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_err_user', 'fr', 'Veuillez entrer votre nom d''usager', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_err_user', 'en', 'Please enter your username', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_err_pass', 'fr', 'Veuillez entrer votre mot de passe', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_login_err_pass', 'en', 'Please enter your password', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_choose_event', 'fr', 'Choisir un événement', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_choose_event', 'en', 'Choose an event', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_back_events', 'fr', 'Événements', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_back_events', 'en', 'Events', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('tableau_promoteur_menueinscription_v2', 'fr', 'Inscriptions V2', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('tableau_promoteur_menueinscription_v2', 'en', 'Registrations V2', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_access_denied', 'fr', 'Accès refusé.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_access_denied', 'en', 'Access denied.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_btn_back', 'fr', 'Retour', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_btn_back', 'en', 'Back', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_new_subject', 'fr', 'Accès promoteur — créez votre mot de passe', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_new_subject', 'en', 'Promoter access — set your password', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_new_body', 'fr', 'Bonjour %prenom%,<br><br>Un accès vous a été accordé pour <strong>%eve_nom%</strong> (kit : %kit%).<br><br>Un compte a été créé avec le courriel <strong>%login%</strong>.<br>Cliquez ci-dessous pour choisir votre mot de passe.<br><br>Ensuite, connectez-vous ici pour travailler sur le terrain :<br><a href="%mobile_url%">%mobile_url%</a>', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_new_body', 'en', 'Hello %prenom%,<br><br>You were granted access to <strong>%eve_nom%</strong> (kit: %kit%).<br><br>An account was created with <strong>%login%</strong>.<br>Click below to set your password.<br><br>Then sign in here for field use:<br><a href="%mobile_url%">%mobile_url%</a>', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_new_cta', 'fr', 'Choisir mon mot de passe', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_new_cta', 'en', 'Set my password', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_existing_subject', 'fr', 'Nouvel accès — %eve_nom%', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_existing_subject', 'en', 'New access — %eve_nom%', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_existing_body', 'fr', 'Bonjour %prenom%,<br><br>Un accès vous a été accordé pour <strong>%eve_nom%</strong> (kit : %kit%).<br><br>Ouvrez le lien ci-dessous et connectez-vous avec le compte <strong>%login%</strong> (si un autre compte est déjà ouvert, vous serez invité à vous déconnecter).', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_existing_body', 'en', 'Hello %prenom%,<br><br>You were granted access to <strong>%eve_nom%</strong> (kit: %kit%).<br><br>Open the link below and sign in as <strong>%login%</strong> (if another account is already open, you will be asked to sign out).', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_existing_cta', 'fr', 'Ouvrir l''accès (mobile)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('eve_acces_promoteur_mail_existing_cta', 'en', 'Open access (mobile)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_show_invoice', 'fr', 'Afficher la facture', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_show_invoice', 'en', 'Show invoice', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_show_transaction', 'fr', 'Afficher la transaction', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_show_transaction', 'en', 'Show transaction', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_hide_transaction', 'fr', 'Masquer la transaction', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_hide_transaction', 'en', 'Hide transaction', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_renvoi', 'fr', 'Retourner confirmation', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_renvoi', 'en', 'Resend confirmation', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_modifier_participant', 'fr', 'Modifier l''inscription', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_modifier_participant', 'en', 'Edit registration', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_search_prompt', 'fr', 'Utilisez la recherche ci-dessus pour afficher les inscriptions. Laissez les champs vides et lancez la recherche pour toutes les afficher.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_search_prompt', 'en', 'Use the search above to display registrations. Leave the fields empty and search to show them all.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_annulation_titre', 'fr', 'Statut de l''inscription', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_annulation_titre', 'en', 'Registration status', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_statut_annule', 'fr', 'Annulée', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_statut_annule', 'en', 'Cancelled', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_statut_transfert', 'fr', 'Transférée', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_statut_transfert', 'en', 'Transferred', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_back_bib', 'fr', 'Retour aux dossards', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_back_bib', 'en', 'Back to bibs', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_back_prev', 'fr', 'Retour', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_back_prev', 'en', 'Back', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_back_full_account', 'fr', 'Retour au tableau de bord', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_back_full_account', 'en', 'Back to dashboard', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_back_mon_compte', 'fr', 'Retour à Mon compte', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_back_mon_compte', 'en', 'Back to My account', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_chk_cancelled', 'fr', 'Montrer les inscriptions annulées ou transférées', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_chk_cancelled', 'en', 'Show cancelled or transferred registrations', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_rech_statut', 'fr', 'Statut de course', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_rech_statut', 'en', 'Race status', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_rech_statut_all', 'fr', 'Tous les statuts', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_rech_statut_all', 'en', 'All statuses', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_rech_statut_n', 'fr', '%d sélectionnés', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_rech_statut_n', 'en', '%d selected', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_bib_scan_found_search', 'fr', 'Numéro %s détecté — recherche...', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_bib_scan_found_search', 'en', 'Number %s detected — searching...', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_bib_ocr_not_configured', 'fr', 'OCR non configuré (clé Vision absente sur le serveur).', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_bib_ocr_not_configured', 'en', 'OCR not configured (Vision API key missing on server).', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_bib_ocr_vision_prefix', 'fr', 'Erreur Vision : ', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_bib_ocr_vision_prefix', 'en', 'Vision error: ', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_bib_ocr_image_invalid', 'fr', 'Image invalide.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_bib_ocr_image_invalid', 'en', 'Invalid image capture.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_bib_ocr_network', 'fr', 'Erreur réseau ou capture.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_bib_ocr_network', 'en', 'Network or capture error.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_err_load', 'fr', 'Erreur de chargement.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_err_load', 'en', 'Loading error.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_err_network', 'fr', 'Erreur réseau.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_err_network', 'en', 'Network error.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_err_refund', 'fr', 'Erreur remboursement.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_err_refund', 'en', 'Refund error.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_refund_ok', 'fr', 'Remboursement effectué.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_refund_ok', 'en', 'Refund completed.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_refund_cancel_hint', 'fr', 'Votre transaction a été remboursée. Si vous voulez aussi l''annuler dans le système d''inscription :', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('inscr_gestion_refund_cancel_hint', 'en', 'Your transaction has been refunded. If you also want to cancel it in the registration system:', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_load_menu', 'fr', 'Chargement du menu…', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_load_menu', 'en', 'Loading menu…', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_load_dashboard', 'fr', 'Chargement du tableau de bord…', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_load_dashboard', 'en', 'Loading dashboard…', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_epreuves_title', 'fr', 'Épreuves en vente', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_epreuves_title', 'en', 'Events for sale', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_produits_title', 'fr', 'Produits en vente', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_produits_title', 'en', 'Products for sale', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_bibs_sold', 'fr', 'dossards vendus', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_bibs_sold', 'en', 'bibs sold', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_restant', 'fr', 'restant', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_restant', 'en', 'left', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_unlimited', 'fr', 'illimité', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_unlimited', 'en', 'unlimited', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_prix_courant', 'fr', 'Prix courant', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_prix_courant', 'en', 'Current price', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_prochain_prix', 'fr', 'Prochain prix', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_prochain_prix', 'en', 'Next price', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_des', 'fr', 'dès', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_des', 'en', 'on', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_dossards_remis', 'fr', 'Dossards remis', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_dossards_remis', 'en', 'Bibs handed out', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_liste_active', 'fr', 'liste active', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_liste_active', 'en', 'list active', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_waiting_n', 'fr', 'en attente', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_waiting_n', 'en', 'waiting', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_waiting_list', 'fr', 'Liste d''attente', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_waiting_list', 'en', 'Waiting list', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_disponible', 'fr', 'disponible(s)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_disponible', 'en', 'available', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_vendus_title', 'fr', 'Vendus', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_vendus_title', 'en', 'Sold', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_vendus_lbl', 'fr', 'vendu(s)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_vendus_lbl', 'en', 'sold', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_paniers_title', 'fr', 'Dans des paniers incomplets', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_paniers_title', 'en', 'In incomplete carts', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_paniers_lbl', 'fr', 'panier(s)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_paniers_lbl', 'en', 'cart(s)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_menu_features', 'fr', 'Menu des fonctionnalités', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_menu_features', 'en', 'Features menu', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_flash_inscrits', 'fr', 'inscrits', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_flash_inscrits', 'en', 'registered', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_flash_rempli', 'fr', 'rempli', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_flash_rempli', 'en', 'filled', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_flash_places', 'fr', 'places restantes', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_flash_places', 'en', 'spots left', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_flash_revenus', 'fr', 'revenus est.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_flash_revenus', 'en', 'est. revenue', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_badge_completes', 'fr', 'complète(s)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_badge_completes', 'en', 'sold out', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_badge_presque', 'fr', 'presque pleine(s)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_badge_presque', 'en', 'almost full', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_badge_attente', 'fr', 'en attente', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_badge_attente', 'en', 'waiting', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_badge_limite', 'fr', 'limite', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_badge_limite', 'en', 'deadline', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_ajax_session', 'fr', 'Session expirée', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_ajax_session', 'en', 'Session expired', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_ajax_invalid', 'fr', 'Requête invalide', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_ajax_invalid', 'en', 'Invalid request', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_ajax_denied', 'fr', 'Accès refusé', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_ajax_denied', 'en', 'Access denied', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_ajax_not_found', 'fr', 'Événement introuvable', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_ajax_not_found', 'en', 'Event not found', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_ajax_error', 'fr', 'Erreur', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_ajax_error', 'en', 'Error', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_chrono', 'fr', 'chrono + questions', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_chrono', 'en', 'chrono + questions', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_finances', 'fr', 'Transactions-Finances', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_finances', 'en', 'Transactions-Finances', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_finances_all', 'fr', 'Transactions-Finances-Tout', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_finances_all', 'en', 'Transactions-Finances-All', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_finances_adh', 'fr', 'Transactions-Finances-Adhésions Seul', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_finances_adh', 'en', 'Transactions-Finances-Memberships only', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_finances_eve', 'fr', 'Transactions-Finances-Événements Seul', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_finances_eve', 'en', 'Transactions-Finances-Events only', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_adhesions', 'fr', 'adhésions actives', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_adhesions', 'en', 'active memberships', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_adhesions_annuelles', 'fr', 'liste d''adhésions annuelles', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_adhesions_annuelles', 'en', 'annual memberships list', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_finances_capitaines', 'fr', 'Transactions-Finances (capitaines seulement)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_finances_capitaines', 'en', 'Transactions-Finances (captains only)', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_paiements', 'fr', 'Paiements', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_rapport_paiements', 'en', 'Payments', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_no_features', 'fr', 'Aucune fonctionnalité disponible avec vos droits actuels.', '', 'compte.php', '', 0, 1, '', '', '', NOW()),
('promoteur_hub_no_features', 'en', 'No features available with your current permissions.', '', 'compte.php', '', 0, 1, '', '', '', NOW());