diff --git a/lib/redux/company/company_selectors.dart b/lib/redux/company/company_selectors.dart index bfff98542..3997b259f 100644 --- a/lib/redux/company/company_selectors.dart +++ b/lib/redux/company/company_selectors.dart @@ -127,9 +127,13 @@ List filteredSelector(String? filter, UserCompanyState state) { } String localeSelector(AppState state, {bool twoLetter = false}) { - final locale = state - .staticState.languageMap[state.company.settings.languageId]?.locale ?? - 'en'; + var languageId = state.company.languageId; + if (state.user.languageId.isNotEmpty) { + languageId = state.user.languageId; + } + + final languageMap = state.staticState.languageMap; + final locale = languageMap[languageId]?.locale ?? 'en'; // https://github.com/flutter/flutter/issues/32090 if (locale == 'mk_MK' || locale == 'sq') { diff --git a/lib/ui/settings/user_details.dart b/lib/ui/settings/user_details.dart index 2303dcb38..c2253920c 100644 --- a/lib/ui/settings/user_details.dart +++ b/lib/ui/settings/user_details.dart @@ -10,6 +10,8 @@ import 'package:built_collection/built_collection.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_styled_toast/flutter_styled_toast.dart'; import 'package:invoiceninja_flutter/main_app.dart'; +import 'package:invoiceninja_flutter/redux/static/static_selectors.dart'; +import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart'; import 'package:invoiceninja_flutter/ui/app/sms_verification.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:qr_flutter/qr_flutter.dart'; @@ -443,6 +445,23 @@ class _UserDetailsState extends State value ?? '#ffffff')); }, ), + EntityDropdown( + entityType: EntityType.language, + entityList: + memoizedLanguageList(state.staticState.languageMap), + labelText: localization.language + + (user.languageId.isNotEmpty + ? '' + : ' - ' + + state + .staticState + .languageMap[state.company.languageId]! + .name), + entityId: user.languageId, + onSelected: (SelectableEntity? language) => + viewModel.onChanged(user.rebuild( + (b) => b..languageId = language?.id ?? '')), + ), if (state.company.isLarge || !kReleaseMode) ...[ AppDropdownButton( blankValue: null, diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index c1a7d1b89..91ae4eeb9 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -30,7 +30,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { InAppPurchasePlugin.register(with: registry.registrar(forPlugin: "InAppPurchasePlugin")) InAppReviewPlugin.register(with: registry.registrar(forPlugin: "InAppReviewPlugin")) FLTPackageInfoPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlugin")) - FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) + FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin")) ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin"))