MindForge
MindForge
DashboardHelp & Support
Dashboard
MindForge

Interview Preparation Bootcamp

Course progress

0%
0 of 177 modules complete
Start Here0/1
  • How to Use This Course
Data Structures & Algorithms0/27
  • Arrays and Hashing
  • Two Pointers
  • Sliding Window
  • Sliding Window: Harder Problems
  • Binary Search
  • Stacks
  • Practice Test: Arrays, Pointers, Windows, Search and Stacks
  • Trees: Traversals and Core Patterns
  • Binary Search Trees and Rebuilding a Tree
  • Tries (Prefix Trees)
  • Heaps and Priority Queues
  • Graphs: BFS and DFS
  • Topological Sort and Cycle Detection
  • Union-Find (Disjoint Set Union)
  • Practice Test: Trees, Heaps and Graphs
  • Dynamic Programming Basics
  • Dynamic Programming: Two Dimensions
  • Dynamic Programming: Hard String Matching
  • Backtracking
  • Backtracking: Constraint Satisfaction
  • Greedy Algorithms
  • Interval Problems
  • Bit Manipulation
  • Math and Geometry
  • String Manipulation
  • Pattern Recall and Mock Coding Rounds
  • Practice Test: DP, Backtracking, Greedy and More

System Design

Foundations0/16
  • The System Design Interview Framework
  • Back-of-the-Envelope Estimation
  • Networking and Protocols for Design
  • API Design and Idempotency
  • Load Balancing, Proxies, and Scaling Out
  • Caching and CDNs
  • Choosing a Database: Storage, Indexes and Transactions
  • Replication, Partitioning, and Sharding
  • CAP, PACELC, and Levels of Consistency
  • Messaging, Queues, and Event-Driven Architecture
  • Distributed Transactions and Data Integrity
  • Coordination, Consensus, and Distributed Locks
  • Reliability, Resilience, and Rate Limiting
  • Observability, Security, and Cost
  • System Design Cheat Sheet
  • Practice Test: System Design Foundations
Case Studies0/23
  • Design a URL Shortener
  • Design a Rate Limiter
  • Design a Notification Service
  • Design a Job Queue System
  • Design a Chat App (WhatsApp)
  • Design an Analytics Pipeline
  • Design a Multi-tenant SaaS Architecture
  • Design a Social Media Feed (Twitter/X)
  • Design a Search Autocomplete System
  • Design a File Storage Service (Dropbox)
  • Design Google Docs
  • Design a Code Review System
  • Design Netflix
  • Design YouTube
  • Design Spotify
  • Design Uber/Lyft
  • Design Airbnb
  • Design Ticketmaster (Eventbrite)
  • Design an E-commerce Cart, Checkout, and Catalog
  • Design a Payment System
  • Design a Logging and Monitoring System
  • Mock Design Rounds
  • Practice Test: System Design Case Studies
Low-Level Design0/19
  • The LLD Interview Framework and UML
  • OOP Foundations for Design
  • SOLID Principles
  • Creational Patterns
  • Structural Patterns
  • Behavioral Patterns I — Strategy, Observer, Command, State, Template Method
  • Behavioral Patterns II and Anti-Patterns
  • Concurrency in Low-Level Design
  • Design a Parking Lot
  • Design an Elevator System
  • Design a Movie Ticket Booking System
  • Design an Expense-Sharing App (Splitwise)
  • Design a Vending Machine and an ATM
  • Design a Rate Limiter and a Logging Framework
  • Design a Notification Service and an In-Memory Cache
  • Design Games — Tic-Tac-Toe, Snake and Ladder, Chess
  • Database Design for LLD
  • LLD Cheat Sheet and Recall Drill
  • Practice Test: Low-Level Design

Backend

Python0/5
  • How Python Runs Your Code
  • Functions Deep Dive: Closures, Generators, Context Managers, Scope
  • Classes Deep Dive: Method Types, MRO, Metaclasses
  • Standard Library and Serialization
  • Practice Test: Python
Django0/6
  • Django Request Lifecycle
  • Lab: Django Middleware — Request ID & Response Time
  • Django ORM and Querysets
  • Django's Cache Framework
  • Practice Test: Django
  • Django in Production: Debugging Labs
FastAPI0/5
  • FastAPI, ASGI, and Async
  • FastAPI Dependency Injection
  • FastAPI Background Tasks
  • Lab: FastAPI Async — Concurrent Aggregation
  • Practice Test: FastAPI
Databases (PostgreSQL)0/6
  • Indexing
  • Query Optimization
  • Transactions and Isolation
  • Migrations and Schema Changes
  • Hierarchical Data and Safe Concurrent Updates
  • Practice Test: Databases
Caching, Queues & Distributed Systems0/8
  • Redis Caching
  • Redis Advanced Patterns
  • Celery and Background Workers
  • Kafka and Message Queues
  • Async Pipelines
  • Distributed Systems Basics
  • Distributed Locks
  • Practice Test: Caching, Queues and Distributed Systems
APIs, Security & Deployment0/9
  • REST API Design
  • API Versioning and Error Handling
  • API Security and Authentication
  • WebSockets and Real-Time Systems
  • Docker and Containers
  • File Storage with S3
  • Testing Strategies
  • Mock Backend Round
  • Practice Test: APIs, Security and Deployment
Frontend0/38
  • HTML Document Structure and Semantics
  • CSS Box Model, Flexbox and Grid
  • CSS Architecture and Theming
  • CSS and Rendering Performance
  • Variables, Scope, Hoisting, and Truthiness
  • Functions, this, and Binding
  • Objects and Prototypal Inheritance
  • JavaScript Utility Patterns: Cloning, Caching, and Memory
  • Promises From Scratch
  • The Event Loop and Browser Rendering Pipeline
  • The DOM: Nodes, Events, and Traversal
  • Practice Test: HTML, CSS and JavaScript
  • React Rendering Fundamentals
  • React Hooks Internals
  • React Performance
  • Lab: React — Stateful Counter Component
  • State Management
  • State Machines in React
  • React Custom Hooks and Composition Patterns
  • TypeScript for React
  • React Testing
  • Practice Test: React
  • HTTP and Caching
  • Network Performance and Web Vitals
  • Code Splitting and Bundles
  • Virtualization
  • GraphQL and Data Fetching
  • Web Security
  • WebSockets and Real-time
  • SSR and Next.js
  • Micro-frontends
  • Build Tools and Bundling
  • Accessibility
  • Error Handling
  • Internationalization
  • Animation
  • Rapid Recall and Mock Frontend Rounds
  • Practice Test: Performance, Architecture and Production
Behavioral & Interview Day0/14
  • Resume and Project Walkthroughs
  • The STAR Method and Refining Your Stories
  • Conflict and Difficult Coworkers
  • Failures, Incidents, and Obstacles
  • Leadership, Mentorship, and Ownership
  • Teamwork, Communication, and Feedback
  • Growth and Handling Ambiguity
  • Career Goals, Why This Company, and Negotiation
  • Situational Questions
  • Company Research
  • Mock Behavioral Rounds
  • Interview Day
  • After the Interview
  • Practice Test: Behavioral and Interview Day
Internationalization
Course contents

Interview Preparation Bootcamp

Course progress

0%
0 of 177 modules complete
Start Here0/1
  • How to Use This Course
Data Structures & Algorithms0/27
  • Arrays and Hashing
  • Two Pointers
  • Sliding Window
  • Sliding Window: Harder Problems
  • Binary Search
  • Stacks
  • Practice Test: Arrays, Pointers, Windows, Search and Stacks
  • Trees: Traversals and Core Patterns
  • Binary Search Trees and Rebuilding a Tree
  • Tries (Prefix Trees)
  • Heaps and Priority Queues
  • Graphs: BFS and DFS
  • Topological Sort and Cycle Detection
  • Union-Find (Disjoint Set Union)
  • Practice Test: Trees, Heaps and Graphs
  • Dynamic Programming Basics
  • Dynamic Programming: Two Dimensions
  • Dynamic Programming: Hard String Matching
  • Backtracking
  • Backtracking: Constraint Satisfaction
  • Greedy Algorithms
  • Interval Problems
  • Bit Manipulation
  • Math and Geometry
  • String Manipulation
  • Pattern Recall and Mock Coding Rounds
  • Practice Test: DP, Backtracking, Greedy and More

System Design

Foundations0/16
  • The System Design Interview Framework
  • Back-of-the-Envelope Estimation
  • Networking and Protocols for Design
  • API Design and Idempotency
  • Load Balancing, Proxies, and Scaling Out
  • Caching and CDNs
  • Choosing a Database: Storage, Indexes and Transactions
  • Replication, Partitioning, and Sharding
  • CAP, PACELC, and Levels of Consistency
  • Messaging, Queues, and Event-Driven Architecture
  • Distributed Transactions and Data Integrity
  • Coordination, Consensus, and Distributed Locks
  • Reliability, Resilience, and Rate Limiting
  • Observability, Security, and Cost
  • System Design Cheat Sheet
  • Practice Test: System Design Foundations
Case Studies0/23
  • Design a URL Shortener
  • Design a Rate Limiter
  • Design a Notification Service
  • Design a Job Queue System
  • Design a Chat App (WhatsApp)
  • Design an Analytics Pipeline
  • Design a Multi-tenant SaaS Architecture
  • Design a Social Media Feed (Twitter/X)
  • Design a Search Autocomplete System
  • Design a File Storage Service (Dropbox)
  • Design Google Docs
  • Design a Code Review System
  • Design Netflix
  • Design YouTube
  • Design Spotify
  • Design Uber/Lyft
  • Design Airbnb
  • Design Ticketmaster (Eventbrite)
  • Design an E-commerce Cart, Checkout, and Catalog
  • Design a Payment System
  • Design a Logging and Monitoring System
  • Mock Design Rounds
  • Practice Test: System Design Case Studies
Low-Level Design0/19
  • The LLD Interview Framework and UML
  • OOP Foundations for Design
  • SOLID Principles
  • Creational Patterns
  • Structural Patterns
  • Behavioral Patterns I — Strategy, Observer, Command, State, Template Method
  • Behavioral Patterns II and Anti-Patterns
  • Concurrency in Low-Level Design
  • Design a Parking Lot
  • Design an Elevator System
  • Design a Movie Ticket Booking System
  • Design an Expense-Sharing App (Splitwise)
  • Design a Vending Machine and an ATM
  • Design a Rate Limiter and a Logging Framework
  • Design a Notification Service and an In-Memory Cache
  • Design Games — Tic-Tac-Toe, Snake and Ladder, Chess
  • Database Design for LLD
  • LLD Cheat Sheet and Recall Drill
  • Practice Test: Low-Level Design

Backend

Python0/5
  • How Python Runs Your Code
  • Functions Deep Dive: Closures, Generators, Context Managers, Scope
  • Classes Deep Dive: Method Types, MRO, Metaclasses
  • Standard Library and Serialization
  • Practice Test: Python
Django0/6
  • Django Request Lifecycle
  • Lab: Django Middleware — Request ID & Response Time
  • Django ORM and Querysets
  • Django's Cache Framework
  • Practice Test: Django
  • Django in Production: Debugging Labs
FastAPI0/5
  • FastAPI, ASGI, and Async
  • FastAPI Dependency Injection
  • FastAPI Background Tasks
  • Lab: FastAPI Async — Concurrent Aggregation
  • Practice Test: FastAPI
Databases (PostgreSQL)0/6
  • Indexing
  • Query Optimization
  • Transactions and Isolation
  • Migrations and Schema Changes
  • Hierarchical Data and Safe Concurrent Updates
  • Practice Test: Databases
Caching, Queues & Distributed Systems0/8
  • Redis Caching
  • Redis Advanced Patterns
  • Celery and Background Workers
  • Kafka and Message Queues
  • Async Pipelines
  • Distributed Systems Basics
  • Distributed Locks
  • Practice Test: Caching, Queues and Distributed Systems
APIs, Security & Deployment0/9
  • REST API Design
  • API Versioning and Error Handling
  • API Security and Authentication
  • WebSockets and Real-Time Systems
  • Docker and Containers
  • File Storage with S3
  • Testing Strategies
  • Mock Backend Round
  • Practice Test: APIs, Security and Deployment
Frontend0/38
  • HTML Document Structure and Semantics
  • CSS Box Model, Flexbox and Grid
  • CSS Architecture and Theming
  • CSS and Rendering Performance
  • Variables, Scope, Hoisting, and Truthiness
  • Functions, this, and Binding
  • Objects and Prototypal Inheritance
  • JavaScript Utility Patterns: Cloning, Caching, and Memory
  • Promises From Scratch
  • The Event Loop and Browser Rendering Pipeline
  • The DOM: Nodes, Events, and Traversal
  • Practice Test: HTML, CSS and JavaScript
  • React Rendering Fundamentals
  • React Hooks Internals
  • React Performance
  • Lab: React — Stateful Counter Component
  • State Management
  • State Machines in React
  • React Custom Hooks and Composition Patterns
  • TypeScript for React
  • React Testing
  • Practice Test: React
  • HTTP and Caching
  • Network Performance and Web Vitals
  • Code Splitting and Bundles
  • Virtualization
  • GraphQL and Data Fetching
  • Web Security
  • WebSockets and Real-time
  • SSR and Next.js
  • Micro-frontends
  • Build Tools and Bundling
  • Accessibility
  • Error Handling
  • Internationalization
  • Animation
  • Rapid Recall and Mock Frontend Rounds
  • Practice Test: Performance, Architecture and Production
Behavioral & Interview Day0/14
  • Resume and Project Walkthroughs
  • The STAR Method and Refining Your Stories
  • Conflict and Difficult Coworkers
  • Failures, Incidents, and Obstacles
  • Leadership, Mentorship, and Ownership
  • Teamwork, Communication, and Feedback
  • Growth and Handling Ambiguity
  • Career Goals, Why This Company, and Negotiation
  • Situational Questions
  • Company Research
  • Mock Behavioral Rounds
  • Interview Day
  • After the Interview
  • Practice Test: Behavioral and Interview Day
Browsing without an account — progress is saved in this browser only.Sign in to save it

Internationalization

Reading30 min

Internationalization questions test whether you know that "translate the strings" is only the easy 10% of the job. The hard part is pluralization rules, locale-aware formatting, right-to-left layout, and not shipping every language's translations to every single user.

The main ways to translate an app

Approach How it works Trade-off
Key-based lookup (react-intl, react-i18next) t("welcome.message") maps to a translated string per locale Needs discipline to keep keys and translations in sync, though tooling can flag missing ones
ICU MessageFormat Rich format strings inside the value handle plurals, gender, interpolation More powerful pluralization, steeper syntax
Native Intl API Built into the browser, for numbers, dates, lists, relative time, plural rules Only formatting, no phrases, no string management

Most real apps combine the first and third: a translation library for UI copy, and Intl for locale-aware formatting of dates, numbers, and currency, since Intl already knows every locale's formatting rules, writing your own would be redundant and easy to get wrong.

react-intl (FormatJS)

json
// messages/en.json
{ "welcome": "Welcome back, {name}!", "cart.itemCount": "{count, plural, =0 {No items} one {# item} other {# items}} in your cart" }
json
// messages/fr.json
{ "welcome": "Content de vous revoir, {name} !", "cart.itemCount": "{count, plural, =0 {Aucun article} one {# article} other {# articles}} dans votre panier" }
tsx
function App({ locale }: { locale: "en" | "fr" }) {
  return <IntlProvider locale={locale} messages={messages[locale]} defaultLocale="en"><Dashboard /></IntlProvider>;
}
function Dashboard() {
  const intl = useIntl();
  return (
    <div>
      <h1><FormattedMessage id="welcome" values={{ name: "Jane" }} /></h1>
      <p>{intl.formatMessage({ id: "cart.itemCount" }, { count: 3 })}</p>
    </div>
  );
}

The {count, plural, =0 {...} one {...} other {...}} syntax is ICU MessageFormat, and it's the actual reason to reach for react-intl over a simpler key-value library. Pluralization isn't "singular versus plural" in most languages, some have separate forms for one, two, few, many, and everything else. ICU's plural categories map onto whichever subset a given locale actually needs, applying the right grammatical rule automatically through Intl.PluralRules underneath.

Remember: a manual count === 1 ? "item" : "items" check only handles English. ICU MessageFormat handles the languages that need more than two plural forms.

Sign in to try this knowledge check.

Loading translations lazily, per locale

Shipping every locale's bundle to every visitor wastes bytes, an English visitor doesn't need the French, German, and Japanese translation files downloaded alongside their page. Load translations the same way you'd code-split a route.

tsx
async function loadMessages(locale: string) {
  return (await import(`./messages/${locale}.json`)).default;
}

function App() {
  const [locale, setLocale] = useState(detectLocale());
  const [messages, setMessages] = useState<Record<string, string> | null>(null);
  useEffect(() => { loadMessages(locale).then(setMessages); }, [locale]);
  if (!messages) return <Spinner />;
  return <IntlProvider locale={locale} messages={messages}><Dashboard /></IntlProvider>;
}

function detectLocale(): string {
  const supported = ["en", "fr", "de", "ja"];
  const browserLocale = navigator.language.split("-")[0];
  return supported.includes(browserLocale) ? browserLocale : "en";
}

In a framework like Next.js, the routing layer itself, [locale] dynamic segments, next-intl, resolves the locale from the URL path or the Accept-Language header on the server, and serves only that one locale's bundle, skipping a client-side fetch waterfall on the very first load.

Remember: load one locale's translations on demand, not every locale up front. An English visitor should never download the French bundle.

Formatting with Intl, never by hand

The native Intl API is the right tool for formatting. Never hand-roll date or currency formatting, decimal separators, thousands separators, date field order, and currency symbol placement vary in ways that are easy to get wrong and expensive to keep maintaining yourself.

ts
new Intl.NumberFormat("en-US").format(1234567.89); // "1,234,567.89"
new Intl.NumberFormat("de-DE").format(1234567.89); // "1.234.567,89"

new Intl.NumberFormat("en-US", { style: "currency", currency: "USD" }).format(49.99); // "$49.99"
new Intl.NumberFormat("de-DE", { style: "currency", currency: "EUR" }).format(49.99); // "49,99 €"

new Intl.DateTimeFormat("en-US").format(new Date("2026-07-16")); // "7/16/2026"
new Intl.DateTimeFormat("en-GB").format(new Date("2026-07-16")); // "16/07/2026"

const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
rtf.format(-3, "day"); // "3 days ago"

new Intl.ListFormat("en", { type: "conjunction" }).format(["Alice", "Bob", "Carol"]); // "Alice, Bob, and Carol"

React components typically wrap these to avoid rebuilding a formatter, which has real construction cost, on every single render.

tsx
function useCurrencyFormatter(locale: string, currency: string) {
  return useMemo(() => new Intl.NumberFormat(locale, { style: "currency", currency }), [locale, currency]);
}

react-intl's FormattedDate, FormattedNumber, and FormattedRelativeTime components are thin wrappers around exactly these Intl constructors, plus this same memoization, plus reading the active locale from context automatically.

Remember: never build your own date or currency formatting logic. Intl already encodes every locale's actual rules correctly.

Sign in to try this knowledge check.

RTL: the whole layout flips, not just the text

A handful of widely-used languages, Arabic, Hebrew, Persian, Urdu, are right-to-left, and getting this right means more than mirroring the text, the entire layout direction flips.

html
<html dir="rtl" lang="ar">

Setting dir="rtl" on <html>, or any container, flips text alignment, flexbox and grid item order (with zero JSX changes needed), the visual direction margin/padding/border shorthand apply, and native form control alignment, all automatically, because these are direction-aware properties by the CSS spec itself, not something needing JavaScript to flip.

The CSS mistake to avoid: physical properties, margin-left, padding-right, text-align: left, never flip with dir="rtl". They stay pinned to the physical left or right no matter the reading direction, which breaks the layout in RTL. Logical properties flip automatically, since they're defined relative to text flow, not a fixed screen side.

css
/* Bad: pinned to physical left, breaks visually in RTL */
.card { margin-left: 16px; text-align: left; }
/* Good: logical properties, correct in both LTR and RTL automatically */
.card { margin-inline-start: 16px; text-align: start; }
Physical (avoid) Logical (prefer)
margin-left / margin-right margin-inline-start / margin-inline-end
padding-left / padding-right padding-inline-start / padding-inline-end
left / right (positioning) inset-inline-start / inset-inline-end
text-align: left/right text-align: start/end
border-left / border-right border-inline-start / border-inline-end

Icons that show direction, a "back" arrow, a "next" chevron, need to mirror in RTL too, and that's not automatic, it needs explicit handling, usually scoped to [dir="rtl"].

css
[dir="rtl"] .back-arrow-icon { transform: scaleX(-1); }

Remember: a physical property like margin-left stays pinned left in RTL and breaks. A logical property like margin-inline-start flips correctly on its own.

Sign in to try this knowledge check.

What breaks past the obvious date and currency cases

Pluralization is not binary in many languages, Russian and Polish have several plural forms depending on the exact count, and Intl.PluralRules/ICU MessageFormat handle this correctly where a manual check simply doesn't generalize. Name order and formality vary too, some locales expect the family name before the given name, or need formal and informal address forms English doesn't have at all. Text expansion is a layout concern worth naming out loud: German and Finnish UI strings routinely run 30 to 40 percent longer than the English original, and a layout built to fit English exactly visibly breaks once translated, so fixed-width buttons and labels should be designed to tolerate that from the start.

The failures that actually show up in production rarely come from a missing translation key. They come from formatting logic hardcoded for one locale and never revisited: a price built with string concatenation instead of Intl.NumberFormat, a plural check that only handles English, a fixed-width button that clips German text. Treating Intl and ICU pluralization as the default from day one, rather than a retrofit once a second locale ships, is what separates code that scales to new markets from code that needs a rewrite to get there.

Remember: the real internationalization bugs are almost never a missing translation key. They're formatting logic quietly hardcoded for one locale from the start.

PreviousError HandlingNextAnimation

Course progress

0%
0 of 177 modules complete

On this page

  • The main ways to translate an app
  • react-intl (FormatJS)
  • Loading translations lazily, per locale
  • Formatting with Intl, never by hand
  • RTL: the whole layout flips, not just the text
  • What breaks past the obvious date and currency cases