1593 lines
107 KiB
TypeScript
1593 lines
107 KiB
TypeScript
const en = {
|
||
// ── Common ──────────────────────────────────────────
|
||
common: {
|
||
save: 'Save',
|
||
cancel: 'Cancel',
|
||
close: 'Close',
|
||
delete: 'Delete',
|
||
finish: 'Finish',
|
||
language: 'Language',
|
||
open: 'Open',
|
||
share: 'Share',
|
||
copy: 'Copy',
|
||
copied: 'Copied!',
|
||
copiedToClipboard: 'Copied to clipboard',
|
||
loading: 'Loading...',
|
||
loadMore: 'Load More',
|
||
remaining: '{{count}} remaining',
|
||
search: 'Search',
|
||
all: 'All',
|
||
none: 'None',
|
||
viewDataSource: 'View data source',
|
||
total: 'Total',
|
||
min: 'min',
|
||
max: 'max',
|
||
or: 'or',
|
||
area: 'Area',
|
||
properties: 'Properties',
|
||
postcode: 'Postcode',
|
||
noAreaSelected: 'No area selected',
|
||
noAreaSelectedDesc:
|
||
'Click any coloured area on the map to see crime, schools, prices, and more',
|
||
clickForDetails: 'Click for details',
|
||
property: 'property',
|
||
propertiesPlural: 'properties',
|
||
places: 'places',
|
||
noData: 'No data',
|
||
allLow: 'All low',
|
||
connectingToServer: 'Connecting to server...',
|
||
closePane: 'Close pane',
|
||
},
|
||
|
||
// ── Header / Nav ───────────────────────────────────
|
||
header: {
|
||
appName: 'Perfect Postcode',
|
||
dashboard: 'Dashboard',
|
||
learn: 'Learn',
|
||
pricing: 'Pricing',
|
||
inviteFriends: 'Invite Friends',
|
||
saved: 'Saved',
|
||
logIn: 'Log in',
|
||
createAccount: 'Create account',
|
||
sharing: 'Sharing...',
|
||
exportLabel: 'Export',
|
||
exporting: 'Exporting...',
|
||
exportToExcel: 'Export to Excel',
|
||
exportReady: 'Export ready. Your download should start.',
|
||
exportFailed: 'Export failed.',
|
||
exportTimedOut: 'Export timed out. Try again.',
|
||
exportUnavailable: 'The map is still loading. Try again in a moment.',
|
||
exportEmpty: 'Export finished but returned an empty file.',
|
||
openMenu: 'Open menu',
|
||
closeMenu: 'Close menu',
|
||
},
|
||
|
||
// ── User Menu ──────────────────────────────────────
|
||
userMenu: {
|
||
fullAccess: 'Full Access',
|
||
demo: 'Demo',
|
||
themeLight: 'Theme: Light',
|
||
themeDark: 'Theme: Dark',
|
||
account: 'Account',
|
||
logOut: 'Log out',
|
||
},
|
||
|
||
// ── Mobile Menu ────────────────────────────────────
|
||
mobileMenu: {
|
||
menu: 'Menu',
|
||
home: 'Home',
|
||
},
|
||
|
||
// ── Toasts ─────────────────────────────────────────
|
||
toasts: {
|
||
propertySaved: 'Property saved!',
|
||
viewSaved: 'View saved',
|
||
dontShowAgain: "Don't show again",
|
||
},
|
||
|
||
// ── SEO Page Chrome ────────────────────────────────
|
||
seo: {
|
||
breadcrumb: 'Breadcrumb',
|
||
reviewDataSources: 'Review the data sources',
|
||
whatYouCanCompare: 'What you can compare',
|
||
whatYouCanCompareDesc:
|
||
'Each page is built around real shortlisting work: removing impossible places, comparing the remaining postcodes, and deciding what to validate next.',
|
||
howToUseIt: 'How to use it',
|
||
howToUseItDesc:
|
||
'Use these workflows to make the page useful before you open a listing portal or book a viewing.',
|
||
methodAndLimitations: 'Method and limitations',
|
||
methodAndLimitationsDesc:
|
||
'The data is designed for comparison and shortlisting. Important decisions still need current listings, professional checks, and direct local validation.',
|
||
questionsBuyersAsk: 'Questions buyers ask',
|
||
relatedGuides: 'Related guides',
|
||
relatedGuidesDesc: 'Continue through the indexed public pages using canonical internal links.',
|
||
frequentlyAskedQuestions: 'Frequently asked questions',
|
||
relatedPages: 'Related pages',
|
||
relatedPagesDesc:
|
||
'Follow these internal links to compare the same property-search workflow from another angle.',
|
||
pages: {
|
||
'Property price map': 'Property price map',
|
||
'Compare property prices across every postcode in England':
|
||
'Compare property prices across every postcode in England',
|
||
'Property price map for England - Compare postcodes before viewing':
|
||
'Property price map for England - Compare postcodes before viewing',
|
||
'Compare sold prices, estimated current value, price per square metre and local context across English postcodes before searching listings.':
|
||
'Compare sold prices, estimated current value, price per square metre and local context across English postcodes before searching listings.',
|
||
'Perfect Postcode maps sold prices, estimated current value, price per square metre, property type, floor area, tenure, and local context so buyers can find realistic search areas before opening listing portals.':
|
||
'Perfect Postcode maps sold prices, estimated current value, price per square metre, property type, floor area, tenure, and local context so buyers can find realistic search areas before opening listing portals.',
|
||
'Screen historical sale prices and current-value estimates by postcode.':
|
||
'Screen historical sale prices and current-value estimates by postcode.',
|
||
'Compare value with commute, schools, broadband, crime, noise, and amenities.':
|
||
'Compare value with commute, schools, broadband, crime, noise, and amenities.',
|
||
'Build a shortlist before spending weekends on viewings.':
|
||
'Build a shortlist before spending weekends on viewings.',
|
||
'Find postcodes that fit the budget before listings appear':
|
||
'Find postcodes that fit the budget before listings appear',
|
||
'Start with a maximum price and property type, then colour the map by price per square metre or estimated current price. This helps reveal areas where similar homes have historically traded within reach, even when there are no live listings today.':
|
||
'Start with a maximum price and property type, then colour the map by price per square metre or estimated current price. This helps reveal areas where similar homes have historically traded within reach, even when there are no live listings today.',
|
||
'Filter by last known sale price, estimated current value, property type, tenure, and floor area.':
|
||
'Filter by last known sale price, estimated current value, property type, tenure, and floor area.',
|
||
'Compare nearby postcodes using the same criteria instead of relying on area reputation.':
|
||
'Compare nearby postcodes using the same criteria instead of relying on area reputation.',
|
||
'Use the results as a shortlist for listing alerts, local research, and viewings.':
|
||
'Use the results as a shortlist for listing alerts, local research, and viewings.',
|
||
'Separate cheap from good value': 'Separate cheap from good value',
|
||
'A lower price can reflect smaller homes, weaker transport, more noise, or fewer local services. The map keeps those trade-offs visible so the cheapest postcode isn’t automatically treated as the best option.':
|
||
'A lower price can reflect smaller homes, weaker transport, more noise, or fewer local services. The map keeps those trade-offs visible so the cheapest postcode isn’t automatically treated as the best option.',
|
||
'Start from area value, not listing availability':
|
||
'Start from area value, not listing availability',
|
||
'Listing portals only show homes for sale today. A postcode-level property price map lets you compare wider areas, understand local price patterns, and avoid missing places where the next suitable listing might appear.':
|
||
'Listing portals only show homes for sale today. A postcode-level property price map lets you compare wider areas, understand local price patterns, and avoid missing places where the next suitable listing might appear.',
|
||
'Use prices alongside real constraints': 'Use prices alongside real constraints',
|
||
'Budget rarely matters on its own. Perfect Postcode combines price filters with travel time, school quality, property size, energy performance, local environment, and services so your shortlist reflects how you actually want to live.':
|
||
'Budget rarely matters on its own. Perfect Postcode combines price filters with travel time, school quality, property size, energy performance, local environment, and services so your shortlist reflects how you actually want to live.',
|
||
'What the price data is for': 'What the price data is for',
|
||
'Use the map to compare areas and spot search candidates. It isn’t a valuation, mortgage decision, survey, legal search, or live listing feed.':
|
||
'Use the map to compare areas and spot search candidates. It isn’t a valuation, mortgage decision, survey, legal search, or live listing feed.',
|
||
'How to validate a promising area': 'How to validate a promising area',
|
||
'Once a postcode looks promising, check current listings, sold-price comparables, agent details, flood searches, legal packs, surveys, and local authority information before making a decision.':
|
||
'Once a postcode looks promising, check current listings, sold-price comparables, agent details, flood searches, legal packs, surveys, and local authority information before making a decision.',
|
||
'Is this a replacement for Rightmove or Zoopla?':
|
||
'Is this a replacement for Rightmove or Zoopla?',
|
||
'No. Use it before and alongside listing portals. Perfect Postcode helps decide where to look; listing portals show what’s currently for sale.':
|
||
'No. Use it before and alongside listing portals. Perfect Postcode helps decide where to look; listing portals show what’s currently for sale.',
|
||
'Can I compare price with schools or commute time?':
|
||
'Can I compare price with schools or commute time?',
|
||
'Yes. Price filters can be combined with travel-time, schools, crime, broadband, road-noise, amenities, and environment filters.':
|
||
'Yes. Price filters can be combined with travel-time, schools, crime, broadband, road-noise, amenities, and environment filters.',
|
||
'Does the map cover all of the UK?': 'Does the map cover all of the UK?',
|
||
'The current product focuses on England because several core property and postcode datasets are England-specific.':
|
||
'The current product focuses on England because several core property and postcode datasets are England-specific.',
|
||
'Birmingham property search guide': 'Birmingham property search guide',
|
||
'A worked example for balancing price, commute, and family trade-offs.':
|
||
'A worked example for balancing price, commute, and family trade-offs.',
|
||
'Data sources and coverage': 'Data sources and coverage',
|
||
'See which datasets sit behind the postcode filters and where they have limits.':
|
||
'See which datasets sit behind the postcode filters and where they have limits.',
|
||
Methodology: 'Methodology',
|
||
'Understand how the map is intended to support shortlisting, not replace due diligence.':
|
||
'Understand how the map is intended to support shortlisting, not replace due diligence.',
|
||
'Postcode checker': 'Postcode checker',
|
||
'Check one postcode before you spend time on a viewing.':
|
||
'Check one postcode before you spend time on a viewing.',
|
||
'Explore the property map': 'Explore the property map',
|
||
'Postcode property search': 'Postcode property search',
|
||
'Find postcodes that match your property search criteria':
|
||
'Find postcodes that match your property search criteria',
|
||
'Postcode property search - Find areas that match your criteria':
|
||
'Postcode property search - Find areas that match your criteria',
|
||
'Search every postcode by budget, property type, floor area, tenure, commute, schools, crime, broadband, noise, parks and local amenities.':
|
||
'Search every postcode by budget, property type, floor area, tenure, commute, schools, crime, broadband, noise, parks and local amenities.',
|
||
'Search every postcode by budget, property type, size, tenure, commute, schools, crime, broadband, noise, parks, and local amenities instead of checking areas one at a time.':
|
||
'Search every postcode by budget, property type, size, tenure, commute, schools, crime, broadband, noise, parks, and local amenities instead of checking areas one at a time.',
|
||
'Filter England-wide postcode data from one map.':
|
||
'Filter England-wide postcode data from one map.',
|
||
'Shortlist unfamiliar areas with comparable evidence.':
|
||
'Shortlist unfamiliar areas with comparable evidence.',
|
||
'Save and share search areas before booking viewings.':
|
||
'Save and share search areas before booking viewings.',
|
||
'Turn a broad brief into postcode candidates': 'Turn a broad brief into postcode candidates',
|
||
'Enter the practical constraints first: budget, property size, tenure, travel time, school needs, broadband, and tolerance for road noise or crime levels. The map removes places that fail those constraints and keeps the remaining options comparable.':
|
||
'Enter the practical constraints first: budget, property size, tenure, travel time, school needs, broadband, and tolerance for road noise or crime levels. The map removes places that fail those constraints and keeps the remaining options comparable.',
|
||
'Relax one constraint at a time': 'Relax one constraint at a time',
|
||
'When the search becomes too narrow, loosen a single filter and watch which postcodes reappear. This makes compromise explicit instead of relying on guesswork.':
|
||
'When the search becomes too narrow, loosen a single filter and watch which postcodes reappear. This makes compromise explicit instead of relying on guesswork.',
|
||
'Turn vague areas into specific postcodes': 'Turn vague areas into specific postcodes',
|
||
'Broad town or borough searches hide large differences between streets. Perfect Postcode helps you move from a general area to postcodes that satisfy your hard requirements.':
|
||
'Broad town or borough searches hide large differences between streets. Perfect Postcode helps you move from a general area to postcodes that satisfy your hard requirements.',
|
||
'Keep trade-offs visible': 'Keep trade-offs visible',
|
||
'When there are too many or too few matches, adjust one constraint at a time and see exactly which postcodes reappear. That makes compromises explicit instead of relying on guesswork.':
|
||
'When there are too many or too few matches, adjust one constraint at a time and see exactly which postcodes reappear. That makes compromises explicit instead of relying on guesswork.',
|
||
'Why postcode-level comparison matters': 'Why postcode-level comparison matters',
|
||
'Two nearby postcodes can differ on schools, road noise, transport access, property mix, and price. Comparing at postcode level reduces the chance of treating a whole town as one uniform market.':
|
||
'Two nearby postcodes can differ on schools, road noise, transport access, property mix, and price. Comparing at postcode level reduces the chance of treating a whole town as one uniform market.',
|
||
'How to use the results': 'How to use the results',
|
||
'Treat matching postcodes as a research queue: check live listings, visit streets, confirm schools and admissions, and review current official sources.':
|
||
'Treat matching postcodes as a research queue: check live listings, visit streets, confirm schools and admissions, and review current official sources.',
|
||
'Can I save a postcode property search?': 'Can I save a postcode property search?',
|
||
'Yes. Licensed users can save searches and return to them later. Saved searches are designed for shortlists and comparison notes.':
|
||
'Yes. Licensed users can save searches and return to them later. Saved searches are designed for shortlists and comparison notes.',
|
||
'Can I search without knowing the area?': 'Can I search without knowing the area?',
|
||
'Yes. The map is designed to surface unfamiliar areas that match practical constraints, not just places you already know.':
|
||
'Yes. The map is designed to surface unfamiliar areas that match practical constraints, not just places you already know.',
|
||
'Are the results live property listings?': 'Are the results live property listings?',
|
||
'No. The tool compares postcode data and historical/contextual property signals. You still need listing portals for current availability.':
|
||
'No. The tool compares postcode data and historical/contextual property signals. You still need listing portals for current availability.',
|
||
'Manchester property search guide': 'Manchester property search guide',
|
||
'A regional guide for narrowing a broad search around Greater Manchester.':
|
||
'A regional guide for narrowing a broad search around Greater Manchester.',
|
||
'Start a postcode search': 'Start a postcode search',
|
||
'Commute property search': 'Commute property search',
|
||
'Search for places to live by commute time': 'Search for places to live by commute time',
|
||
'Commute property search - Find places to live by travel time':
|
||
'Commute property search - Find places to live by travel time',
|
||
'Filter postcodes by commute time, then compare price, schools, safety, broadband, road noise, parks and property data on one map.':
|
||
'Filter postcodes by commute time, then compare price, schools, safety, broadband, road noise, parks and property data on one map.',
|
||
'Filter postcodes by modelled car, cycling, walking, and public transport travel times, then layer on property price, schools, crime, broadband, noise, and local amenities.':
|
||
'Filter postcodes by modelled car, cycling, walking, and public transport travel times, then layer on property price, schools, crime, broadband, noise, and local amenities.',
|
||
'Compare reachable postcodes by realistic travel-time bands.':
|
||
'Compare reachable postcodes by realistic travel-time bands.',
|
||
'Search by destination first, then filter for property and neighbourhood fit.':
|
||
'Search by destination first, then filter for property and neighbourhood fit.',
|
||
'Avoid areas that look close on a map but fail the daily journey.':
|
||
'Avoid areas that look close on a map but fail the daily journey.',
|
||
'Start with the destination that matters': 'Start with the destination that matters',
|
||
'Choose a commute destination, transport mode, and time range, then add the property filters. This prevents a cheap-looking area from reaching the shortlist if the daily journey doesn’t work.':
|
||
'Choose a commute destination, transport mode, and time range, then add the property filters. This prevents a cheap-looking area from reaching the shortlist if the daily journey doesn’t work.',
|
||
'Compare the commute against the rest of daily life':
|
||
'Compare the commute against the rest of daily life',
|
||
'A fast commute isn’t enough if the property size, school context, safety threshold, broadband, or road-noise exposure don’t fit. The map keeps those signals side by side.':
|
||
'A fast commute isn’t enough if the property size, school context, safety threshold, broadband, or road-noise exposure don’t fit. The map keeps those signals side by side.',
|
||
'Commute from postcodes, not just place names':
|
||
'Commute from postcodes, not just place names',
|
||
'Two streets in the same town can have very different station access, road routes, and public transport options. Postcode-level travel-time filtering keeps that difference visible.':
|
||
'Two streets in the same town can have very different station access, road routes, and public transport options. Postcode-level travel-time filtering keeps that difference visible.',
|
||
'Balance journey time with the rest of the move':
|
||
'Balance journey time with the rest of the move',
|
||
'A fast commute only helps if the area also fits your budget, housing needs, school preferences, safety threshold, broadband requirement, and tolerance for road noise.':
|
||
'A fast commute only helps if the area also fits your budget, housing needs, school preferences, safety threshold, broadband requirement, and tolerance for road noise.',
|
||
'How travel-time filters should be interpreted':
|
||
'How travel-time filters should be interpreted',
|
||
'Travel-time modelling is useful for comparing areas consistently. Before committing, check current timetables, disruption patterns, parking, cycling conditions, and walking routes.':
|
||
'Travel-time modelling is useful for comparing areas consistently. Before committing, check current timetables, disruption patterns, parking, cycling conditions, and walking routes.',
|
||
'Why commute filters are combined with property data':
|
||
'Why commute filters are combined with property data',
|
||
'Commute search is most useful when it removes impossible areas while still showing whether the remaining options are affordable and liveable.':
|
||
'Commute search is most useful when it removes impossible areas while still showing whether the remaining options are affordable and liveable.',
|
||
'Can I compare car, cycling, walking, and public transport?':
|
||
'Can I compare car, cycling, walking, and public transport?',
|
||
'The product supports multiple travel modes where precomputed destination data is available.':
|
||
'The product supports multiple travel modes where precomputed destination data is available.',
|
||
'Are travel times exact?': 'Are travel times exact?',
|
||
'No. Treat them as a consistent comparison model, then verify the real route before making viewing or purchase decisions.':
|
||
'No. Treat them as a consistent comparison model, then verify the real route before making viewing or purchase decisions.',
|
||
'Can I combine commute filters with schools and price?':
|
||
'Can I combine commute filters with schools and price?',
|
||
'Yes. The commute filter can be layered with property price, size, schools, broadband, crime, amenities, and environmental signals.':
|
||
'Yes. The commute filter can be layered with property price, size, schools, broadband, crime, amenities, and environmental signals.',
|
||
'Bristol property search guide': 'Bristol property search guide',
|
||
'A worked example for balancing city access, price, and local context.':
|
||
'A worked example for balancing city access, price, and local context.',
|
||
'Search by commute time': 'Search by commute time',
|
||
'Schools and property search': 'Schools and property search',
|
||
'Find property search areas with schools and family trade-offs in view':
|
||
'Find property search areas with schools and family trade-offs in view',
|
||
'School property search - Compare postcodes for family moves':
|
||
'School property search - Compare postcodes for family moves',
|
||
'Compare nearby schools, property size, prices, parks, safety, commute and local amenities before building a viewing shortlist.':
|
||
'Compare nearby schools, property size, prices, parks, safety, commute and local amenities before building a viewing shortlist.',
|
||
'Compare nearby Ofsted ratings, education context, property size, budget, safety, parks, commute, and local amenities before narrowing your viewing shortlist.':
|
||
'Compare nearby Ofsted ratings, education context, property size, budget, safety, parks, commute, and local amenities before narrowing your viewing shortlist.',
|
||
'Filter for nearby school quality alongside housing requirements.':
|
||
'Filter for nearby school quality alongside housing requirements.',
|
||
'Compare family-friendly trade-offs across unfamiliar postcodes.':
|
||
'Compare family-friendly trade-offs across unfamiliar postcodes.',
|
||
'Use the map as a shortlist tool before checking admissions and catchments.':
|
||
'Use the map as a shortlist tool before checking admissions and catchments.',
|
||
'Use school context without ignoring the home':
|
||
'Use school context without ignoring the home',
|
||
'Start with property size, budget, and commute constraints, then layer in nearby school quality and local context. This prevents school-led searches from hiding affordability or daily-life problems.':
|
||
'Start with property size, budget, and commute constraints, then layer in nearby school quality and local context. This prevents school-led searches from hiding affordability or daily-life problems.',
|
||
'Verify admissions before deciding': 'Verify admissions before deciding',
|
||
'School data can point to promising areas, but admissions rules and catchments can change. Confirm current arrangements with schools and local authorities.':
|
||
'School data can point to promising areas, but admissions rules and catchments can change. Confirm current arrangements with schools and local authorities.',
|
||
'School quality is one part of the shortlist': 'School quality is one part of the shortlist',
|
||
'Perfect Postcode helps you compare nearby school data with the other practical constraints that shape a family move: space, price, commute, parks, safety, and local services.':
|
||
'Perfect Postcode helps you compare nearby school data with the other practical constraints that shape a family move: space, price, commute, parks, safety, and local services.',
|
||
'Check catchments before making decisions': 'Check catchments before making decisions',
|
||
'Admissions rules and catchment boundaries can change. Use postcode-level school data to find promising areas, then verify current admissions details with the school or local authority.':
|
||
'Admissions rules and catchment boundaries can change. Use postcode-level school data to find promising areas, then verify current admissions details with the school or local authority.',
|
||
'How to treat school filters': 'How to treat school filters',
|
||
'Use school filters to narrow research, not to assume admission eligibility. Ratings, distance, admissions criteria, and school capacity should all be checked with current official sources.':
|
||
'Use school filters to narrow research, not to assume admission eligibility. Ratings, distance, admissions criteria, and school capacity should all be checked with current official sources.',
|
||
'Family trade-offs to compare': 'Family trade-offs to compare',
|
||
'Combine schools with parks, road noise, crime, property size, commute, broadband, and price so the shortlist reflects the whole move.':
|
||
'Combine schools with parks, road noise, crime, property size, commute, broadband, and price so the shortlist reflects the whole move.',
|
||
'Does this show school catchment guarantees?': 'Does this show school catchment guarantees?',
|
||
'No. It helps identify promising areas, but catchments and admissions must be verified with the school or local authority.':
|
||
'No. It helps identify promising areas, but catchments and admissions must be verified with the school or local authority.',
|
||
'Can I combine school filters with parks and safety?':
|
||
'Can I combine school filters with parks and safety?',
|
||
'Yes. School-aware search can be combined with crime, parks, commute, price, property size, and local services.':
|
||
'Yes. School-aware search can be combined with crime, parks, commute, price, property size, and local services.',
|
||
'Is Ofsted the only school signal?': 'Is Ofsted the only school signal?',
|
||
'No single score should decide a move. Use the map as a starting point, then review current school information in detail.':
|
||
'No single score should decide a move. Use the map as a starting point, then review current school information in detail.',
|
||
'See where education, property, transport, and environment data comes from.':
|
||
'See where education, property, transport, and environment data comes from.',
|
||
'Explore school-aware searches': 'Explore school-aware searches',
|
||
'Check postcode data before you book a viewing':
|
||
'Check postcode data before you book a viewing',
|
||
'Postcode checker - Property, crime, broadband, noise and schools':
|
||
'Postcode checker - Property, crime, broadband, noise and schools',
|
||
'Check postcode-level property prices, EPC data, crime, broadband, road noise, schools, council tax, amenities and travel-time context.':
|
||
'Check postcode-level property prices, EPC data, crime, broadband, road noise, schools, council tax, amenities and travel-time context.',
|
||
'Review property prices, EPC context, crime, broadband, road noise, local amenities, schools, deprivation, council tax, and travel-time data from one postcode-first map.':
|
||
'Review property prices, EPC context, crime, broadband, road noise, local amenities, schools, deprivation, council tax, and travel-time data from one postcode-first map.',
|
||
'Check multiple local signals before visiting a street.':
|
||
'Check multiple local signals before visiting a street.',
|
||
'Use official and open datasets rather than reputation alone.':
|
||
'Use official and open datasets rather than reputation alone.',
|
||
'Compare postcodes consistently across England.':
|
||
'Compare postcodes consistently across England.',
|
||
'Check the street before spending a viewing slot':
|
||
'Check the street before spending a viewing slot',
|
||
'Use the postcode checker to review price history, local context, amenities, schools, and environment signals before you commit time to visiting.':
|
||
'Use the postcode checker to review price history, local context, amenities, schools, and environment signals before you commit time to visiting.',
|
||
'Compare neighbouring postcodes': 'Compare neighbouring postcodes',
|
||
'If one postcode looks promising, compare adjacent areas using the same filters. This often reveals whether a concern is street-specific or part of a wider pattern.':
|
||
'If one postcode looks promising, compare adjacent areas using the same filters. This often reveals whether a concern is street-specific or part of a wider pattern.',
|
||
'Useful before and alongside listing portals': 'Useful before and alongside listing portals',
|
||
'Listing photos rarely tell you enough about the surrounding street. Perfect Postcode gives you an evidence-led postcode check before you commit time to a viewing.':
|
||
'Listing photos rarely tell you enough about the surrounding street. Perfect Postcode gives you an evidence-led postcode check before you commit time to a viewing.',
|
||
'A screening tool, not professional advice': 'A screening tool, not professional advice',
|
||
'The data is designed for shortlisting and comparison. Any purchase still needs current listing checks, legal due diligence, flood searches, lender requirements, and survey findings.':
|
||
'The data is designed for shortlisting and comparison. Any purchase still needs current listing checks, legal due diligence, flood searches, lender requirements, and survey findings.',
|
||
'What a postcode check can catch': 'What a postcode check can catch',
|
||
'A postcode check can surface price context, environmental signals, nearby amenities, and other local indicators that are easy to miss in a listing.':
|
||
'A postcode check can surface price context, environmental signals, nearby amenities, and other local indicators that are easy to miss in a listing.',
|
||
'What a postcode check can’t prove': 'What a postcode check can’t prove',
|
||
'It can’t confirm the condition of a home, future development, legal title, lender requirements, or current street-level experience. Those still need direct checks.':
|
||
'It can’t confirm the condition of a home, future development, legal title, lender requirements, or current street-level experience. Those still need direct checks.',
|
||
'Can I use the checker before a viewing?': 'Can I use the checker before a viewing?',
|
||
'Yes. That’s one of the main use cases: screen the postcode first, then decide whether the viewing is worth the time.':
|
||
'Yes. That’s one of the main use cases: screen the postcode first, then decide whether the viewing is worth the time.',
|
||
'Does the checker include exact property condition?':
|
||
'Does the checker include exact property condition?',
|
||
'No. Property condition requires listing details, surveys, and direct inspection.':
|
||
'No. Property condition requires listing details, surveys, and direct inspection.',
|
||
'Can I compare multiple postcodes?': 'Can I compare multiple postcodes?',
|
||
'Yes. The map is designed for consistent comparison across postcodes.':
|
||
'Yes. The map is designed for consistent comparison across postcodes.',
|
||
'Check postcodes on the map': 'Check postcodes on the map',
|
||
'Regional guide': 'Regional guide',
|
||
'How to compare Birmingham postcodes before a property search':
|
||
'How to compare Birmingham postcodes before a property search',
|
||
'Birmingham property search - Compare postcodes by price and commute':
|
||
'Birmingham property search - Compare postcodes by price and commute',
|
||
'Use postcode-level data to compare Birmingham property prices, commute trade-offs, schools, crime, broadband and local amenities before viewings.':
|
||
'Use postcode-level data to compare Birmingham property prices, commute trade-offs, schools, crime, broadband and local amenities before viewings.',
|
||
'Birmingham searches can change quickly from street to street. Use postcode-level evidence to compare budget, commute, schools, noise, crime, and local services before deciding where to watch listings.':
|
||
'Birmingham searches can change quickly from street to street. Use postcode-level evidence to compare budget, commute, schools, noise, crime, and local services before deciding where to watch listings.',
|
||
'Start with commute corridors': 'Start with commute corridors',
|
||
'Choose the destination that matters, such as a workplace, station, university, or hospital, then compare reachable postcodes by transport mode and travel-time band.':
|
||
'Choose the destination that matters, such as a workplace, station, university, or hospital, then compare reachable postcodes by transport mode and travel-time band.',
|
||
'Use commute time as a hard filter before judging price.':
|
||
'Use commute time as a hard filter before judging price.',
|
||
'Compare public transport with car, cycling, or walking where available.':
|
||
'Compare public transport with car, cycling, or walking where available.',
|
||
'Check the route manually before booking viewings.':
|
||
'Check the route manually before booking viewings.',
|
||
'Compare price with property type': 'Compare price with property type',
|
||
'Median prices alone can be misleading if the local property mix changes. Add property type, tenure, floor area, and price filters so similar areas are compared fairly.':
|
||
'Median prices alone can be misleading if the local property mix changes. Add property type, tenure, floor area, and price filters so similar areas are compared fairly.',
|
||
'Keep family and environment trade-offs visible':
|
||
'Keep family and environment trade-offs visible',
|
||
'Layer school context, parks, road noise, broadband, and crime signals on top of the property filters. That makes it easier to decide which compromises are acceptable.':
|
||
'Layer school context, parks, road noise, broadband, and crime signals on top of the property filters. That makes it easier to decide which compromises are acceptable.',
|
||
'Can Perfect Postcode tell me the best area in Birmingham?':
|
||
'Can Perfect Postcode tell me the best area in Birmingham?',
|
||
'No tool can decide the best area for every buyer. It helps compare postcodes against your own constraints so you can build a better shortlist.':
|
||
'No tool can decide the best area for every buyer. It helps compare postcodes against your own constraints so you can build a better shortlist.',
|
||
'Should I use this instead of local knowledge?':
|
||
'Should I use this instead of local knowledge?',
|
||
'No. Use it to find and compare candidates, then validate them with visits, local advice, listings, and official checks.':
|
||
'No. Use it to find and compare candidates, then validate them with visits, local advice, listings, and official checks.',
|
||
'Compare price patterns before looking at live listings.':
|
||
'Compare price patterns before looking at live listings.',
|
||
'Search by travel time and then layer on property requirements.':
|
||
'Search by travel time and then layer on property requirements.',
|
||
'Understand how to interpret filters and limitations.':
|
||
'Understand how to interpret filters and limitations.',
|
||
'Compare Birmingham postcodes': 'Compare Birmingham postcodes',
|
||
'How to compare Manchester postcodes for a property search':
|
||
'How to compare Manchester postcodes for a property search',
|
||
'Manchester property search - Compare postcodes before viewing':
|
||
'Manchester property search - Compare postcodes before viewing',
|
||
'Compare Manchester-area postcodes by budget, commute, property type, schools, broadband, crime, noise and amenities before booking viewings.':
|
||
'Compare Manchester-area postcodes by budget, commute, property type, schools, broadband, crime, noise and amenities before booking viewings.',
|
||
'A Manchester-area search can span city-centre, suburban, and commuter options. Perfect Postcode helps keep each postcode comparable against the same property and daily-life constraints.':
|
||
'A Manchester-area search can span city-centre, suburban, and commuter options. Perfect Postcode helps keep each postcode comparable against the same property and daily-life constraints.',
|
||
'Use travel time to define the real search area':
|
||
'Use travel time to define the real search area',
|
||
'Start from the destinations that matter, then compare reachable postcodes rather than assuming every nearby place has the same practical journey.':
|
||
'Start from the destinations that matter, then compare reachable postcodes rather than assuming every nearby place has the same practical journey.',
|
||
'Compare housing requirements before lifestyle preferences':
|
||
'Compare housing requirements before lifestyle preferences',
|
||
'Filter by property type, floor area, tenure, and price before judging amenities. That keeps the shortlist grounded in homes that could realistically work.':
|
||
'Filter by property type, floor area, tenure, and price before judging amenities. That keeps the shortlist grounded in homes that could realistically work.',
|
||
'Check local context consistently': 'Check local context consistently',
|
||
'Use broadband, crime, road noise, parks, schools, and amenities as comparable signals. Then validate the strongest candidates with current local checks.':
|
||
'Use broadband, crime, road noise, parks, schools, and amenities as comparable signals. Then validate the strongest candidates with current local checks.',
|
||
'Can I compare Manchester suburbs with city-centre postcodes?':
|
||
'Can I compare Manchester suburbs with city-centre postcodes?',
|
||
'Yes. Use the same budget, property, commute, and local-context filters across both so trade-offs remain visible.':
|
||
'Yes. Use the same budget, property, commute, and local-context filters across both so trade-offs remain visible.',
|
||
'Does this include live listings?': 'Does this include live listings?',
|
||
'No. Use it to decide where to search, then use listing portals for current homes for sale.':
|
||
'No. Use it to decide where to search, then use listing portals for current homes for sale.',
|
||
'Move from a broad search brief to specific postcode candidates.':
|
||
'Move from a broad search brief to specific postcode candidates.',
|
||
'Data sources': 'Data sources',
|
||
'Review the datasets used for property and local-context comparison.':
|
||
'Review the datasets used for property and local-context comparison.',
|
||
'Check a single postcode before arranging a viewing.':
|
||
'Check a single postcode before arranging a viewing.',
|
||
'Compare Manchester postcodes': 'Compare Manchester postcodes',
|
||
'How to compare Bristol postcodes before a property search':
|
||
'How to compare Bristol postcodes before a property search',
|
||
'Bristol property search - Compare postcodes by commute and price':
|
||
'Bristol property search - Compare postcodes by commute and price',
|
||
'Compare Bristol postcodes by price, commute, property size, schools, broadband, crime, road noise, parks and amenities before viewings.':
|
||
'Compare Bristol postcodes by price, commute, property size, schools, broadband, crime, road noise, parks and amenities before viewings.',
|
||
'Bristol searches often involve sharp trade-offs between price, journey time, property size, and neighbourhood context. A postcode-first comparison keeps those trade-offs visible.':
|
||
'Bristol searches often involve sharp trade-offs between price, journey time, property size, and neighbourhood context. A postcode-first comparison keeps those trade-offs visible.',
|
||
'Make commute constraints explicit': 'Make commute constraints explicit',
|
||
'If access to the centre, a station, hospital, university, or business park matters, use travel-time filters first and then compare the remaining postcodes by property data.':
|
||
'If access to the centre, a station, hospital, university, or business park matters, use travel-time filters first and then compare the remaining postcodes by property data.',
|
||
'Compare value, not just headline price': 'Compare value, not just headline price',
|
||
'Use price, property type, and floor-area filters together. This helps distinguish lower-cost areas from areas that simply contain smaller or different homes.':
|
||
'Use price, property type, and floor-area filters together. This helps distinguish lower-cost areas from areas that simply contain smaller or different homes.',
|
||
'Screen environmental and local-service signals':
|
||
'Screen environmental and local-service signals',
|
||
'Road noise, parks, broadband, crime, and amenities can affect whether a property works day to day. Use them as screening criteria before booking viewings.':
|
||
'Road noise, parks, broadband, crime, and amenities can affect whether a property works day to day. Use them as screening criteria before booking viewings.',
|
||
'Can I use this for commuter villages around Bristol?':
|
||
'Can I use this for commuter villages around Bristol?',
|
||
'Yes, where the relevant postcode and travel-time data is available. Always verify routes and services manually before deciding.':
|
||
'Yes, where the relevant postcode and travel-time data is available. Always verify routes and services manually before deciding.',
|
||
'Can this tell me whether a listing is good value?':
|
||
'Can this tell me whether a listing is good value?',
|
||
'It can provide area context, but a specific listing still needs comparable sales, condition checks, survey findings, and professional advice where appropriate.':
|
||
'It can provide area context, but a specific listing still needs comparable sales, condition checks, survey findings, and professional advice where appropriate.',
|
||
'Search by reachable postcodes before refining by budget and local context.':
|
||
'Search by reachable postcodes before refining by budget and local context.',
|
||
'Understand price patterns before setting listing alerts.':
|
||
'Understand price patterns before setting listing alerts.',
|
||
'Privacy and security': 'Privacy and security',
|
||
'How account and saved-search data is handled in the product.':
|
||
'How account and saved-search data is handled in the product.',
|
||
'Compare Bristol postcodes': 'Compare Bristol postcodes',
|
||
'Trust and coverage': 'Trust and coverage',
|
||
'Perfect Postcode data sources and coverage': 'Perfect Postcode data sources and coverage',
|
||
'Perfect Postcode data sources - Property, schools, commute and local context':
|
||
'Perfect Postcode data sources - Property, schools, commute and local context',
|
||
'Review the public and official datasets used by Perfect Postcode, including property prices, EPC, schools, crime, broadband, noise and travel-time context.':
|
||
'Review the public and official datasets used by Perfect Postcode, including property prices, EPC, schools, crime, broadband, noise and travel-time context.',
|
||
'Perfect Postcode combines property, transport, education, environment, and local-service datasets so buyers can compare postcodes consistently. This page explains what the data is for and where it should be verified.':
|
||
'Perfect Postcode combines property, transport, education, environment, and local-service datasets so buyers can compare postcodes consistently. This page explains what the data is for and where it should be verified.',
|
||
'Property and housing context': 'Property and housing context',
|
||
'The product uses property transaction and housing-context datasets to support filters such as sale price, property type, tenure, floor area, energy performance, and estimated current value.':
|
||
'The product uses property transaction and housing-context datasets to support filters such as sale price, property type, tenure, floor area, energy performance, and estimated current value.',
|
||
'Use these fields to compare areas, not as a formal valuation.':
|
||
'Use these fields to compare areas, not as a formal valuation.',
|
||
'Check current listings, title information, lender requirements, and survey results before buying.':
|
||
'Check current listings, title information, lender requirements, and survey results before buying.',
|
||
'Schools, safety, broadband, and environment': 'Schools, safety, broadband, and environment',
|
||
'Local-context filters help compare postcodes on signals that affect daily life. They should be treated as screening data and checked against current official sources for decisions.':
|
||
'Local-context filters help compare postcodes on signals that affect daily life. They should be treated as screening data and checked against current official sources for decisions.',
|
||
'Travel-time data': 'Travel-time data',
|
||
'Travel-time filters are designed for consistent area comparison. Route availability, disruption, parking, walking access, and timetable details should be verified before committing to an area.':
|
||
'Travel-time filters are designed for consistent area comparison. Route availability, disruption, parking, walking access, and timetable details should be verified before committing to an area.',
|
||
'Why does coverage focus on England?': 'Why does coverage focus on England?',
|
||
'Several core property, education, and local-context datasets are jurisdiction-specific. England coverage keeps comparisons more consistent.':
|
||
'Several core property, education, and local-context datasets are jurisdiction-specific. England coverage keeps comparisons more consistent.',
|
||
'How should I handle stale or missing data?': 'How should I handle stale or missing data?',
|
||
'Use the map as a shortlist tool. If a postcode matters, verify the latest details with current official sources and direct local checks.':
|
||
'Use the map as a shortlist tool. If a postcode matters, verify the latest details with current official sources and direct local checks.',
|
||
'How filters and comparisons should be interpreted.':
|
||
'How filters and comparisons should be interpreted.',
|
||
'Review postcode-level context before a viewing.':
|
||
'Review postcode-level context before a viewing.',
|
||
'How saved searches and account data are handled.':
|
||
'How saved searches and account data are handled.',
|
||
'How to use the map': 'How to use the map',
|
||
'Methodology for postcode property research': 'Methodology for postcode property research',
|
||
'Perfect Postcode methodology - How to interpret postcode property data':
|
||
'Perfect Postcode methodology - How to interpret postcode property data',
|
||
'Understand how to use postcode filters, property estimates, travel-time data, school context and local signals as a home-buying shortlist tool.':
|
||
'Understand how to use postcode filters, property estimates, travel-time data, school context and local signals as a home-buying shortlist tool.',
|
||
'Perfect Postcode is designed to make area shortlisting more evidence-led. It doesn’t replace estate agents, surveyors, conveyancers, lenders, school admissions teams, or local authority checks.':
|
||
'Perfect Postcode is designed to make area shortlisting more evidence-led. It doesn’t replace estate agents, surveyors, conveyancers, lenders, school admissions teams, or local authority checks.',
|
||
'Start with hard constraints': 'Start with hard constraints',
|
||
'Begin with non-negotiables such as budget, property type, floor area, commute time, and essential services. This removes impossible postcodes before softer preferences are considered.':
|
||
'Begin with non-negotiables such as budget, property type, floor area, commute time, and essential services. This removes impossible postcodes before softer preferences are considered.',
|
||
'Use colour layers for trade-offs': 'Use colour layers for trade-offs',
|
||
'After filtering, colour the remaining map by one signal at a time: price per square metre, road noise, school context, commute time, broadband, or crime. This makes trade-offs easier to discuss.':
|
||
'After filtering, colour the remaining map by one signal at a time: price per square metre, road noise, school context, commute time, broadband, or crime. This makes trade-offs easier to discuss.',
|
||
'Measure what’s working': 'Measure what’s working',
|
||
'Use Search Console and analytics to track which public pages are indexed, which queries produce impressions, and which pages convert visitors into dashboard exploration. Review Core Web Vitals after every substantial frontend change.':
|
||
'Use Search Console and analytics to track which public pages are indexed, which queries produce impressions, and which pages convert visitors into dashboard exploration. Review Core Web Vitals after every substantial frontend change.',
|
||
'Can the tool choose the right postcode for me?':
|
||
'Can the tool choose the right postcode for me?',
|
||
'No. It helps compare evidence and reduce the search area. The final decision needs direct visits, current listings, legal checks, surveys, and personal judgement.':
|
||
'No. It helps compare evidence and reduce the search area. The final decision needs direct visits, current listings, legal checks, surveys, and personal judgement.',
|
||
'How should I use estimates?': 'How should I use estimates?',
|
||
'Use estimates as comparison signals, not as professional valuations or purchase advice.':
|
||
'Use estimates as comparison signals, not as professional valuations or purchase advice.',
|
||
'Understand where key filters come from.': 'Understand where key filters come from.',
|
||
'Apply the methodology to price-led area comparison.':
|
||
'Apply the methodology to price-led area comparison.',
|
||
'Apply the methodology to destination-led search.':
|
||
'Apply the methodology to destination-led search.',
|
||
Trust: 'Trust',
|
||
'Privacy and security for saved property searches':
|
||
'Privacy and security for saved property searches',
|
||
'Perfect Postcode privacy and security - Saved searches and account data':
|
||
'Perfect Postcode privacy and security - Saved searches and account data',
|
||
'Learn how Perfect Postcode treats saved searches, account data and property research workflows with privacy and security in mind.':
|
||
'Learn how Perfect Postcode treats saved searches, account data and property research workflows with privacy and security in mind.',
|
||
'Property research can reveal personal priorities, budgets, and locations. The product keeps public SEO pages separate from account-only areas and marks private dashboard/account routes as noindex.':
|
||
'Property research can reveal personal priorities, budgets, and locations. The product keeps public SEO pages separate from account-only areas and marks private dashboard/account routes as noindex.',
|
||
'Public pages and private areas are separated':
|
||
'Public pages and private areas are separated',
|
||
'Marketing, methodology, guide, and support pages are indexable. Dashboard, account, saved searches, invites, and invitation routes are marked noindex or blocked from crawler access where appropriate.':
|
||
'Marketing, methodology, guide, and support pages are indexable. Dashboard, account, saved searches, invites, and invitation routes are marked noindex or blocked from crawler access where appropriate.',
|
||
'Saved search data is account-scoped': 'Saved search data is account-scoped',
|
||
'Saved searches and properties are intended for signed-in use. They aren’t included in the public sitemap and shouldn’t be crawlable as public content.':
|
||
'Saved searches and properties are intended for signed-in use. They aren’t included in the public sitemap and shouldn’t be crawlable as public content.',
|
||
'Search measurement without exposing private data':
|
||
'Search measurement without exposing private data',
|
||
'SEO measurement should happen on public pages using aggregated analytics and Search Console data. Private query parameters and account views shouldn’t become indexable landing pages.':
|
||
'SEO measurement should happen on public pages using aggregated analytics and Search Console data. Private query parameters and account views shouldn’t become indexable landing pages.',
|
||
'Are saved searches listed in the sitemap?': 'Are saved searches listed in the sitemap?',
|
||
'No. Public SEO pages are listed; account and saved-search routes are intentionally excluded.':
|
||
'No. Public SEO pages are listed; account and saved-search routes are intentionally excluded.',
|
||
'Can private dashboard URLs appear in search?':
|
||
'Can private dashboard URLs appear in search?',
|
||
'They shouldn’t be indexed. The server marks private routes noindex and the sitemap only lists public pages.':
|
||
'They shouldn’t be indexed. The server marks private routes noindex and the sitemap only lists public pages.',
|
||
'How to use public postcode data responsibly.':
|
||
'How to use public postcode data responsibly.',
|
||
'What data powers the public comparisons.': 'What data powers the public comparisons.',
|
||
'Explore public postcode-search workflows.': 'Explore public postcode-search workflows.',
|
||
},
|
||
},
|
||
|
||
// ── Auth Modal ─────────────────────────────────────
|
||
auth: {
|
||
logIn: 'Log in',
|
||
createAccount: 'Create account',
|
||
resetPassword: 'Reset password',
|
||
valueProp: 'Save searches, bookmark properties, and build a shortlist of areas that fit.',
|
||
continueWithGoogle: 'Continue with Google',
|
||
email: 'Email',
|
||
emailPlaceholder: 'you@example.com',
|
||
password: 'Password',
|
||
passwordPlaceholderRegister: 'Min 8 characters',
|
||
passwordPlaceholderLogin: 'Your password',
|
||
forgotPassword: 'Forgot password?',
|
||
resetSent: 'Check your email for a reset link.',
|
||
pleaseWait: 'Please wait...',
|
||
sendResetLink: 'Send reset link',
|
||
backToLogin: 'Back to login',
|
||
},
|
||
|
||
// ── Upgrade Modal ──────────────────────────────────
|
||
upgrade: {
|
||
title: 'Find every matching postcode',
|
||
description:
|
||
'You’re currently exploring the demo area. Get lifetime access to every postcode, every filter, and every neighbourhood in England. One payment, forever.',
|
||
free: 'Free',
|
||
freeForEarly: 'Free for early adopters. No credit card required.',
|
||
oneTimePayment: 'One-time payment. Lifetime access.',
|
||
redirecting: 'Redirecting...',
|
||
claimFreeAccess: 'Claim free access',
|
||
upgradeFor: 'Upgrade for {{price}}',
|
||
registerAndUpgrade: 'Register & Upgrade',
|
||
alreadyHaveAccount: 'Already have an account? Log in',
|
||
continueWithDemo: 'Continue with demo',
|
||
backToSharedArea: 'Back to shared area',
|
||
sharedAreaDescription:
|
||
'You’re viewing a shared area. To explore beyond it, get lifetime access to every postcode, every filter, and every neighbourhood in England.',
|
||
checkoutFailed: 'Checkout failed',
|
||
},
|
||
|
||
// ── Save Search Modal ──────────────────────────────
|
||
saveSearch: {
|
||
title: 'Save Search',
|
||
saved: 'Search saved',
|
||
savedSuccess: 'Your search has been saved successfully.',
|
||
viewSavedSearches: 'View saved searches',
|
||
name: 'Name',
|
||
namePlaceholder: 'My search',
|
||
saving: 'Saving...',
|
||
},
|
||
|
||
// ── License Success ────────────────────────────────
|
||
licenseSuccess: {
|
||
verifyingTitle: 'Verifying access',
|
||
verifyingSubtitle: 'Checking your account before we unlock the map.',
|
||
verifyingDescription: 'This usually takes a few seconds after checkout.',
|
||
activationDelayedTitle: 'Payment received',
|
||
activationDelayedSubtitle: 'Access is still activating.',
|
||
activationDelayedDescription:
|
||
'We could not confirm the account update yet. Refresh in a moment, or contact support if access does not appear.',
|
||
stayOnPricing: 'Stay on pricing',
|
||
title: 'You’re in.',
|
||
subtitle: 'Your lifetime access is now active.',
|
||
description: 'Full access to every feature, every postcode, across all of England.',
|
||
startExploring: 'Start exploring',
|
||
},
|
||
|
||
// ── Filters ────────────────────────────────────────
|
||
filters: {
|
||
activeFilters: 'Active Filters',
|
||
addFilter: 'Add filters',
|
||
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.',
|
||
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.',
|
||
searchFeatures: 'Search features...',
|
||
noMatchingFeatures: 'No matching features',
|
||
tryDifferentSearch: 'Try a different search term',
|
||
allFeaturesActive: 'All features are active',
|
||
removeFilterHint: 'Remove a filter to see available features',
|
||
featureInfo: 'About this data',
|
||
aboutData: 'About this data',
|
||
aboutDataShort: 'About',
|
||
colourMap: 'Colour map',
|
||
colourMapShort: 'Colour map',
|
||
clearColourMap: 'Clear map colour',
|
||
addFilterAction: 'Add',
|
||
addFilterLabel: 'Add filter',
|
||
removeFilter: 'Remove filter',
|
||
replayTutorial: 'Replay interactive tutorial',
|
||
clearAll: 'Clear all',
|
||
clearAllTitle: 'Clear all filters?',
|
||
clearAllSavePrompt: 'Would you like to save your current filters before clearing?',
|
||
saveAndClear: 'Save & Clear',
|
||
clearWithoutSaving: 'Clear without saving',
|
||
filtersOut: 'filters out {{value}}',
|
||
schoolType: 'School type',
|
||
schoolRating: 'School rating',
|
||
schoolDistance: 'School distance',
|
||
primary: 'Primary',
|
||
secondary: 'Secondary',
|
||
rating: 'Rating',
|
||
goodPlus: 'Good+',
|
||
outstanding: 'Outstanding',
|
||
distance: 'Distance',
|
||
crimeType: 'Crime type',
|
||
ethnicity: 'Ethnicity',
|
||
poiType: 'POI type',
|
||
party: 'Party',
|
||
},
|
||
|
||
// ── Philosophy Popup ───────────────────────────────
|
||
philosophy: {
|
||
intro:
|
||
'Start with your must-haves, then layer on nice-to-haves. The map narrows as you add filters. The areas left are your best matches.',
|
||
step1Title: 'Budget and basics',
|
||
step1Desc: '(price range, floor area, property type)',
|
||
step2Title: 'Commute',
|
||
step2Desc: '(travel time to your workplace by car, bike, or transit)',
|
||
step3Title: 'Safety',
|
||
step3Desc: '(crime rates, noise levels, ground stability)',
|
||
step4Title: 'Schools',
|
||
step4Desc: '(nearby Ofsted-rated Good or Outstanding schools)',
|
||
step5Title: 'Lifestyle',
|
||
step5Desc: '(restaurants, parks, broadband speed)',
|
||
step6Title: 'Energy',
|
||
step6Desc: '(EPC ratings, insulation, heating costs)',
|
||
tip: 'Tip: if nothing matches, relax one constraint at a time to see which trade-off opens up the most options.',
|
||
},
|
||
|
||
// ── Travel Time ────────────────────────────────────
|
||
travel: {
|
||
travelTime: 'Travel Time ({{mode}})',
|
||
maxTime: 'Max time',
|
||
selectDestination: 'Select destination...',
|
||
bestCase: 'Best case',
|
||
bestCaseTitle: 'Best case travel time',
|
||
bestCaseDesc:
|
||
'Uses the fastest realistic journey time (if you time your departure well and catch good connections). The default uses the <strong>median</strong>, representing a typical journey regardless of when you leave.',
|
||
previewOnMap: 'Preview on map',
|
||
stopPreviewing: 'Stop previewing',
|
||
removeTravelTime: 'Remove travel time',
|
||
addTravelTime: 'Add {{mode}} travel time',
|
||
clearDestination: 'Clear destination',
|
||
typeToFilter: 'Type to filter...',
|
||
noDestinations: 'No destinations found',
|
||
modeCar: 'Car',
|
||
modeBicycle: 'Bicycle',
|
||
modeWalking: 'Walking',
|
||
modeTransit: 'Public Transport',
|
||
modeCarDesc: 'Drive time via the fastest road route',
|
||
modeBicycleDesc: 'Cycling time using bike-friendly routes',
|
||
modeWalkingDesc: 'Walking time along pedestrian paths and pavements',
|
||
modeTransitDesc: 'Journey time by train, tube, and bus',
|
||
},
|
||
|
||
// ── Travel Time Info Popup ─────────────────────────
|
||
travelInfo: {
|
||
transitDesc:
|
||
' by public transport (bus, rail, tube). Times are computed across a typical weekday morning window.',
|
||
carDesc: ' by car, based on typical road speeds and the road network.',
|
||
bicycleDesc: ' by bicycle, using cycle-friendly routes.',
|
||
walkingDesc: ' on foot, using pedestrian paths and pavements.',
|
||
mainDesc: 'Shows how long it takes to travel from the selected destination to each area.',
|
||
sliderHint: 'Use the slider to set your maximum commute time.',
|
||
},
|
||
|
||
// ── AI Filter ──────────────────────────────────────
|
||
aiFilter: {
|
||
describeIdealArea: 'Describe where you want to live',
|
||
aiSearch: 'AI Search',
|
||
describeHint: 'describe what you’re looking for',
|
||
placeholder: 'e.g. 2-bed under £525k, 45 mins to work, quiet...',
|
||
example1: '2-bed under £525k, 45 mins to work',
|
||
example2: 'Family areas near good schools under £650k',
|
||
example3: 'More space with a sane commute',
|
||
analysing: 'Analysing your query...',
|
||
searchingDestinations: 'Searching for destinations...',
|
||
generatingFilters: 'Generating filters...',
|
||
refiningResults: 'Refining results...',
|
||
weeklyLimitReached:
|
||
'You’ve reached the weekly AI usage limit. It’ll reset automatically next week.',
|
||
},
|
||
|
||
// ── Map Legend ─────────────────────────────────────
|
||
mapLegend: {
|
||
clearColourView: 'Clear colour view',
|
||
resetColourScale: 'Reset colour scale',
|
||
historicalMatches: 'Historical property matches',
|
||
numberOfProperties: 'Number of properties',
|
||
previewing: 'Previewing \u201c{{name}}\u201d',
|
||
},
|
||
|
||
// ── Map ────────────────────────────────────────────
|
||
map: {
|
||
ogTitle: 'Your perfect postcode',
|
||
ogPropertyPrices: 'Property prices',
|
||
ogEnergyRatings: 'Energy ratings',
|
||
ogSchools: 'Schools',
|
||
ogCrimeStats: 'Crime stats',
|
||
ogTransport: 'Transport',
|
||
},
|
||
|
||
// ── Properties Pane ────────────────────────────────
|
||
propertyCard: {
|
||
unknownAddress: 'Unknown Address',
|
||
unsaveProperty: 'Unsave property',
|
||
saveProperty: 'Save property',
|
||
estValue: 'Est. value:',
|
||
type: 'Type:',
|
||
builtForm: 'Built form:',
|
||
tenure: 'Tenure:',
|
||
floorArea: 'Floor area:',
|
||
rooms: 'Rooms:',
|
||
built: 'Built:',
|
||
formerCouncil: 'Ex-council:',
|
||
exCouncilBadge: 'Ex-council',
|
||
epcRating: 'EPC rating:',
|
||
epcPotential: 'EPC potential:',
|
||
renovations: 'Renovations',
|
||
perSqm: '/m²',
|
||
searchPlaceholder: 'Search by address or postcode...',
|
||
propertyData: 'Property Data',
|
||
propertyDataDesc:
|
||
'Prices come from HM Land Registry (what buyers actually paid). Floor area, energy ratings, construction year, and tenure come from official EPC surveys. Both sources are matched by address within each postcode.',
|
||
},
|
||
|
||
// ── Area Pane ──────────────────────────────────────
|
||
areaPane: {
|
||
areaStatistics: 'Area Statistics',
|
||
areaOverview: 'Overview',
|
||
statsFor: 'Stats for all properties in this {{type}}',
|
||
matchingFilters: ' matching all active filters',
|
||
statsBasis: 'Stats basis',
|
||
matchingFiltersOption: 'Matching filters',
|
||
allPropertiesOption: 'All properties',
|
||
filtersAffectStats: 'Using {{count}} active filters for the stats in this pane.',
|
||
filtersIgnoredForStats: 'Showing stats for all properties in the selected area.',
|
||
noFiltersAffectStats: 'No active filters; stats cover all properties in this area.',
|
||
filteredStatsEmpty: 'Filtered stats are empty',
|
||
showAllStatsHint:
|
||
'{{count}} properties exist before filters. Switch to all properties to inspect this area.',
|
||
showAllStatsFallback:
|
||
'Switch to all properties to inspect this area without the active filters.',
|
||
showAllStats: 'Show all properties',
|
||
viewProperties: 'View {{count}} Properties',
|
||
viewPropertiesShort: 'View properties',
|
||
priceHistory: 'Price History',
|
||
journeysFrom: 'Journey times for {{label}}',
|
||
to: 'From {{destination}}',
|
||
noJourneyData: 'No journey data available',
|
||
viewOnGoogleMaps: 'View on Google Maps',
|
||
walk: 'Walk',
|
||
cycle: 'Cycle',
|
||
nationalAvg: 'National avg',
|
||
},
|
||
|
||
// ── Histogram Legend ───────────────────────────────
|
||
histogramLegend: {
|
||
tealBars: 'Teal bars',
|
||
tealBarsDesc: 'show the distribution in this selected area',
|
||
greyBars: 'Grey bars',
|
||
greyBarsDesc: 'show the overall distribution across all areas',
|
||
dashedLine: 'Dashed line',
|
||
dashedLineDesc: 'indicates the national average',
|
||
},
|
||
|
||
// ── Street View ────────────────────────────────────
|
||
streetView: {
|
||
title: 'Street View',
|
||
openLarge: 'Open Street View larger',
|
||
expandedTitle: 'Expanded Street View',
|
||
},
|
||
|
||
// ── POI Pane ───────────────────────────────────────
|
||
poiPane: {
|
||
pois: 'POIs',
|
||
pointsOfInterest: 'Points of Interest',
|
||
poiDescription:
|
||
'Sourced from OpenStreetMap, NaPTAN, and GEOLYTIX Grocery Retail Points. Covers transport stops, shops, chain supermarkets, restaurants, healthcare, leisure, and more.',
|
||
searchCategories: 'Search categories...',
|
||
dataSourceInfo: 'Data source info',
|
||
},
|
||
|
||
// ── External Search Links ──────────────────────────
|
||
externalSearch: {
|
||
searchOn: 'Search {{radius}} on',
|
||
exact: 'exact',
|
||
outcodeNotRecognised: 'Outcode not recognised',
|
||
},
|
||
|
||
// ── Location Search ────────────────────────────────
|
||
locationSearch: {
|
||
placeholder: 'Search places or postcodes...',
|
||
postcodeNotFound: 'Postcode not found',
|
||
lookupFailed: 'Lookup failed',
|
||
searchLabel: 'Search places or postcodes',
|
||
locateMe: 'Go to my location',
|
||
geolocationUnsupported: 'Geolocation not supported by your browser',
|
||
geolocationFailed: 'Couldn’t determine your location',
|
||
},
|
||
|
||
// ── Mobile Drawer ──────────────────────────────────
|
||
mobileDrawer: {
|
||
closeDrawer: 'Close drawer',
|
||
},
|
||
|
||
// ── Home Page ──────────────────────────────────────
|
||
home: {
|
||
heroEyebrow: 'Find where to look first',
|
||
heroTitle1: 'Stop searching',
|
||
heroTitle2: 'the wrong places',
|
||
heroTitle3: 'Before listings narrow your search.',
|
||
heroSubtitle: 'Find postcodes where your budget, commute, and daily life line up.',
|
||
heroDescription:
|
||
'Perfect Postcode filters every postcode first, so you only chase viewings in places that work.',
|
||
exploreTheMap: 'Show me where to look',
|
||
seeTheDifference: 'Watch demo',
|
||
productDemoLabel: 'See how to find where to look first',
|
||
playProductDemo: 'Play the where-to-look demo',
|
||
scrollToProductDemo: 'Scroll to product demo',
|
||
showcaseHeader: 'How it works',
|
||
showcaseContext: 'How Perfect Postcode works',
|
||
showcaseFeaturePriceShort: 'Price',
|
||
showcaseFeatureNoiseShort: 'Noise',
|
||
showcaseFeatureSchoolsShort: 'Schools',
|
||
showcaseFeatureTravelShort: 'Travel',
|
||
showcaseGoodPrimariesNearby: '{{count}}+ Good or Outstanding primary schools nearby',
|
||
showcaseWithinRail: 'Within {{count}} min of a station',
|
||
showcaseMatchingHomesLabel: 'Matching postcodes',
|
||
showcaseMatchingHomes: '{{value}} matching postcodes',
|
||
showcaseMedianPrice: '{{value}} median',
|
||
showcaseJourneyRoutes: 'Journey routes',
|
||
showcaseNearby: '{{value}} nearby',
|
||
showcasePoliticalVoteShare: 'Political vote share',
|
||
showcaseLotsMore: 'More neighbourhood data',
|
||
showcaseMinutes: '{{count}} min',
|
||
showcaseSendShortlist: 'Send the shortlist',
|
||
showcaseDownloadXlsx: 'Download .xlsx',
|
||
showcaseTopThree: 'Top 3',
|
||
showcaseScoutBullet1: 'Check the street before you commit to listing alerts.',
|
||
showcaseScoutBullet2: 'Test the commute from a real front door, not a borough name.',
|
||
showcaseScoutBullet3: 'Compare viewings with evidence already saved.',
|
||
showcaseStep1Tab: 'Filter',
|
||
showcaseStep1Title: 'Set what has to work',
|
||
showcaseStep1Body:
|
||
'Add budget, commute, schools, safety, noise, and local details. Watch the wrong postcodes drop out.',
|
||
showcaseStep1Chip1: 'Quiet streets',
|
||
showcaseStep1Chip2: 'Good primaries nearby',
|
||
showcaseStep1Chip3: 'Under £500k',
|
||
showcaseStep1VennCenter: 'Postcodes that meet all three',
|
||
showcaseStep2Tab: 'Match',
|
||
showcaseStep2Title: 'See the places left standing',
|
||
showcaseStep2Body:
|
||
'Search by practical checks, not familiar names. The map shows postcode clusters worth checking first.',
|
||
showcaseStep2Region: 'Greater London',
|
||
showcaseStep2Sources: 'Land Registry · ONS · Ofsted · DfT',
|
||
showcaseStep2ClustersLabel: 'Matching clusters',
|
||
showcaseStep3Tab: 'Inspect',
|
||
showcaseStep3Title: 'Check the evidence',
|
||
showcaseStep3Body:
|
||
'Open a postcode and see the price, commute, schools, crime, broadband, and trade-offs before you visit.',
|
||
showcaseStep3HeaderArea: 'Shortlisted postcode',
|
||
showcaseStep3HeaderFit: 'What works',
|
||
showcaseStep3Stat1Label: 'Sold price trend',
|
||
showcaseStep3Stat2Label: 'Crime rate',
|
||
showcaseStep3Stat2Value: 'Below borough avg.',
|
||
showcaseStep3Stat3Label: 'Median age',
|
||
showcaseStep3Stat4Label: 'Broadband',
|
||
showcaseStep3Stat4Value: '1 Gbps available',
|
||
showcaseStep3Stat5Label: 'Primary schools',
|
||
showcaseStep3Stat5Value: '3 Outstanding within 1 mile',
|
||
showcaseStep4Tab: 'Scout',
|
||
showcaseStep4Title: 'Take the shortlist to the streets',
|
||
showcaseStep4Body:
|
||
'Export the postcodes worth checking, test the commute, walk the roads, and compare viewings with context saved.',
|
||
showcaseStep4FileName: 'areas-to-scout.xlsx',
|
||
showcaseStep4ExportLabel: 'Export to Excel',
|
||
showcaseStep4ColPostcode: 'Postcode',
|
||
showcaseStep4ColScore: 'Match',
|
||
showcaseStep4ColCommute: 'Commute',
|
||
showcaseStep4ColPrice: 'Median sold price',
|
||
showcaseStep4Conclusion: 'Export a shortlist and start checking streets.',
|
||
statProperties: 'HM Land Registry sales',
|
||
statFilters: 'ways to narrow the map',
|
||
statEvery: 'Every',
|
||
statPostcodeInEngland: 'active postcode in England',
|
||
ourPhilosophy: 'Stop starting with towns you already know.',
|
||
philosophyP1:
|
||
'Most searches start with a place name, then hope the right homes appear. That skips the harder question: which places are actually worth searching?',
|
||
philosophyP2:
|
||
'Perfect Postcode starts before the listing site. Set the things a place must support, then see the postcodes that deserve your attention first.',
|
||
streetTitle: 'Places change street by street',
|
||
streetIntro:
|
||
'The right side of a station, a noisy road, or one school catchment can change the search. Area names flatten all of that.',
|
||
streetCard1Title: 'Escape the familiar-name trap',
|
||
streetCard1Body: 'Find postcode-level matches outside the places already on your list.',
|
||
streetCard2Title: 'Know the trade-offs before you go',
|
||
streetCard2Body:
|
||
'Check price, commute, noise, schools, safety, broadband, and nearby amenities before booking viewings.',
|
||
othersVs: 'Other tools vs',
|
||
checkMyPostcode: 'Listing sites',
|
||
areaGuides: 'Postcode checkers',
|
||
compSearchWithout: 'Find areas before you know their names',
|
||
compSearchWithoutSub: '(requirements first, location second)',
|
||
compAreaData: 'Neighbourhood evidence in one place',
|
||
compAreaDataSub: '(crime, schools, noise, broadband, amenities)',
|
||
compPropertyData: 'Street-level property context',
|
||
compPropertyDataSub: '(sold prices, EPC, floor area, estimated value)',
|
||
compFilters: 'Budget, commute, schools, safety, and local data together',
|
||
compFiltersSub: '(budget + commute + schools + safety + local context)',
|
||
ctaTitle: 'Find where to look before you book viewings.',
|
||
ctaDescription:
|
||
'Build a postcode shortlist from the things that matter, then check the streets in person.',
|
||
},
|
||
|
||
// ── Pricing Page ───────────────────────────────────
|
||
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.',
|
||
currentTier: 'Current tier',
|
||
firstNUsers: 'First {{count}} users',
|
||
everyoneAfter: 'Everyone after',
|
||
nextNUsers: 'Next {{count}} users',
|
||
lifetime: '/lifetime',
|
||
spotsRemaining: '{{count}} spot remaining',
|
||
spotsRemainingPlural: '{{count}} spots remaining',
|
||
filled: 'Filled',
|
||
openDashboard: 'Open dashboard',
|
||
getStarted: 'Get started',
|
||
getStartedPrice: 'Get started - {{price}}',
|
||
noCreditCard: 'No credit card required',
|
||
|
||
soldOut: 'Sold out',
|
||
upcoming: 'Upcoming',
|
||
failedToLoad: 'Failed to load pricing. Please try again later.',
|
||
feat1: '56 filters across England',
|
||
feat2: 'Every postcode searchable from your needs',
|
||
feat3: 'Unlimited map exploration, saved searches and exports',
|
||
feat4: '13M historical transactions and price context',
|
||
feat5: 'Commute, schools, crime, noise, broadband and more',
|
||
feat6: 'All future data updates included',
|
||
},
|
||
|
||
// ── Learn Page ─────────────────────────────────────
|
||
learnPage: {
|
||
faq: 'FAQ',
|
||
dataSources: 'Data Sources',
|
||
articles: 'Articles',
|
||
support: 'Support',
|
||
dataSourcesIntro:
|
||
'This application combines {{count}} open datasets covering property prices, energy performance, transport, demographics, crime, environment, and more.',
|
||
faqIntro:
|
||
'Whether you’re narrowing a first-time buyer search, checking an unfamiliar postcode, or building a viewing shortlist, here’s how Perfect Postcode helps you work out where to look.',
|
||
articlesIntro:
|
||
'Browse the public guides for property search, commute, schools, postcode checks, regional comparisons, data coverage, methodology, and privacy.',
|
||
supportIntro: 'Have a question? Check our FAQ or reach out to us directly.',
|
||
source: 'Source:',
|
||
optOut: 'Opt out of public disclosure',
|
||
attribution: 'Attribution',
|
||
attrLandRegistry: 'Contains HM Land Registry data © Crown copyright and database right 2025.',
|
||
attrOgl: 'Contains public sector information licensed under the',
|
||
attrOglLink: 'Open Government Licence v3.0',
|
||
attrOs: 'Contains OS data © Crown copyright and database rights 2025.',
|
||
attrTfl: 'Powered by TfL Open Data.',
|
||
attrOsm: 'Contains data from',
|
||
attrOsmContrib: '© OpenStreetMap contributors',
|
||
attrOsmLicense: 'available under the',
|
||
attrOsmLicenseLink: 'Open Data Commons Open Database License (ODbL)',
|
||
// Data source names & descriptions
|
||
dsPricePaidName: 'Price Paid Data',
|
||
dsPricePaidOrigin: 'HM Land Registry',
|
||
dsPricePaidUse: 'Complete historical property sale prices for England.',
|
||
dsEpcName: 'Energy Performance Certificates (EPC)',
|
||
dsEpcOrigin: 'Ministry of Housing, Communities & Local Government',
|
||
dsEpcUse:
|
||
'Domestic Energy Performance Certificates providing floor area, number of rooms, construction year, energy ratings, property type, and built form. Matched with Price Paid records by address within each postcode. Property owners can opt out of public disclosure.',
|
||
dsNsplName: 'National Statistics Postcode Lookup (NSPL)',
|
||
dsNsplOrigin: 'ONS / ArcGIS',
|
||
dsNsplUse:
|
||
'Maps postcodes to coordinates and statistical area codes, used to link all area-level datasets to individual properties.',
|
||
dsIodName: 'English Indices of Deprivation 2025',
|
||
dsIodOrigin: 'Ministry of Housing, Communities & Local Government',
|
||
dsIodUse:
|
||
'National deprivation percentiles across income, employment, education, health, crime, and living environment for every neighbourhood in England.',
|
||
dsEthnicityName: 'Population by Ethnicity (2021 Census)',
|
||
dsEthnicityOrigin: 'ONS',
|
||
dsEthnicityUse:
|
||
'Population percentages by ethnic group (South Asian, East Asian, Black, Mixed, White, Other) per local authority.',
|
||
dsCrimeName: 'Street-level Crime Data',
|
||
dsCrimeOrigin: 'data.police.uk',
|
||
dsCrimeUse:
|
||
'Street-level crime data aggregated into yearly averages by LSOA and crime type (violence, burglary, anti-social behaviour, drugs, vehicle crime, etc.).',
|
||
dsOsmName: 'OpenStreetMap POIs',
|
||
dsOsmOrigin: 'OpenStreetMap contributors / Geofabrik',
|
||
dsOsmUse:
|
||
'Points of interest covering shops, restaurants, healthcare, leisure, tourism, and more across Great Britain.',
|
||
dsGeolytixRetailName: 'GEOLYTIX Grocery Retail Points',
|
||
dsGeolytixRetailOrigin: 'GEOLYTIX',
|
||
dsGeolytixRetailUse:
|
||
'Supermarket and convenience store locations across the UK, including chain retailers such as Waitrose, Tesco, Sainsbury’s, Asda, Morrisons, Aldi, Lidl, Co-op, M&S, Iceland, and Spar.',
|
||
dsGreenspaceName: 'OS Open Greenspace',
|
||
dsGreenspaceOrigin: 'Ordnance Survey',
|
||
dsGreenspaceUse:
|
||
'Authoritative green space boundaries for Great Britain, including public parks, gardens, playing fields, and play spaces. Polygon centroids are used for park proximity counts and distance-to-nearest-park calculations.',
|
||
dsTowName: 'National Trees Outside Woodland Map',
|
||
dsTowOrigin: 'Forest Research / Defra NCEA',
|
||
dsTowUse:
|
||
'Tree canopy polygons for lone trees, groups of trees, and small woodlands in England. Used here to estimate tree coverage percentiles around postcode centroids.',
|
||
dsNaptanName: 'NaPTAN (Public Transport Stops)',
|
||
dsNaptanOrigin: 'Department for Transport',
|
||
dsNaptanUse:
|
||
'Station and stop locations for rail, bus, metro/tram, ferry, and airports across England.',
|
||
dsNoiseName: 'Defra Noise Mapping',
|
||
dsNoiseOrigin: 'Defra / Environment Agency',
|
||
dsNoiseUse:
|
||
'Road noise levels (24-hour weighted average) from the 2022 strategic noise mapping, modelled at high resolution and sampled at each postcode.',
|
||
dsOfstedName: 'Ofsted School Inspections',
|
||
dsOfstedOrigin: 'Ofsted',
|
||
dsOfstedUse:
|
||
'Latest inspection outcomes for state-funded schools (as at April 2025). Averaged per postcode to give a local school quality score (1=Outstanding to 4=Inadequate).',
|
||
dsBroadbandName: 'Ofcom Broadband Performance',
|
||
dsBroadbandOrigin: 'Ofcom',
|
||
dsBroadbandUse:
|
||
'Fixed broadband coverage and maximum download speeds by area from Ofcom Connected Nations 2025.',
|
||
dsCouncilTaxName: 'Council Tax Levels 2025-26',
|
||
dsCouncilTaxOrigin: 'Ministry of Housing, Communities & Local Government',
|
||
dsCouncilTaxUse:
|
||
'Annual council tax rates for Bands A-H for all 296 billing authorities in England, for a dwelling occupied by two adults. Joined to properties via local authority district code from the NSPL postcode lookup.',
|
||
dsRentalName: 'Private Rental Market Statistics',
|
||
dsRentalOrigin: 'ONS / Valuation Office Agency',
|
||
dsRentalUse:
|
||
'Median monthly private rental prices by local authority and bedroom category (Oct 2022 - Sep 2023). Joined to properties via local authority district code and estimated bedroom count.',
|
||
dsElectionName: '2024 General Election Results',
|
||
dsElectionOrigin: 'UK Parliament',
|
||
dsElectionUse:
|
||
'Candidate-level results for the July 2024 UK General Election. Aggregated to constituency level: voter turnout (%) and party vote shares (%). Joined to properties via the parliamentary constituency code (pcon) from the NSPL postcode lookup.',
|
||
// FAQ section titles
|
||
faqFindingTitle: 'Where To Look',
|
||
faqCommuteTitle: 'Travel Times',
|
||
faqBudgetTitle: 'Estimated Prices',
|
||
faqSafetyTitle: 'Safety and Neighbourhood',
|
||
faqFamiliesTitle: 'Families and Schools',
|
||
faqEnvironmentTitle: 'Environment and Quality of Life',
|
||
faqDueDiligenceTitle: 'What To Check',
|
||
faqPrivacyTitle: 'Privacy',
|
||
faqWhyTitle: 'Why Perfect Postcode',
|
||
faqPricingTitle: 'Access',
|
||
faqTipsTitle: 'Map Tips',
|
||
// FAQ items — Finding Your Area
|
||
faqFinding1Q: 'Where should I look once the obvious areas are too expensive?',
|
||
faqFinding1A:
|
||
'Start with the things you can’t compromise on: budget, home type, space, commute, schools, safety, noise, broadband, parks, and anything else that matters. The map hides places that don’t fit, so less obvious areas can surface before you start scrolling listings.',
|
||
faqFinding2Q: 'How do I find good postcodes in places I don’t know well?',
|
||
faqFinding2A:
|
||
'Set your must-haves across the whole map, then look closely at the groups of places that remain. You can compare unfamiliar postcodes by commute, sold prices, schools, crime, broadband, noise, and shops or parks nearby instead of relying on reputation.',
|
||
faqFinding3Q: 'What should I do when my search returns too many or too few areas?',
|
||
faqFinding3A:
|
||
'Keep your must-haves in place, then colour the map by one thing you want to compare, such as price per square metre, road noise, school score, or commute time. If almost nothing is left, loosen one slider and see which change opens up more options.',
|
||
// FAQ items — Commute and Travel
|
||
faqCommute1Q: 'How are the travel times calculated?',
|
||
faqCommute1A:
|
||
'Travel times are calculated in advance for each saved destination. We work out which postcodes can reach that destination by car, bike, walking, or public transport, then save those results so the map can respond quickly while you filter.',
|
||
faqCommute2Q: 'What should I know about the travel-time numbers?',
|
||
faqCommute2A:
|
||
'Public transport times are based on a weekday morning commute, using departures between 07:30 and 08:30. The normal setting shows a typical journey in that window. These are planning estimates, so they don’t include live delays, traffic, or last-minute platform changes.',
|
||
faqCommute3Q: 'When should I use the Best case button?',
|
||
faqCommute3A:
|
||
'Use the Best case button on public-transport searches when you want to see the journey with a well-timed departure and good connections. Leave it off for the everyday comparison, because the normal setting is closer to what you should expect most days.',
|
||
// FAQ items — Budget and Value
|
||
faqBudget1Q: 'How do you estimate current property prices?',
|
||
faqBudget1A:
|
||
'The estimate starts with the home’s last recorded sale price from HM Land Registry. We bring that sale up to today’s market by looking at how similar homes have changed in value over time, especially homes of the same type nearby. Where there are fewer local sales, the estimate leans more on wider area trends. It’s then checked against nearby recent sales and floor area so the result is useful for comparison.',
|
||
faqBudget2Q: 'Why use estimated current price instead of last sold price?',
|
||
faqBudget2A:
|
||
'Last sold price can be years or decades old, while asking prices only cover homes listed today. Estimated current price puts older sales into today’s market, so you can compare more homes and spot areas that may offer better value before listings appear. Treat it as a guide for shortlisting, not a bank valuation.',
|
||
// FAQ items — Safety and Neighbourhood
|
||
faqSafety1Q: 'What type of crime is common around this postcode?',
|
||
faqSafety1A:
|
||
'Crime is broken down by type, including violence, burglary, robbery, vehicle crime, antisocial behaviour, shoplifting, drugs, and public order. You can focus on the risks that matter to you instead of relying on one vague safety score.',
|
||
faqSafety2Q: 'What should I check before viewing an unfamiliar street?',
|
||
faqSafety2A:
|
||
'Check crime, road noise, broadband, parks, food shops, schools, and commute before you book. Listing photos are useful, but they shouldn’t be the first time you learn what the street is like.',
|
||
// FAQ items — Families and Schools
|
||
faqFamilies1Q: 'Which areas have the right mix of schools, space, safety, and commute?',
|
||
faqFamilies1A:
|
||
'Put school ratings, crime, parks, commute, space, home type, and budget on one map. The result is a practical family shortlist instead of a pile of separate school, crime, listing, and transport searches.',
|
||
faqFamilies2Q: 'Does this prove I’m inside a school catchment?',
|
||
faqFamilies2A:
|
||
'No. We show nearby school quality and local education data, but admissions areas and priority rules can change. Use Perfect Postcode to shortlist places, then check catchments and admissions with the school or local council.',
|
||
// FAQ items — Environment and Quality of Life
|
||
faqEnv1Q: 'How do I avoid a noisy road without losing commute or broadband quality?',
|
||
faqEnv1A:
|
||
'Filter by road noise, then keep your commute, broadband, price, and home filters switched on. You can colour the map by one feature while the others keep the shortlist honest.',
|
||
faqEnv2Q: 'Do you show flood risk, subsidence, or survey issues?',
|
||
faqEnv2A:
|
||
'Not today. We show things such as road noise, energy rating, building age, and the local environment around the postcode. Flood risk, legal issues, structural issues, mortgage concerns, and survey findings still need to be checked separately before you buy.',
|
||
faqEnv3Q: 'What running-cost checks can I do before viewing?',
|
||
faqEnv3A:
|
||
'You can check energy rating, floor area, building age, council tax area, broadband, and noise before viewing. It won’t predict your exact bills, but it helps you avoid obvious mismatches early.',
|
||
// FAQ items — Listing Portals and Due Diligence
|
||
faqDueDiligence1Q: 'Should I use this before or after checking Rightmove?',
|
||
faqDueDiligence1A:
|
||
'Use Perfect Postcode before and alongside listing sites. Rightmove, Zoopla, and OnTheMarket are still where you check what’s for sale now, photos, agents, viewings, and alerts. Perfect Postcode helps you decide which postcodes are worth searching in the first place.',
|
||
faqDueDiligence2Q: 'Why can’t I filter by garden, garage, or layout?',
|
||
faqDueDiligence2A:
|
||
'Those details aren’t available consistently for every home. Perfect Postcode can filter by things such as floor area, home type, ownership type, energy rating, sold prices, and local area data. Gardens, garages, aspect, room layout, and estate-agent wording still need to be checked in the listing and at the viewing.',
|
||
faqDueDiligence3Q: 'Do you track listing price cuts and time on market?',
|
||
faqDueDiligence3A:
|
||
'Not currently. Perfect Postcode is built around sold prices, energy ratings, postcode data, travel times, and neighbourhood data rather than live listing changes. You can still use sale history, estimated current value, and price per square metre to judge whether an asking price looks stretched.',
|
||
faqDueDiligence4Q: 'What should I still verify before making an offer?',
|
||
faqDueDiligence4A:
|
||
'Use Perfect Postcode to check the area and likely value, then confirm the listing details before making an offer. You should still check ownership type, lease details, service charges, planning history, flood risk, legal issues, mortgage requirements, and survey results.',
|
||
// FAQ items — Privacy and Data Protection
|
||
faqPrivacy1Q: 'Do you store personal data about me?',
|
||
faqPrivacy1A:
|
||
'The property and neighbourhood data doesn’t contain your personal details. If you create an account, we store only what’s needed to run the service, such as your email address, access status, newsletter choice, saved searches, saved properties, and payment records handled by Stripe. We handle account data under UK privacy law.',
|
||
// FAQ items — Why Perfect Postcode
|
||
faqWhy1Q: 'What does this show that listing portals usually don’t?',
|
||
faqWhy1A:
|
||
'Listing sites start from homes that are for sale right now. Perfect Postcode starts from the places that fit your life and budget, using sold prices, space, commute, schools, crime, noise, broadband, energy rating, ownership type, and local amenities before you open the listings.',
|
||
faqWhy2Q: 'How much manual research does this save?',
|
||
faqWhy2A:
|
||
'You could do the research yourself, but it means checking sold prices, energy ratings, crime, schools, broadband, local facts, environment details, travel times, and maps one postcode at a time. Perfect Postcode puts those sources in one searchable map for England.',
|
||
faqWhy3Q: 'How reliable is the data?',
|
||
faqWhy3A:
|
||
'The main sources are official or widely used public data, including sold prices, energy ratings, local facts, school ratings, broadband, crime, environment, map, and street data. They’re useful for shortlisting and comparison, but any purchase decision still needs current checks and expert advice where needed.',
|
||
// FAQ items — Pricing and Access
|
||
faqPricing1Q: 'Why pay when postcode reports are free?',
|
||
faqPricing1A:
|
||
'Free postcode tools are useful once you already know what to check. Perfect Postcode is for scanning every postcode in England against your needs, combining filters, comparing options, saving searches, and exporting a shortlist before you spend weekends on viewings.',
|
||
faqPricing2Q: 'What does lifetime access mean?',
|
||
faqPricing2A:
|
||
'Lifetime access means one payment gives your account ongoing access to the paid Perfect Postcode map for as long as the service runs. It isn’t a monthly or annual subscription, and normal data updates are included. You can use it during this search, come back later, and still have access if you move again.',
|
||
faqPricing3Q: 'What can I access on the free tier?',
|
||
faqPricing3A:
|
||
'Free users can explore all features within the demo area: inner London, roughly zones 1 to 2. To access data for the rest of England, you need lifetime access.',
|
||
|
||
// FAQ items — Tips and Tricks
|
||
faqTips1Q: 'How do I preview a filter on the map?',
|
||
faqTips1A:
|
||
'Click Colour beside a filter or feature to colour the map by that item. Your active filters stay in place, so this is a quick way to compare one thing, such as price, commute time, schools, crime, or noise, without changing your shortlist.',
|
||
faqTips2Q: 'How do I learn what a filter means?',
|
||
faqTips2A:
|
||
'Click About next to a filter or feature to open a short explanation of what it means and how to read it. Some areas of the map, such as travel-time cards, also have their own data explanation.',
|
||
faqTips3Q: 'How do I refresh the map colours?',
|
||
faqTips3A:
|
||
'When a feature is colouring the map, use Reset colour scale in the map legend to refresh the colours for the results you’re looking at now. This is useful after moving the map, zooming, or changing filters.',
|
||
},
|
||
|
||
// ── Account Page ───────────────────────────────────
|
||
accountPage: {
|
||
emailLabel: 'Email',
|
||
subscriptionLabel: 'Subscription',
|
||
upgrade: 'Upgrade',
|
||
redirecting: 'Redirecting…',
|
||
receiveNewsletter: 'Receive newsletter emails',
|
||
needHelp: 'Need help? Email us at',
|
||
responseTime: 'We typically respond within 24 hours.',
|
||
shareLinksTitle: 'Shared links',
|
||
noShareLinksYet: 'No shared links yet',
|
||
copyShareLink: 'Copy shared link',
|
||
clicksLabel: 'clicks',
|
||
},
|
||
|
||
// ── Saved Page ─────────────────────────────────────
|
||
savedPage: {
|
||
searches: 'Searches',
|
||
noSavedSearches: 'No saved searches yet',
|
||
noSavedSearchesDesc:
|
||
'Save your filters and map view so you can pick up exactly where you left off.',
|
||
noSavedProperties: 'No saved properties yet',
|
||
noSavedPropertiesDesc:
|
||
'Bookmark properties as you explore and build your shortlist without losing track.',
|
||
openPostcode: 'Open postcode',
|
||
clickToRename: 'Click to rename',
|
||
notesPlaceholder: 'Jot down your thoughts...',
|
||
deleteSearch: 'Delete search',
|
||
deleteSearchConfirm: 'Are you sure you want to delete this saved search? This can’t be undone.',
|
||
deleteProperty: 'Delete property',
|
||
deletePropertyConfirm:
|
||
'Are you sure you want to delete this saved property? This can’t be undone.',
|
||
bed: 'bed',
|
||
epc: 'EPC',
|
||
},
|
||
|
||
// ── Invites Page ───────────────────────────────────
|
||
invitesPage: {
|
||
inviteLinksLicensed: 'Invite links are available for licensed users.',
|
||
inviteAdminLabel: 'Invite friends (100% off)',
|
||
inviteReferralLabel: 'Invite friends (30% off)',
|
||
generateFreeInvite: 'Generate free invite link',
|
||
generateReferralLink: 'Generate referral link',
|
||
copyInviteLink: 'Copy invite link',
|
||
adminInvitesTitle: 'Admin invites (100% off)',
|
||
referralInvitesTitle: 'Referral invites (30% off)',
|
||
yourInviteLinks: 'Your invite links',
|
||
noInvitesYet: 'No invites generated yet',
|
||
link: 'Link',
|
||
status: 'Status',
|
||
created: 'Created',
|
||
redeemed: 'Redeemed',
|
||
pending: 'Pending',
|
||
},
|
||
|
||
// ── Invite Page ────────────────────────────────────
|
||
invitePage: {
|
||
youreInvited: 'You’re invited!',
|
||
specialOffer: 'Special offer!',
|
||
invitedByFree: '{{name}} has invited you to get free lifetime access.',
|
||
invitedByDiscount: '{{name}} has shared a 30% discount on lifetime access.',
|
||
genericFreeInvite: 'You’ve been invited to get free lifetime access.',
|
||
genericDiscount: 'A friend has shared a 30% discount on lifetime access.',
|
||
exploreEvery: 'Find postcodes that fit your life',
|
||
propertyInfo: 'Prices, commute, schools, crime, noise, broadband, EPC and more',
|
||
invalidInvite: 'Invalid invite',
|
||
inviteAlreadyUsed: 'Invite already used',
|
||
inviteAlreadyUsedDesc: 'This invite link has already been redeemed.',
|
||
invalidInviteLink: 'Invalid invite link',
|
||
invalidInviteLinkDesc: 'This invite link is invalid or has expired.',
|
||
licenseActivated: 'License activated!',
|
||
fullAccessGranted: 'You now have full access to Perfect Postcode.',
|
||
activating: 'Activating...',
|
||
activateLicense: 'Activate license',
|
||
claimDiscount: 'Claim discount',
|
||
registerToClaim: 'Register to claim',
|
||
youAlreadyHaveLicense: 'You already have a license',
|
||
accountHasFullAccess: 'Your account already has full access.',
|
||
failedToValidate: 'Failed to validate invite link',
|
||
},
|
||
|
||
// ── Map Page ───────────────────────────────────────
|
||
mapPage: {
|
||
unsavedProperty: 'Unsave',
|
||
savedProperty: 'Saved',
|
||
},
|
||
|
||
// ── Format / Time ──────────────────────────────────
|
||
format: {
|
||
justNow: 'just now',
|
||
minutesAgo: '{{count}}m ago',
|
||
hoursAgo: '{{count}}h ago',
|
||
daysAgo: '{{count}}d ago',
|
||
nFilters: '{{count}} filters',
|
||
noFilters: 'No filters',
|
||
poiCategory: '{{count}} POI category',
|
||
poiCategories: '{{count}} POI categories',
|
||
travelDestination: '{{count}} travel time destination',
|
||
travelDestinations: '{{count}} travel time destinations',
|
||
propertiesMatch: '{{count}} properties match',
|
||
setFilters: 'Set {{count}} filter(s): {{list}}',
|
||
noFiltersSet: 'No filters set',
|
||
toDestination: '{{mode}} to {{label}} {{bounds}}',
|
||
lessThanMin: '< {{max}} min',
|
||
moreThanMin: '> {{min}} min',
|
||
},
|
||
|
||
// ── Tutorial ──────────────────────────────────────
|
||
tutorial: {
|
||
step1Title: 'Tell the map what matters',
|
||
step1Content:
|
||
'Set your budget, commute limit, school quality, crime threshold, noise tolerance, broadband needs, or whatever matters to you. Only matching areas stay lit. Use Colour to shade the map by any feature.',
|
||
step2Title: 'Or just describe it',
|
||
step2Content:
|
||
'Type what you want in plain English, like "quiet area near good schools under £400k", and we’ll set up the filters for you.',
|
||
step3Title: 'Explore what’s out there',
|
||
step3Content:
|
||
'Pan and zoom across England. Click any coloured area to see why it matches: crime, schools, prices, broadband, noise, and more.',
|
||
step4Title: 'Jump to a location',
|
||
step4Content: 'Search for any place or postcode to fly straight there.',
|
||
step5Title: 'Dig into the details',
|
||
step5Content:
|
||
'See area statistics, histograms, and individual property records: prices, floor area, energy ratings, and more.',
|
||
step6Title: 'What’s nearby?',
|
||
step6Content:
|
||
'Toggle schools, shops, stations, parks, and restaurants on the map to see what’s within reach.',
|
||
},
|
||
|
||
// ── Server-derived values ──────────────────────────
|
||
// Keyed by the English server value. ts() looks up translations at display time.
|
||
// The English keys MUST match exactly what the API returns.
|
||
server: {
|
||
// ─ Feature group names ─
|
||
Properties: 'Properties',
|
||
'Property prices': 'Property prices',
|
||
Transport: 'Transport',
|
||
Education: 'Education',
|
||
'Area development': 'Area development',
|
||
Crime: 'Crime',
|
||
Neighbours: 'Neighbours',
|
||
Amenities: 'Amenities',
|
||
Environment: 'Environment',
|
||
|
||
// ─ Feature names (Properties) ─
|
||
'Property type': 'Property type',
|
||
'Leasehold/Freehold': 'Leasehold/Freehold',
|
||
'Last known price': 'Last known price',
|
||
'Estimated price': 'Estimated price',
|
||
'Estimated current price': 'Estimated current price',
|
||
'Price per sqm': 'Price per sqm',
|
||
'Est. price per sqm': 'Est. price per sqm',
|
||
'Estimated monthly rent': 'Estimated monthly rent',
|
||
'Total floor area (sqm)': 'Total floor area (sqm)',
|
||
'Number of bedrooms & living rooms': 'Number of bedrooms & living rooms',
|
||
'Construction year': 'Construction year',
|
||
'Date of last transaction': 'Date of last transaction',
|
||
'Former council house': 'Former council house',
|
||
'Current energy rating': 'Current energy rating',
|
||
'Potential energy rating': 'Potential energy rating',
|
||
'Interior height (m)': 'Interior height (m)',
|
||
'Street tree density percentile': 'Street tree density percentile',
|
||
|
||
// ─ Feature names (Transport) ─
|
||
'Travel time to nearest train or tube station (min)':
|
||
'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',
|
||
'Education, Skills and Training Score': 'Education, Skills and Training Score',
|
||
|
||
// ─ Feature names (Area development) ─
|
||
'Income Score': 'Income Score',
|
||
'Employment Score': 'Employment Score',
|
||
'Health Deprivation and Disability Score': 'Health Deprivation and Disability Score',
|
||
'Housing Conditions Score': 'Housing Conditions Score',
|
||
'Air Quality and Road Safety Score': 'Air Quality and Road Safety Score',
|
||
|
||
// ─ Feature names (Crime) ─
|
||
'Serious crime per 1k residents (avg/yr)': 'Serious crime per 1k residents (avg/yr)',
|
||
'Minor crime per 1k residents (avg/yr)': 'Minor crime per 1k residents (avg/yr)',
|
||
'Serious crime (avg/yr)': 'Serious crime (avg/yr)',
|
||
'Minor crime (avg/yr)': 'Minor crime (avg/yr)',
|
||
'Violence and sexual offences (avg/yr)': 'Violence and sexual offences (avg/yr)',
|
||
'Burglary (avg/yr)': 'Burglary (avg/yr)',
|
||
'Robbery (avg/yr)': 'Robbery (avg/yr)',
|
||
'Vehicle crime (avg/yr)': 'Vehicle crime (avg/yr)',
|
||
'Anti-social behaviour (avg/yr)': 'Anti-social behaviour (avg/yr)',
|
||
'Criminal damage and arson (avg/yr)': 'Criminal damage and arson (avg/yr)',
|
||
'Other theft (avg/yr)': 'Other theft (avg/yr)',
|
||
'Theft from the person (avg/yr)': 'Theft from the person (avg/yr)',
|
||
'Shoplifting (avg/yr)': 'Shoplifting (avg/yr)',
|
||
'Bicycle theft (avg/yr)': 'Bicycle theft (avg/yr)',
|
||
'Drugs (avg/yr)': 'Drugs (avg/yr)',
|
||
'Possession of weapons (avg/yr)': 'Possession of weapons (avg/yr)',
|
||
'Public order (avg/yr)': 'Public order (avg/yr)',
|
||
'Other crime (avg/yr)': 'Other crime (avg/yr)',
|
||
|
||
// ─ Feature names (Neighbours) ─
|
||
'Median age': 'Median age',
|
||
'% White': '% White',
|
||
'% South Asian': '% South Asian',
|
||
'% Black': '% Black',
|
||
'% East Asian': '% East Asian',
|
||
'% Mixed': '% Mixed',
|
||
'% Other': '% Other',
|
||
|
||
'Voter turnout (%)': 'Voter turnout (%)',
|
||
'% Labour': '% Labour',
|
||
'% Conservative': '% Conservative',
|
||
'% Liberal Democrat': '% Liberal Democrat',
|
||
'% Reform UK': '% Reform UK',
|
||
'% Green': '% Green',
|
||
'% Other parties': '% Other parties',
|
||
|
||
// ─ Feature names (Amenities) ─
|
||
'Distance to nearest park (km)': 'Distance to nearest park (km)',
|
||
'Noise (dB)': 'Noise (dB)',
|
||
'Max available download speed (Mbps)': 'Max available download speed (Mbps)',
|
||
|
||
// ─ Client-side aggregate filter names ─
|
||
Schools: 'Schools',
|
||
'Specific crimes': 'Specific crimes',
|
||
Ethnicities: 'Ethnicities',
|
||
'Amenity distance': 'Amenity distance',
|
||
'Closest transport option': 'Closest transport option',
|
||
'Amenities within 2km': 'Amenities within 2km',
|
||
'Amenities within 5km': 'Amenities within 5km',
|
||
|
||
// ─ Enum values ─
|
||
Detached: 'Detached',
|
||
'Semi-Detached': 'Semi-Detached',
|
||
Terraced: 'Terraced',
|
||
'Flats/Maisonettes': 'Flats/Maisonettes',
|
||
Other: 'Other',
|
||
Freehold: 'Freehold',
|
||
Leasehold: 'Leasehold',
|
||
Yes: 'Yes',
|
||
No: 'No',
|
||
|
||
// ─ Stacked chart labels ─
|
||
'Serious crime': 'Serious crime',
|
||
'Minor crime': 'Minor crime',
|
||
'Ethnic composition': 'Ethnic composition',
|
||
'Political vote share': 'Political vote share',
|
||
'Anti-social': 'Anti-social',
|
||
Vehicle: 'Vehicle',
|
||
Burglary: 'Burglary',
|
||
|
||
// ─ POI group names ─
|
||
'Public Transport': 'Public Transport',
|
||
Leisure: 'Leisure',
|
||
'Food & Drink': 'Food & Drink',
|
||
'Green Space': 'Green Space',
|
||
Health: 'Health',
|
||
'Emergency Services': 'Emergency Services',
|
||
Groceries: 'Groceries',
|
||
'Local Businesses': 'Local Businesses',
|
||
Culture: 'Culture',
|
||
Services: 'Services',
|
||
Practical: 'Practical',
|
||
Shops: 'Shops',
|
||
|
||
// ─ POI categories ─
|
||
Airport: 'Airport',
|
||
Ferry: 'Ferry',
|
||
'Rail station': 'Rail station',
|
||
'Bus stop': 'Bus stop',
|
||
'Bus station': 'Bus station',
|
||
'Taxi rank': 'Taxi rank',
|
||
'Tube station': 'Tube station',
|
||
Café: 'Café',
|
||
Restaurant: 'Restaurant',
|
||
Pub: 'Pub',
|
||
Bar: 'Bar',
|
||
'Fast Food': 'Fast Food',
|
||
Nightclub: 'Nightclub',
|
||
Cinema: 'Cinema',
|
||
Theatre: 'Theatre',
|
||
'Live Music & Events': 'Live Music & Events',
|
||
Park: 'Park',
|
||
Playground: 'Playground',
|
||
'Sports Centre': 'Sports Centre',
|
||
Entertainment: 'Entertainment',
|
||
Supermarket: 'Supermarket',
|
||
'Convenience Store': 'Convenience Store',
|
||
Bakery: 'Bakery',
|
||
'Butcher & Fishmonger': 'Butcher & Fishmonger',
|
||
Greengrocer: 'Greengrocer',
|
||
'Off-Licence': 'Off-Licence',
|
||
'Deli & Specialty': 'Deli & Specialty',
|
||
'Fashion & Clothing': 'Fashion & Clothing',
|
||
Electronics: 'Electronics',
|
||
'Charity Shop': 'Charity Shop',
|
||
'DIY & Hardware': 'DIY & Hardware',
|
||
'Home & Garden': 'Home & Garden',
|
||
Bookshop: 'Bookshop',
|
||
'Pet Shop': 'Pet Shop',
|
||
'Sports & Outdoor': 'Sports & Outdoor',
|
||
Newsagent: 'Newsagent',
|
||
'Department Store': 'Department Store',
|
||
'Gift & Hobby': 'Gift & Hobby',
|
||
'Specialist Shop': 'Specialist Shop',
|
||
'Hairdresser & Beauty': 'Hairdresser & Beauty',
|
||
'Gym & Fitness': 'Gym & Fitness',
|
||
'Dry Cleaner & Laundry': 'Dry Cleaner & Laundry',
|
||
'Car Services': 'Car Services',
|
||
'Post Office': 'Post Office',
|
||
'Vet & Pet Care': 'Vet & Pet Care',
|
||
Bank: 'Bank',
|
||
'Travel Agent': 'Travel Agent',
|
||
Police: 'Police',
|
||
'Fire Station': 'Fire Station',
|
||
'Ambulance Station': 'Ambulance Station',
|
||
'GP Surgery': 'GP Surgery',
|
||
Dentist: 'Dentist',
|
||
Pharmacy: 'Pharmacy',
|
||
'Hospital & Clinic': 'Hospital & Clinic',
|
||
Optician: 'Optician',
|
||
Physiotherapy: 'Physiotherapy',
|
||
'Counselling & Therapy': 'Counselling & Therapy',
|
||
'Care Home': 'Care Home',
|
||
'Medical & Mobility': 'Medical & Mobility',
|
||
Museum: 'Museum',
|
||
Gallery: 'Gallery',
|
||
Library: 'Library',
|
||
'Place of Worship': 'Place of Worship',
|
||
'Arts Centre': 'Arts Centre',
|
||
Zoo: 'Zoo',
|
||
'Tourist Attraction': 'Tourist Attraction',
|
||
School: 'School',
|
||
Hotel: 'Hotel',
|
||
'Local Business': 'Local Business',
|
||
Offices: 'Offices',
|
||
'EV Charging': 'EV Charging',
|
||
'Fuel Station': 'Fuel Station',
|
||
'Community Centre': 'Community Centre',
|
||
|
||
// ─ Suffixes (used in formatters) ─
|
||
'/mo': '/mo',
|
||
'/yr': '/yr',
|
||
' sqm': ' sqm',
|
||
' km': ' km',
|
||
' m': ' m',
|
||
' dB': ' dB',
|
||
' years': ' years',
|
||
' rooms': ' rooms',
|
||
},
|
||
} as const;
|
||
|
||
export default en;
|
||
|
||
/**
|
||
* Recursively maps a translation object’s leaf values to `string`,
|
||
* preserving the nested key structure. Used to type-check non-English
|
||
* locale files: they must have exactly the same keys as English,
|
||
* but with their own string values.
|
||
*
|
||
* Missing key -> TS error. Extra key -> TS error.
|
||
*/
|
||
export type DeepStringify<T> = {
|
||
[K in keyof T]: T[K] extends Record<string, unknown> ? DeepStringify<T[K]> : string;
|
||
};
|
||
|
||
export type Translations = DeepStringify<typeof en>;
|