diff --git a/frontend/src/components/landing/SeoContentPage.tsx b/frontend/src/components/landing/SeoContentPage.tsx
index a326c45..27a269e 100644
--- a/frontend/src/components/landing/SeoContentPage.tsx
+++ b/frontend/src/components/landing/SeoContentPage.tsx
@@ -2,6 +2,7 @@ import { lazy, Suspense } from 'react';
import { useTranslation } from 'react-i18next';
import { CheckIcon } from '../ui/icons/CheckIcon';
import HomeFinalCta from '../home/HomeFinalCta';
+import Footer from '../ui/Footer';
import { usePageMeta } from '../../hooks/usePageMeta';
import {
getLocalizedSeoContentPage,
@@ -202,6 +203,7 @@ export default function SeoContentPage({
trackingLocation={`seo_${pageKey}_bottom`}
/>
+
);
}
diff --git a/frontend/src/components/landing/SeoLandingPage.tsx b/frontend/src/components/landing/SeoLandingPage.tsx
index daa92ad..1615d36 100644
--- a/frontend/src/components/landing/SeoLandingPage.tsx
+++ b/frontend/src/components/landing/SeoLandingPage.tsx
@@ -3,6 +3,7 @@ import { useTranslation } from 'react-i18next';
import { CheckIcon } from '../ui/icons/CheckIcon';
import { LogoIcon } from '../ui/icons/LogoIcon';
import HomeFinalCta from '../home/HomeFinalCta';
+import Footer from '../ui/Footer';
import { usePageMeta } from '../../hooks/usePageMeta';
import {
getLocalizedSeoLandingPage,
@@ -252,6 +253,7 @@ export default function SeoLandingPage({
trackingLocation={`seo_${pageKey}_bottom`}
/>
+
);
}
diff --git a/frontend/src/hooks/useAiFilters.ts b/frontend/src/hooks/useAiFilters.ts
index 9f27d70..ae48c56 100644
--- a/frontend/src/hooks/useAiFilters.ts
+++ b/frontend/src/hooks/useAiFilters.ts
@@ -15,6 +15,13 @@ export interface AiTravelTimeFilter {
max?: number;
}
+export interface AiMatchBounds {
+ south: number;
+ west: number;
+ north: number;
+ east: number;
+}
+
export interface AiFiltersResult {
filters: FeatureFilters;
travelTimeFilters: AiTravelTimeFilter[];
@@ -23,6 +30,8 @@ export interface AiFiltersResult {
summary: string;
/** Number of properties matching the proposed filters (excludes travel time) */
matchCount: number;
+ /** Bounding box of the matching properties, if any matched */
+ matchBounds: AiMatchBounds | null;
}
export type AiFilterErrorType = 'auth' | 'limit' | 'error';
@@ -152,6 +161,7 @@ export function useAiFilters(): UseAiFiltersResult {
notes: json.notes || '',
summary: summaryText,
matchCount,
+ matchBounds: (json.match_bounds as AiMatchBounds | undefined) ?? null,
};
setNotes(result.notes || null);
setSummary(summaryText);
diff --git a/frontend/src/hooks/useFilterCounts.ts b/frontend/src/hooks/useFilterCounts.ts
index acc9e69..9e55259 100644
--- a/frontend/src/hooks/useFilterCounts.ts
+++ b/frontend/src/hooks/useFilterCounts.ts
@@ -12,8 +12,11 @@ interface FilterCountsResponse {
}
/**
- * Fetches per-filter rejection counts: for each active filter,
- * how many in-bounds properties that filter removes.
+ * Single source of truth for the in-view property count. Returns:
+ * - `total`: exact count of in-bounds properties passing the active filters
+ * (or the full in-bounds total when there are none); null until first load.
+ * - `impacts`: per-filter rejection counts — how many in-bounds properties
+ * each active filter removes.
*/
export function useFilterCounts(
filters: FeatureFilters,
@@ -23,7 +26,10 @@ export function useFilterCounts(
shareCode?: string
) {
const [impacts, setImpacts] = useState>({});
- const [total, setTotal] = useState(0);
+ // null = not loaded yet for the current bounds (hide the counter until the
+ // first response). The number is the exact count of in-bounds properties
+ // passing the active filters — and, with no filters, the total in bounds.
+ const [total, setTotal] = useState(null);
const debounceRef = useRef | null>(null);
const abortRef = useRef(null);
@@ -39,16 +45,7 @@ export function useFilterCounts(
if (!bounds) {
abortRef.current?.abort();
setImpacts({});
- setTotal(0);
- return;
- }
-
- const filterCount = Object.keys(filters).length;
- const hasTravelFilters = travelTimeEntries.some((e) => e.slug && e.timeRange);
- if (filterCount === 0 && !hasTravelFilters) {
- abortRef.current?.abort();
- setImpacts({});
- setTotal(0);
+ setTotal(null);
return;
}
diff --git a/frontend/src/hooks/useTutorial.ts b/frontend/src/hooks/useTutorial.ts
index f0209ff..423094f 100644
--- a/frontend/src/hooks/useTutorial.ts
+++ b/frontend/src/hooks/useTutorial.ts
@@ -31,7 +31,9 @@ export function useTutorial(initialLoading: boolean, isMobile: boolean, blocked
target: '[data-tutorial="map"]',
title: t('tutorial.step3Title'),
content: t('tutorial.step3Content'),
- placement: 'top' as const,
+ // The map fills the viewport; directional placements push the tooltip
+ // off-screen. Center it over the map instead.
+ placement: 'center' as const,
skipBeacon: true,
},
{
diff --git a/frontend/src/i18n/descriptions.ts b/frontend/src/i18n/descriptions.ts
index b2fbadb..2599132 100644
--- a/frontend/src/i18n/descriptions.ts
+++ b/frontend/src/i18n/descriptions.ts
@@ -37,22 +37,14 @@ const descriptions: Record> = {
'Indique si le point représentatif du code postal se situe dans une zone de conservation désignée',
'Listed building':
'Indique si le bien semble correspondre à un bâtiment classé répertorié par Historic England',
- 'Good+ primary schools within 2km':
- 'Écoles primaires notées Bien ou Excellent par Ofsted dans un rayon de 2 km',
- 'Good+ secondary schools within 2km':
- 'Collèges/lycées notés Bien ou Excellent par Ofsted dans un rayon de 2 km',
- 'Good+ primary schools within 5km':
- 'Écoles primaires notées Bien ou Excellent par Ofsted dans un rayon de 5 km',
- 'Good+ secondary schools within 5km':
- 'Collèges/lycées notés Bien ou Excellent par Ofsted dans un rayon de 5 km',
- 'Outstanding primary schools within 2km':
- 'Écoles primaires notées Excellent par Ofsted dans un rayon de 2 km',
- 'Outstanding secondary schools within 2km':
- 'Collèges/lycées notés Excellent par Ofsted dans un rayon de 2 km',
- 'Outstanding primary schools within 5km':
- 'Écoles primaires notées Excellent par Ofsted dans un rayon de 5 km',
- 'Outstanding secondary schools within 5km':
- 'Collèges/lycées notés Excellent par Ofsted dans un rayon de 5 km',
+ 'Good+ primary school catchments':
+ 'Écoles primaires notées Bien ou Excellent par Ofsted dont la zone de recrutement modélisée couvre ce code postal',
+ 'Good+ secondary school catchments':
+ 'Collèges/lycées notés Bien ou Excellent par Ofsted dont la zone de recrutement modélisée couvre ce code postal',
+ 'Outstanding primary school catchments':
+ 'Écoles primaires notées Excellent par Ofsted dont la zone de recrutement modélisée couvre ce code postal',
+ 'Outstanding secondary school catchments':
+ 'Collèges/lycées notés Excellent par Ofsted dont la zone de recrutement modélisée couvre ce code postal',
'Education, Skills and Training Score':
'Percentile de défaveur en éducation, compétences et formation (plus élevé = moins défavorisé)',
'Income Score': 'Percentile de défaveur liée au revenu (plus élevé = moins défavorisé)',
@@ -138,22 +130,14 @@ const descriptions: Record> = {
'Ob der repräsentative Punkt des Postcodes in einem ausgewiesenen Denkmalschutzgebiet liegt',
'Listed building':
'Ob die Immobilie wahrscheinlich einem Eintrag von Historic England für ein denkmalgeschütztes Gebäude entspricht',
- 'Good+ primary schools within 2km':
- 'Von Ofsted mit Gut oder Hervorragend bewertete Grundschulen im Umkreis von 2 km',
- 'Good+ secondary schools within 2km':
- 'Von Ofsted mit Gut oder Hervorragend bewertete weiterführende Schulen im Umkreis von 2 km',
- 'Good+ primary schools within 5km':
- 'Von Ofsted mit Gut oder Hervorragend bewertete Grundschulen im Umkreis von 5 km',
- 'Good+ secondary schools within 5km':
- 'Von Ofsted mit Gut oder Hervorragend bewertete weiterführende Schulen im Umkreis von 5 km',
- 'Outstanding primary schools within 2km':
- 'Von Ofsted mit Hervorragend bewertete Grundschulen im Umkreis von 2 km',
- 'Outstanding secondary schools within 2km':
- 'Von Ofsted mit Hervorragend bewertete weiterführende Schulen im Umkreis von 2 km',
- 'Outstanding primary schools within 5km':
- 'Von Ofsted mit Hervorragend bewertete Grundschulen im Umkreis von 5 km',
- 'Outstanding secondary schools within 5km':
- 'Von Ofsted mit Hervorragend bewertete weiterführende Schulen im Umkreis von 5 km',
+ 'Good+ primary school catchments':
+ 'Von Ofsted mit Gut oder Hervorragend bewertete Grundschulen, deren modelliertes Einzugsgebiet diese Postleitzahl abdeckt',
+ 'Good+ secondary school catchments':
+ 'Von Ofsted mit Gut oder Hervorragend bewertete weiterführende Schulen, deren modelliertes Einzugsgebiet diese Postleitzahl abdeckt',
+ 'Outstanding primary school catchments':
+ 'Von Ofsted mit Hervorragend bewertete Grundschulen, deren modelliertes Einzugsgebiet diese Postleitzahl abdeckt',
+ 'Outstanding secondary school catchments':
+ 'Von Ofsted mit Hervorragend bewertete weiterführende Schulen, deren modelliertes Einzugsgebiet diese Postleitzahl abdeckt',
'Education, Skills and Training Score':
'Benachteiligungsperzentil für Bildung, Kompetenzen und Ausbildung (höher = weniger benachteiligt)',
'Income Score': 'Einkommensbenachteiligungsperzentil (höher = weniger benachteiligt)',
@@ -234,14 +218,10 @@ const descriptions: Record> = {
'Tree canopy density percentile': '邮编周边估计树冠覆盖密度百分位',
'Within conservation area': '邮编代表点是否位于指定保护区内',
'Listed building': '该房产是否疑似对应 Historic England 的登录建筑记录',
- 'Good+ primary schools within 2km': '2 公里内 Ofsted 评为良好或优秀的小学',
- 'Good+ secondary schools within 2km': '2 公里内 Ofsted 评为良好或优秀的中学',
- 'Good+ primary schools within 5km': '5 公里内 Ofsted 评为良好或优秀的小学',
- 'Good+ secondary schools within 5km': '5 公里内 Ofsted 评为良好或优秀的中学',
- 'Outstanding primary schools within 2km': '2 公里内 Ofsted 评为优秀的小学',
- 'Outstanding secondary schools within 2km': '2 公里内 Ofsted 评为优秀的中学',
- 'Outstanding primary schools within 5km': '5 公里内 Ofsted 评为优秀的小学',
- 'Outstanding secondary schools within 5km': '5 公里内 Ofsted 评为优秀的中学',
+ 'Good+ primary school catchments': '建模学区覆盖此邮编、Ofsted 评为良好或优秀的小学',
+ 'Good+ secondary school catchments': '建模学区覆盖此邮编、Ofsted 评为良好或优秀的中学',
+ 'Outstanding primary school catchments': '建模学区覆盖此邮编、Ofsted 评为优秀的小学',
+ 'Outstanding secondary school catchments': '建模学区覆盖此邮编、Ofsted 评为优秀的中学',
'Education, Skills and Training Score': '教育、技能与培训剥夺百分位(越高 = 剥夺越少)',
'Income Score': '收入剥夺百分位(越高 = 剥夺越少)',
'Employment Score': '就业剥夺百分位(越高 = 剥夺越少)',
@@ -311,22 +291,14 @@ const descriptions: Record> = {
'Within conservation area': 'पोस्टकोड प्रतिनिधि बिंदु नामित संरक्षण क्षेत्र में है या नहीं',
'Listed building':
'यह संपत्ति Historic England के सूचीबद्ध भवन रिकॉर्ड से मिलती-जुलती है या नहीं',
- 'Good+ primary schools within 2km':
- '2 किमी के भीतर Ofsted से अच्छी या उत्कृष्ट रेटिंग वाले प्राइमरी स्कूल',
- 'Good+ secondary schools within 2km':
- '2 किमी के भीतर Ofsted से अच्छी या उत्कृष्ट रेटिंग वाले सेकेंडरी स्कूल',
- 'Good+ primary schools within 5km':
- '5 किमी के भीतर Ofsted से अच्छी या उत्कृष्ट रेटिंग वाले प्राइमरी स्कूल',
- 'Good+ secondary schools within 5km':
- '5 किमी के भीतर Ofsted से अच्छी या उत्कृष्ट रेटिंग वाले सेकेंडरी स्कूल',
- 'Outstanding primary schools within 2km':
- '2 किमी के भीतर Ofsted से उत्कृष्ट रेटिंग वाले प्राइमरी स्कूल',
- 'Outstanding secondary schools within 2km':
- '2 किमी के भीतर Ofsted से उत्कृष्ट रेटिंग वाले सेकेंडरी स्कूल',
- 'Outstanding primary schools within 5km':
- '5 किमी के भीतर Ofsted से उत्कृष्ट रेटिंग वाले प्राइमरी स्कूल',
- 'Outstanding secondary schools within 5km':
- '5 किमी के भीतर Ofsted से उत्कृष्ट रेटिंग वाले सेकेंडरी स्कूल',
+ 'Good+ primary school catchments':
+ 'Ofsted से अच्छी या उत्कृष्ट रेटिंग वाले प्राइमरी स्कूल जिनका मॉडल किया गया कैचमेंट क्षेत्र इस पोस्टकोड को कवर करता है',
+ 'Good+ secondary school catchments':
+ 'Ofsted से अच्छी या उत्कृष्ट रेटिंग वाले सेकेंडरी स्कूल जिनका मॉडल किया गया कैचमेंट क्षेत्र इस पोस्टकोड को कवर करता है',
+ 'Outstanding primary school catchments':
+ 'Ofsted से उत्कृष्ट रेटिंग वाले प्राइमरी स्कूल जिनका मॉडल किया गया कैचमेंट क्षेत्र इस पोस्टकोड को कवर करता है',
+ 'Outstanding secondary school catchments':
+ 'Ofsted से उत्कृष्ट रेटिंग वाले सेकेंडरी स्कूल जिनका मॉडल किया गया कैचमेंट क्षेत्र इस पोस्टकोड को कवर करता है',
'Education, Skills and Training Score': 'शिक्षा और कौशल वंचना प्रतिशतक (अधिक = कम वंचना)',
'Income Score': 'आय वंचना प्रतिशतक (अधिक = कम वंचना)',
'Employment Score': 'रोजगार वंचना प्रतिशतक (अधिक = कम वंचना)',
@@ -401,22 +373,14 @@ const descriptions: Record> = {
'Az irányítószám reprezentatív pontja kijelölt műemléki területre esik-e',
'Listed building':
'Az ingatlan látszólag megfelel-e egy Historic England műemléki épület bejegyzésének',
- 'Good+ primary schools within 2km':
- 'Ofsted által Jó vagy Kiváló minősítésű általános iskolák 2 km-en belül',
- 'Good+ secondary schools within 2km':
- 'Ofsted által Jó vagy Kiváló minősítésű középiskolák 2 km-en belül',
- 'Good+ primary schools within 5km':
- 'Ofsted által Jó vagy Kiváló minősítésű általános iskolák 5 km-en belül',
- 'Good+ secondary schools within 5km':
- 'Ofsted által Jó vagy Kiváló minősítésű középiskolák 5 km-en belül',
- 'Outstanding primary schools within 2km':
- 'Ofsted által Kiváló minősítésű általános iskolák 2 km-en belül',
- 'Outstanding secondary schools within 2km':
- 'Ofsted által Kiváló minősítésű középiskolák 2 km-en belül',
- 'Outstanding primary schools within 5km':
- 'Ofsted által Kiváló minősítésű általános iskolák 5 km-en belül',
- 'Outstanding secondary schools within 5km':
- 'Ofsted által Kiváló minősítésű középiskolák 5 km-en belül',
+ 'Good+ primary school catchments':
+ 'Ofsted által Jó vagy Kiváló minősítésű általános iskolák, amelyek modellezett körzete lefedi ezt az irányítószámot',
+ 'Good+ secondary school catchments':
+ 'Ofsted által Jó vagy Kiváló minősítésű középiskolák, amelyek modellezett körzete lefedi ezt az irányítószámot',
+ 'Outstanding primary school catchments':
+ 'Ofsted által Kiváló minősítésű általános iskolák, amelyek modellezett körzete lefedi ezt az irányítószámot',
+ 'Outstanding secondary school catchments':
+ 'Ofsted által Kiváló minősítésű középiskolák, amelyek modellezett körzete lefedi ezt az irányítószámot',
'Education, Skills and Training Score':
'Oktatási és készségbeli deprivációs percentilis (magasabb = kevésbé hátrányos)',
'Income Score': 'Jövedelmi deprivációs percentilis (magasabb = kevésbé hátrányos)',
diff --git a/frontend/src/i18n/details.ts b/frontend/src/i18n/details.ts
index 1a28373..7fd5619 100644
--- a/frontend/src/i18n/details.ts
+++ b/frontend/src/i18n/details.ts
@@ -41,22 +41,14 @@ export const details: Record> = {
"Limites des conservation areas dans Planning Data, rattachées au point représentatif du code postal. Le jeu de données national est encore en cours de constitution et peut contenir des doublons ou une couverture locale incomplète ; toute décision dépendant précisément d'une limite doit être vérifiée auprès de la local planning authority.",
'Listed building':
"Points de listed buildings dans la National Heritage List for England de Historic England, appariés prudemment aux adresses à partir du nom de l'entrée classée et de codes postaux candidats à proximité. À utiliser comme signal de présélection, pas comme conclusion juridique : vérifiez tout bien précis dans la NHLE et auprès de la local planning authority.",
- 'Good+ primary schools within 2km':
- "Écoles primaires financées par l'État dans un rayon de 2 km ayant une note Ofsted actuelle Good ou Outstanding. Les écoles non encore inspectées sont exclues.",
- 'Good+ secondary schools within 2km':
- "Écoles secondaires financées par l'État dans un rayon de 2 km ayant une note Ofsted actuelle Good ou Outstanding. Les établissements non encore inspectés sont exclus.",
- 'Good+ primary schools within 5km':
- "Écoles primaires financées par l'État dans un rayon de 5 km ayant une note Ofsted actuelle Good ou Outstanding. Les écoles non encore inspectées sont exclues.",
- 'Good+ secondary schools within 5km':
- "Écoles secondaires financées par l'État dans un rayon de 5 km ayant une note Ofsted actuelle Good ou Outstanding. Les établissements non encore inspectés sont exclus.",
- 'Outstanding primary schools within 2km':
- "Écoles primaires financées par l'État dans un rayon de 2 km ayant une note Ofsted actuelle Outstanding. Les écoles non encore inspectées sont exclues.",
- 'Outstanding secondary schools within 2km':
- "Écoles secondaires financées par l'État dans un rayon de 2 km ayant une note Ofsted actuelle Outstanding. Les établissements non encore inspectés sont exclus.",
- 'Outstanding primary schools within 5km':
- "Écoles primaires financées par l'État dans un rayon de 5 km ayant une note Ofsted actuelle Outstanding. Les écoles non encore inspectées sont exclues.",
- 'Outstanding secondary schools within 5km':
- "Écoles secondaires financées par l'État dans un rayon de 5 km ayant une note Ofsted actuelle Outstanding. Les établissements non encore inspectés sont exclus.",
+ 'Good+ primary school catchments':
+ "Nombre d'écoles primaires financées par l'État ayant une note Ofsted actuelle Good ou Outstanding dont les élèves proviennent d'une zone couvrant ce code postal. Les rayons de recrutement sont modélisés à partir des effectifs de chaque école et de la population locale d'enfants (recensement 2021), en approchant des admissions fondées sur la distance ; ce sont des estimations historiques, pas des secteurs d'admission officiels. Les écoles non encore inspectées sont exclues.",
+ 'Good+ secondary school catchments':
+ "Nombre d'écoles secondaires financées par l'État ayant une note Ofsted actuelle Good ou Outstanding dont les élèves proviennent d'une zone couvrant ce code postal. Les rayons de recrutement sont modélisés à partir des effectifs de chaque école et de la population locale d'enfants (recensement 2021), en approchant des admissions fondées sur la distance ; ce sont des estimations historiques, pas des secteurs d'admission officiels. Les établissements non encore inspectés sont exclus.",
+ 'Outstanding primary school catchments':
+ "Nombre d'écoles primaires financées par l'État ayant une note Ofsted actuelle Outstanding dont les élèves proviennent d'une zone couvrant ce code postal. Les rayons de recrutement sont modélisés à partir des effectifs de chaque école et de la population locale d'enfants (recensement 2021), en approchant des admissions fondées sur la distance ; ce sont des estimations historiques, pas des secteurs d'admission officiels. Les écoles non encore inspectées sont exclues.",
+ 'Outstanding secondary school catchments':
+ "Nombre d'écoles secondaires financées par l'État ayant une note Ofsted actuelle Outstanding dont les élèves proviennent d'une zone couvrant ce code postal. Les rayons de recrutement sont modélisés à partir des effectifs de chaque école et de la population locale d'enfants (recensement 2021), en approchant des admissions fondées sur la distance ; ce sont des estimations historiques, pas des secteurs d'admission officiels. Les établissements non encore inspectés sont exclus.",
'Education, Skills and Training Score':
"Issu des English Indices of Deprivation, converti en percentile national : 0 % correspond aux zones les plus défavorisées et 100 % aux moins défavorisées. Couvre les résultats scolaires, l'accès à l'enseignement supérieur, les qualifications des adultes et la maîtrise de l'anglais.",
'Income Score':
@@ -189,22 +181,14 @@ export const details: Record> = {
'Planning-Data-Grenzen für Erhaltungsgebiete, dem repräsentativen Punkt der Postleitzahl zugeordnet. Der nationale Datensatz wird laufend verbessert und kann Duplikate oder unvollständige lokale Abdeckung enthalten; grenznahe Entscheidungen sollten bei der lokalen Planungsbehörde geprüft werden.',
'Listed building':
'Punktdaten zu denkmalgeschützten Gebäuden aus der National Heritage List for England von Historic England, vorsichtig mit Immobilienadressen abgeglichen anhand des Namens des Denkmaleintrags und nahegelegener Postleitzahlkandidaten. Behandle dies als Vorauswahl-Hinweis, nicht als rechtliche Feststellung: Prüfe jede konkrete Immobilie in der NHLE und bei der lokalen Planungsbehörde.',
- 'Good+ primary schools within 2km':
- 'Staatlich geförderte Grundschulen innerhalb von 2 km mit einer aktuellen Ofsted-Bewertung von Gut oder Hervorragend. Noch nicht inspizierte Schulen sind ausgeschlossen.',
- 'Good+ secondary schools within 2km':
- 'Staatlich geförderte weiterführende Schulen innerhalb von 2 km mit einer aktuellen Ofsted-Bewertung von Gut oder Hervorragend. Noch nicht inspizierte Schulen sind ausgeschlossen.',
- 'Good+ primary schools within 5km':
- 'Staatlich geförderte Grundschulen innerhalb von 5 km mit einer aktuellen Ofsted-Bewertung von Gut oder Hervorragend. Noch nicht inspizierte Schulen sind ausgeschlossen.',
- 'Good+ secondary schools within 5km':
- 'Staatlich geförderte weiterführende Schulen innerhalb von 5 km mit einer aktuellen Ofsted-Bewertung von Gut oder Hervorragend. Noch nicht inspizierte Schulen sind ausgeschlossen.',
- 'Outstanding primary schools within 2km':
- 'Staatlich geförderte Grundschulen innerhalb von 2 km mit einer aktuellen Ofsted-Bewertung von Hervorragend. Noch nicht inspizierte Schulen sind ausgeschlossen.',
- 'Outstanding secondary schools within 2km':
- 'Staatlich geförderte weiterführende Schulen innerhalb von 2 km mit einer aktuellen Ofsted-Bewertung von Hervorragend. Noch nicht inspizierte Schulen sind ausgeschlossen.',
- 'Outstanding primary schools within 5km':
- 'Staatlich geförderte Grundschulen innerhalb von 5 km mit einer aktuellen Ofsted-Bewertung von Hervorragend. Noch nicht inspizierte Schulen sind ausgeschlossen.',
- 'Outstanding secondary schools within 5km':
- 'Staatlich geförderte weiterführende Schulen innerhalb von 5 km mit einer aktuellen Ofsted-Bewertung von Hervorragend. Noch nicht inspizierte Schulen sind ausgeschlossen.',
+ 'Good+ primary school catchments':
+ 'Wie viele staatlich geförderte Grundschulen mit einer aktuellen Ofsted-Bewertung von Gut oder Hervorragend ihre Schüler aus einem Gebiet beziehen, das diese Postleitzahl abdeckt. Die Einzugsradien werden aus den Schülerzahlen jeder Schule und der lokalen Kinderbevölkerung (Zensus 2021) modelliert und nähern entfernungsbasierte Aufnahmen an; es sind historische Schätzungen, keine offiziellen Aufnahmegebiete. Noch nicht inspizierte Schulen sind ausgeschlossen.',
+ 'Good+ secondary school catchments':
+ 'Wie viele staatlich geförderte weiterführende Schulen mit einer aktuellen Ofsted-Bewertung von Gut oder Hervorragend ihre Schüler aus einem Gebiet beziehen, das diese Postleitzahl abdeckt. Die Einzugsradien werden aus den Schülerzahlen jeder Schule und der lokalen Kinderbevölkerung (Zensus 2021) modelliert und nähern entfernungsbasierte Aufnahmen an; es sind historische Schätzungen, keine offiziellen Aufnahmegebiete. Noch nicht inspizierte Schulen sind ausgeschlossen.',
+ 'Outstanding primary school catchments':
+ 'Wie viele staatlich geförderte Grundschulen mit einer aktuellen Ofsted-Bewertung von Hervorragend ihre Schüler aus einem Gebiet beziehen, das diese Postleitzahl abdeckt. Die Einzugsradien werden aus den Schülerzahlen jeder Schule und der lokalen Kinderbevölkerung (Zensus 2021) modelliert und nähern entfernungsbasierte Aufnahmen an; es sind historische Schätzungen, keine offiziellen Aufnahmegebiete. Noch nicht inspizierte Schulen sind ausgeschlossen.',
+ 'Outstanding secondary school catchments':
+ 'Wie viele staatlich geförderte weiterführende Schulen mit einer aktuellen Ofsted-Bewertung von Hervorragend ihre Schüler aus einem Gebiet beziehen, das diese Postleitzahl abdeckt. Die Einzugsradien werden aus den Schülerzahlen jeder Schule und der lokalen Kinderbevölkerung (Zensus 2021) modelliert und nähern entfernungsbasierte Aufnahmen an; es sind historische Schätzungen, keine offiziellen Aufnahmegebiete. Noch nicht inspizierte Schulen sind ausgeschlossen.',
'Education, Skills and Training Score':
'Aus den englischen Deprivationsindizes, in ein nationales Perzentil umgerechnet: 0 % steht für die am stärksten benachteiligten Gebiete, 100 % für die am wenigsten benachteiligten. Umfasst Schulleistungen, Hochschulzugang, Qualifikationen Erwachsener und Englischsprachkenntnisse.',
'Income Score':
@@ -337,22 +321,14 @@ export const details: Record> = {
'Planning Data 保护区边界,与邮编代表点匹配。全国数据集仍在完善中,可能包含重复记录或地方覆盖不完整;涉及边界的决策应向地方规划部门核实。',
'Listed building':
'Historic England 英格兰国家遗产名录(NHLE)中的受保护建筑点位记录,会根据名录条目名称和附近候选邮编,谨慎匹配到房产地址。请把它当作初筛信号,而不是法律认定:具体房产应在 NHLE 和地方规划部门核实。',
- 'Good+ primary schools within 2km':
- '2km范围内Ofsted评级为“良好”或“优秀”的公立小学数量。尚未接受评估的学校不计入。',
- 'Good+ secondary schools within 2km':
- '2km范围内Ofsted评级为“良好”或“优秀”的公立中学数量。尚未接受评估的学校不计入。',
- 'Good+ primary schools within 5km':
- '5km范围内Ofsted评级为“良好”或“优秀”的公立小学数量。尚未接受评估的学校不计入。',
- 'Good+ secondary schools within 5km':
- '5km范围内Ofsted评级为“良好”或“优秀”的公立中学数量。尚未接受评估的学校不计入。',
- 'Outstanding primary schools within 2km':
- '2km范围内Ofsted评级为“优秀”的公立小学数量。尚未接受评估的学校不计入。',
- 'Outstanding secondary schools within 2km':
- '2km范围内Ofsted评级为“优秀”的公立中学数量。尚未接受评估的学校不计入。',
- 'Outstanding primary schools within 5km':
- '5km范围内Ofsted评级为“优秀”的公立小学数量。尚未接受评估的学校不计入。',
- 'Outstanding secondary schools within 5km':
- '5km范围内Ofsted评级为“优秀”的公立中学数量。尚未接受评估的学校不计入。',
+ 'Good+ primary school catchments':
+ '有多少所Ofsted当前评级为“良好”或“优秀”的公立小学,其生源来自覆盖此邮编的区域。学区半径根据各校学生人数和当地儿童人口(2021年人口普查)建模,近似按距离录取;这些是历史估计,并非官方招生范围。尚未接受评估的学校不计入。',
+ 'Good+ secondary school catchments':
+ '有多少所Ofsted当前评级为“良好”或“优秀”的公立中学,其生源来自覆盖此邮编的区域。学区半径根据各校学生人数和当地儿童人口(2021年人口普查)建模,近似按距离录取;这些是历史估计,并非官方招生范围。尚未接受评估的学校不计入。',
+ 'Outstanding primary school catchments':
+ '有多少所Ofsted当前评级为“优秀”的公立小学,其生源来自覆盖此邮编的区域。学区半径根据各校学生人数和当地儿童人口(2021年人口普查)建模,近似按距离录取;这些是历史估计,并非官方招生范围。尚未接受评估的学校不计入。',
+ 'Outstanding secondary school catchments':
+ '有多少所Ofsted当前评级为“优秀”的公立中学,其生源来自覆盖此邮编的区域。学区半径根据各校学生人数和当地儿童人口(2021年人口普查)建模,近似按距离录取;这些是历史估计,并非官方招生范围。尚未接受评估的学校不计入。',
'Education, Skills and Training Score':
'来自英格兰剥夺指数,转换为全国百分位:0%表示最贫困,100%表示最不贫困。涵盖学校成绩、高等教育入学率、成人学历和英语水平。',
'Income Score':
@@ -477,22 +453,14 @@ export const details: Record> = {
'Planning Data संरक्षण क्षेत्र सीमाएं पोस्टकोड प्रतिनिधि बिंदु से मिलाई जाती हैं. राष्ट्रीय डेटासेट अभी बेहतर किया जा रहा है और इसमें डुप्लीकेट या अधूरी स्थानीय कवरेज हो सकती है; सीमा-संवेदनशील निर्णय स्थानीय योजना प्राधिकरण से जांचे जाने चाहिए.',
'Listed building':
'Historic England की इंग्लैंड की राष्ट्रीय धरोहर सूची (NHLE) में सूचीबद्ध भवनों के बिंदु रिकॉर्ड, जिन्हें सूचीबद्ध प्रविष्टि के नाम और पास के संभावित पोस्टकोड के आधार पर संपत्ति पते से सावधानी से मिलाया गया है. इसे केवल प्रारंभिक जांच संकेत मानें, कानूनी निर्णय नहीं: किसी भी विशिष्ट संपत्ति को NHLE और स्थानीय योजना प्राधिकरण से सत्यापित करें.',
- 'Good+ primary schools within 2km':
- '2 km के भीतर सरकारी वित्तपोषित प्राइमरी स्कूल जिनकी मौजूदा Ofsted रेटिंग अच्छी या उत्कृष्ट है. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
- 'Good+ secondary schools within 2km':
- '2 km के भीतर सरकारी वित्तपोषित सेकेंडरी स्कूल जिनकी मौजूदा Ofsted रेटिंग अच्छी या उत्कृष्ट है. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
- 'Good+ primary schools within 5km':
- '5 km के भीतर सरकारी वित्तपोषित प्राइमरी स्कूल जिनकी मौजूदा Ofsted रेटिंग अच्छी या उत्कृष्ट है. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
- 'Good+ secondary schools within 5km':
- '5 km के भीतर सरकारी वित्तपोषित सेकेंडरी स्कूल जिनकी मौजूदा Ofsted रेटिंग अच्छी या उत्कृष्ट है. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
- 'Outstanding primary schools within 2km':
- '2 km के भीतर सरकारी वित्तपोषित प्राइमरी स्कूल जिनकी मौजूदा Ofsted रेटिंग उत्कृष्ट है. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
- 'Outstanding secondary schools within 2km':
- '2 km के भीतर सरकारी वित्तपोषित सेकेंडरी स्कूल जिनकी मौजूदा Ofsted रेटिंग उत्कृष्ट है. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
- 'Outstanding primary schools within 5km':
- '5 km के भीतर सरकारी वित्तपोषित प्राइमरी स्कूल जिनकी मौजूदा Ofsted रेटिंग उत्कृष्ट है. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
- 'Outstanding secondary schools within 5km':
- '5 km के भीतर सरकारी वित्तपोषित सेकेंडरी स्कूल जिनकी मौजूदा Ofsted रेटिंग उत्कृष्ट है. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
+ 'Good+ primary school catchments':
+ 'कितने सरकारी वित्तपोषित प्राइमरी स्कूल, जिनकी मौजूदा Ofsted रेटिंग अच्छी या उत्कृष्ट है, अपने छात्र इस पोस्टकोड को कवर करने वाले क्षेत्र से लेते हैं. कैचमेंट दायरे हर स्कूल की छात्र संख्या और स्थानीय बाल जनसंख्या (जनगणना 2021) से मॉडल किए जाते हैं, जो दूरी-आधारित दाखिलों का अनुमान है; ये ऐतिहासिक अनुमान हैं, आधिकारिक दाखिला क्षेत्र नहीं. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
+ 'Good+ secondary school catchments':
+ 'कितने सरकारी वित्तपोषित सेकेंडरी स्कूल, जिनकी मौजूदा Ofsted रेटिंग अच्छी या उत्कृष्ट है, अपने छात्र इस पोस्टकोड को कवर करने वाले क्षेत्र से लेते हैं. कैचमेंट दायरे हर स्कूल की छात्र संख्या और स्थानीय बाल जनसंख्या (जनगणना 2021) से मॉडल किए जाते हैं, जो दूरी-आधारित दाखिलों का अनुमान है; ये ऐतिहासिक अनुमान हैं, आधिकारिक दाखिला क्षेत्र नहीं. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
+ 'Outstanding primary school catchments':
+ 'कितने सरकारी वित्तपोषित प्राइमरी स्कूल, जिनकी मौजूदा Ofsted रेटिंग उत्कृष्ट है, अपने छात्र इस पोस्टकोड को कवर करने वाले क्षेत्र से लेते हैं. कैचमेंट दायरे हर स्कूल की छात्र संख्या और स्थानीय बाल जनसंख्या (जनगणना 2021) से मॉडल किए जाते हैं, जो दूरी-आधारित दाखिलों का अनुमान है; ये ऐतिहासिक अनुमान हैं, आधिकारिक दाखिला क्षेत्र नहीं. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
+ 'Outstanding secondary school catchments':
+ 'कितने सरकारी वित्तपोषित सेकेंडरी स्कूल, जिनकी मौजूदा Ofsted रेटिंग उत्कृष्ट है, अपने छात्र इस पोस्टकोड को कवर करने वाले क्षेत्र से लेते हैं. कैचमेंट दायरे हर स्कूल की छात्र संख्या और स्थानीय बाल जनसंख्या (जनगणना 2021) से मॉडल किए जाते हैं, जो दूरी-आधारित दाखिलों का अनुमान है; ये ऐतिहासिक अनुमान हैं, आधिकारिक दाखिला क्षेत्र नहीं. जिन स्कूलों का अभी निरीक्षण नहीं हुआ है, उन्हें शामिल नहीं किया गया है.',
'Education, Skills and Training Score':
'English Indices of Deprivation से लिया गया और राष्ट्रीय प्रतिशतक में बदला गया: 0% सबसे अधिक वंचित क्षेत्रों और 100% सबसे कम वंचित क्षेत्रों को दर्शाता है. इसमें स्कूल उपलब्धि, उच्च शिक्षा में प्रवेश, वयस्क योग्यता और अंग्रेजी भाषा दक्षता शामिल है.',
'Income Score':
@@ -625,22 +593,14 @@ export const details: Record> = {
'A Planning Data műemléki területeinek határai az irányítószám reprezentatív pontjához rendelve. Az országos adatállomány fejlesztés alatt áll, és tartalmazhat duplikátumokat vagy hiányos helyi lefedettséget; határérzékeny döntéseknél a helyi tervezési hatóság adatait kell ellenőrizni.',
'Listed building':
'A Historic England National Heritage List for England műemlékiépület-pontrekordjai, amelyeket óvatosan egyeztetünk ingatlancímekhez a műemléki bejegyzés neve és a közeli irányítószám-jelöltek alapján. Előszűrési jelzésként kezelendő, nem jogi megállapításként: minden konkrét ingatlant ellenőrizni kell az NHLE-ben és a helyi tervezési hatóságnál.',
- 'Good+ primary schools within 2km':
- '2 km-en belüli állami fenntartású általános iskolák, amelyek aktuális Ofsted besorolása Jó vagy Kiemelkedő. A még nem vizsgált iskolák ki vannak zárva.',
- 'Good+ secondary schools within 2km':
- '2 km-en belüli állami fenntartású középiskolák, amelyek aktuális Ofsted besorolása Jó vagy Kiemelkedő. A még nem vizsgált iskolák ki vannak zárva.',
- 'Good+ primary schools within 5km':
- '5 km-en belüli állami fenntartású általános iskolák, amelyek aktuális Ofsted besorolása Jó vagy Kiemelkedő. A még nem vizsgált iskolák ki vannak zárva.',
- 'Good+ secondary schools within 5km':
- '5 km-en belüli állami fenntartású középiskolák, amelyek aktuális Ofsted besorolása Jó vagy Kiemelkedő. A még nem vizsgált iskolák ki vannak zárva.',
- 'Outstanding primary schools within 2km':
- '2 km-en belüli állami fenntartású általános iskolák, amelyek aktuális Ofsted besorolása Kiemelkedő. A még nem vizsgált iskolák ki vannak zárva.',
- 'Outstanding secondary schools within 2km':
- '2 km-en belüli állami fenntartású középiskolák, amelyek aktuális Ofsted besorolása Kiemelkedő. A még nem vizsgált iskolák ki vannak zárva.',
- 'Outstanding primary schools within 5km':
- '5 km-en belüli állami fenntartású általános iskolák, amelyek aktuális Ofsted besorolása Kiemelkedő. A még nem vizsgált iskolák ki vannak zárva.',
- 'Outstanding secondary schools within 5km':
- '5 km-en belüli állami fenntartású középiskolák, amelyek aktuális Ofsted besorolása Kiemelkedő. A még nem vizsgált iskolák ki vannak zárva.',
+ 'Good+ primary school catchments':
+ 'Hány olyan állami fenntartású általános iskola van, amelynek aktuális Ofsted besorolása Jó vagy Kiemelkedő, és amely a tanulóit az ezt az irányítószámot lefedő területről veszi fel. A körzetsugarakat az egyes iskolák tanulólétszámából és a helyi gyermeknépességből (2021-es népszámlálás) modellezzük, távolságalapú felvételt közelítve; történeti becslések, nem hivatalos felvételi körzetek. A még nem vizsgált iskolák ki vannak zárva.',
+ 'Good+ secondary school catchments':
+ 'Hány olyan állami fenntartású középiskola van, amelynek aktuális Ofsted besorolása Jó vagy Kiemelkedő, és amely a tanulóit az ezt az irányítószámot lefedő területről veszi fel. A körzetsugarakat az egyes iskolák tanulólétszámából és a helyi gyermeknépességből (2021-es népszámlálás) modellezzük, távolságalapú felvételt közelítve; történeti becslések, nem hivatalos felvételi körzetek. A még nem vizsgált iskolák ki vannak zárva.',
+ 'Outstanding primary school catchments':
+ 'Hány olyan állami fenntartású általános iskola van, amelynek aktuális Ofsted besorolása Kiemelkedő, és amely a tanulóit az ezt az irányítószámot lefedő területről veszi fel. A körzetsugarakat az egyes iskolák tanulólétszámából és a helyi gyermeknépességből (2021-es népszámlálás) modellezzük, távolságalapú felvételt közelítve; történeti becslések, nem hivatalos felvételi körzetek. A még nem vizsgált iskolák ki vannak zárva.',
+ 'Outstanding secondary school catchments':
+ 'Hány olyan állami fenntartású középiskola van, amelynek aktuális Ofsted besorolása Kiemelkedő, és amely a tanulóit az ezt az irányítószámot lefedő területről veszi fel. A körzetsugarakat az egyes iskolák tanulólétszámából és a helyi gyermeknépességből (2021-es népszámlálás) modellezzük, távolságalapú felvételt közelítve; történeti becslések, nem hivatalos felvételi körzetek. A még nem vizsgált iskolák ki vannak zárva.',
'Education, Skills and Training Score':
'Az Angol Nélkülözési Indexekből származik, országos percentilissé alakítva: 0% a leginkább hátrányos, 100% a legkevésbé hátrányos területeket jelzi. Az iskolai teljesítményt, a felsőoktatásba való bejutást, a felnőttkori képesítéseket és az angol nyelvi jártasságot foglalja magában.',
'Income Score':
diff --git a/frontend/src/i18n/locales/de.ts b/frontend/src/i18n/locales/de.ts
index 4b70e9e..22c9f09 100644
--- a/frontend/src/i18n/locales/de.ts
+++ b/frontend/src/i18n/locales/de.ts
@@ -609,6 +609,8 @@ const de: Translations = {
pleaseWait: 'Bitte warten...',
sendResetLink: 'Link zum Zurücksetzen senden',
backToLogin: 'Zurück zur Anmeldung',
+ registerConsent:
+ 'Mit der Kontoerstellung akzeptierst du unsere Nutzungsbedingungen und unsere Datenschutzerklärung.',
},
// ── Upgrade Modal ──────────────────────────────────
@@ -666,7 +668,7 @@ const de: Translations = {
addFiltersHint:
'Füge unten Filter hinzu, um die Karte auf Gebiete einzugrenzen, die zu deinen Kriterien passen',
upgradePrompt:
- 'Finde passende Postcodes mit Kriminalität, Schulen, Lärm, Breitband, Preisen und über 50 weiteren Filtern in ganz England.',
+ 'Finde passende Postcodes mit Kriminalität, Schulen, Lärm, Breitband, Preisen und über 40 kombinierbaren Filtern in ganz England.',
oneTimeLifetime: 'Einmalzahlung, lebenslanger Zugang.',
upgradeToFullMap: 'Auf die vollständige Karte upgraden',
chooseFilters:
@@ -698,7 +700,6 @@ const de: Translations = {
filtersOut: 'schließt {{value}} aus',
schoolType: 'Schultyp',
schoolRating: 'Schulbewertung',
- schoolDistance: 'Schulentfernung',
primary: 'Grundschule',
secondary: 'Weiterführende Schule',
rating: 'Bewertung',
@@ -943,7 +944,7 @@ const de: Translations = {
showcaseFeatureNoiseShort: 'Lärm',
showcaseFeatureSchoolsShort: 'Schulen',
showcaseFeatureTravelShort: 'Fahrzeit',
- showcaseGoodPrimariesNearby: '{{count}}+ Good Primaries in der Nähe',
+ showcaseGoodPrimariesNearby: 'In {{count}}+ Einzugsgebieten guter Grundschulen',
showcaseWithinRail: 'Innerhalb von {{count}} Min. zur Bahn',
showcaseMatchingHomesLabel: 'Passende Immobilien',
showcaseMatchingHomes: '{{value}} passende Immobilien',
@@ -1004,6 +1005,13 @@ const de: Translations = {
statFilters: 'kombinierbare Filter',
statEvery: 'Jeder',
statPostcodeInEngland: 'Postcode in England',
+ coverageNote:
+ 'Deckt jeden Postcode in England ab — je 200+ Datenfelder. Schottland und Wales sind in Planung.',
+ priceStrip:
+ 'Lebenslanger Zugang, aktuell {{price}} — der Preis steigt, sobald sich die Stufen füllen.',
+ priceStripSpots: 'Noch {{count}} Platz zu diesem Preis.',
+ priceStripSpotsPlural: 'Noch {{count}} Plätze zu diesem Preis.',
+ priceStripCta: 'Preise ansehen',
ourPhilosophy: 'Beginne mit dem, was zählt, und finde den passenden Postcode',
philosophyP1:
'Die meisten Immobilienseiten fragen, wo du wohnen möchtest. In London ist das besonders schwierig, aber dasselbe Problem gibt es in ganz England: Käufer starten mit wenigen bekannten Orten und prüfen dann Pendelzeit, Schulen, Kriminalität, Street View, Breitband und Verkaufspreise in getrennten Tabs.',
@@ -1027,7 +1035,7 @@ const de: Translations = {
compAreaDataSub: '(Kriminalität, Schulen, Lärm, Breitband, Infrastruktur)',
compPropertyData: 'Historie auf Immobilienebene',
compPropertyDataSub: '(Verkaufspreise, EPC, Wohnfläche, Schätzwert)',
- compFilters: '56 Filter, die zusammenarbeiten',
+ compFilters: '40+ Filter, die zusammenarbeiten',
compFiltersSub: '(nicht ein Postcode oder ein Inserat nach dem anderen)',
ctaTitle: 'Hör auf zu raten, wo du kaufen sollst.',
ctaDescription:
@@ -1035,13 +1043,36 @@ const de: Translations = {
},
// ── Pricing Page ───────────────────────────────────
+ // ── Footer ─────────────────────────────────────────
+ footer: {
+ tagline:
+ 'Finde die Postcodes, die zu deinem Leben passen. Datenbasierte Gegendrecherche für England.',
+ product: 'Produkt',
+ resources: 'Ressourcen',
+ legal: 'Rechtliches',
+ dataSources: 'Datenquellen',
+ methodology: 'Methodik',
+ contact: 'Support kontaktieren',
+ terms: 'Nutzungsbedingungen',
+ privacy: 'Datenschutzerklärung',
+ copyright: '© {{year}} Perfect Postcode. Alle Rechte vorbehalten.',
+ coverage: 'Deckt jeden Postcode in England ab.',
+ },
+
+ // ── Legal pages ────────────────────────────────────
+ legal: {
+ lastUpdated: 'Zuletzt aktualisiert: {{date}}',
+ englishOnly: 'Dieses Dokument liegt auf Englisch vor; die englische Fassung ist maßgeblich.',
+ },
+
pricingPage: {
title: 'Mit einem besseren Suchgebiet kaufen',
subtitle:
'Lebenslanger Zugang zu der Karte, die zeigt, wo du suchen solltest, bevor du Besichtigungen buchst.',
costContext:
'Käufer verbringen oft Abende damit, Inserate, Pendelzeiten, Schulberichte, Kriminalitätskarten, Street View und Verkaufspreise zusammenzuführen. In London ist das besonders mühsam, aber dasselbe Rechercheproblem gibt es in ganz England. Perfect Postcode bringt die Gebietsrecherche auf eine Karte, bevor du Wochenenden, Gebühren und Aufmerksamkeit investierst.',
- lessThanSurvey: 'Weniger als ein Survey. Deutlich wirksamer, um deine Auswahl zu steuern.',
+ lessThanSurvey:
+ 'Kostet weniger als ein Zehntel eines Gutachtens — und prägt eine weit größere Entscheidung.',
currentTier: 'Aktuelle Stufe',
firstNUsers: 'Erste {{count}} Nutzer',
everyoneAfter: 'Alle danach',
@@ -1054,11 +1085,12 @@ const de: Translations = {
getStarted: 'Jetzt starten',
getStartedPrice: 'Jetzt starten — {{price}}',
noCreditCard: 'Keine Kreditkarte erforderlich',
+ moneyBack: '14 Tage Geld-zurück-Garantie.',
soldOut: 'Ausverkauft',
upcoming: 'Demnächst',
failedToLoad: 'Preise konnten nicht geladen werden. Bitte später erneut versuchen.',
- feat1: '56 Filter in ganz England',
+ feat1: '40+ Filter und 200+ Datenfelder',
feat2: 'Jeder Postcode nach deinen Bedürfnissen durchsuchbar',
feat3: 'Unbegrenztes Erkunden der Karte, gespeicherte Suchen und Exporte',
feat4: '13 Mio. historische Transaktionen und Preiskontext',
@@ -1298,9 +1330,10 @@ const de: Translations = {
faqBehindData3Q: 'Warum zeigen benachbarte Postleitzahlen identische Kriminalitätszahlen?',
faqBehindData3A:
'Polizeilich erfasste Kriminalität auf Straßenebene wird auf LSOA-Ebene veröffentlicht — kleine Nachbarschaftsgebiete mit etwa 1.500 Einwohnern. Jede Postleitzahl innerhalb derselben LSOA übernimmt dieselben Jahreszahlen, sodass eine ruhige Wohnstraße und eine Hauptstraße einen Block entfernt identische Werte zeigen können, wenn sie auf derselben Seite der Grenze liegen. Die Pro-Kopf-Rate kann in Postleitzahlen mit Krankenhäusern, Universitätsgeländen oder Industriegebieten ungewöhnlich hoch wirken, weil dort viele Vorfälle gezählt werden, aber wenige Einwohner gemeldet sind.',
- faqBehindData4Q: 'Bedeutet „Gute Schulen in 2 km Umkreis“, dass mein Kind dorthin gehen kann?',
+ faqBehindData4Q:
+ 'Was bedeutet die Zahl der „Schul-Einzugsgebiete“ — kann mein Kind diese Schulen besuchen?',
faqBehindData4A:
- 'Nein. Die Zählung sucht staatliche Schulen, deren eigene Postleitzahl in einem Kreis um deinen Postleitzahl-Mittelpunkt liegt. Einzugsgebiete, konfessionelle oder selektive Aufnahmekriterien, Geschwisterregelungen und Anmeldebedingungen werden nicht modelliert — eine nahegelegene Gute oder Hervorragende Schule kann von deiner Adresse aus unerreichbar sein. Nutze die Zahl, um Gebiete zu vergleichen, und prüfe tatsächliche Aufnahmebedingungen bei der Schule oder Gemeinde, bevor du dich darauf verlässt.',
+ 'Jede Zahl gibt an, wie viele staatliche Schulen mit der Bewertung Gut oder Hervorragend ein modelliertes historisches Einzugsgebiet haben, das die Postleitzahl abdeckt. Wir simulieren, wie Englands entfernungsbasierte Aufnahmen Plätze vergeben: Kinder (Zensus 2021) bewerben sich an nahegelegenen Schulen und wägen dabei Entfernung gegen Ofsted-Bewertung ab; eine überbuchte Schule nimmt die nächstgelegenen Bewerber auf, bis sie voll ist — ihr Einzugsradius ist die Entfernung des zuletzt aufgenommenen Kindes, genau die „zuletzt vergebene Entfernung“, die Gemeinden veröffentlichen. Das Modell ist an Hunderten dieser veröffentlichten Werte kalibriert. Es schätzt, wo man plausibel einen Platz bekommt; es ist kein offizielles Aufnahmegebiet. Konfessionelle und selektive Aufnahmen, Geschwisterpriorität und jährliche Grenzänderungen werden nicht modelliert — prüfe Einzugsgebiete und Aufnahmeregeln daher immer bei der Schule oder Gemeinde, bevor du eine Entscheidung darauf stützt.',
faqBehindData5Q:
'Warum zeigt eine Postleitzahl „Gigabit“, wenn nicht jedes Haus Glasfaser hat?',
faqBehindData5A:
@@ -1468,16 +1501,11 @@ const de: Translations = {
'Fahrzeit zum nächsten Bahn- oder U-Bahnhof (Min.)',
// ─ Feature names (Education) ─
- 'Good+ primary schools within 2km': 'Gute+ Grundschulen im Umkreis von 2 km',
- 'Good+ secondary schools within 2km': 'Gute+ weiterführende Schulen im Umkreis von 2 km',
- 'Good+ primary schools within 5km': 'Gute+ Grundschulen im Umkreis von 5 km',
- 'Good+ secondary schools within 5km': 'Gute+ weiterführende Schulen im Umkreis von 5 km',
- 'Outstanding primary schools within 2km': 'Hervorragende Grundschulen im Umkreis von 2 km',
- 'Outstanding secondary schools within 2km':
- 'Hervorragende weiterführende Schulen im Umkreis von 2 km',
- 'Outstanding primary schools within 5km': 'Hervorragende Grundschulen im Umkreis von 5 km',
- 'Outstanding secondary schools within 5km':
- 'Hervorragende weiterführende Schulen im Umkreis von 5 km',
+ 'Good+ primary school catchments': 'Einzugsgebiete guter+ Grundschulen',
+ 'Good+ secondary school catchments': 'Einzugsgebiete guter+ weiterführender Schulen',
+ 'Outstanding primary school catchments': 'Einzugsgebiete hervorragender Grundschulen',
+ 'Outstanding secondary school catchments':
+ 'Einzugsgebiete hervorragender weiterführender Schulen',
'Education, Skills and Training Score': 'Wert für Bildung, Kompetenzen und Ausbildung',
// ─ Feature names (Area development) ─
@@ -1580,6 +1608,7 @@ const de: Translations = {
'Bus station': 'Busbahnhof',
'Taxi rank': 'Taxistand',
'Tube station': 'U-Bahn-Station',
+ 'Tram & Metro stop': 'Tram- & Metro-Haltestelle',
Café: 'Café',
Restaurant: 'Restaurant',
Pub: 'Pub',
@@ -1626,7 +1655,8 @@ const de: Translations = {
'GP Surgery': 'Hausarztpraxis',
Dentist: 'Zahnarzt',
Pharmacy: 'Apotheke',
- 'Hospital & Clinic': 'Krankenhaus & Klinik',
+ Hospital: 'Krankenhaus',
+ Clinic: 'Klinik',
Optician: 'Optiker',
Physiotherapy: 'Physiotherapie',
'Counselling & Therapy': 'Beratung & Therapie',
diff --git a/frontend/src/i18n/locales/en.ts b/frontend/src/i18n/locales/en.ts
index 2d3db79..74fba04 100644
--- a/frontend/src/i18n/locales/en.ts
+++ b/frontend/src/i18n/locales/en.ts
@@ -597,6 +597,8 @@ const en = {
pleaseWait: 'Please wait...',
sendResetLink: 'Send reset link',
backToLogin: 'Back to login',
+ registerConsent:
+ 'By creating an account you agree to our Terms of Service and Privacy Policy.',
},
// ── Upgrade Modal ──────────────────────────────────
@@ -653,7 +655,7 @@ const en = {
findingPerfectPostcode: 'Finding the Perfect Postcode',
addFiltersHint: 'Add filters below to narrow the map to areas that match your criteria',
upgradePrompt:
- 'Find matching postcodes using crime, schools, noise, broadband, prices, and 50+ more filters across England.',
+ 'Find matching postcodes using crime, schools, noise, broadband, prices, and 40+ combinable filters across England.',
oneTimeLifetime: 'One-time payment, lifetime access.',
upgradeToFullMap: 'Upgrade to full map',
chooseFilters: 'Click Add to filter. The small buttons show data details or colour the map.',
@@ -684,7 +686,6 @@ const en = {
filtersOut: 'filters out {{value}}',
schoolType: 'School type',
schoolRating: 'School rating',
- schoolDistance: 'School distance',
primary: 'Primary',
secondary: 'Secondary',
rating: 'Rating',
@@ -927,7 +928,7 @@ const en = {
showcaseFeatureNoiseShort: 'Noise',
showcaseFeatureSchoolsShort: 'Schools',
showcaseFeatureTravelShort: 'Travel',
- showcaseGoodPrimariesNearby: '{{count}}+ good primaries nearby',
+ showcaseGoodPrimariesNearby: 'In {{count}}+ good primary catchments',
showcaseWithinRail: 'Within {{count}} min of rail',
showcaseMatchingHomesLabel: 'Matching homes',
showcaseMatchingHomes: '{{value}} matching homes',
@@ -987,6 +988,12 @@ const en = {
statFilters: 'combinable filters',
statEvery: 'Every',
statPostcodeInEngland: 'postcode in England',
+ coverageNote:
+ 'Covers every postcode in England — 200+ data fields each. Scotland & Wales are on the roadmap.',
+ priceStrip: 'Lifetime access, currently {{price}} — the price rises as tiers fill.',
+ priceStripSpots: '{{count}} spot left at this price.',
+ priceStripSpotsPlural: '{{count}} spots left at this price.',
+ priceStripCta: 'See pricing',
ourPhilosophy: 'Start with what matters, then find the right postcode',
philosophyP1:
'Most property sites ask where you want to live. In London that’s painfully hard, but the same problem shows up across England: buyers choose from the few places they know, then cross-check commute tools, Ofsted, police data, Street View, broadband checkers, and sold prices in separate tabs.',
@@ -1010,7 +1017,7 @@ const en = {
compAreaDataSub: '(crime, schools, noise, broadband, amenities)',
compPropertyData: 'Property-level history',
compPropertyDataSub: '(sold prices, EPC, floor area, estimated value)',
- compFilters: '56 filters working together',
+ compFilters: '40+ filters working together',
compFiltersSub: '(not one postcode or one listing at a time)',
ctaTitle: 'Stop guessing where to buy.',
ctaDescription:
@@ -1018,13 +1025,34 @@ const en = {
},
// ── Pricing Page ───────────────────────────────────
+ // ── Footer ─────────────────────────────────────────
+ footer: {
+ tagline: 'Find the postcodes that fit your life. Evidence-first area research for England.',
+ product: 'Product',
+ resources: 'Resources',
+ legal: 'Legal',
+ dataSources: 'Data sources',
+ methodology: 'Methodology',
+ contact: 'Contact support',
+ terms: 'Terms of Service',
+ privacy: 'Privacy Policy',
+ copyright: '© {{year}} Perfect Postcode. All rights reserved.',
+ coverage: 'Covers every postcode in England.',
+ },
+
+ // ── Legal pages ────────────────────────────────────
+ legal: {
+ lastUpdated: 'Last updated: {{date}}',
+ englishOnly: 'This document is provided in English; the English version is authoritative.',
+ },
+
pricingPage: {
title: 'Buy with a better search area',
subtitle:
'Lifetime access to the map that helps you find where to look before you book viewings.',
costContext:
'Buyers often spend evenings stitching together listings, commute checks, school reports, crime maps, Street View, and sold prices. In London this is relentless, but the same research problem appears across England. Perfect Postcode puts the area research on one map before you commit your weekends, fees, and attention.',
- lessThanSurvey: 'Less than a survey. Vastly more impactful in guiding your choices.',
+ lessThanSurvey: 'Costs less than a tenth of a survey — and shapes a far bigger decision.',
currentTier: 'Current tier',
firstNUsers: 'First {{count}} users',
everyoneAfter: 'Everyone after',
@@ -1037,11 +1065,12 @@ const en = {
getStarted: 'Get started',
getStartedPrice: 'Get started - {{price}}',
noCreditCard: 'No credit card required',
+ moneyBack: '14-day money-back guarantee.',
soldOut: 'Sold out',
upcoming: 'Upcoming',
failedToLoad: 'Failed to load pricing. Please try again later.',
- feat1: '56 filters across England',
+ feat1: '40+ filters and 200+ data fields',
feat2: 'Every postcode searchable from your needs',
feat3: 'Unlimited map exploration, saved searches and exports',
feat4: '13M historical transactions and price context',
@@ -1277,9 +1306,10 @@ const en = {
faqBehindData3Q: 'Why do nearby postcodes share the same crime numbers?',
faqBehindData3A:
'Police-recorded street-level crime is published at LSOA level — small neighbourhood areas of about 1,500 residents. Every postcode inside the same LSOA inherits the same yearly totals, so a quiet residential street and a high street one block over can show identical figures if they fall on the same side of the boundary. Per-capita rates can also look unusually high in postcodes covering hospitals, university campuses or industrial estates, because those areas record incidents normally but have very few residents on paper to divide the count across.',
- faqBehindData4Q: 'Does "Good schools within 2km" mean my child can attend them?',
+ faqBehindData4Q:
+ 'What does a "school catchments" count mean — can my child attend those schools?',
faqBehindData4A:
- 'No. The count looks for state schools whose own postcode falls inside a circle around your postcode’s centroid. Catchment areas, faith and selection criteria, sibling priority and admission rules are not modelled — a Good or Outstanding school nearby may still be unreachable from your address. Use the count to compare areas, then confirm actual admissions with the school or local authority before relying on it for a decision.',
+ 'Each count is the number of Good or Outstanding state schools whose modelled historical catchment area covers the postcode. We simulate how England’s distance-based admissions allocate places: children (Census 2021) apply to nearby schools, trading distance against Ofsted rating, and an oversubscribed school admits its closest applicants until full — its catchment radius is the distance of the last child admitted, the same "last distance offered" councils publish, and the model is calibrated against hundreds of those published figures. It estimates where pupils plausibly get a place; it is not an official admission area. Faith and selective admissions, sibling priority and yearly boundary changes are not modelled, so always confirm catchments and admission rules with the school or local authority before relying on them for a decision.',
faqBehindData5Q: 'Why does a postcode show "Gigabit" when not every home has fibre?',
faqBehindData5A:
'Broadband coverage from Ofcom Connected Nations is reported per postcode as the percentage of premises that can get each speed tier. We display the highest tier with any availability, so a postcode where even one home can reach Gigabit reads "Gigabit available". It is the right answer for "is full-fibre on this street at all?", but does not guarantee every flat in a block can be ordered today. Always verify with the providers for your specific address before signing.',
@@ -1445,14 +1475,10 @@ const en = {
'Travel time to nearest train or tube station (min)',
// ─ Feature names (Education) ─
- 'Good+ primary schools within 2km': 'Good+ primary schools within 2km',
- 'Good+ secondary schools within 2km': 'Good+ secondary schools within 2km',
- 'Good+ primary schools within 5km': 'Good+ primary schools within 5km',
- 'Good+ secondary schools within 5km': 'Good+ secondary schools within 5km',
- 'Outstanding primary schools within 2km': 'Outstanding primary schools within 2km',
- 'Outstanding secondary schools within 2km': 'Outstanding secondary schools within 2km',
- 'Outstanding primary schools within 5km': 'Outstanding primary schools within 5km',
- 'Outstanding secondary schools within 5km': 'Outstanding secondary schools within 5km',
+ 'Good+ primary school catchments': 'Good+ primary school catchments',
+ 'Good+ secondary school catchments': 'Good+ secondary school catchments',
+ 'Outstanding primary school catchments': 'Outstanding primary school catchments',
+ 'Outstanding secondary school catchments': 'Outstanding secondary school catchments',
'Education, Skills and Training Score': 'Education, Skills and Training Score',
// ─ Feature names (Area development) ─
@@ -1554,6 +1580,7 @@ const en = {
'Bus station': 'Bus station',
'Taxi rank': 'Taxi rank',
'Tube station': 'Tube station',
+ 'Tram & Metro stop': 'Tram & Metro stop',
Café: 'Café',
Restaurant: 'Restaurant',
Pub: 'Pub',
@@ -1600,7 +1627,8 @@ const en = {
'GP Surgery': 'GP Surgery',
Dentist: 'Dentist',
Pharmacy: 'Pharmacy',
- 'Hospital & Clinic': 'Hospital & Clinic',
+ Hospital: 'Hospital',
+ Clinic: 'Clinic',
Optician: 'Optician',
Physiotherapy: 'Physiotherapy',
'Counselling & Therapy': 'Counselling & Therapy',
diff --git a/frontend/src/i18n/locales/fr.ts b/frontend/src/i18n/locales/fr.ts
index 45c1d60..4433bbb 100644
--- a/frontend/src/i18n/locales/fr.ts
+++ b/frontend/src/i18n/locales/fr.ts
@@ -622,6 +622,8 @@ const fr: Translations = {
pleaseWait: 'Veuillez patienter...',
sendResetLink: 'Envoyer le lien de réinitialisation',
backToLogin: 'Retour à la connexion',
+ registerConsent:
+ 'En créant un compte, vous acceptez nos Conditions d’utilisation et notre Politique de confidentialité.',
},
// ── Upgrade Modal ──────────────────────────────────
@@ -680,7 +682,7 @@ const fr: Translations = {
addFiltersHint:
'Ajoutez des filtres ci-dessous pour limiter la carte aux secteurs adaptés à vos critères',
upgradePrompt:
- 'Trouvez les codes postaux compatibles grâce aux filtres de criminalité, d’écoles, de bruit, de haut débit, de prix et plus de 50 autres filtres dans toute l’Angleterre.',
+ 'Trouvez les codes postaux compatibles grâce aux filtres de criminalité, d’écoles, de bruit, de haut débit, de prix et plus de 40 filtres combinables dans toute l’Angleterre.',
oneTimeLifetime: 'Paiement unique, accès à vie.',
upgradeToFullMap: 'Passer à la carte complète',
chooseFilters:
@@ -712,7 +714,6 @@ const fr: Translations = {
filtersOut: 'exclut {{value}}',
schoolType: 'Type d’école',
schoolRating: 'Évaluation Ofsted',
- schoolDistance: 'Distance de l’école',
primary: 'Primaire',
secondary: 'Secondaire',
rating: 'Note',
@@ -956,7 +957,7 @@ const fr: Translations = {
showcaseFeatureNoiseShort: 'Bruit',
showcaseFeatureSchoolsShort: 'Écoles',
showcaseFeatureTravelShort: 'Trajet',
- showcaseGoodPrimariesNearby: '{{count}}+ écoles primaires Good+ à proximité',
+ showcaseGoodPrimariesNearby: 'Dans {{count}}+ zones de recrutement de primaires Good+',
showcaseWithinRail: 'À moins de {{count}} min du train',
showcaseMatchingHomesLabel: 'Biens compatibles',
showcaseMatchingHomes: '{{value}} biens compatibles',
@@ -1018,6 +1019,13 @@ const fr: Translations = {
statFilters: 'filtres combinables',
statEvery: 'Chaque',
statPostcodeInEngland: 'code postal d’Angleterre',
+ coverageNote:
+ 'Couvre tous les codes postaux d’Angleterre — plus de 200 champs de données chacun. L’Écosse et le pays de Galles sont sur la feuille de route.',
+ priceStrip:
+ 'Accès à vie, actuellement {{price}} — le prix augmente à mesure que les paliers se remplissent.',
+ priceStripSpots: '{{count}} place restante à ce prix.',
+ priceStripSpotsPlural: '{{count}} places restantes à ce prix.',
+ priceStripCta: 'Voir les tarifs',
ourPhilosophy: 'Commencez par ce qui compte, puis trouvez le bon code postal',
philosophyP1:
'La plupart des sites immobiliers demandent où vous voulez vivre. À Londres, c’est particulièrement difficile, mais le même problème existe partout en Angleterre : les acheteurs partent des quelques lieux qu’ils connaissent, puis vérifient séparément trajets, écoles, criminalité, Street View, haut débit et prix vendus.',
@@ -1041,7 +1049,7 @@ const fr: Translations = {
compAreaDataSub: '(criminalité, écoles, bruit, haut débit, services)',
compPropertyData: 'Historique par bien',
compPropertyDataSub: '(prix vendus, EPC, surface, valeur estimée)',
- compFilters: '56 filtres qui fonctionnent ensemble',
+ compFilters: '40+ filtres qui fonctionnent ensemble',
compFiltersSub: '(pas un code postal ou une annonce à la fois)',
ctaTitle: 'Arrêtez de deviner où acheter ou louer.',
ctaDescription:
@@ -1049,13 +1057,36 @@ const fr: Translations = {
},
// ── Pricing Page ───────────────────────────────────
+ // ── Footer ─────────────────────────────────────────
+ footer: {
+ tagline:
+ 'Trouvez les codes postaux qui correspondent à votre vie. Une recherche de quartier fondée sur les données, pour l’Angleterre.',
+ product: 'Produit',
+ resources: 'Ressources',
+ legal: 'Légal',
+ dataSources: 'Sources de données',
+ methodology: 'Méthodologie',
+ contact: 'Contacter le support',
+ terms: 'Conditions d’utilisation',
+ privacy: 'Politique de confidentialité',
+ copyright: '© {{year}} Perfect Postcode. Tous droits réservés.',
+ coverage: 'Couvre tous les codes postaux d’Angleterre.',
+ },
+
+ // ── Legal pages ────────────────────────────────────
+ legal: {
+ lastUpdated: 'Dernière mise à jour : {{date}}',
+ englishOnly: 'Ce document est fourni en anglais ; la version anglaise fait foi.',
+ },
+
pricingPage: {
title: 'Acheter avec un meilleur secteur de recherche',
subtitle:
'Accès à vie à la carte qui vous aide à savoir où chercher avant de réserver des visites.',
costContext:
'Les acheteurs passent souvent leurs soirées à recouper annonces, trajets, rapports scolaires, cartes de criminalité, Street View et prix vendus. À Londres, c’est incessant, mais le même problème existe dans toute l’Angleterre. Perfect Postcode rassemble la recherche de secteur sur une seule carte avant que vous n’engagiez vos week-ends, vos frais et votre attention.',
- lessThanSurvey: 'Moins cher qu’un survey immobilier. Bien plus utile pour guider vos choix.',
+ lessThanSurvey:
+ 'Moins d’un dixième du prix d’une expertise — pour une décision bien plus importante.',
currentTier: 'Offre actuelle',
firstNUsers: '{{count}} premiers utilisateurs',
everyoneAfter: 'Utilisateurs suivants',
@@ -1068,11 +1099,12 @@ const fr: Translations = {
getStarted: 'Commencer',
getStartedPrice: 'Commencer - {{price}}',
noCreditCard: 'Aucune carte bancaire requise',
+ moneyBack: 'Garantie satisfait ou remboursé de 14 jours.',
soldOut: 'Épuisé',
upcoming: 'À venir',
failedToLoad: 'Échec du chargement des tarifs. Veuillez réessayer plus tard.',
- feat1: '56 filtres dans toute l’Angleterre',
+ feat1: '40+ filtres et 200+ champs de données',
feat2: 'Chaque code postal recherchable selon vos besoins',
feat3: 'Exploration illimitée de la carte, recherches enregistrées et exportations',
feat4: '13 M de ventes historiques et contexte des prix',
@@ -1316,9 +1348,9 @@ const fr: Translations = {
faqBehindData3A:
'La criminalité enregistrée par la police au niveau rue est publiée à l’échelle LSOA — de petits quartiers d’environ 1 500 habitants. Chaque code postal situé dans la même LSOA hérite des mêmes totaux annuels, donc une rue résidentielle calme et une rue commerçante un pâté de maisons plus loin peuvent afficher des chiffres identiques si elles sont du même côté de la limite. Les taux par habitant peuvent sembler anormalement élevés dans des codes postaux couvrant des hôpitaux, des campus ou des zones industrielles, car ils enregistrent des incidents normalement mais comptent peu de résidents officiels.',
faqBehindData4Q:
- '« Bonnes écoles dans un rayon de 2 km » signifie-t-il que mon enfant peut y aller ?',
+ 'Que signifie le nombre de « zones de recrutement » — mon enfant peut-il fréquenter ces écoles ?',
faqBehindData4A:
- 'Non. Le décompte cherche les écoles publiques dont le propre code postal tombe dans un cercle autour du centroïde de votre code postal. Les secteurs scolaires, critères religieux ou sélectifs, priorité fratrie et règles d’admission ne sont pas modélisés — une école Bonne ou Excellente proche peut rester inaccessible depuis votre adresse. Utilisez le décompte pour comparer des zones, puis confirmez les conditions d’admission auprès de l’école ou de la mairie avant de vous y fier.',
+ 'Chaque nombre correspond aux écoles publiques notées Bien ou Excellent dont la zone de recrutement historique modélisée couvre le code postal. Nous simulons la façon dont les admissions anglaises fondées sur la distance attribuent les places : les enfants (recensement 2021) candidatent aux écoles proches en arbitrant entre distance et note Ofsted, et une école sursouscrite admet les candidats les plus proches jusqu’à être pleine — son rayon de recrutement est la distance du dernier enfant admis, la « dernière distance d’admission » que publient les collectivités. Le modèle est calibré sur des centaines de ces distances publiées. Il estime où une place est plausible ; ce n’est pas un secteur d’admission officiel. Les critères religieux ou sélectifs, la priorité fratrie et les changements annuels de limites ne sont pas modélisés : confirmez toujours les zones et les règles d’admission auprès de l’école ou de la mairie avant de vous y fier pour une décision.',
faqBehindData5Q:
'Pourquoi un code postal affiche-t-il « Gigabit » quand toutes les maisons n’en ont pas ?',
faqBehindData5A:
@@ -1488,14 +1520,10 @@ const fr: Translations = {
'Temps de trajet jusqu’à la gare ou station de métro la plus proche (min)',
// ─ Feature names (Education) ─
- 'Good+ primary schools within 2km': 'Écoles primaires Bien+ dans un rayon de 2 km',
- 'Good+ secondary schools within 2km': 'Collèges/lycées Bien+ dans un rayon de 2 km',
- 'Good+ primary schools within 5km': 'Écoles primaires Bien+ dans un rayon de 5 km',
- 'Good+ secondary schools within 5km': 'Collèges/lycées Bien+ dans un rayon de 5 km',
- 'Outstanding primary schools within 2km': 'Écoles primaires Excellent dans un rayon de 2 km',
- 'Outstanding secondary schools within 2km': 'Collèges/lycées Excellent dans un rayon de 2 km',
- 'Outstanding primary schools within 5km': 'Écoles primaires Excellent dans un rayon de 5 km',
- 'Outstanding secondary schools within 5km': 'Collèges/lycées Excellent dans un rayon de 5 km',
+ 'Good+ primary school catchments': 'Zones de recrutement d’écoles primaires Bien+',
+ 'Good+ secondary school catchments': 'Zones de recrutement de collèges/lycées Bien+',
+ 'Outstanding primary school catchments': 'Zones de recrutement d’écoles primaires Excellent',
+ 'Outstanding secondary school catchments': 'Zones de recrutement de collèges/lycées Excellent',
'Education, Skills and Training Score': 'Score éducation, compétences et formation',
// ─ Feature names (Area development) ─
@@ -1596,7 +1624,8 @@ const fr: Translations = {
'Bus stop': 'Arrêt de bus',
'Bus station': 'Gare routière',
'Taxi rank': 'Station de taxi',
- 'Tube station': 'Station de métro',
+ 'Tube station': 'Station de métro londonien',
+ 'Tram & Metro stop': 'Arrêt de tramway et métro',
Café: 'Café',
Restaurant: 'Restaurant',
Pub: 'Pub',
@@ -1643,7 +1672,8 @@ const fr: Translations = {
'GP Surgery': 'Cabinet médical',
Dentist: 'Dentiste',
Pharmacy: 'Pharmacie',
- 'Hospital & Clinic': 'Hôpital et clinique',
+ Hospital: 'Hôpital',
+ Clinic: 'Clinique',
Optician: 'Opticien',
Physiotherapy: 'Kinésithérapie',
'Counselling & Therapy': 'Soutien psychologique et thérapie',
diff --git a/frontend/src/i18n/locales/hi.ts b/frontend/src/i18n/locales/hi.ts
index 4118efa..8d56359 100644
--- a/frontend/src/i18n/locales/hi.ts
+++ b/frontend/src/i18n/locales/hi.ts
@@ -595,6 +595,8 @@ const hi: Translations = {
pleaseWait: 'कृपया प्रतीक्षा करें...',
sendResetLink: 'रीसेट लिंक भेजें',
backToLogin: 'लॉग इन पर वापस जाएं',
+ registerConsent:
+ 'खाता बनाकर आप हमारी सेवा की शर्तों और गोपनीयता नीति से सहमत होते हैं.',
},
upgrade: {
@@ -647,7 +649,7 @@ const hi: Translations = {
findingPerfectPostcode: 'Perfect Postcode खोजा जा रहा है',
addFiltersHint: 'अपनी शर्तों से मेल खाने वाले क्षेत्र पाने के लिए नीचे फ़िल्टर जोड़ें',
upgradePrompt:
- 'इंग्लैंड भर में अपराध, स्कूल, शोर, ब्रॉडबैंड, कीमतें और 50+ अन्य फ़िल्टर से मेल खाने वाले पोस्टकोड खोजें.',
+ 'इंग्लैंड भर में अपराध, स्कूल, शोर, ब्रॉडबैंड, कीमतें और 40+ संयोजित फ़िल्टर से मेल खाने वाले पोस्टकोड खोजें.',
oneTimeLifetime: 'एक बार भुगतान, आजीवन पहुँच.',
upgradeToFullMap: 'पूरे मानचित्र पर अपग्रेड करें',
chooseFilters:
@@ -679,7 +681,6 @@ const hi: Translations = {
filtersOut: '{{value}} को बाहर करता है',
schoolType: 'स्कूल प्रकार',
schoolRating: 'स्कूल रेटिंग',
- schoolDistance: 'स्कूल दूरी',
primary: 'प्राइमरी',
secondary: 'सेकेंडरी',
rating: 'रेटिंग',
@@ -909,7 +910,7 @@ const hi: Translations = {
showcaseFeatureNoiseShort: 'शोर',
showcaseFeatureSchoolsShort: 'स्कूल',
showcaseFeatureTravelShort: 'यात्रा',
- showcaseGoodPrimariesNearby: '{{count}}+ अच्छे प्राइमरी स्कूल पास में',
+ showcaseGoodPrimariesNearby: '{{count}}+ अच्छे प्राइमरी स्कूलों के कैचमेंट क्षेत्र में',
showcaseWithinRail: 'रेल से {{count}} मिनट के भीतर',
showcaseMatchingHomesLabel: 'मेल खाते घर',
showcaseMatchingHomes: '{{value}} मेल खाते घर',
@@ -969,6 +970,12 @@ const hi: Translations = {
statFilters: 'जोड़े जा सकने वाले फ़िल्टर',
statEvery: 'इंग्लैंड का हर',
statPostcodeInEngland: 'पोस्टकोड',
+ coverageNote:
+ 'इंग्लैंड का हर पोस्टकोड कवर — हर एक के लिए 200+ डेटा फ़ील्ड. स्कॉटलैंड और वेल्स रोडमैप पर हैं.',
+ priceStrip: 'लाइफ़टाइम एक्सेस, अभी {{price}} — टियर भरने पर क़ीमत बढ़ती है.',
+ priceStripSpots: 'इस क़ीमत पर सिर्फ़ {{count}} जगह बची है.',
+ priceStripSpotsPlural: 'इस क़ीमत पर सिर्फ़ {{count}} जगहें बची हैं.',
+ priceStripCta: 'क़ीमतें देखें',
ourPhilosophy: 'जो मायने रखता है उससे शुरू करें, फिर सही पोस्टकोड खोजें',
philosophyP1:
'अधिकांश संपत्ति साइटें पूछती हैं कि आप कहां रहना चाहते हैं. लंदन में यह बहुत मुश्किल है, लेकिन यही समस्या पूरे इंग्लैंड में आती है: खरीदार उन कुछ जगहों में से चुनते हैं जिन्हें वे जानते हैं, फिर आवागमन साधन, Ofsted, पुलिस डेटा, Street View, ब्रॉडबैंड जांच और बेचे गए दामों को अलग-अलग टैब में मिलाते हैं.',
@@ -992,20 +999,43 @@ const hi: Translations = {
compAreaDataSub: '(अपराध, स्कूल, शोर, ब्रॉडबैंड, सुविधाएं)',
compPropertyData: 'संपत्ति-स्तर इतिहास',
compPropertyDataSub: '(बेची कीमतें, EPC, फर्श क्षेत्रफल, अनुमानित मूल्य)',
- compFilters: '56 फ़िल्टर साथ काम करते हुए',
+ compFilters: '40+ फ़िल्टर साथ काम करते हुए',
compFiltersSub: '(एक समय में केवल एक पोस्टकोड या एक लिस्टिंग नहीं)',
ctaTitle: 'कहां खरीदना है, इसका अनुमान लगाना बंद करें.',
ctaDescription:
'उन पोस्टकोड की शॉर्टलिस्ट बनाएं जो आपकी वास्तविक जिंदगी से मेल खाते हैं, फिर उन्हें खुद जांचें.',
},
+ // ── Footer ─────────────────────────────────────────
+ footer: {
+ tagline:
+ 'अपनी ज़िंदगी से मेल खाते पोस्टकोड खोजें. इंग्लैंड के लिए डेटा-आधारित इलाक़े की रिसर्च.',
+ product: 'प्रोडक्ट',
+ resources: 'संसाधन',
+ legal: 'क़ानूनी',
+ dataSources: 'डेटा स्रोत',
+ methodology: 'कार्यप्रणाली',
+ contact: 'सपोर्ट से संपर्क करें',
+ terms: 'सेवा की शर्तें',
+ privacy: 'गोपनीयता नीति',
+ copyright: '© {{year}} Perfect Postcode. सर्वाधिकार सुरक्षित.',
+ coverage: 'इंग्लैंड का हर पोस्टकोड कवर करता है.',
+ },
+
+ // ── Legal pages ────────────────────────────────────
+ legal: {
+ lastUpdated: 'आख़िरी अपडेट: {{date}}',
+ englishOnly: 'यह दस्तावेज़ अंग्रेज़ी में उपलब्ध है; अंग्रेज़ी संस्करण ही मान्य है.',
+ },
+
pricingPage: {
title: 'बेहतर खोज क्षेत्र के साथ खरीदें',
subtitle:
'उस मानचित्र की आजीवन पहुँच जो मकान देखने की बुकिंग से पहले यह तय करने में मदद करता है कि कहां देखना है.',
costContext:
'खरीदार अक्सर शामें लिस्टिंग, आवागमन जांच, स्कूल रिपोर्ट, अपराध मानचित्र, Street View और बेचे गए दामों को जोड़ने में बिताते हैं. लंदन में यह लगातार होता है, लेकिन यही शोध समस्या पूरे इंग्लैंड में दिखती है. Perfect Postcode आपके सप्ताहांत, फीस और ध्यान लगाने से पहले क्षेत्र शोध को एक मानचित्र पर रखता है.',
- lessThanSurvey: 'एक मकान सर्वेक्षण से कम खर्च. आपके चुनावों को दिशा देने में कहीं अधिक असरदार.',
+ lessThanSurvey:
+ 'एक मकान सर्वेक्षण की क़ीमत के दसवें हिस्से से भी कम — और कहीं बड़े फ़ैसले में मददगार.',
currentTier: 'मौजूदा स्तर',
firstNUsers: 'पहले {{count}} उपयोगकर्ता',
everyoneAfter: 'उसके बाद सभी',
@@ -1018,10 +1048,11 @@ const hi: Translations = {
getStarted: 'शुरू करें',
getStartedPrice: 'शुरू करें - {{price}}',
noCreditCard: 'क्रेडिट कार्ड की जरूरत नहीं',
+ moneyBack: '14 दिन की मनी-बैक गारंटी.',
soldOut: 'बिक गया',
upcoming: 'आने वाला',
failedToLoad: 'कीमतें लोड नहीं हो सकीं. कृपया बाद में फिर कोशिश करें.',
- feat1: 'इंग्लैंड भर में 56 फ़िल्टर',
+ feat1: '40+ फ़िल्टर और 200+ डेटा फ़ील्ड',
feat2: 'आपकी जरूरतों से हर पोस्टकोड खोजने योग्य',
feat3: 'असीमित मानचित्र खोज, सहेजी गई खोजें और निर्यात',
feat4: '1.3 करोड़ ऐतिहासिक लेनदेन और कीमत संदर्भ',
@@ -1242,9 +1273,10 @@ const hi: Translations = {
faqBehindData3Q: 'पास के पोस्टकोड में अपराध संख्या समान क्यों होती है?',
faqBehindData3A:
'पुलिस द्वारा दर्ज सड़क-स्तरीय अपराध डेटा LSOA स्तर पर प्रकाशित होता है — लगभग 1,500 निवासियों वाले छोटे पड़ोस क्षेत्र. एक ही LSOA के सभी पोस्टकोड को समान वार्षिक संख्याएँ मिलती हैं, इसलिए एक शांत आवासीय सड़क और एक ब्लॉक दूर मुख्य सड़क समान आँकड़े दिखा सकती हैं अगर वे सीमा के एक ही ओर हों. अस्पतालों, विश्वविद्यालय परिसरों या औद्योगिक क्षेत्रों को कवर करने वाले पोस्टकोड में प्रति-व्यक्ति दर असामान्य रूप से ऊँची लग सकती है, क्योंकि वहाँ घटनाएँ सामान्य रूप से दर्ज होती हैं पर कागज़ पर निवासी कम होते हैं.',
- faqBehindData4Q: '"2 किमी के भीतर अच्छे स्कूल" का मतलब क्या मेरा बच्चा वहाँ जा सकता है?',
+ faqBehindData4Q:
+ '"स्कूल कैचमेंट क्षेत्र" की संख्या का क्या मतलब है — क्या मेरा बच्चा उन स्कूलों में जा सकता है?',
faqBehindData4A:
- 'नहीं. यह गणना उन सरकारी स्कूलों को खोजती है जिनका अपना पोस्टकोड आपके पोस्टकोड के केंद्र के चारों ओर एक वृत्त के भीतर आता है. प्रवेश क्षेत्र, धार्मिक या चयन मानदंड, भाई-बहन प्राथमिकता और दाखिला नियम मॉडल नहीं किए जाते — पास का अच्छा या उत्कृष्ट स्कूल आपके पते से पहुंच से बाहर भी हो सकता है. क्षेत्रों की तुलना के लिए इस संख्या का उपयोग करें, फिर निर्णय से पहले स्कूल या स्थानीय प्राधिकरण से वास्तविक दाखिले की पुष्टि करें.',
+ 'हर संख्या उन अच्छी या उत्कृष्ट रेटिंग वाले सरकारी स्कूलों की गिनती है जिनका मॉडल किया गया ऐतिहासिक कैचमेंट क्षेत्र इस पोस्टकोड को कवर करता है. हम अनुकरण करते हैं कि इंग्लैंड के दूरी-आधारित दाखिले सीटें कैसे बाँटते हैं: बच्चे (जनगणना 2021) दूरी और Ofsted रेटिंग को तौलते हुए पास के स्कूलों में आवेदन करते हैं, और ज़्यादा माँग वाला स्कूल भरने तक सबसे नज़दीकी आवेदकों को लेता है — उसका कैचमेंट दायरा आखिरी दाखिल बच्चे की दूरी है, वही "आखिरी दाखिला दूरी" जो परिषदें प्रकाशित करती हैं. मॉडल ऐसी सैकड़ों प्रकाशित दूरियों पर कैलिब्रेट किया गया है. यह अनुमान है कि कहाँ सीट मिलना संभव है; यह आधिकारिक दाखिला क्षेत्र नहीं है. धार्मिक या चयनात्मक दाखिले, भाई-बहन प्राथमिकता और सीमाओं में वार्षिक बदलाव मॉडल नहीं किए जाते, इसलिए निर्णय से पहले कैचमेंट और दाखिला नियमों की पुष्टि हमेशा स्कूल या स्थानीय प्राधिकरण से करें.',
faqBehindData5Q: 'जब हर घर में फ़ाइबर नहीं है, तो पोस्टकोड "Gigabit" क्यों दिखाता है?',
faqBehindData5A:
'Ofcom Connected Nations का ब्रॉडबैंड कवरेज प्रति पोस्टकोड इस प्रतिशत के रूप में दिया जाता है कि कितने परिसर हर गति स्तर पा सकते हैं. हम किसी भी उपलब्धता वाला सर्वोच्च स्तर दिखाते हैं, इसलिए जिस पोस्टकोड में सिर्फ एक घर Gigabit पा सकता है वह "Gigabit उपलब्ध" दिखाता है. "क्या इस सड़क पर कहीं भी फुल-फ़ाइबर है?" के लिए यह सही उत्तर है, पर इससे यह गारंटी नहीं मिलती कि ब्लॉक के हर फ्लैट में आज सेवा लगवाई जा सकती है. अनुबंध करने से पहले अपने सटीक पते के लिए हमेशा प्रदाताओं से जाँच करें.',
@@ -1395,16 +1427,12 @@ const hi: Translations = {
'Listed building': 'सूचीबद्ध भवन',
'Travel time to nearest train or tube station (min)':
'निकटतम ट्रेन या ट्यूब स्टेशन तक यात्रा समय (मिनट)',
- 'Good+ primary schools within 2km': '2 किमी के अंदर अच्छी या बेहतर रेटिंग वाले प्राथमिक स्कूल',
- 'Good+ secondary schools within 2km':
- '2 किमी के अंदर अच्छी या बेहतर रेटिंग वाले सेकेंडरी स्कूल',
- 'Good+ primary schools within 5km': '5 किमी के अंदर अच्छी या बेहतर रेटिंग वाले प्राथमिक स्कूल',
- 'Good+ secondary schools within 5km':
- '5 किमी के अंदर अच्छी या बेहतर रेटिंग वाले सेकेंडरी स्कूल',
- 'Outstanding primary schools within 2km': '2 किमी के अंदर उत्कृष्ट प्राथमिक स्कूल',
- 'Outstanding secondary schools within 2km': '2 किमी के अंदर उत्कृष्ट सेकेंडरी स्कूल',
- 'Outstanding primary schools within 5km': '5 किमी के अंदर उत्कृष्ट प्राथमिक स्कूल',
- 'Outstanding secondary schools within 5km': '5 किमी के अंदर उत्कृष्ट सेकेंडरी स्कूल',
+ 'Good+ primary school catchments':
+ 'अच्छी या बेहतर रेटिंग वाले प्राथमिक स्कूलों के कैचमेंट क्षेत्र',
+ 'Good+ secondary school catchments':
+ 'अच्छी या बेहतर रेटिंग वाले सेकेंडरी स्कूलों के कैचमेंट क्षेत्र',
+ 'Outstanding primary school catchments': 'उत्कृष्ट प्राथमिक स्कूलों के कैचमेंट क्षेत्र',
+ 'Outstanding secondary school catchments': 'उत्कृष्ट सेकेंडरी स्कूलों के कैचमेंट क्षेत्र',
'Education, Skills and Training Score': 'शिक्षा, कौशल और प्रशिक्षण स्कोर',
'Income Score': 'आय स्कोर',
'Employment Score': 'रोजगार स्कोर',
@@ -1487,6 +1515,7 @@ const hi: Translations = {
'Bus station': 'बस स्टेशन',
'Taxi rank': 'टैक्सी स्टैंड',
'Tube station': 'ट्यूब स्टेशन',
+ 'Tram & Metro stop': 'ट्राम और मेट्रो स्टॉप',
Café: 'कैफे',
Restaurant: 'रेस्तरां',
Pub: 'पब',
@@ -1533,7 +1562,8 @@ const hi: Translations = {
'GP Surgery': 'GP क्लिनिक',
Dentist: 'दंत चिकित्सक',
Pharmacy: 'दवा दुकान',
- 'Hospital & Clinic': 'अस्पताल और क्लिनिक',
+ Hospital: 'अस्पताल',
+ Clinic: 'क्लिनिक',
Optician: 'ऑप्टिशियन',
Physiotherapy: 'फिजियोथेरेपी',
'Counselling & Therapy': 'काउंसलिंग और थेरेपी',
diff --git a/frontend/src/i18n/locales/hu.ts b/frontend/src/i18n/locales/hu.ts
index 5aaa9b6..063fb09 100644
--- a/frontend/src/i18n/locales/hu.ts
+++ b/frontend/src/i18n/locales/hu.ts
@@ -613,6 +613,8 @@ const hu: Translations = {
pleaseWait: 'Egy pillanat...',
sendResetLink: 'Visszaállító hivatkozás küldése',
backToLogin: 'Vissza a bejelentkezéshez',
+ registerConsent:
+ 'A fiók létrehozásával elfogadod a Felhasználási feltételeket és az Adatvédelmi tájékoztatót.',
},
// ── Upgrade Modal ──────────────────────────────────
@@ -669,7 +671,7 @@ const hu: Translations = {
findingPerfectPostcode: 'Tökéletes irányítószám keresése',
addFiltersHint: 'Adj hozzá szűrőket a térkép szűkítéséhez a feltételeidnek megfelelően',
upgradePrompt:
- 'Találj megfelelő irányítószámokat bűnözés, iskolák, zaj, szélessáv, árak és több mint 50 további szűrő alapján egész Angliában.',
+ 'Találj megfelelő irányítószámokat bűnözés, iskolák, zaj, szélessáv, árak és több mint 40 kombinálható szűrő alapján egész Angliában.',
oneTimeLifetime: 'Egyszeri fizetés, élethosszig tartó hozzáférés.',
upgradeToFullMap: 'Teljes térkép megnyitása',
chooseFilters:
@@ -701,7 +703,6 @@ const hu: Translations = {
filtersOut: '{{value}} helyet kiszűr',
schoolType: 'Iskolatípus',
schoolRating: 'Iskolai értékelés',
- schoolDistance: 'Iskolatávolság',
primary: 'Általános iskola',
secondary: 'Középiskola',
rating: 'Értékelés',
@@ -944,7 +945,7 @@ const hu: Translations = {
showcaseFeatureNoiseShort: 'Zaj',
showcaseFeatureSchoolsShort: 'Iskolák',
showcaseFeatureTravelShort: 'Utazás',
- showcaseGoodPrimariesNearby: '{{count}}+ jó általános iskola a közelben',
+ showcaseGoodPrimariesNearby: '{{count}}+ jó általános iskola körzetében',
showcaseWithinRail: 'Vasút {{count}} percen belül',
showcaseMatchingHomesLabel: 'Megfelelő otthonok',
showcaseMatchingHomes: '{{value}} megfelelő otthon',
@@ -1005,6 +1006,12 @@ const hu: Translations = {
statFilters: 'kombinálható szűrő',
statEvery: 'Minden',
statPostcodeInEngland: 'irányítószám Angliában',
+ coverageNote:
+ 'Anglia összes irányítószámát lefedi — egyenként 200+ adatmezővel. Skócia és Wales a terveink között szerepel.',
+ priceStrip: 'Örökös hozzáférés, jelenleg {{price}} — az ár a szintek betelésével emelkedik.',
+ priceStripSpots: 'Már csak {{count}} hely ezen az áron.',
+ priceStripSpotsPlural: 'Már csak {{count}} hely ezen az áron.',
+ priceStripCta: 'Árak megtekintése',
ourPhilosophy: 'Indulj ki abból, ami számít, majd találd meg a megfelelő irányítószámot',
philosophyP1:
'A legtöbb ingatlanoldal először azt kérdezi, hol szeretnél élni. Londonban ez különösen nehéz, de ugyanez a probléma egész Angliában megjelenik: a vevők néhány ismert helyből indulnak ki, majd külön füleken ellenőrzik az ingázást, iskolákat, bűnözést, Street View-t, internetet és eladási árakat.',
@@ -1028,7 +1035,7 @@ const hu: Translations = {
compAreaDataSub: '(bűnözés, iskolák, zaj, internet, szolgáltatások)',
compPropertyData: 'Ingatlanszintű előzmények',
compPropertyDataSub: '(eladási árak, EPC, alapterület, becsült érték)',
- compFilters: '56 együtt működő szűrő',
+ compFilters: '40+ együtt működő szűrő',
compFiltersSub: '(nem egyenkénti irányítószám- vagy hirdetésellenőrzés)',
ctaTitle: 'Ne találgasd, hol vegyél.',
ctaDescription:
@@ -1036,14 +1043,34 @@ const hu: Translations = {
},
// ── Pricing Page ───────────────────────────────────
+ // ── Footer ─────────────────────────────────────────
+ footer: {
+ tagline: 'Találd meg az életedhez illő irányítószámokat. Adatalapú környékkutatás Angliához.',
+ product: 'Termék',
+ resources: 'Források',
+ legal: 'Jogi információk',
+ dataSources: 'Adatforrások',
+ methodology: 'Módszertan',
+ contact: 'Kapcsolatfelvétel',
+ terms: 'Felhasználási feltételek',
+ privacy: 'Adatvédelmi tájékoztató',
+ copyright: '© {{year}} Perfect Postcode. Minden jog fenntartva.',
+ coverage: 'Anglia összes irányítószámát lefedi.',
+ },
+
+ // ── Legal pages ────────────────────────────────────
+ legal: {
+ lastUpdated: 'Utolsó frissítés: {{date}}',
+ englishOnly: 'Ez a dokumentum angol nyelven készült; az angol változat az irányadó.',
+ },
+
pricingPage: {
title: 'Vásárolj jobb keresési területből kiindulva',
subtitle:
'Élethosszig tartó hozzáférés a térképhez, amely segít eldönteni, hol érdemes keresni, mielőtt megtekintéseket foglalnál.',
costContext:
'A vevők gyakran estéket töltenek hirdetések, ingázási ellenőrzések, iskolai jelentések, bűnözési térképek, Street View és eladási árak összeillesztésével. Londonban ez kimerítő, de ugyanez a kutatási probléma egész Angliában megjelenik. A Perfect Postcode egy térképre teszi a területkutatást, mielőtt a hétvégéidet, díjaidat és figyelmedet rászánnád.',
- lessThanSurvey:
- 'Kevesebb, mint egy műszaki felmérés. Sokkal többet segít a döntések irányításában.',
+ lessThanSurvey: 'Egy műszaki felmérés árának töredékéért — egy sokkal nagyobb döntéshez.',
currentTier: 'Jelenlegi szint',
firstNUsers: 'Első {{count}} felhasználó',
everyoneAfter: 'Mindenki más utána',
@@ -1056,11 +1083,12 @@ const hu: Translations = {
getStarted: 'Kezdjük el',
getStartedPrice: 'Kezdjük el – {{price}}',
noCreditCard: 'Nem szükséges bankkártya',
+ moneyBack: '14 napos pénzvisszafizetési garancia.',
soldOut: 'Elfogyott',
upcoming: 'Következő',
failedToLoad: 'Nem sikerült betölteni az árakat. Kérjük, próbáld újra később.',
- feat1: '56 szűrő egész Angliában',
+ feat1: '40+ szűrő és 200+ adatmező',
feat2: 'Minden irányítószám kereshető a saját igényeid alapján',
feat3: 'Korlátlan térképfelfedezés, mentett keresések és exportálás',
feat4: '13 millió korábbi tranzakció és árkörnyezet',
@@ -1300,9 +1328,9 @@ const hu: Translations = {
faqBehindData3A:
'A rendőrségi utcaszintű bűnözési adatok LSOA-szinten kerülnek közzétételre — ezek kb. 1500 lakosú kis környékek. Az ugyanazon LSOA-ban lévő minden irányítószám ugyanazokat az éves számokat kapja, így egy csendes lakóutca és egy egy háztömbnyire lévő főutca azonos értékeket mutathat, ha ugyanazon az oldalon vannak a határnak. Az egy főre jutó ráta szokatlanul magasnak tűnhet kórházakat, egyetemi kampuszokat vagy ipari területeket lefedő irányítószámoknál, mert ott normál mennyiségű incidens történik, de papíron kevés a lakos.',
faqBehindData4Q:
- 'A „2 km-en belüli Jó iskolák” azt jelenti, hogy oda be is iratkozhat a gyerekem?',
+ 'Mit jelent az „iskolai körzetek” száma — beiratkozhat a gyerekem ezekbe az iskolákba?',
faqBehindData4A:
- 'Nem. A számláló azokat az állami iskolákat keresi, amelyek saját irányítószáma az irányítószámod középpontja körüli körben van. A körzethatárokat, vallási vagy felvételi kritériumokat, testvérprioritást és felvételi szabályokat nem modellezzük — egy közeli Jó vagy Kiváló iskola lehet, hogy a te címedről mégsem elérhető. Használd a számot területek összehasonlítására, majd a tényleges felvételi feltételeket egyeztesd az iskolával vagy az önkormányzattal, mielőtt erre alapoznál.',
+ 'Mindegyik szám azt mutatja, hány Jó vagy Kiváló minősítésű állami iskola modellezett történeti körzete fedi le az irányítószámot. Azt szimuláljuk, ahogyan az angol távolságalapú felvételi elosztja a helyeket: a gyerekek (2021-es népszámlálás) a közeli iskolákba jelentkeznek, mérlegelve a távolságot és az Ofsted-minősítést, a túljelentkezéses iskola pedig a legközelebbi jelentkezőket veszi fel, amíg meg nem telik — körzetének sugara az utolsóként felvett gyerek távolsága, pontosan az önkormányzatok által közzétett „utolsó felvett távolság”. A modellt több száz ilyen közzétett értékhez kalibráltuk. Azt becsüli, hol kapható életszerűen hely; nem hivatalos felvételi körzet. A vallási és szelektív felvételit, a testvérprioritást és az évenkénti határváltozásokat nem modellezzük, ezért a körzeteket és a felvételi szabályokat mindig egyeztesd az iskolával vagy az önkormányzattal, mielőtt döntést alapoznál rájuk.',
faqBehindData5Q: 'Miért mutat „Gigabit”-et egy irányítószám, ha nem minden otthon kapja?',
faqBehindData5A:
'Az Ofcom Connected Nations szélessáv-lefedettsége irányítószámonként az egyes sebességszinteket elérni képes ingatlanok százalékát adja meg. Mi a legmagasabb elérhető szintet jelenítjük meg, így ha akár egyetlen otthon eléri a gigabites sebességet, az irányítószám „Gigabit elérhető”-ként jelenik meg. Ez jól válaszol arra, hogy „van-e egyáltalán optikai internet ezen az utcán?”, de nem garantálja, hogy a tömbben minden lakásba megrendelhető. Mindig ellenőrizd a szolgáltatóknál a saját címedre vonatkozóan, mielőtt szerződnél.',
@@ -1471,14 +1499,10 @@ const hu: Translations = {
'Utazási idő a legközelebbi vonat- vagy metróállomásig (perc)',
// ─ Feature names (Education) ─
- 'Good+ primary schools within 2km': 'Jó+ általános iskolák 2 km-en belül',
- 'Good+ secondary schools within 2km': 'Jó+ középiskolák 2 km-en belül',
- 'Good+ primary schools within 5km': 'Jó+ általános iskolák 5 km-en belül',
- 'Good+ secondary schools within 5km': 'Jó+ középiskolák 5 km-en belül',
- 'Outstanding primary schools within 2km': 'Kiváló általános iskolák 2 km-en belül',
- 'Outstanding secondary schools within 2km': 'Kiváló középiskolák 2 km-en belül',
- 'Outstanding primary schools within 5km': 'Kiváló általános iskolák 5 km-en belül',
- 'Outstanding secondary schools within 5km': 'Kiváló középiskolák 5 km-en belül',
+ 'Good+ primary school catchments': 'Jó+ általános iskolai körzetek',
+ 'Good+ secondary school catchments': 'Jó+ középiskolai körzetek',
+ 'Outstanding primary school catchments': 'Kiváló általános iskolai körzetek',
+ 'Outstanding secondary school catchments': 'Kiváló középiskolai körzetek',
'Education, Skills and Training Score': 'Oktatás, készségek és képzés pontszám',
// ─ Feature names (Area development) ─
@@ -1579,7 +1603,8 @@ const hu: Translations = {
'Bus stop': 'Buszmegálló',
'Bus station': 'Buszpályaudvar',
'Taxi rank': 'Taxiállomás',
- 'Tube station': 'Metróállomás',
+ 'Tube station': 'Londoni metróállomás',
+ 'Tram & Metro stop': 'Villamos- és metrómegálló',
Café: 'Kávézó',
Restaurant: 'Étterem',
Pub: 'Kocsma',
@@ -1626,7 +1651,8 @@ const hu: Translations = {
'GP Surgery': 'Háziorvosi rendelő',
Dentist: 'Fogorvos',
Pharmacy: 'Gyógyszertár',
- 'Hospital & Clinic': 'Kórház és klinika',
+ Hospital: 'Kórház',
+ Clinic: 'Klinika',
Optician: 'Optikus',
Physiotherapy: 'Fizioterápia',
'Counselling & Therapy': 'Tanácsadás és terápia',
diff --git a/frontend/src/i18n/locales/zh.ts b/frontend/src/i18n/locales/zh.ts
index fd54015..fbb7d41 100644
--- a/frontend/src/i18n/locales/zh.ts
+++ b/frontend/src/i18n/locales/zh.ts
@@ -561,6 +561,8 @@ const zh: Translations = {
pleaseWait: '请稍候...',
sendResetLink: '发送重置链接',
backToLogin: '返回登录',
+ registerConsent:
+ '创建账户即表示您同意我们的服务条款和隐私政策。',
},
// ── Upgrade Modal ──────────────────────────────────
@@ -617,7 +619,7 @@ const zh: Translations = {
findingPerfectPostcode: '正在寻找理想邮编',
addFiltersHint: '添加以下筛选条件,将地图缩小到符合您要求的区域',
upgradePrompt:
- '用治安、学校、噪音、宽带、价格和 50 多项其他筛选条件,在整个英格兰找到匹配的邮编。',
+ '用治安、学校、噪音、宽带、价格等 40 多项联动筛选条件,在整个英格兰找到匹配的邮编。',
oneTimeLifetime: '一次性付款,终身访问。',
upgradeToFullMap: '升级到完整地图',
chooseFilters: '点击“添加”来筛选。小按钮可查看数据说明或给地图着色。',
@@ -647,7 +649,6 @@ const zh: Translations = {
filtersOut: '会筛掉 {{value}}',
schoolType: '学校类型',
schoolRating: '学校评级',
- schoolDistance: '学校距离',
primary: '小学',
secondary: '中学',
rating: '评级',
@@ -886,7 +887,7 @@ const zh: Translations = {
showcaseFeatureNoiseShort: '噪音',
showcaseFeatureSchoolsShort: '学校',
showcaseFeatureTravelShort: '出行',
- showcaseGoodPrimariesNearby: '附近 {{count}}+ 所良好及以上小学',
+ showcaseGoodPrimariesNearby: '位于 {{count}}+ 个良好及以上小学学区内',
showcaseWithinRail: '到火车/地铁站 {{count}} 分钟内',
showcaseMatchingHomesLabel: '匹配房源',
showcaseMatchingHomes: '{{value}} 套匹配房源',
@@ -945,6 +946,11 @@ const zh: Translations = {
statFilters: '可组合筛选条件',
statEvery: '覆盖',
statPostcodeInEngland: '英格兰每个邮编',
+ coverageNote: '覆盖英格兰所有邮编——每个邮编 200 多个数据字段。苏格兰和威尔士已在计划中。',
+ priceStrip: '终身使用权,当前价格 {{price}}——名额售出后价格将上调。',
+ priceStripSpots: '此价格仅剩 {{count}} 个名额。',
+ priceStripSpotsPlural: '此价格仅剩 {{count}} 个名额。',
+ priceStripCta: '查看价格',
ourPhilosophy: '先明确重要条件,再找到合适的邮编',
philosophyP1:
'大多数房源网站一上来就问:您想住哪儿?在伦敦尤其难答,英格兰其他地方也是一样。买家通常只能从几个熟悉的地方入手,再分别去查通勤、学校、治安、街景、宽带和成交价。',
@@ -967,19 +973,40 @@ const zh: Translations = {
compAreaDataSub: '(治安、学校、噪音、宽带、周边设施)',
compPropertyData: '房产级的历史记录',
compPropertyDataSub: '(成交价、EPC、室内面积、估值)',
- compFilters: '56 项联动筛选',
+ compFilters: '40+ 项联动筛选',
compFiltersSub: '(不必一次只查一个邮编或一套房源)',
ctaTitle: '别再猜哪里值得买。',
ctaDescription: '先按真实生活需求建好邮编候选名单,再去实地感受。',
},
// ── Pricing Page ───────────────────────────────────
+ // ── Footer ─────────────────────────────────────────
+ footer: {
+ tagline: '找到适合您生活的邮编。基于数据的英格兰社区调研。',
+ product: '产品',
+ resources: '资源',
+ legal: '法律',
+ dataSources: '数据来源',
+ methodology: '方法论',
+ contact: '联系客服',
+ terms: '服务条款',
+ privacy: '隐私政策',
+ copyright: '© {{year}} Perfect Postcode。保留所有权利。',
+ coverage: '覆盖英格兰所有邮编。',
+ },
+
+ // ── Legal pages ────────────────────────────────────
+ legal: {
+ lastUpdated: '最后更新:{{date}}',
+ englishOnly: '本文件以英文提供,以英文版本为准。',
+ },
+
pricingPage: {
title: '用更靠谱的搜索范围去买房',
subtitle: '终身访问这张地图,预约看房前先弄清楚该去哪儿看。',
costContext:
'买家常常把晚上耗在拼凑房源、通勤查询、学校报告、治安地图、Street View 和成交价上。在伦敦这尤其费力,但同样的研究困境存在于整个英格兰。Perfect Postcode 先把区域研究汇到一张地图上,再让您决定把周末、费用和精力投向哪里。',
- lessThanSurvey: '费用低于一次验房,却能更早影响您的选择。',
+ lessThanSurvey: '不到一次验房费用的十分之一,却能影响更重大的决定。',
currentTier: '当前档位',
firstNUsers: '前 {{count}} 名用户',
everyoneAfter: '之后的所有人',
@@ -992,11 +1019,12 @@ const zh: Translations = {
getStarted: '立即开始',
getStartedPrice: '立即开始:{{price}}',
noCreditCard: '无需信用卡',
+ moneyBack: '14 天退款保证。',
soldOut: '已售罄',
upcoming: '即将开放',
failedToLoad: '加载价格信息失败,请稍后重试。',
- feat1: '覆盖英格兰的 56 项筛选条件',
+ feat1: '40+ 项筛选条件和 200+ 个数据字段',
feat2: '从您的需求出发搜索每个邮编',
feat3: '无限地图探索、保存搜索和导出',
feat4: '1300 万笔历史交易和价格背景',
@@ -1226,9 +1254,9 @@ const zh: Translations = {
faqBehindData3Q: '为什么相邻邮编的犯罪数字相同?',
faqBehindData3A:
'警方街道级犯罪数据按 LSOA 发布,即大约 1,500 名居民的小型社区单元。同一 LSOA 内每个邮编都继承同一年度总数,因此一条安静的住宅街和一个街区外的繁华街道,如果在同一边界内,可能显示完全相同的数据。覆盖医院、大学校园或工业园区的邮编,人均率可能异常偏高,因为那里事件数正常但登记居民很少。',
- faqBehindData4Q: '“2 公里内的好学校”是否意味着我孩子可以入读?',
+ faqBehindData4Q: '“学区数量”是什么意思——我的孩子能入读这些学校吗?',
faqBehindData4A:
- '不一定。统计查找的是自身邮编落在您邮编中心点周围圆形范围内的公立学校。招生范围、宗教或选拔标准、兄弟姐妹优先以及录取规则都没有建模。附近的“良好”或“优秀”学校,您家未必实际有资格申请。请用此数字对比区域,决策前向学校或地方政府确认实际录取条件。',
+ '每个数字表示有多少所评级为“良好”或“优秀”的公立学校,其建模的历史学区覆盖该邮编。我们模拟英格兰按距离录取的实际分配过程:儿童(2021 年人口普查)在距离与 Ofsted 评级之间权衡后向附近学校申请,报名超额的学校按距离由近及远录取直至满额——其学区半径就是最后一名被录取儿童的距离,即各地方政府公布的“最远录取距离”。模型已用数百个此类公布距离进行校准。它估计的是在哪里大概率能获得学位,并非官方招生范围。宗教或选拔性录取、兄弟姐妹优先以及每年的边界变化均未建模,因此在做决定前,请务必向学校或地方政府确认学区和录取规则。',
faqBehindData5Q: '为什么并非每户都有光纤的邮编也显示“Gigabit”?',
faqBehindData5A:
'Ofcom Connected Nations 的宽带覆盖按邮编给出可达到每个速度档的房产百分比。我们显示有任何可用性的最高档,因此只要邮编内有一户能达到 Gigabit,就会显示“Gigabit 可用”。这回答的是“这条街上到底有没有光纤?”,但并不保证楼里每一套今天都能下单。签约前,请始终就您的具体地址向运营商核实。',
@@ -1390,14 +1418,10 @@ const zh: Translations = {
'Travel time to nearest train or tube station (min)': '到最近火车或地铁站的出行时间(分钟)',
// ─ Feature names (Education) ─
- 'Good+ primary schools within 2km': '2 公里内良好及以上小学数量',
- 'Good+ secondary schools within 2km': '2 公里内良好及以上中学数量',
- 'Good+ primary schools within 5km': '5 公里内良好及以上小学数量',
- 'Good+ secondary schools within 5km': '5 公里内良好及以上中学数量',
- 'Outstanding primary schools within 2km': '2 公里内优秀小学数量',
- 'Outstanding secondary schools within 2km': '2 公里内优秀中学数量',
- 'Outstanding primary schools within 5km': '5 公里内优秀小学数量',
- 'Outstanding secondary schools within 5km': '5 公里内优秀中学数量',
+ 'Good+ primary school catchments': '良好及以上小学学区数量',
+ 'Good+ secondary school catchments': '良好及以上中学学区数量',
+ 'Outstanding primary school catchments': '优秀小学学区数量',
+ 'Outstanding secondary school catchments': '优秀中学学区数量',
'Education, Skills and Training Score': '教育、技能与培训得分',
// ─ Feature names (Area development) ─
@@ -1498,7 +1522,8 @@ const zh: Translations = {
'Bus stop': '公交站',
'Bus station': '公交枢纽',
'Taxi rank': '出租车站',
- 'Tube station': '地铁站',
+ 'Tube station': '伦敦地铁站',
+ 'Tram & Metro stop': '有轨电车与城市轨道站',
Café: '咖啡馆',
Restaurant: '餐厅',
Pub: '酒吧',
@@ -1545,7 +1570,8 @@ const zh: Translations = {
'GP Surgery': '全科诊所',
Dentist: '牙科',
Pharmacy: '药房',
- 'Hospital & Clinic': '医院与诊所',
+ Hospital: '医院',
+ Clinic: '诊所',
Optician: '眼镜店',
Physiotherapy: '理疗',
'Counselling & Therapy': '心理咨询与治疗',