172 Commits

Author SHA1 Message Date
66147e0ba3 Merge pull request #11 from spacejewel-hosting/l10n_translate
Add Spanish and French (Machine translation)
2020-09-04 22:08:19 +01:00
ccd5d1df2b New translations messages.php (Spanish) 2020-09-04 22:07:13 +01:00
02b7905a97 New translations messages.php (Spanish) 2020-09-04 22:00:57 +01:00
ac27c2e5ce New translations menu.php (French) 2020-09-04 21:02:32 +01:00
2be0084463 New translations messages.php (Spanish) 2020-09-04 21:02:30 +01:00
34c830bc8d New translations adminlte.php (Spanish) 2020-09-04 21:02:29 +01:00
abaf00e427 New translations menu.php (Spanish) 2020-09-04 21:02:27 +01:00
74e576d318 New translations auth.php (French) 2020-09-04 21:02:21 +01:00
584d8e703a New translations adminlte.php (French) 2020-09-04 21:02:20 +01:00
0230042c1a New translations auth.php (Spanish) 2020-09-04 21:02:18 +01:00
22f698bd1d New translations pagination.php (French) 2020-09-04 21:02:17 +01:00
abfbd82e23 New translations pagination.php (Spanish) 2020-09-04 21:02:16 +01:00
a8648a9b50 New translations passwords.php (French) 2020-09-04 21:02:13 +01:00
5c57a5185f New translations passwords.php (Spanish) 2020-09-04 21:02:12 +01:00
0e8b3d28a6 New translations validation.php (French) 2020-09-04 21:02:10 +01:00
3c966036d9 New translations validation.php (Spanish) 2020-09-04 21:02:08 +01:00
a5e1ab5af8 New translations messages.php (French) 2020-09-04 21:02:06 +01:00
87f8e63b24 Force new users to verify email 2020-09-03 20:06:29 +01:00
9f3780d844 Fix trans key 2020-09-03 17:22:28 +01:00
9241a83844 Merge branch 'translate' of https://github.com/spacejewel-hosting/staffmanagement into translate 2020-09-03 17:00:57 +01:00
c6685331a8 Updated wrong trans() key names 2020-09-03 17:00:09 +01:00
9da9b8e6fc Merge pull request #8 from spacejewel-hosting/l10n_translate
Portuguese menu & AdminLTE translations
2020-09-03 16:48:09 +01:00
bb019f71e2 New translations messages.php (Portuguese) 2020-09-03 16:43:59 +01:00
0cde3444ce New translations adminlte.php (Portuguese) 2020-09-03 16:43:57 +01:00
b61fb5642e New translations menu.php (Portuguese) 2020-09-03 16:43:56 +01:00
f7614916bf Merge branch 'l10n_translate' into translate 2020-09-03 16:40:23 +01:00
2ad1548cd6 New translations menu.php (Portuguese) 2020-09-03 16:17:21 +01:00
43579c8fc9 New translations adminlte.php (Portuguese) 2020-09-03 16:17:20 +01:00
0c9cea5c05 New translations messages.php (Portuguese) 2020-09-03 16:17:18 +01:00
4371dd971c New translations menu.php (Spanish) 2020-09-03 16:17:17 +01:00
c57ace1ad9 New translations adminlte.php (Spanish) 2020-09-03 16:17:15 +01:00
c35b37d9b3 New translations messages.php (Spanish) 2020-09-03 16:17:13 +01:00
f25c9f7bc7 New translations menu.php (French) 2020-09-03 16:17:10 +01:00
25cebeefab New translations adminlte.php (French) 2020-09-03 16:17:09 +01:00
8b47dbe2e0 New translations messages.php (French) 2020-09-03 16:17:07 +01:00
290dbe99b6 Update source file menu.php 2020-09-03 16:16:43 +01:00
d7b506ec52 Update source file adminlte.php 2020-09-03 16:16:42 +01:00
d41d94b934 Update source file messages.php 2020-09-03 16:16:40 +01:00
b571d72eaf Update Crowdin configuration file 2020-09-03 16:16:28 +01:00
0c1f6f75eb Merge remote-tracking branch 'origin/translate' into translate 2020-09-03 16:07:33 +01:00
5ea9e11a62 AdminLTE i18n Changes
This commit removes unused language files and preserves the English sources for Crowdin. The account confirmation page has also been re-skinned with the current login/register template.
Some missing translations for 2fa were also added to the main messages file.
Sources for translations for the menus were also added.
2020-09-03 16:06:51 +01:00
58d6a8ef1f Merge pull request #6 from spacejewel-hosting/l10n_translate
New Crowdin updates
2020-09-03 04:30:24 +01:00
d988b9a5cb New translations messages.php (Portuguese) 2020-09-03 03:15:32 +01:00
eeae03dec5 New translations messages.php (Spanish) 2020-09-03 03:15:28 +01:00
c374100eed New translations messages.php (French) 2020-09-03 03:15:24 +01:00
01e3a9edce Update source file messages.php 2020-09-03 03:15:22 +01:00
d93170b555 Devtools translation string 2020-09-03 02:58:30 +01:00
8e85e08171 Vacancy tweaks 2020-09-03 02:52:21 +01:00
de3dba3627 Vacancy tweaks 2020-09-03 02:50:19 +01:00
f7a18816bc New translations messages.php (Portuguese) 2020-09-03 02:43:33 +01:00
369185c4ed New translations messages.php (Spanish) 2020-09-03 02:43:32 +01:00
5ee79880d5 New translations messages.php (French) 2020-09-03 02:43:30 +01:00
75d7181bca Update source file messages.php 2020-09-03 02:43:27 +01:00
3fe3df7357 Vacancy tweaks 2020-09-03 02:26:05 +01:00
7e58c3af6b Add more missing translation strings
Also fixed broken vacancy editor
2020-09-03 02:20:15 +01:00
5ca155ba42 Add more missing translation strings 2020-09-03 02:08:14 +01:00
7c7c20d5b2 Add more missing translation strings 2020-09-03 01:58:29 +01:00
fdb508fd5a Update lock file 2020-09-03 01:28:38 +01:00
cbe660f4ad Fix broken notes 2020-09-03 00:39:59 +01:00
6e34b6b8fa Fix broken notes 2020-09-03 00:38:59 +01:00
60874c046f Conditionally pre-load Appointment relationship 2020-09-03 00:34:35 +01:00
e9dd1567b8 Appointment model tweaks 2020-09-03 00:23:09 +01:00
a95c9518b3 Update ignored URLs list 2020-09-03 00:15:59 +01:00
af96d193a4 Missing login button translation 2020-09-03 00:11:49 +01:00
48054f0837 Missing translations 2020-09-02 20:57:38 +01:00
9b5e35b241 Missing typehint 2020-09-02 20:52:56 +01:00
4c7783f366 Variable fix 2020-09-02 20:32:34 +01:00
af2c23a73c Variable fix 2020-09-02 20:30:25 +01:00
af17bbe468 Close unclosed label 2020-09-02 20:20:01 +01:00
17f61f0d6b Close unclosed label 2020-09-02 20:17:54 +01:00
a5aef7deb7 Add missing translation 2020-09-02 20:11:01 +01:00
f32c4dc68c Fixed misspelled translation string 2020-09-02 20:08:20 +01:00
687316d77a Language menu accessibility 2020-09-02 20:02:56 +01:00
ff70c21283 Homepage: add crowdin badge 2020-09-02 19:57:41 +01:00
727c14d0c2 Added French 🇫🇷 2020-09-02 19:52:01 +01:00
6b7d2db612 Default flag for English 2020-09-02 19:32:31 +01:00
d743554df6 Add country flag to dropdown 2020-09-02 19:29:37 +01:00
fd8bf4f0f2 Update supported locales 2020-09-02 19:28:45 +01:00
bd530696d2 Quick dropdown toggle 2020-09-02 19:24:32 +01:00
3040afd730 Default language list item 2020-09-02 19:20:06 +01:00
e7d2c548c0 Populate language list 2020-09-02 19:15:01 +01:00
f001a16d4d Add homepage language selector 2020-09-02 19:05:24 +01:00
d8dbb1a0a2 Add homepage language selector 2020-09-02 19:04:25 +01:00
4e1b4f5afd Add URLs which should not be localized 2020-09-02 18:53:17 +01:00
81c0b65404 Add localization middleware 2020-09-02 18:39:45 +01:00
a10f3f9c96 Fix unclosed a tag causing whole page to be a link 2020-09-02 18:36:35 +01:00
326e0f8c7c Remove trans() from config file
Laravel relies on the translation class for this, and this is only loaded after the config files, so menu translation will have to be done exclusively by the AdminLte service provider.
2020-09-02 18:00:25 +01:00
a0192cdb02 Added route localization and auto detection 2020-09-02 17:43:27 +01:00
8f45563b24 Added localization configuration file 2020-09-02 16:15:42 +00:00
004e9edcb0 Updated dependencies 2020-09-02 16:12:35 +00:00
fafc9dca87 Merge pull request #4 from spacejewel-hosting/l10n_translate
New Crowdin updates
2020-09-02 03:59:09 +01:00
800d205c74 New translations validation.php (Portuguese) 2020-09-02 03:53:10 +01:00
3cd7292c36 New translations messages.php (Portuguese) 2020-09-02 03:53:08 +01:00
36db8a1337 New translations messages.php (Portuguese) 2020-09-02 03:08:35 +01:00
bcd11c462a New translations messages.php (Portuguese) 2020-09-02 00:34:47 +01:00
6703ac89c1 Update source file messages.php 2020-09-02 00:34:44 +01:00
fda34ad8bf New translations messages.php (Portuguese) 2020-09-01 23:29:41 +01:00
2cde1cdbbe New translations messages.php (Spanish) 2020-09-01 23:29:38 +01:00
0bca7619f7 New translations messages.php (French) 2020-09-01 23:29:35 +01:00
d223515d19 Merge translate with master 2020-09-01 23:27:52 +01:00
93fb7a8432 Merge remote-tracking branch 'origin/master' into master 2020-09-01 23:18:53 +01:00
6bf0d9f373 Remove Heredoc from messages for better compatibility 2020-09-01 23:18:38 +01:00
db5d150758 New translations validation.php (Portuguese) 2020-09-01 23:13:19 +01:00
348b1a37d0 New translations passwords.php (Portuguese) 2020-09-01 23:13:17 +01:00
86bf02bb42 New translations pagination.php (Portuguese) 2020-09-01 23:13:16 +01:00
6c45573fbe New translations messages.php (Portuguese) 2020-09-01 23:13:14 +01:00
910863bdea New translations auth.php (Portuguese) 2020-09-01 23:13:13 +01:00
884ff74f42 New translations messages.php (Portuguese) 2020-09-01 22:07:20 +01:00
4f1935fbf2 Update README.md 2020-09-01 21:08:12 +01:00
3a53f3bbc2 New translations validation.php (Portuguese) 2020-09-01 21:01:43 +01:00
6c08e839d6 New translations passwords.php (Portuguese) 2020-09-01 21:01:42 +01:00
362ce6c866 New translations pagination.php (Portuguese) 2020-09-01 21:01:40 +01:00
d336354482 New translations messages.php (Portuguese) 2020-09-01 21:01:39 +01:00
88cf53c53d New translations auth.php (Portuguese) 2020-09-01 21:01:37 +01:00
a5568be339 New translations validation.php (Spanish) 2020-09-01 21:01:36 +01:00
d393a8cedc New translations passwords.php (Spanish) 2020-09-01 21:01:34 +01:00
62d5f68279 New translations pagination.php (Spanish) 2020-09-01 21:01:33 +01:00
5c068a325d New translations messages.php (Spanish) 2020-09-01 21:01:32 +01:00
15c02c1de1 New translations auth.php (Spanish) 2020-09-01 21:01:30 +01:00
3782f79b51 New translations validation.php (French) 2020-09-01 21:01:29 +01:00
0c53757912 New translations passwords.php (French) 2020-09-01 21:01:28 +01:00
6db69f997d New translations pagination.php (French) 2020-09-01 21:01:26 +01:00
edb2e4b2d6 New translations messages.php (French) 2020-09-01 21:01:25 +01:00
baac37e967 New translations auth.php (French) 2020-09-01 21:01:23 +01:00
5952ed9248 Update Crowdin configuration file 2020-09-01 20:58:54 +01:00
356483ef7b Update README.md 2020-09-01 20:40:32 +01:00
b80e168dfb Add side menu localization options
This commit also adds the option to specify your own logo, from the .env configuration file.
2020-09-01 20:30:17 +01:00
9b469c434b Add app render localization options 2020-09-01 19:30:28 +01:00
ca3a06f248 Add directory localization options 2020-09-01 18:49:08 +01:00
1e2f331778 Add profile localization options 2020-09-01 17:46:27 +01:00
4a09fa581d Add application management localization options 2020-09-01 14:40:41 +01:00
c58b5b56d7 Add administration localization options 2020-09-01 12:43:39 +01:00
bf5d4058ad Add auth localization options 2020-09-01 01:01:32 +01:00
f871e14307 Add homepage localization options 2020-09-01 00:29:58 +01:00
1e78a8e6d9 Use app name 2020-08-31 23:20:53 +01:00
17fb0e236f Make notifications cancellable
This commit makes certain notifications cancellable. This enables notifications to be sent conditionally based on the user's choice.
2020-08-31 22:06:00 +01:00
27b1f3170b Update settings log level 2020-08-31 20:02:30 +01:00
00cc36246f Minor import change 2020-08-31 19:53:10 +01:00
41e3e817a2 Added error messages to settings.blade.php 2020-08-31 19:50:58 +01:00
2afea88846 Added logging to Settings 2020-08-31 19:47:27 +01:00
ea96cbc1f5 Options: return value instead of whole model 2020-08-31 18:54:33 +01:00
2996e66c8b Add missing query builder statement for options 2020-08-31 18:51:35 +01:00
a32af7c464 Delete unused workflow 2020-08-31 18:38:49 +01:00
cd874c5f58 Settings auth checks 2020-08-31 18:36:38 +01:00
42de40e320 Added CSRF protection to settings 2020-08-31 18:34:09 +01:00
faa3a65e2b Added unchecked checkbox workaround 2020-08-31 18:32:08 +01:00
ba3a139d1c Wrapped settings with form-check 2020-08-31 18:13:44 +01:00
25ddf81118 Added form control buttons
Also improved form styling
2020-08-31 18:11:00 +01:00
9431eb5036 Updated options rendering 2020-08-31 18:03:20 +01:00
a3071dccf9 Update wrong view name 2020-08-31 17:58:07 +01:00
b0cbf65cfc Added missing permissions to roles 2020-08-31 17:55:36 +01:00
6be5e241d4 Add permission and provider imports 2020-08-31 16:41:01 +01:00
d6c49a5cf0 Add missing migration 2020-08-30 23:27:06 +01:00
075617fd32 Merge remote-tracking branch 'origin/master' into master 2020-08-30 23:17:28 +01:00
da73c91b4a Update DB seeder 2020-08-30 23:17:06 +01:00
ca82f5882d Add settings page 2020-08-30 23:06:01 +01:00
88c36dd3f8 Updated Readme 2020-08-16 16:11:45 +01:00
535a2c3973 Fixed broken banning logic 2020-08-13 22:12:17 +01:00
ad5c3404cc Update variable 2020-07-25 01:20:43 +01:00
64d418c590 Add heroku action 2020-07-25 00:28:44 +01:00
62b063ee63 Missed variable name 2020-07-23 02:37:08 +01:00
2c0c404d73 Change wrong param name 2020-07-19 06:01:46 +01:00
168f08bd96 Remove deprecated SubmenuFilter class 2020-07-18 19:58:49 +01:00
94d08f1886 Trust Heroku proxies
This commit also forces the environment into HTTPS when in production.
2020-07-18 06:33:00 +01:00
0cf6208577 Add embarassing missing comma 2020-07-18 03:57:56 +01:00
9255a6c88d Rewrote lock file 2020-07-18 03:55:31 +01:00
098205a969 Updated required extension name 2020-07-18 03:51:57 +01:00
bf426e3bdd Updated package lock and added postinstall 2020-07-18 03:45:31 +01:00
02059bbcb0 Updated dependency lock file
Also added Imagemagick as a required extension for 2FA
2020-07-18 03:21:49 +01:00
91627decbe Added Heroku Procfile
Also changed required password length for new users
2020-07-18 02:45:15 +01:00
2763f777ab Add password strength requirment
This commit adds a password strength requirement for new users using 
regular expressions.
Also adds a dismissable alert so users know how to create passwords 
properly.
2020-07-17 23:13:46 +01:00
d392c0593f Add two factor authentication 2020-07-17 22:44:10 +01:00
137 changed files with 17085 additions and 1949 deletions

View File

@@ -3,6 +3,9 @@ APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
APP_LOGO="https://www.raspberrypi.org/app/uploads/2020/05/Raspberry-Pi-OS-downloads-image-150x150-1.png"
APP_SITEHOMEPAGE=""
# This can be your main homepage, other than this site itself
LOG_CHANNEL=stack

View File

@@ -39,7 +39,9 @@
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/ui" />
<excludeFolder url="file://$MODULE_DIR$/vendor/league/commonmark" />
<excludeFolder url="file://$MODULE_DIR$/vendor/league/flysystem" />
<excludeFolder url="file://$MODULE_DIR$/vendor/league/mime-type-detection" />
<excludeFolder url="file://$MODULE_DIR$/vendor/maximebf/debugbar" />
<excludeFolder url="file://$MODULE_DIR$/vendor/mcamara/laravel-localization" />
<excludeFolder url="file://$MODULE_DIR$/vendor/mockery/mockery" />
<excludeFolder url="file://$MODULE_DIR$/vendor/monolog/monolog" />
<excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />

14
.idea/php.xml generated
View File

@@ -127,6 +127,20 @@
<path value="$PROJECT_DIR$/vendor/symfony/string" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-grapheme" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php80" />
<path value="$PROJECT_DIR$/vendor/bacon/bacon-qr-code" />
<path value="$PROJECT_DIR$/vendor/dasprid/enum" />
<path value="$PROJECT_DIR$/vendor/geo-sot/laravel-env-editor" />
<path value="$PROJECT_DIR$/vendor/laravel/slack-notification-channel" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php70" />
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa-laravel" />
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa" />
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa-qrcode" />
<path value="$PROJECT_DIR$/vendor/arcanedev/log-viewer" />
<path value="$PROJECT_DIR$/vendor/arcanedev/support" />
<path value="$PROJECT_DIR$/vendor/paragonie/constant_time_encoding" />
<path value="$PROJECT_DIR$/vendor/graham-campbell/markdown" />
<path value="$PROJECT_DIR$/vendor/league/mime-type-detection" />
<path value="$PROJECT_DIR$/vendor/mcamara/laravel-localization" />
</include_path>
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="7.2" />

1
Procfile Normal file
View File

@@ -0,0 +1 @@
web: vendor/bin/heroku-php-apache2 public/

View File

@@ -1,10 +1,11 @@
# Raspberry Teams - The Simple Staff Application Manager v 0.1.0
## The quick and pain-free staff application manager (for Minecraft)
# 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)
## The quick and pain-free staff application manager
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?
Wish you had a better application managemet strategy? Well, then Raspberry Teams is for you! It was originally designed and developed for internal use, but sharing is caring! After noticing a worrying lack of "human resources" management systems on SpigotMC's resources section (There was only one outdated/unsupported project), I've decided to take it up into my own terms and start working on it.
Wish you had a better application managemet strategy? Well, then Raspberry Teams is for you! It was originally designed and developed for internal use for a gameserver network, but sharing is caring!
# Features (not exhaustive)
@@ -60,7 +61,7 @@ Tech stack:
- JSON
- Curl (highly recommended)
- Image Magick (imagick) for 2FA support
# Installation

View File

@@ -11,7 +11,9 @@ class Appointment extends Model
'appointmentDate',
'applicationID',
'appointmentStatus',
'appointmentLocation'
'appointmentLocation',
'meetingNotes',
'userAccepted'
];
public function application()

13
app/Facades/Options.php Normal file
View File

@@ -0,0 +1,13 @@
<?php
namespace App\Facades;
use \Illuminate\Support\Facades\Facade;
class Options extends Facade
{
public static function getFacadeAccessor()
{
return 'smOptions';
}
}

94
app/Helpers/Options.php Normal file
View File

@@ -0,0 +1,94 @@
<?php
namespace App\Helpers;
use App\Options as Option;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
class Options
{
public function getOption(string $option): string
{
$value = Cache::get($option);
if (is_null($value))
{
Log::debug('Option ' . $option . 'not found in cache, refreshing from database');
$value = Option::where('option_name', $option)->first();
if (is_null($value))
throw new \Exception('This option does not exist.');
Cache::put($option, $value);
Cache::put($option . '_desc', 'Undefined description');
}
return $value->option_value;
}
public function setOption(string $option, string $value, string $description)
{
Option::create([
'option_name' => $option,
'option_value' => $value,
'friendly_name' => $description
]);
Cache::put($option, $value, now()->addDay());
Cache::put($option . '_desc', $description, now()->addDay());
}
public function pullOption($option): array
{
$oldOption = Option::where('option_name', $option)->first();
Option::find($oldOption->id)->delete();
// putMany is overkill here
return [
Cache::pull($option),
Cache::pull($option . '_desc')
];
}
public function changeOption($option, $newValue)
{
$dbOption = Option::where('option_name', $option);
if ($dbOption->first())
{
$dbOptionInstance = Option::find($dbOption->first()->id);
Cache::forget($option);
Log::debug('Changing db configuration option', [
'old_value' => $dbOptionInstance->option_value,
'new_value' => $newValue
]);
$dbOptionInstance->option_value = $newValue;
$dbOptionInstance->save();
Log::debug('New db configuration option saved',
[
'option' => $dbOptionInstance->option_value
]);
Cache::put('option_name', $newValue, now()->addDay());
}
else
{
throw new \Exception('This option does not exist.');
}
}
public function optionExists(string $option): bool
{
$dbOption = Option::where('option_name', $option)->first();
$locallyCachedOption = Cache::get($option);
return !is_null($dbOption) || !is_null($locallyCachedOption);
}
}

View File

@@ -231,7 +231,7 @@ class ApplicationController extends Controller
return redirect()->back();
}
public function updateApplicationStatus(Request $request, $application, $newStatus)
public function updateApplicationStatus(Request $request, Application $application, $newStatus)
{
$this->authorize('update', Application::class);

View File

@@ -72,10 +72,12 @@ class AppointmentController extends Controller
}
// also updates
public function saveNotes(SaveNotesRequest $request, $application)
public function saveNotes(SaveNotesRequest $request, Application $application)
{
if (!is_null($application))
{
$application->load('appointment');
$application->appointment->meetingNotes = $request->noteText;
$application->appointment->save();

View File

@@ -70,7 +70,7 @@ class RegisterController extends Controller
'uuid' => ['required', 'string', 'unique:users', 'min:32', 'max:32'],
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
'password' => ['required', 'string', 'min:10', 'confirmed', 'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$/'],
], [
'uuid.required' => 'Please enter a valid (and Premium) Minecraft username! We do not support cracked users.'
]);

View File

@@ -0,0 +1,16 @@
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Traits\AuthenticatesTwoFactor;
class TwofaController extends Controller
{
use AuthenticatesTwoFactor;
protected $redirectTo = '/dashboard';
}

View File

@@ -24,34 +24,38 @@ class BanController extends Controller
$duration = strtolower($request->durationOperator);
$durationOperand = $request->durationOperand;
$expiryDate = now();
if (!empty($duration))
{
$expiryDate = now();
switch($duration)
{
case 'days':
$expiryDate->addDays($duration);
$expiryDate->addDays($durationOperand);
break;
case 'weeks':
$expiryDate->addWeeks($duration);
$expiryDate->addWeeks($durationOperand);
break;
case 'months':
$expiryDate->addMonths($duration);
$expiryDate->addMonths($durationOperand);
break;
case 'years':
$expiryDate->addYears($duration);
$expiryDate->addYears($durationOperand);
break;
}
}
else
{
// Essentially permanent
$expiryDate->addYears(100);
}
$ban = Ban::create([
'userID' => $user->id,
'reason' => $request->reason,
'reason' => $reason,
'bannedUntil' => $expiryDate->toDateTimeString() ?? null,
'userAgent' => "Unknown",
'authorUserID' => Auth::user()->id

View File

@@ -0,0 +1,60 @@
<?php
namespace App\Http\Controllers;
use App\Facades\Options;
use App\Options as Option;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class OptionsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Http\Response|\Illuminate\View\View
*/
public function index()
{
// TODO: Obtain this from the facade
$options = Option::all();
return view('dashboard.administration.settings')
->with('options', $options);
}
public function saveSettings(Request $request)
{
if (Auth::user()->can('admin.settings.edit'))
{
foreach($request->all() as $optionName => $option)
{
try
{
if (Options::optionExists($option))
{
Options::changeOption($optionName, $option);
}
}
catch(\Exception $ex)
{
$errorCond = true;
$request->session()->flash('error', 'An error occurred while trying to save settings: ' . $ex->getMessage());
}
}
if (!isset($errorCond))
{
$request->session()->flash('success', 'Settings saved successfully!');
}
}
else
{
$request->session()->flash('error', 'You do not have permission to update this resource.');
}
return redirect()->back();
}
}

View File

@@ -8,6 +8,8 @@ use App\Http\Requests\FlushSessionsRequest;
use App\Http\Requests\DeleteUserRequest;
use App\Http\Requests\SearchPlayerRequest;
use App\Http\Requests\UpdateUserRequest;
use App\Http\Requests\Add2FASecretRequest;
use App\Http\Requests\Remove2FASecretRequest;
use App\User;
use App\Ban;
@@ -21,6 +23,8 @@ use App\Notifications\EmailChanged;
use App\Notifications\ChangedPassword;
use Spatie\Permission\Models\Role;
use Google2FA;
class UserController extends Controller
{
@@ -112,10 +116,32 @@ class UserController extends Controller
}
}
public function showAccount()
public function showAccount(Request $request)
{
$QRCode = null;
if (!$request->user()->has2FA())
{
if ($request->session()->has('twofaAttemptFailed'))
{
$twoFactorSecret = $request->session()->get('current2FA');
}
else
{
$twoFactorSecret = Google2FA::generateSecretKey(32, '');
$request->session()->put('current2FA', $twoFactorSecret);
}
$QRCode = Google2FA::getQRCodeInline(
config('app.name'),
$request->user()->email,
$twoFactorSecret
);
}
return view('dashboard.user.profile.useraccount')
->with('ip', request()->ip());
->with('ip', request()->ip())
->with('twofaQRCode', $QRCode);
}
@@ -247,10 +273,67 @@ class UserController extends Controller
}
public function add2FASecret(Add2FASecretRequest $request)
{
$currentSecret = $request->session()->get('current2FA');
$isValid = Google2FA::verifyKey($currentSecret, $request->otp);
if ($isValid)
{
$request->user()->twofa_secret = $currentSecret;
$request->user()->save();
Log::warning('SECURITY: User activated two-factor authentication', [
'initiator' => $request->user()->email,
'ip' => $request->ip()
]);
Google2FA::login();
Log::warning('SECURITY: Started two factor session automatically', [
'initiator' => $request->user()->email,
'ip' => $request->ip()
]);
$request->session()->forget('current2FA');
if ($request->session()->has('twofaAttemptFailed'))
$request->session()->forget('twofaAttemptFailed');
$request->session()->flash('success', '2FA succesfully enabled! You\'ll now be prompted for an OTP each time you log in.');
}
else
{
$request->session()->flash('error', 'Incorrect code. Please reopen the 2FA settings panel and try again.');
$request->session()->put('twofaAttemptFailed', true);
}
return redirect()->back();
}
public function remove2FASecret(Remove2FASecretRequest $request)
{
Log::warning('SECURITY: Disabling two factor authentication (user initiated)', [
'initiator' => $request->user()->email,
'ip' => $request->ip()
]);
$request->user()->twofa_secret = null;
$request->user()->save();
$request->session()->flash('success', 'Two-factor authentication disabled.');
return redirect()->back();
}
public function terminate(Request $request, User $user)
{
$this->authorize('terminate', User::class);
// TODO: move logic to policy
if (!$user->isStaffMember() || $user->is(Auth::user()))
{
$request->session()->flash('error', 'You cannot terminate this user.');

View File

@@ -111,24 +111,24 @@ class VacancyController extends Controller
}
public function edit(Request $request, Vacancy $position)
public function edit(Request $request, Vacancy $vacancy)
{
$this->authorize('update', $vacancy);
return view('dashboard.administration.editposition')
->with('vacancy', $position);
->with('vacancy', $vacancy);
}
public function update(VacancyEditRequest $request, Vacancy $position)
public function update(VacancyEditRequest $request, Vacancy $vacancy)
{
$this->authorize('update', $vacancy);
$position->vacancyFullDescription = $request->vacancyFullDescription;
$position->vacancyDescription = $request->vacancyDescription;
$position->vacancyCount = $request->vacancyCount;
$vacancy->vacancyFullDescription = $request->vacancyFullDescription;
$vacancy->vacancyDescription = $request->vacancyDescription;
$vacancy->vacancyCount = $request->vacancyCount;
$position->save();
$vacancy->save();
$request->session()->flash('success', 'Vacancy successfully updated.');
return redirect()->back();

View File

@@ -21,7 +21,7 @@ class VoteController extends Controller
'userID' => Auth::user()->id,
'allowedVoteType' => $voteRequest->voteType,
]);
$vote->application()->attach($applicationID);
$vote->application()->attach($application->id);
Log::info('User ' . Auth::user()->name . ' has voted in applicant ' . $application->user->name . '\'s application', [

View File

@@ -64,6 +64,12 @@ class Kernel extends HttpKernel
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'eligibility' => \App\Http\Middleware\ApplicationEligibility::class,
'usernameUUID' => \App\Http\Middleware\UsernameUUID::class,
'forcelogout' => \App\Http\Middleware\ForceLogoutMiddleware::class
'forcelogout' => \App\Http\Middleware\ForceLogoutMiddleware::class,
'2fa' => \PragmaRX\Google2FALaravel\Middleware::class,
'localize' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRoutes::class,
'localizationRedirect' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRedirectFilter::class,
'localeSessionRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleSessionRedirect::class,
'localeCookieRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleCookieRedirect::class,
'localeViewPath' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationViewPath::class
];
}

View File

@@ -12,12 +12,12 @@ class TrustProxies extends Middleware
*
* @var array|string
*/
protected $proxies;
protected $proxies = "*";
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_ALL;
protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB;
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class Add2FASecretRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
// current logic only updates currently authenticated user
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'otp' => 'required|string|min:6|max:6'
];
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class Remove2FASecretRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'currentPassword' => 'required|password',
'consent' => 'required|accepted'
];
}
}

View File

@@ -2,6 +2,8 @@
namespace App\Notifications;
use App\Facades\Options;
use App\Traits\Cancellable;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
@@ -11,7 +13,7 @@ use App\Application;
class ApplicationApproved extends Notification implements ShouldQueue
{
use Queueable;
use Queueable, Cancellable;
public $application;
@@ -24,15 +26,15 @@ class ApplicationApproved extends Notification implements ShouldQueue
{
$this->application = $application;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
public function channels()
{
return ['mail', 'slack'];
return $this->chooseChannelsViaOptions();
}
public function optOut($notifiable)
{
return Options::getOption('notify_applicant_approved') !== 1;
}
/**

View File

@@ -6,10 +6,12 @@ use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use App\Traits\Cancellable;
use App\Facades\Options;
class ApplicationMoved extends Notification implements ShouldQueue
{
use Queueable;
use Queueable, Cancellable;
/**
* Create a new notification instance.
@@ -21,15 +23,9 @@ class ApplicationMoved extends Notification implements ShouldQueue
//
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
public function optOut($notifiable)
{
return ['mail'];
return Options::getOption('notify_application_status_change') !== 1;
}
/**

View File

@@ -10,9 +10,12 @@ use Illuminate\Notifications\Notification;
use App\Application;
use App\Vacancy;
use App\Traits\Cancellable;
use App\Facades\Options;
class NewApplicant extends Notification implements ShouldQueue
{
use Queueable;
use Queueable, Cancellable;
protected $application;
@@ -31,17 +34,21 @@ class NewApplicant extends Notification implements ShouldQueue
$this->vacancy = $vacancy;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
public function channels()
{
if (Options::getOption('enable_slack_notifications') == 1)
{
return ['slack'];
}
return [];
}
public function optOut($notifiable)
{
return Options::getOption('notify_new_user') !== 1;
}
/**
* Get the mail representation of the notification.
*

View File

@@ -8,10 +8,12 @@ use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use App\Comment;
use App\Application;
use App\Traits\Cancellable;
use App\Facades\Options;
class NewComment extends Notification implements ShouldQueue
{
use Queueable;
use Queueable, Cancellable;
protected $application;
@@ -26,15 +28,9 @@ class NewComment extends Notification implements ShouldQueue
$this->application = $application;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
public function optOut($notifiable)
{
return ['mail'];
return Options::getOption('notify_application_comment') !== 1;
}
/**

View File

@@ -10,10 +10,12 @@ use Illuminate\Notifications\Messages\SlackMessage;
use App\User;
use App\Facades\UUID;
use App\Traits\Cancellable;
use App\Facades\Options;
class NewUser extends Notification implements ShouldQueue
{
use Queueable;
use Queueable, Cancellable;
public $user;
@@ -27,18 +29,14 @@ class NewUser extends Notification implements ShouldQueue
$this->user = $user;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
public function channels($notifiable)
{
return ($notifiable->isStaffMember())
? ['slack', 'mail']
: ['mail'];
return $this->chooseChannelsViaOptions();
}
public function optOut($notifiable)
{
return Options::getOption('notify_new_user') !== 1;
}
/**

View File

@@ -9,10 +9,12 @@ use Illuminate\Notifications\Notification;
use Illuminate\Queue\SerializesModels;
use App\Vacancy;
use App\Facades\Options;
use App\Traits\Cancellable;
class VacancyClosed extends Notification implements ShouldQueue
{
use Queueable, SerializesModels;
use Queueable, SerializesModels, Cancellable;
protected $vacancy;
@@ -26,15 +28,9 @@ class VacancyClosed extends Notification implements ShouldQueue
$this->vacancy = $vacancy;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
public function optOut($notifiable)
{
return ['mail'];
return Options::getOption('notify_vacancystatus_change') !== 1;
}
/**

13
app/Options.php Normal file
View File

@@ -0,0 +1,13 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Options extends Model
{
public $fillable = [
'option_name',
'option_value'
];
}

View File

@@ -13,7 +13,7 @@ class AppointmentPolicy
/**
* Determine whether the user can view any models.
*
* @param \App\User $user
* @param User $user
* @return mixed
*/
public function viewAny(User $user)
@@ -24,8 +24,8 @@ class AppointmentPolicy
/**
* Determine whether the user can view the model.
*
* @param \App\User $user
* @param \App\Appointment $appointment
* @param User $user
* @param Appointment $appointment
* @return mixed
*/
public function view(User $user, Appointment $appointment)
@@ -36,7 +36,7 @@ class AppointmentPolicy
/**
* Determine whether the user can create models.
*
* @param \App\User $user
* @param User $user
* @return mixed
*/
public function create(User $user)
@@ -47,8 +47,8 @@ class AppointmentPolicy
/**
* Determine whether the user can update the model.
*
* @param \App\User $user
* @param \App\Appointment $appointment
* @param User $user
* @param Appointment $appointment
* @return mixed
*/
public function update(User $user, Appointment $appointment)
@@ -59,8 +59,8 @@ class AppointmentPolicy
/**
* Determine whether the user can delete the model.
*
* @param \App\User $user
* @param \App\Appointment $appointment
* @param User $user
* @param Appointment $appointment
* @return mixed
*/
public function delete(User $user, Appointment $appointment)
@@ -71,8 +71,8 @@ class AppointmentPolicy
/**
* Determine whether the user can restore the model.
*
* @param \App\User $user
* @param \App\Appointment $appointment
* @param User $user
* @param Appointment $appointment
* @return mixed
*/
public function restore(User $user, Appointment $appointment)
@@ -83,8 +83,8 @@ class AppointmentPolicy
/**
* Determine whether the user can permanently delete the model.
*
* @param \App\User $user
* @param \App\Appointment $appointment
* @param User $user
* @param Appointment $appointment
* @return mixed
*/
public function forceDelete(User $user, Appointment $appointment)

View File

@@ -5,6 +5,8 @@ namespace App\Policies;
use App\Ban;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class BanPolicy
{
@@ -41,7 +43,13 @@ class BanPolicy
*/
public function create(User $user)
{
return $user->hasRole('admin') && $user->isNot(Auth::user());
Log::debug("Authorization check started", [
'requiredRoles' => 'admin',
'currentRoles' => $user->roles(),
'hasRequiredRole' => $user->hasRole('admin'),
'isCurrentUser' => Auth::user()->is($user)
]);
return $user->hasRole('admin') && Auth::user()->isNot($user);
}
/**

View File

@@ -33,5 +33,7 @@ class AppServiceProvider extends ServiceProvider
Schema::defaultStringLength(191);
User::observe(UserObserver::class);
$this->app['request']->server->set('HTTPS', $this->app->environment() != 'local');
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App;
class OptionsProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
App::bind('smOptions', function (){
return new App\Helpers\Options();
});
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace App\Traits;
use Google2FA;
use App\Http\Requests\Add2FASecretRequest;
use Illuminate\Support\Facades\Log;
trait AuthenticatesTwoFactor
{
public function verify2FA(Add2FASecretRequest $request)
{
$isValid = Google2FA::verifyKey($request->user()->twofa_secret, $request->otp);
if ($isValid)
{
Google2FA::login();
Log::info('SECURITY (postauth): One-time password verification succeeded', [
'initiator' => $request->user()->email,
'ip' => $request->ip()
]);
return redirect()->to($this->redirectTo);
}
else
{
Log::warning('SECURITY (preauth): One-time password verification failed', [
'initiator' => $request->user()->email,
'ip' => $request->ip()
]);
$request->session()->flash('error', 'Your one time password is invalid.');
return redirect()->back();
}
}
}

View File

@@ -0,0 +1,49 @@
<?php
namespace App\Traits;
use App\Facades\Options;
trait Cancellable
{
public function chooseChannelsViaOptions()
{
$channels = [];
if (Options::getOption('enable_slack_notifications') == 1)
{
array_push($channels, 'slack');
}
elseif(Options::getOption('enable_email_notifications') == 1)
{
array_push($channels, 'email');
}
return $channels;
}
public function channels()
{
return ['mail'];
}
public function via($notifiable)
{
if ($this->optOut($notifiable))
{
return [];
}
return $this->channels();
}
public function optOut($notifiable)
{
return false;
}
}

View File

@@ -7,11 +7,10 @@ use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;
use HasRoles;
//use MustVerifyEmail;
/**
* The attributes that are mass assignable.
@@ -68,18 +67,24 @@ class User extends Authenticatable
}
public function isBanned()
{
return !$this->bans()->get()->isEmpty();
}
public function isStaffMember()
{
return $this->hasAnyRole('reviewer', 'admin', 'hiringManager');
}
public function has2FA()
{
return !is_null($this->twofa_secret);
}
public function routeNotificationForSlack($notification)

View File

@@ -9,6 +9,7 @@
"license": "MIT",
"require": {
"php": "^7.2.5",
"ext-imagick": "*",
"ext-json": "*",
"arcanedev/log-viewer": "^7.0",
"doctrine/dbal": "^2.10",
@@ -22,6 +23,8 @@
"laravel/slack-notification-channel": "^2.0",
"laravel/tinker": "^2.0",
"laravel/ui": "^2.0",
"mcamara/laravel-localization": "^1.5",
"pragmarx/google2fa-laravel": "^1.3",
"sentry/sentry-laravel": "1.7.1",
"spatie/laravel-permission": "^3.13"
},

2202
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -14,7 +14,7 @@ return [
|
*/
'title' => 'Raspberry Net',
'title' => env('APP_NAME'),
'title_prefix' => '',
'title_postfix' => '',
@@ -45,12 +45,12 @@ return [
|
*/
'logo' => 'RaspberryNet Staff',
'logo_img' => 'https://www.raspberrypi.org/app/uploads/2020/05/Raspberry-Pi-OS-downloads-image-150x150-1.png',
'logo' => env('APP_NAME'),
'logo_img' => env('APP_LOGO'),
'logo_img_class' => 'brand-image img-circle elevation-3',
'logo_img_xl' => null,
'logo_img_xl_class' => 'brand-image-xs',
'logo_img_alt' => 'Raspberry Network Staff Temporary Logo',
'logo_img_alt' => env('APP_NAME') . '\'s Temporary Logo',
/*
|--------------------------------------------------------------------------
@@ -209,74 +209,76 @@ return [
'menu' => [
[
'text' => 'Home',
'text' => 'm_home',
'icon' => 'fas fa-home',
'url' => 'dashboard'
],
[
'text' => 'Directory',
'text' => 'm_directory',
'icon' => 'fas fa-users',
'url' => 'users/directory',
'can' => 'profiles.view.others'
],
[
'header' => 'Applications',
'header' => 'h_applications',
'can' => 'applications.view.own'
],
[
'text' => 'My Applications',
'text' => 'm_my_applications',
'icon' => 'fas fa-fw fa-list-ul',
'can' => 'applications.view.own',
'submenu' => [
[
'text' => 'Current Applications',
'text' => 'm_curr_applications',
'icon' => 'fas fa-fw fa-check-double',
'url' => '/applications/my-applications'
]
],
],
'My Profile',
[
'text' => 'Profile Settings',
'header' => 'h_my_profile',
],
[
'text' => 'm_profile_settings',
'url' => '/profile/settings',
'icon' => 'fas fa-fw fa-cog'
],
[
'text' => 'My Account Settings',
'text' => 'm_account_settings',
'icon' => 'fas fa-user-circle',
'url' => '/profile/settings/account'
],
[
'header' => 'Application Management',
'header' => 'h_app_management',
'can' => ['applications.view.all', 'applications.vote']
],
[
'text' => 'All applications',
'text' => 'm_all_apps',
'url' => 'applications/staff/all',
'icon' => 'fas fa-list-ol',
'can' => 'applications.view.all'
],
[
'text' => 'Outstanding Applications',
'text' => 'm_outstanding_apps',
'url' => '/applications/staff/outstanding',
'icon' => 'far fa-folder-open',
'can' => 'applications.view.all'
],
[
'text' => 'Interview Queue',
'text' => 'm_interview_queue',
'url' => '/applications/staff/pending-interview',
'icon' => 'fas fa-fw fa-microphone-alt',
'can' => 'applications.view.all'
],
[
'text' => 'Peer Approval Queue',
'text' => 'm_peer_approval',
'url' => '/applications/staff/peer-review',
'icon' => 'fas fa-fw fa-search',
'can' => 'applications.view.all'
],
[
'header' => 'Administration',
'header' => 'h_admin',
'can' => [ // may need to be modified
'admin.hiring.*',
'admin.userlist',
@@ -286,38 +288,38 @@ return [
]
],
[
'text' => 'Staff Members',
'text' => 'm_staff_m',
'icon' => 'fas fa-fw fa-users',
'url' => '/hr/staff-members',
'can' => 'admin.stafflist'
],
[ // players who haven't been promoted yet
'text' => 'Registered Players',
'text' => 'm_reg_players',
'icon' => 'fas fa-fw fa-user-friends',
'url' => '/hr/players',
'can' => 'admin.userlist'
],
[
'text' => 'Hiring Management',
'text' => 'sm_hiring_man',
'icon' => 'far fa-calendar-plus',
'can' => 'admin.hiring.*',
'submenu' => [
[
'text' => 'Open Positions',
'text' => 'm_open_pos',
'icon' => 'fas fa-box-open',
'url' => '/admin/positions'
],
[
'text' => 'Forms',
'text' => 'sm_forms',
'icon' => 'fab fa-wpforms',
'submenu' => [
[
'text' => 'All forms',
'text' => 'sm_all_forms',
'icon' => 'far fa-list-alt',
'url' => '/admin/forms'
],
[
'text' => 'Form Builder',
'text' => 'm_form_builder',
'icon' => 'fas fa-fw fa-hammer',
'url' => '/admin/forms/builder'
]
@@ -326,18 +328,18 @@ return [
]
],
[
'text' => 'App Settings',
'text' => 'sm_app_settings',
'icon' => 'fas fa-fw fa-cog',
'can' => 'admin.notificationsettings',
'submenu' => [
[
'text' => 'Global Notification Settings',
'icon' => 'far fa-bell',
'url' => '/admin/notifications',
'can' => 'admin.notificationsettings.edit'
'text' => 'm_global_app_s',
'icon' => 'fas fa-cogs',
'url' => '/admin/settings',
'can' => 'admin.settings.view'
],
[
'text' => 'Developer Tools',
'text' => 'm_devtools',
'icon' => 'fas fa-code',
'url' => '/admin/devtools',
'can' => 'admin.developertools.use'
@@ -345,7 +347,7 @@ return [
]
],
[
'text' => 'System Logs',
'text' => 'm_s_logs',
'url' => '/admin/maintenance/system-logs',
'icon' => 'fas fa-clipboard-list',
'can' => 'admin.maintenance.logs.view'
@@ -368,7 +370,6 @@ return [
JeroenNoten\LaravelAdminLte\Menu\Filters\HrefFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\SearchFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\ActiveFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\SubmenuFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\ClassesFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\GateFilter::class,
JeroenNoten\LaravelAdminLte\Menu\Filters\LangFilter::class,

View File

@@ -15,6 +15,19 @@ return [
'name' => env('APP_NAME', 'Laravel'),
/*
|--------------------------------------------------------------------------
| Application Homepage
|--------------------------------------------------------------------------
|
| This value is the application's homepage.
| If you have a main website other than this application itself, you can link it here.
| It will be used exclusively on the "Homepage" header menu.
|
*/
'sitehomepage' => env('APP_SITEHOMEPAGE', 'https://google.com'),
/*
|--------------------------------------------------------------------------
| Application Environment
@@ -180,6 +193,7 @@ return [
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
\App\Providers\MojangStatusProvider::class,
\App\Providers\OptionsProvider::class
],
@@ -235,7 +249,8 @@ return [
'UUID' => App\Facades\UUID::class,
'IP' => App\Facades\IP::class,
'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class,
'ContextAwareValidator' => App\Facades\ContextAwareValidation::class
'ContextAwareValidator' => App\Facades\ContextAwareValidation::class,
'Settings' => App\Facades\Options::class
],

79
config/google2fa.php Normal file
View File

@@ -0,0 +1,79 @@
<?php
return [
/*
* Enable / disable Google2FA.
*/
'enabled' => env('OTP_ENABLED', true),
/*
* Lifetime in minutes.
*
* In case you need your users to be asked for a new one time passwords from time to time.
*/
'lifetime' => env('OTP_LIFETIME', 0), // 0 = eternal
/*
* Renew lifetime at every new request.
*/
'keep_alive' => env('OTP_KEEP_ALIVE', true),
/*
* Auth container binding.
*/
'auth' => 'auth',
/*
* 2FA verified session var.
*/
'session_var' => 'google2fa',
/*
* One Time Password request input name.
*/
'otp_input' => 'otp',
/*
* One Time Password Window.
*/
'window' => 1,
/*
* Forbid user to reuse One Time Passwords.
*/
'forbid_old_passwords' => false,
/*
* User's table column for google2fa secret.
*/
'otp_secret_column' => 'twofa_secret',
/*
* One Time Password View.
*/
'view' => 'auth.2fa',
/*
* One Time Password error message.
*/
'error_messages' => [
'wrong_otp' => "Your one time code was incorrect.",
'cannot_be_empty' => 'The one time code cannot be empty.',
'unknown' => 'An unknown error has occurred. Please try again.',
],
/*
* Throw exceptions or just fire events?
*/
'throw_exceptions' => env('OTP_THROW_EXCEPTION', true),
/*
* Which image backend to use for generating QR codes?
*
* Supports imagemagick, svg and eps
*/
'qrcode_image_backend' => \PragmaRX\Google2FALaravel\Support\Constants::QRCODE_IMAGE_BACKEND_IMAGEMAGICK,
];

View File

@@ -0,0 +1,70 @@
<?php
return [
// Uncomment the languages that your site supports - or add new ones.
// These are sorted by the native name, which is the order you might show them in a language selector.
// Regional languages are sorted by their base language, so "British English" sorts as "English, British"
'supportedLocales' => [
'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'],
'es' => ['name' => 'Spanish', 'script' => 'Latn', 'native' => 'Español', 'regional' => 'es_ES'],
'pt' => ['name' => 'Portuguese', 'script' => 'Latn', 'native' => 'Português', 'regional' => 'pt_PT'],
'fr' => ['name' => 'French', 'script' => 'Latn', 'native' => 'Français', 'regional' => 'fr_FR'],
],
// Requires middleware `LaravelSessionRedirect.php`.
//
// Automatically determine locale from browser (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language)
// on first call if it's not defined in the URL. Redirect user to computed localized url.
// For example, if users browser language is `de`, and `de` is active in the array `supportedLocales`,
// the `/about` would be redirected to `/de/about`.
//
// The locale will be stored in session and only be computed from browser
// again if the session expires.
//
// If false, system will take app.php locale attribute
'useAcceptLanguageHeader' => true,
// If `hideDefaultLocaleInURL` is true, then a url without locale
// is identical with the same url with default locale.
// For example, if `en` is default locale, then `/en/about` and `/about`
// would be identical.
//
// If in addition the middleware `LaravelLocalizationRedirectFilter` is active, then
// every url with default locale is redirected to url without locale.
// For example, `/en/about` would be redirected to `/about`.
// It is recommended to use `hideDefaultLocaleInURL` only in
// combination with the middleware `LaravelLocalizationRedirectFilter`
// to avoid duplicate content (SEO).
//
// If `useAcceptLanguageHeader` is true, then the first time
// the locale will be determined from browser and redirect to that language.
// After that, `hideDefaultLocaleInURL` behaves as usual.
'hideDefaultLocaleInURL' => true,
// If you want to display the locales in particular order in the language selector you should write the order here.
//CAUTION: Please consider using the appropriate locale code otherwise it will not work
//Example: 'localesOrder' => ['es','en'],
'localesOrder' => ['en', 'pt', 'fr', 'es'],
// If you want to use custom lang url segments like 'at' instead of 'de-AT', you can use the mapping to tallow the LanguageNegotiator to assign the descired locales based on HTTP Accept Language Header. For example you want ot use 'at', so map HTTP Accept Language Header 'de-AT' to 'at' (['de-AT' => 'at']).
'localesMapping' => [],
// Locale suffix for LC_TIME and LC_MONETARY
// Defaults to most common ".UTF-8". Set to blank on Windows systems, change to ".utf8" on CentOS and similar.
'utf8suffix' => env('LARAVELLOCALIZATION_UTF8SUFFIX', '.UTF-8'),
// URLs which should not be processed, e.g. '/nova', '/nova/*', '/nova-api/*' or specific application URLs
// Defaults to []
'urlsIgnored' => [
'/js/*',
'/img/*',
'/css/*',
'/vendor/*',
'/app.css',
'/robots.txt',
'/slides/*',
'/auth/logout'
],
];

5
crowdin.yml Normal file
View File

@@ -0,0 +1,5 @@
files:
- source: /**/lang/**/en/*.php
ignore:
- /**/lang/en/*2.php
translation: /**/lang/**/%two_letters_code%/%original_file_name%

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddTwofaSecretToUsers extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('twofa_secret')->nullable()->after('password');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('twofa_secret');
});
}
}

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateOptionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('options', function (Blueprint $table) {
$table->id();
$table->string('option_name');
$table->string('option_value');
$table->string('friendly_name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('options');
}
}

View File

@@ -13,5 +13,6 @@ class DatabaseSeeder extends Seeder
{
$this->call(PermissionSeeder::class);
$this->call(UserSeeder::class);
$this->call(DefaultOptionsSeeder::class);
}
}

View File

@@ -0,0 +1,27 @@
<?php
use App\Facades\Options;
use Illuminate\Database\Seeder;
class DefaultOptionsSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Options::setOption('notify_new_application_email', true, 'Notify when a new application comes through'); // done
Options::setOption('notify_application_comment', false, 'Notify when someone comments on an application'); // done
Options::setOption('notify_new_user', true, 'Notify when someone signs up'); // done
Options::setOption('notify_application_status_change', true, 'Notify when an application changes status'); // done
Options::setOption('notify_applicant_approved', true, 'Notify when an applicant is approved'); // done
Options::setOption('notify_vacancystatus_change', false, 'Notify when a vacancy\'s status changes'); // done
Options::setOption('enable_slack_notifications', true, 'Enable slack notifications');
Options::setOption('enable_email_notifications', true, 'Enable e-mail notifications');
}
}

View File

@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class NewPermissions extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$developer = Role::create([
'name' => 'developer'
]);
$admin = Role::where('name', 'admin')->first();
Permission::create(['name' => 'admin.settings.view']);
Permission::create(['name' => 'admin.settings.edit']);
$developer->givePermissionTo('admin.developertools.use');
$admin->givePermissionTo('admin.settings.view');
$admin->givePermissionTo('admin.settings.edit');
}
}

9993
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,7 @@
{
"private": true,
"scripts": {
"postinstall": "npm run prod",
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "npm run development -- --watch",

View File

@@ -1,6 +0,0 @@
/* overrides customizations for the AdminLTE auth pages */
.login-page, .register-page {
background-image: url('/img/authbg.jpg') !important;
background-size: cover !important;
}

81
public/css/login.css vendored Normal file
View File

@@ -0,0 +1,81 @@
body {
font-family: "Karla", sans-serif;
background-color: #d0d0ce;
min-height: 100vh; }
.brand-wrapper {
margin-bottom: 19px; }
.brand-wrapper .logo {
height: 37px; }
.login-card {
border: 0;
border-radius: 27.5px;
box-shadow: 0 10px 30px 0 rgba(172, 168, 168, 0.43);
overflow: hidden; }
.login-card-img {
border-radius: 0;
position: absolute;
width: 100%;
height: 100%;
-o-object-fit: cover;
object-fit: cover; }
.login-card .card-body {
padding: 85px 60px 60px; }
@media (max-width: 422px) {
.login-card .card-body {
padding: 35px 24px; } }
.login-card-description {
font-size: 25px;
color: #000;
font-weight: normal;
margin-bottom: 23px; }
.login-card form {
max-width: 326px; }
.login-card .form-control {
border: 1px solid #d5dae2;
padding: 15px 25px;
margin-bottom: 20px;
min-height: 45px;
font-size: 13px;
line-height: 15;
font-weight: normal; }
.login-card .form-control::-webkit-input-placeholder {
color: #919aa3; }
.login-card .form-control::-moz-placeholder {
color: #919aa3; }
.login-card .form-control:-ms-input-placeholder {
color: #919aa3; }
.login-card .form-control::-ms-input-placeholder {
color: #919aa3; }
.login-card .form-control::placeholder {
color: #919aa3; }
.login-card .login-btn {
padding: 13px 20px 12px;
background-color: #000;
border-radius: 4px;
font-size: 17px;
font-weight: bold;
line-height: 20px;
color: #fff;
margin-bottom: 24px; }
.login-card .login-btn:hover {
border: 1px solid #000;
background-color: transparent;
color: #000; }
.login-card .forgot-password-link {
font-size: 14px;
color: #919aa3;
margin-bottom: 12px; }
.login-card-footer-text {
font-size: 16px;
color: #0d2366;
margin-bottom: 60px; }
@media (max-width: 767px) {
.login-card-footer-text {
margin-bottom: 24px; } }
.login-card-footer-nav a {
font-size: 14px;
color: #919aa3; }
/*# sourceMappingURL=login.css.map */

1
public/css/login.css.map Executable file
View File

@@ -0,0 +1 @@
{"version":3,"sources":["login.scss"],"names":[],"mappings":"AAAA;EACI,gCAAgC;EAChC,yBAAyB;EACzB,iBAAiB,EAAA;;AAGrB;EACI,mBAAmB,EAAA;EADvB;IAIQ,YAAY,EAAA;;AAIpB;EACI,SAAS;EACT,qBAAqB;EACrB,mDAAmD;EACnD,gBAAgB,EAAA;EAGhB;IACI,gBAAgB;IAChB,kBAAkB;IAClB,WAAW;IACX,YAAY;IACZ,oBAAiB;OAAjB,iBAAiB,EAAA;EAZzB;IAeQ,uBAAuB,EAAA;IAEvB;MAjBR;QAkBY,kBAAkB,EAAA,EAEzB;EAED;IACI,eAAe;IACf,WAAW;IACX,mBAAmB;IACnB,mBAAmB,EAAA;EA1B3B;IA8BQ,gBAAgB,EAAA;EA9BxB;IAkCQ,yBAAyB;IACzB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,mBAAmB,EAAA;IAxC3B;MA2CY,cAAc,EAAA;IA3C1B;MA2CY,cAAc,EAAA;IA3C1B;MA2CY,cAAc,EAAA;IA3C1B;MA2CY,cAAc,EAAA;IA3C1B;MA2CY,cAAc,EAAA;EA3C1B;IAgDQ,uBAAuB;IACvB,sBAAsB;IACtB,kBAAkB;IAClB,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,mBAAmB,EAAA;IAvD3B;MA0DY,sBAAsB;MACtB,6BAA6B;MAC7B,WAAW,EAAA;EA5DvB;IAiEQ,eAAe;IACf,cAAc;IACd,mBAAmB,EAAA;EAGvB;IACI,eAAe;IACf,cAAc;IACd,mBAAmB,EAAA;IAEnB;MALJ;QAMQ,mBAAmB,EAAA,EAE1B;EAEA;IAEO,eAAe;IACf,cAAc,EAAA","file":"login.css","sourcesContent":["body {\n font-family: \"Karla\", sans-serif;\n background-color: #d0d0ce;\n min-height: 100vh;\n}\n\n.brand-wrapper {\n margin-bottom: 19px;\n\n .logo {\n height: 37px;\n }\n}\n\n.login-card {\n border: 0;\n border-radius: 27.5px;\n box-shadow: 0 10px 30px 0 rgba(172, 168, 168, 0.43);\n overflow: hidden;\n\n\n &-img {\n border-radius: 0;\n position: absolute;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n .card-body {\n padding: 85px 60px 60px;\n\n @media (max-width: 422px) {\n padding: 35px 24px;\n }\n }\n\n &-description {\n font-size: 25px;\n color: #000;\n font-weight: normal;\n margin-bottom: 23px;\n }\n\n form {\n max-width: 326px;\n }\n\n .form-control {\n border: 1px solid #d5dae2;\n padding: 15px 25px;\n margin-bottom: 20px;\n min-height: 45px;\n font-size: 13px;\n line-height: 15;\n font-weight: normal;\n\n &::placeholder {\n color: #919aa3;\n }\n }\n\n .login-btn {\n padding: 13px 20px 12px;\n background-color: #000;\n border-radius: 4px;\n font-size: 17px;\n font-weight: bold;\n line-height: 20px;\n color: #fff;\n margin-bottom: 24px;\n\n &:hover {\n border: 1px solid #000;\n background-color: transparent;\n color: #000;\n }\n }\n\n .forgot-password-link {\n font-size: 14px;\n color: #919aa3;\n margin-bottom: 12px;\n }\n\n &-footer-text {\n font-size: 16px;\n color: #0d2366;\n margin-bottom: 60px;\n\n @media (max-width: 767px) {\n margin-bottom: 24px;\n }\n }\n\n &-footer-nav {\n a {\n font-size: 14px;\n color: #919aa3;\n }\n }\n}\n"]}

BIN
public/img/login.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 KiB

25
resources/js/app.js vendored
View File

@@ -43,28 +43,3 @@ $("#comment").keyup(function(){
$("#submitComment").on('click', function(){
$("#newComment").submit();
});
window.Vue = require('vue');
/**
* The following block of code may be used to automatically register your
* Vue components. It will recursively scan this directory for the Vue
* components and automatically register them with their "basename".
*
* Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
*/
// const files = require.context('./', true, /\.vue$/i)
// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))
Vue.component('example-component', require('./components/ExampleComponent.vue').default);
/**
* Next, we will create a fresh Vue application instance and attach it to
* the page. Then, you may begin adding components to this application
* or customize the JavaScript scaffolding to fit your unique needs.
*/
const app = new Vue({
el: '#app',
});

View File

@@ -0,0 +1,612 @@
<?php
/*
* -- Information for translators | READ BEFORE TRANSLATING ANYTHING ---
* In this file, only translate messages to the right, in this fashion:
* 'something' => 'translate-me'
* Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon.
* Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as:
* auth.php, pagination.php, passwords.php, and validation.php.
* It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote
*
* Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters.
* If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly.
*
* Thank you for translating!
*/
return [
// ============== MENU TRANSLATIONS ======================
'menu' => [
'my_apps' => 'My Applications',
'current_apps' => 'Current Applications',
'profile_settings' => 'Profile Settings',
'hiring_man' => 'Hiring Management',
'all_forms' => 'All Forms',
'app_settings' => 'App Settings',
'global_app_settings' => 'Global App Settings',
'system_logs' => 'System Logs'
],
// ============== REUSABLE, GENERIC STRINGS ===============
'reusable' => [
'created_at' => 'Created at',
'updated_at' => 'Updated at',
'actions' => 'Actions',
'delete' => 'Delete',
'status' => 'Status',
'view' => 'View',
'view_c' => 'View Details',
'no_access' => 'Application Access Denied',
'validation_err' => 'Validation error!',
'description' => 'Description',
'join_date' => 'Join Date',
'my_acc' => 'My Account',
'confirm' => 'Please Confirm',
'confirm_plain' => 'Confirm',
'confirm_click' => 'Click to Confirm',
'date' => 'Date',
'datetime' => 'Time & Date',
'location' => 'Location',
'none_yet' => 'None yet',
'reason' => 'Reason',
'days' => 'Days',
'weeks' => 'Weeks',
'months' => 'Months',
'years' => 'Years',
'yes' => 'Yes',
'no' => 'No',
'roles' => 'Roles',
'member_since' => 'Member since :date',
'lookup' => 'Lookup :ipAddress',
'abt' => 'About',
'acc' => 'Account',
'settings' => 'Settings',
'profile' => 'My Profile',
'code' => 'code',
'here' => 'here',
'auth_req' => 'Please authenticate',
'eligible' => 'Eligible',
'ineligible' => 'Ineligible',
'schedule' => 'Schedule',
'schedule_action' => 'Schedule an Appointment',
'platform' => 'Platform',
'notepad' => 'Shared Notepad', // Context: The shared notepad that appears when votes are needed,
'appointment_info' => 'Appointment Information',
'ip_info' => 'IP Address Information for'
],
// ============== HOMEPAGE MESSAGES ======================
'home' => 'Home',
'homepagetxt' => 'Homepage',
'login' => 'Sign in',
'logout' => 'Sign out',
'register' => 'Sign up',
'dashboard' => 'Dashboard',
'back' => 'Go back',
'homepage_welcome' => 'Welcome to our team management center!',
'homepage_explainer_line1' => 'Here, you can apply for open staff member positions, view your application status, and manage your profile.',
'homepage_explainer_line2' => 'Sign up with Email to continue.',
'footer_copy' => 'All rights reserved',
'global_error' => 'An error occurred',
'global_success' => 'Success!',
'txt_learn_more' => 'Learn more',
'opening_nodetails' => 'There don\'t seem to be any details',
'opening_nodetails_exp' => 'This opening does not have any details yet.',
'details_m_title' => 'Opening details',
'open_positions' => 'Open Positions',
'last_updated' => 'Last updated',
'open_position_count' => '{1} There is :count open position!|[2,*] There are :count open positions!',
'ineligible_days_remaining' => 'Ineligible (:days) day(s) remaining',
'txt_apply' => 'Apply', // Context: Apply as in applying for a "job", e.g. registering for a job
'txt_application' => 'Application',
'application_closed' => 'Applications Closed',
'application_closed_intro' => 'Hello there!',
'application_closed_intro_line2' => '
We are currently not hiring any new staff members at the moment. If you\'d like to apply, check out our Discord\'s
announcement channel for news when a new position opens.
Our application cycle usually lasts two weeks, so if you\'re seeing this, it\'s because it finished, and new one will begin soon.
',
'where_work' => 'Where you\'ll work',
'join_team' => 'Join The Team',
'join_team_cta' => 'Join the team today and help out network grow and prosper!',
'contact_cta' => 'Any questions? Leave a message!',
'contact_disclaimer' => '*This is not an application form. Any applications sent here will be ignored.',
'contactlabel_name' => 'Name',
'contactlabel_email' => 'E-mail',
'contactlabel_subject' => 'Subject (ex. Site Suggestion)',
'contactlabel_send' => 'Send',
// ======================== AUTHENTICATION MESSAGES ===========================
'2fa_txt' => 'Two-Factor Authentication',
'2fa_sronly' => 'Two-factor secret code (You can find this on Google Authenticator)',
'2fa_lostcode' => 'Don\'t know the code?',
'2fa_cancel_login' => 'Cancel login (logout)',
'terms' => 'Terms of Use',
'ppolicy' => 'Privacy Policy',
'signin_cta' => 'Sign into your account',
'password' => 'Password',
'remember_me' => 'Remember me',
'forgot_pw' => 'Forgot password?',
'register_cta' => 'Register here',
'no_acc' => 'Don\'t have an account?',
'register_acc' => 'Register a new account',
'pwsec' => [
'line1' => 'Basic password security',
'line2' => 'For your security, we implement strict password policies. It\'s also advisable to let your password manager or browser generate and save passwords for you (if it\'s a private device).',
'line3' => 'Passwords must be a combination of: ',
'line4' => 'A minimum of 10 characters;',
'line5' => 'At least 3 uppercase characters;',
'line6' => 'At least 3 numbers;',
'line7' => 'Any number of special characters.'
],
'sronly_confirmpassword' => 'Confirm Password', // hint: sronly stands for screen-reader only
'sronly_mcusername' => 'Minecraft Username (Premium)',
'have_account' => 'Have an account with us?',
'login_here' => 'Login here',
'register_txt' => 'Register',
// ===================== DASHBOARD & COMPONENT MESSAGES ===========================
'modal_close' => 'Close',
'component_nopermission' => 'We\'re sorry, but you do not have permission to access this web page.',
'component_accessdenied' => 'Access Denied',
'component_contact' => 'Please contact your administrator if you believe this was in error.',
'welcome_back' => 'Welcome back,',
'eligible' => 'Eligible',
'ineligible' => 'Ineligible',
'eligibility_status' => 'Your current application eligibility status: :badgeStatus',
'ongoing_apps' => 'Ongoing apps',
'denied_apps' => 'Denied apps',
'users_staff' => 'Total Users + Staff',
'new_apps' => 'New applications',
'v_backlog' => 'Vote backlog',
'ranks' => 'Available ranks',
'open' => 'Open',
'closed' => 'Closed',
'upcoming' => 'Your upcoming interviews',
'soon' => 'Coming soon',
//=================== ADMINISTRATION MESSAGES (for all administration pages) ===============
'adm' => 'Administration',
'devtools' => 'Developer Tools',
'devtools_evn' => 'Event Management',
'devoptions' => 'Developer Options',
'forceeval' => 'Please choose an application to force re-evaluation',
'appid' => 'Application ID',
'no_valid_app' => 'There are no valid applications',
'choose_app' => 'Choose an application',
'dispatch_event' => 'Dispatch event now',
'devtools_warn' => 'Do not use these options if you don\'t know what you\'re doing, even if you have access to this page.',
'warn' => 'Warning',
'override_votes' => 'Override Vote Evaluation',
'artisan_evaluate' => 'Artisan: Evaluate Votes Now', // Tip: Artisan is a program name, therefore not translatable
'devtools_info' => 'This panel may be also used to completely override the vote system in stalemate scenarios',
'forms' => 'Forms',
'positions' => 'Positions', // Context: Positions as in job opening
'edit_form' => 'Edit Form',
'edt' => 'Editor',
'edit' => 'Edit',
'edt_action' => 'Editing',
'txtbox' => 'Textbox',
'multiline' => 'Multi line answer',
'checkbox' => 'Checkbox',
'field_type' => 'Choose a field type',
'save_exit' => 'Save & Quit',
'new_field' => 'New field',
'vacancy_edit' => 'Vacancy Editor',
'new_vacancy' => 'New Vacancy',
'form_consistency' => 'For consistency purposes, grayed out fields can\'t be edited.',
'vacancy' => [
'add' => 'Add vacancy',
'name' => 'Vacancy Name',
'description' => 'Vacancy Description',
'details' => 'Vacancy Details',
'markdown' => 'Markdown Supported',
'no_details' => 'No details yet... Add some!',
'permission_group' => 'Permission Group',
'permission_group_tooltip' => 'The permission group from your server/network\'s permissions manager. Compatible with Luckperms and PEX.',
'discord_roleid' => 'Discord Role ID',
'discord_roleid_tooltip' => 'Discord Desktop: Go to your Account Settings > Appearance -> Advanced and toggle Developer Mode. On your server\'s roles tab, right click any role to copy it\'s ID.',
'current_form' => 'Current Form (uneditable)',
'remaining_slots' => 'Remaining slots',
'free_slots' => 'Free slots',
'free_slots_tooltip' => 'How many submissions before the vacancy stops accepting new applicants?',
'save' => 'Save Changes',
'cancel' => 'Cancel',
'close_vacancy' => 'Close Position',
'description_tooltip' => 'Add things like admission requirements, rank resposibilities and roles, and anything else you feel is necessary',
''
],
'form' => 'Form',
'form_builder' => [
'builder' => 'Form Builder',
'builder_name' => 'Application Form Management Tool',
'name_form' => 'Name your form...',
'save_form' => 'Save Form',
],
'form_preview' => [
'preview' => 'Preview',
'title' => 'Application Form Preview',
'looks' => 'This is how your form looks like to applicants',
'f_info' => 'You may edit it and add more fields later.',
''
],
'forms_p' => [
'available_forms' => 'Available forms',
'form_title' => 'Form title',
'empty_noforms' => 'Nothing to see here! Please add some forms first.',
'new_form' => 'NEW FORM'
],
'players' => [
'reg_players' => 'Registered Players',
'reg_players_staff' => 'See Registered Players (Applicant Pool)',
'total_banned' => 'Total Banned Players',
'search' => 'Search players',
'f_p_search' => 'Full/partial email search',
'p_disclaimer' => 'Please note: This list only includes players registered in the team management portal. In a future release, all network players will be shown here.',
'listing' => 'Player Listing',
'reg_date' => 'Registration Date',
'ign' => 'IGN', // Context: Short for In-Game Name
'banned' => 'Banned',
'active' => 'Active',
'no_reg' => 'There are no registered players!',
'no_reg_exp' => "
Registered players are those without a staff role in the team management application.
There may be other users registered in the platform, but they won't be displayed here.
",
'see_staff' => 'See Staff Members'
],
'positions_p' => [
'application_form' => 'Application Form',
'select_form' => 'Select a form...',
'no_form_error' => "
You cannot create a vacancy without any forms with which people would apply.
create a form first, then, create a vacancy.
A single form is allowed to have multiple vacancies, so you can attach future vacancies to the same form if you'd like.
",
'new_pos' => 'NEW POSITION',
'empty_pos_warning' => 'Nothing to see here! Open some vacancies first. This will get applicants pouring in! (hopefully)',
'manage_forms' => 'MANAGE APPLICATION FORMS',
],
'settings' => [
'settings' => 'Settings',
'settings_header' => 'Notification Settings',
'settings_p' => 'Change which notifications are sent here.',
'back_btn' => 'Back to Dashboard'
],
'staff' => [
'members' => 'Staff Members',
'active_sm' => 'Active Staff Members',
'm_listing' => 'Member Listing',
'f_name' => 'Full Name',
'rank' => 'Rank',
],
// ======================== APPLICATION RENDERING MESSAGES =========================
'application_r' => [
'appl_submit_warn' => 'Are you sure you want to submit your application? Please review each of your answers carefully before doing so.',
'appl_submit_doublewarn' => 'Please note: Applications CANNOT be modified once they\'re submitted!',
'acceptsend' => 'Accept & Send',
'review' => 'Review',
'applying_for' => 'You are applying for: :name',
'welcome' => [
'yrs_old' => 'Years old', // Context: "years old" as in: Tom is 24 years old
'line1' => 'We\'re glad you\'ve decided to apply. Generally, applications take 48 hours to be processed and reviewed. Depending on the circumstances and the volume of applications, you may receive an answer in a shorter time.',
'line2' => 'Please fill out the form below. Keep all answers concise and complete. Please keep in mind that the age requirement is at least :agerqr.',
'line3' => 'Asking about your application will result in instant denial. Everything you need to know is here.'
],
'app_timeout' => 'Your account is not permitted to submit another application. Please wait :days more days before trying to submit an application.'
],
'application_m' => [
'title' => 'Application Management',
'all_apps' => 'All Applications',
'modal_confirm' => 'Are you sure?',
'really_delete' => 'Really delete this?',
'outstanding_sm' => 'Outstanding',
'outstanding_apps' => 'Outstanding Applications',
'outstanding_subm' => 'Outstanding (Submitted)',
'interview_q' => 'Interview Queue',
'interview_p' => 'Interview',
'interview_s' => 'Interview Scheduled',
'finished_int' => 'Finished Interviews',
'schedule_int' => 'Schedule Interviews',
'p_review' => 'Peer Review',
'applicant' => 'Applicant',
'interviewee' => 'Interviewee',
'pending_int' => 'Pending Interview',
'schedule' => 'Schedule',
'view_interview_queue' => 'View Interview Queue',
'view_approval_queue' => 'View Approval Queue',
'view_outstanding_queue' => 'View Outstanding Queue',
'approved' => 'Approved',
'denied' => 'Denied',
'unknown_stat' => 'Unknown',
'consequence_irreversible' => 'IRREVERSIBLE',
'delete_action_warning' => 'This action is :consequence.',
'delete_explainer' => 'Comments, appointments and any votes attached to this application WILL be deleted too. Please make sure this application really needs to be deleted.',
'all_apps_header' => 'You\'re looking at all applications ever received',
'all_apps_exp' => 'Here, you have quick and easy access to all applications ever received by the system.',
'no_apps' => 'There are no applications here',
'no_apps_exp' => 'We couldn\'t find any applications. Maybe no one has applied yet? Please try again later.',
'int_applications' => 'Applications',
'no_apps_pending_int' => 'No Applications Pending Interview',
'no_apps_pending_int_exp' => 'There are no applications that have been moved up to the Interview stage. Please check the outstanding queue.There are no applications that have been moved up to the Interview stage. Please check the outstanding queue.',
'upcoming_int' => 'My Upcoming Interviews',
'pending_schedule' => 'Pending Schedule',
'no_upcoming' => 'There are no upcoming interviews',
'no_upcoming_exp' => 'Please check other queues down in the application process. Applicants here may have already been interviewed.',
'no_outstanding' => 'Seeing no applications? Check with an Administrator to make sure that there are available open positions.',
'no_outstanding_exp' => 'Advertising on relevant forums made for this purpose is also a good idea.',
'applicant_name' => 'Applicant Name',
'application_date' => 'Application Date',
'no_pending' => 'There are no pending applications',
'no_pending_exp' => 'It seems like no one new has applied yet. Checkout the interview and approval queues for applications that might have moved up the ladder by now.',
'voting_reminder' => [
'title' => 'Voting Reminder',
'line1' => 'Applications which gain more than 50% of positive votes are automatically approved after one day.',
'line2' => 'Conversely, applications that do not reach this number are automatically denied.',
'line3' => 'Please note that the vote system can be overridden'
],
'no_pending_review' => 'There are no applications pending review',
'no_pending_review_exp' => 'Check the other queues for any applications! Applications will be shown here as soon as their interview is completed. You\'ll be able to view meeting notes and vote based on your observations.',
],
// ============= PROFILE & USER MESSAGES ===============
'profile' => [
'title' => ':name\'s profile',
'profile' => 'Profile',
'users' => 'Users',
'account_banned' => 'Account banned',
'account_banned_exp' => 'This user has been banned by the moderators.',
'ban_confirm' => 'Please confirm that you want to ban this user account. You\'ll need to add a reason and expiration date to confirm this. Bans don\'t transfer to connected Minecraft networks (yet).',
'leave_empty' => 'Leave empty for a permanent ban',
'duration' => 'Duration',
'p_duration' => 'Punishment duration',
'p_duration_exp' => 'e.g. Spamming',
'ban' => 'Ban',
'terminate_notice' => 'You are about to terminate a staff member',
'terminate_notice_warning' => 'Terminating a staff member will remove their privileges on the team management site and Network.
They will be notified of their termination. Make sure to have discussed this with them first.',
'terminate_notice_consequence' => 'THIS PROCESS IS IRREVERSIBLE AND IMMEDIATE',
'terminate_txt' => 'Terminate Staff Member',
'delete_acc_warn' => 'WARNING: This is a potentially destructive action!',
'delete_acc_consequence' => 'Deleting a user\'s account is an irreversible process. Historic and current applications, votes, and profile content, as well as any personally identifiable information will be immediately erased.',
'type_to_confirm' => 'Type to confirm:',
'type_placeholder' => 'Please type the above',
'delete_acc' => 'Delete Account',
'edit_acc' => 'Edit Account',
'ban_acc' => 'Ban Account',
'unban_acc' => 'Unban Account',
'search_result' => 'Search results',
'origin_cc' => 'Origin country',
'state_prov' => 'State/Province',
'district' => 'District (if any)',
'city' => 'City',
'zipcode' => 'Zipcode',
'coords' => 'Coordinates',
'european' => 'European?',
'isp' => 'ISP', // Internet service provider
'org' => 'Organization (if any)',
'ctype' => 'C. Type', // Internet Connection type
'timezone' => 'Timezone',
'noresults' => 'This query returned no results.',
'edituser' => 'Edit PII and Roles', // PII: Personally identifiable information
'edituser_consequence' => 'Warning! This is a sensitive setting! Changing this could have unintended consequences!',
'acc_management' => 'Account Management (Admin)',
'discord_tag' => 'User\'s Discord Tag: :discordTag',
'account_settings' => 'Account Settings',
'account_settings_personal' => 'My Account Settings',
'2fa_welcome' => 'We\'re glad you decided to increase your account\'s security!',
'supported_apps' => 'Supported apps you can install: ',
'scan_code' => 'Scan the :scannable code with your preferred app, and then copy the code here.',
'otp' => 'One-time code',
'2fa_enable' => 'Enable 2FA',
'2fa_remove_consequence' => 'Removing two-factor authentication will reduce the security of your account.',
'2fa_password_confirm' => 'Confirm your password to continue',
'2fa_password_confirm_exp' => 'To prevent unauthorized changes, a password is always required for sensitive operations.',
'2fa_disable_consent' => '"I understand the possible consequences of disabling two factor authentication"',
'2fa_remove' => 'Remove 2FA',
'2fa_remove_extended' => 'Remove Two-Factor Authentication',
'2fa_send_code' => 'Send 2FA Code',
'2fa_send_code_s' => '2FA Code (ex. 41351)',
'security_lgotherdev' => 'For your security, you\'ll need to re-enter your password before logging out other devices. If you believe your account has been compromised, please change your password instead, as that will automatically log out anyone else who might using your account, and prevent them from signing back in.',
'password_reenter' => 'Re-enter your password',
'acc_security' => 'Account Security',
'2fa' => 'Two Factor Authentication',
'sessions' => 'Sessions',
'contact_settings' => 'Contact Settings (E-Mail)',
'change_password' => 'Change Password',
'change_password_exp' => 'Change your password here. This will log you out from all existing sessions for your security.',
'old_pass' => 'Old Password',
'forgot_pw' => 'Forgot your password? Reset it :link',
'new_pw' => 'New Password',
'2fa_enable_success' => 'Hooray! 2FA is setup correctly for your account. A code will be asked each time you login.',
'2fa_avail' => 'Two-factor auth is available for your account.',
'2fa_avail_exp' => ' Enabling this security option greatly increases your account\'s security in case your password ever gets stolen.',
'session_manager' => 'Session Manager',
'terminate_others' => 'Terminating other sessions is generally a good idea if your account has been compromised.',
'current_session' => 'Your current session: logged in from :ipAddress',
'flush_session' => 'Flush sessions',
'personal_data_change' => 'Need to change personal data? You can do so here.',
'current_email' => 'Current Email Address',
'new_email' => 'New Email Address',
'current_password' => 'Current Password',
'security_nochangepw' => 'For security reasons, you cannot make important account changes without confirming your password. You\'ll also need to verify your new email.',
'change_email' => 'Change Email Address',
'basic_info' => 'Basic Information',
'fl_name' => 'First / Last Name',
'shortbio' => 'Short Bio',
'about_me' => 'About Me',
'pref_media' => 'Preferences & Media',
'avatar_source' => 'Retrieve avatar from: ',
'social_media' => 'Social Media',
'github_user' => 'Github Username',
'twitter_user' => 'Twitter Username',
'insta_user' => 'Instagram Username',
'discord_user' => 'Discord Handle',
'update_prfl' => 'Update Profile'
],
// ==================== USER ACCOUNT MESSAGES (NON-PRIVILEGED) =====================
'user' => [
'app_process' => [
'title' => 'Application Process',
'line1' => 'Please allow up to three days for your application to be processed. Your application will be reviewed by every team member, and will move up in stages.',
'line2' => 'If an interview is scheduled, you\'ll need to open your application here and confirm the time, date, and location assigned for you.'
],
'account_standing' => 'Account Standing',
'account_eligibility' => 'Your account is currently :eligibility for application',
'days_remaining_acc_alt' => 'As of today, there are :days remaining until you\'re permitted to submit another application.',
'my_ongoingapps' => 'My Ongoing Applications',
'submitted' => 'Submitted',
'peer_approval' => 'Peer Approval',
'peer_approval_q' => 'Peer Approval Queue',
'nothing_to_show' => 'Nothing to show',
'nothing_to_show_exp' => 'You currently have no applications to display. If you\'re eligible, you may apply once every month.',
'directory' => [
'itsyou' => 'It\'s you!',
'title' => 'User Directory',
'directory' => 'Directory'
]
],
'view_app' => [
'title' => 'Viewing application',
'viewing_app' => 'Viewing :user\'s application',
'cantvote' => 'You cannot vote on this application anymore.',
'no_notes' => 'There are no notes yet. Add some!',
'deny_confirm' => 'Are you sure you want to deny this application? Please keep in mind that this user will only be allowed to apply 30 days after their first application.',
'deny_confirm_consequence' => 'This action cannot be undone.',
'deny_confirm_btn' => 'Confirm: Deny Applicant',
'form_updated_alert' => 'If this form has been updated, new fields and updated questions will not show up here!',
'context_info' => 'Contextual Information',
'appl_ip' => 'Applicant IP Address',
'appl_for' => 'Applying for',
'currentstatus' => 'Current Status',
'decisionmod' => 'Decision & Moderation Tools',
'denyapp' => 'Deny applicant',
'nextstage' => 'Move to next stage',
'appointment_desc' => 'Appointment description',
'int_date_time' => 'Interview Date & Time',
'choosedate' => 'Click to choose a date',
'appointment_loc' => 'Appointment Location',
'pref_platform' => 'Select your preferred platform',
'coming_soon_int' => 'Embedded in-house video conferencing coming soon, powered by Jitsi Meet',
'scheduled_for' => 'Interview Scheduled for:',
'platform' => 'Platform',
'finish_meeting' => 'Finish Meeting',
'view_notes' => 'View Meeting Notes',
'vote_app' => 'Vote on this application',
'vote_explainer' => [
'line1' => 'If you weren\'t present during this meeting, you can view the shared meeting notepad to help you make a decision.',
'line2' => 'You may vote on as many applications as needed; However, you can only vote once per application.',
'line3' => 'Votes carry no weight based on rank. This system has been designed with fairness and ease of use in mind.'
],
'vote_approve' => 'Vote: Approve Applicant',
'vote_deny' => 'Vote: Deny Applicant',
'm_notes' => 'Meeting notes',
'view_more' => 'View more Applications',
'comments' => 'Comments',
'no_comments' => 'There are no comments here.',
'no_comments_exp' => 'There are no comments here! Comments are only visible to staff members. Be the first to share your input! Commenting may help with decision-making when time comes to vote for an application.',
'commenting_as' => 'Commenting as :username',
'max_chars' => 'max characters', // Context: A number is added before max characters
'post' => 'Post', // Context: Post as in post comment
]
// ==================== END OF MAIN I18N FILE ======================
];

View File

@@ -0,0 +1,19 @@
<?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' => 'Estas credenciales no coinciden con nuestros registros.',
'throttle' => 'Demasiados intentos de inicio de sesión. Por favor, inténtalo de nuevo en :seconds segundos.',
];

View File

@@ -0,0 +1,612 @@
<?php
/*
* -- Information for translators | READ BEFORE TRANSLATING ANYTHING ---
* In this file, only translate messages to the right, in this fashion:
* 'something' => 'translate-me'
* Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon.
* Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as:
* auth.php, pagination.php, passwords.php, and validation.php.
* It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote
*
* Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters.
* If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly.
*
* Thank you for translating!
*/
return [
// ============== MENU TRANSLATIONS ======================
'menu' => [
'my_apps' => 'Mis Aplicaciones',
'current_apps' => 'Aplicaciones actuales',
'profile_settings' => 'Ajustes del perfil',
'hiring_man' => 'Gestión de contratación',
'all_forms' => 'Todos los formularios',
'app_settings' => 'Configuración de la app',
'global_app_settings' => 'Configuración global de la aplicación',
'system_logs' => 'Registros del sistema'
],
// ============== REUSABLE, GENERIC STRINGS ===============
'reusable' => [
'created_at' => 'Creado el',
'updated_at' => 'Actualizado el',
'actions' => 'Acciones',
'delete' => 'Eliminar',
'status' => 'Estado',
'view' => 'Ver',
'view_c' => 'Ver detalles',
'no_access' => 'Acceso a la aplicación denegado',
'validation_err' => '¡Error de validación!',
'description' => 'Descripción',
'join_date' => 'Fecha de unión',
'my_acc' => 'Mi cuenta',
'confirm' => 'Por favor, confirme',
'confirm_plain' => 'Confirmar',
'confirm_click' => 'Haga clic para confirmar',
'date' => 'Fecha',
'datetime' => 'Fecha y hora',
'location' => 'Ubicación',
'none_yet' => 'Ninguno aún',
'reason' => 'Razón',
'days' => 'Días',
'weeks' => 'Semanas',
'months' => 'Meses',
'years' => 'Años',
'yes' => 'Sí',
'no' => 'Nu',
'roles' => 'Papeles',
'member_since' => 'Miembro desde :date',
'lookup' => 'Búsqueda :ipAddress',
'abt' => 'Acerca de',
'acc' => 'Cuenta',
'settings' => 'Configuraciones',
'profile' => 'Mi perfil',
'code' => 'código',
'here' => 'aqui',
'auth_req' => 'Por favor autenticar',
'eligible' => 'Con derechos',
'ineligible' => 'Ineligible',
'schedule' => 'Programar',
'schedule_action' => 'Programar una cita',
'platform' => 'Plataforma',
'notepad' => 'Bloc de notas compartido', // Context: The shared notepad that appears when votes are needed,
'appointment_info' => 'Información de citas',
'ip_info' => 'Información de la dirección IP para'
],
// ============== HOMEPAGE MESSAGES ======================
'home' => 'Inicio',
'homepagetxt' => 'Inicio',
'login' => 'Iniciar sesión',
'logout' => 'Cerrar sesión',
'register' => 'Regístrate',
'dashboard' => 'Tablero',
'back' => 'Volver',
'homepage_welcome' => '¡Bienvenido a nuestro centro de gestión de equipos!',
'homepage_explainer_line1' => 'Aquí, usted puede solicitar puestos abiertos para miembros del personal, ver el estado de su solicitud y administrar su perfil.',
'homepage_explainer_line2' => 'Regístrate con Email para continuar.',
'footer_copy' => 'Todos los derechos reservados',
'global_error' => 'Se ha producido un error',
'global_success' => '¡Éxito!',
'txt_learn_more' => 'Aprende más',
'opening_nodetails' => 'Parece que no hay detalles',
'opening_nodetails_exp' => 'Esta apertura no tiene detalles todavía.',
'details_m_title' => 'Datos de apertura',
'open_positions' => 'Vacantes abiertas',
'last_updated' => 'Última actualización',
'open_position_count' => '{1} ¡Hay :count posición abierta!|[2,*] ¡Hay :count posiciones abiertas!',
'ineligible_days_remaining' => 'No elegible (:days) día(s) restantes',
'txt_apply' => 'Aplicar', // Context: Apply as in applying for a "job", e.g. registering for a job
'txt_application' => 'Aplicación',
'application_closed' => 'Aplicaciones cerradas',
'application_closed_intro' => '¡Hola!',
'application_closed_intro_line2' => '
Actualmente no estamos contratando ningún nuevo miembro del personal en este momento. Si quieres aplicar, revisa el canal de anuncios de nuestro Discord
para obtener noticias cuando se abre una nueva posición.
Nuestro ciclo de aplicación suele durar dos semanas, así que si estás viendo esto, es porque terminó, y uno nuevo comenzará pronto.
',
'where_work' => 'Donde trabajarás',
'join_team' => 'Únete al equipo',
'join_team_cta' => '¡Únete al equipo hoy y ayuda a que la red crezca y prospere!',
'contact_cta' => '¿Alguna pregunta? ¡Deja un mensaje!',
'contact_disclaimer' => '*Este no es un formulario de solicitud. Cualquier solicitud enviada aquí será ignorada.',
'contactlabel_name' => 'Nombre',
'contactlabel_email' => 'E-mail',
'contactlabel_subject' => 'Asunto (ej. Sugerencia del sitio)',
'contactlabel_send' => 'Enviar',
// ======================== AUTHENTICATION MESSAGES ===========================
'2fa_txt' => 'Autenticación de dos factores',
'2fa_sronly' => 'Código secreto de dos factores (puedes encontrarlo en Google Authenticator)',
'2fa_lostcode' => '¿No conoce el código?',
'2fa_cancel_login' => 'Cancelar inicio de sesión (desconectar)',
'terms' => 'Términos de uso',
'ppolicy' => 'Política de privacidad',
'signin_cta' => 'Inicia sesión en tu cuenta',
'password' => 'Contraseña',
'remember_me' => 'Recordarme',
'forgot_pw' => '¿Olvidaste la contraseña?',
'register_cta' => 'Regístrate aquí',
'no_acc' => '¿No tienes una cuenta?',
'register_acc' => 'Registrar una nueva cuenta',
'pwsec' => [
'line1' => 'Seguridad básica de contraseña',
'line2' => 'Para su seguridad, implementamos estrictas políticas de contraseñas. También es recomendable dejar que su gestor de contraseñas o navegador genere y guarde contraseñas para usted (si es un dispositivo privado).',
'line3' => 'Las contraseñas deben ser una combinación de: ',
'line4' => 'Un mínimo de 10 caracteres;',
'line5' => 'Al menos 3 caracteres en mayúscula;',
'line6' => 'Al menos 3 números;',
'line7' => 'Cualquier número de caracteres especiales.'
],
'sronly_confirmpassword' => 'Confirmar contraseña', // hint: sronly stands for screen-reader only
'sronly_mcusername' => 'Usuario de Minecraft (Premium)',
'have_account' => '¿Ya tienes una cuenta?',
'login_here' => 'Inicia sesión aquí',
'register_txt' => 'Registrarse',
// ===================== DASHBOARD & COMPONENT MESSAGES ===========================
'modal_close' => 'Cerrar',
'component_nopermission' => 'Lo sentimos, pero no tienes permiso para acceder a esta página web.',
'component_accessdenied' => 'Acceso denegado',
'component_contact' => 'Póngase en contacto con su administrador si cree que fue un error.',
'welcome_back' => 'Bienvenido, de nuevo',
'eligible' => 'Con derechos',
'ineligible' => 'Ineligible',
'eligibility_status' => 'Estado de elegibilidad de su solicitud actual: :badgeStatus',
'ongoing_apps' => 'Aplicaciones en curso',
'denied_apps' => 'Aplicaciones denegadas',
'users_staff' => 'Total de usuarios + personal',
'new_apps' => 'Nuevas aplicaciones',
'v_backlog' => 'Votaciones',
'ranks' => 'Rangos disponibles',
'open' => 'Abrir',
'closed' => 'Cerrado',
'upcoming' => 'Tus próximas entrevistas',
'soon' => 'Próximamente',
//=================== ADMINISTRATION MESSAGES (for all administration pages) ===============
'adm' => 'Administración',
'devtools' => 'Herramientas para desarrolladores',
'devtools_evn' => 'Gestión de eventos',
'devoptions' => 'Opciones de desarrollador',
'forceeval' => 'Por favor, elija una aplicación para forzar la reevaluación',
'appid' => 'ID de la aplicación',
'no_valid_app' => 'No hay aplicaciones válidas',
'choose_app' => 'Elija una aplicación',
'dispatch_event' => 'Evento de envío ahora',
'devtools_warn' => 'No utilice estas opciones si no sabe lo que está haciendo, incluso si tiene acceso a esta página.',
'warn' => 'Advertencia',
'override_votes' => 'Anular Evaluación de Votos',
'artisan_evaluate' => 'Artisan: Evaluar los Votos Ahora', // Tip: Artisan is a program name, therefore not translatable
'devtools_info' => 'Este panel también puede utilizarse para anular completamente el sistema de votación en escenarios estancados',
'forms' => 'Formularios',
'positions' => 'Posiciones', // Context: Positions as in job opening
'edit_form' => 'Editar formulario',
'edt' => 'Editor',
'edit' => 'Editar',
'edt_action' => 'Editando',
'txtbox' => 'Textbox',
'multiline' => 'Respuesta multilínea',
'checkbox' => 'Casilla',
'field_type' => 'Elija un tipo de campo',
'save_exit' => 'Guardar y salir',
'new_field' => 'Nuevo campo',
'vacancy_edit' => 'Editor de vacío',
'new_vacancy' => 'Nueva vacío',
'form_consistency' => 'Por razones de consistencia, los campos en gris no pueden ser editados.',
'vacancy' => [
'add' => 'Añadir vacante',
'name' => 'Nombre de la vacuna',
'description' => 'Descripción de la vacío',
'details' => 'Detalles de vacío',
'markdown' => 'Compatible con la sintaxis de Markdown',
'no_details' => 'Aún no hay detalles... ¡Añade algunos!',
'permission_group' => 'Grupo de Permisos',
'permission_group_tooltip' => 'El grupo de permisos del gestor de permisos de su servidor/red. Compatible con Luckperms y PEX.',
'discord_roleid' => 'Rol de Discord ID',
'discord_roleid_tooltip' => 'Discord Desktop: Ve a la configuración de tu cuenta > Apariencia -> Avanzado y cambia el modo de desarrollador. En la pestaña de roles de su servidor, haga clic derecho en cualquier rol para copiar su ID.',
'current_form' => 'Formulario actual (no editable)',
'remaining_slots' => 'Ranuras restantes',
'free_slots' => 'Espacios libres',
'free_slots_tooltip' => '¿Cuántos envíos antes de que la vacante deje de aceptar nuevos solicitantes?',
'save' => 'Guardar Cambios',
'cancel' => 'Cancelar',
'close_vacancy' => 'Cerrar posición',
'description_tooltip' => 'Añade cosas como requisitos de admisión, reposibilidades de rango y roles, y cualquier otra cosa que consideres necesaria',
''
],
'form' => 'Forma',
'form_builder' => [
'builder' => 'Constructor de Formularios',
'builder_name' => 'Herramienta de gestión de formularios',
'name_form' => 'Nombra su formulario...',
'save_form' => 'Guardar formulario',
],
'form_preview' => [
'preview' => 'Vista previa',
'title' => 'Vista previa del formulario de aplicación',
'looks' => 'Así es como se ve tu formulario a los solicitantes',
'f_info' => 'Puedes editarlo y añadir más campos más tarde.',
''
],
'forms_p' => [
'available_forms' => 'Formularios disponibles',
'form_title' => 'Título del formulario',
'empty_noforms' => '¡No hay nada que ver aquí! Por favor, añade algunos formularios primero.',
'new_form' => 'NUEVA FORMA'
],
'players' => [
'reg_players' => 'Jugadores registrados',
'reg_players_staff' => 'Ver Jugadores Registrados (Grupo de candidatos)',
'total_banned' => 'Total de jugadores bloqueados',
'search' => 'Buscar jugadores',
'f_p_search' => 'Búsqueda de correo completa/parcial',
'p_disclaimer' => 'Tenga en cuenta: Esta lista sólo incluye jugadores registrados en el portal de administración del equipo. En una futura versión, todos los jugadores de red se mostrarán aquí.',
'listing' => 'Listado de jugadores',
'reg_date' => 'Fecha de registro',
'ign' => 'IGN', // Context: Short for In-Game Name
'banned' => 'Baneado',
'active' => 'Activo',
'no_reg' => '¡No hay jugadores registrados!',
'no_reg_exp' => "
Los jugadores registrados son aquellos que no tienen un rol de personal en la aplicación de gestión del equipo.
Puede haber otros usuarios registrados en la plataforma, pero no se mostrarán aquí.
",
'see_staff' => 'Ver miembros del personal'
],
'positions_p' => [
'application_form' => 'Formulario de solicitud',
'select_form' => 'Seleccione un formulario...',
'no_form_error' => "
No puedes crear una vacante sin ningún formulario con el que la gente solicite.
crear primero una forma, luego crear una vacante.
Se permite a un solo formulario tener múltiples vacantes, para que pueda adjuntar vacantes futuras a la misma forma si lo desea.
",
'new_pos' => 'NUEVA POSICIÓN',
'empty_pos_warning' => '¡No hay nada que ver aquí! Abre algunas vacantes primero. ¡Esto hará que los solicitantes se muevan! (esperemos)',
'manage_forms' => 'FORMAS DE APLICACIÓN DE MANAJE',
],
'settings' => [
'settings' => 'Ajustes',
'settings_header' => 'Ajustes de notificación',
'settings_p' => 'Cambiar las notificaciones que se envían aquí.',
'back_btn' => 'Volver al Tablero'
],
'staff' => [
'members' => 'Miembros del personal',
'active_sm' => 'Miembros del personal activos',
'm_listing' => 'Lista de miembros',
'f_name' => 'Nombre completo',
'rank' => 'Rango',
],
// ======================== APPLICATION RENDERING MESSAGES =========================
'application_r' => [
'appl_submit_warn' => '¿Está seguro de que desea enviar su solicitud? Por favor, revise cada una de sus respuestas cuidadosamente antes de hacerlo.',
'appl_submit_doublewarn' => 'Nota: ¡Las aplicaciones NO PUEDEN ser modificadas una vez que sean enviadas!',
'acceptsend' => 'Aceptar y enviar',
'review' => 'Revisión',
'applying_for' => 'Estás solicitando: :name',
'welcome' => [
'yrs_old' => 'Años viejos', // Context: "years old" as in: Tom is 24 years old
'line1' => 'Estamos contentos de que hayas decidido aplicar. Generalmente, las aplicaciones tardan 48 horas en ser procesadas y revisadas. Dependiendo de las circunstancias y del volumen de las solicitudes, puede recibir una respuesta en un plazo más corto.',
'line2' => 'Por favor, rellene el siguiente formulario. Mantenga todas las respuestas concisas y completas. Por favor, tenga en cuenta que el requisito de edad es al menos :agerqr.',
'line3' => 'Preguntar sobre su aplicación resultará en una denegación instantánea. Todo lo que necesita saber está aquí.'
],
'app_timeout' => 'Tu cuenta no está permitida para enviar otra solicitud. Por favor espere :days más días antes de intentar enviar una solicitud.'
],
'application_m' => [
'title' => 'Gestión de aplicaciones',
'all_apps' => 'Todas las aplicaciones',
'modal_confirm' => '¿Estás seguro?',
'really_delete' => '¿Realmente borrar esto?',
'outstanding_sm' => 'Pendiente',
'outstanding_apps' => 'Aplicaciones pendientes',
'outstanding_subm' => 'Pendiente (enviado)',
'interview_q' => 'Cola de entrevistas',
'interview_p' => 'Entrevista',
'interview_s' => 'Entrevista programada',
'finished_int' => 'Entrevistas finalizadas',
'schedule_int' => 'Programar entrevistas',
'p_review' => 'Revisión por pares',
'applicant' => 'Solicitante',
'interviewee' => 'Interesante',
'pending_int' => 'Entrevista pendiente',
'schedule' => 'Programar',
'view_interview_queue' => 'Ver Cola de Entrevista',
'view_approval_queue' => 'Ver cola de aprobación',
'view_outstanding_queue' => 'Ver cola pendiente',
'approved' => 'Aprobado',
'denied' => 'Denegado',
'unknown_stat' => 'Desconocido',
'consequence_irreversible' => 'IRVERSIBLE',
'delete_action_warning' => 'Esta acción es :consequence.',
'delete_explainer' => 'Comentarios, citas y cualquier voto adjunto a esta aplicación será eliminado también. Por favor, asegúrese de que esta aplicación realmente necesita ser eliminada.',
'all_apps_header' => 'Estás viendo todas las aplicaciones recibidas',
'all_apps_exp' => 'Aquí, usted tiene acceso rápido y fácil a todas las aplicaciones que el sistema haya recibido.',
'no_apps' => 'No hay aplicaciones aquí',
'no_apps_exp' => 'No hemos podido encontrar ninguna aplicación. ¿Quizás nadie ha aplicado todavía? Por favor, inténtalo de nuevo más tarde.',
'int_applications' => 'Aplicaciones',
'no_apps_pending_int' => 'No hay aplicaciones pendientes',
'no_apps_pending_int_exp' => 'No hay aplicaciones que hayan sido movidas hasta la etapa de entrevista. Por favor, compruebe la cola pendiente. aquí no hay aplicaciones que hayan sido movidas hasta la etapa de entrevista. Por favor revise la cola pendiente.',
'upcoming_int' => 'Mis próximas entrevistas',
'pending_schedule' => 'Horario pendiente',
'no_upcoming' => 'No hay entrevistas próximas',
'no_upcoming_exp' => 'Por favor, compruebe otras colas en el proceso de solicitud. Los solicitantes pueden haber sido entrevistados.',
'no_outstanding' => '¿Ves ninguna aplicación? Comprueba con un administrador para asegurarte de que hay puestos abiertos disponibles.',
'no_outstanding_exp' => 'La publicidad en foros relevantes para este fin también es una buena idea.',
'applicant_name' => 'Nombre del solicitante',
'application_date' => 'Fecha de la aplicación',
'no_pending' => 'No hay solicitudes pendientes',
'no_pending_exp' => 'Parece que todavía no se ha aplicado ninguna novedad. Compruebe las colas de entrevista y aprobación para las aplicaciones que podrían haber subido la escalera ahora.',
'voting_reminder' => [
'title' => 'Recordatorio de votación',
'line1' => 'Las solicitudes que obtengan más del 50% de votos positivos se aprueban automáticamente después de un día.',
'line2' => 'Por el contrario, las aplicaciones que no alcanzan este número se niegan automáticamente.',
'line3' => 'Tenga en cuenta que el sistema de votación puede ser anulado'
],
'no_pending_review' => 'No hay solicitudes pendientes de revisión',
'no_pending_review_exp' => '¡Revisa las demás colas para cualquier aplicación! Las solicitudes se mostrarán aquí tan pronto como se complete su entrevista. Podrás ver las notas de la reunión y votar en función de tus observaciones.',
],
// ============= PROFILE & USER MESSAGES ===============
'profile' => [
'title' => 'perfil de :name',
'profile' => 'Perfil',
'users' => 'Usuarios',
'account_banned' => 'Cuenta bloqueada',
'account_banned_exp' => 'Este usuario ha sido baneado por los moderadores.',
'ban_confirm' => 'Por favor, confirme que desea banear esta cuenta de usuario. Necesitará agregar una razón y fecha de caducidad para confirmarlo. Los bloqueos no se transfieren a redes de Minecraft conectadas (todavía).',
'leave_empty' => 'Dejar en blanco para un ban permanente',
'duration' => 'Duración',
'p_duration' => 'Duración de la purificación',
'p_duration_exp' => 'ej. Spamming',
'ban' => 'Banear',
'terminate_notice' => 'Estás a punto de terminar con un miembro del staff',
'terminate_notice_warning' => 'Terminar a un miembro del personal quitará sus privilegios en el sitio de administración del equipo y en la red.
Se les notificará su rescisión. Asegúrese de haber discutido esto con ellos primero.',
'terminate_notice_consequence' => 'ESTA PROPIEDAD ES IRVERSIBLE E IMMEDIAR',
'terminate_txt' => 'Terminar miembro del personal',
'delete_acc_warn' => 'ADVERTENCIA: ¡Esta es una acción potencialmente destructiva!',
'delete_acc_consequence' => 'La eliminación de la cuenta de un usuario es un proceso irreverible. Las aplicaciones, votos y contenido del perfil y del historial, así como cualquier información de identificación personal, serán borradas inmediatamente.',
'type_to_confirm' => 'Escriba para confirmar:',
'type_placeholder' => 'Por favor, escriba lo anterior',
'delete_acc' => 'Eliminar cuenta',
'edit_acc' => 'Editar cuenta',
'ban_acc' => 'Banear cuenta',
'unban_acc' => 'Desbanear cuenta',
'search_result' => 'Resultados de búsqueda',
'origin_cc' => 'País de origen',
'state_prov' => 'Estado/Provenza',
'district' => 'Distrito (si existe)',
'city' => 'Ciudad',
'zipcode' => 'Código postal',
'coords' => 'Coordenadas',
'european' => '¿Europeo?',
'isp' => 'ISP', // Internet service provider
'org' => 'Organización (si existe)',
'ctype' => 'Tipo C', // Internet Connection type
'timezone' => 'Timezone',
'noresults' => 'Esta consulta no devolvió resultados.',
'edituser' => 'Editar PII y Rol', // PII: Personally identifiable information
'edituser_consequence' => '¡Advertencia! ¡Este es un entorno sensible! ¡Cambiar esto podría tener consecuencias no intencionadas!',
'acc_management' => 'Gestión de cuentas (Admin)',
'discord_tag' => 'Etiqueta de Discord del Usuario: :discordTag',
'account_settings' => 'Ajustes de la cuenta',
'account_settings_personal' => 'Ajustes de mi cuenta',
'2fa_welcome' => '¡Nos alegra que hayas decidido aumentar la seguridad de tu cuenta!',
'supported_apps' => 'Aplicaciones soportadas que puedes instalar: ',
'scan_code' => 'Escanee el código :scannable con su aplicación preferida, y luego copie el código aquí.',
'otp' => 'Código de una vez',
'2fa_enable' => 'Habilitar 2FA',
'2fa_remove_consequence' => 'Eliminar la autenticación de dos factores reducirá la seguridad de su cuenta.',
'2fa_password_confirm' => 'Confirme su contraseña para continuar',
'2fa_password_confirm_exp' => 'Para evitar cambios no autorizados, siempre se requiere una contraseña para operaciones sensibles.',
'2fa_disable_consent' => '"Entiendo las posibles consecuencias de desactivar la autenticación de dos factores"',
'2fa_remove' => 'Eliminar 2FA',
'2fa_remove_extended' => 'Eliminar Autenticación de Doble Factor',
'2fa_send_code' => 'Enviar código 2FA',
'2fa_send_code_s' => 'Código 2FA (Ej. 41351)',
'security_lgotherdev' => 'Para su seguridad, necesitará volver a introducir su contraseña antes de cerrar la sesión de otros dispositivos. Si crees que tu cuenta se ha visto comprometida, por favor cambia tu contraseña? como así se desconectará automáticamente a cualquier otra persona que pueda usar su cuenta e impedirá que vuelva a iniciar sesión.',
'password_reenter' => 'Vuelva a introducir su contraseña',
'acc_security' => 'Seguridad de la cuenta',
'2fa' => 'Autenticación de dos factores',
'sessions' => 'Sesiones',
'contact_settings' => 'Configuración de Contacto (E-Mail)',
'change_password' => 'Cambiar contraseña',
'change_password_exp' => 'Cambie su contraseña aquí. Esto le cerrará de todas las sesiones existentes por su seguridad.',
'old_pass' => 'Contraseña antigua',
'forgot_pw' => '¿Olvidaste tu contraseña? Restablecer :link',
'new_pw' => 'Nueva contraseña',
'2fa_enable_success' => '¡Genial! 2FA está configurado correctamente para tu cuenta. Se preguntará un código cada vez que inicies sesión.',
'2fa_avail' => 'La autenticación de dos factores está disponible para su cuenta.',
'2fa_avail_exp' => ' Habilitar esta opción de seguridad aumenta en gran medida la seguridad de su cuenta en caso de que su contraseña sea robada.',
'session_manager' => 'Gestor de sesiones',
'terminate_others' => 'Terminar otras sesiones generalmente es una buena idea si su cuenta ha sido comprometida.',
'current_session' => 'Tu sesión actual: inicia sesión desde :ipAddress',
'flush_session' => 'Vaciar sesiones',
'personal_data_change' => '¿Necesitas cambiar los datos personales? Puedes hacerlo aquí.',
'current_email' => 'Dirección de email actual',
'new_email' => 'Nueva dirección de email',
'current_password' => 'Contraseña actual',
'security_nochangepw' => 'Por razones de seguridad, no puedes hacer cambios importantes en tu cuenta sin confirmar tu contraseña. También tendrás que verificar tu nuevo correo electrónico.',
'change_email' => 'Cambiar dirección de email',
'basic_info' => 'Información básica',
'fl_name' => 'Primer / Apellido',
'shortbio' => 'Bio corto',
'about_me' => 'Acerca de mí',
'pref_media' => 'Preferencias y Medios',
'avatar_source' => 'Recuperar avatar de: ',
'social_media' => 'Redes Sociales',
'github_user' => 'Github Username',
'twitter_user' => 'Usuario Twitter',
'insta_user' => 'Nombre de usuario de Instagram',
'discord_user' => 'Manejo de Discord',
'update_prfl' => 'Actualizar perfil'
],
// ==================== USER ACCOUNT MESSAGES (NON-PRIVILEGED) =====================
'user' => [
'app_process' => [
'title' => 'Proceso de aplicación',
'line1' => 'Por favor, espere hasta tres días para que su solicitud sea procesada. Su solicitud será revisada por cada miembro del equipo, y se moverá hacia arriba en etapas.',
'line2' => 'Si se ha programado una entrevista, tendrás que abrir tu solicitud aquí y confirmar la hora, la fecha y la ubicación asignada para ti.'
],
'account_standing' => 'Cuenta de pie',
'account_eligibility' => 'Tu cuenta es actualmente :elegibilidad para la solicitud',
'days_remaining_acc_alt' => 'A partir de hoy, quedan :days hasta que puedas enviar otra solicitud.',
'my_ongoingapps' => 'Mis aplicaciones en curso',
'submitted' => 'Enviado',
'peer_approval' => 'Aprobación por pares',
'peer_approval_q' => 'Cola de aprobación por pares',
'nothing_to_show' => 'Nada que mostrar',
'nothing_to_show_exp' => 'Actualmente no tiene ninguna solicitud que mostrar. Si usted es elegible, puede solicitar una vez al mes.',
'directory' => [
'itsyou' => '¡Es, tú!',
'title' => 'Directorio de usuario',
'directory' => 'Directorio'
]
],
'view_app' => [
'title' => 'Viendo aplicación',
'viewing_app' => 'Viendo aplicación de :user',
'cantvote' => 'Ya no puedes votar sobre esta solicitud.',
'no_notes' => 'Aún no hay notas. ¡Añade algunos!',
'deny_confirm' => '¿Está seguro de que desea denegar esta aplicación? Por favor, ten en cuenta que este usuario solo podrá aplicar 30 días después de su primera aplicación.',
'deny_confirm_consequence' => 'Esta acción no se puede deshacer.',
'deny_confirm_btn' => 'Confirmar: Denegar solicitante',
'form_updated_alert' => 'Si este formulario ha sido actualizado, los nuevos campos y las preguntas actualizadas no se mostrarán aquí!',
'context_info' => 'Información contextual',
'appl_ip' => 'Dirección IP solicitada',
'appl_for' => 'Solicitando para',
'currentstatus' => 'Estado actual',
'decisionmod' => 'Herramientas de decisión y moderación',
'denyapp' => 'Denegar solicitante',
'nextstage' => 'Mover a la siguiente etapa',
'appointment_desc' => 'Descripción de la cita',
'int_date_time' => 'Fecha y hora de la entrevista',
'choosedate' => 'Haga clic para elegir una fecha',
'appointment_loc' => 'Ubicación de la cita',
'pref_platform' => 'Seleccione su plataforma preferida',
'coming_soon_int' => 'Próximamente se incrustarán las videoconferencias internas, impulsadas por Jitsi Meet',
'scheduled_for' => 'Entrevista programada para:',
'platform' => 'Plataforma',
'finish_meeting' => 'Finalizar reunión',
'view_notes' => 'Ver notas de reunión',
'vote_app' => 'Votar en esta aplicación',
'vote_explainer' => [
'line1' => 'Si no estuvo presente durante esta reunión, puede ver el bloc de notas de la reunión compartida para ayudarle a tomar una decisión.',
'line2' => 'Puedes votar sobre tantas solicitudes como sea necesario; sin embargo, solo puedes votar una vez por solicitud.',
'line3' => 'Los votos no tienen peso basado en el rango, este sistema ha sido diseñado pensando en la equidad y la facilidad de uso.'
],
'vote_approve' => 'Votación: Aprobar solicitante',
'vote_deny' => 'Votación: Denegar solicitante',
'm_notes' => 'Notas de reunión',
'view_more' => 'Ver más aplicaciones',
'comments' => 'Comentarios',
'no_comments' => 'No hay comentarios aquí.',
'no_comments_exp' => '¡No hay comentarios aquí! Los comentarios sólo son visibles para los miembros del personal. ¡Sé el primero en compartir tus comentarios! Comentario puede ayudar en la toma de decisiones cuando llegue el momento de votar por una solicitud.',
'commenting_as' => 'Comentando como :username',
'max_chars' => 'caracteres máximos', // Context: A number is added before max characters
'post' => 'Publicar', // Context: Post as in post comment
]
// ==================== END OF MAIN I18N FILE ======================
];

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; Anterior',
'next' => 'Siguiente &raquo;',
];

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
| has failed, such as for an invalid token or invalid new password.
|
*/
'reset' => '¡Tu contraseña ha sido restablecida!',
'sent' => '¡Hemos enviado por correo electrónico tu enlace de restablecimiento de contraseña!',
'throttled' => 'Por favor, espere antes de reintentar.',
'token' => 'Este token de restablecimiento de contraseña no es válido.',
'user' => "No podemos encontrar un usuario con esa dirección de correo electrónico.",
];

View File

@@ -0,0 +1,151 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'El campo :attribute debe ser aceptado.',
'active_url' => ':attribute no es una URL válida.',
'after' => ':attribute debe ser una fecha posterior a :date.',
'after_or_equal' => ':attribute debe ser una fecha posterior o igual a :date.',
'alpha' => ':attribute sólo puede contener letras.',
'alpha_dash' => ':attribute sólo puede contener letras, números, guiones y guiones bajos.',
'alpha_num' => ':attribute sólo puede contener letras y números.',
'array' => 'El campo :attribute debe ser un array.',
'before' => ':attribute debe ser una fecha anterior a :date.',
'before_or_equal' => ':attribute debe ser una fecha anterior o igual a :date.',
'between' => [
'numeric' => ':attribute debe estar entre :min y :max.',
'file' => ':attribute debe estar entre :min y :max kilobytes.',
'string' => ':attribute debe tener entre :min y :max caracteres.',
'array' => ':attribute debe tener entre :min y :max elementos.',
],
'boolean' => 'El campo :attribute debe ser verdadero o falso.',
'confirmed' => 'El :attribute de confirmación no coincide.',
'date' => ':attribute no es una fecha válida.',
'date_equals' => ':attribute debe ser una fecha igual a :date.',
'date_format' => ':attribute no coincide con el formato :format.',
'different' => ':attribute y :other deben ser diferentes.',
'digits' => ':attribute debe tener :digits dígitos.',
'digits_between' => ':attribute debe tener entre :min y :max dígitos.',
'dimensions' => 'El campo :attribute tiene dimensiones de imagen inválidas.',
'distinct' => 'El campo :attribute tiene un valor duplicado.',
'email' => ':attribute debe ser una dirección de correo electrónico válida.',
'ends_with' => 'El campo :attribute debe terminar con uno de los siguientes: :values.',
'exists' => 'El :attribute seleccionado no es válido.',
'file' => ':attribute debe ser un archivo.',
'filled' => 'El campo :attribute debe tener un valor.',
'gt' => [
'numeric' => 'El campo :attribute debe ser mayor que :value.',
'file' => ':attribute debe ser mayor que :value kilobytes.',
'string' => ':attribute debe ser mayor que :value caracteres.',
'array' => 'El campo :attribute debe tener más de :value items.',
],
'gte' => [
'numeric' => 'El campo :attribute debe ser mayor o igual a :value.',
'file' => ':attribute debe ser mayor o igual a :value kilobytes.',
'string' => 'El campo :attribute debe ser mayor o igual a :value caracteres.',
'array' => ':attribute debe tener :value o más.',
],
'image' => 'El campo :attribute debe ser una imagen.',
'in' => 'El :attribute seleccionado no es válido.',
'in_array' => 'El campo :attribute no existe en :other.',
'integer' => 'El campo :attribute debe ser un entero.',
'ip' => ':attribute debe ser una dirección IP válida.',
'ipv4' => ':attribute debe ser una dirección IPv4 válida.',
'ipv6' => ':attribute debe ser una dirección IPv6 válida.',
'json' => ':attribute debe ser una cadena JSON válida.',
'lt' => [
'numeric' => 'El campo :attribute debe ser menor que :value.',
'file' => ':attribute debe ser menor que :value kilobytes.',
'string' => ':attribute debe tener menos de :value caracteres.',
'array' => ':attribute debe tener menos de :value elementos.',
],
'lte' => [
'numeric' => 'El campo :attribute debe ser menor o igual a :value.',
'file' => ':attribute debe ser menor o igual a :value kilobytes.',
'string' => ':attribute debe ser menor o igual a :value caracteres.',
'array' => 'El campo :attribute no debe tener más de :value items.',
],
'max' => [
'numeric' => ':attribute no puede ser mayor que :max.',
'file' => ':attribute no puede ser mayor que :max kilobytes.',
'string' => ':attribute no puede ser mayor que :max caracteres.',
'array' => ':attribute no puede tener más de :max elementos.',
],
'mimes' => 'El campo :attribute debe ser un archivo de tipo: :values.',
'mimetypes' => 'El campo :attribute debe ser un archivo de tipo: :values.',
'min' => [
'numeric' => ':attribute debe ser al menos :min.',
'file' => ':attribute debe tener al menos :min kilobytes.',
'string' => ':attribute debe tener al menos :min caracteres.',
'array' => ':attribute debe tener al menos :min items.',
],
'not_in' => 'El :attribute seleccionado no es válido.',
'not_regex' => 'El formato :attribute no es válido.',
'numeric' => ':attribute debe ser un número.',
'password' => 'La contraseña es incorrecta.',
'present' => 'El campo :attribute debe estar presente.',
'regex' => 'El formato :attribute no es válido.',
'required' => 'El campo :attribute es obligatorio.',
'required_if' => 'El campo :attribute es obligatorio cuando :other es :value.',
'required_unless' => 'El campo :attribute es obligatorio a menos que :other esté en :values.',
'required_with' => 'El campo :attribute es obligatorio cuando :values está presente.',
'required_with_all' => 'El campo :attribute es obligatorio cuando :values están presentes.',
'required_without' => 'El campo :attribute es obligatorio cuando :values no está presente.',
'required_without_all' => 'El campo :attribute es obligatorio cuando ninguno de :values están presentes.',
'same' => ':attribute y :other deben coincidir.',
'size' => [
'numeric' => 'El campo :attribute debe ser :size.',
'file' => ':attribute debe ser :size kilobytes.',
'string' => 'El campo :attribute debe tener :size caracteres.',
'array' => 'El campo :attribute debe contener :size items.',
],
'starts_with' => 'El campo :attribute debe comenzar con uno de los siguientes: :values.',
'string' => 'El campo :attribute debe ser una cadena.',
'timezone' => ':attribute debe ser una zona válida.',
'unique' => 'El atributo :attribute ya está en uso.',
'uploaded' => 'El atributo :attribute no se pudo cargar.',
'url' => 'El formato :attribute no es válido.',
'uuid' => ':attribute debe ser un UUID válido.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'mensaje personalizado',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap our attribute placeholder
| with something more reader friendly such as "E-Mail Address" instead
| of "email". This simply helps us make our message more expressive.
|
*/
'attributes' => [],
];

View File

@@ -0,0 +1,19 @@
<?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.',
'throttle' => 'Trop de tentatives de connexion. Veuillez réessayer dans :seconds secondes.',
];

View File

@@ -0,0 +1,612 @@
<?php
/*
* -- Information for translators | READ BEFORE TRANSLATING ANYTHING ---
* In this file, only translate messages to the right, in this fashion:
* 'something' => 'translate-me'
* Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon.
* Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as:
* auth.php, pagination.php, passwords.php, and validation.php.
* It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote
*
* Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters.
* If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly.
*
* Thank you for translating!
*/
return [
// ============== MENU TRANSLATIONS ======================
'menu' => [
'my_apps' => 'Mes applications',
'current_apps' => 'Applications actuelles',
'profile_settings' => 'Paramètres du profil',
'hiring_man' => 'Gestion de l\'embauche',
'all_forms' => 'Tous les formulaires',
'app_settings' => 'Paramètres de l\'application',
'global_app_settings' => 'Paramètres globaux de l\'application',
'system_logs' => 'Journaux système'
],
// ============== REUSABLE, GENERIC STRINGS ===============
'reusable' => [
'created_at' => 'Créé le',
'updated_at' => 'Mis à jour le',
'actions' => 'Actions',
'delete' => 'Supprimez',
'status' => 'Statut',
'view' => 'Voir',
'view_c' => 'Voir les détails',
'no_access' => 'Accès à l\'application refusé',
'validation_err' => 'Erreur de validation !',
'description' => 'Libellé',
'join_date' => 'Date d\'inscription',
'my_acc' => 'Mon Compte',
'confirm' => 'Veuillez confirmer',
'confirm_plain' => 'Valider',
'confirm_click' => 'Cliquez pour confirmer',
'date' => 'Date',
'datetime' => 'Heure & Date',
'location' => 'Localisation',
'none_yet' => 'Pas encore',
'reason' => 'Raison',
'days' => 'Jours',
'weeks' => 'Semaines',
'months' => 'Mois',
'years' => 'Années',
'yes' => 'Oui',
'no' => 'Non',
'roles' => 'Rôles',
'member_since' => 'Membre depuis :date',
'lookup' => 'Recherche :ipAddress',
'abt' => 'À propos de',
'acc' => 'Compte client',
'settings' => 'Réglages',
'profile' => 'Mon profil',
'code' => 'Code',
'here' => 'ici',
'auth_req' => 'Veuillez vous authentifier',
'eligible' => 'Éligible',
'ineligible' => 'Ineligible',
'schedule' => 'Planifier',
'schedule_action' => 'Planifier un rendez-vous',
'platform' => 'Plateforme',
'notepad' => 'Bloc-notes partagé', // Context: The shared notepad that appears when votes are needed,
'appointment_info' => 'Informations sur le rendez-vous',
'ip_info' => 'Information d\'adresse IP pour'
],
// ============== HOMEPAGE MESSAGES ======================
'home' => 'Domicile',
'homepagetxt' => 'Page d\'accueil',
'login' => 'Se connecter',
'logout' => 'Se déconnecter',
'register' => 'S\'inscrire',
'dashboard' => 'Tableau de bord',
'back' => 'Revenir en arrière',
'homepage_welcome' => 'Bienvenue dans notre centre de gestion d\'équipe!',
'homepage_explainer_line1' => 'Ici, vous pouvez poser votre candidature pour les postes ouverts du personnel, consulter le statut de votre application et gérer votre profil.',
'homepage_explainer_line2' => 'Inscrivez-vous avec l\'e-mail pour continuer.',
'footer_copy' => 'Tous droits réservés',
'global_error' => 'Une erreur s\'est produite',
'global_success' => 'Réussi !',
'txt_learn_more' => 'En savoir plus',
'opening_nodetails' => 'Il ne semble pas y avoir de détails',
'opening_nodetails_exp' => 'Cette ouverture n\'a pas encore de détails.',
'details_m_title' => 'Détails d\'ouverture',
'open_positions' => 'Positions ouvertes',
'last_updated' => 'Dernière mise à jour',
'open_position_count' => '{1} Il y a :count position ouverte !|[2,*] Il y a :count positions ouvertes !',
'ineligible_days_remaining' => 'Inéligible (:days) jour(s) restant(s)',
'txt_apply' => 'Appliquer', // Context: Apply as in applying for a "job", e.g. registering for a job
'txt_application' => 'Application',
'application_closed' => 'Applications fermées',
'application_closed_intro' => 'Bonjour !',
'application_closed_intro_line2' => '
Nous n\'embauchons pas de nouveaux membres du personnel pour le moment. Si vous souhaitez postuler, consultez notre canal d\'annonce
de Discord pour savoir quand un nouveau poste s\'ouvre.
Notre cycle d\'application dure généralement deux semaines, Donc si vous voyez cela, c\'est parce qu\'il est terminé, et un nouveau va bientôt commencer.
',
'where_work' => 'Où vous travaillerez',
'join_team' => 'Rejoignez l\'équipe',
'join_team_cta' => 'Rejoignez l\'équipe dès aujourd\'hui et aidez le réseau à se développer et à prospérer!',
'contact_cta' => 'Des questions ? Laissez un message !',
'contact_disclaimer' => '*Ce n\'est pas un formulaire de demande. Toutes les demandes envoyées ici seront ignorées.',
'contactlabel_name' => 'Nom',
'contactlabel_email' => 'Courriel',
'contactlabel_subject' => 'Sujet (ex. Suggestion de site)',
'contactlabel_send' => 'Envoyer',
// ======================== AUTHENTICATION MESSAGES ===========================
'2fa_txt' => 'Authentification à deux facteurs',
'2fa_sronly' => 'Code secret à deux facteurs (vous pouvez le trouver sur Google Authenticator)',
'2fa_lostcode' => 'Vous ne connaissez pas le code?',
'2fa_cancel_login' => 'Annuler la connexion (déconnexion)',
'terms' => 'Conditions d\'utilisation',
'ppolicy' => 'Politique de confidentialité',
'signin_cta' => 'Connectez-vous à votre compte',
'password' => 'Mot de passe',
'remember_me' => 'Se souvenir de moi',
'forgot_pw' => 'Mot de passe oublié ?',
'register_cta' => 'S\'inscrire ici',
'no_acc' => 'Vous n\'avez pas de compte ?',
'register_acc' => 'Créer un nouveau compte',
'pwsec' => [
'line1' => 'Sécurité de base du mot de passe',
'line2' => 'Pour votre sécurité, nous mettons en œuvre des politiques strictes en matière de mots de passe. Il est également conseillé de laisser votre gestionnaire de mots de passe ou votre navigateur générer et enregistrer des mots de passe pour vous (si c\'est un appareil privé).',
'line3' => 'Les mots de passe doivent être une combinaison de : ',
'line4' => 'Un minimum de 10 caractères ;',
'line5' => 'Au moins 3 caractères majuscules ;',
'line6' => 'Au moins 3 chiffres ;',
'line7' => 'Un nombre quelconque de caractères spéciaux.'
],
'sronly_confirmpassword' => 'Confirmer le mot de passe', // hint: sronly stands for screen-reader only
'sronly_mcusername' => 'Nom d\'utilisateur Minecraft (Premium)',
'have_account' => 'Vous avez un compte chez nous ?',
'login_here' => 'Connectez-vous ici',
'register_txt' => 'Inscription',
// ===================== DASHBOARD & COMPONENT MESSAGES ===========================
'modal_close' => 'Fermer',
'component_nopermission' => 'Nous sommes désolés, mais vous n\'avez pas la permission d\'accéder à cette page Web.',
'component_accessdenied' => 'Accès refusé',
'component_contact' => 'Veuillez contacter votre administrateur si vous pensez que c\'était une erreur.',
'welcome_back' => 'Bienvenue,',
'eligible' => 'Éligible',
'ineligible' => 'Ineligible',
'eligibility_status' => 'Statut d\'éligibilité de votre candidature actuelle: :badgeStatus',
'ongoing_apps' => 'Applications en cours',
'denied_apps' => 'Applications refusées',
'users_staff' => 'Nombre total d\'utilisateurs + personnel',
'new_apps' => 'Nouvelles applications',
'v_backlog' => 'Historique des votes',
'ranks' => 'Rangs disponibles',
'open' => 'Ouvert',
'closed' => 'Fermé',
'upcoming' => 'Vos entrevues à venir',
'soon' => 'Bientôt disponible',
//=================== ADMINISTRATION MESSAGES (for all administration pages) ===============
'adm' => 'Administration',
'devtools' => 'Outils de développement',
'devtools_evn' => 'Gestion des événements',
'devoptions' => 'Options du développeur',
'forceeval' => 'Veuillez choisir une application pour forcer la réévaluation',
'appid' => 'ID de l\'application',
'no_valid_app' => 'Il n\'y a pas d\'applications valides',
'choose_app' => 'Choisir une application',
'dispatch_event' => 'Événement d\'expédition maintenant',
'devtools_warn' => 'N\'utilisez pas ces options si vous ne savez pas ce que vous faites, même si vous avez accès à cette page.',
'warn' => 'Avertissement',
'override_votes' => 'Remplacer l\'évaluation du vote',
'artisan_evaluate' => 'Artisan: Évaluer les votes maintenant', // Tip: Artisan is a program name, therefore not translatable
'devtools_info' => 'Ce panneau peut également être utilisé pour remplacer complètement le système de vote dans des scénarios de blocage',
'forms' => 'Formulaires',
'positions' => 'Positions', // Context: Positions as in job opening
'edit_form' => 'Modifier le formulaire',
'edt' => 'Editeur',
'edit' => 'Editer',
'edt_action' => 'Édition en cours',
'txtbox' => 'Boîte de texte',
'multiline' => 'Réponse à plusieurs lignes',
'checkbox' => 'Case à cocher',
'field_type' => 'Choisissez un type de champ',
'save_exit' => 'Enregistrer & Quitter',
'new_field' => 'Nouveau champ',
'vacancy_edit' => 'Éditeur de vacance',
'new_vacancy' => 'Nouvelle vacance',
'form_consistency' => 'Pour des raisons de cohérence, les champs grisés ne peuvent pas être modifiés.',
'vacancy' => [
'add' => 'Ajouter un poste vacant',
'name' => 'Nom de la vacance',
'description' => 'Description de la vacance',
'details' => 'Détails de la vacance',
'markdown' => 'Markdown pris en charge',
'no_details' => 'Pas encore de détails... Ajoutez-en !',
'permission_group' => 'Groupe de Permissions',
'permission_group_tooltip' => 'Le groupe de permissions de votre gestionnaire de permissions serveur/réseau. Compatible avec Luckperms et PEX.',
'discord_roleid' => 'Identifiant du rôle Discord',
'discord_roleid_tooltip' => 'Discord: Allez dans les paramètres de votre compte > Apparence -> Avancé et activez le mode développeur. Dans l\'onglet Rôles de votre serveur, faites un clic droit sur n\'importe quel rôle pour copier son ID.',
'current_form' => 'Formulaire actuel (inéditable)',
'remaining_slots' => 'Emplacements restants',
'free_slots' => 'Emplacements libres',
'free_slots_tooltip' => 'Combien de soumissions avant que la vacance de poste ne cesse d\'accepter de nouveaux candidats?',
'save' => 'Enregistrer les modifications',
'cancel' => 'Abandonner',
'close_vacancy' => 'Fermer la position',
'description_tooltip' => 'Ajoutez des éléments tels que les exigences d\'entrée, les possibilités de classement et les rôles, et tout ce que vous jugez nécessaire',
''
],
'form' => 'Forme',
'form_builder' => [
'builder' => 'Constructeur de formulaire',
'builder_name' => 'Outil de gestion des formulaires de demande',
'name_form' => 'Nommez votre formulaire...',
'save_form' => 'Enregistrer le formulaire',
],
'form_preview' => [
'preview' => 'Aperçu',
'title' => 'Aperçu du formulaire de demande',
'looks' => 'Voici à quoi ressemble votre formulaire aux candidats',
'f_info' => 'Vous pouvez le modifier et ajouter plus de champs plus tard.',
''
],
'forms_p' => [
'available_forms' => 'Formulaires disponibles',
'form_title' => 'Titre du formulaire',
'empty_noforms' => 'Rien à voir ici ! Veuillez d\'abord ajouter quelques formulaires.',
'new_form' => 'NOUVEAU FORM'
],
'players' => [
'reg_players' => 'Joueurs enregistrés',
'reg_players_staff' => 'Voir les joueurs inscrits (Groupe de demandeurs)',
'total_banned' => 'Nombre total de joueurs bannis',
'search' => 'Rechercher des joueurs',
'f_p_search' => 'Recherche complète / partielle par email',
'p_disclaimer' => 'Remarque : Cette liste ne comprend que les joueurs inscrits sur le portail de gestion d\'équipe. Dans une version ultérieure, tous les joueurs du réseau seront affichés ici.',
'listing' => 'Liste des joueurs',
'reg_date' => 'Date d\'inscription',
'ign' => 'IG', // Context: Short for In-Game Name
'banned' => 'Banni',
'active' => 'Actif',
'no_reg' => 'Il n\'y a aucun joueur enregistré!',
'no_reg_exp' => "
Les joueurs inscrits sont ceux qui n'ont pas de rôle de personnel dans l'application de gestion d'équipe.
Il peut y avoir d'autres utilisateurs enregistrés sur la plate-forme, mais ils ne seront pas affichés ici.
",
'see_staff' => 'Voir les membres du personnel'
],
'positions_p' => [
'application_form' => 'Formulaire de demande',
'select_form' => 'Sélectionnez un formulaire...',
'no_form_error' => "
Vous ne pouvez pas créer de poste vacant sans aucun formulaire avec lequel des personnes pourraient postuler.
créez d'abord un formulaire, puis créez un poste vacant.
Une seule forme est autorisée à avoir plusieurs postes vacants, pour que vous puissiez joindre les postes vacants futurs au même formulaire si vous le souhaitez.
",
'new_pos' => 'NOUVELLE POSITION',
'empty_pos_warning' => 'Rien à voir ici ! Ouvrez d\'abord quelques postes vacants. Cela fera couler les candidats ! (espérons-le)',
'manage_forms' => 'GÉRER LES FORMES D\'APPLICATION',
],
'settings' => [
'settings' => 'Réglages',
'settings_header' => 'Paramètres de notification',
'settings_p' => 'Modifier les notifications envoyées ici.',
'back_btn' => 'Retour au tableau de bord'
],
'staff' => [
'members' => 'Membres du personnel',
'active_sm' => 'Membres du personnel actif',
'm_listing' => 'Liste des membres',
'f_name' => 'Nom complet',
'rank' => 'Rang',
],
// ======================== APPLICATION RENDERING MESSAGES =========================
'application_r' => [
'appl_submit_warn' => 'Êtes-vous sûr de vouloir soumettre votre candidature ? Veuillez examiner chacune de vos réponses avec soin avant de le faire.',
'appl_submit_doublewarn' => 'Veuillez noter que les demandes ne peuvent être modifiées une fois qu\'elles ont été envoyées !',
'acceptsend' => 'Accepter et envoyer',
'review' => 'Évaluer',
'applying_for' => 'Vous postulez pour : :name',
'welcome' => [
'yrs_old' => 'Années', // Context: "years old" as in: Tom is 24 years old
'line1' => 'Nous sommes heureux que vous ayez décidé de postuler. En général, les demandes prennent 48 heures pour être traitées et examinées. Selon les circonstances et le volume des demandes, vous pouvez recevoir une réponse dans un délai plus court.',
'line2' => 'Veuillez remplir le formulaire ci-dessous. Gardez toutes les réponses concises et complètes. Veuillez garder à l\'esprit que l\'âge requis est d\'au moins :agerqr.',
'line3' => 'Demander à propos de votre application entraînera un refus instantané. Tout ce que vous devez savoir est ici.'
],
'app_timeout' => 'Votre compte n\'est pas autorisé à soumettre une autre demande. Veuillez attendre :days plus de jours avant d\'essayer de soumettre une demande.'
],
'application_m' => [
'title' => 'Gestion des applications',
'all_apps' => 'Toutes les applications',
'modal_confirm' => 'Êtes-vous sûr(e) ?',
'really_delete' => 'Voulez-vous vraiment supprimer ceci?',
'outstanding_sm' => 'En attente',
'outstanding_apps' => 'Applications en cours',
'outstanding_subm' => 'En attente (Envoyé)',
'interview_q' => 'File d\'attente des entretiens',
'interview_p' => 'Interview',
'interview_s' => 'Interview programmée',
'finished_int' => 'Interviews terminées',
'schedule_int' => 'Planifier les entrevues',
'p_review' => 'Examen par les pairs',
'applicant' => 'Demandeur',
'interviewee' => 'Interlocuteur',
'pending_int' => 'Interview en attente',
'schedule' => 'Planifier',
'view_interview_queue' => 'Voir la file d\'attente des entretiens',
'view_approval_queue' => 'Voir la file dattente dapprobation',
'view_outstanding_queue' => 'Voir la file d\'attente en suspens',
'approved' => 'Approuvé',
'denied' => 'Refusé',
'unknown_stat' => 'Inconnu',
'consequence_irreversible' => 'IRRÉVERSIBLE',
'delete_action_warning' => 'Cette action est la :conséquence.',
'delete_explainer' => 'Les commentaires, les rendez-vous et tous les votes attachés à cette application seront également supprimés. Veuillez vous assurer que cette application doit vraiment être supprimée.',
'all_apps_header' => 'Vous regardez toutes les demandes reçues',
'all_apps_exp' => 'Ici, vous avez un accès rapide et facile à toutes les applications jamais reçues par le système.',
'no_apps' => 'Il n\'y a aucune application ici',
'no_apps_exp' => 'Nous n\'avons trouvé aucune application. Peut-être que personne n\'a encore postulé ? Veuillez réessayer plus tard.',
'int_applications' => 'Applications',
'no_apps_pending_int' => 'Aucune application en attente d\'entretien',
'no_apps_pending_int_exp' => 'Il n\'y a aucune application qui ait été déplacée jusqu\'à l\'étape d\'entrevue. Veuillez vérifier la file d\'attente en cours. ici ne sont pas des applications qui ont été déplacées jusqu\'à l\'étape d\'entrevue. Veuillez vérifier la file d\'attente en cours.',
'upcoming_int' => 'Mes entrevues à venir',
'pending_schedule' => 'Horaire en attente',
'no_upcoming' => 'Il n\'y a pas d\'entrevue à venir',
'no_upcoming_exp' => 'Veuillez vérifier les autres files d\'attente dans le processus de candidature. Les candidats ici ont peut-être déjà été interviewés.',
'no_outstanding' => 'Vous ne voyez aucune candidature ? Vérifiez avec un administrateur pour vous assurer qu\'il y a des postes ouverts disponibles.',
'no_outstanding_exp' => 'La publicité sur des forums pertinents conçus à cet effet est également une bonne idée.',
'applicant_name' => 'Nom du candidat',
'application_date' => 'Date de la candidature',
'no_pending' => 'Il n\'y a aucune demande en attente',
'no_pending_exp' => 'Il semble que personne de nouveau n\'a encore postulé. Consultez les files dattente dentrevue et dapprobation pour les applications qui auraient pu faire monter léchelle maintenant.',
'voting_reminder' => [
'title' => 'Rappel de vote',
'line1' => 'Les candidatures qui gagnent plus de 50% de votes positifs sont automatiquement approuvées après une journée.',
'line2' => 'Inversement, les applications qui n\'atteignent pas ce numéro sont automatiquement refusées.',
'line3' => 'Veuillez noter que le système de vote peut être outrepassé'
],
'no_pending_review' => 'Il n\'y a pas de demandes en attente de révision',
'no_pending_review_exp' => 'Consultez les autres files dattente pour toutes les candidatures! Les candidatures seront affichées ici dès que leur entrevue sera terminée. Vous pourrez consulter les notes de la réunion et voter en fonction de vos observations.',
],
// ============= PROFILE & USER MESSAGES ===============
'profile' => [
'title' => 'Profil de :name',
'profile' => 'Profil',
'users' => 'Utilisateurs',
'account_banned' => 'Compte banni',
'account_banned_exp' => 'Cet utilisateur a été banni par les modérateurs.',
'ban_confirm' => 'Veuillez confirmer que vous souhaitez bannir ce compte utilisateur. Vous devrez ajouter une raison et une date d\'expiration pour confirmer cela. Les bannissements ne sont pas encore transférés vers les réseaux Minecraft connectés.',
'leave_empty' => 'Laisser vide pour un bannissement permanent',
'duration' => 'Durée',
'p_duration' => 'Durée de la sanction',
'p_duration_exp' => 'par exemple Spamming',
'ban' => 'Bannir',
'terminate_notice' => 'Vous êtes sur le point de terminer un membre du personnel',
'terminate_notice_warning' => 'Terminer un membre du personnel supprimera ses privilèges sur le site de gestion d\'équipe et le réseau.
Ils seront informés de leur résiliation. Assurez-vous d\'en avoir discuté avec eux en premier.',
'terminate_notice_consequence' => 'CE PROCESS EST IRRÉVERSIBLE ET IMMÉDIÉ',
'terminate_txt' => 'Terminer le membre du personnel',
'delete_acc_warn' => 'AVERTISSEMENT : C\'est une action potentiellement destructrice !',
'delete_acc_consequence' => 'La suppression du compte d\'un utilisateur est un processus irréversible. Les candidatures historiques et actuelles, les votes et le contenu du profil, ainsi que toute information personnellement identifiable seront immédiatement effacés.',
'type_to_confirm' => 'Tapez pour confirmer:',
'type_placeholder' => 'Veuillez saisir ce qui précède',
'delete_acc' => 'Supprimer le compte',
'edit_acc' => 'Modifier le compte',
'ban_acc' => 'Bannir le compte',
'unban_acc' => 'Débannir le compte',
'search_result' => 'Résultats de recherche',
'origin_cc' => 'Pays d\'origine',
'state_prov' => 'État/Province',
'district' => 'District (le cas échéant)',
'city' => 'Ville',
'zipcode' => 'Code postal',
'coords' => 'Coordonnées',
'european' => 'Européen ?',
'isp' => 'FAI', // Internet service provider
'org' => 'Organisation (le cas échéant)',
'ctype' => 'C. Type', // Internet Connection type
'timezone' => 'Timezone',
'noresults' => 'Cette requête n\'a retourné aucun résultat.',
'edituser' => 'Modifier les PII et Rôles', // PII: Personally identifiable information
'edituser_consequence' => 'Attention ! Ceci est un paramètre sensible ! Changer ceci pourrait avoir des conséquences involontaires !',
'acc_management' => 'Gestion du compte (Admin)',
'discord_tag' => 'Étiquette Discord de l\'utilisateur : :discordTag',
'account_settings' => 'Paramètres du compte',
'account_settings_personal' => 'Paramètres de mon compte',
'2fa_welcome' => 'Nous sommes heureux que vous ayez décidé d\'augmenter la sécurité de votre compte !',
'supported_apps' => 'Applications supportées que vous pouvez installer: ',
'scan_code' => 'Scannez le code :scannable avec votre application préférée, puis copiez le code ici.',
'otp' => 'Code unique',
'2fa_enable' => 'Activer l\'A2F',
'2fa_remove_consequence' => 'La suppression de l\'authentification à deux facteurs réduira la sécurité de votre compte.',
'2fa_password_confirm' => 'Confirmez votre mot de passe pour continuer',
'2fa_password_confirm_exp' => 'Pour éviter toute modification non autorisée, un mot de passe est toujours requis pour les opérations sensibles.',
'2fa_disable_consent' => '"Je comprends les conséquences possibles de la désactivation de l\'authentification à deux facteurs"',
'2fa_remove' => 'Supprimer 2FA',
'2fa_remove_extended' => 'Supprimer l\'authentification à deux facteurs',
'2fa_send_code' => 'Envoyer le code 2FA',
'2fa_send_code_s' => 'Code 2FA (ex. 41351)',
'security_lgotherdev' => 'Pour votre sécurité, vous devrez saisir à nouveau votre mot de passe avant de vous déconnecter d\'autres appareils. Si vous pensez que votre compte a été compromis, veuillez changer votre mot de passe à la place, car cela déconnectera automatiquement toute autre personne qui pourrait utiliser votre compte et les empêchera de se reconnecter.',
'password_reenter' => 'Entrez à nouveau votre mot de passe',
'acc_security' => 'Sécurité du compte',
'2fa' => 'Authentification en deux étapes',
'sessions' => 'Sessions',
'contact_settings' => 'Paramètres de contact (E-Mail)',
'change_password' => 'Changer le mot de passe',
'change_password_exp' => 'Changez votre mot de passe ici. Cela vous déconnectera de toutes les sessions existantes pour votre sécurité.',
'old_pass' => 'Ancien mot de passe',
'forgot_pw' => 'Vous avez oublié votre mot de passe ? Réinitialisez-le :link',
'new_pw' => 'Nouveau mot de passe',
'2fa_enable_success' => 'Hourra ! 2FA est configuré correctement pour votre compte. Un code sera demandé chaque fois que vous vous connectez.',
'2fa_avail' => 'L\'authentification à deux facteurs est disponible pour votre compte.',
'2fa_avail_exp' => ' Activer cette option de sécurité augmente considérablement la sécurité de votre compte en cas de vol de votre mot de passe.',
'session_manager' => 'Gestionnaire de session',
'terminate_others' => 'Terminer d\'autres sessions est généralement une bonne idée si votre compte a été compromis.',
'current_session' => 'Votre session actuelle: connectée depuis :ipAddress',
'flush_session' => 'Vider les sessions',
'personal_data_change' => 'Vous avez besoin de changer vos données personnelles ? Vous pouvez le faire ici.',
'current_email' => 'Adresse e-mail actuelle',
'new_email' => 'Nouvelle adresse e-mail',
'current_password' => 'Mot de passe actuel',
'security_nochangepw' => 'Pour des raisons de sécurité, vous ne pouvez pas effectuer de modifications importantes de votre compte sans confirmer votre mot de passe. Vous devrez également vérifier votre nouvel e-mail.',
'change_email' => 'Changer l\'adresse e-mail',
'basic_info' => 'Informations de base',
'fl_name' => 'Prénom / Nom',
'shortbio' => 'Courte Bio',
'about_me' => 'À propos de moi',
'pref_media' => 'Préférences & Médias',
'avatar_source' => 'Récupérer l\'avatar depuis: ',
'social_media' => 'Réseaux sociaux',
'github_user' => 'Github Username',
'twitter_user' => 'Nom d\'utilisateur Twitter',
'insta_user' => 'Nom d\'utilisateur Instagram',
'discord_user' => 'Handle Discord',
'update_prfl' => 'Mettre à jour le profil'
],
// ==================== USER ACCOUNT MESSAGES (NON-PRIVILEGED) =====================
'user' => [
'app_process' => [
'title' => 'Processus de candidature',
'line1' => 'Veuillez prévoir jusqu\'à trois jours pour que votre demande soit traitée. Votre candidature sera examinée par chaque membre de l\'équipe et passera par étapes.',
'line2' => 'Si une entrevue est programmée, vous devrez ouvrir votre candidature ici et confirmer l\'heure, la date et le lieu qui vous sont attribués.'
],
'account_standing' => 'Compte en cours',
'account_eligibility' => 'Votre compte est actuellement :éligibilité pour la demande',
'days_remaining_acc_alt' => 'À partir d\'aujourd\'hui, il reste :days jusqu\'à ce que vous soyez autorisé à soumettre une autre demande.',
'my_ongoingapps' => 'Mes applications en cours',
'submitted' => 'Soumis',
'peer_approval' => 'Approbation par les pairs',
'peer_approval_q' => 'File d\'attente d\'approbation par les pairs',
'nothing_to_show' => 'Rien à afficher',
'nothing_to_show_exp' => 'Vous n\'avez actuellement aucune demande à afficher. Si vous êtes admissible, vous pouvez postuler une fois par mois.',
'directory' => [
'itsyou' => 'C\'est vous !',
'title' => 'Répertoire utilisateur',
'directory' => 'Répertoire'
]
],
'view_app' => [
'title' => 'Visualisation de l\'application',
'viewing_app' => 'Visualisation de l\'application :user',
'cantvote' => 'Vous ne pouvez plus voter sur cette application.',
'no_notes' => 'Il n\'y a pas encore de notes. Ajoutez-en !',
'deny_confirm' => 'Êtes-vous sûr de vouloir refuser cette application ? Veuillez garder à l\'esprit que cet utilisateur ne sera autorisé à appliquer 30 jours après sa première application.',
'deny_confirm_consequence' => 'Cette action ne peut être annulée.',
'deny_confirm_btn' => 'Confirmation : Refuser le candidat',
'form_updated_alert' => 'Si ce formulaire a été mis à jour, de nouveaux champs et des questions mises à jour n\'apparaîtront pas ici!',
'context_info' => 'Informations contextuelles',
'appl_ip' => 'Adresse IP du candidat',
'appl_for' => 'Candidature pour',
'currentstatus' => 'Statut actuel',
'decisionmod' => 'Outils de décision et de modération',
'denyapp' => 'Refuser le candidat',
'nextstage' => 'Passer à l\'étape suivante',
'appointment_desc' => 'Description du rendez-vous',
'int_date_time' => 'Date et heure de l\'entrevue',
'choosedate' => 'Cliquer pour choisir une date',
'appointment_loc' => 'Lieu du rendez-vous',
'pref_platform' => 'Sélectionnez votre plateforme préférée',
'coming_soon_int' => 'La vidéoconférence intégrée à lintérieur de la maison arrive bientôt, propulsée par Jitsi Meet',
'scheduled_for' => 'Interview programmée pour:',
'platform' => 'Plateforme',
'finish_meeting' => 'Terminer la réunion',
'view_notes' => 'Voir les notes de la réunion',
'vote_app' => 'Voter pour cette candidature',
'vote_explainer' => [
'line1' => 'Si vous n\'étiez pas présent pendant cette réunion, vous pouvez voir le bloc-notes de réunion partagé pour vous aider à prendre une décision.',
'line2' => 'Vous pouvez voter sur autant de candidatures que nécessaire. Cependant, vous ne pouvez voter qu\'une seule fois par candidature.',
'line3' => 'Les votes ne portent aucun poids basé sur le rang. Ce système a été conçu avec équité et facilité d\'utilisation.'
],
'vote_approve' => 'Vote: Approuver le candidat',
'vote_deny' => 'Vote: Refuser le candidat',
'm_notes' => 'Notes de réunion',
'view_more' => 'Voir plus d\'applications',
'comments' => 'Commentaires',
'no_comments' => 'Il n\'y a aucun commentaire ici.',
'no_comments_exp' => 'Il n\'y a aucun commentaire ici ! Les commentaires ne sont visibles que pour les membres du personnel. Soyez le premier à partager vos commentaires! Commenter peut aider à prendre des décisions quand vient le temps de voter pour une demande.',
'commenting_as' => 'Commenter en tant que :username',
'max_chars' => 'nombre maximum de caractères', // Context: A number is added before max characters
'post' => 'Poster', // Context: Post as in post comment
]
// ==================== END OF MAIN I18N FILE ======================
];

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;',
];

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
| has failed, such as for an invalid token or invalid new password.
|
*/
'reset' => 'Votre mot de passe a été réinitialisé !',
'sent' => 'Nous avons envoyé un e-mail pour réinitialiser votre 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 pouvons pas trouver un utilisateur avec cette adresse e-mail.",
];

View File

@@ -0,0 +1,151 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'L\'attribut :attribute doit être accepté.',
'active_url' => 'Le champ :attribute n\'est pas une URL valide.',
'after' => 'Le champ :attribute doit être une date après :date.',
'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale à :date.',
'alpha' => 'Le champ :attribute ne peut contenir que des lettres.',
'alpha_dash' => ':attribute ne peut contenir que des lettres, des chiffres, des tirets et des tirets bas.',
'alpha_num' => 'Le champ :attribute ne peut contenir que des lettres et des chiffres.',
'array' => ':attribute doit être un tableau.',
'before' => 'Le champ :attribute doit être une date avant :date.',
'before_or_equal' => ':attribute doit être une date antérieure ou égale à :date.',
'between' => [
'numeric' => 'Le champ :attribute doit être entre :min et :max.',
'file' => 'Le champ :attribute doit être compris entre :min et :max kilo-octets.',
'string' => 'Le champ :attribute doit contenir entre :min et :max caractères.',
'array' => 'Le champ :attribute doit avoir entre :min et :max éléments.',
],
'boolean' => 'Le champ :attribute doit être vrai ou faux.',
'confirmed' => 'La confirmation de l\'attribut :attribute ne correspond pas.',
'date' => 'Le champ :attribute n\'est pas une date valide.',
'date_equals' => 'Le champ :attribute doit être une date égale à :date.',
'date_format' => 'Le champ :attribute ne correspond pas au format :format.',
'different' => ':attribute et :other doivent être différents.',
'digits' => ':attribute doit être de :digits chiffres.',
'digits_between' => 'Le champ :attribute doit contenir entre :min et :max chiffres.',
'dimensions' => ':attribute a des dimensions d\'image non valides.',
'distinct' => 'Le champ :attribute a une valeur en double.',
'email' => 'Le champ :attribute doit être une adresse e-mail valide.',
'ends_with' => ':attribute doit se terminer par un des :values suivantes.',
'exists' => 'Le champ :attribute sélectionné est invalide.',
'file' => 'Le champ :attribute doit être un fichier.',
'filled' => 'Le champ :attribute doit avoir une valeur.',
'gt' => [
'numeric' => 'Le champ :attribute doit être supérieur à :value.',
'file' => ':attribute doit être plus grand que :value kilo-octets.',
'string' => 'Le champ :attribute doit être plus grand que :value caractères.',
'array' => 'Le champ :attribute doit avoir plus de :value éléments.',
],
'gte' => [
'numeric' => 'Le champ :attribute doit être supérieur ou égal à :value.',
'file' => ':attribute doit être supérieur ou égal à :value kilo-octets.',
'string' => 'Le champ :attribute doit être supérieur ou égal à :value caractères.',
'array' => 'L\'attribut :attribute doit avoir :value éléments ou plus.',
],
'image' => 'Le champ :attribute doit être une image.',
'in' => 'Le champ :attribute sélectionné est invalide.',
'in_array' => 'Le champ :attribute n\'existe pas dans :other.',
'integer' => ':attribute doit être un nombre 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.',
'lt' => [
'numeric' => 'Le champ :attribute doit être inférieur à :value.',
'file' => ':attribute doit être inférieur à :value kilo-octets.',
'string' => 'Le champ :attribute doit être inférieur à :value caractères.',
'array' => 'Le champ :attribute doit avoir moins de :value éléments.',
],
'lte' => [
'numeric' => 'Le champ :attribute doit être inférieur ou égal à :value.',
'file' => ':attribute doit être inférieur ou égal à :value kilo-octets.',
'string' => 'Le champ :attribute doit être inférieur ou égal à :value caractères.',
'array' => 'Le champ :attribute ne doit pas avoir plus de :value éléments.',
],
'max' => [
'numeric' => 'Le champ :attribute ne peut pas être plus grand que :max.',
'file' => ':attribute ne doit pas être plus grand que :max kilo-octets.',
'string' => 'Le champ :attribute ne doit pas être plus grand que :max caractères.',
'array' => ':attribute ne peut pas avoir plus de :max éléments.',
],
'mimes' => ':attribute doit être un fichier de type: :values.',
'mimetypes' => ':attribute doit être un fichier de type: :values.',
'min' => [
'numeric' => 'Le champ :attribute doit être d\'au moins :min.',
'file' => 'Le champ :attribute doit être d\'au moins :min kilo-octets.',
'string' => 'Le champ :attribute doit contenir au moins :min caractères.',
'array' => 'Le champ :attribute doit avoir au moins :min éléments.',
],
'not_in' => 'Le champ :attribute sélectionné est invalide.',
'not_regex' => 'Le format de l\'attribut :attribute est invalide.',
'numeric' => 'Le champ :attribute doit être un nombre.',
'password' => 'Le mot de passe est incorrect.',
'present' => 'Le champ :attribute doit être présent.',
'regex' => 'Le format de l\'attribut :attribute est invalide.',
'required' => 'Le champ :attribute est requis.',
'required_if' => 'Le champ :attribute est requis lorsque :other est :value.',
'required_unless' => 'Le champ :attribute est requis sauf si :other est en :values.',
'required_with' => 'Le champ :attribute est requis lorsque :values est présent.',
'required_with_all' => 'Le champ :attribute est requis lorsque :values sont présentes.',
'required_without' => 'Le champ :attribute est requis lorsque :values n\'est pas présent.',
'required_without_all' => 'Le champ :attribute est requis quand aucun des :values n\'est présent.',
'same' => ':attribute et :other doivent correspondre.',
'size' => [
'numeric' => 'Le champ :attribute doit être :size.',
'file' => ':attribute doit être de :size kilo-octets.',
'string' => 'Le champ :attribute doit être de :size caractères.',
'array' => ':attribute doit contenir :size éléments.',
],
'starts_with' => ':attribute doit commencer par l\'un des :values suivants.',
'string' => 'Le champ :attribute doit être une chaîne.',
'timezone' => 'Le champ :attribute doit être une zone valide.',
'unique' => 'Le champ :attribute a déjà été pris.',
'uploaded' => 'L\'attribut :attribute n\'a pas pu être envoyé.',
'url' => 'Le format de l\'attribut :attribute est invalide.',
'uuid' => ':attribute doit être un UUID valide.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'message personnalisé',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap our attribute placeholder
| with something more reader friendly such as "E-Mail Address" instead
| of "email". This simply helps us make our message more expressive.
|
*/
'attributes' => [],
];

View File

@@ -0,0 +1,19 @@
<?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' => 'Estas credenciais não coincidem com os nossos registos.',
'throttle' => 'Demasiadas tentativas de acesso. Tente novamente em :seconds segundos.',
];

View File

@@ -0,0 +1,612 @@
<?php
/*
* -- Information for translators | READ BEFORE TRANSLATING ANYTHING ---
* In this file, only translate messages to the right, in this fashion:
* 'something' => 'translate-me'
* Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon.
* Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as:
* auth.php, pagination.php, passwords.php, and validation.php.
* It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote
*
* Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters.
* If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly.
*
* Thank you for translating!
*/
return [
// ============== MENU TRANSLATIONS ======================
'menu' => [
'my_apps' => 'As minhas Candidaturas',
'current_apps' => 'Candidaturas Atuais',
'profile_settings' => 'Configurações do Perfil',
'hiring_man' => 'Gestão de Contratação',
'all_forms' => 'Todos os Formulários',
'app_settings' => 'Configurações da App',
'global_app_settings' => 'Configurações globais do aplicativo',
'system_logs' => 'Registos do Sistema'
],
// ============== REUSABLE, GENERIC STRINGS ===============
'reusable' => [
'created_at' => 'Data de Criação',
'updated_at' => 'Atualizado em',
'actions' => 'Ações',
'delete' => 'Apagar',
'status' => 'Estado',
'view' => 'Ver',
'view_c' => 'Ver Detalhes',
'no_access' => 'Acesso Negado à Aplicação',
'validation_err' => 'Erro de validação!',
'description' => 'Descrição',
'join_date' => 'Data de inscrição',
'my_acc' => 'Minha Conta',
'confirm' => 'Por favor confirme',
'confirm_plain' => 'Confirmar',
'confirm_click' => 'Clique para confirmar',
'date' => 'Data',
'datetime' => 'Hora & Data',
'location' => 'Local',
'none_yet' => 'Nenhum ainda',
'reason' => 'Motivo',
'days' => 'Dias',
'weeks' => 'Semanas',
'months' => 'Meses',
'years' => 'Anos',
'yes' => 'Sim',
'no' => 'Não',
'roles' => 'Funções',
'member_since' => 'Membro desde :date',
'lookup' => 'Pesquisar :ipAddress',
'abt' => 'Sobre',
'acc' => 'Conta',
'settings' => 'Definições',
'profile' => 'Meu perfil',
'code' => 'código',
'here' => 'aqui',
'auth_req' => 'Por favor autentique-se',
'eligible' => 'Qualificado',
'ineligible' => 'Não elegível',
'schedule' => 'Agendar',
'schedule_action' => 'Marcar um Compromisso',
'platform' => 'Plataforma',
'notepad' => 'Bloco Notas Partilhado', // Context: The shared notepad that appears when votes are needed,
'appointment_info' => 'Informação da Marcação',
'ip_info' => 'Informação de Endereço IP para'
],
// ============== HOMEPAGE MESSAGES ======================
'home' => 'Início',
'homepagetxt' => 'Página Inicial',
'login' => 'Iniciar sessão',
'logout' => 'Terminar sessão',
'register' => 'Inscreva-se',
'dashboard' => 'Painel de controlo',
'back' => 'Retroceder',
'homepage_welcome' => 'Bem-vindo ao nosso centro de gestão de equipas!',
'homepage_explainer_line1' => 'Aqui, você pode candidatar-se a cargos abertos, ver o estado da sua candidatura, e gerir o seu perfil.',
'homepage_explainer_line2' => 'Registe-se com o E-mail para continuar.',
'footer_copy' => 'Todos os direitos reservados',
'global_error' => 'Ocorreu um erro',
'global_success' => 'Sucesso!',
'txt_learn_more' => 'Mais informações',
'opening_nodetails' => 'Parecem não haver detalhes',
'opening_nodetails_exp' => 'Esta candidatura ainda não tem detalhes.',
'details_m_title' => 'Detalhes da Candidatura',
'open_positions' => 'Vagas Abertas',
'last_updated' => 'Última atualização',
'open_position_count' => '{1} Há :count vaga aberta!|[2,*] Há :count vagas abertas!',
'ineligible_days_remaining' => 'Não elegível (:days) dia(s) restantes',
'txt_apply' => 'Candidatar-se', // Context: Apply as in applying for a "job", e.g. registering for a job
'txt_application' => 'Candidatura',
'application_closed' => 'Candidaturas Fechadas',
'application_closed_intro' => 'Olá!',
'application_closed_intro_line2' => '
Atualmente não estamos contratando nenhum novo membro da equipa no momento. Se você quiser se candidatar, confira o canal de anúncios
do Discord para saber quando abre uma nova vaga.
Nosso ciclo de candidaturas geralmente dura duas semanas, então se você está vendo isso, é porque ela terminou, e um novo começará em breve.
',
'where_work' => 'Onde você trabalhará',
'join_team' => 'Junte-se à equipa',
'join_team_cta' => 'Junte-se hoje à equipa e ajude a rede a crescer e prosperar!',
'contact_cta' => 'Alguma pergunta? Deixe uma mensagem!',
'contact_disclaimer' => '*Este não é um formulário de candidatura. Qualquer candidatura enviada aqui será ignorada.',
'contactlabel_name' => 'Nome',
'contactlabel_email' => 'Endereço E-mail',
'contactlabel_subject' => 'Assunto (ex. sugestão do site)',
'contactlabel_send' => 'Enviar',
// ======================== AUTHENTICATION MESSAGES ===========================
'2fa_txt' => 'Autenticação de dois Fatores',
'2fa_sronly' => 'Código secreto de dois fatores (Poderá encontrar isso no Google Authenticator)',
'2fa_lostcode' => 'Não sabe o código?',
'2fa_cancel_login' => 'Cancelar login (sair)',
'terms' => 'Condições de Utilização',
'ppolicy' => 'Política de privacidade',
'signin_cta' => 'Entrar na sua conta',
'password' => 'Palavra-passe',
'remember_me' => 'Lembrar-me',
'forgot_pw' => 'Esqueceu-se da palavra-passe?',
'register_cta' => 'Registe-se aqui',
'no_acc' => 'Não tem uma conta?',
'register_acc' => 'Registar nova conta',
'pwsec' => [
'line1' => 'Verificar a segurança da password',
'line2' => 'Para sua segurança, implementamos políticas de palavra-passe rigorosas. Também é aconselhável deixar o seu gestor de senhas ou o navegador gerar e salvar senhas para você (se for um dispositivo privado).',
'line3' => 'As senhas devem ser uma combinação de: ',
'line4' => 'Um mínimo de 10 caracteres;',
'line5' => 'Pelo menos 3 caracteres maiúsculos;',
'line6' => 'Pelo menos 3 números;',
'line7' => 'Números e caracteres especiais.'
],
'sronly_confirmpassword' => 'Confirmar palavra-passe', // hint: sronly stands for screen-reader only
'sronly_mcusername' => 'Utilizador do Minecraft (Premium)',
'have_account' => 'Já tem uma conta?',
'login_here' => 'Inicie sessão aqui',
'register_txt' => 'Registe-se',
// ===================== DASHBOARD & COMPONENT MESSAGES ===========================
'modal_close' => 'Fechar',
'component_nopermission' => 'Não tem permissões para aceder a este recurso.',
'component_accessdenied' => 'Acesso negado',
'component_contact' => 'Por favor, entre em contacto com seu administrador se acredita que isso foi um erro.',
'welcome_back' => 'Bem-vindo de volta,',
'eligible' => 'Qualificado',
'ineligible' => 'Não elegível',
'eligibility_status' => 'Seu atual estado de elegibilidade: :badgeStatus',
'ongoing_apps' => 'Candidaturas a decorrer',
'denied_apps' => 'Candidaturas negadas',
'users_staff' => 'Utilizadores totais + Equipa',
'new_apps' => 'Novas Candidaturas',
'v_backlog' => 'Votos em atraso',
'ranks' => 'Cargos disponíveis',
'open' => 'Abrir',
'closed' => 'Fechada',
'upcoming' => 'As suas próximas entrevistas',
'soon' => 'Disponível em breve',
//=================== ADMINISTRATION MESSAGES (for all administration pages) ===============
'adm' => 'Administração',
'devtools' => 'Ferramentas de Programador',
'devtools_evn' => 'Gestão de Eventos',
'devoptions' => 'Opções de Desenvolvedor',
'forceeval' => 'Por favor, escolha uma candidatura para forçar reavaliação',
'appid' => 'ID da candidatura',
'no_valid_app' => 'Não há candidaturas válidas',
'choose_app' => 'Escolha uma candidatura',
'dispatch_event' => 'Enviar evento agora',
'devtools_warn' => 'Não use estas opções se você não sabe o que está fazendo, mesmo se tiver acesso a esta página.',
'warn' => 'Atenção',
'override_votes' => 'Substituir Avaliação do Voto',
'artisan_evaluate' => 'Artisan: Avaliar Votos Agora', // Tip: Artisan is a program name, therefore not translatable
'devtools_info' => 'Este painel também pode ser usado para substituir completamente o sistema de votação em cenários de impasse',
'forms' => 'Formulários',
'positions' => 'Vagas', // Context: Positions as in job opening
'edit_form' => 'Editar Formulário',
'edt' => 'Editor',
'edit' => 'Editar',
'edt_action' => 'Editando',
'txtbox' => 'Caixa de texto',
'multiline' => 'Múltipla resposta',
'checkbox' => 'Caixa de verificação',
'field_type' => 'Selecione um Tipo de Campo',
'save_exit' => 'Guardar e Sair',
'new_field' => 'Novo Campo',
'vacancy_edit' => 'Editor de vagas',
'new_vacancy' => 'Nova vaga',
'form_consistency' => 'Para fins de consistência, campos acinzentados não podem ser editados.',
'vacancy' => [
'add' => 'Adicionar vaga',
'name' => 'Nome da vaga',
'description' => 'Descrição da vaga',
'details' => 'Detalhes da vaga',
'markdown' => 'Markdown suportado',
'no_details' => 'Sem detalhes ainda... Adicione alguns!',
'permission_group' => 'Grupos de Permissão',
'permission_group_tooltip' => 'O grupo de permissões do seu servidor/rede. Compatível com a Luckperms e PEX.',
'discord_roleid' => 'ID do cargo Discord',
'discord_roleid_tooltip' => 'Discord Desktop: Vá para as configurações da sua conta > Aparência -> Avançado e ative o Modo Desenvolvedor. Na página de cargos do seu servidor, clique com o botão direito de qualquer cargo para copiar o ID.',
'current_form' => 'Formulário atual (não editável)',
'remaining_slots' => 'Espaços restantes',
'free_slots' => 'Espaços livres',
'free_slots_tooltip' => 'Quantas submissões antes que a vaga pare de aceitar novos candidatos?',
'save' => 'Guardar Alterações',
'cancel' => 'Cancelar',
'close_vacancy' => 'Fechar vaga',
'description_tooltip' => 'Adicione coisas como requisitos de admissão, responsabilidades e funções, e qualquer outra coisa que você ache necessária',
''
],
'form' => 'Formulário',
'form_builder' => [
'builder' => 'Construtor de Formulários',
'builder_name' => 'Ferramenta de Gestão de Formulários de Candidatura',
'name_form' => 'Nomeie o seu formulário...',
'save_form' => 'Guardar Formulário',
],
'form_preview' => [
'preview' => 'Pré-visualizar',
'title' => 'Pré-visualização do Formulário de Candidatura',
'looks' => 'É assim que o seu formulário aparece para os candidatos',
'f_info' => 'Você pode editá-lo e adicionar mais campos posteriormente.',
''
],
'forms_p' => [
'available_forms' => 'Formulários disponíveis',
'form_title' => 'Título do Formulário',
'empty_noforms' => 'Nada para ver aqui! Por favor, crie alguns formulários primeiro.',
'new_form' => 'NOVO FORMULÁRIO'
],
'players' => [
'reg_players' => 'Jogadores registados',
'reg_players_staff' => 'Ver Jogadores Registados (Grupo de Candidatos)',
'total_banned' => 'Total de jogadores banidos',
'search' => 'Procurar jogadores',
'f_p_search' => 'Pesquisa de e-mail completa/parcial',
'p_disclaimer' => 'Atenção: Esta lista inclui apenas jogadores registados no portal de gestão de equipa. Numa versão futura, todos os jogadores da rede serão mostrados aqui.',
'listing' => 'Lista de jogadores',
'reg_date' => 'Data de registo',
'ign' => 'IGN', // Context: Short for In-Game Name
'banned' => 'Banido',
'active' => 'Ativo',
'no_reg' => 'Não há jogadores inscritos!',
'no_reg_exp' => "
Jogadores registados são aqueles que não possuem uma função administrativa no aplicativo de gestão de equipa.
Pode haver outros utilizadores registados na plataforma, mas eles não serão exibidos aqui.
",
'see_staff' => 'Ver Membros da Equipa'
],
'positions_p' => [
'application_form' => 'Formulário de Candidatura',
'select_form' => 'Selecione um formulário...',
'no_form_error' => "
Não pode criar uma vaga sem qualquer formulário cujos quais as pessoas se poderiam candidatar.
Crie um formulário primeiro, e depois crie uma vaga.
Um único formulário pode ter várias vagas, para que possa anexar futuras vagas ao mesmo formulário, se quiser.
",
'new_pos' => 'NOVA VAGA',
'empty_pos_warning' => 'Nada para ver aqui! Abra algumas vagas primeiro. Isso fará os candidatos aparecerem! (esperançoso)',
'manage_forms' => 'GERIR FORMULÁRIOS DE CANDIDATURA',
],
'settings' => [
'settings' => 'Definições',
'settings_header' => 'Configuração das notificações',
'settings_p' => 'Altere quais notificações são enviadas aqui.',
'back_btn' => 'Voltar ao painel'
],
'staff' => [
'members' => 'Membros da Equipa',
'active_sm' => 'Membros Ativos da Equipa',
'm_listing' => 'Lista de Membros',
'f_name' => 'Nome completo',
'rank' => 'Cargo',
],
// ======================== APPLICATION RENDERING MESSAGES =========================
'application_r' => [
'appl_submit_warn' => 'Tem certeza de que deseja enviar a sua candidatura? Por favor, analise cada uma das suas respostas cuidadosamente antes de enviá-la.',
'appl_submit_doublewarn' => 'Por favor, note: Candidaturas NÃO PODEM serem modificadas assim que forem enviadas!',
'acceptsend' => 'Aceitar e Enviar',
'review' => 'Rever',
'applying_for' => 'Você está se candidatando para: :name',
'welcome' => [
'yrs_old' => 'Anos de idade', // Context: "years old" as in: Tom is 24 years old
'line1' => 'Estamos felizes que você decidiu se candidatar. Geralmente, as candidaturas levam 48 horas para serem processadas e revisadas. Dependendo das circunstâncias e do volume de candidaturas, você poderá receber uma resposta em um período mais curto de tempo.',
'line2' => 'Por favor, preencha o formulário abaixo. Mantenha todas as respostas concisas e completas. Lembre-se de que o requisito de idade é de pelo menos :agerqr.',
'line3' => 'Perguntar sobre a sua candidatura resultará em ser negado instantaneamente. Tudo o que você precisa saber está aqui.'
],
'app_timeout' => 'A sua conta não pode enviar outra candidatura. Por favor, espere :days mais dias antes de tentar enviar uma candidatura.'
],
'application_m' => [
'title' => 'Gestão de Candidaturas',
'all_apps' => 'Todas as Candidaturas',
'modal_confirm' => 'Tem a certeza?',
'really_delete' => 'Deseja realmente excluir isto?',
'outstanding_sm' => 'Pendente',
'outstanding_apps' => 'Candidaturas Pendendes',
'outstanding_subm' => 'Pendente (Enviado)',
'interview_q' => 'Fila de entrevistas',
'interview_p' => 'Entrevista',
'interview_s' => 'Entrevista Agendada',
'finished_int' => 'Entrevistas concluídas',
'schedule_int' => 'Agendar Entrevistas',
'p_review' => 'Revisão por pares',
'applicant' => 'Candidato',
'interviewee' => 'Entrevistado',
'pending_int' => 'Entrevista Pendente',
'schedule' => 'Agendar',
'view_interview_queue' => 'Ver fila de entrevistas',
'view_approval_queue' => 'Ver Fila de Aprovação por Pares',
'view_outstanding_queue' => 'Visualizar fila de pendentes',
'approved' => 'Aprovado',
'denied' => 'Recusado',
'unknown_stat' => 'Desconhecido',
'consequence_irreversible' => 'IRREVERSÍVEL',
'delete_action_warning' => 'Esta ação é :consequence.',
'delete_explainer' => 'Comentários, compromissos e quaisquer votos anexados a esta candidatura também serão excluídos. Por favor, certifique-se de que esta candidatura realmente precisa ser excluída.',
'all_apps_header' => 'Você está a ver todas as candidaturas recebidas',
'all_apps_exp' => 'Aqui, você tem acesso rápido e fácil a todas as candidaturas recebidos pelo sistema.',
'no_apps' => 'Não há candidaturas aqui',
'no_apps_exp' => 'Não conseguimos encontrar nenhuma candidatura. Talvez ninguém se inscreveu ainda? Por favor, tente novamente mais tarde.',
'int_applications' => 'Candidaturas',
'no_apps_pending_int' => 'Nenhuma candidatura pendente de entrevista',
'no_apps_pending_int_exp' => 'Não há aplicativos que tenham sido movidos para a fase de Entrevistas. Verifique a fila pendente. Aqui não há aplicativos que tenham sido movidos para a fase de Entrevistas. Por favor, verifique a fila pendente.',
'upcoming_int' => 'Minhas próximas entrevistas',
'pending_schedule' => 'Agendamento pendente',
'no_upcoming' => 'Não há próximas entrevistas',
'no_upcoming_exp' => 'Por favor, verifique outras filas no processo de candidatura. Os candidatos aqui podem já ter sido entrevistados.',
'no_outstanding' => 'Não está vendo candidaturas? Verifique com um administrador para certificar-se de que existem posições abertas.',
'no_outstanding_exp' => 'É também uma boa ideia a publicidade em fóruns relevantes para este fim.',
'applicant_name' => 'Nome do Candidato',
'application_date' => 'Data de Inscrição',
'no_pending' => 'Não existem candidaturas pendente',
'no_pending_exp' => 'Parece que ninguém novo se candidatou ainda. Confira as filas de entrevista e aprovação para candidaturas que podem ter movido fases até agora.',
'voting_reminder' => [
'title' => 'Lembrete de votação',
'line1' => 'Candidaturas que obtêm mais de 50% dos votos positivos são automaticamente aprovadas após um dia.',
'line2' => 'Inversamente, candidaturas que não atingem esse número são automaticamente negadas.',
'line3' => 'Por favor, lembre-se que o sistema de votação pode ser substituído'
],
'no_pending_review' => 'Não há candidaturas pendentes de entrevista',
'no_pending_review_exp' => 'Verifique as outras filas para ver mais candidaturas! As candidaturas serão mostradas aqui assim que as suas entrevistas forem concluídas. Poderá ver notas da reunião e votar baseando-se nas suas observações.',
],
// ============= PROFILE & USER MESSAGES ===============
'profile' => [
'title' => 'Perfil de :name',
'profile' => 'Perfil',
'users' => 'Utilizadores',
'account_banned' => 'Conta banida',
'account_banned_exp' => 'Este utilizador foi banido pelos moderadores.',
'ban_confirm' => 'Por favor, confirme que você deseja banir este utilizador. Você precisará adicionar um motivo e uma data de expiração para confirmar isto. Banimentos não transferem para redes de Minecraft conectadas (ainda).',
'leave_empty' => 'Deixe em branco para um banimento permanente',
'duration' => 'Duração',
'p_duration' => 'Duração da penalização',
'p_duration_exp' => 'por exemplo, spam',
'ban' => 'Banir',
'terminate_notice' => 'Você está prestes a excluir um membro da equipa',
'terminate_notice_warning' => 'Excluir um membro da equipa irá remover os respetivos privilégios do site de gestão da equipa e da Rede.
Eles serão notificados sobre o cancelamento. Certifique-se de que já tenha discutido isto com eles.',
'terminate_notice_consequence' => 'ESTE PROCESSO É IRREVERSÍVEL E IMEDIATO',
'terminate_txt' => 'Apagar membro da equipa',
'delete_acc_warn' => 'AVISO: Esta é uma ação potencialmente destrutiva!',
'delete_acc_consequence' => 'Excluir uma conta de utilizador é um processo irreversível. Candidaturas históricas e atuais, votos e conteúdo do perfil, bem como qualquer informação que seja pessoalmente identificável serão imediatamente apagados.',
'type_to_confirm' => 'Digite para confirmar:',
'type_placeholder' => 'Digite o valor acima',
'delete_acc' => 'Apagar conta',
'edit_acc' => 'Editar Conta',
'ban_acc' => 'Banir conta',
'unban_acc' => 'Desbloquar conta',
'search_result' => 'Resultados da pesquisa',
'origin_cc' => 'País de origem',
'state_prov' => 'Estado/Província',
'district' => 'Distrito (se houver)',
'city' => 'Cidade',
'zipcode' => 'Código postal',
'coords' => 'Coordenadas',
'european' => 'Europeu?',
'isp' => 'Provedor', // Internet service provider
'org' => 'Organização (se houver)',
'ctype' => 'T. de Ligação', // Internet Connection type
'timezone' => 'Fuso horário',
'noresults' => 'A sua pesquisa não retornou resultados.',
'edituser' => 'Editar dados pessoais e cargos', // PII: Personally identifiable information
'edituser_consequence' => 'Aviso! Esta é uma configuração sensível! Mudar isto pode ter consequências não intencionais!',
'acc_management' => 'Gestão de conta (administrador)',
'discord_tag' => 'Tag do Discord: :discordTag',
'account_settings' => 'Definições de Conta',
'account_settings_personal' => 'Minhas Configurações de Conta',
'2fa_welcome' => 'Estamos felizes por você ter decidido aumentar a segurança de sua conta!',
'supported_apps' => 'Aplicativos suportados que você pode instalar: ',
'scan_code' => 'Leia o código :scannable com o seu aplicativo preferido e copie o código aqui.',
'otp' => 'Código de uso único',
'2fa_enable' => 'Ativar 2FA',
'2fa_remove_consequence' => 'Remover a autenticação de dois fatores reduzirá a segurança de sua conta.',
'2fa_password_confirm' => 'Confirme a sua palavra-passe para continuar',
'2fa_password_confirm_exp' => 'Para impedir alterações não autorizadas, uma senha é sempre necessária para operações confidenciais.',
'2fa_disable_consent' => '"Eu compreendo as possíveis consequências de desativar a autenticação de dois fatores"',
'2fa_remove' => 'Remover 2FA',
'2fa_remove_extended' => 'Desativar autenticação em dois passos',
'2fa_send_code' => 'Enviar código 2FA',
'2fa_send_code_s' => 'Código de autenticação (ex. 41351)',
'security_lgotherdev' => 'Para sua segurança, você precisará re-introduzir a sua senha antes de desconectar outros dispositivos. Se você acredita que sua conta foi comprometida, altere sua senha em vez disso, já que isso desconectará automaticamente qualquer pessoa que poderá estar usando sua conta e impedir que faça login novamente.',
'password_reenter' => 'Repita a sua palavra-passe',
'acc_security' => 'Segurança da conta',
'2fa' => 'Autenticação de dois Fatores',
'sessions' => 'Sessões',
'contact_settings' => 'Configurações de Contacto (E-Mail)',
'change_password' => 'Alterar palavra-passe',
'change_password_exp' => 'Altere sua senha aqui. Isto desconectará você de todas as sessões existentes para sua segurança.',
'old_pass' => 'Palavra-passe antiga',
'forgot_pw' => 'Esqueceu sua senha? Reponha-a :link',
'new_pw' => 'Nova palavra-passe',
'2fa_enable_success' => 'Fixe! A 2FA está configurada corretamente para a sua conta. Será solicitado um código toda vez que você fizer login.',
'2fa_avail' => 'A autenticação de dois fatores está disponível para sua conta.',
'2fa_avail_exp' => ' Habilitar esta opção de segurança aumenta consideravelmente a segurança da sua conta caso a sua senha seja roubada.',
'session_manager' => 'Gestor de Sessões',
'terminate_others' => 'Terminar outras sessões é geralmente uma boa ideia se sua conta foi comprometida.',
'current_session' => 'Sua sessão atual: conectado a partir de :ipAddress',
'flush_session' => 'Limpar sessões',
'personal_data_change' => 'Precisa alterar dados pessoais? Você pode fazer isso aqui.',
'current_email' => 'Endereço de e-mail atual',
'new_email' => 'Novo endereço de e-mail',
'current_password' => 'Palavra-passe Atual',
'security_nochangepw' => 'Por motivos de segurança, você não pode fazer alterações de conta importantes sem confirmar a sua senha. Você também precisará confirmar o seu novo e-mail.',
'change_email' => 'Alterar Endereço de Email',
'basic_info' => 'Informações básicas',
'fl_name' => 'Primeiro e último nome',
'shortbio' => 'Pequena biografia',
'about_me' => 'Sobre mim',
'pref_media' => 'Preferências & Média',
'avatar_source' => 'Obter o avatar de: ',
'social_media' => 'Redes Sociais',
'github_user' => 'Utilizador GitHub',
'twitter_user' => 'Utilizador no Twitter',
'insta_user' => 'Nome de Utilizador do Instagram',
'discord_user' => '"Handle" do Discord',
'update_prfl' => 'Atualizar Perfil'
],
// ==================== USER ACCOUNT MESSAGES (NON-PRIVILEGED) =====================
'user' => [
'app_process' => [
'title' => 'Processo de Candidatura',
'line1' => 'Por favor, aguarde pelo menos três dias para que sua candidatura seja processada. A inscrição será revisada por todos os membros da equipa, e será promovida em fases.',
'line2' => 'Se uma entrevista estiver programada, você precisará abrir o aplicativo aqui e confirmar a hora, data e local atribuídos para você.'
],
'account_standing' => 'Estado da Conta',
'account_eligibility' => 'Sua conta está atualmente :eligibility para candidatura',
'days_remaining_acc_alt' => 'A partir de hoje, há :days restantes até que você tenha permissão para enviar outra candidatura.',
'my_ongoingapps' => 'Minhas Candidaturas em Andamento',
'submitted' => 'Enviado',
'peer_approval' => 'Aprovação em Pares',
'peer_approval_q' => 'Fila de Aprovação por Pares',
'nothing_to_show' => 'Nada a exibir',
'nothing_to_show_exp' => 'Você atualmente não tem nenhuma candidatura para exibir. Se você é elegível, você pode-se candidatar uma vez por mês.',
'directory' => [
'itsyou' => 'É você!',
'title' => 'Diretório de Utilizadores',
'directory' => 'Diretório'
]
],
'view_app' => [
'title' => 'Vendo candidatura',
'viewing_app' => 'Visualizando a candidatura de :user',
'cantvote' => 'Não pode votar nesta candidatura novamente.',
'no_notes' => 'Ainda não há notas. Adicione algumas!',
'deny_confirm' => 'Tem certeza que deseja negar esta candidatura? Por favor, tenha em mente que este utilizador só terá permissão para se candidatar 30 dias após sua primeira candidatura.',
'deny_confirm_consequence' => 'Esta ação não pode ser desfeita.',
'deny_confirm_btn' => 'Confirmar: Negar candidato',
'form_updated_alert' => 'Se este formulário foi atualizado, novos campos e perguntas atualizadas não aparecerão aqui!',
'context_info' => 'Informações contextuais',
'appl_ip' => 'Endereço IP do candidato',
'appl_for' => 'Candidatando-se a',
'currentstatus' => 'Estado atual',
'decisionmod' => 'Ferramentas de Decisão & Moderação',
'denyapp' => 'Recusar candidato',
'nextstage' => 'Mover para a próxima fase',
'appointment_desc' => 'Descrição do agendamento',
'int_date_time' => 'Data e Hora da Entrevista',
'choosedate' => 'Clique para escolher uma data',
'appointment_loc' => 'Local do Agendamento',
'pref_platform' => 'Selecione sua plataforma preferida',
'coming_soon_int' => 'Videoconferência interna em breve, suportada por Jitsi Meet',
'scheduled_for' => 'Entrevista Agendada para:',
'platform' => 'Plataforma',
'finish_meeting' => 'Finalizar reunião',
'view_notes' => 'Notas da Reunião',
'vote_app' => 'Votar nesta candidatura',
'vote_explainer' => [
'line1' => 'Se você não estava presente durante esta reunião, pode visualizar o bloco de notas da reunião partilhado para ajudá-lo a tomar uma decisão.',
'line2' => 'Você pode votar em quantas candidaturas forem necessárias; no entanto, só pode votar uma vez por candidatura.',
'line3' => 'Os votos não têm peso baseado no cargo. Esse sistema foi projetado com justiça e facilidade de uso em mente.'
],
'vote_approve' => 'Voto: Aprovar o candidato',
'vote_deny' => 'Voto: Negar o candidato',
'm_notes' => 'Notas da Reunião',
'view_more' => 'Ver mais candidaturas',
'comments' => 'Comentários',
'no_comments' => 'Ainda não há comentários.',
'no_comments_exp' => 'Não há comentários aqui! Comentários só são visíveis para os membros da equipa. Seja o primeiro a partilhar a sua opinião! Comentar pode ajudar na tomada de decisões quando chegar o momento de votar na candidatura.',
'commenting_as' => 'Comentando como :username',
'max_chars' => 'caracteres no máximo', // Context: A number is added before max characters
'post' => 'Publicar', // Context: Post as in post comment
]
// ==================== END OF MAIN I18N FILE ======================
];

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; Anterior',
'next' => 'Seguinte &raquo;',
];

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
| has failed, such as for an invalid token or invalid new password.
|
*/
'reset' => 'Sua palavra-passe foi redefinida!',
'sent' => 'Enviamos um e-mail com um link para redefinir a sua password!',
'throttled' => 'Por favor, aguarde antes de tentar novamente.',
'token' => 'Token para recuperação de senha inválido.',
'user' => "Não foi possível encontrar um utilizador com este e-mail.",
];

View File

@@ -0,0 +1,151 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'O :attribute tem que ser aceite.',
'active_url' => 'O campo :attribute deve conter uma URL válida.',
'after' => 'O :attribute tem de ser uma data após :date.',
'after_or_equal' => 'O campo :attribute deverá conter uma data posterior ou igual a :date.',
'alpha' => 'O campo :attribute deve conter apenas letras.',
'alpha_dash' => 'O campo :attribute deverá conter apenas letras, números e traços.',
'alpha_num' => 'O campo :attribute deve conter apenas letras e números.',
'array' => 'O campo :attribute deverá conter uma coleção de elementos.',
'before' => 'O campo :attribute deverá conter uma data anterior a :date.',
'before_or_equal' => 'O Campo :attribute deverá conter uma data anterior ou igual a :date.',
'between' => [
'numeric' => 'O campo :attribute deve conter um número entre :min e :max.',
'file' => 'O campo :attribute deve estar compreendido entre :min e :max kilobytes.',
'string' => 'O :attribute deverá ser entre :min e :max caracteres.',
'array' => 'O campo :attribute deverá conter entre :min - :max elementos.',
],
'boolean' => 'O campo :attribute deverá conter o valor verdadeiro ou falso.',
'confirmed' => 'A confirmação do :attribute não coincide.',
'date' => 'O campo :attribute não contém uma data válida.',
'date_equals' => 'O :attribute deve ser uma data igual a :date.',
'date_format' => 'O :attribute não corresponde ao formato :format.',
'different' => 'Os campos :attribute e :other deverão conter valores diferentes.',
'digits' => 'O :attribute deve ter :digits dígitos.',
'digits_between' => 'O :attribute tem de ter entre :min e :max dígitos.',
'dimensions' => 'O :attribute tem dimensões de imagem inválidas.',
'distinct' => 'O campo :attribute contém um valor duplicado.',
'email' => 'O :attribute tem de ser um e-mail válido.',
'ends_with' => 'O :attribute deve terminar com um dos seguintes: :values.',
'exists' => 'O :attribute selecionado é inválido.',
'file' => 'O campo :attribute deverá conter um ficheiro.',
'filled' => 'O campo :attribute deve ter um valor.',
'gt' => [
'numeric' => 'O :attribute deve ser maior do que :value.',
'file' => 'O :attribute deve ser maior que :value kilobytes.',
'string' => 'O :attribute deve ser maior que :value caracteres.',
'array' => 'O :attribute deve ter mais de :value itens.',
],
'gte' => [
'numeric' => 'O :attribute deve ser maior ou igual a :value.',
'file' => 'O :attribute deve ser maior ou igual a :value kilobytes.',
'string' => 'O :attribute deve ser maior ou igual a :value caracteres.',
'array' => 'O :attribute deve ter :value itens ou mais.',
],
'image' => 'O :attribute tem de ser uma imagem.',
'in' => 'O :attribute selecionado é inválido.',
'in_array' => 'O campo :attribute não existe em :other.',
'integer' => 'O campo :attribute deve conter um número inteiro.',
'ip' => 'O :attribute deve ser um endereço IP válido.',
'ipv4' => 'O campo :attribute deverá conter um IPv4 válido.',
'ipv6' => 'O campo :attribute deverá conter um IPv6 válido.',
'json' => 'O campo :attribute deve conter uma string JSON válida.',
'lt' => [
'numeric' => 'O :attribute tem de ser menor ou igual que :value.',
'file' => 'O :attribute deve ter menos de :value kilobytes.',
'string' => 'O :attribute deve ter menos de :value caracteres.',
'array' => 'O campo :attribute deve ter menos de :value itens.',
],
'lte' => [
'numeric' => 'O :attribute tem de ser menor ou igual que :value.',
'file' => 'O :attribute deve ser menor ou igual a :value kilobytes.',
'string' => 'O :attribute deve ser menor ou igual a :value caracteres.',
'array' => 'O :attribute não deve ter mais de :value items.',
],
'max' => [
'numeric' => 'O campo :attribute não pode conter um valor superior a :max.',
'file' => 'O :attribute não deve ser maior que :max kilobytes.',
'string' => 'O :attribute não pode ter mais que :max caracteres.',
'array' => 'O :attribute não deverá ter mais que :max itens.',
],
'mimes' => 'O :attribute só pode conter os seguintes formatos: :values.',
'mimetypes' => 'O :attribute deve ser um ficheiro do tipo: :attribute.',
'min' => [
'numeric' => 'O campo :attribute deve conter um número superior ou igual a :min.',
'file' => 'O campo :attribute deve conter um arquivo com no mínimo :min kilobytes.',
'string' => 'O campo :attribute deve conter pelo menos :min itens.',
'array' => 'O campo :attribute deve conter pelo menos :min itens.',
],
'not_in' => 'O :attribute selecionado é inválido.',
'not_regex' => 'O formato do valor informado no campo :attribute é inválido.',
'numeric' => 'O campo :attribute deve conter um valor numérico.',
'password' => 'A palavra-passe está incorreta.',
'present' => 'O campo :attribute deve estar presente.',
'regex' => 'O formato do :attribute é inválido.',
'required' => 'O campo :attribute é obrigatório.',
'required_if' => 'É obrigatória a indicação de um valor para o campo :attribute quando o valor do campo :other é igual a :value.',
'required_unless' => 'O campo :attribute e obrigatório, a menos que :other esteja em :values.',
'required_with' => 'O campo :attribute é obrigatório quando o :value se encontra definido.',
'required_with_all' => 'O campo :attribute é obrigatório quando :values estão presentes.',
'required_without' => 'O campo :attribute é necessário quando :values não está presente.',
'required_without_all' => 'O campo :attribute é obrigatório quando nenhum dos :values está presente.',
'same' => 'Os campos :attribute e :other deverão conter valores iguais.',
'size' => [
'numeric' => 'O :attribute deve ser maior que :size.',
'file' => 'O campo :attribute deve conter um arquivo com o tamanho de :size kilobytes.',
'string' => 'O campo :attribute deverá conter :size caracteres.',
'array' => 'O :attribute tem de conter :size itens.',
],
'starts_with' => 'O :attribute deve começar com um dos seguintes: :values.',
'string' => 'O campo :attribute deverá conter texto.',
'timezone' => 'O campo :attribute deve conter um fuso horário válido.',
'unique' => 'O valor indicado para o campo :attribute já se encontra registado.',
'uploaded' => 'O :attribute falhou ao ser enviado.',
'url' => 'O formato do valor informado no campo :attribute é inválido.',
'uuid' => 'O campo :attribute deve conter um UUID válido.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'mensagem-personalizada',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap our attribute placeholder
| with something more reader friendly such as "E-Mail Address" instead
| of "email". This simply helps us make our message more expressive.
|
*/
'attributes' => [],
];

View File

@@ -1,21 +0,0 @@
<?php
return [
'full_name' => 'الاسم الثلاثي',
'email' => 'البريد الإلكتروني',
'password' => 'كلمة السر',
'retype_password' => 'أعد إدخال كلمة السر',
'remember_me' => 'ذكرني',
'register' => 'تسجيل جديد',
'register_a_new_membership' => 'تسجيل عضوية جديدة',
'i_forgot_my_password' => 'نسيت كلمة السر؟',
'i_already_have_a_membership' => 'هذا الحساب لديه عضوية سابقة',
'sign_in' => 'تسجيل الدخول',
'log_out' => 'تسجيل خروج',
'toggle_navigation' => 'القائمة الجانبية',
'login_message' => 'يجب تسجيل الدخول',
'register_message' => 'تم تسجيل العضوية الجديدة ',
'password_reset_message' => 'تم إعادة تعيين كلمة المرور',
'reset_password' => 'إعادة تعيين كلمة السر',
'send_password_reset_link' => 'إرسال رابط إعادة تعيين كلمة السر',
];

View File

@@ -1,21 +0,0 @@
<?php
return [
'full_name' => 'Nom complet',
'email' => 'Email',
'password' => 'Contrasenya',
'retype_password' => 'Confirmar la contrasenya',
'remember_me' => 'Recordar-me',
'register' => 'Registrar-se',
'register_a_new_membership' => 'Crear un nou compte',
'i_forgot_my_password' => 'He oblidat la meva contrasenya',
'i_already_have_a_membership' => 'Ja tinc un compte',
'sign_in' => 'Accedir',
'log_out' => 'Sortir',
'toggle_navigation' => 'Commutar la navegació',
'login_message' => 'Autenticar-se per a iniciar sessió',
'register_message' => 'Crear un nou compte',
'password_reset_message' => 'Restablir la contrasenya',
'reset_password' => 'Restablir la contrasenya',
'send_password_reset_link' => 'Enviar enllaç de restabliment de contrasenya',
];

View File

@@ -1,27 +0,0 @@
<?php
return [
'full_name' => 'Vollständiger Name',
'email' => 'E-Mail',
'password' => 'Passwort',
'retype_password' => 'Passwort bestätigen',
'remember_me' => 'Angemeldet bleiben',
'register' => 'Registrieren',
'register_a_new_membership' => 'Ein neues Konto registrieren',
'i_forgot_my_password' => 'Ich habe mein Passwort vergessen',
'i_already_have_a_membership' => 'Ich bin bereits registriert',
'sign_in' => 'Anmelden',
'log_out' => 'Abmelden',
'toggle_navigation' => 'Navigation umschalten',
'login_message' => 'Bitte melden Sie sich an, um auf den geschützten Bereich zuzugreifen',
'register_message' => 'Bitte füllen Sie das Formular aus, um ein neues Konto zu registrieren',
'password_reset_message' => 'Bitte geben Sie Ihre E-Mail Adresse ein, um Ihr Passwort zurückzusetzen',
'reset_password' => 'Passwort zurücksetzen',
'send_password_reset_link' => 'Link zur Passwortwiederherstellung senden',
'verify_message' => 'Ihr Account muss noch bestätigt werden',
'verify_email_sent' => 'Es wurde ein neuer Bestätigungslink an Ihre E-Mail Adresse gesendet.',
'verify_check_your_email' => 'Bevor Sie fortfahren, überprüfen Sie bitte Ihre E-Mail auf einen Bestätigungslink.',
'verify_if_not_recieved' => 'Wenn Sie die E-Mail nicht empfangen haben',
'verify_request_another' => 'klicken Sie hier, um eine neue E-Mail anzufordern',
];

View File

@@ -1,19 +0,0 @@
<?php
return [
'main_navigation' => 'HAUPTMENÜ',
'blog' => 'Blog',
'pages' => 'Seiten',
'account_settings' => 'KONTOEINSTELLUNGEN',
'profile' => 'Profil',
'change_password' => 'Passwort ändern',
'multilevel' => 'Multi Level',
'level_one' => 'Level 1',
'level_two' => 'Level 2',
'level_three' => 'Level 3',
'labels' => 'Beschriftungen',
'important' => 'Wichtig',
'warning' => 'Warnung',
'information' => 'Information',
];

View File

@@ -19,9 +19,10 @@ return [
'password_reset_message' => 'Reset Password',
'reset_password' => 'Reset Password',
'send_password_reset_link' => 'Send Password Reset Link',
'verify_message' => 'Your account needs a verification',
'verify_message' => 'Your account needs verification',
'verify_email_sent' => 'A fresh verification link has been sent to your email address.',
'verify_check_your_email' => 'Before proceeding, please check your email for a verification link.',
'verify_if_not_recieved' => 'If you did not receive the email',
'verify_request_another' => 'click here to request another',
'confirm_password_message' => 'Please, confirm your password to continue.',
];

View File

@@ -2,18 +2,31 @@
return [
'main_navigation' => 'MAIN NAVIGATION',
'blog' => 'Blog',
'pages' => 'Pages',
'account_settings' => 'ACCOUNT SETTINGS',
'profile' => 'Profile',
'change_password' => 'Change Password',
'multilevel' => 'Multi Level',
'level_one' => 'Level 1',
'level_two' => 'Level 2',
'level_three' => 'Level 3',
'labels' => 'LABELS',
'important' => 'Important',
'warning' => 'Warning',
'information' => 'Information',
'm_home' => 'Home',
'm_directory' => 'Directory',
'h_applications' => 'Applications',
'm_my_applications' => 'My Applications',
'm_curr_applications' => 'Current Applications',
'h_my_profile' => 'My Profile',
'm_profile_settings' => 'Profile Settings',
'm_account_settings' => 'My Account Settings',
'h_app_management' => 'Application Management',
'm_all_apps' => 'All Applications',
'm_outstanding_apps' => 'Outstanding Applications',
'm_interview_queue' => 'Interview Queue',
'm_peer_approval' => 'Peer Approval Queue',
'h_admin' => 'Administration',
'm_staff_m' => 'Staff Members',
'm_reg_players' => 'Registered Players',
'sm_hiring_man' => 'Hiring Management',
'm_open_pos' => 'Open Positions',
'sm_forms' => 'Forms',
'sm_all_forms' => 'All Forms',
'm_form_builder' => 'Form Builder',
'sm_app_settings' => 'App Settings',
'm_global_app_s' => 'Global App Settings',
'm_devtools' => 'Developer Tools',
'm_s_logs' => 'System Logs'
];

View File

@@ -3,25 +3,26 @@
return [
'full_name' => 'Nombre completo',
'email' => 'Email',
'email' => 'E-mail',
'password' => 'Contraseña',
'retype_password' => 'Confirmar la contraseña',
'retype_password' => 'Repetir contraseña',
'remember_me' => 'Recordarme',
'register' => 'Registrarse',
'register_a_new_membership' => 'Crear una nueva cuenta',
'register_a_new_membership' => 'Registrar una nueva membresía',
'i_forgot_my_password' => 'Olvidé mi contraseña',
'i_already_have_a_membership' => 'Ya tengo una cuenta',
'sign_in' => 'Acceder',
'log_out' => 'Salir',
'toggle_navigation' => 'Alternar barra de navegación',
'login_message' => 'Autenticarse para iniciar sesión',
'register_message' => 'Crear una nueva cuenta',
'password_reset_message' => 'Restablecer la contraseña',
'reset_password' => 'Restablecer la contraseña',
'send_password_reset_link' => 'Enviar enlace para restablecer la contraseña',
'verify_message' => 'Tu cuenta necesita una verificación',
'verify_email_sent' => 'Se ha enviado un nuevo enlace de verificación a su correo electrónico.',
'verify_check_your_email' => 'Antes de continuar, busque en su correo electrónico un enlace de verificación.',
'verify_if_not_recieved' => 'Si no has recibido el correo electrónico',
'verify_request_another' => 'haga clic aquí para solicitar otro',
'i_already_have_a_membership' => 'Ya tengo una membresía',
'sign_in' => 'Iniciar sesión',
'log_out' => 'Cerrar sesión',
'toggle_navigation' => 'Cambiar navegación',
'login_message' => 'Inicia sesión para iniciar tu sesión',
'register_message' => 'Registrar una nueva membresía',
'password_reset_message' => 'Restablecer contraseña',
'reset_password' => 'Restablecer contraseña',
'send_password_reset_link' => 'Enviar enlace de restablecimiento de contraseña',
'verify_message' => 'Tu cuenta necesita verificación',
'verify_email_sent' => 'Se ha enviado un nuevo enlace de verificación a tu dirección de correo electrónico.',
'verify_check_your_email' => 'Antes de proceder, por favor revisa tu correo electrónico para ver un enlace de verificación.',
'verify_if_not_recieved' => 'Si no recibiste el correo electrónico',
'verify_request_another' => 'haz clic aquí para solicitar otro',
'confirm_password_message' => 'Por favor, confirma tu contraseña para continuar.',
];

View File

@@ -2,18 +2,31 @@
return [
'main_navigation' => 'MENU PRINCIPAL',
'blog' => 'Blog',
'pages' => 'Páginas',
'account_settings' => 'AJUSTES DE LA CUENTA',
'profile' => 'Perfil',
'change_password' => 'Cambiar Contraseña',
'multilevel' => 'Multi Nivel',
'level_one' => 'Nivel 1',
'level_two' => 'Nivel 2',
'level_three' => 'Nivel 3',
'labels' => 'ETIQUETAS',
'important' => 'Importante',
'warning' => 'Advertencia',
'information' => 'Información',
'm_home' => 'Inicio',
'm_directory' => 'Directorio',
'h_applications' => 'Aplicaciones',
'm_my_applications' => 'Mis Aplicaciones',
'm_curr_applications' => 'Aplicaciones actuales',
'h_my_profile' => 'Mi perfil',
'm_profile_settings' => 'Ajustes del perfil',
'm_account_settings' => 'Ajustes de mi cuenta',
'h_app_management' => 'Gestión de aplicaciones',
'm_all_apps' => 'Todas las aplicaciones',
'm_outstanding_apps' => 'Aplicaciones pendientes',
'm_interview_queue' => 'Cola de entrevistas',
'm_peer_approval' => 'Cola de aprobación por pares',
'h_admin' => 'Administración',
'm_staff_m' => 'Miembros del personal',
'm_reg_players' => 'Jugadores registrados',
'sm_hiring_man' => 'Gestión de contratación',
'm_open_pos' => 'Abrir posiciones',
'sm_forms' => 'Formularios',
'sm_all_forms' => 'Todos los formularios',
'm_form_builder' => 'Constructor de Formularios',
'sm_app_settings' => 'Ajustes de app',
'm_global_app_s' => 'Configuración global de la aplicación',
'm_devtools' => 'Herramientas para desarrolladores',
'm_s_logs' => 'Registros del sistema'
];

View File

@@ -1,22 +0,0 @@
<?php
return [
'full_name' => 'نام',
'email' => 'ایمیل',
'password' => 'رمز عبور',
'retype_password' => 'تکرار رمز عبور',
'remember_me' => 'مرا به یاد داشته باش',
'register' => 'ثبت نام',
'register_a_new_membership' => 'ایجاد یک عضویت جدید',
'i_forgot_my_password' => 'رمز عبور را فراموش کرده ام',
'i_already_have_a_membership' => 'قبلا ثبت نام کرده ام',
'sign_in' => 'ورود',
'log_out' => 'خروج',
'toggle_navigation' => 'نمایش/مخفی کردن منو',
'login_message' => 'وارد شوید',
'register_message' => 'ثبت نام',
'password_reset_message' => 'بازنشانی رمز عبور',
'reset_password' => 'بازنشانی رمز عبور',
'send_password_reset_link' => 'ارسال لینک بازنشانی رمز عبور',
];

View File

@@ -2,21 +2,27 @@
return [
'full_name' => 'Nom',
'email' => 'Email',
'full_name' => 'Nom complet',
'email' => 'Courriel',
'password' => 'Mot de passe',
'retype_password' => 'Entrez à nouveau le mot de passe',
'retype_password' => 'Retapez le mot de passe',
'remember_me' => 'Se souvenir de moi',
'register' => 'Enregistrement',
'register_a_new_membership' => 'Enregistrer un nouveau membre',
'register' => 'Inscription',
'register_a_new_membership' => 'Inscrire une nouvelle adhésion',
'i_forgot_my_password' => 'J\'ai oublié mon mot de passe',
'i_already_have_a_membership' => 'J\'ai déjà un compte',
'sign_in' => 'Connexion',
'i_already_have_a_membership' => 'J\'ai déjà une adhésion',
'sign_in' => 'Se connecter',
'log_out' => 'Déconnexion',
'toggle_navigation' => 'Basculer la navigation',
'login_message' => 'Connectez-vous pour commencer une session',
'register_message' => 'Enregistrement d\'un nouveau membre',
'password_reset_message' => 'Réinitialisation du mot de passe',
'reset_password' => 'Réinitialisation du mot de passe',
'send_password_reset_link' => 'Envoi de la réinitialisation du mot de passe',
'login_message' => 'Connectez-vous pour démarrer votre session',
'register_message' => 'Inscrire une nouvelle adhésion',
'password_reset_message' => 'Réinitialiser le mot de passe',
'reset_password' => 'Réinitialiser le mot de passe',
'send_password_reset_link' => 'Envoyer le lien de réinitialisation du mot de passe',
'verify_message' => 'Votre compte a besoin d\'une vérification',
'verify_email_sent' => 'Un nouveau lien de vérification a été envoyé à votre adresse e-mail.',
'verify_check_your_email' => 'Avant de continuer, veuillez vérifier votre e-mail pour un lien de vérification.',
'verify_if_not_recieved' => 'Si vous n\'avez pas reçu l\'e-mail',
'verify_request_another' => 'cliquez ici pour en demander un autre',
'confirm_password_message' => 'Veuillez confirmer votre mot de passe pour continuer.',
];

View File

@@ -0,0 +1,32 @@
<?php
return [
'm_home' => 'Domicile',
'm_directory' => 'Répertoire',
'h_applications' => 'Applications',
'm_my_applications' => 'Mes applications',
'm_curr_applications' => 'Applications actuelles',
'h_my_profile' => 'Mon profil',
'm_profile_settings' => 'Paramètres du profil',
'm_account_settings' => 'Paramètres de mon compte',
'h_app_management' => 'Gestion des applications',
'm_all_apps' => 'Toutes les applications',
'm_outstanding_apps' => 'Applications en cours',
'm_interview_queue' => 'File d\'attente des entretiens',
'm_peer_approval' => 'File d\'attente d\'approbation par les pairs',
'h_admin' => 'Administration',
'm_staff_m' => 'Membres du personnel',
'm_reg_players' => 'Joueurs enregistrés',
'sm_hiring_man' => 'Gestion de l\'embauche',
'm_open_pos' => 'Positions ouvertes',
'sm_forms' => 'Formulaires',
'sm_all_forms' => 'Tous les formulaires',
'm_form_builder' => 'Constructeur de formulaire',
'sm_app_settings' => 'Paramètres de l\'application',
'm_global_app_s' => 'Paramètres globaux de l\'application',
'm_devtools' => 'Outils de développement',
'm_s_logs' => 'Journaux système'
];

View File

@@ -1,22 +0,0 @@
<?php
return [
'full_name' => 'Ime',
'email' => 'Email',
'password' => 'Lozinka',
'retype_password' => 'Ponovljena lozinka',
'remember_me' => 'Zapamti me',
'register' => 'Novi korisnik',
'register_a_new_membership' => 'Registracija',
'i_forgot_my_password' => 'Zaboravljena zaporka',
'i_already_have_a_membership' => 'Već imam korisnički račun',
'sign_in' => 'Prijava',
'log_out' => 'Odjava',
'toggle_navigation' => 'Pregled navigacije',
'login_message' => 'Prijava',
'register_message' => 'Registracija',
'password_reset_message' => 'Nova lozinka',
'reset_password' => 'Nova lozinka',
'send_password_reset_link' => 'Pošalji novi zahtjev lozinke',
];

View File

@@ -1,21 +0,0 @@
<?php
return [
'full_name' => 'Teljes név',
'email' => 'Email',
'password' => 'Jelszó',
'retype_password' => 'Jelszó újra',
'remember_me' => 'Emlékezz rám',
'register' => 'Regisztráció',
'register_a_new_membership' => 'Regisztrálás új tagként',
'i_forgot_my_password' => 'Elfelejtetem a jelszavam',
'i_already_have_a_membership' => 'Már tag vagyok',
'sign_in' => 'Belépés',
'log_out' => 'Kilépés',
'toggle_navigation' => 'Lenyíló navigáció',
'login_message' => 'Belépés a munkamenet elkezdéséhez',
'register_message' => 'Regisztrálás új tagként',
'password_reset_message' => 'Jelszó visszaállítása',
'reset_password' => 'Jelszó visszaállítása',
'send_password_reset_link' => 'Jelszó visszaállítás link küldése',
];

View File

@@ -1,22 +0,0 @@
<?php
return [
'full_name' => 'Nome completo',
'email' => 'Email',
'password' => 'Password',
'retype_password' => 'Ripeti password',
'remember_me' => 'Ricordami',
'register' => 'Registrazione',
'register_a_new_membership' => 'Registra un nuovo abbonamento',
'i_forgot_my_password' => 'Ho dimenticato la password',
'i_already_have_a_membership' => 'Ho già un abbonamento',
'sign_in' => 'Accedi',
'log_out' => 'Logout',
'toggle_navigation' => 'Attiva la navigazione',
'login_message' => 'Accedi per iniziare la tua sessione',
'register_message' => 'Registra un nuovo abbonamento',
'password_reset_message' => 'Resetta la password',
'reset_password' => 'Resetta la password',
'send_password_reset_link' => 'Invia link di reset della password',
];

View File

@@ -1,27 +0,0 @@
<?php
return [
'full_name' => '氏名',
'email' => 'メールアドレス',
'password' => 'パスワード',
'retype_password' => 'もう一度入力',
'remember_me' => 'パスワードを記憶する',
'register' => '登録する',
'register_a_new_membership' => 'アカウントを登録する',
'i_forgot_my_password' => 'パスワードを忘れた',
'i_already_have_a_membership' => 'すでにアカウントを持っている',
'sign_in' => 'ログイン',
'log_out' => 'ログアウト',
'toggle_navigation' => 'ナビゲーションを開閉',
'login_message' => 'ログインしてセッションを開始する',
'register_message' => 'アカウントを登録する',
'password_reset_message' => 'パスワードをリセットする',
'reset_password' => 'パスワードをリセットする',
'send_password_reset_link' => 'パスワードリセットリンクを送信する。',
'verify_message' => 'あなたのアカウントは認証が必要です。',
'verify_email_sent' => 'あなたのメールアドレスに認証用のリンクを送信しました。',
'verify_check_your_email' => '続行する前に、認証用リンクについてメールを確認してください。',
'verify_if_not_recieved' => 'メールが届かない場合',
'verify_request_another' => 'ここをクリックしてもう一度送信する',
];

View File

@@ -1,19 +0,0 @@
<?php
return [
'main_navigation' => 'メインメニュー',
'blog' => 'ブログ',
'pages' => 'ページ',
'account_settings' => 'アカウント設定',
'profile' => 'プロフィール',
'change_password' => 'パスワード変更',
'multilevel' => 'マルチ階層',
'level_one' => '階層 1',
'level_two' => '階層 2',
'level_three' => '階層 3',
'labels' => 'ラベル',
'important' => '重要',
'warning' => '警告',
'information' => 'インフォメーション',
];

View File

@@ -1,22 +0,0 @@
<?php
return [
'full_name' => 'Volledige naam',
'email' => 'E-mailadres',
'password' => 'Wachtwoord',
'retype_password' => 'Wachtwoord nogmaals invoeren',
'remember_me' => 'Ingelogd blijven',
'register' => 'Registreren',
'register_a_new_membership' => 'Registreer een nieuw lidmaatschap',
'i_forgot_my_password' => 'Ik ben mijn wachtwoord vergeten',
'i_already_have_a_membership' => 'Ik heb al een lidmaatschap',
'sign_in' => 'Inloggen',
'log_out' => 'Uitloggen',
'toggle_navigation' => 'Schakel navigatie',
'login_message' => 'Log in om je sessie te starten',
'register_message' => 'Registreer een nieuw lidmaatschap',
'password_reset_message' => 'Wachtwoord herstellen',
'reset_password' => 'Wachtwoord herstellen',
'send_password_reset_link' => 'Verzend link voor wachtwoordherstel',
];

View File

@@ -1,22 +0,0 @@
<?php
return [
'full_name' => 'Imię i nazwisko',
'email' => 'Email',
'password' => 'Hasło',
'retype_password' => 'Powtórz hasło',
'remember_me' => 'Zapamiętaj mnie',
'register' => 'Zarejestruj',
'register_a_new_membership' => 'Załóż nowe konto',
'i_forgot_my_password' => 'Zapomniałem hasła',
'i_already_have_a_membership' => 'Mam już konto',
'sign_in' => 'Zaloguj',
'log_out' => 'Wyloguj',
'toggle_navigation' => 'Przełącz nawigację',
'login_message' => 'Zaloguj się aby uzyskać dostęp do panelu',
'register_message' => 'Załóż nowe konto',
'password_reset_message' => 'Resetuj hasło',
'reset_password' => 'Resetuj hasło',
'send_password_reset_link' => 'Wyślij link do resetowania hasła',
];

View File

@@ -1,22 +0,0 @@
<?php
return [
'full_name' => 'Nome completo',
'email' => 'Email',
'password' => 'Senha',
'retype_password' => 'Repita a senha',
'remember_me' => 'Lembrar-me',
'register' => 'Registrar',
'register_a_new_membership' => 'Registrar um novo membro',
'i_forgot_my_password' => 'Esqueci minha senha',
'i_already_have_a_membership' => 'Já sou um membro',
'sign_in' => 'Entrar',
'log_out' => 'Sair',
'toggle_navigation' => 'Trocar navegação',
'login_message' => 'Entre para iniciar uma nova sessão',
'register_message' => 'Registrar um novo membro',
'password_reset_message' => 'Recuperar senha',
'reset_password' => 'Recuperar senha',
'send_password_reset_link' => 'Enviar link de recuperação de senha',
];

View File

@@ -1,19 +0,0 @@
<?php
return [
'main_navigation' => 'Navegação Principal',
'blog' => 'Blog',
'pages' => 'Página',
'account_settings' => 'Configurações da Conta',
'profile' => 'Perfil',
'change_password' => 'Mudar Senha',
'multilevel' => 'Multinível',
'level_one' => 'Nível 1',
'level_two' => 'Nível 2',
'level_three' => 'Nível 3',
'labels' => 'Etiquetas',
'Important' => 'Importante',
'Warning' => 'Aviso',
'Information' => 'Informação',
];

View File

@@ -0,0 +1,28 @@
<?php
return [
'full_name' => 'Nome completo',
'email' => 'Email',
'password' => 'Palavra-passe',
'retype_password' => 'Insira novamente a palavra-passe',
'remember_me' => 'Lembrar-me',
'register' => 'Registe-se',
'register_a_new_membership' => 'Registrar um novo membro',
'i_forgot_my_password' => 'Esqueci-me da minha palavra-passe',
'i_already_have_a_membership' => 'Já tenho conta',
'sign_in' => 'Iniciar Sessão',
'log_out' => 'Terminar sessão',
'toggle_navigation' => 'Ativar/desativar navegação',
'login_message' => 'Faça o login para iniciar sua sessão',
'register_message' => 'Registar um novo membro',
'password_reset_message' => 'Repor Palavra-Passe',
'reset_password' => 'Repor Palavra-Passe',
'send_password_reset_link' => 'Enviar Link para Recuperação de Senha',
'verify_message' => 'A sua conta precisa de verificação',
'verify_email_sent' => 'Um e-mail com um link de verificação foi enviado para seu endereço de e-mail.',
'verify_check_your_email' => 'Antes de prosseguir, verifique seu e-mail para um link de verificação.',
'verify_if_not_recieved' => 'Se você não recebeu o e-mail',
'verify_request_another' => 'clique aqui para solicitar outro',
'confirm_password_message' => 'Por favor, confirma a tua palavra-passe para continuar.',
];

View File

@@ -0,0 +1,32 @@
<?php
return [
'm_home' => 'Início',
'm_directory' => 'Diretório',
'h_applications' => 'Candidaturas',
'm_my_applications' => 'As minhas Candidaturas',
'm_curr_applications' => 'Candidaturas Atuais',
'h_my_profile' => 'Meu perfil',
'm_profile_settings' => 'Configurações do Perfil',
'm_account_settings' => 'Definições de Conta',
'h_app_management' => 'Gestão de Candidaturas',
'm_all_apps' => 'Todas as Candidaturas',
'm_outstanding_apps' => 'Candidaturas Pendendes',
'm_interview_queue' => 'Fila de entrevistas',
'm_peer_approval' => 'Fila de Aprovação por Pares',
'h_admin' => 'Administração',
'm_staff_m' => 'Membros da Equipa',
'm_reg_players' => 'Jogadores registados',
'sm_hiring_man' => 'Gestão de Contratação',
'm_open_pos' => 'Vagas',
'sm_forms' => 'Formulários',
'sm_all_forms' => 'Todos os Formulários',
'm_form_builder' => 'Construtor de Formulários',
'sm_app_settings' => 'Configurações da App',
'm_global_app_s' => 'Definições Globais',
'm_devtools' => 'Ferramentas de Programador',
'm_s_logs' => 'Registos do Sistema'
];

View File

@@ -1,23 +0,0 @@
<?php
return [
'full_name' => 'Полное имя',
'email' => 'Почта',
'password' => 'Пароль',
'retype_password' => 'Подтверждение пароля',
'remember_me' => 'Запомнить меня',
'register' => 'Регистрация',
'register_a_new_membership' => 'Регистрация нового пользователя',
'i_forgot_my_password' => 'Восстановление пароля',
'i_already_have_a_membership' => 'Я уже зарегистрирован',
'sign_in' => 'Вход',
'log_out' => 'Выход',
'toggle_navigation' => 'Переключить навигацию',
'login_message' => 'Вход в систему',
'register_message' => 'Регистрация нового пользователя',
'password_reset_message' => 'Восстановление пароля',
'reset_password' => 'Восстановление пароля',
'send_password_reset_link' => 'Отправить ссылку для восстановления пароля',
];

View File

@@ -1,19 +0,0 @@
<?php
return [
'main_navigation' => 'ГЛАВНОЕ МЕНЮ',
'blog' => 'Блог',
'pages' => 'Страницы',
'account_settings' => 'НАСТРОЙКИ ПРОФИЛЯ',
'profile' => 'Профиль',
'change_password' => 'Изменить пароль',
'multilevel' => 'Многоуровневое меню',
'level_one' => 'Уровень 1',
'level_two' => 'Уровень 2',
'level_three' => 'Уровень 3',
'labels' => 'Метки',
'important' => 'Важно',
'warning' => 'Внимание',
'information' => 'Информация',
];

View File

@@ -1,27 +0,0 @@
<?php
return [
'full_name' => 'Ad ve Soyadı',
'email' => 'E-Posta Adresi',
'password' => 'Parola',
'retype_password' => 'Yeniden Parola',
'remember_me' => 'Beni Hatırla',
'register' => 'Kaydol',
'register_a_new_membership' => 'Yeni üye kaydı',
'i_forgot_my_password' => 'Parolamı unuttum',
'i_already_have_a_membership' => 'Zaten üye kaydım var',
'sign_in' => 'Giriş Yap',
'log_out' => ıkış Yap',
'toggle_navigation' => 'Ana menüyü aç/kapa',
'login_message' => 'Oturumunuzu devam ettirmek için giriş yapmalısınız',
'register_message' => 'Yeni üye kaydı oluştur',
'password_reset_message' => 'Parola Sıfırlama',
'reset_password' => 'Parola Sıfırlama',
'send_password_reset_link' => 'Parola Sıfırlama Linki Gönder',
'verify_message' => 'Hesabınızın doğrulanmaya ihtiyacı var',
'verify_email_sent' => 'Hesap doğrulama linki E-posta adresinize gönderildi.',
'verify_check_your_email' => 'İşlemlere devam etmeden önce doğrulama linki için e-posta adresinizi kontrol edin.',
'verify_if_not_recieved' => 'Eğer doğrulama e-postası adresinize ulaşmadıysa',
'verify_request_another' => 'buraya tıklayarak yeni bir doğrulama linki talep edebilirsiniz',
];

View File

@@ -1,19 +0,0 @@
<?php
return [
'main_navigation' => 'ANA MENÜ',
'blog' => 'Blog',
'pages' => 'Sayfalar',
'account_settings' => 'HESAP AYARLARI',
'profile' => 'Profil',
'change_password' => 'Parolanı değiştir',
'multilevel' => 'Çoklu Seviye',
'level_one' => 'Seviye 1',
'level_two' => 'Seviye 2',
'level_three' => 'Seviye 3',
'labels' => 'ETİKETLER',
'important' => 'Önemli',
'warning' => 'Uyarı',
'information' => 'Bilgi',
];

View File

@@ -1,23 +0,0 @@
<?php
return [
'full_name' => 'Повне і\'мя',
'email' => 'Пошта',
'password' => 'Пароль',
'retype_password' => 'Підтвердження пароля',
'remember_me' => 'Запам\'ятати мене',
'register' => 'Реєстрація',
'register_a_new_membership' => 'Реєстрація нового користувача',
'i_forgot_my_password' => 'Відновлення пароля',
'i_already_have_a_membership' => 'Я вже зареєстрований',
'sign_in' => 'Вхід',
'log_out' => 'Вихід',
'toggle_navigation' => 'Переключити навігацію',
'login_message' => 'Вхід до системи',
'register_message' => 'Реєстрація нового користувача',
'password_reset_message' => 'Відновлення пароля',
'reset_password' => 'Відновлення пароля',
'send_password_reset_link' => 'Відправити посилання для відновлення пароля',
];

View File

@@ -1,19 +0,0 @@
<?php
return [
'main_navigation' => 'ГОЛОВНЕ МЕНЮ',
'blog' => 'Блог',
'pages' => 'Сторінки',
'account_settings' => 'НАЛАШТУВАННЯ ПРОФІЛЮ',
'profile' => 'Профіль',
'change_password' => 'Змінити пароль',
'multilevel' => 'Багаторівневе меню',
'level_one' => 'Рівень 1',
'level_two' => 'Рівень 2',
'level_three' => 'Рівень 3',
'labels' => 'Мітки',
'important' => 'Важливо',
'warning' => 'Увага',
'information' => 'Інформація',
];

View File

@@ -1,22 +0,0 @@
<?php
return [
'full_name' => 'Tên đầy đủ',
'email' => 'Email',
'password' => 'Mật khẩu',
'retype_password' => 'Nhập lại mật khẩu',
'remember_me' => 'Nhớ tôi',
'register' => 'Đăng ký',
'register_a_new_membership' => 'Đăng ký thành viên mới',
'i_forgot_my_password' => 'Tôi quên mật khẩu của tôi',
'i_already_have_a_membership' => 'Tôi đã là thành viên',
'sign_in' => 'Đăng nhập',
'log_out' => 'Đăng xuất',
'toggle_navigation' => 'Chuyển đổi điều hướng',
'login_message' => 'Đăng nhập để bắt đầu phiên của bạn',
'register_message' => 'Đăng ký thành viên mới',
'password_reset_message' => 'Đặt lại mật khẩu',
'reset_password' => 'Đặt lại mật khẩu',
'send_password_reset_link' => 'Gửi liên kết đặt lại mật khẩu',
];

View File

@@ -1,19 +0,0 @@
<?php
return [
'main_navigation' => 'ĐIỀU HƯỚNG CHÍNH',
'blog' => 'Blog',
'pages' => 'Trang',
'account_settings' => 'CÀI ĐẶT TÀI KHOẢN',
'profile' => 'Hồ sơ',
'change_password' => 'Đổi mật khẩu',
'multilevel' => 'Đa cấp',
'level_one' => 'Cấp độ 1',
'level_two' => 'Cấp độ 2',
'level_three' => 'Cấp độ 3',
'labels' => 'NHÃN',
'Important' => 'Quan trọng',
'Warning' => 'Cảnh báo',
'Information' => 'Thông tin',
];

Some files were not shown because too many files have changed in this diff Show More