Merge branch 'develop' into feature/service-changes

This commit is contained in:
Dane Everitt 2017-01-12 13:15:37 -05:00
commit 6bd9663f59
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
136 changed files with 2470 additions and 1737 deletions

8
.babelrc Normal file
View file

@ -0,0 +1,8 @@
{
"presets": ["es2015"],
"compact": true,
"minified": true,
"only": "public/js/files/*.js",
"sourceMaps": "inline",
"comments": false
}

View file

@ -3,8 +3,10 @@ root = true
[*] [*]
end_of_line = lf end_of_line = lf
insert_final_newline = true insert_final_newline = true
[*.{php,js,html,css}]
charset = utf-8
indent_style = space indent_style = space
indent_size = 4 indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false

1
.gitignore vendored
View file

@ -10,4 +10,3 @@ Vagrantfile
Vagrantfile Vagrantfile
node_modules node_modules
.babelrc

View file

@ -3,6 +3,25 @@ This file is a running track of new features and fixes to each version of the pa
This project follows [Semantic Versioning](http://semver.org) guidelines. This project follows [Semantic Versioning](http://semver.org) guidelines.
## v0.5.6 (Bodacious Boreopterus)
### Added
* Added the following languages: Estonian `et`, Dutch `nl`, Norwegian `nb` (partial), Romanian `ro`, and Russian `ru`. Interested in helping us translate the panel into more languages, or improving existing translations? Contact us on Discord and let us know.
* Added missing `strings.password` to language file for English.
* Allow listing of users from the API by passing either the user ID or their email.
### Fixed
* Fixes bug where assigning a variable a default value (or valid value) of `0` would cause the panel to reject the value thinking it did not exist.
* Addresses potential for crash by limiting total ports that can be assigned per-range to 2000.
* Fixes server names requiring at minimum 4 characters. Name can now be 1 to 200 characters long. :pencil2:
* Fixes bug that would allow adding the owner of a server as a subuser for that same server.
* Fixes bug that would allow creating multiple subusers with the same email address.
* Fixes bug where Sponge servers were improperly tagged as a spigot server in the daemon causing issues when booting or modifying configuration files.
* Use transpiled ES6 -> ES5 filemanager code in browsers.
* Fixes service option name displaying the name of a nwly added variable after the variable is added and until the page is refreshed. (see #208)
### Changed
* Filemanager and EULA checking javascript is now written in pure ES6 code rather than as a blade-syntax template. This allows the use of babel to transpile into ES5 as a minified version.
## v0.5.5 (Bodacious Boreopterus) ## v0.5.5 (Bodacious Boreopterus)
### Added ### Added
* New API route to return allocations given a server ID. This adds support for a community-driven WHMCS module :rocket: available [here](https://github.com/hammerdawn/Pterodactyl-WHMCS). * New API route to return allocations given a server ID. This adds support for a community-driven WHMCS module :rocket: available [here](https://github.com/hammerdawn/Pterodactyl-WHMCS).

View file

@ -75,7 +75,7 @@ class UserController extends BaseController
*/ */
public function view(Request $request, $id) public function view(Request $request, $id)
{ {
$query = Models\User::where('id', $id); $query = Models\User::where((is_numeric($id) ? 'id' : 'email'), $id);
if (! is_null($request->input('fields'))) { if (! is_null($request->input('fields'))) {
foreach (explode(',', $request->input('fields')) as $field) { foreach (explode(',', $request->input('fields')) as $field) {

View file

@ -27,6 +27,7 @@ namespace Pterodactyl\Http\Controllers\Admin;
use DB; use DB;
use Log; use Log;
use Alert; use Alert;
use Carbon;
use Validator; use Validator;
use Pterodactyl\Models; use Pterodactyl\Models;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -82,6 +83,7 @@ class NodesController extends Controller
'_token', '_token',
])); ]));
Alert::success('Successfully created new node. <strong>Before you can add any servers you need to first assign some IP addresses and ports.</strong>')->flash(); Alert::success('Successfully created new node. <strong>Before you can add any servers you need to first assign some IP addresses and ports.</strong>')->flash();
Alert::info('<strong>To simplify the node setup you can generate a token on the configuration tab.</strong>')->flash();
return redirect()->route('admin.nodes.view', [ return redirect()->route('admin.nodes.view', [
'id' => $new, 'id' => $new,
@ -276,4 +278,24 @@ class NodesController extends Controller
'tab' => 'tab_delete', 'tab' => 'tab_delete',
]); ]);
} }
public function getConfigurationToken(Request $request, $id)
{
// Check if Node exists. Will lead to 404 if not.
Models\Node::findOrFail($id);
// Create a token
$token = new Models\NodeConfigurationToken();
$token->node = $id;
$token->token = str_random(32);
$token->expires_at = Carbon::now()->addMinutes(5); // Expire in 5 Minutes
$token->save();
$token_response = [
'token' => $token->token,
'expires_at' => $token->expires_at->toDateTimeString(),
];
return response()->json($token_response, 200);
}
} }

View file

@ -232,7 +232,7 @@ class ServiceController extends Controller
])); ]));
Alert::success('Successfully added new variable to this option.')->flash(); Alert::success('Successfully added new variable to this option.')->flash();
return redirect()->route('admin.services.option', [$service, $option])->withInput(); return redirect()->route('admin.services.option', [$service, $option]);
} catch (DisplayValidationException $ex) { } catch (DisplayValidationException $ex) {
return redirect()->route('admin.services.option.variable.new', [$service, $option])->withErrors(json_decode($ex->getMessage()))->withInput(); return redirect()->route('admin.services.option.variable.new', [$service, $option])->withErrors(json_decode($ex->getMessage()))->withInput();
} catch (DisplayException $ex) { } catch (DisplayException $ex) {

View file

@ -33,16 +33,14 @@ use Pterodactyl\Http\Controllers\Controller;
class LanguageController extends Controller class LanguageController extends Controller
{ {
protected $languages = [ protected $languages = [
'de' => 'Danish', 'de' => 'German',
'en' => 'English', 'en' => 'English',
'es' => 'Spanish', 'et' => 'Estonian',
'fr' => 'French', 'nb' => 'Norwegian',
'it' => 'Italian', 'nl' => 'Dutch',
'pl' => 'Polish',
'pt' => 'Portuguese', 'pt' => 'Portuguese',
'ro' => 'Romanian',
'ru' => 'Russian', 'ru' => 'Russian',
'se' => 'Swedish',
'zh' => 'Chinese',
]; ];
/** /**

View file

@ -24,6 +24,7 @@
namespace Pterodactyl\Http\Controllers\Remote; namespace Pterodactyl\Http\Controllers\Remote;
use Carbon\Carbon;
use Pterodactyl\Models; use Pterodactyl\Models;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Pterodactyl\Http\Controllers\Controller; use Pterodactyl\Http\Controllers\Controller;
@ -107,4 +108,29 @@ class RemoteController extends Controller
return response('', 201); return response('', 201);
} }
public function getConfiguration(Request $request, $tokenString)
{
// Try to query the token and the node from the database
try {
$token = Models\NodeConfigurationToken::where('token', $tokenString)->firstOrFail();
$node = Models\Node::findOrFail($token->node);
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
return response()->json(['error' => 'token_invalid'], 403);
}
// Check if token is expired
if ($token->expires_at->lt(Carbon::now())) {
$token->delete();
return response()->json(['error' => 'token_expired'], 403);
}
// Delete the token, it's one-time use
$token->delete();
// Manually as getConfigurationAsJson() returns it in correct format already
return response($node->getConfigurationAsJson(), 200)
->header('Content-Type', 'application/json');
}
} }

View file

@ -28,9 +28,9 @@ use DB;
use Log; use Log;
use Uuid; use Uuid;
use Alert; use Alert;
use Javascript;
use Pterodactyl\Models; use Pterodactyl\Models;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use InvalidArgumentException;
use Pterodactyl\Exceptions\DisplayException; use Pterodactyl\Exceptions\DisplayException;
use Pterodactyl\Http\Controllers\Controller; use Pterodactyl\Http\Controllers\Controller;
use Pterodactyl\Repositories\ServerRepository; use Pterodactyl\Repositories\ServerRepository;
@ -49,24 +49,6 @@ class ServerController extends Controller
// //
} }
public function getJavascript(Request $request, $uuid, $folder, $file)
{
$server = Models\Server::getByUUID($uuid);
$info = pathinfo($file);
$routeFile = str_replace('/', '.', $info['dirname']) . '.' . $info['filename'];
try {
return response()->view('server.js.' . $folder . '.' . $routeFile, [
'server' => $server,
'node' => Models\Node::find($server->node),
])->header('Content-Type', 'application/javascript');
} catch (InvalidArgumentException $ex) {
return abort(404);
} catch (\Exception $ex) {
throw $ex;
}
}
/** /**
* Renders server index page for specified server. * Renders server index page for specified server.
* *
@ -77,6 +59,13 @@ class ServerController extends Controller
{ {
$server = Models\Server::getByUUID($request->route()->server); $server = Models\Server::getByUUID($request->route()->server);
Javascript::put([
'meta' => [
'saveFile' => route('server.files.save', $server->uuidShort),
'csrfToken' => csrf_token(),
],
]);
return view('server.index', [ return view('server.index', [
'server' => $server, 'server' => $server,
'allocations' => Models\Allocation::where('assigned_to', $server->id)->orderBy('ip', 'asc')->orderBy('port', 'asc')->get(), 'allocations' => Models\Allocation::where('assigned_to', $server->id)->orderBy('ip', 'asc')->orderBy('port', 'asc')->get(),
@ -90,14 +79,34 @@ class ServerController extends Controller
* @param Request $request * @param Request $request
* @return \Illuminate\Contracts\View\View * @return \Illuminate\Contracts\View\View
*/ */
public function getFiles(Request $request) public function getFiles(Request $request, $uuid)
{ {
$server = Models\Server::getByUUID($request->route()->server); $server = Models\Server::getByUUID($uuid);
$this->authorize('list-files', $server); $this->authorize('list-files', $server);
$node = Models\Node::find($server->node);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only('uuid', 'uuidShort', 'daemonSecret'),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
'meta' => [
'directoryList' => route('server.files.directory-list', $server->uuidShort),
'csrftoken' => csrf_token(),
],
'permissions' => [
'moveFiles' => $request->user()->can('move-files', $server),
'copyFiles' => $request->user()->can('copy-files', $server),
'compressFiles' => $request->user()->can('compress-files', $server),
'decompressFiles' => $request->user()->can('decompress-files', $server),
'createFiles' => $request->user()->can('create-files', $server),
'downloadFiles' => $request->user()->can('download-files', $server),
'deleteFiles' => $request->user()->can('delete-files', $server),
],
]);
return view('server.files.index', [ return view('server.files.index', [
'server' => $server, 'server' => $server,
'node' => Models\Node::find($server->node), 'node' => $node,
]); ]);
} }
@ -107,9 +116,9 @@ class ServerController extends Controller
* @param Request $request * @param Request $request
* @return \Illuminate\Contracts\View\View * @return \Illuminate\Contracts\View\View
*/ */
public function getAddFile(Request $request) public function getAddFile(Request $request, $uuid)
{ {
$server = Models\Server::getByUUID($request->route()->server); $server = Models\Server::getByUUID($uuid);
$this->authorize('add-files', $server); $this->authorize('add-files', $server);
return view('server.files.add', [ return view('server.files.add', [

View file

@ -286,6 +286,11 @@ class AdminRoutes
'as' => 'admin.nodes.delete', 'as' => 'admin.nodes.delete',
'uses' => 'Admin\NodesController@deleteNode', 'uses' => 'Admin\NodesController@deleteNode',
]); ]);
$router->get('/{id}/configurationtoken', [
'as' => 'admin.nodes.configuration-token',
'uses' => 'Admin\NodesController@getConfigurationToken',
]);
}); });
// Location Routes // Location Routes

View file

@ -46,6 +46,11 @@ class RemoteRoutes
'as' => 'remote.event', 'as' => 'remote.event',
'uses' => 'Remote\RemoteController@event', 'uses' => 'Remote\RemoteController@event',
]); ]);
$router->get('configuration/{token}', [
'as' => 'remote.configuration',
'uses' => 'Remote\RemoteController@getConfiguration',
]);
}); });
} }
} }

View file

@ -166,15 +166,6 @@ class ServerRoutes
'uses' => 'Server\AjaxController@postResetDatabasePassword', 'uses' => 'Server\AjaxController@postResetDatabasePassword',
]); ]);
}); });
// Assorted AJAX Routes
$router->group(['prefix' => 'js'], function ($server) use ($router) {
// Returns Server Status
$router->get('{folder}/{file}', [
'as' => 'server.js',
'uses' => 'Server\ServerController@getJavascript',
])->where('file', '.*');
});
}); });
} }
} }

View file

@ -117,4 +117,61 @@ class Node extends Model
return self::$guzzle[$node]; return self::$guzzle[$node];
} }
/**
* Returns the configuration in JSON format.
*
* @param bool $pretty Wether to pretty print the JSON or not
* @return string The configration in JSON format
*/
public function getConfigurationAsJson($pretty = false)
{
$config = [
'web' => [
'host' => '0.0.0.0',
'listen' => $this->daemonListen,
'ssl' => [
'enabled' => $this->scheme === 'https',
'certificate' => '/etc/letsencrypt/live/localhost/fullchain.pem',
'key' => '/etc/letsencrypt/live/localhost/privkey.pem',
],
],
'docker' => [
'socket' => '/var/run/docker.sock',
'autoupdate_images' => true,
],
'sftp' => [
'path' => $this->daemonBase,
'port' => $this->daemonSFTP,
'container' => 'ptdl-sftp',
],
'query' => [
'kill_on_fail' => true,
'fail_limit' => 5,
],
'logger' => [
'path' => 'logs/',
'src' => false,
'level' => 'info',
'period' => '1d',
'count' => 3,
],
'remote' => [
'base' => config('app.url'),
'download' => route('remote.download'),
'installed' => route('remote.install'),
],
'uploads' => [
'size_limit' => $this->upload_size,
],
'keys' => [$this->daemonSecret],
];
$json_options = JSON_UNESCAPED_SLASHES;
if ($pretty) {
$json_options |= JSON_PRETTY_PRINT;
}
return json_encode($config, $json_options);
}
} }

View file

@ -0,0 +1,51 @@
<?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
namespace Pterodactyl\Models;
use Illuminate\Database\Eloquent\Model;
class NodeConfigurationToken extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'node_configuration_tokens';
/**
* Fields that are not mass assignable.
*
* @var array
*/
protected $guarded = ['id', 'created_at', 'updated_at'];
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = ['created_at', 'updated_at', 'expires_at'];
}

View file

@ -213,7 +213,13 @@ class NodeRepository
throw new DisplayException('The mapping for ' . $port . ' is invalid and cannot be processed.'); throw new DisplayException('The mapping for ' . $port . ' is invalid and cannot be processed.');
} }
if (preg_match('/^(\d{1,5})-(\d{1,5})$/', $port, $matches)) { if (preg_match('/^(\d{1,5})-(\d{1,5})$/', $port, $matches)) {
foreach (range($matches[1], $matches[2]) as $assignPort) { $portBlock = range($matches[1], $matches[2]);
if (count($portBlock) > 2000) {
throw new DisplayException('Adding more than 2000 ports at once is not currently supported. Please consider using a smaller port range.');
}
foreach ($portBlock as $assignPort) {
$alloc = Models\Allocation::firstOrNew([ $alloc = Models\Allocation::firstOrNew([
'node' => $node->id, 'node' => $node->id,
'ip' => $ip, 'ip' => $ip,
@ -252,7 +258,6 @@ class NodeRepository
} }
DB::commit(); DB::commit();
// return true;
} catch (\Exception $ex) { } catch (\Exception $ex) {
DB::rollBack(); DB::rollBack();
throw $ex; throw $ex;
@ -277,6 +282,9 @@ class NodeRepository
// Delete Allocations // Delete Allocations
Models\Allocation::where('node', $node->id)->delete(); Models\Allocation::where('node', $node->id)->delete();
// Delete configure tokens
Models\NodeConfigurationToken::where('node', $node->id)->delete();
// Delete Node // Delete Node
$node->delete(); $node->delete();

View file

@ -73,7 +73,7 @@ class ServerRepository
// Validate Fields // Validate Fields
$validator = Validator::make($data, [ $validator = Validator::make($data, [
'owner' => 'bail|required', 'owner' => 'bail|required',
'name' => 'required|regex:/^([\w -]{4,35})$/', 'name' => 'required|regex:/^([\w .-]{1,200})$/',
'memory' => 'required|numeric|min:0', 'memory' => 'required|numeric|min:0',
'swap' => 'required|numeric|min:-1', 'swap' => 'required|numeric|min:-1',
'io' => 'required|numeric|min:10|max:1000', 'io' => 'required|numeric|min:10|max:1000',
@ -179,7 +179,7 @@ class ServerRepository
foreach ($variables as $variable) { foreach ($variables as $variable) {
// Is the variable required? // Is the variable required?
if (! $data['env_' . $variable->env_variable]) { if (! isset($data['env_' . $variable->env_variable])) {
if ($variable->required === 1) { if ($variable->required === 1) {
throw new DisplayException('A required service option variable field (env_' . $variable->env_variable . ') was missing from the request.'); throw new DisplayException('A required service option variable field (env_' . $variable->env_variable . ') was missing from the request.');
} }
@ -360,7 +360,7 @@ class ServerRepository
// Validate Fields // Validate Fields
$validator = Validator::make($data, [ $validator = Validator::make($data, [
'owner' => 'email|exists:users,email', 'owner' => 'email|exists:users,email',
'name' => 'regex:([\w -]{4,35})', 'name' => 'regex:([\w .-]{1,200})',
]); ]);
// Run validator, throw catchable and displayable exception if it fails. // Run validator, throw catchable and displayable exception if it fails.

View file

@ -117,6 +117,7 @@ class SubuserRepository
public function create($sid, array $data) public function create($sid, array $data)
{ {
$server = Models\Server::findOrFail($sid); $server = Models\Server::findOrFail($sid);
$validator = Validator::make($data, [ $validator = Validator::make($data, [
'permissions' => 'required|array', 'permissions' => 'required|array',
'email' => 'required|email', 'email' => 'required|email',
@ -140,6 +141,10 @@ class SubuserRepository
} catch (\Exception $ex) { } catch (\Exception $ex) {
throw $ex; throw $ex;
} }
} elseif ($server->owner === $user->id) {
throw new DisplayException('You cannot add the owner of a server as a subuser.');
} elseif (Models\Subuser::select('id')->where('user_id', $user->id)->where('server_id', $server->id)->first()) {
throw new DisplayException('A subuser with that email already exists for this server.');
} }
$uuid = new UuidService; $uuid = new UuidService;
@ -159,6 +164,7 @@ class SubuserRepository
if (! is_null($this->permissions[$permission])) { if (! is_null($this->permissions[$permission])) {
array_push($daemonPermissions, $this->permissions[$permission]); array_push($daemonPermissions, $this->permissions[$permission]);
} }
$model = new Models\Permission; $model = new Models\Permission;
$model->fill([ $model->fill([
'user_id' => $user->id, 'user_id' => $user->id,

View file

@ -26,7 +26,8 @@
"mtdowling/cron-expression": "1.1.0", "mtdowling/cron-expression": "1.1.0",
"dingo/api": "1.0.0-beta6", "dingo/api": "1.0.0-beta6",
"aws/aws-sdk-php": "3.19.20", "aws/aws-sdk-php": "3.19.20",
"predis/predis": "1.1.1" "predis/predis": "1.1.1",
"laracasts/utilities": "2.1.0"
}, },
"require-dev": { "require-dev": {
"fzaninotto/faker": "~1.4", "fzaninotto/faker": "~1.4",

View file

@ -158,6 +158,7 @@ return [
igaster\laravelTheme\themeServiceProvider::class, igaster\laravelTheme\themeServiceProvider::class,
Prologue\Alerts\AlertsServiceProvider::class, Prologue\Alerts\AlertsServiceProvider::class,
Krucas\Settings\Providers\SettingsServiceProvider::class, Krucas\Settings\Providers\SettingsServiceProvider::class,
Laracasts\Utilities\JavaScript\JavaScriptServiceProvider::class,
], ],
@ -198,6 +199,7 @@ return [
'Hash' => Illuminate\Support\Facades\Hash::class, 'Hash' => Illuminate\Support\Facades\Hash::class,
'Input' => Illuminate\Support\Facades\Input::class, 'Input' => Illuminate\Support\Facades\Input::class,
'Inspiring' => Illuminate\Foundation\Inspiring::class, 'Inspiring' => Illuminate\Foundation\Inspiring::class,
'Javascript' => Laracasts\Utilities\JavaScript\JavaScriptFacade::class,
'Lang' => Illuminate\Support\Facades\Lang::class, 'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class, 'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class, 'Mail' => Illuminate\Support\Facades\Mail::class,

32
config/javascript.php Normal file
View file

@ -0,0 +1,32 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| View to Bind JavaScript Vars To
|--------------------------------------------------------------------------
|
| Set this value to the name of the view (or partial) that
| you want to prepend all JavaScript variables to.
| This can be a single view, or an array of views.
| Example: 'footer' or ['footer', 'bottom']
|
*/
'bind_js_vars_to_this_view' => [
'layouts.master',
],
/*
|--------------------------------------------------------------------------
| JavaScript Namespace
|--------------------------------------------------------------------------
|
| By default, we'll add variables to the global window object. However,
| it's recommended that you change this to some namespace - anything.
| That way, you can access vars, like "SomeNamespace.someVariable."
|
*/
'js_namespace' => 'Pterodactyl',
];

View file

@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
class FixMisnamedOptionTag extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::transaction(function () {
DB::table('service_options')->where([
['name', 'Sponge (SpongeVanilla)'],
['tag', 'spigot'],
['docker_image', 'quay.io/pterodactyl/minecraft:sponge'],
])->update([
'tag' => 'sponge',
]);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::table('service_options')->where([
['name', 'Sponge (SpongeVanilla)'],
['tag', 'sponge'],
['docker_image', 'quay.io/pterodactyl/minecraft:sponge'],
])->update([
'tag' => 'spigot',
]);
}
}

View file

@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateNodeConfigurationTokensTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('node_configuration_tokens', function (Blueprint $table) {
$table->increments('id');
$table->char('token', 32);
$table->timestamp('expires_at');
$table->integer('node')->unsigned();
$table->foreign('node')->references('id')->on('nodes');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('node_configuration_tokens');
}
}

View file

@ -90,7 +90,7 @@ class MinecraftServiceTableSeeder extends Seeder
'parent_service' => $this->service->id, 'parent_service' => $this->service->id,
'name' => 'Sponge (SpongeVanilla)', 'name' => 'Sponge (SpongeVanilla)',
'description' => 'SpongeVanilla is the SpongeAPI implementation for Vanilla Minecraft.', 'description' => 'SpongeVanilla is the SpongeAPI implementation for Vanilla Minecraft.',
'tag' => 'spigot', 'tag' => 'sponge',
'docker_image' => 'quay.io/pterodactyl/minecraft:sponge', 'docker_image' => 'quay.io/pterodactyl/minecraft:sponge',
'executable' => null, 'executable' => null,
'startup' => null, 'startup' => null,

11
package.json Normal file
View file

@ -0,0 +1,11 @@
{
"name": "pterodactyl-panel",
"devDependencies": {
"babel-cli": "6.18.0",
"babel-plugin-transform-strict-mode": "^6.18.0",
"babel-preset-es2015": "6.18.0"
},
"scripts": {
"build": "./node_modules/babel-cli/bin/babel.js public/js/files --source-maps --out-file public/js/filemanager.min.js"
}
}

5
public/js/filemanager.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

394
public/js/files/actions.js Normal file
View file

@ -0,0 +1,394 @@
"use strict";
// Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
class ActionsClass {
constructor(element, menu) {
this.element = element;
this.menu = menu;
}
destroy() {
this.element = undefined;
}
folder() {
const nameBlock = $(this.element).find('td[data-identifier="name"]');
const currentName = decodeURIComponent(nameBlock.attr('data-name'));
const currentPath = decodeURIComponent(nameBlock.data('path'));
let inputValue = `${currentPath}${currentName}/`;
if ($(this.element).data('type') === 'file') {
inputValue = currentPath;
}
swal({
type: 'input',
title: 'Create Folder',
text: 'Please enter the path and folder name below.',
showCancelButton: true,
showConfirmButton: true,
closeOnConfirm: false,
showLoaderOnConfirm: true,
inputValue: inputValue
}, (val) => {
$.ajax({
type: 'POST',
headers: {
'X-Access-Token': Pterodactyl.server.daemonSecret,
'X-Access-Server': Pterodactyl.server.uuid,
},
contentType: 'application/json; charset=utf-8',
url: `${Pterodactyl.node.scheme}://${Pterodactyl.node.fqdn}:${Pterodactyl.node.daemonListen}/server/file/folder`,
timeout: 10000,
data: JSON.stringify({
path: val,
}),
}).done(data => {
swal.close();
Files.list();
}).fail(jqXHR => {
console.error(jqXHR);
var error = 'An error occured while trying to process this request.';
if (typeof jqXHR.responseJSON !== 'undefined' && typeof jqXHR.responseJSON.error !== 'undefined') {
error = jqXHR.responseJSON.error;
}
swal({
type: 'error',
title: '',
text: error,
});
});
});
}
move() {
const nameBlock = $(this.element).find('td[data-identifier="name"]');
const currentName = decodeURIComponent(nameBlock.attr('data-name'));
const currentPath = decodeURIComponent(nameBlock.data('path'));
swal({
type: 'input',
title: 'Move File',
text: 'Please enter the new path for the file below.',
showCancelButton: true,
showConfirmButton: true,
closeOnConfirm: false,
showLoaderOnConfirm: true,
inputValue: `${currentPath}${currentName}`,
}, (val) => {
$.ajax({
type: 'POST',
headers: {
'X-Access-Token': Pterodactyl.server.daemonSecret,
'X-Access-Server': Pterodactyl.server.uuid,
},
contentType: 'application/json; charset=utf-8',
url: `${Pterodactyl.node.scheme}://${Pterodactyl.node.fqdn}:${Pterodactyl.node.daemonListen}/server/file/move`,
timeout: 10000,
data: JSON.stringify({
from: `${currentPath}${currentName}`,
to: `${val}`,
}),
}).done(data => {
nameBlock.parent().addClass('warning').delay(200).fadeOut();
swal.close();
}).fail(jqXHR => {
console.error(jqXHR);
var error = 'An error occured while trying to process this request.';
if (typeof jqXHR.responseJSON !== 'undefined' && typeof jqXHR.responseJSON.error !== 'undefined') {
error = jqXHR.responseJSON.error;
}
swal({
type: 'error',
title: '',
text: error,
});
});
});
}
rename() {
const nameBlock = $(this.element).find('td[data-identifier="name"]');
const currentLink = nameBlock.find('a');
const currentName = decodeURIComponent(nameBlock.attr('data-name'));
const attachEditor = `
<input class="form-control input-sm" type="text" value="${currentName}" />
<span class="input-loader"><i class="fa fa-refresh fa-spin fa-fw"></i></span>
`;
nameBlock.html(attachEditor);
const inputField = nameBlock.find('input');
const inputLoader = nameBlock.find('.input-loader');
inputField.focus();
inputField.on('blur keydown', e => {
// Save Field
if (
(e.type === 'keydown' && e.which === 27)
|| e.type === 'blur'
|| (e.type === 'keydown' && e.which === 13 && currentName === inputField.val())
) {
if (!_.isEmpty(currentLink)) {
nameBlock.html(currentLink);
} else {
nameBlock.html(currentName);
}
inputField.remove();
ContextMenu.unbind().run();
return;
}
if (e.type === 'keydown' && e.which !== 13) return;
inputLoader.show();
const currentPath = decodeURIComponent(nameBlock.data('path'));
$.ajax({
type: 'POST',
headers: {
'X-Access-Token': Pterodactyl.server.daemonSecret,
'X-Access-Server': Pterodactyl.server.uuid,
},
contentType: 'application/json; charset=utf-8',
url: `${Pterodactyl.node.scheme}://${Pterodactyl.node.fqdn}:${Pterodactyl.node.daemonListen}/server/file/rename`,
timeout: 10000,
data: JSON.stringify({
from: `${currentPath}${currentName}`,
to: `${currentPath}${inputField.val()}`,
}),
}).done(data => {
nameBlock.attr('data-name', inputField.val());
if (!_.isEmpty(currentLink)) {
let newLink = currentLink.attr('href');
if (nameBlock.parent().data('type') !== 'folder') {
newLink = newLink.substr(0, newLink.lastIndexOf('/')) + '/' + inputField.val();
}
currentLink.attr('href', newLink);
nameBlock.html(
currentLink.html(inputField.val())
);
} else {
nameBlock.html(inputField.val());
}
inputField.remove();
}).fail(jqXHR => {
console.error(jqXHR);
var error = 'An error occured while trying to process this request.';
if (typeof jqXHR.responseJSON !== 'undefined' && typeof jqXHR.responseJSON.error !== 'undefined') {
error = jqXHR.responseJSON.error;
}
nameBlock.addClass('has-error').delay(2000).queue(() => {
nameBlock.removeClass('has-error').dequeue();
});
inputField.popover({
animation: true,
placement: 'top',
content: error,
title: 'Save Error'
}).popover('show');
}).always(() => {
inputLoader.remove();
ContextMenu.unbind().run();
});
});
}
copy() {
const nameBlock = $(this.element).find('td[data-identifier="name"]');
const currentName = decodeURIComponent(nameBlock.attr('data-name'));
const currentPath = decodeURIComponent(nameBlock.data('path'));
swal({
type: 'input',
title: 'Copy File',
text: 'Please enter the new path for the copied file below.',
showCancelButton: true,
showConfirmButton: true,
closeOnConfirm: false,
showLoaderOnConfirm: true,
inputValue: `${currentPath}${currentName}`,
}, (val) => {
$.ajax({
type: 'POST',
headers: {
'X-Access-Token': Pterodactyl.server.daemonSecret,
'X-Access-Server': Pterodactyl.server.uuid,
},
contentType: 'application/json; charset=utf-8',
url: `${Pterodactyl.node.scheme}://${Pterodactyl.node.fqdn}:${Pterodactyl.node.daemonListen}/server/file/copy`,
timeout: 10000,
data: JSON.stringify({
from: `${currentPath}${currentName}`,
to: `${val}`,
}),
}).done(data => {
swal({
type: 'success',
title: '',
text: 'File successfully copied.'
});
Files.list();
}).fail(jqXHR => {
console.error(jqXHR);
var error = 'An error occured while trying to process this request.';
if (typeof jqXHR.responseJSON !== 'undefined' && typeof jqXHR.responseJSON.error !== 'undefined') {
error = jqXHR.responseJSON.error;
}
swal({
type: 'error',
title: '',
text: error,
});
});
});
}
download() {
const nameBlock = $(this.element).find('td[data-identifier="name"]');
const fileName = decodeURIComponent(nameBlock.attr('data-name'));
const filePath = decodeURIComponent(nameBlock.data('path'));
window.location = `/server/${Pterodactyl.server.uuidShort}/files/download/${filePath}${fileName}`;
}
delete() {
const nameBlock = $(this.element).find('td[data-identifier="name"]');
const delPath = decodeURIComponent(nameBlock.data('path'));
const delName = decodeURIComponent(nameBlock.data('name'));
swal({
type: 'warning',
title: '',
text: 'Are you sure you want to delete <code>' + delName + '</code>? There is <strong>no</strong> reversing this action.',
html: true,
showCancelButton: true,
showConfirmButton: true,
closeOnConfirm: false,
showLoaderOnConfirm: true
}, () => {
$.ajax({
type: 'DELETE',
url: `${Pterodactyl.node.scheme}://${Pterodactyl.node.fqdn}:${Pterodactyl.node.daemonListen}/server/file/f/${delPath}${delName}`,
headers: {
'X-Access-Token': Pterodactyl.server.daemonSecret,
'X-Access-Server': Pterodactyl.server.uuid,
}
}).done(data => {
nameBlock.parent().addClass('warning').delay(200).fadeOut();
swal({
type: 'success',
title: 'File Deleted'
});
}).fail(jqXHR => {
console.error(jqXHR);
swal({
type: 'error',
title: 'Whoops!',
html: true,
text: 'An error occured while attempting to delete this file. Please try again.',
});
});
});
}
decompress() {
const nameBlock = $(this.element).find('td[data-identifier="name"]');
const compPath = decodeURIComponent(nameBlock.data('path'));
const compName = decodeURIComponent(nameBlock.data('name'));
swal({
title: '<i class="fa fa-refresh fa-spin"></i> Decompressing...',
text: 'This might take a few seconds to complete.',
html: true,
allowOutsideClick: false,
allowEscapeKey: false,
showConfirmButton: false,
});
$.ajax({
type: 'POST',
url: `${Pterodactyl.node.scheme}://${Pterodactyl.node.fqdn}:${Pterodactyl.node.daemonListen}/server/file/decompress`,
headers: {
'X-Access-Token': Pterodactyl.server.daemonSecret,
'X-Access-Server': Pterodactyl.server.uuid,
},
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({
files: `${compPath}${compName}`
})
}).done(data => {
swal.close();
Files.list(compPath);
}).fail(jqXHR => {
console.error(jqXHR);
var error = 'An error occured while trying to process this request.';
if (typeof jqXHR.responseJSON !== 'undefined' && typeof jqXHR.responseJSON.error !== 'undefined') {
error = jqXHR.responseJSON.error;
}
swal({
type: 'error',
title: 'Whoops!',
html: true,
text: error
});
});
}
compress() {
const nameBlock = $(this.element).find('td[data-identifier="name"]');
const compPath = decodeURIComponent(nameBlock.data('path'));
const compName = decodeURIComponent(nameBlock.data('name'));
$.ajax({
type: 'POST',
url: `${Pterodactyl.node.scheme}://${Pterodactyl.node.fqdn}:${Pterodactyl.node.daemonListen}/server/file/compress`,
headers: {
'X-Access-Token': Pterodactyl.server.daemonSecret,
'X-Access-Server': Pterodactyl.server.uuid,
},
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({
files: `${compPath}${compName}`,
to: compPath.toString()
})
}).done(data => {
Files.list(compPath, err => {
if (err) return;
const fileListing = $('#file_listing').find(`[data-name="${data.saved_as}"]`).parent();
fileListing.addClass('success pulsate').delay(3000).queue(() => {
fileListing.removeClass('success pulsate').dequeue();
});
});
}).fail(jqXHR => {
console.error(jqXHR);
var error = 'An error occured while trying to process this request.';
if (typeof jqXHR.responseJSON !== 'undefined' && typeof jqXHR.responseJSON.error !== 'undefined') {
error = jqXHR.responseJSON.error;
}
swal({
type: 'error',
title: 'Whoops!',
html: true,
text: error
});
});
}
}

View file

@ -40,19 +40,46 @@ class ContextMenuClass {
const currentPath = decodeURIComponent(nameBlock.data('path')); const currentPath = decodeURIComponent(nameBlock.data('path'));
newFilePath = `${currentPath}${currentName}`; newFilePath = `${currentPath}${currentName}`;
} }
return '<ul id="fileOptionMenu" class="dropdown-menu" role="menu" style="display:none" > \
@can('move-files', $server)<li data-action="move"><a tabindex="-1" href="#"><i class="fa fa-fw fa-arrow-right"></i> Move</a></li>@endcan \ let buildMenu = '<ul id="fileOptionMenu" class="dropdown-menu" role="menu" style="display:none" >';
@can('copy-files', $server)<li data-action="copy"><a tabindex="-1" href="#"><i class="fa fa-fw fa-clone"></i> Copy</a></li>@endcan \
@can('move-files', $server)<li data-action="rename"><a tabindex="-1" href="#"><i class="fa fa-fw fa-pencil-square-o"></i> Rename</a></li>@endcan \ if (Pterodactyl.permissions.moveFiles) {
@can('compress-files', $server)<li data-action="compress" class="hidden"><a tabindex="-1" href="#"><i class="fa fa-fw fa-file-archive-o"></i> Compress</a></li>@endcan \ buildMenu += '<li data-action="rename"><a tabindex="-1" href="#"><i class="fa fa-fw fa-pencil-square-o"></i> Rename</a></li> \
@can('decompress-files', $server)<li data-action="decompress" class="hidden"><a tabindex="-1" href="#"><i class="fa fa-fw fa-expand"></i> Decompress</a></li>@endcan \ <li data-action="move"><a tabindex="-1" href="#"><i class="fa fa-fw fa-arrow-right"></i> Move</a></li>';
<li class="divider"></li> \ }
@can('create-files', $server)<li data-action="file"><a href="/server/{{ $server->uuidShort }}/files/add/?dir=' + newFilePath + '" class="text-muted"><i class="fa fa-fw fa-plus"></i> New File</a></li> \
<li data-action="folder"><a tabindex="-1" href="#"><i class="fa fa-fw fa-folder"></i> New Folder</a></li>@endcan \ if (Pterodactyl.permissions.copyFiles) {
<li class="divider"></li> \ buildMenu += '<li data-action="copy"><a tabindex="-1" href="#"><i class="fa fa-fw fa-clone"></i> Copy</a></li>';
@can('download-files', $server)<li data-action="download" class="hidden"><a tabindex="-1" href="#"><i class="fa fa-fw fa-download"></i> Download</a></li>@endcan \ }
@can('delete-files', $server)<li data-action="delete" class="bg-danger"><a tabindex="-1" href="#"><i class="fa fa-fw fa-trash-o"></i> Delete</a></li>@endcan \
</ul>'; if (Pterodactyl.permissions.compressFiles) {
buildMenu += '<li data-action="compress" class="hidden"><a tabindex="-1" href="#"><i class="fa fa-fw fa-file-archive-o"></i> Compress</a></li>';
}
if (Pterodactyl.permissions.decompressFiles) {
buildMenu += '<li data-action="decompress" class="hidden"><a tabindex="-1" href="#"><i class="fa fa-fw fa-expand"></i> Decompress</a></li>';
}
if (Pterodactyl.permissions.createFiles) {
buildMenu += '<li class="divider"></li> \
<li data-action="file"><a href="/server/'+ Pterodactyl.server.uuidShort +'/files/add/?dir=' + newFilePath + '" class="text-muted"><i class="fa fa-fw fa-plus"></i> New File</a></li> \
<li data-action="folder"><a tabindex="-1" href="#"><i class="fa fa-fw fa-folder"></i> New Folder</a></li>';
}
if (Pterodactyl.permissions.downloadFiles || Pterodactyl.permissions.deleteFiles) {
buildMenu += '<li class="divider"></li>';
}
if (Pterodactyl.permissions.downloadFiles) {
buildMenu += '<li data-action="download" class="hidden"><a tabindex="-1" href="#"><i class="fa fa-fw fa-download"></i> Download</a></li>';
}
if (Pterodactyl.permissions.deleteFiles) {
buildMenu += '<li data-action="delete" class="bg-danger"><a tabindex="-1" href="#"><i class="fa fa-fw fa-trash-o"></i> Delete</a></li>';
}
buildMenu += '</ul>';
return buildMenu;
} }
rightClick() { rightClick() {
@ -82,79 +109,69 @@ class ContextMenuClass {
this.activeLine = parent; this.activeLine = parent;
this.activeLine.addClass('active'); this.activeLine.addClass('active');
@can('download-files', $server)
if (parent.data('type') === 'file') {
$(menu).find('li[data-action="download"]').removeClass('hidden');
}
@endcan
@can('compress-files', $server)
if (parent.data('type') === 'folder') {
$(menu).find('li[data-action="compress"]').removeClass('hidden');
}
@endcan
@can('decompress-files', $server)
if (_.without(['application/zip', 'application/gzip', 'application/x-gzip'], parent.data('mime')).length < 3) {
$(menu).find('li[data-action="decompress"]').removeClass('hidden');
}
@endcan
// Handle Events // Handle Events
const Actions = new ActionsClass(parent, menu); const Actions = new ActionsClass(parent, menu);
@can('move-files', $server) if (Pterodactyl.permissions.moveFiles) {
$(menu).find('li[data-action="move"]').unbind().on('click', e => { $(menu).find('li[data-action="move"]').unbind().on('click', e => {
e.preventDefault(); e.preventDefault();
Actions.move(); Actions.move();
}); });
@endcan
@can('copy-files', $server)
$(menu).find('li[data-action="copy"]').unbind().on('click', e => {
e.preventDefault();
Actions.copy();
});
@endcan
@can('move-files', $server)
$(menu).find('li[data-action="rename"]').unbind().on('click', e => { $(menu).find('li[data-action="rename"]').unbind().on('click', e => {
e.preventDefault(); e.preventDefault();
Actions.rename(); Actions.rename();
}); });
@endcan }
@can('compress-files', $server) if (Pterodactyl.permissions.copyFiles) {
$(menu).find('li[data-action="copy"]').unbind().on('click', e => {
e.preventDefault();
Actions.copy();
});
}
if (Pterodactyl.permissions.compressFiles) {
if (parent.data('type') === 'folder') {
$(menu).find('li[data-action="compress"]').removeClass('hidden');
}
$(menu).find('li[data-action="compress"]').unbind().on('click', e => { $(menu).find('li[data-action="compress"]').unbind().on('click', e => {
e.preventDefault(); e.preventDefault();
Actions.compress(); Actions.compress();
}); });
@endcan }
@can('decompress-files', $server) if (Pterodactyl.permissions.decompressFiles) {
if (_.without(['application/zip', 'application/gzip', 'application/x-gzip'], parent.data('mime')).length < 3) {
$(menu).find('li[data-action="decompress"]').removeClass('hidden');
}
$(menu).find('li[data-action="decompress"]').unbind().on('click', e => { $(menu).find('li[data-action="decompress"]').unbind().on('click', e => {
e.preventDefault(); e.preventDefault();
Actions.decompress(); Actions.decompress();
}); });
@endcan }
@can('create-files', $server) if (Pterodactyl.permissions.createFiles) {
$(menu).find('li[data-action="folder"]').unbind().on('click', e => { $(menu).find('li[data-action="folder"]').unbind().on('click', e => {
e.preventDefault(); e.preventDefault();
Actions.folder(); Actions.folder();
}); });
@endcan }
@can('download-files', $server) if (Pterodactyl.permissions.downloadFiles) {
if (parent.data('type') === 'file') {
$(menu).find('li[data-action="download"]').removeClass('hidden');
}
$(menu).find('li[data-action="download"]').unbind().on('click', e => { $(menu).find('li[data-action="download"]').unbind().on('click', e => {
e.preventDefault(); e.preventDefault();
Actions.download(); Actions.download();
}); });
@endcan }
if (Pterodactyl.permissions.deleteFiles) {
$(menu).find('li[data-action="delete"]').unbind().on('click', e => { $(menu).find('li[data-action="delete"]').unbind().on('click', e => {
e.preventDefault(); e.preventDefault();
Actions.delete(); Actions.delete();
}); });
}
$(window).on('click', () => { $(window).on('click', () => {
$(menu).remove(); $(menu).remove();

View file

@ -32,9 +32,9 @@ class FileManager {
this.loader(true); this.loader(true);
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
url: '{{ route('server.files.directory-list', $server->uuidShort) }}', url: Pterodactyl.meta.directoryList,
headers: { headers: {
'X-CSRF-Token': '{{ csrf_token() }}', 'X-CSRF-Token': Pterodactyl.meta.csrftoken,
}, },
data: { data: {
directory: path, directory: path,

View file

@ -1,22 +1,22 @@
{{-- Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com> --}} // Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
//
{{-- Permission is hereby granted, free of charge, to any person obtaining a copy --}} // Permission is hereby granted, free of charge, to any person obtaining a copy
{{-- of this software and associated documentation files (the "Software"), to deal --}} // of this software and associated documentation files (the "Software"), to deal
{{-- in the Software without restriction, including without limitation the rights --}} // in the Software without restriction, including without limitation the rights
{{-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell --}} // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
{{-- copies of the Software, and to permit persons to whom the Software is --}} // copies of the Software, and to permit persons to whom the Software is
{{-- furnished to do so, subject to the following conditions: --}} // furnished to do so, subject to the following conditions:
//
{{-- The above copyright notice and this permission notice shall be included in all --}} // The above copyright notice and this permission notice shall be included in all
{{-- copies or substantial portions of the Software. --}} // copies or substantial portions of the Software.
//
{{-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR --}} // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
{{-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, --}} // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
{{-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE --}} // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
{{-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER --}} // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
{{-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, --}} // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
{{-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE --}} // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
{{-- SOFTWARE. --}} // SOFTWARE.
$(window).load(function () { $(window).load(function () {
socket.on('console', function (data) { socket.on('console', function (data) {
if (data.line.indexOf('You need to agree to the EULA in order to run the server') > -1) { if (data.line.indexOf('You need to agree to the EULA in order to run the server') > -1) {
@ -34,8 +34,8 @@ $(window).load(function () {
}, function () { }, function () {
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
url: '{{ route('server.files.save', $server->uuidShort) }}', url: Pterodactyl.meta.saveFile,
headers: { 'X-CSRF-Token': '{{ csrf_token() }}' }, headers: { 'X-CSRF-Token': Pterodactyl.meta.csrfToken, },
data: { data: {
file: 'eula.txt', file: 'eula.txt',
contents: 'eula=true' contents: 'eula=true'

View file

@ -1,49 +1,13 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
* Some Modifications (c) 2015 Dylan Seidt <dylan.seidt@gmail.com>
* Translated by Jakob Schrettenbrunner <dev@schrej.net>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ 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' => 'Die Zugangsdaten sind ungültig.',
'throttle' => 'Zu viele Loginversuche. Bitte in :seconds Sekunden erneut versuchen.',
'errorencountered' => 'Während der Anfrage ist ein Fehler aufgetreten.',
'resetpassword' => 'Passwort zurücksetzen',
'confirmpassword' => 'Passwort bestätigen', 'confirmpassword' => 'Passwort bestätigen',
'sendlink' => 'Passwort Rücksetzungslink anfordern.',
'emailsent' => 'Die E-Mail mit dem Rücksetzungslink ist unterwegs.', 'emailsent' => 'Die E-Mail mit dem Rücksetzungslink ist unterwegs.',
'errorencountered' => 'Während der Anfrage ist ein Fehler aufgetreten.',
'failed' => 'Die Zugangsdaten sind ungültig.',
'remeberme' => 'Angemeldet bleiben', 'remeberme' => 'Angemeldet bleiben',
'resetpassword' => 'Passwort zurücksetzen',
'sendlink' => 'Passwort Rücksetzungslink anfordern.',
'throttle' => 'Zu viele Loginversuche. Bitte in :seconds Sekunden erneut versuchen.',
'totp_failed' => 'Das TOTP Token ist ungültig. Bitte stelle sicher dass das generierte Token gültig ist.', 'totp_failed' => 'Das TOTP Token ist ungültig. Bitte stelle sicher dass das generierte Token gültig ist.',
]; ];

View file

@ -1,72 +1,31 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
* Some Modifications (c) 2015 Dylan Seidt <dylan.seidt@gmail.com>
* Translated by Jakob Schrettenbrunner <dev@schrej.net>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Base Pterodactyl Language
|--------------------------------------------------------------------------
|
| These base strings are used throughout the front-end of Pterodactyl but
| not on pages that are used when viewing a server. Those keys are in server.php
|
*/
'validation_error' => 'Beim validieren der Daten ist ein Fehler aufgetreten:',
'confirm' => 'Bist du sicher?',
'failed' => 'Diese Zugangsdaten sind ungültig.',
'throttle' => 'Zu viele Loginversuche. Bitte in :seconds Sekunden erneut versuchen.',
'view_as_admin' => 'Du siehst die Serverliste als Administrator. Daher werden alle registrierten Server angezeigt. Server deren Eigentümer du bist sind mit einem blauen Punkt links neben dem Namen markiert.',
'server_name' => 'Server Name',
'no_servers' => 'Aktuell hast du keinen Zugriff auf irgendwelche server.',
'form_error' => 'Folgende Fehler wurden beim Verarbeiten der Anfrage festgestellt.',
'password_req' => 'Passwörter müssen folgende Anforderungen erfüllen: mindestens ein Klein- und Großbuchstabe, eine Ziffer und eine Länge von mindestens 8 Zeichen.',
'account' => [ 'account' => [
'totp_header' => 'Zwei-Faktor Authentifizierung',
'totp_qr' => 'TOTP QR Code',
'totp_enable_help' => 'Anscheinend hast du Zwei-Faktor Authentifizierung deaktiviert. Diese Authentifizierungsmethode schützt dein Konto zusätzlich vor unauthorisierten Zugriffen. Wenn du es aktivierst wirst du bei jedem Login dazu aufgefordert ein TOTP Token einzugeben bevor du dich einloggen kannst. Dieses Token kann mit einem Smartphone oder anderen TOTP unterstützenden Gerät erzeugt werden.',
'totp_apps' => 'Du benötigst eine TOTP unterstützende App (z.B. Google Authenticator, DUO Mobile, Authy, Enpass) um diese Option zu nutzen.',
'totp_enable' => 'Aktiviere Zwei-Faktor Authentifizierung',
'totp_disable' => 'Deaktiviere Zwei-Faktor Authentifizierung',
'totp_token' => 'TOTP Token',
'totp_disable_help' => 'Um Zwei-Faktor Authentifizierung zu deaktiveren musst du ein gültiges TOTP Token eingeben. Danach wird Zwei-Faktor Authentifizierung deaktivert.',
'totp_checkpoint_help' => 'Bitte verifiziere deine TOTP Einstellungen indem du den QR Code mit einer App auf deinem Smartphone scannst und gebe die 6 Stellige Nummer im Eingabefeld unten ein. Drücke die Eingabetaste wenn du fertig bist.',
'totp_enabled' => 'Zwei-Faktor Authentifizierung wurde erfolgreich aktiviert. Bitte schließe dieses Popup um den Vorgang abzuschließen.',
'totp_enabled_error' => 'Das angegebene TOTP Token konnte nicht verifiziert werden. Bitte versuche es noch einmal.',
'email_password' => 'Email Passwort',
'update_user' => 'Benutzer aktualisieren',
'delete_user' => 'Benutzer löschen', 'delete_user' => 'Benutzer löschen',
'update_email' => 'Email aktualisieren', 'email_password' => 'Email Passwort',
'new_email' => 'Neue Email', 'new_email' => 'Neue Email',
'new_password' => 'Neues Passwort', 'new_password' => 'Neues Passwort',
'totp_apps' => 'Du benötigst eine TOTP unterstützende App (z.B. Google Authenticator, DUO Mobile, Authy, Enpass) um diese Option zu nutzen.',
'totp_checkpoint_help' => 'Bitte verifiziere deine TOTP Einstellungen indem du den QR Code mit einer App auf deinem Smartphone scannst und gebe die 6 Stellige Nummer im Eingabefeld unten ein. Drücke die Eingabetaste wenn du fertig bist.',
'totp_disable' => 'Deaktiviere Zwei-Faktor Authentifizierung',
'totp_disable_help' => 'Um Zwei-Faktor Authentifizierung zu deaktiveren musst du ein gültiges TOTP Token eingeben. Danach wird Zwei-Faktor Authentifizierung deaktivert.',
'totp_enable' => 'Aktiviere Zwei-Faktor Authentifizierung',
'totp_enabled' => 'Zwei-Faktor Authentifizierung wurde erfolgreich aktiviert. Bitte schließe dieses Popup um den Vorgang abzuschließen.',
'totp_enabled_error' => 'Das angegebene TOTP Token konnte nicht verifiziert werden. Bitte versuche es noch einmal.',
'totp_enable_help' => 'Anscheinend hast du Zwei-Faktor Authentifizierung deaktiviert. Diese Authentifizierungsmethode schützt dein Konto zusätzlich vor unauthorisierten Zugriffen. Wenn du es aktivierst wirst du bei jedem Login dazu aufgefordert ein TOTP Token einzugeben bevor du dich einloggen kannst. Dieses Token kann mit einem Smartphone oder anderen TOTP unterstützenden Gerät erzeugt werden.',
'totp_header' => 'Zwei-Faktor Authentifizierung',
'totp_qr' => 'TOTP QR Code',
'totp_token' => 'TOTP Token',
'update_email' => 'Email aktualisieren',
'update_pass' => 'Passwort aktualisieren', 'update_pass' => 'Passwort aktualisieren',
'update_user' => 'Benutzer aktualisieren',
], ],
'confirm' => 'Bist du sicher?',
'form_error' => 'Folgende Fehler wurden beim Verarbeiten der Anfrage festgestellt.',
'no_servers' => 'Aktuell hast du keinen Zugriff auf irgendwelche server.',
'password_req' => 'Passwörter müssen folgende Anforderungen erfüllen: mindestens ein Klein- und Großbuchstabe, eine Ziffer und eine Länge von mindestens 8 Zeichen.',
'server_name' => 'Server Name',
'validation_error' => 'Beim validieren der Daten ist ein Fehler aufgetreten:',
'view_as_admin' => 'Du siehst die Serverliste als Administrator. Daher werden alle registrierten Server angezeigt. Server deren Eigentümer du bist sind mit einem blauen Punkt links neben dem Namen markiert.',
]; ];

View file

@ -1,52 +1,17 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
* Translated by Jakob Schrettenbrunner <dev@schrej.net>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ 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; Vorherige',
'next' => 'Nächste &raquo;', 'next' => 'Nächste &raquo;',
'previous' => '&laquo; Vorherige',
'sidebar' => [ 'sidebar' => [
'account_controls' => 'Account Verwaltung', 'account_controls' => 'Account Verwaltung',
'account_settings' => 'Account Einstellungen',
'account_security' => 'Account Sicherheit', 'account_security' => 'Account Sicherheit',
'server_controls' => 'Server Verwaltung', 'account_settings' => 'Account Einstellungen',
'servers' => 'Deine Server',
'overview' => 'Server Übersicht',
'files' => 'Datei Manager', 'files' => 'Datei Manager',
'subusers' => 'Sub-Benutzer verwalten',
'manage' => 'Server verwalten', 'manage' => 'Server verwalten',
'overview' => 'Server Übersicht',
'servers' => 'Deine Server',
'server_controls' => 'Server Verwaltung',
'subusers' => 'Sub-Benutzer verwalten',
], ],
]; ];

View file

@ -1,44 +1,9 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
* Translated by Jakob Schrettenbrunner <dev@schrej.net>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Password Reminder 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.
|
*/
'password' => 'Dein Passwort muss länger als 6 Zeichen sein und mit der Wiederolung übereinstimmen.', 'password' => 'Dein Passwort muss länger als 6 Zeichen sein und mit der Wiederolung übereinstimmen.',
'reset' => 'Dein Passwort wurde zurückgesetzt!', 'reset' => 'Dein Passwort wurde zurückgesetzt!',
'sent' => 'Du erhältst eine E-Mail mit dem Zurücksetzungslink!', 'sent' => 'Du erhältst eine E-Mail mit dem Zurücksetzungslink!',
'token' => 'Dieses Paswortrücksetzungstoken ist ungültig.', 'token' => 'Dieses Paswortrücksetzungstoken ist ungültig.',
'user' => 'Wir können keinen Nutzer mit dieser Email Adresse finden.', 'user' => 'Wir können keinen Nutzer mit dieser Email Adresse finden.',
]; ];

View file

@ -1,60 +1,29 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
* Some Modifications (c) 2015 Dylan Seidt <dylan.seidt@gmail.com>
* Translated by Jakob Schrettenbrunner <dev@schrej.net>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Pterodactyl Language Strings for /server/{server} Routes
|--------------------------------------------------------------------------
*/
'ajax' => [ 'ajax' => [
'socket_error' => 'Wir konnten uns nicht zum Socket.IO server verbinden. Möglicherweise bestehen Netzwerkprobleme. Das Panel funktioniert unter Umständen nicht wie erwartet.', 'socket_error' => 'Wir konnten uns nicht zum Socket.IO server verbinden. Möglicherweise bestehen Netzwerkprobleme. Das Panel funktioniert unter Umständen nicht wie erwartet.',
'socket_status' => 'Der status dieses Servers hat sich geändert zu:', 'socket_status' => 'Der status dieses Servers hat sich geändert zu:',
'socket_status_crashed' => 'Dieser Server wurde als ABGESTÜRZT erkannt.', 'socket_status_crashed' => 'Dieser Server wurde als ABGESTÜRZT erkannt.',
], ],
'files' => [
'back' => 'Zurück zum Dateimanager',
'loading' => 'Lade Dateibaum, das könnte ein paar Sekunden dauern...',
'saved' => 'Datei erfolgreich gespeichert.',
'yaml_notice' => 'Du bearbeitest gearde eine YAML Datei. Diese Dateien benötigen Leerzeichen. Wir haben dafür gesorgt dass Tabs automatisch durch :dropdown Leerzeichen ersetzt werden.',
],
'index' => [ 'index' => [
'add_new' => 'Neuen Server hinzufügen', 'add_new' => 'Neuen Server hinzufügen',
'memory_use' => 'Speicherverbrauch',
'cpu_use' => 'CPU Verbrauch',
'xaxis' => 'Zeit (2s Abstand)',
'server_info' => 'Server Information',
'connection' => 'Standardverbindung',
'mem_limit' => 'Speichergrenze',
'disk_space' => 'Festplattenspeicher',
'control' => 'Systemsteuerung',
'usage' => 'Verbrauch',
'allocation' => 'Zuweisung', 'allocation' => 'Zuweisung',
'command' => 'Konsolenbefehl eingeben', 'command' => 'Konsolenbefehl eingeben',
'connection' => 'Standardverbindung',
'control' => 'Systemsteuerung',
'cpu_use' => 'CPU Verbrauch',
'disk_space' => 'Festplattenspeicher',
'memory_use' => 'Speicherverbrauch',
'mem_limit' => 'Speichergrenze',
'server_info' => 'Server Information',
'usage' => 'Verbrauch',
'xaxis' => 'Zeit (2s Abstand)',
], ],
'files' => [
'loading' => 'Lade Dateibaum, das könnte ein paar Sekunden dauern...',
'yaml_notice' => 'Du bearbeitest gearde eine YAML Datei. Diese Dateien benötigen Leerzeichen. Wir haben dafür gesorgt dass Tabs automatisch durch :dropdown Leerzeichen ersetzt werden.',
'back' => 'Zurück zum Dateimanager',
'saved' => 'Datei erfolgreich gespeichert.',
],
]; ];

View file

@ -1,62 +1,30 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
* Some Modifications (c) 2015 Dylan Seidt <dylan.seidt@gmail.com>
* Translated by Jakob Schrettenbrunner <dev@schrej.net>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Standalone Pterodactyl Language Strings
|--------------------------------------------------------------------------
*/
'login' => 'Login',
'password' => 'Passwort',
'email' => 'Email',
'whoops' => 'Uuups',
'success' => 'Erfolgreich',
'location' => 'Ort',
'node' => 'Node',
'connection' => 'Verbindung',
'language' => 'Sprache',
'close' => 'Schließen',
'start' => 'Start',
'stop' => 'Stop',
'restart' => 'Neustart',
'save' => 'Speichern',
'enabled' => 'Aktiviert',
'disabled' => 'Deaktiviert',
'submit' => 'Absenden',
'current_password' => 'Aktuelles Passwort',
'again' => 'wiederholen', 'again' => 'wiederholen',
'registered' => 'Registriert', 'close' => 'Schließen',
'root_administrator' => 'Root Administrator', 'connection' => 'Verbindung',
'yes' => 'Ja',
'no' => 'Nein',
'memory' => 'Speicher',
'cpu' => 'CPU', 'cpu' => 'CPU',
'status' => 'Status', 'current_password' => 'Aktuelles Passwort',
'disabled' => 'Deaktiviert',
'email' => 'Email',
'enabled' => 'Aktiviert',
'language' => 'Sprache',
'location' => 'Ort',
'login' => 'Login',
'memory' => 'Arbeitsspeicher',
'no' => 'Nein',
'node' => 'Node',
'players' => 'Spieler', 'players' => 'Spieler',
'registered' => 'Registriert',
'restart' => 'Neustart',
'root_administrator' => 'Root Administrator',
'save' => 'Speichern',
'start' => 'Start',
'status' => 'Status',
'stop' => 'Stop',
'submit' => 'Absenden',
'success' => 'Erfolgreich',
'whoops' => 'Uuups',
'yes' => 'Ja',
]; ];

View file

@ -1,18 +1,6 @@
<?php <?php
return [ 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' => ':attribute muss akzeptiert werden.', 'accepted' => ':attribute muss akzeptiert werden.',
'active_url' => ':attribute ist keine gültige URL.', 'active_url' => ':attribute ist keine gültige URL.',
'after' => ':attribute muss ein Datum in diesem Format sein: :date', 'after' => ':attribute muss ein Datum in diesem Format sein: :date',
@ -22,19 +10,23 @@ return [
'array' => ':attribute muss ein Array sein.', 'array' => ':attribute muss ein Array sein.',
'before' => ':attribute muss ein Datum in diesem Format sein: :date', 'before' => ':attribute muss ein Datum in diesem Format sein: :date',
'between' => [ 'between' => [
'numeric' => ':attribute muss zwischen :min und :max liegen.',
'file' => ':attribute muss zwischen :min und :max Kilobyte liegen.',
'string' => ':attribute muss aus :min bis :max Zeichen bestehen.',
'array' => ':attribute muss aus :min bis :max Elemente bestehen.', 'array' => ':attribute muss aus :min bis :max Elemente bestehen.',
'file' => ':attribute muss zwischen :min und :max Kilobyte liegen.',
'numeric' => ':attribute muss zwischen :min und :max liegen.',
'string' => ':attribute muss aus :min bis :max Zeichen bestehen.',
], ],
'boolean' => ':attribute muss wahr oder falsch sein.', 'boolean' => ':attribute muss wahr oder falsch sein.',
'confirmed' => ':attribute wiederholung stimmt nicht überein.', 'confirmed' => ':attribute wiederholung stimmt nicht überein.',
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
'date' => ':attribute ist kein gültiges Datum.', 'date' => ':attribute ist kein gültiges Datum.',
'date_format' => ':attribute entspricht nicht dem Format: :format', 'date_format' => ':attribute entspricht nicht dem Format: :format',
'different' => ':attribute und :other muss verschieden sein.', 'different' => ':attribute und :other muss verschieden sein.',
'digits' => ':attribute muss aus :digits Ziffern bestehen.', 'digits' => ':attribute muss aus :digits Ziffern bestehen.',
'digits_between' => ':attribute muss aus :min bis :max Ziffern bestehen.', 'digits_between' => ':attribute muss aus :min bis :max Ziffern bestehen.',
'email' => ':attribute muss eine gültige Email Adresse sein.',
'exists' => 'das ausgewählte Attribut :attribute ist ungültig.', 'exists' => 'das ausgewählte Attribut :attribute ist ungültig.',
'filled' => ':attribute ist erforderlich.', 'filled' => ':attribute ist erforderlich.',
'image' => ':attribute muss ein Bild sein.', 'image' => ':attribute muss ein Bild sein.',
@ -43,17 +35,17 @@ return [
'ip' => ':attribute muss eine gültige IP Adresse sein.', 'ip' => ':attribute muss eine gültige IP Adresse sein.',
'json' => ':attribute muss ein gültiger JSON String sein.', 'json' => ':attribute muss ein gültiger JSON String sein.',
'max' => [ 'max' => [
'numeric' => ':attribute darf nicht größer als :max sein.',
'file' => ':attribute darf nicht größer als :max Kilobytes sein.',
'string' => ':attribute darf nicht mehr als :max Zeichen lang sein.',
'array' => ':attribute darf nicht aus mehr als :max Elementen bestehen.', 'array' => ':attribute darf nicht aus mehr als :max Elementen bestehen.',
'file' => ':attribute darf nicht größer als :max Kilobytes sein.',
'numeric' => ':attribute darf nicht größer als :max sein.',
'string' => ':attribute darf nicht mehr als :max Zeichen lang sein.',
], ],
'mimes' => ':attribute muss eine Datei des Typs :values sein.', 'mimes' => ':attribute muss eine Datei des Typs :values sein.',
'min' => [ 'min' => [
'numeric' => ':attribute muss mindestens :min sein.',
'file' => ':attribute muss mindestens :min Kilobytes sein.',
'string' => ':attribute muss mindestens :min Zeichen lang sein.',
'array' => ':attribute muss aus mindestens :min Elementen bestehen.', 'array' => ':attribute muss aus mindestens :min Elementen bestehen.',
'file' => ':attribute muss mindestens :min Kilobytes sein.',
'numeric' => ':attribute muss mindestens :min sein.',
'string' => ':attribute muss mindestens :min Zeichen lang sein.',
], ],
'not_in' => 'Das ausgewählte Attribut :attribute ist ungültig.', 'not_in' => 'Das ausgewählte Attribut :attribute ist ungültig.',
'numeric' => ':attribute muss eine Zahl sein.', 'numeric' => ':attribute muss eine Zahl sein.',
@ -61,50 +53,19 @@ return [
'required' => ':attribute ist erforderlich.', 'required' => ':attribute ist erforderlich.',
'required_if' => ':attribute ist erforderlich wenn :other gleich :value ist.', 'required_if' => ':attribute ist erforderlich wenn :other gleich :value ist.',
'required_with' => ':attribute ist erforderlich wenn eines von :values gesetzt ist.', 'required_with' => ':attribute ist erforderlich wenn eines von :values gesetzt ist.',
'required_with_all' => ':attribute ist erforderlich wenn :values gesetzt ist.',
'required_without' => ':attribute ist erforderlich wenn :values nicht gesetzt ist.', 'required_without' => ':attribute ist erforderlich wenn :values nicht gesetzt ist.',
'required_without_all' => ':attribute ist erforderlich wenn keines von :values gesetzt ist.', 'required_without_all' => ':attribute ist erforderlich wenn keines von :values gesetzt ist.',
'required_with_all' => ':attribute ist erforderlich wenn :values gesetzt ist.',
'same' => ':attribute und :other müssen übereinstimmen.', 'same' => ':attribute und :other müssen übereinstimmen.',
'size' => [ 'size' => [
'numeric' => ':attribute muss :size groß sein.',
'file' => ':attribute muss :size Kilobytes groß sein.',
'string' => ':attribute muss :size Zeichen lang sein.',
'array' => ':attribute muss mindestens :size Elemente enthalten.', 'array' => ':attribute muss mindestens :size Elemente enthalten.',
'file' => ':attribute muss :size Kilobytes groß sein.',
'numeric' => ':attribute muss :size groß sein.',
'string' => ':attribute muss :size Zeichen lang sein.',
], ],
'string' => ':attribute muss eine Zeichenkette sein.', 'string' => ':attribute muss eine Zeichenkette sein.',
'totp' => 'totp Token ist ungültig. Ist es abgelaufen?',
'timezone' => ':attribute muss eine gültige Zeitzone sein.', 'timezone' => ':attribute muss eine gültige Zeitzone sein.',
'totp' => 'totp Token ist ungültig. Ist es abgelaufen?',
'unique' => ':attribute wurde bereits verwendet.', 'unique' => ':attribute wurde bereits verwendet.',
'url' => ':attribute Format ungültig.', 'url' => ':attribute Format ungültig.',
/*
|--------------------------------------------------------------------------
| 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' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
]; ];

View file

@ -0,0 +1,5 @@
<?php
return [
'resetpassword' => 'Reset Password',
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -1,48 +1,13 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
* Some Modifications (c) 2015 Dylan Seidt <dylan.seidt@gmail.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ 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' => 'These credentials do not match our records.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
'errorencountered' => 'There was an error encountered while attempting to process this request.',
'resetpassword' => 'Reset Password',
'confirmpassword' => 'Confirm Password', 'confirmpassword' => 'Confirm Password',
'sendlink' => 'Send Password Reset Link',
'emailsent' => 'Your password reset email is on its way.', 'emailsent' => 'Your password reset email is on its way.',
'errorencountered' => 'There was an error encountered while attempting to process this request.',
'failed' => 'These credentials do not match our records.',
'remeberme' => 'Remember Me', 'remeberme' => 'Remember Me',
'resetpassword' => 'Reset Password',
'sendlink' => 'Send Password Reset Link',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
'totp_failed' => 'The TOTP token provided was invalid. Please ensure that the token generated by your device was valid.', 'totp_failed' => 'The TOTP token provided was invalid. Please ensure that the token generated by your device was valid.',
]; ];

View file

@ -1,71 +1,31 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
* Some Modifications (c) 2015 Dylan Seidt <dylan.seidt@gmail.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Base Pterodactyl Language
|--------------------------------------------------------------------------
|
| These base strings are used throughout the front-end of Pterodactyl but
| not on pages that are used when viewing a server. Those keys are in server.php
|
*/
'validation_error' => 'An error occured while validating the data you submitted:',
'confirm' => 'Are you sure?',
'failed' => 'These credentials do not match our records.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
'view_as_admin' => 'You are viewing this server listing as an admin. As such, all servers installed on the system are displayed. Any servers that you are set as the owner of are marked with a blue dot to the left of their name.',
'server_name' => 'Server Name',
'no_servers' => 'You do not currently have any servers listed on your account.',
'form_error' => 'The following errors were encountered while trying to process this request.',
'password_req' => 'Passwords must meet the following requirements: at least one uppercase character, one lowercase character, one digit, and be at least 8 characters in length.',
'account' => [ 'account' => [
'totp_header' => 'Two-Factor Authentication',
'totp_qr' => 'TOTP QR Code',
'totp_enable_help' => 'It appears that you do not have Two-Factor authentication enabled. This method of authentication adds an additional barrier preventing unauthorized entry to your account. If you enable it you will be required to input a code generated on your phone or other TOTP supporting device before finishing your login.',
'totp_apps' => 'You must have a TOTP supporting application (e.g Google Authenticator, DUO Mobile, Authy, Enpass) to use this option.',
'totp_enable' => 'Enable Two-Factor Authentication',
'totp_disable' => 'Disable Two-Factor Authentication',
'totp_token' => 'TOTP Token',
'totp_disable_help' => 'In order to disable TOTP on this account you will need to provide a valid TOTP token. Once validated TOTP protection on this account will be disabled.',
'totp_checkpoint_help' => 'Please verify your TOTP settings by scanning the QR Code to the right with your phone\'s authenticator application, and then enter the 6 number code generated by the application in the box below. Press the enter key when finished.',
'totp_enabled' => 'Your account has been enabled with TOTP verification. Please click the close button on this box to finish.',
'totp_enabled_error' => 'The TOTP token provided was unable to be verified. Please try again.',
'email_password' => 'Email Password',
'update_user' => 'Update User',
'delete_user' => 'Delete User', 'delete_user' => 'Delete User',
'update_email' => 'Update Email', 'email_password' => 'Email Password',
'new_email' => 'New Email', 'new_email' => 'New Email',
'new_password' => 'New Password', 'new_password' => 'New Password',
'totp_apps' => 'You must have a TOTP supporting application (e.g Google Authenticator, DUO Mobile, Authy, Enpass) to use this option.',
'totp_checkpoint_help' => "Please verify your TOTP settings by scanning the QR Code to the right with your phone's authenticator application, and then enter the 6 number code generated by the application in the box below. Press the enter key when finished.",
'totp_disable' => 'Disable Two-Factor Authentication',
'totp_disable_help' => 'In order to disable TOTP on this account you will need to provide a valid TOTP token. Once validated TOTP protection on this account will be disabled.',
'totp_enable' => 'Enable Two-Factor Authentication',
'totp_enabled' => 'Your account has been enabled with TOTP verification. Please click the close button on this box to finish.',
'totp_enabled_error' => 'The TOTP token provided was unable to be verified. Please try again.',
'totp_enable_help' => 'It appears that you do not have Two-Factor authentication enabled. This method of authentication adds an additional barrier preventing unauthorized entry to your account. If you enable it you will be required to input a code generated on your phone or other TOTP supporting device before finishing your login.',
'totp_header' => 'Two-Factor Authentication',
'totp_qr' => 'TOTP QR Code',
'totp_token' => 'TOTP Token',
'update_email' => 'Update Email',
'update_pass' => 'Update Password', 'update_pass' => 'Update Password',
'update_user' => 'Update User',
], ],
'confirm' => 'Are you sure?',
'form_error' => 'The following errors were encountered while trying to process this request.',
'no_servers' => 'You do not currently have any servers listed on your account.',
'password_req' => 'Passwords must meet the following requirements: at least one uppercase character, one lowercase character, one digit, and be at least 8 characters in length.',
'server_name' => 'Server Name',
'validation_error' => 'An error occured while validating the data you submitted:',
'view_as_admin' => 'You are viewing this server listing as an admin. As such, all servers installed on the system are displayed. Any servers that you are set as the owner of are marked with a blue dot to the left of their name.',
]; ];

View file

@ -1,51 +1,17 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ 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; Previous',
'next' => 'Next &raquo;', 'next' => 'Next &raquo;',
'previous' => '&laquo; Previous',
'sidebar' => [ 'sidebar' => [
'account_controls' => 'Account Controls', 'account_controls' => 'Account Controls',
'account_settings' => 'Account Settings',
'account_security' => 'Account Security', 'account_security' => 'Account Security',
'server_controls' => 'Server Controls', 'account_settings' => 'Account Settings',
'servers' => 'Your Servers',
'overview' => 'Server Overview',
'files' => 'File Manager', 'files' => 'File Manager',
'subusers' => 'Manage Sub-Users',
'manage' => 'Manage Server', 'manage' => 'Manage Server',
'overview' => 'Server Overview',
'servers' => 'Your Servers',
'server_controls' => 'Server Controls',
'subusers' => 'Manage Sub-Users',
], ],
]; ];

View file

@ -1,43 +1,9 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Password Reminder 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.
|
*/
'password' => 'Passwords must be at least six characters and match the confirmation.', 'password' => 'Passwords must be at least six characters and match the confirmation.',
'reset' => 'Your password has been reset!', 'reset' => 'Your password has been reset!',
'sent' => 'We have e-mailed your password reset link!', 'sent' => 'We have e-mailed your password reset link!',
'token' => 'This password reset token is invalid.', 'token' => 'This password reset token is invalid.',
'user' => "We can't find a user with that e-mail address.", 'user' => "We can't find a user with that e-mail address.",
]; ];

View file

@ -1,59 +1,29 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
* Some Modifications (c) 2015 Dylan Seidt <dylan.seidt@gmail.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Pterodactyl Language Strings for /server/{server} Routes
|--------------------------------------------------------------------------
*/
'ajax' => [ 'ajax' => [
'socket_error' => 'We were unable to connect to the main Socket.IO server, there may be network issues currently. The panel may not work as expected.', 'socket_error' => 'We were unable to connect to the main Socket.IO server, there may be network issues currently. The panel may not work as expected.',
'socket_status' => 'This server\'s power status has changed to', 'socket_status' => "This server's power status has changed to",
'socket_status_crashed' => 'This server has been detected as CRASHED.', 'socket_status_crashed' => 'This server has been detected as CRASHED.',
], ],
'files' => [
'back' => 'Back to File Manager',
'loading' => 'Loading file listing, this might take a few seconds...',
'saved' => 'File has successfully been saved.',
'yaml_notice' => "You are currently editing a YAML file. These files do not accept tabs, they must use spaces. We've gone ahead and made it so that hitting tab will insert :dropdown spaces.",
],
'index' => [ 'index' => [
'add_new' => 'Add New Server', 'add_new' => 'Add New Server',
'memory_use' => 'Memory Usage',
'cpu_use' => 'CPU Usage',
'xaxis' => 'Time (2s Increments)',
'server_info' => 'Server Information',
'connection' => 'Default Connection',
'mem_limit' => 'Memory Limit',
'disk_space' => 'Disk Space',
'control' => 'Control Server',
'usage' => 'Usage',
'allocation' => 'Allocation', 'allocation' => 'Allocation',
'command' => 'Enter Console Command', 'command' => 'Enter Console Command',
'connection' => 'Default Connection',
'control' => 'Control Server',
'cpu_use' => 'CPU Usage',
'disk_space' => 'Disk Space',
'memory_use' => 'Memory Usage',
'mem_limit' => 'Memory Limit',
'server_info' => 'Server Information',
'usage' => 'Usage',
'xaxis' => 'Time (2s Increments)',
], ],
'files' => [
'loading' => 'Loading file listing, this might take a few seconds...',
'yaml_notice' => 'You are currently editing a YAML file. These files do not accept tabs, they must use spaces. We\'ve gone ahead and made it so that hitting tab will insert :dropdown spaces.',
'back' => 'Back to File Manager',
'saved' => 'File has successfully been saved.',
],
]; ];

View file

@ -1,61 +1,31 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>
* Some Modifications (c) 2015 Dylan Seidt <dylan.seidt@gmail.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Standalone Pterodactyl Language Strings
|--------------------------------------------------------------------------
*/
'login' => 'Login',
'password' => 'Password',
'email' => 'Email',
'whoops' => 'Whoops',
'success' => 'Success',
'location' => 'Location',
'node' => 'Node',
'connection' => 'Connection',
'language' => 'Language',
'close' => 'Close',
'start' => 'Start',
'stop' => 'Stop',
'restart' => 'Restart',
'save' => 'Save',
'enabled' => 'Enabled',
'disabled' => 'Disabled',
'submit' => 'Submit',
'current_password' => 'Current Password',
'again' => 'Again', 'again' => 'Again',
'registered' => 'Registered', 'close' => 'Close',
'root_administrator' => 'Root Administrator', 'connection' => 'Connection',
'yes' => 'Yes',
'no' => 'No',
'memory' => 'Memory',
'cpu' => 'CPU', 'cpu' => 'CPU',
'status' => 'Status', 'current_password' => 'Current Password',
'disabled' => 'Disabled',
'email' => 'Email',
'enabled' => 'Enabled',
'language' => 'Language',
'location' => 'Location',
'login' => 'Login',
'memory' => 'Memory',
'no' => 'No',
'node' => 'Node',
'password' => 'Password',
'players' => 'Players', 'players' => 'Players',
'registered' => 'Registered',
'restart' => 'Restart',
'root_administrator' => 'Root Administrator',
'save' => 'Save',
'start' => 'Start',
'status' => 'Status',
'stop' => 'Stop',
'submit' => 'Submit',
'success' => 'Success',
'whoops' => 'Whoops',
'yes' => 'Yes',
]; ];

View file

@ -1,18 +1,6 @@
<?php <?php
return [ 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' => 'The :attribute must be accepted.', 'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.', 'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.', 'after' => 'The :attribute must be a date after :date.',
@ -22,19 +10,23 @@ return [
'array' => 'The :attribute must be an array.', 'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.', 'before' => 'The :attribute must be a date before :date.',
'between' => [ 'between' => [
'numeric' => 'The :attribute must be between :min and :max.',
'file' => 'The :attribute must be between :min and :max kilobytes.',
'string' => 'The :attribute must be between :min and :max characters.',
'array' => 'The :attribute must have between :min and :max items.', 'array' => 'The :attribute must have between :min and :max items.',
'file' => 'The :attribute must be between :min and :max kilobytes.',
'numeric' => 'The :attribute must be between :min and :max.',
'string' => 'The :attribute must be between :min and :max characters.',
], ],
'boolean' => 'The :attribute field must be true or false.', 'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'The :attribute confirmation does not match.', 'confirmed' => 'The :attribute confirmation does not match.',
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
'date' => 'The :attribute is not a valid date.', 'date' => 'The :attribute is not a valid date.',
'date_format' => 'The :attribute does not match the format :format.', 'date_format' => 'The :attribute does not match the format :format.',
'different' => 'The :attribute and :other must be different.', 'different' => 'The :attribute and :other must be different.',
'digits' => 'The :attribute must be :digits digits.', 'digits' => 'The :attribute must be :digits digits.',
'digits_between' => 'The :attribute must be between :min and :max digits.', 'digits_between' => 'The :attribute must be between :min and :max digits.',
'email' => 'The :attribute must be a valid email address.',
'exists' => 'The selected :attribute is invalid.', 'exists' => 'The selected :attribute is invalid.',
'filled' => 'The :attribute field is required.', 'filled' => 'The :attribute field is required.',
'image' => 'The :attribute must be an image.', 'image' => 'The :attribute must be an image.',
@ -43,17 +35,17 @@ return [
'ip' => 'The :attribute must be a valid IP address.', 'ip' => 'The :attribute must be a valid IP address.',
'json' => 'The :attribute must be a valid JSON string.', 'json' => 'The :attribute must be a valid JSON string.',
'max' => [ 'max' => [
'numeric' => 'The :attribute may not be greater than :max.',
'file' => 'The :attribute may not be greater than :max kilobytes.',
'string' => 'The :attribute may not be greater than :max characters.',
'array' => 'The :attribute may not have more than :max items.', 'array' => 'The :attribute may not have more than :max items.',
'file' => 'The :attribute may not be greater than :max kilobytes.',
'numeric' => 'The :attribute may not be greater than :max.',
'string' => 'The :attribute may not be greater than :max characters.',
], ],
'mimes' => 'The :attribute must be a file of type: :values.', 'mimes' => 'The :attribute must be a file of type: :values.',
'min' => [ 'min' => [
'numeric' => 'The :attribute must be at least :min.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min characters.',
'array' => 'The :attribute must have at least :min items.', 'array' => 'The :attribute must have at least :min items.',
'file' => 'The :attribute must be at least :min kilobytes.',
'numeric' => 'The :attribute must be at least :min.',
'string' => 'The :attribute must be at least :min characters.',
], ],
'not_in' => 'The selected :attribute is invalid.', 'not_in' => 'The selected :attribute is invalid.',
'numeric' => 'The :attribute must be a number.', 'numeric' => 'The :attribute must be a number.',
@ -61,50 +53,19 @@ return [
'required' => 'The :attribute field is required.', 'required' => 'The :attribute field is required.',
'required_if' => 'The :attribute field is required when :other is :value.', 'required_if' => 'The :attribute field is required when :other is :value.',
'required_with' => 'The :attribute field is required when :values is present.', 'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values is present.',
'required_without' => 'The :attribute field is required when :values is not present.', 'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'The :attribute field is required when none of :values are present.', 'required_without_all' => 'The :attribute field is required when none of :values are present.',
'required_with_all' => 'The :attribute field is required when :values is present.',
'same' => 'The :attribute and :other must match.', 'same' => 'The :attribute and :other must match.',
'size' => [ 'size' => [
'numeric' => 'The :attribute must be :size.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must contain :size items.', 'array' => 'The :attribute must contain :size items.',
'file' => 'The :attribute must be :size kilobytes.',
'numeric' => 'The :attribute must be :size.',
'string' => 'The :attribute must be :size characters.',
], ],
'string' => 'The :attribute must be a string.', 'string' => 'The :attribute must be a string.',
'totp' => 'The totp token is invalid. Did it expire?',
'timezone' => 'The :attribute must be a valid zone.', 'timezone' => 'The :attribute must be a valid zone.',
'totp' => 'The totp token is invalid. Did it expire?',
'unique' => 'The :attribute has already been taken.', 'unique' => 'The :attribute has already been taken.',
'url' => 'The :attribute format is invalid.', 'url' => 'The :attribute format is invalid.',
/*
|--------------------------------------------------------------------------
| 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' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
]; ];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,13 @@
<?php
return [
'confirmpassword' => 'Kinnita salasõna',
'emailsent' => 'Teie salasõna algväärtustus link on teel',
'errorencountered' => 'Selle protsessi toimumisel toimus viga',
'failed' => 'Sisestus ei klapi meie andmetega',
'remeberme' => 'Mäleta mind',
'resetpassword' => 'Algväärtusta salasõna',
'sendlink' => 'Saada salasõna algväärtustamise link',
'throttle' => 'Liiga palju sisselogimiskatseid. Palun proovi uuesti :seconds sekundi pärast',
'totp_failed' => 'Sinu Kahe-kihilise autentimise tooken oli väär. Palun veendu, et genereeritud tooken on õige.',
];

View file

@ -0,0 +1,32 @@
<?php
return [
'account' => [
'delete_user' => 'Kustuta kasutaja',
'email_password' => 'Email Salasõna',
'new_email' => 'Uus Email',
'new_password' => 'Uus salasõna',
'totp_apps' => 'Teil peab olema Kahe-kihilise autentimeerimine (Google Authenticator, DUO Mobile, Authy, Enpass) olema lubatud, et kasutada seda valikut',
'totp_checkpoint_help' => 'Palun kinnita oma Kahe-kihilise autentiseerimise seaded üle, kas skännides QR kood või sisestades 6 numbriline kood ',
'totp_disable' => 'Keela Kahe-kihiline autentimine',
'totp_disable_help' => 'Selleks, et keelata Kahe-kihiline autenteerimine sellel kasutajal sisesta õige tooken. ',
'totp_enable' => 'Luba Kahe-kihiline autentimine
',
'totp_enabled' => 'Teie kontol on aktiveeritud Kahe-kihiline autentimine. Palun sulge see kast, et lõpetada',
'totp_enabled_error' => 'Sisestatud Kahe-kihilse autentimise tookenit ei olnud võimalik kinnitada. Palun proovi uuesti',
'totp_enable_help' => 'Paistab, et Teil pole Kahe-kihiline autentimine lubatud. See autentimise meetod lisab kaitsva kihi teie konto peale võimalikude rünnakute eest. Lubamisel on teil vaja sisestada kood, enne kui saate sisselogitud',
'totp_header' => 'Kahe-kihiline autenteerimine',
'totp_qr' => 'Kahe-kihilse autentimissüsteemi QR kood',
'totp_token' => 'Kahe-kihilise autentimise tooken',
'update_email' => 'Uuenda Emaili',
'update_pass' => 'Uuenda salasõna',
'update_user' => 'Uuenda kasutajat',
],
'confirm' => 'Oled kindel?',
'form_error' => 'Järgmised errorid tekkisid proovides täita seda protsessi',
'no_servers' => 'Teil ei ole hetkel ühtegi serverit ühendatud kontoga.',
'password_req' => 'Salasõna peab koosnema järgmisest: Üks suuretäht, üks väiketäht, üks number ja vähemalt 8 tähemärki pikk',
'server_name' => 'Serveri nimi',
'validation_error' => 'Andmete valideerimisel tekkis viga',
'view_as_admin' => 'Te vaatate seda serverit, kui admin. Seetõttu kõik serverid, mis on installitud on nähtaval. Iga server, mida Te omate on märgitud siniselt nime kõrval.',
];

View file

@ -0,0 +1,17 @@
<?php
return [
'next' => 'Järgmine &raquo;',
'previous' => '&laquo; Eelmine',
'sidebar' => [
'account_controls' => 'Kasutaja seaded',
'account_security' => 'Kasutaja turvalisus',
'account_settings' => 'Kasutaja seaded',
'files' => 'Faili haldur',
'manage' => 'Halda serverit',
'overview' => 'Serveri ülevaade',
'servers' => 'Teie serverid',
'server_controls' => 'Serveri seaded',
'subusers' => 'Halda kasutajaid',
],
];

View file

@ -0,0 +1,9 @@
<?php
return [
'password' => 'Salasõna peab olema vähemalt 6 tähte ja peab klappima kinnitusega',
'reset' => 'Teie salasõna on algväärtustatud',
'sent' => 'Me oleme meilinud sulle salasõna algväärtustamise lingi',
'token' => 'Salasõna algväärtustamise tooken on väär',
'user' => 'Me ei leia kasutaja selle Emailiga',
];

View file

@ -0,0 +1,29 @@
<?php
return [
'ajax' => [
'socket_error' => 'Me ei saanud ühendust peamise Socket.IO serveriga, selle tõttu võib olla internetiga probleeme. Paneel võib toimida valesti.',
'socket_status' => 'Selle serveri staatus on muutunud - ',
'socket_status_crashed' => 'Serveri staatuseks on märgitud: hävinud',
],
'files' => [
'back' => 'Tagasi faili haldurisse',
'loading' => 'Faili listi laadimine võib võtta mõned sekundid',
'saved' => 'Fail on edukalt salvestatud',
'yaml_notice' => 'Praegu sa muudad YAML faili. Need failid ei aksepteeri TABi, nad peavad kasutama tühikut. Seetõttu muutsime me TABi vajutamisel :dropdown tühikut',
],
'index' => [
'add_new' => 'Lisa uus server',
'allocation' => 'Jaotus',
'command' => 'Sisesta konsooli käsk',
'connection' => 'Vaikimisi ühendus',
'control' => 'Kontrolli serverit',
'cpu_use' => 'CPU kasutus',
'disk_space' => 'Kõvaketta ruum',
'memory_use' => 'Mälu kasutus',
'mem_limit' => 'Mälu limiit',
'server_info' => 'Serveri informatsioon',
'usage' => 'Kasutus',
'xaxis' => 'Aeg (2s vahedega)',
],
];

View file

@ -0,0 +1,30 @@
<?php
return [
'again' => 'Uuesti',
'close' => 'Sulge',
'connection' => 'Ühendus',
'cpu' => 'CPU',
'current_password' => 'Praegune salasõna',
'disabled' => 'Välja lülitatud',
'email' => 'Email',
'enabled' => 'Lubatud',
'language' => 'Keel',
'location' => 'Asukoht',
'login' => 'Logi sisse',
'memory' => 'Mälu',
'no' => 'Ei',
'node' => 'Node',
'players' => 'Mängijad',
'registered' => 'Registreeritud',
'restart' => 'Taaskäivita',
'root_administrator' => 'Juur Administraator',
'save' => 'Salvesta',
'start' => 'Start',
'status' => 'Staatus',
'stop' => 'Peata',
'submit' => 'Sisesta',
'success' => 'Õnnestus',
'whoops' => 'Oihhh',
'yes' => 'Jah',
];

View file

@ -0,0 +1,71 @@
<?php
return [
'accepted' => ':attribute oeab olema aksepteeritud',
'active_url' => ':attribute ei ole õige URL',
'after' => ':attribute peab olema kuupäev pärast :date',
'alpha' => ':attribute tohib sisaldada ainult numbreid',
'alpha_dash' => ':attribute tohib sisaldada ainult tähti, numbreid ja sidekriipse',
'alpha_num' => ':attribute tohib ainult sisaldada tähti ja numbreid',
'array' => ':attribute peab olema massiiv',
'before' => ':attribute peab olema kuupäev enne :date',
'between' => [
'array' => ':attribute peab jääma :min ja :max eseme vahele',
'file' => ':attribute peab jääma :min ja :max kilobaidi vahele',
'numeric' => ':attribute peab olema vahemikus :min ja :max',
'string' => ':attribute peab jääma :min ja :max vahele',
],
'boolean' => ':attribute peab olema kas tõene või väär',
'confirmed' => ':attribute kinnitus ei klapi',
'custom' => [
'attribute-name' => [
'rule-name' => 'Kohandatud-sõnum',
],
],
'date' => ':attribute ei ole õige kuupäeva formaat',
'date_format' => ':attribute ei klapi formaadiga :format',
'different' => ':attribute ja :other peavad olema erinevad',
'digits' => ':attribute peab olema :digits numbrit',
'digits_between' => ':attribute peab olema :min ja :max numbrit',
'exists' => 'Valitud :attribute on väär',
'filled' => ':attribute väli on kohustuslik',
'image' => ':attribute peab olema pilt',
'in' => ':attribute on vale valik',
'integer' => ':attribute peab olema täisarv',
'ip' => ':attribute peab olema õige IP aadress',
'json' => ':attribute peab olema lubatud JSON vektor',
'max' => [
'array' => ':attribute ei tohi sisaldada rohkem, kui :max eset',
'file' => ':attribute ei tohi olla suurem, kui :max kilobaiti',
'numeric' => ':attribute ei tohi olla suurem, kui :max',
'string' => ':attribute ei tohi olla suurem, kui :max tähte',
],
'mimes' => ':attribute peab olema :values tüüpi fail',
'min' => [
'array' => ':attribute peab sisaldama vähemalt :min eset',
'file' => ':attribute peab olema vähemalt :min kilobaiti',
'numeric' => ':attribute peab olema vähemalt :min',
'string' => ':attribute peab olema vähemalt :min tähemärgi pikkusega',
],
'not_in' => ':attribute on väär valik',
'numeric' => ':attribute peab olema number',
'regex' => ':attribute formaat on vale',
'required' => ':attribute väli on kohustuslik',
'required_if' => ':attribute on vajalik, kui :other on :value',
'required_with' => ':attribute väli peab olema täidetud, kui :values on olemas',
'required_without' => ':attribute väli peab olema täidetud, kui :values puudub',
'required_without_all' => ':attribute on vajalik, kui ükski :values ei ole olemas',
'required_with_all' => ':attribute väli on vajalik, kui :attribute on olemas',
'same' => ':attribute ja :other peavad klappima',
'size' => [
'array' => ':attribute peab sisaldama :size esemet',
'file' => ':attribute peab olema :size kilobaiti',
'numeric' => ':attribute peab olema :size suurusa',
'string' => ':attribute peab olema :size märki',
],
'string' => ':attribute peab olema vektor',
'timezone' => ':attribute peab olema õige ala',
'totp' => 'Kahe-kihilise autentimisesüsteemi tooken on väär, kas see aegus?',
'unique' => ':attribute on juba võetud.',
'url' => ':attribute on vale formaat',
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,7 @@
<?php
return [
'account' => [
'totp_header' => 'Authentification à deux facteurs',
],
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,7 @@
<?php
return [
'language' => 'Langage',
'save' => 'Sauvegarder',
'status' => 'Status',
];

View file

@ -0,0 +1,6 @@
<?php
return [
'before' => ':attribute doit être une date antérieur a :date.',
'ip' => ':attribute doit être une adresse IP valide.',
];

View file

@ -0,0 +1,11 @@
<?php
return [
'confirmpassword' => 'Bekreft passord',
'emailsent' => 'Din epost om å endre passord er på vei.',
'errorencountered' => 'Det skjedde en feil under forsøket på utføre denne oppgaven.',
'failed' => 'Denne påloggingsinformasjonen samsvarer ikke med våre opplysninger.',
'remeberme' => 'Husk meg',
'resetpassword' => 'Tilbakestill passord',
'sendlink' => 'Send link for tilbakestilling av passord',
];

View file

@ -0,0 +1,27 @@
<?php
return [
'account' => [
'delete_user' => 'Slett bruker',
'email_password' => 'Epost passord',
'new_email' => 'Ny epost',
'new_password' => 'Nytt passord',
'totp_apps' => 'Du må ha en TOTP støttet applikasjon (F.eks. Google Authenticator, DUO Mobile, Authy, Enpass) for å benytte dette alternativet.',
'totp_checkpoint_help' => 'Vennligst bekreft dine TOTP instillinger ved å skanne QR-Koden til høyre med din telefons autenitseringsapplikasjon, og skriv inn den 6 sifrede koden generert av applikasjonen i boksen under. Trykk enter når du er ferdig.',
'totp_disable' => 'Deaktiver to-faktor autentisering',
'totp_enable' => 'Aktiver to-faktor autentisering',
'totp_enabled' => 'Din konto har blitt aktivert med TOTP verifikasjon. Vennligst trykk på lukk knappen for å fullføre.',
'totp_enabled_error' => 'TOTP nøkkelen kunne ikke verifiseres. Vennligst prøv igjen.',
'totp_enable_help' => 'Det ser ut til at du ikke har slått på to-faktor autentisering. Denne autentiseringsmetoden legger til ett ekstra lag, som forhindrer uatorisert tilgang til din konto. Hvis du aktiverer dette, vil det kreves en kode generert på telefonen din, eller en annen TOTP støttet enhet før du fullfører innlogging.',
'totp_header' => 'To-faktor autentisering',
'totp_qr' => 'TOTP QR-Kode',
'totp_token' => 'TOTP nøkkel',
'update_email' => 'Oppdater epost',
'update_pass' => 'Oppdater passord',
'update_user' => 'Oppdater bruker',
],
'confirm' => 'Er du sikker?',
'form_error' => 'Følgende feilmeldinger dukket opp da forspørselen ble behandlet.',
'no_servers' => 'Du har for øyeblikket ingen servere registrert på din konto.',
'server_name' => 'Servernavn',
];

View file

@ -0,0 +1,17 @@
<?php
return [
'next' => 'Neste &raquo;',
'previous' => '&laquo; Forrige',
'sidebar' => [
'account_controls' => 'Kontokontroll',
'account_security' => 'Kontosikkerhet',
'account_settings' => 'Kontoinstillinger',
'files' => 'Filbehandling',
'manage' => 'Administrer server',
'overview' => 'Serveroversikt',
'servers' => 'Dine servere',
'server_controls' => 'Serverkontroll',
'subusers' => 'Administrer underbrukere',
],
];

View file

@ -0,0 +1,8 @@
<?php
return [
'password' => 'Passordet må ha minimum 6 tegn, og matche bekreftelsen.',
'reset' => 'Passordet ditt har blitt tilbakestilt!',
'sent' => 'Vi har sendt deg en epost med link til å tilbakestille passord!',
'user' => 'Vi kan ikke finne noen bruker med denne epost adressen.',
];

View file

@ -0,0 +1,27 @@
<?php
return [
'ajax' => [
'socket_status' => 'Serverens strømstatus er endret til',
'socket_status_crashed' => 'Serveren har blitt oppdaget som kræsjet.',
],
'files' => [
'back' => 'Tilbake til filbehandling',
'loading' => 'Laster filliste, dette kan ta et par sekunder...',
'saved' => 'Filen har blitt lagret!',
],
'index' => [
'add_new' => 'Legg til ny server',
'allocation' => 'Tildeling',
'command' => 'Skriv inn konsollkommando',
'connection' => 'Standard tilkobling',
'control' => 'Serverkontroll',
'cpu_use' => 'Prosessorbruk',
'disk_space' => 'Diskplass',
'memory_use' => 'Minnebruk',
'mem_limit' => 'Minnegrense',
'server_info' => 'Serverinformasjon',
'usage' => 'Bruk',
'xaxis' => 'Tid (2s intervaller)',
],
];

View file

@ -0,0 +1,29 @@
<?php
return [
'close' => 'Lukk',
'connection' => 'Tilkobling',
'cpu' => 'Prosessor',
'current_password' => 'Nåværende passord',
'disabled' => 'Deaktivert',
'email' => 'Epost',
'enabled' => 'Aktivert',
'language' => 'Språk',
'location' => 'Plassering',
'login' => 'Logg inn',
'memory' => 'Minne',
'no' => 'Nei',
'node' => 'Node',
'players' => 'Spillere',
'registered' => 'Registrert',
'restart' => 'Omstart',
'root_administrator' => 'Hovedadministrator',
'save' => 'Lagre',
'start' => 'Start',
'status' => 'Status',
'stop' => 'Stopp',
'submit' => 'Send inn',
'success' => 'Suksess',
'whoops' => 'Ooops',
'yes' => 'Ja',
];

View file

@ -0,0 +1,29 @@
<?php
return [
'after' => ':attribute må være en dato etter :date.',
'between' => [
'file' => ':attribute må være mellom :min og :max kilobyte.',
],
'custom' => [
'attribute-name' => [
'rule-name' => 'egendefinert melding',
],
],
'date' => ':attribute er ikke en gyldig dato.',
'different' => ':attribute og :other må være forskjellige.',
'image' => ':attribute må være et bilde.',
'max' => [
'string' => ':attribute må være større enn :max tegn.',
],
'min' => [
'string' => ':attribute må være minst :min tegn.',
],
'numeric' => ':attribute må være et tall.',
'required_with_all' => ':attribute feltet er på krevd nå :values er til stede.',
'size' => [
'array' => ':attribute må inneholde :size elementer.',
],
'totp' => 'TOTP nøkkelen er ugyldig. Har den gått ut på dato?',
'url' => ':attribute fomatet er ikke gyldig.',
];

View file

@ -0,0 +1,13 @@
<?php
return [
'confirmpassword' => 'Bevestig wachtwoord',
'emailsent' => 'Jouw wachtwoord herstel e-mail is onderweg.',
'errorencountered' => 'Er was een probleem tijdens het verwerken van dit verzoek.',
'failed' => 'De ingevulde gegevens komen niet overeen met onze gegevens.',
'remeberme' => 'Onthoud mij',
'resetpassword' => 'Wachtwoord herstellen',
'sendlink' => 'Verstuur wachtwoord herstel link',
'throttle' => 'Te veel inlog pogingen. Probeer het opnieuw in :seconds seconden.',
'totp_failed' => 'De TOTP token verstrekt is ongeldig. Controleer alsjeblieft of de token die door jouw apparaat is gegenereerd geldig is.',
];

View file

@ -0,0 +1,31 @@
<?php
return [
'account' => [
'delete_user' => 'Verwijder gebruiker',
'email_password' => 'Email wachtwoord',
'new_email' => 'Nieuw e-mail adres',
'new_password' => 'Nieuw wachtwoord',
'totp_apps' => 'Je moet een TOTP ondersteunende applicatie (bv. Google Authenticator, DUO Mobile, Authy, Enpass) hebben om deze optie te gebruiken.',
'totp_checkpoint_help' => 'Verifieer alsjeblieft jouw TOTP instellingen door de QR Code aan de rechterkant te scannen met de authenticatie applicatie van jouw telefoon. Vul daarna de door de applicatie gegenereerde 6 cijferige code in het vak hier onder in. Druk op enter wanneer je klaar bent.',
'totp_disable' => 'Schakel Two-Factor Authenticatie uit',
'totp_disable_help' => 'Om TOTP uit te schakelen is een geldige TOTP token nodig. Zodra deze is bevestigd zal TOTP beveiliging worden uitgeschakeld op dit account.',
'totp_enable' => 'Schakel Two-Factor Authenticatie in',
'totp_enabled' => 'TOTP verificatie is geactiveerd op jouw account. Klik alsjeblieft op de sluiten knop.',
'totp_enabled_error' => 'De verstrekt TOTP token kon niet worden geverifeerd. Probeer het alsjeblieft nog een keer.',
'totp_enable_help' => 'Het lijkt er op dat je Two-Factor authenticatie niet aan hebt staan. Deze methode van authenticatie voegt een extra barrière toe en voorkomt daarmee ongeautoriseerde toegang tot jouw account. Indien je het inschakelt zal je een code gegenereerd vanaf jouw telefoon of ander TOTP ondersteunend apparaat moeten ingeven om succesvol te kunnen inloggen.',
'totp_header' => 'Two-Factor Authenticatie',
'totp_qr' => 'TOTP QR Code',
'totp_token' => 'TOTP Token',
'update_email' => 'E-mail updaten',
'update_pass' => 'Wachtwoord updaten',
'update_user' => 'Gebruikers updaten',
],
'confirm' => 'Weet je het zeker?',
'form_error' => 'Tijdens het verwerken van dit verzoek zijn we de volgende problemen tegen gekomen:',
'no_servers' => 'Je hebt op dit moment geen servers gekoppeld aan jouw account.',
'password_req' => 'Wachtwoorden moeten voldoen aan de volgende eisen: minimaal één hoofdletter, één kleine letter, één getal, en minimaal 8 karakters lang.',
'server_name' => 'Server naam',
'validation_error' => 'Er is een probleem opgetreden tijdens het valideren van de data die je verzond:',
'view_as_admin' => 'Je bekijkt deze server als administrator. Hierdoor zie je alle servers geïnstalleerd op het systeem. Servers waarvan jij de eigenaar bent hebben een blauw rondje aan de linkerkant van hun naam.',
];

View file

@ -0,0 +1,17 @@
<?php
return [
'next' => 'Volgende',
'previous' => 'Vorige',
'sidebar' => [
'account_controls' => 'Account beheer',
'account_security' => 'Account beveiliging',
'account_settings' => 'Account instellingen',
'files' => 'Bestanden beheerder',
'manage' => 'Beheer server',
'overview' => 'Server overzicht',
'servers' => 'Jouw servers',
'server_controls' => 'Server Bediening',
'subusers' => 'Beheer sub-gebruiker',
],
];

View file

@ -0,0 +1,9 @@
<?php
return [
'password' => 'Wachtwoord moet minimaal zes karakters lang zijn en de bevestiging moet overeenkomen.',
'reset' => 'Jouw wachtwoord is hersteld!',
'sent' => 'We hebben jouw wachtwoord reset link naar je gemaild!',
'token' => 'Deze token wachtwoord reset token is ongeldig.',
'user' => 'We kunnen geen gebruiker vinden met dat e-mail adres.',
];

View file

@ -0,0 +1,29 @@
<?php
return [
'ajax' => [
'socket_error' => 'Het was niet mogelijk om met de hoofd Socket.IO server te verbinden. Er is mogelijk op het moment een netwerk probleem. Het panel werkt mogelijk niet zoals verwacht.',
'socket_status' => 'De status van deze server is veranderd naar',
'socket_status_crashed' => 'Deze server is gedetecteerd als gecrasht.',
],
'files' => [
'back' => 'Terug naar Bestanden Beheer',
'loading' => 'Bestandenlijst wordt geladen, dit kan even duren...',
'saved' => 'Bestand is succesvol opgeslagen.',
'yaml_notice' => "Je bent bezig met het bewerken van een YAML bestand. Zo'n bestand accepteer geen tabs, er moeten spaties worden gebruikt. We hebben er voor gezorgd dat als je op tab drukt, er automatisch spaties worden toegevoegd.",
],
'index' => [
'add_new' => 'Nieuwe server toevoegen',
'allocation' => 'Allocatie',
'command' => 'Vul een console commando in',
'connection' => 'Standaard verbinding',
'control' => 'Beheer server',
'cpu_use' => 'CPU gebruik',
'disk_space' => 'Schijfruimte',
'memory_use' => 'Geheugen gebruik',
'mem_limit' => 'Geheugen limiet',
'server_info' => 'Server informatie',
'usage' => 'Gebruik',
'xaxis' => 'Tijd (neemt elke 2 seconden toe)',
],
];

View file

@ -0,0 +1,30 @@
<?php
return [
'again' => 'Opnieuw',
'close' => 'Sluiten',
'connection' => 'Connectie',
'cpu' => 'CPU',
'current_password' => 'Huidig wachtwoord',
'disabled' => 'Uitgeschakeld',
'email' => 'E-mail',
'enabled' => 'Ingeschakeld',
'language' => 'Taal',
'location' => 'Locatie',
'login' => 'Inloggen',
'memory' => 'Geheugen',
'no' => 'Nee',
'node' => 'Node',
'players' => 'Spelers',
'registered' => 'Geregistreerd',
'restart' => 'Herstarten',
'root_administrator' => 'Root Administrator',
'save' => 'Opslaan',
'start' => 'Start',
'status' => 'Status',
'stop' => 'Stop',
'submit' => 'Verzenden',
'success' => 'Succes',
'whoops' => 'Oeps',
'yes' => 'Ja',
];

View file

@ -0,0 +1,71 @@
<?php
return [
'accepted' => ':attribute moet worden geaccepteerd.',
'active_url' => ':attribute is geen geldige URL.',
'after' => ':attribute moet een datum zijn na :date.',
'alpha' => ':attribute mag alleen letters bevatten.',
'alpha_dash' => ':attribute mag alleen letters, cijfers, en streepjes bevatten.',
'alpha_num' => ':attribute mag alleen letters en cijfers bevatten.',
'array' => ':attribute moet een reeks zijn.',
'before' => ':attribute moet een datum zijn voor :date.',
'between' => [
'array' => ':attribute moet tussen minimaal :min en maximaal :max delen hebben.',
'file' => ':attribute moet tussen :min en :max kilobytes groot zijn.',
'numeric' => ':attribute moet tussen :min en :max zijn.',
'string' => ':attribute moet minimaal :min en maximaal :max karakters lang zijn.',
],
'boolean' => 'Het :attribute veld moet waar of niet waar zijn.',
'confirmed' => ':attribute bevestiging komt niet overeen.',
'custom' => [
'attribute-name' => [
'rule-name' => 'aangepast-bericht',
],
],
'date' => ':attribute is geen geldige datum.',
'date_format' => ':attribute komt niet overeen met het formaat :format.',
'different' => ':attribute en :other moeten verschillend zijn.',
'digits' => ':attribute moet :digits cijfers lang zijn.',
'digits_between' => ':attribute moet tussen :min en :max cijfers zijn.',
'exists' => 'Geselecteerde :attribute is ongeldig.',
'filled' => 'Het :attribute veld is verplicht.',
'image' => ':attribute moet een afbeelding zijn.',
'in' => 'Geselecteerde :attribute is ongeldig.',
'integer' => ':attribute moet een integer zijn.',
'ip' => ':attribute moet een geldig IP adres zijn.',
'json' => ':attribute moet ene geldige JSON string zijn.',
'max' => [
'array' => ':attribute mag niet langer zijn dan maximaal :max delen.',
'file' => ':attribute mag niet groter zijn dan :max kilobytes.',
'numeric' => ':attribute mag niet groter zijn dan :max.',
'string' => ':attribute mag niet groter zijn dan :max karakters.',
],
'mimes' => ':attribute moet een bestand van het type: :values zijn.',
'min' => [
'array' => ':attribute moet minimaal :min delen hebben.',
'file' => ':attribute moet minimaal :min kilobytes groot zijn.',
'numeric' => ':attribute moet minimaal :min zijn.',
'string' => ':attribute moet minimaal :min karakters lang zijn.',
],
'not_in' => 'Geselecteerd :attribute is ongeldig.',
'numeric' => ':attribute moet een cijfer zijn.',
'regex' => 'Het formaat van :attribute is ongeldig.',
'required' => 'Het veld :attribute is verplicht.',
'required_if' => 'Het :attribute veld is verplicht wanneer :other :value is',
'required_with' => 'Het :attribute veld is verplicht wanneer :values aanwezig is.',
'required_without' => 'Het :attribute veld is verplicht wanneer :values niet aanwezig is.',
'required_without_all' => 'Het :attribute veld is verplicht wanneer geen :values aanwezig zijn.',
'required_with_all' => 'Het :attribute veld is verplicht wanneer :values aanwezig is.',
'same' => ':attribute en :other moeten overeenkomen.',
'size' => [
'array' => ':attribute moet :size delen bevatten.',
'file' => ':attribute moet :size kilobytes zijn.',
'numeric' => ':attribute moet :size zijn.',
'string' => ':attribute moet :size karakters zijn.',
],
'string' => ':attribute moet een string zijn.',
'timezone' => ':attribute moet een geldige zone zijn.',
'totp' => 'De TOTP token is ongeldig. Is hij verlopen?',
'unique' => ':attribute is al in gebruik.',
'url' => 'Het :attribute formaat is ongeldig.',
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -0,0 +1,4 @@
<?php
return [
];

View file

@ -1,44 +1,13 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ 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 estão de acordo com os nossos registros.',
'throttle' => 'Muitas tentativas de login. Por favor tente novamente em :seconds segundos.',
'errorencountered' => 'Ocorreu um erro durante a tentativa de processar esse pedido.',
'resetpassword' => 'Trocar senha',
'confirmpassword' => 'Confirmar senha', 'confirmpassword' => 'Confirmar senha',
'sendlink' => 'Enviar link de troca de senha',
'emailsent' => 'O seu email para trocar de senha está a caminho.', 'emailsent' => 'O seu email para trocar de senha está a caminho.',
'errorencountered' => 'Ocorreu um erro durante a tentativa de processar esse pedido.',
'failed' => 'Estas credenciais não estão de acordo com os nossos registros.',
'remeberme' => 'Lembre-me', 'remeberme' => 'Lembre-me',
'resetpassword' => 'Trocar senha',
'sendlink' => 'Enviar link de troca de senha',
'throttle' => 'Muitas tentativas de login. Por favor tente novamente em :seconds segundos.',
'totp_failed' => 'O token TOTP dado é inválido. Por favor tenha certeza que o token gerado pelo seu dispositivo era correto.', 'totp_failed' => 'O token TOTP dado é inválido. Por favor tenha certeza que o token gerado pelo seu dispositivo era correto.',
]; ];

View file

@ -1,64 +1,31 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Base Pterodactyl Language
|--------------------------------------------------------------------------
|
| These base strings are used throughout the front-end of Pterodactyl but
| not on pages that are used when viewing a server. Those keys are in server.php
|
*/
'validation_error' => 'Um erro ocorreu durante a validação de suas informações:',
'confirm' => 'Você tem certeza?',
'failed' => 'Essas credenciais não estão nos nossos registros.',
'throttle' => 'Muitas tentativas de login. Por favor tente novamente em :seconds segundos.',
'view_as_admin' => 'Você está vendo a lista de servidores como administrador. Assim, todos os servidores no sistema são mostrados. Qualquer servidor em que você esteja marcado como dono será mostrado com um ponto azul à esquerda de seu nome.',
'server_name' => 'Nome do Servidor',
'no_servers' => 'Você não tem nenhum servidor na sua conta atualmente.',
'form_error' => 'Os seguintes erros ocorreram durante o processo do seu pedido.',
'password_req' => 'Senhas devem cumprir o seguinte requiriso: pelo menos uma letra maiúscula, um minúscula, um dígito, e ter 8 caracteres no total.',
'root_administrator' => 'Mudar isso para "Sim" dará ao usuário permissões completas administrativas ao PufferPanel.',
'account' => [ 'account' => [
'totp_header' => 'Autenticação em Duas Etapas',
'totp_qr' => 'QR Code TOTP',
'totp_enable_help' => 'Você não parece ter a autenticação em duas etapas ativada. Esse método de autenticação adiciona uma barreira adicional prevenindo acesso não autorizado à sua conta. Se você ativar, será necessário fornecer um código gerado no seu celular ou outro dispositivo com suporte a TOTP antes de terminar o login.',
'totp_apps' => 'Você precisa ter uma aplicação com suporte a TOTP (exemplo: Google Authenticator, DUO Mobile, Authy) para usar essa opção.',
'totp_enable' => 'Ativar Autenticação em Duas Etapas',
'totp_disable' => 'Desativar Autenticação em Duas Etapas',
'totp_token' => 'Token TOTP',
'totp_disable_help' => 'Para desativar o TOTP nesta conta será necessário fornecer um código TOTP válido. Uma vez validado, a autenticação em duas etapas nesta conta será desativada.',
'totp_checkpoint_help' => 'Por favor verifique suas configurações de TOTP escanenando o QR Code à direita com o seu aplicativo de TOTP, e então forneça o código de 6 digitos dado pleo aplicativo na caixa abaixo. Aperte a tecla Enter quando tiver acabado.',
'totp_enabled' => 'Sua conta foi ativada com autenticação TOTP. Por favor clique no botão de fechar desta caixa para finalizar.',
'totp_enabled_error' => 'O código TOTP fornecido não foi autenticado. Por favor tente novamente.',
'email_password' => 'Senha do Email',
'update_user' => 'Atualizar Usuário',
'delete_user' => 'Deletar Usuário', 'delete_user' => 'Deletar Usuário',
'update_email' => 'Atualizar Email', 'email_password' => 'Senha do Email',
'new_email' => 'Novo Email', 'new_email' => 'Novo Email',
'new_password' => 'Nova Senha', 'new_password' => 'Nova Senha',
'totp_apps' => 'Você precisa ter uma aplicação com suporte a TOTP (exemplo: Google Authenticator, DUO Mobile, Authy) para usar essa opção.',
'totp_checkpoint_help' => 'Por favor verifique suas configurações de TOTP escanenando o QR Code à direita com o seu aplicativo de TOTP, e então forneça o código de 6 digitos dado pleo aplicativo na caixa abaixo. Aperte a tecla Enter quando tiver acabado.',
'totp_disable' => 'Desativar Autenticação em Duas Etapas',
'totp_disable_help' => 'Para desativar o TOTP nesta conta será necessário fornecer um código TOTP válido. Uma vez validado, a autenticação em duas etapas nesta conta será desativada.',
'totp_enable' => 'Ativar Autenticação em Duas Etapas',
'totp_enabled' => 'Sua conta foi ativada com autenticação TOTP. Por favor clique no botão de fechar desta caixa para finalizar.',
'totp_enabled_error' => 'O código TOTP fornecido não foi autenticado. Por favor tente novamente.',
'totp_enable_help' => 'Você não parece ter a autenticação em duas etapas ativada. Esse método de autenticação adiciona uma barreira adicional prevenindo acesso não autorizado à sua conta. Se você ativar, será necessário fornecer um código gerado no seu celular ou outro dispositivo com suporte a TOTP antes de terminar o login.',
'totp_header' => 'Autenticação em Duas Etapas',
'totp_qr' => 'QR Code TOTP',
'totp_token' => 'Token TOTP',
'update_email' => 'Atualizar Email',
'update_pass' => 'Atualizar Senha', 'update_pass' => 'Atualizar Senha',
'update_user' => 'Atualizar Usuário',
], ],
'confirm' => 'Você tem certeza?',
'form_error' => 'Os seguintes erros ocorreram durante o processo do seu pedido.',
'no_servers' => 'Você não tem nenhum servidor na sua conta atualmente.',
'password_req' => 'Senhas devem cumprir o seguinte requiriso: pelo menos uma letra maiúscula, um minúscula, um dígito, e ter 8 caracteres no total.',
'server_name' => 'Nome do Servidor',
'validation_error' => 'Um erro ocorreu durante a validação de suas informações:',
'view_as_admin' => 'Você está vendo a lista de servidores como administrador. Assim, todos os servidores no sistema são mostrados. Qualquer servidor em que você esteja marcado como dono será mostrado com um ponto azul à esquerda de seu nome.',
]; ];

View file

@ -1,48 +1,17 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ 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; Anteriro',
'next' => 'Próximo &raquo;', 'next' => 'Próximo &raquo;',
'previous' => '&laquo; Anteriro',
'sidebar' => [ 'sidebar' => [
'account_controls' => 'Controle de Conta', 'account_controls' => 'Controle de Conta',
'account_settings' => 'Configuração da Conta',
'account_security' => 'Segurança da conta', 'account_security' => 'Segurança da conta',
'server_controls' => 'Controles do Servidor', 'account_settings' => 'Configuração da Conta',
'servers' => 'Seus Servidores',
'overview' => 'Visão Geral dos Servidores',
'files' => 'Gerenciador de Arquivos', 'files' => 'Gerenciador de Arquivos',
'subusers' => 'Configurar Sub-Usuários',
'manage' => 'Configurar Server', 'manage' => 'Configurar Server',
'overview' => 'Visão Geral dos Servidores',
'servers' => 'Seus Servidores',
'server_controls' => 'Controles do Servidor',
'subusers' => 'Configurar Sub-Usuários',
], ],
]; ];

View file

@ -1,37 +1,6 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Password Reminder 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.
|
*/
'password' => 'Senhas precisam ter ao menos 6 caracteres e combinar com a confirmação.', 'password' => 'Senhas precisam ter ao menos 6 caracteres e combinar com a confirmação.',
'reset' => 'Sua senha foi resetada!', 'reset' => 'Sua senha foi resetada!',
'sent' => 'Nós te enviamos um email com o link para resetar sua senha!', 'sent' => 'Nós te enviamos um email com o link para resetar sua senha!',

View file

@ -1,55 +1,29 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Pterodactyl Language Strings for /server/{server} Routes
|--------------------------------------------------------------------------
*/
'ajax' => [ 'ajax' => [
'socket_error' => 'Nós não conseguimos se conectar ao servidor principal do Socket.IO, talvez tenha problemas de conexão acontecendo. O painel pode não funcionar como esperado.', 'socket_error' => 'Nós não conseguimos se conectar ao servidor principal do Socket.IO, talvez tenha problemas de conexão acontecendo. O painel pode não funcionar como esperado.',
'socket_status' => 'O estado desse servidor foi alterado para', 'socket_status' => 'O estado desse servidor foi alterado para',
'socket_status_crashed' => 'Esse server foi detectado como CRASHED.', 'socket_status_crashed' => 'Esse server foi detectado como CRASHED.',
], ],
'files' => [
'back' => 'Voltar ao Gerenciador de Arquivos',
'loading' => 'Carregando lista de arquivos, isso pode levar alguns segundos...',
'saved' => 'Arquivo salvo com sucesso.',
'yaml_notice' => 'Você está atualmente editando um arquivo YAML. Esses arquivos não aceitam tabs, eles precisam usar espaços. Nós fomos além disso e quando você aprtar tab :dropdown espaços serão colocados.',
],
'index' => [ 'index' => [
'add_new' => 'Adicionar novo servidor', 'add_new' => 'Adicionar novo servidor',
'memory_use' => 'Uso de Memória',
'cpu_use' => 'Uso de CPU',
'xaxis' => 'Tempo (Incremento de 2s)',
'server_info' => 'Informações do Servidor',
'connection' => 'Conexão Padrão',
'mem_limit' => 'Limite de Memória',
'disk_space' => 'Espaço em Disco',
'control' => 'Controlar Servidor',
'usage' => 'Uso',
'allocation' => 'Alocação', 'allocation' => 'Alocação',
'command' => 'Enviar Comando de Console', 'command' => 'Enviar Comando de Console',
], 'connection' => 'Conexão Padrão',
'files' => [ 'control' => 'Controlar Servidor',
'loading' => 'Carregando lista de arquivos, isso pode levar alguns segundos...', 'cpu_use' => 'Uso de CPU',
'yaml_notice' => 'Você está atualmente editando um arquivo YAML. Esses arquivos não aceitam tabs, eles precisam usar espaços. Nós fomos além disso e quando você aprtar tab :dropdown espaços serão colocados.', 'disk_space' => 'Espaço em Disco',
'back' => 'Voltar ao Gerenciador de Arquivos', 'memory_use' => 'Uso de Memória',
'saved' => 'Arquivo salvo com sucesso.', 'mem_limit' => 'Limite de Memória',
'server_info' => 'Informações do Servidor',
'usage' => 'Uso',
'xaxis' => 'Tempo (Incremento de 2s)',
], ],
]; ];

View file

@ -1,57 +1,30 @@
<?php <?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2016 Dane Everitt <dane@daneeveritt.com>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
return [ return [
/*
|--------------------------------------------------------------------------
| Standalone Pterodactyl Language Strings
|--------------------------------------------------------------------------
*/
'login' => 'Login',
'password' => 'Senha',
'email' => 'Email',
'whoops' => 'Opa',
'success' => 'Sucesso',
'location' => 'Localização',
'node' => 'Node',
'connection' => 'Conexão',
'language' => 'Língua',
'close' => 'Fechar',
'start' => 'Iniciar',
'stop' => 'Parar',
'restart' => 'Reiniciar',
'save' => 'Salvar',
'enabled' => 'Ativado',
'disabled' => 'Desativado',
'submit' => 'Enviar',
'current_password' => 'Senha Atual',
'again' => 'Novamente', 'again' => 'Novamente',
'registered' => 'Registrado', 'close' => 'Fechar',
'root_administrator' => 'Administrador Root', 'connection' => 'Conexão',
'yes' => 'Sim',
'no' => 'Não',
'memory' => 'Memória',
'cpu' => 'CPU', 'cpu' => 'CPU',
'status' => 'Status', 'current_password' => 'Senha Atual',
'disabled' => 'Desativado',
'email' => 'O :attribute precisa ser um endereço de email válido.',
'enabled' => 'Ativado',
'language' => 'Língua',
'location' => 'Localização',
'login' => 'Login',
'memory' => 'Memória',
'no' => 'Não',
'node' => 'Node',
'players' => 'Jogadores', 'players' => 'Jogadores',
'registered' => 'Registrado',
'restart' => 'Reiniciar',
'root_administrator' => 'Mudar isso para "Sim" dará ao usuário permissões completas administrativas ao PufferPanel.',
'save' => 'Salvar',
'start' => 'Iniciar',
'status' => 'Status',
'stop' => 'Parar',
'submit' => 'Enviar',
'success' => 'Sucesso',
'whoops' => 'Opa',
'yes' => 'Sim',
]; ];

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