Initial commit
This commit is contained in:
390
landing/src/app/core/copy.ts
Normal file
390
landing/src/app/core/copy.ts
Normal file
@@ -0,0 +1,390 @@
|
||||
/**
|
||||
* The chrome's own words. Content arrives from the API already resolved to
|
||||
* one language; headings, labels and button text are ours, so they live here
|
||||
* and are picked with the same locale.
|
||||
*/
|
||||
import type { Locale } from './api';
|
||||
|
||||
export interface Copy {
|
||||
nav: {
|
||||
services: string;
|
||||
projects: string;
|
||||
team: string;
|
||||
contribute: string;
|
||||
contact: string;
|
||||
darkMode: string;
|
||||
lightMode: string;
|
||||
};
|
||||
hero: {
|
||||
eyebrow: string;
|
||||
title: string;
|
||||
highlight: string;
|
||||
lead: string;
|
||||
primaryCta: string;
|
||||
secondaryCta: string;
|
||||
};
|
||||
stats: Record<
|
||||
| 'projects'
|
||||
| 'active_projects'
|
||||
| 'members'
|
||||
| 'open_calls'
|
||||
| 'services'
|
||||
| 'clients'
|
||||
| 'good_first_issues'
|
||||
| 'stars',
|
||||
string
|
||||
>;
|
||||
sections: {
|
||||
services: { title: string; lead: string };
|
||||
projects: { title: string; lead: string };
|
||||
clients: { title: string; lead: string };
|
||||
testimonials: { title: string; lead: string };
|
||||
radar: { title: string; lead: string };
|
||||
team: { title: string; lead: string };
|
||||
calls: { title: string; lead: string };
|
||||
issues: { title: string; lead: string };
|
||||
talks: { title: string; lead: string };
|
||||
contact: { title: string; lead: string };
|
||||
};
|
||||
projectStatus: Record<
|
||||
'idea' | 'active' | 'paused' | 'completed' | 'archived',
|
||||
string
|
||||
>;
|
||||
rings: Record<'adopt' | 'trial' | 'assess' | 'hold', string>;
|
||||
labels: {
|
||||
demo: string;
|
||||
repository: string;
|
||||
stars: string;
|
||||
needsHelp: string;
|
||||
founder: string;
|
||||
alumni: string;
|
||||
hoursPerWeek: string;
|
||||
weeks: string;
|
||||
seniority: string;
|
||||
closes: string;
|
||||
apply: string;
|
||||
watchTalk: string;
|
||||
slides: string;
|
||||
openIssue: string;
|
||||
comments: string;
|
||||
empty: string;
|
||||
seeMore: string;
|
||||
};
|
||||
form: {
|
||||
kind: string;
|
||||
kindContribute: string;
|
||||
kindRequest: string;
|
||||
name: string;
|
||||
email: string;
|
||||
organisation: string;
|
||||
hours: string;
|
||||
message: string;
|
||||
messageHint: string;
|
||||
consent: string;
|
||||
submit: string;
|
||||
sending: string;
|
||||
success: string;
|
||||
duplicate: string;
|
||||
error: string;
|
||||
closed: string;
|
||||
};
|
||||
footer: { built: string; api: string; rights: string };
|
||||
maintenance: { title: string; back: string; until: string };
|
||||
}
|
||||
|
||||
const es: Copy = {
|
||||
nav: {
|
||||
services: 'Servicios',
|
||||
projects: 'Proyectos',
|
||||
team: 'Equipo',
|
||||
contribute: 'Colabora',
|
||||
contact: 'Contacto',
|
||||
darkMode: 'Modo oscuro',
|
||||
lightMode: 'Modo claro',
|
||||
},
|
||||
hero: {
|
||||
eyebrow: 'Colectivo de desarrollo',
|
||||
title: 'Construimos software',
|
||||
highlight: 'en abierto',
|
||||
lead: 'Proyectos reales, código público y gente que enseña lo que aprende. Si tienes una idea que empujar o unas horas que aportar, este es el sitio.',
|
||||
primaryCta: 'Ver proyectos',
|
||||
secondaryCta: 'Hablemos',
|
||||
},
|
||||
stats: {
|
||||
projects: 'Proyectos',
|
||||
active_projects: 'En marcha',
|
||||
members: 'Personas',
|
||||
open_calls: 'Vacantes abiertas',
|
||||
services: 'Servicios',
|
||||
clients: 'Clientes',
|
||||
good_first_issues: 'Issues para empezar',
|
||||
stars: 'Estrellas',
|
||||
},
|
||||
sections: {
|
||||
services: { title: 'Qué hacemos', lead: 'Lo que alguien nos pediría.' },
|
||||
projects: { title: 'Proyectos', lead: 'Lo que ya hemos construido.' },
|
||||
clients: { title: 'Con quién trabajamos', lead: 'Organizaciones detrás del trabajo.' },
|
||||
testimonials: { title: 'Lo que dicen', lead: 'Palabras de quien nos contrató.' },
|
||||
radar: { title: 'Radar técnico', lead: 'Qué adoptamos, qué probamos y qué dejamos pasar.' },
|
||||
team: { title: 'Quiénes somos', lead: 'Las personas detrás de todo esto.' },
|
||||
calls: { title: 'Buscamos gente', lead: 'Vacantes abiertas ahora mismo.' },
|
||||
issues: { title: 'Primeras contribuciones', lead: 'Issues pensadas para empezar hoy.' },
|
||||
talks: { title: 'Charlas', lead: 'Lo que hemos contado fuera.' },
|
||||
contact: { title: 'Escríbenos', lead: 'Cuéntanos qué necesitas o qué te apetece hacer.' },
|
||||
},
|
||||
projectStatus: {
|
||||
idea: 'Idea',
|
||||
active: 'Activo',
|
||||
paused: 'En pausa',
|
||||
completed: 'Terminado',
|
||||
archived: 'Archivado',
|
||||
},
|
||||
rings: { adopt: 'Adoptar', trial: 'Probar', assess: 'Evaluar', hold: 'Esperar' },
|
||||
labels: {
|
||||
demo: 'Demo',
|
||||
repository: 'Repositorio',
|
||||
stars: 'estrellas',
|
||||
needsHelp: 'Busca ayuda',
|
||||
founder: 'Fundador/a',
|
||||
alumni: 'Alumni',
|
||||
hoursPerWeek: 'h/semana',
|
||||
weeks: 'semanas',
|
||||
seniority: 'Nivel',
|
||||
closes: 'Cierra el',
|
||||
apply: 'Me interesa',
|
||||
watchTalk: 'Ver charla',
|
||||
slides: 'Diapositivas',
|
||||
openIssue: 'Abrir issue',
|
||||
comments: 'comentarios',
|
||||
empty: 'Todavía no hay nada publicado aquí.',
|
||||
seeMore: 'Ver más',
|
||||
},
|
||||
form: {
|
||||
kind: 'Escribes para…',
|
||||
kindContribute: 'Aportar tiempo',
|
||||
kindRequest: 'Pedir ayuda para un proyecto',
|
||||
name: 'Nombre',
|
||||
email: 'Correo',
|
||||
organisation: 'Organización',
|
||||
hours: 'Horas por semana',
|
||||
message: 'Mensaje',
|
||||
messageHint: 'Mínimo 20 caracteres.',
|
||||
consent: 'Acepto que guardéis mis datos para responderme.',
|
||||
submit: 'Enviar',
|
||||
sending: 'Enviando…',
|
||||
success: 'Mensaje recibido. Te contestamos en cuanto podamos.',
|
||||
duplicate: 'Ya teníamos este mensaje. No hace falta reenviarlo.',
|
||||
error: 'No hemos podido enviarlo. Inténtalo en un rato.',
|
||||
closed: 'El formulario está cerrado temporalmente.',
|
||||
},
|
||||
footer: {
|
||||
built: 'Hecho con Angular, Analog y Nx.',
|
||||
api: 'Contenido servido por la API pública de Pireon.',
|
||||
rights: 'Todos los derechos reservados.',
|
||||
},
|
||||
maintenance: {
|
||||
title: 'Estamos de mantenimiento',
|
||||
back: 'Volvemos en un rato.',
|
||||
until: 'Volvemos el',
|
||||
},
|
||||
};
|
||||
|
||||
const en: Copy = {
|
||||
nav: {
|
||||
services: 'Services',
|
||||
projects: 'Projects',
|
||||
team: 'Team',
|
||||
contribute: 'Contribute',
|
||||
contact: 'Contact',
|
||||
darkMode: 'Dark mode',
|
||||
lightMode: 'Light mode',
|
||||
},
|
||||
hero: {
|
||||
eyebrow: 'A development collective',
|
||||
title: 'We build software',
|
||||
highlight: 'in the open',
|
||||
lead: 'Real projects, public code and people who teach what they learn. If you have an idea to push or a few hours to give, you are in the right place.',
|
||||
primaryCta: 'See projects',
|
||||
secondaryCta: "Let's talk",
|
||||
},
|
||||
stats: {
|
||||
projects: 'Projects',
|
||||
active_projects: 'In progress',
|
||||
members: 'People',
|
||||
open_calls: 'Open calls',
|
||||
services: 'Services',
|
||||
clients: 'Clients',
|
||||
good_first_issues: 'Good first issues',
|
||||
stars: 'Stars',
|
||||
},
|
||||
sections: {
|
||||
services: { title: 'What we do', lead: 'What somebody would be asking for.' },
|
||||
projects: { title: 'Projects', lead: 'What we have already built.' },
|
||||
clients: { title: 'Who we work with', lead: 'The organisations behind the work.' },
|
||||
testimonials: { title: 'What they said', lead: 'Words from the people who hired us.' },
|
||||
radar: { title: 'Tech radar', lead: 'What we adopt, trial, assess and hold.' },
|
||||
team: { title: 'Who we are', lead: 'The people behind all of this.' },
|
||||
calls: { title: 'We are looking for people', lead: 'Calls open right now.' },
|
||||
issues: { title: 'First contributions', lead: 'Issues meant to be picked up today.' },
|
||||
talks: { title: 'Talks', lead: 'What we have told elsewhere.' },
|
||||
contact: { title: 'Write to us', lead: 'Tell us what you need, or what you feel like building.' },
|
||||
},
|
||||
projectStatus: {
|
||||
idea: 'Idea',
|
||||
active: 'Active',
|
||||
paused: 'Paused',
|
||||
completed: 'Completed',
|
||||
archived: 'Archived',
|
||||
},
|
||||
rings: { adopt: 'Adopt', trial: 'Trial', assess: 'Assess', hold: 'Hold' },
|
||||
labels: {
|
||||
demo: 'Demo',
|
||||
repository: 'Repository',
|
||||
stars: 'stars',
|
||||
needsHelp: 'Needs help',
|
||||
founder: 'Founder',
|
||||
alumni: 'Alumni',
|
||||
hoursPerWeek: 'h/week',
|
||||
weeks: 'weeks',
|
||||
seniority: 'Level',
|
||||
closes: 'Closes on',
|
||||
apply: "I'm interested",
|
||||
watchTalk: 'Watch talk',
|
||||
slides: 'Slides',
|
||||
openIssue: 'Open issue',
|
||||
comments: 'comments',
|
||||
empty: 'Nothing published here yet.',
|
||||
seeMore: 'See more',
|
||||
},
|
||||
form: {
|
||||
kind: 'You are writing to…',
|
||||
kindContribute: 'Give some time',
|
||||
kindRequest: 'Ask for help with a project',
|
||||
name: 'Name',
|
||||
email: 'E-mail',
|
||||
organisation: 'Organisation',
|
||||
hours: 'Hours per week',
|
||||
message: 'Message',
|
||||
messageHint: 'At least 20 characters.',
|
||||
consent: 'I agree to have my details stored so you can reply.',
|
||||
submit: 'Send',
|
||||
sending: 'Sending…',
|
||||
success: 'Message received. We will get back to you as soon as we can.',
|
||||
duplicate: 'We already had this message. No need to send it again.',
|
||||
error: 'We could not send it. Please try again in a while.',
|
||||
closed: 'The form is temporarily closed.',
|
||||
},
|
||||
footer: {
|
||||
built: 'Built with Angular, Analog and Nx.',
|
||||
api: 'Content served by the Pireon public API.',
|
||||
rights: 'All rights reserved.',
|
||||
},
|
||||
maintenance: {
|
||||
title: 'We are under maintenance',
|
||||
back: 'Back in a while.',
|
||||
until: 'Back on',
|
||||
},
|
||||
};
|
||||
|
||||
const ca: Copy = {
|
||||
nav: {
|
||||
services: 'Serveis',
|
||||
projects: 'Projectes',
|
||||
team: 'Equip',
|
||||
contribute: 'Col·labora',
|
||||
contact: 'Contacte',
|
||||
darkMode: 'Mode fosc',
|
||||
lightMode: 'Mode clar',
|
||||
},
|
||||
hero: {
|
||||
eyebrow: 'Col·lectiu de desenvolupament',
|
||||
title: 'Construïm programari',
|
||||
highlight: 'en obert',
|
||||
lead: 'Projectes reals, codi públic i gent que ensenya el que aprèn. Si tens una idea per empènyer o unes hores per aportar, aquest és el lloc.',
|
||||
primaryCta: 'Veure projectes',
|
||||
secondaryCta: 'Parlem-ne',
|
||||
},
|
||||
stats: {
|
||||
projects: 'Projectes',
|
||||
active_projects: 'En marxa',
|
||||
members: 'Persones',
|
||||
open_calls: 'Vacants obertes',
|
||||
services: 'Serveis',
|
||||
clients: 'Clients',
|
||||
good_first_issues: 'Issues per començar',
|
||||
stars: 'Estrelles',
|
||||
},
|
||||
sections: {
|
||||
services: { title: 'Què fem', lead: 'El que algú ens demanaria.' },
|
||||
projects: { title: 'Projectes', lead: 'El que ja hem construït.' },
|
||||
clients: { title: 'Amb qui treballem', lead: 'Organitzacions darrere de la feina.' },
|
||||
testimonials: { title: 'Què en diuen', lead: 'Paraules de qui ens ha contractat.' },
|
||||
radar: { title: 'Radar tècnic', lead: 'Què adoptem, què provem i què deixem passar.' },
|
||||
team: { title: 'Qui som', lead: 'Les persones darrere de tot això.' },
|
||||
calls: { title: 'Busquem gent', lead: 'Vacants obertes ara mateix.' },
|
||||
issues: { title: 'Primeres contribucions', lead: 'Issues pensades per començar avui.' },
|
||||
talks: { title: 'Xerrades', lead: 'El que hem explicat a fora.' },
|
||||
contact: { title: 'Escriu-nos', lead: 'Explica què necessites o què et ve de gust fer.' },
|
||||
},
|
||||
projectStatus: {
|
||||
idea: 'Idea',
|
||||
active: 'Actiu',
|
||||
paused: 'En pausa',
|
||||
completed: 'Acabat',
|
||||
archived: 'Arxivat',
|
||||
},
|
||||
rings: { adopt: 'Adoptar', trial: 'Provar', assess: 'Avaluar', hold: 'Esperar' },
|
||||
labels: {
|
||||
demo: 'Demo',
|
||||
repository: 'Repositori',
|
||||
stars: 'estrelles',
|
||||
needsHelp: 'Busca ajuda',
|
||||
founder: 'Fundador/a',
|
||||
alumni: 'Alumni',
|
||||
hoursPerWeek: 'h/setmana',
|
||||
weeks: 'setmanes',
|
||||
seniority: 'Nivell',
|
||||
closes: 'Tanca el',
|
||||
apply: "M'interessa",
|
||||
watchTalk: 'Veure xerrada',
|
||||
slides: 'Diapositives',
|
||||
openIssue: 'Obrir issue',
|
||||
comments: 'comentaris',
|
||||
empty: 'Encara no hi ha res publicat aquí.',
|
||||
seeMore: 'Veure més',
|
||||
},
|
||||
form: {
|
||||
kind: 'Escrius per…',
|
||||
kindContribute: 'Aportar temps',
|
||||
kindRequest: 'Demanar ajuda per a un projecte',
|
||||
name: 'Nom',
|
||||
email: 'Correu',
|
||||
organisation: 'Organització',
|
||||
hours: 'Hores per setmana',
|
||||
message: 'Missatge',
|
||||
messageHint: 'Mínim 20 caràcters.',
|
||||
consent: 'Accepto que deseu les meves dades per respondre’m.',
|
||||
submit: 'Enviar',
|
||||
sending: 'Enviant…',
|
||||
success: 'Missatge rebut. Et contestem tan aviat com puguem.',
|
||||
duplicate: 'Ja teníem aquest missatge. No cal reenviar-lo.',
|
||||
error: 'No hem pogut enviar-lo. Torna-ho a provar d’aquí una estona.',
|
||||
closed: 'El formulari està tancat temporalment.',
|
||||
},
|
||||
footer: {
|
||||
built: 'Fet amb Angular, Analog i Nx.',
|
||||
api: 'Contingut servit per l’API pública de Pireon.',
|
||||
rights: 'Tots els drets reservats.',
|
||||
},
|
||||
maintenance: {
|
||||
title: 'Estem de manteniment',
|
||||
back: 'Tornem d’aquí una estona.',
|
||||
until: 'Tornem el',
|
||||
},
|
||||
};
|
||||
|
||||
const dictionaries: Record<Locale, Copy> = { es, en, ca };
|
||||
|
||||
export function copyFor(locale: Locale): Copy {
|
||||
return dictionaries[locale] ?? dictionaries.es;
|
||||
}
|
||||
Reference in New Issue
Block a user