translate
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
// Démarrer la session si ce n'est pas déjà fait (souvent fait dans auth.php, mais on sécurise)
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
// 1. Changement de langue si l'utilisateur a cliqué sur un drapeau (?lang=ca ou ?lang=fr)
|
||||
if (isset($_GET['lang']) && in_array($_GET['lang'], ['fr', 'ca'])) {
|
||||
$_SESSION['app_lang'] = $_GET['lang'];
|
||||
}
|
||||
|
||||
// 2. Langue par défaut = Français
|
||||
$current_lang = $_SESSION['app_lang'] ?? 'fr';
|
||||
|
||||
// 3. Chargement du bon dictionnaire
|
||||
$lang_file = __DIR__ . '/lang/' . $current_lang . '.php';
|
||||
if (file_exists($lang_file)) {
|
||||
$GLOBALS['translations'] = include $lang_file;
|
||||
} else {
|
||||
$GLOBALS['translations'] = [];
|
||||
}
|
||||
|
||||
// 4. La fonction magique de traduction
|
||||
// Si le mot existe dans le dictionnaire on l'affiche, sinon on affiche la clé par défaut
|
||||
if (!function_exists('tr')) {
|
||||
function tr($key) {
|
||||
return $GLOBALS['translations'][$key] ?? $key;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
// Dictionnaire Catalan
|
||||
return [
|
||||
'menu_home' => 'Inici',
|
||||
'menu_budget' => 'Pressupost',
|
||||
'menu_calendar' => 'Calendari',
|
||||
'menu_gifts' => 'Regals',
|
||||
'menu_holidays' => 'Viatges',
|
||||
'outbound_trip' => 'Anada',
|
||||
'return_trip' => 'Tornada',
|
||||
'btn_back' => '◀ Tornar',
|
||||
'btn_edit_bases' => '⚙️ Modificar les bases',
|
||||
'period' => 'Període',
|
||||
'budget_food' => 'Pressupost Menjar i Extres',
|
||||
'total_cost' => 'Cost Total Estimat',
|
||||
'paid' => 'Pagat',
|
||||
'provisioned' => 'Provisionat',
|
||||
'left_to_pay' => 'Pendent de pagament',
|
||||
'map_itinerary' => '🗺️ Itinerari',
|
||||
'outbound_trip' => 'Anada',
|
||||
'return_trip' => 'Tornada',
|
||||
'place_step' => '📍 Afegir una etapa',
|
||||
'step_details' => '📝 Detall de les etapes',
|
||||
'no_steps' => 'Cap etapa planificada.',
|
||||
'travel_notes' => '📝 Notes del viatge',
|
||||
'edit' => 'Modificar',
|
||||
|
||||
// --- Paraules diverses & Tooltips ---
|
||||
'error' => 'Error.',
|
||||
'to_be_defined' => 'A definir',
|
||||
'funded' => 'Finançat (Provisió)',
|
||||
'view_planning' => 'Veure el planning',
|
||||
'to_pay' => 'A pagar',
|
||||
'from_date' => 'Del',
|
||||
'to_date' => 'al',
|
||||
'passing_point' => 'Punt de pas (Cap despesa)',
|
||||
|
||||
// --- Modal : Afegir / Editar una etapa ---
|
||||
'search_location' => 'Cercar una ubicació geogràfica',
|
||||
'search_placeholder' => 'Ex: París, Ibis Barcelona...',
|
||||
'step_name' => 'Nom de l\'etapa',
|
||||
'arrival_optional' => 'Arribada el (Opcional)',
|
||||
'departure_optional' => 'Sortida el (Opcional)',
|
||||
'planned_expenses' => 'Despeses previstes',
|
||||
'add_expense' => '+ Afegir una despesa',
|
||||
'save_favorite' => 'Guardar als meus preferits',
|
||||
|
||||
// --- Botons genèrics ---
|
||||
'btn_delete' => 'Eliminar',
|
||||
'btn_cancel' => 'Cancel·lar',
|
||||
'btn_save' => 'Guardar',
|
||||
'btn_close' => 'Tancar',
|
||||
'planning_title' => 'Planning',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
// Dictionnaire Français
|
||||
return [
|
||||
'menu_home' => 'Accueil',
|
||||
'menu_budget' => 'Budget',
|
||||
'menu_calendar' => 'Calendrier',
|
||||
'menu_gifts' => 'Cadeaux',
|
||||
'menu_holidays' => 'Voyages',
|
||||
'outbound_trip' => 'Aller',
|
||||
'btn_back' => '◀ Retour',
|
||||
'btn_edit_bases' => '⚙️ Modifier les bases',
|
||||
'period' => 'Période',
|
||||
'budget_food' => 'Budget Food & Extras',
|
||||
'total_cost' => 'Coût Total Estimé',
|
||||
'paid' => 'Payé',
|
||||
'provisioned' => 'Provisionné',
|
||||
'left_to_pay' => 'Reste à payer',
|
||||
'map_itinerary' => '🗺️ Itinéraire',
|
||||
'outbound_trip' => 'Aller',
|
||||
'return_trip' => 'Retour',
|
||||
'place_step' => '📍 Placer une étape',
|
||||
'step_details' => '📝 Détail des étapes',
|
||||
'no_steps' => 'Aucune étape planifiée.',
|
||||
'travel_notes' => '📝 Notes du voyage',
|
||||
'edit' => 'Modifier',
|
||||
|
||||
// --- Mots divers & Infobulles ---
|
||||
'error' => 'Erreur.',
|
||||
'to_be_defined' => 'À définir',
|
||||
'funded' => 'Financé (Provision)',
|
||||
'view_planning' => 'Voir le planning',
|
||||
'to_pay' => 'À payer',
|
||||
'from_date' => 'Du',
|
||||
'to_date' => 'au',
|
||||
'passing_point' => 'Point de passage (Aucune dépense)',
|
||||
|
||||
// --- Modale : Placer / Éditer une étape ---
|
||||
'search_location' => 'Rechercher un lieu géographique',
|
||||
'search_placeholder' => 'Ex: Paris, Ibis Barcelone...',
|
||||
'step_name' => 'Nom de l\'étape',
|
||||
'arrival_optional' => 'Arrivée le (Optionnel)',
|
||||
'departure_optional' => 'Départ le (Optionnel)',
|
||||
'planned_expenses' => 'Dépenses prévues',
|
||||
'add_expense' => '+ Ajouter une dépense',
|
||||
'save_favorite' => 'Sauvegarder dans mes favoris',
|
||||
|
||||
// --- Boutons génériques ---
|
||||
'btn_delete' => 'Supprimer',
|
||||
'btn_cancel' => 'Annuler',
|
||||
'btn_save' => 'Enregistrer',
|
||||
'btn_close' => 'Fermer',
|
||||
'planning_title' => 'Planning',
|
||||
|
||||
];
|
||||
Reference in New Issue
Block a user