fix(i18n): harden locale validation and fix missing translation tags
This commit is contained in:
@@ -2,11 +2,18 @@ import { getRequestConfig } from 'next-intl/server';
|
|||||||
import * as Sentry from '@sentry/nextjs';
|
import * as Sentry from '@sentry/nextjs';
|
||||||
|
|
||||||
export default getRequestConfig(async ({ requestLocale }) => {
|
export default getRequestConfig(async ({ requestLocale }) => {
|
||||||
let locale = await requestLocale;
|
// Hardened locale validation: only allow 'en' or 'de'
|
||||||
|
// Use a temporary variable to validate before assigning to locale
|
||||||
|
const rawLocale = await requestLocale;
|
||||||
|
const supportedLocales = ['en', 'de'];
|
||||||
|
const locale =
|
||||||
|
typeof rawLocale === 'string' && supportedLocales.includes(rawLocale) ? rawLocale : 'en';
|
||||||
|
|
||||||
// Ensure that a valid locale is used
|
// Log to Sentry if we had to fallback, as it might indicate a routing issue
|
||||||
if (!locale || !['en', 'de'].includes(locale)) {
|
if (!rawLocale || !supportedLocales.includes(rawLocale as string)) {
|
||||||
locale = 'en';
|
console.warn(
|
||||||
|
`[i18n] Invalid or missing requestLocale received: "${rawLocale}". Falling back to "en".`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -26,6 +33,6 @@ export default getRequestConfig(async ({ requestLocale }) => {
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
return 'fallback';
|
return 'fallback';
|
||||||
}
|
},
|
||||||
} as any;
|
} as any;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -206,7 +206,7 @@
|
|||||||
"title": "Produktportfolio | Hochwertige Kabel für jede Anwendung",
|
"title": "Produktportfolio | Hochwertige Kabel für jede Anwendung",
|
||||||
"description": "Entdecken Sie unser umfassendes Sortiment an zertifizierten Kabeln: von Niederspannung über Mittel- und Hochspannung bis hin zu spezialisierten Solarkabeln."
|
"description": "Entdecken Sie unser umfassendes Sortiment an zertifizierten Kabeln: von Niederspannung über Mittel- und Hochspannung bis hin zu spezialisierten Solarkabeln."
|
||||||
},
|
},
|
||||||
"title": "Unsere Produkte",
|
"title": "Unsere <green>Produkte</green>",
|
||||||
"subtitle": "Entdecken Sie unser umfassendes Sortiment an hochwertigen Kabeln für jede Anwendung.",
|
"subtitle": "Entdecken Sie unser umfassendes Sortiment an hochwertigen Kabeln für jede Anwendung.",
|
||||||
"heroSubtitle": "Produktportfolio",
|
"heroSubtitle": "Produktportfolio",
|
||||||
"categoryLabel": "Kategorie",
|
"categoryLabel": "Kategorie",
|
||||||
@@ -393,4 +393,4 @@
|
|||||||
"cta": "Zurück zur Sicherheit"
|
"cta": "Zurück zur Sicherheit"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -206,7 +206,7 @@
|
|||||||
"title": "Product Portfolio | High-Quality Cables for Every Application",
|
"title": "Product Portfolio | High-Quality Cables for Every Application",
|
||||||
"description": "Explore our comprehensive range of certified cables: from low voltage to medium and high voltage, as well as specialized solar cables."
|
"description": "Explore our comprehensive range of certified cables: from low voltage to medium and high voltage, as well as specialized solar cables."
|
||||||
},
|
},
|
||||||
"title": "Our Products",
|
"title": "Our <green>Products</green>",
|
||||||
"subtitle": "Explore our comprehensive range of high-quality cables designed for every application.",
|
"subtitle": "Explore our comprehensive range of high-quality cables designed for every application.",
|
||||||
"heroSubtitle": "Product Portfolio",
|
"heroSubtitle": "Product Portfolio",
|
||||||
"categoryLabel": "Category",
|
"categoryLabel": "Category",
|
||||||
@@ -393,4 +393,4 @@
|
|||||||
"cta": "Back to Safety"
|
"cta": "Back to Safety"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ const dsn = process.env.SENTRY_DSN;
|
|||||||
Sentry.init({
|
Sentry.init({
|
||||||
dsn,
|
dsn,
|
||||||
enabled: Boolean(dsn),
|
enabled: Boolean(dsn),
|
||||||
tracesSampleRate: 0,
|
|
||||||
});
|
|
||||||
|
|
||||||
|
// Adjust this value in production, or use tracesSampler for greater control
|
||||||
|
tracesSampleRate: 1,
|
||||||
|
|
||||||
|
// Setting this option to true will print useful information to the console while you're setting up Sentry.
|
||||||
|
debug: false,
|
||||||
|
});
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ const dsn = process.env.SENTRY_DSN;
|
|||||||
Sentry.init({
|
Sentry.init({
|
||||||
dsn,
|
dsn,
|
||||||
enabled: Boolean(dsn),
|
enabled: Boolean(dsn),
|
||||||
tracesSampleRate: 0,
|
|
||||||
});
|
|
||||||
|
|
||||||
|
// Adjust this value in production, or use tracesSampler for greater control
|
||||||
|
tracesSampleRate: 1,
|
||||||
|
|
||||||
|
// Setting this option to true will print useful information to the console while you're setting up Sentry.
|
||||||
|
debug: false,
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user