The Problem
Requirements
- Support multiple languages (English, Spanish, French, etc.)
- Allow content updates without code deployments
- Maintain type safety with TypeScript
- Fast performance with minimal database queries
- Support for nested translation keys
- Admin panel for managing translations
Architecture Overview
Database Schema
Translation Entity
Backend Service Layer
Translation Service
API Controller
Translation Controller
Frontend Hook (Next.js)
useTranslation Hook
Usage in Components
Component Usage
Language Context Provider
Language Context
Key Features
1. In-Memory Caching
2. Automatic Cache Refresh
3. Namespace Support
4. Type Safety
5. Fallback Mechanism
Performance Optimizations
- Bulk Loading: All translations for a language are fetched in a single API call
- Client-Side Caching: Translations are cached in the browser's memory
- Lazy Loading: Only load translations for the current language
- CDN Caching: API responses can be cached at the CDN level for public endpoints
Admin Panel Integration
- View all translations in a table format
- Edit translations inline
- Add new languages
- Search and filter translations
- See which translations are missing for a language
Results
- Zero downtime for translation updates
- Sub-second translation retrieval times
- Easy content management for non-technical team members
- Scalability to handle hundreds of languages and thousands of keys
- Type safety with TypeScript support
Building a multilanguage system like this?
Let’s discuss architecture and edge cases.Lessons Learned
- Cache invalidation is crucial: The automatic refresh mechanism ensures updates propagate quickly without manual intervention.
- Design for scale: Even if you start with 2 languages, design the system to handle 20+ languages from the beginning.
- Provide fallbacks: Never let missing translations break the UI. Always have a fallback strategy.
- Monitor translation coverage: Track which keys are missing translations for each language to ensure completeness.
- Consider SEO: For public-facing pages, ensure URLs reflect the language (e.g., /en/about vs /es/about) for better SEO.

