Added localization for de & en
This commit is contained in:
1
lib/assets/strings/arb/app_localizations.dart
Normal file
1
lib/assets/strings/arb/app_localizations.dart
Normal file
@@ -0,0 +1 @@
|
||||
// TODO Implement this library.
|
||||
85
lib/l10n/app_de.arb
Normal file
85
lib/l10n/app_de.arb
Normal file
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"@@locale": "de",
|
||||
|
||||
"app_name": "Cabo Counter",
|
||||
"round": "Runde",
|
||||
"rounds": "Runden",
|
||||
"mode": "Modus",
|
||||
"points": "Punkte",
|
||||
"unlimited": "Unbegrenzt",
|
||||
"delete": "Löschen",
|
||||
"cancel": "Abbrechen",
|
||||
"game": "Spiel",
|
||||
"ok": "OK",
|
||||
"player": "Spieler:in",
|
||||
"players": "Spieler:innen",
|
||||
"name": "Name",
|
||||
|
||||
"home": "Home",
|
||||
"about": "Über",
|
||||
|
||||
"empty_text_1": "Ganz schön leer hier...",
|
||||
"empty_text_2": "Füge über den Button oben rechts eine neue Runde hinzu",
|
||||
"delete_game_title": "Spiel löschen?",
|
||||
"delete_game_message": "Bist du sicher, dass du die Runde {gameTitle} löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.",
|
||||
"@delete_game_message": {
|
||||
"placeholders": {
|
||||
"gameTitle": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"overview": "Übersicht",
|
||||
"new_game": "Neues Spiel",
|
||||
"game_title": "Titel des Spiels",
|
||||
"select_mode": "Wähle einen Modus",
|
||||
"add_player": "Spieler:in hinzufügen",
|
||||
"create_game": "Spiel erstellen",
|
||||
"max_players_title": "Maximale Anzahl erreicht",
|
||||
"max_players_message": "Es können maximal 5 Spieler:innen hinzugefügt werden.",
|
||||
"no_gameTitle_title": "Kein Titel",
|
||||
"no_gameTitle_message": "Es muss ein Titel für das Spiel eingegeben werden.",
|
||||
"no_mode_title": "Kein Modus",
|
||||
"no_mode_message": "Es muss ein Spielmodus ausgewählt werden.",
|
||||
"min_players_title": "Zu wenig Spieler:innen",
|
||||
"min_players_message": "Es müssen mindestens 2 Spieler:innen hinzugefügt werden",
|
||||
"no_name_title": "Kein Name",
|
||||
"no_name_message": "Jeder Spieler muss einen Namen haben.",
|
||||
|
||||
"select_game_mode": "Spielmodus auswählen",
|
||||
"point_limit_description": "Es wird so lange gespielt, bis ein:e Spieler:in mehr als {pointLimit} Punkte erreicht",
|
||||
"@point_limit_description": {
|
||||
"placeholders": {
|
||||
"pointLimit": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"unlimited_description": "Dem Spiel sind keine Grenzen gesetzt. Es wird so lange gespielt, bis ihr keine Lust mehr habt.",
|
||||
|
||||
"results": "Ergebnisse",
|
||||
"who_said_cabo": "Wer hat CABO gesagt?",
|
||||
"kamikaze": "Kamikaze",
|
||||
"done": "Fertig",
|
||||
"next_round": "Nächste Runde",
|
||||
|
||||
"settings": "Einstellungen",
|
||||
"cabo_penalty": "Cabo-Strafe",
|
||||
"cabo_penalty_subtitle": "... für falsches Cabo sagen",
|
||||
"point_limit": "Punkte-Limit",
|
||||
"point_limit_subtitle": "... hier ist Schluss",
|
||||
"reset_to_default": "Auf Standard zurücksetzen",
|
||||
"game_data": "Spieldaten",
|
||||
"import_data": "Daten importieren",
|
||||
"export_data": "Daten exportieren",
|
||||
"error": "Fehler",
|
||||
"error_import": "Datei konnte nicht importiert werden",
|
||||
"error_export": "Datei konnte nicht exportiert werden",
|
||||
"error_found": "Fehler gefunden?",
|
||||
"create_issue": "Issue erstellen",
|
||||
"app_version": "App-Version",
|
||||
"build": "Build",
|
||||
"load_version": "Lade Version...",
|
||||
|
||||
"about_text": "Hey :) Danke, dass du als eine:r der ersten User meiner ersten eigenen App dabei bist! Ich hab sehr viel Arbeit in dieses Projekt gesteckt und auch, wenn ich (hoffentlich) an vieles Gedacht hab, wird auf jeden Fall noch nicht alles 100% funktionieren. Solltest du also irgendwelche Fehler entdecken oder Feedback zum Design oder der Benutzerfreundlichkeit haben, zögere bitte nicht sie mir auf den dir bekannten Wegen mitzuteilen. Danke! "
|
||||
}
|
||||
84
lib/l10n/app_en.arb
Normal file
84
lib/l10n/app_en.arb
Normal file
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"@@locale": "en",
|
||||
|
||||
"app_name": "Cabo Counter",
|
||||
"round": "Round",
|
||||
"rounds": "Rounds",
|
||||
"mode": "Mode",
|
||||
"points": "Points",
|
||||
"unlimited": "Unlimited",
|
||||
"delete": "Delete",
|
||||
"cancel": "Cancel",
|
||||
"game": "Game",
|
||||
"ok": "OK",
|
||||
"player": "Player",
|
||||
"players": "Players",
|
||||
"name": "Name",
|
||||
|
||||
"home": "Home",
|
||||
"about": "About",
|
||||
|
||||
"empty_text_1": "Pretty empty here...",
|
||||
"empty_text_2": "Add a new round using the button in the top right corner",
|
||||
"delete_game_title": "Delete game?",
|
||||
"delete_game_message": "Are you sure you want to delete the game {gameTitle}? This action cannot be undone.",
|
||||
"@delete_game_message": {
|
||||
"placeholders": {
|
||||
"gameTitle": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"overview": "Overview",
|
||||
"new_game": "New Game",
|
||||
"game_title": "Game Title",
|
||||
"select_mode": "Select a mode",
|
||||
"add_player": "Add Player",
|
||||
"create_game": "Create Game",
|
||||
"max_players_title": "Maximum reached",
|
||||
"max_players_message": "A maximum of 5 players can be added.",
|
||||
"no_gameTitle_title": "No Title",
|
||||
"no_gameTitle_message": "You must enter a title for the game.",
|
||||
"no_mode_title": "No Mode",
|
||||
"no_mode_message": "You must select a game mode.",
|
||||
"min_players_title": "Too few players",
|
||||
"min_players_message": "At least 2 players must be added.",
|
||||
"no_name_title": "No Name",
|
||||
"no_name_message": "Each player must have a name.",
|
||||
|
||||
"select_game_mode": "Select game mode",
|
||||
"point_limit_description": "The game ends when a player reaches more than {pointLimit} points.",
|
||||
"@point_limit_description": {
|
||||
"placeholders": {
|
||||
"pointLimit": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"unlimited_description": "There is no limit. The game continues until you decide to stop.",
|
||||
|
||||
"results": "Results",
|
||||
"who_said_cabo": "Who said CABO?",
|
||||
"kamikaze": "Kamikaze",
|
||||
"done": "Done",
|
||||
"next_round": "Next Round",
|
||||
|
||||
"settings": "Settings",
|
||||
"cabo_penalty": "Cabo Penalty",
|
||||
"cabo_penalty_subtitle": "... for falsely calling Cabo",
|
||||
"point_limit": "Point Limit",
|
||||
"point_limit_subtitle": "... the game ends here",
|
||||
"reset_to_default": "Reset to Default",
|
||||
"game_data": "Game Data",
|
||||
"import_data": "Import Data",
|
||||
"export_data": "Export Data",
|
||||
"error": "Error",
|
||||
"error_import": "Could not import file",
|
||||
"error_export": "Could not export file",
|
||||
"error_found": "Found a bug?",
|
||||
"create_issue": "Create Issue",
|
||||
"app_version": "App Version",
|
||||
"load_version": "Loading version...",
|
||||
"build": "Build",
|
||||
"about_text": "Hey :) Thanks for being one of the first users of my first app! I’ve put a lot of work into this project, and even though I (hopefully) thought of a lot, not everything will work 100% yet. If you discover any bugs or have feedback on the design or usability, please don’t hesitate to let me know. Thanks!"
|
||||
}
|
||||
499
lib/l10n/app_localizations.dart
Normal file
499
lib/l10n/app_localizations.dart
Normal file
@@ -0,0 +1,499 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
|
||||
import 'app_localizations_de.dart';
|
||||
import 'app_localizations_en.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// Callers can lookup localized strings with an instance of AppLocalizations
|
||||
/// returned by `AppLocalizations.of(context)`.
|
||||
///
|
||||
/// Applications need to include `AppLocalizations.delegate()` in their app's
|
||||
/// `localizationDelegates` list, and the locales they support in the app's
|
||||
/// `supportedLocales` list. For example:
|
||||
///
|
||||
/// ```dart
|
||||
/// import 'l10n/app_localizations.dart';
|
||||
///
|
||||
/// return MaterialApp(
|
||||
/// localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
/// supportedLocales: AppLocalizations.supportedLocales,
|
||||
/// home: MyApplicationHome(),
|
||||
/// );
|
||||
/// ```
|
||||
///
|
||||
/// ## Update pubspec.yaml
|
||||
///
|
||||
/// Please make sure to update your pubspec.yaml to include the following
|
||||
/// packages:
|
||||
///
|
||||
/// ```yaml
|
||||
/// dependencies:
|
||||
/// # Internationalization support.
|
||||
/// flutter_localizations:
|
||||
/// sdk: flutter
|
||||
/// intl: any # Use the pinned version from flutter_localizations
|
||||
///
|
||||
/// # Rest of dependencies
|
||||
/// ```
|
||||
///
|
||||
/// ## iOS Applications
|
||||
///
|
||||
/// iOS applications define key application metadata, including supported
|
||||
/// locales, in an Info.plist file that is built into the application bundle.
|
||||
/// To configure the locales supported by your app, you’ll need to edit this
|
||||
/// file.
|
||||
///
|
||||
/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
|
||||
/// Then, in the Project Navigator, open the Info.plist file under the Runner
|
||||
/// project’s Runner folder.
|
||||
///
|
||||
/// Next, select the Information Property List item, select Add Item from the
|
||||
/// Editor menu, then select Localizations from the pop-up menu.
|
||||
///
|
||||
/// Select and expand the newly-created Localizations item then, for each
|
||||
/// locale your application supports, add a new item and select the locale
|
||||
/// you wish to add from the pop-up menu in the Value field. This list should
|
||||
/// be consistent with the languages listed in the AppLocalizations.supportedLocales
|
||||
/// property.
|
||||
abstract class AppLocalizations {
|
||||
AppLocalizations(String locale)
|
||||
: localeName = intl.Intl.canonicalizedLocale(locale.toString());
|
||||
|
||||
final String localeName;
|
||||
|
||||
static AppLocalizations of(BuildContext context) {
|
||||
return Localizations.of<AppLocalizations>(context, AppLocalizations)!;
|
||||
}
|
||||
|
||||
static const LocalizationsDelegate<AppLocalizations> delegate =
|
||||
_AppLocalizationsDelegate();
|
||||
|
||||
/// A list of this localizations delegate along with the default localizations
|
||||
/// delegates.
|
||||
///
|
||||
/// Returns a list of localizations delegates containing this delegate along with
|
||||
/// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
|
||||
/// and GlobalWidgetsLocalizations.delegate.
|
||||
///
|
||||
/// Additional delegates can be added by appending to this list in
|
||||
/// MaterialApp. This list does not have to be used at all if a custom list
|
||||
/// of delegates is preferred or required.
|
||||
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
|
||||
<LocalizationsDelegate<dynamic>>[
|
||||
delegate,
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
];
|
||||
|
||||
/// A list of this localizations delegate's supported locales.
|
||||
static const List<Locale> supportedLocales = <Locale>[
|
||||
Locale('de'),
|
||||
Locale('en')
|
||||
];
|
||||
|
||||
/// No description provided for @app_name.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Cabo Counter'**
|
||||
String get app_name;
|
||||
|
||||
/// No description provided for @round.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Runde'**
|
||||
String get round;
|
||||
|
||||
/// No description provided for @rounds.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Runden'**
|
||||
String get rounds;
|
||||
|
||||
/// No description provided for @mode.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Modus'**
|
||||
String get mode;
|
||||
|
||||
/// No description provided for @points.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Punkte'**
|
||||
String get points;
|
||||
|
||||
/// No description provided for @unlimited.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Unbegrenzt'**
|
||||
String get unlimited;
|
||||
|
||||
/// No description provided for @delete.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Löschen'**
|
||||
String get delete;
|
||||
|
||||
/// No description provided for @cancel.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Abbrechen'**
|
||||
String get cancel;
|
||||
|
||||
/// No description provided for @game.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Spiel'**
|
||||
String get game;
|
||||
|
||||
/// No description provided for @ok.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'OK'**
|
||||
String get ok;
|
||||
|
||||
/// No description provided for @player.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Spieler:in'**
|
||||
String get player;
|
||||
|
||||
/// No description provided for @players.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Spieler:innen'**
|
||||
String get players;
|
||||
|
||||
/// No description provided for @name.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Name'**
|
||||
String get name;
|
||||
|
||||
/// No description provided for @home.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Home'**
|
||||
String get home;
|
||||
|
||||
/// No description provided for @about.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Über'**
|
||||
String get about;
|
||||
|
||||
/// No description provided for @empty_text_1.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Ganz schön leer hier...'**
|
||||
String get empty_text_1;
|
||||
|
||||
/// No description provided for @empty_text_2.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Füge über den Button oben rechts eine neue Runde hinzu'**
|
||||
String get empty_text_2;
|
||||
|
||||
/// No description provided for @delete_game_title.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Spiel löschen?'**
|
||||
String get delete_game_title;
|
||||
|
||||
/// No description provided for @delete_game_message.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Bist du sicher, dass du die Runde {gameTitle} löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.'**
|
||||
String delete_game_message(String gameTitle);
|
||||
|
||||
/// No description provided for @overview.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Übersicht'**
|
||||
String get overview;
|
||||
|
||||
/// No description provided for @new_game.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Neues Spiel'**
|
||||
String get new_game;
|
||||
|
||||
/// No description provided for @game_title.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Titel des Spiels'**
|
||||
String get game_title;
|
||||
|
||||
/// No description provided for @select_mode.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Wähle einen Modus'**
|
||||
String get select_mode;
|
||||
|
||||
/// No description provided for @add_player.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Spieler:in hinzufügen'**
|
||||
String get add_player;
|
||||
|
||||
/// No description provided for @create_game.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Spiel erstellen'**
|
||||
String get create_game;
|
||||
|
||||
/// No description provided for @max_players_title.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Maximale Anzahl erreicht'**
|
||||
String get max_players_title;
|
||||
|
||||
/// No description provided for @max_players_message.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Es können maximal 5 Spieler:innen hinzugefügt werden.'**
|
||||
String get max_players_message;
|
||||
|
||||
/// No description provided for @no_gameTitle_title.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Kein Titel'**
|
||||
String get no_gameTitle_title;
|
||||
|
||||
/// No description provided for @no_gameTitle_message.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Es muss ein Titel für das Spiel eingegeben werden.'**
|
||||
String get no_gameTitle_message;
|
||||
|
||||
/// No description provided for @no_mode_title.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Kein Modus'**
|
||||
String get no_mode_title;
|
||||
|
||||
/// No description provided for @no_mode_message.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Es muss ein Spielmodus ausgewählt werden.'**
|
||||
String get no_mode_message;
|
||||
|
||||
/// No description provided for @min_players_title.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Zu wenig Spieler:innen'**
|
||||
String get min_players_title;
|
||||
|
||||
/// No description provided for @min_players_message.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Es müssen mindestens 2 Spieler:innen hinzugefügt werden'**
|
||||
String get min_players_message;
|
||||
|
||||
/// No description provided for @no_name_title.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Kein Name'**
|
||||
String get no_name_title;
|
||||
|
||||
/// No description provided for @no_name_message.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Jeder Spieler muss einen Namen haben.'**
|
||||
String get no_name_message;
|
||||
|
||||
/// No description provided for @select_game_mode.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Spielmodus auswählen'**
|
||||
String get select_game_mode;
|
||||
|
||||
/// No description provided for @point_limit_description.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Es wird so lange gespielt, bis ein:e Spieler:in mehr als {pointLimit} Punkte erreicht'**
|
||||
String point_limit_description(int pointLimit);
|
||||
|
||||
/// No description provided for @unlimited_description.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Dem Spiel sind keine Grenzen gesetzt. Es wird so lange gespielt, bis ihr keine Lust mehr habt.'**
|
||||
String get unlimited_description;
|
||||
|
||||
/// No description provided for @results.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Ergebnisse'**
|
||||
String get results;
|
||||
|
||||
/// No description provided for @who_said_cabo.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Wer hat CABO gesagt?'**
|
||||
String get who_said_cabo;
|
||||
|
||||
/// No description provided for @kamikaze.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Kamikaze'**
|
||||
String get kamikaze;
|
||||
|
||||
/// No description provided for @done.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Fertig'**
|
||||
String get done;
|
||||
|
||||
/// No description provided for @next_round.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Nächste Runde'**
|
||||
String get next_round;
|
||||
|
||||
/// No description provided for @settings.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Einstellungen'**
|
||||
String get settings;
|
||||
|
||||
/// No description provided for @cabo_penalty.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Cabo-Strafe'**
|
||||
String get cabo_penalty;
|
||||
|
||||
/// No description provided for @cabo_penalty_subtitle.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'... für falsches Cabo sagen'**
|
||||
String get cabo_penalty_subtitle;
|
||||
|
||||
/// No description provided for @point_limit.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Punkte-Limit'**
|
||||
String get point_limit;
|
||||
|
||||
/// No description provided for @point_limit_subtitle.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'... hier ist Schluss'**
|
||||
String get point_limit_subtitle;
|
||||
|
||||
/// No description provided for @reset_to_default.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Auf Standard zurücksetzen'**
|
||||
String get reset_to_default;
|
||||
|
||||
/// No description provided for @game_data.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Spieldaten'**
|
||||
String get game_data;
|
||||
|
||||
/// No description provided for @import_data.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Daten importieren'**
|
||||
String get import_data;
|
||||
|
||||
/// No description provided for @export_data.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Daten exportieren'**
|
||||
String get export_data;
|
||||
|
||||
/// No description provided for @error.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Fehler'**
|
||||
String get error;
|
||||
|
||||
/// No description provided for @error_import.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Datei konnte nicht importiert werden'**
|
||||
String get error_import;
|
||||
|
||||
/// No description provided for @error_export.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Datei konnte nicht exportiert werden'**
|
||||
String get error_export;
|
||||
|
||||
/// No description provided for @error_found.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Fehler gefunden?'**
|
||||
String get error_found;
|
||||
|
||||
/// No description provided for @create_issue.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Issue erstellen'**
|
||||
String get create_issue;
|
||||
|
||||
/// No description provided for @app_version.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'App-Version'**
|
||||
String get app_version;
|
||||
|
||||
/// No description provided for @build.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Build'**
|
||||
String get build;
|
||||
|
||||
/// No description provided for @load_version.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Lade Version...'**
|
||||
String get load_version;
|
||||
|
||||
/// No description provided for @about_text.
|
||||
///
|
||||
/// In de, this message translates to:
|
||||
/// **'Hey :) Danke, dass du als eine:r der ersten User meiner ersten eigenen App dabei bist! Ich hab sehr viel Arbeit in dieses Projekt gesteckt und auch, wenn ich (hoffentlich) an vieles Gedacht hab, wird auf jeden Fall noch nicht alles 100% funktionieren. Solltest du also irgendwelche Fehler entdecken oder Feedback zum Design oder der Benutzerfreundlichkeit haben, zögere bitte nicht sie mir auf den dir bekannten Wegen mitzuteilen. Danke! '**
|
||||
String get about_text;
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate
|
||||
extends LocalizationsDelegate<AppLocalizations> {
|
||||
const _AppLocalizationsDelegate();
|
||||
|
||||
@override
|
||||
Future<AppLocalizations> load(Locale locale) {
|
||||
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
|
||||
}
|
||||
|
||||
@override
|
||||
bool isSupported(Locale locale) =>
|
||||
<String>['de', 'en'].contains(locale.languageCode);
|
||||
|
||||
@override
|
||||
bool shouldReload(_AppLocalizationsDelegate old) => false;
|
||||
}
|
||||
|
||||
AppLocalizations lookupAppLocalizations(Locale locale) {
|
||||
// Lookup logic when only language code is specified.
|
||||
switch (locale.languageCode) {
|
||||
case 'de':
|
||||
return AppLocalizationsDe();
|
||||
case 'en':
|
||||
return AppLocalizationsEn();
|
||||
}
|
||||
|
||||
throw FlutterError(
|
||||
'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
|
||||
'an issue with the localizations generation tool. Please file an issue '
|
||||
'on GitHub with a reproducible sample app and the gen-l10n configuration '
|
||||
'that was used.');
|
||||
}
|
||||
203
lib/l10n/app_localizations_de.dart
Normal file
203
lib/l10n/app_localizations_de.dart
Normal file
@@ -0,0 +1,203 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for German (`de`).
|
||||
class AppLocalizationsDe extends AppLocalizations {
|
||||
AppLocalizationsDe([String locale = 'de']) : super(locale);
|
||||
|
||||
@override
|
||||
String get app_name => 'Cabo Counter';
|
||||
|
||||
@override
|
||||
String get round => 'Runde';
|
||||
|
||||
@override
|
||||
String get rounds => 'Runden';
|
||||
|
||||
@override
|
||||
String get mode => 'Modus';
|
||||
|
||||
@override
|
||||
String get points => 'Punkte';
|
||||
|
||||
@override
|
||||
String get unlimited => 'Unbegrenzt';
|
||||
|
||||
@override
|
||||
String get delete => 'Löschen';
|
||||
|
||||
@override
|
||||
String get cancel => 'Abbrechen';
|
||||
|
||||
@override
|
||||
String get game => 'Spiel';
|
||||
|
||||
@override
|
||||
String get ok => 'OK';
|
||||
|
||||
@override
|
||||
String get player => 'Spieler:in';
|
||||
|
||||
@override
|
||||
String get players => 'Spieler:innen';
|
||||
|
||||
@override
|
||||
String get name => 'Name';
|
||||
|
||||
@override
|
||||
String get home => 'Home';
|
||||
|
||||
@override
|
||||
String get about => 'Über';
|
||||
|
||||
@override
|
||||
String get empty_text_1 => 'Ganz schön leer hier...';
|
||||
|
||||
@override
|
||||
String get empty_text_2 =>
|
||||
'Füge über den Button oben rechts eine neue Runde hinzu';
|
||||
|
||||
@override
|
||||
String get delete_game_title => 'Spiel löschen?';
|
||||
|
||||
@override
|
||||
String delete_game_message(String gameTitle) {
|
||||
return 'Bist du sicher, dass du die Runde $gameTitle löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get overview => 'Übersicht';
|
||||
|
||||
@override
|
||||
String get new_game => 'Neues Spiel';
|
||||
|
||||
@override
|
||||
String get game_title => 'Titel des Spiels';
|
||||
|
||||
@override
|
||||
String get select_mode => 'Wähle einen Modus';
|
||||
|
||||
@override
|
||||
String get add_player => 'Spieler:in hinzufügen';
|
||||
|
||||
@override
|
||||
String get create_game => 'Spiel erstellen';
|
||||
|
||||
@override
|
||||
String get max_players_title => 'Maximale Anzahl erreicht';
|
||||
|
||||
@override
|
||||
String get max_players_message =>
|
||||
'Es können maximal 5 Spieler:innen hinzugefügt werden.';
|
||||
|
||||
@override
|
||||
String get no_gameTitle_title => 'Kein Titel';
|
||||
|
||||
@override
|
||||
String get no_gameTitle_message =>
|
||||
'Es muss ein Titel für das Spiel eingegeben werden.';
|
||||
|
||||
@override
|
||||
String get no_mode_title => 'Kein Modus';
|
||||
|
||||
@override
|
||||
String get no_mode_message => 'Es muss ein Spielmodus ausgewählt werden.';
|
||||
|
||||
@override
|
||||
String get min_players_title => 'Zu wenig Spieler:innen';
|
||||
|
||||
@override
|
||||
String get min_players_message =>
|
||||
'Es müssen mindestens 2 Spieler:innen hinzugefügt werden';
|
||||
|
||||
@override
|
||||
String get no_name_title => 'Kein Name';
|
||||
|
||||
@override
|
||||
String get no_name_message => 'Jeder Spieler muss einen Namen haben.';
|
||||
|
||||
@override
|
||||
String get select_game_mode => 'Spielmodus auswählen';
|
||||
|
||||
@override
|
||||
String point_limit_description(int pointLimit) {
|
||||
return 'Es wird so lange gespielt, bis ein:e Spieler:in mehr als $pointLimit Punkte erreicht';
|
||||
}
|
||||
|
||||
@override
|
||||
String get unlimited_description =>
|
||||
'Dem Spiel sind keine Grenzen gesetzt. Es wird so lange gespielt, bis ihr keine Lust mehr habt.';
|
||||
|
||||
@override
|
||||
String get results => 'Ergebnisse';
|
||||
|
||||
@override
|
||||
String get who_said_cabo => 'Wer hat CABO gesagt?';
|
||||
|
||||
@override
|
||||
String get kamikaze => 'Kamikaze';
|
||||
|
||||
@override
|
||||
String get done => 'Fertig';
|
||||
|
||||
@override
|
||||
String get next_round => 'Nächste Runde';
|
||||
|
||||
@override
|
||||
String get settings => 'Einstellungen';
|
||||
|
||||
@override
|
||||
String get cabo_penalty => 'Cabo-Strafe';
|
||||
|
||||
@override
|
||||
String get cabo_penalty_subtitle => '... für falsches Cabo sagen';
|
||||
|
||||
@override
|
||||
String get point_limit => 'Punkte-Limit';
|
||||
|
||||
@override
|
||||
String get point_limit_subtitle => '... hier ist Schluss';
|
||||
|
||||
@override
|
||||
String get reset_to_default => 'Auf Standard zurücksetzen';
|
||||
|
||||
@override
|
||||
String get game_data => 'Spieldaten';
|
||||
|
||||
@override
|
||||
String get import_data => 'Daten importieren';
|
||||
|
||||
@override
|
||||
String get export_data => 'Daten exportieren';
|
||||
|
||||
@override
|
||||
String get error => 'Fehler';
|
||||
|
||||
@override
|
||||
String get error_import => 'Datei konnte nicht importiert werden';
|
||||
|
||||
@override
|
||||
String get error_export => 'Datei konnte nicht exportiert werden';
|
||||
|
||||
@override
|
||||
String get error_found => 'Fehler gefunden?';
|
||||
|
||||
@override
|
||||
String get create_issue => 'Issue erstellen';
|
||||
|
||||
@override
|
||||
String get app_version => 'App-Version';
|
||||
|
||||
@override
|
||||
String get build => 'Build';
|
||||
|
||||
@override
|
||||
String get load_version => 'Lade Version...';
|
||||
|
||||
@override
|
||||
String get about_text =>
|
||||
'Hey :) Danke, dass du als eine:r der ersten User meiner ersten eigenen App dabei bist! Ich hab sehr viel Arbeit in dieses Projekt gesteckt und auch, wenn ich (hoffentlich) an vieles Gedacht hab, wird auf jeden Fall noch nicht alles 100% funktionieren. Solltest du also irgendwelche Fehler entdecken oder Feedback zum Design oder der Benutzerfreundlichkeit haben, zögere bitte nicht sie mir auf den dir bekannten Wegen mitzuteilen. Danke! ';
|
||||
}
|
||||
200
lib/l10n/app_localizations_en.dart
Normal file
200
lib/l10n/app_localizations_en.dart
Normal file
@@ -0,0 +1,200 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for English (`en`).
|
||||
class AppLocalizationsEn extends AppLocalizations {
|
||||
AppLocalizationsEn([String locale = 'en']) : super(locale);
|
||||
|
||||
@override
|
||||
String get app_name => 'Cabo Counter';
|
||||
|
||||
@override
|
||||
String get round => 'Round';
|
||||
|
||||
@override
|
||||
String get rounds => 'Rounds';
|
||||
|
||||
@override
|
||||
String get mode => 'Mode';
|
||||
|
||||
@override
|
||||
String get points => 'Points';
|
||||
|
||||
@override
|
||||
String get unlimited => 'Unlimited';
|
||||
|
||||
@override
|
||||
String get delete => 'Delete';
|
||||
|
||||
@override
|
||||
String get cancel => 'Cancel';
|
||||
|
||||
@override
|
||||
String get game => 'Game';
|
||||
|
||||
@override
|
||||
String get ok => 'OK';
|
||||
|
||||
@override
|
||||
String get player => 'Player';
|
||||
|
||||
@override
|
||||
String get players => 'Players';
|
||||
|
||||
@override
|
||||
String get name => 'Name';
|
||||
|
||||
@override
|
||||
String get home => 'Home';
|
||||
|
||||
@override
|
||||
String get about => 'About';
|
||||
|
||||
@override
|
||||
String get empty_text_1 => 'Pretty empty here...';
|
||||
|
||||
@override
|
||||
String get empty_text_2 =>
|
||||
'Add a new round using the button in the top right corner';
|
||||
|
||||
@override
|
||||
String get delete_game_title => 'Delete game?';
|
||||
|
||||
@override
|
||||
String delete_game_message(String gameTitle) {
|
||||
return 'Are you sure you want to delete the game $gameTitle? This action cannot be undone.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get overview => 'Overview';
|
||||
|
||||
@override
|
||||
String get new_game => 'New Game';
|
||||
|
||||
@override
|
||||
String get game_title => 'Game Title';
|
||||
|
||||
@override
|
||||
String get select_mode => 'Select a mode';
|
||||
|
||||
@override
|
||||
String get add_player => 'Add Player';
|
||||
|
||||
@override
|
||||
String get create_game => 'Create Game';
|
||||
|
||||
@override
|
||||
String get max_players_title => 'Maximum reached';
|
||||
|
||||
@override
|
||||
String get max_players_message => 'A maximum of 5 players can be added.';
|
||||
|
||||
@override
|
||||
String get no_gameTitle_title => 'No Title';
|
||||
|
||||
@override
|
||||
String get no_gameTitle_message => 'You must enter a title for the game.';
|
||||
|
||||
@override
|
||||
String get no_mode_title => 'No Mode';
|
||||
|
||||
@override
|
||||
String get no_mode_message => 'You must select a game mode.';
|
||||
|
||||
@override
|
||||
String get min_players_title => 'Too few players';
|
||||
|
||||
@override
|
||||
String get min_players_message => 'At least 2 players must be added.';
|
||||
|
||||
@override
|
||||
String get no_name_title => 'No Name';
|
||||
|
||||
@override
|
||||
String get no_name_message => 'Each player must have a name.';
|
||||
|
||||
@override
|
||||
String get select_game_mode => 'Select game mode';
|
||||
|
||||
@override
|
||||
String point_limit_description(int pointLimit) {
|
||||
return 'The game ends when a player reaches more than $pointLimit points.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get unlimited_description =>
|
||||
'There is no limit. The game continues until you decide to stop.';
|
||||
|
||||
@override
|
||||
String get results => 'Results';
|
||||
|
||||
@override
|
||||
String get who_said_cabo => 'Who said CABO?';
|
||||
|
||||
@override
|
||||
String get kamikaze => 'Kamikaze';
|
||||
|
||||
@override
|
||||
String get done => 'Done';
|
||||
|
||||
@override
|
||||
String get next_round => 'Next Round';
|
||||
|
||||
@override
|
||||
String get settings => 'Settings';
|
||||
|
||||
@override
|
||||
String get cabo_penalty => 'Cabo Penalty';
|
||||
|
||||
@override
|
||||
String get cabo_penalty_subtitle => '... for falsely calling Cabo';
|
||||
|
||||
@override
|
||||
String get point_limit => 'Point Limit';
|
||||
|
||||
@override
|
||||
String get point_limit_subtitle => '... the game ends here';
|
||||
|
||||
@override
|
||||
String get reset_to_default => 'Reset to Default';
|
||||
|
||||
@override
|
||||
String get game_data => 'Game Data';
|
||||
|
||||
@override
|
||||
String get import_data => 'Import Data';
|
||||
|
||||
@override
|
||||
String get export_data => 'Export Data';
|
||||
|
||||
@override
|
||||
String get error => 'Error';
|
||||
|
||||
@override
|
||||
String get error_import => 'Could not import file';
|
||||
|
||||
@override
|
||||
String get error_export => 'Could not export file';
|
||||
|
||||
@override
|
||||
String get error_found => 'Found a bug?';
|
||||
|
||||
@override
|
||||
String get create_issue => 'Create Issue';
|
||||
|
||||
@override
|
||||
String get app_version => 'App Version';
|
||||
|
||||
@override
|
||||
String get build => 'Build';
|
||||
|
||||
@override
|
||||
String get load_version => 'Loading version...';
|
||||
|
||||
@override
|
||||
String get about_text =>
|
||||
'Hey :) Thanks for being one of the first users of my first app! I’ve put a lot of work into this project, and even though I (hopefully) thought of a lot, not everything will work 100% yet. If you discover any bugs or have feedback on the design or usability, please don’t hesitate to let me know. Thanks!';
|
||||
}
|
||||
1
lib/l10n/untranslated_messages.json
Normal file
1
lib/l10n/untranslated_messages.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:cabo_counter/l10n/app_localizations.dart';
|
||||
import 'package:cabo_counter/services/config_service.dart';
|
||||
import 'package:cabo_counter/services/local_storage_service.dart';
|
||||
import 'package:cabo_counter/utility/custom_theme.dart';
|
||||
@@ -50,6 +51,11 @@ class _AppState extends State<App> with WidgetsBindingObserver {
|
||||
LocalStorageService.loadGameSessions();
|
||||
|
||||
return CupertinoApp(
|
||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
supportedLocales: const [
|
||||
Locale('en'), // English
|
||||
Locale('de'), // German
|
||||
],
|
||||
theme: CupertinoThemeData(
|
||||
brightness: Brightness.dark,
|
||||
primaryColor: CustomTheme.primaryColor,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:cabo_counter/data/game_session.dart';
|
||||
import 'package:cabo_counter/l10n/app_localizations.dart';
|
||||
import 'package:cabo_counter/utility/custom_theme.dart';
|
||||
import 'package:cabo_counter/views/round_view.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
@@ -31,7 +32,7 @@ class _ActiveGameViewState extends State<ActiveGameView> {
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(10, 10, 0, 0),
|
||||
child: Text(
|
||||
'Spieler:innen',
|
||||
AppLocalizations.of(context).players,
|
||||
style: CustomTheme.rowTitle,
|
||||
),
|
||||
),
|
||||
@@ -58,7 +59,7 @@ class _ActiveGameViewState extends State<ActiveGameView> {
|
||||
const SizedBox(width: 5),
|
||||
Text(
|
||||
'${widget.gameSession.playerScores[playerIndex]} '
|
||||
'Punkte')
|
||||
'${AppLocalizations.of(context).points}')
|
||||
],
|
||||
),
|
||||
);
|
||||
@@ -67,7 +68,7 @@ class _ActiveGameViewState extends State<ActiveGameView> {
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(10, 10, 0, 0),
|
||||
child: Text(
|
||||
'Runden',
|
||||
AppLocalizations.of(context).rounds,
|
||||
style: CustomTheme.rowTitle,
|
||||
),
|
||||
),
|
||||
@@ -80,7 +81,7 @@ class _ActiveGameViewState extends State<ActiveGameView> {
|
||||
padding: const EdgeInsets.all(1),
|
||||
child: CupertinoListTile(
|
||||
title: Text(
|
||||
'Runde ${index + 1}',
|
||||
'${AppLocalizations.of(context).round} ${index + 1}',
|
||||
),
|
||||
trailing: index + 1 !=
|
||||
widget.gameSession.roundNumber ||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'package:cabo_counter/data/game_manager.dart';
|
||||
import 'package:cabo_counter/data/game_session.dart';
|
||||
import 'package:cabo_counter/l10n/app_localizations.dart';
|
||||
import 'package:cabo_counter/utility/custom_theme.dart';
|
||||
import 'package:cabo_counter/utility/globals.dart';
|
||||
import 'package:cabo_counter/views/active_game_view.dart';
|
||||
@@ -30,9 +31,9 @@ class _CreateGameState extends State<CreateGame> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
previousPageTitle: 'Übersicht',
|
||||
middle: Text('Neues Spiel'),
|
||||
navigationBar: CupertinoNavigationBar(
|
||||
previousPageTitle: AppLocalizations.of(context).overview,
|
||||
middle: Text(AppLocalizations.of(context).new_game),
|
||||
),
|
||||
child: SafeArea(
|
||||
child: Center(
|
||||
@@ -43,7 +44,7 @@ class _CreateGameState extends State<CreateGame> {
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(10, 10, 0, 0),
|
||||
child: Text(
|
||||
'Spiel',
|
||||
AppLocalizations.of(context).game,
|
||||
style: CustomTheme.rowTitle,
|
||||
),
|
||||
),
|
||||
@@ -52,9 +53,9 @@ class _CreateGameState extends State<CreateGame> {
|
||||
child: CupertinoTextField(
|
||||
decoration: const BoxDecoration(),
|
||||
maxLength: 16,
|
||||
prefix: const Text('Name'),
|
||||
prefix: Text(AppLocalizations.of(context).name),
|
||||
textAlign: TextAlign.right,
|
||||
placeholder: 'Titel des Spiels',
|
||||
placeholder: AppLocalizations.of(context).game_title,
|
||||
controller: _gameTitleTextController,
|
||||
),
|
||||
),
|
||||
@@ -64,15 +65,15 @@ class _CreateGameState extends State<CreateGame> {
|
||||
child: CupertinoTextField(
|
||||
decoration: const BoxDecoration(),
|
||||
readOnly: true,
|
||||
prefix: const Text('Modus'),
|
||||
prefix: Text(AppLocalizations.of(context).mode),
|
||||
suffix: Row(
|
||||
children: [
|
||||
Text(
|
||||
selectedMode == null
|
||||
? 'Wähle einen Modus'
|
||||
? AppLocalizations.of(context).select_mode
|
||||
: (selectedMode!
|
||||
? '${Globals.pointLimit} Punkte'
|
||||
: 'Unbegrenzt'),
|
||||
? '${Globals.pointLimit} ${AppLocalizations.of(context).points}'
|
||||
: AppLocalizations.of(context).unlimited),
|
||||
),
|
||||
const SizedBox(width: 3),
|
||||
const CupertinoListTileChevron(),
|
||||
@@ -99,7 +100,7 @@ class _CreateGameState extends State<CreateGame> {
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(10, 10, 0, 0),
|
||||
child: Text(
|
||||
'Spieler:innen',
|
||||
AppLocalizations.of(context).players,
|
||||
style: CustomTheme.rowTitle,
|
||||
),
|
||||
),
|
||||
@@ -114,18 +115,18 @@ class _CreateGameState extends State<CreateGame> {
|
||||
padding: const EdgeInsets.symmetric(vertical: 8.0),
|
||||
child: CupertinoButton(
|
||||
padding: EdgeInsets.zero,
|
||||
child: const Row(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
const Icon(
|
||||
CupertinoIcons.add_circled,
|
||||
color: CupertinoColors.activeGreen,
|
||||
size: 25,
|
||||
),
|
||||
SizedBox(width: 8),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
'Spieler hinzufügen',
|
||||
style: TextStyle(
|
||||
AppLocalizations.of(context).add_player,
|
||||
style: const TextStyle(
|
||||
color: CupertinoColors.activeGreen,
|
||||
),
|
||||
),
|
||||
@@ -141,14 +142,14 @@ class _CreateGameState extends State<CreateGame> {
|
||||
showCupertinoDialog(
|
||||
context: context,
|
||||
builder: (context) => CupertinoAlertDialog(
|
||||
title:
|
||||
const Text('Maximale Spielerzahl erreicht'),
|
||||
content: const Text(
|
||||
'Es können maximal 5 Spieler hinzugefügt '
|
||||
'werden.'),
|
||||
title: Text(AppLocalizations.of(context)
|
||||
.max_players_title),
|
||||
content: Text(AppLocalizations.of(context)
|
||||
.max_players_message),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: const Text('OK'),
|
||||
child:
|
||||
Text(AppLocalizations.of(context).ok),
|
||||
onPressed: () => Navigator.pop(context),
|
||||
),
|
||||
],
|
||||
@@ -182,7 +183,8 @@ class _CreateGameState extends State<CreateGame> {
|
||||
Expanded(
|
||||
child: CupertinoTextField(
|
||||
controller: _playerNameTextControllers[index],
|
||||
placeholder: 'Spieler:in ${index + 1}',
|
||||
placeholder:
|
||||
'${AppLocalizations.of(context).player} ${index + 1}',
|
||||
padding: const EdgeInsets.all(12),
|
||||
decoration: const BoxDecoration(),
|
||||
),
|
||||
@@ -197,12 +199,12 @@ class _CreateGameState extends State<CreateGame> {
|
||||
Center(
|
||||
child: CupertinoButton(
|
||||
padding: EdgeInsets.zero,
|
||||
child: const Row(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'Spiel erstellen ',
|
||||
style: TextStyle(
|
||||
AppLocalizations.of(context).create_game,
|
||||
style: const TextStyle(
|
||||
color: CupertinoColors.activeGreen,
|
||||
),
|
||||
),
|
||||
@@ -213,13 +215,13 @@ class _CreateGameState extends State<CreateGame> {
|
||||
showCupertinoDialog(
|
||||
context: context,
|
||||
builder: (context) => CupertinoAlertDialog(
|
||||
title: const Text('Fehler'),
|
||||
content: const Text(
|
||||
'Es muss ein Titel für das Spiel eingegeben '
|
||||
'werden.'),
|
||||
title: Text(
|
||||
AppLocalizations.of(context).no_gameTitle_title),
|
||||
content: Text(
|
||||
AppLocalizations.of(context).no_gameTitle_message),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: const Text('OK'),
|
||||
child: Text(AppLocalizations.of(context).ok),
|
||||
onPressed: () => Navigator.pop(context),
|
||||
),
|
||||
],
|
||||
@@ -231,12 +233,12 @@ class _CreateGameState extends State<CreateGame> {
|
||||
showCupertinoDialog(
|
||||
context: context,
|
||||
builder: (context) => CupertinoAlertDialog(
|
||||
title: const Text('Fehler'),
|
||||
content: const Text(
|
||||
'Es muss ein Spielmodus ausgewählt werden.'),
|
||||
title: Text(AppLocalizations.of(context).no_mode_title),
|
||||
content:
|
||||
Text(AppLocalizations.of(context).no_mode_message),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: const Text('OK'),
|
||||
child: Text(AppLocalizations.of(context).ok),
|
||||
onPressed: () => Navigator.pop(context),
|
||||
),
|
||||
],
|
||||
@@ -248,13 +250,13 @@ class _CreateGameState extends State<CreateGame> {
|
||||
showCupertinoDialog(
|
||||
context: context,
|
||||
builder: (context) => CupertinoAlertDialog(
|
||||
title: const Text('Fehler'),
|
||||
content: const Text(
|
||||
'Es müssen mindestens 2 Spieler hinzugefügt '
|
||||
'werden.'),
|
||||
title: Text(
|
||||
AppLocalizations.of(context).min_players_title),
|
||||
content: Text(
|
||||
AppLocalizations.of(context).min_players_message),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: const Text('OK'),
|
||||
child: Text(AppLocalizations.of(context).ok),
|
||||
onPressed: () => Navigator.pop(context),
|
||||
),
|
||||
],
|
||||
@@ -266,17 +268,18 @@ class _CreateGameState extends State<CreateGame> {
|
||||
showCupertinoDialog(
|
||||
context: context,
|
||||
builder: (context) => CupertinoAlertDialog(
|
||||
title: const Text('Fehler'),
|
||||
title: Text(AppLocalizations.of(context).no_name_title),
|
||||
content:
|
||||
const Text('Jeder Spieler muss einen Namen haben.'),
|
||||
Text(AppLocalizations.of(context).no_name_message),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: const Text('OK'),
|
||||
child: Text(AppLocalizations.of(context).ok),
|
||||
onPressed: () => Navigator.pop(context),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
List<String> players = [];
|
||||
@@ -298,7 +301,7 @@ class _CreateGameState extends State<CreateGame> {
|
||||
CupertinoPageRoute(
|
||||
builder: (context) => ActiveGameView(
|
||||
gameSession: gameManager.gameList[index])));
|
||||
} else {}
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:cabo_counter/l10n/app_localizations.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
@@ -10,18 +11,18 @@ class InformationView extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Über'),
|
||||
navigationBar: CupertinoNavigationBar(
|
||||
middle: Text(AppLocalizations.of(context).about),
|
||||
),
|
||||
child: SafeArea(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
const Padding(
|
||||
padding: EdgeInsets.fromLTRB(0, 10, 0, 0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(0, 10, 0, 0),
|
||||
child: Text(
|
||||
'Cabo Counter',
|
||||
style: TextStyle(
|
||||
AppLocalizations.of(context).app_name,
|
||||
style: const TextStyle(
|
||||
fontSize: 30,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
@@ -34,18 +35,10 @@ class InformationView extends StatelessWidget {
|
||||
height: 200,
|
||||
child: Image.asset('assets/cabo_counter-logo_rounded.png'),
|
||||
)),
|
||||
const Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 30),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 30),
|
||||
child: Text(
|
||||
'Hey :) Danke, dass du als eine:r der ersten User '
|
||||
'meiner ersten eigenen App dabei bist! Ich hab sehr '
|
||||
'viel Arbeit in dieses Projekt gesteckt und auch, '
|
||||
'wenn ich (hoffentlich) an vieles Gedacht hab, wird '
|
||||
'auf jeden Fall noch nicht alles 100% funktionieren. '
|
||||
'Solltest du also irgendwelche Fehler entdecken oder '
|
||||
'Feedback zum Design oder der Benutzerfreundlichkeit'
|
||||
' haben, zögere bitte nicht sie mir auf den dir '
|
||||
'bekannten Wegen mitzuteilen. Danke! ',
|
||||
AppLocalizations.of(context).about_text,
|
||||
textAlign: TextAlign.center,
|
||||
softWrap: true,
|
||||
)),
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:cabo_counter/data/game_manager.dart';
|
||||
import 'package:cabo_counter/l10n/app_localizations.dart';
|
||||
import 'package:cabo_counter/services/local_storage_service.dart';
|
||||
import 'package:cabo_counter/utility/custom_theme.dart';
|
||||
import 'package:cabo_counter/utility/globals.dart';
|
||||
@@ -141,7 +142,7 @@ class _MainMenuViewState extends State<MainMenuView> {
|
||||
fontSize: 14),
|
||||
)
|
||||
: Text(
|
||||
'Modus: ${_translateGameMode(session.isPointsLimitEnabled)}',
|
||||
'${AppLocalizations.of(context).mode}: ${_translateGameMode(session.isPointsLimitEnabled)}',
|
||||
style: const TextStyle(
|
||||
fontSize: 14),
|
||||
),
|
||||
@@ -186,8 +187,10 @@ class _MainMenuViewState extends State<MainMenuView> {
|
||||
/// Translates the game mode boolean into the corresponding String.
|
||||
/// If [pointLimit] is true, it returns '101 Punkte', otherwise it returns 'Unbegrenzt'.
|
||||
String _translateGameMode(bool pointLimit) {
|
||||
if (pointLimit) return '${Globals.pointLimit} Punkte';
|
||||
return 'Unbegrenzt';
|
||||
if (pointLimit) {
|
||||
return '${Globals.pointLimit} ${AppLocalizations.of(context).points}';
|
||||
}
|
||||
return AppLocalizations.of(context).unlimited;
|
||||
}
|
||||
|
||||
/// Shows a confirmation dialog to delete all game sessions.
|
||||
@@ -198,21 +201,21 @@ class _MainMenuViewState extends State<MainMenuView> {
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return CupertinoAlertDialog(
|
||||
title: const Text('Spiel löschen?'),
|
||||
title: Text(AppLocalizations.of(context).delete_game_title),
|
||||
content: Text(
|
||||
'Bist du sicher, dass du die Runde "$gameTitle" löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.'),
|
||||
AppLocalizations.of(context).delete_game_message(gameTitle)),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
onPressed: () {
|
||||
Navigator.pop(context, false);
|
||||
},
|
||||
child: const Text('Abbrechen'),
|
||||
child: Text(AppLocalizations.of(context).cancel),
|
||||
),
|
||||
CupertinoDialogAction(
|
||||
onPressed: () {
|
||||
Navigator.pop(context, true);
|
||||
},
|
||||
child: const Text('Löschen'),
|
||||
child: Text(AppLocalizations.of(context).delete),
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:cabo_counter/l10n/app_localizations.dart';
|
||||
import 'package:cabo_counter/utility/custom_theme.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
@@ -8,17 +9,19 @@ class ModeSelectionMenu extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Spielmodus auswählen'),
|
||||
navigationBar: CupertinoNavigationBar(
|
||||
middle: Text(AppLocalizations.of(context).select_game_mode),
|
||||
),
|
||||
child: ListView(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(0, 16, 0, 0),
|
||||
child: CupertinoListTile(
|
||||
title: Text('$pointLimit Punkte', style: CustomTheme.modeTitle),
|
||||
title: Text('$pointLimit ${AppLocalizations.of(context).points}',
|
||||
style: CustomTheme.modeTitle),
|
||||
subtitle: Text(
|
||||
'Es wird solange gespielt, bis einer Spieler mehr als $pointLimit Punkte erreicht',
|
||||
AppLocalizations.of(context)
|
||||
.point_limit_description(pointLimit),
|
||||
style: CustomTheme.modeDescription,
|
||||
maxLines: 3,
|
||||
),
|
||||
@@ -30,10 +33,10 @@ class ModeSelectionMenu extends StatelessWidget {
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 16.0),
|
||||
child: CupertinoListTile(
|
||||
title: Text('Unbegrenzt', style: CustomTheme.modeTitle),
|
||||
subtitle: const Text(
|
||||
'Dem Spiel sind keine Grenzen gesetzt. Es wird so lange '
|
||||
'gespielt, bis Ihr keine Lust mehr habt.',
|
||||
title: Text(AppLocalizations.of(context).unlimited,
|
||||
style: CustomTheme.modeTitle),
|
||||
subtitle: Text(
|
||||
AppLocalizations.of(context).unlimited_description,
|
||||
style: CustomTheme.modeDescription,
|
||||
maxLines: 3,
|
||||
),
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:cabo_counter/data/game_session.dart';
|
||||
import 'package:cabo_counter/l10n/app_localizations.dart';
|
||||
import 'package:cabo_counter/services/local_storage_service.dart';
|
||||
import 'package:cabo_counter/utility/custom_theme.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
@@ -71,15 +72,14 @@ class _RoundViewState extends State<RoundView> {
|
||||
resizeToAvoidBottomInset: false,
|
||||
navigationBar: CupertinoNavigationBar(
|
||||
transitionBetweenRoutes: true,
|
||||
middle: const Text('Ergebnisse'),
|
||||
previousPageTitle: 'Übersicht',
|
||||
middle: Text(AppLocalizations.of(context).results),
|
||||
leading: CupertinoButton(
|
||||
padding: EdgeInsets.zero,
|
||||
onPressed: () => {
|
||||
LocalStorageService.saveGameSessions(),
|
||||
Navigator.pop(context, widget.gameSession)
|
||||
},
|
||||
child: const Text('Abbrechen'),
|
||||
child: Text(AppLocalizations.of(context).cancel),
|
||||
),
|
||||
),
|
||||
child: Stack(
|
||||
@@ -92,12 +92,13 @@ class _RoundViewState extends State<RoundView> {
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
const SizedBox(height: 40),
|
||||
Text('Runde ${widget.roundNumber}',
|
||||
Text(
|
||||
'${AppLocalizations.of(context).round} ${widget.roundNumber}',
|
||||
style: CustomTheme.roundTitle),
|
||||
const SizedBox(height: 10),
|
||||
const Text(
|
||||
'Wer hat CABO gesagt?',
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
Text(
|
||||
AppLocalizations.of(context).who_said_cabo,
|
||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(
|
||||
@@ -156,19 +157,23 @@ class _RoundViewState extends State<RoundView> {
|
||||
),
|
||||
),
|
||||
),
|
||||
const Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 20.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 20.0),
|
||||
child: CupertinoListTile(
|
||||
title: Text('Spieler:in'),
|
||||
title: Text(AppLocalizations.of(context).player),
|
||||
trailing: Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 100,
|
||||
child: Center(child: Text('Punkte'))),
|
||||
SizedBox(width: 20),
|
||||
child: Center(
|
||||
child: Text(
|
||||
AppLocalizations.of(context).points))),
|
||||
const SizedBox(width: 20),
|
||||
SizedBox(
|
||||
width: 80,
|
||||
child: Center(child: Text('Kamikaze'))),
|
||||
child: Center(
|
||||
child: Text(AppLocalizations.of(context)
|
||||
.kamikaze))),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -189,7 +194,7 @@ class _RoundViewState extends State<RoundView> {
|
||||
title: Row(children: [Text(name)]),
|
||||
subtitle: Text(
|
||||
'${widget.gameSession.playerScores[index]}'
|
||||
' Punkte'),
|
||||
' ${AppLocalizations.of(context).points}'),
|
||||
trailing: Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
@@ -212,7 +217,8 @@ class _RoundViewState extends State<RoundView> {
|
||||
? TextInputAction.done
|
||||
: TextInputAction.next,
|
||||
controller: _scoreControllerList[index],
|
||||
placeholder: 'Punkte',
|
||||
placeholder:
|
||||
AppLocalizations.of(context).points,
|
||||
textAlign: TextAlign.center,
|
||||
onSubmitted: (_) =>
|
||||
_focusNextTextfield(index),
|
||||
@@ -287,7 +293,7 @@ class _RoundViewState extends State<RoundView> {
|
||||
Navigator.pop(context, widget.gameSession);
|
||||
}
|
||||
: null,
|
||||
child: const Text('Fertig'),
|
||||
child: Text(AppLocalizations.of(context).done),
|
||||
),
|
||||
CupertinoButton(
|
||||
onPressed: _areRoundInputsValid()
|
||||
@@ -309,7 +315,7 @@ class _RoundViewState extends State<RoundView> {
|
||||
}
|
||||
}
|
||||
: null,
|
||||
child: const Text('Nächste Runde'),
|
||||
child: Text(AppLocalizations.of(context).next_round),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:cabo_counter/l10n/app_localizations.dart';
|
||||
import 'package:cabo_counter/services/config_service.dart';
|
||||
import 'package:cabo_counter/services/local_storage_service.dart';
|
||||
import 'package:cabo_counter/utility/custom_theme.dart';
|
||||
@@ -25,8 +26,8 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CupertinoPageScaffold(
|
||||
navigationBar: const CupertinoNavigationBar(
|
||||
middle: Text('Einstellungen'),
|
||||
navigationBar: CupertinoNavigationBar(
|
||||
middle: Text(AppLocalizations.of(context).settings),
|
||||
),
|
||||
child: SafeArea(
|
||||
child: Stack(
|
||||
@@ -38,7 +39,7 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(10, 10, 0, 0),
|
||||
child: Text(
|
||||
'Punkte',
|
||||
AppLocalizations.of(context).points,
|
||||
style: CustomTheme.rowTitle,
|
||||
),
|
||||
),
|
||||
@@ -46,8 +47,9 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
padding: const EdgeInsets.fromLTRB(15, 10, 10, 0),
|
||||
child: CupertinoListTile(
|
||||
padding: EdgeInsets.zero,
|
||||
title: const Text('Cabo-Strafe'),
|
||||
subtitle: const Text('... für falsches Cabo sagen'),
|
||||
title: Text(AppLocalizations.of(context).cabo_penalty),
|
||||
subtitle: Text(
|
||||
AppLocalizations.of(context).cabo_penalty_subtitle),
|
||||
trailing: Stepper(
|
||||
key: _stepperKey1,
|
||||
initialValue: Globals.caboPenalty,
|
||||
@@ -66,8 +68,9 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
padding: const EdgeInsets.fromLTRB(15, 10, 10, 0),
|
||||
child: CupertinoListTile(
|
||||
padding: EdgeInsets.zero,
|
||||
title: const Text('Punkte-Limit'),
|
||||
subtitle: const Text('... hier ist Schluss'),
|
||||
title: Text(AppLocalizations.of(context).point_limit),
|
||||
subtitle:
|
||||
Text(AppLocalizations.of(context).point_limit_subtitle),
|
||||
trailing: Stepper(
|
||||
key: _stepperKey2,
|
||||
initialValue: Globals.pointLimit,
|
||||
@@ -93,13 +96,14 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
_stepperKey1 = UniqueKey();
|
||||
_stepperKey2 = UniqueKey();
|
||||
}),
|
||||
child: const Text('Auf Standard zurücksetzten'),
|
||||
child:
|
||||
Text(AppLocalizations.of(context).reset_to_default),
|
||||
),
|
||||
)),
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(10, 10, 0, 0),
|
||||
child: Text(
|
||||
'Spieldaten',
|
||||
AppLocalizations.of(context).game_data,
|
||||
style: CustomTheme.rowTitle,
|
||||
),
|
||||
),
|
||||
@@ -114,7 +118,7 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
color: CustomTheme.primaryColor,
|
||||
sizeStyle: CupertinoButtonSize.medium,
|
||||
child: Text(
|
||||
'Daten importieren',
|
||||
AppLocalizations.of(context).import_data,
|
||||
style:
|
||||
TextStyle(color: CustomTheme.backgroundColor),
|
||||
),
|
||||
@@ -125,12 +129,17 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
showCupertinoDialog(
|
||||
context: context,
|
||||
builder: (context) => CupertinoAlertDialog(
|
||||
title: const Text('Fehler'),
|
||||
content: const Text(
|
||||
'Datei konnte nicht importiert werden.'),
|
||||
title: Text(
|
||||
AppLocalizations.of(context)
|
||||
.error),
|
||||
content: Text(
|
||||
AppLocalizations.of(context)
|
||||
.error_import),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: const Text('OK'),
|
||||
child: Text(
|
||||
AppLocalizations.of(context)
|
||||
.ok),
|
||||
onPressed: () =>
|
||||
Navigator.pop(context),
|
||||
),
|
||||
@@ -145,7 +154,7 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
color: CustomTheme.primaryColor,
|
||||
sizeStyle: CupertinoButtonSize.medium,
|
||||
child: Text(
|
||||
'Daten exportieren',
|
||||
AppLocalizations.of(context).export_data,
|
||||
style:
|
||||
TextStyle(color: CustomTheme.backgroundColor),
|
||||
),
|
||||
@@ -156,12 +165,14 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
showCupertinoDialog(
|
||||
context: context,
|
||||
builder: (context) => CupertinoAlertDialog(
|
||||
title: const Text('Fehler'),
|
||||
content: const Text(
|
||||
'Datei konnte nicht exportiert werden.'),
|
||||
title:
|
||||
Text(AppLocalizations.of(context).error),
|
||||
content: Text(AppLocalizations.of(context)
|
||||
.error_export),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: const Text('OK'),
|
||||
child:
|
||||
Text(AppLocalizations.of(context).ok),
|
||||
onPressed: () => Navigator.pop(context),
|
||||
),
|
||||
],
|
||||
@@ -181,8 +192,8 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
right: 0,
|
||||
child: Column(
|
||||
children: [
|
||||
const Center(
|
||||
child: Text('Fehler gefunden?'),
|
||||
Center(
|
||||
child: Text(AppLocalizations.of(context).error_found),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(0, 0, 0, 30),
|
||||
@@ -190,7 +201,7 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
child: CupertinoButton(
|
||||
onPressed: () => launchUrl(Uri.parse(
|
||||
'https://github.com/flixcoo/Cabo-Counter/issues')),
|
||||
child: const Text('Issue erstellen'),
|
||||
child: Text(AppLocalizations.of(context).create_issue),
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -200,17 +211,17 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
if (snapshot.hasData) {
|
||||
return Text(
|
||||
'${Globals.appDevPhase} ${snapshot.data!.version} '
|
||||
'(Build ${snapshot.data!.buildNumber})',
|
||||
'(${AppLocalizations.of(context).build} ${snapshot.data!.buildNumber})',
|
||||
textAlign: TextAlign.center,
|
||||
);
|
||||
} else if (snapshot.hasError) {
|
||||
return const Text(
|
||||
'App-Version -.-.- (Build -)',
|
||||
return Text(
|
||||
'${AppLocalizations.of(context).app_version} -.-.- (${AppLocalizations.of(context).build} -)',
|
||||
textAlign: TextAlign.center,
|
||||
);
|
||||
}
|
||||
return const Text(
|
||||
'Lade Version...',
|
||||
return Text(
|
||||
AppLocalizations.of(context).load_version,
|
||||
textAlign: TextAlign.center,
|
||||
);
|
||||
},
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:cabo_counter/l10n/app_localizations.dart';
|
||||
import 'package:cabo_counter/utility/custom_theme.dart';
|
||||
import 'package:cabo_counter/views/information_view.dart';
|
||||
import 'package:cabo_counter/views/main_menu_view.dart';
|
||||
@@ -19,18 +20,18 @@ class _TabViewState extends State<TabView> {
|
||||
backgroundColor: CustomTheme.backgroundTintColor,
|
||||
iconSize: 27,
|
||||
height: 55,
|
||||
items: const <BottomNavigationBarItem>[
|
||||
items: <BottomNavigationBarItem>[
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(
|
||||
icon: const Icon(
|
||||
CupertinoIcons.house_fill,
|
||||
),
|
||||
label: 'Home',
|
||||
label: AppLocalizations.of(context).home,
|
||||
),
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(
|
||||
icon: const Icon(
|
||||
CupertinoIcons.info,
|
||||
),
|
||||
label: 'About',
|
||||
label: AppLocalizations.of(context).about,
|
||||
),
|
||||
]),
|
||||
tabBuilder: (BuildContext context, int index) {
|
||||
|
||||
Reference in New Issue
Block a user