From dbe74e20674dc4fb3e87c6a7b2624602d66415f9 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sun, 3 Apr 2022 12:39:10 +0300 Subject: [PATCH] Wrong translation & not in Transifex #409 --- lib/main_app.dart | 63 +++++++++++++++++++ lib/redux/company/company_selectors.dart | 4 +- lib/ui/app/history_drawer.dart | 6 +- lib/ui/design/view/design_view.dart | 6 +- lib/ui/invoice/view/invoice_view_history.dart | 4 +- lib/ui/settings/device_settings.dart | 9 ++- 6 files changed, 83 insertions(+), 9 deletions(-) diff --git a/lib/main_app.dart b/lib/main_app.dart index eb3b530e4..a2c4ba4ba 100644 --- a/lib/main_app.dart +++ b/lib/main_app.dart @@ -14,6 +14,7 @@ import 'package:intl/intl.dart'; import 'package:local_auth/local_auth.dart'; import 'package:redux/redux.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; +import 'package:timeago/timeago.dart' as timeago; // Project imports: import 'package:invoiceninja_flutter/constants.dart'; @@ -213,6 +214,67 @@ class InvoiceNinjaAppState extends State { } } + void _initTimeago() { + final locale = localeSelector(widget.store.state, twoLetter: true); + if (locale == 'ar') { + timeago.setLocaleMessages('ar', timeago.ArMessages()); + timeago.setLocaleMessages('ar_short', timeago.ArMessages()); + } else if (locale == 'ca') { + timeago.setLocaleMessages('ca', timeago.CaMessages()); + timeago.setLocaleMessages('ca_short', timeago.CaMessages()); + } else if (locale == 'cs') { + timeago.setLocaleMessages('cs', timeago.CsMessages()); + timeago.setLocaleMessages('cs_short', timeago.CsMessages()); + } else if (locale == 'da') { + timeago.setLocaleMessages('da', timeago.DaMessages()); + timeago.setLocaleMessages('da_short', timeago.DaMessages()); + } else if (locale == 'de') { + timeago.setLocaleMessages('de', timeago.DeMessages()); + timeago.setLocaleMessages('de_short', timeago.DeMessages()); + } else if (locale == 'en') { + timeago.setLocaleMessages('en', timeago.EnMessages()); + timeago.setLocaleMessages('en_short', timeago.EnMessages()); + } else if (locale == 'es') { + timeago.setLocaleMessages('es', timeago.EsMessages()); + timeago.setLocaleMessages('es_short', timeago.EsMessages()); + } else if (locale == 'fa') { + timeago.setLocaleMessages('fa', timeago.FaMessages()); + } else if (locale == 'fr') { + timeago.setLocaleMessages('fr', timeago.FrMessages()); + timeago.setLocaleMessages('fr_short', timeago.FrShortMessages()); + } else if (locale == 'it') { + timeago.setLocaleMessages('it', timeago.ItMessages()); + timeago.setLocaleMessages('it_short', timeago.ItShortMessages()); + } else if (locale == 'ja') { + timeago.setLocaleMessages('ja', timeago.JaMessages()); + } else if (locale == 'nb') { + timeago.setLocaleMessages('nb', timeago.NbNoMessages()); + timeago.setLocaleMessages('nb_short', timeago.NbNoShortMessages()); + } else if (locale == 'nl') { + timeago.setLocaleMessages('nl', timeago.NlMessages()); + timeago.setLocaleMessages('nl_short', timeago.NlShortMessages()); + } else if (locale == 'pl') { + timeago.setLocaleMessages('pl', timeago.PlMessages()); + } else if (locale == 'pt') { + timeago.setLocaleMessages('pt', timeago.PtBrMessages()); + timeago.setLocaleMessages('pt_short', timeago.PtBrShortMessages()); + } else if (locale == 'ro') { + timeago.setLocaleMessages('ro', timeago.RoMessages()); + timeago.setLocaleMessages('ro_short', timeago.RoShortMessages()); + } else if (locale == 'ru') { + timeago.setLocaleMessages('ru', timeago.RuMessages()); + timeago.setLocaleMessages('ru_short', timeago.RuShortMessages()); + } else if (locale == 'sv') { + timeago.setLocaleMessages('sv', timeago.SvMessages()); + timeago.setLocaleMessages('sv_short', timeago.SvShortMessages()); + } else if (locale == 'th') { + timeago.setLocaleMessages('th', timeago.ThMessages()); + timeago.setLocaleMessages('th_short', timeago.ThShortMessages()); + } else if (locale == 'zh') { + timeago.setLocaleMessages('zh', timeago.ZhMessages()); + } + } + @override Widget build(BuildContext context) { return StoreProvider( @@ -229,6 +291,7 @@ class InvoiceNinjaAppState extends State { }); Intl.defaultLocale = localeSelector(state); final locale = AppLocalization.createLocale(localeSelector(state)); + _initTimeago(); final textButtonTheme = TextButton.styleFrom( minimumSize: Size(88, 36), diff --git a/lib/redux/company/company_selectors.dart b/lib/redux/company/company_selectors.dart index 0aba829f5..85711d727 100644 --- a/lib/redux/company/company_selectors.dart +++ b/lib/redux/company/company_selectors.dart @@ -120,7 +120,7 @@ List filteredSelector(String filter, UserCompanyState state) { return list; } -String localeSelector(AppState state) { +String localeSelector(AppState state, {bool twoLetter = false}) { final locale = state.staticState ?.languageMap[state.company?.settings?.languageId]?.locale ?? 'en'; @@ -128,6 +128,8 @@ String localeSelector(AppState state) { // https://github.com/flutter/flutter/issues/32090 if (locale == 'mk_MK' || locale == 'sq') { return 'en'; + } else if (twoLetter) { + return locale.split('_').first; } else { return locale; } diff --git a/lib/ui/app/history_drawer.dart b/lib/ui/app/history_drawer.dart index 78f894c63..5b163167c 100644 --- a/lib/ui/app/history_drawer.dart +++ b/lib/ui/app/history_drawer.dart @@ -6,6 +6,7 @@ import 'package:flutter/material.dart'; // Package imports: import 'package:flutter_redux/flutter_redux.dart'; +import 'package:invoiceninja_flutter/redux/company/company_selectors.dart'; import 'package:timeago/timeago.dart' as timeago; // Project imports: @@ -157,7 +158,8 @@ class _HistoryListTileState extends State { subtitle: subtitle, // TODO this needs to be localized trailing: LiveText( - () => timeago.format(history.dateTime, locale: 'en_short'), + () => timeago.format(history.dateTime, + locale: localeSelector(state, twoLetter: true) + '_short'), duration: Duration(minutes: 1), ), /* @@ -195,7 +197,7 @@ class _HistoryListTileState extends State { }, ) : LiveText( - () => timeago.format(history.dateTime, locale: 'en_short'), + () => timeago.format(history.dateTime, locale: localeSelector(state, twoLetter: true) + '_short'), duration: Duration(minutes: 1), ), diff --git a/lib/ui/design/view/design_view.dart b/lib/ui/design/view/design_view.dart index 906e0673e..2351d9203 100644 --- a/lib/ui/design/view/design_view.dart +++ b/lib/ui/design/view/design_view.dart @@ -1,5 +1,6 @@ // Flutter imports: import 'package:flutter/material.dart'; +import 'package:invoiceninja_flutter/redux/company/company_selectors.dart'; // Package imports: import 'package:timeago/timeago.dart' as timeago; @@ -75,8 +76,9 @@ class _DesignViewState extends State { value: '$count', label: localization.count, secondLabel: localization.lastUpdated, - secondValue: - timeago.format(convertTimestampToDate(design.updatedAt)), + secondValue: timeago.format( + convertTimestampToDate(design.updatedAt), + locale: localeSelector(state, twoLetter: true)), ), ListDivider(), if (company.isModuleEnabled(EntityType.invoice)) diff --git a/lib/ui/invoice/view/invoice_view_history.dart b/lib/ui/invoice/view/invoice_view_history.dart index 00d3f6368..30a397e18 100644 --- a/lib/ui/invoice/view/invoice_view_history.dart +++ b/lib/ui/invoice/view/invoice_view_history.dart @@ -1,5 +1,6 @@ // Flutter imports: import 'package:flutter/material.dart'; +import 'package:invoiceninja_flutter/redux/company/company_selectors.dart'; // Package imports: import 'package:timeago/timeago.dart' as timeago; @@ -86,7 +87,8 @@ class _InvoiceViewHistoryState extends State { showTime: true, ) + ' • ' + - timeago.format(convertTimestampToDate(history.createdAt))), + timeago.format(convertTimestampToDate(history.createdAt), + locale: localeSelector(state, twoLetter: true))), trailing: Icon(Icons.chevron_right), onTap: () => viewModel.onViewPdf(context, invoice, history.activityId), diff --git a/lib/ui/settings/device_settings.dart b/lib/ui/settings/device_settings.dart index c91458462..77f9c1fa0 100644 --- a/lib/ui/settings/device_settings.dart +++ b/lib/ui/settings/device_settings.dart @@ -6,6 +6,7 @@ import 'package:flutter/services.dart'; // Package imports: import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_styled_toast/flutter_styled_toast.dart'; +import 'package:invoiceninja_flutter/redux/company/company_selectors.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:timeago/timeago.dart' as timeago; @@ -281,9 +282,11 @@ class _DeviceSettingsState extends State subtitle: LiveText(() { return localization.lastUpdated + ': ' + - timeago.format(convertTimestampToDate( - (state.userCompanyState.lastUpdated / 1000) - .round())); + timeago.format( + convertTimestampToDate( + (state.userCompanyState.lastUpdated / 1000) + .round()), + locale: localeSelector(state, twoLetter: true)); }), onTap: () { viewModel.onRefreshTap(context);