Files
TREK/shared/src/i18n/en/oauth.ts
T
Maurice e63a7799fb fix(i18n): guard locale key parity and finish the OAuth consent page strings
Every non-en locale now exposes the exact same flat key set as en. Keys that
had drifted out of sync are backfilled with the English source value (tagged
en-fallback) so t() resolves a real string instead of relying on the silent
runtime fallback; no existing translation was touched and no key was removed.

Add a parity test that imports each aggregated locale bundle and asserts its
key set matches en, with a diagnostic listing of any missing/extra keys. This
complements the file-level check in shared/scripts by guarding the merged
export the app actually serves.

Finish internationalising OAuthAuthorizePage: the ~15 remaining hardcoded
English chrome strings now go through oauth.authorize.* keys (English source
in en, en-fallback placeholders elsewhere). Markup and behaviour are unchanged.
2026-05-31 16:08:08 +02:00

124 lines
6.1 KiB
TypeScript

import type { TranslationStrings } from '../types';
const oauth: TranslationStrings = {
'oauth.scope.group.trips': 'Trips',
'oauth.scope.group.places': 'Places',
'oauth.scope.group.atlas': 'Atlas',
'oauth.scope.group.packing': 'Packing',
'oauth.scope.group.todos': 'To-dos',
'oauth.scope.group.budget': 'Budget',
'oauth.scope.group.reservations': 'Reservations',
'oauth.scope.group.collab': 'Collaboration',
'oauth.scope.group.notifications': 'Notifications',
'oauth.scope.group.vacay': 'Vacation',
'oauth.scope.group.geo': 'Geo',
'oauth.scope.group.weather': 'Weather',
'oauth.scope.group.journey': 'Journey',
'oauth.scope.trips:read.label': 'View trips & itineraries',
'oauth.scope.trips:read.description':
'Read trips, days, day notes, and members',
'oauth.scope.trips:write.label': 'Edit trips & itineraries',
'oauth.scope.trips:write.description':
'Create and update trips, days, notes, and manage members',
'oauth.scope.trips:delete.label': 'Delete trips',
'oauth.scope.trips:delete.description':
'Permanently delete entire trips — this action is irreversible',
'oauth.scope.trips:share.label': 'Manage share links',
'oauth.scope.trips:share.description':
'Create, update, and revoke public share links for trips',
'oauth.scope.places:read.label': 'View places & map data',
'oauth.scope.places:read.description':
'Read places, day assignments, tags, and categories',
'oauth.scope.places:write.label': 'Manage places',
'oauth.scope.places:write.description':
'Create, update, and delete places, assignments, and tags',
'oauth.scope.atlas:read.label': 'View Atlas',
'oauth.scope.atlas:read.description':
'Read visited countries, regions, and bucket list',
'oauth.scope.atlas:write.label': 'Manage Atlas',
'oauth.scope.atlas:write.description':
'Mark countries and regions visited, manage bucket list',
'oauth.scope.packing:read.label': 'View packing lists',
'oauth.scope.packing:read.description':
'Read packing items, bags, and category assignees',
'oauth.scope.packing:write.label': 'Manage packing lists',
'oauth.scope.packing:write.description':
'Add, update, delete, toggle, and reorder packing items and bags',
'oauth.scope.todos:read.label': 'View to-do lists',
'oauth.scope.todos:read.description':
'Read trip to-do items and category assignees',
'oauth.scope.todos:write.label': 'Manage to-do lists',
'oauth.scope.todos:write.description':
'Create, update, toggle, delete, and reorder to-do items',
'oauth.scope.budget:read.label': 'View budget',
'oauth.scope.budget:read.description':
'Read budget items and expense breakdown',
'oauth.scope.budget:write.label': 'Manage budget',
'oauth.scope.budget:write.description':
'Create, update, and delete budget items',
'oauth.scope.reservations:read.label': 'View reservations',
'oauth.scope.reservations:read.description':
'Read reservations and accommodation details',
'oauth.scope.reservations:write.label': 'Manage reservations',
'oauth.scope.reservations:write.description':
'Create, update, delete, and reorder reservations',
'oauth.scope.collab:read.label': 'View collaboration',
'oauth.scope.collab:read.description':
'Read collab notes, polls, and messages',
'oauth.scope.collab:write.label': 'Manage collaboration',
'oauth.scope.collab:write.description':
'Create, update, and delete collab notes, polls, and messages',
'oauth.scope.notifications:read.label': 'View notifications',
'oauth.scope.notifications:read.description':
'Read in-app notifications and unread counts',
'oauth.scope.notifications:write.label': 'Manage notifications',
'oauth.scope.notifications:write.description':
'Mark notifications as read and respond to them',
'oauth.scope.vacay:read.label': 'View vacation plans',
'oauth.scope.vacay:read.description':
'Read vacation planning data, entries, and stats',
'oauth.scope.vacay:write.label': 'Manage vacation plans',
'oauth.scope.vacay:write.description':
'Create and manage vacation entries, holidays, and team plans',
'oauth.scope.geo:read.label': 'Maps & geocoding',
'oauth.scope.geo:read.description':
'Search locations, resolve map URLs, and reverse geocode coordinates',
'oauth.scope.weather:read.label': 'Weather forecasts',
'oauth.scope.weather:read.description':
'Fetch weather forecasts for trip locations and dates',
'oauth.scope.journey:read.label': 'View journeys',
'oauth.scope.journey:read.description':
'Read journeys, entries, and contributor list',
'oauth.scope.journey:write.label': 'Manage journeys',
'oauth.scope.journey:write.description':
'Create, update, and delete journeys and their entries',
'oauth.scope.journey:share.label': 'Manage journey links',
'oauth.scope.journey:share.description':
'Create, update, and revoke public share links for journeys',
'oauth.authorize.authorizing': 'Authorizing…',
'oauth.authorize.loading': 'Loading…',
'oauth.authorize.errorTitle': 'Authorization Error',
'oauth.authorize.loginTitle': 'Sign in to continue',
'oauth.authorize.loginDescription':
'{client} wants access to your TREK account. Please sign in first.',
'oauth.authorize.loginButton': 'Sign in to TREK',
'oauth.authorize.requestLabel': 'Authorization Request',
'oauth.authorize.requestDescription':
'This application is requesting access to your TREK account.',
'oauth.authorize.trustNote':
'Only grant access to applications you trust. Your data stays on your server.',
'oauth.authorize.selectScope': 'Select at least one scope',
'oauth.authorize.approveOneScope': 'Approve ({count} scope)',
'oauth.authorize.approveManyScopes': 'Approve ({count} scopes)',
'oauth.authorize.approveAccess': 'Approve Access',
'oauth.authorize.deny': 'Deny',
'oauth.authorize.choosePermissions': 'Choose which permissions to grant',
'oauth.authorize.permissionsRequested': 'Permissions requested',
'oauth.authorize.alwaysIncluded': 'Always included',
'oauth.authorize.alwaysTool.listTrips':
'List your trips so the AI can discover trip IDs',
'oauth.authorize.alwaysTool.getTripSummary':
'Read a trip overview needed to use any other tool',
};
export default oauth;