Skip to content

Commit 71f60b0

Browse files
authored
[Closes #46, Closes #47, Closes #48] Updated English text, new/updated translations, header layout fixes (#49)
* Updated text and translations * Prevent header title wrapping * Truncate subtitle as needed, add Turkish * Add Portuguese
1 parent 44b25d2 commit 71f60b0

12 files changed

Lines changed: 240 additions & 52 deletions

File tree

client/src/Disclaimer.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ function Disclaimer () {
1212
<Container>
1313
<Title order={1} mb='lg'>{t('disclaimer.title')}</Title>
1414
<Title order={2}>{t('disclaimer.subtitle')}</Title>
15-
<Text>{t('disclaimer.intro', 'Information presented on this website is collected, maintained, and provided for the convenience of the reader. While every effort is made to keep the information accurate, we do not certify the authenticity of information that originates from third parties.')}</Text>
15+
<Text>{t('disclaimer.intro')}</Text>
1616
<Title order={3} mt='md'>{t('disclaimer.liabilityTitle')}</Title>
1717
<Text>{t('disclaimer.liabilityText')}</Text>
1818
<Title order={3} mt='md'>{t('disclaimer.browserTitle')}</Title>

client/src/Header.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ function Header ({ opened, close, toggle }) {
4242

4343
return (
4444
<Container h='100%' py='0'>
45-
<Group h='100%' align='center' justify='space-between'>
45+
<Group h='100%' align='center' justify='space-between' wrap='nowrap'>
4646
<Link className={styles.home} to='/' onClick={close}>
47-
<Title className={styles.home__title}>{t('header.title')}</Title>
47+
<Title className={styles.home__title} textWrap='nowrap'>{t('header.title')}</Title>
4848
<Text className={styles.home__subtitle}>{t('header.subtitle')}</Text>
4949
</Link>
5050
<Group visibleFrom='sm' gap='xl'>
@@ -78,7 +78,7 @@ function Header ({ opened, close, toggle }) {
7878
</Group>
7979
<Menu withinPortal>
8080
<Menu.Target>
81-
<Text fz='sm' fw='600' style={{ display: 'inline-flex', alignItems: 'center', gap: 2, cursor: 'pointer' }}>
81+
<Text fz='sm' fw='600' style={{ display: 'inline-flex', alignItems: 'center', gap: 2, cursor: 'pointer', whiteSpace: 'nowrap' }}>
8282
{t(`lang.${i18n.resolvedLanguage || 'en'}`)}
8383
<IconChevronDown size={24} />
8484
</Text>

client/src/Header.module.css

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
.home {
22
color: black;
3+
flex-shrink: 1;
4+
min-width: 0;
35
&:hover {
46
text-decoration: none;
57
}
@@ -12,11 +14,16 @@
1214
font-size: 1.125rem;
1315
font-weight: 600;
1416
line-height: 1.5;
17+
overflow: hidden;
18+
text-overflow: ellipsis;
1519
}
1620

1721
.home__subtitle {
1822
color: var(--mantine-color-text-tertiary);
1923
font-size: 0.75rem;
2024
font-weight: 600;
21-
line-height: 1;
25+
line-height: 1;
26+
overflow: hidden;
27+
text-overflow: ellipsis;
28+
white-space: nowrap;
2229
}

client/src/Home.jsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ function Home () {
2121
</Head>
2222
<Container>
2323
<Anchor href='https://sf.gov/LVprogram' mb='lg' fw='600' display='block'>{t('home.permitProgramLink')}</Anchor>
24-
<Title order={1} mb='lg'>{t('home.heading')}</Title>
2524
<Card mb='md'>
2625
<form onSubmit={onSubmit}>
2726
<Stack>

client/src/i18n.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ i18n
88
.init({
99
lng: typeof window !== 'undefined' ? (window.localStorage.getItem('i18nextLng') || 'en') : 'en',
1010
fallbackLng: 'en',
11-
supportedLngs: ['en', 'es', 'zh-Hant', 'fil', 'vi-VN'],
11+
supportedLngs: ['en', 'es', 'zh-Hant', 'fil', 'vi-VN', 'tr', 'pt'],
1212
interpolation: {
1313
escapeValue: false,
1414
},

locales/en/translation.json

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"header": {
3-
"title": "Vehicle Permit Check",
3+
"title": "Large Vehicle Database Check",
44
"subtitle": "A pilot service by SF Civic Tech",
55
"menu": {
66
"admin": "Admin",
@@ -14,15 +14,14 @@
1414
"providedBy": "Provided by",
1515
"partnershipLine1": "in partnership with",
1616
"partnershipLine2": "the City and County of San Francisco",
17-
"permitProgramSite": "Permit program site",
17+
"permitProgramSite": "Large Vehicle Program Site",
1818
"privacyPolicy": "Privacy Policy",
1919
"disclaimer": "Disclaimer"
2020
},
2121
"home": {
2222
"metaTitle": "Home",
23-
"permitProgramLink": "To Permit Program Site →",
24-
"heading": "Is your vehicle in the permit system?",
25-
"instructions": "Enter your license plate number to see if you qualify for a permit.",
23+
"permitProgramLink": "To Large Vehicle Program Site →",
24+
"instructions": "Enter your license plate number to see if your vehicle qualifies for a Large Vehicle Refuge Permit.",
2625
"licensePlatePlaceholder": "e.g. 1ABC234",
2726
"checkVehicleButton": "Check Vehicle",
2827
"databaseNote": "This tool lets you check if your vehicle was recorded in the City’s Large Vehicle database as of May 31, 2025.",
@@ -33,14 +32,14 @@
3332
"search": {
3433
"metaTitle": "Search",
3534
"licensePlateLabel": "License plate:",
36-
"notFoundTitle": "We couldn’t find your vehicle in the system",
35+
"notFoundTitle": "We couldn’t find your vehicle in the database",
3736
"notFoundInstruction": "Please double-check the license plate number you entered.",
3837
"reenterButton": "Re-enter license plate",
3938
"appealCardText": "If the number is correct, you may still qualify — submit an appeal or attend a Community Event for help.",
4039
"submitAppeal": "Submit an Appeal",
4140
"findCommunityEvent": "Find a Community Event",
42-
"foundTitle": "Good news! Your vehicle is in the system",
43-
"foundInstruction": "You may qualify for a Large Vehicle Permit. Attend an upcoming Community Event to apply."
41+
"foundTitle": "Good news! Your vehicle is in the database",
42+
"foundInstruction": "You may qualify for a Large Vehicle Refuge Permit. Attend an upcoming Community Event to apply."
4443
},
4544
"privacy": {
4645
"metaTitle": "Privacy Policy",
@@ -69,6 +68,7 @@
6968
"metaTitle": "Disclaimer",
7069
"title": "Disclaimer",
7170
"subtitle": "Terms of use, liability and browser compatibility.",
71+
"intro": "Information presented on this website is collected, maintained, and provided for the convenience of the reader. While every effort is made to keep the information accurate, we do not certify the authenticity of information that originates from third parties.",
7272
"liabilityTitle": "Liability",
7373
"liabilityText": "Under no circumstances shall SF Civic Tech be liable for any actions taken or omissions made from reliance on any information contained herein from whatever source nor shall SF Civic Tech be liable for any other consequences from any such reliance.",
7474
"browserTitle": "Browser compatibility",
@@ -79,6 +79,8 @@
7979
"es": "Español",
8080
"zh-Hant": "繁體中文",
8181
"fil": "Filipino",
82-
"vi-VN": "Tiếng Việt"
82+
"vi-VN": "Tiếng Việt",
83+
"tr": "Türkçe",
84+
"pt": "Português"
8385
}
8486
}

locales/es/translation.json

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"header": {
3-
"title": "Verificación de Permiso de Vehículo",
3+
"title": "Verificación de la Base de Datos de Vehículos Grandes",
44
"subtitle": "Un servicio piloto de SF Civic Tech",
55
"menu": {
66
"admin": "Administración",
@@ -14,15 +14,14 @@
1414
"providedBy": "Proporcionado por",
1515
"partnershipLine1": "en colaboración con",
1616
"partnershipLine2": "la Ciudad y Condado de San Francisco",
17-
"permitProgramSite": "Sitio del programa de permisos",
17+
"permitProgramSite": "Sitio del Programa de Vehículos Grandes",
1818
"privacyPolicy": "Política de privacidad",
1919
"disclaimer": "Descargo de responsabilidad"
2020
},
2121
"home": {
2222
"metaTitle": "Inicio",
23-
"permitProgramLink": "Ir al sitio del Programa de Permisos →",
24-
"heading": "¿Su vehículo está en el sistema de permisos?",
25-
"instructions": "Ingrese su número de matrícula para ver si califica para un permiso.",
23+
"permitProgramLink": "Ir al Sitio del Programa de Vehículos Grandes →",
24+
"instructions": "Ingrese su número de matrícula para ver si su vehículo califica para un Permiso de Refugio para Vehículos Grandes.",
2625
"licensePlatePlaceholder": "p. ej., 1ABC234",
2726
"checkVehicleButton": "Verificar vehículo",
2827
"databaseNote": "Esta herramienta le permite verificar si su vehículo fue registrado en la base de datos de Vehículos Grandes de la Ciudad al 31 de mayo de 2025.",
@@ -33,14 +32,14 @@
3332
"search": {
3433
"metaTitle": "Búsqueda",
3534
"licensePlateLabel": "Matrícula:",
36-
"notFoundTitle": "No pudimos encontrar su vehículo en el sistema",
35+
"notFoundTitle": "No pudimos encontrar su vehículo en la base de datos",
3736
"notFoundInstruction": "Verifique el número de matrícula que ingresó.",
3837
"reenterButton": "Volver a ingresar la matrícula",
3938
"appealCardText": "Si el número es correcto, aún podría calificar — presente una apelación o asista a un Evento Comunitario para recibir ayuda.",
4039
"submitAppeal": "Presentar una apelación",
4140
"findCommunityEvent": "Buscar un Evento Comunitario",
42-
"foundTitle": "¡Buenas noticias! Su vehículo está en el sistema",
43-
"foundInstruction": "Podría calificar para un Permiso de Vehículo Grande. Asista a un próximo Evento Comunitario para aplicar."
41+
"foundTitle": "¡Buenas noticias! Su vehículo está en la base de datos",
42+
"foundInstruction": "Podría calificar para un Permiso de Refugio para Vehículos Grandes. Asista a un próximo Evento Comunitario para aplicar."
4443
},
4544
"privacy": {
4645
"metaTitle": "Política de privacidad",
@@ -69,6 +68,7 @@
6968
"metaTitle": "Descargo de responsabilidad",
7069
"title": "Descargo de responsabilidad",
7170
"subtitle": "Términos de uso, responsabilidad y compatibilidad del navegador.",
71+
"intro": "La información presentada en este sitio web se recopila, mantiene y proporciona para la conveniencia del lector. Aunque se hace todo lo posible por mantener la información precisa, no certificamos la autenticidad de la información que proviene de terceros.",
7272
"liabilityTitle": "Responsabilidad",
7373
"liabilityText": "Bajo ninguna circunstancia SF Civic Tech será responsable por cualquier acción u omisión derivada de la confianza en cualquier información aquí contenida, cualquiera que sea su fuente, ni SF Civic Tech será responsable por cualquier otra consecuencia derivada de dicha confianza.",
7474
"browserTitle": "Compatibilidad del navegador",
@@ -79,6 +79,8 @@
7979
"es": "Español",
8080
"zh-Hant": "繁體中文",
8181
"fil": "Filipino",
82-
"vi-VN": "Tiếng Việt"
82+
"vi-VN": "Tiếng Việt",
83+
"tr": "Türkçe",
84+
"pt": "Português"
8385
}
8486
}

locales/fil/translation.json

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"header": {
3-
"title": "Pagsuri ng Permit ng Sasakyan",
3+
"title": "Pagsusuri sa Database ng Malalaking Sasakyan",
44
"subtitle": "Isang pilotong serbisyo ng SF Civic Tech",
55
"menu": {
66
"admin": "Admin",
@@ -14,15 +14,14 @@
1414
"providedBy": "Ibinigay ng",
1515
"partnershipLine1": "sa pakikipagtulungan sa",
1616
"partnershipLine2": "Lungsod at County ng San Francisco",
17-
"permitProgramSite": "Site ng programa ng permit",
17+
"permitProgramSite": "Site ng Programa ng Malalaking Sasakyan",
1818
"privacyPolicy": "Patakaran sa Privacy",
1919
"disclaimer": "Paunawa"
2020
},
2121
"home": {
2222
"metaTitle": "Home",
23-
"permitProgramLink": "Pumunta sa Site ng Programa ng Permit →",
24-
"heading": "Nasa sistema ba ng permit ang iyong sasakyan?",
25-
"instructions": "Ilagay ang numero ng iyong plaka upang makita kung kwalipikado ka para sa permit.",
23+
"permitProgramLink": "Pumunta sa Site ng Programa ng Malalaking Sasakyan →",
24+
"instructions": "Ilagay ang numero ng iyong plaka upang makita kung kwalipikado ang iyong sasakyan para sa Permit sa Kanlungan para sa Malalaking Sasakyan.",
2625
"licensePlatePlaceholder": "hal. 1ABC234",
2726
"checkVehicleButton": "Suriin ang Sasakyan",
2827
"databaseNote": "Tinutulungan ka ng tool na ito na tingnan kung ang iyong sasakyan ay naitala sa Large Vehicle database ng Lungsod noong Mayo 31, 2025.",
@@ -33,14 +32,14 @@
3332
"search": {
3433
"metaTitle": "Paghahanap",
3534
"licensePlateLabel": "Plaka:",
36-
"notFoundTitle": "Hindi namin nahanap ang iyong sasakyan sa sistema",
35+
"notFoundTitle": "Hindi namin nahanap ang iyong sasakyan sa database",
3736
"notFoundInstruction": "Pakisuri muli ang numerong plaka na iyong inilagay.",
3837
"reenterButton": "Ilagay muli ang plaka",
3938
"appealCardText": "Kung tama ang numero, maaari ka pa ring kwalipikado — magsumite ng apela o dumalo sa Community Event para sa tulong.",
4039
"submitAppeal": "Magsumite ng Apela",
4140
"findCommunityEvent": "Maghanap ng Community Event",
42-
"foundTitle": "Magandang balita! Ang iyong sasakyan ay nasa sistema",
43-
"foundInstruction": "Maaaring kwalipikado ka para sa Large Vehicle Permit. Dumalo sa nalalapit na Community Event upang mag-apply."
41+
"foundTitle": "Magandang balita! Ang iyong sasakyan ay nasa database",
42+
"foundInstruction": "Maaaring kwalipikado ka para sa Permit sa Kanlungan para sa Malalaking Sasakyan. Dumalo sa nalalapit na Community Event upang mag-apply."
4443
},
4544
"privacy": {
4645
"metaTitle": "Patakaran sa Privacy",
@@ -69,6 +68,7 @@
6968
"metaTitle": "Paunawa",
7069
"title": "Paunawa",
7170
"subtitle": "Mga tuntunin ng paggamit, pananagutan, at pagiging tugma ng browser.",
71+
"intro": "Ang impormasyong ipinapakita sa website na ito ay kinokolekta, pinananatili, at ibinibigay para sa kaginhawaan ng mambabasa. Bagama't ginagawa ang lahat ng pagsisikap upang panatilihing tumpak ang impormasyon, hindi namin pinatutunayan ang pagiging tunay ng impormasyong nagmumula sa mga third party.",
7272
"liabilityTitle": "Pananagutan",
7373
"liabilityText": "Sa anumang pagkakataon, hindi mananagot ang SF Civic Tech para sa anumang aksyon o pagkukulang na bunga ng pag-asa sa anumang impormasyong nilalaman dito anuman ang pinagmulan, at hindi rin mananagot sa anumang kahihinatnan mula sa gayong pag-asa.",
7474
"browserTitle": "Pagiging tugma ng browser",
@@ -79,6 +79,8 @@
7979
"es": "Español",
8080
"zh-Hant": "繁體中文",
8181
"fil": "Filipino",
82-
"vi-VN": "Tiếng Việt"
82+
"vi-VN": "Tiếng Việt",
83+
"tr": "Türkçe",
84+
"pt": "Português"
8385
}
8486
}

locales/pt/translation.json

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
{
2+
"header": {
3+
"title": "Verificação da Base de Dados de Veículos de Grande Porte",
4+
"subtitle": "Um serviço piloto da SF Civic Tech",
5+
"menu": {
6+
"admin": "Administração",
7+
"invites": "Convites",
8+
"users": "Usuários"
9+
},
10+
"helloPrefix": "Olá",
11+
"logout": "Sair"
12+
},
13+
"footer": {
14+
"providedBy": "Fornecido por",
15+
"partnershipLine1": "em parceria com",
16+
"partnershipLine2": "a Cidade e Condado de São Francisco",
17+
"permitProgramSite": "Site do Programa de Veículos de Grande Porte",
18+
"privacyPolicy": "Política de Privacidade",
19+
"disclaimer": "Aviso Legal"
20+
},
21+
"home": {
22+
"metaTitle": "Início",
23+
"permitProgramLink": "Ir para o Site do Programa de Veículos de Grande Porte →",
24+
"instructions": "Insira o número da sua placa para ver se seu veículo se qualifica para uma Permissão de Refúgio para Veículos de Grande Porte.",
25+
"licensePlatePlaceholder": "ex.: 1ABC234",
26+
"checkVehicleButton": "Verificar veículo",
27+
"databaseNote": "Esta ferramenta permite verificar se seu veículo foi registrado no banco de dados de Veículos de Grande Porte da Cidade até 31 de maio de 2025.",
28+
"noPlateHeading": "Sem placa?",
29+
"noPlateDescription": "Se você não tem placa, ou não sabe o que inserir, participe de um Evento Comunitário para obter ajuda.",
30+
"findCommunityEvent": "Encontrar um Evento Comunitário"
31+
},
32+
"search": {
33+
"metaTitle": "Busca",
34+
"licensePlateLabel": "Placa:",
35+
"notFoundTitle": "Não encontramos seu veículo no banco de dados",
36+
"notFoundInstruction": "Verifique o número da placa que você digitou.",
37+
"reenterButton": "Digitar a placa novamente",
38+
"appealCardText": "Se o número estiver correto, você ainda pode se qualificar — envie um recurso ou participe de um Evento Comunitário para obter ajuda.",
39+
"submitAppeal": "Enviar Recurso",
40+
"findCommunityEvent": "Encontrar um Evento Comunitário",
41+
"foundTitle": "Boas notícias! Seu veículo está no banco de dados",
42+
"foundInstruction": "Você pode se qualificar para uma Permissão de Refúgio para Veículos de Grande Porte. Participe de um próximo Evento Comunitário para se inscrever."
43+
},
44+
"privacy": {
45+
"metaTitle": "Política de Privacidade",
46+
"title": "Política de Privacidade",
47+
"intro": "Descreve os tipos de informações que coletamos quando você visita este site e as medidas que tomamos para protegê-las.",
48+
"generalPolicy": "Política geral",
49+
"infoCollectionTitle": "Coleta de informações",
50+
"infoCollectionP1": "Não coletamos informações pessoais sobre você quando visita nosso site.",
51+
"infoCollectionP2": "Coletamos uma quantidade limitada de informações não pessoais que seu navegador fornece automaticamente sempre que você visita um site. Essas informações incluem o endereço de Internet do seu computador ou rede, a data, a hora e a página que você visitou em nosso site, seu navegador e sistema operacional, e a página de referência (a última página da web que você visitou antes de clicar em um link para nosso site).",
52+
"infoCollectionP3": "Usamos essas informações agregadas e anonimizadas de todos os visitantes para medir o desempenho do servidor e melhorar o conteúdo do site.",
53+
"infoYouProvideTitle": "Informações que você fornece",
54+
"infoYouProvideP1": "Quando você preenche um formulário, as informações enviadas serão usadas no contexto desse formulário.",
55+
"infoYouProvideP2": "Implementamos medidas de segurança razoáveis para proteger suas informações. No entanto, nenhuma transmissão de dados pela internet é 100% segura e não podemos garantir segurança absoluta.",
56+
"infoYouProvideP3": "Não fornecemos, compartilhamos, vendemos, alugamos ou transferimos quaisquer informações pessoais a terceiros.",
57+
"siteAnalyticsTitle": "Análise do site",
58+
"siteAnalyticsP1": "Usamos uma ferramenta chamada \"PostHog\" para entender como os visitantes interagem com nosso site para que possamos melhorá-lo. Não coletamos informações pessoais usando o PostHog. O PostHog não usa cookies.",
59+
"linksTitle": "Links",
60+
"linksP1": "Nosso site contém links para sites de terceiros. Não somos responsáveis por suas práticas de privacidade e recomendamos que você revise suas políticas.",
61+
"siteSecurityTitle": "Segurança do site",
62+
"siteSecurityP1": "Monitoramos o tráfego da rede para identificar tentativas não autorizadas de enviar ou alterar informações ou causar danos ao site. Qualquer pessoa que use este site concorda expressamente com tal monitoramento.",
63+
"siteSecurityP2": "Tomamos medidas de segurança apropriadas para proteger contra acesso não autorizado, alteração ou destruição de dados.",
64+
"policyChangesTitle": "Alterações na política",
65+
"policyChangesP1": "Podemos atualizar esta Política de Privacidade de tempos em tempos. Esperamos que a maioria dessas mudanças seja pequena, mas publicaremos essas alterações à medida que ocorrerem."
66+
},
67+
"disclaimer": {
68+
"metaTitle": "Aviso Legal",
69+
"title": "Aviso Legal",
70+
"subtitle": "Termos de uso, responsabilidade e compatibilidade do navegador.",
71+
"intro": "As informações apresentadas neste site são coletadas, mantidas e fornecidas para a conveniência do leitor. Embora façamos todo o esforço para manter as informações precisas, não certificamos a autenticidade de informações provenientes de terceiros.",
72+
"liabilityTitle": "Responsabilidade",
73+
"liabilityText": "Em nenhuma circunstância a SF Civic Tech será responsável por quaisquer ações tomadas ou omissões feitas com base em qualquer informação aqui contida, independentemente da fonte, nem será responsável por quaisquer outras consequências decorrentes de tal confiança.",
74+
"browserTitle": "Compatibilidade do navegador",
75+
"browserText": "A SF Civic Tech oferece suporte às versões mais recentes do Firefox, Chrome e Safari na visualização padrão, bem como ao Safari e Chrome para dispositivos móveis."
76+
},
77+
"lang": {
78+
"en": "English",
79+
"es": "Español",
80+
"zh-Hant": "繁體中文",
81+
"fil": "Filipino",
82+
"vi-VN": "Tiếng Việt",
83+
"tr": "Türkçe",
84+
"pt": "Português"
85+
}
86+
}

0 commit comments

Comments
 (0)