LLM-powered RESTful API that translates English text into Moroccan Darija using Google Gemini Flash Lite. Built with Jakarta REST, secured with basic authentication, and supports multiple clients including a Chrome extension, PHP, Python, and React Native apps, demonstrating scalable LLM integration.
# Darija Translator REST API
University mini project: a Java Maven WAR service that translates English text into Moroccan Darija (Latin letters only) using Google Gemini.
## Overview
This project exposes one secured REST endpoint:
- `POST /api/translate`
The backend is built with Jakarta REST (JAX-RS), Jersey, and Jetty.
It calls Gemini `generateContent` using:
- `
generativelanguage.googleap…`
The project also includes a Chrome extension (Manifest V3 + `chrome.sidePanel`) that can translate selected text directly from a web page.
## Features
- English to Moroccan Darija translation via Gemini
- Darija output requested in Latin letters only
- Basic Authentication for API access
- Clean input validation and upstream error handling
- Plain text translation response (not JSON)
- Chrome right-click flow: context menu `Translate` captures selection, opens side panel, sends text to backend, and shows translated result
## Technologies Used
- Java 17
- Maven (WAR packaging)
- Jakarta RESTful Web Services (`jakarta.ws.rs`)
- Jersey (JAX-RS implementation)
- Jetty Maven Plugin (local run)
- Jackson (JSON parsing)
- Google Gemini API (`generateContent`)
- Chrome Extension APIs (Manifest V3, contextMenus, sidePanel)
## Project Structure
- `pom.xml` - Maven dependencies and build plugins
- `src/main/java/com/example/translator/TranslatorApplication.java` - JAX-RS app config (`/api`)
- `src/main/java/com/example/translator/TranslatorResource.java` - `POST /api/translate` + Gemini integration
- `src/main/java/com/example/translator/auth/AuthenticationFilter.java` - Basic Authentication filter
- `src/main/webapp/WEB-INF/web.xml` - Jersey servlet mapping
- Chrome extension folder (Manifest V3) - context menu + side panel UI/logic
## Architecture Flow
1. User sends text (API client or Chrome extension)
2. Request hits `POST /api/translate`
3. `AuthenticationFilter` validates Basic Auth
4. `TranslatorResour …