feat(stream_chat_localizations): Initial implementation

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-07-01 20:26:01 +05:30
parent 9d4564151e
commit d3e9bdafbd
14 changed files with 626 additions and 5 deletions
@@ -103,6 +103,12 @@ extension BuildContextX on BuildContext {
// ignore: public_member_api_docs
double get textScaleFactor =>
MediaQuery.maybeOf(this)?.textScaleFactor ?? 1.0;
String translate({
required String key,
required String defaultValue,
}) =>
StreamChatLocalizations.of(this)?.translate(key) ?? defaultValue;
}
/// Extension on [BorderRadius]
@@ -133,11 +133,6 @@ class StreamChatState extends State<StreamChat> {
/// The current user as a stream
Stream<User?> get userStream => widget.client.state.userStream;
@override
void initState() {
super.initState();
}
@override
void didChangeDependencies() {
final locale = ui.window.locale;
@@ -0,0 +1,97 @@
import 'package:flutter/widgets.dart';
// TODO : Fix localization instructions
// ADDING A NEW STRING
//
// If you (someone contributing to the Stream Chat Flutter) want to add a new
// string to the StreamChatLocalizations object (e.g. because you've added a new
// widget and it has a tooltip), follow these steps:
//
// 1. Add the new getter to StreamChatLocalizations below.
//
// 2. Implement a default value in DefaultMaterialLocalizations below.
//
// 3. Add a test to test/material/localizations_test.dart that verifies that
// this new value is implemented.
//
// 4. Update the flutter_localizations package. To add a new string to the
// flutter_localizations package, you must first add it to the English
// translations (lib/src/l10n/en.json), including a description.
//
// Then you need to add new entries for the string to all of the other
// language locale files by running:
// ```
// dart dev/tools/localization/bin/gen_missing_localizations.dart
// ```
// Which will copy the english strings into the other locales as placeholders
// until they can be translated.
//
// Finally you need to re-generate lib/src/l10n/localizations.dart by running:
// ```
// dart dev/tools/localization/bin/gen_localizations.dart --overwrite
// ```
//
// There is a README file with further information in the lib/src/l10n/
// directory.
//
// 5. If you are a Google employee, you should then also follow the instructions
// at go/flutter-l10n. If you're not, don't worry about it.
//
// UPDATING AN EXISTING STRING
//
// If you (someone contributing to the Flutter framework) want to modify an
// existing string in the MaterialLocalizations objects, follow these steps:
//
// 1. Modify the default value of the relevant getter(s) in
// DefaultMaterialLocalizations below.
//
// 2. Update the flutter_localizations package. Modify the out-of-date English
// strings in lib/src/l10n/material_en.arb.
//
// You also need to re-generate lib/src/l10n/localizations.dart by running:
// ```
// dart dev/tools/localization/bin/gen_localizations.dart --overwrite
// ```
//
// This script may result in your updated getters being created in newer
// locales and set to the old value of the strings. This is to be expected.
// Leave them as they were generated, and they will be picked up for
// translation.
//
// There is a README file with further information in the lib/src/l10n/
// directory.
//
// 3. If you are a Google employee, you should then also follow the instructions
// at go/flutter-l10n. If you're not, don't worry about it.
/// Defines the localized resource values used by the StreamChatFlutter widgets.
///
/// See also:
///
/// * [GlobalStreamChatLocalizations], which provides material localizations
/// for many languages.
abstract class StreamChatLocalizations {
///
String? translate(String key);
/// The `StreamChatLocalizations` from the closest [Localizations] instance
/// that encloses the given context.
///
/// If no [StreamChatLocalizations] are available in the given `context`, this
/// method returns null.
///
/// This method is just a convenient shorthand for:
/// `Localizations.of<StreamChatLocalizations>(context, StreamChatLocalizations)`.
///
/// References to the localized resources defined by this class are typically
/// written in terms of this method. For example:
///
/// ```dart
/// tooltip: StreamChatLocalizations.of(context).backButtonTooltip,
/// ```
static StreamChatLocalizations? of(BuildContext context) =>
Localizations.of<StreamChatLocalizations>(
context,
StreamChatLocalizations,
);
}
@@ -28,6 +28,7 @@ export 'src/reaction_icon.dart';
export 'src/reaction_picker.dart';
export 'src/sending_indicator.dart';
export 'src/stream_chat.dart';
export 'src/stream_chat_localizations.dart';
export 'src/stream_chat_theme.dart';
export 'src/stream_neumorphic_button.dart';
export 'src/stream_svg_icon.dart';