# Localization

## Overview
The application supports **English** and **Arabic** with 80 translation files. Models with translatable fields use Spatie's `HasTranslations` trait.

## Supported Languages
- **English** (`en`) — Default
- **Arabic** (`ar`) — Right-to-left support with custom CSS

## Translation Files
80 files organized per module in `lang/{locale}/`:

| File | Purpose |
|------|---------|
| `activity.php` | Activity log labels |
| `admin_dashboard.php` | Admin dashboard translations |
| `admin_menu.php` | Admin menu labels |
| `announcement.php` | Announcement module |
| `classification.php` | Level classifications |
| `competition.php` | Competitions |
| `country.php` | Countries |
| `course.php` | Courses |
| `dashboard.php` | Dashboard |
| `exam.php` | Exams |
| `group.php` | Teams/Groups |
| `group_assignment.php` | Group assignments |
| `group_classroom.php` | Group classrooms |
| `group_exam.php` | Group exams |
| `group_homework.php` | Group homework |
| `lesson.php` | Lessons |
| `level.php` | Levels |
| `marathon.php` | Marathons |
| `marathon_competition.php` | Marathon competitions |
| `menu.php` | Menu labels |
| `notifications.php` | Notifications |
| `participation.php` | Participation system |
| `plan.php` | Plans |
| `problems.php` | Assessment problems |
| `program.php` | Programs |
| `settings.php` | Settings |
| `staff.php` | Staff |
| `student.php` | Students |
| `subscription.php` | Subscriptions |
| `training.php` | Trainings |
| `translation.php` | Translation management |
| `ucmas.php` | UCMAS strategy/operation labels |
| `user.php` | Users |
| `video.php` | Videos |

## Translatable Models
Models using `Spatie\Translatable\HasTranslations`:
- `Program` (name, description)
- `Course` (title, description)
- `Lesson` (title, description, address, location, resources)
- `Team` (name)
- `Assessment` (title, description, purpose)
- `Marathon` (title, description, purpose)
- `LevelClassification` (name, description, purpose)
- `RankingTitle` (name, description, purpose)
- `Video` (title, description)
- `Announcement` (title)

Translatable fields are stored as JSON in the database.

## Language Switcher
Uses `TomatoPHP\FilamentLanguageSwitcher\FilamentLanguageSwitcherPlugin`:
- Available in both Admin and Program panels
- Users can switch between EN/AR

## User Language Preference
- `User.pref_language` field stores preferred language
- `InteractsWithLanguages` trait handles language-based queries

## Arabic RTL Support
- Custom CSS: `resources/css/arabic.css`
- Adjusts layout for right-to-left display

## Translation Management
- Admin page: `ManageTranslations` (`app/Filament/Pages/ManageTranslations.php`)
- `TranslationManager` service (`app/Services/TranslationManager.php`)

## Localization in Notifications
- `BaseNotification` applies `__()` to notification title/body for translation
- `DatabaseNotification` model supports translatable notification data

---

# Supplementary Config Files

This section documents utility/framework-level config files that are not covered in module-specific documentation.

## Print Config (`config/print.php`)
Defines CSS classes for the print button component used in printed documents.

```php
'button' => ['classes' => [...]]  // Tailwind CSS classes for print button styling
```

**Usage:** Referenced in `resources/views/vendor/print/infolists/components/print-filament.blade.php` to style the print action button with matching Filament button styles.

## Favicon Fetcher (`config/favicon-fetcher.php`)
Configuration for the `ashallendesign/favicon-fetcher` package used to automatically fetch website favicons.

| Option | Default | Description |
|--------|---------|-------------|
| `default` | `http` | Driver: http, google-shared-stuff, favicon-kit, unavatar, favicon-grabber |
| `cache.prefix` | `favicon-fetcher` | Cache key prefix |
| `timeout` | `0` (no timeout) | HTTP request timeout in seconds |
| `connect_timeout` | `0` | Connection timeout in seconds |
| `verify_tls` | `env(FAVICON_FETCHER_VERIFY_TLS, true)` | TLS verification for HTTP requests |
| `user_agent` | `env(FAVICON_FETCHER_USER_AGENT)` | Custom User-Agent header |

## Blade Icons (`config/blade-icons.php`)
Configuration for the `blade-ui-kit/blade-icons` package, which provides the SVG icon rendering system used throughout Filament.

**Status:** All custom icon sets are commented out. The system relies on default icon sets provided by packages (Heroicons via `blade-heroicons`, plus additional icon set packages in `composer.json`).

**Key packages providing icons:**
- `blade-ui-kit/blade-heroicons` — Heroicons (Filament default)
- `blade-ui-kit/blade-icons` — Core icon engine
- `codeat3/*` — Multiple icon set packages (simple-icons, fluentui-system-icons, grommet-icons, etc.)
- `mallardduck/blade-lucide-icons` — Lucide icons
- Various other icon set packages

The config allows defining custom SVG icon directories, prefixes, fallback icons, default CSS classes, and Blade component settings. Components are enabled (`disabled: false`) with default component name `icon`.

Filament internally disables Blade icon components for admin panels via `DisableBladeIconComponents` middleware (to use its own rendering), so this config mainly applies to non-Filament Blade views.

## Filament GrapesJS (`config/filament-grapesjs.php`)
Configuration for the `Dotswan/FilamentGrapesjs` package, a drag-and-drop page builder plugin for Filament.

**Status:** The plugin is commented out in `ProgramPanelProvider` (`//->plugins([FilamentorPlugin::make(),])`) and no usage of this config was found in application code. The config exists but the feature is **disabled/inactive**.

The config allows adding custom CSS and JS assets for the page builder editor via the `assets.css` and `assets.js` arrays.
