feat(tasks): complete task management system with Kanban, Calendar, notifications

- Add Task model with subtasks, priorities, status transitions, dates, hours
- Add Comment polymorphic model for tasks/issues/projects
- Livewire components: TaskManager (list+filters), TaskForm (modal), TaskDetail, TaskKanban (drag&drop), TaskCalendar (FullCalendar)
- TaskPolicy with permissions (view/create/edit/delete/assign/manage all)
- Notifications: assigned, status change, overdue, comment added
- Daily overdue notification job scheduled
- Dashboard widget unifies IssueTask + Task
- i18n: en/es/fr/ru (393 keys each)
- Routes, navigation, offline sync support
- 101 tests passing, Pint compliant on new files
This commit is contained in:
Javier Braña
2026-08-03 13:44:10 +02:00
parent a65d4b12f2
commit ba614bddbc
62 changed files with 5878 additions and 382 deletions
+32 -1
View File
@@ -106,6 +106,8 @@
"Language": "Language",
"English": "English",
"Spanish": "Spanish",
"French": "French",
"Russian": "Russian",
"Select language": "Select language",
"Notifications": "Notifications",
"Permissions": "Permissions",
@@ -395,5 +397,34 @@
"My Projects": "My Projects",
"Editable": "Editable",
"Name of responsible": "Name of responsible",
"Select template...": "Select template..."
"Select template...": "Select template...",
"Tasks": "Tasks",
"Task": "Task",
"New Task": "New Task",
"Create Task": "Create Task",
"Edit Task": "Edit Task",
"Delete Task": "Delete Task",
"Task title": "Task title",
"Task description": "Task description",
"Due date": "Due date",
"Start date": "Start date",
"Estimated hours": "Estimated hours",
"Actual hours": "Actual hours",
"Assigned to": "Assigned to",
"Parent task": "Parent task",
"Subtasks": "Subtasks",
"No subtasks": "No subtasks",
"Add subtask": "Add subtask",
"Comments": "Comments",
"Add comment": "Add comment",
"Write a comment...": "Write a comment...",
"No comments yet": "No comments yet",
"Task created": "Task created",
"Task updated": "Task updated",
"Task deleted": "Task deleted",
"Status changed": "Status changed",
"Overdue": "Overdue",
"Due today": "Due today",
"Progress": "Progress",
"Order": "Order"
}
+32 -1
View File
@@ -106,6 +106,8 @@
"Language": "Idioma",
"English": "Inglés",
"Spanish": "Español",
"French": "Francés",
"Russian": "Ruso",
"Select language": "Seleccionar idioma",
"Notifications": "Notificaciones",
"Permissions": "Permisos",
@@ -395,5 +397,34 @@
"My Projects": "Mis proyectos",
"Editable": "Editable",
"Name of responsible": "Nombre del responsable",
"Select template...": "Seleccionar plantilla..."
"Select template...": "Seleccionar plantilla...",
"Tasks": "Tareas",
"Task": "Tarea",
"New Task": "Nueva tarea",
"Create Task": "Crear tarea",
"Edit Task": "Editar tarea",
"Delete Task": "Eliminar tarea",
"Task title": "Título de la tarea",
"Task description": "Descripción de la tarea",
"Due date": "Fecha de vencimiento",
"Start date": "Fecha de inicio",
"Estimated hours": "Horas estimadas",
"Actual hours": "Horas reales",
"Assigned to": "Asignado a",
"Parent task": "Tarea padre",
"Subtasks": "Subtareas",
"No subtasks": "Sin subtareas",
"Add subtask": "Añadir subtarea",
"Comments": "Comentarios",
"Add comment": "Añadir comentario",
"Write a comment...": "Escribe un comentario...",
"No comments yet": "No hay comentarios aún",
"Task created": "Tarea creada",
"Task updated": "Tarea actualizada",
"Task deleted": "Tarea eliminada",
"Status changed": "Estado cambiado",
"Overdue": "Vencida",
"Due today": "Vence hoy",
"Progress": "Progreso",
"Order": "Orden"
}
+430
View File
@@ -0,0 +1,430 @@
{
"Dashboard": "Tableau de bord",
"Projects": "Projets",
"Project": "Projet",
"Create Project": "Créer un projet",
"Edit Project": "Modifier le projet",
"New Project": "Nouveau projet",
"Delete Project": "Supprimer le projet",
"Project name": "Nom du projet",
"Name": "Nom",
"Address": "Adresse",
"Status": "Statut",
"Progress": "Progression",
"Phases": "Phases",
"Phase": "Phase",
"Layer": "Couche",
"Layers": "Couches",
"Features": "Éléments",
"Feature": "Élément",
"Create": "Créer",
"Edit": "Modifier",
"Delete": "Supprimer",
"Save": "Enregistrer",
"Update": "Mettre à jour",
"Cancel": "Annuler",
"Search": "Rechercher",
"Filter": "Filtrer",
"Back": "Retour",
"Actions": "Actions",
"Map": "Carte",
"View Map": "Voir la carte",
"Manage Layers": "Gérer les couches",
"Upload Layer": "Importer une couche",
"Upload file": "Importer un fichier",
"Download": "Télécharger",
"Fullscreen": "Plein écran",
"Close": "Fermer",
"Are you sure?": "Êtes-vous sûr ?",
"No results": "Aucun résultat",
"Loading": "Chargement",
"Active projects": "Projets actifs",
"Total projects": "Total projets",
"Total phases": "Total phases",
"Total features": "Total éléments",
"Global progress": "Progression globale",
"Recent projects": "Projets récents",
"Recent inspections": "Inspections récentes",
"Planning": "Planification",
"In progress": "En cours",
"Paused": "En pause",
"Completed": "Terminé",
"Progress updated": "Progression mise à jour",
"Save progress": "Sauvegarder la progression",
"Responsible": "Responsable",
"Comment": "Commentaire",
"History": "Historique",
"Inspection": "Inspection",
"Template": "Modèle",
"Templates": "Modèles",
"Create Template": "Créer un modèle",
"Inspection template": "Modèle d'inspection",
"Field": "Champ",
"Fields": "Champs",
"Field name": "Nom du champ",
"Field type": "Type de champ",
"Required": "Requis",
"Options": "Options",
"Show images on map": "Afficher les images sur la carte",
"Project files": "Fichiers du projet",
"Media": "Médias",
"Images": "Images",
"Documents": "Documents",
"Upload images": "Importer des images",
"Upload documents": "Importer des documents",
"Upload files": "Importer des fichiers",
"Drop files here": "Déposer les fichiers ici",
"File": "Fichier",
"Files": "Fichiers",
"Category": "Catégorie",
"Description": "Description",
"Size": "Taille",
"Uploaded by": "Importé par",
"Uploaded at": "Importé le",
"No files yet": "Aucun fichier pour l'instant",
"Delete file": "Supprimer le fichier",
"Layer name": "Nom de la couche",
"Layer color": "Couleur de la couche",
"Import file": "Importer un fichier",
"Empty layer": "Couche vide",
"Create empty layer": "Créer une couche vide",
"Select phase": "Sélectionner une phase",
"Select project": "Sélectionner un projet",
"Visible layers": "Couches visibles",
"Edit layer": "Modifier la couche",
"Delete layer": "Supprimer la couche",
"Sign in": "Se connecter",
"Sign out": "Se déconnecter",
"Register": "S'inscrire",
"Email": "E-mail",
"Password": "Mot de passe",
"Confirm password": "Confirmer le mot de passe",
"Forgot password": "Mot de passe oublié",
"Remember me": "Se souvenir de moi",
"Profile": "Profil",
"Update profile": "Mettre à jour le profil",
"Language": "Langue",
"English": "Anglais",
"Spanish": "Espagnol",
"French": "Français",
"Russian": "Russe",
"Select language": "Sélectionner la langue",
"Notifications": "Notifications",
"Permissions": "Permissions",
"Administrator": "Administrateur",
"Users": "Utilisateurs",
"Roles": "Rôles",
"Click on an element to edit": "Cliquez sur un élément pour le modifier",
"No templates yet": "Aucun modèle pour l'instant",
"Create an inspection template": "Créer un modèle d'inspection",
"No phases yet": "Aucune phase pour l'instant",
"Start date": "Date de début",
"Estimated end date": "Date de fin estimée",
"Centered in project": "Centré sur le projet",
"My location": "Ma position",
"File type not allowed": "Type de fichier non autorisé",
"Upload failed": "Échec de l'importation",
"Conversion failed": "Échec de la conversion",
"All": "Tous",
"Latitude": "Latitude",
"Longitude": "Longitude",
"Register inspection": "Enregistrer l'inspection",
"Files of element": "Fichiers de l'élément",
"Phases and layers": "Phases et couches",
"Elements": "Éléments",
"optional": "optionnel",
"each": "chaque",
"Image": "Image",
"Document": "Document",
"Other": "Autre",
"Color": "Couleur",
"Upload": "Importer",
"Assign": "Attribuer",
"Role": "Rôle",
"Supervisor": "Superviseur",
"Consultant": "Consultant",
"Client": "Client",
"Viewer": "Observateur",
"Remove": "Retirer",
"No users assigned yet": "Aucun utilisateur assigné pour l'instant",
"Select": "Sélectionner",
"Log Out": "Déconnexion",
"Company": "Entreprise",
"Companies": "Entreprises",
"Company Management": "Gestion des entreprises",
"New Company": "Nouvelle entreprise",
"Edit Company": "Modifier l'entreprise",
"Delete Company": "Supprimer l'entreprise",
"User Management": "Gestion des utilisateurs",
"New User": "Nouvel utilisateur",
"Edit User": "Modifier l'utilisateur",
"Delete User": "Supprimer l'utilisateur",
"Reference": "Référence",
"Contact": "Contact",
"Verified": "Vérifié",
"Type": "Type",
"Owner": "Propriétaire",
"Constructor": "Constructeur",
"Subcontractor": "Sous-traitant",
"Supplier": "Fournisseur",
"No role": "Aucun rôle",
"Active": "Actif",
"Inactive": "Inactif",
"Suspended": "Suspendu",
"Start Date": "Date de début",
"Est. End": "Fin estimée",
"Issue": "Incident",
"Issues": "Incidents",
"New Issue": "Nouvel incident",
"Open": "Ouvert",
"Resolved": "Résolu",
"Closed": "Fermé",
"Priority": "Priorité",
"High": "Haute",
"Medium": "Moyenne",
"Low": "Basse",
"Gantt": "Gantt",
"Report": "Rapport",
"Reports": "Rapports",
"Created at": "Créé le",
"Updated at": "Mis à jour le",
"Confirm delete": "Confirmer la suppression",
"This action cannot be undone": "Cette action ne peut pas être annulée",
"No data": "Aucune donnée",
"Export CSV": "Exporter CSV",
"Export PDF": "Exporter PDF",
"Planned": "Planifié",
"Started": "Commencé",
"Map filters": "Filtres de la carte",
"Progress: :min% :max%": "Progression : :min% :max%",
"Clear": "Effacer",
"Hide panel": "Masquer le panneau",
"Show phases and layers": "Afficher les phases et couches",
"Show images": "Afficher les images",
"Schedule": "Planning",
"Center map": "Centrer la carte",
"Select element": "Sélectionner un élément",
"Search by name, phase or layer...": "Rechercher par nom, phase ou couche...",
"Element status": "Statut de l'élément",
"Notes": "Notes",
"Result": "Résultat",
"No result": "Aucun résultat",
"Approved": "Approuvé",
"Conditional": "Conditionnel",
"Failed": "Échoué",
"Registered data": "Données enregistrées",
"Inspection #:id": "Inspection n° :id",
"Layer / Phase": "Couche / Phase",
"No templates (info)": "Aucun modèle.",
"Create one": "En créer un",
"Click on a map element or search above to edit it": "Cliquez sur un élément de la carte ou recherchez ci-dessus pour le modifier",
"Date": "Date",
"Inspector": "Inspecteur",
"View detail": "Voir les détails",
"No inspections registered": "Aucune inspection enregistrée",
"No elements in this project": "Aucun élément dans ce projet",
"Inspections": "Inspections",
"Project data": "Données du projet",
"Team": "Équipe",
"Save changes": "Enregistrer les modifications",
"Create project": "Créer un projet",
"Identification": "Identification",
"Location": "Localisation",
"Click on the map or drag the marker to update the location": "Cliquez sur la carte ou déplacez le marqueur pour mettre à jour la localisation",
"Coordinates": "Coordonnées",
"Auto when clicking the map": "Auto au clic sur la carte",
"No country": "Aucun pays",
"Search country...": "Rechercher un pays...",
"Inspection templates": "Modèles d'inspection",
"Import CSV/Excel": "Importer CSV/Excel",
"Copy from project": "Copier depuis un projet",
"New template": "Nouveau modèle",
"Edit template": "Modifier le modèle",
"Template name": "Nom du modèle",
"Associated phase (optional)": "Phase associée (optionnel)",
"Global project": "Projet global",
"Form fields": "Champs du formulaire",
"field(s)": "champ(s)",
"Internal name": "Nom interne",
"Visible label": "Libellé visible",
"Remove field": "Supprimer le champ",
"Min": "Min",
"Max": "Max",
"Step": "Pas",
"Options (comma separated)": "Options (séparées par des virgules)",
"Add field": "Ajouter un champ",
"Save template": "Enregistrer le modèle",
"No templates yet (table)": "Aucun modèle. Utilisez les boutons ci-dessus pour créer ou importer.",
"Delete template confirmation": "Supprimer ce modèle ? Cette action ne peut pas être annulée.",
"Import template from CSV / Excel": "Importer un modèle depuis CSV / Excel",
"File format (one row = one field):": "Format du fichier (une ligne = un champ) :",
"Download example": "Télécharger l'exemple",
"CSV or Excel file": "Fichier CSV ou Excel",
"Loading file...": "Chargement du fichier...",
"Preview": "Aperçu",
"Change file": "Changer de fichier",
"Create template (action)": "Créer le modèle",
"field(s) detected": "champ(s) détecté(s)",
"Copy template from another project": "Copier un modèle depuis un autre projet",
"Source project": "Projet source",
"Select project...": "Sélectionner un projet...",
"This project has no templates.": "Ce projet n'a aucun modèle.",
"Select the templates to copy": "Sélectionner les modèles à copier",
"selected": "sélectionné(s)",
"Select a project to see its templates.": "Sélectionnez un projet pour voir ses modèles.",
"Copy": "Copier",
"Back to map": "Retour à la carte",
"Import": "Importer",
"or": "ou",
"Layers (:count)": "Couches (:count)",
"No layers. Create or import one.": "Aucune couche. Créez-en ou importez-en une.",
"elem.": "élém.",
"Export": "Exporter",
"Bulk assignment": "Attribution en masse",
"Apply template or status to all elements of :layer": "Appliquer le modèle ou le statut à tous les éléments de :layer",
"No change": "Aucun changement",
"Apply to all": "Appliquer à tous",
"Apply changes to all elements of this layer?": "Appliquer les modifications à tous les éléments de cette couche ?",
"Element editor": "Éditeur d'éléments",
"Select a layer to edit": "Sélectionner une couche à modifier",
"Delayed phases": "Phases en retard",
"Needs attention": "Nécessite une attention",
"No delays": "Aucun retard",
"phases": "phases",
"Open issues": "Incidents ouverts",
"critical": "critique",
"Pending inspections": "Inspections en attente",
"To do": "À faire",
"Completed inspections": "Inspections terminées",
"Rejected inspections": "Inspections rejetées",
"Need review": "Nécessitent une révision",
"View all": "Voir tout",
"No projects available": "Aucun projet disponible",
"phase": "phase",
"Recent issues": "Incidents récents",
"No open issues": "Aucun incident ouvert",
"No recent inspections": "Aucune inspection récente",
"User": "Utilisateur",
"No users found": "Aucun utilisateur trouvé",
"No companies assigned yet": "Aucune entreprise assignée pour l'instant",
"Select template...": "Sélectionner un modèle...",
"Observations...": "Observations...",
"by": "par",
"ago": "il y a",
"No inspections yet for this element": "Aucune inspection pour cet élément pour l'instant",
"Inspection History": "Historique des inspections",
"View": "Voir",
"Media for this element": "Médias pour cet élément",
"No media for this element yet": "Aucun média pour cet élément pour l'instant",
"Project Media": "Médias du projet",
"No project media yet": "Aucun média de projet pour l'instant",
"Feature:": "Élément :",
"Inspection:": "Inspection :",
"Project Data": "Données du projet",
"Name of responsible": "Nom du responsable",
"Reports and Analytics": "Rapports et Analyses",
"Time range:": "Période :",
"This week": "Cette semaine",
"This month": "Ce mois",
"This quarter": "Ce trimestre",
"This year": "Cette année",
"Project Progress (last 6 months)": "Progression du projet (6 derniers mois)",
"Inspections by Type": "Inspections par type",
"Projects by Status": "Projets par statut",
"Average Progress by Project": "Progression moyenne par projet",
"Total Active Projects": "Total projets actifs",
"Inspections This Month": "Inspections ce mois",
"Average Progress": "Progression moyenne",
"Completed Projects": "Projets terminés",
"Loading data...": "Chargement des données...",
"Optional": "Optionnel",
"Expand layers": "Déplier les couches",
"New user": "Nouvel utilisateur",
"Search by name or email...": "Rechercher par nom ou e-mail...",
"No users found (table)": "Aucun utilisateur trouvé",
"Select element (label)": "Sélectionner un élément",
"Search by name, layer or phase...": "Rechercher par nom, couche ou phase...",
"No elements found": "Aucun élément trouvé",
"No media yet": "Aucun média pour l'instant",
"Manage the companies that participate in projects": "Gérer les entreprises qui participent aux projets",
"Search companies by name or tax ID...": "Rechercher des entreprises par nom ou NIF...",
"Complete the company information. Fields marked with * are required.": "Complétez les informations de l'entreprise. Les champs marqués d'un * sont obligatoires.",
"Validation errors": "Erreurs de validation",
"Tax ID": "NIF",
"E.g.: B12345678": "Ex. : B12345678",
"Nickname": "Nom court",
"E.g.: Acme Construct": "Ex. : Acme Construct",
"Select a status": "Sélectionner un statut",
"Company Type": "Type d'entreprise",
"Select a type": "Sélectionner un type",
"Phone": "Téléphone",
"Website": "Site web",
"Company Logo": "Logo de l'entreprise",
"Select file...": "Sélectionner un fichier...",
"Logo preview": "Aperçu du logo",
"Additional notes": "Notes additionnelles",
"No companies registered. Create your first company using the button above.": "Aucune entreprise enregistrée. Créez votre première entreprise avec le bouton ci-dessus.",
"Logo of": "Logo de",
"No tax ID": "Pas de NIF",
"Delete company confirmation": "Supprimer cette entreprise ? Cette action ne peut pas être annulée.",
"Company list": "Liste des entreprises",
"Add Phase": "Ajouter une phase",
"Update": "Mettre à jour",
"Delete file confirmation": "Supprimer ce fichier ? Cette action ne peut pas être annulée.",
"Back to map": "Retour à la carte",
"Create generic templates that can be used in any phase of the project": "Créer des modèles génériques utilisables dans n'importe quelle phase du projet",
"In Progress": "En cours",
"Select a project to see its templates.": "Sélectionnez un projet pour voir ses modèles.",
"Select a project to view details": "Sélectionnez un projet pour voir les détails",
"No description available": "Aucune description disponible",
"completed": "terminé",
"Back to projects": "Retour aux projets",
"Not defined": "Non défini",
"Progress overview": "Vue d'ensemble de la progression",
"General progress": "Progression générale",
"Progress by phase": "Progression par phase",
"No phases defined for this project": "Aucune phase définie pour ce projet",
"Progress gallery": "Galerie de progression",
"Change orders": "Ordres de changement",
"Requested": "Demandé",
"Amount": "Montant",
"Approve": "Approuver",
"Reject": "Rejeter",
"No pending change orders": "Aucun ordre de changement en attente",
"Pending": "En attente",
"Total": "Total",
"Inspections": "Inspections",
"My Projects": "Mes projets",
"Editable": "Éditable",
"Name of responsible": "Nom du responsable",
"Select template...": "Sélectionner un modèle...",
"Tasks": "Tâches",
"Task": "Tâche",
"New Task": "Nouvelle tâche",
"Create Task": "Créer une tâche",
"Edit Task": "Modifier la tâche",
"Delete Task": "Supprimer la tâche",
"Task title": "Titre de la tâche",
"Task description": "Description de la tâche",
"Due date": "Date d'échéance",
"Start date": "Date de début",
"Estimated hours": "Heures estimées",
"Actual hours": "Heures réelles",
"Assigned to": "Assigné à",
"Parent task": "Tâche parente",
"Subtasks": "Sous-tâches",
"No subtasks": "Aucune sous-tâche",
"Add subtask": "Ajouter une sous-tâche",
"Comments": "Commentaires",
"Add comment": "Ajouter un commentaire",
"Write a comment...": "Écrire un commentaire...",
"No comments yet": "Aucun commentaire pour l'instant",
"Task created": "Tâche créée",
"Task updated": "Tâche mise à jour",
"Task deleted": "Tâche supprimée",
"Status changed": "Statut changé",
"Overdue": "En retard",
"Due today": "Échéance aujourd'hui",
"Progress": "Progression",
"Order": "Ordre"
}
+20
View File
@@ -0,0 +1,20 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'Ces identifiants ne correspondent pas à nos enregistrements.',
'password' => 'Le mot de passe fourni est incorrect.',
'throttle' => 'Trop de tentatives de connexion. Veuillez réessayer dans :seconds secondes.',
];
+19
View File
@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Précédent',
'next' => 'Suivant &raquo;',
];
+22
View File
@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| outcome such as failure due to an invalid password / reset token.
|
*/
'reset' => 'Votre mot de passe a été réinitialisé.',
'sent' => 'Nous vous avons envoyé par e-mail votre lien de réinitialisation de mot de passe.',
'throttled' => 'Veuillez patienter avant de réessayer.',
'token' => 'Ce jeton de réinitialisation de mot de passe est invalide.',
'user' => "Nous ne trouvons aucun utilisateur avec cette adresse e-mail.",
];
+194
View File
@@ -0,0 +1,194 @@
<?php
return [
'accepted' => 'Le champ :attribute doit être accepté.',
'accepted_if' => 'Le champ :attribute doit être accepté lorsque :other est :value.',
'active_url' => 'Le champ :attribute doit être une URL valide.',
'after' => 'Le champ :attribute doit être une date après :date.',
'after_or_equal' => 'Le champ :attribute doit être une date après ou égale à :date.',
'alpha' => 'Le champ :attribute ne doit contenir que des lettres.',
'alpha_dash' => 'Le champ :attribute ne doit contenir que des lettres, des chiffres, des tirets et des traits de soulignement.',
'alpha_num' => 'Le champ :attribute ne doit contenir que des lettres et des chiffres.',
'any_of' => 'Le champ :attribute est invalide.',
'array' => 'Le champ :attribute doit être un tableau.',
'ascii' => 'Le champ :attribute ne doit contenir que des caractères alphanumériques à un seul octet et des symboles.',
'before' => 'Le champ :attribute doit être une date avant :date.',
'before_or_equal' => 'Le champ :attribute doit être une date avant ou égale à :date.',
'between' => [
'array' => 'Le champ :attribute doit avoir entre :min et :max éléments.',
'file' => 'Le champ :attribute doit être entre :min et :max kilooctets.',
'numeric' => 'Le champ :attribute doit être entre :min et :max.',
'string' => 'Le champ :attribute doit avoir entre :min et :max caractères.',
],
'boolean' => 'Le champ :attribute doit être vrai ou faux.',
'can' => 'Le champ :attribute contient une valeur non autorisée.',
'confirmed' => 'La confirmation du champ :attribute ne correspond pas.',
'contains' => 'Le champ :attribute manque une valeur requise.',
'current_password' => 'Le mot de passe est incorrect.',
'date' => 'Le champ :attribute doit être une date valide.',
'date_equals' => 'Le champ :attribute doit être une date égale à :date.',
'date_format' => 'Le champ :attribute doit correspondre au format :format.',
'decimal' => 'Le champ :attribute doit avoir :decimal décimales.',
'declined' => 'Le champ :attribute doit être refusé.',
'declined_if' => 'Le champ :attribute doit être refusé lorsque :other est :value.',
'different' => 'Le champ :attribute et :other doivent être différents.',
'digits' => 'Le champ :attribute doit avoir :digits chiffres.',
'digits_between' => 'Le champ :attribute doit avoir entre :min et :max chiffres.',
'dimensions' => 'Le champ :attribute a des dimensions d\'image invalides.',
'distinct' => 'Le champ :attribute a une valeur en double.',
'doesnt_contain' => 'Le champ :attribute ne doit contenir aucune des valeurs suivantes : :values.',
'doesnt_end_with' => 'Le champ :attribute ne doit pas se terminer par l\'une des valeurs suivantes : :values.',
'doesnt_start_with' => 'Le champ :attribute ne doit pas commencer par l\'une des valeurs suivantes : :values.',
'email' => 'Le champ :attribute doit être une adresse e-mail valide.',
'encoding' => 'Le champ :attribute doit être encodé en :encoding.',
'ends_with' => 'Le champ :attribute doit se terminer par l\'une des valeurs suivantes : :values.',
'enum' => 'Le :attribute sélectionné est invalide.',
'exists' => 'Le :attribute sélectionné est invalide.',
'extensions' => 'Le champ :attribute doit avoir l\'une des extensions suivantes : :values.',
'file' => 'Le champ :attribute doit être un fichier.',
'filled' => 'Le champ :attribute doit avoir une valeur.',
'gt' => [
'array' => 'Le champ :attribute doit avoir plus de :value éléments.',
'file' => 'Le champ :attribute doit être supérieur à :value kilooctets.',
'numeric' => 'Le champ :attribute doit être supérieur à :value.',
'string' => 'Le champ :attribute doit être supérieur à :value caractères.',
],
'gte' => [
'array' => 'Le champ :attribute doit avoir :value éléments ou plus.',
'file' => 'Le champ :attribute doit être supérieur ou égal à :value kilooctets.',
'numeric' => 'Le champ :attribute doit être supérieur ou égal à :value.',
'string' => 'Le champ :attribute doit avoir :value caractères ou plus.',
],
'hex_color' => 'Le champ :attribute doit être une couleur hexadécimale valide.',
'image' => 'Le champ :attribute doit être une image.',
'in' => 'Le :attribute sélectionné est invalide.',
'in_array' => 'Le champ :attribute doit exister dans :other.',
'in_array_keys' => 'Le champ :attribute doit contenir au moins l\'une des clés suivantes : :values.',
'integer' => 'Le champ :attribute doit être un entier.',
'ip' => 'Le champ :attribute doit être une adresse IP valide.',
'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.',
'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.',
'json' => 'Le champ :attribute doit être une chaîne JSON valide.',
'list' => 'Le champ :attribute doit être une liste.',
'lowercase' => 'Le champ :attribute doit être en minuscules.',
'lt' => [
'array' => 'Le champ :attribute doit avoir moins de :value éléments.',
'file' => 'Le champ :attribute doit être inférieur à :value kilooctets.',
'numeric' => 'Le champ :attribute doit être inférieur à :value.',
'string' => 'Le champ :attribute doit avoir moins de :value caractères.',
],
'lte' => [
'array' => 'Le champ :attribute ne doit pas avoir plus de :value éléments.',
'file' => 'Le champ :attribute doit être inférieur ou égal à :value kilooctets.',
'numeric' => 'Le champ :attribute doit être inférieur ou égal à :value.',
'string' => 'Le champ :attribute doit avoir :value caractères ou moins.',
],
'mac_address' => 'Le champ :attribute doit être une adresse MAC valide.',
'max' => [
'array' => 'Le champ :attribute ne doit pas avoir plus de :max éléments.',
'file' => 'Le champ :attribute ne doit pas être supérieur à :max kilooctets.',
'numeric' => 'Le champ :attribute ne doit pas être supérieur à :max.',
'string' => 'Le champ :attribute ne doit pas avoir plus de :max caractères.',
],
'max_digits' => 'Le champ :attribute ne doit pas avoir plus de :max chiffres.',
'mimes' => 'Le champ :attribute doit être un fichier de type : :values.',
'mimetypes' => 'Le champ :attribute doit être un fichier de type : :values.',
'min' => [
'array' => 'Le champ :attribute doit avoir au moins :min éléments.',
'file' => 'Le champ :attribute doit être d\'au moins :min kilooctets.',
'numeric' => 'Le champ :attribute doit être d\'au moins :min.',
'string' => 'Le champ :attribute doit avoir au moins :min caractères.',
],
'min_digits' => 'Le champ :attribute doit avoir au moins :min chiffres.',
'missing' => 'Le champ :attribute doit être absent.',
'missing_if' => 'Le champ :attribute doit être absent lorsque :other est :value.',
'missing_unless' => 'Le champ :attribute doit être absent sauf si :other est dans :values.',
'missing_with' => 'Le champ :attribute doit être absent lorsque :values est présent.',
'missing_with_all' => 'Le champ :attribute doit être absent lorsque tous les :values sont présents.',
'multiple_of' => 'Le champ :attribute doit être un multiple de :value.',
'not_in' => 'Le :attribute sélectionné est invalide.',
'not_regex' => 'Le format du champ :attribute est invalide.',
'numeric' => 'Le champ :attribute doit être un nombre.',
'password' => [
'letters' => 'Le champ :attribute doit contenir au moins une lettre.',
'mixed' => 'Le champ :attribute doit contenir au moins une majuscule et une minuscule.',
'numbers' => 'Le champ :attribute doit contenir au moins un chiffre.',
'symbols' => 'Le champ :attribute doit contenir au moins un symbole.',
'uncompromised' => 'Le :attribute fourni a été trouvé dans une fuite de données. Veuillez choisir un autre :attribute.',
],
'present' => 'Le champ :attribute doit être présent.',
'present_if' => 'Le champ :attribute doit être présent lorsque :other est :value.',
'present_unless' => 'Le champ :attribute doit être présent sauf si :other est dans :values.',
'present_with' => 'Le champ :attribute doit être présent lorsque :values est présent.',
'present_with_all' => 'Le champ :attribute doit être présent lorsque tous les :values sont présents.',
'prohibited' => 'Le champ :attribute est interdit.',
'prohibited_if' => 'Le champ :attribute est interdit lorsque :other est :value.',
'prohibited_if_accepted' => 'Le champ :attribute est interdit lorsque :other est accepté.',
'prohibited_if_declined' => 'Le champ :attribute est interdit lorsque :other est refusé.',
'prohibited_unless' => 'Le champ :attribute est interdit sauf si :other est dans :values.',
'prohibits' => 'Le champ :attribute interdit la présence de :other.',
'regex' => 'Le format du champ :attribute est invalide.',
'required' => 'Le champ :attribute est obligatoire.',
'required_array_keys' => 'Le champ :attribute doit contenir des entrées pour : :values.',
'required_if' => 'Le champ :attribute est obligatoire lorsque :other est :value.',
'required_if_accepted' => 'Le champ :attribute est obligatoire lorsque :other est accepté.',
'required_if_declined' => 'Le champ :attribute est obligatoire lorsque :other est refusé.',
'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est dans :values.',
'required_with' => 'Le champ :attribute est obligatoire lorsque :values est présent.',
'required_with_all' => 'Le champ :attribute est obligatoire lorsque tous les :values sont présents.',
'required_without' => 'Le champ :attribute est obligatoire lorsque :values n\'est pas présent.',
'required_without_all' => 'Le champ :attribute est obligatoire lorsque aucun des :values n\'est présent.',
'same' => 'Le champ :attribute doit correspondre à :other.',
'size' => [
'array' => 'Le champ :attribute doit contenir :size éléments.',
'file' => 'Le champ :attribute doit faire :size kilooctets.',
'numeric' => 'Le champ :attribute doit être :size.',
'string' => 'Le champ :attribute doit faire :size caractères.',
],
'starts_with' => 'Le champ :attribute doit commencer par l\'une des valeurs suivantes : :values.',
'string' => 'Le champ :attribute doit être une chaîne de caractères.',
'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.',
'unique' => 'Ce :attribute est déjà utilisé.',
'uploaded' => 'Le téléchargement de :attribute a échoué.',
'uppercase' => 'Le champ :attribute doit être en majuscules.',
'url' => 'Le champ :attribute doit être une URL valide.',
'ulid' => 'Le champ :attribute doit être un ULID valide.',
'uuid' => 'Le champ :attribute doit être un UUID valide.',
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
'attributes' => [
'name' => 'nom',
'email' => 'e-mail',
'password' => 'mot de passe',
'address' => 'adresse',
'phone' => 'téléphone',
'description' => 'description',
'start_date' => 'date de début',
'end_date' => 'date de fin',
'end_date_estimated' => 'date de fin estimée',
'reference' => 'référence',
'status' => 'statut',
'type' => 'type',
'color' => 'couleur',
'progress_percent' => 'pourcentage de progression',
'tax_id' => 'SIRET',
'country' => 'pays',
'city' => 'ville',
'latitude' => 'latitude',
'longitude' => 'longitude',
'logo' => 'logo',
'avatar' => 'avatar',
'role' => 'rôle',
'company_id' => 'entreprise',
'current_password' => 'mot de passe actuel',
'new_password' => 'nouveau mot de passe',
'new_password_confirmation' => 'confirmation du nouveau mot de passe',
],
];
+430
View File
@@ -0,0 +1,430 @@
{
"Dashboard": "Панель управления",
"Projects": "Проекты",
"Project": "Проект",
"Create Project": "Создать проект",
"Edit Project": "Редактировать проект",
"New Project": "Новый проект",
"Delete Project": "Удалить проект",
"Project name": "Название проекта",
"Name": "Название",
"Address": "Адрес",
"Status": "Статус",
"Progress": "Прогресс",
"Phases": "Этапы",
"Phase": "Этап",
"Layer": "Слой",
"Layers": "Слои",
"Features": "Элементы",
"Feature": "Элемент",
"Create": "Создать",
"Edit": "Редактировать",
"Delete": "Удалить",
"Save": "Сохранить",
"Update": "Обновить",
"Cancel": "Отмена",
"Search": "Поиск",
"Filter": "Фильтр",
"Back": "Назад",
"Actions": "Действия",
"Map": "Карта",
"View Map": "Просмотр карты",
"Manage Layers": "Управление слоями",
"Upload Layer": "Загрузить слой",
"Upload file": "Загрузить файл",
"Download": "Скачать",
"Fullscreen": "Полный экран",
"Close": "Закрыть",
"Are you sure?": "Вы уверены?",
"No results": "Нет результатов",
"Loading": "Загрузка",
"Active projects": "Активные проекты",
"Total projects": "Всего проектов",
"Total phases": "Всего этапов",
"Total features": "Всего элементов",
"Global progress": "Общий прогресс",
"Recent projects": "Недавние проекты",
"Recent inspections": "Недавние осмотры",
"Planning": "Планирование",
"In progress": "В процессе",
"Paused": "Приостановлено",
"Completed": "Завершено",
"Progress updated": "Прогресс обновлен",
"Save progress": "Сохранить прогресс",
"Responsible": "Ответственный",
"Comment": "Комментарий",
"History": "История",
"Inspection": "Осмотр",
"Template": "Шаблон",
"Templates": "Шаблоны",
"Create Template": "Создать шаблон",
"Inspection template": "Шаблон осмотра",
"Field": "Поле",
"Fields": "Поля",
"Field name": "Имя поля",
"Field type": "Тип поля",
"Required": "Обязательно",
"Options": "Опции",
"Show images on map": "Показать изображения на карте",
"Project files": "Файлы проекта",
"Media": "Медиа",
"Images": "Изображения",
"Documents": "Документы",
"Upload images": "Загрузить изображения",
"Upload documents": "Загрузить документы",
"Upload files": "Загрузить файлы",
"Drop files here": "Перетащите файлы сюда",
"File": "Файл",
"Files": "Файлы",
"Category": "Категория",
"Description": "Описание",
"Size": "Размер",
"Uploaded by": "Загрузил",
"Uploaded at": "Загружено",
"No files yet": "Пока нет файлов",
"Delete file": "Удалить файл",
"Layer name": "Имя слоя",
"Layer color": "Цвет слоя",
"Import file": "Импорт файла",
"Empty layer": "Пустой слой",
"Create empty layer": "Создать пустой слой",
"Select phase": "Выбрать этап",
"Select project": "Выбрать проект",
"Visible layers": "Видимые слои",
"Edit layer": "Редактировать слой",
"Delete layer": "Удалить слой",
"Sign in": "Войти",
"Sign out": "Выйти",
"Register": "Регистрация",
"Email": "Эл. почта",
"Password": "Пароль",
"Confirm password": "Подтвердить пароль",
"Forgot password": "Забыли пароль",
"Remember me": "Запомнить меня",
"Profile": "Профиль",
"Update profile": "Обновить профиль",
"Language": "Язык",
"English": "Английский",
"Spanish": "Испанский",
"French": "Французский",
"Russian": "Русский",
"Select language": "Выберите язык",
"Notifications": "Уведомления",
"Permissions": "Разрешения",
"Administrator": "Администратор",
"Users": "Пользователи",
"Roles": "Роли",
"Click on an element to edit": "Нажмите на элемент для редактирования",
"No templates yet": "Пока нет шаблонов",
"Create an inspection template": "Создать шаблон осмотра",
"No phases yet": "Пока нет этапов",
"Start date": "Дата начала",
"Estimated end date": "Предполагаемая дата окончания",
"Centered in project": "Центр в проекте",
"My location": "Моя позиция",
"File type not allowed": "Тип файла не разрешен",
"Upload failed": "Ошибка загрузки",
"Conversion failed": "Ошибка конвертации",
"All": "Все",
"Latitude": "Широта",
"Longitude": "Долгота",
"Register inspection": "Зарегистрировать осмотр",
"Files of element": "Файлы элемента",
"Phases and layers": "Этапы и слои",
"Elements": "Элементы",
"optional": "необязательно",
"each": "каждый",
"Image": "Изображение",
"Document": "Документ",
"Other": "Другое",
"Color": "Цвет",
"Upload": "Загрузить",
"Assign": "Назначить",
"Role": "Роль",
"Supervisor": "Супервизор",
"Consultant": "Консультант",
"Client": "Клиент",
"Viewer": "Наблюдатель",
"Remove": "Удалить",
"No users assigned yet": "Пользователи не назначены",
"Select": "Выбрать",
"Log Out": "Выйти",
"Company": "Компания",
"Companies": "Компании",
"Company Management": "Управление компаниями",
"New Company": "Новая компания",
"Edit Company": "Редактировать компанию",
"Delete Company": "Удалить компанию",
"User Management": "Управление пользователями",
"New User": "Новый пользователь",
"Edit User": "Редактировать пользователя",
"Delete User": "Удалить пользователя",
"Reference": "Ссылка",
"Contact": "Контакт",
"Verified": "Подтвержден",
"Type": "Тип",
"Owner": "Владелец",
"Constructor": "Застройщик",
"Subcontractor": "Подрядчик",
"Supplier": "Поставщик",
"No role": "Нет роли",
"Active": "Активен",
"Inactive": "Неактивен",
"Suspended": "Приостановлен",
"Start Date": "Дата начала",
"Est. End": "Пред. конец",
"Issue": "Проблема",
"Issues": "Проблемы",
"New Issue": "Новая проблема",
"Open": "Открыто",
"Resolved": "Решено",
"Closed": "Закрыто",
"Priority": "Приоритет",
"High": "Высокий",
"Medium": "Средний",
"Low": "Низкий",
"Gantt": "Ганта",
"Report": "Отчет",
"Reports": "Отчеты",
"Created at": "Создано",
"Updated at": "Обновлено",
"Confirm delete": "Подтвердить удаление",
"This action cannot be undone": "Это действие нельзя отменить",
"No data": "Нет данных",
"Export CSV": "Экспорт CSV",
"Export PDF": "Экспорт PDF",
"Planned": "Запланировано",
"Started": "Начато",
"Map filters": "Фильтры карты",
"Progress: :min% :max%": "Прогресс: :min% :max%",
"Clear": "Очистить",
"Hide panel": "Скрыть панель",
"Show phases and layers": "Показать этапы и слои",
"Show images": "Показать изображения",
"Schedule": "Расписание",
"Center map": "Центр карты",
"Select element": "Выбрать элемент",
"Search by name, phase or layer...": "Поиск по имени, этапу или слою...",
"Element status": "Статус элемента",
"Notes": "Заметки",
"Result": "Результат",
"No result": "Нет результата",
"Approved": "Утверждено",
"Conditional": "Условно",
"Failed": "Не прошло",
"Registered data": "Зарегистрированные данные",
"Inspection #:id": "Осмотр №:id",
"Layer / Phase": "Слой / Этап",
"No templates (info)": "Нет шаблонов.",
"Create one": "Создать",
"Click on a map element or search above to edit it": "Нажмите на элемент карты или найдите его выше для редактирования",
"Date": "Дата",
"Inspector": "Инспектор",
"View detail": "Просмотр деталей",
"No inspections registered": "Нет зарегистрированных осмотров",
"No elements in this project": "Нет элементов в этом проекте",
"Inspections": "Осмотры",
"Project data": "Данные проекта",
"Team": "Команда",
"Save changes": "Сохранить изменения",
"Create project": "Создать проект",
"Identification": "Идентификация",
"Location": "Местоположение",
"Click on the map or drag the marker to update the location": "Нажмите на карту или перетащите маркер для обновления местоположения",
"Coordinates": "Координаты",
"Auto when clicking the map": "Авто при клике на карте",
"No country": "Страна не указана",
"Search country...": "Поиск страны...",
"Inspection templates": "Шаблоны осмотров",
"Import CSV/Excel": "Импорт CSV/Excel",
"Copy from project": "Копировать из проекта",
"New template": "Новый шаблон",
"Edit template": "Редактировать шаблон",
"Template name": "Имя шаблона",
"Associated phase (optional)": "Связанный этап (необязательно)",
"Global project": "Глобальный проект",
"Form fields": "Поля формы",
"field(s)": "поле(я)",
"Internal name": "Внутреннее имя",
"Visible label": "Видимая метка",
"Remove field": "Удалить поле",
"Min": "Мин",
"Max": "Макс",
"Step": "Шаг",
"Options (comma separated)": "Опции (через запятую)",
"Add field": "Добавить поле",
"Save template": "Сохранить шаблон",
"No templates yet (table)": "Нет шаблонов. Используйте кнопки выше для создания или импорта.",
"Delete template confirmation": "Удалить этот шаблон? Это действие нельзя отменить.",
"Import template from CSV / Excel": "Импорт шаблона из CSV / Excel",
"File format (one row = one field):": "Формат файла (одна строка = одно поле):",
"Download example": "Скачать пример",
"CSV or Excel file": "Файл CSV или Excel",
"Loading file...": "Загрузка файла...",
"Preview": "Предпросмотр",
"Change file": "Изменить файл",
"Create template (action)": "Создать шаблон",
"field(s) detected": "обнаружено поле(й)",
"Copy template from another project": "Копировать шаблон из другого проекта",
"Source project": "Исходный проект",
"Select project...": "Выбрать проект...",
"This project has no templates.": "У этого проекта нет шаблонов.",
"Select the templates to copy": "Выберите шаблоны для копирования",
"selected": "выбрано",
"Select a project to see its templates.": "Выберите проект, чтобы увидеть его шаблоны.",
"Copy": "Копировать",
"Back to map": "Назад к карте",
"Import": "Импорт",
"or": "или",
"Layers (:count)": "Слои (:count)",
"No layers. Create or import one.": "Нет слоев. Создайте или импортируйте один.",
"elem.": "элем.",
"Export": "Экспорт",
"Bulk assignment": "Массовое назначение",
"Apply template or status to all elements of :layer": "Применить шаблон или статус ко всем элементам :layer",
"No change": "Без изменений",
"Apply to all": "Применить ко всем",
"Apply changes to all elements of this layer?": "Применить изменения ко всем элементам этого слоя?",
"Element editor": "Редактор элементов",
"Select a layer to edit": "Выберите слой для редактирования",
"Delayed phases": "Отложенные этапы",
"Needs attention": "Требует внимания",
"No delays": "Нет задержек",
"phases": "этапы",
"Open issues": "Открытые проблемы",
"critical": "критично",
"Pending inspections": "Ожидающие осмотры",
"To do": "К выполнению",
"Completed inspections": "Завершенные осмотры",
"Rejected inspections": "Отклоненные осмотры",
"Need review": "Требуют проверки",
"View all": "Посмотреть все",
"No projects available": "Нет доступных проектов",
"phase": "этап",
"Recent issues": "Недавние проблемы",
"No open issues": "Нет открытых проблем",
"No recent inspections": "Нет недавних осмотров",
"User": "Пользователь",
"No users found": "Пользователи не найдены",
"No companies assigned yet": "Компании не назначены",
"Select template...": "Выбрать шаблон...",
"Observations...": "Наблюдения...",
"by": "от",
"ago": "назад",
"No inspections yet for this element": "Еще нет осмотров для этого элемента",
"Inspection History": "История осмотров",
"View": "Просмотр",
"Media for this element": "Медиа для этого элемента",
"No media for this element yet": "Нет медиа для этого элемента",
"Project Media": "Медиа проекта",
"No project media yet": "Нет медиа проекта",
"Feature:": "Элемент:",
"Inspection:": "Осмотр:",
"Project Data": "Данные проекта",
"Name of responsible": "Имя ответственного",
"Reports and Analytics": "Отчеты и Аналитика",
"Time range:": "Период:",
"This week": "На этой неделе",
"This month": "В этом месяце",
"This quarter": "В этом квартале",
"This year": "В этом году",
"Project Progress (last 6 months)": "Прогресс проекта (последние 6 месяцев)",
"Inspections by Type": "Осмотры по типу",
"Projects by Status": "Проекты по статусу",
"Average Progress by Project": "Средний прогресс по проекту",
"Total Active Projects": "Всего активных проектов",
"Inspections This Month": "Осмотры в этом месяце",
"Average Progress": "Средний прогресс",
"Completed Projects": "Завершенные проекты",
"Loading data...": "Загрузка данных...",
"Optional": "Необязательно",
"Expand layers": "Развернуть слои",
"New user": "Новый пользователь",
"Search by name or email...": "Поиск по имени или email...",
"No users found (table)": "Пользователи не найдены",
"Select element (label)": "Выбрать элемент",
"Search by name, layer or phase...": "Поиск по имени, слою или этапу...",
"No elements found": "Элементы не найдены",
"No media yet": "Нет медиа",
"Manage the companies that participate in projects": "Управление компаниями, участвующими в проектах",
"Search companies by name or tax ID...": "Поиск компаний по имени или ИНН...",
"Complete the company information. Fields marked with * are required.": "Заполните информацию о компании. Поля, отмеченные *, обязательны.",
"Validation errors": "Ошибки валидации",
"Tax ID": "ИНН",
"E.g.: B12345678": "Напр.: B12345678",
"Nickname": "Краткое имя",
"E.g.: Acme Construct": "Напр.: Acme Construct",
"Select a status": "Выберите статус",
"Company Type": "Тип компании",
"Select a type": "Выберите тип",
"Phone": "Телефон",
"Website": "Веб-сайт",
"Company Logo": "Логотип компании",
"Select file...": "Выберите файл...",
"Logo preview": "Предпросмотр логотипа",
"Additional notes": "Дополнительные заметки",
"No companies registered. Create your first company using the button above.": "Компании не зарегистрированы. Создайте свою первую компанию, используя кнопку выше.",
"Logo of": "Логотип",
"No tax ID": "Нет ИНН",
"Delete company confirmation": "Удалить эту компанию? Это действие нельзя отменить.",
"Company list": "Список компаний",
"Add Phase": "Добавить этап",
"Update": "Обновить",
"Delete file confirmation": "Удалить этот файл? Это действие нельзя отменить.",
"Back to map": "Назад к карте",
"Create generic templates that can be used in any phase of the project": "Создайте универсальные шаблоны, которые можно использовать в любой фазе проекта",
"In Progress": "В процессе",
"Select a project to see its templates.": "Выберите проект, чтобы увидеть его шаблоны.",
"Select a project to view details": "Выберите проект для просмотра деталей",
"No description available": "Нет описания",
"completed": "завершено",
"Back to projects": "Назад к проектам",
"Not defined": "Не определено",
"Progress overview": "Обзор прогресса",
"General progress": "Общий прогресс",
"Progress by phase": "Прогресс по этапам",
"No phases defined for this project": "Этапы не определены для этого проекта",
"Progress gallery": "Галерея прогресса",
"Change orders": "Заказы на изменения",
"Requested": "Запрошено",
"Amount": "Сумма",
"Approve": "Утвердить",
"Reject": "Отклонить",
"No pending change orders": "Нет ожидающих заказов на изменения",
"Pending": "В ожидании",
"Total": "Всего",
"Inspections": "Осмотры",
"My Projects": "Мои проекты",
"Editable": "Редактируемый",
"Name of responsible": "Имя ответственного",
"Select template...": "Выбрать шаблон...",
"Tasks": "Задачи",
"Task": "Задача",
"New Task": "Новая задача",
"Create Task": "Создать задачу",
"Edit Task": "Редактировать задачу",
"Delete Task": "Удалить задачу",
"Task title": "Название задачи",
"Task description": "Описание задачи",
"Due date": "Срок выполнения",
"Start date": "Дата начала",
"Estimated hours": "Оценка часов",
"Actual hours": "Фактические часы",
"Assigned to": "Назначено",
"Parent task": "Родительская задача",
"Subtasks": "Подзадачи",
"No subtasks": "Нет подзадач",
"Add subtask": "Добавить подзадачу",
"Comments": "Комментарии",
"Add comment": "Добавить комментарий",
"Write a comment...": "Написать комментарий...",
"No comments yet": "Пока нет комментариев",
"Task created": "Задача создана",
"Task updated": "Задача обновлена",
"Task deleted": "Задача удалена",
"Status changed": "Статус изменен",
"Overdue": "Просрочено",
"Due today": "Срок сегодня",
"Progress": "Прогресс",
"Order": "Порядок"
}
+20
View File
@@ -0,0 +1,20 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'Эти учетные данные не совпадают с нашими записями.',
'password' => 'Предоставленный пароль неверен.',
'throttle' => 'Слишком много попыток входа. Пожалуйста, попробуйте снова через :seconds секунд.',
];
+19
View File
@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Предыдущая',
'next' => 'Следующая &raquo;',
];
+22
View File
@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| outcome such as failure due to an invalid password / reset token.
|
*/
'reset' => 'Ваш пароль был сброшен.',
'sent' => 'Мы отправили ссылку для сброса пароля на вашу электронную почту.',
'throttled' => 'Пожалуйста, подождите перед повторной попыткой.',
'token' => 'Этот токен сброса пароля недействителен.',
'user' => "Мы не можем найти пользователя с таким адресом электронной почты.",
];
+194
View File
@@ -0,0 +1,194 @@
<?php
return [
'accepted' => 'Поле :attribute должно быть принято.',
'accepted_if' => 'Поле :attribute должно быть принято, когда :other равно :value.',
'active_url' => 'Поле :attribute должно быть действительным URL.',
'after' => 'Поле :attribute должно быть датой после :date.',
'after_or_equal' => 'Поле :attribute должно быть датой после или равно :date.',
'alpha' => 'Поле :attribute должно содержать только буквы.',
'alpha_dash' => 'Поле :attribute должно содержать только буквы, цифры, дефисы и подчеркивания.',
'alpha_num' => 'Поле :attribute должно содержать только буквы и цифры.',
'any_of' => 'Поле :attribute недействительно.',
'array' => 'Поле :attribute должно быть массивом.',
'ascii' => 'Поле :attribute должно содержать только однобайтовые буквенно-цифровые символы и знаки.',
'before' => 'Поле :attribute должно быть датой до :date.',
'before_or_equal' => 'Поле :attribute должно быть датой до или равно :date.',
'between' => [
'array' => 'Поле :attribute должно содержать от :min до :max элементов.',
'file' => 'Поле :attribute должно быть от :min до :max килобайт.',
'numeric' => 'Поле :attribute должно быть от :min до :max.',
'string' => 'Поле :attribute должно быть от :min до :max символов.',
],
'boolean' => 'Поле :attribute должно быть true или false.',
'can' => 'Поле :attribute содержит неавторизованное значение.',
'confirmed' => 'Подтверждение поля :attribute не совпадает.',
'contains' => 'Поле :attribute отсутствует обязательное значение.',
'current_password' => 'Пароль неверен.',
'date' => 'Поле :attribute должно быть действительной датой.',
'date_equals' => 'Поле :attribute должно быть датой, равной :date.',
'date_format' => 'Поле :attribute должно соответствовать формату :format.',
'decimal' => 'Поле :attribute должно иметь :decimal десятичных знаков.',
'declined' => 'Поле :attribute должно быть отклонено.',
'declined_if' => 'Поле :attribute должно быть отклонено, когда :other равно :value.',
'different' => 'Поле :attribute и :other должны быть разными.',
'digits' => 'Поле :attribute должно быть :digits цифр.',
'digits_between' => 'Поле :attribute должно быть от :min до :max цифр.',
'dimensions' => 'Поле :attribute имеет недействительные размеры изображения.',
'distinct' => 'Поле :attribute имеет дублирующееся значение.',
'doesnt_contain' => 'Поле :attribute не должно содержать следующие значения: :values.',
'doesnt_end_with' => 'Поле :attribute не должно заканчиваться на одно из следующих: :values.',
'doesnt_start_with' => 'Поле :attribute не должно начинаться с одного из следующих: :values.',
'email' => 'Поле :attribute должно быть действительным адресом электронной почты.',
'encoding' => 'Поле :attribute должно быть закодировано в :encoding.',
'ends_with' => 'Поле :attribute должно заканчиваться на одно из следующих: :values.',
'enum' => 'Выбранный :attribute недействителен.',
'exists' => 'Выбранный :attribute недействителен.',
'extensions' => 'Поле :attribute должно иметь одно из следующих расширений: :values.',
'file' => 'Поле :attribute должно быть файлом.',
'filled' => 'Поле :attribute должно иметь значение.',
'gt' => [
'array' => 'Поле :attribute должно содержать более :value элементов.',
'file' => 'Поле :attribute должно быть больше :value килобайт.',
'numeric' => 'Поле :attribute должно быть больше :value.',
'string' => 'Поле :attribute должно быть больше :value символов.',
],
'gte' => [
'array' => 'Поле :attribute должно иметь :value элементов или больше.',
'file' => 'Поле :attribute должно быть больше или равно :value килобайт.',
'numeric' => 'Поле :attribute должно быть больше или равно :value.',
'string' => 'Поле :attribute должно иметь :value символов или больше.',
],
'hex_color' => 'Поле :attribute должно быть действительным шестнадцатеричным цветом.',
'image' => 'Поле :attribute должно быть изображением.',
'in' => 'Выбранный :attribute недействителен.',
'in_array' => 'Поле :attribute должно существовать в :other.',
'in_array_keys' => 'Поле :attribute должно содержать хотя бы один из следующих ключей: :values.',
'integer' => 'Поле :attribute должно быть целым числом.',
'ip' => 'Поле :attribute должно быть действительным IP-адресом.',
'ipv4' => 'Поле :attribute должно быть действительным IPv4-адресом.',
'ipv6' => 'Поле :attribute должно быть действительным IPv6-адресом.',
'json' => 'Поле :attribute должно быть действительной JSON-строкой.',
'list' => 'Поле :attribute должно быть списком.',
'lowercase' => 'Поле :attribute должно быть в нижнем регистре.',
'lt' => [
'array' => 'Поле :attribute должно содержать менее :value элементов.',
'file' => 'Поле :attribute должно быть менее :value килобайт.',
'numeric' => 'Поле :attribute должно быть менее :value.',
'string' => 'Поле :attribute должно иметь менее :value символов.',
],
'lte' => [
'array' => 'Поле :attribute не должно иметь более :value элементов.',
'file' => 'Поле :attribute должно быть меньше или равно :value килобайт.',
'numeric' => 'Поле :attribute должно быть меньше или равно :value.',
'string' => 'Поле :attribute должно иметь :value символов или меньше.',
],
'mac_address' => 'Поле :attribute должно быть действительным MAC-адресом.',
'max' => [
'array' => 'Поле :attribute не должно иметь более :max элементов.',
'file' => 'Поле :attribute не должно быть больше :max килобайт.',
'numeric' => 'Поле :attribute не должно быть больше :max.',
'string' => 'Поле :attribute не должно иметь более :max символов.',
],
'max_digits' => 'Поле :attribute не должно иметь более :max цифр.',
'mimes' => 'Поле :attribute должно быть файлом типа: :values.',
'mimetypes' => 'Поле :attribute должно быть файлом типа: :values.',
'min' => [
'array' => 'Поле :attribute должно иметь не менее :min элементов.',
'file' => 'Поле :attribute должно быть не менее :min килобайт.',
'numeric' => 'Поле :attribute должно быть не менее :min.',
'string' => 'Поле :attribute должно иметь не менее :min символов.',
],
'min_digits' => 'Поле :attribute должно иметь не менее :min цифр.',
'missing' => 'Поле :attribute должно отсутствовать.',
'missing_if' => 'Поле :attribute должно отсутствовать, когда :other равно :value.',
'missing_unless' => 'Поле :attribute должно отсутствовать, если :other не в :values.',
'missing_with' => 'Поле :attribute должно отсутствовать, когда :values присутствует.',
'missing_with_all' => 'Поле :attribute должно отсутствовать, когда все :values присутствуют.',
'multiple_of' => 'Поле :attribute должно быть кратным :value.',
'not_in' => 'Выбранный :attribute недействителен.',
'not_regex' => 'Формат поля :attribute недействителен.',
'numeric' => 'Поле :attribute должно быть числом.',
'password' => [
'letters' => 'Поле :attribute должно содержать хотя бы одну букву.',
'mixed' => 'Поле :attribute должно содержать хотя бы одну заглавную и одну строчную букву.',
'numbers' => 'Поле :attribute должно содержать хотя бы одну цифру.',
'symbols' => 'Поле :attribute должно содержать хотя бы один символ.',
'uncompromised' => 'Данный :attribute был найден в утечке данных. Пожалуйста, выберите другой :attribute.',
],
'present' => 'Поле :attribute должно быть присутствовать.',
'present_if' => 'Поле :attribute должно быть присутствовать, когда :other равно :value.',
'present_unless' => 'Поле :attribute должно быть присутствовать, если :other не в :values.',
'present_with' => 'Поле :attribute должно быть присутствовать, когда :values присутствует.',
'present_with_all' => 'Поле :attribute должно быть присутствовать, когда все :values присутствуют.',
'prohibited' => 'Поле :attribute запрещено.',
'prohibited_if' => 'Поле :attribute запрещено, когда :other равно :value.',
'prohibited_if_accepted' => 'Поле :attribute запрещено, когда :other принято.',
'prohibited_if_declined' => 'Поле :attribute запрещено, когда :other отклонено.',
'prohibited_unless' => 'Поле :attribute запрещено, если :other не в :values.',
'prohibits' => 'Поле :attribute запрещает присутствие :other.',
'regex' => 'Формат поля :attribute недействителен.',
'required' => 'Поле :attribute обязательно.',
'required_array_keys' => 'Поле :attribute должно содержать записи для: :values.',
'required_if' => 'Поле :attribute обязательно, когда :other равно :value.',
'required_if_accepted' => 'Поле :attribute обязательно, когда :other принято.',
'required_if_declined' => 'Поле :attribute обязательно, когда :other отклонено.',
'required_unless' => 'Поле :attribute обязательно, если :other не в :values.',
'required_with' => 'Поле :attribute обязательно, когда :values присутствует.',
'required_with_all' => 'Поле :attribute обязательно, когда все :values присутствуют.',
'required_without' => 'Поле :attribute обязательно, когда :values отсутствует.',
'required_without_all' => 'Поле :attribute обязательно, когда ни один из :values не присутствует.',
'same' => 'Поле :attribute должно совпадать с :other.',
'size' => [
'array' => 'Поле :attribute должно содержать :size элементов.',
'file' => 'Поле :attribute должно быть :size килобайт.',
'numeric' => 'Поле :attribute должно быть :size.',
'string' => 'Поле :attribute должно быть :size символов.',
],
'starts_with' => 'Поле :attribute должно начинаться с одного из следующих значений: :values.',
'string' => 'Поле :attribute должно быть строкой.',
'timezone' => 'Поле :attribute должно быть действительным часовым поясом.',
'unique' => 'Этот :attribute уже используется.',
'uploaded' => 'Загрузка :attribute не удалась.',
'uppercase' => 'Поле :attribute должно быть в верхнем регистре.',
'url' => 'Поле :attribute должно быть действительным URL.',
'ulid' => 'Поле :attribute должно быть действительным ULID.',
'uuid' => 'Поле :attribute должно быть действительным UUID.',
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
'attributes' => [
'name' => 'название',
'email' => 'электронная почта',
'password' => 'пароль',
'address' => 'адрес',
'phone' => 'телефон',
'description' => 'описание',
'start_date' => 'дата начала',
'end_date' => 'дата окончания',
'end_date_estimated' => 'предполагаемая дата окончания',
'reference' => 'ссылка',
'status' => 'статус',
'type' => 'тип',
'color' => 'цвет',
'progress_percent' => 'процент прогресса',
'tax_id' => 'ИНН',
'country' => 'страна',
'city' => 'город',
'latitude' => 'широта',
'longitude' => 'долгота',
'logo' => 'логотип',
'avatar' => 'аватар',
'role' => 'роль',
'company_id' => 'компания',
'current_password' => 'текущий пароль',
'new_password' => 'новый пароль',
'new_password_confirmation' => 'подтверждение нового пароля',
],
];