change placement to text in match detail view
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 47s
Pull Request Pipeline / lint (pull_request) Successful in 50s

This commit is contained in:
2026-05-09 17:47:23 +02:00
parent 9781a20b38
commit 616c239375
6 changed files with 50 additions and 2 deletions

View File

@@ -73,6 +73,7 @@
"none_group": "Keine", "none_group": "Keine",
"not_available": "Nicht verfügbar", "not_available": "Nicht verfügbar",
"placement": "Platzierung", "placement": "Platzierung",
"place": "Platz",
"played_matches": "Gespielte Spiele", "played_matches": "Gespielte Spiele",
"player_name": "Spieler:innenname", "player_name": "Spieler:innenname",
"players": "Spieler:innen", "players": "Spieler:innen",

View File

@@ -224,6 +224,9 @@
"@placement": { "@placement": {
"description": "Title for placement ruleset" "description": "Title for placement ruleset"
}, },
"@place": {
"description": "Label for placement text in match detail view"
},
"@played_matches": { "@played_matches": {
"description": "Label for played matches statistic" "description": "Label for played matches statistic"
}, },
@@ -416,6 +419,7 @@
"none_group": "None", "none_group": "None",
"not_available": "Not available", "not_available": "Not available",
"placement": "Placement", "placement": "Placement",
"place": "place",
"played_matches": "Played Matches", "played_matches": "Played Matches",
"player_name": "Player name", "player_name": "Player name",
"players": "Players", "players": "Players",

View File

@@ -536,6 +536,12 @@ abstract class AppLocalizations {
/// **'Placement'** /// **'Placement'**
String get placement; String get placement;
/// Label for placement text in match detail view
///
/// In en, this message translates to:
/// **'place'**
String get place;
/// Label for played matches statistic /// Label for played matches statistic
/// ///
/// In en, this message translates to: /// In en, this message translates to:

View File

@@ -85,7 +85,7 @@ class AppLocalizationsDe extends AppLocalizations {
String get delete_match => 'Spiel löschen'; String get delete_match => 'Spiel löschen';
@override @override
String get drag_to_set_placement => 'Drag to set placement'; String get drag_to_set_placement => 'Ziehen um Platzierung zu setzen';
@override @override
String get edit_group => 'Gruppe bearbeiten'; String get edit_group => 'Gruppe bearbeiten';
@@ -235,6 +235,9 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get placement => 'Platzierung'; String get placement => 'Platzierung';
@override
String get place => 'Platz';
@override @override
String get played_matches => 'Gespielte Spiele'; String get played_matches => 'Gespielte Spiele';

View File

@@ -235,6 +235,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get placement => 'Placement'; String get placement => 'Placement';
@override
String get place => 'place';
@override @override
String get played_matches => 'Played Matches'; String get played_matches => 'Played Matches';

View File

@@ -318,7 +318,7 @@ class _MatchDetailViewState extends State<MatchDetailView> {
), ),
Text( Text(
ruleset == Ruleset.placement ruleset == Ruleset.placement
? '#${i + 1}' ? getPlacementText(i + 1, context, loc)
: getPointLabel(loc, playerScores[i].$2), : getPointLabel(loc, playerScores[i].$2),
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 16,
@@ -337,4 +337,35 @@ class _MatchDetailViewState extends State<MatchDetailView> {
return match.game.ruleset == Ruleset.singleWinner || return match.game.ruleset == Ruleset.singleWinner ||
match.game.ruleset == Ruleset.singleLoser; match.game.ruleset == Ruleset.singleLoser;
} }
String getPlacementText(
int rank,
BuildContext context,
AppLocalizations loc,
) {
final locale = Localizations.localeOf(context).languageCode;
if (locale == 'de') {
return '$rank. ${loc.place}';
}
return '${_ordinalEn(rank)} ${loc.place}';
}
String _ordinalEn(int number) {
if (number % 100 >= 11 && number % 100 <= 13) {
return '${number}th';
}
switch (number % 10) {
case 1:
return '${number}st';
case 2:
return '${number}nd';
case 3:
return '${number}rd';
default:
return '${number}th';
}
}
} }