diff --git a/FEATURES.md b/FEATURES.md index a7cf5459..fb6e2f3e 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -98,7 +98,7 @@ ## Internationalization -15 languages: English · Français · 日本語 · Español · Italiano · Danish · Deutsch · Nederlands · Português · Русский · Türkçe · 한국어 · Polski · Latviešu · 简体中文 · Українська +17 languages: Česky · Dansk · Deutsch · English · Español · Français · Italiano · Latviešu · Nederlands · Polski · Português · Türkçe · Русский · Українська · 한국어 · 日本語 · 简体中文 Automatic browser detection with persistent preference. Configurable locale URL prefix via `NEXT_PUBLIC_LOCALE_PREFIX`. diff --git a/components/providers/intl-provider.tsx b/components/providers/intl-provider.tsx index 8f4598e7..60193c61 100644 --- a/components/providers/intl-provider.tsx +++ b/components/providers/intl-provider.tsx @@ -4,13 +4,14 @@ import { useEffect, useState } from 'react'; import { NextIntlClientProvider } from 'next-intl'; import { useLocaleStore } from '@/stores/locale-store'; import csMessages from '@/locales/cs/common.json'; +import daMessages from '@/locales/da/common.json'; +import deMessages from '@/locales/de/common.json'; import enMessages from '@/locales/en/common.json'; +import esMessages from '@/locales/es/common.json'; import frMessages from '@/locales/fr/common.json'; +import itMessages from '@/locales/it/common.json'; import jaMessages from '@/locales/ja/common.json'; import koMessages from '@/locales/ko/common.json'; -import esMessages from '@/locales/es/common.json'; -import itMessages from '@/locales/it/common.json'; -import deMessages from '@/locales/de/common.json'; import lvMessages from '@/locales/lv/common.json'; import nlMessages from '@/locales/nl/common.json'; import plMessages from '@/locales/pl/common.json'; @@ -19,18 +20,18 @@ import ruMessages from '@/locales/ru/common.json'; import trMessages from '@/locales/tr/common.json'; import ukMessages from '@/locales/uk/common.json'; import zhMessages from '@/locales/zh/common.json'; -import daMessages from '@/locales/da/common.json'; // Pre-loaded translations (loaded at build time, not runtime) const ALL_MESSAGES = { cs: csMessages, + da: daMessages, + de: deMessages, en: enMessages, + es: esMessages, fr: frMessages, + it: itMessages, ja: jaMessages, ko: koMessages, - es: esMessages, - it: itMessages, - de: deMessages, lv: lvMessages, nl: nlMessages, pl: plMessages, @@ -39,7 +40,6 @@ const ALL_MESSAGES = { tr: trMessages, uk: ukMessages, zh: zhMessages, - da: daMessages }; interface IntlProviderProps { diff --git a/components/ui/flag-icons.tsx b/components/ui/flag-icons.tsx index 417bf1f6..75790cda 100644 --- a/components/ui/flag-icons.tsx +++ b/components/ui/flag-icons.tsx @@ -201,25 +201,27 @@ export function FlagCS(props: FlagProps) { ); } -/** Danish flag - Red with a white cross */ -export function FlagDA(props: FlagProps) { +/** Denmark – Red with a white Nordic cross */ +export function FlagDK(props: FlagProps) { return ( - - + + ); } /** Map locale codes to flag components */ export const flagComponents: Record ReactElement> = { + cs: FlagCS, + da: FlagDK, + de: FlagDE, en: FlagGB, + es: FlagES, fr: FlagFR, + it: FlagIT, ja: FlagJP, ko: FlagKR, - es: FlagES, - it: FlagIT, - de: FlagDE, lv: FlagLV, nl: FlagNL, pl: FlagPL, @@ -228,6 +230,4 @@ export const flagComponents: Record ReactElement> tr: FlagTR, uk: FlagUA, zh: FlagCN, - cs: FlagCS, - da: FlagDA }; diff --git a/components/ui/language-switcher.tsx b/components/ui/language-switcher.tsx index 912d571a..c0b197d6 100644 --- a/components/ui/language-switcher.tsx +++ b/components/ui/language-switcher.tsx @@ -9,21 +9,21 @@ import { flagComponents } from './flag-icons'; const languages = [ { value: 'cs', label: 'Česky' }, - { value: 'en', label: 'English' }, - { value: 'fr', label: 'Français' }, - { value: 'ja', label: '日本語' }, - { value: 'ko', label: '한국어' }, { value: 'da', label: 'Dansk' }, { value: 'de', label: 'Deutsch' }, + { value: 'en', label: 'English' }, { value: 'es', label: 'Español' }, + { value: 'fr', label: 'Français' }, { value: 'it', label: 'Italiano' }, { value: 'lv', label: 'Latviešu' }, { value: 'nl', label: 'Nederlands' }, { value: 'pl', label: 'Polski' }, { value: 'pt', label: 'Português' }, - { value: 'ru', label: 'Русский' }, { value: 'tr', label: 'Türkçe' }, + { value: 'ru', label: 'Русский' }, { value: 'uk', label: 'Українська' }, + { value: 'ko', label: '한국어' }, + { value: 'ja', label: '日本語' }, { value: 'zh', label: '简体中文' }, ]; diff --git a/i18n/request.ts b/i18n/request.ts index 2fe7fa26..24ad0008 100644 --- a/i18n/request.ts +++ b/i18n/request.ts @@ -14,18 +14,18 @@ export default getRequestConfig(async ({ requestLocale }) => { case 'cs': messages = (await import('../locales/cs/common.json')).default; break; - case 'fr': - messages = (await import('../locales/fr/common.json')).default; - break; case 'da': messages = (await import('../locales/da/common.json')).default; - break; + break; case 'de': messages = (await import('../locales/de/common.json')).default; break; case 'es': messages = (await import('../locales/es/common.json')).default; break; + case 'fr': + messages = (await import('../locales/fr/common.json')).default; + break; case 'it': messages = (await import('../locales/it/common.json')).default; break; diff --git a/i18n/routing.ts b/i18n/routing.ts index fae1da1f..8bea497e 100644 --- a/i18n/routing.ts +++ b/i18n/routing.ts @@ -13,7 +13,7 @@ const localePrefix = (process.env.NEXT_PUBLIC_LOCALE_PREFIX ?? 'never') as | 'as-needed'; export const routing = defineRouting({ - locales: ['cs', 'en', 'fr', 'da', 'de', 'es', 'it', 'ja', 'ko', 'lv', 'nl', 'pl', 'pt', 'ru', 'tr', 'uk', 'zh'], + locales: ['cs', 'da', 'de', 'en', 'es', 'fr', 'it', 'ja', 'ko', 'lv', 'nl', 'pl', 'pt', 'ru', 'tr', 'uk', 'zh'], defaultLocale: 'en', localePrefix });