Compare commits

..

34 Commits

Author SHA1 Message Date
Miguel Nogueira 85c719c24d Fix bad key name 2020-12-19 01:33:59 +00:00
Miguel Nogueira 5df3f965ef Merged in revert-pr-6 (pull request #7)
Revert "Apply fixes from StyleCI (pull request #6)"
2020-10-21 00:31:11 +00:00
Miguel Nogueira 4eb115d165 Revert "Apply fixes from StyleCI (pull request #6)"
This reverts pull request #6.

> This pull request applies code style fixes from an analysis carried out by [StyleCI](https://bitbucket.styleci.io).
> 
> For more information, click [here](https://bitbucket.styleci.io/analyses/a2Jl7D).
2020-10-21 00:29:50 +00:00
Miguel Nogueira 0433ce7693 Merged in analysis-a2Jl7D (pull request #6)
Apply fixes from StyleCI
2020-10-21 00:24:54 +00:00
Miguel Nogueira 773ec570d9 Apply fixes from StyleCI 2020-10-21 00:01:41 +00:00
Miguel Nogueira 53c23f3698 Changed branding for the repo 2020-10-21 00:01:32 +00:00
Miguel Nogueira f1db159eee
Update SECURITY.md 2020-09-08 17:44:56 +01:00
Miguel Nogueira 0d14a65ee5
Create SECURITY.md 2020-09-08 17:32:56 +01:00
Miguel Nogueira 2942157603
Update README.md 2020-09-08 06:16:27 +01:00
Miguel Nogueira 11f3fb90d0
Update README.md 2020-09-08 06:16:14 +01:00
Miguel Nogueira 937a0206a5 Added existing account check to logs 2020-09-08 01:38:56 +01:00
Miguel Nogueira 3598a32ecf Added existing account check to logs 2020-09-08 01:37:33 +01:00
Miguel Nogueira ac8b303e2c Update to logauthfailure 2020-09-08 01:34:47 +01:00
Miguel Nogueira e93abd2ab7 Added logging for successful authentication attempts 2020-09-08 01:31:09 +01:00
Miguel Nogueira 20ab381076 Added logging for failed authentication attempts 2020-09-08 01:26:27 +01:00
Miguel Nogueira e566e40404 Update target user in logs 2020-09-08 00:07:50 +01:00
Miguel Nogueira b0a935b8b3 Add acceptable "permanent" ban time 2020-09-08 00:06:27 +01:00
Miguel Nogueira 0dfb68dba2 Add acceptable "permanent" ban time 2020-09-08 00:05:37 +01:00
Miguel Nogueira 24303052ad Ban validation update 2020-09-07 23:57:50 +01:00
Miguel Nogueira 178bc31a6e Ban datetime format 2020-09-07 23:44:14 +01:00
Miguel Nogueira 98e557a840 Update ban dates 2020-09-07 23:42:09 +01:00
Miguel Nogueira 95bf7c239e Update ban time logic 2020-09-07 23:38:25 +01:00
Miguel Nogueira 4d2595dd39 Update ban logic 2020-09-07 23:33:35 +01:00
Miguel Nogueira 4e81a41210 Updated installation process 2020-09-07 23:22:25 +01:00
Miguel Nogueira 1319ce6b86 Added more debug logging 2020-09-07 22:56:54 +01:00
Miguel Nogueira bea83b650c Added more debug logging 2020-09-07 22:54:20 +01:00
Miguel Nogueira 675cc3c329 Import missing facade 2020-09-07 22:35:42 +01:00
Miguel Nogueira e8119b763c Register Application observers 2020-09-07 21:43:48 +01:00
Miguel Nogueira 04838048ce
Merge pull request #10 from spacejewel-hosting/translate
Force new users to verify email
2020-09-03 20:22:11 +01:00
Miguel Nogueira 7292aab4b7
Merge pull request #9 from spacejewel-hosting/translate
Menu translations and source files
2020-09-03 17:38:18 +01:00
Miguel Nogueira e37b38f2d9
Update README.md 2020-09-03 17:19:15 +01:00
Miguel Nogueira c83e720a6d
Create CONTRIBUTING.md 2020-09-03 17:18:28 +01:00
Miguel Nogueira fbd1e83306
Create CODE_OF_CONDUCT.md 2020-09-03 04:47:42 +01:00
Miguel Nogueira 50ed47964c
Merge pull request #5 from spacejewel-hosting/translate
New translations (i10n)

This merge adds the following;
 - Completed Portuguese translations
 - Spanish and French translation templates
 - Several bugfixes to Vacancies, Applications, and Appointments
 - Added missing translations
 - Language selection menu

Next feature for 0.6.0:
 - Self updater with Artisan command for non-git installations
2020-09-03 04:38:25 +01:00
30 changed files with 1400 additions and 1145 deletions

View File

@ -21,9 +21,6 @@ RECAPTCHA_PRIVATE_KEY=
RECAPTCHA_VERIFY_URL="https://www.google.com/recaptcha/api/siteverify" RECAPTCHA_VERIFY_URL="https://www.google.com/recaptcha/api/siteverify"
# WARNING: Your contact form will be useless if you change this value. Only change this URL if Google updates it. # WARNING: Your contact form will be useless if you change this value. Only change this URL if Google updates it.
IPGEO_API_KEY=""
IPGEO_API_URL=""
MOJANG_STATUS_URL="https://status.mojang.com/check" MOJANG_STATUS_URL="https://status.mojang.com/check"
MOJANG_API_URL="https://api.mojang.com" MOJANG_API_URL="https://api.mojang.com"
@ -32,7 +29,7 @@ IPGEO_API_URL="https://api.ipgeolocation.io/ipgeo"
ARCANEDEV_LOGVIEWER_MIDDLEWARE=web,auth,can:admin.maintenance.logs.view ARCANEDEV_LOGVIEWER_MIDDLEWARE=web,auth,can:admin.maintenance.logs.view
RELEASE=staffmanagement@0.2.0 RELEASE=staffmanagement@0.6.1
SLACK_INTEGRATION_WEBHOOK= SLACK_INTEGRATION_WEBHOOK=
@ -68,4 +65,8 @@ PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
# Mostly for developers, but with Papertrail, you can easily see what the app's users are doing without relying on
# the internal log viewer.
SENTRY_LARAVEL_DSN= SENTRY_LARAVEL_DSN=
PAPERTRAIL_URL=
PAPERTRAIL_PORT

76
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at support@spacejewel-hosting.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq

29
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,29 @@
# Thank you for contributing!
Read this file carefully before contributing to the project. It's important that everyone follows these rules to ensure smooth contribution.
## General workflow
Since the project is under version 1.0.0, the master branch can be quite unstable, and even unusable. For this reason, I recommend you stick to the published
releases, unless you intend on helping out with the project.
New features are commited directly to the ``master`` branch, while translations are commited to a special service branch, merged onto ``translate``, tested, and
merged back to master. Above version 1.0.0, new features should follow the same procedure as translations.
## Before commiting
Before commiting, make sure your code adheres to the Laravel coding guidelines, as well as PSR-4. I'll personally review and merge each PR.
Thank you for your interest!
# Bug reports
As always, bug reports should stick to the bug report template. GitHub makes this easy for you by letting you choose which issue template you'd like to use
before reporting an isuse. This helps everyone stay in the same page.
Issues published without a template might take longer to be resolved, or may be ignored and marked ``wontfix``.
# Licensing
Any contributions you make will be under the GNU GPL v3 license, which is the license that covers this project.

View File

@ -1,6 +1,6 @@
# Raspberry Teams - The Simple Staff Application Manager v 0.1.0 [![Crowdin](https://badges.crowdin.net/raspberry-staff-manager/localized.svg)](https://crowdin.com/project/raspberry-staff-manager) # RB Recruiter v 0.6.2 [![Crowdin](https://badges.crowdin.net/raspberry-staff-manager/localized.svg)](https://crowdin.com/project/raspberry-staff-manager)
## The quick and pain-free staff application manager ## The quick and pain-free form management solution for communities
Have you ever gotten tired of managing your Minecraft server/network's applications through Discord (or anything else) and having to scroll through hundreds of new messages just to find that one applicant's username? Have you ever gotten tired of managing your Minecraft server/network's applications through Discord (or anything else) and having to scroll through hundreds of new messages just to find that one applicant's username?
@ -47,6 +47,14 @@ Tech stack:
- AdminLTE / Bootstrap 4 - AdminLTE / Bootstrap 4
- jQuery / Plain Javascript - jQuery / Plain Javascript
- vueJS (in the future) - vueJS (in the future)
# Stability
Currently, the ``master`` branch is highly unstable, since it's under active development. Expect it to break with each commit. Even though I make an effort to make sure each commit is good to go before pushing, things might still break unexpectedly, and you may find a lot of bugs (which you should report).
Every released version is currently pre-release. If you really want to run this before version ``1.0.0`` comes out, always stay on the latest version, as those will always be tested before release, ensuring less chaos.
*Note: This application is NOT production ready! It won't be until the first stable release comes out, which might take a bit longer.
# Operating System Requirements # Operating System Requirements

19
SECURITY.md Normal file
View File

@ -0,0 +1,19 @@
# Security Policy
## Supported Versions
The following versions are currently supported:
| Version | Supported |
| ------- | ------------------ |
| 0.1.x | :x: |
| 0.5.x | :x: |
| 0.6.x | :white_check_mark: |
## Reporting a Vulnerability
To securely report a vulnerability, you may send me an email directly containing the details of said vulnerability: ``me@nogueira.codes``.
You may optionally encrypt your message with my [public PGP key](http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x48DF709E7405702B).
Use this free [online encryption tool](https://www.igolder.com/pgp/encryption/) if you don't know how to use PGP on your desktop.

View File

@ -8,7 +8,7 @@ class Ban extends Model
{ {
public $fillable = [ public $fillable = [
'userID', 'userID',
'reason', 'reason',
'bannedUntil', 'bannedUntil',
@ -16,7 +16,11 @@ class Ban extends Model
'authorUserID' 'authorUserID'
]; ];
public $dates = [
'bannedUntil'
];
public function user() public function user()
{ {
return $this->belongsTo('App\User', 'userID', 'id'); return $this->belongsTo('App\User', 'userID', 'id');

View File

@ -99,12 +99,16 @@ class Install extends Command
$settings['MAIL_PASSWORD'] = $this->secret('SMTP Password (Input won\'t be seen)'); $settings['MAIL_PASSWORD'] = $this->secret('SMTP Password (Input won\'t be seen)');
$settings['MAIL_PORT'] = $this->ask('SMTP Server Port'); $settings['MAIL_PORT'] = $this->ask('SMTP Server Port');
$settings['MAIL_HOST'] = $this->ask('SMTP Server Hostname'); $settings['MAIL_HOST'] = $this->ask('SMTP Server Hostname');
$settings['MAIL_FROM_ADDRESS'] = $this->ask('E-mail address to send from');
$this->info('== Notification Settings (5/6) (Slack) =='); $this->info('== Notification Settings (5/6) (Slack) ==');
$settings['SLACK_INTEGRATION_WEBHOOK'] = $this->ask('Integration webhook URL'); $settings['SLACK_INTEGRATION_WEBHOOK'] = $this->ask('Integration webhook URL');
$this->info('== Web Settings (6/6) =='); $this->info('== Web Settings (6/6) ==');
$settings['APP_URL'] = $this->ask('Application\'s URL'); $settings['APP_URL'] = $this->ask('Application\'s URL (ex. https://where.you.installed.theapp.com): ');
$settings['APP_LOGO'] = $this->ask('App logo (Link to an image): ');
$settings['APP_SITEHOMEPAGE'] = $this->ask('Site homepage (appears in the main header): ');
} while(!$this->confirm('Are you sure you want to save these settings? You can always go back and try again.')); } while(!$this->confirm('Are you sure you want to save these settings? You can always go back and try again.'));

View File

@ -15,7 +15,7 @@ class BanController extends Controller
public function insert(BanUserRequest $request, User $user) public function insert(BanUserRequest $request, User $user)
{ {
$this->authorize('create', Ban::class); $this->authorize('create', [Ban::class, $user]);
if (is_null($user->bans)) if (is_null($user->bans))
{ {
@ -50,13 +50,13 @@ class BanController extends Controller
else else
{ {
// Essentially permanent // Essentially permanent
$expiryDate->addYears(100); $expiryDate->addYears(5);
} }
$ban = Ban::create([ $ban = Ban::create([
'userID' => $user->id, 'userID' => $user->id,
'reason' => $reason, 'reason' => $reason,
'bannedUntil' => $expiryDate->toDateTimeString() ?? null, 'bannedUntil' => $expiryDate->format('Y-m-d H:i:s'),
'userAgent' => "Unknown", 'userAgent' => "Unknown",
'authorUserID' => Auth::user()->id 'authorUserID' => Auth::user()->id
]); ]);

View File

@ -7,6 +7,7 @@ use App\Options as Option;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class OptionsController extends Controller class OptionsController extends Controller
{ {
@ -29,17 +30,33 @@ class OptionsController extends Controller
{ {
if (Auth::user()->can('admin.settings.edit')) if (Auth::user()->can('admin.settings.edit'))
{ {
Log::debug('Updating application options', [
'ip' => $request->ip(),
'ua' => $request->userAgent(),
'username' => Auth::user()->username
]);
foreach($request->all() as $optionName => $option) foreach($request->all() as $optionName => $option)
{ {
try try
{ {
if (Options::optionExists($option)) Log::debug('Going through option ' . $optionName);
if (Options::optionExists($optionName))
{ {
Log::debug('Option exists, updating to new values', [
'opt' => $optionName,
'new_value' => $option
]);
Options::changeOption($optionName, $option); Options::changeOption($optionName, $option);
} }
} }
catch(\Exception $ex) catch(\Exception $ex)
{ {
Log::error('Unable to update options!', [
'msg' => $ex->getMessage(),
'trace' => $ex->getTraceAsString()
]);
report($ex);
$errorCond = true; $errorCond = true;
$request->session()->flash('error', 'An error occurred while trying to save settings: ' . $ex->getMessage()); $request->session()->flash('error', 'An error occurred while trying to save settings: ' . $ex->getMessage());
} }

View File

@ -27,7 +27,7 @@ class BanUserRequest extends FormRequest
{ {
return [ return [
'reason' => 'required|string', 'reason' => 'required|string',
'durationOperand' => 'nullable|integer', 'durationOperand' => 'nullable|string',
'durationOperator' => 'nullable|string' 'durationOperator' => 'nullable|string'
]; ];
} }

View File

@ -0,0 +1,45 @@
<?php
namespace App\Listeners;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class LogAuthenticationFailure
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
$targetAccountID = 0;
$originalIP = "0.0.0.0";
if (isset($event->user->id))
{
$targetAccountID = $event->user->id;
}
Log::alert('SECURITY (login): Detected failed authentication attempt!', [
'targetAccountID' => $targetAccountID,
'existingAccount' => ($targetAccountID == 0) ? false : true,
'sourceIP' => request()->ip(),
'matchesAccountLastIP' => request()->ip() == $originalIP,
'sourceUserAgent' => request()->userAgent(),
]);
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace App\Listeners;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class LogAuthenticationSuccess
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
Log::info('SECURITY (postauth-pre2fa): Detected successful login attempt', [
'accountID' => $event->user->id,
'sourceIP' => request()->ip(),
'matchesAccountLastIP' => request()->ip() == $event->user->originalIP,
'sourceUserAgent' => request()->userAgent(),
]);
}
}

View File

@ -3,6 +3,7 @@
namespace App\Observers; namespace App\Observers;
use App\Application; use App\Application;
use Illuminate\Support\Facades\Log;
class ApplicationObserver class ApplicationObserver
{ {
@ -55,7 +56,7 @@ class ApplicationObserver
} }
} }
// application can now be deleted // application can now be deleted
} }
/** /**

View File

@ -38,18 +38,19 @@ class BanPolicy
/** /**
* Determine whether the user can create models. * Determine whether the user can create models.
* *
* @param \App\User $user * @param \App\User $user
* @param User $targetUser
* @return mixed * @return mixed
*/ */
public function create(User $user) public function create(User $user, User $targetUser)
{ {
Log::debug("Authorization check started", [ Log::debug("Authorization check started", [
'requiredRoles' => 'admin', 'requiredRoles' => 'admin',
'currentRoles' => $user->roles(),
'hasRequiredRole' => $user->hasRole('admin'), 'hasRequiredRole' => $user->hasRole('admin'),
'targetUser' => $targetUser->username,
'isCurrentUser' => Auth::user()->is($user) 'isCurrentUser' => Auth::user()->is($user)
]); ]);
return $user->hasRole('admin') && Auth::user()->isNot($user); return $user->hasRole('admin') && $user->isNot($targetUser);
} }
/** /**

View File

@ -2,6 +2,8 @@
namespace App\Providers; namespace App\Providers;
use App\Application;
use App\Observers\ApplicationObserver;
use App\Observers\UserObserver; use App\Observers\UserObserver;
use App\User; use App\User;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@ -32,7 +34,9 @@ class AppServiceProvider extends ServiceProvider
]); ]);
Schema::defaultStringLength(191); Schema::defaultStringLength(191);
User::observe(UserObserver::class); User::observe(UserObserver::class);
Application::observe(ApplicationObserver::class);
$this->app['request']->server->set('HTTPS', $this->app->environment() != 'local'); $this->app['request']->server->set('HTTPS', $this->app->environment() != 'local');
} }

View File

@ -2,7 +2,11 @@
namespace App\Providers; namespace App\Providers;
use App\Listeners\LogAuthenticationFailure;
use App\Listeners\LogAuthenticationSuccess;
use App\Listeners\OnUserRegistration; use App\Listeners\OnUserRegistration;
use Illuminate\Auth\Events\Failed;
use Illuminate\Auth\Events\Login;
use Illuminate\Auth\Events\Registered; use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification; use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
@ -20,6 +24,12 @@ class EventServiceProvider extends ServiceProvider
SendEmailVerificationNotification::class, SendEmailVerificationNotification::class,
OnUserRegistration::class OnUserRegistration::class
], ],
Failed::class => [
LogAuthenticationFailure::class
],
Login::class => [
LogAuthenticationSuccess::class
],
'App\Events\ApplicationApprovedEvent' => [ 'App\Events\ApplicationApprovedEvent' => [
'App\Listeners\PromoteUser' 'App\Listeners\PromoteUser'
], ],

View File

@ -13,7 +13,7 @@ return [
| |
*/ */
'failed' => 'Estas credenciales no coinciden con nuestros registros.', 'failed' => 'These credentials do not match our records.',
'throttle' => 'Demasiados intentos de inicio de sesión. Por favor, inténtalo de nuevo en :seconds segundos.', 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
]; ];

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ return [
| |
*/ */
'previous' => '&laquo; Anterior', 'previous' => '&laquo; Previous',
'next' => 'Siguiente &raquo;', 'next' => 'Next &raquo;',
]; ];

View File

@ -13,10 +13,10 @@ return [
| |
*/ */
'reset' => '¡Tu contraseña ha sido restablecida!', 'reset' => 'Your password has been reset!',
'sent' => '¡Hemos enviado por correo electrónico tu enlace de restablecimiento de contraseña!', 'sent' => 'We have emailed your password reset link!',
'throttled' => 'Por favor, espere antes de reintentar.', 'throttled' => 'Please wait before retrying.',
'token' => 'Este token de restablecimiento de contraseña no es válido.', 'token' => 'This password reset token is invalid.',
'user' => "No podemos encontrar un usuario con esa dirección de correo electrónico.", 'user' => "We can't find a user with that email address.",
]; ];

View File

@ -13,110 +13,110 @@ return [
| |
*/ */
'accepted' => 'El campo :attribute debe ser aceptado.', 'accepted' => 'The :attribute must be accepted.',
'active_url' => ':attribute no es una URL válida.', 'active_url' => 'The :attribute is not a valid URL.',
'after' => ':attribute debe ser una fecha posterior a :date.', 'after' => 'The :attribute must be a date after :date.',
'after_or_equal' => ':attribute debe ser una fecha posterior o igual a :date.', 'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
'alpha' => ':attribute sólo puede contener letras.', 'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => ':attribute sólo puede contener letras, números, guiones y guiones bajos.', 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
'alpha_num' => ':attribute sólo puede contener letras y números.', 'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'El campo :attribute debe ser un array.', 'array' => 'The :attribute must be an array.',
'before' => ':attribute debe ser una fecha anterior a :date.', 'before' => 'The :attribute must be a date before :date.',
'before_or_equal' => ':attribute debe ser una fecha anterior o igual a :date.', 'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
'between' => [ 'between' => [
'numeric' => ':attribute debe estar entre :min y :max.', 'numeric' => 'The :attribute must be between :min and :max.',
'file' => ':attribute debe estar entre :min y :max kilobytes.', 'file' => 'The :attribute must be between :min and :max kilobytes.',
'string' => ':attribute debe tener entre :min y :max caracteres.', 'string' => 'The :attribute must be between :min and :max characters.',
'array' => ':attribute debe tener entre :min y :max elementos.', 'array' => 'The :attribute must have between :min and :max items.',
], ],
'boolean' => 'El campo :attribute debe ser verdadero o falso.', 'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'El :attribute de confirmación no coincide.', 'confirmed' => 'The :attribute confirmation does not match.',
'date' => ':attribute no es una fecha válida.', 'date' => 'The :attribute is not a valid date.',
'date_equals' => ':attribute debe ser una fecha igual a :date.', 'date_equals' => 'The :attribute must be a date equal to :date.',
'date_format' => ':attribute no coincide con el formato :format.', 'date_format' => 'The :attribute does not match the format :format.',
'different' => ':attribute y :other deben ser diferentes.', 'different' => 'The :attribute and :other must be different.',
'digits' => ':attribute debe tener :digits dígitos.', 'digits' => 'The :attribute must be :digits digits.',
'digits_between' => ':attribute debe tener entre :min y :max dígitos.', 'digits_between' => 'The :attribute must be between :min and :max digits.',
'dimensions' => 'El campo :attribute tiene dimensiones de imagen inválidas.', 'dimensions' => 'The :attribute has invalid image dimensions.',
'distinct' => 'El campo :attribute tiene un valor duplicado.', 'distinct' => 'The :attribute field has a duplicate value.',
'email' => ':attribute debe ser una dirección de correo electrónico válida.', 'email' => 'The :attribute must be a valid email address.',
'ends_with' => 'El campo :attribute debe terminar con uno de los siguientes: :values.', 'ends_with' => 'The :attribute must end with one of the following: :values.',
'exists' => 'El :attribute seleccionado no es válido.', 'exists' => 'The selected :attribute is invalid.',
'file' => ':attribute debe ser un archivo.', 'file' => 'The :attribute must be a file.',
'filled' => 'El campo :attribute debe tener un valor.', 'filled' => 'The :attribute field must have a value.',
'gt' => [ 'gt' => [
'numeric' => 'El campo :attribute debe ser mayor que :value.', 'numeric' => 'The :attribute must be greater than :value.',
'file' => ':attribute debe ser mayor que :value kilobytes.', 'file' => 'The :attribute must be greater than :value kilobytes.',
'string' => ':attribute debe ser mayor que :value caracteres.', 'string' => 'The :attribute must be greater than :value characters.',
'array' => 'El campo :attribute debe tener más de :value items.', 'array' => 'The :attribute must have more than :value items.',
], ],
'gte' => [ 'gte' => [
'numeric' => 'El campo :attribute debe ser mayor o igual a :value.', 'numeric' => 'The :attribute must be greater than or equal :value.',
'file' => ':attribute debe ser mayor o igual a :value kilobytes.', 'file' => 'The :attribute must be greater than or equal :value kilobytes.',
'string' => 'El campo :attribute debe ser mayor o igual a :value caracteres.', 'string' => 'The :attribute must be greater than or equal :value characters.',
'array' => ':attribute debe tener :value o más.', 'array' => 'The :attribute must have :value items or more.',
], ],
'image' => 'El campo :attribute debe ser una imagen.', 'image' => 'The :attribute must be an image.',
'in' => 'El :attribute seleccionado no es válido.', 'in' => 'The selected :attribute is invalid.',
'in_array' => 'El campo :attribute no existe en :other.', 'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'El campo :attribute debe ser un entero.', 'integer' => 'The :attribute must be an integer.',
'ip' => ':attribute debe ser una dirección IP válida.', 'ip' => 'The :attribute must be a valid IP address.',
'ipv4' => ':attribute debe ser una dirección IPv4 válida.', 'ipv4' => 'The :attribute must be a valid IPv4 address.',
'ipv6' => ':attribute debe ser una dirección IPv6 válida.', 'ipv6' => 'The :attribute must be a valid IPv6 address.',
'json' => ':attribute debe ser una cadena JSON válida.', 'json' => 'The :attribute must be a valid JSON string.',
'lt' => [ 'lt' => [
'numeric' => 'El campo :attribute debe ser menor que :value.', 'numeric' => 'The :attribute must be less than :value.',
'file' => ':attribute debe ser menor que :value kilobytes.', 'file' => 'The :attribute must be less than :value kilobytes.',
'string' => ':attribute debe tener menos de :value caracteres.', 'string' => 'The :attribute must be less than :value characters.',
'array' => ':attribute debe tener menos de :value elementos.', 'array' => 'The :attribute must have less than :value items.',
], ],
'lte' => [ 'lte' => [
'numeric' => 'El campo :attribute debe ser menor o igual a :value.', 'numeric' => 'The :attribute must be less than or equal :value.',
'file' => ':attribute debe ser menor o igual a :value kilobytes.', 'file' => 'The :attribute must be less than or equal :value kilobytes.',
'string' => ':attribute debe ser menor o igual a :value caracteres.', 'string' => 'The :attribute must be less than or equal :value characters.',
'array' => 'El campo :attribute no debe tener más de :value items.', 'array' => 'The :attribute must not have more than :value items.',
], ],
'max' => [ 'max' => [
'numeric' => ':attribute no puede ser mayor que :max.', 'numeric' => 'The :attribute may not be greater than :max.',
'file' => ':attribute no puede ser mayor que :max kilobytes.', 'file' => 'The :attribute may not be greater than :max kilobytes.',
'string' => ':attribute no puede ser mayor que :max caracteres.', 'string' => 'The :attribute may not be greater than :max characters.',
'array' => ':attribute no puede tener más de :max elementos.', 'array' => 'The :attribute may not have more than :max items.',
], ],
'mimes' => 'El campo :attribute debe ser un archivo de tipo: :values.', 'mimes' => 'The :attribute must be a file of type: :values.',
'mimetypes' => 'El campo :attribute debe ser un archivo de tipo: :values.', 'mimetypes' => 'The :attribute must be a file of type: :values.',
'min' => [ 'min' => [
'numeric' => ':attribute debe ser al menos :min.', 'numeric' => 'The :attribute must be at least :min.',
'file' => ':attribute debe tener al menos :min kilobytes.', 'file' => 'The :attribute must be at least :min kilobytes.',
'string' => ':attribute debe tener al menos :min caracteres.', 'string' => 'The :attribute must be at least :min characters.',
'array' => ':attribute debe tener al menos :min items.', 'array' => 'The :attribute must have at least :min items.',
], ],
'not_in' => 'El :attribute seleccionado no es válido.', 'not_in' => 'The selected :attribute is invalid.',
'not_regex' => 'El formato :attribute no es válido.', 'not_regex' => 'The :attribute format is invalid.',
'numeric' => ':attribute debe ser un número.', 'numeric' => 'The :attribute must be a number.',
'password' => 'La contraseña es incorrecta.', 'password' => 'The password is incorrect.',
'present' => 'El campo :attribute debe estar presente.', 'present' => 'The :attribute field must be present.',
'regex' => 'El formato :attribute no es válido.', 'regex' => 'The :attribute format is invalid.',
'required' => 'El campo :attribute es obligatorio.', 'required' => 'The :attribute field is required.',
'required_if' => 'El campo :attribute es obligatorio cuando :other es :value.', 'required_if' => 'The :attribute field is required when :other is :value.',
'required_unless' => 'El campo :attribute es obligatorio a menos que :other esté en :values.', 'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'El campo :attribute es obligatorio cuando :values está presente.', 'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'El campo :attribute es obligatorio cuando :values están presentes.', 'required_with_all' => 'The :attribute field is required when :values are present.',
'required_without' => 'El campo :attribute es obligatorio cuando :values no está presente.', 'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'El campo :attribute es obligatorio cuando ninguno de :values están presentes.', 'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => ':attribute y :other deben coincidir.', 'same' => 'The :attribute and :other must match.',
'size' => [ 'size' => [
'numeric' => 'El campo :attribute debe ser :size.', 'numeric' => 'The :attribute must be :size.',
'file' => ':attribute debe ser :size kilobytes.', 'file' => 'The :attribute must be :size kilobytes.',
'string' => 'El campo :attribute debe tener :size caracteres.', 'string' => 'The :attribute must be :size characters.',
'array' => 'El campo :attribute debe contener :size items.', 'array' => 'The :attribute must contain :size items.',
], ],
'starts_with' => 'El campo :attribute debe comenzar con uno de los siguientes: :values.', 'starts_with' => 'The :attribute must start with one of the following: :values.',
'string' => 'El campo :attribute debe ser una cadena.', 'string' => 'The :attribute must be a string.',
'timezone' => ':attribute debe ser una zona válida.', 'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'El atributo :attribute ya está en uso.', 'unique' => 'The :attribute has already been taken.',
'uploaded' => 'El atributo :attribute no se pudo cargar.', 'uploaded' => 'The :attribute failed to upload.',
'url' => 'El formato :attribute no es válido.', 'url' => 'The :attribute format is invalid.',
'uuid' => ':attribute debe ser un UUID válido.', 'uuid' => 'The :attribute must be a valid UUID.',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -131,7 +131,7 @@ return [
'custom' => [ 'custom' => [
'attribute-name' => [ 'attribute-name' => [
'rule-name' => 'mensaje personalizado', 'rule-name' => 'custom-message',
], ],
], ],

View File

@ -13,7 +13,7 @@ return [
| |
*/ */
'failed' => 'Ces identifiants ne correspondent pas à nos enregistrements.', 'failed' => 'These credentials do not match our records.',
'throttle' => 'Trop de tentatives de connexion. Veuillez réessayer dans :seconds secondes.', 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
]; ];

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ return [
| |
*/ */
'previous' => '&laquo; Précédent', 'previous' => '&laquo; Previous',
'next' => 'Suivant &raquo;', 'next' => 'Next &raquo;',
]; ];

View File

@ -13,10 +13,10 @@ return [
| |
*/ */
'reset' => 'Votre mot de passe a été réinitialisé !', 'reset' => 'Your password has been reset!',
'sent' => 'Nous avons envoyé un e-mail pour réinitialiser votre mot de passe!', 'sent' => 'We have emailed your password reset link!',
'throttled' => 'Veuillez patienter avant de réessayer.', 'throttled' => 'Please wait before retrying.',
'token' => 'Ce jeton de réinitialisation de mot de passe est invalide.', 'token' => 'This password reset token is invalid.',
'user' => "Nous ne pouvons pas trouver un utilisateur avec cette adresse e-mail.", 'user' => "We can't find a user with that email address.",
]; ];

View File

@ -13,110 +13,110 @@ return [
| |
*/ */
'accepted' => 'L\'attribut :attribute doit être accepté.', 'accepted' => 'The :attribute must be accepted.',
'active_url' => 'Le champ :attribute n\'est pas une URL valide.', 'active_url' => 'The :attribute is not a valid URL.',
'after' => 'Le champ :attribute doit être une date après :date.', 'after' => 'The :attribute must be a date after :date.',
'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale à :date.', 'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
'alpha' => 'Le champ :attribute ne peut contenir que des lettres.', 'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => ':attribute ne peut contenir que des lettres, des chiffres, des tirets et des tirets bas.', 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
'alpha_num' => 'Le champ :attribute ne peut contenir que des lettres et des chiffres.', 'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => ':attribute doit être un tableau.', 'array' => 'The :attribute must be an array.',
'before' => 'Le champ :attribute doit être une date avant :date.', 'before' => 'The :attribute must be a date before :date.',
'before_or_equal' => ':attribute doit être une date antérieure ou égale à :date.', 'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
'between' => [ 'between' => [
'numeric' => 'Le champ :attribute doit être entre :min et :max.', 'numeric' => 'The :attribute must be between :min and :max.',
'file' => 'Le champ :attribute doit être compris entre :min et :max kilo-octets.', 'file' => 'The :attribute must be between :min and :max kilobytes.',
'string' => 'Le champ :attribute doit contenir entre :min et :max caractères.', 'string' => 'The :attribute must be between :min and :max characters.',
'array' => 'Le champ :attribute doit avoir entre :min et :max éléments.', 'array' => 'The :attribute must have between :min and :max items.',
], ],
'boolean' => 'Le champ :attribute doit être vrai ou faux.', 'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'La confirmation de l\'attribut :attribute ne correspond pas.', 'confirmed' => 'The :attribute confirmation does not match.',
'date' => 'Le champ :attribute n\'est pas une date valide.', 'date' => 'The :attribute is not a valid date.',
'date_equals' => 'Le champ :attribute doit être une date égale à :date.', 'date_equals' => 'The :attribute must be a date equal to :date.',
'date_format' => 'Le champ :attribute ne correspond pas au format :format.', 'date_format' => 'The :attribute does not match the format :format.',
'different' => ':attribute et :other doivent être différents.', 'different' => 'The :attribute and :other must be different.',
'digits' => ':attribute doit être de :digits chiffres.', 'digits' => 'The :attribute must be :digits digits.',
'digits_between' => 'Le champ :attribute doit contenir entre :min et :max chiffres.', 'digits_between' => 'The :attribute must be between :min and :max digits.',
'dimensions' => ':attribute a des dimensions d\'image non valides.', 'dimensions' => 'The :attribute has invalid image dimensions.',
'distinct' => 'Le champ :attribute a une valeur en double.', 'distinct' => 'The :attribute field has a duplicate value.',
'email' => 'Le champ :attribute doit être une adresse e-mail valide.', 'email' => 'The :attribute must be a valid email address.',
'ends_with' => ':attribute doit se terminer par un des :values suivantes.', 'ends_with' => 'The :attribute must end with one of the following: :values.',
'exists' => 'Le champ :attribute sélectionné est invalide.', 'exists' => 'The selected :attribute is invalid.',
'file' => 'Le champ :attribute doit être un fichier.', 'file' => 'The :attribute must be a file.',
'filled' => 'Le champ :attribute doit avoir une valeur.', 'filled' => 'The :attribute field must have a value.',
'gt' => [ 'gt' => [
'numeric' => 'Le champ :attribute doit être supérieur à :value.', 'numeric' => 'The :attribute must be greater than :value.',
'file' => ':attribute doit être plus grand que :value kilo-octets.', 'file' => 'The :attribute must be greater than :value kilobytes.',
'string' => 'Le champ :attribute doit être plus grand que :value caractères.', 'string' => 'The :attribute must be greater than :value characters.',
'array' => 'Le champ :attribute doit avoir plus de :value éléments.', 'array' => 'The :attribute must have more than :value items.',
], ],
'gte' => [ 'gte' => [
'numeric' => 'Le champ :attribute doit être supérieur ou égal à :value.', 'numeric' => 'The :attribute must be greater than or equal :value.',
'file' => ':attribute doit être supérieur ou égal à :value kilo-octets.', 'file' => 'The :attribute must be greater than or equal :value kilobytes.',
'string' => 'Le champ :attribute doit être supérieur ou égal à :value caractères.', 'string' => 'The :attribute must be greater than or equal :value characters.',
'array' => 'L\'attribut :attribute doit avoir :value éléments ou plus.', 'array' => 'The :attribute must have :value items or more.',
], ],
'image' => 'Le champ :attribute doit être une image.', 'image' => 'The :attribute must be an image.',
'in' => 'Le champ :attribute sélectionné est invalide.', 'in' => 'The selected :attribute is invalid.',
'in_array' => 'Le champ :attribute n\'existe pas dans :other.', 'in_array' => 'The :attribute field does not exist in :other.',
'integer' => ':attribute doit être un nombre entier.', 'integer' => 'The :attribute must be an integer.',
'ip' => 'Le champ :attribute doit être une adresse IP valide.', 'ip' => 'The :attribute must be a valid IP address.',
'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.', 'ipv4' => 'The :attribute must be a valid IPv4 address.',
'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.', 'ipv6' => 'The :attribute must be a valid IPv6 address.',
'json' => 'Le champ :attribute doit être une chaîne JSON valide.', 'json' => 'The :attribute must be a valid JSON string.',
'lt' => [ 'lt' => [
'numeric' => 'Le champ :attribute doit être inférieur à :value.', 'numeric' => 'The :attribute must be less than :value.',
'file' => ':attribute doit être inférieur à :value kilo-octets.', 'file' => 'The :attribute must be less than :value kilobytes.',
'string' => 'Le champ :attribute doit être inférieur à :value caractères.', 'string' => 'The :attribute must be less than :value characters.',
'array' => 'Le champ :attribute doit avoir moins de :value éléments.', 'array' => 'The :attribute must have less than :value items.',
], ],
'lte' => [ 'lte' => [
'numeric' => 'Le champ :attribute doit être inférieur ou égal à :value.', 'numeric' => 'The :attribute must be less than or equal :value.',
'file' => ':attribute doit être inférieur ou égal à :value kilo-octets.', 'file' => 'The :attribute must be less than or equal :value kilobytes.',
'string' => 'Le champ :attribute doit être inférieur ou égal à :value caractères.', 'string' => 'The :attribute must be less than or equal :value characters.',
'array' => 'Le champ :attribute ne doit pas avoir plus de :value éléments.', 'array' => 'The :attribute must not have more than :value items.',
], ],
'max' => [ 'max' => [
'numeric' => 'Le champ :attribute ne peut pas être plus grand que :max.', 'numeric' => 'The :attribute may not be greater than :max.',
'file' => ':attribute ne doit pas être plus grand que :max kilo-octets.', 'file' => 'The :attribute may not be greater than :max kilobytes.',
'string' => 'Le champ :attribute ne doit pas être plus grand que :max caractères.', 'string' => 'The :attribute may not be greater than :max characters.',
'array' => ':attribute ne peut pas avoir plus de :max éléments.', 'array' => 'The :attribute may not have more than :max items.',
], ],
'mimes' => ':attribute doit être un fichier de type: :values.', 'mimes' => 'The :attribute must be a file of type: :values.',
'mimetypes' => ':attribute doit être un fichier de type: :values.', 'mimetypes' => 'The :attribute must be a file of type: :values.',
'min' => [ 'min' => [
'numeric' => 'Le champ :attribute doit être d\'au moins :min.', 'numeric' => 'The :attribute must be at least :min.',
'file' => 'Le champ :attribute doit être d\'au moins :min kilo-octets.', 'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'Le champ :attribute doit contenir au moins :min caractères.', 'string' => 'The :attribute must be at least :min characters.',
'array' => 'Le champ :attribute doit avoir au moins :min éléments.', 'array' => 'The :attribute must have at least :min items.',
], ],
'not_in' => 'Le champ :attribute sélectionné est invalide.', 'not_in' => 'The selected :attribute is invalid.',
'not_regex' => 'Le format de l\'attribut :attribute est invalide.', 'not_regex' => 'The :attribute format is invalid.',
'numeric' => 'Le champ :attribute doit être un nombre.', 'numeric' => 'The :attribute must be a number.',
'password' => 'Le mot de passe est incorrect.', 'password' => 'The password is incorrect.',
'present' => 'Le champ :attribute doit être présent.', 'present' => 'The :attribute field must be present.',
'regex' => 'Le format de l\'attribut :attribute est invalide.', 'regex' => 'The :attribute format is invalid.',
'required' => 'Le champ :attribute est requis.', 'required' => 'The :attribute field is required.',
'required_if' => 'Le champ :attribute est requis lorsque :other est :value.', 'required_if' => 'The :attribute field is required when :other is :value.',
'required_unless' => 'Le champ :attribute est requis sauf si :other est en :values.', 'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'Le champ :attribute est requis lorsque :values est présent.', 'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'Le champ :attribute est requis lorsque :values sont présentes.', 'required_with_all' => 'The :attribute field is required when :values are present.',
'required_without' => 'Le champ :attribute est requis lorsque :values n\'est pas présent.', 'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'Le champ :attribute est requis quand aucun des :values n\'est présent.', 'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => ':attribute et :other doivent correspondre.', 'same' => 'The :attribute and :other must match.',
'size' => [ 'size' => [
'numeric' => 'Le champ :attribute doit être :size.', 'numeric' => 'The :attribute must be :size.',
'file' => ':attribute doit être de :size kilo-octets.', 'file' => 'The :attribute must be :size kilobytes.',
'string' => 'Le champ :attribute doit être de :size caractères.', 'string' => 'The :attribute must be :size characters.',
'array' => ':attribute doit contenir :size éléments.', 'array' => 'The :attribute must contain :size items.',
], ],
'starts_with' => ':attribute doit commencer par l\'un des :values suivants.', 'starts_with' => 'The :attribute must start with one of the following: :values.',
'string' => 'Le champ :attribute doit être une chaîne.', 'string' => 'The :attribute must be a string.',
'timezone' => 'Le champ :attribute doit être une zone valide.', 'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'Le champ :attribute a déjà été pris.', 'unique' => 'The :attribute has already been taken.',
'uploaded' => 'L\'attribut :attribute n\'a pas pu être envoyé.', 'uploaded' => 'The :attribute failed to upload.',
'url' => 'Le format de l\'attribut :attribute est invalide.', 'url' => 'The :attribute format is invalid.',
'uuid' => ':attribute doit être un UUID valide.', 'uuid' => 'The :attribute must be a valid UUID.',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -131,7 +131,7 @@ return [
'custom' => [ 'custom' => [
'attribute-name' => [ 'attribute-name' => [
'rule-name' => 'message personnalisé', 'rule-name' => 'custom-message',
], ],
], ],

View File

@ -2,27 +2,27 @@
return [ return [
'full_name' => 'Nombre completo', 'full_name' => 'Full name',
'email' => 'E-mail', 'email' => 'Email',
'password' => 'Contraseña', 'password' => 'Password',
'retype_password' => 'Repetir contraseña', 'retype_password' => 'Retype password',
'remember_me' => 'Recordarme', 'remember_me' => 'Remember Me',
'register' => 'Registrarse', 'register' => 'Register',
'register_a_new_membership' => 'Registrar una nueva membresía', 'register_a_new_membership' => 'Register a new membership',
'i_forgot_my_password' => 'Olvidé mi contraseña', 'i_forgot_my_password' => 'I forgot my password',
'i_already_have_a_membership' => 'Ya tengo una membresía', 'i_already_have_a_membership' => 'I already have a membership',
'sign_in' => 'Iniciar sesión', 'sign_in' => 'Sign In',
'log_out' => 'Cerrar sesión', 'log_out' => 'Log Out',
'toggle_navigation' => 'Cambiar navegación', 'toggle_navigation' => 'Toggle navigation',
'login_message' => 'Inicia sesión para iniciar tu sesión', 'login_message' => 'Sign in to start your session',
'register_message' => 'Registrar una nueva membresía', 'register_message' => 'Register a new membership',
'password_reset_message' => 'Restablecer contraseña', 'password_reset_message' => 'Reset Password',
'reset_password' => 'Restablecer contraseña', 'reset_password' => 'Reset Password',
'send_password_reset_link' => 'Enviar enlace de restablecimiento de contraseña', 'send_password_reset_link' => 'Send Password Reset Link',
'verify_message' => 'Tu cuenta necesita verificación', 'verify_message' => 'Your account needs verification',
'verify_email_sent' => 'Se ha enviado un nuevo enlace de verificación a tu dirección de correo electrónico.', 'verify_email_sent' => 'A fresh verification link has been sent to your email address.',
'verify_check_your_email' => 'Antes de proceder, por favor revisa tu correo electrónico para ver un enlace de verificación.', 'verify_check_your_email' => 'Before proceeding, please check your email for a verification link.',
'verify_if_not_recieved' => 'Si no recibiste el correo electrónico', 'verify_if_not_recieved' => 'If you did not receive the email',
'verify_request_another' => 'haz clic aquí para solicitar otro', 'verify_request_another' => 'click here to request another',
'confirm_password_message' => 'Por favor, confirma tu contraseña para continuar.', 'confirm_password_message' => 'Please, confirm your password to continue.',
]; ];

View File

@ -2,31 +2,31 @@
return [ return [
'm_home' => 'Inicio', 'm_home' => 'Home',
'm_directory' => 'Directorio', 'm_directory' => 'Directory',
'h_applications' => 'Aplicaciones', 'h_applications' => 'Applications',
'm_my_applications' => 'Mis Aplicaciones', 'm_my_applications' => 'My Applications',
'm_curr_applications' => 'Aplicaciones actuales', 'm_curr_applications' => 'Current Applications',
'h_my_profile' => 'Mi perfil', 'h_my_profile' => 'My Profile',
'm_profile_settings' => 'Ajustes del perfil', 'm_profile_settings' => 'Profile Settings',
'm_account_settings' => 'Ajustes de mi cuenta', 'm_account_settings' => 'My Account Settings',
'h_app_management' => 'Gestión de aplicaciones', 'h_app_management' => 'Application Management',
'm_all_apps' => 'Todas las aplicaciones', 'm_all_apps' => 'All Applications',
'm_outstanding_apps' => 'Aplicaciones pendientes', 'm_outstanding_apps' => 'Outstanding Applications',
'm_interview_queue' => 'Cola de entrevistas', 'm_interview_queue' => 'Interview Queue',
'm_peer_approval' => 'Cola de aprobación por pares', 'm_peer_approval' => 'Peer Approval Queue',
'h_admin' => 'Administración', 'h_admin' => 'Administration',
'm_staff_m' => 'Miembros del personal', 'm_staff_m' => 'Staff Members',
'm_reg_players' => 'Jugadores registrados', 'm_reg_players' => 'Registered Players',
'sm_hiring_man' => 'Gestión de contratación', 'sm_hiring_man' => 'Hiring Management',
'm_open_pos' => 'Abrir posiciones', 'm_open_pos' => 'Open Positions',
'sm_forms' => 'Formularios', 'sm_forms' => 'Forms',
'sm_all_forms' => 'Todos los formularios', 'sm_all_forms' => 'All Forms',
'm_form_builder' => 'Constructor de Formularios', 'm_form_builder' => 'Form Builder',
'sm_app_settings' => 'Ajustes de app', 'sm_app_settings' => 'App Settings',
'm_global_app_s' => 'Configuración global de la aplicación', 'm_global_app_s' => 'Global App Settings',
'm_devtools' => 'Herramientas para desarrolladores', 'm_devtools' => 'Developer Tools',
'm_s_logs' => 'Registros del sistema' 'm_s_logs' => 'System Logs'
]; ];

View File

@ -2,27 +2,27 @@
return [ return [
'full_name' => 'Nom complet', 'full_name' => 'Full name',
'email' => 'Courriel', 'email' => 'Email',
'password' => 'Mot de passe', 'password' => 'Password',
'retype_password' => 'Retapez le mot de passe', 'retype_password' => 'Retype password',
'remember_me' => 'Se souvenir de moi', 'remember_me' => 'Remember Me',
'register' => 'Inscription', 'register' => 'Register',
'register_a_new_membership' => 'Inscrire une nouvelle adhésion', 'register_a_new_membership' => 'Register a new membership',
'i_forgot_my_password' => 'J\'ai oublié mon mot de passe', 'i_forgot_my_password' => 'I forgot my password',
'i_already_have_a_membership' => 'J\'ai déjà une adhésion', 'i_already_have_a_membership' => 'I already have a membership',
'sign_in' => 'Se connecter', 'sign_in' => 'Sign In',
'log_out' => 'Déconnexion', 'log_out' => 'Log Out',
'toggle_navigation' => 'Basculer la navigation', 'toggle_navigation' => 'Toggle navigation',
'login_message' => 'Connectez-vous pour démarrer votre session', 'login_message' => 'Sign in to start your session',
'register_message' => 'Inscrire une nouvelle adhésion', 'register_message' => 'Register a new membership',
'password_reset_message' => 'Réinitialiser le mot de passe', 'password_reset_message' => 'Reset Password',
'reset_password' => 'Réinitialiser le mot de passe', 'reset_password' => 'Reset Password',
'send_password_reset_link' => 'Envoyer le lien de réinitialisation du mot de passe', 'send_password_reset_link' => 'Send Password Reset Link',
'verify_message' => 'Votre compte a besoin d\'une vérification', 'verify_message' => 'Your account needs verification',
'verify_email_sent' => 'Un nouveau lien de vérification a été envoyé à votre adresse e-mail.', 'verify_email_sent' => 'A fresh verification link has been sent to your email address.',
'verify_check_your_email' => 'Avant de continuer, veuillez vérifier votre e-mail pour un lien de vérification.', 'verify_check_your_email' => 'Before proceeding, please check your email for a verification link.',
'verify_if_not_recieved' => 'Si vous n\'avez pas reçu l\'e-mail', 'verify_if_not_recieved' => 'If you did not receive the email',
'verify_request_another' => 'cliquez ici pour en demander un autre', 'verify_request_another' => 'click here to request another',
'confirm_password_message' => 'Veuillez confirmer votre mot de passe pour continuer.', 'confirm_password_message' => 'Please, confirm your password to continue.',
]; ];

View File

@ -2,31 +2,31 @@
return [ return [
'm_home' => 'Domicile', 'm_home' => 'Home',
'm_directory' => 'Répertoire', 'm_directory' => 'Directory',
'h_applications' => 'Applications', 'h_applications' => 'Applications',
'm_my_applications' => 'Mes applications', 'm_my_applications' => 'My Applications',
'm_curr_applications' => 'Applications actuelles', 'm_curr_applications' => 'Current Applications',
'h_my_profile' => 'Mon profil', 'h_my_profile' => 'My Profile',
'm_profile_settings' => 'Paramètres du profil', 'm_profile_settings' => 'Profile Settings',
'm_account_settings' => 'Paramètres de mon compte', 'm_account_settings' => 'My Account Settings',
'h_app_management' => 'Gestion des applications', 'h_app_management' => 'Application Management',
'm_all_apps' => 'Toutes les applications', 'm_all_apps' => 'All Applications',
'm_outstanding_apps' => 'Applications en cours', 'm_outstanding_apps' => 'Outstanding Applications',
'm_interview_queue' => 'File d\'attente des entretiens', 'm_interview_queue' => 'Interview Queue',
'm_peer_approval' => 'File d\'attente d\'approbation par les pairs', 'm_peer_approval' => 'Peer Approval Queue',
'h_admin' => 'Administration', 'h_admin' => 'Administration',
'm_staff_m' => 'Membres du personnel', 'm_staff_m' => 'Staff Members',
'm_reg_players' => 'Joueurs enregistrés', 'm_reg_players' => 'Registered Players',
'sm_hiring_man' => 'Gestion de l\'embauche', 'sm_hiring_man' => 'Hiring Management',
'm_open_pos' => 'Positions ouvertes', 'm_open_pos' => 'Open Positions',
'sm_forms' => 'Formulaires', 'sm_forms' => 'Forms',
'sm_all_forms' => 'Tous les formulaires', 'sm_all_forms' => 'All Forms',
'm_form_builder' => 'Constructeur de formulaire', 'm_form_builder' => 'Form Builder',
'sm_app_settings' => 'Paramètres de l\'application', 'sm_app_settings' => 'App Settings',
'm_global_app_s' => 'Paramètres globaux de l\'application', 'm_global_app_s' => 'Global App Settings',
'm_devtools' => 'Outils de développement', 'm_devtools' => 'Developer Tools',
'm_s_logs' => 'Journaux système' 'm_s_logs' => 'System Logs'
]; ];