From 993cd4ad6ce14c5b27782ce57ae2a1b228645d56 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Thu, 29 Jul 2021 11:16:30 +0200 Subject: [PATCH 01/14] docs(localization): fix translation links --- docusaurus/docs/Flutter/guides/adding_localization.mdx | 8 ++++---- packages/stream_chat_localizations/README.md | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docusaurus/docs/Flutter/guides/adding_localization.mdx b/docusaurus/docs/Flutter/guides/adding_localization.mdx index b48f355c..fb537e2e 100644 --- a/docusaurus/docs/Flutter/guides/adding_localization.mdx +++ b/docusaurus/docs/Flutter/guides/adding_localization.mdx @@ -13,10 +13,10 @@ We have a dedicated package for adding localization to our UI widgets. It's call ### Supported languages At the moment we support the following languages: -- [English](https://pub.dev/documentation/stream_chat_localizations/latest/stream_chat_localizations/StreamChatLocalizationsEn-class.html) -- [Hindi](https://pub.dev/documentation/stream_chat_localizations/latest/stream_chat_localizations/StreamChatLocalizationsHi-class.html) -- [Italian](https://pub.dev/documentation/stream_chat_localizations/latest/stream_chat_localizations/StreamChatLocalizationsIt-class.html) -- [French](https://pub.dev/documentation/stream_chat_localizations/latest/stream_chat_localizations/StreamChatLocalizationsFr-class.html) +- [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) 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. diff --git a/packages/stream_chat_localizations/README.md b/packages/stream_chat_localizations/README.md index c96ec8af..ebf16a74 100644 --- a/packages/stream_chat_localizations/README.md +++ b/packages/stream_chat_localizations/README.md @@ -24,10 +24,10 @@ Check out the [changelog on pub.dev](https://pub.dev/packages/stream_chat_locali ## Supported languages At the moment we support the following languages: -- [English](https://pub.dev/documentation/stream_chat_localizations/latest/stream_chat_localizations/StreamChatLocalizationsEn-class.html) -- [Hindi](https://pub.dev/documentation/stream_chat_localizations/latest/stream_chat_localizations/StreamChatLocalizationsHi-class.html) -- [Italian](https://pub.dev/documentation/stream_chat_localizations/latest/stream_chat_localizations/StreamChatLocalizationsIt-class.html) -- [French](https://pub.dev/documentation/stream_chat_localizations/latest/stream_chat_localizations/StreamChatLocalizationsFr-class.html) +- [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) 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. From 87dcaa3bf0b3d863e77793fe707e7897e2852a32 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Thu, 29 Jul 2021 11:22:27 +0200 Subject: [PATCH 02/14] docs(localization): add ` Changing the default language` section --- .../Flutter/guides/adding_localization.mdx | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/docusaurus/docs/Flutter/guides/adding_localization.mdx b/docusaurus/docs/Flutter/guides/adding_localization.mdx index fb537e2e..e8f0dfa5 100644 --- a/docusaurus/docs/Flutter/guides/adding_localization.mdx +++ b/docusaurus/docs/Flutter/guides/adding_localization.mdx @@ -32,6 +32,8 @@ You should then run `flutter packages get` ### Usage +Flutter generally and the Stream Chat SDK will use the system locale of the users device, if that locale is supported (see below), if the locale is not supported we will default to `en` + ```dart import 'package:flutter/material.dart'; import 'package:stream_chat_localizations/stream_chat_localizations.dart'; @@ -79,6 +81,43 @@ To override an existing language, create a new class extending that particular l Checkout [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. +### Changing the default language + +To change the default language you can use the `MaterialApp.localeListResolutionCallback` property. +Here is an example of how that would look like: + +```dart + MaterialApp( + theme: ThemeData.light(), + darkTheme: ThemeData.dark(), + // Add all the supported locales + supportedLocales: const [ + Locale('en'), + Locale('hi'), + Locale('fr'), + Locale('it'), + ], + localeListResolutionCallback: (locales, supportedLocales) { + final supportedLanguageCodes = + supportedLocales.map((e) => e.languageCode); + if (locales != null) { + for (final locale in locales) { + if (supportedLanguageCodes.contains(locale.languageCode)) { + return locale; + } + } + } + + return const Locale('it'); + }, + // Add GlobalStreamChatLocalizations.delegates + localizationsDelegates: GlobalStreamChatLocalizations.delegates, + ... + +``` + +In this case we're using Italian as the default language. + ### ⚠️ Note on **iOS** For translation to work on **iOS** you need to add supported locales to From 48d1eecf8c9b4a268c837bf86f7711fc20321506 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Thu, 29 Jul 2021 11:28:22 +0200 Subject: [PATCH 03/14] docs(localization): add flutter docs link --- docusaurus/docs/Flutter/guides/adding_localization.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docusaurus/docs/Flutter/guides/adding_localization.mdx b/docusaurus/docs/Flutter/guides/adding_localization.mdx index e8f0dfa5..abbd9e70 100644 --- a/docusaurus/docs/Flutter/guides/adding_localization.mdx +++ b/docusaurus/docs/Flutter/guides/adding_localization.mdx @@ -32,7 +32,8 @@ You should then run `flutter packages get` ### Usage -Flutter generally and the Stream Chat SDK will use the system locale of the users device, if that locale is supported (see below), if the locale is not supported we will default to `en` +Flutter generally and the Stream Chat SDK will use the system locale of the users device, if that locale is supported (see below), if the locale is not supported we will default to `en`. +Make sure to read more about localization in the [official Flutter docs](https://flutter.dev/docs/development/accessibility-and-localization/internationalization). ```dart import 'package:flutter/material.dart'; From fc5e3add5de42751ae7a898ae1d04c0b59e5a366 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Thu, 29 Jul 2021 11:39:15 +0200 Subject: [PATCH 04/14] fix analysis --- packages/stream_chat_flutter/lib/src/stream_chat.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/stream_chat.dart b/packages/stream_chat_flutter/lib/src/stream_chat.dart index b3654a31..f185d288 100644 --- a/packages/stream_chat_flutter/lib/src/stream_chat.dart +++ b/packages/stream_chat_flutter/lib/src/stream_chat.dart @@ -1,5 +1,4 @@ import 'dart:async'; -import 'dart:ui' as ui; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; From 76074b4774d93d8ac2e34352b74b0b09e38f3e4b Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Thu, 29 Jul 2021 11:47:25 +0200 Subject: [PATCH 05/14] fix code snippet and add comments --- .../docs/Flutter/guides/adding_localization.mdx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/docusaurus/docs/Flutter/guides/adding_localization.mdx b/docusaurus/docs/Flutter/guides/adding_localization.mdx index abbd9e70..5645e811 100644 --- a/docusaurus/docs/Flutter/guides/adding_localization.mdx +++ b/docusaurus/docs/Flutter/guides/adding_localization.mdx @@ -98,17 +98,23 @@ Here is an example of how that would look like: Locale('fr'), Locale('it'), ], + // locales are the locales of the device + // supportedLocales are the app supported locales localeListResolutionCallback: (locales, supportedLocales) { + // We map the supported locales to language codes + // note that this is completely optional and this logic can be changed as you like final supportedLanguageCodes = supportedLocales.map((e) => e.languageCode); if (locales != null) { - for (final locale in locales) { - if (supportedLanguageCodes.contains(locale.languageCode)) { - return locale; + // we iterate over the locales and find the first one that is supported + for (final locale in locales) { + if (supportedLanguageCodes.contains(locale.languageCode)) { + return locale; + } } } - } + // if we didn't find a supported language, we return the italian language return const Locale('it'); }, // Add GlobalStreamChatLocalizations.delegates @@ -117,7 +123,7 @@ Here is an example of how that would look like: ``` -In this case we're using Italian as the default language. +In this case we're using italian as the default language. ### ⚠️ Note on **iOS** From 66cc8d3ef8cf0649536045f061421001fa53ab61 Mon Sep 17 00:00:00 2001 From: Gordon Hayes Date: Thu, 29 Jul 2021 11:58:22 +0200 Subject: [PATCH 06/14] docs: fix ios locales link --- packages/stream_chat_localizations/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_localizations/README.md b/packages/stream_chat_localizations/README.md index ebf16a74..59cf6810 100644 --- a/packages/stream_chat_localizations/README.md +++ b/packages/stream_chat_localizations/README.md @@ -93,7 +93,7 @@ Checkout [this example](https://github.com/GetStream/stream-chat-flutter/blob/ma ### ⚠️ Note on **iOS** For translation to work on **iOS** you need to add supported locales to -`ios/Runner/Info.plist` as described [here](https://flutter.dev/docs/development/accessibility-and-localization/internationalization#specifying-supportedlocales). +`ios/Runner/Info.plist` as described [here](https://flutter.dev/docs/development/accessibility-and-localization/internationalization#localizing-for-ios-updating-the-ios-app-bundle). Example: From 8f7163b3a07b7bd36fc67760a9d0801911f79d40 Mon Sep 17 00:00:00 2001 From: Gordon Hayes Date: Thu, 29 Jul 2021 14:50:36 +0200 Subject: [PATCH 07/14] fix: ios build config --- .../example/ios/.gitignore | 1 + .../ios/Flutter/AppFrameworkInfo.plist | 26 ++++ .../example/ios/Flutter/Debug.xcconfig | 2 + .../example/ios/Flutter/Release.xcconfig | 2 + .../ios/Runner.xcodeproj/project.pbxproj | 114 +++++++----------- .../contents.xcworkspacedata | 2 +- .../example/ios/Runner/Info.plist | 7 ++ 7 files changed, 84 insertions(+), 70 deletions(-) create mode 100644 packages/stream_chat_localizations/example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 packages/stream_chat_localizations/example/ios/Flutter/Debug.xcconfig create mode 100644 packages/stream_chat_localizations/example/ios/Flutter/Release.xcconfig diff --git a/packages/stream_chat_localizations/example/ios/.gitignore b/packages/stream_chat_localizations/example/ios/.gitignore index e96ef602..151026b9 100644 --- a/packages/stream_chat_localizations/example/ios/.gitignore +++ b/packages/stream_chat_localizations/example/ios/.gitignore @@ -18,6 +18,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/packages/stream_chat_localizations/example/ios/Flutter/AppFrameworkInfo.plist b/packages/stream_chat_localizations/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 00000000..9367d483 --- /dev/null +++ b/packages/stream_chat_localizations/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 8.0 + + diff --git a/packages/stream_chat_localizations/example/ios/Flutter/Debug.xcconfig b/packages/stream_chat_localizations/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 00000000..ec97fc6f --- /dev/null +++ b/packages/stream_chat_localizations/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/packages/stream_chat_localizations/example/ios/Flutter/Release.xcconfig b/packages/stream_chat_localizations/example/ios/Flutter/Release.xcconfig new file mode 100644 index 00000000..c4855bfe --- /dev/null +++ b/packages/stream_chat_localizations/example/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/packages/stream_chat_localizations/example/ios/Runner.xcodeproj/project.pbxproj b/packages/stream_chat_localizations/example/ios/Runner.xcodeproj/project.pbxproj index 261aa5a8..3ea4f826 100644 --- a/packages/stream_chat_localizations/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/stream_chat_localizations/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,9 +7,9 @@ objects = { /* Begin PBXBuildFile section */ - 0E9B23A7BA08E142FA5000CF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D76F8024ABE1070895D659BA /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 710C8D61445A55538E32FA76 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90B326A922854E6FACB68418 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -32,12 +32,14 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2C064A83D93670719ABCFB4E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3F6A054EEDAF06BCF649C130 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6FE1ECA061EBB001F6BCE8B7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 406F253F79064E73E6570F91 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 425E1032537699D21AA7599E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 90B326A922854E6FACB68418 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -45,8 +47,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D76F8024ABE1070895D659BA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EC2A45E9198C1011BED23834 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,32 +54,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0E9B23A7BA08E142FA5000CF /* Pods_Runner.framework in Frameworks */, + 710C8D61445A55538E32FA76 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 04AAB960E493BD92262BBF82 /* Frameworks */ = { - isa = PBXGroup; - children = ( - D76F8024ABE1070895D659BA /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 8559384DCD98ED6067CEF8CB /* Pods */ = { - isa = PBXGroup; - children = ( - 3F6A054EEDAF06BCF649C130 /* Pods-Runner.debug.xcconfig */, - EC2A45E9198C1011BED23834 /* Pods-Runner.release.xcconfig */, - 6FE1ECA061EBB001F6BCE8B7 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -97,8 +78,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 8559384DCD98ED6067CEF8CB /* Pods */, - 04AAB960E493BD92262BBF82 /* Frameworks */, + D27696257385EFA4B6A3AECC /* Pods */, + A92D4F040E5D68A2DFDFF35C /* Frameworks */, ); sourceTree = ""; }; @@ -125,6 +106,25 @@ path = Runner; sourceTree = ""; }; + A92D4F040E5D68A2DFDFF35C /* Frameworks */ = { + isa = PBXGroup; + children = ( + 90B326A922854E6FACB68418 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D27696257385EFA4B6A3AECC /* Pods */ = { + isa = PBXGroup; + children = ( + 2C064A83D93670719ABCFB4E /* Pods-Runner.debug.xcconfig */, + 406F253F79064E73E6570F91 /* Pods-Runner.release.xcconfig */, + 425E1032537699D21AA7599E /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -132,14 +132,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C1EE41B94EADE099F7AF3A1C /* [CP] Check Pods Manifest.lock */, + BC7B06B6092566B153F8E77E /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - BD38DACC9A0AD429D9ED9939 /* [CP] Embed Pods Frameworks */, + 91A9FD3C359F260AE72CC421 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -212,21 +212,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - BD38DACC9A0AD429D9ED9939 /* [CP] Embed Pods Frameworks */ = { + 91A9FD3C359F260AE72CC421 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -243,7 +229,21 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - C1EE41B94EADE099F7AF3A1C /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + BC7B06B6092566B153F8E77E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -357,16 +357,8 @@ CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); PRODUCT_BUNDLE_IDENTIFIER = com.example.example; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -489,16 +481,8 @@ CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); PRODUCT_BUNDLE_IDENTIFIER = com.example.example; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -516,16 +500,8 @@ CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); PRODUCT_BUNDLE_IDENTIFIER = com.example.example; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; diff --git a/packages/stream_chat_localizations/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/stream_chat_localizations/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a16..919434a6 100644 --- a/packages/stream_chat_localizations/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/packages/stream_chat_localizations/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/packages/stream_chat_localizations/example/ios/Runner/Info.plist b/packages/stream_chat_localizations/example/ios/Runner/Info.plist index a060db61..c9bfb029 100644 --- a/packages/stream_chat_localizations/example/ios/Runner/Info.plist +++ b/packages/stream_chat_localizations/example/ios/Runner/Info.plist @@ -2,6 +2,13 @@ + CFBundleLocalizations + + en + it + fr + hi + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable From 47fe22e03d5f921857cbd7dbbd120e9b4b6245b2 Mon Sep 17 00:00:00 2001 From: Gordon Hayes Date: Thu, 29 Jul 2021 14:54:57 +0200 Subject: [PATCH 08/14] docs: additional localization examples --- packages/stream_chat_localizations/README.md | 6 ++++- .../example/README.md | 27 ++++++++++++++++++- .../example/lib/main.dart | 2 ++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat_localizations/README.md b/packages/stream_chat_localizations/README.md index 59cf6810..c9adc7ef 100644 --- a/packages/stream_chat_localizations/README.md +++ b/packages/stream_chat_localizations/README.md @@ -15,7 +15,11 @@ - [Chat UI Kit](https://getstream.io/chat/ui-kit/) - [UI Docs](https://getstream.io/chat/docs/sdk/flutter/stream_chat_flutter/introduction/) -This package provides localized strings for the stream chat widgets for many languages. +## What is Localization? + +If you deploy your app to users who speak another language, you'll need to internationalize (localize) it. That means you need to write the app in a way that makes it possible to localize values like text and layouts for each language or locale that the app supports. For more information, see the [Flutter documentation](https://flutter.dev/docs/development/accessibility-and-localization/**internationalization**). + +What this package allows you to do is to provide localized strings for the Stream chat widgets. For example, depending on the application locale, the Stream Chat widgets will display the appropriate language. The locale will be set automatically, based on system preferences, or you could set it programmatically in your app. The package supports several different languages, with more to be added. The package allows you to override any supported language or add a new language that isn't supported. ### Changelog diff --git a/packages/stream_chat_localizations/example/README.md b/packages/stream_chat_localizations/example/README.md index 07e5ac18..003f56ee 100644 --- a/packages/stream_chat_localizations/example/README.md +++ b/packages/stream_chat_localizations/example/README.md @@ -1,2 +1,27 @@ # Stream Chat Persistence Example -Please see `lib/` for example code. \ No newline at end of file +Please see `lib/` for example code. + +## Setting a language +The application language can be changed through system preferences or programmatically. + +### System Preferences +The application locale can be changed by changing the language for your device or emulator within the device's system preferences. + +[iOS change language](https://support.apple.com/en-us/HT204031) + +[Android change language](https://support.google.com/websearch/answer/3333234?co=GENIE.Platform%3DAndroid&hl=en) + +Note that the language needs to be supported in your application to work. + +### Programmatically +You can also set the locale programmatically in your Flutter application without changing the device's language. + +```dart +return MaterialApp( + ... + locale: const Locale('fr'), + ... +); +``` + +There are many ways that this can be set for additional control. For information and examples, see this [Stack Overflow post](https://stackoverflow.com/questions/49441212/flutter-multi-lingual-application-how-to-override-the-locale). \ No newline at end of file diff --git a/packages/stream_chat_localizations/example/lib/main.dart b/packages/stream_chat_localizations/example/lib/main.dart index 436553c1..818086df 100644 --- a/packages/stream_chat_localizations/example/lib/main.dart +++ b/packages/stream_chat_localizations/example/lib/main.dart @@ -76,6 +76,8 @@ class MyApp extends StatelessWidget { ], // Add GlobalStreamChatLocalizations.delegates localizationsDelegates: GlobalStreamChatLocalizations.delegates, + // Programatically set the locale (this is a global change) + locale: const Locale('fr'), builder: (context, widget) => StreamChat( client: client, child: widget, From f159f4e23ef77d9ad68f2b6aeeb427b6ce9c2855 Mon Sep 17 00:00:00 2001 From: Gordon Date: Thu, 29 Jul 2021 15:54:56 +0200 Subject: [PATCH 09/14] docs: add image --- packages/stream_chat_localizations/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/stream_chat_localizations/README.md b/packages/stream_chat_localizations/README.md index c9adc7ef..68796712 100644 --- a/packages/stream_chat_localizations/README.md +++ b/packages/stream_chat_localizations/README.md @@ -15,6 +15,8 @@ - [Chat UI Kit](https://getstream.io/chat/ui-kit/) - [UI Docs](https://getstream.io/chat/docs/sdk/flutter/stream_chat_flutter/introduction/) +![localization_support](https://user-images.githubusercontent.com/13705472/127504329-a9690184-ce0f-4442-adb4-a33b5e3a3bf1.png) + ## What is Localization? If you deploy your app to users who speak another language, you'll need to internationalize (localize) it. That means you need to write the app in a way that makes it possible to localize values like text and layouts for each language or locale that the app supports. For more information, see the [Flutter documentation](https://flutter.dev/docs/development/accessibility-and-localization/**internationalization**). From afc636bcdac4ec4aae76167c34e9362be257bba7 Mon Sep 17 00:00:00 2001 From: Gordon Date: Thu, 29 Jul 2021 15:56:44 +0200 Subject: [PATCH 10/14] docs: move header --- packages/stream_chat_localizations/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/stream_chat_localizations/README.md b/packages/stream_chat_localizations/README.md index 68796712..c88106bc 100644 --- a/packages/stream_chat_localizations/README.md +++ b/packages/stream_chat_localizations/README.md @@ -15,6 +15,10 @@ - [Chat UI Kit](https://getstream.io/chat/ui-kit/) - [UI Docs](https://getstream.io/chat/docs/sdk/flutter/stream_chat_flutter/introduction/) +### Changelog + +Check out the [changelog on pub.dev](https://pub.dev/packages/stream_chat_localizations/changelog) to see the latest changes in the package. + ![localization_support](https://user-images.githubusercontent.com/13705472/127504329-a9690184-ce0f-4442-adb4-a33b5e3a3bf1.png) ## What is Localization? @@ -23,10 +27,6 @@ If you deploy your app to users who speak another language, you'll need to inter What this package allows you to do is to provide localized strings for the Stream chat widgets. For example, depending on the application locale, the Stream Chat widgets will display the appropriate language. The locale will be set automatically, based on system preferences, or you could set it programmatically in your app. The package supports several different languages, with more to be added. The package allows you to override any supported language or add a new language that isn't supported. -### Changelog - -Check out the [changelog on pub.dev](https://pub.dev/packages/stream_chat_localizations/changelog) to see the latest changes in the package. - ## Supported languages At the moment we support the following languages: From 0dea582ee78a5a15245e4fd68a2aa614d55a450c Mon Sep 17 00:00:00 2001 From: Gordon Date: Thu, 29 Jul 2021 16:29:05 +0200 Subject: [PATCH 11/14] docs: update description, image and grammar --- .../Flutter/guides/adding_localization.mdx | 49 ++++++++++++++++--- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/docusaurus/docs/Flutter/guides/adding_localization.mdx b/docusaurus/docs/Flutter/guides/adding_localization.mdx index 5645e811..d7e10cb1 100644 --- a/docusaurus/docs/Flutter/guides/adding_localization.mdx +++ b/docusaurus/docs/Flutter/guides/adding_localization.mdx @@ -10,6 +10,14 @@ Adding Localization To UI Widgets We have a dedicated package for adding localization to our UI widgets. It's called `stream_chat_localizations` and you can find it [here](https://pub.dev/packages/stream_chat_localizations). +![localization_support](https://user-images.githubusercontent.com/13705472/127504329-a9690184-ce0f-4442-adb4-a33b5e3a3bf1.png) + +## What is Localization? + +If you deploy your app to users who speak another language, you'll need to internationalize (localize) it. That means you need to write the app in a way that makes it possible to localize values like text and layouts for each language or locale that the app supports. For more information, see the [Flutter documentation](https://flutter.dev/docs/development/accessibility-and-localization/**internationalization**). + +What this package allows you to do is to provide localized strings for the Stream chat widgets. For example, depending on the application locale, the Stream Chat widgets will display the appropriate language. The locale will be set automatically, based on system preferences, or you could set it programmatically in your app. The package supports several different languages, with more to be added. The package allows you to override any supported language or add a new language that isn't supported. + ### Supported languages At the moment we support the following languages: @@ -22,17 +30,17 @@ More languages will be added in the future. Feel free to [contribute](https://gi ### Add dependency -Add this to your package's pubspec.yaml file, use the latest version [![Pub](https://img.shields.io/pub/v/stream_chat_localizations.svg)](https://pub.dartlang.org/packages/stream_chat_localizations) +Add this to your package's `pubspec.yaml` file, use the latest version [![Pub](https://img.shields.io/pub/v/stream_chat_localizations.svg)](https://pub.dartlang.org/packages/stream_chat_localizations) ```yaml dependencies: stream_chat_localizations: ^latest_version ``` -You should then run `flutter packages get` +Then run `flutter packages get` ### Usage -Flutter generally and the Stream Chat SDK will use the system locale of the users device, if that locale is supported (see below), if the locale is not supported we will default to `en`. +Generally, Flutter and the Stream Chat SDK will use the system locale of the user's device, if that locale is supported (see below). If the locale is not supported we will default to `en`. Make sure to read more about localization in the [official Flutter docs](https://flutter.dev/docs/development/accessibility-and-localization/internationalization). ```dart @@ -70,17 +78,42 @@ class MyApp extends StatelessWidget { } ``` +## Setting a language +The application language can be changed through system preferences or programmatically. + +### System Preferences +The application locale can be changed by changing the language for your device or emulator within the device's system preferences. + +[iOS change language](https://support.apple.com/en-us/HT204031) + +[Android change language](https://support.google.com/websearch/answer/3333234?co=GENIE.Platform%3DAndroid&hl=en) + +Note that the language needs to be supported in your application to work. + +### Programmatically +You can also set the locale programmatically in your Flutter application without changing the device's language. + +```dart +return MaterialApp( + ... + locale: const Locale('fr'), + ... +); +``` + +There are many ways that this can be set for additional control. For information and examples, see this [Stack Overflow post](https://stackoverflow.com/questions/49441212/flutter-multi-lingual-application-how-to-override-the-locale). + ### Adding a new language To add a new language, create a new class extending `GlobalStreamChatLocalizations` and create a delegate for it, adding it to the `delegates` array. -Checkout [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. +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 exisiting languages +### Override existing languages 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. -Checkout [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. +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. ### Changing the default language @@ -114,7 +147,7 @@ Here is an example of how that would look like: } } - // if we didn't find a supported language, we return the italian language + // if we didn't find a supported language, we return the Italian language return const Locale('it'); }, // Add GlobalStreamChatLocalizations.delegates @@ -123,7 +156,7 @@ Here is an example of how that would look like: ``` -In this case we're using italian as the default language. +In this case, we're using Italian as the default language. ### ⚠️ Note on **iOS** From 276f6a1efc82c7e5615312096f3b024b6d2a469c Mon Sep 17 00:00:00 2001 From: Gordon Date: Thu, 29 Jul 2021 16:34:57 +0200 Subject: [PATCH 12/14] docs: spelling and grammar --- packages/stream_chat_localizations/README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/stream_chat_localizations/README.md b/packages/stream_chat_localizations/README.md index c88106bc..bf648e45 100644 --- a/packages/stream_chat_localizations/README.md +++ b/packages/stream_chat_localizations/README.md @@ -45,7 +45,7 @@ dependencies: stream_chat_localizations: ^latest_version ``` -You should then run `flutter packages get` +Then run `flutter packages get` ### Usage @@ -88,13 +88,13 @@ class MyApp extends StatelessWidget { 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. -Checkout [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. +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 exisiting languages +### 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. -Checkout [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. +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. ### ⚠️ Note on **iOS** @@ -115,8 +115,7 @@ Example: ## Contributing -We welcome code changes that improve this library or fix a problem, -please make sure to follow all best practices and add tests if applicable before submitting a Pull Request on Github. +We welcome code changes that improve this library or fix a problem. Please make sure to follow all best practices and add tests if applicable before submitting a Pull Request on Github. We are pleased to merge your code into the official repository. Make sure to sign our [Contributor License Agreement (CLA)](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) first. See our license file for more details. From dd5bf733e37aee268da2beedbf628647ed954350 Mon Sep 17 00:00:00 2001 From: Gordon Date: Thu, 29 Jul 2021 16:40:10 +0200 Subject: [PATCH 13/14] docs: add localization image --- .../Flutter/assets/localization_support.jpg | Bin 0 -> 88489 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docusaurus/docs/Flutter/assets/localization_support.jpg diff --git a/docusaurus/docs/Flutter/assets/localization_support.jpg b/docusaurus/docs/Flutter/assets/localization_support.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50d8b761ee059126f48669a9dfb409c69be48bcb GIT binary patch literal 88489 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 Date: Thu, 29 Jul 2021 16:42:43 +0200 Subject: [PATCH 14/14] docs: update path to image --- docusaurus/docs/Flutter/guides/adding_localization.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus/docs/Flutter/guides/adding_localization.mdx b/docusaurus/docs/Flutter/guides/adding_localization.mdx index d7e10cb1..7e6cb7e2 100644 --- a/docusaurus/docs/Flutter/guides/adding_localization.mdx +++ b/docusaurus/docs/Flutter/guides/adding_localization.mdx @@ -10,7 +10,7 @@ Adding Localization To UI Widgets We have a dedicated package for adding localization to our UI widgets. It's called `stream_chat_localizations` and you can find it [here](https://pub.dev/packages/stream_chat_localizations). -![localization_support](https://user-images.githubusercontent.com/13705472/127504329-a9690184-ce0f-4442-adb4-a33b5e3a3bf1.png) +![](../assets/localization_support.jpg) ## What is Localization?