diff --git a/docusaurus/docs/Flutter/guides/adding_localization.mdx b/docusaurus/docs/Flutter/guides/adding_localization.mdx
index 8ecc0cce..4ad5eede 100644
--- a/docusaurus/docs/Flutter/guides/adding_localization.mdx
+++ b/docusaurus/docs/Flutter/guides/adding_localization.mdx
@@ -26,7 +26,8 @@ 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)
-
+- [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)
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.
### Add dependency
@@ -64,6 +65,8 @@ class MyApp extends StatelessWidget {
Locale('fr'),
Locale('it'),
Locale('es'),
+ Locale('ja'),
+ Locale('ko'),
],
// Add GlobalStreamChatLocalizations.delegates
localizationsDelegates: GlobalStreamChatLocalizations.delegates,
@@ -133,6 +136,8 @@ Here is an example of how that would look like:
Locale('fr'),
Locale('it'),
Locale('es'),
+ Locale('ja'),
+ Locale('ko'),
],
// locales are the locales of the device
// supportedLocales are the app supported locales
@@ -175,6 +180,8 @@ Example:
nb
fr
it
- es
+ es
+ ja
+ ko
```
diff --git a/packages/stream_chat_flutter/lib/src/gallery_footer.dart b/packages/stream_chat_flutter/lib/src/gallery_footer.dart
index 365368ac..2b2858f8 100644
--- a/packages/stream_chat_flutter/lib/src/gallery_footer.dart
+++ b/packages/stream_chat_flutter/lib/src/gallery_footer.dart
@@ -142,9 +142,9 @@ class _GalleryFooterState extends State {
mainAxisSize: MainAxisSize.min,
children: [
Text(
- '${widget.currentPage + 1} '
- '${context.translations.ofText} '
- '${widget.totalPages}',
+ context.translations.galleryPaginationText(
+ currentPage: widget.currentPage,
+ totalPages: widget.totalPages),
style: galleryFooterThemeData.titleTextStyle,
),
],
diff --git a/packages/stream_chat_flutter/lib/src/localization/translations.dart b/packages/stream_chat_flutter/lib/src/localization/translations.dart
index d6e5add0..d3b3e8cb 100644
--- a/packages/stream_chat_flutter/lib/src/localization/translations.dart
+++ b/packages/stream_chat_flutter/lib/src/localization/translations.dart
@@ -296,8 +296,9 @@ abstract class Translations {
/// The text shown for "You"
String get youText;
- /// The text shown for "Of"
- String get ofText;
+ /// Gallery footer pagination text
+ String galleryPaginationText(
+ {required int currentPage, required int totalPages});
/// The text shown for "File"
String get fileText;
@@ -657,7 +658,9 @@ class DefaultTranslations implements Translations {
String get youText => 'You';
@override
- String get ofText => 'of';
+ String galleryPaginationText(
+ {required int currentPage, required int totalPages}) =>
+ '${currentPage + 1} of $totalPages';
@override
String get fileText => 'File';
diff --git a/packages/stream_chat_flutter/test/src/default_translations_test.dart b/packages/stream_chat_flutter/test/src/default_translations_test.dart
index e78c0115..14a4a318 100644
--- a/packages/stream_chat_flutter/test/src/default_translations_test.dart
+++ b/packages/stream_chat_flutter/test/src/default_translations_test.dart
@@ -167,7 +167,7 @@ void main() {
expect(translations.withText, isNotNull);
expect(translations.inText, isNotNull);
expect(translations.youText, isNotNull);
- expect(translations.ofText, isNotNull);
+ expect(translations.galleryPaginationText, isNotNull);
expect(translations.fileText, isNotNull);
expect(translations.replyToMessageLabel, isNotNull);
});
diff --git a/packages/stream_chat_localizations/CHANGELOG.md b/packages/stream_chat_localizations/CHANGELOG.md
index 0845fa05..d718ce12 100644
--- a/packages/stream_chat_localizations/CHANGELOG.md
+++ b/packages/stream_chat_localizations/CHANGELOG.md
@@ -2,9 +2,9 @@
โ
Added
-* 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.
+* 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.
+* Added support for [Korean](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ko.dart) locale.
+* Added support for [Japanese](https://github.com/GetStream/stream-chat-flutter/blob/master/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ja.dart) locale.
๐ Changed
@@ -13,7 +13,7 @@
- 'เคคเคธเฅเคตเฅเคฐเฅเค' -> 'เฅเฅเคเฅเค'
- 'เคฌเคฟเคคเคพ เคนเฅเค เคเคฒ' -> 'เคเคฒ'
- 'เคเฅเคจเคฒ เคฎเฅเคจ เคนเฅ' -> 'เคเฅเคจเคฒ เคฎเฅเคฏเฅเค เคนเฅ'
-
+
## 1.0.2
* Updated `stream_chat_flutter` dependency
diff --git a/packages/stream_chat_localizations/README.md b/packages/stream_chat_localizations/README.md
index c2ea8a72..131d6b13 100644
--- a/packages/stream_chat_localizations/README.md
+++ b/packages/stream_chat_localizations/README.md
@@ -35,6 +35,8 @@ 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)
+- [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)
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.
@@ -70,6 +72,8 @@ class MyApp extends StatelessWidget {
Locale('fr'),
Locale('it'),
Locale('es'),
+ Locale('ja'),
+ Locale('ko'),
],
// Add GlobalStreamChatLocalizations.delegates
localizationsDelegates: GlobalStreamChatLocalizations.delegates,
@@ -113,6 +117,8 @@ Example:
fr
it
es
+ ja
+ ko
```
diff --git a/packages/stream_chat_localizations/example/lib/add_new_lang.dart b/packages/stream_chat_localizations/example/lib/add_new_lang.dart
index 8a1d196e..1efe6c95 100644
--- a/packages/stream_chat_localizations/example/lib/add_new_lang.dart
+++ b/packages/stream_chat_localizations/example/lib/add_new_lang.dart
@@ -374,7 +374,9 @@ class NnStreamChatLocalizations extends GlobalStreamChatLocalizations {
String get youText => 'You';
@override
- String get ofText => 'of';
+ String galleryPaginationText(
+ {required int currentPage, required int totalPages}) =>
+ '$currentPage of $totalPages';
@override
String get fileText => 'File';
@@ -453,6 +455,9 @@ class MyApp extends StatelessWidget {
Locale('hi'),
Locale('fr'),
Locale('it'),
+ Locale('es'),
+ Locale('ja'),
+ Locale('ko'),
// Add support for additional 'nn' locale
Locale('nn'),
],
diff --git a/packages/stream_chat_localizations/example/lib/main.dart b/packages/stream_chat_localizations/example/lib/main.dart
index c99a4c6c..c71ceb01 100644
--- a/packages/stream_chat_localizations/example/lib/main.dart
+++ b/packages/stream_chat_localizations/example/lib/main.dart
@@ -72,6 +72,9 @@ class MyApp extends StatelessWidget {
Locale('hi'),
Locale('fr'),
Locale('it'),
+ Locale('es'),
+ Locale('ja'),
+ Locale('ko'),
],
// Add GlobalStreamChatLocalizations.delegates
localizationsDelegates: GlobalStreamChatLocalizations.delegates,
diff --git a/packages/stream_chat_localizations/example/lib/override_lang.dart b/packages/stream_chat_localizations/example/lib/override_lang.dart
index 5be8f9a6..a52fcf9f 100644
--- a/packages/stream_chat_localizations/example/lib/override_lang.dart
+++ b/packages/stream_chat_localizations/example/lib/override_lang.dart
@@ -97,6 +97,9 @@ class MyApp extends StatelessWidget {
Locale('hi'),
Locale('fr'),
Locale('it'),
+ Locale('es'),
+ Locale('ja'),
+ Locale('ko'),
],
// Add overridden "CustomStreamChatLocalizationsEn.delegate" along with
// "GlobalStreamChatLocalizations.delegates"
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 a6a66b93..4094dcaa 100644
--- a/packages/stream_chat_localizations/lib/src/stream_chat_localizations.dart
+++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations.dart
@@ -11,6 +11,10 @@ part 'stream_chat_localizations_fr.dart';
part 'stream_chat_localizations_it.dart';
+part 'stream_chat_localizations_ja.dart';
+
+part 'stream_chat_localizations_ko.dart';
+
part 'stream_chat_localizations_hi.dart';
/// The set of supported languages, as language code strings.
@@ -27,6 +31,8 @@ const kStreamChatSupportedLanguages = {
'fr',
'it',
'es',
+ 'ja',
+ 'ko'
};
/// Creates a [GlobalStreamChatLocalizations] instance for the given `locale`.
@@ -59,6 +65,10 @@ GlobalStreamChatLocalizations? getStreamChatTranslation(Locale locale) {
return const StreamChatLocalizationsIt();
case 'es':
return const StreamChatLocalizationsEs();
+ case 'ja':
+ return const StreamChatLocalizationsJa();
+ case 'ko':
+ return const StreamChatLocalizationsKo();
}
}
diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_en.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_en.dart
index 5041d398..13de9729 100644
--- a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_en.dart
+++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_en.dart
@@ -350,7 +350,9 @@ class StreamChatLocalizationsEn extends GlobalStreamChatLocalizations {
String get youText => 'You';
@override
- String get ofText => 'of';
+ String galleryPaginationText(
+ {required int currentPage, required int totalPages}) =>
+ '${currentPage + 1} of $totalPages';
@override
String get fileText => 'File';
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 b43e4ba8..7082ebf0 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
@@ -355,7 +355,9 @@ class StreamChatLocalizationsEs extends GlobalStreamChatLocalizations {
String get youText => 'Usted';
@override
- String get ofText => 'de';
+ String galleryPaginationText(
+ {required int currentPage, required int totalPages}) =>
+ '${currentPage + 1} de $totalPages';
@override
String get fileText => 'Archivo';
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 9d8586d5..2331b522 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
@@ -207,7 +207,7 @@ class StreamChatLocalizationsFr extends GlobalStreamChatLocalizations {
@override
String togglePinUnpinText({required bool pinned}) {
if (pinned) return 'Dรฉcrocher de la conversation';
- return 'รpingler ร la discussion';
+ return 'รpingler ร la conversation';
}
@override
@@ -354,7 +354,9 @@ class StreamChatLocalizationsFr extends GlobalStreamChatLocalizations {
String get youText => 'Vous';
@override
- String get ofText => 'de';
+ String galleryPaginationText(
+ {required int currentPage, required int totalPages}) =>
+ '${currentPage + 1} de $totalPages';
@override
String get fileText => 'Fichier';
diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_hi.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_hi.dart
index 7d7f54d2..975e8097 100644
--- a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_hi.dart
+++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_hi.dart
@@ -340,16 +340,18 @@ class StreamChatLocalizationsHi extends GlobalStreamChatLocalizations {
String get sendLabel => 'เคญเฅเคเฅเค';
@override
- String get withText => 'เคตเคฟเคฆ';
+ String get withText => 'เคตเคฟเคฆ'; //TODO: break?
@override
- String get inText => 'เคเคจ';
+ String get inText => 'เคเคจ'; //TODO: break?
@override
String get youText => 'เคเคช';
@override
- String get ofText => 'เคเฅ';
+ String galleryPaginationText(
+ {required int currentPage, required int totalPages}) =>
+ '${currentPage + 1} เคเคซเคผ $totalPages';
@override
String get fileText => 'เคซเคผเคพเคเคฒ';
diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_it.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_it.dart
index 8b2e1692..313e1e26 100644
--- a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_it.dart
+++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_it.dart
@@ -351,7 +351,9 @@ Il file รจ troppo grande per essere caricato. Il limite รจ di $limitInMB MB.''';
String get youText => 'te';
@override
- String get ofText => 'di';
+ String galleryPaginationText(
+ {required int currentPage, required int totalPages}) =>
+ '${currentPage + 1} di $totalPages';
@override
String get fileText => 'file';
diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ja.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ja.dart
new file mode 100644
index 00000000..e6946125
--- /dev/null
+++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ja.dart
@@ -0,0 +1,349 @@
+part of 'stream_chat_localizations.dart';
+
+/// The translations for Japanese (`ja`).
+class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations {
+ /// Create an instance of the translation bundle for Japanese.
+ const StreamChatLocalizationsJa({String localeName = 'ja'})
+ : super(localeName: localeName);
+
+ @override
+ String get launchUrlError => 'URLใฎ่ตทๅใใงใใพใใ';
+
+ @override
+ String get loadingUsersError => 'ใฆใผใถใผใฎ่ชญใฟ่พผใฟใใงใใพใใ';
+
+ @override
+ String get noUsersLabel => '็พๅจใใฆใผใถใผใฏใใพใใใ';
+
+ @override
+ String get retryLabel => 'ๅ่ฉฆ่ก';
+
+ @override
+ String get userLastOnlineText => 'ๅๅใฎใชใณใฉใคใณ';
+
+ @override
+ String get userOnlineText => 'ใชใณใฉใคใณ';
+
+ @override
+ String userTypingText(Iterable users) {
+ if (users.isEmpty) return '';
+ final first = users.first;
+ if (users.length == 1) {
+ return '${first.name}ใๅ
ฅๅใใฆใใพใ';
+ }
+ return '${first.name}ใจ${users.length - 1}ไบบใๅ
ฅๅใใฆใใพใ';
+ }
+
+ @override
+ String get threadReplyLabel => 'ในใฌใใ่ฟไฟก';
+
+ @override
+ String get onlyVisibleToYouText => '่ชๅใใ่ฆใใพใใ';
+
+ @override
+ String threadReplyCountText(int count) => '$countใคใฎในใฌใใ่ฟไฟก';
+
+ @override
+ String attachmentsUploadProgressText({
+ required int remaining,
+ required int total,
+ }) =>
+ '$remaining/${total}mbใฎใขใใใญใผใไธญ ใใใ';
+
+ @override
+ String pinnedByUserText({
+ required User pinnedBy,
+ required User currentUser,
+ }) {
+ final pinnedByCurrentUser = currentUser.id == pinnedBy.id;
+ if (pinnedByCurrentUser) return 'ใใชใใฎใใณ';
+ return '${pinnedBy.name}ใฎใใณ';
+ }
+
+ @override
+ String get emptyMessagesText => '็พๅจใใกใใปใผใธใฏใใใพใใใ';
+
+ @override
+ String get genericErrorText => 'ใจใฉใผใ็บ็ใใพใใ';
+
+ @override
+ String get loadingMessagesError => 'ใกใใปใผใธใฎ่ชญใฟ่พผใฟใจใฉใผ';
+
+ @override
+ String resultCountText(int count) => '$countไปถใฎ็ตๆ';
+
+ @override
+ String get messageDeletedText => 'ใใฎใกใใปใผใธใฏๅ้คใใใพใใใ';
+
+ @override
+ String get messageDeletedLabel => 'ใกใใปใผใธๅ้ค';
+
+ @override
+ String get messageReactionsLabel => 'ใกใใปใผใธใฎใชใขใฏใทใงใณ';
+
+ @override
+ String get emptyChatMessagesText => 'ใใฃใใใใใใพใใใใใใ';
+
+ @override
+ String threadSeparatorText(int replyCount) => '$replyCountไปถใฎ่ฟไฟก';
+
+ @override
+ String get connectedLabel => 'ๆฅ็ถใใฆใใพใ';
+
+ @override
+ String get disconnectedLabel => 'ๆฅ็ถๅใ';
+
+ @override
+ String get reconnectingLabel => 'ๅๆฅ็ถไธญใใใ';
+
+ @override
+ String get alsoSendAsDirectMessageLabel => 'ใใคใฌใฏใใกใใปใผใธใงใ้ไฟก';
+
+ @override
+ String get addACommentOrSendLabel => 'ใณใกใณใใฎ่ฟฝๅ ใ้ไฟก';
+
+ @override
+ String get searchGifLabel => 'GIFใฎๆค็ดข';
+
+ @override
+ String get writeAMessageLabel => 'ใกใใปใผใธใๆธใ';
+
+ @override
+ String get instantCommandsLabel => 'ใคใณในใฟใณใใณใใณใ';
+
+ @override
+ String fileTooLargeAfterCompressionError(double limitInMB) =>
+ 'ใใกใคใซใฎใตใคใบใๅคงใใใใฆใขใใใญใผใใงใใพใใใ'
+ 'ใใกใคใซใตใคใบใฎๅถ้ใฏ${limitInMB}MBใงใใ'
+ 'ๅง็ธฎใใฆใฟใพใใใใๅๅใงใฏใใใพใใใงใใใ';
+
+ @override
+ String fileTooLargeError(double limitInMB) =>
+ 'ใใกใคใซใๅคงใใใใฆใขใใใญใผใใงใใพใใใใใกใคใซใตใคใบใฎๅถ้ใฏ${limitInMB}MBใงใใ';
+
+ @override
+ String emojiMatchingQueryText(String query) => 'ใ"$query"ใใจใๆใใฎ็ตตๆๅญ';
+
+ @override
+ String get addAFileLabel => 'ใใกใคใซใฎ่ฟฝๅ ';
+
+ @override
+ String get photoFromCameraLabel => 'ใซใกใฉใใใฎๅ็';
+
+ @override
+ String get uploadAFileLabel => 'ใใกใคใซใฎใขใใใญใผใ';
+
+ @override
+ String get uploadAPhotoLabel => 'ๅ็ใฎใขใใใญใผใ';
+
+ @override
+ String get uploadAVideoLabel => 'ๅ็ปใฎใขใใใญใผใ';
+
+ @override
+ String get videoFromCameraLabel => 'ใซใกใฉใใใฎๅ็ป';
+
+ @override
+ String get okLabel => 'ใใ';
+
+ @override
+ String get somethingWentWrongError => 'ใจใฉใผใ็บ็ใใพใใ';
+
+ @override
+ String get addMoreFilesLabel => 'ใใกใคใซใฎ่ฟฝๅ ';
+
+ @override
+ String get enablePhotoAndVideoAccessMessage => 'ใๅ้ใจๅ
ฑๆใงใใใใใซใๅ็'
+ '\nใใใใชใธใฎใขใฏใปในใๆๅนใซใใฆใใ ใใใ';
+ @override
+ String get allowGalleryAccessMessage => 'ใฎใฃใฉใชใผใธใฎใขใฏใปในใ่จฑๅฏใใ';
+
+ @override
+ String get flagMessageLabel => 'ใกใใปใผใธใใใฉใฐใใ';
+
+ @override
+ String get flagMessageQuestion => 'ใใฎใกใใปใผใธใฎใณใใผใ'
+ '\nใขใใฌใผใฟใผใซ้ใฃใฆใใใใซ่ชฟๆปใใฆใใใใพใใ๏ผ';
+
+ @override
+ String get flagLabel => 'ใใฉใฐใใ';
+
+ @override
+ String get cancelLabel => 'ใญใฃใณใปใซ';
+
+ @override
+ String get flagMessageSuccessfulLabel => 'ใกใใปใผใธใซใใฉใฐใไปใใใใพใใ';
+
+ @override
+ String get flagMessageSuccessfulText => 'ใใฎใกใใปใผใธใฏใขใใฌใผใฟใผใซๅ ฑๅใใใพใใใ';
+
+ @override
+ String get deleteLabel => 'ๅ้ค';
+
+ @override
+ String get deleteMessageLabel => 'ใกใใปใผใธใๅ้คใใ ';
+
+ @override
+ String get deleteMessageQuestion => 'ใใฎใกใใปใผใธ'
+ '\nใๅฎๅ
จใซๅ้คใใฆใใใใใใงใใ๏ผ';
+
+ @override
+ String get operationCouldNotBeCompletedText => 'ๆไฝใๅฎไบใงใใพใใใงใใใ';
+
+ @override
+ String get replyLabel => '่ฟไฟก';
+
+ @override
+ String togglePinUnpinText({required bool pinned}) {
+ if (pinned) return 'ไผ่ฉฑใฎใใณใๅคใ';
+ return 'ไผ่ฉฑใซใใณใใ';
+ }
+
+ @override
+ String toggleDeleteRetryDeleteMessageText({required bool isDeleteFailed}) {
+ if (isDeleteFailed) return 'ใกใใปใผใธใฎๅ้คใๅ่ฉฆ่กใใ';
+ return 'ใกใใปใผใธใๅ้คใใ';
+ }
+
+ @override
+ String get copyMessageLabel => 'ใกใใปใผใธใใณใใผใใ';
+
+ @override
+ String get editMessageLabel => 'ใกใใปใผใธใ็ทจ้ใใ';
+
+ @override
+ String toggleResendOrResendEditedMessage({required bool isUpdateFailed}) {
+ if (isUpdateFailed) return '็ทจ้ใใใกใใปใผใธใๅ้ใใ';
+ return 'ๅ้';
+ }
+
+ @override
+ String get photosLabel => 'ๅ็';
+
+ 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 'ไปๆฅ';
+ } else if (date == yesterday) {
+ return 'ๆจๆฅ';
+ } else {
+ return '${Jiffy(date).MMMd}ใซ';
+ }
+ }
+
+ @override
+ String sentAtText({required DateTime date, required DateTime time}) =>
+ '${_getDay(date)}ใฎ${Jiffy(time.toLocal()).format('HH:mm')}ใซ้ไฟกใใพใใ ';
+
+ @override
+ String get todayLabel => 'ไปๆฅ';
+
+ @override
+ String get yesterdayLabel => 'ๆจๆฅ';
+
+ @override
+ String get channelIsMutedText => 'ใใฃใณใใซใ็ก้ณใใใฆใใพใ';
+
+ @override
+ String get noTitleText => 'ใฟใคใใซ็กใ';
+
+ @override
+ String get letsStartChattingLabel => 'ใใฃใใใๅงใใใ๏ผ';
+
+ @override
+ String get sendingFirstMessageLabel => 'ๅไบบใซๆๅใฎใกใใปใผใธใ้ใใพใใใใ๏ผ';
+
+ @override
+ String get startAChatLabel => 'ใใฃใใใ้ๅงใใ';
+
+ @override
+ String get loadingChannelsError => 'ใใฃใใซใฎใญใผใไธญใซใจใฉใผใ็บ็ใใพใใ';
+
+ @override
+ String get deleteConversationLabel => 'ไผ่ฉฑใๅ้คใใ';
+
+ @override
+ String get deleteConversationQuestion => 'ๆฌๅฝใซไผ่ฉฑใๅ้คใใพใใ๏ผ';
+
+ @override
+ String get streamChatLabel => 'ในใใชใผใ ใใฃใใ';
+
+ @override
+ String get searchingForNetworkText => 'ใใใใฏใผใฏใๆค็ดขไธญ';
+
+ @override
+ String get offlineLabel => 'ใชใใฉใคใณใใใ';
+
+ @override
+ String get tryAgainLabel => 'ๅ่ฉฆ่กใใ';
+
+ @override
+ String membersCountText(int count) => '$countไบบใฎใกใณใใผ';
+
+ @override
+ String watchersCountText(int count) => '$countไบบใใชใณใฉใคใณ';
+
+ @override
+ String get viewInfoLabel => 'ๆ
ๅ ฑใ่ฆใ';
+
+ @override
+ String get leaveGroupLabel => 'ใฐใซใผใใ้ขใใ';
+
+ @override
+ String get leaveLabel => '้ขใใ';
+
+ @override
+ String get leaveConversationLabel => 'ไผ่ฉฑใ้ขใใ';
+
+ @override
+ String get leaveConversationQuestion => 'ๆฌๅฝใซไผ่ฉฑใ้ขใใพใใ๏ผ';
+
+ @override
+ String get showInChatLabel => 'ใใฃใใใง่กจ็คบ';
+
+ @override
+ String get saveImageLabel => '็ปๅใไฟๅญ';
+
+ @override
+ String get saveVideoLabel => 'ใใใชใไฟๅญ';
+
+ @override
+ String get uploadErrorLabel => 'ใขใใใญใผใใจใฉใผ';
+
+ @override
+ String get giphyLabel => 'ใฎใใฃใผ';
+
+ @override
+ String get shuffleLabel => 'ใใใฏใน';
+
+ @override
+ String get sendLabel => '้ไฟก';
+
+ @override
+ String get withText => 'ใจ';
+
+ @override
+ String get inText => 'ใซ';
+
+ // This is the word for 'customer' or 'user' because saying 'you' directly
+ //is too informal and rude
+ @override
+ String get youText => 'ใใชใ';
+
+ @override
+ String galleryPaginationText({
+ required int currentPage,
+ required int totalPages,
+ }) =>
+ '${currentPage + 1} / $totalPages';
+
+ @override
+ String get fileText => 'ใใกใคใซ';
+
+ @override
+ String get replyToMessageLabel => 'ใกใใปใผใธใซ่ฟไฟก';
+}
diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ko.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ko.dart
new file mode 100644
index 00000000..2642b991
--- /dev/null
+++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ko.dart
@@ -0,0 +1,347 @@
+part of 'stream_chat_localizations.dart';
+
+/// The translations for Korean (`ko`).
+class StreamChatLocalizationsKo extends GlobalStreamChatLocalizations {
+ /// Create an instance of the translation bundle for Korean.
+ const StreamChatLocalizationsKo({String localeName = 'ko'})
+ : super(localeName: localeName);
+
+ @override
+ String get launchUrlError => 'URL์ ์์ํ ์ ์์ต๋๋ค';
+
+ @override
+ String get loadingUsersError => '์ฌ์ฉ์๋ฅผ ๋ก๋ํ๋ ์ค ์ค๋ฅ ๋ฐ์';
+
+ @override
+ String get noUsersLabel => 'ํ์ฌ ์ฌ์ฉ์๊ฐ ์์ต๋๋ค';
+
+ @override
+ String get retryLabel => '๋ค์ ์๋ํ์ญ์์ค';
+
+ @override
+ String get userLastOnlineText => '๋ง์ง๋ง ์จ๋ผ์ธ์
๋๋ค';
+
+ @override
+ String get userOnlineText => '์จ๋ผ์ธ';
+
+ @override
+ String userTypingText(Iterable users) {
+ if (users.isEmpty) return '';
+ final first = users.first;
+ if (users.length == 1) {
+ return '${first.name} ํ์ดํ์ค';
+ }
+ return '${first.name}ํ๊ณ ${users.length - 1}๋ช
ํ์ดํ์ค';
+ }
+
+ @override
+ String get threadReplyLabel => '์ค๋ ๋ ์๋ต์
๋๋ค';
+
+ @override
+ String get onlyVisibleToYouText => '๋น์ ๋ง ๋ณผ ์ ์์ต๋๋ค';
+
+ @override
+ String threadReplyCountText(int count) => '$count์ค๋ ๋ ๋ต์ฅ';
+
+ @override
+ String attachmentsUploadProgressText({
+ required int remaining,
+ required int total,
+ }) =>
+ '$remaining/${total}mb๋ฅผ ์
๋ก๋์ค...';
+
+ @override
+ String pinnedByUserText({
+ required User pinnedBy,
+ required User currentUser,
+ }) {
+ final pinnedByCurrentUser = currentUser.id == pinnedBy.id;
+ if (pinnedByCurrentUser) return '๋น์ ์ ํ';
+ return '${pinnedBy.name}์ ํ';
+ }
+
+ @override
+ String get emptyMessagesText => 'ํ์ฌ ๋ฉ์์ง๊ฐ ์์ต๋๋ค';
+
+ @override
+ String get genericErrorText => '๋ญ๊ฐ ์๋ชป๋์ต๋๋ค';
+
+ @override
+ String get loadingMessagesError => '๋ฉ์์ง๋ฅผ ๋ก๋ํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค';
+
+ @override
+ String resultCountText(int count) => '$count๊ฐ์ ๊ฒฐ๊ณผ';
+
+ @override
+ String get messageDeletedText => '์ด ๋ฉ์์ง๋ ์ญ์ ๋์์ต๋๋ค.';
+
+ @override
+ String get messageDeletedLabel => '๋ฉ์์ง๊ฐ ์ญ์ ๋์์ต๋๋ค';
+
+ @override
+ String get messageReactionsLabel => '๋ฉ์์ง์ ๋ํ ์๋ต';
+
+ @override
+ String get emptyChatMessagesText => '์์ง ์ฑํ
์ด ์์ต๋๋ค...';
+
+ @override
+ String threadSeparatorText(int replyCount) => '$replyCount๊ฐ์ ๋ต์ฅ';
+
+ @override
+ String get connectedLabel => '์ฐ๊ฒฐ์ค';
+
+ @override
+ String get disconnectedLabel => '์ฐ๊ฒฐ์ด ๋๊ฒผ์ต๋๋ค';
+
+ @override
+ String get reconnectingLabel => '๋ค์ ์ฐ๊ฒฐํ๋ ์ค...';
+
+ @override
+ String get alsoSendAsDirectMessageLabel => '๋ค์ด๋ ํธ ๋ฉ์์ง๋ก๋ ๋ณด๋
๋๋ค';
+
+ @override
+ String get addACommentOrSendLabel => '์ฃผ์์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณด๋
๋๋ค';
+
+ @override
+ String get searchGifLabel => 'GIF ๊ฒ์';
+
+ @override
+ String get writeAMessageLabel => '๋ฉ์์ง ์ฐ๊ธฐ';
+
+ @override
+ String get instantCommandsLabel => '์ธ์คํดํธ ์ปค๋งจ์ฆ';
+
+ @override
+ String fileTooLargeAfterCompressionError(double limitInMB) =>
+ 'ํ์ผ์ด ๋๋ฌด ์ปค์ ์
๋ก๋ํ ์ ์์ต๋๋ค. '
+ 'ํ์ผ ํฌ๊ธฐ ์ ํ์ ${limitInMB}MB์
๋๋ค. '
+ '์ฐ๋ฆฌ๋ ์์ถํด ๋ณด์์ง๋ง ์ถฉ๋ถํ์ง ์์์ต๋๋ค.';
+
+ @override
+ String fileTooLargeError(double limitInMB) =>
+ 'ํ์ผ์ด ๋๋ฌด ์ปค์ ์
๋ก๋ํ ์ ์์ต๋๋ค. ํ์ผ ํฌ๊ธฐ ์ ํ์ ${limitInMB}MB์
๋๋ค.';
+
+ @override
+ String emojiMatchingQueryText(String query) => '"$query"๊ณผ ์ผ์นํ๋ ์ด๋ชจํฐ์ฝ์
๋๋ค';
+
+ @override
+ String get addAFileLabel => 'ํ์ผ์ ์ถ๊ฐํจ';
+
+ @override
+ String get photoFromCameraLabel => '์นด๋ฉ๋ผ์์ ์ฐ์ ์ฌ์ง';
+
+ @override
+ String get uploadAFileLabel => 'ํ์ผ์ ์
๋ก๋ํจ';
+
+ @override
+ String get uploadAPhotoLabel => '์ฌ์ง์ ์
๋ก๋ํจ';
+
+ @override
+ String get uploadAVideoLabel => '๋น๋์ค๋ฅผ ์
๋ก๋ํจ';
+
+ @override
+ String get videoFromCameraLabel => '์นด๋ฉ๋ผ์ ๋น๋์ค.';
+
+ @override
+ String get okLabel => 'ํ์ธ';
+
+ @override
+ String get somethingWentWrongError => '๋ญ๊ฐ ์๋ชป๋์ต๋๋ค';
+
+ @override
+ String get addMoreFilesLabel => 'ํ์ผ์ ์ถ๊ฐํจ';
+
+ @override
+ String get enablePhotoAndVideoAccessMessage => '์น๊ตฌ์ ๊ณต์ ํ ์ ์๋๋ก ์ฌ์ง๊ณผ'
+ '\n๋์์์ ์ก์ธ์คํ ์ ์๋๋ก ์ค์ ํ์ญ์์ค.';
+
+ @override
+ String get allowGalleryAccessMessage => '๊ฐค๋ฌ๋ฆฌ์ ๋ํ ์ก์ธ์ค๋ฅผ ํ์ฉํฉ๋๋ค';
+
+ @override
+ String get flagMessageLabel => ' ๋ฉ์์ง๋ฅผ ํ๋๊ทธํจ';
+
+ @override
+ String get flagMessageQuestion => '์ถ๊ฐ ์กฐ์ฌ๋ฅผ ์ํด ์งํ์์๊ฒ ์ด ๋ฉ์์ง์ ๋ณต์ฌ๋ณธ์ ์ ์กํ์๊ฒ ์ต๋๊น?';
+
+ @override
+ String get flagLabel => 'ํ๋๊ทธํจ';
+
+ @override
+ String get cancelLabel => '์ทจ์';
+
+ @override
+ String get flagMessageSuccessfulLabel => '๋ฉ์์ง์ ํ๋๊ทธ๊ฐ ์ง์ ๋์์ต๋๋ค';
+
+ @override
+ String get flagMessageSuccessfulText => '๋ฉ์์ง๊ฐ ์งํ์์๊ฒ ๋ณด๊ณ ๋์์ต๋๋ค.';
+
+ @override
+ String get deleteLabel => '์ญ์ ';
+
+ @override
+ String get deleteMessageLabel => '๋ฉ์์ง๋ฅผ ์ญ์ ํฉ๋๋ค.';
+
+ @override
+ String get deleteMessageQuestion => '์ด ๋ฉ์์ง๋ฅผ ์์ ํ ์ญ์ ํ์๊ฒ ์ต๋๊น?';
+
+ @override
+ String get operationCouldNotBeCompletedText => '์์
์ ์๋ฃํ ์ ์์ต๋๋ค.';
+
+ @override
+ String get replyLabel => '๋ต๊ธ';
+
+ @override
+ String togglePinUnpinText({required bool pinned}) {
+ if (pinned) return '๋ํ์ ํ์ ๋ถ๋ฆฌํฉ๋๋ค';
+ return '๋ํ์ ๊ณ ์ ํฉ๋๋ค';
+ }
+
+ @override
+ String toggleDeleteRetryDeleteMessageText({required bool isDeleteFailed}) {
+ if (isDeleteFailed) return '๋ฉ์์ง ์ญ์ ๋ฅผ ๋ค์ ์๋ํฉ๋๋ค';
+ return '๋ฉ์์ง๋ฅผ ์ญ์ ํฉ๋๋ค';
+ }
+
+ @override
+ String get copyMessageLabel => '๋ฉ์์ง๋ฅผ ๋ณต์ฌํฉ๋๋ค.';
+
+ @override
+ String get editMessageLabel => '๋ฉ์์ง๋ฅผ ํธ์งํฉ๋๋ค.';
+
+ @override
+ String toggleResendOrResendEditedMessage({required bool isUpdateFailed}) {
+ if (isUpdateFailed) return 'ํธ์ง๋ ๋ฉ์์ง๋ฅผ ๋ค์ ๋ณด๋
๋๋ค.';
+ return '๋ค์ ๋ณด๋
๋๋ค.';
+ }
+
+ @override
+ String get photosLabel => '์ฌ์ง';
+
+ 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 '์ค๋';
+ } else if (date == yesterday) {
+ return '์ด์ ';
+ } else {
+ return '${Jiffy(date).MMMd}์';
+ }
+ }
+
+ @override
+ String sentAtText({required DateTime date, required DateTime time}) =>
+ '${_getDay(date)} ${Jiffy(time.toLocal()).format('HH:mm')}์ ๋ณด๋์ต๋๋ค';
+
+ @override
+ String get todayLabel => '์ค๋';
+
+ @override
+ String get yesterdayLabel => '์ด์ ';
+
+ @override
+ String get channelIsMutedText => '์ฑ๋์ด ์์๊ฑฐ๋ฉ๋๋ค.';
+
+ @override
+ String get noTitleText => '์ ๋ชฉ์ด ์์ต๋๋ค.';
+
+ @override
+ String get letsStartChattingLabel => '์ฑํ
์์ํด์!';
+
+ @override
+ String get sendingFirstMessageLabel => '์น๊ตฌ์๊ฒ ์ฒซ ๋ฉ์์ง๋ฅผ ๋ณด๋ด ๋ณผ๊น์?';
+
+ @override
+ String get startAChatLabel => '๋ํ๋ฅผ ์์ํฉ๋๋ค.';
+
+ @override
+ String get loadingChannelsError => '์ฑ๋์ ๋ก๋ํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.';
+
+ @override
+ String get deleteConversationLabel => '๋ํ๋ฅผ ์ญ์ ํฉ๋๋ค.';
+
+ @override
+ String get deleteConversationQuestion => '๋ํ๋ฅผ ์ญ์ ํ์๊ฒ ์ต๋๊น?';
+
+ @override
+ String get streamChatLabel => '์คํธ๋ฆผ ์ฑํ
';
+
+ @override
+ String get searchingForNetworkText => '๋คํธ์ํฌ๋ฅผ ๊ฒ์ํ๋ ์ค์
๋๋ค.';
+
+ @override
+ String get offlineLabel => '์คํ๋ผ์ธ...';
+
+ @override
+ String get tryAgainLabel => '๋ค์ ์๋ํฉ๋๋ค';
+
+ @override
+ String membersCountText(int count) => '$count๋ช
';
+
+ @override
+ String watchersCountText(int count) => '$count๋ช
์ด ์จ๋ผ์ธ';
+
+ @override
+ String get viewInfoLabel => '์ ๋ณด๋ฅผ ๋ณด๊ธฐ';
+
+ @override
+ String get leaveGroupLabel => '๊ทธ๋ฃน์ ๋ ๋ฉ๋๋ค.';
+
+ @override
+ String get leaveLabel => '๋ ๋๋ค';
+
+ @override
+ String get leaveConversationLabel => '๋ํ์์ ๋ ๋ฉ๋๋ค.';
+
+ @override
+ String get leaveConversationQuestion => '์ ๋ง ์ด ๋ํ์์ ๋๊ฐ์๊ฒ ์ต๋๊น?';
+
+ @override
+ String get showInChatLabel => '์ฑํ
์ ํ์ํฉ๋๋ค.';
+
+ @override
+ String get saveImageLabel => '์ด๋ฏธ์ง๋ฅผ ์ ์ฅํฉ๋๋ค.';
+
+ @override
+ String get saveVideoLabel => '๋น๋์ค๋ฅผ ์ ์ฅํฉ๋๋ค.';
+
+ @override
+ String get uploadErrorLabel => '์
๋ก๋ ์ค๋ฅ';
+
+ @override
+ String get giphyLabel => '์งํผ';
+
+ @override
+ String get shuffleLabel => '์๊ธฐ';
+
+ @override
+ String get sendLabel => '๋ณด๋ด๊ธฐ';
+
+ @override
+ String get withText => 'ํจ๊ป';
+
+ @override
+ String get inText => '์';
+
+ // This is the word for 'customer' or 'user' because saying 'you' directly
+ // is too informal and rude
+ @override
+ String get youText => '๋น์ ';
+
+ @override
+ String galleryPaginationText(
+ {required int currentPage, required int totalPages}) =>
+ '${currentPage + 1} / $totalPages';
+ //3 / 11
+
+ @override
+ String get fileText => 'ํ์ผ';
+
+ @override
+ String get replyToMessageLabel => '๋ฉ์์ง์ ํ์ ํฉ๋๋ค.';
+}
diff --git a/packages/stream_chat_localizations/test/translations_test.dart b/packages/stream_chat_localizations/test/translations_test.dart
index 0e621159..c7314a58 100644
--- a/packages/stream_chat_localizations/test/translations_test.dart
+++ b/packages/stream_chat_localizations/test/translations_test.dart
@@ -174,7 +174,7 @@ void main() {
expect(localizations.withText, isNotNull);
expect(localizations.inText, isNotNull);
expect(localizations.youText, isNotNull);
- expect(localizations.ofText, isNotNull);
+ expect(localizations.galleryPaginationText, isNotNull);
expect(localizations.fileText, isNotNull);
expect(localizations.replyToMessageLabel, isNotNull);
});