feat(localization): Implement Swedish localization and error messages

- Added localization support for Swedish and English languages.
- Integrated localized strings for user messages in the API error mapper.
- Updated UI components to use localized strings for labels and messages.
- Ensured all error messages are context-aware and utilize the localization framework.
- Created regression test to prevent common ASCII fallbacks in Swedish UI text.
This commit is contained in:
Nils-Johan Gynther
2026-04-22 19:16:23 +02:00
parent 37472f6c43
commit 2e117718a7
26 changed files with 315 additions and 96 deletions
+11 -9
View File
@@ -1,21 +1,23 @@
import 'package:flutter/widgets.dart';
import '../l10n/l10n.dart';
import 'api_exception.dart';
String mapErrorToUserMessage(Object error) {
String mapErrorToUserMessage(Object error, BuildContext context) {
final l10n = context.l10n;
if (error is ApiException) {
switch (error.type) {
case ApiErrorType.unauthorized:
return 'Din session har gatt ut. Logga in igen.';
return l10n.sessionExpiredError;
case ApiErrorType.forbidden:
return 'Du saknar behorighet for denna funktion.';
return l10n.forbiddenError;
case ApiErrorType.server:
return 'Serverfel uppstod. Forsok igen om en stund.';
return l10n.serverError;
case ApiErrorType.network:
return 'Natverksfel. Kontrollera anslutningen och forsok igen.';
return l10n.networkError;
case ApiErrorType.unknown:
return error.message.isNotEmpty
? error.message
: 'Ett ovantat fel uppstod.';
return error.message.isNotEmpty ? error.message : l10n.unexpectedError;
}
}
return 'Ett ovantat fel uppstod.';
return l10n.unexpectedError;
}
+6
View File
@@ -0,0 +1,6 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
extension AppLocalizationsX on BuildContext {
AppLocalizations get l10n => AppLocalizations.of(this)!;
}
+3 -1
View File
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import '../l10n/l10n.dart';
class LoadingStateView extends StatelessWidget {
final String? label;
@@ -83,7 +85,7 @@ class ErrorStateView extends StatelessWidget {
const SizedBox(height: 12),
OutlinedButton(
onPressed: onRetry,
child: const Text('Forsok igen'),
child: Text(context.l10n.retryAction),
),
],
],