926 lines
47 KiB
JavaScript
926 lines
47 KiB
JavaScript
// ── Internationalisation ───────────────────────────────────────────────────────
|
|
// Depends on api.js (getLang)
|
|
|
|
const TRANSLATIONS = {
|
|
en: {
|
|
// ── Navigation ──
|
|
'nav.dashboard': 'Dashboard',
|
|
'nav.gear': 'My Gear',
|
|
'nav.reloads': 'My Reloads',
|
|
'nav.tools': 'Tools',
|
|
'nav.photos': 'Photos',
|
|
'nav.sessions': 'Sessions',
|
|
'nav.profile': 'Profile',
|
|
'nav.signout': 'Sign out',
|
|
'nav.signin': 'Sign in',
|
|
'nav.register': 'Register',
|
|
'nav.admin': 'Admin',
|
|
// ── Index ──
|
|
'index.lead': 'Your all-in-one platform to manage your firearms & gear, log and analyse your shooting performance, develop custom reloads, and share your results with other shooters.',
|
|
'index.cta': 'Get started free',
|
|
'index.cta2': 'Explore tools',
|
|
'index.cta3': 'Ready to elevate your shooting?',
|
|
'index.cta4': 'Create your account',
|
|
'index.feat.title': 'Everything a serious shooter needs',
|
|
'index.feat.sub': 'From the first round to competition-level analysis.',
|
|
'index.feat.gear.title': 'Gear Inventory',
|
|
'index.feat.gear.desc': 'Catalogue every firearm, scope, suppressor, bipod and magazine you own. Build custom rigs and share them publicly.',
|
|
'index.feat.sessions.title': 'Session Logging',
|
|
'index.feat.sessions.desc': 'Log every shooting session with chrono data, shot groups, weather conditions and notes in one place.',
|
|
'index.feat.analysis.title': 'Performance Analysis',
|
|
'index.feat.analysis.desc': 'Visualise velocity SD, ES, group sizes over time and identify trends in your shooting performance.',
|
|
'index.feat.reload.title': 'Reload Development',
|
|
'index.feat.reload.desc': 'Build load recipes, vary powder charge across batches, link each batch to shot groups and find the most accurate charge.',
|
|
'index.recent.title': 'Recent Analyses',
|
|
'index.recent.subtitle': 'Publicly shared chronograph sessions — no account required to view.',
|
|
'index.recent.upload': 'Upload your own',
|
|
'index.recent.empty': 'No analyses uploaded yet. Be the first!',
|
|
// ── Dashboard ──
|
|
'dash.title': 'Dashboard',
|
|
'dash.welcome': 'Welcome back!',
|
|
'dash.welcome.name': 'Welcome back, {name}!',
|
|
'dash.stat.gear': 'Gear items',
|
|
'dash.stat.rigs': 'Rigs',
|
|
'dash.stat.recipes': 'Load recipes',
|
|
'dash.stat.batches': 'Ammo batches',
|
|
'dash.quicklinks': 'Quick links',
|
|
'dash.quicklink.gears': 'Manage gears & rigs',
|
|
'dash.quicklink.reloads': 'Reload development',
|
|
'dash.quicklink.sessions': 'Shooting sessions',
|
|
'dash.quicklink.chrono': 'Chronograph analyses',
|
|
'dash.quicklink.profile': 'My profile',
|
|
'profile.link.analyses': 'My analyses',
|
|
'profile.link.sessions': 'My sessions',
|
|
'profile.link.photos': 'My photos',
|
|
'profile.link.gears': 'My gears',
|
|
// ── Gear page ──
|
|
'gear.title': 'Gears & Rigs',
|
|
'gear.tab.inv': 'My Inventory',
|
|
'gear.tab.rigs': 'My Rigs',
|
|
'gear.my.gear': 'My gear',
|
|
'gear.add': 'Add gear',
|
|
'gear.my.rigs': 'My rigs',
|
|
'gear.new.rig': 'New rig',
|
|
'gear.empty.inv': "You haven't added any gear yet.",
|
|
'gear.empty.rigs': "You haven't created any rig yet.",
|
|
// ── Reloads page ──
|
|
'reload.title': 'Reload Development',
|
|
'reload.recipes': 'Recipes',
|
|
'reload.no.sel': 'Select a recipe to view its batches',
|
|
// ── Profile page ──
|
|
'profile.title': 'My Profile',
|
|
'profile.tab.prof': 'Profile',
|
|
'profile.tab.pw': 'Change password',
|
|
'profile.avatar.upload': 'Upload avatar',
|
|
'profile.personal.title': 'Personal information',
|
|
'profile.form.first_name': 'First name',
|
|
'profile.form.last_name': 'Last name',
|
|
'profile.form.email': 'Email',
|
|
'profile.form.email.ro': '(read-only)',
|
|
'profile.form.save': 'Save changes',
|
|
'profile.pw.title': 'Change password',
|
|
'profile.form.pw.current': 'Current password',
|
|
'profile.form.pw.new': 'New password',
|
|
'profile.form.pw.confirm': 'Confirm new password',
|
|
'profile.form.pw.change': 'Change password',
|
|
'profile.rigs.title': 'My rigs',
|
|
'profile.rigs.empty': 'You have no rigs yet.',
|
|
'profile.table.name': 'Name',
|
|
'profile.table.items': 'Items',
|
|
'profile.table.visibility': 'Visibility',
|
|
// ── Admin page ──
|
|
'admin.title': 'Administration',
|
|
'admin.tab.users': 'Users',
|
|
'admin.tab.catalog': 'Gear catalog',
|
|
'admin.tab.comps': 'Reload components',
|
|
'admin.tab.calibers': 'Calibers',
|
|
'admin.add.gear': 'Add gear item',
|
|
'admin.users.new': 'New user',
|
|
'admin.users.create.title': 'Create new user',
|
|
'admin.users.username': 'Username',
|
|
'admin.users.email': 'Email',
|
|
'admin.users.password': 'Password',
|
|
'admin.users.staff': 'Staff / Admin',
|
|
'admin.users.first_name': 'First name',
|
|
'admin.users.last_name': 'Last name',
|
|
'admin.users.create.btn': 'Create user',
|
|
'admin.table.username': 'Username',
|
|
'admin.table.email': 'Email',
|
|
'admin.table.name': 'Name',
|
|
'admin.table.staff': 'Staff',
|
|
'admin.table.active': 'Active',
|
|
'admin.table.joined': 'Joined',
|
|
'admin.filter.all_types': 'All types',
|
|
'admin.filter.firearms': 'Firearms',
|
|
'admin.filter.scopes': 'Scopes',
|
|
'admin.filter.suppressors': 'Suppressors',
|
|
'admin.filter.bipods': 'Bipods',
|
|
'admin.filter.magazines': 'Magazines',
|
|
'admin.filter.all_statuses': 'All statuses',
|
|
'admin.filter.pending': 'Pending',
|
|
'admin.filter.verified': 'Verified',
|
|
'admin.filter.rejected': 'Rejected',
|
|
'admin.catalog.col.type': 'Type',
|
|
'admin.catalog.col.brand': 'Brand',
|
|
'admin.catalog.col.model': 'Model',
|
|
'admin.catalog.col.caliber': 'Caliber',
|
|
'admin.catalog.col.status': 'Status',
|
|
'admin.add.btn': 'Add to catalog',
|
|
'admin.comp.primers': 'Primers',
|
|
'admin.comp.brass': 'Brass',
|
|
'admin.comp.bullets': 'Bullets',
|
|
'admin.comp.powders': 'Powders',
|
|
// ── Tools page ──
|
|
'tools.title': 'Tools',
|
|
'tools.subtitle': 'Standalone ballistics and reloading tools — no account required.',
|
|
'tools.ballistics.title': 'Ballistics Calculator',
|
|
'tools.ballistics.desc': 'Point-mass trajectory — drop, wind drift, corrections in MOA/MRAD. No account required.',
|
|
'tools.ballistics.soon': 'Coming soon — trajectory, wind drift and holdover charts.',
|
|
'tools.chrono.title': 'Chronograph Analyser',
|
|
'tools.chrono.desc': 'Upload a CSV from your chrono — get group detection, SD, ES, velocity charts and a PDF report.',
|
|
'tools.open': 'Open',
|
|
'tools.groupsize.title': 'Group Size Calculator',
|
|
'tools.groupsize.desc': 'Annotate a target photo — measure ES, mean radius and scope correction in mm and MOA.',
|
|
'tools.oal.title': 'OAL Calculator',
|
|
'tools.oal.soon': 'Coming soon — calculate optimal cartridge overall length.',
|
|
// ── Sessions page ──
|
|
'sessions.title': 'Shooting Sessions',
|
|
'sessions.subtitle': 'Prepare and record PRS, free practice, or speed shooting sessions.',
|
|
'sessions.soon': 'Coming soon — session logging and analysis will be available here.',
|
|
'sessions.milestone': 'Session logging is part of the next milestone. Stay tuned!',
|
|
'sessions.tab.prs': 'PRS Match',
|
|
'sessions.tab.fp': 'Free Practice',
|
|
'sessions.tab.speed': 'Speed Shooting',
|
|
'sessions.new': 'New Session',
|
|
'sessions.none': 'Select a session or create a new one',
|
|
'sessions.empty': 'No sessions yet.',
|
|
'sessions.delete.confirm': 'Delete this session and all its data?',
|
|
'sessions.meta.competition': 'Competition',
|
|
'sessions.meta.category': 'Category',
|
|
'sessions.meta.date': 'Date',
|
|
'sessions.meta.location': 'Location',
|
|
'sessions.meta.rig': 'Rig',
|
|
'sessions.meta.ammo': 'Ammo',
|
|
'sessions.meta.distance': 'Distance',
|
|
'sessions.meta.target': 'Target',
|
|
'sessions.meta.rounds': 'Rounds fired',
|
|
'sessions.meta.format': 'Format',
|
|
'sessions.weather.title': 'Weather conditions',
|
|
'sessions.weather.temp': 'Temp (°C)',
|
|
'sessions.weather.wind': 'Wind (m/s)',
|
|
'sessions.weather.dir': 'Dir (°)',
|
|
'sessions.weather.humidity': 'Humidity (%)',
|
|
'sessions.weather.pressure': 'Pressure (hPa)',
|
|
'sessions.weather.notes': 'Notes',
|
|
'sessions.weather.save': 'Save weather',
|
|
'sessions.analysis.title': 'Linked analysis',
|
|
'sessions.analysis.none': 'No analysis linked.',
|
|
'sessions.analysis.link': 'Link analysis',
|
|
'sessions.analysis.unlink':'Unlink',
|
|
'sessions.analysis.view': 'View in Chronograph',
|
|
'sessions.analysis.photos':'Photos from this analysis',
|
|
'sessions.stages.title': 'Stages',
|
|
'sessions.stages.add': 'Add Stage',
|
|
'sessions.stages.none': 'No stages yet. Add the first stage to start planning.',
|
|
'sessions.stage.prep': 'Prep',
|
|
'sessions.stage.corrections': 'Scope corrections',
|
|
'sessions.stage.results': 'Results',
|
|
'sessions.stage.target': 'Target',
|
|
'sessions.stage.maxtime': 'Max time',
|
|
'sessions.stage.shots': 'Shots',
|
|
'sessions.stage.notes': 'Notes',
|
|
'sessions.stage.computed.elev': 'Computed elev.',
|
|
'sessions.stage.computed.wind': 'Computed wind.',
|
|
'sessions.stage.actual.elev': 'Actual elev.',
|
|
'sessions.stage.actual.wind': 'Actual wind.',
|
|
'sessions.stage.hits': 'Hits',
|
|
'sessions.stage.score': 'Score',
|
|
'sessions.stage.time': 'Time (s)',
|
|
'sessions.stage.save.corrections': 'Save',
|
|
'sessions.stage.save.results': 'Save results',
|
|
'sessions.stage.badge.done': 'Results recorded',
|
|
'sessions.stage.badge.pending': 'Pending',
|
|
'sessions.create.name': 'Session name',
|
|
'sessions.create.date': 'Date',
|
|
'sessions.create.location':'Location',
|
|
'sessions.create.competition': 'Competition name',
|
|
'sessions.create.category':'Category',
|
|
'sessions.create.distance':'Distance (m)',
|
|
'sessions.create.target': 'Target description',
|
|
'sessions.create.format': 'Format',
|
|
'sessions.create.rig': 'Rig',
|
|
'sessions.create.ammo': 'Ammo',
|
|
'sessions.create.ammo.none':'None',
|
|
'sessions.create.ammo.factory':'Factory',
|
|
'sessions.create.ammo.reload': 'Reloaded batch',
|
|
'sessions.create.ammo.suggest': "Can't find your ammo? Suggest it",
|
|
'sessions.create.ammo.suggest.note': 'Your suggestion will be visible to all once an admin verifies it.',
|
|
'sessions.stage.modal.title': 'Add Stage',
|
|
'sessions.stage.modal.order': 'Stage #',
|
|
'sessions.stage.modal.position': 'Position',
|
|
'sessions.stage.modal.distance': 'Distance (m)',
|
|
'sessions.stage.modal.maxtime': 'Max time (s)',
|
|
'sessions.stage.modal.shots': 'Shots',
|
|
'sessions.stage.modal.tw': 'Target W (cm)',
|
|
'sessions.stage.modal.th': 'Target H (cm)',
|
|
'sessions.stage.modal.notes': 'Prep notes',
|
|
// ── Common ──
|
|
'btn.save': 'Save',
|
|
'btn.cancel': 'Cancel',
|
|
'btn.delete': 'Delete',
|
|
'btn.add': 'Add',
|
|
'btn.edit': 'Edit',
|
|
'btn.verify': 'Verify',
|
|
'btn.reject': 'Reject',
|
|
'btn.search': 'Search',
|
|
'btn.submit': 'Submit',
|
|
},
|
|
|
|
fr: {
|
|
'nav.dashboard': 'Tableau de bord',
|
|
'nav.gear': 'Mon équipement',
|
|
'nav.reloads': 'Mes rechargements',
|
|
'nav.tools': 'Outils',
|
|
'nav.photos': 'Photos',
|
|
'nav.sessions': 'Sessions',
|
|
'nav.profile': 'Profil',
|
|
'nav.signout': 'Se déconnecter',
|
|
'nav.signin': 'Se connecter',
|
|
'nav.register': "S'inscrire",
|
|
'nav.admin': 'Administration',
|
|
'index.lead': 'Votre plateforme tout-en-un pour gérer vos armes et équipements, journaliser vos performances, développer des rechargements et partager vos résultats.',
|
|
'index.cta': 'Commencer gratuitement',
|
|
'index.cta2': 'Explorer les outils',
|
|
'index.cta3': 'Prêt à améliorer vos performances ?',
|
|
'index.cta4': 'Créer votre compte',
|
|
'index.feat.title': 'Tout ce dont un tireur sérieux a besoin',
|
|
'index.feat.sub': "Du premier tir à l'analyse de niveau compétition.",
|
|
'index.feat.gear.title': 'Inventaire équipement',
|
|
'index.feat.gear.desc': "Cataloguez chaque arme, lunette, suppresseur, bipied et chargeur que vous possédez. Créez des configurations personnalisées et partagez-les.",
|
|
'index.feat.sessions.title': 'Journal de sessions',
|
|
'index.feat.sessions.desc': 'Enregistrez chaque session de tir avec les données chrono, groupes de tirs, conditions météo et notes au même endroit.',
|
|
'index.feat.analysis.title': 'Analyse de performance',
|
|
'index.feat.analysis.desc': "Visualisez l'écart-type de vitesse, l'écart extrême, la taille des groupes dans le temps et identifiez vos tendances.",
|
|
'index.feat.reload.title': 'Développement de charges',
|
|
'index.feat.reload.desc': "Créez des recettes de charge, variez la quantité de poudre entre lots, liez chaque lot à des groupes de tirs et trouvez la charge la plus précise.",
|
|
'index.recent.title': 'Analyses récentes',
|
|
'index.recent.subtitle': 'Sessions chronographe partagées publiquement — aucun compte requis.',
|
|
'index.recent.upload': 'Importer la vôtre',
|
|
'index.recent.empty': 'Aucune analyse importée pour l\'instant. Soyez le premier !',
|
|
'dash.title': 'Tableau de bord',
|
|
'dash.welcome': 'Bon retour !',
|
|
'dash.welcome.name': 'Bon retour, {name} !',
|
|
'dash.stat.gear': 'Équipements',
|
|
'dash.stat.rigs': 'Configurations',
|
|
'dash.stat.recipes': 'Recettes de charge',
|
|
'dash.stat.batches': 'Lots de munitions',
|
|
'dash.quicklinks': 'Accès rapide',
|
|
'dash.quicklink.gears': 'Gérer équipements & configs',
|
|
'dash.quicklink.reloads': 'Développement de charges',
|
|
'dash.quicklink.sessions': 'Sessions de tir',
|
|
'dash.quicklink.chrono': 'Analyses chronographe',
|
|
'dash.quicklink.profile': 'Mon profil',
|
|
'profile.link.analyses': 'Mes analyses',
|
|
'profile.link.sessions': 'Mes sessions',
|
|
'profile.link.photos': 'Mes photos',
|
|
'profile.link.gears': 'Mes équipements',
|
|
'gear.title': 'Équipement & Configs',
|
|
'gear.tab.inv': 'Mon inventaire',
|
|
'gear.tab.rigs': 'Mes configs',
|
|
'gear.my.gear': 'Mon équipement',
|
|
'gear.add': 'Ajouter équipement',
|
|
'gear.my.rigs': 'Mes configurations',
|
|
'gear.new.rig': 'Nouvelle config',
|
|
'gear.empty.inv': "Vous n'avez pas encore ajouté d'équipement.",
|
|
'gear.empty.rigs': "Vous n'avez pas encore créé de configuration.",
|
|
'reload.title': 'Développement de charges',
|
|
'reload.recipes': 'Recettes',
|
|
'reload.no.sel': 'Sélectionnez une recette pour voir ses lots',
|
|
'profile.title': 'Mon profil',
|
|
'profile.tab.prof': 'Profil',
|
|
'profile.tab.pw': 'Changer le mot de passe',
|
|
'profile.avatar.upload': 'Charger un avatar',
|
|
'profile.personal.title': 'Informations personnelles',
|
|
'profile.form.first_name': 'Prénom',
|
|
'profile.form.last_name': 'Nom de famille',
|
|
'profile.form.email': 'E-mail',
|
|
'profile.form.email.ro': '(lecture seule)',
|
|
'profile.form.save': 'Enregistrer',
|
|
'profile.pw.title': 'Changer le mot de passe',
|
|
'profile.form.pw.current': 'Mot de passe actuel',
|
|
'profile.form.pw.new': 'Nouveau mot de passe',
|
|
'profile.form.pw.confirm': 'Confirmer le nouveau mot de passe',
|
|
'profile.form.pw.change': 'Changer le mot de passe',
|
|
'profile.rigs.title': 'Mes configurations',
|
|
'profile.rigs.empty': "Vous n'avez pas encore de configuration.",
|
|
'profile.table.name': 'Nom',
|
|
'profile.table.items': 'Éléments',
|
|
'profile.table.visibility': 'Visibilité',
|
|
'admin.title': 'Administration',
|
|
'admin.tab.users': 'Utilisateurs',
|
|
'admin.tab.catalog': 'Catalogue équipement',
|
|
'admin.tab.comps': 'Composants de rechargement',
|
|
'admin.tab.calibers': 'Calibres',
|
|
'admin.add.gear': 'Ajouter un équipement',
|
|
'admin.users.new': 'Nouvel utilisateur',
|
|
'admin.users.create.title': 'Créer un nouvel utilisateur',
|
|
'admin.users.username': "Nom d'utilisateur",
|
|
'admin.users.email': 'E-mail',
|
|
'admin.users.password': 'Mot de passe',
|
|
'admin.users.staff': 'Personnel / Admin',
|
|
'admin.users.first_name': 'Prénom',
|
|
'admin.users.last_name': 'Nom de famille',
|
|
'admin.users.create.btn': "Créer l'utilisateur",
|
|
'admin.table.username': 'Utilisateur',
|
|
'admin.table.email': 'E-mail',
|
|
'admin.table.name': 'Nom',
|
|
'admin.table.staff': 'Personnel',
|
|
'admin.table.active': 'Actif',
|
|
'admin.table.joined': 'Inscription',
|
|
'admin.filter.all_types': 'Tous types',
|
|
'admin.filter.firearms': 'Armes à feu',
|
|
'admin.filter.scopes': 'Lunettes',
|
|
'admin.filter.suppressors': 'Suppresseurs',
|
|
'admin.filter.bipods': 'Bipodes',
|
|
'admin.filter.magazines': 'Chargeurs',
|
|
'admin.filter.all_statuses': 'Tous statuts',
|
|
'admin.filter.pending': 'En attente',
|
|
'admin.filter.verified': 'Vérifié',
|
|
'admin.filter.rejected': 'Rejeté',
|
|
'admin.catalog.col.type': 'Type',
|
|
'admin.catalog.col.brand': 'Marque',
|
|
'admin.catalog.col.model': 'Modèle',
|
|
'admin.catalog.col.caliber': 'Calibre',
|
|
'admin.catalog.col.status': 'Statut',
|
|
'admin.add.btn': 'Ajouter au catalogue',
|
|
'admin.comp.primers': 'Amorces',
|
|
'admin.comp.brass': 'Douilles',
|
|
'admin.comp.bullets': 'Projectiles',
|
|
'admin.comp.powders': 'Poudres',
|
|
'tools.title': 'Outils',
|
|
'tools.subtitle': 'Outils balistiques et de rechargement — aucun compte requis.',
|
|
'tools.ballistics.title': 'Calculateur balistique',
|
|
'tools.ballistics.desc': 'Trajectoire point-masse — chute, dérive au vent, corrections MOA/MRAD. Sans compte.',
|
|
'tools.ballistics.soon': 'Bientôt — courbes de trajectoire, dérive au vent et compensations.',
|
|
'tools.chrono.title': 'Analyseur chronographe',
|
|
'tools.chrono.desc': 'Importez un CSV de votre chrono — détection de groupes, ET, ES, courbes de vitesse et rapport PDF.',
|
|
'tools.open': 'Ouvrir',
|
|
'tools.groupsize.title': 'Calculateur de groupe',
|
|
'tools.groupsize.desc': 'Annotez une photo de cible — mesurez l\'ES, le rayon moyen et la correction lunette en mm et MOA.',
|
|
'tools.oal.title': 'Calculateur OAL',
|
|
'tools.oal.soon': 'Bientôt — calculez la longueur totale optimale de la cartouche.',
|
|
'sessions.title': 'Sessions de tir',
|
|
'sessions.subtitle': 'Préparez et enregistrez vos sessions PRS, entraînement libre ou tir de vitesse.',
|
|
'sessions.soon': "Bientôt disponible — l'enregistrement et l'analyse des sessions seront disponibles ici.",
|
|
'sessions.milestone': "L'enregistrement des sessions fait partie du prochain jalon. Restez à l'écoute !",
|
|
'sessions.tab.prs': 'Match PRS',
|
|
'sessions.tab.fp': 'Entraînement libre',
|
|
'sessions.tab.speed': 'Tir de vitesse',
|
|
'sessions.new': 'Nouvelle session',
|
|
'sessions.none': 'Sélectionnez une session ou créez-en une nouvelle',
|
|
'sessions.empty': 'Aucune session.',
|
|
'sessions.delete.confirm': 'Supprimer cette session et toutes ses données ?',
|
|
'sessions.meta.competition': 'Compétition',
|
|
'sessions.meta.category': 'Catégorie',
|
|
'sessions.meta.date': 'Date',
|
|
'sessions.meta.location': 'Lieu',
|
|
'sessions.meta.rig': 'Configuration',
|
|
'sessions.meta.ammo': 'Munitions',
|
|
'sessions.meta.distance': 'Distance',
|
|
'sessions.meta.target': 'Cible',
|
|
'sessions.meta.rounds': 'Cartouches tirées',
|
|
'sessions.meta.format': 'Format',
|
|
'sessions.weather.title': 'Conditions météo',
|
|
'sessions.weather.temp': 'Temp (°C)',
|
|
'sessions.weather.wind': 'Vent (m/s)',
|
|
'sessions.weather.dir': 'Dir (°)',
|
|
'sessions.weather.humidity': 'Humidité (%)',
|
|
'sessions.weather.pressure': 'Pression (hPa)',
|
|
'sessions.weather.notes': 'Notes',
|
|
'sessions.weather.save': 'Enregistrer météo',
|
|
'sessions.analysis.title': 'Analyse liée',
|
|
'sessions.analysis.none': 'Aucune analyse liée.',
|
|
'sessions.analysis.link': 'Lier une analyse',
|
|
'sessions.analysis.unlink':'Délier',
|
|
'sessions.analysis.view': 'Voir dans le chronographe',
|
|
'sessions.analysis.photos':'Photos de cette analyse',
|
|
'sessions.stages.title': 'Stands',
|
|
'sessions.stages.add': 'Ajouter un stand',
|
|
'sessions.stages.none': 'Aucun stand. Ajoutez le premier pour commencer la préparation.',
|
|
'sessions.stage.prep': 'Préparation',
|
|
'sessions.stage.corrections': 'Corrections lunette',
|
|
'sessions.stage.results': 'Résultats',
|
|
'sessions.stage.target': 'Cible',
|
|
'sessions.stage.maxtime': 'Temps max',
|
|
'sessions.stage.shots': 'Tirs',
|
|
'sessions.stage.notes': 'Notes',
|
|
'sessions.stage.computed.elev': 'Élév. calculée',
|
|
'sessions.stage.computed.wind': 'Dérive calculée',
|
|
'sessions.stage.actual.elev': 'Élév. réelle',
|
|
'sessions.stage.actual.wind': 'Dérive réelle',
|
|
'sessions.stage.hits': 'Touches',
|
|
'sessions.stage.score': 'Score',
|
|
'sessions.stage.time': 'Temps (s)',
|
|
'sessions.stage.save.corrections': 'Enregistrer',
|
|
'sessions.stage.save.results': 'Enregistrer résultats',
|
|
'sessions.stage.badge.done': 'Résultats enregistrés',
|
|
'sessions.stage.badge.pending': 'En attente',
|
|
'sessions.create.name': 'Nom de la session',
|
|
'sessions.create.date': 'Date',
|
|
'sessions.create.location':'Lieu',
|
|
'sessions.create.competition': 'Nom de la compétition',
|
|
'sessions.create.category':'Catégorie',
|
|
'sessions.create.distance':'Distance (m)',
|
|
'sessions.create.target': 'Description de la cible',
|
|
'sessions.create.format': 'Format',
|
|
'sessions.create.rig': 'Configuration',
|
|
'sessions.create.ammo': 'Munitions',
|
|
'sessions.create.ammo.none':'Aucune',
|
|
'sessions.create.ammo.factory':'Industrielles',
|
|
'sessions.create.ammo.reload': 'Lot rechargé',
|
|
'sessions.create.ammo.suggest': 'Munitions introuvables ? Suggérez-les',
|
|
'sessions.create.ammo.suggest.note': 'Votre suggestion sera visible de tous après vérification par un administrateur.',
|
|
'sessions.stage.modal.title': 'Ajouter un stand',
|
|
'sessions.stage.modal.order': 'Stand n°',
|
|
'sessions.stage.modal.position': 'Position',
|
|
'sessions.stage.modal.distance': 'Distance (m)',
|
|
'sessions.stage.modal.maxtime': 'Temps max (s)',
|
|
'sessions.stage.modal.shots': 'Tirs',
|
|
'sessions.stage.modal.tw': 'Largeur cible (cm)',
|
|
'sessions.stage.modal.th': 'Hauteur cible (cm)',
|
|
'sessions.stage.modal.notes': 'Notes de préparation',
|
|
'btn.save': 'Enregistrer',
|
|
'btn.cancel': 'Annuler',
|
|
'btn.delete': 'Supprimer',
|
|
'btn.add': 'Ajouter',
|
|
'btn.edit': 'Modifier',
|
|
'btn.verify': 'Vérifier',
|
|
'btn.reject': 'Rejeter',
|
|
'btn.search': 'Rechercher',
|
|
'btn.submit': 'Soumettre',
|
|
},
|
|
|
|
de: {
|
|
'nav.dashboard': 'Übersicht',
|
|
'nav.gear': 'Mein Equipment',
|
|
'nav.reloads': 'Meine Ladungen',
|
|
'nav.tools': 'Werkzeuge',
|
|
'nav.photos': 'Fotos',
|
|
'nav.sessions': 'Sessions',
|
|
'nav.profile': 'Profil',
|
|
'nav.signout': 'Abmelden',
|
|
'nav.signin': 'Anmelden',
|
|
'nav.register': 'Registrieren',
|
|
'nav.admin': 'Administration',
|
|
'index.lead': 'Ihre Rundum-Plattform zur Verwaltung von Waffen und Ausrüstung, Protokollierung von Schießleistungen, Ladungsentwicklung und Teilen Ihrer Ergebnisse.',
|
|
'index.cta': 'Kostenlos starten',
|
|
'index.cta2': 'Tools entdecken',
|
|
'index.cta3': 'Bereit, Ihr Schießen zu verbessern?',
|
|
'index.cta4': 'Konto erstellen',
|
|
'index.feat.title': 'Alles, was ein ernsthafter Schütze braucht',
|
|
'index.feat.sub': 'Vom ersten Schuss bis zur Wettkampfanalyse.',
|
|
'index.feat.gear.title': 'Ausrüstungsinventar',
|
|
'index.feat.gear.desc': 'Katalogisieren Sie jede Waffe, jedes Zielfernrohr, jeden Schalldämpfer, jedes Zweibein und jedes Magazin. Erstellen und teilen Sie Konfigurationen.',
|
|
'index.feat.sessions.title': 'Session-Protokoll',
|
|
'index.feat.sessions.desc': 'Protokollieren Sie jede Schießsitzung mit Chronodaten, Gruppen, Wetterbedingungen und Notizen an einem Ort.',
|
|
'index.feat.analysis.title': 'Leistungsanalyse',
|
|
'index.feat.analysis.desc': 'Visualisieren Sie Geschwindigkeits-SD, ES, Gruppengrößen über Zeit und erkennen Sie Trends in Ihrer Schießleistung.',
|
|
'index.feat.reload.title': 'Ladungsentwicklung',
|
|
'index.feat.reload.desc': 'Erstellen Sie Ladungsrezepte, variieren Sie die Pulvermenge, verknüpfen Sie Chargen mit Schussgruppen und finden Sie die genaueste Ladung.',
|
|
'index.recent.title': 'Aktuelle Analysen',
|
|
'index.recent.subtitle': 'Öffentlich geteilte Chronographen-Sitzungen — kein Konto zum Ansehen erforderlich.',
|
|
'index.recent.upload': 'Eigene hochladen',
|
|
'index.recent.empty': 'Noch keine Analysen hochgeladen. Seien Sie der Erste!',
|
|
'dash.title': 'Übersicht',
|
|
'dash.welcome': 'Willkommen zurück!',
|
|
'dash.welcome.name': 'Willkommen zurück, {name}!',
|
|
'dash.stat.gear': 'Ausrüstung',
|
|
'dash.stat.rigs': 'Konfigurationen',
|
|
'dash.stat.recipes': 'Ladungsrezepte',
|
|
'dash.stat.batches': 'Munitionschargen',
|
|
'dash.quicklinks': 'Schnellzugriff',
|
|
'dash.quicklink.gears': 'Ausrüstung & Konfigurationen',
|
|
'dash.quicklink.reloads': 'Ladungsentwicklung',
|
|
'dash.quicklink.sessions': 'Schießsitzungen',
|
|
'dash.quicklink.chrono': 'Chronographenanalysen',
|
|
'dash.quicklink.profile': 'Mein Profil',
|
|
'profile.link.analyses': 'Meine Analysen',
|
|
'profile.link.sessions': 'Meine Sitzungen',
|
|
'profile.link.photos': 'Meine Fotos',
|
|
'profile.link.gears': 'Meine Ausrüstung',
|
|
'gear.title': 'Ausrüstung & Konfigurationen',
|
|
'gear.tab.inv': 'Mein Inventar',
|
|
'gear.tab.rigs': 'Meine Konfigs',
|
|
'gear.my.gear': 'Meine Ausrüstung',
|
|
'gear.add': 'Ausrüstung hinzufügen',
|
|
'gear.my.rigs': 'Meine Konfigurationen',
|
|
'gear.new.rig': 'Neue Konfiguration',
|
|
'gear.empty.inv': 'Sie haben noch keine Ausrüstung hinzugefügt.',
|
|
'gear.empty.rigs': 'Sie haben noch keine Konfiguration erstellt.',
|
|
'reload.title': 'Ladungsentwicklung',
|
|
'reload.recipes': 'Rezepte',
|
|
'reload.no.sel': 'Wählen Sie ein Rezept aus, um die Chargen anzuzeigen',
|
|
'profile.title': 'Mein Profil',
|
|
'profile.tab.prof': 'Profil',
|
|
'profile.tab.pw': 'Passwort ändern',
|
|
'profile.avatar.upload': 'Avatar hochladen',
|
|
'profile.personal.title': 'Persönliche Angaben',
|
|
'profile.form.first_name': 'Vorname',
|
|
'profile.form.last_name': 'Nachname',
|
|
'profile.form.email': 'E-Mail',
|
|
'profile.form.email.ro': '(schreibgeschützt)',
|
|
'profile.form.save': 'Speichern',
|
|
'profile.pw.title': 'Passwort ändern',
|
|
'profile.form.pw.current': 'Aktuelles Passwort',
|
|
'profile.form.pw.new': 'Neues Passwort',
|
|
'profile.form.pw.confirm': 'Neues Passwort bestätigen',
|
|
'profile.form.pw.change': 'Passwort ändern',
|
|
'profile.rigs.title': 'Meine Konfigurationen',
|
|
'profile.rigs.empty': 'Sie haben noch keine Konfigurationen.',
|
|
'profile.table.name': 'Name',
|
|
'profile.table.items': 'Elemente',
|
|
'profile.table.visibility': 'Sichtbarkeit',
|
|
'admin.title': 'Administration',
|
|
'admin.tab.users': 'Benutzer',
|
|
'admin.tab.catalog': 'Ausrüstungskatalog',
|
|
'admin.tab.comps': 'Ladekomponenten',
|
|
'admin.tab.calibers': 'Kaliber',
|
|
'admin.add.gear': 'Ausrüstung hinzufügen',
|
|
'admin.users.new': 'Neuer Benutzer',
|
|
'admin.users.create.title': 'Neuen Benutzer erstellen',
|
|
'admin.users.username': 'Benutzername',
|
|
'admin.users.email': 'E-Mail',
|
|
'admin.users.password': 'Passwort',
|
|
'admin.users.staff': 'Mitarbeiter / Admin',
|
|
'admin.users.first_name': 'Vorname',
|
|
'admin.users.last_name': 'Nachname',
|
|
'admin.users.create.btn': 'Benutzer erstellen',
|
|
'admin.table.username': 'Benutzername',
|
|
'admin.table.email': 'E-Mail',
|
|
'admin.table.name': 'Name',
|
|
'admin.table.staff': 'Mitarbeiter',
|
|
'admin.table.active': 'Aktiv',
|
|
'admin.table.joined': 'Beigetreten',
|
|
'admin.filter.all_types': 'Alle Typen',
|
|
'admin.filter.firearms': 'Schusswaffen',
|
|
'admin.filter.scopes': 'Zielfernrohre',
|
|
'admin.filter.suppressors': 'Schalldämpfer',
|
|
'admin.filter.bipods': 'Zweibeine',
|
|
'admin.filter.magazines': 'Magazine',
|
|
'admin.filter.all_statuses': 'Alle Status',
|
|
'admin.filter.pending': 'Ausstehend',
|
|
'admin.filter.verified': 'Bestätigt',
|
|
'admin.filter.rejected': 'Abgelehnt',
|
|
'admin.catalog.col.type': 'Typ',
|
|
'admin.catalog.col.brand': 'Marke',
|
|
'admin.catalog.col.model': 'Modell',
|
|
'admin.catalog.col.caliber': 'Kaliber',
|
|
'admin.catalog.col.status': 'Status',
|
|
'admin.add.btn': 'Zum Katalog hinzufügen',
|
|
'admin.comp.primers': 'Zündhütchen',
|
|
'admin.comp.brass': 'Hülsen',
|
|
'admin.comp.bullets': 'Geschosse',
|
|
'admin.comp.powders': 'Pulver',
|
|
'tools.title': 'Werkzeuge',
|
|
'tools.subtitle': 'Ballistische Werkzeuge und Ladewerkzeuge — kein Konto erforderlich.',
|
|
'tools.ballistics.title': 'Ballistikrechner',
|
|
'tools.ballistics.desc': 'Punktmasse-Trajektorie — Abfall, Windabdrift, Korrekturen in MOA/MRAD. Ohne Konto.',
|
|
'tools.ballistics.soon': 'Demnächst — Flugbahn, Windabdrift und Haltepunktdiagramme.',
|
|
'tools.chrono.title': 'Chronograph-Analysator',
|
|
'tools.chrono.desc': 'CSV von Ihrem Chrono hochladen — Gruppenerkennung, SD, ES, Geschwindigkeitskurven und PDF-Bericht.',
|
|
'tools.open': 'Öffnen',
|
|
'tools.groupsize.title': 'Gruppengrößenrechner',
|
|
'tools.groupsize.desc': 'Zielscheibenfoto annotieren — ES, mittleren Radius und Richtkorrekturen in mm und MOA messen.',
|
|
'tools.oal.title': 'OAL-Rechner',
|
|
'tools.oal.soon': 'Demnächst — optimale Gesamtlänge der Patrone berechnen.',
|
|
'sessions.title': 'Schießsitzungen',
|
|
'sessions.subtitle': 'PRS-, Freiübungs- oder Schnellschießsitzungen vorbereiten und aufzeichnen.',
|
|
'sessions.soon': 'Demnächst — Sitzungsprotokoll und Analyse werden hier verfügbar sein.',
|
|
'sessions.milestone': 'Die Sitzungsprotokollierung ist Teil des nächsten Meilensteins. Bleiben Sie dran!',
|
|
'sessions.tab.prs': 'PRS-Match',
|
|
'sessions.tab.fp': 'Freiübung',
|
|
'sessions.tab.speed': 'Schnellschießen',
|
|
'sessions.new': 'Neue Sitzung',
|
|
'sessions.none': 'Sitzung auswählen oder neue erstellen',
|
|
'sessions.empty': 'Keine Sitzungen vorhanden.',
|
|
'sessions.delete.confirm': 'Diese Sitzung und alle Daten löschen?',
|
|
'sessions.meta.competition': 'Wettkampf',
|
|
'sessions.meta.category': 'Kategorie',
|
|
'sessions.meta.date': 'Datum',
|
|
'sessions.meta.location': 'Ort',
|
|
'sessions.meta.rig': 'Konfiguration',
|
|
'sessions.meta.ammo': 'Munition',
|
|
'sessions.meta.distance': 'Entfernung',
|
|
'sessions.meta.target': 'Ziel',
|
|
'sessions.meta.rounds': 'Abgefeuerte Schüsse',
|
|
'sessions.meta.format': 'Format',
|
|
'sessions.weather.title': 'Wetterbedingungen',
|
|
'sessions.weather.temp': 'Temp (°C)',
|
|
'sessions.weather.wind': 'Wind (m/s)',
|
|
'sessions.weather.dir': 'Richtung (°)',
|
|
'sessions.weather.humidity': 'Luftfeuchtigkeit (%)',
|
|
'sessions.weather.pressure': 'Druck (hPa)',
|
|
'sessions.weather.notes': 'Notizen',
|
|
'sessions.weather.save': 'Wetter speichern',
|
|
'sessions.analysis.title': 'Verknüpfte Analyse',
|
|
'sessions.analysis.none': 'Keine Analyse verknüpft.',
|
|
'sessions.analysis.link': 'Analyse verknüpfen',
|
|
'sessions.analysis.unlink':'Verknüpfung lösen',
|
|
'sessions.analysis.view': 'Im Chronograph anzeigen',
|
|
'sessions.analysis.photos':'Fotos dieser Analyse',
|
|
'sessions.stages.title': 'Stände',
|
|
'sessions.stages.add': 'Stand hinzufügen',
|
|
'sessions.stages.none': 'Noch keine Stände. Ersten Stand hinzufügen.',
|
|
'sessions.stage.prep': 'Vorbereitung',
|
|
'sessions.stage.corrections': 'Absehenkorrekturen',
|
|
'sessions.stage.results': 'Ergebnisse',
|
|
'sessions.stage.target': 'Ziel',
|
|
'sessions.stage.maxtime': 'Max. Zeit',
|
|
'sessions.stage.shots': 'Schüsse',
|
|
'sessions.stage.notes': 'Notizen',
|
|
'sessions.stage.computed.elev': 'Ber. Höhe',
|
|
'sessions.stage.computed.wind': 'Ber. Wind',
|
|
'sessions.stage.actual.elev': 'Tats. Höhe',
|
|
'sessions.stage.actual.wind': 'Tats. Wind',
|
|
'sessions.stage.hits': 'Treffer',
|
|
'sessions.stage.score': 'Punkte',
|
|
'sessions.stage.time': 'Zeit (s)',
|
|
'sessions.stage.save.corrections': 'Speichern',
|
|
'sessions.stage.save.results': 'Ergebnisse speichern',
|
|
'sessions.stage.badge.done': 'Ergebnisse gespeichert',
|
|
'sessions.stage.badge.pending': 'Ausstehend',
|
|
'sessions.create.name': 'Sitzungsname',
|
|
'sessions.create.date': 'Datum',
|
|
'sessions.create.location':'Ort',
|
|
'sessions.create.competition': 'Wettkampfname',
|
|
'sessions.create.category':'Kategorie',
|
|
'sessions.create.distance':'Entfernung (m)',
|
|
'sessions.create.target': 'Zielbeschreibung',
|
|
'sessions.create.format': 'Format',
|
|
'sessions.create.rig': 'Konfiguration',
|
|
'sessions.create.ammo': 'Munition',
|
|
'sessions.create.ammo.none':'Keine',
|
|
'sessions.create.ammo.factory':'Fabrikmunition',
|
|
'sessions.create.ammo.reload': 'Wiederladung',
|
|
'sessions.create.ammo.suggest': 'Munition nicht gefunden? Vorschlagen',
|
|
'sessions.create.ammo.suggest.note': 'Ihr Vorschlag wird nach Admin-Prüfung für alle sichtbar.',
|
|
'sessions.stage.modal.title': 'Stand hinzufügen',
|
|
'sessions.stage.modal.order': 'Stand-Nr.',
|
|
'sessions.stage.modal.position': 'Position',
|
|
'sessions.stage.modal.distance': 'Entfernung (m)',
|
|
'sessions.stage.modal.maxtime': 'Max. Zeit (s)',
|
|
'sessions.stage.modal.shots': 'Schüsse',
|
|
'sessions.stage.modal.tw': 'Zielbreite (cm)',
|
|
'sessions.stage.modal.th': 'Zielhöhe (cm)',
|
|
'sessions.stage.modal.notes': 'Vorbereitungsnotizen',
|
|
'btn.save': 'Speichern',
|
|
'btn.cancel': 'Abbrechen',
|
|
'btn.delete': 'Löschen',
|
|
'btn.add': 'Hinzufügen',
|
|
'btn.edit': 'Bearbeiten',
|
|
'btn.verify': 'Bestätigen',
|
|
'btn.reject': 'Ablehnen',
|
|
'btn.search': 'Suchen',
|
|
'btn.submit': 'Absenden',
|
|
},
|
|
|
|
es: {
|
|
'nav.dashboard': 'Panel',
|
|
'nav.gear': 'Mi equipamiento',
|
|
'nav.reloads': 'Mis recargas',
|
|
'nav.tools': 'Herramientas',
|
|
'nav.photos': 'Fotos',
|
|
'nav.sessions': 'Sesiones',
|
|
'nav.profile': 'Perfil',
|
|
'nav.signout': 'Cerrar sesión',
|
|
'nav.signin': 'Iniciar sesión',
|
|
'nav.register': 'Registrarse',
|
|
'nav.admin': 'Administración',
|
|
'index.lead': 'Su plataforma integral para gestionar armas y equipamiento, registrar rendimiento, desarrollar recargas y compartir resultados con otros tiradores.',
|
|
'index.cta': 'Empezar gratis',
|
|
'index.cta2': 'Explorar herramientas',
|
|
'index.cta3': '¿Listo para mejorar su tiro?',
|
|
'index.cta4': 'Crear cuenta',
|
|
'index.feat.title': 'Todo lo que necesita un tirador serio',
|
|
'index.feat.sub': 'Desde el primer disparo hasta el análisis de competición.',
|
|
'index.feat.gear.title': 'Inventario de equipamiento',
|
|
'index.feat.gear.desc': 'Catalogue cada arma, mira, silenciador, bípode y cargador que posee. Cree configuraciones personalizadas y compártalas.',
|
|
'index.feat.sessions.title': 'Registro de sesiones',
|
|
'index.feat.sessions.desc': 'Registre cada sesión de tiro con datos de cronógrafo, grupos, condiciones meteorológicas y notas en un solo lugar.',
|
|
'index.feat.analysis.title': 'Análisis de rendimiento',
|
|
'index.feat.analysis.desc': 'Visualice la desviación típica, el extremo de la serie, tamaño de grupos a lo largo del tiempo e identifique tendencias.',
|
|
'index.feat.reload.title': 'Desarrollo de recargas',
|
|
'index.feat.reload.desc': 'Cree recetas de carga, varíe la carga de pólvora entre lotes, vincule cada lote a grupos de disparos y encuentre la carga más precisa.',
|
|
'index.recent.title': 'Análisis recientes',
|
|
'index.recent.subtitle': 'Sesiones de cronógrafo compartidas públicamente — no se requiere cuenta para ver.',
|
|
'index.recent.upload': 'Subir la suya',
|
|
'index.recent.empty': '¡Aún no hay análisis. Sea el primero!',
|
|
'dash.title': 'Panel',
|
|
'dash.welcome': '¡Bienvenido de nuevo!',
|
|
'dash.welcome.name': '¡Bienvenido de nuevo, {name}!',
|
|
'dash.stat.gear': 'Equipamiento',
|
|
'dash.stat.rigs': 'Configuraciones',
|
|
'dash.stat.recipes': 'Recetas de carga',
|
|
'dash.stat.batches': 'Lotes de munición',
|
|
'dash.quicklinks': 'Acceso rápido',
|
|
'dash.quicklink.gears': 'Gestionar equipamiento y configs',
|
|
'dash.quicklink.reloads': 'Desarrollo de recargas',
|
|
'dash.quicklink.sessions': 'Sesiones de tiro',
|
|
'dash.quicklink.chrono': 'Análisis de cronógrafo',
|
|
'dash.quicklink.profile': 'Mi perfil',
|
|
'profile.link.analyses': 'Mis análisis',
|
|
'profile.link.sessions': 'Mis sesiones',
|
|
'profile.link.photos': 'Mis fotos',
|
|
'profile.link.gears': 'Mi equipamiento',
|
|
'gear.title': 'Equipamiento y configs',
|
|
'gear.tab.inv': 'Mi inventario',
|
|
'gear.tab.rigs': 'Mis configs',
|
|
'gear.my.gear': 'Mi equipamiento',
|
|
'gear.add': 'Añadir equipamiento',
|
|
'gear.my.rigs': 'Mis configuraciones',
|
|
'gear.new.rig': 'Nueva config',
|
|
'gear.empty.inv': 'Aún no ha añadido equipamiento.',
|
|
'gear.empty.rigs': 'Aún no ha creado ninguna configuración.',
|
|
'reload.title': 'Desarrollo de cargas',
|
|
'reload.recipes': 'Recetas',
|
|
'reload.no.sel': 'Seleccione una receta para ver sus lotes',
|
|
'profile.title': 'Mi perfil',
|
|
'profile.tab.prof': 'Perfil',
|
|
'profile.tab.pw': 'Cambiar contraseña',
|
|
'profile.avatar.upload': 'Subir avatar',
|
|
'profile.personal.title': 'Información personal',
|
|
'profile.form.first_name': 'Nombre',
|
|
'profile.form.last_name': 'Apellido',
|
|
'profile.form.email': 'Correo electrónico',
|
|
'profile.form.email.ro': '(solo lectura)',
|
|
'profile.form.save': 'Guardar cambios',
|
|
'profile.pw.title': 'Cambiar contraseña',
|
|
'profile.form.pw.current': 'Contraseña actual',
|
|
'profile.form.pw.new': 'Nueva contraseña',
|
|
'profile.form.pw.confirm': 'Confirmar nueva contraseña',
|
|
'profile.form.pw.change': 'Cambiar contraseña',
|
|
'profile.rigs.title': 'Mis configuraciones',
|
|
'profile.rigs.empty': 'Aún no tiene configuraciones.',
|
|
'profile.table.name': 'Nombre',
|
|
'profile.table.items': 'Elementos',
|
|
'profile.table.visibility': 'Visibilidad',
|
|
'admin.title': 'Administración',
|
|
'admin.tab.users': 'Usuarios',
|
|
'admin.tab.catalog': 'Catálogo de equipamiento',
|
|
'admin.tab.comps': 'Componentes de recarga',
|
|
'admin.tab.calibers': 'Calibres',
|
|
'admin.add.gear': 'Añadir equipamiento',
|
|
'admin.users.new': 'Nuevo usuario',
|
|
'admin.users.create.title': 'Crear nuevo usuario',
|
|
'admin.users.username': 'Nombre de usuario',
|
|
'admin.users.email': 'Correo electrónico',
|
|
'admin.users.password': 'Contraseña',
|
|
'admin.users.staff': 'Personal / Admin',
|
|
'admin.users.first_name': 'Nombre',
|
|
'admin.users.last_name': 'Apellido',
|
|
'admin.users.create.btn': 'Crear usuario',
|
|
'admin.table.username': 'Usuario',
|
|
'admin.table.email': 'Correo',
|
|
'admin.table.name': 'Nombre',
|
|
'admin.table.staff': 'Personal',
|
|
'admin.table.active': 'Activo',
|
|
'admin.table.joined': 'Registro',
|
|
'admin.filter.all_types': 'Todos los tipos',
|
|
'admin.filter.firearms': 'Armas de fuego',
|
|
'admin.filter.scopes': 'Miras telescópicas',
|
|
'admin.filter.suppressors': 'Silenciadores',
|
|
'admin.filter.bipods': 'Bípodes',
|
|
'admin.filter.magazines': 'Cargadores',
|
|
'admin.filter.all_statuses': 'Todos los estados',
|
|
'admin.filter.pending': 'Pendiente',
|
|
'admin.filter.verified': 'Verificado',
|
|
'admin.filter.rejected': 'Rechazado',
|
|
'admin.catalog.col.type': 'Tipo',
|
|
'admin.catalog.col.brand': 'Marca',
|
|
'admin.catalog.col.model': 'Modelo',
|
|
'admin.catalog.col.caliber': 'Calibre',
|
|
'admin.catalog.col.status': 'Estado',
|
|
'admin.add.btn': 'Añadir al catálogo',
|
|
'admin.comp.primers': 'Cebadores',
|
|
'admin.comp.brass': 'Vainas',
|
|
'admin.comp.bullets': 'Proyectiles',
|
|
'admin.comp.powders': 'Pólvoras',
|
|
'tools.title': 'Herramientas',
|
|
'tools.subtitle': 'Herramientas balísticas y de recarga — no se requiere cuenta.',
|
|
'tools.ballistics.title': 'Calculadora balística',
|
|
'tools.ballistics.desc': 'Trayectoria de masa puntual — caída, deriva por viento, correcciones MOA/MRAD. Sin cuenta.',
|
|
'tools.ballistics.soon': 'Próximamente — trayectorias, deriva por viento y compensaciones.',
|
|
'tools.chrono.title': 'Analizador de cronógrafo',
|
|
'tools.chrono.desc': 'Suba un CSV de su cronógrafo — detección de grupos, DT, ES, gráficas de velocidad e informe PDF.',
|
|
'tools.open': 'Abrir',
|
|
'tools.groupsize.title': 'Calculadora de grupo',
|
|
'tools.groupsize.desc': 'Anote una foto de blanco — mida ES, radio medio y corrección de mira en mm y MOA.',
|
|
'tools.oal.title': 'Calculadora OAL',
|
|
'tools.oal.soon': 'Próximamente — calcule la longitud total óptima del cartucho.',
|
|
'sessions.title': 'Sesiones de tiro',
|
|
'sessions.subtitle': 'Prepare y registre sesiones de PRS, práctica libre o tiro de velocidad.',
|
|
'sessions.soon': 'Próximamente — el registro y análisis de sesiones estará disponible aquí.',
|
|
'sessions.milestone': 'El registro de sesiones forma parte del próximo hito. ¡Estén atentos!',
|
|
'sessions.tab.prs': 'Match PRS',
|
|
'sessions.tab.fp': 'Práctica libre',
|
|
'sessions.tab.speed': 'Tiro de velocidad',
|
|
'sessions.new': 'Nueva sesión',
|
|
'sessions.none': 'Seleccione una sesión o cree una nueva',
|
|
'sessions.empty': 'Sin sesiones.',
|
|
'sessions.delete.confirm': '¿Eliminar esta sesión y todos sus datos?',
|
|
'sessions.meta.competition': 'Competición',
|
|
'sessions.meta.category': 'Categoría',
|
|
'sessions.meta.date': 'Fecha',
|
|
'sessions.meta.location': 'Lugar',
|
|
'sessions.meta.rig': 'Configuración',
|
|
'sessions.meta.ammo': 'Munición',
|
|
'sessions.meta.distance': 'Distancia',
|
|
'sessions.meta.target': 'Blanco',
|
|
'sessions.meta.rounds': 'Disparos realizados',
|
|
'sessions.meta.format': 'Formato',
|
|
'sessions.weather.title': 'Condiciones meteorológicas',
|
|
'sessions.weather.temp': 'Temp (°C)',
|
|
'sessions.weather.wind': 'Viento (m/s)',
|
|
'sessions.weather.dir': 'Dir (°)',
|
|
'sessions.weather.humidity': 'Humedad (%)',
|
|
'sessions.weather.pressure': 'Presión (hPa)',
|
|
'sessions.weather.notes': 'Notas',
|
|
'sessions.weather.save': 'Guardar clima',
|
|
'sessions.analysis.title': 'Análisis vinculado',
|
|
'sessions.analysis.none': 'Ningún análisis vinculado.',
|
|
'sessions.analysis.link': 'Vincular análisis',
|
|
'sessions.analysis.unlink':'Desvincular',
|
|
'sessions.analysis.view': 'Ver en cronógrafo',
|
|
'sessions.analysis.photos':'Fotos de este análisis',
|
|
'sessions.stages.title': 'Puestos',
|
|
'sessions.stages.add': 'Añadir puesto',
|
|
'sessions.stages.none': 'Sin puestos. Añada el primero para empezar.',
|
|
'sessions.stage.prep': 'Preparación',
|
|
'sessions.stage.corrections': 'Correcciones de mira',
|
|
'sessions.stage.results': 'Resultados',
|
|
'sessions.stage.target': 'Blanco',
|
|
'sessions.stage.maxtime': 'Tiempo máx.',
|
|
'sessions.stage.shots': 'Disparos',
|
|
'sessions.stage.notes': 'Notas',
|
|
'sessions.stage.computed.elev': 'Elev. calculada',
|
|
'sessions.stage.computed.wind': 'Deriv. calculada',
|
|
'sessions.stage.actual.elev': 'Elev. real',
|
|
'sessions.stage.actual.wind': 'Deriv. real',
|
|
'sessions.stage.hits': 'Impactos',
|
|
'sessions.stage.score': 'Puntuación',
|
|
'sessions.stage.time': 'Tiempo (s)',
|
|
'sessions.stage.save.corrections': 'Guardar',
|
|
'sessions.stage.save.results': 'Guardar resultados',
|
|
'sessions.stage.badge.done': 'Resultados registrados',
|
|
'sessions.stage.badge.pending': 'Pendiente',
|
|
'sessions.create.name': 'Nombre de sesión',
|
|
'sessions.create.date': 'Fecha',
|
|
'sessions.create.location':'Lugar',
|
|
'sessions.create.competition': 'Nombre de competición',
|
|
'sessions.create.category':'Categoría',
|
|
'sessions.create.distance':'Distancia (m)',
|
|
'sessions.create.target': 'Descripción del blanco',
|
|
'sessions.create.format': 'Formato',
|
|
'sessions.create.rig': 'Configuración',
|
|
'sessions.create.ammo': 'Munición',
|
|
'sessions.create.ammo.none':'Ninguna',
|
|
'sessions.create.ammo.factory':'Comercial',
|
|
'sessions.create.ammo.reload': 'Lote recargado',
|
|
'sessions.create.ammo.suggest': '¿No encuentra su munición? Sugiérala',
|
|
'sessions.create.ammo.suggest.note': 'Su sugerencia será visible para todos tras verificación del administrador.',
|
|
'sessions.stage.modal.title': 'Añadir puesto',
|
|
'sessions.stage.modal.order': 'Puesto n°',
|
|
'sessions.stage.modal.position': 'Posición',
|
|
'sessions.stage.modal.distance': 'Distancia (m)',
|
|
'sessions.stage.modal.maxtime': 'Tiempo máx. (s)',
|
|
'sessions.stage.modal.shots': 'Disparos',
|
|
'sessions.stage.modal.tw': 'Ancho blanco (cm)',
|
|
'sessions.stage.modal.th': 'Alto blanco (cm)',
|
|
'sessions.stage.modal.notes': 'Notas de preparación',
|
|
'btn.save': 'Guardar',
|
|
'btn.cancel': 'Cancelar',
|
|
'btn.delete': 'Eliminar',
|
|
'btn.add': 'Añadir',
|
|
'btn.edit': 'Editar',
|
|
'btn.verify': 'Verificar',
|
|
'btn.reject': 'Rechazar',
|
|
'btn.search': 'Buscar',
|
|
'btn.submit': 'Enviar',
|
|
},
|
|
};
|
|
|
|
function t(key) {
|
|
const lang = getLang();
|
|
const dict = TRANSLATIONS[lang] || TRANSLATIONS['en'];
|
|
return dict[key] || TRANSLATIONS['en'][key] || key;
|
|
}
|
|
|
|
function applyTranslations() {
|
|
document.querySelectorAll('[data-i18n]').forEach(el => {
|
|
el.textContent = t(el.dataset.i18n);
|
|
});
|
|
document.querySelectorAll('[data-i18n-placeholder]').forEach(el => {
|
|
el.placeholder = t(el.dataset.i18nPlaceholder);
|
|
});
|
|
}
|