A full-stack web application that streamlines every aspect of a professional translation business — from project intake to invoicing.
Translation Management System (TMS) gives translation agencies and freelance teams a single platform to manage the complete project lifecycle: from receiving a client order and assigning translators, all the way through delivery, invoicing, and financial reporting.
Who is this for?
Translation agency managers, project coordinators, and business owners who need structured control over their workflows, team, and financials — without relying on spreadsheets.
| Area | What you can do |
|---|---|
| 📁 Projects | Create, update, archive, and track full project lifecycle with sub-project support |
| 👥 Translators | Manage translator profiles, assignments, payments, and applicants |
| 🏢 Clients | Maintain a full client directory with contact and billing info |
| 📦 Archive | Safely archive completed projects and restore them on demand |
| 📊 Statistics | Financial reporting across all projects and time periods |
| 🧾 Invoices | Track all invoiced projects in one dedicated view |
| 📧 Email Audit | Review a log of all failed notification emails |
| ⚙️ Settings | Admin-controlled system variables: countries, currencies, translation areas, and more |
| 🗄️ Data Import | Bulk-import clients or translators from Excel / CSV files |
| 🔐 Users & Roles | Four access levels: admin, manager, translator, client |
┌─────────────────────────────────────────────────────────┐
│ Browser / Client │
│ (JSF / PrimeFaces / XHTML views) │
└───────────────────────────┬─────────────────────────────┘
│ HTTP
┌───────────────────────────▼─────────────────────────────┐
│ Apache Tomcat (WAR) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Spring MVC / JSF Layer │ │
│ │ Managed Beans │ Spring Security (Auth/Authz) │ │
│ └──────────────────┬──────────────────────────────┘ │
│ ┌──────────────────▼──────────────────────────────┐ │
│ │ Service Layer (Spring) │ │
│ │ Business Logic │ Email Notifications │ │
│ └──────────────────┬──────────────────────────────┘ │
│ ┌──────────────────▼──────────────────────────────┐ │
│ │ Data Access Layer (Hibernate) │ │
│ │ JPA Entities │ DAO Impl │ EHCache L2 │ │
│ └──────────────────┬──────────────────────────────┘ │
└─────────────────────┼───────────────────────────────────┘
│ JDBC
┌───────────▼───────────┐
│ Database │
│ H2 · MySQL · Postgres│
└───────────────────────┘
![]() Project List |
![]() Project Page |
![]() Project Details |
![]() Client Page |
![]() Translator Page |
![]() Archive |
![]() Data Import |
![]() Invoices |
![]() Statistics |
![]() Users |
![]() Settings |
![]() Email Audit |
- Overview
- Architecture
- Screenshots
- Getting Started
- Deployment
- Data Import API
- Built With
- Contributing
- Versioning
- Authors
- License
- Support & Donation
Clone the repository:
git clone https://github.com/sdrahnea/translation-management-system.git
cd translation-management-system| Tool | Version |
|---|---|
| Java (JDK) | 1.8+ |
| Apache Maven | 3.x |
| Apache Tomcat | Optional — embedded Spring Boot server is the default runtime |
| Database | H2 (dev) · MySQL 5.7+ · PostgreSQL 10+ |
Choose one of the supported databases:
No installation required. Configure the connection URL in application.properties:
spring.datasource.url=jdbc:h2:mem:tms
spring.datasource.username=sa
spring.datasource.password=spring.datasource.url=jdbc:h2:file:./data/tms
spring.datasource.username=sa
spring.datasource.password=CREATE DATABASE tms;MySQL 8.0.4+ note: Run the following to enable native password authentication:
ALTER USER '${USER}'@'localhost' IDENTIFIED WITH mysql_native_password BY '${PASSWORD}';
# Create a superuser (if needed)
createuser -U postgres -s tms_user
# Restore from a backup (optional)
pg_restore -d tms < /path/to/backup.sqlOn first startup, Hibernate auto-creates all tables and seeds reference data (project statuses, translation statuses, payment methods, education degrees, etc.).
mvn clean packageA successful build produces an executable Spring Boot archive:
[INFO] Building war: target/translation-management-system-2.1.0-SNAPSHOT.war
[INFO] BUILD SUCCESS
You can then run the application with Spring Boot directly:
java -jar target/translation-management-system-2.1.0-SNAPSHOT.warThe application runs as a Spring Boot web application with an embedded server. The default HTTP port is 8081 and the application context path is /tms.
mvn spring-boot:runmvn clean package
java -jar target/translation-management-system-2.1.0-SNAPSHOT.warOnce the application has started, open one of the following URLs in your browser:
http://localhost:8081/tms/
http://localhost:8081/tms/faces/login.xhtml
Default credentials:
| Username | Password |
|---|---|
admin |
123 |
⚠️ Change the default password immediately after the first login in a production environment.ℹ️ External Tomcat deployment is no longer the primary runtime path documented here; prefer the Spring Boot commands above.
TMS supports bulk import of clients and translators via Excel (.xlsx) or CSV files through the Database page (admin only).
POST /mytemplate/database.xhtml
Content-Type: multipart/form-data
file=@translators.xlsx
importType=TRANSLATORfirstName,lastName,email,phone,country,translationArea,languagePair
Jane,Doe,jane.doe@example.com,+1-555-0100,US,Legal,EN-FR
John,Smith,john.smith@example.com,+44-20-7946-0958,GB,Technical,EN-DE{
"status": "success",
"imported": 2,
"skipped": 0,
"errors": []
}{
"status": "partial",
"imported": 1,
"skipped": 1,
"errors": [
{
"row": 2,
"field": "email",
"message": "Duplicate email address: john.smith@example.com"
}
]
}The same format applies for client imports — use
importType=CLIENT.
| Technology | Purpose |
|---|---|
| Java 1.8 | Core application language |
| Spring Framework 4.x | Dependency injection, MVC, transactions |
| Spring Security | Authentication & role-based access control |
| Hibernate 5.x | ORM / data persistence (JPA) |
| PrimeFaces | Rich JSF UI component library |
| EHCache | Second-level Hibernate cache |
| Apache Tomcat | Java EE web container |
| MySQL | Primary production database |
| H2 | Embedded database for development |
| PostgreSQL | Alternative production database |
| Maven | Build & dependency management |
Contributions, issues, and feature requests are welcome!
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Commit your changes:
git commit -m 'Add my feature' - Push to the branch:
git push origin feature/my-feature - Open a Pull Request
Please read CONTRIBUTING.md for the full code of conduct and contribution guidelines.
This project uses SemVer for versioning. See CHANGELOG.md for release history.
This project is licensed under the MIT License — see the license.md file for details.
If this project helped you, consider supporting its development:
| Method | Details |
|---|---|
| PayPal | Any amount is welcome 🙏 |
| EGLD | erd1t3t5m8v7862asdh48nq820shsmlmuw9jpm87qw25cvch7djpkapskgq4es |
| TRX / BTT | TRe8xSkGqpS73Nhk6bnvW34aiJoRTmZs8N |
| HOT / VET | 0x1ebfc62e2510f0a0558568223d1d101d0cf074b2 |
| TROY / PHB | bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23 · Memo: 100079140 |











