Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ah.es translation #318

Merged
merged 3 commits into from
Jan 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/components/forms/loginForm/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ interface LoginFormProps {
}

const LoginButton = styled(SubmitButton)`
width: 96px;
min-width: 96px;
margin-top: 1.5vh;
`;

Expand Down
14 changes: 10 additions & 4 deletions src/components/navBar/navMenu/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import styled from 'styled-components';
import { Menu } from 'antd';
import { BLACK, LIGHT_GREEN, LIGHT_GREY } from '../../../utils/colors';
import { MenuLinkButton } from '../../themedComponents';
import { useTranslation } from 'react-i18next';
import { n } from '../../../utils/stringFormat';
import { site } from '../../../constants';

const StyledNavMenu = styled(Menu)`
border: 1px solid ${LIGHT_GREY};
Expand All @@ -22,26 +25,29 @@ interface NavMenuProps {
}

const NavMenu: React.FC<NavMenuProps> = ({ isAdmin, onLogout }) => {
const { t } = useTranslation(n(site, ['landing']), { nsMode: 'fallback' });
return (
<StyledNavMenu>
<StyledNavMenuItem>
<MenuLinkButton type="text" to={Routes.MY_TREES}>
My Trees
{t('navMenu.myTrees')}
</MenuLinkButton>
</StyledNavMenuItem>
{isAdmin && (
<StyledNavMenuItem>
<MenuLinkButton type="text" to={Routes.ADMIN}>
Admins
{t('navMenu.admins')}
</MenuLinkButton>
</StyledNavMenuItem>
)}
<StyledNavMenuItem>
<MenuLinkButton type="text" to={Routes.SETTINGS}>
Account Settings
{t('navMenu.accountSettings')}
</MenuLinkButton>
</StyledNavMenuItem>
<StyledNavMenuItem onClick={onLogout}>Log Out</StyledNavMenuItem>
<StyledNavMenuItem onClick={onLogout}>
{t('navMenu.logOut')}
</StyledNavMenuItem>
</StyledNavMenu>
);
};
Expand Down
19 changes: 12 additions & 7 deletions src/components/treePopup/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ import { isAdmin } from '../../auth/ducks/selectors';
import { useSelector } from 'react-redux';
import { C4CState } from '../../store';
import { CITY_PLANTING_REQUEST_LINK } from '../../assets/links';
import { useTranslation } from 'react-i18next';
import { n } from '../../utils/stringFormat';
import { site } from '../../constants';

const PopupContainer = styled.div`
position: absolute;
Expand Down Expand Up @@ -115,6 +118,8 @@ const TreePopup: React.FC<TreePopupProps> = ({
treeInfo,
returnTo,
}) => {
const { t } = useTranslation(n(site, 'maps'), { nsMode: 'fallback' });

const [isVisible, setIsVisible] = useState<boolean>(false);

const hidePopup = () => {
Expand All @@ -138,7 +143,7 @@ const TreePopup: React.FC<TreePopupProps> = ({
state={{ destination: Routes.MY_TREES }}
target="_blank"
>
Edit Site Page
{t('popup.editPage')}
</GreenLinkButton>
);

Expand All @@ -153,15 +158,15 @@ const TreePopup: React.FC<TreePopupProps> = ({
{/* If the site has a tree, then display its common name (if available). Otherwise, display 'Open Planting Site' */}
{treeInfo.treePresent
? isEmptyString(treeInfo.commonName)
? 'Unknown Species'
? t('popup.unknownSpecies')
: treeInfo.commonName
: 'Open Planting Site'}
: t('popup.openSite.title')}
</TreeTitle>
<CloseIcon onClick={hidePopup} />
</>
<Line />
{!isEmptyString(treeInfo.address) && (
<GreyText strong>Nearby Address</GreyText>
<GreyText strong>{t('popup.nearbyAddress')}</GreyText>
)}
<GreyText>{treeInfo.address}</GreyText>
{treeInfo.treePresent ? (
Expand All @@ -171,7 +176,7 @@ const TreePopup: React.FC<TreePopupProps> = ({
state={returnState}
target="_blank"
>
More Info
{t('popup.moreInfo')}
</GreenLinkButton>
{userIsAdmin && (
<MarginLeftSpan>{editSiteButton}</MarginLeftSpan>
Expand All @@ -180,12 +185,12 @@ const TreePopup: React.FC<TreePopupProps> = ({
) : (
<>
<PlantRequest>
Want to plant a tree here?{' '}
{t('popup.openSite.question') + ' '}
<Typography.Link
href={CITY_PLANTING_REQUEST_LINK}
target="_blank"
>
Submit a request to the city!
{t('popup.openSite.cta')}
</Typography.Link>
</PlantRequest>
{userIsAdmin && editSiteButton}
Expand Down
1 change: 1 addition & 0 deletions src/containers/adminDashboard/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ const ImageCard = styled.div`
font-size: 16pt;
font-weight: bold;
transition: background-color 0.2s;
text-align: center;

&:hover {
background-color: rgba(0, 0, 0, 0.5);
Expand Down
1 change: 1 addition & 0 deletions src/i18n/en/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// SFTT
export { default as landing } from './landing.json';
export { default as maps } from './maps.json';
export { default as notFound } from './notFound.json';
export { default as forgotPassword } from './forgotPassword.json';
export { default as forgotPasswordReset } from './forgotPasswordReset.json';
Expand Down
6 changes: 6 additions & 0 deletions src/i18n/en/landing.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,11 @@
"Click on the \"Adopt\" button on the next screen to adopt that tree. It will be added to the \"My Trees\" list so you can easily find your tree and record your tree care activities.",
"Record each activity by clicking on \"My Trees\", finding the tree you adopted, and submitting the tree care activity on that tree's page. It's easy!"
]
},
"navMenu": {
"myTrees": "My Trees",
"admins": "Admins",
"accountSettings": "Account Settings",
"logOut": "Log Out"
}
}
13 changes: 13 additions & 0 deletions src/i18n/en/maps.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"popup": {
"nearbyAddress": "Nearby Address",
"moreInfo": "More Info",
"editPage": "Edit Site Page",
"unknownSpecies": "Unknown Species",
"openSite": {
"title": "Open Planting Site",
"question": "Want to plant a tree here?",
"cta": "Submit a request to the city!"
}
}
}
File renamed without changes.
28 changes: 28 additions & 0 deletions src/i18n/es/admin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"admin_title": "Panel de Administración",
"manage_accounts": {
"header": "Gestionar Cuentas",
"my_settings": {
"button": "Mis ajustes"
},
"promote_user": {
"button": "Promover usuario",
"modal": "Promover a un usuario a administrador"
},
"create_child": {
"button": "Agregar Cuenta Infantil",
"modal": "Agregar Nueva Cuenta Infantil"
}
},
"admin_functions": {
"header": "Funciones de Administrador",
"add_sites": "Agregar Sitios",
"view_reports": "Ver Informes",
"email_volunteers": "Enviar correos electrónicos a voluntarios"
},
"roles": {
"admin": "Administrador",
"standard": "Estándar",
"super_admin": "Superadministrador"
}
}
16 changes: 16 additions & 0 deletions src/i18n/es/content.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"unabbreviated_months": {
"jan": "Enero",
"feb": "Febrero",
"mar": "Marzo",
"apr": "Abril",
"may": "Mayo",
"jun": "Junio",
"jul": "Julio",
"aug": "Agosto",
"sep": "Septiembre",
"oct": "Octubre",
"nov": "Noviembre",
"dec": "Diciembre"
}
}
38 changes: 38 additions & 0 deletions src/i18n/es/faq.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"faq": "FAQ",
"title": "Preguntas Frequentes",
"questions": {
"one": "¿Cómo se adopta un árbol?",
"two": "¿Cómo se registran las actividades de cuidado de árboles?",
"three": "¿Cómo se \"desadopta\" un árbol?",
"four": "¿Dónde puedo encontrar una lista de los árboles que he adoptado?",
"five": "¿Puedo adoptar varios árboles?",
"six": "¿Qué debo hacer si mi árbol está gravemente dañado o parece tener daño por insectos/hongos?",
"seven": "¿Qué debo hacer si mi árbol ya no está allí?",
"eight": "¿Debo poner plantas en el alcorque junto con el árbol?"
},
"answers": {
"one": [
"Haz clic en 'Registrarse' en la esquina superior derecha para crear una cuenta.",
"Una vez que hayas iniciado sesión, ingresa tu dirección en la barra de búsqueda del mapa para encontrar árboles adoptables cerca de ti.",
"Haz clic en el icono del árbol que te gustaría adoptar, ya sea el triángulo azul para un árbol recién plantado o el círculo verde para un árbol más antiguo.",
"Haz clic en 'Más información'.",
"Haz clic en el botón 'Adoptar' en la siguiente pantalla para adoptar ese árbol. Se agregará a la lista 'Mis Árboles' para que puedas encontrar fácilmente tu árbol y registrar las actividades de cuidado del árbol.",
"Registra cada actividad haciendo clic en 'Mis Árboles', encontrando el árbol que adoptaste y enviando la actividad de cuidado del árbol en la página de ese árbol. ¡Es fácil y nos ayuda a seguir el éxito del programa Adopta un Árbol!"],
"two": {
"one": "Ve a <homeLink>map.treeboston.org/home</homeLink> y haz clic en \"Mis árboles\".",
"two": [
"En el lado derecho de la pantalla, haz clic en \"Más información\" debajo del árbol que te interesa.",
"Deberías ver esto en tu pantalla donde puedes ingresar lo que hiciste y cuándo:"
]
},
"three": [
"En la página de tu árbol, haz clic en el botón \"desadoptar\" que está en lugar del botón original de adoptar. Asegúrate de \"desadoptar\" los árboles que ya no puedes cuidar para que otros tengan la oportunidad de adoptarlos y los árboles reciban el cuidado que necesitan."
],
"four": "Ve a <myTreesLink>map.treeboston.org/my-trees</myTreesLink>.",
"five": "¡Sí! Te animamos a que adoptes tantos árboles como desees. Te pedimos que 'desadoptes' árboles que ya no puedes cuidar para que otros puedan adoptarlos y cuidarlos.",
"six": "Necesitarás enviar una <boston311Link>solicitud 311</boston311Link> a la ciudad. Si es un peligro, debes usar la palabra 'peligro' en tu solicitud 311 e intentar describirlo específicamente, como una rama rota en la copa que cuelga sobre la cabeza, por ejemplo, o una inclinación aumentada del tronco principal y signos visibles de enfermedad fúngica. Esta información ayudará a los arboristas de la ciudad a priorizar solicitudes que se relacionan con la seguridad pública.",
"seven": "Si tu árbol ha sido retirado o hay un hueco cerca de ti y te gustaría un árbol allí, debes enviar una <boston311Link>solicitud 311</boston311Link> a la ciudad.",
"eight": "Por favor, no plantes nada dentro de los alcorques de los árboles. Puedes poner mantillo alrededor del árbol si quieres y quitar las malas hierbas."
}
}
5 changes: 5 additions & 0 deletions src/i18n/es/forgotPassword.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"header": "¿Has olvidado tu contraseña?",
"reset_instructions": "Por favor, ingresa tu correo electrónico y te enviaremos las instrucciones para restablecer la contraseña a la dirección de correo electrónico de esta cuenta.",
"send_reset_email": "Si hay una cuenta registrada bajo {{email}}, te hemos enviado un enlace para restablecer tu contraseña."
}
5 changes: 5 additions & 0 deletions src/i18n/es/forgotPasswordReset.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"header": "¿Has olvidado tu contraseña?",
"reset_success": "Contraseña restablecida con éxito!",
"reset_error": "No se pudo restablecer la contraseña."
}
125 changes: 125 additions & 0 deletions src/i18n/es/forms.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
{
"email": "Correo electrónico",
"password": "Contraseña",
"current_password": "Contraseña actual",
"first_name": "Nombre",
"last_name": "Apellido",
"name": "Nombre",
"username": "Nombre de usuario",
"submit": "Enviar",
"log_in": "Iniciar sesión",
"sign_up": "Registrarse",
"continue": "Continuar",
"save": "Guardar",
"confirm": "Confirmar",
"cancel": "Cancelar",
"reset_password": {
"new_password": "Nueva contraseña",
"confirm_password": "Confirmar contraseña"
},
"export_data": {
"report_required": "¡Debes seleccionar un informe!",
"report_type_placeholder": "Selecciona el informe para descargar.",
"export_data": [
"Exportar datos de los últimos",
"días (deja vacío para exportar todos los datos)."
],
"load_report": "Cargar informe"
},
"change_username": {
"success": "¡Nombre de usuario cambiado!",
"error": "No se pudo cambiar el nombre de usuario: {{error}}"
},
"delete_account": {
"error": "No se pudo eliminar el usuario: {{error}}",
"submit": "Eliminar cuenta"
},
"change_email": {
"success": "¡Correo electrónico cambiado!",
"error": "No se pudo cambiar el correo electrónico: {{error}}",
"new_email": "Nueva dirección de correo electrónico"
},
"change_password": {
"success": "¡Contraseña cambiada!",
"error": "No se pudo cambiar la contraseña: {{error}}"
},
"edit_site": {
"success": "¡Sitio editado!",
"address": "Dirección",
"city": "Cuidad",
"zip": "Código postal",
"neighborhood": "Barrio",
"latitude": "Latitud",
"longitude": "Longitud",
"owner": "Propietario",
"submit": "Editar características del sitio"
},
"update_site": {
"success": "¡Sitio actualizado!",
"placeholder": {
"pruning": "Poda",
"diameter": "Diámetro",
"circumference": "Circunferencia",
"site_width": "Ancho del sitio",
"site_length": "Longitud del sitio",
"material": "Material"
}
},
"create_child": {
"success": "¡{{email}} agregado correctamente!",
"submit": "Crear cuenta infantil"
},
"change_privilege": {
"success": "¡Nivel de privilegio cambiado!",
"error": "No se pudo cambiar el nivel de privilegio: {{error}}",
"user_email": "Correo electrónico del usuario",
"new_role": "Nuevo rol"
},
"edit_site_entry": {
"success": "¡Entrada del sitio actualizada!",
"error": "No se pudo actualizar la entrada del sitio: {{error}}"
},
"validation": {
"email_required": "¡Por favor, ingresa tu correo electrónico!",
"email_invalid": "Correo electrónico no válido",
"target_email_required": "¡Por favor, ingresa el correo electrónico del usuario cuyo nivel de privilegio desea cambiar!",
"password_required": "¡Por favor, ingresa tu contraseña!",
"password_new_required": "¡Por favor, ingresa una nueva contraseña!",
"password_new_min_length": "Tu nueva contraseña debe tener al menos 8 caracteres.",
"confirm_password_new_required": "¡Por favor, confirma tu nueva contraseña!",
"confirm_password_match": "Las contraseñas no coinciden",
"first_name_required": "¡Por favor, ingresa tu nombre!",
"last_name_required": "¡Por favor, ingresa tu apellido!",
"username_required": "¡Por favor, ingresa un nombre de usuario!",
"address_required": "¡Por favor, ingresa una dirección!",
"zip_required": "¡Por favor, ingresa un código postal válido!",
"zip_numeric": "El código postal solo debe contener números",
"zip_length": "El código postal debe tener 5 dígitos",
"city_required": "¡Por favor, ingresa una ciudad!",
"neighborhood_required": "¡Por favor, ingresa un barrio!",
"latitude_required": "¡Por favor, ingresa una latitud!",
"longitude_required": "¡Por favor, ingresa una longitud!",
"owner_required": "¡Por favor, selecciona un propietario!",
"activity_required": "¡Por favor, selecciona al menos una actividad!",
"activity_date_required": "¡Por favor, ingresa la fecha de la actividad!",
"new_privilege_required": "¡Por favor, elige un nivel de privilegio para este usuario!",
"numeric": "Debe ser un número",
"numeric_positive": "El número debe ser positivo!",
"tree_name_length": "El nombre del árbol debe tener como máximo 60 caracteres"
},
"name_form": {
"placeholder": "Ingresa el nombre del árbol",
"submit": "Cambiar nombre"
},
"stewardship": {
"activities": {
"watered": "Regado",
"mulched": "Acolchado",
"weeded": "Desmalezado",
"cleaned": "Residuos y basura eliminados",
"installedWateringBag": "Bolsa de riego instalada"
},
"date_label": "Fecha de la actividad",
"activity_label": "Actividades de cuidado"
}
}
Loading
Loading