📖 Scenario: You are building a simple Next.js app that shows a greeting message in different languages. The greeting text will come from server-side translations.
🎯 Goal: Create a Next.js server component that loads translation data and displays a greeting message based on a language code.
📋 What You'll Learn
Create a translations object with English and Spanish greetings
Add a variable to select the current language code
Use the language code to get the correct greeting from translations
Create a server component that renders the greeting message
💡 Why This Matters
🌍 Real World
Many websites need to show content in different languages depending on the user. Server components can load translations on the server for fast, SEO-friendly pages.
💼 Career
Understanding server component translations is important for building internationalized Next.js apps, a common requirement in web development jobs.
Progress0 / 4 steps
1
Create the translations data
Create a constant object called translations with two keys: en and es. Each key should have a greeting message string: 'Hello, world!' for English and '¡Hola, mundo!' for Spanish.
NextJS
Hint
Use a JavaScript object with keys en and es and assign the greeting strings as values.
2
Add a language code variable
Add a constant called lang and set it to the string 'es' to select Spanish as the current language.
NextJS
Hint
Use const lang = 'es'; to set the language code.
3
Get the greeting message using the language code
Create a constant called greeting and set it to the value from translations using the lang variable as the key.
NextJS
Hint
Use bracket notation: translations[lang] to get the greeting.
4
Create the server component to display the greeting
Create a default exported async function called Greeting that returns a JSX <h1> element containing the greeting constant.
NextJS
Hint
Define an async function named Greeting and return JSX with the greeting inside an <h1> tag.
Practice
(1/5)
1. What is the main benefit of using server component translations in Next.js?
easy
A. They send translated HTML directly from the server, improving performance and SEO.
B. They allow translations to be updated on the client without reloading the page.
C. They automatically translate user input in forms.
D. They enable real-time chat translations between users.
Solution
Step 1: Understand server component translations purpose
Server component translations generate translated HTML on the server before sending it to the browser.
Step 2: Identify benefits of server-side translation
This approach improves performance by reducing client work and boosts SEO by sending ready-to-read translated content.
Final Answer:
They send translated HTML directly from the server, improving performance and SEO. -> Option A
Quick Check:
Server translations = better performance and SEO [OK]
Hint: Server translations improve SEO by sending ready HTML [OK]
Common Mistakes:
Thinking translations happen on the client side
Confusing server translations with real-time chat features
Assuming translations update without page reload
2. Which is the correct way to import the translation function in a Next.js server component?
easy
A. import useTranslations from 'react-intl';
B. import { getTranslations } from 'next-intl/server';
C. import { useTranslation } from 'next-i18next';
D. import { useTranslations } from 'next/router';
Solution
Step 1: Identify the correct package for server translations
Next.js server component translations use the 'next-intl' package.
Step 2: Check the correct import syntax
The function is named 'getTranslations' and imported with curly braces from 'next-intl/server'.
Final Answer:
import { getTranslations } from 'next-intl/server'; -> Option B
Quick Check:
Correct import = getTranslations from next-intl/server [OK]
Hint: Use curly braces to import getTranslations from next-intl/server [OK]
Common Mistakes:
Using 'useTranslations' instead of 'getTranslations'
Importing from 'react-intl' or 'next-i18next' by mistake
Importing from 'next/router' which is unrelated
3. Given this server component code, what will be rendered if the locale is 'en' and translations contain { greeting: 'Hello' }?
import { getTranslations } from 'next-intl/server';
export default async function Greeting() {
const t = await getTranslations();
return <h1>{t('greeting')}</h1>;
}
medium
A.
Hello
B.
greeting
C. Error: Missing translation key
D.
undefined
Solution
Step 1: Understand getTranslations usage
The function, when awaited, returns a function 't' that looks up translation keys for the current locale.
Step 2: Check the translation key and locale
For locale 'en', 'greeting' key maps to 'Hello', so t('greeting') returns 'Hello'.
Final Answer:
<h1>Hello</h1> -> Option A
Quick Check:
t('greeting') = 'Hello' [OK]
Hint: t('key') returns translated string for current locale [OK]
Common Mistakes:
Expecting the key name to render instead of the value
Assuming an error if key exists
Thinking undefined is returned for existing keys
4. What is wrong with this server component code for translations?
import { getTranslations } from 'next-intl/server';
export default async function Welcome() {
const t = await getTranslations('common');
return <div>{t('welcome')}</div>;
}
Assuming translations for 'common' namespace are not loaded.
medium
A. It will throw an error because the 'common' namespace translations are missing.
B. It will silently render nothing for missing keys.
C. It will render the namespaced key 'common.welcome' as fallback text.
D. It will fallback to English translations automatically.
Solution
Step 1: Understand namespace usage in getTranslations
Passing 'common' scopes the lookup to keys prefixed with 'common.'.
Step 2: Check behavior when namespace translations are missing
If 'common.welcome' is missing, it falls back to rendering 'common.welcome'.
Final Answer:
It will render the namespaced key 'common.welcome' as fallback text. -> Option C
Quick Check:
Missing translation = fallback to namespaced id [OK]
Hint: Missing namespace translation falls back to 'common.welcome' [OK]
Common Mistakes:
Expecting an error instead of fallback text
Assuming silent failure with empty output
Thinking automatic fallback to English happens
5. You want to create a server component that shows a greeting in the user's locale and falls back to English if the translation is missing. Which approach correctly handles this?
hard
A. Wrap getTranslations() with a try-catch and return English string on error.
B. Load all locales on the server and use getTranslations() without fallback logic.
C. Use client-side translation hooks to handle fallback automatically.
D. Use getTranslations() and call t('greeting', {defaultMessage: 'Hello'}).
Solution
Step 1: Understand fallback behavior in server translations
Server translations fallback to the message id if key is missing.
Step 2: Implement fallback with defaultMessage
Use the defaultMessage option in t() to provide a custom English fallback string.
Final Answer:
Use getTranslations() and call t('greeting', {defaultMessage: 'Hello'}) -> Option D