diff --git a/docusaurus/docs/Flutter/guides/adding_localization.mdx b/docusaurus/docs/Flutter/guides/adding_localization.mdx
index c08f081c..37f7299d 100644
--- a/docusaurus/docs/Flutter/guides/adding_localization.mdx
+++ b/docusaurus/docs/Flutter/guides/adding_localization.mdx
@@ -25,6 +25,7 @@ At the moment we support the following languages:
- [Hindi](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_hi.dart)
- [Italian](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_it.dart)
- [French](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_fr.dart)
+- [Spanish](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_es.dart)
More languages will be added in the future. Feel free to [contribute](https://github.com/GetStream/stream-chat-flutter/blob/master/CONTRIBUTING.md) to add more languages.
@@ -62,6 +63,7 @@ class MyApp extends StatelessWidget {
Locale('hi'),
Locale('fr'),
Locale('it'),
+ Locale('es'),
],
// Add GlobalStreamChatLocalizations.delegates
localizationsDelegates: GlobalStreamChatLocalizations.delegates,
@@ -130,6 +132,7 @@ Here is an example of how that would look like:
Locale('hi'),
Locale('fr'),
Locale('it'),
+ Locale('es'),
],
// locales are the locales of the device
// supportedLocales are the app supported locales
@@ -172,5 +175,6 @@ Example:
nb
fr
it
+ es
```
diff --git a/packages/stream_chat_flutter/example/lib/main.dart b/packages/stream_chat_flutter/example/lib/main.dart
index a9e1366c..eb03f89f 100644
--- a/packages/stream_chat_flutter/example/lib/main.dart
+++ b/packages/stream_chat_flutter/example/lib/main.dart
@@ -73,6 +73,7 @@ class MyApp extends StatelessWidget {
Locale('hi'),
Locale('fr'),
Locale('it'),
+ Locale('es'),
],
localizationsDelegates: GlobalStreamChatLocalizations.delegates,
builder: (context, widget) => StreamChat(
diff --git a/packages/stream_chat_localizations/CHANGELOG.md b/packages/stream_chat_localizations/CHANGELOG.md
index 4667ab93..865741c4 100644
--- a/packages/stream_chat_localizations/CHANGELOG.md
+++ b/packages/stream_chat_localizations/CHANGELOG.md
@@ -1,6 +1,10 @@
+## Upcoming
+
+* Added support for [Spanish](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_es.dart) locale.
+
## 1.0.2
-* Updated stream_chat_flutter dependency
+* Updated `stream_chat_flutter` dependency
## 1.0.1
@@ -8,4 +12,8 @@
## 1.0.0
-* First release
+* Initial Release with support for 4 locales
+ - [English](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_en.dart)
+ - [Hindi](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_hi.dart)
+ - [Italian](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_it.dart)
+ - [French](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_fr.dart)
diff --git a/packages/stream_chat_localizations/README.md b/packages/stream_chat_localizations/README.md
index bf648e45..c2ea8a72 100644
--- a/packages/stream_chat_localizations/README.md
+++ b/packages/stream_chat_localizations/README.md
@@ -34,6 +34,7 @@ At the moment we support the following languages:
- [Hindi](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_hi.dart)
- [Italian](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_it.dart)
- [French](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_fr.dart)
+- [Spanish](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_es.dart)
More languages will be added in the future. Feel free to [contribute](https://github.com/GetStream/stream-chat-flutter/blob/master/CONTRIBUTING.md) to add more languages.
@@ -68,6 +69,7 @@ class MyApp extends StatelessWidget {
Locale('hi'),
Locale('fr'),
Locale('it'),
+ Locale('es'),
],
// Add GlobalStreamChatLocalizations.delegates
localizationsDelegates: GlobalStreamChatLocalizations.delegates,
@@ -86,13 +88,13 @@ class MyApp extends StatelessWidget {
### Adding a new language
-To add a new language, you need to create a new class extending `GlobalStreamChatLocalizations` and create a delegate for it adding it to the `delegates` array.
+To add a new language, create a new class extending `GlobalStreamChatLocalizations` and create a delegate for it, adding it to the `delegates` array.
Check out [this example](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/example/lib/add_new_lang.dart) to see how to add a new language.
### Override existing languages
-To override an existing language, you need to create a new class extending that particular language class and create a delegate for it adding it to the `delegates` array.
+To override an existing language, create a new class extending that particular language class and create a delegate for it, adding it to the `delegates` array.
Check out [this example](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/example/lib/override_lang.dart) to see how to override an existing language.
@@ -110,6 +112,7 @@ Example:
nb
fr
it
+ es
```
diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations.dart
index f98932b5..a6a66b93 100644
--- a/packages/stream_chat_localizations/lib/src/stream_chat_localizations.dart
+++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations.dart
@@ -3,6 +3,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
+part 'stream_chat_localizations_es.dart';
+
part 'stream_chat_localizations_en.dart';
part 'stream_chat_localizations_fr.dart';
@@ -24,6 +26,7 @@ const kStreamChatSupportedLanguages = {
'hi',
'fr',
'it',
+ 'es',
};
/// Creates a [GlobalStreamChatLocalizations] instance for the given `locale`.
@@ -54,6 +57,8 @@ GlobalStreamChatLocalizations? getStreamChatTranslation(Locale locale) {
return const StreamChatLocalizationsFr();
case 'it':
return const StreamChatLocalizationsIt();
+ case 'es':
+ return const StreamChatLocalizationsEs();
}
}
diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_es.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_es.dart
new file mode 100644
index 00000000..b43e4ba8
--- /dev/null
+++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_es.dart
@@ -0,0 +1,365 @@
+part of 'stream_chat_localizations.dart';
+
+/// The translations for Spanish (`es`).
+class StreamChatLocalizationsEs extends GlobalStreamChatLocalizations {
+ /// Create an instance of the translation bundle for Spanish.
+ const StreamChatLocalizationsEs({String localeName = 'es'})
+ : super(localeName: localeName);
+
+ @override
+ String get launchUrlError => 'No se pudo abrir la url';
+
+ @override
+ String get loadingUsersError => 'Error de carga del usuario';
+
+ @override
+ String get noUsersLabel => 'No hay usuarios actualmente';
+
+ @override
+ String get retryLabel => 'Inténtelo de nuevo';
+
+ @override
+ String get userLastOnlineText => 'Última vez en línea';
+
+ @override
+ String get userOnlineText => 'En línea';
+
+ @override
+ String userTypingText(Iterable users) {
+ if (users.isEmpty) return '';
+ final first = users.first;
+ if (users.length == 1) {
+ return '${first.name} está escribiendo';
+ }
+ return '${first.name} y ${users.length - 1} están escribiendo';
+ }
+
+ @override
+ String get threadReplyLabel => 'Responder al hilo de discusión';
+
+ @override
+ String get onlyVisibleToYouText => 'Sólo visible para usted';
+
+ @override
+ String threadReplyCountText(int count) =>
+ '$count respuestas al hilo de discusión';
+
+ @override
+ String attachmentsUploadProgressText({
+ required int remaining,
+ required int total,
+ }) =>
+ 'Transferencia en curso $remaining/$total ...';
+
+ @override
+ String pinnedByUserText({
+ required User pinnedBy,
+ required User currentUser,
+ }) {
+ final pinnedByCurrentUser = currentUser.id == pinnedBy.id;
+ if (pinnedByCurrentUser) return 'Fijado por ti';
+ return 'Fijado por ${pinnedBy.name}';
+ }
+
+ @override
+ String get emptyMessagesText => 'Actualmente no hay mensajes';
+
+ @override
+ String get genericErrorText => 'Hubo un problema';
+
+ @override
+ String get loadingMessagesError =>
+ 'Hubo un error mientras se cargaba el mensaje';
+
+ @override
+ String resultCountText(int count) => '$count resultados';
+
+ @override
+ String get messageDeletedText => 'Este mensaje ha sido borrado.';
+
+ @override
+ String get messageDeletedLabel => 'Mensaje borrado';
+
+ @override
+ String get messageReactionsLabel => 'Reacciones a los mensajes';
+
+ @override
+ String get emptyChatMessagesText => 'Todavía no hay charlas aquí...';
+
+ @override
+ String threadSeparatorText(int replyCount) {
+ if (replyCount == 1) return '1 respuesta';
+ return '$replyCount respuestas';
+ }
+
+ @override
+ String get connectedLabel => 'Conectado';
+
+ @override
+ String get disconnectedLabel => 'Desconectado';
+
+ @override
+ String get reconnectingLabel => 'Reconectando...';
+
+ @override
+ String get alsoSendAsDirectMessageLabel =>
+ 'Enviar también como mensaje directo';
+
+ @override
+ String get addACommentOrSendLabel => 'Añadir un comentario o enviar';
+
+ @override
+ String get searchGifLabel => 'Búsqueda de GIFs';
+
+ @override
+ String get writeAMessageLabel => 'Escribir un mensaje';
+
+ @override
+ String get instantCommandsLabel => 'Comandos instantáneos';
+
+ @override
+ String fileTooLargeAfterCompressionError(double limitInMB) =>
+ 'El archivo es demasiado grande para descargarlo. '
+ 'El tamaño máximo del archivo es de $limitInMB MB. '
+ 'Intentamos comprimirlo, pero no fue suficiente.';
+
+ @override
+ String fileTooLargeError(double limitInMB) =>
+ 'El archivo es demasiado grande para descargarlo. '
+ 'El límite de tamaño de los archivos es de $limitInMB MB.';
+
+ @override
+ String emojiMatchingQueryText(String query) =>
+ 'Emoji que corresponde a "$query"';
+
+ @override
+ String get addAFileLabel => 'Añadir un archivo';
+
+ @override
+ String get photoFromCameraLabel => 'Foto de la cámara';
+
+ @override
+ String get uploadAFileLabel => 'Transferir un archivo';
+
+ @override
+ String get uploadAPhotoLabel => 'Subir una foto';
+
+ @override
+ String get uploadAVideoLabel => 'Subir una vídeo';
+
+ @override
+ String get videoFromCameraLabel => 'Vídeo de la cámara';
+
+ @override
+ String get okLabel => 'Vale';
+
+ @override
+ String get somethingWentWrongError => 'Algo ha salido mal';
+
+ @override
+ String get addMoreFilesLabel => 'Añadir más archivos';
+
+ @override
+ String get enablePhotoAndVideoAccessMessage =>
+ 'Por favor, permita el acceso a sus fotos'
+ '\ny vídeos para que puedas compartirlos con sus amigos.';
+
+ @override
+ String get allowGalleryAccessMessage => 'Permitir el acceso a su galería';
+
+ @override
+ String get flagMessageLabel => 'Reportar un mensaje';
+
+ @override
+ String get flagMessageQuestion =>
+ '¿Quiere enviar una copia de este mensaje a un'
+ '\nmoderador para una mayor investigación?';
+
+ @override
+ String get flagLabel => 'REPORTAR';
+
+ @override
+ String get cancelLabel => 'CANCELAR';
+
+ @override
+ String get flagMessageSuccessfulLabel => 'Mensaje reportado';
+
+ @override
+ String get flagMessageSuccessfulText =>
+ 'Este mensaje ha sido reportado a un moderador.';
+
+ @override
+ String get deleteLabel => 'BORRAR';
+
+ @override
+ String get deleteMessageLabel => 'Borrar el mensaje';
+
+ @override
+ String get deleteMessageQuestion =>
+ '¿Estás seguro de que quieres borrar este\nmensaje de forma permanente?';
+
+ @override
+ String get operationCouldNotBeCompletedText =>
+ 'La operación no pudo completarse.';
+
+ @override
+ String get replyLabel => 'Respuesta';
+
+ @override
+ String togglePinUnpinText({required bool pinned}) {
+ if (pinned) return 'Desfijar a la conversación';
+ return 'Fijar a la conversación';
+ }
+
+ @override
+ String toggleDeleteRetryDeleteMessageText({required bool isDeleteFailed}) {
+ if (isDeleteFailed) return 'Reintentar borrar el mensaje';
+ return 'Borrar el mensaje';
+ }
+
+ @override
+ String get copyMessageLabel => 'Copiar el mensaje';
+
+ @override
+ String get editMessageLabel => 'Editar el mensaje';
+
+ @override
+ String toggleResendOrResendEditedMessage({required bool isUpdateFailed}) {
+ if (isUpdateFailed) return 'Reenviar el mensaje modificado';
+ return 'Reenviar';
+ }
+
+ @override
+ String get photosLabel => 'Fotos';
+
+ String _getDay(DateTime dateTime) {
+ final now = DateTime.now();
+ final today = DateTime(now.year, now.month, now.day);
+ final yesterday = DateTime(now.year, now.month, now.day - 1);
+
+ final date = DateTime(dateTime.year, dateTime.month, dateTime.day);
+
+ if (date == today) {
+ return 'hoy';
+ } else if (date == yesterday) {
+ return 'ayer';
+ } else {
+ return 'el ${Jiffy(date).MMMd}';
+ }
+ }
+
+ @override
+ String sentAtText({required DateTime date, required DateTime time}) =>
+ '''Enviado el ${_getDay(date)} a las ${Jiffy(time.toLocal()).format('HH:mm')}''';
+
+ @override
+ String get todayLabel => 'Hoy';
+
+ @override
+ String get yesterdayLabel => 'Ayer';
+
+ @override
+ String get channelIsMutedText => 'El canal está silenciado';
+
+ @override
+ String get noTitleText => 'Sin título';
+
+ @override
+ String get letsStartChattingLabel => '¡Empecemos a charlar!';
+
+ @override
+ String get sendingFirstMessageLabel =>
+ '¿Qué le parece enviar su primer mensaje a un amigo?';
+
+ @override
+ String get startAChatLabel => 'Iniciar una conversación';
+
+ @override
+ String get loadingChannelsError => 'Error al cargar los canales';
+
+ @override
+ String get deleteConversationLabel => 'Borrar la conversación';
+
+ @override
+ String get deleteConversationQuestion =>
+ '¿Estás seguro de que quieres borrar esta conversación?';
+
+ @override
+ String get streamChatLabel => 'Stream Chat';
+
+ @override
+ String get searchingForNetworkText => 'Buscando red';
+
+ @override
+ String get offlineLabel => 'Sin conexión...';
+
+ @override
+ String get tryAgainLabel => 'Inténtelo de nuevo';
+
+ @override
+ String membersCountText(int count) {
+ if (count == 1) return '1 miembro';
+ return '$count miembros';
+ }
+
+ @override
+ String watchersCountText(int count) {
+ if (count == 1) return '1 En línea';
+ return '$count En línea';
+ }
+
+ @override
+ String get viewInfoLabel => 'Ver información';
+
+ @override
+ String get leaveGroupLabel => 'Salir del Grupo';
+
+ @override
+ String get leaveLabel => 'SALIR';
+
+ @override
+ String get leaveConversationLabel => 'Salir de la conversación';
+
+ @override
+ String get leaveConversationQuestion =>
+ '¿Estás seguro de que quiere salir de esta conversación?';
+
+ @override
+ String get showInChatLabel => 'Mostrar en el chat';
+
+ @override
+ String get saveImageLabel => 'Guardar la imagen';
+
+ @override
+ String get saveVideoLabel => 'Guardar el vídeo';
+
+ @override
+ String get uploadErrorLabel => 'ERROR DE TRANSFERENCIA';
+
+ @override
+ String get giphyLabel => 'Giphy';
+
+ @override
+ String get shuffleLabel => 'Mezclar';
+
+ @override
+ String get sendLabel => 'Enviar';
+
+ @override
+ String get withText => 'con';
+
+ @override
+ String get inText => 'en';
+
+ @override
+ String get youText => 'Usted';
+
+ @override
+ String get ofText => 'de';
+
+ @override
+ String get fileText => 'Archivo';
+
+ @override
+ String get replyToMessageLabel => 'Responder al Mensaje';
+}
diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_fr.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_fr.dart
index 1bbfbc5a..9d8586d5 100644
--- a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_fr.dart
+++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_fr.dart
@@ -31,7 +31,7 @@ class StreamChatLocalizationsFr extends GlobalStreamChatLocalizations {
if (users.length == 1) {
return "${first.name} est en train d'écrire";
}
- return "${first.name} and ${users.length - 1} sont entrain d'écrire";
+ return "${first.name} et ${users.length - 1} sont entrain d'écrire";
}
@override
@@ -49,7 +49,7 @@ class StreamChatLocalizationsFr extends GlobalStreamChatLocalizations {
required int remaining,
required int total,
}) =>
- 'Uploading $remaining/$total ...';
+ 'Transfert en cours $remaining/$total ...';
@override
String pinnedByUserText({
@@ -206,8 +206,8 @@ class StreamChatLocalizationsFr extends GlobalStreamChatLocalizations {
@override
String togglePinUnpinText({required bool pinned}) {
- if (pinned) return 'Détacher de la conversation';
- return 'Attacher à la conversation';
+ if (pinned) return 'Décrocher de la conversation';
+ return 'Épingler à la discussion';
}
@override
@@ -311,7 +311,7 @@ class StreamChatLocalizationsFr extends GlobalStreamChatLocalizations {
String get viewInfoLabel => 'Voir les informations';
@override
- String get leaveGroupLabel => 'Quitter le Group';
+ String get leaveGroupLabel => 'Quitter le Groupe';
@override
String get leaveLabel => 'QUITTER';
@@ -324,7 +324,7 @@ class StreamChatLocalizationsFr extends GlobalStreamChatLocalizations {
'Etes-vous sûr de vouloir quitter cette conversation ?';
@override
- String get showInChatLabel => 'Montrer dans le Chat';
+ String get showInChatLabel => 'Montrer dans la Discussion';
@override
String get saveImageLabel => "Sauvegarder l'image";