Skip to content

Commit 0d86fb4

Browse files
committed
add espanish translation
1 parent 755fc06 commit 0d86fb4

File tree

14 files changed

+163
-64
lines changed

14 files changed

+163
-64
lines changed

app/lib/presentation/resources/dim.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ class Dimen {
1919
static const spacingXl = 32.0;
2020
static const spacingXxl = 40.0;
2121
static const spacingXxxl = 48.0;
22+
23+
static const double buttonHeightM = 48.0;
2224
}

app/lib/presentation/resources/locale/generated/intl/messages_en.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ class MessageLookup extends MessageLookupByLibrary {
4848
),
4949
"labelEmail": MessageLookupByLibrary.simpleMessage("Email"),
5050
"labelPassword": MessageLookupByLibrary.simpleMessage("Password"),
51+
"loginErrorInvalidCredentials": MessageLookupByLibrary.simpleMessage(
52+
"Invalid email or password.",
53+
),
5154
"noConnection": MessageLookupByLibrary.simpleMessage("No connection"),
5255
"passwordInstructions": MessageLookupByLibrary.simpleMessage(
5356
"Min 8 characters long: 1 uppercase letter, 1 lowercase letter, 1 number, and 1 special character.",

app/lib/presentation/resources/locale/generated/intl/messages_es.dart

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,49 @@ class MessageLookup extends MessageLookupByLibrary {
2323
final messages = _notInlinedMessages(_notInlinedMessages);
2424
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
2525
"appName": MessageLookupByLibrary.simpleMessage("Flutter Target"),
26-
"cookiesAcceptCTA": MessageLookupByLibrary.simpleMessage("Accept"),
26+
"cookiesAcceptCTA": MessageLookupByLibrary.simpleMessage("Aceptar"),
2727
"cookiesBody": MessageLookupByLibrary.simpleMessage(
28-
"We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners who may combine it with other information that you’ve provided to them or that they’ve collected from your use of their services.",
28+
"Usamos cookies para personalizar el contenido y los anuncios, ofrecer funciones de redes sociales y analizar nuestro tráfico. También compartimos información sobre el uso de nuestro sitio con nuestros socios de redes sociales, publicidad y análisis, quienes pueden combinarla con otra información que les hayas proporcionado o que hayan recopilado a partir del uso de sus servicios.",
2929
),
3030
"cookiesTitle": MessageLookupByLibrary.simpleMessage(
31-
"This website uses cookies",
31+
"Este sitio web utiliza cookies",
3232
),
3333
"ctaLogin": MessageLookupByLibrary.simpleMessage("Iniciar sesión"),
34-
"noConnection": MessageLookupByLibrary.simpleMessage("No connection"),
34+
"errorEmailInvalid": MessageLookupByLibrary.simpleMessage(
35+
"Por favor ingresa una dirección de correo válida.",
36+
),
37+
"errorEmailRequired": MessageLookupByLibrary.simpleMessage(
38+
"El correo electrónico es obligatorio.",
39+
),
40+
"errorPasswordRequired": MessageLookupByLibrary.simpleMessage(
41+
"La contraseña es obligatoria.",
42+
),
43+
"errorPasswordWeak": MessageLookupByLibrary.simpleMessage(
44+
"La contraseña es demasiado débil.",
45+
),
46+
"labelAgreeToTerms": MessageLookupByLibrary.simpleMessage(
47+
"Acepto los Términos y Condiciones",
48+
),
49+
"labelEmail": MessageLookupByLibrary.simpleMessage("Correo electrónico"),
50+
"labelPassword": MessageLookupByLibrary.simpleMessage("Contraseña"),
51+
"loginErrorInvalidCredentials": MessageLookupByLibrary.simpleMessage(
52+
"Correo o contraseña inválidos.",
53+
),
54+
"noConnection": MessageLookupByLibrary.simpleMessage("Sin conexión"),
55+
"passwordInstructions": MessageLookupByLibrary.simpleMessage(
56+
"Mínimo 8 caracteres: 1 mayúscula, 1 minúscula, 1 número y 1 carácter especial.",
57+
),
3558
"pleaseTryAgainLaterWeArenworkingToFixTheIssue":
3659
MessageLookupByLibrary.simpleMessage(
37-
"Please try again later, we are\nworking to fix the issue.",
60+
"Por favor, inténtalo más tarde,\nestamos trabajando para resolver el problema.",
3861
),
39-
"retry": MessageLookupByLibrary.simpleMessage("Retry"),
62+
"retry": MessageLookupByLibrary.simpleMessage("Reintentar"),
4063
"sorryWeDidntFindAnyProduct": MessageLookupByLibrary.simpleMessage(
41-
"Sorry we didn\'t find any product",
64+
"Lo sentimos, no hemos encontrado ningún producto",
65+
),
66+
"titleLogin": MessageLookupByLibrary.simpleMessage("Iniciar sesión"),
67+
"titleLoginSubtitle": MessageLookupByLibrary.simpleMessage(
68+
"Usa tu correo y contraseña para iniciar sesión en tu cuenta.",
4269
),
4370
};
4471
}

app/lib/presentation/resources/locale/generated/l10n.dart

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/lib/presentation/resources/locale/intl_en.arb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@
1717
"titleLogin": "Login",
1818
"titleLoginSubtitle": "Use your email and password to login to your account.",
1919
"errorEmailInvalid": "Please enter a valid email address.",
20-
"errorPasswordWeak": "Password is too weak."
20+
"errorPasswordWeak": "Password is too weak.",
21+
"loginErrorInvalidCredentials": "Invalid email or password."
2122
}
Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
{
22
"appName": "Flutter Target",
3-
"cookiesTitle": "This website uses cookies",
4-
"cookiesAcceptCTA": "Accept",
5-
"cookiesBody": "We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners who may combine it with other information that you’ve provided to them or that they’ve collected from your use of their services.",
6-
"noConnection": "No connection",
7-
"retry": "Retry",
8-
"pleaseTryAgainLaterWeArenworkingToFixTheIssue": "Please try again later, we are\nworking to fix the issue.",
9-
"sorryWeDidntFindAnyProduct": "Sorry we didn't find any product",
10-
"ctaLogin": "Iniciar sesión"
3+
"cookiesTitle": "Este sitio web utiliza cookies",
4+
"cookiesAcceptCTA": "Aceptar",
5+
"cookiesBody": "Usamos cookies para personalizar el contenido y los anuncios, ofrecer funciones de redes sociales y analizar nuestro tráfico. También compartimos información sobre el uso de nuestro sitio con nuestros socios de redes sociales, publicidad y análisis, quienes pueden combinarla con otra información que les hayas proporcionado o que hayan recopilado a partir del uso de sus servicios.",
6+
"noConnection": "Sin conexión",
7+
"retry": "Reintentar",
8+
"pleaseTryAgainLaterWeArenworkingToFixTheIssue": "Por favor, inténtalo más tarde,\nestamos trabajando para resolver el problema.",
9+
"sorryWeDidntFindAnyProduct": "Lo sentimos, no hemos encontrado ningún producto",
10+
"ctaLogin": "Iniciar sesión",
11+
"labelEmail": "Correo electrónico",
12+
"labelPassword": "Contraseña",
13+
"passwordInstructions": "Mínimo 8 caracteres: 1 mayúscula, 1 minúscula, 1 número y 1 carácter especial.",
14+
"labelAgreeToTerms": "Acepto los Términos y Condiciones",
15+
"errorEmailRequired": "El correo electrónico es obligatorio.",
16+
"errorPasswordRequired": "La contraseña es obligatoria.",
17+
"titleLogin": "Iniciar sesión",
18+
"titleLoginSubtitle": "Usa tu correo y contraseña para iniciar sesión en tu cuenta.",
19+
"errorEmailInvalid": "Por favor ingresa una dirección de correo válida.",
20+
"errorPasswordWeak": "La contraseña es demasiado débil.",
21+
"loginErrorInvalidCredentials": "Correo o contraseña inválidos."
1122
}

app/lib/presentation/ui/components/primary_button.dart

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,30 @@ class PrimaryButton extends StatelessWidget {
1717
this.isLoading = false,
1818
this.leadingIcon,
1919
this.trailingIcon,
20-
});
20+
}) : assert(
21+
leadingIcon == null || trailingIcon == null,
22+
'Only one of leadingIcon or trailingIcon can be provided',
23+
);
2124

2225
@override
2326
Widget build(BuildContext context) {
24-
return ElevatedButton(
25-
onPressed: isLoading || !isEnabled ? null : onPressed,
26-
child: isLoading
27+
return ElevatedButton.icon(
28+
style: Theme.of(context).elevatedButtonTheme.style?.copyWith(
29+
minimumSize: WidgetStateProperty.all<Size>(
30+
const Size(
31+
double.infinity,
32+
Dimen.buttonHeightM,
33+
),
34+
),
35+
),
36+
onPressed: isLoading || !isEnabled ? null : onPressed,
37+
icon: leadingIcon ?? trailingIcon ?? const SizedBox.shrink(),
38+
iconAlignment: leadingIcon != null
39+
? IconAlignment.start
40+
: trailingIcon != null
41+
? IconAlignment.end
42+
: null,
43+
label: isLoading
2744
? SizedBox(
2845
width: Dimen.loadingSpinnerSizeS,
2946
height: Dimen.loadingSpinnerSizeS,
@@ -32,27 +49,7 @@ class PrimaryButton extends StatelessWidget {
3249
strokeWidth: 2,
3350
),
3451
)
35-
: Row(
36-
mainAxisSize: MainAxisSize.min,
37-
mainAxisAlignment: MainAxisAlignment.center,
38-
children: [
39-
if (leadingIcon != null)
40-
SizedBox(
41-
width: Dimen.loadingSpinnerSizeS,
42-
height: Dimen.loadingSpinnerSizeS,
43-
child: leadingIcon!,
44-
),
45-
const Spacer(),
46-
Text(label),
47-
const Spacer(),
48-
if (trailingIcon != null)
49-
SizedBox(
50-
width: Dimen.loadingSpinnerSizeS,
51-
height: Dimen.loadingSpinnerSizeS,
52-
child: trailingIcon!,
53-
),
54-
],
55-
),
52+
: Text(label),
5653
);
5754
}
5855
}

app/lib/presentation/ui/custom/cookies.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
44
import 'package:common/devices/platform/abstract/platform_info.dart';
55
import 'package:app/presentation/resources/locale/generated/l10n.dart';
66
import 'package:app/presentation/resources/resources.dart';
7+
import 'package:gap/gap.dart';
78

89
class Cookies extends StatefulWidget {
910
final Widget child;
@@ -57,7 +58,7 @@ class _CookiesState extends State<Cookies> {
5758
),
5859
child: Card(
5960
child: Container(
60-
padding: EdgeInsets.all(spacing.s),
61+
padding: const EdgeInsets.all(Dimen.spacingS),
6162
child: Column(
6263
mainAxisSize: MainAxisSize.min,
6364
mainAxisAlignment: MainAxisAlignment.start,
@@ -68,13 +69,13 @@ class _CookiesState extends State<Cookies> {
6869
style:
6970
Theme.of(context).textTheme.headlineMedium,
7071
),
71-
SizedBox(height: spacing.s),
72+
const Gap(Dimen.spacingS),
7273
SelectableText(
7374
S.of(context).cookiesBody,
7475
style:
7576
Theme.of(context).textTheme.headlineMedium,
7677
),
77-
SizedBox(height: spacing.s),
78+
const Gap(Dimen.spacingS),
7879
Align(
7980
alignment: Alignment.centerRight,
8081
child: ElevatedButton(

app/lib/presentation/ui/custom/environment_selector.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,17 @@ class EnvironmentSelector extends StatelessWidget {
1818
DropdownMenuItem<String>(
1919
value: value,
2020
child: Padding(
21-
padding: EdgeInsets.symmetric(horizontal: spacing.xs),
21+
padding: const EdgeInsets.symmetric(horizontal: Dimen.spacingXs),
2222
child: Text(label, style: textStyle),
2323
),
2424
);
2525

2626
@override
2727
Widget build(BuildContext context) {
28-
final textStyle =
29-
Theme.of(context).textTheme.bodyLarge?.copyWith(color: Theme.of(context).colorScheme.primary.v0);
28+
final textStyle = Theme.of(context)
29+
.textTheme
30+
.bodyLarge
31+
?.copyWith(color: Theme.of(context).colorScheme.primary.v0);
3032

3133
final items = <DropdownMenuItem<String>>[
3234
_item(EnvConfig.kDevEnv, 'Development', textStyle!),

app/lib/presentation/ui/pages/auth/login/login_form.dart

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -119,19 +119,34 @@ class _LoginFormState extends State<LoginForm> {
119119
const Gap(Dimen.spacingM),
120120
BlocBuilder<AuthCubit, Resource>(
121121
builder: (context, state) {
122-
return PrimaryButton(
123-
label: S.of(context).ctaLogin,
124-
onPressed: () {
125-
if (_formKey.currentState?.validate() ?? false) {
126-
_authCubit.login(
127-
email: emailController.text,
128-
password: passwordController.text,
129-
);
130-
}
131-
},
132-
isEnabled: agreeToTerms,
133-
isLoading: state is RLoading,
134-
trailingIcon: const Icon(Icons.login),
122+
return Column(
123+
mainAxisSize: MainAxisSize.min,
124+
children: [
125+
if (state is RError) ...[
126+
Text(
127+
S.of(context).loginErrorInvalidCredentials,
128+
style:
129+
Theme.of(context).textTheme.headlineMedium?.copyWith(
130+
color: Theme.of(context).colorScheme.error,
131+
),
132+
),
133+
const Gap(Dimen.spacingM),
134+
],
135+
PrimaryButton(
136+
label: S.of(context).ctaLogin,
137+
onPressed: () {
138+
if (_formKey.currentState?.validate() ?? false) {
139+
_authCubit.login(
140+
email: emailController.text,
141+
password: passwordController.text,
142+
);
143+
}
144+
},
145+
isEnabled: agreeToTerms,
146+
isLoading: state is RLoading,
147+
trailingIcon: const Icon(Icons.login),
148+
)
149+
],
135150
);
136151
},
137152
),

0 commit comments

Comments
 (0)