feat(i18n, CourtDrawingTool, MembersOverviewSection): enhance internationalization and UI components

- Added new i18n keys for improved translations in the CourtDrawingTool and MembersOverviewSection components.
- Updated CourtDrawingTool to utilize translation keys for various UI elements, enhancing user experience and accessibility.
- Enhanced MembersOverviewSection with translation support for search and filter functionalities, improving usability for non-German speakers.
- Introduced new scripts in package.json for i18n auditing and status checking, streamlining localization management.
This commit is contained in:
Torsten Schulz (local)
2026-03-20 09:05:15 +01:00
parent 542d741428
commit cbc5054f1f
22 changed files with 5863 additions and 508 deletions

View File

@@ -0,0 +1,132 @@
# Translation Workflow
This is the project standard for translating UI texts safely and batch-wise.
## Scope
Always translate these core namespaces first:
- `common`
- `navigation`
- `club`
- `members`
- `diary`
- `trainingStats`
- `courtDrawingTool`
`de.json` is the source of truth. All other locales are validated against it.
## Acceptance Criteria
- No missing keys in the target locale
- No German fallback text left in non-German locales for the translated batch
- No placeholder mismatches such as `{count}` becoming `{anzahl}`
- Native characters must be used correctly
- `npm run build` must pass
## Native Characters
Do not replace native characters with ASCII fallbacks. Use the actual writing system or accents of the target language.
Examples:
- German: use `ä`, `ö`, `ü`, `ß`, not `ae`, `oe`, `ue`, `ss`
- French: use `é`, `è`, `à`, `ç`
- Spanish: use `á`, `é`, `í`, `ó`, `ú`, `ñ`
- Italian: use `à`, `è`, `é`, `ì`, `ò`, `ù`
- Polish: use `ą`, `ć`, `ę`, `ł`, `ń`, `ó`, `ś`, `ź`, `ż`
- Japanese: use Japanese scripts directly, not romanized fallback
- Chinese: use Chinese characters directly, not pinyin fallback
- Thai: use Thai script directly, not Latin transliteration
## Batches
- Batch A: `fr`, `es`
- Batch B: `it`, `pl`
- Batch C: `ja`, `zh`
- Batch D: `th`, `tl`, `fil`
Run one batch at a time. Finish the whole batch before moving on.
## Order Per Language
1. `common`
2. `navigation`
3. `club`
4. `members`
5. `diary`
6. `trainingStats`
7. `courtDrawingTool`
This keeps global UI stable first, then the larger feature areas.
## Per-Language Process
1. Run the status report to see the current batch state.
2. Open the target locale JSON.
3. Translate only visible UI text.
4. Keep product and domain names unchanged where appropriate:
- `myTischtennis`
- `click-TT`
- `TTR`
- `QTTR`
5. Keep placeholders unchanged:
- correct: `"{count} open"`
- wrong: `"{anzahl} offen"`
6. Save the file as valid UTF-8 JSON.
## Audit
Run the status report before starting a batch:
```bash
cd frontend
npm run i18n:status
```
Run the audit before and after translation work:
```bash
cd frontend
npm run i18n:audit -- fr es
```
The audit checks:
- missing keys in the core namespaces
- values still identical to German
- obvious German words left in non-German locales
- placeholder mismatches
- native-character coverage hints for languages that should visibly use them
## Build Check
After each language batch:
```bash
cd frontend
npm run build
```
## Suggested Working Loop
1. `npm run i18n:status`
2. Pick one batch
3. Translate one namespace across the whole batch, or one whole language, but stay consistent
4. Run `npm run i18n:audit -- <batch languages>`
5. Fix remaining `same as de`, German leftovers, or placeholder issues
6. Run `npm run build`
7. Do a manual UI pass
## Manual UI Check
Review these areas in the browser:
- `/members`
- `/diary`
- `/training-stats`
- exercise editor / court drawing dialog
Check especially:
- clipped labels
- wrong placeholders
- mixed-language screens
- broken interpolation text
## Definition of Done Per Batch
- `missing keys: 0`
- `german marker hits: 0`
- `placeholder mismatches: 0`
- `same as de` only for intentional product names or abbreviations
- manual spot check completed on:
- `/members`
- `/diary`
- `/training-stats`
- exercise editor / court drawing dialog

View File

@@ -5,7 +5,9 @@
"scripts": {
"dev": "vite",
"build": "vite build",
"serve": "vite preview"
"serve": "vite preview",
"i18n:audit": "node scripts/audit-i18n.js",
"i18n:status": "node scripts/translation-status.js"
},
"dependencies": {
"axios": "^1.7.3",

View File

@@ -0,0 +1,187 @@
const fs = require('fs');
const path = require('path');
const ROOT = path.resolve(__dirname, '..');
const LOCALES_DIR = path.join(ROOT, 'src', 'i18n', 'locales');
const BASE_LOCALE = 'de.json';
const CORE_NAMESPACES = [
'common',
'navigation',
'club',
'members',
'diary',
'trainingStats',
'courtDrawingTool'
];
const GERMAN_MARKERS = [
'Mitglied',
'Mitglieder',
'Training',
'Verein',
'Bearbeiten',
'Loeschen',
'Löschen',
'Zugriff',
'Aufschlag',
'Ziel',
'Schlag',
'Gruppe',
'Gruppen',
'Heute',
'Zur Startseite'
];
const PLACEHOLDER_PATTERN = /\{[^}]+\}/g;
const NATIVE_CHARACTER_HINTS = {
fr: /[àâæçéèêëîïôœùûüÿ]/i,
es: /[áéíóúñü¡¿]/i,
it: /[àèéìíîòóù]/i,
pl: /[ąćęłńóśźż]/i,
de: /[äöüß]/i,
'de-CH': /[äöü]/i,
ja: /[\u3040-\u30ff\u4e00-\u9faf]/,
zh: /[\u4e00-\u9faf]/,
th: /[\u0e00-\u0e7f]/,
tl: null,
fil: null,
'en-GB': null,
'en-US': null,
'en-AU': null
};
function flatten(obj, prefix = '') {
const out = {};
for (const [key, value] of Object.entries(obj || {})) {
const nextKey = prefix ? `${prefix}.${key}` : key;
if (value && typeof value === 'object' && !Array.isArray(value)) {
Object.assign(out, flatten(value, nextKey));
} else {
out[nextKey] = value;
}
}
return out;
}
function pickNamespaces(source) {
return Object.fromEntries(CORE_NAMESPACES.map(namespace => [namespace, source[namespace] || {}]));
}
function loadJson(filePath) {
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
}
function getLocaleCode(localeFile) {
return localeFile.replace(/\.json$/, '');
}
function extractPlaceholders(value) {
if (typeof value !== 'string') {
return [];
}
return Array.from(value.matchAll(PLACEHOLDER_PATTERN)).map(match => match[0]).sort();
}
function auditLocale(localeFile, baseFlat) {
const data = loadJson(path.join(LOCALES_DIR, localeFile));
const flat = flatten(pickNamespaces(data));
const localeCode = getLocaleCode(localeFile);
const missing = Object.keys(baseFlat).filter(key => !(key in flat));
const sameAsDe = Object.keys(baseFlat).filter(key => flat[key] === baseFlat[key]);
const germanHits = Object.entries(flat)
.filter(([, value]) => typeof value === 'string' && GERMAN_MARKERS.some(marker => value.includes(marker)))
.map(([key, value]) => `${key} = ${value}`);
const placeholderMismatches = Object.entries(baseFlat)
.filter(([key, value]) => {
if (!(key in flat) || typeof value !== 'string' || typeof flat[key] !== 'string') {
return false;
}
const basePlaceholders = extractPlaceholders(value);
const localePlaceholders = extractPlaceholders(flat[key]);
return JSON.stringify(basePlaceholders) !== JSON.stringify(localePlaceholders);
})
.map(([key, value]) => `${key} = base:${value} | locale:${flat[key]}`);
const nativeCharHint = NATIVE_CHARACTER_HINTS[localeCode];
const nativeCharCoverage = nativeCharHint
? Object.entries(flat)
.filter(([, value]) => typeof value === 'string' && value.trim())
.filter(([, value]) => nativeCharHint.test(value))
.length
: null;
return {
localeFile,
localeCode,
missing,
sameAsDe,
germanHits,
placeholderMismatches,
nativeCharCoverage
};
}
function printSection(title, entries, limit = 20) {
console.log(title);
if (!entries.length) {
console.log(' none');
return;
}
for (const entry of entries.slice(0, limit)) {
console.log(` ${entry}`);
}
if (entries.length > limit) {
console.log(` ... ${entries.length - limit} more`);
}
}
function main() {
const localeArgs = process.argv.slice(2);
const availableLocales = fs.readdirSync(LOCALES_DIR)
.filter(file => file.endsWith('.json') && file !== BASE_LOCALE)
.sort();
const locales = localeArgs.length
? localeArgs.map(arg => (arg.endsWith('.json') ? arg : `${arg}.json`))
: availableLocales;
const base = loadJson(path.join(LOCALES_DIR, BASE_LOCALE));
const baseFlat = flatten(pickNamespaces(base));
let hasFailures = false;
for (const localeFile of locales) {
if (!availableLocales.includes(localeFile)) {
console.error(`Unknown locale: ${localeFile}`);
hasFailures = true;
continue;
}
const result = auditLocale(localeFile, baseFlat);
console.log(`\n## ${localeFile}`);
console.log(`missing keys: ${result.missing.length}`);
console.log(`same as de: ${result.sameAsDe.length}`);
console.log(`german marker hits: ${result.germanHits.length}`);
console.log(`placeholder mismatches: ${result.placeholderMismatches.length}`);
if (result.nativeCharCoverage !== null) {
console.log(`entries with native characters: ${result.nativeCharCoverage}`);
}
if (result.missing.length || result.germanHits.length || result.placeholderMismatches.length) {
hasFailures = true;
}
printSection('Missing keys', result.missing);
printSection('Same as de', result.sameAsDe);
printSection('German marker hits', result.germanHits);
printSection('Placeholder mismatches', result.placeholderMismatches);
}
if (hasFailures) {
process.exitCode = 1;
}
}
main();

View File

@@ -0,0 +1,79 @@
const fs = require('fs');
const path = require('path');
const ROOT = path.resolve(__dirname, '..');
const LOCALES_DIR = path.join(ROOT, 'src', 'i18n', 'locales');
const BASE_LOCALE = 'de.json';
const CORE_NAMESPACES = [
'common',
'navigation',
'club',
'members',
'diary',
'trainingStats',
'courtDrawingTool'
];
const BATCHES = {
A: ['fr', 'es'],
B: ['it', 'pl'],
C: ['ja', 'zh'],
D: ['th', 'tl', 'fil']
};
function loadJson(filePath) {
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
}
function flatten(obj, prefix = '', result = {}) {
for (const [key, value] of Object.entries(obj || {})) {
const nextKey = prefix ? `${prefix}.${key}` : key;
if (value && typeof value === 'object' && !Array.isArray(value)) {
flatten(value, nextKey, result);
} else {
result[nextKey] = value;
}
}
return result;
}
function pickNamespaces(source) {
return Object.fromEntries(CORE_NAMESPACES.map(namespace => [namespace, source[namespace] || {}]));
}
function statusFor(localeFile, baseFlat) {
const locale = localeFile.replace(/\.json$/, '');
const data = loadJson(path.join(LOCALES_DIR, localeFile));
const flat = flatten(pickNamespaces(data));
const keys = Object.keys(baseFlat);
const missing = keys.filter(key => !(key in flat)).length;
const sameAsDe = keys.filter(key => flat[key] === baseFlat[key]).length;
const translated = keys.length - missing - sameAsDe;
const coverage = ((keys.length - missing) / keys.length) * 100;
const actualTranslationCoverage = (translated / keys.length) * 100;
return { locale, missing, sameAsDe, translated, coverage, actualTranslationCoverage };
}
function printGroup(title, locales, baseFlat) {
console.log(`\n# ${title}`);
console.log('locale | translated | same as de | missing | core coverage | actual translation');
console.log('--- | ---: | ---: | ---: | ---: | ---:');
for (const locale of locales) {
const result = statusFor(`${locale}.json`, baseFlat);
console.log(
`${result.locale} | ${result.translated} | ${result.sameAsDe} | ${result.missing} | ${result.coverage.toFixed(1)}% | ${result.actualTranslationCoverage.toFixed(1)}%`
);
}
}
function main() {
const base = loadJson(path.join(LOCALES_DIR, BASE_LOCALE));
const baseFlat = flatten(pickNamespaces(base));
printGroup('Batch A', BATCHES.A, baseFlat);
printGroup('Batch B', BATCHES.B, baseFlat);
printGroup('Batch C', BATCHES.C, baseFlat);
printGroup('Batch D', BATCHES.D, baseFlat);
}
main();

View File

@@ -7,8 +7,8 @@
<section class="workflow-card">
<button type="button" class="workflow-toggle" @click="toggleStartSection">
<div>
<div class="workflow-step">1. Startposition</div>
<p class="workflow-copy workflow-copy-compact">Aus welcher Aufschlagposition startet die Übung?</p>
<div class="workflow-step">{{ $t('courtDrawingTool.stepStartPosition') }}</div>
<p class="workflow-copy workflow-copy-compact">{{ $t('courtDrawingTool.stepStartPositionHint') }}</p>
</div>
<span class="workflow-toggle-icon">{{ startSectionExpanded ? '' : '+' }}</span>
</button>
@@ -31,8 +31,8 @@
<section class="workflow-card">
<button type="button" class="workflow-toggle" @click="toggleFirstStrokeSection">
<div>
<div class="workflow-step">2. 1. Schlag</div>
<p class="workflow-copy workflow-copy-compact">Schlagseite und Rotation für den ersten Ball festlegen.</p>
<div class="workflow-step">{{ $t('courtDrawingTool.stepFirstStroke') }}</div>
<p class="workflow-copy workflow-copy-compact">{{ $t('courtDrawingTool.stepFirstStrokeHint') }}</p>
</div>
<span class="workflow-toggle-icon">{{ firstStrokeSectionExpanded ? '' : '+' }}</span>
</button>
@@ -79,8 +79,8 @@
<section class="workflow-card">
<button type="button" class="workflow-toggle" @click="toggleTargetSection">
<div>
<div class="workflow-step">3. Ziel</div>
<p class="workflow-copy workflow-copy-compact">Zielzone für den ersten Schlag auswählen.</p>
<div class="workflow-step">{{ $t('courtDrawingTool.stepTarget') }}</div>
<p class="workflow-copy workflow-copy-compact">{{ $t('courtDrawingTool.stepTargetHint') }}</p>
</div>
<span class="workflow-toggle-icon">{{ targetSectionExpanded ? '' : '+' }}</span>
</button>
@@ -104,8 +104,8 @@
</section>
<section class="workflow-card workflow-card-wide" v-if="strokeType && spinType && targetPosition">
<div class="workflow-step">4. Folgeschläge</div>
<p class="workflow-copy">Optional weitere Bälle als Liste aufbauen.</p>
<div class="workflow-step">{{ $t('courtDrawingTool.stepAdditionalStrokes') }}</div>
<p class="workflow-copy">{{ $t('courtDrawingTool.stepAdditionalStrokesHint') }}</p>
<div v-if="additionalStrokes.length" class="stroke-sequence-list">
<div
@@ -115,14 +115,14 @@
>
<div class="stroke-sequence-index">{{ index + 2 }}</div>
<div class="stroke-sequence-copy">{{ formatAdditionalStroke(stroke) }}</div>
<button type="button" class="stroke-sequence-remove" @click="removeAdditionalStroke(index)">Entfernen</button>
<button type="button" class="stroke-sequence-remove" @click="removeAdditionalStroke(index)">{{ $t('common.delete') }}</button>
</div>
</div>
<div v-else class="stroke-sequence-empty">Noch keine Folgeschläge angelegt.</div>
<div v-else class="stroke-sequence-empty">{{ $t('courtDrawingTool.noAdditionalStrokes') }}</div>
<div class="next-stroke-selection">
<div class="workflow-block">
<span class="group-label">Seite</span>
<span class="group-label">{{ $t('courtDrawingTool.strokeSide') }}</span>
<div class="choice-row">
<button
type="button"
@@ -144,7 +144,7 @@
</div>
<div class="workflow-block">
<span class="group-label">Schlagart</span>
<span class="group-label">{{ $t('courtDrawingTool.strokeTypeLabel') }}</span>
<div class="choice-row choice-row-dense">
<button
v-for="option in additionalStrokeTypeOptions"
@@ -161,7 +161,7 @@
</div>
<div class="workflow-block">
<span class="group-label">Zielposition</span>
<span class="group-label">{{ $t('courtDrawingTool.targetPositionLabel') }}</span>
<div class="target-grid target-grid-large">
<button
v-for="n in additionalTargetPositions"
@@ -182,22 +182,22 @@
@click="addNextStroke"
:disabled="additionalStrokes.length >= 4 || !nextStrokeTargetPosition"
>
Schlag hinzufügen
{{ $t('courtDrawingTool.addStroke') }}
</button>
</div>
</section>
</div>
<div class="exercise-info" v-if="strokeType && spinType">
<p><strong>Kürzel:</strong> {{ getFullCode() }}</p>
<p><strong>Titel:</strong> {{ getFullTitle() }}</p>
<p><strong>{{ $t('courtDrawingTool.codeLabel') }}:</strong> {{ getFullCode() }}</p>
<p><strong>{{ $t('courtDrawingTool.titleLabel') }}:</strong> {{ getFullTitle() }}</p>
</div>
</div>
<aside class="preview-panel">
<div class="preview-panel-header">
<div class="workflow-step">Vorschau</div>
<p class="workflow-copy">Die Grafik erscheint, sobald der erste Schlag vollständig gesetzt ist.</p>
<div class="workflow-step">{{ $t('courtDrawingTool.preview') }}</div>
<p class="workflow-copy">{{ $t('courtDrawingTool.previewHint') }}</p>
</div>
<div v-if="isPrimaryStrokeReady" class="canvas-container">
<canvas
@@ -211,8 +211,8 @@
></canvas>
</div>
<div v-else class="canvas-placeholder">
<strong>1. Schlag vervollständigen</strong>
<span>Wähle Startposition, Schlagseite, Rotation und Ziel. Danach erscheint die grafische Darstellung.</span>
<strong>{{ $t('courtDrawingTool.completeFirstStroke') }}</strong>
<span>{{ $t('courtDrawingTool.completeFirstStrokeHint') }}</span>
</div>
</aside>
</div>
@@ -390,9 +390,9 @@ export default {
},
startPositionOptions() {
return [
{ value: 'AS1', short: 'AS1', label: 'links' },
{ value: 'AS2', short: 'AS2', label: 'mitte' },
{ value: 'AS3', short: 'AS3', label: 'rechts' }
{ value: 'AS1', short: 'AS1', label: this.$t('courtDrawingTool.startLeft') },
{ value: 'AS2', short: 'AS2', label: this.$t('courtDrawingTool.startMiddle') },
{ value: 'AS3', short: 'AS3', label: this.$t('courtDrawingTool.startRight') }
];
},
mainSpinOptions() {
@@ -406,14 +406,14 @@ export default {
},
additionalStrokeTypeOptions() {
return [
{ value: 'US', short: 'US', label: 'Schupf' },
{ value: 'OS', short: 'OS', label: 'Konter' },
{ value: 'TS', short: 'TS', label: 'Topspin' },
{ value: 'F', short: 'F', label: 'Flip' },
{ value: 'B', short: 'B', label: 'Block' },
{ value: 'SCH', short: 'SCH', label: 'Schuss' },
{ value: 'SAB', short: 'SAB', label: 'Schnittabwehr' },
{ value: 'BAB', short: 'BAB', label: 'Ballonabwehr' }
{ value: 'US', short: 'US', label: this.$t('courtDrawingTool.strokeTypePush') },
{ value: 'OS', short: 'OS', label: this.$t('courtDrawingTool.strokeTypeCounter') },
{ value: 'TS', short: 'TS', label: this.$t('courtDrawingTool.strokeTypeTopspin') },
{ value: 'F', short: 'F', label: this.$t('courtDrawingTool.strokeTypeFlip') },
{ value: 'B', short: 'B', label: this.$t('courtDrawingTool.strokeTypeBlock') },
{ value: 'SCH', short: 'SCH', label: this.$t('courtDrawingTool.strokeTypeSmash') },
{ value: 'SAB', short: 'SAB', label: this.$t('courtDrawingTool.strokeTypeChopDefense') },
{ value: 'BAB', short: 'BAB', label: this.$t('courtDrawingTool.strokeTypeLobDefense') }
];
},
// Reihenfolge der Positionen für Hauptschlag basierend auf Richtung
@@ -542,20 +542,20 @@ export default {
},
formatTargetPosition(position) {
const labels = {
'1': 'Vorhand lang',
'2': 'Mitte lang',
'3': 'Rückhand lang',
'4': 'Vorhand halblang',
'5': 'Mitte halblang',
'6': 'Rückhand halblang',
'7': 'Vorhand kurz',
'8': 'Mitte kurz',
'9': 'Rückhand kurz'
'1': this.$t('courtDrawingTool.targetForehandLong'),
'2': this.$t('courtDrawingTool.targetMiddleLong'),
'3': this.$t('courtDrawingTool.targetBackhandLong'),
'4': this.$t('courtDrawingTool.targetForehandHalfLong'),
'5': this.$t('courtDrawingTool.targetMiddleHalfLong'),
'6': this.$t('courtDrawingTool.targetBackhandHalfLong'),
'7': this.$t('courtDrawingTool.targetForehandShort'),
'8': this.$t('courtDrawingTool.targetMiddleShort'),
'9': this.$t('courtDrawingTool.targetBackhandShort')
};
return labels[String(position)] || String(position);
},
formatAdditionalStroke(stroke) {
return `${this.formatStrokeSide(stroke.side)} ${this.formatAdditionalStrokeType(stroke.type)} nach ${this.formatTargetPosition(stroke.targetPosition)}`;
return `${this.formatStrokeSide(stroke.side)} ${this.formatAdditionalStrokeType(stroke.type)} ${this.$t('courtDrawingTool.toTarget')} ${this.formatTargetPosition(stroke.targetPosition)}`;
},
removeAdditionalStroke(index) {
this.additionalStrokes.splice(index, 1);
@@ -1620,40 +1620,22 @@ export default {
getFullTitle() {
if (!this.selectedStartPosition || !this.strokeType) return '';
const strokeName = this.strokeType === 'VH' ? 'Vorhand' : 'Rückhand';
let title = `Aufschlag ${strokeName}`;
const strokeName = this.strokeType === 'VH' ? this.$t('courtDrawingTool.forehand') : this.$t('courtDrawingTool.backhand');
let title = `${this.$t('courtDrawingTool.serviceTitle')} ${strokeName}`;
if (this.spinType) {
title = `Aufschlag ${strokeName} ${this.spinType}`;
title = `${this.$t('courtDrawingTool.serviceTitle')} ${strokeName} ${this.spinType}`;
}
if (this.targetPosition) {
// Ausgeschriebene Beschreibungen für Zielpositionen
const targetDescriptionMap = {
'1': 'Vorhand Lang', '2': 'Mitte Lang', '3': 'Rückhand Lang',
'4': 'Vorhand Halblang', '5': 'Mitte Halblang', '6': 'Rückhand Halblang',
'7': 'Vorhand Kurz', '8': 'Mitte Kurz', '9': 'Rückhand Kurz'
};
const targetDescription = targetDescriptionMap[this.targetPosition] || this.targetPosition;
const targetDescription = this.formatTargetPosition(this.targetPosition);
title += `${targetDescription}`;
}
// Zusätzliche Schläge hinzufügen
if (this.additionalStrokes.length > 0) {
this.additionalStrokes.forEach(stroke => {
const strokeNameMap = {
'US': 'Schupf', 'OS': 'Konter', 'TS': 'Topspin', 'F': 'Flip', 'B': 'Block',
'SCH': 'Schuss', 'SAB': 'Schnittabwehr', 'BAB': 'Ballonabwehr'
};
const sideNameMap = {
'VH': 'Vorhand', 'RH': 'Rückhand'
};
const targetDescriptionMap = {
'1': 'Vorhand Lang', '2': 'Mitte Lang', '3': 'Rückhand Lang',
'4': 'Vorhand Halblang', '5': 'Mitte Halblang', '6': 'Rückhand Halblang',
'7': 'Vorhand Kurz', '8': 'Mitte Kurz', '9': 'Rückhand Kurz'
};
const strokeName = strokeNameMap[stroke.type] || stroke.type;
const sideName = sideNameMap[stroke.side] || stroke.side;
const targetDescription = targetDescriptionMap[stroke.targetPosition] || stroke.targetPosition;
const strokeName = this.formatAdditionalStrokeType(stroke.type);
const sideName = this.formatStrokeSide(stroke.side);
const targetDescription = this.formatTargetPosition(stroke.targetPosition);
title += ` / ${sideName} ${strokeName}${targetDescription}`;
});
}

View File

@@ -36,7 +36,7 @@
</div>
<details class="members-advanced-filters">
<summary>Suche und Filter</summary>
<summary>{{ $t('members.searchAndFilter') }}</summary>
<div class="filter-controls">
<div class="member-search-group">
<label for="member-search-input">{{ $t('members.search') }}</label>
@@ -69,11 +69,11 @@
<option value="J15">{{ $t('members.j15') }}</option>
<option value="J13">{{ $t('members.j13') }}</option>
<option value="J11">{{ $t('members.j11') }}</option>
<option value="range">Alter von - bis</option>
<option value="range">{{ $t('members.ageRange') }}</option>
</select>
</div>
<div v-if="selectedAgeGroup === 'range'" class="filter-group age-range-group">
<label>Alter von - bis:</label>
<label>{{ $t('members.ageRange') }}:</label>
<div class="age-range-inputs">
<input
:value="selectedAgeFrom"
@@ -81,7 +81,7 @@
min="0"
max="120"
class="filter-select age-range-input"
placeholder="von"
:placeholder="$t('members.ageFromPlaceholder')"
@input="$emit('update:selected-age-from', $event.target.value)"
>
<span class="age-range-separator">-</span>
@@ -91,7 +91,7 @@
min="0"
max="120"
class="filter-select age-range-input"
placeholder="bis"
:placeholder="$t('members.ageToPlaceholder')"
@input="$emit('update:selected-age-to', $event.target.value)"
>
</div>
@@ -150,7 +150,7 @@
</div>
</div>
<details class="members-bulk-actions">
<summary>Sammelaktionen</summary>
<summary>{{ $t('members.bulkActions') }}</summary>
<div class="members-bulk-actions-grid">
<button type="button" @click="$emit('create-phone-list-for-filtered')" :disabled="visibleMembersCount === 0">
{{ $t('members.phoneListForSelection') }}

View File

@@ -17,6 +17,28 @@ import tl from './locales/tl.json';
import th from './locales/th.json';
import fil from './locales/fil.json';
function deepMergeMessages(base, override) {
if (!base || typeof base !== 'object' || Array.isArray(base)) {
return override ?? base;
}
const result = { ...base };
for (const [key, value] of Object.entries(override || {})) {
if (
value &&
typeof value === 'object' &&
!Array.isArray(value) &&
result[key] &&
typeof result[key] === 'object' &&
!Array.isArray(result[key])
) {
result[key] = deepMergeMessages(result[key], value);
} else {
result[key] = value;
}
}
return result;
}
// Language mapping for browser language detection
const languageMap = {
'de': 'de',
@@ -92,19 +114,19 @@ const i18n = createI18n({
fallbackLocale: 'de',
messages: {
'de': de,
'en-GB': enGB,
'en-US': enUS,
'en-AU': enAU,
'de-CH': deCH,
'fr': fr,
'es': es,
'it': it,
'pl': pl,
'ja': ja,
'zh': zh,
'tl': tl,
'th': th,
'fil': fil,
'en-GB': deepMergeMessages(de, enGB),
'en-US': deepMergeMessages(de, enUS),
'en-AU': deepMergeMessages(de, enAU),
'de-CH': deepMergeMessages(de, deCH),
'fr': deepMergeMessages(de, fr),
'es': deepMergeMessages(de, es),
'it': deepMergeMessages(de, it),
'pl': deepMergeMessages(de, pl),
'ja': deepMergeMessages(de, ja),
'zh': deepMergeMessages(de, zh),
'tl': deepMergeMessages(de, tl),
'th': deepMergeMessages(de, th),
'fil': deepMergeMessages(de, fil),
},
legacy: true, // Use Options API mode (required for $t in templates with Options API)
// globalInjection is automatically enabled with legacy: true
@@ -159,4 +181,3 @@ if (typeof window !== 'undefined' && (process.env.NODE_ENV === 'development' ||
export default i18n;

View File

@@ -11,7 +11,7 @@
"delete": "Lösche",
"edit": "Bearbeite",
"add": "Hinzufüge",
"close": "Schliesse",
"close": "Schliessen",
"confirm": "Bestätige",
"yes": "Ja",
"no": "Nei",
@@ -22,7 +22,41 @@
"next": "Wiiter",
"previous": "Zrugg",
"submit": "Abschicke",
"reset": "Zruggsetze"
"reset": "Zruggsetze",
"all": "Alle",
"today": "Hüt",
"time": "Zyt",
"new": "Neu",
"update": "Aktualisiere",
"create": "Erstelle",
"remove": "Entferne",
"select": "Uswähle",
"download": "Herunterlade",
"choose": "Wähle",
"apply": "Aawände",
"clear": "Lösche",
"details": "Details",
"view": "Aazeige",
"name": "Name",
"date": "Datum",
"status": "Status",
"type": "Typ",
"description": "Beschrieb",
"active": "Aktiv",
"inactive": "Inaktiv",
"enabled": "Aktiviert",
"disabled": "Deaktiviert",
"required": "Erforderlich",
"optional": "Optional",
"in": "in",
"min": "Min",
"minutes": "Minute",
"hours": "Stunde",
"days": "Täg",
"weeks": "Wuche",
"months": "Monat",
"years": "Jahr",
"ok": "OK"
},
"navigation": {
"home": "Startseite",
@@ -41,13 +75,16 @@
"logs": "System-Logs",
"memberTransfer": "Mitgliderübertragig",
"myTischtennisAccount": "myTischtennis-Account",
"clickTtAccount": "HTTV / click-TT-Account",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "Persönlichi Iistellige",
"logout": "Abmelde",
"login": "Aamelde",
"register": "Registriere",
"dailyBusiness": "Tagesgschäft",
"competitions": "Wettbewerb",
"settings": "Iistellige"
"settings": "Iistellige",
"backToHome": "Zur Startseite"
},
"club": {
"select": "Verein uswähle",
@@ -56,7 +93,20 @@
"load": "Lade",
"name": "Vereinsname",
"create": "Verein erstelle",
"accessRequestPending": "Der Zugriff auf diesen Verein ist beantragt. Bitte haben Sie etwas Geduld."
"createTitle": "Verein aalege",
"members": "Mitglieder",
"trainingDiary": "Trainingstagebuch",
"noAccess": "Für diesen Verein isch no kei Zugriff freigschaltet.",
"requestAccess": "Zugriff beantrage",
"openRequests": "Offeni Zugriffsafrage",
"title": "Verein",
"openAccessRequests": "Offeni Zugriffsafrage",
"diary": "Trainingstagebuch",
"accessDenied": "Zugriff uf de Verein verweigeret.",
"errorLoadingRequests": "Fehler bim Lade vo de offene Afroge",
"accessRequested": "Zugriff isch aagfragt worde.",
"accessRequestPending": "Der Zugriff auf diesen Verein ist beantragt. Bitte haben Sie etwas Geduld.",
"accessRequestFailed": "Zugriffsafrag het nöd chönne gstellt werde."
},
"auth": {
"login": "Aamelde",
@@ -359,6 +409,106 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Platz {position} · {name}"
},
"members": {
"title": "Mitglieder",
"memberInfo": "Mitglieder-Info",
"activeMembers": "Aktive Mitglieder",
"testMembers": "Testmitglieder",
"inactiveMembers": "Inaktive Mitglieder",
"generatePhoneList": "Telefonliste generieren",
"onlyActiveMembers": "Es werden nur aktive Mitglieder ausgegeben",
"updateRatings": "TTR/QTTR von myTischtennis aktualisieren",
"updating": "Aktualisiere...",
"transferMembers": "Mitglieder übertragen",
"newMember": "Neues Mitglied",
"editMember": "Mitglied bearbeiten",
"createNewMember": "Neues Mitglied anlegen",
"firstName": "Vorname",
"lastName": "Nachname",
"street": "Straße",
"postalCode": "PLZ",
"city": "Ort",
"birthdate": "Geburtsdatum",
"phones": "Telefonnummern",
"emails": "E-Mail-Adressen",
"addPhone": "Telefonnummer hinzufügen",
"addEmail": "E-Mail-Adresse hinzufügen",
"phoneNumber": "Telefonnummer",
"emailAddress": "E-Mail-Adresse",
"parent": "Elternteil",
"parentName": "Name (z.B. Mutter, Vater)",
"primary": "Primär",
"gender": "Geschlecht",
"genderUnknown": "Unbekannt",
"genderMale": "Männlich",
"genderFemale": "Weiblich",
"genderDiverse": "Divers",
"picsInInternetAllowed": "Pics in Internet erlaubt",
"testMembership": "Testmitgliedschaft",
"memberFormHandedOver": "Mitgliedsformular ausgehändigt",
"trainingGroups": "Trainingsgruppen",
"noGroupsAssigned": "Keine Gruppen zugeordnet",
"noGroupsAvailable": "Keine Gruppen verfügbar",
"addGroup": "Gruppe hinzufügen...",
"remove": "Entfernen",
"image": "Bild",
"selectFile": "Datei auswählen",
"camera": "Kamera",
"imagePreview": "Vorschau des Mitgliedsbildes",
"change": "Ändern",
"create": "Anlegen",
"clearFields": "Felder leeren",
"showInactiveMembers": "Inaktive Mitglieder anzeigen",
"ageGroup": "Altersklasse",
"adults": "Erwachsene (20+)",
"j19": "J19 (19 und jünger)",
"j17": "J17 (17 und jünger)",
"j15": "J15 (15 und jünger)",
"j13": "J13 (13 und jünger)",
"j11": "J11 (11 und jünger)",
"clearFilters": "Filter zurücksetzen",
"imageInternet": "Bild (Inet?)",
"testMember": "Testm.",
"name": "Name, Vorname",
"ttrQttr": "TTR / QTTR",
"address": "Adresse",
"active": "Aktiv",
"actions": "Aktionen",
"phoneNumberShort": "Telefon-Nr.",
"emailAddressShort": "Email-Adresse",
"trainingParticipations": "Trainingsteilnahmen",
"memberImage": "Mitgliedsbild",
"inactive": "inaktiv",
"sixOrMoreParticipations": "6 oder mehr Trainingsteilnahmen",
"threeOrMoreParticipations": "3 oder mehr Trainingsteilnahmen",
"noTestMembership": "Keine Testmitgliedschaft mehr",
"formHandedOver": "Mitgliedsformular ausgehändigt",
"deactivateMember": "Mitglied deaktivieren",
"notes": "Notizen",
"exercises": "Übungen",
"memberImages": "Mitgliedsbilder",
"testMembershipRemoved": "Testmitgliedschaft entfernt.",
"errorRemovingTestMembership": "Fehler beim Entfernen der Testmitgliedschaft.",
"formMarkedAsHandedOver": "Mitgliedsformular als ausgehändigt markiert.",
"errorMarkingForm": "Fehler beim Markieren des Formulars.",
"deactivateMemberTitle": "Mitglied deaktivieren",
"deactivateMemberConfirm": "Möchten Sie \"{name}\" wirklich deaktivieren?",
"memberDeactivated": "Mitglied deaktiviert",
"errorDeactivatingMember": "Fehler beim Deaktivieren des Mitglieds",
"errorSavingMember": "Fehler beim Speichern des Mitglieds",
"errorAddingToGroup": "Fehler beim Hinzufügen zur Gruppe",
"errorRemovingFromGroup": "Fehler beim Entfernen aus der Gruppe",
"imageUpdated": "Bild wurde aktualisiert",
"errorRotatingImage": "Fehler beim Drehen des Bildes",
"imageDeleted": "Bild wurde gelöscht.",
"errorDeletingImage": "Bild konnte nicht gelöscht werden",
"primaryImageUpdated": "Hauptbild wurde aktualisiert.",
"errorSettingPrimaryImage": "Hauptbild konnte nicht gesetzt werden",
"errorUploadingImage": "Bild konnte nicht hochgeladen werden",
"errorLoadingImage": "Fehler beim Laden des Bildes",
"phoneList": "Telefonliste.pdf",
"errorLoadingTrainingParticipations": "Fehler beim Laden der Trainingsteilnahmen",
"errorUpdatingRatings": "Fehler beim Aktualisieren der TTR/QTTR-Werte",
"errorTransfer": "Fehler bei der Übertragung",
"subtitle": "Mitglieder suchen, filtern und direkt bearbeiten.",
"closeEditor": "Editor schließen",
"visibleMembers": "Sichtbare Mitglieder",
@@ -369,11 +519,17 @@
"scopeActive": "Aktiv",
"scopeTest": "Probe",
"scopeNeedsForm": "Formular ungeprüft",
"scopeActiveDataIncomplete": "Aktiv + Daten unvollständig",
"scopeDataIncomplete": "Daten unvollständig",
"scopeInactive": "Inaktiv",
"searchAndFilter": "Suche und Filter",
"bulkActions": "Sammelaktionen",
"resultsVisible": "Mitglieder sichtbar",
"editHint": "Ein Klick auf eine Zeile öffnet den Editor.",
"editorCreateHint": "Neues Mitglied anlegen und Kontaktdaten direkt erfassen.",
"editorEditHint": "Daten von {name} bearbeiten.",
"editorAssignTrainingGroupHint": "Bitte mindestens eine Trainingsgruppe zuordnen.",
"editorRecommendedEntry": "Empfohlener Eintrag",
"transferSuccessTitle": "Übertragung erfolgreich",
"transferErrorTitle": "Fehler bei der Übertragung",
"clickTtRequestPending": "Click-TT-Antrag läuft",
@@ -418,17 +574,33 @@
"sortFirstName": "Vorname",
"sortBirthday": "Geburtstag",
"sortAge": "Alter",
"ageRange": "Alter von - bis",
"ageFromPlaceholder": "von",
"ageToPlaceholder": "bis",
"age": "Alter",
"dataQuality": "Datenqualität",
"dataQualityComplete": "Daten vollständig",
"dataIssueBirthdate": "Geburtsdatum fehlt",
"dataIssuePhone": "Telefon fehlt",
"dataIssueEmail": "E-Mail fehlt",
"dataIssueAddress": "Adresse fehlt",
"dataIssueGender": "Geschlecht ungeklärt",
"dataIssueTrainingGroup": "Trainingsgruppe fehlt",
"openTasks": "Offene Aufgaben",
"noOpenTasks": "Keine offenen Aufgaben",
"taskVerifyForm": "Formular prüfen",
"taskReviewTrialStatus": "Probe-Status prüfen",
"taskCheckTrainingStatus": "Trainingsstatus prüfen",
"taskCheckDataQuality": "Datenqualität prüfen",
"taskAssignTrainingGroup": "Trainingsgruppe zuordnen",
"taskCheckClickTt": "Click-TT-Spielberechtigung prüfen",
"taskActionVerify": "Prüfen",
"taskActionMarkRegular": "Regulär setzen",
"taskActionReview": "Öffnen",
"taskActionRequest": "Anfragen",
"toggleSortDirection": "Sortierrichtung wechseln",
"showTtrHistory": "TTR-Historie anzeigen",
"missingTtrHistoryId": "Keine myTischtennis-ID hinterlegt",
"sortLastTraining": "Letztes Training",
"sortOpenTasks": "Offene Aufgaben",
"exportPreview": "Exportvorschau",
@@ -450,5 +622,212 @@
"composeEmail": "E-Mail vorbereiten",
"copyContactSummary": "Kontaktübersicht kopieren",
"copyContactSummarySuccess": "Kontaktübersicht in die Zwischenablage kopiert."
},
"diary": {
"title": "Trainingstagebuch",
"date": "Datum",
"noEntries": "Keine Einträge",
"deleteDate": "Datum löschen",
"createNew": "Neu anlegen",
"gallery": "Mitglieder-Galerie",
"galleryCreating": "Galerie wird erstellt…",
"selectTrainingGroup": "Trainingsgruppe auswählen",
"selectTrainingGroupPlaceholder": "Bitte wählen...",
"suggestion": "Vorschlag",
"nextAppointment": "Nächster Termin",
"applySuggestion": "Vorschlag übernehmen",
"skipSuggestion": "Ohne Vorschlag fortfahren",
"createNewDate": "Neues Datum anlegen",
"activeTrainingDay": "Aktiver Trainingstag",
"trainingDaySection": "Trainingstag",
"trainingDayChecklist": "Abschlusscheck",
"trainingStart": "Trainingsbeginn",
"trainingEnd": "Trainingsende",
"trainingWindow": "Trainingsfenster",
"trainingWindowUnset": "Noch nicht gesetzt",
"groupsLabel": "Gruppen",
"groupsSection": "Gruppen",
"createDate": "Datum anlegen",
"editTrainingTimes": "Trainingszeiten bearbeiten",
"updateTimes": "Zeiten aktualisieren",
"groupManagement": "Gruppenverwaltung",
"createGroups": "Gruppen erstellen",
"trainingPlan": "Trainingsplan",
"planActivitiesCount": "Plan-Aktivitäten",
"timeblocksCount": "Zeitblöcke",
"planEmptyState": "Im Trainingsplan ist noch nichts eingetragen.",
"planAddHint": "Neue Plan-Elemente fügst du über die Aktionen oben hinzu.",
"startTime": "Startzeit",
"group": "Gruppe...",
"timeblock": "Zeitblock",
"assignParticipants": "Teilnehmer zuordnen",
"addTimeblock": "Zeitblock",
"activities": "Aktivitäten",
"freeActivities": "Freie Aktivitäten",
"noFreeActivitiesYet": "Noch keine freien Aktivitäten erfasst.",
"addActivity": "Aktivität hinzufügen",
"bookAccident": "Unfall buchen",
"activity": "Aktivität",
"duration": "Dauer",
"activityImage": "Aktivitätsbild",
"activityDrawing": "Aktivitätszeichnung",
"today": "Heute",
"existingGroups": "Vorhandene Gruppen",
"leader": "Leiter",
"deleteGroup": "Gruppe löschen",
"numberOfGroups": "Anzahl Gruppen",
"addGroup": "Gruppe hinzufügen",
"activityOrTimeblock": "Aktivität / Zeitblock",
"durationMinutes": "Dauer (Min)",
"standardActivities": "Standard-Aktivitäten",
"standardDurationShort": "Min",
"standardActivityAddError": "Standard-Aktivität konnte nicht hinzugefügt werden.",
"addGroupActivity": "Gruppen-Aktivität hinzufügen",
"addGroupButton": "+ Gruppe",
"all": "Alle",
"selectGroup": "Gruppe auswählen...",
"activityPlaceholder": "Aktivität",
"assignShort": "Zuordnen",
"statusReadyShort": "Bereit",
"statusOpenShort": "Offen",
"openPlanItemsLabel": "Plan-Status",
"openPlanItems": "{count} offen",
"unassignedPlanItems": "{count} offen",
"durationExampleLong": "z.B. 2x7 oder 3*5",
"durationExampleShort": "z.B. 2x7",
"showImage": "Bild/Zeichnung anzeigen",
"participants": "Teilnehmer",
"searchParticipants": "Teilnehmer suchen",
"filterAll": "Alle",
"filterPresent": "Anwesend",
"filterAbsent": "Abwesend",
"filterExcused": "Entschuldigt",
"filterTest": "Probe",
"participantStatusNone": "Kein Status",
"participantStatusExcused": "Entschuldigt",
"participantStatusCancelled": "Abgesagt",
"quickAdd": "+ Schnell hinzufügen",
"selectTags": "Tags auswählen",
"createDrawing": "Übungszeichnung erstellen",
"overallActivity": "Gesamt-Aktivität",
"editActivity": "Aktivität bearbeiten",
"editGroupActivity": "Gruppen-Aktivität bearbeiten",
"assignParticipantsForGroupActivity": "Teilnehmer für Gruppen-Aktivität zuordnen",
"delete": "Löschen",
"min": "Min",
"errorLoadingPredefinedActivities": "Fehler beim Laden der vordefinierten Aktivitäten",
"selectParticipantAndNote": "Bitte wählen Sie einen Teilnehmer aus und geben Sie einen Notiztext ein.",
"selectGroupAndActivity": "Bitte wählen Sie eine Gruppe und geben Sie eine Aktivität ein.",
"dateCannotBeDeleted": "Datum kann nicht gelöscht werden",
"dateCannotBeDeletedDetails": "Es sind noch Inhalte vorhanden (Trainingplan, Teilnehmer, Aktivitäten, Unfälle oder Notizen).",
"confirmDelete": "Löschen bestätigen",
"confirmDeleteDate": "Möchten Sie dieses Datum wirklich löschen?",
"confirmDeleteDateDetails": "Alle zugehörigen Daten werden ebenfalls gelöscht.",
"noParticipants": "Keine Teilnehmer für diesen Trainingstag vorhanden.",
"mustCreateAtLeastTwoGroups": "Beim ersten Erstellen müssen mindestens 2 Gruppen erstellt werden!",
"oneGroupAdded": "1 Gruppe wurde erfolgreich hinzugefügt!",
"groupsCreated": "{count} Gruppen wurden erfolgreich erstellt!",
"errorCreatingGroups": "Fehler beim Erstellen der Gruppen",
"confirmDeleteGroup": "Möchten Sie die Gruppe \"{name}\" wirklich löschen?",
"groupDeletedSuccessfully": "Gruppe wurde erfolgreich gelöscht!",
"errorDeletingGroup": "Fehler beim Löschen der Gruppe",
"errorCreatingActivity": "Fehler beim Erstellen der Aktivität",
"trainingPlanAsPDF": "Trainingsplan als PDF",
"trainingPlanPdfShort": "Ablaufplan als PDF",
"trainingDayAsPDF": "Trainingstag als PDF herunterladen",
"trainingDayAsPDFShort": "Trainingstag als PDF",
"trainingDaySummaryPdfShort": "Teilnehmerübersicht als PDF",
"minutes": "Minuten",
"formHandedOver": "Mitgliedsformular ausgehändigt",
"errorOccurred": "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.",
"trainingTimesUpdated": "Trainingszeiten erfolgreich aktualisiert.",
"noActiveTrainingDay": "Kein Trainingstag ausgewählt.",
"statusReady": "Zeiten und Trainingsplan sind gepflegt.",
"statusEmpty": "Dieser Trainingstag ist noch leer.",
"statusInProgress": "Dieser Trainingstag ist teilweise vorbereitet.",
"formMarkedAsHandedOver": "Mitgliedsformular als ausgehändigt markiert",
"errorMarkingForm": "Fehler beim Markieren des Mitgliedsformulars",
"dateNoLongerCurrent": "Ausgewähltes Datum war nicht mehr aktuell. Bitte erneut versuchen.",
"activityRequired": "Bitte geben Sie eine Aktivität ein.",
"activityNotFound": "Aktivität nicht gefunden. Bitte wählen Sie eine aus der Liste aus."
},
"trainingStats": {
"title": "Trainings-Statistik",
"activeMembers": "Aktive Mitglieder",
"averageParticipationCurrentMonth": "Durchschnittliche Teilnahme (aktueller Monat)",
"averageParticipationLastMonth": "Durchschnittliche Teilnahme (letzter Monat)",
"averageParticipationQuarter": "Durchschnittliche Teilnahme (Quartal)",
"averageParticipationHalfYear": "Durchschnittliche Teilnahme (Halbjahr)",
"averageParticipationYear": "Durchschnittliche Teilnahme (Jahr)",
"trainingDays": "Trainingstage (letzte 12 Monate)",
"memberParticipations": "Mitglieder-Teilnahmen",
"date": "Datum",
"weekday": "Wochentag",
"participants": "Teilnehmer",
"name": "Name",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "Geburtsdatum",
"participations12Months": "Teilnahmen (12 Monate)",
"participations3Months": "Teilnahmen (3 Monate)",
"participationsTotal": "Teilnahmen (Gesamt)",
"lastTraining": "Letztes Training",
"actions": "Aktionen",
"showDetails": "Details anzeigen"
},
"courtDrawingTool": {
"title": "Tischtennis-Übungszeichnung",
"configureExercise": "Übung konfigurieren",
"stepStartPosition": "1. Startposition",
"stepStartPositionHint": "Aus welcher Aufschlagposition startet die Übung?",
"stepFirstStroke": "2. 1. Schlag",
"stepFirstStrokeHint": "Schlagseite und Rotation für den ersten Ball festlegen.",
"stepTarget": "3. Ziel",
"stepTargetHint": "Zielzone für den ersten Schlag auswählen.",
"stepAdditionalStrokes": "4. Folgeschläge",
"stepAdditionalStrokesHint": "Optional weitere Bälle als Liste aufbauen.",
"noAdditionalStrokes": "Noch keine Folgeschläge angelegt.",
"service": "Aufschlag:",
"serviceTitle": "Aufschlag",
"forehand": "Vorhand",
"backhand": "Rückhand",
"spin": "Schnitt:",
"underspin": "Unterschnitt",
"topspin": "Überschnitt",
"sidespin": "Seitschnitt",
"sideUnderspin": "Seitunterschnitt",
"counterSpin": "Gegenläufer",
"targetPosition": "Zielposition:",
"targetPositionLabel": "Zielposition",
"strokeSide": "Seite",
"strokeTypeLabel": "Schlagart",
"addStroke": "Schlag hinzufügen",
"preview": "Vorschau",
"previewHint": "Die Grafik erscheint, sobald der erste Schlag vollständig gesetzt ist.",
"completeFirstStroke": "1. Schlag vervollständigen",
"completeFirstStrokeHint": "Wähle Startposition, Schlagseite, Rotation und Ziel. Danach erscheint die grafische Darstellung.",
"codeLabel": "Kürzel",
"titleLabel": "Titel",
"startLeft": "links",
"startMiddle": "mitte",
"startRight": "rechts",
"strokeTypePush": "Schupf",
"strokeTypeCounter": "Konter",
"strokeTypeTopspin": "Topspin",
"strokeTypeFlip": "Flip",
"strokeTypeBlock": "Block",
"strokeTypeSmash": "Schuss",
"strokeTypeChopDefense": "Schnittabwehr",
"strokeTypeLobDefense": "Ballonabwehr",
"targetForehandLong": "Vorhand lang",
"targetMiddleLong": "Mitte lang",
"targetBackhandLong": "Rückhand lang",
"targetForehandHalfLong": "Vorhand halblang",
"targetMiddleHalfLong": "Mitte halblang",
"targetBackhandHalfLong": "Rückhand halblang",
"targetForehandShort": "Vorhand kurz",
"targetMiddleShort": "Mitte kurz",
"targetBackhandShort": "Rückhand kurz",
"toTarget": "nach"
}
}

View File

@@ -298,6 +298,8 @@
"scopeActiveDataIncomplete": "Aktiv + Daten unvollständig",
"scopeDataIncomplete": "Daten unvollständig",
"scopeInactive": "Inaktiv",
"searchAndFilter": "Suche und Filter",
"bulkActions": "Sammelaktionen",
"resultsVisible": "Mitglieder sichtbar",
"editHint": "Ein Klick auf eine Zeile öffnet den Editor.",
"editorCreateHint": "Neues Mitglied anlegen und Kontaktdaten direkt erfassen.",
@@ -348,6 +350,9 @@
"sortFirstName": "Vorname",
"sortBirthday": "Geburtstag",
"sortAge": "Alter",
"ageRange": "Alter von - bis",
"ageFromPlaceholder": "von",
"ageToPlaceholder": "bis",
"age": "Alter",
"dataQuality": "Datenqualität",
"dataQualityComplete": "Daten vollständig",
@@ -370,6 +375,8 @@
"taskActionReview": "Öffnen",
"taskActionRequest": "Anfragen",
"toggleSortDirection": "Sortierrichtung wechseln",
"showTtrHistory": "TTR-Historie anzeigen",
"missingTtrHistoryId": "Keine myTischtennis-ID hinterlegt",
"sortLastTraining": "Letztes Training",
"sortOpenTasks": "Offene Aufgaben",
"exportPreview": "Exportvorschau",
@@ -2018,7 +2025,17 @@
"courtDrawingTool": {
"title": "Tischtennis-Übungszeichnung",
"configureExercise": "Übung konfigurieren",
"stepStartPosition": "1. Startposition",
"stepStartPositionHint": "Aus welcher Aufschlagposition startet die Übung?",
"stepFirstStroke": "2. 1. Schlag",
"stepFirstStrokeHint": "Schlagseite und Rotation für den ersten Ball festlegen.",
"stepTarget": "3. Ziel",
"stepTargetHint": "Zielzone für den ersten Schlag auswählen.",
"stepAdditionalStrokes": "4. Folgeschläge",
"stepAdditionalStrokesHint": "Optional weitere Bälle als Liste aufbauen.",
"noAdditionalStrokes": "Noch keine Folgeschläge angelegt.",
"service": "Aufschlag:",
"serviceTitle": "Aufschlag",
"forehand": "Vorhand",
"backhand": "Rückhand",
"spin": "Schnitt:",
@@ -2027,7 +2044,38 @@
"sidespin": "Seitschnitt",
"sideUnderspin": "Seitunterschnitt",
"counterSpin": "Gegenläufer",
"targetPosition": "Zielposition:"
"targetPosition": "Zielposition:",
"targetPositionLabel": "Zielposition",
"strokeSide": "Seite",
"strokeTypeLabel": "Schlagart",
"addStroke": "Schlag hinzufügen",
"preview": "Vorschau",
"previewHint": "Die Grafik erscheint, sobald der erste Schlag vollständig gesetzt ist.",
"completeFirstStroke": "1. Schlag vervollständigen",
"completeFirstStrokeHint": "Wähle Startposition, Schlagseite, Rotation und Ziel. Danach erscheint die grafische Darstellung.",
"codeLabel": "Kürzel",
"titleLabel": "Titel",
"startLeft": "links",
"startMiddle": "mitte",
"startRight": "rechts",
"strokeTypePush": "Schupf",
"strokeTypeCounter": "Konter",
"strokeTypeTopspin": "Topspin",
"strokeTypeFlip": "Flip",
"strokeTypeBlock": "Block",
"strokeTypeSmash": "Schuss",
"strokeTypeChopDefense": "Schnittabwehr",
"strokeTypeLobDefense": "Ballonabwehr",
"targetForehandLong": "Vorhand lang",
"targetMiddleLong": "Mitte lang",
"targetBackhandLong": "Rückhand lang",
"targetForehandHalfLong": "Vorhand halblang",
"targetMiddleHalfLong": "Mitte halblang",
"targetBackhandHalfLong": "Rückhand halblang",
"targetForehandShort": "Vorhand kurz",
"targetMiddleShort": "Mitte kurz",
"targetBackhandShort": "Rückhand kurz",
"toTarget": "nach"
},
"courtDrawingRender": {
"startAnimation": "Animation starten",

View File

@@ -12,6 +12,7 @@
"edit": "Edit",
"add": "Add",
"close": "Close",
"details": "Details",
"confirm": "Confirm",
"yes": "Yes",
"no": "No",
@@ -22,7 +23,40 @@
"next": "Next",
"previous": "Previous",
"submit": "Submit",
"reset": "Reset"
"reset": "Reset",
"all": "All",
"today": "Today",
"time": "Time",
"new": "New",
"update": "Update",
"create": "Create",
"remove": "Remove",
"select": "Select",
"download": "Download",
"choose": "Choose",
"apply": "Apply",
"clear": "Clear",
"view": "View",
"name": "Name",
"date": "Date",
"status": "Status",
"type": "Type",
"description": "Description",
"active": "Active",
"inactive": "Inactive",
"enabled": "Enabled",
"disabled": "Disabled",
"required": "Required",
"optional": "Optional",
"in": "in",
"min": "min",
"minutes": "minutes",
"hours": "hours",
"days": "days",
"weeks": "weeks",
"months": "months",
"years": "years",
"ok": "OK"
},
"navigation": {
"home": "Home",
@@ -41,13 +75,16 @@
"logs": "System Logs",
"memberTransfer": "Member Transfer",
"myTischtennisAccount": "myTischtennis Account",
"clickTtAccount": "HTTV / click-TT Account",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "Personal Settings",
"logout": "Logout",
"login": "Login",
"register": "Register",
"dailyBusiness": "Daily Business",
"competitions": "Competitions",
"settings": "Settings"
"settings": "Settings",
"backToHome": "Back to home"
},
"club": {
"select": "Select Club",
@@ -56,7 +93,20 @@
"load": "Load",
"name": "Club Name",
"create": "Create Club",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"accessRequestPending": "Access to this club has been requested. Please be patient.",
"createTitle": "Create club",
"members": "Members",
"trainingDiary": "Training diary",
"noAccess": "You have not yet been granted access to this club.",
"requestAccess": "Request access",
"openRequests": "Open access requests",
"title": "Club",
"openAccessRequests": "Open access requests",
"diary": "Training diary",
"accessDenied": "Access to the club was denied.",
"errorLoadingRequests": "Failed to load open requests",
"accessRequested": "Access has been requested.",
"accessRequestFailed": "Access request could not be submitted."
},
"auth": {
"login": "Login",
@@ -359,6 +409,106 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"title": "Members",
"memberInfo": "Member info",
"activeMembers": "Active members",
"testMembers": "Trial members",
"inactiveMembers": "Inactive members",
"generatePhoneList": "Generate phone list",
"onlyActiveMembers": "Only active members are included",
"updateRatings": "Update TTR/QTTR from myTischtennis",
"updating": "Updating...",
"transferMembers": "Transfer members",
"newMember": "New member",
"editMember": "Edit member",
"createNewMember": "Create new member",
"firstName": "First name",
"lastName": "Last name",
"street": "Street",
"postalCode": "Postcode",
"city": "City",
"birthdate": "Birthdate",
"phones": "Phone numbers",
"emails": "Email addresses",
"addPhone": "Add phone number",
"addEmail": "Add email address",
"phoneNumber": "Phone number",
"emailAddress": "Email address",
"parent": "Parent",
"parentName": "Name (e.g. mother, father)",
"primary": "Primary",
"gender": "Gender",
"genderUnknown": "Unknown",
"genderMale": "Male",
"genderFemale": "Female",
"genderDiverse": "Diverse",
"picsInInternetAllowed": "Pictures allowed online",
"testMembership": "Trial membership",
"memberFormHandedOver": "Membership form handed over",
"trainingGroups": "Training groups",
"noGroupsAssigned": "No groups assigned",
"noGroupsAvailable": "No groups available",
"addGroup": "Add group...",
"remove": "Remove",
"image": "Image",
"selectFile": "Select file",
"camera": "Camera",
"imagePreview": "Member image preview",
"change": "Change",
"create": "Create",
"clearFields": "Clear fields",
"showInactiveMembers": "Show inactive members",
"ageGroup": "Age group",
"adults": "Adults (20+)",
"j19": "U19 (19 and younger)",
"j17": "U17 (17 and younger)",
"j15": "U15 (15 and younger)",
"j13": "U13 (13 and younger)",
"j11": "U11 (11 and younger)",
"clearFilters": "Reset filters",
"imageInternet": "Image (web?)",
"testMember": "Trial",
"name": "Surname, first name",
"ttrQttr": "TTR / QTTR",
"address": "Address",
"active": "Active",
"actions": "Actions",
"phoneNumberShort": "Phone no.",
"emailAddressShort": "Email address",
"trainingParticipations": "Training participations",
"memberImage": "Member image",
"inactive": "inactive",
"sixOrMoreParticipations": "6 or more training participations",
"threeOrMoreParticipations": "3 or more training participations",
"noTestMembership": "No longer a trial member",
"formHandedOver": "Membership form handed over",
"deactivateMember": "Deactivate member",
"notes": "Notes",
"exercises": "Exercises",
"memberImages": "Member images",
"testMembershipRemoved": "Trial membership removed.",
"errorRemovingTestMembership": "Error removing the trial membership.",
"formMarkedAsHandedOver": "Membership form marked as handed over.",
"errorMarkingForm": "Error marking the form.",
"deactivateMemberTitle": "Deactivate member",
"deactivateMemberConfirm": "Do you really want to deactivate \"{name}\"?",
"memberDeactivated": "Member deactivated",
"errorDeactivatingMember": "Error deactivating member",
"errorSavingMember": "Error saving member",
"errorAddingToGroup": "Error adding to group",
"errorRemovingFromGroup": "Error removing from group",
"imageUpdated": "Image updated",
"errorRotatingImage": "Error rotating image",
"imageDeleted": "Image deleted.",
"errorDeletingImage": "Image could not be deleted",
"primaryImageUpdated": "Primary image updated.",
"errorSettingPrimaryImage": "Primary image could not be set",
"errorUploadingImage": "Image could not be uploaded",
"errorLoadingImage": "Error loading image",
"phoneList": "phone-list.pdf",
"errorLoadingTrainingParticipations": "Error loading training participations",
"errorUpdatingRatings": "Error updating TTR/QTTR values",
"errorTransfer": "Transfer error",
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
@@ -369,11 +519,17 @@
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeDataIncomplete": "Data incomplete",
"scopeInactive": "Inactive",
"scopeActiveDataIncomplete": "Active + data incomplete",
"searchAndFilter": "Search and filter",
"bulkActions": "Bulk actions",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"editorAssignTrainingGroupHint": "Please assign at least one training group.",
"editorRecommendedEntry": "Recommended entry",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
@@ -418,17 +574,33 @@
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"ageRange": "Age from - to",
"ageFromPlaceholder": "from",
"ageToPlaceholder": "to",
"age": "Age",
"dataQuality": "Data quality",
"dataQualityComplete": "Data complete",
"dataIssueBirthdate": "Birthdate missing",
"dataIssuePhone": "Phone missing",
"dataIssueEmail": "Email missing",
"dataIssueAddress": "Address missing",
"dataIssueGender": "Gender unclear",
"dataIssueTrainingGroup": "Training group missing",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckDataQuality": "Review data quality",
"taskAssignTrainingGroup": "Assign training group",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionReview": "Open",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"showTtrHistory": "Show TTR history",
"missingTtrHistoryId": "No myTischtennis ID stored",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
@@ -450,5 +622,212 @@
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
},
"diary": {
"title": "Training diary",
"date": "Date",
"noEntries": "No entries",
"deleteDate": "Delete date",
"createNew": "Create new",
"gallery": "Member gallery",
"galleryCreating": "Creating gallery…",
"selectTrainingGroup": "Select training group",
"selectTrainingGroupPlaceholder": "Please choose...",
"suggestion": "Suggestion",
"nextAppointment": "Next appointment",
"applySuggestion": "Apply suggestion",
"skipSuggestion": "Continue without suggestion",
"createNewDate": "Create new date",
"activeTrainingDay": "Active training day",
"trainingDaySection": "Training day",
"trainingDayChecklist": "Completion checklist",
"trainingStart": "Training start",
"trainingEnd": "Training end",
"trainingWindow": "Training window",
"trainingWindowUnset": "Not set yet",
"groupsLabel": "Groups",
"groupsSection": "Groups",
"createDate": "Create date",
"editTrainingTimes": "Edit training times",
"updateTimes": "Update times",
"groupManagement": "Group management",
"createGroups": "Create groups",
"trainingPlan": "Training plan",
"planActivitiesCount": "Planned activities",
"timeblocksCount": "Time blocks",
"planEmptyState": "Nothing has been entered in the training plan yet.",
"planAddHint": "Add new plan items using the actions above.",
"startTime": "Start time",
"group": "Group...",
"timeblock": "Time block",
"assignParticipants": "Assign participants",
"addTimeblock": "Time block",
"activities": "Activities",
"freeActivities": "Free activities",
"noFreeActivitiesYet": "No free activities have been recorded yet.",
"addActivity": "Add activity",
"bookAccident": "Record accident",
"activity": "Activity",
"duration": "Duration",
"activityImage": "Activity image",
"activityDrawing": "Activity drawing",
"today": "Today",
"existingGroups": "Existing groups",
"leader": "Leader",
"deleteGroup": "Delete group",
"numberOfGroups": "Number of groups",
"addGroup": "Add group",
"activityOrTimeblock": "Activity / time block",
"durationMinutes": "Duration (min)",
"addGroupActivity": "Add group activity",
"addGroupButton": "+ Group",
"all": "All",
"selectGroup": "Select group...",
"activityPlaceholder": "Activity",
"assignShort": "Assign",
"statusReadyShort": "Ready",
"statusOpenShort": "Open",
"openPlanItemsLabel": "Plan status",
"openPlanItems": "{count} open",
"unassignedPlanItems": "{count} open",
"durationExampleLong": "e.g. 2x7 or 3*5",
"durationExampleShort": "e.g. 2x7",
"showImage": "Show image/drawing",
"participants": "Participants",
"searchParticipants": "Search participants",
"filterAll": "All",
"filterPresent": "Present",
"filterAbsent": "Absent",
"filterTest": "Trial",
"quickAdd": "+ Quick add",
"selectTags": "Select tags",
"createDrawing": "Create exercise drawing",
"overallActivity": "Overall activity",
"editActivity": "Edit activity",
"editGroupActivity": "Edit group activity",
"assignParticipantsForGroupActivity": "Assign participants for group activity",
"delete": "Delete",
"min": "Min",
"errorLoadingPredefinedActivities": "Failed to load predefined activities",
"selectParticipantAndNote": "Please select a participant and enter a note.",
"selectGroupAndActivity": "Please select a group and enter an activity.",
"dateCannotBeDeleted": "Date cannot be deleted",
"dateCannotBeDeletedDetails": "There is still content present (training plan, participants, activities, accidents or notes).",
"confirmDelete": "Confirm deletion",
"confirmDeleteDate": "Do you really want to delete this date?",
"confirmDeleteDateDetails": "All associated data will also be deleted.",
"noParticipants": "No participants available for this training day.",
"mustCreateAtLeastTwoGroups": "At least 2 groups must be created the first time.",
"oneGroupAdded": "1 group was added successfully.",
"groupsCreated": "{count} groups were created successfully.",
"errorCreatingGroups": "Error creating groups",
"confirmDeleteGroup": "Do you really want to delete the group \"{name}\"?",
"groupDeletedSuccessfully": "Group deleted successfully.",
"errorDeletingGroup": "Error deleting group",
"errorCreatingActivity": "Error creating activity",
"trainingPlanAsPDF": "Training plan as PDF",
"trainingPlanPdfShort": "Schedule as PDF",
"trainingDayAsPDF": "Download training day as PDF",
"trainingDayAsPDFShort": "Training day as PDF",
"trainingDaySummaryPdfShort": "Participant summary as PDF",
"minutes": "Minutes",
"formHandedOver": "Membership form handed over",
"errorOccurred": "An error occurred. Please try again.",
"trainingTimesUpdated": "Training times updated successfully.",
"noActiveTrainingDay": "No training day selected.",
"statusEmpty": "This training day is still empty.",
"statusInProgress": "This training day is partially prepared.",
"formMarkedAsHandedOver": "Membership form marked as handed over",
"errorMarkingForm": "Error marking the membership form",
"dateNoLongerCurrent": "The selected date was no longer current. Please try again.",
"activityRequired": "Please enter an activity.",
"activityNotFound": "Activity not found. Please choose one from the list.",
"standardActivities": "Standard activities",
"standardDurationShort": "Min",
"standardActivityAddError": "Standard activity could not be added.",
"statusReady": "Times and training plan are set.",
"filterExcused": "Excused",
"participantStatusNone": "No status",
"participantStatusExcused": "Excused",
"participantStatusCancelled": "Cancelled"
},
"trainingStats": {
"title": "Training statistics",
"activeMembers": "Active members",
"averageParticipationCurrentMonth": "Average participation (current month)",
"averageParticipationLastMonth": "Average participation (last month)",
"averageParticipationQuarter": "Average participation (quarter)",
"averageParticipationHalfYear": "Average participation (half-year)",
"averageParticipationYear": "Average participation (year)",
"trainingDays": "Training days (last 12 months)",
"memberParticipations": "Member participations",
"date": "Date",
"weekday": "Weekday",
"participants": "Participants",
"name": "Name",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "Birthdate",
"participations12Months": "Participations (12 months)",
"participations3Months": "Participations (3 months)",
"participationsTotal": "Participations (total)",
"lastTraining": "Last training",
"actions": "Actions",
"showDetails": "Show details"
},
"courtDrawingTool": {
"title": "Table tennis exercise drawing",
"configureExercise": "Configure exercise",
"stepStartPosition": "1. Start position",
"stepStartPositionHint": "Which service position does the exercise start from?",
"stepFirstStroke": "2. First stroke",
"stepFirstStrokeHint": "Set stroke side and spin for the first ball.",
"stepTarget": "3. Target",
"stepTargetHint": "Choose the target zone for the first stroke.",
"stepAdditionalStrokes": "4. Follow-up strokes",
"stepAdditionalStrokesHint": "Optionally build additional balls as a sequence.",
"noAdditionalStrokes": "No follow-up strokes added yet.",
"service": "Serve:",
"serviceTitle": "Serve",
"forehand": "Forehand",
"backhand": "Backhand",
"spin": "Spin:",
"underspin": "Backspin",
"topspin": "Topspin",
"sidespin": "Sidespin",
"sideUnderspin": "Side-backspin",
"counterSpin": "Counter-spin",
"targetPosition": "Target position:",
"targetPositionLabel": "Target position",
"strokeSide": "Side",
"strokeTypeLabel": "Stroke type",
"addStroke": "Add stroke",
"preview": "Preview",
"previewHint": "The graphic appears as soon as the first stroke is fully configured.",
"completeFirstStroke": "Complete the first stroke",
"completeFirstStrokeHint": "Choose start position, stroke side, spin and target. The graphic will then appear.",
"codeLabel": "Code",
"titleLabel": "Title",
"startLeft": "left",
"startMiddle": "centre",
"startRight": "right",
"strokeTypePush": "Push",
"strokeTypeCounter": "Counter",
"strokeTypeTopspin": "Topspin",
"strokeTypeFlip": "Flip",
"strokeTypeBlock": "Block",
"strokeTypeSmash": "Smash",
"strokeTypeChopDefense": "Chop defence",
"strokeTypeLobDefense": "Lob defence",
"targetForehandLong": "Forehand deep",
"targetMiddleLong": "Middle deep",
"targetBackhandLong": "Backhand deep",
"targetForehandHalfLong": "Forehand half-long",
"targetMiddleHalfLong": "Middle half-long",
"targetBackhandHalfLong": "Backhand half-long",
"targetForehandShort": "Forehand short",
"targetMiddleShort": "Middle short",
"targetBackhandShort": "Backhand short",
"toTarget": "to"
}
}

View File

@@ -23,7 +23,40 @@
"next": "Next",
"previous": "Previous",
"submit": "Submit",
"reset": "Reset"
"reset": "Reset",
"all": "All",
"today": "Today",
"time": "Time",
"new": "New",
"update": "Update",
"create": "Create",
"remove": "Remove",
"select": "Select",
"download": "Download",
"choose": "Choose",
"apply": "Apply",
"clear": "Clear",
"view": "View",
"name": "Name",
"date": "Date",
"status": "Status",
"type": "Type",
"description": "Description",
"active": "Active",
"inactive": "Inactive",
"enabled": "Enabled",
"disabled": "Disabled",
"required": "Required",
"optional": "Optional",
"in": "in",
"min": "min",
"minutes": "minutes",
"hours": "hours",
"days": "days",
"weeks": "weeks",
"months": "months",
"years": "years",
"ok": "OK"
},
"navigation": {
"home": "Home",
@@ -50,7 +83,8 @@
"register": "Register",
"dailyBusiness": "Daily Business",
"competitions": "Competitions",
"settings": "Settings"
"settings": "Settings",
"backToHome": "Back to home"
},
"club": {
"select": "Select Club",
@@ -59,7 +93,20 @@
"load": "Load",
"name": "Club Name",
"create": "Create Club",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"accessRequestPending": "Access to this club has been requested. Please be patient.",
"createTitle": "Create club",
"members": "Members",
"trainingDiary": "Training diary",
"noAccess": "You have not yet been granted access to this club.",
"requestAccess": "Request access",
"openRequests": "Open access requests",
"title": "Club",
"openAccessRequests": "Open access requests",
"diary": "Training diary",
"accessDenied": "Access to the club was denied.",
"errorLoadingRequests": "Failed to load open requests",
"accessRequested": "Access has been requested.",
"accessRequestFailed": "Access request could not be submitted."
},
"auth": {
"login": "Login",
@@ -130,6 +177,124 @@
"cancel": "Cancel"
},
"diary": {
"title": "Training diary",
"date": "Date",
"noEntries": "No entries",
"deleteDate": "Delete date",
"createNew": "Create new",
"gallery": "Member gallery",
"galleryCreating": "Creating gallery…",
"selectTrainingGroup": "Select training group",
"selectTrainingGroupPlaceholder": "Please choose...",
"suggestion": "Suggestion",
"nextAppointment": "Next appointment",
"applySuggestion": "Apply suggestion",
"skipSuggestion": "Continue without suggestion",
"createNewDate": "Create new date",
"activeTrainingDay": "Active training day",
"trainingDaySection": "Training day",
"trainingDayChecklist": "Completion checklist",
"trainingStart": "Training start",
"trainingEnd": "Training end",
"trainingWindow": "Training window",
"trainingWindowUnset": "Not set yet",
"groupsLabel": "Groups",
"groupsSection": "Groups",
"createDate": "Create date",
"editTrainingTimes": "Edit training times",
"updateTimes": "Update times",
"groupManagement": "Group management",
"createGroups": "Create groups",
"trainingPlan": "Training plan",
"planActivitiesCount": "Planned activities",
"timeblocksCount": "Time blocks",
"planEmptyState": "Nothing has been entered in the training plan yet.",
"planAddHint": "Add new plan items using the actions above.",
"startTime": "Start time",
"group": "Group...",
"timeblock": "Time block",
"assignParticipants": "Assign participants",
"addTimeblock": "Time block",
"activities": "Activities",
"freeActivities": "Free activities",
"noFreeActivitiesYet": "No free activities have been recorded yet.",
"addActivity": "Add activity",
"bookAccident": "Record accident",
"activity": "Activity",
"duration": "Duration",
"activityImage": "Activity image",
"activityDrawing": "Activity drawing",
"today": "Today",
"existingGroups": "Existing groups",
"leader": "Leader",
"deleteGroup": "Delete group",
"numberOfGroups": "Number of groups",
"addGroup": "Add group",
"activityOrTimeblock": "Activity / time block",
"durationMinutes": "Duration (min)",
"addGroupActivity": "Add group activity",
"addGroupButton": "+ Group",
"all": "All",
"selectGroup": "Select group...",
"activityPlaceholder": "Activity",
"assignShort": "Assign",
"statusReadyShort": "Ready",
"statusOpenShort": "Open",
"openPlanItemsLabel": "Plan status",
"openPlanItems": "{count} open",
"unassignedPlanItems": "{count} open",
"durationExampleLong": "e.g. 2x7 or 3*5",
"durationExampleShort": "e.g. 2x7",
"showImage": "Show image/drawing",
"participants": "Participants",
"searchParticipants": "Search participants",
"filterAll": "All",
"filterPresent": "Present",
"filterAbsent": "Absent",
"filterTest": "Trial",
"quickAdd": "+ Quick add",
"selectTags": "Select tags",
"createDrawing": "Create exercise drawing",
"overallActivity": "Overall activity",
"editActivity": "Edit activity",
"editGroupActivity": "Edit group activity",
"assignParticipantsForGroupActivity": "Assign participants for group activity",
"delete": "Delete",
"min": "Min",
"errorLoadingPredefinedActivities": "Failed to load predefined activities",
"selectParticipantAndNote": "Please select a participant and enter a note.",
"selectGroupAndActivity": "Please select a group and enter an activity.",
"dateCannotBeDeleted": "Date cannot be deleted",
"dateCannotBeDeletedDetails": "There is still content present (training plan, participants, activities, accidents or notes).",
"confirmDelete": "Confirm deletion",
"confirmDeleteDate": "Do you really want to delete this date?",
"confirmDeleteDateDetails": "All associated data will also be deleted.",
"noParticipants": "No participants available for this training day.",
"mustCreateAtLeastTwoGroups": "At least 2 groups must be created the first time.",
"oneGroupAdded": "1 group was added successfully.",
"groupsCreated": "{count} groups were created successfully.",
"errorCreatingGroups": "Error creating groups",
"confirmDeleteGroup": "Do you really want to delete the group \"{name}\"?",
"groupDeletedSuccessfully": "Group deleted successfully.",
"errorDeletingGroup": "Error deleting group",
"errorCreatingActivity": "Error creating activity",
"trainingPlanAsPDF": "Training plan as PDF",
"trainingPlanPdfShort": "Schedule as PDF",
"trainingDayAsPDF": "Download training day as PDF",
"trainingDayAsPDFShort": "Training day as PDF",
"trainingDaySummaryPdfShort": "Participant summary as PDF",
"minutes": "Minutes",
"formHandedOver": "Membership form handed over",
"errorOccurred": "An error occurred. Please try again.",
"trainingTimesUpdated": "Training times updated successfully.",
"noActiveTrainingDay": "No training day selected.",
"statusEmpty": "This training day is still empty.",
"statusInProgress": "This training day is partially prepared.",
"formMarkedAsHandedOver": "Membership form marked as handed over",
"errorMarkingForm": "Error marking the membership form",
"dateNoLongerCurrent": "The selected date was no longer current. Please try again.",
"activityRequired": "Please enter an activity.",
"activityNotFound": "Activity not found. Please choose one from the list.",
"standardActivities": "Standard activities",
"standardDurationShort": "Min",
"standardActivityAddError": "Standard activity could not be added.",
@@ -488,6 +653,106 @@
"errorImportingCSV": "Failed to import the CSV file"
},
"members": {
"title": "Members",
"memberInfo": "Member info",
"activeMembers": "Active members",
"testMembers": "Trial members",
"inactiveMembers": "Inactive members",
"generatePhoneList": "Generate phone list",
"onlyActiveMembers": "Only active members are included",
"updateRatings": "Update TTR/QTTR from myTischtennis",
"updating": "Updating...",
"transferMembers": "Transfer members",
"newMember": "New member",
"editMember": "Edit member",
"createNewMember": "Create new member",
"firstName": "First name",
"lastName": "Last name",
"street": "Street",
"postalCode": "Postcode",
"city": "City",
"birthdate": "Birthdate",
"phones": "Phone numbers",
"emails": "Email addresses",
"addPhone": "Add phone number",
"addEmail": "Add email address",
"phoneNumber": "Phone number",
"emailAddress": "Email address",
"parent": "Parent",
"parentName": "Name (e.g. mother, father)",
"primary": "Primary",
"gender": "Gender",
"genderUnknown": "Unknown",
"genderMale": "Male",
"genderFemale": "Female",
"genderDiverse": "Diverse",
"picsInInternetAllowed": "Pictures allowed online",
"testMembership": "Trial membership",
"memberFormHandedOver": "Membership form handed over",
"trainingGroups": "Training groups",
"noGroupsAssigned": "No groups assigned",
"noGroupsAvailable": "No groups available",
"addGroup": "Add group...",
"remove": "Remove",
"image": "Image",
"selectFile": "Select file",
"camera": "Camera",
"imagePreview": "Member image preview",
"change": "Change",
"create": "Create",
"clearFields": "Clear fields",
"showInactiveMembers": "Show inactive members",
"ageGroup": "Age group",
"adults": "Adults (20+)",
"j19": "U19 (19 and younger)",
"j17": "U17 (17 and younger)",
"j15": "U15 (15 and younger)",
"j13": "U13 (13 and younger)",
"j11": "U11 (11 and younger)",
"clearFilters": "Reset filters",
"imageInternet": "Image (web?)",
"testMember": "Trial",
"name": "Surname, first name",
"ttrQttr": "TTR / QTTR",
"address": "Address",
"active": "Active",
"actions": "Actions",
"phoneNumberShort": "Phone no.",
"emailAddressShort": "Email address",
"trainingParticipations": "Training participations",
"memberImage": "Member image",
"inactive": "inactive",
"sixOrMoreParticipations": "6 or more training participations",
"threeOrMoreParticipations": "3 or more training participations",
"noTestMembership": "No longer a trial member",
"formHandedOver": "Membership form handed over",
"deactivateMember": "Deactivate member",
"notes": "Notes",
"exercises": "Exercises",
"memberImages": "Member images",
"testMembershipRemoved": "Trial membership removed.",
"errorRemovingTestMembership": "Error removing the trial membership.",
"formMarkedAsHandedOver": "Membership form marked as handed over.",
"errorMarkingForm": "Error marking the form.",
"deactivateMemberTitle": "Deactivate member",
"deactivateMemberConfirm": "Do you really want to deactivate \"{name}\"?",
"memberDeactivated": "Member deactivated",
"errorDeactivatingMember": "Error deactivating member",
"errorSavingMember": "Error saving member",
"errorAddingToGroup": "Error adding to group",
"errorRemovingFromGroup": "Error removing from group",
"imageUpdated": "Image updated",
"errorRotatingImage": "Error rotating image",
"imageDeleted": "Image deleted.",
"errorDeletingImage": "Image could not be deleted",
"primaryImageUpdated": "Primary image updated.",
"errorSettingPrimaryImage": "Primary image could not be set",
"errorUploadingImage": "Image could not be uploaded",
"errorLoadingImage": "Error loading image",
"phoneList": "phone-list.pdf",
"errorLoadingTrainingParticipations": "Error loading training participations",
"errorUpdatingRatings": "Error updating TTR/QTTR values",
"errorTransfer": "Transfer error",
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
@@ -500,10 +765,15 @@
"scopeNeedsForm": "Form unverified",
"scopeDataIncomplete": "Data incomplete",
"scopeInactive": "Inactive",
"scopeActiveDataIncomplete": "Active + data incomplete",
"searchAndFilter": "Search and filter",
"bulkActions": "Bulk actions",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"editorAssignTrainingGroupHint": "Please assign at least one training group.",
"editorRecommendedEntry": "Recommended entry",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
@@ -548,6 +818,9 @@
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"ageRange": "Age from - to",
"ageFromPlaceholder": "from",
"ageToPlaceholder": "to",
"age": "Age",
"dataQuality": "Data quality",
"dataQualityComplete": "Data complete",
@@ -556,18 +829,22 @@
"dataIssueEmail": "Email missing",
"dataIssueAddress": "Address missing",
"dataIssueGender": "Gender unclear",
"dataIssueTrainingGroup": "Training group missing",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckDataQuality": "Review data quality",
"taskAssignTrainingGroup": "Assign training group",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionReview": "Open",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"showTtrHistory": "Show TTR history",
"missingTtrHistoryId": "No myTischtennis ID stored",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
@@ -590,6 +867,85 @@
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
},
"trainingStats": {
"title": "Training statistics",
"activeMembers": "Active members",
"averageParticipationCurrentMonth": "Average participation (current month)",
"averageParticipationLastMonth": "Average participation (last month)",
"averageParticipationQuarter": "Average participation (quarter)",
"averageParticipationHalfYear": "Average participation (half-year)",
"averageParticipationYear": "Average participation (year)",
"trainingDays": "Training days (last 12 months)",
"memberParticipations": "Member participations",
"date": "Date",
"weekday": "Weekday",
"participants": "Participants",
"name": "Name",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "Birthdate",
"participations12Months": "Participations (12 months)",
"participations3Months": "Participations (3 months)",
"participationsTotal": "Participations (total)",
"lastTraining": "Last training",
"actions": "Actions",
"showDetails": "Show details"
},
"courtDrawingTool": {
"title": "Table tennis exercise drawing",
"configureExercise": "Configure exercise",
"stepStartPosition": "1. Start position",
"stepStartPositionHint": "Which service position does the exercise start from?",
"stepFirstStroke": "2. First stroke",
"stepFirstStrokeHint": "Set stroke side and spin for the first ball.",
"stepTarget": "3. Target",
"stepTargetHint": "Choose the target zone for the first stroke.",
"stepAdditionalStrokes": "4. Follow-up strokes",
"stepAdditionalStrokesHint": "Optionally build additional balls as a sequence.",
"noAdditionalStrokes": "No follow-up strokes added yet.",
"service": "Serve:",
"serviceTitle": "Serve",
"forehand": "Forehand",
"backhand": "Backhand",
"spin": "Spin:",
"underspin": "Backspin",
"topspin": "Topspin",
"sidespin": "Sidespin",
"sideUnderspin": "Side-backspin",
"counterSpin": "Counter-spin",
"targetPosition": "Target position:",
"targetPositionLabel": "Target position",
"strokeSide": "Side",
"strokeTypeLabel": "Stroke type",
"addStroke": "Add stroke",
"preview": "Preview",
"previewHint": "The graphic appears as soon as the first stroke is fully configured.",
"completeFirstStroke": "Complete the first stroke",
"completeFirstStrokeHint": "Choose start position, stroke side, spin and target. The graphic will then appear.",
"codeLabel": "Code",
"titleLabel": "Title",
"startLeft": "left",
"startMiddle": "centre",
"startRight": "right",
"strokeTypePush": "Push",
"strokeTypeCounter": "Counter",
"strokeTypeTopspin": "Topspin",
"strokeTypeFlip": "Flip",
"strokeTypeBlock": "Block",
"strokeTypeSmash": "Smash",
"strokeTypeChopDefense": "Chop defence",
"strokeTypeLobDefense": "Lob defence",
"targetForehandLong": "Forehand deep",
"targetMiddleLong": "Middle deep",
"targetBackhandLong": "Backhand deep",
"targetForehandHalfLong": "Forehand half-long",
"targetMiddleHalfLong": "Middle half-long",
"targetBackhandHalfLong": "Backhand half-long",
"targetForehandShort": "Forehand short",
"targetMiddleShort": "Middle short",
"targetBackhandShort": "Backhand short",
"toTarget": "to"
},
"teamManagement": {
"title": "Team Management",
"subtitle": "Select teams, review configuration and maintain league data in one place.",

View File

@@ -12,6 +12,7 @@
"edit": "Edit",
"add": "Add",
"close": "Close",
"details": "Details",
"confirm": "Confirm",
"yes": "Yes",
"no": "No",
@@ -22,7 +23,40 @@
"next": "Next",
"previous": "Previous",
"submit": "Submit",
"reset": "Reset"
"reset": "Reset",
"all": "All",
"today": "Today",
"time": "Time",
"new": "New",
"update": "Update",
"create": "Create",
"remove": "Remove",
"select": "Select",
"download": "Download",
"choose": "Choose",
"apply": "Apply",
"clear": "Clear",
"view": "View",
"name": "Name",
"date": "Date",
"status": "Status",
"type": "Type",
"description": "Description",
"active": "Active",
"inactive": "Inactive",
"enabled": "Enabled",
"disabled": "Disabled",
"required": "Required",
"optional": "Optional",
"in": "in",
"min": "min",
"minutes": "minutes",
"hours": "hours",
"days": "days",
"weeks": "weeks",
"months": "months",
"years": "years",
"ok": "OK"
},
"navigation": {
"home": "Home",
@@ -41,13 +75,16 @@
"logs": "System Logs",
"memberTransfer": "Member Transfer",
"myTischtennisAccount": "myTischtennis Account",
"clickTtAccount": "HTTV / click-TT Account",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "Personal Settings",
"logout": "Log Out",
"login": "Log In",
"register": "Sign Up",
"dailyBusiness": "Daily Business",
"competitions": "Competitions",
"settings": "Settings"
"settings": "Settings",
"backToHome": "Back to home"
},
"club": {
"select": "Select Club",
@@ -56,7 +93,20 @@
"load": "Load",
"name": "Club Name",
"create": "Create Club",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"accessRequestPending": "Access to this club has been requested. Please be patient.",
"createTitle": "Create club",
"members": "Members",
"trainingDiary": "Training diary",
"noAccess": "You have not yet been granted access to this club.",
"requestAccess": "Request access",
"openRequests": "Open access requests",
"title": "Club",
"openAccessRequests": "Open access requests",
"diary": "Training diary",
"accessDenied": "Access to the club was denied.",
"errorLoadingRequests": "Failed to load open requests",
"accessRequested": "Access has been requested.",
"accessRequestFailed": "Access request could not be submitted."
},
"auth": {
"login": "Log In",
@@ -359,6 +409,106 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"title": "Members",
"memberInfo": "Member info",
"activeMembers": "Active members",
"testMembers": "Trial members",
"inactiveMembers": "Inactive members",
"generatePhoneList": "Generate phone list",
"onlyActiveMembers": "Only active members are included",
"updateRatings": "Update TTR/QTTR from myTischtennis",
"updating": "Updating...",
"transferMembers": "Transfer members",
"newMember": "New member",
"editMember": "Edit member",
"createNewMember": "Create new member",
"firstName": "First name",
"lastName": "Last name",
"street": "Street",
"postalCode": "ZIP code",
"city": "City",
"birthdate": "Birthdate",
"phones": "Phone numbers",
"emails": "Email addresses",
"addPhone": "Add phone number",
"addEmail": "Add email address",
"phoneNumber": "Phone number",
"emailAddress": "Email address",
"parent": "Parent",
"parentName": "Name (e.g. mother, father)",
"primary": "Primary",
"gender": "Gender",
"genderUnknown": "Unknown",
"genderMale": "Male",
"genderFemale": "Female",
"genderDiverse": "Diverse",
"picsInInternetAllowed": "Pictures allowed online",
"testMembership": "Trial membership",
"memberFormHandedOver": "Membership form handed over",
"trainingGroups": "Training groups",
"noGroupsAssigned": "No groups assigned",
"noGroupsAvailable": "No groups available",
"addGroup": "Add group...",
"remove": "Remove",
"image": "Image",
"selectFile": "Select file",
"camera": "Camera",
"imagePreview": "Member image preview",
"change": "Change",
"create": "Create",
"clearFields": "Clear fields",
"showInactiveMembers": "Show inactive members",
"ageGroup": "Age group",
"adults": "Adults (20+)",
"j19": "U19 (19 and younger)",
"j17": "U17 (17 and younger)",
"j15": "U15 (15 and younger)",
"j13": "U13 (13 and younger)",
"j11": "U11 (11 and younger)",
"clearFilters": "Reset filters",
"imageInternet": "Image (web?)",
"testMember": "Trial",
"name": "Last name, first name",
"ttrQttr": "TTR / QTTR",
"address": "Address",
"active": "Active",
"actions": "Actions",
"phoneNumberShort": "Phone no.",
"emailAddressShort": "Email address",
"trainingParticipations": "Training participations",
"memberImage": "Member image",
"inactive": "inactive",
"sixOrMoreParticipations": "6 or more training participations",
"threeOrMoreParticipations": "3 or more training participations",
"noTestMembership": "No longer a trial member",
"formHandedOver": "Membership form handed over",
"deactivateMember": "Deactivate member",
"notes": "Notes",
"exercises": "Exercises",
"memberImages": "Member images",
"testMembershipRemoved": "Trial membership removed.",
"errorRemovingTestMembership": "Error removing the trial membership.",
"formMarkedAsHandedOver": "Membership form marked as handed over.",
"errorMarkingForm": "Error marking the form.",
"deactivateMemberTitle": "Deactivate member",
"deactivateMemberConfirm": "Do you really want to deactivate \"{name}\"?",
"memberDeactivated": "Member deactivated",
"errorDeactivatingMember": "Error deactivating member",
"errorSavingMember": "Error saving member",
"errorAddingToGroup": "Error adding to group",
"errorRemovingFromGroup": "Error removing from group",
"imageUpdated": "Image updated",
"errorRotatingImage": "Error rotating image",
"imageDeleted": "Image deleted.",
"errorDeletingImage": "Image could not be deleted",
"primaryImageUpdated": "Primary image updated.",
"errorSettingPrimaryImage": "Primary image could not be set",
"errorUploadingImage": "Image could not be uploaded",
"errorLoadingImage": "Error loading image",
"phoneList": "phone-list.pdf",
"errorLoadingTrainingParticipations": "Error loading training participations",
"errorUpdatingRatings": "Error updating TTR/QTTR values",
"errorTransfer": "Transfer error",
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
@@ -369,11 +519,17 @@
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeDataIncomplete": "Data incomplete",
"scopeInactive": "Inactive",
"scopeActiveDataIncomplete": "Active + data incomplete",
"searchAndFilter": "Search and filter",
"bulkActions": "Bulk actions",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"editorAssignTrainingGroupHint": "Please assign at least one training group.",
"editorRecommendedEntry": "Recommended entry",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
@@ -418,17 +574,33 @@
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"ageRange": "Age from - to",
"ageFromPlaceholder": "from",
"ageToPlaceholder": "to",
"age": "Age",
"dataQuality": "Data quality",
"dataQualityComplete": "Data complete",
"dataIssueBirthdate": "Birthdate missing",
"dataIssuePhone": "Phone missing",
"dataIssueEmail": "Email missing",
"dataIssueAddress": "Address missing",
"dataIssueGender": "Gender unclear",
"dataIssueTrainingGroup": "Training group missing",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckDataQuality": "Review data quality",
"taskAssignTrainingGroup": "Assign training group",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionReview": "Open",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"showTtrHistory": "Show TTR history",
"missingTtrHistoryId": "No myTischtennis ID stored",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
@@ -450,5 +622,212 @@
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
},
"diary": {
"title": "Training diary",
"date": "Date",
"noEntries": "No entries",
"deleteDate": "Delete date",
"createNew": "Create new",
"gallery": "Member gallery",
"galleryCreating": "Creating gallery…",
"selectTrainingGroup": "Select training group",
"selectTrainingGroupPlaceholder": "Please choose...",
"suggestion": "Suggestion",
"nextAppointment": "Next appointment",
"applySuggestion": "Apply suggestion",
"skipSuggestion": "Continue without suggestion",
"createNewDate": "Create new date",
"activeTrainingDay": "Active training day",
"trainingDaySection": "Training day",
"trainingDayChecklist": "Completion checklist",
"trainingStart": "Training start",
"trainingEnd": "Training end",
"trainingWindow": "Training window",
"trainingWindowUnset": "Not set yet",
"groupsLabel": "Groups",
"groupsSection": "Groups",
"createDate": "Create date",
"editTrainingTimes": "Edit training times",
"updateTimes": "Update times",
"groupManagement": "Group management",
"createGroups": "Create groups",
"trainingPlan": "Training plan",
"planActivitiesCount": "Planned activities",
"timeblocksCount": "Time blocks",
"planEmptyState": "Nothing has been entered in the training plan yet.",
"planAddHint": "Add new plan items using the actions above.",
"startTime": "Start time",
"group": "Group...",
"timeblock": "Time block",
"assignParticipants": "Assign participants",
"addTimeblock": "Time block",
"activities": "Activities",
"freeActivities": "Free activities",
"noFreeActivitiesYet": "No free activities have been recorded yet.",
"addActivity": "Add activity",
"bookAccident": "Record accident",
"activity": "Activity",
"duration": "Duration",
"activityImage": "Activity image",
"activityDrawing": "Activity drawing",
"today": "Today",
"existingGroups": "Existing groups",
"leader": "Leader",
"deleteGroup": "Delete group",
"numberOfGroups": "Number of groups",
"addGroup": "Add group",
"activityOrTimeblock": "Activity / time block",
"durationMinutes": "Duration (min)",
"addGroupActivity": "Add group activity",
"addGroupButton": "+ Group",
"all": "All",
"selectGroup": "Select group...",
"activityPlaceholder": "Activity",
"assignShort": "Assign",
"statusReadyShort": "Ready",
"statusOpenShort": "Open",
"openPlanItemsLabel": "Plan status",
"openPlanItems": "{count} open",
"unassignedPlanItems": "{count} open",
"durationExampleLong": "e.g. 2x7 or 3*5",
"durationExampleShort": "e.g. 2x7",
"showImage": "Show image/drawing",
"participants": "Participants",
"searchParticipants": "Search participants",
"filterAll": "All",
"filterPresent": "Present",
"filterAbsent": "Absent",
"filterTest": "Trial",
"quickAdd": "+ Quick add",
"selectTags": "Select tags",
"createDrawing": "Create exercise drawing",
"overallActivity": "Overall activity",
"editActivity": "Edit activity",
"editGroupActivity": "Edit group activity",
"assignParticipantsForGroupActivity": "Assign participants for group activity",
"delete": "Delete",
"min": "Min",
"errorLoadingPredefinedActivities": "Failed to load predefined activities",
"selectParticipantAndNote": "Please select a participant and enter a note.",
"selectGroupAndActivity": "Please select a group and enter an activity.",
"dateCannotBeDeleted": "Date cannot be deleted",
"dateCannotBeDeletedDetails": "There is still content present (training plan, participants, activities, accidents or notes).",
"confirmDelete": "Confirm deletion",
"confirmDeleteDate": "Do you really want to delete this date?",
"confirmDeleteDateDetails": "All associated data will also be deleted.",
"noParticipants": "No participants available for this training day.",
"mustCreateAtLeastTwoGroups": "At least 2 groups must be created the first time.",
"oneGroupAdded": "1 group was added successfully.",
"groupsCreated": "{count} groups were created successfully.",
"errorCreatingGroups": "Error creating groups",
"confirmDeleteGroup": "Do you really want to delete the group \"{name}\"?",
"groupDeletedSuccessfully": "Group deleted successfully.",
"errorDeletingGroup": "Error deleting group",
"errorCreatingActivity": "Error creating activity",
"trainingPlanAsPDF": "Training plan as PDF",
"trainingPlanPdfShort": "Schedule as PDF",
"trainingDayAsPDF": "Download training day as PDF",
"trainingDayAsPDFShort": "Training day as PDF",
"trainingDaySummaryPdfShort": "Participant summary as PDF",
"minutes": "Minutes",
"formHandedOver": "Membership form handed over",
"errorOccurred": "An error occurred. Please try again.",
"trainingTimesUpdated": "Training times updated successfully.",
"noActiveTrainingDay": "No training day selected.",
"statusEmpty": "This training day is still empty.",
"statusInProgress": "This training day is partially prepared.",
"formMarkedAsHandedOver": "Membership form marked as handed over",
"errorMarkingForm": "Error marking the membership form",
"dateNoLongerCurrent": "The selected date was no longer current. Please try again.",
"activityRequired": "Please enter an activity.",
"activityNotFound": "Activity not found. Please choose one from the list.",
"standardActivities": "Standard activities",
"standardDurationShort": "Min",
"standardActivityAddError": "Standard activity could not be added.",
"statusReady": "Times and training plan are set.",
"filterExcused": "Excused",
"participantStatusNone": "No status",
"participantStatusExcused": "Excused",
"participantStatusCancelled": "Cancelled"
},
"trainingStats": {
"title": "Training statistics",
"activeMembers": "Active members",
"averageParticipationCurrentMonth": "Average participation (current month)",
"averageParticipationLastMonth": "Average participation (last month)",
"averageParticipationQuarter": "Average participation (quarter)",
"averageParticipationHalfYear": "Average participation (half-year)",
"averageParticipationYear": "Average participation (year)",
"trainingDays": "Training days (last 12 months)",
"memberParticipations": "Member participations",
"date": "Date",
"weekday": "Weekday",
"participants": "Participants",
"name": "Name",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "Birthdate",
"participations12Months": "Participations (12 months)",
"participations3Months": "Participations (3 months)",
"participationsTotal": "Participations (total)",
"lastTraining": "Last training",
"actions": "Actions",
"showDetails": "Show details"
},
"courtDrawingTool": {
"title": "Table tennis exercise drawing",
"configureExercise": "Configure exercise",
"stepStartPosition": "1. Start position",
"stepStartPositionHint": "Which service position does the exercise start from?",
"stepFirstStroke": "2. First stroke",
"stepFirstStrokeHint": "Set stroke side and spin for the first ball.",
"stepTarget": "3. Target",
"stepTargetHint": "Choose the target zone for the first stroke.",
"stepAdditionalStrokes": "4. Follow-up strokes",
"stepAdditionalStrokesHint": "Optionally build additional balls as a sequence.",
"noAdditionalStrokes": "No follow-up strokes added yet.",
"service": "Serve:",
"serviceTitle": "Serve",
"forehand": "Forehand",
"backhand": "Backhand",
"spin": "Spin:",
"underspin": "Backspin",
"topspin": "Topspin",
"sidespin": "Sidespin",
"sideUnderspin": "Side-backspin",
"counterSpin": "Counter-spin",
"targetPosition": "Target position:",
"targetPositionLabel": "Target position",
"strokeSide": "Side",
"strokeTypeLabel": "Stroke type",
"addStroke": "Add stroke",
"preview": "Preview",
"previewHint": "The graphic appears as soon as the first stroke is fully configured.",
"completeFirstStroke": "Complete the first stroke",
"completeFirstStrokeHint": "Choose start position, stroke side, spin and target. The graphic will then appear.",
"codeLabel": "Code",
"titleLabel": "Title",
"startLeft": "left",
"startMiddle": "center",
"startRight": "right",
"strokeTypePush": "Push",
"strokeTypeCounter": "Counter",
"strokeTypeTopspin": "Topspin",
"strokeTypeFlip": "Flip",
"strokeTypeBlock": "Block",
"strokeTypeSmash": "Smash",
"strokeTypeChopDefense": "Chop defense",
"strokeTypeLobDefense": "Lob defense",
"targetForehandLong": "Forehand deep",
"targetMiddleLong": "Middle deep",
"targetBackhandLong": "Backhand deep",
"targetForehandHalfLong": "Forehand half-long",
"targetMiddleHalfLong": "Middle half-long",
"targetBackhandHalfLong": "Backhand half-long",
"targetForehandShort": "Forehand short",
"targetMiddleShort": "Middle short",
"targetBackhandShort": "Backhand short",
"toTarget": "to"
}
}

View File

@@ -22,7 +22,41 @@
"next": "Siguiente",
"previous": "Anterior",
"submit": "Enviar",
"reset": "Restablecer"
"reset": "Restablecer",
"all": "Todos",
"today": "Hoy",
"time": "Hora",
"new": "Nuevo",
"update": "Actualizar",
"create": "Crear",
"remove": "Quitar",
"select": "Seleccionar",
"download": "Descargar",
"choose": "Elegir",
"apply": "Aplicar",
"clear": "Borrar",
"details": "Detalles",
"view": "Ver",
"name": "Nombre",
"date": "Fecha",
"status": "Estado",
"type": "Tipo",
"description": "Descripción",
"active": "Activo",
"inactive": "Inactivo",
"enabled": "Habilitado",
"disabled": "Deshabilitado",
"required": "Obligatorio",
"optional": "Opcional",
"in": "en",
"min": "min",
"minutes": "minutos",
"hours": "horas",
"days": "días",
"weeks": "semanas",
"months": "meses",
"years": "años",
"ok": "OK"
},
"navigation": {
"home": "Inicio",
@@ -41,13 +75,16 @@
"logs": "Registros del sistema",
"memberTransfer": "Transferencia de miembros",
"myTischtennisAccount": "Cuenta myTischtennis",
"clickTtAccount": "Cuenta HTTV / click-TT",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "Configuración personal",
"logout": "Cerrar sesión",
"login": "Iniciar sesión",
"register": "Registrarse",
"dailyBusiness": "Negocios diarios",
"dailyBusiness": "Gestión diaria",
"competitions": "Competiciones",
"settings": "Configuración"
"settings": "Configuración",
"backToHome": "Volver al inicio"
},
"club": {
"select": "Seleccionar club",
@@ -56,7 +93,20 @@
"load": "Cargar",
"name": "Nombre del club",
"create": "Crear club",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"createTitle": "Crear club",
"members": "Miembros",
"trainingDiary": "Diario de entrenamiento",
"noAccess": "Todavía no tienes acceso a este club.",
"requestAccess": "Solicitar acceso",
"openRequests": "Solicitudes de acceso abiertas",
"title": "Club",
"openAccessRequests": "Solicitudes de acceso abiertas",
"diary": "Diario de entrenamiento",
"accessDenied": "Acceso al club denegado.",
"errorLoadingRequests": "Error al cargar las solicitudes abiertas",
"accessRequested": "Se ha solicitado el acceso.",
"accessRequestPending": "Se ha solicitado acceso a este club. Por favor, espera.",
"accessRequestFailed": "No se pudo enviar la solicitud de acceso."
},
"auth": {
"login": "Iniciar sesión",
@@ -331,96 +381,425 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"title": "Miembros",
"memberInfo": "Información del miembro",
"activeMembers": "Miembros activos",
"testMembers": "Miembros de prueba",
"inactiveMembers": "Miembros inactivos",
"generatePhoneList": "Generar lista telefónica",
"onlyActiveMembers": "Solo se incluyen miembros activos",
"updateRatings": "Actualizar TTR/QTTR desde myTischtennis",
"updating": "Actualizando...",
"transferMembers": "Transferir miembros",
"newMember": "Nuevo miembro",
"editMember": "Editar miembro",
"createNewMember": "Crear nuevo miembro",
"firstName": "Nombre",
"lastName": "Apellido",
"street": "Calle",
"postalCode": "Código postal",
"city": "Ciudad",
"birthdate": "Fecha de nacimiento",
"phones": "Números de teléfono",
"emails": "Direcciones de correo",
"addPhone": "Añadir número de teléfono",
"addEmail": "Añadir dirección de correo",
"phoneNumber": "Número de teléfono",
"emailAddress": "Dirección de correo",
"parent": "Tutor",
"parentName": "Nombre (p. ej. madre, padre)",
"primary": "Principal",
"gender": "Sexo",
"genderUnknown": "Desconocido",
"genderMale": "Masculino",
"genderFemale": "Femenino",
"genderDiverse": "Diverso",
"picsInInternetAllowed": "Fotos permitidas en internet",
"testMembership": "Membresía de prueba",
"memberFormHandedOver": "Formulario de afiliación entregado",
"trainingGroups": "Grupos de entrenamiento",
"noGroupsAssigned": "No hay grupos asignados",
"noGroupsAvailable": "No hay grupos disponibles",
"addGroup": "Añadir grupo...",
"remove": "Quitar",
"image": "Imagen",
"selectFile": "Seleccionar archivo",
"camera": "Cámara",
"imagePreview": "Vista previa de la imagen del miembro",
"change": "Cambiar",
"create": "Crear",
"clearFields": "Vaciar campos",
"showInactiveMembers": "Mostrar miembros inactivos",
"ageGroup": "Categoría de edad",
"adults": "Adultos (20+)",
"j19": "U19 (19 años o menos)",
"j17": "U17 (17 años o menos)",
"j15": "U15 (15 años o menos)",
"j13": "U13 (13 años o menos)",
"j11": "U11 (11 años o menos)",
"clearFilters": "Restablecer filtros",
"imageInternet": "Imagen (web?)",
"testMember": "Prueba",
"name": "Apellido, nombre",
"ttrQttr": "TTR / QTTR",
"address": "Dirección",
"active": "Activo",
"actions": "Acciones",
"phoneNumberShort": "Tel.",
"emailAddressShort": "Correo",
"trainingParticipations": "Participaciones en entrenamiento",
"memberImage": "Imagen del miembro",
"inactive": "inactivo",
"sixOrMoreParticipations": "6 o más participaciones en entrenamiento",
"threeOrMoreParticipations": "3 o más participaciones en entrenamiento",
"noTestMembership": "Ya no es miembro de prueba",
"formHandedOver": "Formulario de afiliación entregado",
"deactivateMember": "Desactivar miembro",
"notes": "Notas",
"exercises": "Ejercicios",
"memberImages": "Imágenes del miembro",
"testMembershipRemoved": "Se eliminó la membresía de prueba.",
"errorRemovingTestMembership": "Error al eliminar la membresía de prueba.",
"formMarkedAsHandedOver": "El formulario de afiliación se marcó como entregado.",
"errorMarkingForm": "Error al marcar el formulario.",
"deactivateMemberTitle": "Desactivar miembro",
"deactivateMemberConfirm": "¿Realmente deseas desactivar a \"{name}\"?",
"memberDeactivated": "Miembro desactivado",
"errorDeactivatingMember": "Error al desactivar al miembro",
"errorSavingMember": "Error al guardar el miembro",
"errorAddingToGroup": "Error al añadir al grupo",
"errorRemovingFromGroup": "Error al quitar del grupo",
"imageUpdated": "Imagen actualizada",
"errorRotatingImage": "Error al girar la imagen",
"imageDeleted": "La imagen ha sido eliminada.",
"errorDeletingImage": "No se pudo eliminar la imagen",
"primaryImageUpdated": "Imagen principal actualizada.",
"errorSettingPrimaryImage": "No se pudo establecer la imagen principal",
"errorUploadingImage": "No se pudo subir la imagen",
"errorLoadingImage": "Error al cargar la imagen",
"phoneList": "lista-telefonica.pdf",
"errorLoadingTrainingParticipations": "Error al cargar las participaciones de entrenamiento",
"errorUpdatingRatings": "Error al actualizar los valores TTR/QTTR",
"errorTransfer": "Error en la transferencia",
"subtitle": "Buscar, filtrar y editar miembros directamente.",
"closeEditor": "Cerrar editor",
"visibleMembers": "Miembros visibles",
"search": "Buscar",
"searchPlaceholder": "Buscar por nombre, ciudad, teléfono o correo",
"memberScope": "Ámbito de miembros",
"scopeAll": "Todos",
"scopeActive": "Activos",
"scopeTest": "Prueba",
"scopeNeedsForm": "Formulario sin verificar",
"scopeDataIncomplete": "Datos incompletos",
"scopeInactive": "Inactivos",
"scopeActiveDataIncomplete": "Activo + datos incompletos",
"searchAndFilter": "Búsqueda y filtros",
"bulkActions": "Acciones en lote",
"resultsVisible": "miembros visibles",
"editHint": "Un clic en una fila abre el editor.",
"editorCreateHint": "Crear un nuevo miembro e introducir directamente sus datos de contacto.",
"editorEditHint": "Editar los datos de {name}.",
"editorAssignTrainingGroupHint": "Asigna al menos un grupo de entrenamiento.",
"editorRecommendedEntry": "Entrada recomendada",
"transferSuccessTitle": "Transferencia correcta",
"transferErrorTitle": "Error de transferencia",
"clickTtRequestPending": "Solicitud Click-TT en curso",
"clickTtRequestAction": "Solicitar autorización Click-TT",
"clickTtRequestTitle": "Iniciar solicitud Click-TT",
"clickTtRequestConfirm": "¿Deseas iniciar la solicitud Click-TT automatizada para {name}?",
"clickTtRequestHint": "La solicitud se procesa automáticamente mediante el flujo Click-TT del backend.",
"clickTtRequestSuccess": "Inicia sesión en click-tt y envía allí la solicitud.",
"clickTtRequestError": "No se pudo enviar la solicitud Click-TT.",
"clickTtRequestFailedLog": "Falló la solicitud Click-TT",
"deleteImageTitle": "Eliminar imagen",
"deleteImageConfirm": "¿Deseas eliminar realmente esta imagen?",
"parentFallback": "Tutor",
"loadingMembers": "Cargando miembros...",
"errorLoadingMembers": "No se pudo cargar la lista de miembros.",
"scopeNotTraining": "Ya no entrena",
"notInTrainingTooltip": "Sin participación desde hace {weeks} semanas de entrenamiento",
"status": "Estado",
"contact": "Contacto",
"noPhoneShort": "Sin teléfono",
"noEmailShort": "Sin correo",
"noAddressShort": "Sin dirección",
"clickTtSubmitted": "Click-TT enviado",
"markRegular": "Marcar como regular",
"markFormReceived": "Marcar formulario como verificado",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
"clickTtRequestPendingShort": "En curso...",
"memberDetails": "Detalles del miembro",
"previewLastTraining": "Último entrenamiento",
"previewNoLastTraining": "Aún sin participación",
"phoneListForSelection": "Lista telefónica de la selección",
"markFormsForSelection": "Verificar formularios de la selección",
"markRegularForSelection": "Marcar selección como regular",
"phoneListSelectionFile": "lista-telefonica-seleccion.pdf",
"batchFormsMarkedSuccess": "Se marcaron {count} formulario(s) como verificados.",
"batchFormsMarkedEmpty": "No hay formularios sin verificar en la selección actual.",
"batchMarkedRegularSuccess": "Se marcaron {count} miembro(s) de prueba como regulares.",
"batchMarkedRegularEmpty": "No hay miembros de prueba en la selección actual.",
"batchPartialFailure": "{success} correctos, {failed} fallidos.",
"sortBy": "Ordenar por",
"sortLastName": "Apellido",
"sortFirstName": "Nombre",
"sortBirthday": "Fecha de nacimiento",
"sortAge": "Edad",
"ageRange": "Edad de - a",
"ageFromPlaceholder": "de",
"ageToPlaceholder": "a",
"age": "Edad",
"dataQuality": "Calidad de los datos",
"dataQualityComplete": "Datos completos",
"dataIssueBirthdate": "Falta la fecha de nacimiento",
"dataIssuePhone": "Falta el teléfono",
"dataIssueEmail": "Falta el correo",
"dataIssueAddress": "Falta la dirección",
"dataIssueGender": "Sexo no definido",
"dataIssueTrainingGroup": "Falta el grupo de entrenamiento",
"openTasks": "Tareas abiertas",
"noOpenTasks": "No hay tareas abiertas",
"taskVerifyForm": "Verificar formulario",
"taskReviewTrialStatus": "Revisar estado de prueba",
"taskCheckTrainingStatus": "Revisar estado de entrenamiento",
"taskCheckDataQuality": "Revisar calidad de datos",
"taskAssignTrainingGroup": "Asignar grupo de entrenamiento",
"taskCheckClickTt": "Revisar autorización Click-TT",
"taskActionVerify": "Verificar",
"taskActionMarkRegular": "Marcar regular",
"taskActionReview": "Abrir",
"taskActionRequest": "Solicitar",
"toggleSortDirection": "Cambiar dirección de ordenación",
"showTtrHistory": "Mostrar historial TTR",
"missingTtrHistoryId": "No hay ID de myTischtennis almacenado",
"sortLastTraining": "Último entrenamiento",
"sortOpenTasks": "Tareas abiertas",
"exportPreview": "Vista previa de exportación",
"exportMembersSelected": "miembros seleccionados actualmente",
"exportPhones": "Teléfono",
"exportReachableByPhone": "con número de teléfono",
"exportEmails": "Correo",
"exportReachableByEmail": "con dirección de correo",
"exportPreviewNames": "Vista previa",
"exportPreviewEmpty": "No hay miembros en la selección actual",
"exportCsv": "Exportar CSV",
"exportCsvFile": "seleccion-miembros.csv",
"copyPhones": "Copiar teléfonos",
"copyEmails": "Copiar correos",
"copyPhonesSuccess": "La lista telefónica se copió al portapapeles.",
"copyPhonesEmpty": "No hay números de teléfono en la selección actual.",
"copyEmailsSuccess": "La lista de correo se copió al portapapeles.",
"copyEmailsEmpty": "No hay direcciones de correo en la selección actual.",
"composeEmail": "Preparar correo",
"copyContactSummary": "Copiar resumen de contactos",
"copyContactSummarySuccess": "Resumen de contactos copiado al portapapeles."
},
"diary": {
"title": "Diario de entrenamiento",
"date": "Fecha",
"noEntries": "No hay entradas",
"deleteDate": "Eliminar fecha",
"createNew": "Crear",
"gallery": "Galería de miembros",
"galleryCreating": "Creando galería…",
"selectTrainingGroup": "Seleccionar grupo de entrenamiento",
"selectTrainingGroupPlaceholder": "Selecciona...",
"suggestion": "Sugerencia",
"nextAppointment": "Próxima cita",
"applySuggestion": "Aplicar sugerencia",
"skipSuggestion": "Continuar sin sugerencia",
"createNewDate": "Crear nueva fecha",
"activeTrainingDay": "Día de entrenamiento activo",
"trainingDaySection": "Día de entrenamiento",
"trainingDayChecklist": "Lista de control final",
"trainingStart": "Inicio del entrenamiento",
"trainingEnd": "Fin del entrenamiento",
"trainingWindow": "Franja de entrenamiento",
"trainingWindowUnset": "Aún no definido",
"groupsLabel": "Grupos",
"groupsSection": "Grupos",
"createDate": "Crear fecha",
"editTrainingTimes": "Editar horarios de entrenamiento",
"updateTimes": "Actualizar horarios",
"groupManagement": "Gestión de grupos",
"createGroups": "Crear grupos",
"trainingPlan": "Plan de entrenamiento",
"planActivitiesCount": "Actividades planificadas",
"timeblocksCount": "Bloques horarios",
"planEmptyState": "Todavía no hay nada registrado en el plan de entrenamiento.",
"planAddHint": "Añade nuevos elementos del plan con las acciones superiores.",
"startTime": "Hora de inicio",
"group": "Grupo...",
"timeblock": "Bloque horario",
"assignParticipants": "Asignar participantes",
"addTimeblock": "Bloque horario",
"activities": "Actividades",
"freeActivities": "Actividades libres",
"noFreeActivitiesYet": "Todavía no se han registrado actividades libres.",
"addActivity": "Añadir actividad",
"bookAccident": "Registrar accidente",
"activity": "Actividad",
"duration": "Duración",
"activityImage": "Imagen de actividad",
"activityDrawing": "Dibujo de actividad",
"today": "Hoy",
"existingGroups": "Grupos existentes",
"leader": "Responsable",
"deleteGroup": "Eliminar grupo",
"numberOfGroups": "Número de grupos",
"addGroup": "Añadir grupo",
"activityOrTimeblock": "Actividad / bloque horario",
"durationMinutes": "Duración (min)",
"addGroupActivity": "Añadir actividad de grupo",
"addGroupButton": "+ Grupo",
"all": "Todos",
"selectGroup": "Seleccionar grupo...",
"activityPlaceholder": "Actividad",
"assignShort": "Asignar",
"statusReadyShort": "Listo",
"statusOpenShort": "Abierto",
"openPlanItemsLabel": "Estado del plan",
"openPlanItems": "{count} abiertos",
"unassignedPlanItems": "{count} abiertos",
"durationExampleLong": "p. ej. 2x7 o 3*5",
"durationExampleShort": "p. ej. 2x7",
"showImage": "Mostrar imagen/dibujo",
"participants": "Participantes",
"searchParticipants": "Buscar participantes",
"filterAll": "Todos",
"filterPresent": "Presente",
"filterAbsent": "Ausente",
"filterTest": "Prueba",
"quickAdd": "+ Añadir rápido",
"selectTags": "Seleccionar etiquetas",
"createDrawing": "Crear dibujo de ejercicio",
"overallActivity": "Actividad global",
"editActivity": "Editar actividad",
"editGroupActivity": "Editar actividad de grupo",
"assignParticipantsForGroupActivity": "Asignar participantes a la actividad de grupo",
"delete": "Eliminar",
"min": "min",
"errorLoadingPredefinedActivities": "Error al cargar las actividades predefinidas",
"selectParticipantAndNote": "Selecciona un participante e introduce una nota.",
"selectGroupAndActivity": "Selecciona un grupo e introduce una actividad.",
"dateCannotBeDeleted": "La fecha no se puede eliminar",
"dateCannotBeDeletedDetails": "Todavía hay contenido (plan, participantes, actividades, accidentes o notas).",
"confirmDelete": "Confirmar eliminación",
"confirmDeleteDate": "¿Deseas eliminar realmente esta fecha?",
"confirmDeleteDateDetails": "También se eliminarán todos los datos asociados.",
"noParticipants": "No hay participantes disponibles para este día de entrenamiento.",
"mustCreateAtLeastTwoGroups": "La primera vez deben crearse al menos 2 grupos.",
"oneGroupAdded": "Se añadió 1 grupo correctamente.",
"groupsCreated": "Se crearon {count} grupos correctamente.",
"errorCreatingGroups": "Error al crear grupos",
"confirmDeleteGroup": "¿Deseas eliminar realmente el grupo \"{name}\"?",
"groupDeletedSuccessfully": "El grupo se eliminó correctamente.",
"errorDeletingGroup": "Error al eliminar el grupo",
"errorCreatingActivity": "Error al crear la actividad",
"trainingPlanAsPDF": "Plan de entrenamiento en PDF",
"trainingPlanPdfShort": "Planificación en PDF",
"trainingDayAsPDF": "Descargar día de entrenamiento como PDF",
"trainingDayAsPDFShort": "Día de entrenamiento en PDF",
"trainingDaySummaryPdfShort": "Resumen de participantes en PDF",
"minutes": "Minutos",
"formHandedOver": "Formulario de afiliación entregado",
"errorOccurred": "Se ha producido un error. Inténtalo de nuevo.",
"trainingTimesUpdated": "Los horarios de entrenamiento se actualizaron correctamente.",
"noActiveTrainingDay": "No se ha seleccionado ningún día de entrenamiento.",
"statusEmpty": "Este día de entrenamiento aún está vacío.",
"statusInProgress": "Este día de entrenamiento está preparado parcialmente.",
"formMarkedAsHandedOver": "Formulario de afiliación marcado como entregado",
"errorMarkingForm": "Error al marcar el formulario",
"dateNoLongerCurrent": "La fecha seleccionada ya no era actual. Inténtalo de nuevo.",
"activityRequired": "Introduce una actividad.",
"activityNotFound": "Actividad no encontrada. Selecciona una de la lista.",
"standardActivities": "Actividades estándar",
"standardDurationShort": "min",
"standardActivityAddError": "No se pudo añadir la actividad estándar.",
"statusReady": "Los horarios y el plan de entrenamiento están definidos.",
"filterExcused": "Justificado",
"participantStatusNone": "Sin estado",
"participantStatusExcused": "Justificado",
"participantStatusCancelled": "Cancelado"
},
"trainingStats": {
"title": "Estadísticas de entrenamiento",
"activeMembers": "Miembros activos",
"averageParticipationCurrentMonth": "Participación media (mes actual)",
"averageParticipationLastMonth": "Participación media (mes anterior)",
"averageParticipationQuarter": "Participación media (trimestre)",
"averageParticipationHalfYear": "Participación media (semestre)",
"averageParticipationYear": "Participación media (año)",
"trainingDays": "Días de entrenamiento (últimos 12 meses)",
"memberParticipations": "Participaciones de los miembros",
"date": "Fecha",
"weekday": "Día de la semana",
"participants": "Participantes",
"name": "Nombre",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "Fecha de nacimiento",
"participations12Months": "Participaciones (12 meses)",
"participations3Months": "Participaciones (3 meses)",
"participationsTotal": "Participaciones (total)",
"lastTraining": "Último entrenamiento",
"actions": "Acciones",
"showDetails": "Mostrar detalles"
},
"courtDrawingTool": {
"title": "Dibujo de ejercicio de tenis de mesa",
"configureExercise": "Configurar ejercicio",
"stepStartPosition": "1. Posición inicial",
"stepStartPositionHint": "¿Desde qué posición de saque comienza el ejercicio?",
"stepFirstStroke": "2. Primer golpe",
"stepFirstStrokeHint": "Define el lado y el efecto de la primera pelota.",
"stepTarget": "3. Objetivo",
"stepTargetHint": "Selecciona la zona objetivo del primer golpe.",
"stepAdditionalStrokes": "4. Golpes siguientes",
"stepAdditionalStrokesHint": "Opcionalmente añade más pelotas como secuencia.",
"noAdditionalStrokes": "Todavía no se han añadido golpes siguientes.",
"service": "Saque:",
"serviceTitle": "Saque",
"forehand": "Derecha",
"backhand": "Revés",
"spin": "Efecto:",
"underspin": "Cortado",
"topspin": "Topspin",
"sidespin": "Efecto lateral",
"sideUnderspin": "Lateral cortado",
"counterSpin": "Contraefecto",
"targetPosition": "Posición objetivo:",
"targetPositionLabel": "Posición objetivo",
"strokeSide": "Lado",
"strokeTypeLabel": "Tipo de golpe",
"addStroke": "Añadir golpe",
"preview": "Vista previa",
"previewHint": "El gráfico aparece en cuanto el primer golpe está completamente configurado.",
"completeFirstStroke": "Completar el primer golpe",
"completeFirstStrokeHint": "Elige posición inicial, lado, efecto y objetivo. Después aparecerá el gráfico.",
"codeLabel": "Código",
"titleLabel": "Título",
"startLeft": "izquierda",
"startMiddle": "centro",
"startRight": "derecha",
"strokeTypePush": "Corto",
"strokeTypeCounter": "Contragolpe",
"strokeTypeTopspin": "Topspin",
"strokeTypeFlip": "Flip",
"strokeTypeBlock": "Bloqueo",
"strokeTypeSmash": "Remate",
"strokeTypeChopDefense": "Defensa cortada",
"strokeTypeLobDefense": "Defensa alta",
"targetForehandLong": "Derecha larga",
"targetMiddleLong": "Centro largo",
"targetBackhandLong": "Revés largo",
"targetForehandHalfLong": "Derecha media-larga",
"targetMiddleHalfLong": "Centro media-larga",
"targetBackhandHalfLong": "Revés media-larga",
"targetForehandShort": "Derecha corta",
"targetMiddleShort": "Centro corto",
"targetBackhandShort": "Revés corto",
"toTarget": "a"
}
}

View File

@@ -22,32 +22,69 @@
"next": "Susunod",
"previous": "Nakaraan",
"submit": "Ipasa",
"reset": "I-reset"
"reset": "I-reset",
"all": "Lahat",
"today": "Ngayon",
"time": "Oras",
"new": "Bago",
"update": "I-update",
"create": "Lumikha",
"remove": "Alisin",
"select": "Pumili",
"download": "I-download",
"choose": "Pumili",
"apply": "Ilapat",
"clear": "Burahin",
"details": "Mga detalye",
"view": "Tingnan",
"name": "Pangalan",
"date": "Petsa",
"status": "Katayuan",
"type": "Uri",
"description": "Paglalarawan",
"active": "Aktibo",
"inactive": "Hindi aktibo",
"enabled": "Pinagana",
"disabled": "Hindi pinagana",
"required": "Kinakailangan",
"optional": "Opsyonal",
"in": "sa",
"min": "Min",
"minutes": "Minuto",
"hours": "Oras",
"days": "Araw",
"weeks": "Linggo",
"months": "Buwan",
"years": "Taon",
"ok": "OK"
},
"navigation": {
"home": "Home",
"members": "Mga miyembro",
"diary": "Talaarawan",
"approvals": "Mga pag-apruba",
"statistics": "Mga istatistika ng pagsasanay",
"statistics": "Istatistika ng pagsasanay",
"tournaments": "Mga paligsahan",
"clubTournaments": "Mga paligsahan ng club",
"tournamentParticipations": "Mga paglahok sa paligsahan",
"schedule": "Mga iskedyul",
"clubSettings": "Mga setting ng club",
"predefinedActivities": "Mga paunang natukoy na aktibidad",
"teamManagement": "Pamamahala ng koponan",
"teamManagement": "Pamamahala ng team",
"permissions": "Mga pahintulot",
"logs": "Mga system log",
"memberTransfer": "Paglipat ng miyembro",
"myTischtennisAccount": "myTischtennis Account",
"clickTtAccount": "HTTV / click-TT Account",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "Mga personal na setting",
"logout": "Mag-logout",
"login": "Mag-login",
"register": "Magrehistro",
"dailyBusiness": "Araw-araw na negosyo",
"competitions": "Mga kompetisyon",
"settings": "Mga setting"
"settings": "Mga setting",
"backToHome": "Bumalik sa home"
},
"club": {
"select": "Pumili ng club",
@@ -56,7 +93,20 @@
"load": "I-load",
"name": "Pangalan ng club",
"create": "Gumawa ng club",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"createTitle": "Gumawa ng club",
"members": "Mga miyembro",
"trainingDiary": "Talaarawan ng pagsasanay",
"noAccess": "Wala ka pang pahintulot na ma-access ang club na ito.",
"requestAccess": "Humiling ng access",
"openRequests": "Mga nakabinbing hiling sa access",
"title": "Klub",
"openAccessRequests": "Mga nakabinbing hiling sa access",
"diary": "Talaarawan ng pagsasanay",
"accessDenied": "Hindi pinapayagan ang access sa club na ito.",
"errorLoadingRequests": "Error sa pag-load ng mga nakabinbing hiling",
"accessRequested": "Naipadala na ang hiling sa access.",
"accessRequestPending": "Humiling ka na ng access sa club na ito. Maghintay lamang.",
"accessRequestFailed": "Hindi naipadala ang hiling sa access."
},
"auth": {
"login": "Mag-login",
@@ -331,6 +381,106 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"title": "Mga kasapi",
"memberInfo": "Impormasyon ng kasapi",
"activeMembers": "Mga aktibong kasapi",
"testMembers": "Mga kasaping pansubok",
"inactiveMembers": "Mga hindi aktibong kasapi",
"generatePhoneList": "Gumawa ng listahan ng telepono",
"onlyActiveMembers": "Tanging mga aktibong miyembro lamang ang ilalabas",
"updateRatings": "I-update ang TTR/QTTR mula sa myTischtennis",
"updating": "Nag-a-update...",
"transferMembers": "Ilipat ang mga miyembro",
"newMember": "Bagong kasapi",
"editMember": "I-edit ang kasapi",
"createNewMember": "Lumikha ng bagong kasapi",
"firstName": "Pangalan",
"lastName": "Apelyido",
"street": "Kalye",
"postalCode": "Postal code",
"city": "Lungsod",
"birthdate": "Petsa ng kapanganakan",
"phones": "Mga numero ng telepono",
"emails": "Mga email address",
"addPhone": "Magdagdag ng numero ng telepono",
"addEmail": "Magdagdag ng email address",
"phoneNumber": "Numero ng telepono",
"emailAddress": "Email address",
"parent": "Magulang",
"parentName": "Pangalan (hal. ina, ama)",
"primary": "Pangunahin",
"gender": "Kasarian",
"genderUnknown": "Hindi alam",
"genderMale": "Lalaki",
"genderFemale": "Babae",
"genderDiverse": "Iba pa",
"picsInInternetAllowed": "Pinapayagan ang larawan sa internet",
"testMembership": "Trial membership",
"memberFormHandedOver": "Naibigay na ang pormularyo ng kasapi",
"trainingGroups": "Mga grupo ng pagsasanay",
"noGroupsAssigned": "Walang grupong nakatalaga",
"noGroupsAvailable": "Walang available na grupo",
"addGroup": "Magdagdag ng grupo...",
"remove": "Alisin",
"image": "Larawan",
"selectFile": "Pumili ng file",
"camera": "Camera",
"imagePreview": "Preview ng larawan ng miyembro",
"change": "Baguhin",
"create": "Lumikha",
"clearFields": "Burahin ang mga field",
"showInactiveMembers": "Ipakita ang mga hindi aktibong miyembro",
"ageGroup": "Pangkat ng edad",
"adults": "Adulto (20+)",
"j19": "J19 (19 pababa)",
"j17": "J17 (17 pababa)",
"j15": "J15 (15 pababa)",
"j13": "J13 (13 pababa)",
"j11": "J11 (11 pababa)",
"clearFilters": "I-reset ang mga filter",
"imageInternet": "Larawan (net?)",
"testMember": "Trial",
"name": "Apelyido, Pangalan",
"ttrQttr": "TTR / QTTR",
"address": "Address",
"active": "Aktibo",
"actions": "Mga aksyon",
"phoneNumberShort": "Telepono",
"emailAddressShort": "Email",
"trainingParticipations": "Paglahok sa pagsasanay",
"memberImage": "Larawan ng kasapi",
"inactive": "hindi aktibo",
"sixOrMoreParticipations": "6 o higit pang paglahok sa pagsasanay",
"threeOrMoreParticipations": "3 o higit pang paglahok sa pagsasanay",
"noTestMembership": "Hindi na trial member",
"formHandedOver": "Naibigay na ang pormularyo ng kasapi",
"deactivateMember": "I-deactivate ang kasapi",
"notes": "Mga tala",
"exercises": "Mga ehersisyo",
"memberImages": "Mga larawan ng miyembro",
"testMembershipRemoved": "Inalis na ang trial membership.",
"errorRemovingTestMembership": "Error sa pag-alis ng trial membership.",
"formMarkedAsHandedOver": "Namarkahan bilang naibigay na ang pormularyo ng kasapi.",
"errorMarkingForm": "Error sa pagmamarka ng form.",
"deactivateMemberTitle": "I-deactivate ang kasapi",
"deactivateMemberConfirm": "Sigurado ka bang ide-deactivate si \"{name}\"?",
"memberDeactivated": "Na-deactivate na ang kasapi",
"errorDeactivatingMember": "Error sa pag-deactivate ng miyembro",
"errorSavingMember": "Error sa pag-save ng miyembro",
"errorAddingToGroup": "Error sa pagdagdag sa grupo",
"errorRemovingFromGroup": "Error sa pag-alis mula sa grupo",
"imageUpdated": "Na-update na ang larawan",
"errorRotatingImage": "Error sa pag-ikot ng larawan",
"imageDeleted": "Nabura na ang larawan.",
"errorDeletingImage": "Hindi mabura ang larawan",
"primaryImageUpdated": "Na-update na ang pangunahing larawan.",
"errorSettingPrimaryImage": "Hindi maitakda ang pangunahing larawan",
"errorUploadingImage": "Hindi ma-upload ang larawan",
"errorLoadingImage": "Error sa pag-load ng larawan",
"phoneList": "ListahanNgTelepono.pdf",
"errorLoadingTrainingParticipations": "Error sa pag-load ng paglahok sa pagsasanay",
"errorUpdatingRatings": "Error sa pag-update ng mga TTR/QTTR value",
"errorTransfer": "Error sa paglipat",
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
@@ -341,11 +491,17 @@
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeActiveDataIncomplete": "Aktibo + hindi kumpleto ang datos",
"scopeDataIncomplete": "Hindi kumpleto ang datos",
"scopeInactive": "Inactive",
"searchAndFilter": "Paghahanap at mga filter",
"bulkActions": "Mga bulk action",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"editorAssignTrainingGroupHint": "Mangyaring magtalaga ng kahit isang grupo ng pagsasanay.",
"editorRecommendedEntry": "Inirerekomendang entry",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
@@ -363,7 +519,7 @@
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"status": "Katayuan",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
@@ -390,17 +546,33 @@
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"ageRange": "Edad mula - hanggang",
"ageFromPlaceholder": "mula",
"ageToPlaceholder": "hanggang",
"age": "Age",
"dataQuality": "Kalidad ng datos",
"dataQualityComplete": "Kumpleto ang datos",
"dataIssueBirthdate": "Kulang ang petsa ng kapanganakan",
"dataIssuePhone": "Kulang ang telepono",
"dataIssueEmail": "Kulang ang email",
"dataIssueAddress": "Kulang ang address",
"dataIssueGender": "Hindi malinaw ang kasarian",
"dataIssueTrainingGroup": "Kulang ang grupo ng pagsasanay",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckDataQuality": "Suriin ang kalidad ng datos",
"taskAssignTrainingGroup": "Magtalaga ng grupo ng pagsasanay",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionReview": "Buksan",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"showTtrHistory": "Ipakita ang TTR history",
"missingTtrHistoryId": "Walang naka-save na myTischtennis ID",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
@@ -422,5 +594,212 @@
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
},
"diary": {
"title": "Talaarawan ng pagsasanay",
"date": "Petsa",
"noEntries": "Walang entry",
"deleteDate": "Burahin ang petsa",
"createNew": "Lumikha ng bago",
"gallery": "Gallery ng mga kasapi",
"galleryCreating": "Ginagawa ang gallery…",
"selectTrainingGroup": "Pumili ng grupo ng pagsasanay",
"selectTrainingGroupPlaceholder": "Mangyaring pumili...",
"suggestion": "Mungkahi",
"nextAppointment": "Susunod na schedule",
"applySuggestion": "Ilapat ang mungkahi",
"skipSuggestion": "Magpatuloy nang walang mungkahi",
"createNewDate": "Lumikha ng bagong petsa",
"activeTrainingDay": "Aktibong araw ng pagsasanay",
"trainingDaySection": "Araw ng pagsasanay",
"trainingDayChecklist": "Checklist ng pagkumpleto",
"trainingStart": "Simula ng pagsasanay",
"trainingEnd": "Pagtatapos ng pagsasanay",
"trainingWindow": "Oras ng pagsasanay",
"trainingWindowUnset": "Hindi pa naitakda",
"groupsLabel": "Mga grupo",
"groupsSection": "Mga grupo",
"createDate": "Lumikha ng petsa",
"editTrainingTimes": "I-edit ang oras ng pagsasanay",
"updateTimes": "I-update ang oras",
"groupManagement": "Pamamahala ng grupo",
"createGroups": "Lumikha ng mga grupo",
"trainingPlan": "Plano ng pagsasanay",
"planActivitiesCount": "Mga aktibidad sa plano",
"timeblocksCount": "Mga time block",
"planEmptyState": "Wala pang nakalagay sa plano ng pagsasanay.",
"planAddHint": "Magdagdag ng bagong item sa plano gamit ang mga aksyon sa itaas.",
"startTime": "Oras ng simula",
"group": "Grupo...",
"timeblock": "Time block",
"assignParticipants": "Magtalaga ng mga kalahok",
"addTimeblock": "Time block",
"activities": "Mga aktibidad",
"freeActivities": "Libreng aktibidad",
"noFreeActivitiesYet": "Wala pang naitalang libreng aktibidad.",
"addActivity": "Magdagdag ng aktibidad",
"bookAccident": "Magtala ng aksidente",
"activity": "Aktibidad",
"duration": "Tagal",
"activityImage": "Larawan ng aktibidad",
"activityDrawing": "Guhit ng aktibidad",
"today": "Ngayon",
"existingGroups": "Mga kasalukuyang grupo",
"leader": "Tagapanguna",
"deleteGroup": "Burahin ang grupo",
"numberOfGroups": "Bilang ng grupo",
"addGroup": "Magdagdag ng grupo",
"activityOrTimeblock": "Aktibidad / time block",
"durationMinutes": "Tagal (min)",
"standardActivities": "Mga karaniwang aktibidad",
"standardDurationShort": "min",
"standardActivityAddError": "Hindi maidagdag ang karaniwang aktibidad.",
"addGroupActivity": "Magdagdag ng aktibidad ng grupo",
"addGroupButton": "+ Grupo",
"all": "Lahat",
"selectGroup": "Pumili ng grupo...",
"activityPlaceholder": "Aktibidad",
"assignShort": "Italaga",
"statusReadyShort": "Handa",
"statusOpenShort": "Bukas",
"openPlanItemsLabel": "Katayuan ng plano",
"openPlanItems": "{count} bukas",
"unassignedPlanItems": "{count} hindi nakatalaga",
"durationExampleLong": "hal. 2x7 o 3*5",
"durationExampleShort": "hal. 2x7",
"showImage": "Ipakita ang larawan/guhit",
"participants": "Mga kalahok",
"searchParticipants": "Maghanap ng kalahok",
"filterAll": "Lahat",
"filterPresent": "Dumalo",
"filterAbsent": "Liban",
"filterExcused": "May paalam",
"filterTest": "Trial",
"participantStatusNone": "Walang katayuan",
"participantStatusExcused": "May paalam",
"participantStatusCancelled": "Kinansela",
"quickAdd": "+ Quick add",
"selectTags": "Pumili ng mga tag",
"createDrawing": "Gumawa ng guhit ng ehersisyo",
"overallActivity": "Kabuuang aktibidad",
"editActivity": "I-edit ang aktibidad",
"editGroupActivity": "I-edit ang aktibidad ng grupo",
"assignParticipantsForGroupActivity": "Magtalaga ng mga kalahok para sa aktibidad ng grupo",
"delete": "Burahin",
"min": "Min",
"errorLoadingPredefinedActivities": "Error sa pag-load ng paunang natukoy na mga aktibidad",
"selectParticipantAndNote": "Mangyaring pumili ng kalahok at maglagay ng tala.",
"selectGroupAndActivity": "Mangyaring pumili ng grupo at maglagay ng aktibidad.",
"dateCannotBeDeleted": "Hindi mabubura ang petsa",
"dateCannotBeDeletedDetails": "May laman pa (plano ng pagsasanay, mga kalahok, aktibidad, aksidente o mga tala).",
"confirmDelete": "Kumpirmahin ang pagbura",
"confirmDeleteDate": "Sigurado ka bang buburahin ang petsang ito?",
"confirmDeleteDateDetails": "Mabubura rin ang lahat ng kaugnay na datos.",
"noParticipants": "Walang kalahok para sa araw ng pagsasanay na ito.",
"mustCreateAtLeastTwoGroups": "Sa unang paggawa, kailangan ng hindi bababa sa 2 grupo!",
"oneGroupAdded": "Matagumpay na naidagdag ang 1 grupo!",
"groupsCreated": "Matagumpay na nalikha ang {count} grupo!",
"errorCreatingGroups": "Error sa paggawa ng mga grupo",
"confirmDeleteGroup": "Sigurado ka bang buburahin ang grupong \"{name}\"?",
"groupDeletedSuccessfully": "Matagumpay na nabura ang grupo!",
"errorDeletingGroup": "Error sa pagbura ng grupo",
"errorCreatingActivity": "Error sa paggawa ng aktibidad",
"trainingPlanAsPDF": "Plano ng pagsasanay bilang PDF",
"trainingPlanPdfShort": "Flow plan bilang PDF",
"trainingDayAsPDF": "I-download ang araw ng pagsasanay bilang PDF",
"trainingDayAsPDFShort": "Araw ng pagsasanay PDF",
"trainingDaySummaryPdfShort": "Buod ng kalahok bilang PDF",
"minutes": "Minuto",
"formHandedOver": "Naibigay na ang pormularyo ng kasapi",
"errorOccurred": "May naganap na error. Pakisubukang muli.",
"trainingTimesUpdated": "Matagumpay na na-update ang oras ng pagsasanay.",
"noActiveTrainingDay": "Walang napiling araw ng pagsasanay.",
"statusReady": "Naayos na ang oras at plano ng pagsasanay.",
"statusEmpty": "Wala pang laman ang araw ng pagsasanay na ito.",
"statusInProgress": "Bahagyang naihanda ang araw ng pagsasanay na ito.",
"formMarkedAsHandedOver": "Namarkahan bilang naibigay na ang pormularyo ng kasapi",
"errorMarkingForm": "Error sa pagmamarka ng pormularyo ng kasapi",
"dateNoLongerCurrent": "Hindi na kasalukuyan ang napiling petsa. Pakisubukan muli.",
"activityRequired": "Mangyaring maglagay ng aktibidad.",
"activityNotFound": "Hindi nahanap ang aktibidad. Mangyaring pumili mula sa listahan."
},
"trainingStats": {
"title": "Mga istatistika ng pagsasanay",
"activeMembers": "Mga aktibong miyembro",
"averageParticipationCurrentMonth": "Karaniwang paglahok (kasalukuyang buwan)",
"averageParticipationLastMonth": "Karaniwang paglahok (nakaraang buwan)",
"averageParticipationQuarter": "Karaniwang paglahok (quarter)",
"averageParticipationHalfYear": "Karaniwang paglahok (kalahating taon)",
"averageParticipationYear": "Karaniwang paglahok (taon)",
"trainingDays": "Mga araw ng pagsasanay (huling 12 buwan)",
"memberParticipations": "Paglahok ng miyembro",
"date": "Petsa",
"weekday": "Araw ng linggo",
"participants": "Mga kalahok",
"name": "Pangalan",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "Petsa ng kapanganakan",
"participations12Months": "Paglahok (12 buwan)",
"participations3Months": "Paglahok (3 buwan)",
"participationsTotal": "Paglahok (kabuuan)",
"lastTraining": "Huling pagsasanay",
"actions": "Mga aksyon",
"showDetails": "Ipakita ang mga detalye"
},
"courtDrawingTool": {
"title": "Guhit ng ehersisyo sa table tennis",
"configureExercise": "I-configure ang ehersisyo",
"stepStartPosition": "1. Panimulang posisyon",
"stepStartPositionHint": "Saang posisyon ng serve magsisimula ang ehersisyo?",
"stepFirstStroke": "2. Unang palo",
"stepFirstStrokeHint": "Itakda ang side at spin para sa unang bola.",
"stepTarget": "3. Target",
"stepTargetHint": "Pumili ng target zone para sa unang palo.",
"stepAdditionalStrokes": "4. Mga kasunod na palo",
"stepAdditionalStrokesHint": "Opsyonal na magdagdag pa ng mga bola bilang listahan.",
"noAdditionalStrokes": "Wala pang mga kasunod na palo.",
"service": "Serve:",
"serviceTitle": "Serve",
"forehand": "Forehand",
"backhand": "Backhand",
"spin": "Spin:",
"underspin": "Underspin",
"topspin": "Topspin",
"sidespin": "Sidespin",
"sideUnderspin": "Side underspin",
"counterSpin": "Counter spin",
"targetPosition": "Posisyon ng target:",
"targetPositionLabel": "Posisyon ng target",
"strokeSide": "Side",
"strokeTypeLabel": "Uri ng palo",
"addStroke": "Magdagdag ng palo",
"preview": "Preview",
"previewHint": "Lilitaw ang graphic kapag kumpleto na ang unang palo.",
"completeFirstStroke": "Tapusin ang unang palo",
"completeFirstStrokeHint": "Piliin ang panimulang posisyon, side, spin at target. Pagkatapos ay lalabas ang graphic.",
"codeLabel": "Code",
"titleLabel": "Pamagat",
"startLeft": "kaliwa",
"startMiddle": "gitna",
"startRight": "kanan",
"strokeTypePush": "Push",
"strokeTypeCounter": "Counter",
"strokeTypeTopspin": "Topspin",
"strokeTypeFlip": "Flip",
"strokeTypeBlock": "Block",
"strokeTypeSmash": "Smash",
"strokeTypeChopDefense": "Chop defense",
"strokeTypeLobDefense": "Lob defense",
"targetForehandLong": "forehand long",
"targetMiddleLong": "middle long",
"targetBackhandLong": "backhand long",
"targetForehandHalfLong": "forehand half-long",
"targetMiddleHalfLong": "middle half-long",
"targetBackhandHalfLong": "backhand half-long",
"targetForehandShort": "forehand short",
"targetMiddleShort": "middle short",
"targetBackhandShort": "backhand short",
"toTarget": "papunta sa"
}
}

View File

@@ -21,8 +21,42 @@
"back": "Retour",
"next": "Suivant",
"previous": "Précédent",
"submit": "Soumettre",
"reset": "Réinitialiser"
"submit": "Valider",
"reset": "Réinitialiser",
"all": "Tous",
"today": "Aujourd'hui",
"time": "Heure",
"new": "Nouveau",
"update": "Mettre à jour",
"create": "Créer",
"remove": "Retirer",
"select": "Sélectionner",
"download": "Télécharger",
"choose": "Choisir",
"apply": "Appliquer",
"clear": "Effacer",
"details": "Détails",
"view": "Afficher",
"name": "Nom",
"date": "Date",
"status": "Statut",
"type": "Type",
"description": "Description",
"active": "Actif",
"inactive": "Inactif",
"enabled": "Activé",
"disabled": "Désactivé",
"required": "Obligatoire",
"optional": "Optionnel",
"in": "dans",
"min": "min",
"minutes": "minutes",
"hours": "heures",
"days": "jours",
"weeks": "semaines",
"months": "mois",
"years": "années",
"ok": "OK"
},
"navigation": {
"home": "Accueil",
@@ -39,15 +73,18 @@
"teamManagement": "Gestion d'équipe",
"permissions": "Autorisations",
"logs": "Journaux système",
"memberTransfer": "Transfert de membre",
"memberTransfer": "Transfert de membres",
"myTischtennisAccount": "Compte myTischtennis",
"clickTtAccount": "Compte HTTV / click-TT",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "Paramètres personnels",
"logout": "Déconnexion",
"login": "Connexion",
"register": "S'inscrire",
"dailyBusiness": "Affaires quotidiennes",
"dailyBusiness": "Gestion quotidienne",
"competitions": "Compétitions",
"settings": "Paramètres"
"settings": "Paramètres",
"backToHome": "Retour à l'accueil"
},
"club": {
"select": "Sélectionner un club",
@@ -56,7 +93,20 @@
"load": "Charger",
"name": "Nom du club",
"create": "Créer un club",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"createTitle": "Créer un club",
"members": "Membres",
"trainingDiary": "Journal d'entraînement",
"noAccess": "Vous n'avez pas encore accès à ce club.",
"requestAccess": "Demander l'accès",
"openRequests": "Demandes d'accès ouvertes",
"title": "Club",
"openAccessRequests": "Demandes d'accès ouvertes",
"diary": "Journal d'entraînement",
"accessDenied": "Accès au club refusé.",
"errorLoadingRequests": "Erreur lors du chargement des demandes ouvertes",
"accessRequested": "L'accès a été demandé.",
"accessRequestPending": "L'accès à ce club a été demandé. Veuillez patienter.",
"accessRequestFailed": "La demande d'accès n'a pas pu être envoyée."
},
"auth": {
"login": "Connexion",
@@ -331,96 +381,425 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"title": "Membres",
"memberInfo": "Informations membre",
"activeMembers": "Membres actifs",
"testMembers": "Membres à l'essai",
"inactiveMembers": "Membres inactifs",
"generatePhoneList": "Générer la liste téléphonique",
"onlyActiveMembers": "Seuls les membres actifs sont inclus",
"updateRatings": "Mettre à jour TTR/QTTR depuis myTischtennis",
"updating": "Mise à jour...",
"transferMembers": "Transférer des membres",
"newMember": "Nouveau membre",
"editMember": "Modifier le membre",
"createNewMember": "Créer un nouveau membre",
"firstName": "Prénom",
"lastName": "Nom",
"street": "Rue",
"postalCode": "Code postal",
"city": "Ville",
"birthdate": "Date de naissance",
"phones": "Numéros de téléphone",
"emails": "Adresses e-mail",
"addPhone": "Ajouter un numéro",
"addEmail": "Ajouter une adresse e-mail",
"phoneNumber": "Numéro de téléphone",
"emailAddress": "Adresse e-mail",
"parent": "Parent",
"parentName": "Nom (p. ex. mère, père)",
"primary": "Principal",
"gender": "Sexe",
"genderUnknown": "Inconnu",
"genderMale": "Masculin",
"genderFemale": "Féminin",
"genderDiverse": "Divers",
"picsInInternetAllowed": "Photos autorisées en ligne",
"testMembership": "Adhésion d'essai",
"memberFormHandedOver": "Formulaire d'adhésion remis",
"trainingGroups": "Groupes d'entraînement",
"noGroupsAssigned": "Aucun groupe attribué",
"noGroupsAvailable": "Aucun groupe disponible",
"addGroup": "Ajouter un groupe...",
"remove": "Retirer",
"image": "Image",
"selectFile": "Choisir un fichier",
"camera": "Caméra",
"imagePreview": "Aperçu de l'image du membre",
"change": "Modifier",
"create": "Créer",
"clearFields": "Vider les champs",
"showInactiveMembers": "Afficher les membres inactifs",
"ageGroup": "Catégorie d'âge",
"adults": "Adultes (20+)",
"j19": "U19 (19 ans et moins)",
"j17": "U17 (17 ans et moins)",
"j15": "U15 (15 ans et moins)",
"j13": "U13 (13 ans et moins)",
"j11": "U11 (11 ans et moins)",
"clearFilters": "Réinitialiser les filtres",
"imageInternet": "Image (web ?)",
"testMember": "Essai",
"name": "Nom, prénom",
"ttrQttr": "TTR / QTTR",
"address": "Adresse",
"active": "Actif",
"actions": "Actions",
"phoneNumberShort": "Tél.",
"emailAddressShort": "E-mail",
"trainingParticipations": "Participations à l'entraînement",
"memberImage": "Photo du membre",
"inactive": "inactif",
"sixOrMoreParticipations": "6 participations ou plus à l'entraînement",
"threeOrMoreParticipations": "3 participations ou plus à l'entraînement",
"noTestMembership": "N'est plus membre à l'essai",
"formHandedOver": "Formulaire d'adhésion remis",
"deactivateMember": "Désactiver le membre",
"notes": "Notes",
"exercises": "Exercices",
"memberImages": "Images du membre",
"testMembershipRemoved": "L'adhésion d'essai a été supprimée.",
"errorRemovingTestMembership": "Erreur lors de la suppression de l'adhésion d'essai.",
"formMarkedAsHandedOver": "Le formulaire d'adhésion a été marqué comme remis.",
"errorMarkingForm": "Erreur lors du marquage du formulaire.",
"deactivateMemberTitle": "Désactiver le membre",
"deactivateMemberConfirm": "Voulez-vous vraiment désactiver \"{name}\" ?",
"memberDeactivated": "Membre désactivé",
"errorDeactivatingMember": "Erreur lors de la désactivation du membre",
"errorSavingMember": "Erreur lors de l'enregistrement du membre",
"errorAddingToGroup": "Erreur lors de l'ajout au groupe",
"errorRemovingFromGroup": "Erreur lors du retrait du groupe",
"imageUpdated": "Image mise à jour",
"errorRotatingImage": "Erreur lors de la rotation de l'image",
"imageDeleted": "L'image a été supprimée.",
"errorDeletingImage": "L'image n'a pas pu être supprimée",
"primaryImageUpdated": "Image principale mise à jour.",
"errorSettingPrimaryImage": "L'image principale n'a pas pu être définie",
"errorUploadingImage": "L'image n'a pas pu être téléversée",
"errorLoadingImage": "Erreur lors du chargement de l'image",
"phoneList": "liste-telephonique.pdf",
"errorLoadingTrainingParticipations": "Erreur lors du chargement des participations",
"errorUpdatingRatings": "Erreur lors de la mise à jour des valeurs TTR/QTTR",
"errorTransfer": "Erreur lors du transfert",
"subtitle": "Rechercher, filtrer et modifier les membres directement.",
"closeEditor": "Fermer l'éditeur",
"visibleMembers": "Membres visibles",
"search": "Rechercher",
"searchPlaceholder": "Rechercher par nom, ville, téléphone ou e-mail",
"memberScope": "Périmètre des membres",
"scopeAll": "Tous",
"scopeActive": "Actifs",
"scopeTest": "Essai",
"scopeNeedsForm": "Formulaire non vérifié",
"scopeDataIncomplete": "Données incomplètes",
"scopeInactive": "Inactifs",
"scopeActiveDataIncomplete": "Actif + données incomplètes",
"searchAndFilter": "Recherche et filtres",
"bulkActions": "Actions groupées",
"resultsVisible": "membres visibles",
"editHint": "Un clic sur une ligne ouvre léditeur.",
"editorCreateHint": "Créer un nouveau membre et saisir directement ses coordonnées.",
"editorEditHint": "Modifier les données de {name}.",
"editorAssignTrainingGroupHint": "Veuillez attribuer au moins un groupe d'entraînement.",
"editorRecommendedEntry": "Entrée recommandée",
"transferSuccessTitle": "Transfert réussi",
"transferErrorTitle": "Erreur de transfert",
"clickTtRequestPending": "Demande Click-TT en cours",
"clickTtRequestAction": "Demander l'autorisation Click-TT",
"clickTtRequestTitle": "Lancer une demande Click-TT",
"clickTtRequestConfirm": "Faut-il lancer la demande Click-TT automatisée pour {name} ?",
"clickTtRequestHint": "La demande est traitée automatiquement par le workflow Click-TT du backend.",
"clickTtRequestSuccess": "Veuillez encore vous connecter à click-tt et envoyer la demande.",
"clickTtRequestError": "La demande Click-TT n'a pas pu être envoyée.",
"clickTtRequestFailedLog": "Échec de la demande Click-TT",
"deleteImageTitle": "Supprimer l'image",
"deleteImageConfirm": "Voulez-vous vraiment supprimer cette image ?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"loadingMembers": "Chargement des membres...",
"errorLoadingMembers": "Échec du chargement de la liste des membres.",
"scopeNotTraining": "Ne s'entraîne plus",
"notInTrainingTooltip": "Aucune participation depuis {weeks} semaines dentraînement",
"status": "Statut",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"noPhoneShort": "Pas de téléphone",
"noEmailShort": "Pas de-mail",
"noAddressShort": "Pas dadresse",
"clickTtSubmitted": "Click-TT envoyé",
"markRegular": "Marquer comme régulier",
"markFormReceived": "Marquer le formulaire comme vérifié",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
"clickTtRequestPendingShort": "En cours...",
"memberDetails": "Détails du membre",
"previewLastTraining": "Dernier entraînement",
"previewNoLastTraining": "Aucune participation pour le moment",
"phoneListForSelection": "Liste téléphonique pour la sélection",
"markFormsForSelection": "Vérifier les formulaires de la sélection",
"markRegularForSelection": "Marquer la sélection comme régulière",
"phoneListSelectionFile": "liste-telephonique-selection.pdf",
"batchFormsMarkedSuccess": "{count} formulaire(s) marqué(s) comme vérifié(s).",
"batchFormsMarkedEmpty": "Aucun formulaire non vérifié dans la sélection actuelle.",
"batchMarkedRegularSuccess": "{count} membre(s) à lessai marqué(s) comme réguliers.",
"batchMarkedRegularEmpty": "Aucun membre à lessai dans la sélection actuelle.",
"batchPartialFailure": "{success} réussis, {failed} échoués.",
"sortBy": "Trier par",
"sortLastName": "Nom",
"sortFirstName": "Prénom",
"sortBirthday": "Date de naissance",
"sortAge": "Âge",
"ageRange": "Âge de - à",
"ageFromPlaceholder": "de",
"ageToPlaceholder": ",
"age": "Âge",
"dataQuality": "Qualité des données",
"dataQualityComplete": "Données complètes",
"dataIssueBirthdate": "Date de naissance manquante",
"dataIssuePhone": "Téléphone manquant",
"dataIssueEmail": "E-mail manquant",
"dataIssueAddress": "Adresse manquante",
"dataIssueGender": "Sexe non défini",
"dataIssueTrainingGroup": "Groupe d'entraînement manquant",
"openTasks": "Tâches ouvertes",
"noOpenTasks": "Aucune tâche ouverte",
"taskVerifyForm": "Vérifier le formulaire",
"taskReviewTrialStatus": "Vérifier le statut d'essai",
"taskCheckTrainingStatus": "Vérifier le statut d'entraînement",
"taskCheckDataQuality": "Vérifier la qualité des données",
"taskAssignTrainingGroup": "Attribuer un groupe d'entraînement",
"taskCheckClickTt": "Vérifier l'autorisation Click-TT",
"taskActionVerify": "Vérifier",
"taskActionMarkRegular": "Marquer régulier",
"taskActionReview": "Ouvrir",
"taskActionRequest": "Demander",
"toggleSortDirection": "Changer le sens du tri",
"showTtrHistory": "Afficher lhistorique TTR",
"missingTtrHistoryId": "Aucun identifiant myTischtennis enregistré",
"sortLastTraining": "Dernier entraînement",
"sortOpenTasks": "Tâches ouvertes",
"exportPreview": "Aperçu de l'export",
"exportMembersSelected": "membres actuellement sélectionnés",
"exportPhones": "Téléphone",
"exportReachableByPhone": "avec numéro de téléphone",
"exportEmails": "E-mail",
"exportReachableByEmail": "avec adresse e-mail",
"exportPreviewNames": "Aperçu",
"exportPreviewEmpty": "Aucun membre dans la sélection actuelle",
"exportCsv": "Exporter en CSV",
"exportCsvFile": "selection-membres.csv",
"copyPhones": "Copier les téléphones",
"copyEmails": "Copier les e-mails",
"copyPhonesSuccess": "Liste téléphonique copiée dans le presse-papiers.",
"copyPhonesEmpty": "Aucun numéro de téléphone dans la sélection actuelle.",
"copyEmailsSuccess": "Liste e-mail copiée dans le presse-papiers.",
"copyEmailsEmpty": "Aucune adresse e-mail dans la sélection actuelle.",
"composeEmail": "Préparer un e-mail",
"copyContactSummary": "Copier le résumé des contacts",
"copyContactSummarySuccess": "Résumé des contacts copié dans le presse-papiers."
},
"diary": {
"title": "Journal d'entraînement",
"date": "Date",
"noEntries": "Aucune entrée",
"deleteDate": "Supprimer la date",
"createNew": "Créer",
"gallery": "Galerie des membres",
"galleryCreating": "Création de la galerie…",
"selectTrainingGroup": "Sélectionner un groupe d'entraînement",
"selectTrainingGroupPlaceholder": "Veuillez choisir...",
"suggestion": "Suggestion",
"nextAppointment": "Prochain rendez-vous",
"applySuggestion": "Appliquer la suggestion",
"skipSuggestion": "Continuer sans suggestion",
"createNewDate": "Créer une nouvelle date",
"activeTrainingDay": "Jour d'entraînement actif",
"trainingDaySection": "Jour d'entraînement",
"trainingDayChecklist": "Liste de contrôle finale",
"trainingStart": "Début de l'entraînement",
"trainingEnd": "Fin de l'entraînement",
"trainingWindow": "Plage d'entraînement",
"trainingWindowUnset": "Pas encore défini",
"groupsLabel": "Groupes",
"groupsSection": "Groupes",
"createDate": "Créer la date",
"editTrainingTimes": "Modifier les horaires d'entraînement",
"updateTimes": "Mettre à jour les horaires",
"groupManagement": "Gestion des groupes",
"createGroups": "Créer des groupes",
"trainingPlan": "Plan d'entraînement",
"planActivitiesCount": "Activités planifiées",
"timeblocksCount": "Blocs horaires",
"planEmptyState": "Aucun élément n'a encore été saisi dans le plan d'entraînement.",
"planAddHint": "Ajoutez de nouveaux éléments du plan avec les actions ci-dessus.",
"startTime": "Heure de début",
"group": "Groupe...",
"timeblock": "Bloc horaire",
"assignParticipants": "Attribuer des participants",
"addTimeblock": "Bloc horaire",
"activities": "Activités",
"freeActivities": "Activités libres",
"noFreeActivitiesYet": "Aucune activité libre n'a encore été enregistrée.",
"addActivity": "Ajouter une activité",
"bookAccident": "Enregistrer un accident",
"activity": "Activité",
"duration": "Durée",
"activityImage": "Image d'activité",
"activityDrawing": "Schéma d'activité",
"today": "Aujourd'hui",
"existingGroups": "Groupes existants",
"leader": "Responsable",
"deleteGroup": "Supprimer le groupe",
"numberOfGroups": "Nombre de groupes",
"addGroup": "Ajouter un groupe",
"activityOrTimeblock": "Activité / bloc horaire",
"durationMinutes": "Durée (min)",
"addGroupActivity": "Ajouter une activité de groupe",
"addGroupButton": "+ Groupe",
"all": "Tous",
"selectGroup": "Sélectionner un groupe...",
"activityPlaceholder": "Activité",
"assignShort": "Attribuer",
"statusReadyShort": "Prêt",
"statusOpenShort": "Ouvert",
"openPlanItemsLabel": "Statut du plan",
"openPlanItems": "{count} ouvert(s)",
"unassignedPlanItems": "{count} ouvert(s)",
"durationExampleLong": "p. ex. 2x7 ou 3*5",
"durationExampleShort": "p. ex. 2x7",
"showImage": "Afficher image/schéma",
"participants": "Participants",
"searchParticipants": "Rechercher des participants",
"filterAll": "Tous",
"filterPresent": "Présent",
"filterAbsent": "Absent",
"filterTest": "Essai",
"quickAdd": "+ Ajout rapide",
"selectTags": "Sélectionner des tags",
"createDrawing": "Créer un schéma d'exercice",
"overallActivity": "Activité globale",
"editActivity": "Modifier l'activité",
"editGroupActivity": "Modifier l'activité de groupe",
"assignParticipantsForGroupActivity": "Attribuer des participants à l'activité de groupe",
"delete": "Supprimer",
"min": "min",
"errorLoadingPredefinedActivities": "Erreur lors du chargement des activités prédéfinies",
"selectParticipantAndNote": "Veuillez sélectionner un participant et saisir une note.",
"selectGroupAndActivity": "Veuillez sélectionner un groupe et saisir une activité.",
"dateCannotBeDeleted": "La date ne peut pas être supprimée",
"dateCannotBeDeletedDetails": "Du contenu existe encore (plan, participants, activités, accidents ou notes).",
"confirmDelete": "Confirmer la suppression",
"confirmDeleteDate": "Voulez-vous vraiment supprimer cette date ?",
"confirmDeleteDateDetails": "Toutes les données associées seront également supprimées.",
"noParticipants": "Aucun participant disponible pour ce jour d'entraînement.",
"mustCreateAtLeastTwoGroups": "Il faut créer au moins 2 groupes la première fois.",
"oneGroupAdded": "1 groupe a été ajouté avec succès.",
"groupsCreated": "{count} groupes ont été créés avec succès.",
"errorCreatingGroups": "Erreur lors de la création des groupes",
"confirmDeleteGroup": "Voulez-vous vraiment supprimer le groupe \"{name}\" ?",
"groupDeletedSuccessfully": "Le groupe a été supprimé avec succès.",
"errorDeletingGroup": "Erreur lors de la suppression du groupe",
"errorCreatingActivity": "Erreur lors de la création de l'activité",
"trainingPlanAsPDF": "Plan d'entraînement en PDF",
"trainingPlanPdfShort": "Planning en PDF",
"trainingDayAsPDF": "Télécharger le jour d'entraînement en PDF",
"trainingDayAsPDFShort": "Jour d'entraînement en PDF",
"trainingDaySummaryPdfShort": "Résumé des participants en PDF",
"minutes": "Minutes",
"formHandedOver": "Formulaire d'adhésion remis",
"errorOccurred": "Une erreur est survenue. Veuillez réessayer.",
"trainingTimesUpdated": "Horaires d'entraînement mis à jour avec succès.",
"noActiveTrainingDay": "Aucun jour d'entraînement sélectionné.",
"statusEmpty": "Ce jour d'entraînement est encore vide.",
"statusInProgress": "Ce jour d'entraînement est partiellement préparé.",
"formMarkedAsHandedOver": "Formulaire d'adhésion marqué comme remis",
"errorMarkingForm": "Erreur lors du marquage du formulaire",
"dateNoLongerCurrent": "La date sélectionnée n'était plus actuelle. Veuillez réessayer.",
"activityRequired": "Veuillez saisir une activité.",
"activityNotFound": "Activité introuvable. Veuillez en choisir une dans la liste.",
"standardActivities": "Activités standard",
"standardDurationShort": "min",
"standardActivityAddError": "L'activité standard n'a pas pu être ajoutée.",
"statusReady": "Les horaires et le plan d'entraînement sont définis.",
"filterExcused": "Excusé",
"participantStatusNone": "Aucun statut",
"participantStatusExcused": "Excusé",
"participantStatusCancelled": "Annulé"
},
"trainingStats": {
"title": "Statistiques d'entraînement",
"activeMembers": "Membres actifs",
"averageParticipationCurrentMonth": "Participation moyenne (mois en cours)",
"averageParticipationLastMonth": "Participation moyenne (mois précédent)",
"averageParticipationQuarter": "Participation moyenne (trimestre)",
"averageParticipationHalfYear": "Participation moyenne (semestre)",
"averageParticipationYear": "Participation moyenne (année)",
"trainingDays": "Jours d'entraînement (12 derniers mois)",
"memberParticipations": "Participations des membres",
"date": "Date",
"weekday": "Jour de semaine",
"participants": "Participants",
"name": "Nom",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "Date de naissance",
"participations12Months": "Participations (12 mois)",
"participations3Months": "Participations (3 mois)",
"participationsTotal": "Participations (total)",
"lastTraining": "Dernier entraînement",
"actions": "Actions",
"showDetails": "Afficher les détails"
},
"courtDrawingTool": {
"title": "Schéma d'exercice de tennis de table",
"configureExercise": "Configurer l'exercice",
"stepStartPosition": "1. Position de départ",
"stepStartPositionHint": "Depuis quelle position de service l'exercice commence-t-il ?",
"stepFirstStroke": "2. Premier coup",
"stepFirstStrokeHint": "Définir le côté et la rotation du premier ballon.",
"stepTarget": "3. Cible",
"stepTargetHint": "Choisir la zone cible pour le premier coup.",
"stepAdditionalStrokes": "4. Coups suivants",
"stepAdditionalStrokesHint": "Ajouter si besoin dautres balles sous forme de séquence.",
"noAdditionalStrokes": "Aucun coup suivant ajouté pour le moment.",
"service": "Service :",
"serviceTitle": "Service",
"forehand": "Coup droit",
"backhand": "Revers",
"spin": "Effet :",
"underspin": "Coupe",
"topspin": "Topspin",
"sidespin": "Effet latéral",
"sideUnderspin": "Latéral coupé",
"counterSpin": "Contre-effet",
"targetPosition": "Position cible :",
"targetPositionLabel": "Position cible",
"strokeSide": "Côté",
"strokeTypeLabel": "Type de coup",
"addStroke": "Ajouter un coup",
"preview": "Aperçu",
"previewHint": "Le schéma apparaît dès que le premier coup est entièrement configuré.",
"completeFirstStroke": "Compléter le premier coup",
"completeFirstStrokeHint": "Choisissez la position de départ, le côté, leffet et la cible. Le schéma apparaîtra ensuite.",
"codeLabel": "Code",
"titleLabel": "Titre",
"startLeft": "gauche",
"startMiddle": "centre",
"startRight": "droite",
"strokeTypePush": "Poussette",
"strokeTypeCounter": "Contre",
"strokeTypeTopspin": "Topspin",
"strokeTypeFlip": "Flip",
"strokeTypeBlock": "Bloc",
"strokeTypeSmash": "Frappe",
"strokeTypeChopDefense": "Défense coupée",
"strokeTypeLobDefense": "Défense lobée",
"targetForehandLong": "Coup droit long",
"targetMiddleLong": "Milieu long",
"targetBackhandLong": "Revers long",
"targetForehandHalfLong": "Coup droit mi-long",
"targetMiddleHalfLong": "Milieu mi-long",
"targetBackhandHalfLong": "Revers mi-long",
"targetForehandShort": "Coup droit court",
"targetMiddleShort": "Milieu court",
"targetBackhandShort": "Revers court",
"toTarget": "vers"
}
}

View File

@@ -22,7 +22,41 @@
"next": "Avanti",
"previous": "Precedente",
"submit": "Invia",
"reset": "Reimposta"
"reset": "Reimposta",
"all": "Tutti",
"today": "Oggi",
"time": "Ora",
"new": "Nuovo",
"update": "Aggiorna",
"create": "Crea",
"remove": "Rimuovi",
"select": "Seleziona",
"download": "Scarica",
"choose": "Scegli",
"apply": "Applica",
"clear": "Cancella",
"details": "Dettagli",
"view": "Visualizza",
"name": "Nome",
"date": "Data",
"status": "Stato",
"type": "Tipo",
"description": "Descrizione",
"active": "Attivo",
"inactive": "Inattivo",
"enabled": "Abilitato",
"disabled": "Disabilitato",
"required": "Obbligatorio",
"optional": "Opzionale",
"in": "in",
"min": "min",
"minutes": "minuti",
"hours": "ore",
"days": "giorni",
"weeks": "settimane",
"months": "mesi",
"years": "anni",
"ok": "OK"
},
"navigation": {
"home": "Home",
@@ -34,29 +68,45 @@
"clubTournaments": "Tornei del club",
"tournamentParticipations": "Partecipazioni ai tornei",
"schedule": "Calendari",
"clubSettings": "Impostazioni club",
"clubSettings": "Impostazioni del club",
"predefinedActivities": "Attività predefinite",
"teamManagement": "Gestione squadra",
"teamManagement": "Gestione squadre",
"permissions": "Permessi",
"logs": "Log di sistema",
"memberTransfer": "Trasferimento membri",
"myTischtennisAccount": "Account myTischtennis",
"clickTtAccount": "Account HTTV / click-TT",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "Impostazioni personali",
"logout": "Esci",
"logout": "Disconnetti",
"login": "Accedi",
"register": "Registrati",
"dailyBusiness": "Attività quotidiane",
"dailyBusiness": "Gestione quotidiana",
"competitions": "Competizioni",
"settings": "Impostazioni"
"settings": "Impostazioni",
"backToHome": "Torna alla home"
},
"club": {
"select": "Seleziona club",
"selectPlaceholder": "Scegli club...",
"selectPlaceholder": "Scegli un club...",
"new": "Nuovo club",
"load": "Carica",
"name": "Nome club",
"name": "Nome del club",
"create": "Crea club",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"createTitle": "Crea club",
"members": "Membri",
"trainingDiary": "Diario di allenamento",
"noAccess": "Non hai ancora accesso a questo club.",
"requestAccess": "Richiedi accesso",
"openRequests": "Richieste di accesso aperte",
"title": "Club",
"openAccessRequests": "Richieste di accesso aperte",
"diary": "Diario di allenamento",
"accessDenied": "Accesso al club negato.",
"errorLoadingRequests": "Errore durante il caricamento delle richieste aperte",
"accessRequested": "Accesso richiesto.",
"accessRequestPending": "Laccesso a questo club è stato richiesto. Attendere prego.",
"accessRequestFailed": "Impossibile inviare la richiesta di accesso."
},
"auth": {
"login": "Accedi",
@@ -331,96 +381,425 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"title": "Membri",
"memberInfo": "Informazioni membro",
"activeMembers": "Membri attivi",
"testMembers": "Membri in prova",
"inactiveMembers": "Membri inattivi",
"generatePhoneList": "Genera elenco telefonico",
"onlyActiveMembers": "Sono inclusi solo i membri attivi",
"updateRatings": "Aggiorna TTR/QTTR da myTischtennis",
"updating": "Aggiornamento in corso...",
"transferMembers": "Trasferisci membri",
"newMember": "Nuovo membro",
"editMember": "Modifica membro",
"createNewMember": "Crea nuovo membro",
"firstName": "Nome",
"lastName": "Cognome",
"street": "Via",
"postalCode": "CAP",
"city": "Città",
"birthdate": "Data di nascita",
"phones": "Numeri di telefono",
"emails": "Indirizzi e-mail",
"addPhone": "Aggiungi numero di telefono",
"addEmail": "Aggiungi indirizzo e-mail",
"phoneNumber": "Numero di telefono",
"emailAddress": "Indirizzo e-mail",
"parent": "Genitore",
"parentName": "Nome (es. madre, padre)",
"primary": "Principale",
"gender": "Genere",
"genderUnknown": "Sconosciuto",
"genderMale": "Maschile",
"genderFemale": "Femminile",
"genderDiverse": "Diverso",
"picsInInternetAllowed": "Foto consentite online",
"testMembership": "Iscrizione di prova",
"memberFormHandedOver": "Modulo di iscrizione consegnato",
"trainingGroups": "Gruppi di allenamento",
"noGroupsAssigned": "Nessun gruppo assegnato",
"noGroupsAvailable": "Nessun gruppo disponibile",
"addGroup": "Aggiungi gruppo...",
"remove": "Rimuovi",
"image": "Immagine",
"selectFile": "Seleziona file",
"camera": "Fotocamera",
"imagePreview": "Anteprima immagine membro",
"change": "Modifica",
"create": "Crea",
"clearFields": "Svuota campi",
"showInactiveMembers": "Mostra membri inattivi",
"ageGroup": "Fascia detà",
"adults": "Adulti (20+)",
"j19": "U19 (19 anni o meno)",
"j17": "U17 (17 anni o meno)",
"j15": "U15 (15 anni o meno)",
"j13": "U13 (13 anni o meno)",
"j11": "U11 (11 anni o meno)",
"clearFilters": "Reimposta filtri",
"imageInternet": "Immagine (web?)",
"testMember": "Prova",
"name": "Cognome, nome",
"ttrQttr": "TTR / QTTR",
"address": "Indirizzo",
"active": "Attivo",
"actions": "Azioni",
"phoneNumberShort": "Tel.",
"emailAddressShort": "E-mail",
"trainingParticipations": "Partecipazioni agli allenamenti",
"memberImage": "Immagine membro",
"inactive": "inattivo",
"sixOrMoreParticipations": "6 o più partecipazioni agli allenamenti",
"threeOrMoreParticipations": "3 o più partecipazioni agli allenamenti",
"noTestMembership": "Non più membro in prova",
"formHandedOver": "Modulo di iscrizione consegnato",
"deactivateMember": "Disattiva membro",
"notes": "Note",
"exercises": "Esercizi",
"memberImages": "Immagini membro",
"testMembershipRemoved": "Iscrizione di prova rimossa.",
"errorRemovingTestMembership": "Errore durante la rimozione delliscrizione di prova.",
"formMarkedAsHandedOver": "Modulo di iscrizione contrassegnato come consegnato.",
"errorMarkingForm": "Errore durante la marcatura del modulo.",
"deactivateMemberTitle": "Disattiva membro",
"deactivateMemberConfirm": "Vuoi davvero disattivare \"{name}\"?",
"memberDeactivated": "Membro disattivato",
"errorDeactivatingMember": "Errore durante la disattivazione del membro",
"errorSavingMember": "Errore durante il salvataggio del membro",
"errorAddingToGroup": "Errore durante laggiunta al gruppo",
"errorRemovingFromGroup": "Errore durante la rimozione dal gruppo",
"imageUpdated": "Immagine aggiornata",
"errorRotatingImage": "Errore durante la rotazione dellimmagine",
"imageDeleted": "Immagine eliminata.",
"errorDeletingImage": "Impossibile eliminare limmagine",
"primaryImageUpdated": "Immagine principale aggiornata.",
"errorSettingPrimaryImage": "Impossibile impostare limmagine principale",
"errorUploadingImage": "Impossibile caricare limmagine",
"errorLoadingImage": "Errore durante il caricamento dellimmagine",
"phoneList": "elenco-telefonico.pdf",
"errorLoadingTrainingParticipations": "Errore durante il caricamento delle partecipazioni",
"errorUpdatingRatings": "Errore durante laggiornamento dei valori TTR/QTTR",
"errorTransfer": "Errore durante il trasferimento",
"subtitle": "Cerca, filtra e modifica direttamente i membri.",
"closeEditor": "Chiudi editor",
"visibleMembers": "Membri visibili",
"search": "Cerca",
"searchPlaceholder": "Cerca per nome, città, telefono o e-mail",
"memberScope": "Ambito membri",
"scopeAll": "Tutti",
"scopeActive": "Attivi",
"scopeTest": "Prova",
"scopeNeedsForm": "Modulo non verificato",
"scopeDataIncomplete": "Dati incompleti",
"scopeInactive": "Inattivi",
"scopeActiveDataIncomplete": "Attivo + dati incompleti",
"searchAndFilter": "Ricerca e filtri",
"bulkActions": "Azioni di gruppo",
"resultsVisible": "membri visibili",
"editHint": "Un clic su una riga apre leditor.",
"editorCreateHint": "Crea un nuovo membro e inserisci subito i dati di contatto.",
"editorEditHint": "Modifica i dati di {name}.",
"editorAssignTrainingGroupHint": "Assegna almeno un gruppo di allenamento.",
"editorRecommendedEntry": "Voce consigliata",
"transferSuccessTitle": "Trasferimento riuscito",
"transferErrorTitle": "Errore di trasferimento",
"clickTtRequestPending": "Richiesta Click-TT in corso",
"clickTtRequestAction": "Richiedi autorizzazione Click-TT",
"clickTtRequestTitle": "Avvia richiesta Click-TT",
"clickTtRequestConfirm": "Vuoi avviare la richiesta Click-TT automatizzata per {name}?",
"clickTtRequestHint": "La richiesta viene elaborata automaticamente dal workflow Click-TT del backend.",
"clickTtRequestSuccess": "Accedi ancora a click-tt e invia lì la richiesta.",
"clickTtRequestError": "Impossibile inviare la richiesta Click-TT.",
"clickTtRequestFailedLog": "Richiesta Click-TT non riuscita",
"deleteImageTitle": "Elimina immagine",
"deleteImageConfirm": "Vuoi davvero eliminare questa immagine?",
"parentFallback": "Genitore",
"loadingMembers": "Caricamento membri...",
"errorLoadingMembers": "Impossibile caricare la lista dei membri.",
"scopeNotTraining": "Non si allena più",
"notInTrainingTooltip": "Nessuna partecipazione da {weeks} settimane di allenamento",
"status": "Stato",
"contact": "Contatto",
"noPhoneShort": "Nessun telefono",
"noEmailShort": "Nessuna e-mail",
"noAddressShort": "Nessun indirizzo",
"clickTtSubmitted": "Click-TT inviato",
"markRegular": "Segna come regolare",
"markFormReceived": "Segna modulo come verificato",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
"clickTtRequestPendingShort": "In corso...",
"memberDetails": "Dettagli membro",
"previewLastTraining": "Ultimo allenamento",
"previewNoLastTraining": "Ancora nessuna partecipazione",
"phoneListForSelection": "Elenco telefonico per la selezione",
"markFormsForSelection": "Verifica moduli della selezione",
"markRegularForSelection": "Segna la selezione come regolare",
"phoneListSelectionFile": "elenco-telefonico-selezione.pdf",
"batchFormsMarkedSuccess": "{count} modulo/i contrassegnato/i come verificato/i.",
"batchFormsMarkedEmpty": "Nessun modulo non verificato nella selezione attuale.",
"batchMarkedRegularSuccess": "{count} membro/i in prova contrassegnato/i come regolare/i.",
"batchMarkedRegularEmpty": "Nessun membro in prova nella selezione attuale.",
"batchPartialFailure": "{success} riusciti, {failed} falliti.",
"sortBy": "Ordina per",
"sortLastName": "Cognome",
"sortFirstName": "Nome",
"sortBirthday": "Data di nascita",
"sortAge": "Età",
"ageRange": "Età da - a",
"ageFromPlaceholder": "da",
"ageToPlaceholder": "a",
"age": "Età",
"dataQuality": "Qualità dei dati",
"dataQualityComplete": "Dati completi",
"dataIssueBirthdate": "Data di nascita mancante",
"dataIssuePhone": "Telefono mancante",
"dataIssueEmail": "E-mail mancante",
"dataIssueAddress": "Indirizzo mancante",
"dataIssueGender": "Genere non definito",
"dataIssueTrainingGroup": "Gruppo di allenamento mancante",
"openTasks": "Attività aperte",
"noOpenTasks": "Nessuna attività aperta",
"taskVerifyForm": "Verifica modulo",
"taskReviewTrialStatus": "Controlla stato di prova",
"taskCheckTrainingStatus": "Controlla stato allenamento",
"taskCheckDataQuality": "Controlla qualità dati",
"taskAssignTrainingGroup": "Assegna gruppo di allenamento",
"taskCheckClickTt": "Controlla autorizzazione Click-TT",
"taskActionVerify": "Verifica",
"taskActionMarkRegular": "Segna come regolare",
"taskActionReview": "Apri",
"taskActionRequest": "Richiedi",
"toggleSortDirection": "Cambia direzione di ordinamento",
"showTtrHistory": "Mostra cronologia TTR",
"missingTtrHistoryId": "Nessun ID myTischtennis memorizzato",
"sortLastTraining": "Ultimo allenamento",
"sortOpenTasks": "Attività aperte",
"exportPreview": "Anteprima esportazione",
"exportMembersSelected": "membri attualmente selezionati",
"exportPhones": "Telefono",
"exportReachableByPhone": "con numero di telefono",
"exportEmails": "E-mail",
"exportReachableByEmail": "con indirizzo e-mail",
"exportPreviewNames": "Anteprima",
"exportPreviewEmpty": "Nessun membro nella selezione attuale",
"exportCsv": "Esporta CSV",
"exportCsvFile": "selezione-membri.csv",
"copyPhones": "Copia telefoni",
"copyEmails": "Copia e-mail",
"copyPhonesSuccess": "Elenco telefonico copiato negli appunti.",
"copyPhonesEmpty": "Nessun numero di telefono nella selezione attuale.",
"copyEmailsSuccess": "Elenco e-mail copiato negli appunti.",
"copyEmailsEmpty": "Nessun indirizzo e-mail nella selezione attuale.",
"composeEmail": "Prepara e-mail",
"copyContactSummary": "Copia riepilogo contatti",
"copyContactSummarySuccess": "Riepilogo contatti copiato negli appunti."
},
"diary": {
"title": "Diario di allenamento",
"date": "Data",
"noEntries": "Nessuna voce",
"deleteDate": "Elimina data",
"createNew": "Crea",
"gallery": "Galleria membri",
"galleryCreating": "Creazione galleria…",
"selectTrainingGroup": "Seleziona gruppo di allenamento",
"selectTrainingGroupPlaceholder": "Seleziona...",
"suggestion": "Suggerimento",
"nextAppointment": "Prossimo appuntamento",
"applySuggestion": "Applica suggerimento",
"skipSuggestion": "Continua senza suggerimento",
"createNewDate": "Crea nuova data",
"activeTrainingDay": "Giorno di allenamento attivo",
"trainingDaySection": "Giorno di allenamento",
"trainingDayChecklist": "Checklist finale",
"trainingStart": "Inizio allenamento",
"trainingEnd": "Fine allenamento",
"trainingWindow": "Fascia di allenamento",
"trainingWindowUnset": "Non ancora impostato",
"groupsLabel": "Gruppi",
"groupsSection": "Gruppi",
"createDate": "Crea data",
"editTrainingTimes": "Modifica orari di allenamento",
"updateTimes": "Aggiorna orari",
"groupManagement": "Gestione gruppi",
"createGroups": "Crea gruppi",
"trainingPlan": "Piano di allenamento",
"planActivitiesCount": "Attività pianificate",
"timeblocksCount": "Blocchi orari",
"planEmptyState": "Non è ancora stato inserito nulla nel piano di allenamento.",
"planAddHint": "Aggiungi nuovi elementi del piano usando le azioni sopra.",
"startTime": "Ora di inizio",
"group": "Gruppo...",
"timeblock": "Blocco orario",
"assignParticipants": "Assegna partecipanti",
"addTimeblock": "Blocco orario",
"activities": "Attività",
"freeActivities": "Attività libere",
"noFreeActivitiesYet": "Non sono ancora state registrate attività libere.",
"addActivity": "Aggiungi attività",
"bookAccident": "Registra incidente",
"activity": "Attività",
"duration": "Durata",
"activityImage": "Immagine attività",
"activityDrawing": "Disegno attività",
"today": "Oggi",
"existingGroups": "Gruppi esistenti",
"leader": "Responsabile",
"deleteGroup": "Elimina gruppo",
"numberOfGroups": "Numero di gruppi",
"addGroup": "Aggiungi gruppo",
"activityOrTimeblock": "Attività / blocco orario",
"durationMinutes": "Durata (min)",
"addGroupActivity": "Aggiungi attività di gruppo",
"addGroupButton": "+ Gruppo",
"all": "Tutti",
"selectGroup": "Seleziona gruppo...",
"activityPlaceholder": "Attività",
"assignShort": "Assegna",
"statusReadyShort": "Pronto",
"statusOpenShort": "Aperto",
"openPlanItemsLabel": "Stato del piano",
"openPlanItems": "{count} aperti",
"unassignedPlanItems": "{count} aperti",
"durationExampleLong": "es. 2x7 o 3*5",
"durationExampleShort": "es. 2x7",
"showImage": "Mostra immagine/disegno",
"participants": "Partecipanti",
"searchParticipants": "Cerca partecipanti",
"filterAll": "Tutti",
"filterPresent": "Presente",
"filterAbsent": "Assente",
"filterTest": "Prova",
"quickAdd": "+ Aggiunta rapida",
"selectTags": "Seleziona tag",
"createDrawing": "Crea disegno esercizio",
"overallActivity": "Attività complessiva",
"editActivity": "Modifica attività",
"editGroupActivity": "Modifica attività di gruppo",
"assignParticipantsForGroupActivity": "Assegna partecipanti allattività di gruppo",
"delete": "Elimina",
"min": "min",
"errorLoadingPredefinedActivities": "Errore durante il caricamento delle attività predefinite",
"selectParticipantAndNote": "Seleziona un partecipante e inserisci una nota.",
"selectGroupAndActivity": "Seleziona un gruppo e inserisci unattività.",
"dateCannotBeDeleted": "La data non può essere eliminata",
"dateCannotBeDeletedDetails": "Sono ancora presenti contenuti (piano, partecipanti, attività, incidenti o note).",
"confirmDelete": "Conferma eliminazione",
"confirmDeleteDate": "Vuoi davvero eliminare questa data?",
"confirmDeleteDateDetails": "Verranno eliminati anche tutti i dati associati.",
"noParticipants": "Nessun partecipante disponibile per questo giorno di allenamento.",
"mustCreateAtLeastTwoGroups": "La prima volta è necessario creare almeno 2 gruppi.",
"oneGroupAdded": "1 gruppo aggiunto correttamente.",
"groupsCreated": "{count} gruppi creati correttamente.",
"errorCreatingGroups": "Errore durante la creazione dei gruppi",
"confirmDeleteGroup": "Vuoi davvero eliminare il gruppo \"{name}\"?",
"groupDeletedSuccessfully": "Gruppo eliminato correttamente.",
"errorDeletingGroup": "Errore durante leliminazione del gruppo",
"errorCreatingActivity": "Errore durante la creazione dellattività",
"trainingPlanAsPDF": "Piano di allenamento in PDF",
"trainingPlanPdfShort": "Programma in PDF",
"trainingDayAsPDF": "Scarica il giorno di allenamento in PDF",
"trainingDayAsPDFShort": "Giorno di allenamento in PDF",
"trainingDaySummaryPdfShort": "Riepilogo partecipanti in PDF",
"minutes": "Minuti",
"formHandedOver": "Modulo di iscrizione consegnato",
"errorOccurred": "Si è verificato un errore. Riprova.",
"trainingTimesUpdated": "Orari di allenamento aggiornati correttamente.",
"noActiveTrainingDay": "Nessun giorno di allenamento selezionato.",
"statusEmpty": "Questo giorno di allenamento è ancora vuoto.",
"statusInProgress": "Questo giorno di allenamento è preparato solo in parte.",
"formMarkedAsHandedOver": "Modulo di iscrizione contrassegnato come consegnato",
"errorMarkingForm": "Errore durante la marcatura del modulo",
"dateNoLongerCurrent": "La data selezionata non era più attuale. Riprova.",
"activityRequired": "Inserisci unattività.",
"activityNotFound": "Attività non trovata. Scegline una dalla lista.",
"standardActivities": "Attività standard",
"standardDurationShort": "min",
"standardActivityAddError": "Non è stato possibile aggiungere l'attività standard.",
"statusReady": "Orari e piano di allenamento sono impostati.",
"filterExcused": "Giustificato",
"participantStatusNone": "Nessuno stato",
"participantStatusExcused": "Giustificato",
"participantStatusCancelled": "Annullato"
},
"trainingStats": {
"title": "Statistiche di allenamento",
"activeMembers": "Membri attivi",
"averageParticipationCurrentMonth": "Partecipazione media (mese corrente)",
"averageParticipationLastMonth": "Partecipazione media (mese precedente)",
"averageParticipationQuarter": "Partecipazione media (trimestre)",
"averageParticipationHalfYear": "Partecipazione media (semestre)",
"averageParticipationYear": "Partecipazione media (anno)",
"trainingDays": "Giorni di allenamento (ultimi 12 mesi)",
"memberParticipations": "Partecipazioni dei membri",
"date": "Data",
"weekday": "Giorno della settimana",
"participants": "Partecipanti",
"name": "Nome",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "Data di nascita",
"participations12Months": "Partecipazioni (12 mesi)",
"participations3Months": "Partecipazioni (3 mesi)",
"participationsTotal": "Partecipazioni (totale)",
"lastTraining": "Ultimo allenamento",
"actions": "Azioni",
"showDetails": "Mostra dettagli"
},
"courtDrawingTool": {
"title": "Schema di esercizio di tennistavolo",
"configureExercise": "Configura esercizio",
"stepStartPosition": "1. Posizione iniziale",
"stepStartPositionHint": "Da quale posizione di servizio inizia lesercizio?",
"stepFirstStroke": "2. Primo colpo",
"stepFirstStrokeHint": "Definisci il lato e leffetto della prima palla.",
"stepTarget": "3. Obiettivo",
"stepTargetHint": "Scegli la zona bersaglio per il primo colpo.",
"stepAdditionalStrokes": "4. Colpi successivi",
"stepAdditionalStrokesHint": "Aggiungi facoltativamente altre palle come sequenza.",
"noAdditionalStrokes": "Nessun colpo successivo aggiunto finora.",
"service": "Servizio:",
"serviceTitle": "Servizio",
"forehand": "Dritto",
"backhand": "Rovescio",
"spin": "Effetto:",
"underspin": "Taglio",
"topspin": "Topspin",
"sidespin": "Effetto laterale",
"sideUnderspin": "Laterale tagliato",
"counterSpin": "Controeffetto",
"targetPosition": "Posizione bersaglio:",
"targetPositionLabel": "Posizione bersaglio",
"strokeSide": "Lato",
"strokeTypeLabel": "Tipo di colpo",
"addStroke": "Aggiungi colpo",
"preview": "Anteprima",
"previewHint": "Lo schema appare non appena il primo colpo è configurato completamente.",
"completeFirstStroke": "Completa il primo colpo",
"completeFirstStrokeHint": "Scegli posizione iniziale, lato, effetto e obiettivo. Lo schema apparirà poi.",
"codeLabel": "Codice",
"titleLabel": "Titolo",
"startLeft": "sinistra",
"startMiddle": "centro",
"startRight": "destra",
"strokeTypePush": "Palleggio corto",
"strokeTypeCounter": "Contro",
"strokeTypeTopspin": "Topspin",
"strokeTypeFlip": "Flip",
"strokeTypeBlock": "Blocco",
"strokeTypeSmash": "Schiacciata",
"strokeTypeChopDefense": "Difesa tagliata",
"strokeTypeLobDefense": "Difesa alta",
"targetForehandLong": "Dritto lungo",
"targetMiddleLong": "Centro lungo",
"targetBackhandLong": "Rovescio lungo",
"targetForehandHalfLong": "Dritto mezzo-lungo",
"targetMiddleHalfLong": "Centro mezzo-lungo",
"targetBackhandHalfLong": "Rovescio mezzo-lungo",
"targetForehandShort": "Dritto corto",
"targetMiddleShort": "Centro corto",
"targetBackhandShort": "Rovescio corto",
"toTarget": "verso"
}
}

View File

@@ -22,7 +22,41 @@
"next": "次へ",
"previous": "前へ",
"submit": "送信",
"reset": "リセット"
"reset": "リセット",
"all": "すべて",
"today": "今日",
"time": "時刻",
"new": "新規",
"update": "更新",
"create": "作成",
"remove": "削除",
"select": "選択",
"download": "ダウンロード",
"choose": "選択",
"apply": "適用",
"clear": "クリア",
"details": "詳細",
"view": "表示",
"name": "名前",
"date": "日付",
"status": "状態",
"type": "種類",
"description": "説明",
"active": "アクティブ",
"inactive": "非アクティブ",
"enabled": "有効",
"disabled": "無効",
"required": "必須",
"optional": "任意",
"in": "後",
"min": "分",
"minutes": "分",
"hours": "時間",
"days": "日",
"weeks": "週間",
"months": "か月",
"years": "年",
"ok": "OK"
},
"navigation": {
"home": "ホーム",
@@ -41,13 +75,16 @@
"logs": "システムログ",
"memberTransfer": "メンバー転送",
"myTischtennisAccount": "myTischtennisアカウント",
"clickTtAccount": "HTTV / click-TT アカウント",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "個人設定",
"logout": "ログアウト",
"login": "ログイン",
"register": "登録",
"dailyBusiness": "日常業務",
"competitions": "競技",
"settings": "設定"
"settings": "設定",
"backToHome": "ホームへ戻る"
},
"club": {
"select": "クラブを選択",
@@ -56,7 +93,20 @@
"load": "読み込む",
"name": "クラブ名",
"create": "クラブを作成",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"createTitle": "クラブを作成",
"members": "メンバー",
"trainingDiary": "練習日誌",
"noAccess": "このクラブへのアクセス権はまだ付与されていません。",
"requestAccess": "アクセスを申請",
"openRequests": "保留中のアクセス申請",
"title": "クラブ",
"openAccessRequests": "保留中のアクセス申請",
"diary": "練習日誌",
"accessDenied": "このクラブへのアクセスは許可されていません。",
"errorLoadingRequests": "保留中の申請の読み込みエラー",
"accessRequested": "アクセスを申請しました。",
"accessRequestPending": "このクラブへのアクセスを申請しました。しばらくお待ちください。",
"accessRequestFailed": "アクセス申請を送信できませんでした。"
},
"auth": {
"login": "ログイン",
@@ -331,6 +381,106 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"title": "メンバー",
"memberInfo": "メンバー情報",
"activeMembers": "アクティブメンバー",
"testMembers": "体験メンバー",
"inactiveMembers": "非アクティブメンバー",
"generatePhoneList": "電話リストを作成",
"onlyActiveMembers": "アクティブメンバーのみ出力されます",
"updateRatings": "myTischtennis から TTR/QTTR を更新",
"updating": "更新中...",
"transferMembers": "メンバーを移行",
"newMember": "新規メンバー",
"editMember": "メンバーを編集",
"createNewMember": "新規メンバーを作成",
"firstName": "名",
"lastName": "姓",
"street": "住所",
"postalCode": "郵便番号",
"city": "市区町村",
"birthdate": "生年月日",
"phones": "電話番号",
"emails": "メールアドレス",
"addPhone": "電話番号を追加",
"addEmail": "メールアドレスを追加",
"phoneNumber": "電話番号",
"emailAddress": "メールアドレス",
"parent": "保護者",
"parentName": "名前(例:母、父)",
"primary": "メイン",
"gender": "性別",
"genderUnknown": "不明",
"genderMale": "男性",
"genderFemale": "女性",
"genderDiverse": "その他",
"picsInInternetAllowed": "インターネット掲載可",
"testMembership": "体験会員",
"memberFormHandedOver": "会員フォーム受け渡し済み",
"trainingGroups": "練習グループ",
"noGroupsAssigned": "グループ未割り当て",
"noGroupsAvailable": "利用可能なグループがありません",
"addGroup": "グループを追加...",
"remove": "削除",
"image": "画像",
"selectFile": "ファイルを選択",
"camera": "カメラ",
"imagePreview": "メンバー画像のプレビュー",
"change": "変更",
"create": "作成",
"clearFields": "入力欄をクリア",
"showInactiveMembers": "非アクティブメンバーを表示",
"ageGroup": "年齢区分",
"adults": "一般20歳以上",
"j19": "J1919歳以下",
"j17": "J1717歳以下",
"j15": "J1515歳以下",
"j13": "J1313歳以下",
"j11": "J1111歳以下",
"clearFilters": "フィルターをリセット",
"imageInternet": "画像(公開)",
"testMember": "体験",
"name": "姓名",
"ttrQttr": "TTR / QTTR",
"address": "住所",
"active": "アクティブ",
"actions": "操作",
"phoneNumberShort": "電話番号",
"emailAddressShort": "メール",
"trainingParticipations": "練習参加回数",
"memberImage": "メンバー画像",
"inactive": "非アクティブ",
"sixOrMoreParticipations": "練習参加 6 回以上",
"threeOrMoreParticipations": "練習参加 3 回以上",
"noTestMembership": "体験会員ではない",
"formHandedOver": "会員フォーム受け渡し済み",
"deactivateMember": "メンバーを無効化",
"notes": "メモ",
"exercises": "練習",
"memberImages": "メンバー画像",
"testMembershipRemoved": "体験会員を解除しました。",
"errorRemovingTestMembership": "体験会員の解除エラー。",
"formMarkedAsHandedOver": "会員フォームを受け渡し済みにしました。",
"errorMarkingForm": "フォームの更新エラー。",
"deactivateMemberTitle": "メンバーを無効化",
"deactivateMemberConfirm": "「{name}」を本当に無効化しますか?",
"memberDeactivated": "メンバーを無効化しました",
"errorDeactivatingMember": "メンバーの無効化エラー",
"errorSavingMember": "メンバーの保存エラー",
"errorAddingToGroup": "グループへの追加エラー",
"errorRemovingFromGroup": "グループからの削除エラー",
"imageUpdated": "画像を更新しました",
"errorRotatingImage": "画像回転エラー",
"imageDeleted": "画像を削除しました。",
"errorDeletingImage": "画像を削除できませんでした",
"primaryImageUpdated": "メイン画像を更新しました。",
"errorSettingPrimaryImage": "メイン画像を設定できませんでした",
"errorUploadingImage": "画像をアップロードできませんでした",
"errorLoadingImage": "画像の読み込みエラー",
"phoneList": "電話リスト.pdf",
"errorLoadingTrainingParticipations": "練習参加履歴の読み込みエラー",
"errorUpdatingRatings": "TTR/QTTR 更新エラー",
"errorTransfer": "移行エラー",
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
@@ -341,11 +491,17 @@
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeActiveDataIncomplete": "アクティブ + データ不完全",
"scopeDataIncomplete": "データ不完全",
"scopeInactive": "Inactive",
"searchAndFilter": "検索とフィルター",
"bulkActions": "一括操作",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"editorAssignTrainingGroupHint": "少なくとも 1 つの練習グループを割り当ててください。",
"editorRecommendedEntry": "推奨入力",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
@@ -363,7 +519,7 @@
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"status": "状態",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
@@ -390,17 +546,33 @@
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"ageRange": "年齢範囲",
"ageFromPlaceholder": "から",
"ageToPlaceholder": "まで",
"age": "Age",
"dataQuality": "データ品質",
"dataQualityComplete": "データは完全です",
"dataIssueBirthdate": "生年月日がありません",
"dataIssuePhone": "電話番号がありません",
"dataIssueEmail": "メールアドレスがありません",
"dataIssueAddress": "住所がありません",
"dataIssueGender": "性別が未設定です",
"dataIssueTrainingGroup": "練習グループがありません",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckDataQuality": "データ品質を確認",
"taskAssignTrainingGroup": "練習グループを割り当て",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionReview": "開く",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"showTtrHistory": "TTR 履歴を表示",
"missingTtrHistoryId": "myTischtennis ID が登録されていません",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
@@ -422,5 +594,212 @@
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
},
"diary": {
"title": "練習日誌",
"date": "日付",
"noEntries": "エントリがありません",
"deleteDate": "日付を削除",
"createNew": "新規作成",
"gallery": "メンバーギャラリー",
"galleryCreating": "ギャラリーを作成中…",
"selectTrainingGroup": "練習グループを選択",
"selectTrainingGroupPlaceholder": "選択してください...",
"suggestion": "提案",
"nextAppointment": "次回の予定",
"applySuggestion": "提案を適用",
"skipSuggestion": "提案なしで続行",
"createNewDate": "新しい日付を作成",
"activeTrainingDay": "現在の練習日",
"trainingDaySection": "練習日",
"trainingDayChecklist": "完了チェック",
"trainingStart": "練習開始",
"trainingEnd": "練習終了",
"trainingWindow": "練習時間帯",
"trainingWindowUnset": "未設定",
"groupsLabel": "グループ",
"groupsSection": "グループ",
"createDate": "日付を作成",
"editTrainingTimes": "練習時間を編集",
"updateTimes": "時間を更新",
"groupManagement": "グループ管理",
"createGroups": "グループを作成",
"trainingPlan": "練習計画",
"planActivitiesCount": "計画アクティビティ",
"timeblocksCount": "時間ブロック",
"planEmptyState": "練習計画にはまだ何も登録されていません。",
"planAddHint": "新しい計画項目は上の操作から追加します。",
"startTime": "開始時刻",
"group": "グループ...",
"timeblock": "時間ブロック",
"assignParticipants": "参加者を割り当て",
"addTimeblock": "時間ブロック",
"activities": "アクティビティ",
"freeActivities": "自由アクティビティ",
"noFreeActivitiesYet": "自由アクティビティはまだありません。",
"addActivity": "アクティビティを追加",
"bookAccident": "事故を記録",
"activity": "アクティビティ",
"duration": "時間",
"activityImage": "アクティビティ画像",
"activityDrawing": "アクティビティ図",
"today": "今日",
"existingGroups": "既存のグループ",
"leader": "担当者",
"deleteGroup": "グループを削除",
"numberOfGroups": "グループ数",
"addGroup": "グループを追加",
"activityOrTimeblock": "アクティビティ / 時間ブロック",
"durationMinutes": "時間(分)",
"standardActivities": "標準アクティビティ",
"standardDurationShort": "分",
"standardActivityAddError": "標準アクティビティを追加できませんでした。",
"addGroupActivity": "グループアクティビティを追加",
"addGroupButton": "+ グループ",
"all": "すべて",
"selectGroup": "グループを選択...",
"activityPlaceholder": "アクティビティ",
"assignShort": "割り当て",
"statusReadyShort": "準備完了",
"statusOpenShort": "未完了",
"openPlanItemsLabel": "計画状況",
"openPlanItems": "{count} 件未完了",
"unassignedPlanItems": "{count} 件未割り当て",
"durationExampleLong": "例: 2x7 または 3*5",
"durationExampleShort": "例: 2x7",
"showImage": "画像/図を表示",
"participants": "参加者",
"searchParticipants": "参加者を検索",
"filterAll": "すべて",
"filterPresent": "出席",
"filterAbsent": "欠席",
"filterExcused": "欠席連絡あり",
"filterTest": "体験",
"participantStatusNone": "ステータスなし",
"participantStatusExcused": "欠席連絡あり",
"participantStatusCancelled": "キャンセル",
"quickAdd": "+ クイック追加",
"selectTags": "タグを選択",
"createDrawing": "練習図を作成",
"overallActivity": "全体アクティビティ",
"editActivity": "アクティビティを編集",
"editGroupActivity": "グループアクティビティを編集",
"assignParticipantsForGroupActivity": "グループアクティビティの参加者を割り当て",
"delete": "削除",
"min": "分",
"errorLoadingPredefinedActivities": "事前定義アクティビティの読み込みエラー",
"selectParticipantAndNote": "参加者を選択し、メモを入力してください。",
"selectGroupAndActivity": "グループを選択し、アクティビティを入力してください。",
"dateCannotBeDeleted": "日付を削除できません",
"dateCannotBeDeletedDetails": "まだ内容があります(練習計画、参加者、アクティビティ、事故、メモ)。",
"confirmDelete": "削除を確認",
"confirmDeleteDate": "この日付を本当に削除しますか?",
"confirmDeleteDateDetails": "関連データもすべて削除されます。",
"noParticipants": "この練習日に参加者がいません。",
"mustCreateAtLeastTwoGroups": "初回作成時は少なくとも 2 つのグループが必要です。",
"oneGroupAdded": "1 つのグループを追加しました。",
"groupsCreated": "{count} 個のグループを作成しました。",
"errorCreatingGroups": "グループ作成エラー",
"confirmDeleteGroup": "グループ「{name}」を本当に削除しますか?",
"groupDeletedSuccessfully": "グループを削除しました。",
"errorDeletingGroup": "グループ削除エラー",
"errorCreatingActivity": "アクティビティ作成エラー",
"trainingPlanAsPDF": "練習計画を PDF で出力",
"trainingPlanPdfShort": "進行計画を PDF",
"trainingDayAsPDF": "練習日を PDF でダウンロード",
"trainingDayAsPDFShort": "練習日を PDF",
"trainingDaySummaryPdfShort": "参加者一覧を PDF",
"minutes": "分",
"formHandedOver": "会員フォーム受け渡し済み",
"errorOccurred": "エラーが発生しました。もう一度お試しください。",
"trainingTimesUpdated": "練習時間を更新しました。",
"noActiveTrainingDay": "練習日が選択されていません。",
"statusReady": "時間と練習計画は設定済みです。",
"statusEmpty": "この練習日はまだ空です。",
"statusInProgress": "この練習日は一部のみ準備されています。",
"formMarkedAsHandedOver": "会員フォームを受け渡し済みにしました",
"errorMarkingForm": "会員フォーム更新エラー",
"dateNoLongerCurrent": "選択した日付は最新ではありません。もう一度お試しください。",
"activityRequired": "アクティビティを入力してください。",
"activityNotFound": "アクティビティが見つかりません。リストから選択してください。"
},
"trainingStats": {
"title": "練習統計",
"activeMembers": "アクティブメンバー",
"averageParticipationCurrentMonth": "平均参加数(今月)",
"averageParticipationLastMonth": "平均参加数(先月)",
"averageParticipationQuarter": "平均参加数(四半期)",
"averageParticipationHalfYear": "平均参加数(半年)",
"averageParticipationYear": "平均参加数(年間)",
"trainingDays": "練習日(過去 12 か月)",
"memberParticipations": "メンバー参加数",
"date": "日付",
"weekday": "曜日",
"participants": "参加者",
"name": "名前",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "生年月日",
"participations12Months": "参加回数12 か月)",
"participations3Months": "参加回数3 か月)",
"participationsTotal": "参加回数(合計)",
"lastTraining": "最終練習",
"actions": "操作",
"showDetails": "詳細を表示"
},
"courtDrawingTool": {
"title": "卓球練習図",
"configureExercise": "練習を設定",
"stepStartPosition": "1. 開始位置",
"stepStartPositionHint": "どのサーブ位置から練習を始めますか?",
"stepFirstStroke": "2. 第1打",
"stepFirstStrokeHint": "最初のボールの打球面と回転を設定します。",
"stepTarget": "3. 落点",
"stepTargetHint": "第1打の落点ゾーンを選択します。",
"stepAdditionalStrokes": "4. 後続の打球",
"stepAdditionalStrokesHint": "必要に応じて後続のボールを一覧で追加できます。",
"noAdditionalStrokes": "まだ後続の打球はありません。",
"service": "サーブ:",
"serviceTitle": "サーブ",
"forehand": "フォアハンド",
"backhand": "バックハンド",
"spin": "回転:",
"underspin": "下回転",
"topspin": "上回転",
"sidespin": "横回転",
"sideUnderspin": "横下回転",
"counterSpin": "逆回転",
"targetPosition": "落点位置:",
"targetPositionLabel": "落点位置",
"strokeSide": "面",
"strokeTypeLabel": "打球タイプ",
"addStroke": "打球を追加",
"preview": "プレビュー",
"previewHint": "最初の打球が完全に設定されると図が表示されます。",
"completeFirstStroke": "第1打を完成させる",
"completeFirstStrokeHint": "開始位置、打球面、回転、落点を選択すると、図が表示されます。",
"codeLabel": "略称",
"titleLabel": "タイトル",
"startLeft": "左",
"startMiddle": "中央",
"startRight": "右",
"strokeTypePush": "ツッツキ",
"strokeTypeCounter": "カウンター",
"strokeTypeTopspin": "トップスピン",
"strokeTypeFlip": "フリック",
"strokeTypeBlock": "ブロック",
"strokeTypeSmash": "スマッシュ",
"strokeTypeChopDefense": "カット守備",
"strokeTypeLobDefense": "ロブ守備",
"targetForehandLong": "フォア奥",
"targetMiddleLong": "ミドル奥",
"targetBackhandLong": "バック奥",
"targetForehandHalfLong": "フォア半長",
"targetMiddleHalfLong": "ミドル半長",
"targetBackhandHalfLong": "バック半長",
"targetForehandShort": "フォア短",
"targetMiddleShort": "ミドル短",
"targetBackhandShort": "バック短",
"toTarget": "へ"
}
}

View File

@@ -22,7 +22,41 @@
"next": "Dalej",
"previous": "Poprzedni",
"submit": "Wyślij",
"reset": "Resetuj"
"reset": "Resetuj",
"all": "Wszystkie",
"today": "Dzisiaj",
"time": "Czas",
"new": "Nowy",
"update": "Aktualizuj",
"create": "Utwórz",
"remove": "Usuń",
"select": "Wybierz",
"download": "Pobierz",
"choose": "Wybierz",
"apply": "Zastosuj",
"clear": "Wyczyść",
"details": "Szczegóły",
"view": "Pokaż",
"name": "Nazwa",
"date": "Data",
"status": "Status",
"type": "Typ",
"description": "Opis",
"active": "Aktywny",
"inactive": "Nieaktywny",
"enabled": "Włączony",
"disabled": "Wyłączony",
"required": "Wymagane",
"optional": "Opcjonalne",
"in": "w",
"min": "min",
"minutes": "minuty",
"hours": "godziny",
"days": "dni",
"weeks": "tygodnie",
"months": "miesiące",
"years": "lata",
"ok": "OK"
},
"navigation": {
"home": "Strona główna",
@@ -36,18 +70,21 @@
"schedule": "Harmonogramy",
"clubSettings": "Ustawienia klubu",
"predefinedActivities": "Predefiniowane aktywności",
"teamManagement": "Zarządzanie zespołem",
"teamManagement": "Zarządzanie drużyną",
"permissions": "Uprawnienia",
"logs": "Logi systemowe",
"memberTransfer": "Transfer członka",
"memberTransfer": "Transfer członków",
"myTischtennisAccount": "Konto myTischtennis",
"clickTtAccount": "Konto HTTV / click-TT",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "Ustawienia osobiste",
"logout": "Wyloguj",
"login": "Zaloguj",
"register": "Zarejestruj",
"dailyBusiness": "Codzienne sprawy",
"competitions": "Zawody",
"settings": "Ustawienia"
"dailyBusiness": "Codzienna praca",
"competitions": "Rozgrywki",
"settings": "Ustawienia",
"backToHome": "Powrót do strony głównej"
},
"club": {
"select": "Wybierz klub",
@@ -56,7 +93,20 @@
"load": "Załaduj",
"name": "Nazwa klubu",
"create": "Utwórz klub",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"createTitle": "Utwórz klub",
"members": "Członkowie",
"trainingDiary": "Dziennik treningowy",
"noAccess": "Nie masz jeszcze dostępu do tego klubu.",
"requestAccess": "Poproś o dostęp",
"openRequests": "Otwarte prośby o dostęp",
"title": "Klub",
"openAccessRequests": "Otwarte prośby o dostęp",
"diary": "Dziennik treningowy",
"accessDenied": "Dostęp do klubu został odrzucony.",
"errorLoadingRequests": "Błąd podczas ładowania otwartych próśb",
"accessRequested": "Poproszono o dostęp.",
"accessRequestPending": "Poproszono o dostęp do tego klubu. Proszę czekać.",
"accessRequestFailed": "Nie udało się wysłać prośby o dostęp."
},
"auth": {
"login": "Zaloguj",
@@ -331,96 +381,425 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"title": "Członkowie",
"memberInfo": "Informacje o członku",
"activeMembers": "Aktywni członkowie",
"testMembers": "Członkowie próbni",
"inactiveMembers": "Nieaktywni członkowie",
"generatePhoneList": "Generuj listę telefoniczną",
"onlyActiveMembers": "Uwzględniani są tylko aktywni członkowie",
"updateRatings": "Aktualizuj TTR/QTTR z myTischtennis",
"updating": "Aktualizowanie...",
"transferMembers": "Przenieś członków",
"newMember": "Nowy członek",
"editMember": "Edytuj członka",
"createNewMember": "Utwórz nowego członka",
"firstName": "Imię",
"lastName": "Nazwisko",
"street": "Ulica",
"postalCode": "Kod pocztowy",
"city": "Miasto",
"birthdate": "Data urodzenia",
"phones": "Numery telefonów",
"emails": "Adresy e-mail",
"addPhone": "Dodaj numer telefonu",
"addEmail": "Dodaj adres e-mail",
"phoneNumber": "Numer telefonu",
"emailAddress": "Adres e-mail",
"parent": "Rodzic",
"parentName": "Imię (np. matka, ojciec)",
"primary": "Główny",
"gender": "Płeć",
"genderUnknown": "Nieznana",
"genderMale": "Męska",
"genderFemale": "Żeńska",
"genderDiverse": "Inna",
"picsInInternetAllowed": "Zdjęcia dozwolone w internecie",
"testMembership": "Członkostwo próbne",
"memberFormHandedOver": "Formularz członkowski przekazany",
"trainingGroups": "Grupy treningowe",
"noGroupsAssigned": "Brak przypisanych grup",
"noGroupsAvailable": "Brak dostępnych grup",
"addGroup": "Dodaj grupę...",
"remove": "Usuń",
"image": "Obraz",
"selectFile": "Wybierz plik",
"camera": "Aparat",
"imagePreview": "Podgląd zdjęcia członka",
"change": "Zmień",
"create": "Utwórz",
"clearFields": "Wyczyść pola",
"showInactiveMembers": "Pokaż nieaktywnych członków",
"ageGroup": "Kategoria wiekowa",
"adults": "Dorośli (20+)",
"j19": "U19 (19 lat i mniej)",
"j17": "U17 (17 lat i mniej)",
"j15": "U15 (15 lat i mniej)",
"j13": "U13 (13 lat i mniej)",
"j11": "U11 (11 lat i mniej)",
"clearFilters": "Resetuj filtry",
"imageInternet": "Zdjęcie (www?)",
"testMember": "Próba",
"name": "Nazwisko, imię",
"ttrQttr": "TTR / QTTR",
"address": "Adres",
"active": "Aktywny",
"actions": "Akcje",
"phoneNumberShort": "Tel.",
"emailAddressShort": "E-mail",
"trainingParticipations": "Udziały w treningach",
"memberImage": "Zdjęcie członka",
"inactive": "nieaktywny",
"sixOrMoreParticipations": "6 lub więcej udziałów w treningu",
"threeOrMoreParticipations": "3 lub więcej udziałów w treningu",
"noTestMembership": "Nie jest już członkiem próbnym",
"formHandedOver": "Formularz członkowski przekazany",
"deactivateMember": "Dezaktywuj członka",
"notes": "Notatki",
"exercises": "Ćwiczenia",
"memberImages": "Zdjęcia członka",
"testMembershipRemoved": "Usunięto członkostwo próbne.",
"errorRemovingTestMembership": "Błąd podczas usuwania członkostwa próbnego.",
"formMarkedAsHandedOver": "Formularz członkowski oznaczono jako przekazany.",
"errorMarkingForm": "Błąd podczas oznaczania formularza.",
"deactivateMemberTitle": "Dezaktywuj członka",
"deactivateMemberConfirm": "Czy na pewno chcesz dezaktywować „{name}”?",
"memberDeactivated": "Członek został dezaktywowany",
"errorDeactivatingMember": "Błąd podczas dezaktywacji członka",
"errorSavingMember": "Błąd podczas zapisywania członka",
"errorAddingToGroup": "Błąd podczas dodawania do grupy",
"errorRemovingFromGroup": "Błąd podczas usuwania z grupy",
"imageUpdated": "Zdjęcie zaktualizowano",
"errorRotatingImage": "Błąd podczas obracania zdjęcia",
"imageDeleted": "Zdjęcie zostało usunięte.",
"errorDeletingImage": "Nie udało się usunąć zdjęcia",
"primaryImageUpdated": "Zaktualizowano główne zdjęcie.",
"errorSettingPrimaryImage": "Nie udało się ustawić głównego zdjęcia",
"errorUploadingImage": "Nie udało się przesłać zdjęcia",
"errorLoadingImage": "Błąd podczas ładowania zdjęcia",
"phoneList": "lista-telefoniczna.pdf",
"errorLoadingTrainingParticipations": "Błąd podczas ładowania udziałów treningowych",
"errorUpdatingRatings": "Błąd podczas aktualizacji wartości TTR/QTTR",
"errorTransfer": "Błąd transferu",
"subtitle": "Szukaj, filtruj i edytuj członków bezpośrednio.",
"closeEditor": "Zamknij edytor",
"visibleMembers": "Widoczni członkowie",
"search": "Szukaj",
"searchPlaceholder": "Szukaj po nazwisku, mieście, telefonie lub e-mailu",
"memberScope": "Zakres członków",
"scopeAll": "Wszyscy",
"scopeActive": "Aktywni",
"scopeTest": "Próba",
"scopeNeedsForm": "Formularz niezweryfikowany",
"scopeDataIncomplete": "Niepełne dane",
"scopeInactive": "Nieaktywni",
"scopeActiveDataIncomplete": "Aktywny + niepełne dane",
"searchAndFilter": "Wyszukiwanie i filtry",
"bulkActions": "Akcje zbiorcze",
"resultsVisible": "widocznych członków",
"editHint": "Kliknięcie wiersza otwiera edytor.",
"editorCreateHint": "Utwórz nowego członka i od razu wprowadź dane kontaktowe.",
"editorEditHint": "Edytuj dane użytkownika {name}.",
"editorAssignTrainingGroupHint": "Przypisz co najmniej jedną grupę treningową.",
"editorRecommendedEntry": "Zalecany wpis",
"transferSuccessTitle": "Transfer zakończony sukcesem",
"transferErrorTitle": "Błąd transferu",
"clickTtRequestPending": "Wniosek Click-TT w toku",
"clickTtRequestAction": "Poproś o uprawnienie Click-TT",
"clickTtRequestTitle": "Uruchom wniosek Click-TT",
"clickTtRequestConfirm": "Czy uruchomić automatyczny wniosek Click-TT dla {name}?",
"clickTtRequestHint": "Wniosek jest przetwarzany automatycznie przez backendowy workflow Click-TT.",
"clickTtRequestSuccess": "Zaloguj się jeszcze do click-tt i wyślij tam wniosek.",
"clickTtRequestError": "Nie udało się wysłać wniosku Click-TT.",
"clickTtRequestFailedLog": "Wniosek Click-TT nie powiódł się",
"deleteImageTitle": "Usuń zdjęcie",
"deleteImageConfirm": "Czy na pewno chcesz usunąć to zdjęcie?",
"parentFallback": "Rodzic",
"loadingMembers": "Ładowanie członków...",
"errorLoadingMembers": "Nie udało się załadować listy członków.",
"scopeNotTraining": "Już nie trenuje",
"notInTrainingTooltip": "Brak udziału od {weeks} tygodni treningowych",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"contact": "Kontakt",
"noPhoneShort": "Brak telefonu",
"noEmailShort": "Brak e-maila",
"noAddressShort": "Brak adresu",
"clickTtSubmitted": "Click-TT wysłane",
"markRegular": "Oznacz jako regularny",
"markFormReceived": "Oznacz formularz jako zweryfikowany",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
"clickTtRequestPendingShort": "W toku...",
"memberDetails": "Szczegóły członka",
"previewLastTraining": "Ostatni trening",
"previewNoLastTraining": "Brak udziału do tej pory",
"phoneListForSelection": "Lista telefoniczna dla zaznaczenia",
"markFormsForSelection": "Zweryfikuj formularze zaznaczenia",
"markRegularForSelection": "Oznacz zaznaczenie jako regularne",
"phoneListSelectionFile": "lista-telefoniczna-zaznaczenie.pdf",
"batchFormsMarkedSuccess": "Oznaczono {count} formularz(y) jako zweryfikowane.",
"batchFormsMarkedEmpty": "Brak niezweryfikowanych formularzy w bieżącym zaznaczeniu.",
"batchMarkedRegularSuccess": "Oznaczono {count} członka/ów próbnych jako regularnych.",
"batchMarkedRegularEmpty": "Brak członków próbnych w bieżącym zaznaczeniu.",
"batchPartialFailure": "{success} zakończonych sukcesem, {failed} nieudanych.",
"sortBy": "Sortuj według",
"sortLastName": "Nazwisko",
"sortFirstName": "Imię",
"sortBirthday": "Data urodzenia",
"sortAge": "Wiek",
"ageRange": "Wiek od - do",
"ageFromPlaceholder": "od",
"ageToPlaceholder": "do",
"age": "Wiek",
"dataQuality": "Jakość danych",
"dataQualityComplete": "Dane kompletne",
"dataIssueBirthdate": "Brak daty urodzenia",
"dataIssuePhone": "Brak telefonu",
"dataIssueEmail": "Brak e-maila",
"dataIssueAddress": "Brak adresu",
"dataIssueGender": "Płeć nieokreślona",
"dataIssueTrainingGroup": "Brak grupy treningowej",
"openTasks": "Otwarte zadania",
"noOpenTasks": "Brak otwartych zadań",
"taskVerifyForm": "Zweryfikuj formularz",
"taskReviewTrialStatus": "Sprawdź status próbny",
"taskCheckTrainingStatus": "Sprawdź status treningowy",
"taskCheckDataQuality": "Sprawdź jakość danych",
"taskAssignTrainingGroup": "Przypisz grupę treningową",
"taskCheckClickTt": "Sprawdź uprawnienie Click-TT",
"taskActionVerify": "Zweryfikuj",
"taskActionMarkRegular": "Oznacz jako regularny",
"taskActionReview": "Otwórz",
"taskActionRequest": "Poproś",
"toggleSortDirection": "Zmień kierunek sortowania",
"showTtrHistory": "Pokaż historię TTR",
"missingTtrHistoryId": "Brak zapisanego identyfikatora myTischtennis",
"sortLastTraining": "Ostatni trening",
"sortOpenTasks": "Otwarte zadania",
"exportPreview": "Podgląd eksportu",
"exportMembersSelected": "aktualnie wybrani członkowie",
"exportPhones": "Telefon",
"exportReachableByPhone": "z numerem telefonu",
"exportEmails": "E-mail",
"exportReachableByEmail": "z adresem e-mail",
"exportPreviewNames": "Podgląd",
"exportPreviewEmpty": "Brak członków w bieżącym zaznaczeniu",
"exportCsv": "Eksportuj CSV",
"exportCsvFile": "wybor-czlonkow.csv",
"copyPhones": "Kopiuj telefony",
"copyEmails": "Kopiuj e-maile",
"copyPhonesSuccess": "Lista telefoniczna skopiowana do schowka.",
"copyPhonesEmpty": "Brak numerów telefonu w bieżącym zaznaczeniu.",
"copyEmailsSuccess": "Lista e-mail skopiowana do schowka.",
"copyEmailsEmpty": "Brak adresów e-mail w bieżącym zaznaczeniu.",
"composeEmail": "Przygotuj e-mail",
"copyContactSummary": "Kopiuj podsumowanie kontaktów",
"copyContactSummarySuccess": "Podsumowanie kontaktów skopiowano do schowka."
},
"diary": {
"title": "Dziennik treningowy",
"date": "Data",
"noEntries": "Brak wpisów",
"deleteDate": "Usuń datę",
"createNew": "Utwórz",
"gallery": "Galeria członków",
"galleryCreating": "Tworzenie galerii…",
"selectTrainingGroup": "Wybierz grupę treningową",
"selectTrainingGroupPlaceholder": "Wybierz...",
"suggestion": "Sugestia",
"nextAppointment": "Następny termin",
"applySuggestion": "Zastosuj sugestię",
"skipSuggestion": "Kontynuuj bez sugestii",
"createNewDate": "Utwórz nową datę",
"activeTrainingDay": "Aktywny dzień treningowy",
"trainingDaySection": "Dzień treningowy",
"trainingDayChecklist": "Lista końcowa",
"trainingStart": "Początek treningu",
"trainingEnd": "Koniec treningu",
"trainingWindow": "Okno treningowe",
"trainingWindowUnset": "Jeszcze nie ustawiono",
"groupsLabel": "Grupy",
"groupsSection": "Grupy",
"createDate": "Utwórz datę",
"editTrainingTimes": "Edytuj godziny treningu",
"updateTimes": "Aktualizuj godziny",
"groupManagement": "Zarządzanie grupami",
"createGroups": "Utwórz grupy",
"trainingPlan": "Plan treningowy",
"planActivitiesCount": "Zaplanowane aktywności",
"timeblocksCount": "Bloki czasowe",
"planEmptyState": "W planie treningowym nic jeszcze nie wpisano.",
"planAddHint": "Dodawaj nowe elementy planu za pomocą powyższych akcji.",
"startTime": "Godzina rozpoczęcia",
"group": "Grupa...",
"timeblock": "Blok czasowy",
"assignParticipants": "Przypisz uczestników",
"addTimeblock": "Blok czasowy",
"activities": "Aktywności",
"freeActivities": "Wolne aktywności",
"noFreeActivitiesYet": "Nie zapisano jeszcze żadnych wolnych aktywności.",
"addActivity": "Dodaj aktywność",
"bookAccident": "Zarejestruj wypadek",
"activity": "Aktywność",
"duration": "Czas trwania",
"activityImage": "Obraz aktywności",
"activityDrawing": "Rysunek aktywności",
"today": "Dzisiaj",
"existingGroups": "Istniejące grupy",
"leader": "Prowadzący",
"deleteGroup": "Usuń grupę",
"numberOfGroups": "Liczba grup",
"addGroup": "Dodaj grupę",
"activityOrTimeblock": "Aktywność / blok czasowy",
"durationMinutes": "Czas trwania (min)",
"addGroupActivity": "Dodaj aktywność grupową",
"addGroupButton": "+ Grupa",
"all": "Wszystkie",
"selectGroup": "Wybierz grupę...",
"activityPlaceholder": "Aktywność",
"assignShort": "Przypisz",
"statusReadyShort": "Gotowe",
"statusOpenShort": "Otwarte",
"openPlanItemsLabel": "Status planu",
"openPlanItems": "{count} otwarte",
"unassignedPlanItems": "{count} otwarte",
"durationExampleLong": "np. 2x7 lub 3*5",
"durationExampleShort": "np. 2x7",
"showImage": "Pokaż obraz/rysunek",
"participants": "Uczestnicy",
"searchParticipants": "Szukaj uczestników",
"filterAll": "Wszystkie",
"filterPresent": "Obecny",
"filterAbsent": "Nieobecny",
"filterTest": "Próba",
"quickAdd": "+ Szybkie dodawanie",
"selectTags": "Wybierz tagi",
"createDrawing": "Utwórz rysunek ćwiczenia",
"overallActivity": "Aktywność ogólna",
"editActivity": "Edytuj aktywność",
"editGroupActivity": "Edytuj aktywność grupową",
"assignParticipantsForGroupActivity": "Przypisz uczestników do aktywności grupowej",
"delete": "Usuń",
"min": "min",
"errorLoadingPredefinedActivities": "Błąd podczas ładowania predefiniowanych aktywności",
"selectParticipantAndNote": "Wybierz uczestnika i wpisz notatkę.",
"selectGroupAndActivity": "Wybierz grupę i wpisz aktywność.",
"dateCannotBeDeleted": "Nie można usunąć daty",
"dateCannotBeDeletedDetails": "Nadal istnieje zawartość (plan, uczestnicy, aktywności, wypadki lub notatki).",
"confirmDelete": "Potwierdź usunięcie",
"confirmDeleteDate": "Czy na pewno chcesz usunąć tę datę?",
"confirmDeleteDateDetails": "Wszystkie powiązane dane również zostaną usunięte.",
"noParticipants": "Brak uczestników dla tego dnia treningowego.",
"mustCreateAtLeastTwoGroups": "Za pierwszym razem trzeba utworzyć co najmniej 2 grupy.",
"oneGroupAdded": "Pomyślnie dodano 1 grupę.",
"groupsCreated": "Pomyślnie utworzono {count} grup.",
"errorCreatingGroups": "Błąd podczas tworzenia grup",
"confirmDeleteGroup": "Czy na pewno chcesz usunąć grupę „{name}”?",
"groupDeletedSuccessfully": "Grupa została pomyślnie usunięta.",
"errorDeletingGroup": "Błąd podczas usuwania grupy",
"errorCreatingActivity": "Błąd podczas tworzenia aktywności",
"trainingPlanAsPDF": "Plan treningowy jako PDF",
"trainingPlanPdfShort": "Plan jako PDF",
"trainingDayAsPDF": "Pobierz dzień treningowy jako PDF",
"trainingDayAsPDFShort": "Dzień treningowy jako PDF",
"trainingDaySummaryPdfShort": "Podsumowanie uczestników jako PDF",
"minutes": "Minuty",
"formHandedOver": "Formularz członkowski przekazany",
"errorOccurred": "Wystąpił błąd. Spróbuj ponownie.",
"trainingTimesUpdated": "Godziny treningu zostały pomyślnie zaktualizowane.",
"noActiveTrainingDay": "Nie wybrano dnia treningowego.",
"statusEmpty": "Ten dzień treningowy jest jeszcze pusty.",
"statusInProgress": "Ten dzień treningowy jest częściowo przygotowany.",
"formMarkedAsHandedOver": "Formularz członkowski oznaczono jako przekazany",
"errorMarkingForm": "Błąd podczas oznaczania formularza",
"dateNoLongerCurrent": "Wybrana data nie była już aktualna. Spróbuj ponownie.",
"activityRequired": "Wpisz aktywność.",
"activityNotFound": "Nie znaleziono aktywności. Wybierz jedną z listy.",
"standardActivities": "Aktywności standardowe",
"standardDurationShort": "min",
"standardActivityAddError": "Nie udało się dodać standardowej aktywności.",
"statusReady": "Godziny i plan treningowy są ustawione.",
"filterExcused": "Usprawiedliwiony",
"participantStatusNone": "Brak statusu",
"participantStatusExcused": "Usprawiedliwiony",
"participantStatusCancelled": "Anulowano"
},
"trainingStats": {
"title": "Statystyki treningowe",
"activeMembers": "Aktywni członkowie",
"averageParticipationCurrentMonth": "Średnia frekwencja (bieżący miesiąc)",
"averageParticipationLastMonth": "Średnia frekwencja (poprzedni miesiąc)",
"averageParticipationQuarter": "Średnia frekwencja (kwartał)",
"averageParticipationHalfYear": "Średnia frekwencja (półrocze)",
"averageParticipationYear": "Średnia frekwencja (rok)",
"trainingDays": "Dni treningowe (ostatnie 12 miesięcy)",
"memberParticipations": "Udziały członków",
"date": "Data",
"weekday": "Dzień tygodnia",
"participants": "Uczestnicy",
"name": "Nazwa",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "Data urodzenia",
"participations12Months": "Udziały (12 miesięcy)",
"participations3Months": "Udziały (3 miesiące)",
"participationsTotal": "Udziały (łącznie)",
"lastTraining": "Ostatni trening",
"actions": "Akcje",
"showDetails": "Pokaż szczegóły"
},
"courtDrawingTool": {
"title": "Rysunek ćwiczenia tenisa stołowego",
"configureExercise": "Konfiguruj ćwiczenie",
"stepStartPosition": "1. Pozycja startowa",
"stepStartPositionHint": "Z której pozycji serwisowej zaczyna się ćwiczenie?",
"stepFirstStroke": "2. Pierwsze zagranie",
"stepFirstStrokeHint": "Ustaw stronę i rotację pierwszej piłki.",
"stepTarget": "3. Cel",
"stepTargetHint": "Wybierz strefę celu dla pierwszego zagrania.",
"stepAdditionalStrokes": "4. Kolejne zagrania",
"stepAdditionalStrokesHint": "Opcjonalnie dodaj kolejne piłki jako sekwencję.",
"noAdditionalStrokes": "Nie dodano jeszcze kolejnych zagrań.",
"service": "Serwis:",
"serviceTitle": "Serwis",
"forehand": "Forehand",
"backhand": "Backhand",
"spin": "Rotacja:",
"underspin": "Podcięcie",
"topspin": "Topspin",
"sidespin": "Rotacja boczna",
"sideUnderspin": "Boczne podcięcie",
"counterSpin": "Kontratopspin",
"targetPosition": "Pozycja celu:",
"targetPositionLabel": "Pozycja celu",
"strokeSide": "Strona",
"strokeTypeLabel": "Typ zagrania",
"addStroke": "Dodaj zagranie",
"preview": "Podgląd",
"previewHint": "Grafika pojawi się, gdy pierwsze zagranie będzie w pełni skonfigurowane.",
"completeFirstStroke": "Uzupełnij pierwsze zagranie",
"completeFirstStrokeHint": "Wybierz pozycję startową, stronę, rotację i cel. Następnie pojawi się grafika.",
"codeLabel": "Kod",
"titleLabel": "Tytuł",
"startLeft": "lewa",
"startMiddle": "środek",
"startRight": "prawa",
"strokeTypePush": "Pchnięcie",
"strokeTypeCounter": "Kontra",
"strokeTypeTopspin": "Topspin",
"strokeTypeFlip": "Flip",
"strokeTypeBlock": "Blok",
"strokeTypeSmash": "Smecz",
"strokeTypeChopDefense": "Obrona podcięciem",
"strokeTypeLobDefense": "Obrona lobem",
"targetForehandLong": "Forehand długi",
"targetMiddleLong": "Środek długi",
"targetBackhandLong": "Backhand długi",
"targetForehandHalfLong": "Forehand półdługi",
"targetMiddleHalfLong": "Środek półdługi",
"targetBackhandHalfLong": "Backhand półdługi",
"targetForehandShort": "Forehand krótki",
"targetMiddleShort": "Środek krótki",
"targetBackhandShort": "Backhand krótki",
"toTarget": "do"
}
}

View File

@@ -22,7 +22,41 @@
"next": "ถัดไป",
"previous": "ก่อนหน้า",
"submit": "ส่ง",
"reset": "รีเซ็ต"
"reset": "รีเซ็ต",
"all": "ทั้งหมด",
"today": "วันนี้",
"time": "เวลา",
"new": "ใหม่",
"update": "อัปเดต",
"create": "สร้าง",
"remove": "เอาออก",
"select": "เลือก",
"download": "ดาวน์โหลด",
"choose": "เลือก",
"apply": "นำไปใช้",
"clear": "ล้าง",
"details": "รายละเอียด",
"view": "แสดง",
"name": "ชื่อ",
"date": "วันที่",
"status": "สถานะ",
"type": "ประเภท",
"description": "คำอธิบาย",
"active": "ใช้งานอยู่",
"inactive": "ไม่ใช้งาน",
"enabled": "เปิดใช้งาน",
"disabled": "ปิดใช้งาน",
"required": "จำเป็น",
"optional": "ไม่บังคับ",
"in": "ใน",
"min": "นาที",
"minutes": "นาที",
"hours": "ชั่วโมง",
"days": "วัน",
"weeks": "สัปดาห์",
"months": "เดือน",
"years": "ปี",
"ok": "ตกลง"
},
"navigation": {
"home": "หน้าแรก",
@@ -41,13 +75,16 @@
"logs": "บันทึกระบบ",
"memberTransfer": "การโอนสมาชิก",
"myTischtennisAccount": "บัญชี myTischtennis",
"clickTtAccount": "บัญชี HTTV / click-TT",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "การตั้งค่าส่วนตัว",
"logout": "ออกจากระบบ",
"login": "เข้าสู่ระบบ",
"register": "ลงทะเบียน",
"dailyBusiness": "ธุรกิจประจำวัน",
"competitions": "การแข่งขัน",
"settings": "การตั้งค่า"
"settings": "การตั้งค่า",
"backToHome": "กลับหน้าแรก"
},
"club": {
"select": "เลือกสโมสร",
@@ -56,7 +93,20 @@
"load": "โหลด",
"name": "ชื่อสโมสร",
"create": "สร้างสโมสร",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"createTitle": "สร้างสโมสร",
"members": "สมาชิก",
"trainingDiary": "สมุดบันทึกการฝึกซ้อม",
"noAccess": "คุณยังไม่ได้รับสิทธิ์เข้าถึงสโมสรนี้",
"requestAccess": "ขอสิทธิ์เข้าถึง",
"openRequests": "คำขอเข้าถึงที่รอดำเนินการ",
"title": "สโมสร",
"openAccessRequests": "คำขอเข้าถึงที่รอดำเนินการ",
"diary": "สมุดบันทึกการฝึกซ้อม",
"accessDenied": "ไม่ได้รับอนุญาตให้เข้าถึงสโมสรนี้",
"errorLoadingRequests": "เกิดข้อผิดพลาดในการโหลดคำขอที่รอดำเนินการ",
"accessRequested": "ส่งคำขอเข้าถึงแล้ว",
"accessRequestPending": "ได้ส่งคำขอเข้าถึงสโมสรนี้แล้ว โปรดรอสักครู่",
"accessRequestFailed": "ไม่สามารถส่งคำขอเข้าถึงได้"
},
"auth": {
"login": "เข้าสู่ระบบ",
@@ -331,6 +381,106 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"title": "สมาชิก",
"memberInfo": "ข้อมูลสมาชิก",
"activeMembers": "สมาชิกที่ใช้งานอยู่",
"testMembers": "สมาชิกทดลอง",
"inactiveMembers": "สมาชิกที่ไม่ใช้งาน",
"generatePhoneList": "สร้างรายการโทรศัพท์",
"onlyActiveMembers": "จะแสดงเฉพาะสมาชิกที่ใช้งานอยู่",
"updateRatings": "อัปเดต TTR/QTTR จาก myTischtennis",
"updating": "กำลังอัปเดต...",
"transferMembers": "โอนสมาชิก",
"newMember": "สมาชิกใหม่",
"editMember": "แก้ไขสมาชิก",
"createNewMember": "สร้างสมาชิกใหม่",
"firstName": "ชื่อ",
"lastName": "นามสกุล",
"street": "ถนน",
"postalCode": "รหัสไปรษณีย์",
"city": "เมือง",
"birthdate": "วันเกิด",
"phones": "หมายเลขโทรศัพท์",
"emails": "อีเมล",
"addPhone": "เพิ่มหมายเลขโทรศัพท์",
"addEmail": "เพิ่มอีเมล",
"phoneNumber": "หมายเลขโทรศัพท์",
"emailAddress": "อีเมล",
"parent": "ผู้ปกครอง",
"parentName": "ชื่อ (เช่น แม่ พ่อ)",
"primary": "หลัก",
"gender": "เพศ",
"genderUnknown": "ไม่ทราบ",
"genderMale": "ชาย",
"genderFemale": "หญิง",
"genderDiverse": "หลากหลาย",
"picsInInternetAllowed": "อนุญาตให้ใช้รูปบนอินเทอร์เน็ต",
"testMembership": "สมาชิกทดลอง",
"memberFormHandedOver": "ส่งแบบฟอร์มสมาชิกแล้ว",
"trainingGroups": "กลุ่มฝึกซ้อม",
"noGroupsAssigned": "ยังไม่ได้กำหนดกลุ่ม",
"noGroupsAvailable": "ไม่มีกลุ่มให้เลือก",
"addGroup": "เพิ่มกลุ่ม...",
"remove": "เอาออก",
"image": "รูปภาพ",
"selectFile": "เลือกไฟล์",
"camera": "กล้อง",
"imagePreview": "ตัวอย่างรูปสมาชิก",
"change": "เปลี่ยน",
"create": "สร้าง",
"clearFields": "ล้างช่องข้อมูล",
"showInactiveMembers": "แสดงสมาชิกที่ไม่ใช้งาน",
"ageGroup": "กลุ่มอายุ",
"adults": "ผู้ใหญ่ (20+)",
"j19": "J19 (19 ปีหรือน้อยกว่า)",
"j17": "J17 (17 ปีหรือน้อยกว่า)",
"j15": "J15 (15 ปีหรือน้อยกว่า)",
"j13": "J13 (13 ปีหรือน้อยกว่า)",
"j11": "J11 (11 ปีหรือน้อยกว่า)",
"clearFilters": "รีเซ็ตตัวกรอง",
"imageInternet": "รูปภาพ (เน็ต)",
"testMember": "ทดลอง",
"name": "ชื่อ นามสกุล",
"ttrQttr": "TTR / QTTR",
"address": "ที่อยู่",
"active": "ใช้งานอยู่",
"actions": "การดำเนินการ",
"phoneNumberShort": "โทรศัพท์",
"emailAddressShort": "อีเมล",
"trainingParticipations": "การเข้าร่วมฝึกซ้อม",
"memberImage": "รูปสมาชิก",
"inactive": "ไม่ใช้งาน",
"sixOrMoreParticipations": "เข้าร่วมฝึกซ้อม 6 ครั้งขึ้นไป",
"threeOrMoreParticipations": "เข้าร่วมฝึกซ้อม 3 ครั้งขึ้นไป",
"noTestMembership": "ไม่ใช่สมาชิกทดลองอีกต่อไป",
"formHandedOver": "ส่งแบบฟอร์มสมาชิกแล้ว",
"deactivateMember": "ปิดการใช้งานสมาชิก",
"notes": "บันทึกย่อ",
"exercises": "แบบฝึก",
"memberImages": "รูปสมาชิก",
"testMembershipRemoved": "ลบสถานะสมาชิกทดลองแล้ว",
"errorRemovingTestMembership": "เกิดข้อผิดพลาดในการลบสถานะสมาชิกทดลอง",
"formMarkedAsHandedOver": "ทำเครื่องหมายว่าได้ส่งแบบฟอร์มสมาชิกแล้ว",
"errorMarkingForm": "เกิดข้อผิดพลาดในการทำเครื่องหมายแบบฟอร์ม",
"deactivateMemberTitle": "ปิดการใช้งานสมาชิก",
"deactivateMemberConfirm": "คุณต้องการปิดการใช้งาน \"{name}\" จริงหรือไม่?",
"memberDeactivated": "ปิดการใช้งานสมาชิกแล้ว",
"errorDeactivatingMember": "เกิดข้อผิดพลาดในการปิดการใช้งานสมาชิก",
"errorSavingMember": "เกิดข้อผิดพลาดในการบันทึกสมาชิก",
"errorAddingToGroup": "เกิดข้อผิดพลาดในการเพิ่มเข้ากลุ่ม",
"errorRemovingFromGroup": "เกิดข้อผิดพลาดในการลบออกจากกลุ่ม",
"imageUpdated": "อัปเดตรูปภาพแล้ว",
"errorRotatingImage": "เกิดข้อผิดพลาดในการหมุนรูปภาพ",
"imageDeleted": "ลบรูปภาพแล้ว",
"errorDeletingImage": "ไม่สามารถลบรูปภาพได้",
"primaryImageUpdated": "อัปเดตรูปภาพหลักแล้ว",
"errorSettingPrimaryImage": "ไม่สามารถตั้งรูปภาพหลักได้",
"errorUploadingImage": "ไม่สามารถอัปโหลดรูปภาพได้",
"errorLoadingImage": "เกิดข้อผิดพลาดในการโหลดรูปภาพ",
"phoneList": "รายการโทรศัพท์.pdf",
"errorLoadingTrainingParticipations": "เกิดข้อผิดพลาดในการโหลดการเข้าร่วมฝึกซ้อม",
"errorUpdatingRatings": "เกิดข้อผิดพลาดในการอัปเดตค่า TTR/QTTR",
"errorTransfer": "เกิดข้อผิดพลาดในการโอนข้อมูล",
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
@@ -341,11 +491,17 @@
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeActiveDataIncomplete": "ใช้งานอยู่ + ข้อมูลไม่ครบ",
"scopeDataIncomplete": "ข้อมูลไม่ครบ",
"scopeInactive": "Inactive",
"searchAndFilter": "ค้นหาและตัวกรอง",
"bulkActions": "การดำเนินการแบบกลุ่ม",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"editorAssignTrainingGroupHint": "กรุณากำหนดกลุ่มฝึกซ้อมอย่างน้อยหนึ่งกลุ่ม",
"editorRecommendedEntry": "ข้อมูลที่แนะนำให้กรอก",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
@@ -363,7 +519,7 @@
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"status": "สถานะ",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
@@ -390,17 +546,33 @@
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"ageRange": "ช่วงอายุ",
"ageFromPlaceholder": "จาก",
"ageToPlaceholder": "ถึง",
"age": "Age",
"dataQuality": "คุณภาพข้อมูล",
"dataQualityComplete": "ข้อมูลครบถ้วน",
"dataIssueBirthdate": "ไม่มีวันเกิด",
"dataIssuePhone": "ไม่มีหมายเลขโทรศัพท์",
"dataIssueEmail": "ไม่มีอีเมล",
"dataIssueAddress": "ไม่มีที่อยู่",
"dataIssueGender": "เพศยังไม่ชัดเจน",
"dataIssueTrainingGroup": "ไม่มีกลุ่มฝึกซ้อม",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckDataQuality": "ตรวจสอบคุณภาพข้อมูล",
"taskAssignTrainingGroup": "กำหนดกลุ่มฝึกซ้อม",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionReview": "เปิด",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"showTtrHistory": "แสดงประวัติ TTR",
"missingTtrHistoryId": "ไม่มีการบันทึก myTischtennis ID",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
@@ -422,5 +594,212 @@
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
},
"diary": {
"title": "สมุดบันทึกการฝึกซ้อม",
"date": "วันที่",
"noEntries": "ไม่มีรายการ",
"deleteDate": "ลบวันที่",
"createNew": "สร้างใหม่",
"gallery": "แกลเลอรีสมาชิก",
"galleryCreating": "กำลังสร้างแกลเลอรี…",
"selectTrainingGroup": "เลือกกลุ่มฝึกซ้อม",
"selectTrainingGroupPlaceholder": "กรุณาเลือก...",
"suggestion": "ข้อเสนอแนะ",
"nextAppointment": "นัดถัดไป",
"applySuggestion": "ใช้ข้อเสนอแนะ",
"skipSuggestion": "ดำเนินการต่อโดยไม่ใช้ข้อเสนอแนะ",
"createNewDate": "สร้างวันที่ใหม่",
"activeTrainingDay": "วันฝึกซ้อมที่ใช้งานอยู่",
"trainingDaySection": "วันฝึกซ้อม",
"trainingDayChecklist": "รายการตรวจสอบความครบถ้วน",
"trainingStart": "เริ่มฝึกซ้อม",
"trainingEnd": "สิ้นสุดการฝึกซ้อม",
"trainingWindow": "ช่วงเวลาฝึกซ้อม",
"trainingWindowUnset": "ยังไม่ได้ตั้งค่า",
"groupsLabel": "กลุ่ม",
"groupsSection": "กลุ่ม",
"createDate": "สร้างวันที่",
"editTrainingTimes": "แก้ไขเวลาฝึกซ้อม",
"updateTimes": "อัปเดตเวลา",
"groupManagement": "การจัดการกลุ่ม",
"createGroups": "สร้างกลุ่ม",
"trainingPlan": "แผนการฝึกซ้อม",
"planActivitiesCount": "กิจกรรมในแผน",
"timeblocksCount": "ช่วงเวลา",
"planEmptyState": "ยังไม่มีรายการในแผนการฝึกซ้อม",
"planAddHint": "คุณสามารถเพิ่มรายการใหม่ได้จากปุ่มด้านบน",
"startTime": "เวลาเริ่ม",
"group": "กลุ่ม...",
"timeblock": "ช่วงเวลา",
"assignParticipants": "กำหนดผู้เข้าร่วม",
"addTimeblock": "ช่วงเวลา",
"activities": "กิจกรรม",
"freeActivities": "กิจกรรมอิสระ",
"noFreeActivitiesYet": "ยังไม่มีการบันทึกกิจกรรมอิสระ",
"addActivity": "เพิ่มกิจกรรม",
"bookAccident": "บันทึกอุบัติเหตุ",
"activity": "กิจกรรม",
"duration": "ระยะเวลา",
"activityImage": "รูปกิจกรรม",
"activityDrawing": "ภาพวาดกิจกรรม",
"today": "วันนี้",
"existingGroups": "กลุ่มที่มีอยู่",
"leader": "ผู้ดูแล",
"deleteGroup": "ลบกลุ่ม",
"numberOfGroups": "จำนวนกลุ่ม",
"addGroup": "เพิ่มกลุ่ม",
"activityOrTimeblock": "กิจกรรม / ช่วงเวลา",
"durationMinutes": "ระยะเวลา (นาที)",
"standardActivities": "กิจกรรมมาตรฐาน",
"standardDurationShort": "นาที",
"standardActivityAddError": "ไม่สามารถเพิ่มกิจกรรมมาตรฐานได้",
"addGroupActivity": "เพิ่มกิจกรรมของกลุ่ม",
"addGroupButton": "+ กลุ่ม",
"all": "ทั้งหมด",
"selectGroup": "เลือกกลุ่ม...",
"activityPlaceholder": "กิจกรรม",
"assignShort": "กำหนด",
"statusReadyShort": "พร้อม",
"statusOpenShort": "เปิด",
"openPlanItemsLabel": "สถานะแผน",
"openPlanItems": "เปิดอยู่ {count} รายการ",
"unassignedPlanItems": "ยังไม่กำหนด {count} รายการ",
"durationExampleLong": "เช่น 2x7 หรือ 3*5",
"durationExampleShort": "เช่น 2x7",
"showImage": "แสดงรูป/ภาพวาด",
"participants": "ผู้เข้าร่วม",
"searchParticipants": "ค้นหาผู้เข้าร่วม",
"filterAll": "ทั้งหมด",
"filterPresent": "มาเข้าร่วม",
"filterAbsent": "ขาด",
"filterExcused": "ลา",
"filterTest": "ทดลอง",
"participantStatusNone": "ไม่มีสถานะ",
"participantStatusExcused": "ลา",
"participantStatusCancelled": "ยกเลิก",
"quickAdd": "+ เพิ่มด่วน",
"selectTags": "เลือกแท็ก",
"createDrawing": "สร้างภาพฝึกซ้อม",
"overallActivity": "กิจกรรมรวม",
"editActivity": "แก้ไขกิจกรรม",
"editGroupActivity": "แก้ไขกิจกรรมกลุ่ม",
"assignParticipantsForGroupActivity": "กำหนดผู้เข้าร่วมสำหรับกิจกรรมกลุ่ม",
"delete": "ลบ",
"min": "นาที",
"errorLoadingPredefinedActivities": "เกิดข้อผิดพลาดในการโหลดกิจกรรมที่กำหนดไว้ล่วงหน้า",
"selectParticipantAndNote": "กรุณาเลือกผู้เข้าร่วมและใส่ข้อความบันทึก",
"selectGroupAndActivity": "กรุณาเลือกกลุ่มและกรอกกิจกรรม",
"dateCannotBeDeleted": "ไม่สามารถลบวันที่ได้",
"dateCannotBeDeletedDetails": "ยังมีเนื้อหาอยู่ (แผนการฝึก ผู้เข้าร่วม กิจกรรม อุบัติเหตุ หรือบันทึก)",
"confirmDelete": "ยืนยันการลบ",
"confirmDeleteDate": "คุณต้องการลบวันที่นี้จริงหรือไม่?",
"confirmDeleteDateDetails": "ข้อมูลที่เกี่ยวข้องทั้งหมดจะถูกลบด้วย",
"noParticipants": "ไม่มีผู้เข้าร่วมสำหรับวันฝึกซ้อมนี้",
"mustCreateAtLeastTwoGroups": "การสร้างครั้งแรกต้องมีอย่างน้อย 2 กลุ่ม",
"oneGroupAdded": "เพิ่มกลุ่มสำเร็จ 1 กลุ่ม",
"groupsCreated": "สร้างกลุ่มสำเร็จ {count} กลุ่ม",
"errorCreatingGroups": "เกิดข้อผิดพลาดในการสร้างกลุ่ม",
"confirmDeleteGroup": "คุณต้องการลบกลุ่ม \"{name}\" จริงหรือไม่?",
"groupDeletedSuccessfully": "ลบกลุ่มสำเร็จ",
"errorDeletingGroup": "เกิดข้อผิดพลาดในการลบกลุ่ม",
"errorCreatingActivity": "เกิดข้อผิดพลาดในการสร้างกิจกรรม",
"trainingPlanAsPDF": "แผนการฝึกซ้อมเป็น PDF",
"trainingPlanPdfShort": "แผนการดำเนินงาน PDF",
"trainingDayAsPDF": "ดาวน์โหลดวันฝึกซ้อมเป็น PDF",
"trainingDayAsPDFShort": "วันฝึกซ้อม PDF",
"trainingDaySummaryPdfShort": "สรุปผู้เข้าร่วม PDF",
"minutes": "นาที",
"formHandedOver": "ส่งแบบฟอร์มสมาชิกแล้ว",
"errorOccurred": "เกิดข้อผิดพลาด โปรดลองอีกครั้ง",
"trainingTimesUpdated": "อัปเดตเวลาฝึกซ้อมสำเร็จ",
"noActiveTrainingDay": "ไม่ได้เลือกวันฝึกซ้อม",
"statusReady": "ตั้งค่าเวลาและแผนการฝึกซ้อมแล้ว",
"statusEmpty": "วันฝึกซ้อมนี้ยังว่างอยู่",
"statusInProgress": "วันฝึกซ้อมนี้เตรียมไว้เพียงบางส่วน",
"formMarkedAsHandedOver": "ทำเครื่องหมายว่าได้ส่งแบบฟอร์มสมาชิกแล้ว",
"errorMarkingForm": "เกิดข้อผิดพลาดในการทำเครื่องหมายแบบฟอร์มสมาชิก",
"dateNoLongerCurrent": "วันที่ที่เลือกไม่ใช่ข้อมูลล่าสุดอีกต่อไป โปรดลองอีกครั้ง",
"activityRequired": "กรุณากรอกกิจกรรม",
"activityNotFound": "ไม่พบกิจกรรม กรุณาเลือกจากรายการ"
},
"trainingStats": {
"title": "สถิติการฝึกซ้อม",
"activeMembers": "สมาชิกที่ใช้งานอยู่",
"averageParticipationCurrentMonth": "การเข้าร่วมเฉลี่ย (เดือนปัจจุบัน)",
"averageParticipationLastMonth": "การเข้าร่วมเฉลี่ย (เดือนที่ผ่านมา)",
"averageParticipationQuarter": "การเข้าร่วมเฉลี่ย (ไตรมาส)",
"averageParticipationHalfYear": "การเข้าร่วมเฉลี่ย (ครึ่งปี)",
"averageParticipationYear": "การเข้าร่วมเฉลี่ย (ปี)",
"trainingDays": "วันฝึกซ้อม (12 เดือนล่าสุด)",
"memberParticipations": "การเข้าร่วมของสมาชิก",
"date": "วันที่",
"weekday": "วันในสัปดาห์",
"participants": "ผู้เข้าร่วม",
"name": "ชื่อ",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "วันเกิด",
"participations12Months": "การเข้าร่วม (12 เดือน)",
"participations3Months": "การเข้าร่วม (3 เดือน)",
"participationsTotal": "การเข้าร่วม (ทั้งหมด)",
"lastTraining": "การฝึกซ้อมล่าสุด",
"actions": "การดำเนินการ",
"showDetails": "แสดงรายละเอียด"
},
"courtDrawingTool": {
"title": "ภาพวาดแบบฝึกปิงปอง",
"configureExercise": "กำหนดค่าแบบฝึก",
"stepStartPosition": "1. ตำแหน่งเริ่มต้น",
"stepStartPositionHint": "แบบฝึกเริ่มจากตำแหน่งเสิร์ฟใด?",
"stepFirstStroke": "2. ลูกแรก",
"stepFirstStrokeHint": "กำหนดด้านตีและสปินสำหรับลูกแรก",
"stepTarget": "3. เป้าหมาย",
"stepTargetHint": "เลือกโซนเป้าหมายสำหรับลูกแรก",
"stepAdditionalStrokes": "4. ลูกต่อเนื่อง",
"stepAdditionalStrokesHint": "สามารถเพิ่มลูกต่อเนื่องเป็นรายการได้ตามต้องการ",
"noAdditionalStrokes": "ยังไม่มีลูกต่อเนื่อง",
"service": "เสิร์ฟ:",
"serviceTitle": "การเสิร์ฟ",
"forehand": "โฟร์แฮนด์",
"backhand": "แบ็กแฮนด์",
"spin": "สปิน:",
"underspin": "อันเดอร์สปิน",
"topspin": "ท็อปสปิน",
"sidespin": "ไซด์สปิน",
"sideUnderspin": "ไซด์อันเดอร์สปิน",
"counterSpin": "สปินสวน",
"targetPosition": "ตำแหน่งเป้าหมาย:",
"targetPositionLabel": "ตำแหน่งเป้าหมาย",
"strokeSide": "ด้านตี",
"strokeTypeLabel": "ประเภทการตี",
"addStroke": "เพิ่มการตี",
"preview": "ตัวอย่าง",
"previewHint": "กราฟิกจะแสดงเมื่อกำหนดลูกแรกครบถ้วนแล้ว",
"completeFirstStroke": "กำหนดลูกแรกให้ครบ",
"completeFirstStrokeHint": "เลือกตำแหน่งเริ่ม ด้านตี สปิน และเป้าหมาย แล้วภาพจะแสดงขึ้น",
"codeLabel": "รหัสย่อ",
"titleLabel": "ชื่อเรื่อง",
"startLeft": "ซ้าย",
"startMiddle": "กลาง",
"startRight": "ขวา",
"strokeTypePush": "ผลัก",
"strokeTypeCounter": "เคาน์เตอร์",
"strokeTypeTopspin": "ท็อปสปิน",
"strokeTypeFlip": "ฟลิก",
"strokeTypeBlock": "บล็อก",
"strokeTypeSmash": "ตบ",
"strokeTypeChopDefense": "รับแบบช็อป",
"strokeTypeLobDefense": "รับแบบลอบ",
"targetForehandLong": "โฟร์แฮนด์ยาว",
"targetMiddleLong": "กลางยาว",
"targetBackhandLong": "แบ็กแฮนด์ยาว",
"targetForehandHalfLong": "โฟร์แฮนด์กึ่งยาว",
"targetMiddleHalfLong": "กลางกึ่งยาว",
"targetBackhandHalfLong": "แบ็กแฮนด์กึ่งยาว",
"targetForehandShort": "โฟร์แฮนด์สั้น",
"targetMiddleShort": "กลางสั้น",
"targetBackhandShort": "แบ็กแฮนด์สั้น",
"toTarget": "ไปยัง"
}
}

View File

@@ -22,7 +22,41 @@
"next": "Susunod",
"previous": "Nakaraan",
"submit": "Ipasa",
"reset": "I-reset"
"reset": "I-reset",
"all": "Lahat",
"today": "Ngayon",
"time": "Oras",
"new": "Bago",
"update": "I-update",
"create": "Lumikha",
"remove": "Alisin",
"select": "Pumili",
"download": "I-download",
"choose": "Pumili",
"apply": "Ilapat",
"clear": "Burahin",
"details": "Mga detalye",
"view": "Tingnan",
"name": "Pangalan",
"date": "Petsa",
"status": "Katayuan",
"type": "Uri",
"description": "Paglalarawan",
"active": "Aktibo",
"inactive": "Hindi aktibo",
"enabled": "Pinagana",
"disabled": "Hindi pinagana",
"required": "Kinakailangan",
"optional": "Opsyonal",
"in": "sa",
"min": "Min",
"minutes": "Minuto",
"hours": "Oras",
"days": "Araw",
"weeks": "Linggo",
"months": "Buwan",
"years": "Taon",
"ok": "OK"
},
"navigation": {
"home": "Home",
@@ -41,13 +75,16 @@
"logs": "Mga system log",
"memberTransfer": "Paglipat ng miyembro",
"myTischtennisAccount": "myTischtennis Account",
"clickTtAccount": "HTTV / click-TT Account",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "Mga personal na setting",
"logout": "Mag-logout",
"login": "Mag-login",
"register": "Magrehistro",
"dailyBusiness": "Araw-araw na negosyo",
"competitions": "Mga kompetisyon",
"settings": "Mga setting"
"settings": "Mga setting",
"backToHome": "Bumalik sa home"
},
"club": {
"select": "Pumili ng club",
@@ -56,7 +93,20 @@
"load": "I-load",
"name": "Pangalan ng club",
"create": "Gumawa ng club",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"createTitle": "Gumawa ng club",
"members": "Mga miyembro",
"trainingDiary": "Talaarawan ng pagsasanay",
"noAccess": "Wala ka pang pahintulot na ma-access ang club na ito.",
"requestAccess": "Humiling ng access",
"openRequests": "Mga nakabinbing hiling sa access",
"title": "Club",
"openAccessRequests": "Mga nakabinbing hiling sa access",
"diary": "Talaarawan ng pagsasanay",
"accessDenied": "Hindi pinapayagan ang access sa club na ito.",
"errorLoadingRequests": "Error sa pag-load ng mga nakabinbing hiling",
"accessRequested": "Naipadala na ang hiling sa access.",
"accessRequestPending": "Humiling ka na ng access sa club na ito. Maghintay lamang.",
"accessRequestFailed": "Hindi naipadala ang hiling sa access."
},
"auth": {
"login": "Mag-login",
@@ -331,6 +381,106 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"title": "Mga miyembro",
"memberInfo": "Impormasyon ng miyembro",
"activeMembers": "Mga aktibong miyembro",
"testMembers": "Mga trial na miyembro",
"inactiveMembers": "Mga hindi aktibong miyembro",
"generatePhoneList": "Gumawa ng listahan ng telepono",
"onlyActiveMembers": "Tanging mga aktibong miyembro lamang ang ilalabas",
"updateRatings": "I-update ang TTR/QTTR mula sa myTischtennis",
"updating": "Nag-a-update...",
"transferMembers": "Ilipat ang mga miyembro",
"newMember": "Bagong miyembro",
"editMember": "I-edit ang miyembro",
"createNewMember": "Lumikha ng bagong miyembro",
"firstName": "Pangalan",
"lastName": "Apelyido",
"street": "Kalye",
"postalCode": "Postal code",
"city": "Lungsod",
"birthdate": "Petsa ng kapanganakan",
"phones": "Mga numero ng telepono",
"emails": "Mga email address",
"addPhone": "Magdagdag ng numero ng telepono",
"addEmail": "Magdagdag ng email address",
"phoneNumber": "Numero ng telepono",
"emailAddress": "Email address",
"parent": "Magulang",
"parentName": "Pangalan (hal. ina, ama)",
"primary": "Pangunahin",
"gender": "Kasarian",
"genderUnknown": "Hindi alam",
"genderMale": "Lalaki",
"genderFemale": "Babae",
"genderDiverse": "Iba pa",
"picsInInternetAllowed": "Pinapayagan ang larawan sa internet",
"testMembership": "Trial membership",
"memberFormHandedOver": "Naibigay na ang form ng miyembro",
"trainingGroups": "Mga grupo ng pagsasanay",
"noGroupsAssigned": "Walang grupong nakatalaga",
"noGroupsAvailable": "Walang available na grupo",
"addGroup": "Magdagdag ng grupo...",
"remove": "Alisin",
"image": "Larawan",
"selectFile": "Pumili ng file",
"camera": "Camera",
"imagePreview": "Preview ng larawan ng miyembro",
"change": "Baguhin",
"create": "Lumikha",
"clearFields": "Burahin ang mga field",
"showInactiveMembers": "Ipakita ang mga hindi aktibong miyembro",
"ageGroup": "Pangkat ng edad",
"adults": "Adulto (20+)",
"j19": "J19 (19 pababa)",
"j17": "J17 (17 pababa)",
"j15": "J15 (15 pababa)",
"j13": "J13 (13 pababa)",
"j11": "J11 (11 pababa)",
"clearFilters": "I-reset ang mga filter",
"imageInternet": "Larawan (net?)",
"testMember": "Trial",
"name": "Apelyido, Pangalan",
"ttrQttr": "TTR / QTTR",
"address": "Address",
"active": "Aktibo",
"actions": "Mga aksyon",
"phoneNumberShort": "Telepono",
"emailAddressShort": "Email",
"trainingParticipations": "Paglahok sa pagsasanay",
"memberImage": "Larawan ng miyembro",
"inactive": "hindi aktibo",
"sixOrMoreParticipations": "6 o higit pang paglahok sa pagsasanay",
"threeOrMoreParticipations": "3 o higit pang paglahok sa pagsasanay",
"noTestMembership": "Hindi na trial member",
"formHandedOver": "Naibigay na ang form ng miyembro",
"deactivateMember": "I-deactivate ang miyembro",
"notes": "Mga tala",
"exercises": "Mga ehersisyo",
"memberImages": "Mga larawan ng miyembro",
"testMembershipRemoved": "Inalis na ang trial membership.",
"errorRemovingTestMembership": "Error sa pag-alis ng trial membership.",
"formMarkedAsHandedOver": "Namarkahan bilang naibigay na ang form ng miyembro.",
"errorMarkingForm": "Error sa pagmamarka ng form.",
"deactivateMemberTitle": "I-deactivate ang miyembro",
"deactivateMemberConfirm": "Sigurado ka bang ide-deactivate si \"{name}\"?",
"memberDeactivated": "Na-deactivate na ang miyembro",
"errorDeactivatingMember": "Error sa pag-deactivate ng miyembro",
"errorSavingMember": "Error sa pag-save ng miyembro",
"errorAddingToGroup": "Error sa pagdagdag sa grupo",
"errorRemovingFromGroup": "Error sa pag-alis mula sa grupo",
"imageUpdated": "Na-update na ang larawan",
"errorRotatingImage": "Error sa pag-ikot ng larawan",
"imageDeleted": "Nabura na ang larawan.",
"errorDeletingImage": "Hindi mabura ang larawan",
"primaryImageUpdated": "Na-update na ang pangunahing larawan.",
"errorSettingPrimaryImage": "Hindi maitakda ang pangunahing larawan",
"errorUploadingImage": "Hindi ma-upload ang larawan",
"errorLoadingImage": "Error sa pag-load ng larawan",
"phoneList": "ListahanNgTelepono.pdf",
"errorLoadingTrainingParticipations": "Error sa pag-load ng paglahok sa pagsasanay",
"errorUpdatingRatings": "Error sa pag-update ng mga TTR/QTTR value",
"errorTransfer": "Error sa paglipat",
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
@@ -341,11 +491,17 @@
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeActiveDataIncomplete": "Aktibo + hindi kumpleto ang datos",
"scopeDataIncomplete": "Hindi kumpleto ang datos",
"scopeInactive": "Inactive",
"searchAndFilter": "Paghahanap at mga filter",
"bulkActions": "Mga bulk action",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"editorAssignTrainingGroupHint": "Mangyaring magtalaga ng kahit isang grupo ng pagsasanay.",
"editorRecommendedEntry": "Inirerekomendang entry",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
@@ -363,7 +519,7 @@
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"status": "Katayuan",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
@@ -390,17 +546,33 @@
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"ageRange": "Edad mula - hanggang",
"ageFromPlaceholder": "mula",
"ageToPlaceholder": "hanggang",
"age": "Age",
"dataQuality": "Kalidad ng datos",
"dataQualityComplete": "Kumpleto ang datos",
"dataIssueBirthdate": "Kulang ang petsa ng kapanganakan",
"dataIssuePhone": "Kulang ang telepono",
"dataIssueEmail": "Kulang ang email",
"dataIssueAddress": "Kulang ang address",
"dataIssueGender": "Hindi malinaw ang kasarian",
"dataIssueTrainingGroup": "Kulang ang grupo ng pagsasanay",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckDataQuality": "Suriin ang kalidad ng datos",
"taskAssignTrainingGroup": "Magtalaga ng grupo ng pagsasanay",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionReview": "Buksan",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"showTtrHistory": "Ipakita ang TTR history",
"missingTtrHistoryId": "Walang naka-save na myTischtennis ID",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
@@ -422,5 +594,212 @@
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
},
"diary": {
"title": "Talaarawan ng pagsasanay",
"date": "Petsa",
"noEntries": "Walang entry",
"deleteDate": "Burahin ang petsa",
"createNew": "Lumikha ng bago",
"gallery": "Gallery ng mga miyembro",
"galleryCreating": "Ginagawa ang gallery…",
"selectTrainingGroup": "Pumili ng grupo ng pagsasanay",
"selectTrainingGroupPlaceholder": "Mangyaring pumili...",
"suggestion": "Mungkahi",
"nextAppointment": "Susunod na schedule",
"applySuggestion": "Ilapat ang mungkahi",
"skipSuggestion": "Magpatuloy nang walang mungkahi",
"createNewDate": "Lumikha ng bagong petsa",
"activeTrainingDay": "Aktibong araw ng pagsasanay",
"trainingDaySection": "Araw ng pagsasanay",
"trainingDayChecklist": "Checklist ng pagkumpleto",
"trainingStart": "Simula ng pagsasanay",
"trainingEnd": "Pagtatapos ng pagsasanay",
"trainingWindow": "Oras ng pagsasanay",
"trainingWindowUnset": "Hindi pa naitakda",
"groupsLabel": "Mga grupo",
"groupsSection": "Mga grupo",
"createDate": "Lumikha ng petsa",
"editTrainingTimes": "I-edit ang oras ng pagsasanay",
"updateTimes": "I-update ang oras",
"groupManagement": "Pamamahala ng grupo",
"createGroups": "Lumikha ng mga grupo",
"trainingPlan": "Plano ng pagsasanay",
"planActivitiesCount": "Mga aktibidad sa plano",
"timeblocksCount": "Mga time block",
"planEmptyState": "Wala pang nakalagay sa plano ng pagsasanay.",
"planAddHint": "Magdagdag ng bagong item sa plano gamit ang mga aksyon sa itaas.",
"startTime": "Oras ng simula",
"group": "Grupo...",
"timeblock": "Time block",
"assignParticipants": "Magtalaga ng mga kalahok",
"addTimeblock": "Time block",
"activities": "Mga aktibidad",
"freeActivities": "Libreng aktibidad",
"noFreeActivitiesYet": "Wala pang naitalang libreng aktibidad.",
"addActivity": "Magdagdag ng aktibidad",
"bookAccident": "Magtala ng aksidente",
"activity": "Aktibidad",
"duration": "Tagal",
"activityImage": "Larawan ng aktibidad",
"activityDrawing": "Guhit ng aktibidad",
"today": "Ngayon",
"existingGroups": "Mga kasalukuyang grupo",
"leader": "Tagapanguna",
"deleteGroup": "Burahin ang grupo",
"numberOfGroups": "Bilang ng grupo",
"addGroup": "Magdagdag ng grupo",
"activityOrTimeblock": "Aktibidad / time block",
"durationMinutes": "Tagal (min)",
"standardActivities": "Mga karaniwang aktibidad",
"standardDurationShort": "min",
"standardActivityAddError": "Hindi maidagdag ang karaniwang aktibidad.",
"addGroupActivity": "Magdagdag ng aktibidad ng grupo",
"addGroupButton": "+ Grupo",
"all": "Lahat",
"selectGroup": "Pumili ng grupo...",
"activityPlaceholder": "Aktibidad",
"assignShort": "Italaga",
"statusReadyShort": "Handa",
"statusOpenShort": "Bukas",
"openPlanItemsLabel": "Katayuan ng plano",
"openPlanItems": "{count} bukas",
"unassignedPlanItems": "{count} hindi nakatalaga",
"durationExampleLong": "hal. 2x7 o 3*5",
"durationExampleShort": "hal. 2x7",
"showImage": "Ipakita ang larawan/guhit",
"participants": "Mga kalahok",
"searchParticipants": "Maghanap ng kalahok",
"filterAll": "Lahat",
"filterPresent": "Dumalo",
"filterAbsent": "Liban",
"filterExcused": "May paalam",
"filterTest": "Trial",
"participantStatusNone": "Walang katayuan",
"participantStatusExcused": "May paalam",
"participantStatusCancelled": "Kinansela",
"quickAdd": "+ Quick add",
"selectTags": "Pumili ng mga tag",
"createDrawing": "Gumawa ng guhit ng ehersisyo",
"overallActivity": "Kabuuang aktibidad",
"editActivity": "I-edit ang aktibidad",
"editGroupActivity": "I-edit ang aktibidad ng grupo",
"assignParticipantsForGroupActivity": "Magtalaga ng mga kalahok para sa aktibidad ng grupo",
"delete": "Burahin",
"min": "Min",
"errorLoadingPredefinedActivities": "Error sa pag-load ng paunang natukoy na mga aktibidad",
"selectParticipantAndNote": "Mangyaring pumili ng kalahok at maglagay ng tala.",
"selectGroupAndActivity": "Mangyaring pumili ng grupo at maglagay ng aktibidad.",
"dateCannotBeDeleted": "Hindi mabubura ang petsa",
"dateCannotBeDeletedDetails": "May laman pa (plano ng pagsasanay, mga kalahok, aktibidad, aksidente o mga tala).",
"confirmDelete": "Kumpirmahin ang pagbura",
"confirmDeleteDate": "Sigurado ka bang buburahin ang petsang ito?",
"confirmDeleteDateDetails": "Mabubura rin ang lahat ng kaugnay na datos.",
"noParticipants": "Walang kalahok para sa araw ng pagsasanay na ito.",
"mustCreateAtLeastTwoGroups": "Sa unang paggawa, kailangan ng hindi bababa sa 2 grupo!",
"oneGroupAdded": "Matagumpay na naidagdag ang 1 grupo!",
"groupsCreated": "Matagumpay na nalikha ang {count} grupo!",
"errorCreatingGroups": "Error sa paggawa ng mga grupo",
"confirmDeleteGroup": "Sigurado ka bang buburahin ang grupong \"{name}\"?",
"groupDeletedSuccessfully": "Matagumpay na nabura ang grupo!",
"errorDeletingGroup": "Error sa pagbura ng grupo",
"errorCreatingActivity": "Error sa paggawa ng aktibidad",
"trainingPlanAsPDF": "Plano ng pagsasanay bilang PDF",
"trainingPlanPdfShort": "Flow plan bilang PDF",
"trainingDayAsPDF": "I-download ang araw ng pagsasanay bilang PDF",
"trainingDayAsPDFShort": "Araw ng pagsasanay PDF",
"trainingDaySummaryPdfShort": "Buod ng kalahok bilang PDF",
"minutes": "Minuto",
"formHandedOver": "Naibigay na ang form ng miyembro",
"errorOccurred": "May naganap na error. Pakisubukang muli.",
"trainingTimesUpdated": "Matagumpay na na-update ang oras ng pagsasanay.",
"noActiveTrainingDay": "Walang napiling araw ng pagsasanay.",
"statusReady": "Naayos na ang oras at plano ng pagsasanay.",
"statusEmpty": "Wala pang laman ang araw ng pagsasanay na ito.",
"statusInProgress": "Bahagyang naihanda ang araw ng pagsasanay na ito.",
"formMarkedAsHandedOver": "Namarkahan bilang naibigay na ang form ng miyembro",
"errorMarkingForm": "Error sa pagmamarka ng form ng miyembro",
"dateNoLongerCurrent": "Hindi na kasalukuyan ang napiling petsa. Pakisubukan muli.",
"activityRequired": "Mangyaring maglagay ng aktibidad.",
"activityNotFound": "Hindi nahanap ang aktibidad. Mangyaring pumili mula sa listahan."
},
"trainingStats": {
"title": "Mga istatistika ng pagsasanay",
"activeMembers": "Mga aktibong miyembro",
"averageParticipationCurrentMonth": "Karaniwang paglahok (kasalukuyang buwan)",
"averageParticipationLastMonth": "Karaniwang paglahok (nakaraang buwan)",
"averageParticipationQuarter": "Karaniwang paglahok (quarter)",
"averageParticipationHalfYear": "Karaniwang paglahok (kalahating taon)",
"averageParticipationYear": "Karaniwang paglahok (taon)",
"trainingDays": "Mga araw ng pagsasanay (huling 12 buwan)",
"memberParticipations": "Paglahok ng miyembro",
"date": "Petsa",
"weekday": "Araw ng linggo",
"participants": "Mga kalahok",
"name": "Pangalan",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "Petsa ng kapanganakan",
"participations12Months": "Paglahok (12 buwan)",
"participations3Months": "Paglahok (3 buwan)",
"participationsTotal": "Paglahok (kabuuan)",
"lastTraining": "Huling pagsasanay",
"actions": "Mga aksyon",
"showDetails": "Ipakita ang mga detalye"
},
"courtDrawingTool": {
"title": "Guhit ng ehersisyo sa table tennis",
"configureExercise": "I-configure ang ehersisyo",
"stepStartPosition": "1. Panimulang posisyon",
"stepStartPositionHint": "Saang posisyon ng serve magsisimula ang ehersisyo?",
"stepFirstStroke": "2. Unang palo",
"stepFirstStrokeHint": "Itakda ang side at spin para sa unang bola.",
"stepTarget": "3. Target",
"stepTargetHint": "Pumili ng target zone para sa unang palo.",
"stepAdditionalStrokes": "4. Mga kasunod na palo",
"stepAdditionalStrokesHint": "Opsyonal na magdagdag pa ng mga bola bilang listahan.",
"noAdditionalStrokes": "Wala pang mga kasunod na palo.",
"service": "Serve:",
"serviceTitle": "Serve",
"forehand": "Forehand",
"backhand": "Backhand",
"spin": "Spin:",
"underspin": "Underspin",
"topspin": "Topspin",
"sidespin": "Sidespin",
"sideUnderspin": "Side underspin",
"counterSpin": "Counter spin",
"targetPosition": "Posisyon ng target:",
"targetPositionLabel": "Posisyon ng target",
"strokeSide": "Side",
"strokeTypeLabel": "Uri ng palo",
"addStroke": "Magdagdag ng palo",
"preview": "Preview",
"previewHint": "Lilitaw ang graphic kapag kumpleto na ang unang palo.",
"completeFirstStroke": "Tapusin ang unang palo",
"completeFirstStrokeHint": "Piliin ang panimulang posisyon, side, spin at target. Pagkatapos ay lalabas ang graphic.",
"codeLabel": "Code",
"titleLabel": "Pamagat",
"startLeft": "kaliwa",
"startMiddle": "gitna",
"startRight": "kanan",
"strokeTypePush": "Push",
"strokeTypeCounter": "Counter",
"strokeTypeTopspin": "Topspin",
"strokeTypeFlip": "Flip",
"strokeTypeBlock": "Block",
"strokeTypeSmash": "Smash",
"strokeTypeChopDefense": "Chop defense",
"strokeTypeLobDefense": "Lob defense",
"targetForehandLong": "forehand long",
"targetMiddleLong": "middle long",
"targetBackhandLong": "backhand long",
"targetForehandHalfLong": "forehand half-long",
"targetMiddleHalfLong": "middle half-long",
"targetBackhandHalfLong": "backhand half-long",
"targetForehandShort": "forehand short",
"targetMiddleShort": "middle short",
"targetBackhandShort": "backhand short",
"toTarget": "papunta sa"
}
}

View File

@@ -22,7 +22,41 @@
"next": "下一步",
"previous": "上一步",
"submit": "提交",
"reset": "重置"
"reset": "重置",
"all": "全部",
"today": "今天",
"time": "时间",
"new": "新建",
"update": "更新",
"create": "创建",
"remove": "移除",
"select": "选择",
"download": "下载",
"choose": "选择",
"apply": "应用",
"clear": "清除",
"details": "详情",
"view": "查看",
"name": "名称",
"date": "日期",
"status": "状态",
"type": "类型",
"description": "描述",
"active": "活跃",
"inactive": "非活跃",
"enabled": "已启用",
"disabled": "已禁用",
"required": "必填",
"optional": "可选",
"in": "后",
"min": "分",
"minutes": "分钟",
"hours": "小时",
"days": "天",
"weeks": "周",
"months": "个月",
"years": "年",
"ok": "确定"
},
"navigation": {
"home": "首页",
@@ -41,13 +75,16 @@
"logs": "系统日志",
"memberTransfer": "成员转移",
"myTischtennisAccount": "myTischtennis账户",
"clickTtAccount": "HTTV / click-TT 账户",
"clickTtBrowser": "HTTV / click-TT",
"personalSettings": "个人设置",
"logout": "退出登录",
"login": "登录",
"register": "注册",
"dailyBusiness": "日常事务",
"competitions": "比赛",
"settings": "设置"
"settings": "设置",
"backToHome": "返回首页"
},
"club": {
"select": "选择俱乐部",
@@ -56,7 +93,20 @@
"load": "加载",
"name": "俱乐部名称",
"create": "创建俱乐部",
"accessRequestPending": "Access to this club has been requested. Please be patient."
"createTitle": "创建俱乐部",
"members": "成员",
"trainingDiary": "训练日记",
"noAccess": "您尚未获得此俱乐部的访问权限。",
"requestAccess": "申请访问权限",
"openRequests": "待处理的访问申请",
"title": "俱乐部",
"openAccessRequests": "待处理的访问申请",
"diary": "训练日记",
"accessDenied": "无权访问此俱乐部。",
"errorLoadingRequests": "加载待处理申请时出错",
"accessRequested": "已提交访问申请。",
"accessRequestPending": "已申请访问此俱乐部。请稍候。",
"accessRequestFailed": "无法提交访问申请。"
},
"auth": {
"login": "登录",
@@ -331,6 +381,106 @@
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"title": "成员",
"memberInfo": "成员信息",
"activeMembers": "活跃成员",
"testMembers": "试用成员",
"inactiveMembers": "非活跃成员",
"generatePhoneList": "生成电话列表",
"onlyActiveMembers": "仅导出活跃成员",
"updateRatings": "从 myTischtennis 更新 TTR/QTTR",
"updating": "更新中...",
"transferMembers": "转移成员",
"newMember": "新成员",
"editMember": "编辑成员",
"createNewMember": "创建新成员",
"firstName": "名",
"lastName": "姓",
"street": "街道",
"postalCode": "邮政编码",
"city": "城市",
"birthdate": "出生日期",
"phones": "电话号码",
"emails": "电子邮箱地址",
"addPhone": "添加电话号码",
"addEmail": "添加电子邮箱地址",
"phoneNumber": "电话号码",
"emailAddress": "电子邮箱地址",
"parent": "家长",
"parentName": "姓名(例如:母亲、父亲)",
"primary": "主要",
"gender": "性别",
"genderUnknown": "未知",
"genderMale": "男",
"genderFemale": "女",
"genderDiverse": "其他",
"picsInInternetAllowed": "允许在互联网上发布照片",
"testMembership": "试用会员",
"memberFormHandedOver": "会员表格已交付",
"trainingGroups": "训练组",
"noGroupsAssigned": "未分配任何分组",
"noGroupsAvailable": "没有可用分组",
"addGroup": "添加分组...",
"remove": "移除",
"image": "图片",
"selectFile": "选择文件",
"camera": "相机",
"imagePreview": "成员图片预览",
"change": "更改",
"create": "创建",
"clearFields": "清空字段",
"showInactiveMembers": "显示非活跃成员",
"ageGroup": "年龄组",
"adults": "成人20岁以上",
"j19": "J1919岁及以下",
"j17": "J1717岁及以下",
"j15": "J1515岁及以下",
"j13": "J1313岁及以下",
"j11": "J1111岁及以下",
"clearFilters": "重置筛选",
"imageInternet": "图片(网络)",
"testMember": "试用",
"name": "姓名",
"ttrQttr": "TTR / QTTR",
"address": "地址",
"active": "活跃",
"actions": "操作",
"phoneNumberShort": "电话",
"emailAddressShort": "邮箱",
"trainingParticipations": "训练参与次数",
"memberImage": "成员图片",
"inactive": "非活跃",
"sixOrMoreParticipations": "训练参与 6 次或以上",
"threeOrMoreParticipations": "训练参与 3 次或以上",
"noTestMembership": "不再是试用会员",
"formHandedOver": "会员表格已交付",
"deactivateMember": "停用成员",
"notes": "备注",
"exercises": "练习",
"memberImages": "成员图片",
"testMembershipRemoved": "试用会员资格已移除。",
"errorRemovingTestMembership": "移除试用会员资格时出错。",
"formMarkedAsHandedOver": "已将会员表格标记为已交付。",
"errorMarkingForm": "标记表格时出错。",
"deactivateMemberTitle": "停用成员",
"deactivateMemberConfirm": "确定要停用“{name}”吗?",
"memberDeactivated": "成员已停用",
"errorDeactivatingMember": "停用成员时出错",
"errorSavingMember": "保存成员时出错",
"errorAddingToGroup": "添加到分组时出错",
"errorRemovingFromGroup": "从分组移除时出错",
"imageUpdated": "图片已更新",
"errorRotatingImage": "旋转图片时出错",
"imageDeleted": "图片已删除。",
"errorDeletingImage": "无法删除图片",
"primaryImageUpdated": "主图片已更新。",
"errorSettingPrimaryImage": "无法设置主图片",
"errorUploadingImage": "无法上传图片",
"errorLoadingImage": "加载图片时出错",
"phoneList": "电话列表.pdf",
"errorLoadingTrainingParticipations": "加载训练参与记录时出错",
"errorUpdatingRatings": "更新 TTR/QTTR 时出错",
"errorTransfer": "转移时出错",
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
@@ -341,11 +491,17 @@
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeActiveDataIncomplete": "活跃 + 数据不完整",
"scopeDataIncomplete": "数据不完整",
"scopeInactive": "Inactive",
"searchAndFilter": "搜索和筛选",
"bulkActions": "批量操作",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"editorAssignTrainingGroupHint": "请至少分配一个训练组。",
"editorRecommendedEntry": "建议填写",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
@@ -363,7 +519,7 @@
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"status": "状态",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
@@ -390,17 +546,33 @@
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"ageRange": "年龄范围",
"ageFromPlaceholder": "从",
"ageToPlaceholder": "到",
"age": "Age",
"dataQuality": "数据质量",
"dataQualityComplete": "数据完整",
"dataIssueBirthdate": "缺少出生日期",
"dataIssuePhone": "缺少电话号码",
"dataIssueEmail": "缺少电子邮箱地址",
"dataIssueAddress": "缺少地址",
"dataIssueGender": "性别未明确",
"dataIssueTrainingGroup": "缺少训练组",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckDataQuality": "检查数据质量",
"taskAssignTrainingGroup": "分配训练组",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionReview": "打开",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"showTtrHistory": "显示 TTR 历史",
"missingTtrHistoryId": "未保存 myTischtennis ID",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
@@ -422,5 +594,212 @@
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
},
"diary": {
"title": "训练日记",
"date": "日期",
"noEntries": "没有条目",
"deleteDate": "删除日期",
"createNew": "新建",
"gallery": "成员图库",
"galleryCreating": "正在生成图库…",
"selectTrainingGroup": "选择训练组",
"selectTrainingGroupPlaceholder": "请选择...",
"suggestion": "建议",
"nextAppointment": "下一个时间",
"applySuggestion": "应用建议",
"skipSuggestion": "不使用建议继续",
"createNewDate": "创建新日期",
"activeTrainingDay": "当前训练日",
"trainingDaySection": "训练日",
"trainingDayChecklist": "完成检查",
"trainingStart": "训练开始",
"trainingEnd": "训练结束",
"trainingWindow": "训练时间段",
"trainingWindowUnset": "尚未设置",
"groupsLabel": "分组",
"groupsSection": "分组",
"createDate": "创建日期",
"editTrainingTimes": "编辑训练时间",
"updateTimes": "更新时间",
"groupManagement": "分组管理",
"createGroups": "创建分组",
"trainingPlan": "训练计划",
"planActivitiesCount": "计划活动",
"timeblocksCount": "时间块",
"planEmptyState": "训练计划中还没有任何内容。",
"planAddHint": "可通过上方操作添加新的计划项目。",
"startTime": "开始时间",
"group": "分组...",
"timeblock": "时间块",
"assignParticipants": "分配参与者",
"addTimeblock": "时间块",
"activities": "活动",
"freeActivities": "自由活动",
"noFreeActivitiesYet": "尚未记录自由活动。",
"addActivity": "添加活动",
"bookAccident": "记录事故",
"activity": "活动",
"duration": "时长",
"activityImage": "活动图片",
"activityDrawing": "活动图示",
"today": "今天",
"existingGroups": "现有分组",
"leader": "负责人",
"deleteGroup": "删除分组",
"numberOfGroups": "分组数量",
"addGroup": "添加分组",
"activityOrTimeblock": "活动 / 时间块",
"durationMinutes": "时长(分)",
"standardActivities": "标准活动",
"standardDurationShort": "分",
"standardActivityAddError": "无法添加标准活动。",
"addGroupActivity": "添加分组活动",
"addGroupButton": "+ 分组",
"all": "全部",
"selectGroup": "选择分组...",
"activityPlaceholder": "活动",
"assignShort": "分配",
"statusReadyShort": "已就绪",
"statusOpenShort": "未完成",
"openPlanItemsLabel": "计划状态",
"openPlanItems": "{count} 项未完成",
"unassignedPlanItems": "{count} 项未分配",
"durationExampleLong": "例如2x7 或 3*5",
"durationExampleShort": "例如2x7",
"showImage": "显示图片/图示",
"participants": "参与者",
"searchParticipants": "搜索参与者",
"filterAll": "全部",
"filterPresent": "出席",
"filterAbsent": "缺席",
"filterExcused": "已请假",
"filterTest": "试用",
"participantStatusNone": "无状态",
"participantStatusExcused": "已请假",
"participantStatusCancelled": "已取消",
"quickAdd": "+ 快速添加",
"selectTags": "选择标签",
"createDrawing": "创建练习图",
"overallActivity": "整体活动",
"editActivity": "编辑活动",
"editGroupActivity": "编辑分组活动",
"assignParticipantsForGroupActivity": "为分组活动分配参与者",
"delete": "删除",
"min": "分",
"errorLoadingPredefinedActivities": "加载预定义活动时出错",
"selectParticipantAndNote": "请选择一位参与者并输入备注文本。",
"selectGroupAndActivity": "请选择一个分组并输入活动。",
"dateCannotBeDeleted": "无法删除该日期",
"dateCannotBeDeletedDetails": "仍有内容存在(训练计划、参与者、活动、事故或备注)。",
"confirmDelete": "确认删除",
"confirmDeleteDate": "确定要删除此日期吗?",
"confirmDeleteDateDetails": "所有相关数据也将一并删除。",
"noParticipants": "该训练日没有参与者。",
"mustCreateAtLeastTwoGroups": "首次创建时至少需要 2 个分组。",
"oneGroupAdded": "已成功添加 1 个分组。",
"groupsCreated": "已成功创建 {count} 个分组。",
"errorCreatingGroups": "创建分组时出错",
"confirmDeleteGroup": "确定要删除分组“{name}”吗?",
"groupDeletedSuccessfully": "分组已成功删除。",
"errorDeletingGroup": "删除分组时出错",
"errorCreatingActivity": "创建活动时出错",
"trainingPlanAsPDF": "将训练计划导出为 PDF",
"trainingPlanPdfShort": "流程计划 PDF",
"trainingDayAsPDF": "将训练日下载为 PDF",
"trainingDayAsPDFShort": "训练日 PDF",
"trainingDaySummaryPdfShort": "参与者概览 PDF",
"minutes": "分钟",
"formHandedOver": "会员表格已交付",
"errorOccurred": "发生错误。请重试。",
"trainingTimesUpdated": "训练时间已成功更新。",
"noActiveTrainingDay": "未选择训练日。",
"statusReady": "时间和训练计划已维护完成。",
"statusEmpty": "该训练日仍为空。",
"statusInProgress": "该训练日已部分准备。",
"formMarkedAsHandedOver": "已将会员表格标记为已交付",
"errorMarkingForm": "标记会员表格时出错",
"dateNoLongerCurrent": "所选日期已不是最新状态。请重试。",
"activityRequired": "请输入活动。",
"activityNotFound": "未找到活动。请从列表中选择。"
},
"trainingStats": {
"title": "训练统计",
"activeMembers": "活跃成员",
"averageParticipationCurrentMonth": "平均参与人数(本月)",
"averageParticipationLastMonth": "平均参与人数(上月)",
"averageParticipationQuarter": "平均参与人数(季度)",
"averageParticipationHalfYear": "平均参与人数(半年)",
"averageParticipationYear": "平均参与人数(全年)",
"trainingDays": "训练日(近 12 个月)",
"memberParticipations": "成员参与次数",
"date": "日期",
"weekday": "星期",
"participants": "参与者",
"name": "姓名",
"ttr": "TTR",
"qttr": "QTTR",
"birthdate": "出生日期",
"participations12Months": "参与次数12 个月)",
"participations3Months": "参与次数3 个月)",
"participationsTotal": "参与次数(总计)",
"lastTraining": "最近训练",
"actions": "操作",
"showDetails": "显示详情"
},
"courtDrawingTool": {
"title": "乒乓球练习示意图",
"configureExercise": "配置练习",
"stepStartPosition": "1. 起始位置",
"stepStartPositionHint": "练习从哪个发球位置开始?",
"stepFirstStroke": "2. 第一拍",
"stepFirstStrokeHint": "设置第一球的击球面和旋转。",
"stepTarget": "3. 目标",
"stepTargetHint": "选择第一拍的目标区域。",
"stepAdditionalStrokes": "4. 后续击球",
"stepAdditionalStrokesHint": "可选地将后续来球添加为列表。",
"noAdditionalStrokes": "尚未添加后续击球。",
"service": "发球:",
"serviceTitle": "发球",
"forehand": "正手",
"backhand": "反手",
"spin": "旋转:",
"underspin": "下旋",
"topspin": "上旋",
"sidespin": "侧旋",
"sideUnderspin": "侧下旋",
"counterSpin": "逆旋转",
"targetPosition": "目标位置:",
"targetPositionLabel": "目标位置",
"strokeSide": "击球面",
"strokeTypeLabel": "击球方式",
"addStroke": "添加击球",
"preview": "预览",
"previewHint": "第一拍设置完整后将显示图示。",
"completeFirstStroke": "完成第一拍",
"completeFirstStrokeHint": "请选择起始位置、击球面、旋转和目标,随后会显示图示。",
"codeLabel": "缩写",
"titleLabel": "标题",
"startLeft": "左",
"startMiddle": "中",
"startRight": "右",
"strokeTypePush": "搓球",
"strokeTypeCounter": "反击",
"strokeTypeTopspin": "上旋",
"strokeTypeFlip": "挑打",
"strokeTypeBlock": "挡球",
"strokeTypeSmash": "扣杀",
"strokeTypeChopDefense": "削球防守",
"strokeTypeLobDefense": "高吊防守",
"targetForehandLong": "正手长",
"targetMiddleLong": "中路长",
"targetBackhandLong": "反手长",
"targetForehandHalfLong": "正手半长",
"targetMiddleHalfLong": "中路半长",
"targetBackhandHalfLong": "反手半长",
"targetForehandShort": "正手短",
"targetMiddleShort": "中路短",
"targetBackhandShort": "反手短",
"toTarget": "到"
}
}

View File

@@ -59,7 +59,7 @@
<BaseDialog
:model-value="!!selectedMemberPreview"
title="Mitgliedsdetails"
:title="$t('members.memberDetails')"
size="large"
:width="1080"
max-width="95vw"
@@ -382,7 +382,7 @@
type="button"
class="rating-button"
:disabled="!member.myTischtennisPlayerId && !member.ttr && !member.qttr"
:title="member.myTischtennisHistoryPlayerId || member.myTischtennisPlayerId || member.ttr || member.qttr ? 'TTR-Historie anzeigen' : 'Keine myTischtennis-ID hinterlegt'"
:title="member.myTischtennisHistoryPlayerId || member.myTischtennisPlayerId || member.ttr || member.qttr ? $t('members.showTtrHistory') : $t('members.missingTtrHistoryId')"
@click.stop="openTtrHistoryDialog(member)"
>
<span v-if="member.ttr || member.qttr">