diff --git a/packages/stream_chat_localizations/CHANGELOG.md b/packages/stream_chat_localizations/CHANGELOG.md index 20c9aaef..07a266d0 100644 --- a/packages/stream_chat_localizations/CHANGELOG.md +++ b/packages/stream_chat_localizations/CHANGELOG.md @@ -1,3 +1,13 @@ +## Upcoming + +✅ Added + +* Added support for [Catalan](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ca.dart) locale. + +🔄 Changed + +* Some of the `Spanish` translations have been updated/changed for better understanding. + ## 4.0.0 🔄 Changed diff --git a/packages/stream_chat_localizations/README.md b/packages/stream_chat_localizations/README.md index b55eb7ad..989c00b2 100644 --- a/packages/stream_chat_localizations/README.md +++ b/packages/stream_chat_localizations/README.md @@ -35,6 +35,7 @@ At the moment we support the following languages: - [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) +- [Catalan](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ca.dart) - [Japanese](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ja.dart) - [Korean](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ko.dart) - [Portuguese](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_pt.dart) @@ -75,6 +76,7 @@ class MyApp extends StatelessWidget { Locale('fr'), Locale('it'), Locale('es'), + Locale('ca'), Locale('ja'), Locale('ko'), Locale('pt'), @@ -123,6 +125,7 @@ Example: fr it es + ca ja ko pt 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 a1464ad8..62248df8 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,7 @@ 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_ca.dart'; part 'stream_chat_localizations_de.dart'; part 'stream_chat_localizations_en.dart'; part 'stream_chat_localizations_es.dart'; @@ -28,6 +29,7 @@ const kStreamChatSupportedLanguages = { 'fr', 'it', 'es', + 'ca', 'ja', 'ko', 'pt', @@ -65,6 +67,8 @@ GlobalStreamChatLocalizations? getStreamChatTranslation(Locale locale) { return const StreamChatLocalizationsIt(); case 'es': return const StreamChatLocalizationsEs(); + case 'ca': + return const StreamChatLocalizationsCa(); case 'ja': return const StreamChatLocalizationsJa(); case 'ko': diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ca.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ca.dart new file mode 100644 index 00000000..9b7c5fc9 --- /dev/null +++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ca.dart @@ -0,0 +1,452 @@ +part of 'stream_chat_localizations.dart'; + +/// The translations for Catalan (`ca`). +class StreamChatLocalizationsCa extends GlobalStreamChatLocalizations { + /// Create an instance of the translation bundle for Catalan. + const StreamChatLocalizationsCa({super.localeName = 'ca'}); + + @override + String get launchUrlError => "No s'ha pogut obrir la url"; + + @override + String get loadingUsersError => "Error de càrrega de l'usuari"; + + @override + String get noUsersLabel => 'Actualment no hi ha usuaris'; + + @override + String get retryLabel => 'Torna-ho a provar'; + + @override + String get userLastOnlineText => 'Última vegada en línia'; + + @override + String get userOnlineText => 'En línia'; + + @override + String userTypingText(Iterable users) { + if (users.isEmpty) return ''; + final first = users.first; + if (users.length == 1) { + return '${first.name} està escrivint'; + } + return '${first.name} y ${users.length - 1} estan escrivint'; + } + + @override + String get threadReplyLabel => 'Respon al fil'; + + @override + String get onlyVisibleToYouText => 'Només visible per vostè'; + + @override + String threadReplyCountText(int count) => + '$count respostes al fil'; + + @override + String attachmentsUploadProgressText({ + required int remaining, + required int total, + }) => + 'Transferència en curs $remaining/$total ...'; + + @override + String pinnedByUserText({ + required User pinnedBy, + required User currentUser, + }) { + final pinnedByCurrentUser = currentUser.id == pinnedBy.id; + if (pinnedByCurrentUser) return 'Fixat per tu'; + return 'Fixat per ${pinnedBy.name}'; + } + + @override + String get sendMessagePermissionError => + 'No tens permís per enviar missatges'; + + @override + String get emptyMessagesText => 'Actualment no hi ha missatges'; + + @override + String get genericErrorText => 'Hi ha hagut un problema'; + + @override + String get loadingMessagesError => + 'Hi ha hagut un error mentres carregava el missatge'; + + @override + String resultCountText(int count) => '$count resultats'; + + @override + String get messageDeletedText => 'Aquest missatge ha estat esborrat.'; + + @override + String get messageDeletedLabel => 'Missatge esborrat'; + + @override + String get messageReactionsLabel => 'Reaccions dels missatges'; + + @override + String get emptyChatMessagesText => 'Encara no hi ha missatges...'; + + @override + String threadSeparatorText(int replyCount) { + if (replyCount == 1) return '1 resposta'; + return '$replyCount respostes'; + } + + @override + String get connectedLabel => 'Connectat'; + + @override + String get disconnectedLabel => 'Desconnectat'; + + @override + String get reconnectingLabel => 'Reconnectant...'; + + @override + String get alsoSendAsDirectMessageLabel => + 'Enviar també com a missatge directe'; + + @override + String get addACommentOrSendLabel => 'Afegir un comentari o enviar'; + + @override + String get searchGifLabel => 'Cerca de GIFs'; + + @override + String get writeAMessageLabel => 'Escriure un missatge'; + + @override + String get instantCommandsLabel => 'Commandes instantànies'; + + @override + String fileTooLargeAfterCompressionError(double limitInMB) => + 'El fitxer és massa gran descargar-lo. ' + 'La mida màxima del fitxer és de $limitInMB MB. ' + 'Hem intentat comprimir-lo, pero ha estat suficient.'; + + @override + String fileTooLargeError(double limitInMB) => + 'El fitxer és massa gran per descargar-lo. ' + 'El límit de mida dels fitxers és de $limitInMB MB.'; + + @override + String get couldNotReadBytesFromFileError => + "No s'han pogut llegir els bytes del fitxer."; + + @override + String get addAFileLabel => 'Afegir un fitxer'; + + @override + String get photoFromCameraLabel => 'Foto de la càmera'; + + @override + String get uploadAFileLabel => 'Transferir un fitxer'; + + @override + String get uploadAPhotoLabel => 'Pujar una foto'; + + @override + String get uploadAVideoLabel => 'Pujar un vídeo'; + + @override + String get videoFromCameraLabel => 'Vídeo de la càmera'; + + @override + String get okLabel => 'Vale'; + + @override + String get somethingWentWrongError => 'Alguna cosa ha anat malament'; + + @override + String get addMoreFilesLabel => 'Afegir més fitxers'; + + @override + String get enablePhotoAndVideoAccessMessage => + "Si us plau, permeti l'accés a les seves fotos" + '\ni vídeos per a que pugui compartir-los.'; + + @override + String get allowGalleryAccessMessage => "Permetre l'accés a la galeria"; + + @override + String get flagMessageLabel => 'Reportar un missatge'; + + @override + String get flagMessageQuestion => + "¿Vol enviar una còpia d'aquest missatge a un" + '\nmoderador per una major investigació?'; + + @override + String get flagLabel => 'REPORTAR'; + + @override + String get cancelLabel => 'CANCELAR'; + + @override + String get flagMessageSuccessfulLabel => 'Missatge reportat'; + + @override + String get flagMessageSuccessfulText => + 'Aquest missatge ha estat reportat a un moderador.'; + + @override + String get deleteLabel => 'ESBORRAR'; + + @override + String get deleteMessageLabel => 'Esborrar el missatge'; + + @override + String get deleteMessageQuestion => + '¿Estàs segur de que vols esborrar aquest\nmissatge de forma permanent?'; + + @override + String get operationCouldNotBeCompletedText => + "L'operació no s'ha pogut completar."; + + @override + String get replyLabel => 'Respondre'; + + @override + String togglePinUnpinText({required bool pinned}) { + if (pinned) return 'Desfixar de la conversa'; + return 'Fixar a la conversa'; + } + + @override + String toggleDeleteRetryDeleteMessageText({required bool isDeleteFailed}) { + if (isDeleteFailed) return 'Reintentar esborrar el misssatge'; + return 'Esborrar el misssatge'; + } + + @override + String get copyMessageLabel => 'Copiar el misssatge'; + + @override + String get editMessageLabel => 'Editar el misssatge'; + + @override + String toggleResendOrResendEditedMessage({required bool isUpdateFailed}) { + if (isUpdateFailed) return 'Reenviar el missatge modificat'; + 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 'avui'; + } else if (date == yesterday) { + return 'ahir'; + } else { + return 'el ${Jiffy(date).MMMd}'; + } + } + + @override + String sentAtText({required DateTime date, required DateTime time}) => + '''Enviat el ${_getDay(date)} a les ${Jiffy(time.toLocal()).format('HH:mm')}'''; + + @override + String get todayLabel => 'Avui'; + + @override + String get yesterdayLabel => 'Ahir'; + + @override + String get channelIsMutedText => 'El canal està silenciat'; + + @override + String get noTitleText => 'Sense títol'; + + @override + String get letsStartChattingLabel => '¡Comencem a parlar!'; + + @override + String get sendingFirstMessageLabel => + 'Qué li sembla enviar el seu primer missatge a un amic?'; + + @override + String get startAChatLabel => 'Iniciar una conversa'; + + @override + String get loadingChannelsError => 'Error al carregar els canals'; + + @override + String get deleteConversationLabel => 'Esborrar la conversa'; + + @override + String get deleteConversationQuestion => + 'Estàs segur de que vols esborrar aquesta conversa?'; + + @override + String get streamChatLabel => 'Stream Chat'; + + @override + String get searchingForNetworkText => 'Buscant xarxa'; + + @override + String get offlineLabel => 'Sense connexió...'; + + @override + String get tryAgainLabel => 'Torna-ho a provar'; + + @override + String membersCountText(int count) { + if (count == 1) return '1 membre'; + return '$count membres'; + } + + @override + String watchersCountText(int count) { + if (count == 1) return '1 En línea'; + return '$count En línea'; + } + + @override + String get viewInfoLabel => 'Veure informació'; + + @override + String get leaveGroupLabel => 'Sortir del Grup'; + + @override + String get leaveLabel => 'SORTIR'; + + @override + String get leaveConversationLabel => 'Sortir de la conversa'; + + @override + String get leaveConversationQuestion => + "Estàs segur de que vol sortir d'aquesta conversa?"; + + @override + String get showInChatLabel => 'Mostrar al chat'; + + @override + String get saveImageLabel => 'Guardar la imatge'; + + @override + String get saveVideoLabel => 'Guardar el vídeo'; + + @override + String get uploadErrorLabel => 'ERROR DE TRANSFERENCIA'; + + @override + String get giphyLabel => 'Giphy'; + + @override + String get shuffleLabel => 'Remenar'; + + @override + String get sendLabel => 'Enviar'; + + @override + String get withText => 'amb'; + + @override + String get inText => 'a'; + + @override + String get youText => 'Vostè'; + + @override + String galleryPaginationText({ + required int currentPage, + required int totalPages, + }) => + '${currentPage + 1} de $totalPages'; + + @override + String get fileText => 'Fitxer'; + + @override + String get replyToMessageLabel => 'Respondre al missatge'; + + @override + String attachmentLimitExceedError(int limit) => + 'No és possible afegir més de $limit fitxers adjunts'; + + @override + String get viewLibrary => 'Veure llibreria'; + + @override + String get slowModeOnLabel => 'Mode lent activat'; + + @override + String get downloadLabel => 'Descarregar'; + + @override + String toggleMuteUnmuteUserText({required bool isMuted}) { + if (isMuted) { + return "Activar so de l'usuari"; + } else { + return 'Silenciar usuari'; + } + } + + @override + String toggleMuteUnmuteGroupQuestion({required bool isMuted}) { + if (isMuted) { + return "Estàs segur de que vols activar el so d'aquest grup?"; + } else { + return 'Estàs segur de que vols silenciar aquest grup?'; + } + } + + @override + String toggleMuteUnmuteUserQuestion({required bool isMuted}) { + if (isMuted) { + return "Estàs segur de que vols activar el so d'aquest usuari"; + } else { + return 'Estàs seguro de que vols silenciar aquest usuari?'; + } + } + + @override + String toggleMuteUnmuteAction({required bool isMuted}) { + if (isMuted) { + return 'ACTIVAR SO'; + } else { + return 'SILENCIAR'; + } + } + + @override + String toggleMuteUnmuteGroupText({required bool isMuted}) { + if (isMuted) { + return 'Activar so del grup'; + } else { + return 'Silenciar grup'; + } + } + + @override + String get linkDisabledDetails => + 'No es permet enviar enllaços a aquesta conversa.'; + + @override + String get linkDisabledError => 'Els enllaços estan deshabilitats'; + + @override + String unreadMessagesSeparatorText(int unreadCount) { + if (unreadCount == 1) { + return '1 missatge no llegit'; + } + return '$unreadCount missatges no llegits'; + } + + @override + String get enableFileAccessMessage => "Habiliti l'accés als fitxers" + '\nper poder compartir-los amb amics.'; + + @override + String get allowFileAccessMessage => "Permetre l'accés als fitxers"; +} 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 index 8bbf5775..40f7d52f 100644 --- a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_es.dart +++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_es.dart @@ -84,7 +84,7 @@ class StreamChatLocalizationsEs extends GlobalStreamChatLocalizations { String get messageDeletedLabel => 'Mensaje borrado'; @override - String get messageReactionsLabel => 'Reacciones a los mensajes'; + String get messageReactionsLabel => 'Reacciones de los mensajes'; @override String get emptyChatMessagesText => 'Todavía no hay charlas aquí...'; @@ -165,7 +165,7 @@ class StreamChatLocalizationsEs extends GlobalStreamChatLocalizations { @override String get enablePhotoAndVideoAccessMessage => 'Por favor, permita el acceso a sus fotos' - '\ny vídeos para que puedas compartirlos con sus amigos.'; + '\ny vídeos para que pueda compartirlos con sus amigos.'; @override String get allowGalleryAccessMessage => 'Permitir el acceso a su galería'; @@ -206,11 +206,11 @@ class StreamChatLocalizationsEs extends GlobalStreamChatLocalizations { 'La operación no pudo completarse.'; @override - String get replyLabel => 'Respuesta'; + String get replyLabel => 'Responder'; @override String togglePinUnpinText({required bool pinned}) { - if (pinned) return 'Desfijar a la conversación'; + if (pinned) return 'Desfijar de la conversación'; return 'Fijar a la conversación'; } @@ -389,14 +389,14 @@ No es posible añadir más de $limit archivos adjuntos if (isMuted) { return 'No silenciar usuario'; } else { - return 'Usuario mudo'; + return 'Silenciar usuario'; } } @override String toggleMuteUnmuteGroupQuestion({required bool isMuted}) { if (isMuted) { - return '¿Estás seguro de que quieres activar el silencio de este grupo?'; + return '¿Estás seguro de que quieres activar el sonido de este grupo?'; } else { return '¿Estás seguro de que quieres silenciar a este grupo?'; }