feat(TournamentStats): enhance age class sorting and localization for tournament statistics
All checks were successful
Deploy tt-tagebuch / deploy (push) Successful in 36s

- Improved the sorting logic for age class options in the InternalTournamentStats component, incorporating gender and name for better organization.
- Added new utility functions for handling gender labels and age class sorting values, enhancing clarity in tournament statistics.
- Updated localization strings across multiple languages to reflect changes in age class and gender terminology, improving user accessibility and understanding.
This commit is contained in:
Torsten Schulz (local)
2026-04-08 13:12:19 +02:00
parent 27f8186d91
commit 30994adee8
16 changed files with 85 additions and 27 deletions

View File

@@ -153,11 +153,15 @@ export default {
},
sortedAgeOptions() {
const list = [...(this.stats.ageClassOptions || [])];
list.sort((a, b) =>
this.formatAgeOption(a).localeCompare(this.formatAgeOption(b), 'de', {
sensitivity: 'base',
}),
);
list.sort((a, b) => {
const va = this.ageClassSortValue(a);
const vb = this.ageClassSortValue(b);
if (va !== vb) return va - vb;
const ga = this.tournamentGenderSortOrder(a.gender);
const gb = this.tournamentGenderSortOrder(b.gender);
if (ga !== gb) return ga - gb;
return (a.name || '').localeCompare(b.name || '', 'de', { sensitivity: 'base' });
});
return list;
},
},
@@ -228,19 +232,43 @@ export default {
this.selectedAgeKeys = [];
this.load();
},
/** TT: nur Weiblich vs. Alle (offen); kein „Männlich“ mehr in Turnierklassen */
tournamentClassGenderLabel(gender) {
if (gender === 'female') return this.$t('tournaments.tournamentClassGenderFemale');
return this.$t('tournaments.tournamentClassGenderOpen');
},
tournamentGenderSortOrder(gender) {
return gender === 'female' ? 0 : 1;
},
/**
* Reihenfolge: J9 … J19 (bzw. U…), dann Erwachsene/Senioren, Sonstiges, ohne Klasse zuletzt.
*/
ageClassSortValue(opt) {
if (opt.isNoClass) return 99999;
const name = (opt.name || '').trim();
const ju = name.match(/\bJ\s*(\d+)\b/i) || name.match(/\bU\s*(\d+)\b/i);
if (ju) {
const num = parseInt(ju[1], 10);
return 100 + num;
}
if (/erwachsen|senioren/i.test(name)) return 9000;
if (/damen|herren|aktive|mixed|offen|frei/i.test(name)) return 9100;
return 5000;
},
formatAgeOption(opt) {
if (!opt) return '';
if (opt.isNoClass) return this.$t('tournaments.internalStatsAgeNoClass');
const bits = [];
if (opt.name) bits.push(opt.name);
const nameTrim = (opt.name || '').trim();
if (nameTrim) bits.push(nameTrim);
const min = opt.minBirthYear;
const max = opt.maxBirthYear;
if (min != null && max != null) bits.push(`${min}${max}`);
else if (max != null) bits.push(`${max}`);
else if (min != null) bits.push(` ${min}`);
if (opt.gender === 'male') bits.push(this.$t('members.genderMale'));
else if (opt.gender === 'female') bits.push(this.$t('members.genderFemale'));
else if (opt.gender === 'mixed') bits.push(this.$t('tournaments.genderMixed'));
if (!nameTrim) {
if (min != null && max != null) bits.push(`${min}${max}`);
else if (max != null) bits.push(` ${max}`);
else if (min != null) bits.push(`${min}`);
}
bits.push(this.tournamentClassGenderLabel(opt.gender));
return bits.join(' · ');
},
ageFilterPdfLine() {

View File

@@ -178,7 +178,9 @@
"internalStatsTitle": "Statistik interne Turniere (Einzel)",
"internalStatsOpenButton": "Turnierstatistik (Einzel)",
"internalStatsExportPdf": "Als PDF exportieren",
"internalStatsAgeFilter": "Altersklassen (Einzel)",
"internalStatsAgeFilter": "Altersklassä & Gschlächt (Einzel)",
"tournamentClassGenderFemale": "Weiblich",
"tournamentClassGenderOpen": "Alli",
"internalStatsAgeNoClass": "Ohni Klassäzuordnig",
"internalStatsAgeSelectAll": "Alli",
"internalStatsAgeSelectNone": "Keini",

View File

@@ -409,7 +409,9 @@
"internalStatsTitle": "Statistik interne Turniere (Einzel)",
"internalStatsOpenButton": "Turnierstatistik (Einzel)",
"internalStatsExportPdf": "Als PDF exportieren",
"internalStatsAgeFilter": "Altersklassen (Einzel)",
"internalStatsAgeFilter": "Altersklassen & Geschlecht (Einzel)",
"tournamentClassGenderFemale": "Weiblich",
"tournamentClassGenderOpen": "Alle",
"internalStatsAgeNoClass": "Ohne Klassenzuordnung",
"internalStatsAgeSelectAll": "Alle",
"internalStatsAgeSelectNone": "Keine",

View File

@@ -701,7 +701,9 @@
"internalStatsTitle": "Statistik interne Turniere (Einzel)",
"internalStatsOpenButton": "Turnierstatistik (Einzel)",
"internalStatsExportPdf": "Als PDF exportieren",
"internalStatsAgeFilter": "Altersklassen (Einzel)",
"internalStatsAgeFilter": "Altersklassen & Geschlecht (Einzel)",
"tournamentClassGenderFemale": "Weiblich",
"tournamentClassGenderOpen": "Alle",
"internalStatsAgeNoClass": "Ohne Klassenzuordnung",
"internalStatsAgeSelectAll": "Alle",
"internalStatsAgeSelectNone": "Keine",

View File

@@ -178,7 +178,9 @@
"internalStatsTitle": "Internal tournaments statistics (singles)",
"internalStatsOpenButton": "Tournament statistics (singles)",
"internalStatsExportPdf": "Export as PDF",
"internalStatsAgeFilter": "Age classes (singles)",
"internalStatsAgeFilter": "Age group & gender (singles)",
"tournamentClassGenderFemale": "Female",
"tournamentClassGenderOpen": "Open (all)",
"internalStatsAgeNoClass": "No class assigned",
"internalStatsAgeSelectAll": "All",
"internalStatsAgeSelectNone": "None",

View File

@@ -359,7 +359,9 @@
"internalStatsTitle": "Internal tournaments statistics (singles)",
"internalStatsOpenButton": "Tournament statistics (singles)",
"internalStatsExportPdf": "Export as PDF",
"internalStatsAgeFilter": "Age classes (singles)",
"internalStatsAgeFilter": "Age group & gender (singles)",
"tournamentClassGenderFemale": "Female",
"tournamentClassGenderOpen": "Open (all)",
"internalStatsAgeNoClass": "No class assigned",
"internalStatsAgeSelectAll": "All",
"internalStatsAgeSelectNone": "None",

View File

@@ -178,7 +178,9 @@
"internalStatsTitle": "Internal tournaments statistics (singles)",
"internalStatsOpenButton": "Tournament statistics (singles)",
"internalStatsExportPdf": "Export as PDF",
"internalStatsAgeFilter": "Age classes (singles)",
"internalStatsAgeFilter": "Age group & gender (singles)",
"tournamentClassGenderFemale": "Female",
"tournamentClassGenderOpen": "Open (all)",
"internalStatsAgeNoClass": "No class assigned",
"internalStatsAgeSelectAll": "All",
"internalStatsAgeSelectNone": "None",

View File

@@ -177,7 +177,9 @@
"internalStatsTitle": "Estadísticas de torneos internos (individual)",
"internalStatsOpenButton": "Estadísticas de torneos (individual)",
"internalStatsExportPdf": "Exportar como PDF",
"internalStatsAgeFilter": "Categorías de edad (individual)",
"internalStatsAgeFilter": "Edad y género (individual)",
"tournamentClassGenderFemale": "Femenino",
"tournamentClassGenderOpen": "Abierta (todos)",
"internalStatsAgeNoClass": "Sin clase asignada",
"internalStatsAgeSelectAll": "Todas",
"internalStatsAgeSelectNone": "Ninguna",

View File

@@ -177,7 +177,9 @@
"internalStatsTitle": "Estadistika ng internal na paligsahan (singles)",
"internalStatsOpenButton": "Buksan ang estadistika (singles)",
"internalStatsExportPdf": "I-export bilang PDF",
"internalStatsAgeFilter": "Mga pangkat ng edad (singles)",
"internalStatsAgeFilter": "Edad at kasarian (singles)",
"tournamentClassGenderFemale": "Babae",
"tournamentClassGenderOpen": "Bukas (lahat)",
"internalStatsAgeNoClass": "Walang klase",
"internalStatsAgeSelectAll": "Lahat",
"internalStatsAgeSelectNone": "Wala",

View File

@@ -177,7 +177,9 @@
"internalStatsTitle": "Statistiques des tournois internes (simple)",
"internalStatsOpenButton": "Statistiques (simple)",
"internalStatsExportPdf": "Exporter en PDF",
"internalStatsAgeFilter": "Catégories dâge (simple)",
"internalStatsAgeFilter": "Âge et genre (simple)",
"tournamentClassGenderFemale": "Féminin",
"tournamentClassGenderOpen": "Tous",
"internalStatsAgeNoClass": "Sans classe assignée",
"internalStatsAgeSelectAll": "Tout",
"internalStatsAgeSelectNone": "Aucune",

View File

@@ -177,7 +177,9 @@
"internalStatsTitle": "Statistiche tornei interni (singolo)",
"internalStatsOpenButton": "Statistiche tornei (singolo)",
"internalStatsExportPdf": "Esporta PDF",
"internalStatsAgeFilter": "Categorie di età (singolo)",
"internalStatsAgeFilter": "Età e genere (singolo)",
"tournamentClassGenderFemale": "Femminile",
"tournamentClassGenderOpen": "Aperta (tutti)",
"internalStatsAgeNoClass": "Senza classe assegnata",
"internalStatsAgeSelectAll": "Tutte",
"internalStatsAgeSelectNone": "Nessuna",

View File

@@ -177,7 +177,9 @@
"internalStatsTitle": "内部大会の統計(シングルス)",
"internalStatsOpenButton": "統計を表示(シングルス)",
"internalStatsExportPdf": "PDFで出力",
"internalStatsAgeFilter": "年齢クラス(シングルス)",
"internalStatsAgeFilter": "年齢・性別(シングルス)",
"tournamentClassGenderFemale": "女子",
"tournamentClassGenderOpen": "オープン(全員)",
"internalStatsAgeNoClass": "クラス未設定",
"internalStatsAgeSelectAll": "すべて",
"internalStatsAgeSelectNone": "なし",

View File

@@ -177,7 +177,9 @@
"internalStatsTitle": "Statystyki turniejów wewnętrznych (singel)",
"internalStatsOpenButton": "Statystyki turniejów (singel)",
"internalStatsExportPdf": "Eksportuj do PDF",
"internalStatsAgeFilter": "Klasy wiekowe (singel)",
"internalStatsAgeFilter": "Grupa wiekowa i płeć (singel)",
"tournamentClassGenderFemale": "Kobiety",
"tournamentClassGenderOpen": "Otwarta (wszyscy)",
"internalStatsAgeNoClass": "Bez przypisania do klasy",
"internalStatsAgeSelectAll": "Wszystkie",
"internalStatsAgeSelectNone": "Żadna",

View File

@@ -177,7 +177,9 @@
"internalStatsTitle": "สถิติการแข่งขันภายใน (เดี่ยว)",
"internalStatsOpenButton": "เปิดสถิติ (เดี่ยว)",
"internalStatsExportPdf": "ส่งออก PDF",
"internalStatsAgeFilter": "รุ่นอายุ (เดี่ยว)",
"internalStatsAgeFilter": "รุ่นอายุและเพศ (เดี่ยว)",
"tournamentClassGenderFemale": "หญิง",
"tournamentClassGenderOpen": "เปิด (ทุกคน)",
"internalStatsAgeNoClass": "ไม่มีคลาส",
"internalStatsAgeSelectAll": "ทั้งหมด",
"internalStatsAgeSelectNone": "ไม่มี",

View File

@@ -177,7 +177,9 @@
"internalStatsTitle": "Istatistika ng internal na tournament (singles)",
"internalStatsOpenButton": "Buksan ang istatistika (singles)",
"internalStatsExportPdf": "I-export bilang PDF",
"internalStatsAgeFilter": "Mga pangkat ng edad (singles)",
"internalStatsAgeFilter": "Edad at kasarian (singles)",
"tournamentClassGenderFemale": "Babae",
"tournamentClassGenderOpen": "Bukas (lahat)",
"internalStatsAgeNoClass": "Walang klase",
"internalStatsAgeSelectAll": "Lahat",
"internalStatsAgeSelectNone": "Wala",

View File

@@ -177,7 +177,9 @@
"internalStatsTitle": "内部锦标赛统计(单打)",
"internalStatsOpenButton": "打开单打统计数据",
"internalStatsExportPdf": "导出 PDF",
"internalStatsAgeFilter": "年龄(单打)",
"internalStatsAgeFilter": "年龄与性别(单打)",
"tournamentClassGenderFemale": "女子",
"tournamentClassGenderOpen": "公开组(全体)",
"internalStatsAgeNoClass": "未分配级别",
"internalStatsAgeSelectAll": "全选",
"internalStatsAgeSelectNone": "全不选",