Localize rest of intl (#301)

* Localize rest of intl

* Add changelog entry
This commit is contained in:
Marcin Wojnarowski 2021-11-25 18:49:43 +01:00 committed by GitHub
parent 95d8ee7fa7
commit d87a8a83c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 35 additions and 1812 deletions

View File

@ -2,7 +2,7 @@
### Changed ### Changed
- "Time ago" strings are now localized - "Time ago" strings, dates, and compact numbers are now localized
## v0.7.0 - 2021-11-04 ## v0.7.0 - 2021-11-04

View File

@ -1,5 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import 'package:timeago/timeago.dart';
export 'gen/l10n.dart'; export 'gen/l10n.dart';
export 'l10n_api.dart'; export 'l10n_api.dart';
@ -76,3 +78,22 @@ extension LanguageName on Locale {
/// returns the name of the language in the given language /// returns the name of the language in the given language
String get languageName => _languageNames[toLanguageTag()] ?? toLanguageTag(); String get languageName => _languageNames[toLanguageTag()] ?? toLanguageTag();
} }
extension TimeagoTime on DateTime {
/// returns `this` time as a relative, human-readable string. In short format
String timeagoShort(BuildContext context) => format(
this,
locale: '${Localizations.localeOf(context).toLanguageTag()}_short',
);
/// returns `this` time as a relative, human-readable string
String timeago(BuildContext context) =>
format(this, locale: Localizations.localeOf(context).toLanguageTag());
}
extension NumberFormatExtensions on num {
/// returns `this` as a formatted compact number
String compact(BuildContext context) => NumberFormat.compact(
locale: Localizations.localeOf(context).toLanguageTag(),
).format(this);
}

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,6 @@ import '../../l10n/l10n.dart';
import '../../stores/accounts_store.dart'; import '../../stores/accounts_store.dart';
import '../../util/extensions/spaced.dart'; import '../../util/extensions/spaced.dart';
import '../../util/goto.dart'; import '../../util/goto.dart';
import '../../util/intl.dart';
import '../../util/observer_consumers.dart'; import '../../util/observer_consumers.dart';
import '../../widgets/bottom_safe.dart'; import '../../widgets/bottom_safe.dart';
import '../../widgets/markdown_text.dart'; import '../../widgets/markdown_text.dart';
@ -72,10 +71,10 @@ class CommmunityAboutTab extends StatelessWidget {
.number_of_subscribers(community.counts.subscribers))), .number_of_subscribers(community.counts.subscribers))),
Chip( Chip(
label: Text( label: Text(
'${community.counts.posts} post${pluralS(community.counts.posts)}')), '${community.counts.posts} post${community.counts.posts == 1 ? '' : 's'}')),
Chip( Chip(
label: Text( label: Text(
'${community.counts.comments} comment${pluralS(community.counts.comments)}')), '${community.counts.comments} comment${community.counts.comments == 1 ? '' : 's'}')),
].spaced(8), ].spaced(8),
), ),
), ),

View File

@ -2,9 +2,9 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:lemmy_api_client/v3.dart'; import 'package:lemmy_api_client/v3.dart';
import '../../l10n/l10n.dart';
import '../../util/extensions/api.dart'; import '../../util/extensions/api.dart';
import '../../util/goto.dart'; import '../../util/goto.dart';
import '../../util/intl.dart';
import '../../widgets/avatar.dart'; import '../../widgets/avatar.dart';
import '../../widgets/cached_network_image.dart'; import '../../widgets/cached_network_image.dart';
import '../../widgets/fullscreenable_image.dart'; import '../../widgets/fullscreenable_image.dart';
@ -124,11 +124,11 @@ class CommunityOverview extends StatelessWidget {
const Spacer(), const Spacer(),
const Icon(Icons.people, size: 20), const Icon(Icons.people, size: 20),
const SizedBox(width: 3), const SizedBox(width: 3),
Text(compactNumber(community.counts.subscribers)), Text(community.counts.subscribers.compact(context)),
const Spacer(flex: 4), const Spacer(flex: 4),
const Icon(Icons.record_voice_over, size: 20), const Icon(Icons.record_voice_over, size: 20),
const SizedBox(width: 3), const SizedBox(width: 3),
Text(compactNumber(fullCommunityView.online)), Text(fullCommunityView.online.compact(context)),
const Spacer(), const Spacer(),
], ],
), ),

View File

@ -11,7 +11,6 @@ import '../hooks/stores.dart';
import '../l10n/l10n.dart'; import '../l10n/l10n.dart';
import '../util/delayed_action.dart'; import '../util/delayed_action.dart';
import '../util/extensions/api.dart'; import '../util/extensions/api.dart';
import '../util/extensions/datetime.dart';
import '../util/goto.dart'; import '../util/goto.dart';
import '../util/icons.dart'; import '../util/icons.dart';
import '../widgets/bottom_modal.dart'; import '../widgets/bottom_modal.dart';

View File

@ -3,8 +3,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:lemmy_api_client/v3.dart'; import 'package:lemmy_api_client/v3.dart';
import '../l10n/l10n.dart';
import '../util/extensions/api.dart'; import '../util/extensions/api.dart';
import '../util/extensions/datetime.dart';
import '../util/goto.dart'; import '../util/goto.dart';
import '../widgets/avatar.dart'; import '../widgets/avatar.dart';
import '../widgets/bottom_safe.dart'; import '../widgets/bottom_safe.dart';

View File

@ -1,14 +0,0 @@
import 'package:flutter/material.dart';
import 'package:timeago/timeago.dart';
extension FancyTime on DateTime {
/// returns `this` time as a relative, human-readable string. In short format
String timeagoShort(BuildContext context) => format(
this,
locale: '${Localizations.localeOf(context).toLanguageTag()}_short',
);
/// returns `this` time as a relative, human-readable string
String timeago(BuildContext context) =>
format(this, locale: Localizations.localeOf(context).toLanguageTag());
}

View File

@ -1,5 +0,0 @@
import 'package:intl/intl.dart';
String pluralS(int howMany) => howMany == 1 ? '' : 's';
String compactNumber(int number) => NumberFormat.compact().format(number);

View File

@ -10,9 +10,7 @@ import '../../stores/config_store.dart';
import '../../util/async_store_listener.dart'; import '../../util/async_store_listener.dart';
import '../../util/extensions/api.dart'; import '../../util/extensions/api.dart';
import '../../util/extensions/cake_day.dart'; import '../../util/extensions/cake_day.dart';
import '../../util/extensions/datetime.dart';
import '../../util/goto.dart'; import '../../util/goto.dart';
import '../../util/intl.dart';
import '../../util/observer_consumers.dart'; import '../../util/observer_consumers.dart';
import '../../util/text_color.dart'; import '../../util/text_color.dart';
import '../avatar.dart'; import '../avatar.dart';
@ -266,9 +264,8 @@ class _CommentWidget extends StatelessWidget {
) )
else if (configStore.showScores) else if (configStore.showScores)
Text( Text(
compactNumber( store.comment.counts.score
store.comment.counts.score, .compact(context),
),
), ),
if (configStore.showScores) if (configStore.showScores)
const Text(' · ') const Text(' · ')

View File

@ -5,7 +5,6 @@ import 'package:flutter/material.dart';
import '../../l10n/l10n.dart'; import '../../l10n/l10n.dart';
import '../../pages/community/community.dart'; import '../../pages/community/community.dart';
import '../../util/extensions/api.dart'; import '../../util/extensions/api.dart';
import '../../util/extensions/datetime.dart';
import '../../util/goto.dart'; import '../../util/goto.dart';
import '../../util/observer_consumers.dart'; import '../../util/observer_consumers.dart';
import '../avatar.dart'; import '../avatar.dart';

View File

@ -4,8 +4,8 @@ import 'package:lemmy_api_client/v3.dart';
import '../../hooks/logged_in_action.dart'; import '../../hooks/logged_in_action.dart';
import '../../hooks/stores.dart'; import '../../hooks/stores.dart';
import '../../l10n/l10n.dart';
import '../../stores/config_store.dart'; import '../../stores/config_store.dart';
import '../../util/intl.dart';
import '../../util/observer_consumers.dart'; import '../../util/observer_consumers.dart';
import 'post_store.dart'; import 'post_store.dart';
@ -38,7 +38,7 @@ class PostVoting extends HookWidget {
child: CircularProgressIndicator.adaptive(), child: CircularProgressIndicator.adaptive(),
) )
else if (showScores) else if (showScores)
Text(compactNumber(store.postView.counts.score)), Text(store.postView.counts.score.compact(context)),
IconButton( IconButton(
icon: Icon( icon: Icon(
Icons.arrow_downward, Icons.arrow_downward,

View File

@ -9,7 +9,6 @@ import '../l10n/l10n.dart';
import '../pages/manage_account.dart'; import '../pages/manage_account.dart';
import '../util/extensions/api.dart'; import '../util/extensions/api.dart';
import '../util/extensions/cake_day.dart'; import '../util/extensions/cake_day.dart';
import '../util/extensions/datetime.dart';
import '../util/goto.dart'; import '../util/goto.dart';
import '../util/text_color.dart'; import '../util/text_color.dart';
import 'avatar.dart'; import 'avatar.dart';
@ -290,8 +289,9 @@ class _UserOverview extends HookWidget {
), ),
const SizedBox(width: 4), const SizedBox(width: 4),
Text( Text(
DateFormat('MMM dd, yyyy') DateFormat.yMMMMd(
.format(userView.person.published), Localizations.localeOf(context).toLanguageTag(),
).format(userView.person.published),
style: theme.textTheme.bodyText1, style: theme.textTheme.bodyText1,
), ),
], ],