Localization: first steps

This commit is contained in:
Dennis Fokin 2022-07-27 12:00:31 +02:00
parent 90b1c2e14c
commit fbb8bde5fc
No known key found for this signature in database
GPG Key ID: 870B88256690D8BC
8 changed files with 48 additions and 6 deletions

3
l10n.yaml Normal file
View File

@ -0,0 +1,3 @@
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart

View File

@ -2,6 +2,7 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';

View File

@ -1,4 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../theme.dart'; import '../theme.dart';
@ -22,6 +24,16 @@ class YubicoAuthenticatorApp extends ConsumerWidget {
themeMode: ref.watch(themeModeProvider), themeMode: ref.watch(themeModeProvider),
home: page, home: page,
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [
Locale('en', ''), // English, no country code
Locale('sv', ''), // Swedish, no country code
],
), ),
), ),
); );

View File

@ -1,6 +1,7 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../desktop/models.dart'; import '../../desktop/models.dart';
@ -42,15 +43,18 @@ class AppFailurePage extends ConsumerWidget {
!ref.watch(rpcStateProvider.select((state) => state.isAdmin))) { !ref.watch(rpcStateProvider.select((state) => state.isAdmin))) {
graphic = noPermission; graphic = noPermission;
header = null; header = null;
message = 'WebAuthn management requires elevated privileges.'; message = AppLocalizations.of(context)!.appFailurePage_txt_info;
actions = [ actions = [
OutlinedButton.icon( OutlinedButton.icon(
label: const Text('Unlock'), label: Text(AppLocalizations.of(context)!
.appFailurePage_btn_unlock),
icon: const Icon(Icons.lock_open), icon: const Icon(Icons.lock_open),
style: AppTheme.primaryOutlinedButtonStyle(context), style: AppTheme.primaryOutlinedButtonStyle(context),
onPressed: () async { onPressed: () async {
final closeMessage = showMessage( final closeMessage = showMessage(
context, 'Elevating permissions...', context,
AppLocalizations.of(context)!
.appFailurePage_msg_permission,
duration: const Duration(seconds: 30)); duration: const Duration(seconds: 30));
try { try {
if (await ref.read(rpcProvider).elevate()) { if (await ref.read(rpcProvider).elevate()) {

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../management/views/management_screen.dart'; import '../../management/views/management_screen.dart';
@ -74,7 +75,8 @@ class MainPageDrawer extends ConsumerWidget {
Application.management.getAvailability(data) == Application.management.getAvailability(data) ==
Availability.enabled) ...[ Availability.enabled) ...[
DrawerItem( DrawerItem(
titleText: 'Toggle applications', titleText:
AppLocalizations.of(context)!.mainDrawer_txt_applications,
icon: Icon(Application.management._icon), icon: Icon(Application.management._icon),
onTap: () { onTap: () {
if (shouldPop) Navigator.of(context).pop(); if (shouldPop) Navigator.of(context).pop();
@ -89,7 +91,7 @@ class MainPageDrawer extends ConsumerWidget {
], ],
// Non-YubiKey pages // Non-YubiKey pages
DrawerItem( DrawerItem(
titleText: 'Settings', titleText: AppLocalizations.of(context)!.mainDrawer_txt_settings,
icon: const Icon(Icons.settings), icon: const Icon(Icons.settings),
onTap: () { onTap: () {
final nav = Navigator.of(context); final nav = Navigator.of(context);
@ -102,7 +104,7 @@ class MainPageDrawer extends ConsumerWidget {
}, },
), ),
DrawerItem( DrawerItem(
titleText: 'Help and about', titleText: AppLocalizations.of(context)!.mainDrawer_txt_help,
icon: const Icon(Icons.help), icon: const Icon(Icons.help),
onTap: () { onTap: () {
final nav = Navigator.of(context); final nav = Navigator.of(context);

10
lib/l10n/app_en.arb Normal file
View File

@ -0,0 +1,10 @@
{
"@@locale": "en",
"appFailurePage_btn_unlock": "Unlock",
"appFailurePage_txt_info": "WebAuthn management requires elevated privileges.",
"appFailurePage_msg_permission": "Elevating permissions...",
"mainDrawer_txt_applications": "Toggle applications",
"mainDrawer_txt_settings": "Settings",
"mainDrawer_txt_help": "Help and about"
}

6
lib/l10n/app_sv.arb Normal file
View File

@ -0,0 +1,6 @@
{
"mainDrawer_txt_applications": "Växla applikationer",
"mainDrawer_txt_settings": "Inställningar",
"mainDrawer_txt_help": "Hjälp och om appen"
}

View File

@ -32,6 +32,9 @@ environment:
dependencies: dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
flutter_localizations:
sdk: flutter
intl: ^0.17.0
# The following adds the Cupertino Icons font to your application. # The following adds the Cupertino Icons font to your application.
@ -75,6 +78,7 @@ dev_dependencies:
# The following section is specific to Flutter. # The following section is specific to Flutter.
flutter: flutter:
generate: true
# The following line ensures that the Material Icons font is # The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in # included with your application, so that you can use the icons in
# the material Icons class. # the material Icons class.