Merge branch 'feat/localization' of github.com:GetStream/stream-chat-flutter into feat/localization
This commit is contained in:
@@ -70,7 +70,12 @@ class MyApp extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) => MaterialApp(
|
Widget build(BuildContext context) => MaterialApp(
|
||||||
theme: ThemeData.light(),
|
theme: ThemeData.light(),
|
||||||
darkTheme: ThemeData.dark(),
|
darkTheme: ThemeData.dark(),
|
||||||
supportedLocales: const [Locale('en'), Locale('hi')],
|
supportedLocales: const [
|
||||||
|
Locale('en'),
|
||||||
|
Locale('hi'),
|
||||||
|
Locale('fr'),
|
||||||
|
Locale('it'),
|
||||||
|
],
|
||||||
localizationsDelegates: GlobalStreamChatLocalizations.delegates,
|
localizationsDelegates: GlobalStreamChatLocalizations.delegates,
|
||||||
builder: (context, widget) => StreamChat(
|
builder: (context, widget) => StreamChat(
|
||||||
client: client,
|
client: client,
|
||||||
|
|||||||
@@ -67,9 +67,9 @@ abstract class Translations {
|
|||||||
|
|
||||||
String get instantCommandsLabel;
|
String get instantCommandsLabel;
|
||||||
|
|
||||||
String get fileTooLargeAfterCompressionError;
|
String fileTooLargeAfterCompressionError(double limitInMB);
|
||||||
|
|
||||||
String get fileTooLargeError;
|
String fileTooLargeError(double limitInMB);
|
||||||
|
|
||||||
String emojiMatchingQueryText(String query);
|
String emojiMatchingQueryText(String query);
|
||||||
|
|
||||||
@@ -314,14 +314,14 @@ class DefaultTranslations implements Translations {
|
|||||||
String get instantCommandsLabel => 'Instant Commands';
|
String get instantCommandsLabel => 'Instant Commands';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get fileTooLargeAfterCompressionError =>
|
String fileTooLargeAfterCompressionError(double limitInMB) =>
|
||||||
'The file is too large to upload. '
|
'The file is too large to upload. '
|
||||||
'The file size limit is 20MB. '
|
'The file size limit is $limitInMB MB. '
|
||||||
'We tried compressing it, but it was not enough.';
|
'We tried compressing it, but it was not enough.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get fileTooLargeError =>
|
String fileTooLargeError(double limitInMB) =>
|
||||||
'The file is too large to upload. The file size limit is 20MB.';
|
'The file is too large to upload. The file size limit is $limitInMB MB.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String emojiMatchingQueryText(String query) => 'Emoji matching "$query"';
|
String emojiMatchingQueryText(String query) => 'Emoji matching "$query"';
|
||||||
|
|||||||
@@ -1144,7 +1144,9 @@ class MessageInputState extends State<MessageInput> {
|
|||||||
|
|
||||||
if (mediaInfo.filesize! > widget.maxAttachmentSize) {
|
if (mediaInfo.filesize! > widget.maxAttachmentSize) {
|
||||||
_showErrorAlert(
|
_showErrorAlert(
|
||||||
context.translations.fileTooLargeAfterCompressionError,
|
context.translations.fileTooLargeAfterCompressionError(
|
||||||
|
widget.maxAttachmentSize / (1024 * 1024),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1155,7 +1157,9 @@ class MessageInputState extends State<MessageInput> {
|
|||||||
path: mediaInfo.path,
|
path: mediaInfo.path,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
_showErrorAlert(context.translations.fileTooLargeError);
|
_showErrorAlert(context.translations.fileTooLargeError(
|
||||||
|
widget.maxAttachmentSize / (1024 * 1024),
|
||||||
|
));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1922,7 +1926,9 @@ class MessageInputState extends State<MessageInput> {
|
|||||||
|
|
||||||
if (mediaInfo.filesize! > widget.maxAttachmentSize) {
|
if (mediaInfo.filesize! > widget.maxAttachmentSize) {
|
||||||
_showErrorAlert(
|
_showErrorAlert(
|
||||||
context.translations.fileTooLargeAfterCompressionError,
|
context.translations.fileTooLargeAfterCompressionError(
|
||||||
|
widget.maxAttachmentSize / (1024 * 1024),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1933,7 +1939,9 @@ class MessageInputState extends State<MessageInput> {
|
|||||||
path: mediaInfo.path,
|
path: mediaInfo.path,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
_showErrorAlert(context.translations.fileTooLargeError);
|
_showErrorAlert(context.translations.fileTooLargeError(
|
||||||
|
widget.maxAttachmentSize / (1024 * 1024),
|
||||||
|
));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ import 'package:stream_chat_flutter/stream_chat_flutter.dart'
|
|||||||
show StreamChatLocalizations, User;
|
show StreamChatLocalizations, User;
|
||||||
|
|
||||||
part 'stream_chat_localizations_en.dart';
|
part 'stream_chat_localizations_en.dart';
|
||||||
|
part 'stream_chat_localizations_fr.dart';
|
||||||
|
part 'stream_chat_localizations_it.dart';
|
||||||
part 'stream_chat_localizations_hi.dart';
|
part 'stream_chat_localizations_hi.dart';
|
||||||
|
|
||||||
/// The set of supported languages, as language code strings.
|
/// The set of supported languages, as language code strings.
|
||||||
@@ -17,7 +18,12 @@ part 'stream_chat_localizations_hi.dart';
|
|||||||
/// See also:
|
/// See also:
|
||||||
///
|
///
|
||||||
/// * [getStreamChatTranslation], whose documentation describes these values.
|
/// * [getStreamChatTranslation], whose documentation describes these values.
|
||||||
const kStreamChatSupportedLanguages = {'en', 'hi'};
|
const kStreamChatSupportedLanguages = {
|
||||||
|
'en',
|
||||||
|
'hi',
|
||||||
|
'fr',
|
||||||
|
'it',
|
||||||
|
};
|
||||||
|
|
||||||
/// Creates a [GlobalStreamChatLocalizations] instance for the given `locale`.
|
/// Creates a [GlobalStreamChatLocalizations] instance for the given `locale`.
|
||||||
///
|
///
|
||||||
@@ -43,6 +49,10 @@ GlobalStreamChatLocalizations? getStreamChatTranslation(Locale locale) {
|
|||||||
return const StreamChatLocalizationsEn();
|
return const StreamChatLocalizationsEn();
|
||||||
case 'hi':
|
case 'hi':
|
||||||
return const StreamChatLocalizationsHi();
|
return const StreamChatLocalizationsHi();
|
||||||
|
case 'fr':
|
||||||
|
return const StreamChatLocalizationsFr();
|
||||||
|
case 'it':
|
||||||
|
return const StreamChatLocalizationsIt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,14 +115,14 @@ class StreamChatLocalizationsEn extends GlobalStreamChatLocalizations {
|
|||||||
String get instantCommandsLabel => 'Instant Commands';
|
String get instantCommandsLabel => 'Instant Commands';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get fileTooLargeAfterCompressionError =>
|
String fileTooLargeAfterCompressionError(double limitInMB) =>
|
||||||
'The file is too large to upload. '
|
'The file is too large to upload. '
|
||||||
'The file size limit is 20MB. '
|
'The file size limit is $limitInMB MB. '
|
||||||
'We tried compressing it, but it was not enough.';
|
'We tried compressing it, but it was not enough.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get fileTooLargeError =>
|
String fileTooLargeError(double limitInMB) =>
|
||||||
'The file is too large to upload. The file size limit is 20MB.';
|
'The file is too large to upload. The file size limit is $limitInMB MB.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String emojiMatchingQueryText(String query) => 'Emoji matching "$query"';
|
String emojiMatchingQueryText(String query) => 'Emoji matching "$query"';
|
||||||
|
|||||||
@@ -0,0 +1,360 @@
|
|||||||
|
part of 'stream_chat_localizations.dart';
|
||||||
|
|
||||||
|
/// The translations for English (`fr`).
|
||||||
|
class StreamChatLocalizationsFr extends GlobalStreamChatLocalizations {
|
||||||
|
/// Create an instance of the translation bundle for French.
|
||||||
|
const StreamChatLocalizationsFr({String localeName = 'fr'})
|
||||||
|
: super(localeName: localeName);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get launchUrlError => "Impossible de lancer l'url";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get loadingUsersError => 'Erreur de chargement des utilisateurs';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get noUsersLabel => "Il n'y a pas d'utilisateurs actuellement";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get retryLabel => 'Réessayer';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get userLastOnlineText => 'Dernière fois en ligne';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get userOnlineText => 'En ligne';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String userTypingText(Iterable<User> users) {
|
||||||
|
if (users.isEmpty) return '';
|
||||||
|
final first = users.first;
|
||||||
|
if (users.length == 1) {
|
||||||
|
return "${first.name} est en train d'écrire";
|
||||||
|
}
|
||||||
|
return "${first.name} and ${users.length - 1} sont entrain d'écrire";
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get threadReplyLabel => 'Réponse au fil de discussion';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get onlyVisibleToYouText => 'Seulement visible par vous';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String threadReplyCountText(int count) =>
|
||||||
|
"$count Réponses au fil de discussion";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String attachmentsUploadProgressText({
|
||||||
|
required int remaining,
|
||||||
|
required int total,
|
||||||
|
}) =>
|
||||||
|
'Uploading $remaining/$total ...';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String pinnedByUserText({
|
||||||
|
required User pinnedBy,
|
||||||
|
required User currentUser,
|
||||||
|
}) {
|
||||||
|
final pinnedByCurrentUser = currentUser.id == pinnedBy.id;
|
||||||
|
if (pinnedByCurrentUser) return 'Épinglé par vous';
|
||||||
|
return 'Épinglé par ${pinnedBy.name}';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get emptyMessagesText => "Il n'y a pas de messages actuellement";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get genericErrorText => 'Il y a eu un problème';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get loadingMessagesError => 'Erreur de chargement des messages';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String resultCountText(int count) => '$count résultats';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get messageDeletedText => 'Ce message a été supprimé.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get messageDeletedLabel => 'Message supprimé';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get messageReactionsText => 'Réactions aux messages';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get emptyChatMessagesText => 'Pas encore de chats ici...';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String threadSeparatorText(int replyCount) {
|
||||||
|
if (replyCount == 1) return '1 Réponse';
|
||||||
|
return '$replyCount Replies';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get connectedLabel => 'Connecté';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get disconnectedLabel => 'Déconnecté';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get reconnectingLabel => 'Reconnexion...';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get alsoSendAsDirectMessageLabel =>
|
||||||
|
'Envoyer aussi comme message direct';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get addACommentOrSendLabel => 'Ajouter un commentaire ou envoyer';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get searchGifLabel => 'Recherche de GIFs';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get writeAMessageLabel => 'Écrire un message';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get instantCommandsLabel => 'Commandes instantanées';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String fileTooLargeAfterCompressionError(double limitInMB) =>
|
||||||
|
'Le fichier est trop volumineux pour être téléchargé. '
|
||||||
|
'La taille maximale des fichiers est de $limitInMB Mo. '
|
||||||
|
"Nous avons essayé de le compresser, mais ce n'était pas suffisant.";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String fileTooLargeError(double limitInMB) =>
|
||||||
|
'Le fichier est trop volumineux pour être téléchargé. La taille limite du fichier est de $limitInMB Mo.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String emojiMatchingQueryText(String query) =>
|
||||||
|
'Emoji qui correspond à "$query"';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get addAFileLabel => 'Ajouter un fichier';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get photoFromCameraLabel => "Photo de l'appareil photo";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uploadAFileLabel => 'Transférer un fichier';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uploadAPhotoLabel => 'Transférer une photo';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uploadAVideoLabel => 'Transférer une vidéo';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get videoFromCameraLabel => 'Vidéo depuis la camera';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get okLabel => 'OK';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get somethingWentWrongLabel => 'Quelque chose a mal tourné';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get addMoreFilesLabel => "Ajouter d'autres fichiers";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get enablePhotoAndVideoAccessMessage =>
|
||||||
|
"Veuillez autoriser l'accès à vos photos"
|
||||||
|
'\net vidéos afin de pouvoir les partager avec vos amis.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get allowGalleryAccessMessage => "Autoriser l'accès à votre galerie";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get flagMessageLabel => 'Signaler un message';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get flagMessageQuestion =>
|
||||||
|
'Voulez-vous envoyer une copie de ce message à un'
|
||||||
|
'\nmodérateur pour une enquête plus approfondie ?';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get flagLabel => 'SIGNALER';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get cancelLabel => 'ANNULER';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get flagMessageSuccessfulLabel => 'Message signalé';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get flagMessageSuccessfulText =>
|
||||||
|
'Ce message a été signalé à un modérateur.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get deleteLabel => 'SUPPRIMER';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get deleteMessageLabel => 'Supprimer le message';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get deleteMessageQuestion =>
|
||||||
|
'Êtes-vous sûr de vouloir supprimer définitivement ce\nmessage ?';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get operationCouldNotBeCompletedText =>
|
||||||
|
"L'opération n'a pas pu être terminée.";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get replyLabel => 'Répondre';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String togglePinUnpinText({required bool pinned}) {
|
||||||
|
if (pinned) return 'Détacher de la conversation';
|
||||||
|
return 'Attacher à la conversation';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toggleDeleteRetryDeleteMessageText({required bool isDeleteFailed}) {
|
||||||
|
if (isDeleteFailed) return 'Retenter de supprimer le message';
|
||||||
|
return 'Supprimer le message';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get copyMessageLabel => 'Copier le message';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get editMessageLabel => 'Modifier le message';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toggleResendOrResendEditedMessage({required bool isUpdateFailed}) {
|
||||||
|
if (isUpdateFailed) return 'Renvoyer le message modifié';
|
||||||
|
return 'Renvoyer';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get photosLabel => 'Photos';
|
||||||
|
|
||||||
|
String _getDay(DateTime dateTime) {
|
||||||
|
final now = Jiffy(DateTime.now());
|
||||||
|
final date = Jiffy(dateTime);
|
||||||
|
|
||||||
|
if (date.isSame(now, Units.DAY)) {
|
||||||
|
return "aujourd'hui";
|
||||||
|
} else if (now.diff(date, Units.HOUR) < 24) {
|
||||||
|
return 'hier';
|
||||||
|
} else {
|
||||||
|
return 'le ${date.MMMd}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String sentAtText({required DateTime date, required DateTime time}) =>
|
||||||
|
'Envoyé ${_getDay(date)} à ${Jiffy(time.toLocal()).format('HH:mm')}';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get todayLabel => "Aujourd'hui";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get yesterdayLabel => 'Hier';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get channelIsMutedText => 'Le canal est coupé';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get noTitleText => 'Aucun titre';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get letsStartChattingLabel => 'Commençons à discuter !';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get sendingFirstMessageLabel =>
|
||||||
|
"Que diriez-vous d'envoyer votre premier message à un ami ?";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get startAChatLabel => 'Commencer une discussion';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get loadingChannelsError => 'Erreur lors du chargement des canaux';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get deleteConversationLabel => 'Supprimer la conversation';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get deleteConversationQuestion =>
|
||||||
|
'Vous êtes sûr de vouloir supprimer cette conversation ?';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streamChatLabel => 'Stream Chat';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get searchingForNetworkLabel => 'Recherche de réseau';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get offlineLabel => 'Hors ligne...';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get tryAgainLabel => 'Essayer à nouveau';
|
||||||
|
|
||||||
|
@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 ligne';
|
||||||
|
return '$count En ligne';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get viewInfoLabel => 'Voir les informations';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get leaveGroupLabel => 'Quitter le Group';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get leaveLabel => 'QUITTER';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get leaveConversationLabel => 'Quitter la conversation';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get leaveConversationQuestion =>
|
||||||
|
'Etes-vous sûr de vouloir quitter cette conversation ?';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get showInChatLabel => 'Montrer dans le Chat';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get saveImageLabel => "Sauvegarder l'image";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get saveVideoLabel => 'Sauvegarder la vidéo';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uploadErrorLabel => 'ERREUR DE TRANSFERT';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get giphyLabel => 'Giphy';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get shuffleLabel => 'Mélanger';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get sendLabel => 'Envoyer';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get withText => 'avec';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get inText => 'dans';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get youText => 'Vous';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get ofText => 'de';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get fileText => 'Fichier';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get replyToMessageLabel => 'Répondre au Message';
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
part of 'stream_chat_localizations.dart';
|
part of 'stream_chat_localizations.dart';
|
||||||
|
|
||||||
/// The translations for English (`hi`).
|
/// The translations for Hindi (`hi`).
|
||||||
class StreamChatLocalizationsHi extends GlobalStreamChatLocalizations {
|
class StreamChatLocalizationsHi extends GlobalStreamChatLocalizations {
|
||||||
/// Create an instance of the translation bundle for Hindi.
|
/// Create an instance of the translation bundle for Hindi.
|
||||||
const StreamChatLocalizationsHi({String localeName = 'hi'})
|
const StreamChatLocalizationsHi({String localeName = 'hi'})
|
||||||
@@ -115,14 +115,14 @@ class StreamChatLocalizationsHi extends GlobalStreamChatLocalizations {
|
|||||||
String get instantCommandsLabel => 'तत्काल आदेश';
|
String get instantCommandsLabel => 'तत्काल आदेश';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get fileTooLargeAfterCompressionError =>
|
String fileTooLargeAfterCompressionError(double limitInMB) =>
|
||||||
'फ़ाइल अपलोड करने के लिए बहुत बड़ी है। '
|
'फ़ाइल अपलोड करने के लिए बहुत बड़ी है। '
|
||||||
'फ़ाइल आकार सीमा 20MB है। '
|
'फ़ाइल आकार सीमा $limitInMB MB है। '
|
||||||
'हमने इसे कंप्रेस करने की कोशिश की, लेकिन यह काफी नहीं था।';
|
'हमने इसे कंप्रेस करने की कोशिश की, लेकिन यह काफी नहीं था।';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get fileTooLargeError =>
|
String fileTooLargeError(double limitInMB) =>
|
||||||
'फ़ाइल अपलोड करने के लिए बहुत बड़ी है। फ़ाइल आकार सीमा 20MB है।';
|
'फ़ाइल अपलोड करने के लिए बहुत बड़ी है। फ़ाइल आकार सीमा $limitInMB MB है।';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String emojiMatchingQueryText(String query) => '"$query" से मिलते हुए इमोजी';
|
String emojiMatchingQueryText(String query) => '"$query" से मिलते हुए इमोजी';
|
||||||
|
|||||||
@@ -0,0 +1,358 @@
|
|||||||
|
part of 'stream_chat_localizations.dart';
|
||||||
|
|
||||||
|
/// The translations for English (`hi`).
|
||||||
|
class StreamChatLocalizationsIt extends GlobalStreamChatLocalizations {
|
||||||
|
/// Create an instance of the translation bundle for Hindi.
|
||||||
|
const StreamChatLocalizationsIt({String localeName = 'it'})
|
||||||
|
: super(localeName: localeName);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get launchUrlError => 'Impossibile aprire l\'url';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get loadingUsersError => 'Errore durante il carimento degli utenti';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get noUsersLabel => 'Non c\'é nessun utente al momento';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get retryLabel => 'Riprova';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get userLastOnlineText => 'Ultimo accesso';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get userOnlineText => 'Online';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String userTypingText(Iterable<User> users) {
|
||||||
|
if (users.isEmpty) return '';
|
||||||
|
final first = users.first;
|
||||||
|
if (users.length == 1) {
|
||||||
|
return '${first.name} sta scrivendo';
|
||||||
|
}
|
||||||
|
return '${first.name} e altri ${users.length - 1} stanno scrivendo';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get threadReplyLabel => 'Rispondi nel thread';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get onlyVisibleToYouText => 'Visible solo a te';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String threadReplyCountText(int count) => '$count risposte al thread';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String attachmentsUploadProgressText({
|
||||||
|
required int remaining,
|
||||||
|
required int total,
|
||||||
|
}) =>
|
||||||
|
'Caricamento $remaining/$total ...';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String pinnedByUserText({
|
||||||
|
required User pinnedBy,
|
||||||
|
required User currentUser,
|
||||||
|
}) {
|
||||||
|
final pinnedByCurrentUser = currentUser.id == pinnedBy.id;
|
||||||
|
if (pinnedByCurrentUser) return 'Messo in evidenza da te';
|
||||||
|
return 'Messo in evidenza da ${pinnedBy.name}';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get emptyMessagesText => 'Non c\'é nessun messaggio al momento';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get genericErrorText => 'Qualcosa è andato storto';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get loadingMessagesError =>
|
||||||
|
'Errore durante il caricamento dei messaggi';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String resultCountText(int count) => '$count risultati';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get messageDeletedText => 'Questo messaggio è stato eliminato';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get messageDeletedLabel => 'Messaggio cancellato';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get messageReactionsText => 'Reazioni al messaggio';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get emptyChatMessagesText => 'Nessuna conversazione al momento...';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String threadSeparatorText(int replyCount) {
|
||||||
|
if (replyCount == 1) return '1 risposta';
|
||||||
|
return '$replyCount risposte';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get connectedLabel => 'Connesso';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get disconnectedLabel => 'Disconnesso';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get reconnectingLabel => 'Riconnessione in corso...';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get alsoSendAsDirectMessageLabel =>
|
||||||
|
'Manda anche come messaggio diretto';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get addACommentOrSendLabel => 'Aggiungi un commento o invia';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get searchGifLabel => 'Cerca una GIF';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get writeAMessageLabel => 'Scrivi un messaggio';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get instantCommandsLabel => 'Commandi istantanei';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String fileTooLargeAfterCompressionError(double limitInMB) =>
|
||||||
|
'Il file è troppo grande per essere caricato. '
|
||||||
|
'Il file eccede il limite di $limitInMB MB. '
|
||||||
|
'Abbiamo provato a comprimerlo, ma non è stato abbastanza.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String fileTooLargeError(double limitInMB) => '''
|
||||||
|
Il file è troppo grande per essere caricato. Il limite è di $limitInMB MB.''';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String emojiMatchingQueryText(String query) => 'Emoji per "$query"';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get addAFileLabel => 'Aggiungi un file';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get photoFromCameraLabel => 'Immagine dalla fotocamera';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uploadAFileLabel => 'Carica un file';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uploadAPhotoLabel => 'Carica una foto';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uploadAVideoLabel => 'Carica un video';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get videoFromCameraLabel => 'Video dalla fotocamera';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get okLabel => 'Ok';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get somethingWentWrongLabel => 'Qualcosa è andato storto';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get addMoreFilesLabel => 'Aggiungi altri file';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get enablePhotoAndVideoAccessMessage =>
|
||||||
|
'Per favore attiva l\'accesso alle foto'
|
||||||
|
'\ne ai video cosí potrai condividerli con i tuoi amici.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get allowGalleryAccessMessage => 'Permetti l\'accesso alla galleria';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get flagMessageLabel => 'Segnala messaggio';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get flagMessageQuestion => 'Vuoi mandare una copia di questo messaggio'
|
||||||
|
'\nad un moderatore?';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get flagLabel => 'SEGNALA';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get cancelLabel => 'ANNULLA';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get flagMessageSuccessfulLabel => 'Messaggio segnalato';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get flagMessageSuccessfulText =>
|
||||||
|
'Questo messaggio è stato segnalato ad un moderatore.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get deleteLabel => 'CANCELLA';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get deleteMessageLabel => 'Cancella messaggio';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get deleteMessageQuestion =>
|
||||||
|
'Sei sicuro di voler definitivamente cancellare questo\nmessaggio?';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get operationCouldNotBeCompletedText =>
|
||||||
|
'Non è stato possibile completare questa operazione.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get replyLabel => 'Rispondi';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String togglePinUnpinText({required bool pinned}) {
|
||||||
|
if (pinned) return 'Rimuovi dagli elementi in evidenza';
|
||||||
|
return 'Metti in evidenza';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toggleDeleteRetryDeleteMessageText({required bool isDeleteFailed}) {
|
||||||
|
if (isDeleteFailed) return 'Riprova a cancellare il messaggio';
|
||||||
|
return 'Cancella il messaggio';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get copyMessageLabel => 'Copia messaggio';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get editMessageLabel => 'Modifica messaggio';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toggleResendOrResendEditedMessage({required bool isUpdateFailed}) {
|
||||||
|
if (isUpdateFailed) return 'Riprova modifica messaggio';
|
||||||
|
return 'Riprova';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get photosLabel => 'Foto';
|
||||||
|
|
||||||
|
String _getDay(DateTime dateTime) {
|
||||||
|
final now = Jiffy(DateTime.now());
|
||||||
|
final date = Jiffy(dateTime);
|
||||||
|
|
||||||
|
if (date.isSame(now, Units.DAY)) {
|
||||||
|
return 'oggi';
|
||||||
|
} else if (now.diff(date, Units.HOUR) < 24) {
|
||||||
|
return 'ieri';
|
||||||
|
} else {
|
||||||
|
return 'il ${date.MMMd}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String sentAtText({required DateTime date, required DateTime time}) => '''
|
||||||
|
Inviato il ${_getDay(date)} alle ${Jiffy(time.toLocal()).format('HH:mm')}''';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get todayLabel => 'Oggi';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get yesterdayLabel => 'Ieri';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get channelIsMutedText => 'Il canale è mutato';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get noTitleText => 'Nessun titolo';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get letsStartChattingLabel => 'Inizia una conversazione!';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get sendingFirstMessageLabel =>
|
||||||
|
'Che ne dici di mandare il tuo primo messaggio ad un amico?';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get startAChatLabel => 'Inizia una conversazione';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get loadingChannelsError => 'Errore durante il caricamento dei canali';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get deleteConversationLabel => 'Elemina conversazione';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get deleteConversationQuestion =>
|
||||||
|
'Sei sicuro di voler eliminare questa conversazione?';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streamChatLabel => 'Stream Chat';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get searchingForNetworkLabel => 'Cercando una connessione';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get offlineLabel => 'Offline...';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get tryAgainLabel => 'Riprova';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String membersCountText(int count) {
|
||||||
|
if (count == 1) return '1 membro';
|
||||||
|
return '$count membri';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String watchersCountText(int count) {
|
||||||
|
if (count == 1) return '1 Online';
|
||||||
|
return '$count Online';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get viewInfoLabel => 'Vedi info';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get leaveGroupLabel => 'Esci dal gruppo';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get leaveLabel => 'ESCI';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get leaveConversationLabel => 'Esci dalla conversazione';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get leaveConversationQuestion =>
|
||||||
|
'Sei sicuro di voler lasciare questa conversazione?';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get showInChatLabel => 'Mostra nella chat';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get saveImageLabel => 'Salva immagine';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get saveVideoLabel => 'Salva video';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uploadErrorLabel => 'ERRORE DURANTE IL CARICAMENTO';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get giphyLabel => 'Giphy';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get shuffleLabel => 'Shuffle';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get sendLabel => 'Invia';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get withText => 'con';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get inText => 'in';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get youText => 'te';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get ofText => 'di';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get fileText => 'file';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get replyToMessageLabel => 'Rispondi al messaggio';
|
||||||
|
}
|
||||||
@@ -12,8 +12,7 @@ dependencies:
|
|||||||
sdk: flutter
|
sdk: flutter
|
||||||
flutter_localizations:
|
flutter_localizations:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
stream_chat_flutter:
|
stream_chat_flutter: ^2.0.0
|
||||||
path: ../stream_chat_flutter
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in New Issue
Block a user