# EUROMA - Django Project

## Description

Site web dynamique pour le programme EUROMA (European Master in Advanced Computing), un programme Erasmus Mundus Joint Master Degree. Backend Django 5.1.x avec base de donnees SQLite (dev) / MySQL (prod).

## Structure du Projet

```
greentech/
├── manage.py
├── requirements.txt
├── greentech/                    # Configuration Django
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── apps/                      # Applications Django
│   ├── core/                  # Config site, carousel, stats
│   ├── universities/          # Universites partenaires
│   ├── program/               # Programme, cours, admissions
│   ├── team/                  # Professeurs, doctorants, etudiants
│   ├── research/              # Projets recherche, publications
│   ├── news/                  # Actualites et evenements
│   ├── contact/               # Contact et newsletter
│   └── traduction/            # Systeme de traduction multilingue
├── templates/                 # Templates Django
│   ├── base.html
│   ├── components/            # Composants reutilisables
│   └── [app]/                 # Templates par app
├── static/                    # Fichiers statiques
└── media/                     # Uploads (images)
```

## Commandes Frequentes

```bash
# Activer l'environnement virtuel
source ../.venv/bin/activate

# Lancer le serveur de developpement
python manage.py runserver

# Migrations
python manage.py makemigrations
python manage.py migrate

# Charger les fixtures
python manage.py loaddata apps/[app]/fixtures/[file].json

# Creer un superutilisateur
python manage.py createsuperuser

# Collecter les fichiers statiques (production)
python manage.py collectstatic
```

## Base de Donnees

- **Developpement**: SQLite (`db.sqlite3`)
- **Production**: MySQL/MariaDB 10.5+ (configurer dans `.env`)

## Acces Admin

- URL: `/admin/`
- Theme: Jazzmin
- Historique: django-simple-history

## Applications et Modeles Principaux

### core

- `SiteConfiguration`: Config globale du site
- `CarouselSlide`: Slides page d'accueil
- `ProgramStatistic`: Statistiques affichees
- `Partner`: Partenaires (EU, etc.)

### universities

- `University`: Universites partenaires
- `UniversityDepartment`: Departements
- `IndustrialPartner`: Partenaires industriels

### program

- `Program`: Infos programme master
- `Semester`, `Course`: Structure academique
- `Specialization`: Specialisations (IA, Big Data, etc.)
- `FAQItem`: Questions frequentes

### team

- `Person`: Modele de base (tous les membres)
- `Professor`: Extension professeurs
- `PhDStudent`: Doctorants
- `MasterStudent`: Etudiants master

### research

- `ResearchArea`: Domaines de recherche
- `ResearchProject`: Projets
- `Publication`: Publications scientifiques

### news

- `NewsCategory`: Categories d'actualites
- `NewsArticle`: Articles
- `Event`: Evenements

### contact

- `ContactInfo`: Coordonnees par departement
- `ContactMessage`: Messages recus
- `NewsletterSubscriber`: Abonnes newsletter

### traduction

- `Language`: Langues disponibles (fr, en, de, es, it)
- `Dictionnaire`: Traductions (ContentType, object_id, field, language, translation)

## Systeme de Traduction

### Configuration des modeles traduisibles

Fichier: `apps/traduction/registry.py`

```python
TRANSLATABLE_MODELS = {
    'news.newsarticle': ['title', 'excerpt', 'content'],
    'universities.university': ['name', 'description'],
    # ...
}
```

### Utilisation dans l'admin

```python
from apps.traduction.admin_mixins import TranslatableAdminMixin

@admin.register(MonModele)
class MonModeleAdmin(TranslatableAdminMixin, admin.ModelAdmin):
    pass
```

### Utilisation dans les templates

```django
{% load traduction_tags %}

{{ article|translate:'title' }}
{% get_translation article 'title' 'en' as title_en %}
{% language_selector %}
```

### Utilisation dans les vues

```python
from apps.traduction.helpers import get_translated_value

title = get_translated_value(article, 'title', request)
```

### Changer la langue

- Via URL: `?lang=en`
- Via vue: `/langue/set-language/en/`

### Dictionnaire JSON pour le frontend

Le systeme genere automatiquement des fichiers de traduction pour le frontend:

- `static/translations/dictionnaire.json` - Format JSON structure
- `static/translations/dictionnaire.js` - JavaScript avec fonctions utilitaires

**Regeneration automatique**: Les fichiers sont regeneres automatiquement quand les traductions changent dans l'admin.

**Regeneration manuelle**:

```bash
python manage.py generate_translations
python manage.py generate_translations --format=json  # JSON uniquement
python manage.py generate_translations --format=js    # JS uniquement
```

**Utilisation en JavaScript**:

```javascript
// Recuperer une traduction
var titre = getTranslation('news.newsarticle.1.title', 'en', 'Default Title');

// Recuperer toutes les traductions d'un objet
var translations = getObjectTranslations('news.newsarticle', 1, 'fr');
console.log(translations.title, translations.content);
```

## Conventions

- Langue du code: Anglais
- Langue du contenu: Francais
- Slugs: auto-generes depuis les titres
- Images: upload via admin dans `media/`
- Templates: Tailwind CSS via CDN

## Variables d'Environnement (.env)

```
DB_ENGINE=django.db.backends.mysql
DB_NAME=greentech_db
DB_USER=greentech_user
DB_PASSWORD=****
DB_HOST=127.0.0.1
DB_PORT=3306
```

## Dependances Principales

- Django 5.1.x
- django-environ
- django-jazzmin (admin theme)
- django-simple-history
- Pillow (images)
- mysqlclient (MySQL)

## Installation du Projet

### Commandes

```bash
# Importations des Pays

❯ python manage.py populate_countries

# Creation des Icones

❯ python manage.py seed_icons    
```

## Suite

zds
