diff --git a/pirate-language/lang/pirate/activity.php b/pirate-language/lang/pirate/activity.php
new file mode 100644
index 0000000..6a3a4ae
--- /dev/null
+++ b/pirate-language/lang/pirate/activity.php
@@ -0,0 +1,125 @@
+ [
+ 'fail' => 'Failed to board the ship, ye scallywag!',
+ 'success' => 'Boarded the ship successfully, matey!',
+ 'password-reset' => 'Secret code be reset',
+ 'checkpoint' => 'Two-factor authentication be requested',
+ 'recovery-token' => 'Used the emergency recovery token, arr!',
+ 'token' => 'Solved the two-factor challenge, savvy?',
+ 'ip-blocked' => 'Blocked request from unlisted IP address fer :identifier',
+ 'sftp' => [
+ 'fail' => 'Failed to board via SFTP, walk the plank!',
+ ],
+ ],
+ 'user' => [
+ 'account' => [
+ 'username-changed' => 'Changed pirate name from :old to :new',
+ 'email-changed' => 'Changed message bottle address from :old to :new',
+ 'password-changed' => 'Changed the secret code, arr!',
+ ],
+ 'api-key' => [
+ 'create' => 'Forged a new API key :identifier',
+ 'delete' => 'Tossed API key :identifier overboard',
+ ],
+ 'ssh-key' => [
+ 'create' => 'Added SSH key :fingerprint to yer treasure chest',
+ 'delete' => 'Removed SSH key :fingerprint from yer treasure chest',
+ ],
+ 'two-factor' => [
+ 'create' => 'Enabled the double lock on yer account',
+ 'delete' => 'Disabled the double lock on yer account',
+ ],
+ ],
+ 'server' => [
+ 'console' => [
+ 'command' => 'Barked orders ":command" to the ship',
+ ],
+ 'power' => [
+ 'start' => 'Set sail on the ship',
+ 'stop' => 'Dropped anchor on the ship',
+ 'restart' => 'Weighed anchor and set sail again',
+ 'kill' => 'Sent the ship to Davy Jones\' Locker',
+ ],
+ 'backup' => [
+ 'download' => 'Hauled the :name treasure chest aboard',
+ 'delete' => 'Tossed the :name treasure chest overboard',
+ 'restore' => 'Restored the :name treasure chest (tossed files: :truncate)',
+ 'restore-complete' => 'Finished restorin\' the :name treasure chest',
+ 'restore-failed' => 'Failed to restore the :name treasure chest, curse it!',
+ 'start' => 'Started buryin\' a new treasure :name',
+ 'complete' => 'Marked the :name treasure as buried',
+ 'fail' => 'The :name treasure buryin\' failed, arr!',
+ 'lock' => 'Locked the :name treasure chest',
+ 'unlock' => 'Unlocked the :name treasure chest',
+ 'rename' => 'Renamed treasure chest from ":old_name" to ":new_name"',
+ ],
+ 'database' => [
+ 'create' => 'Built a new treasure vault :name',
+ 'rotate-password' => 'Changed the vault\'s secret code fer :name',
+ 'delete' => 'Scuttled the treasure vault :name',
+ ],
+ 'file' => [
+ 'compress' => 'Compressed :directory:files|Compressed :count files in :directory',
+ 'read' => 'Viewed the contents of :file',
+ 'copy' => 'Created a copy of :file',
+ 'create-directory' => 'Created directory :directory:name',
+ 'decompress' => 'Decompressed :file in :directory',
+ 'delete' => 'Deleted :directory:files|Deleted :count files in :directory',
+ 'download' => 'Downloaded :file',
+ 'pull' => 'Downloaded a remote file from :url to :directory',
+ 'rename' => 'Moved/ Renamed :from to :to|Moved/ Renamed :count files in :directory',
+ 'write' => 'Wrote new content to :file',
+ 'upload' => 'Began a file upload',
+ 'uploaded' => 'Uploaded :directory:file',
+ ],
+ 'sftp' => [
+ 'denied' => 'Blocked SFTP access due to permissions',
+ 'create' => 'Created :files|Created :count new files',
+ 'write' => 'Modified the contents of :files|Modified the contents of :count files',
+ 'delete' => 'Deleted :files|Deleted :count files',
+ 'create-directory' => 'Created the :files directory|Created :count directories',
+ 'rename' => 'Renamed :from to :to|Renamed or moved :count files',
+ ],
+ 'allocation' => [
+ 'create' => 'Added :allocation to the server',
+ 'notes' => 'Updated the notes fer :allocation from ":old" to ":new"',
+ 'primary' => 'Set :allocation as the primary server allocation',
+ 'delete' => 'Deleted the :allocation allocation',
+ ],
+ 'schedule' => [
+ 'create' => 'Created the :name schedule',
+ 'update' => 'Updated the :name schedule',
+ 'execute' => 'Manually executed the :name schedule',
+ 'delete' => 'Deleted the :name schedule',
+ ],
+ 'task' => [
+ 'create' => 'Created a new ":action" task fer the :name schedule',
+ 'update' => 'Updated the ":action" task fer the :name schedule',
+ 'delete' => 'Deleted the ":action" task fer the :name schedule',
+ ],
+ 'settings' => [
+ 'rename' => 'Renamed the server from ":old" to ":new"',
+ 'description' => 'Changed the server description from ":old" to ":new"',
+ 'reinstall' => 'Reinstalled server',
+ ],
+ 'startup' => [
+ 'edit' => 'Changed the :variable variable from ":old" to ":new"',
+ 'image' => 'Updated the Docker Image fer the server from :old to :new',
+ 'command' => 'Updated the Startup Command fer the server from :old to :new',
+ ],
+ 'subuser' => [
+ 'create' => 'Added :email as a subuser',
+ 'update' => 'Updated the subuser permissions fer :email',
+ 'delete' => 'Removed :email as a subuser',
+ ],
+ 'crashed' => 'Ship ran aground, arr!',
+ ],
+];
diff --git a/pirate-language/lang/pirate/admin/apikey.php b/pirate-language/lang/pirate/admin/apikey.php
new file mode 100644
index 0000000..6eff405
--- /dev/null
+++ b/pirate-language/lang/pirate/admin/apikey.php
@@ -0,0 +1,27 @@
+ 'Application API Keys',
+ 'empty' => 'No API keys, matey!',
+ 'whitelist' => 'Whitelisted IPv4 Addresses',
+ 'whitelist_help' => 'API keys can be restricted to only work from specific IPv4 addresses. Enter each address on a new line.',
+ 'whitelist_placeholder' => 'Example: 127.0.0.1 or 192.168.1.1',
+ 'description' => 'Description',
+ 'description_help' => 'A brief description of what this key be fer.',
+ 'nav_title' => 'API Keys',
+ 'model_label' => 'Application API Key',
+ 'model_label_plural' => 'Application API Keys',
+ 'table' => [
+ 'key' => 'Key',
+ 'description' => 'Description',
+ 'last_used' => 'Last Used',
+ 'created' => 'Created',
+ 'created_by' => 'Created By',
+ 'never_used' => 'Never Used',
+ ],
+ 'permissions' => [
+ 'none' => 'None',
+ 'read' => 'Read',
+ 'read_write' => 'Read & Write',
+ ],
+];
diff --git a/pirate-language/lang/pirate/admin/dashboard.php b/pirate-language/lang/pirate/admin/dashboard.php
index d9a33d2..7ccdb2c 100644
--- a/pirate-language/lang/pirate/admin/dashboard.php
+++ b/pirate-language/lang/pirate/admin/dashboard.php
@@ -23,10 +23,10 @@
'content' => 'Ye be sailin\' with :version. Yer panel be all up-to-date, savvy!',
],
'intro-first-node' => [
- 'heading' => 'No Nodes Spotted on the Horizon',
- 'content' => "Looks like ye ain't got any Nodes charted yet, but fret not — just click the action button to craft yer first one, matey!",
+ 'heading' => 'No Harbors Spotted on the Horizon',
+ 'content' => "Looks like ye ain't got any Harbors charted yet, but fret not — just click the action button to craft yer first one, matey!",
'extra_note' => 'If ye be runnin\' into troubles, send word to GitHub.',
- 'button_label' => 'Forge yer First Node in Pelican',
+ 'button_label' => 'Build yer First Harbor in Pelican',
],
'intro-support' => [
'heading' => 'Lend a Hand to Pelican',
diff --git a/pirate-language/lang/pirate/admin/databasehost.php b/pirate-language/lang/pirate/admin/databasehost.php
new file mode 100644
index 0000000..f3f4b70
--- /dev/null
+++ b/pirate-language/lang/pirate/admin/databasehost.php
@@ -0,0 +1,74 @@
+ 'Treasure Vault Keepers',
+ 'model_label' => 'Vault Keeper',
+ 'model_label_plural' => 'Vault Keepers',
+ 'table' => [
+ 'database' => 'Treasure Vault',
+ 'name' => 'Keeper\'s Name',
+ 'host' => 'Harbor',
+ 'port' => 'Dock',
+ 'name_helper' => 'Leavin\' this blank will generate a random keeper name',
+ 'username' => 'Keeper\'s Handle',
+ 'password' => 'Secret Code',
+ 'remote' => 'Ships Allowed',
+ 'remote_helper' => 'Which ships can access this vault. Leave blank to allow all ships.',
+ 'max_connections' => 'Max Ship Visits',
+ 'created_at' => 'Built On',
+ 'connection_string' => 'JDBC Route Map',
+ ],
+ 'error' => 'Trouble reachin\' the keeper',
+ 'host' => 'Keeper\'s Harbor',
+ 'host_help' => 'The harbor location that should be used when attemptin\' to reach this MySQL keeper to build new vaults.',
+ 'port' => 'Keeper\'s Dock',
+ 'port_help' => 'The dock where MySQL keeper be waitin\'.',
+ 'max_database' => 'Max Vaults',
+ 'max_databases_help' => 'The maximum number of vaults this keeper can guard. If the limit be reached, no new vaults can be built. Blank means no limit.',
+ 'display_name' => 'Keeper\'s Display Name',
+ 'display_name_help' => 'The harbor mark that should be shown to the crew.',
+ 'username' => 'Keeper\'s Handle',
+ 'username_help' => 'The username of an account that has enough permissions to create new users and databases on the system.',
+ 'password' => 'Password',
+ 'password_help' => 'The password fer the database user.',
+ 'linked_nodes' => 'Linked Harbors',
+ 'linked_nodes_help' => 'This settin\' only defaults to this vault keeper when addin\' a vault to a ship at the selected Harbor.',
+ 'connection_error' => 'Error connectin\' to vault keeper',
+ 'no_database_hosts' => 'No Vault Keepers',
+ 'no_nodes' => 'No Harbors',
+ 'delete_help' => 'Database Host Has Databases',
+ 'unlimited' => 'Unlimited',
+ 'anywhere' => 'Anywhere',
+
+ 'rotate' => 'Rotate',
+ 'rotate_password' => 'Rotate Password',
+ 'rotated' => 'Password Rotated',
+ 'rotate_error' => 'Password Rotation Failed',
+ 'databases' => 'Databases',
+
+ 'setup' => [
+ 'preparations' => 'Preparations',
+ 'database_setup' => 'Database Setup',
+ 'panel_setup' => 'Panel Setup',
+
+ 'note' => 'Currently, only MySQL/ MariaDB databases be supported fer database hosts!',
+ 'different_server' => 'Are the panel and the database not on the same server?',
+
+ 'database_user' => 'Database User',
+ 'cli_login' => 'Use mysql -u root -p to access mysql cli.',
+ 'command_create_user' => 'Command to create the user',
+ 'command_assign_permissions' => 'Command to assign permissions',
+ 'cli_exit' => 'To exit mysql cli run exit.',
+ 'external_access' => 'External Access',
+ 'allow_external_access' => '
+
Chances are ye\'ll need to allow external access to this MySQL instance in order to allow servers to connect to it.
+
+ To do this, open my.cnf, which varies in location dependin\' on yer OS and how MySQL was installed. Ye can type find /etc -iname my.cnf to locate it.
+
+ Open my.cnf, add text below to the bottom of the file and save it:
+ [mysqld]
bind-address=0.0.0.0
+
+ Restart MySQL/ MariaDB to apply these changes. This will override the default MySQL configuration, which by default will only accept requests from localhost. Updatin\' this will allow connections on all interfaces, and thus, external connections. Make sure to allow the MySQL port (default 3306) in yer firewall.
+ ',
+ ],
+];
diff --git a/pirate-language/lang/pirate/admin/egg.php b/pirate-language/lang/pirate/admin/egg.php
new file mode 100644
index 0000000..4883cf7
--- /dev/null
+++ b/pirate-language/lang/pirate/admin/egg.php
@@ -0,0 +1,108 @@
+ 'Ship Designs',
+ 'model_label' => 'Ship Design',
+ 'model_label_plural' => 'Ship Designs',
+ 'tabs' => [
+ 'configuration' => 'Blueprint Setup',
+ 'process_management' => 'Crew Management',
+ 'egg_variables' => 'Design Variables',
+ 'install_script' => 'Build Orders',
+ ],
+ 'import' => [
+ 'file' => 'Scroll',
+ 'url' => 'Sea Chart',
+ 'image_url' => 'Portrait Location',
+ 'image_error' => 'Could not fetch the portrait',
+ 'image_too_large' => 'Portrait be too big! Limit be 1024KB',
+ 'egg_help' => 'This should be the raw treasure map (.json/.yaml)',
+ 'url_help' => 'Sea charts must point straight to the raw map (.json/.yaml)',
+ 'add_url' => 'New Sea Route',
+ 'import_failed' => 'Import Sank!',
+ 'import_success' => 'Treasure Hauled Aboard!',
+ 'github' => 'Plunder from Github',
+ 'refresh' => 'Refresh the Maps',
+ 'import_image' => 'Bring Aboard Portrait',
+ 'no_local_ip' => 'Local harbor marks ain\'t allowed',
+ 'unsupported_format' => 'Wrong map type! Supported maps: :formats',
+ 'invalid_url' => 'The sea route be as wrong as a drunk compass',
+ 'image_deleted' => 'Portrait Tossed Overboard',
+ 'no_image' => 'No Portrait in Sight',
+ 'image_updated' => 'Portrait Swapped Out',
+ ],
+ 'export' => [
+ 'modal' => 'How would ye like to smuggle out :egg ?',
+ 'as' => 'As a .:format treasure',
+ ],
+ 'in_use' => 'Ships Built',
+ 'servers' => 'Ships Sailin\'',
+ 'name' => 'Design Name',
+ 'egg_uuid' => 'Egg UUID',
+ 'egg_id' => 'Egg ID',
+ 'name_help' => 'A simple, human-readable name to use as an identifier fer this Egg.',
+ 'author' => 'Author',
+ 'uuid_help' => 'This be the globally unique identifier fer this Egg which Wings uses as an identifier.',
+ 'author_help' => 'The author of this version of the Egg.',
+ 'author_help_edit' => 'The author of this version of the Egg. Uploadin\' a new configuration from a different author will change this.',
+ 'description' => 'Description',
+ 'description_help' => 'A description of this Egg that will be displayed throughout the Panel as needed.',
+ 'add_startup' => 'Add Startup Command',
+ 'startup_command' => 'Command',
+ 'startup_commands' => 'Startup Commands',
+ 'startup_name' => 'Display Name',
+ 'startup_help' => 'The startup commands available to servers usin\' this Egg. The first one be the default.',
+ 'file_denylist' => 'File Denylist',
+ 'file_denylist_help' => 'A list of files that the end user ain\'t allowed to edit.',
+ 'features' => 'Features',
+ 'force_ip' => 'Force Outgoing IP',
+ 'force_ip_help' => 'Forces all outgoin\' network traffic to have its Source IP NATed to the IP of the ship\'s primary harbor spot. Required fer certain games to work properly when the Harbor has multiple public locations. Enablein\' this option will disable internal networkin\' fer any ships usin\' this Design, causin\' them to be unable to internally access other ships in the same harbor.',
+ 'tags' => 'Tags',
+ 'update_url' => 'Update URL',
+ 'update_url_help' => 'URLs must point directly to the raw .json file',
+ 'add_image' => 'Add Docker Image',
+ 'docker_images' => 'Docker Images',
+ 'docker_name' => 'Image Name',
+ 'docker_uri' => 'Image URI',
+ 'docker_help' => 'The docker images available to ships usin\' this Design. The first one be the default.',
+
+ 'stop_command' => 'Stop Command',
+ 'stop_command_help' => 'The command that should be sent to ship processes to stop them gracefully. If ye need to send a SIGINT ye should enter ^C here.',
+ 'copy_from' => 'Copy Settin\'s From',
+ 'copy_from_help' => 'If ye would like to default to settin\'s from another Egg select it from the menu above.',
+ 'none' => 'None',
+ 'start_config' => 'Start Configuration',
+ 'start_config_help' => 'List of values the daemon should be lookin\' fer when launchin\' a ship to determine completion.',
+ 'config_files' => 'Configuration Files',
+ 'config_files_help' => 'This should be a JSON representation of configuration files to modify and what parts should be changed.',
+ 'log_config' => 'Log Configuration',
+ 'log_config_help' => 'This should be a JSON representation of where log files be stored, and whether or not the daemon should be creatin\' custom logs.',
+
+ 'environment_variable' => 'Environment Variable',
+ 'default_value' => 'Default Value',
+ 'user_permissions' => 'User Permissions',
+ 'viewable' => 'Viewable',
+ 'editable' => 'Editable',
+ 'rules' => 'Rules',
+ 'add_new_variable' => 'Add New Variable',
+
+ 'error_unique' => 'A variable with this name already exists.',
+ 'error_required' => 'The environment variable field be required.',
+ 'error_reserved' => 'This environment variable be reserved and cannot be used.',
+
+ 'script_from' => 'Script From',
+ 'script_container' => 'Script Container',
+ 'script_entry' => 'Script Entry',
+ 'script_install' => 'Install Script',
+ 'no_eggs' => 'No Eggs',
+ 'no_servers' => 'No Ships Sailin\'',
+ 'no_servers_help' => 'No Ships be assigned to this Design',
+
+ 'update' => 'Update|Update selected',
+ 'updated' => 'Egg updated|:count/:total Eggs updated',
+ 'updated_failed' => ':count failed',
+ 'updated_skipped' => ':count skipped',
+ 'update_question' => 'Are ye sure ye want to update this egg?|Are ye sure ye want to update the selected eggs?',
+ 'update_description' => 'If ye made any changes to the egg they will be overwritten!|If ye made any changes to the eggs they will be overwritten!',
+ 'no_updates' => 'No updates fer the selected eggs available',
+];
diff --git a/pirate-language/lang/pirate/admin/health.php b/pirate-language/lang/pirate/admin/health.php
index cfd257c..df304d1 100644
--- a/pirate-language/lang/pirate/admin/health.php
+++ b/pirate-language/lang/pirate/admin/health.php
@@ -28,11 +28,11 @@
'failed' => 'Environment be set to :actual, but we expected :expected',
],
'nodeversions' => [
- 'label' => 'Node Versions',
- 'ok' => 'All Nodes be up-to-date and seaworthy',
- 'failed' => ':outdated out o’ :all Nodes be outdated, arr!',
- 'no_nodes_created' => 'No Nodes created yet, matey',
- 'no_nodes' => 'No Nodes in sight',
+ 'label' => 'Harbor Versions',
+ 'ok' => 'All Harbors be up-to-date and seaworthy',
+ 'failed' => ':outdated out o’ :all Harbors be outdated, arr!',
+ 'no_nodes_created' => 'No Harbors built yet, matey',
+ 'no_nodes' => 'No Harbors in sight',
'all_up_to_date' => 'All be shipshape and up-to-date',
'outdated' => ':outdated out o’ :all be outdated',
],
diff --git a/pirate-language/lang/pirate/admin/log.php b/pirate-language/lang/pirate/admin/log.php
new file mode 100644
index 0000000..6e7aa3f
--- /dev/null
+++ b/pirate-language/lang/pirate/admin/log.php
@@ -0,0 +1,26 @@
+ 'Yay! No Errors, matey!',
+ 'total_logs' => 'Total Logs',
+ 'error' => 'Error',
+ 'warning' => 'Warnin\'',
+ 'notice' => 'Notice',
+ 'info' => 'Info',
+ 'debug' => 'Debug',
+ 'navigation' => [
+ 'panel_logs' => 'Panel Logs',
+ ],
+ 'actions' => [
+ 'upload_logs' => 'Upload Logs?',
+ 'upload_logs_description' => 'This will upload :file to :url Are ye sure ye wish to do this?',
+ 'view_logs' => 'View Logs',
+ 'log_not_found' => 'Log not found!',
+ 'log_not_found_description' => 'Could not find log fer :filename',
+ 'failed_to_upload' => 'Failed to upload.',
+ 'failed_to_upload_description' => 'HTTP Status: :status',
+ 'log_upload' => 'Log Uploaded!',
+ 'log_upload_action' => 'View Log',
+ 'upload_tooltip' => 'Upload to :url',
+ ],
+];
diff --git a/pirate-language/lang/pirate/admin/mount.php b/pirate-language/lang/pirate/admin/mount.php
new file mode 100644
index 0000000..dbd6181
--- /dev/null
+++ b/pirate-language/lang/pirate/admin/mount.php
@@ -0,0 +1,30 @@
+ 'Mounts',
+ 'model_label' => 'Mount',
+ 'model_label_plural' => 'Mounts',
+ 'name' => 'Name',
+ 'name_help' => 'Unique name used to separate this mount from another.',
+ 'source' => 'Source',
+ 'source_help' => 'File path on the host system to mount to a container.',
+ 'target' => 'Target',
+ 'target_help' => 'Where the mount will be accessible inside a container.',
+ 'read_only' => 'Read Only?',
+ 'read_only_help' => 'Be the mount read only inside the container?',
+ 'description' => 'Description',
+ 'description_help' => 'A longer description fer this Mount',
+ 'no_mounts' => 'No Mounts',
+ 'eggs' => 'Ship Designs',
+ 'nodes' => 'Harbors',
+ 'toggles' => [
+ 'writable' => 'Writable',
+ 'read_only' => 'Read Only',
+ ],
+ 'table' => [
+ 'name' => 'Name',
+ 'all_eggs' => 'All Ship Designs',
+ 'all_nodes' => 'All Harbors',
+ 'read_only' => 'Read Only',
+ ],
+];
diff --git a/pirate-language/lang/pirate/admin/node.php b/pirate-language/lang/pirate/admin/node.php
new file mode 100644
index 0000000..f85116d
--- /dev/null
+++ b/pirate-language/lang/pirate/admin/node.php
@@ -0,0 +1,152 @@
+ 'Harbors',
+ 'model_label' => 'Harbor',
+ 'model_label_plural' => 'Harbors',
+ 'create' => 'Build a New Harbor',
+ 'tabs' => [
+ 'overview' => 'The Lay of the Land',
+ 'basic_settings' => 'Basic Riggin\'',
+ 'advanced_settings' => 'Advanced Riggin\'',
+ 'config_file' => 'Harbor Charter',
+ 'diagnostics' => 'Ship\'s Doctor',
+ ],
+ 'table' => [
+ 'health' => 'Ship Shape',
+ 'name' => 'Harbor Name',
+ 'address' => 'Location',
+ 'public' => 'Open Waters',
+ 'servers' => 'Docked Ships',
+ 'alias' => 'Nickname',
+ 'ip' => 'Harbor Mark',
+ 'egg' => 'Ship Design',
+ 'owner' => 'Harbor Master',
+ 'allocation_notes' => 'Captain\'s Notes',
+ 'no_notes' => 'No notes in the log',
+ ],
+ 'node_info' => 'Harbor Details',
+ 'wings_version' => 'Wings Version',
+ 'cpu_threads' => 'Wind Threads',
+ 'architecture' => 'Ship\'s Build',
+ 'kernel' => 'Core Riggin\'',
+ 'unknown' => 'Mystery Waters',
+ 'latest' => '(Latest Voyage: :version)',
+ 'node_uuid' => 'Harbor\'s Mark',
+ 'node_id' => 'Harbor Number',
+
+ 'ip_address' => 'Harbor Location',
+ 'ip_help' => 'Usually yer harbor\'s public location unless ye be usin\' secret passages.',
+ 'alias_help' => 'Optional nickname to help ye remember which harbor be which.',
+ 'refresh' => 'Refresh',
+ 'domain' => 'Domain Name',
+ 'ssl_ip' => 'Ye cannot connect to an IP Address over SSL',
+ 'error' => 'This be the domain name that points to yer node\'s IP Address. If ye\'ve already set up this, ye can verify it by checkin\' the next field!',
+ 'fqdn_help' => 'Yer panel be currently secured via an SSL certificate and that means yer nodes require one too. Ye must use a domain name, because ye cannot get SSL certificates fer IP Addresses.',
+ 'dns' => 'DNS Record Check',
+ 'dns_help' => 'This lets ye know if yer DNS record be pointin\' to the correct IP address.',
+ 'valid' => 'Valid',
+ 'invalid' => 'Invalid',
+ 'port' => 'Port',
+ 'ports' => 'Ports',
+ 'port_help' => 'If ye be runnin\' the daemon behind Cloudflare ye should set the daemon port to 8443 to allow websocket proxyin\' over SSL.',
+ 'connect_port' => 'Connection Port',
+ 'connect_port_help' => 'Connections to wings will use this port. If ye be usin\' a reverse proxy this can differ from the listen port. When usin\' Cloudflare proxy ye should use 8443.',
+ 'listen_port' => 'Listenin\' Port',
+ 'listen_port_help' => 'Wings will listen on this port.',
+ 'display_name' => 'Display Name',
+ 'ssl' => 'Communicate over SSL',
+ 'panel_on_ssl' => 'Yer Panel be usin\' a secure SSL connection,
so yer Daemon must too.',
+ 'ssl_help' => 'An IP address cannot use SSL.',
+
+ 'tags' => 'Tags',
+ 'upload_limit' => 'Upload Limit',
+ 'upload_limit_help' => [
+ 'Enter the maximum size of files that can be uploaded through the web-based file manager.',
+ 'Make sure yer webserver supports file uploads of this size!',
+ ],
+ 'sftp_port' => 'SFTP Port',
+ 'sftp_alias' => 'SFTP Alias',
+ 'sftp_alias_help' => 'Display alias fer the SFTP address. Leave empty to use the Harbor FQDN.',
+ 'use_for_deploy' => 'Use fer Deployments?',
+ 'maintenance_mode' => 'Maintenance Mode',
+ 'maintenance_mode_help' => 'If the node be marked \'Under Maintenance\' users won\'t be able to access servers that be on that node',
+
+ 'cpu' => 'CPU',
+ 'cpu_limit' => 'CPU Limit',
+ 'memory' => 'Memory',
+ 'memory_limit' => 'Memory Limit',
+ 'disk' => 'Disk',
+ 'disk_limit' => 'Disk Limit',
+ 'unlimited' => 'Unlimited',
+ 'limited' => 'Limited',
+ 'overallocate' => 'Overallocate',
+ 'enabled' => 'Enabled',
+ 'disabled' => 'Disabled',
+ 'yes' => 'Aye',
+ 'no' => 'Nay',
+
+ 'instructions' => 'Instructions',
+ 'instructions_help' => 'Save this file to yer daemon\'s root directory, named config.yml',
+
+ 'auto_deploy' => 'Auto Deploy Command',
+ 'auto_question' => 'Choose between Standalone and Docker install.',
+ 'auto_label' => 'Type',
+ 'standalone' => 'Standalone',
+ 'docker' => 'Docker',
+ 'auto_command' => 'To auto-configure yer node run the followin\' command:',
+ 'reset_token' => 'Reset Authorization Token',
+ 'token_reset' => 'The daemon token has been reset.',
+ 'reset_help' => 'Resettin\' the daemon token will void any request comin\' from the old token. This token be used fer all sensitive operations on the daemon includin\' server creation and deletion. We suggest changin\' this token regularly fer security.',
+
+ 'no_nodes' => 'No Harbors',
+ 'none' => 'None',
+ 'cpu_chart' => 'CPU - :cpu% of :max%',
+ 'memory_chart' => 'Memory - :used of :total',
+ 'disk_chart' => 'Storage - :used of :total',
+ 'used' => 'Used',
+ 'unused' => 'Unused',
+
+ 'next_step' => 'Next Step',
+ 'node_has_servers' => 'Harbor Has Ships',
+ 'create_allocation' => 'Create Allocation',
+ 'primary_allocation' => 'Primary Allocation',
+ 'databases' => 'Databases',
+ 'backups' => 'Backups',
+
+ 'error_connecting' => 'Error connectin\' to :node',
+ 'error_connecting_description' => 'The configuration could not be automatically updated on Wings, ye will need to manually update the configuration file.',
+ 'allocation' => 'Allocation',
+
+ 'diagnostics' => [
+ 'header' => 'Harbor Diagnostics',
+ 'include_endpoints' => 'Include Endpoints',
+ 'include_endpoints_hint' => 'Includin\' endpoints will show panel urls within the logs and NOT obscure them.',
+ 'include_logs' => 'Include Logs',
+ 'include_logs_hint' => 'Includin\' logs will show recent logs and help track down possible issues.',
+ 'run_diagnostics' => 'Run Diagnostics',
+ 'upload_to_pelican' => 'Upload Logs',
+ 'logs_pulled' => 'Logs Pulled!',
+ 'logs_uploaded' => 'Logs Uploaded',
+ 'upload_failed' => 'Logs Upload Failed',
+ 'view_logs' => 'View Logs',
+ 'pull' => 'Pull',
+ 'upload' => 'Upload',
+ 'clear' => 'Clear',
+ '404' => 'The requested diagnostic report could not be found. Make sure wings be up to date and try again.',
+ ],
+
+ 'cloudflare_issue' => [
+ 'title' => 'Cloudflare Issue',
+ 'body' => 'Yer Harbor be not accessible by Cloudflare',
+ ],
+
+ 'bulk_update_ip' => 'Update IPs',
+ 'bulk_update_ip_description' => 'Replace an old IP address with a new one fer allocations. This be useful when a node\'s IP address changes',
+ 'update_ip' => 'Update IP',
+ 'old_ip' => 'Old IP Address',
+ 'new_ip' => 'New IP Address',
+ 'no_allocations_to_update' => 'No allocations with the selected old IP address were found',
+ 'ip_updated' => 'Successfully updated :count of :total allocation(s)',
+ 'ip_update_failed' => ':count allocation(s) failed to update',
+];
diff --git a/pirate-language/lang/pirate/admin/role.php b/pirate-language/lang/pirate/admin/role.php
new file mode 100644
index 0000000..554eb70
--- /dev/null
+++ b/pirate-language/lang/pirate/admin/role.php
@@ -0,0 +1,17 @@
+ 'Roles',
+ 'model_label' => 'Role',
+ 'model_label_plural' => 'Roles',
+ 'no_roles' => 'No Roles',
+ 'name' => 'Role Name',
+ 'permissions' => 'Permissions',
+ 'in_use' => 'In Use',
+ 'all' => 'All',
+ 'root_admin' => 'The :role has all permissions.',
+ 'root_admin_delete' => 'Can\'t delete Root Admin',
+ 'users' => 'Users',
+ 'nodes' => 'Harbors',
+ 'nodes_hint' => 'Leave empty to allow access to all harbors.',
+];
diff --git a/pirate-language/lang/pirate/admin/server.php b/pirate-language/lang/pirate/admin/server.php
new file mode 100644
index 0000000..de2cbc0
--- /dev/null
+++ b/pirate-language/lang/pirate/admin/server.php
@@ -0,0 +1,150 @@
+ 'Ships',
+ 'model_label' => 'Ship',
+ 'model_label_plural' => 'Ships',
+ 'no_servers' => 'No Ships in Port',
+ 'create' => 'Build a New Ship',
+ 'next_step' => 'Next Voyage',
+ 'ip_address' => 'Harbor Address',
+ 'ip_address_helper' => 'Usually yer ship\'s dock location unless ye be usin\' a secret passage.',
+ 'port' => 'Dock',
+ 'ports' => 'Docks',
+ 'alias' => 'Ship\'s Nickname',
+ 'alias_helper' => 'Optional name to help ye remember which ship be which.',
+ 'locked' => 'Anchored Down?',
+ 'locked_helper' => 'Crew won\'t be able to scuttle anchored docks',
+ 'lock' => 'Drop Anchor',
+ 'unlock' => 'Weigh Anchor',
+ 'name' => 'Ship Name',
+ 'external_id' => 'External Marking',
+ 'owner' => 'Captain',
+ 'description' => 'Ship\'s Tale',
+ 'install_script' => 'Run the Riggin\' Script?',
+ 'start_after' => 'Set Sail After Riggin\'?',
+ 'yes' => 'Aye',
+ 'no' => 'Nay',
+ 'skip' => 'Skip It',
+ 'primary' => 'Main Deck',
+ 'already_primary' => 'Already the Main Deck',
+ 'make_primary' => 'Make It the Main Deck',
+ 'startup_cmd' => 'Launch Orders',
+ 'startup_name' => 'Launch Name',
+ 'default_startup' => 'Default Launch Orders',
+ 'startup_placeholder' => 'Enter custom launch orders',
+ 'variables' => 'Ship\'s Variables',
+ 'resource_limits' => 'Cargo Limits',
+ 'cpu' => 'Wind Power',
+ 'cpu_limit' => 'Wind Power Limit',
+ 'cpu_helper' => '100% equals one full sail.',
+ 'unlimited' => 'No Limits, Sail Free!',
+ 'limited' => 'Rationed',
+ 'enabled' => 'Raisin\' the Flag',
+ 'disabled' => 'Lowered the Flag',
+ 'memory' => 'Cargo Hold',
+ 'memory_limit' => 'Cargo Hold Limit',
+ 'memory_helper' => 'Wings will add extra room to this when buildin\' the hold to make sure it doesn\'t overflow when full.',
+ 'disk' => 'Storage Hold',
+ 'disk_limit' => 'Storage Hold Limit',
+ 'advanced_limits' => 'Advanced Rationin\'',
+ 'cpu_pin' => 'Sail Pinnin\'',
+ 'threads' => 'Pinned Sails',
+ 'pin_help' => 'Add pinned sail, e.g. 0 or 2-4',
+ 'swap' => 'Emergency Hold',
+ 'swap_limit' => 'Emergency Hold Limit',
+ 'oom' => 'Overboard Tosser',
+ 'feature_limits' => 'Feature Rationin\'',
+ 'docker_settings' => 'Ship\'s Blueprint',
+ 'docker_image' => 'Ship Design',
+ 'image_name' => 'Design Name',
+ 'primary_allocation' => 'Main Harbor Spot',
+ 'image' => 'Design',
+ 'image_placeholder' => 'Enter a custom ship design',
+ 'container_labels' => 'Cargo Tags',
+ 'title' => 'Ship\'s Title',
+ 'actions' => 'Orders',
+ 'console' => 'Captain\'s Deck',
+ 'suspend' => 'Maroon the Ship',
+ 'unsuspend' => 'Free the Ship',
+ 'reinstall' => 'Rebuild the Ship',
+ 'reinstall_help' => 'This will rebuild the ship from scratch usin\' the assigned egg riggin\' script.',
+ 'reinstall_modal_heading' => 'Are ye sure ye want to rebuild this ship from scratch?',
+ 'reinstall_modal_description' => '!! This can send yer treasure to Davy Jones\' Locker forever !!',
+ 'server_status' => 'Ship\'s Condition',
+ 'view_install_log' => 'View the riggin\' log',
+ 'uuid' => 'Ship\'s Mark',
+ 'node' => 'Harbor',
+ 'short_uuid' => 'Short Ship\'s Mark',
+ 'toggle_install' => 'Toggle Riggin\' Status',
+ 'toggle_install_help' => 'If ye need to change the riggin\' status from unrigged to rigged, or vice versa, ye may do so with this button.',
+ 'toggle_install_failed_header' => 'Ship be in shambles',
+ 'toggle_install_failed_desc' => 'Do ye want to rebuild the ship to fix this mess?',
+ 'transfer' => 'Sail to Another Harbor',
+ 'transfer_help' => 'Move this ship to another harbor on this map.
Warnin\'! This be still a risky voyage. Consider buryin\' yer treasure first to avoid losin\' it!',
+ 'condition' => 'Ship\'s Health',
+ 'suspend_all' => 'Maroon All Ships',
+ 'unsuspend_all' => 'Free All Ships',
+ 'select_allocation' => 'Pick a Dock',
+ 'new_allocation' => 'Build a New Dock',
+ 'additional_allocations' => 'Extra Docks',
+ 'select_additional' => 'Pick Extra Docks',
+ 'no_variables' => 'This egg has no special cargo, matey!',
+ 'select_egg' => 'Pick an egg first to see what cargo it holds!',
+ 'allocations' => 'Harbor Spots',
+ 'databases' => 'Treasure Vaults',
+ 'no_databases' => 'No Treasure Vaults exist fer this Ship',
+ 'delete_db' => 'Are ye sure ye want to scuttle :name ?',
+ 'delete_db_heading' => 'Scuttle This Vault?',
+ 'backups' => 'Buried Treasure',
+ 'egg' => 'Ship\'s Blueprint',
+ 'mounts' => 'Extra Storage',
+ 'no_mounts' => 'No Extra Storage fer this Harbor',
+ 'create_database' => 'Build a Treasure Vault',
+ 'no_db_hosts' => 'No Vault Keepers',
+ 'failed_to_create' => 'Failed to build the Vault',
+ 'change_egg' => 'Change Ship\'s Blueprint',
+ 'new_egg' => 'New Blueprint',
+ 'keep_old_variables' => 'Keep old cargo manifest if possible?',
+ 'create_allocation' => 'Claim a Dock',
+ 'add_allocation' => 'Add a Dock',
+ 'view' => 'Take a Look',
+ 'no_log' => 'No Captain\'s Log Available',
+ 'tabs' => [
+ 'information' => 'Ship\'s Details',
+ 'egg_configuration' => 'Blueprint Setup',
+ 'environment_configuration' => 'Voyage Setup',
+ ],
+ 'notifications' => [
+ 'server_suspension' => 'Ship Marooning',
+ 'server_suspended' => 'Ship has been marooned',
+ 'server_already_suspended' => 'Ship be already marooned, matey!',
+ 'server_suspend_help' => 'This will maroon the Ship, halt all sailin\', and immediately stop the crew from accessin\' their cargo or managin\' the Ship through the panel or API.',
+ 'server_unsuspend_help' => 'This will free the Ship and restore normal crew access.',
+ 'server_unsuspended' => 'Ship has been freed from maroonin\'',
+ 'error_server_delete' => 'Ship couldn\'t be safely scuttled.',
+ 'error_server_delete_body' => 'Ye may Force Scuttle it anyway.',
+ 'create_failed' => 'Could not build the Ship',
+ 'invalid_port_range' => 'Invalid Dock Range',
+ 'invalid_port_range_body' => 'Yer dock range ain\'t proper numbers: :port',
+ 'too_many_ports' => 'Too many docks at once, arr!',
+ 'too_many_ports_body' => 'The current limit be :limit docks at one time.',
+ 'invalid_port' => 'Dock not in sailin\' range',
+ 'invalid_port_body' => ':i ain\'t in the valid dock range between :portFloor-:portCeil',
+ 'already_exists' => 'Dock already claimed',
+ 'already_exists_body' => ':i be already claimed by another ship',
+ 'error_connecting' => 'Trouble reachin\' :node',
+ 'error_connecting_description' => 'The orders couldn\'t be automatically sent to Wings, ye will need to manually restart the ship.',
+ 'install_toggled' => 'Riggin\' status changed',
+ 'install_toggle_failed' => 'Could not change riggin\' status',
+ 'reinstall_started' => 'Ship rebuild started',
+ 'reinstall_failed' => 'Could not start the rebuild',
+ 'log_failed' => 'Could not reach Wings to fetch the riggin\' log.',
+ 'transfer_started' => 'Ship voyage to new harbor started',
+ 'transfer_failed' => 'Voyage failed',
+ 'already_transfering' => 'Ship be currently sailin\' to another harbor.',
+ ],
+ 'notes' => 'Ship\'s Log',
+ 'no_notes' => 'No Entries in the Log',
+ 'none' => 'None, Matey',
+];
diff --git a/pirate-language/lang/pirate/admin/setting.php b/pirate-language/lang/pirate/admin/setting.php
new file mode 100644
index 0000000..a39b86f
--- /dev/null
+++ b/pirate-language/lang/pirate/admin/setting.php
@@ -0,0 +1,157 @@
+ 'Ship\'s Rules',
+ 'save_success' => 'Rules be etched in stone!',
+ 'save_failed' => 'Failed to etch the rules, arr!',
+ 'navigation' => [
+ 'general' => 'General Orders',
+ 'captcha' => 'Proof of Humanity',
+ 'mail' => 'Message Bottles',
+ 'backup' => 'Treasure Burial',
+ 'oauth' => 'Trusted Allies',
+ 'misc' => 'Odds & Ends',
+ ],
+ 'general' => [
+ 'app_name' => 'Ship\'s Name',
+ 'app_logo' => 'Ship\'s Flag',
+ 'app_logo_help' => 'Flag should be placed in the public cargo hold. Leave blank to use Ship\'s Name instead.',
+ 'app_favicon' => 'Ship\'s Small Flag',
+ 'app_favicon_help' => 'Small flag should be placed in the public cargo hold.',
+ 'debug_mode' => 'Captain\'s Spyglass',
+ 'navigation' => 'Steerin\' Method',
+ 'default_navigation' => 'Default Steerin\' Type',
+ 'sidebar' => 'Side Rail',
+ 'topbar' => 'Top Deck',
+ 'mixed' => 'Mixed Deck',
+ 'unit_prefix' => 'Measure Type',
+ 'decimal_prefix' => 'Decimal Countin\' (MB/GB)',
+ 'binary_prefix' => 'Binary Countin\' (MiB/GiB)',
+ '2fa_requirement' => 'Double Lock Orders',
+ 'not_required' => 'No Lock Needed',
+ 'admins_only' => 'Required fer Captains Only',
+ 'all_users' => 'Required fer All Crew',
+ 'trusted_proxies' => 'Trusted Middlemen',
+ 'trusted_proxies_help' => 'New Harbor Mark or Range',
+ 'clear' => 'Swab the Deck',
+ 'set_to_cf' => 'Set to Cloudflare Waters',
+ 'display_width' => 'Viewport Width',
+ 'avatar_provider' => 'Portrait Painter',
+ 'uploadable_avatars' => 'Let crew upload their own portraits?',
+ ],
+ 'captcha' => [
+ 'enable' => 'Enable',
+ 'disable' => 'Disable',
+ 'info_label' => 'Info',
+ 'info' => 'Ye can generate the keys on yer Cloudflare Dashboard. A Cloudflare account be required.',
+ 'site_key' => 'Site Key',
+ 'secret_key' => 'Secret Key',
+ 'verify' => 'Verify Domain?',
+ ],
+ 'mail' => [
+ 'mail_driver' => 'Mail Driver',
+ 'test_mail' => 'Send Test Mail',
+ 'test_mail_sent' => 'Test Mail sent',
+ 'test_mail_failed' => 'Test Mail failed',
+ 'from_settings' => 'From Settin\'s',
+ 'from_settings_help' => 'Set the Address and Name used as "From" in mails.',
+ 'from_address' => 'From Address',
+ 'from_name' => 'From Name',
+ 'smtp' => [
+ 'smtp_title' => 'SMTP Configuration',
+ 'host' => 'Host',
+ 'port' => 'Port',
+ 'username' => 'Username',
+ 'password' => 'Password',
+ 'scheme' => 'Scheme',
+ ],
+ 'mailgun' => [
+ 'mailgun_title' => 'Mailgun Configuration',
+ 'domain' => 'Domain',
+ 'secret' => 'Secret',
+ 'endpoint' => 'Endpoint',
+ ],
+ ],
+ 'backup' => [
+ 'backup_driver' => 'Backup Driver',
+ 'throttle' => 'Throttles',
+ 'throttle_help' => 'Configure how many backups can be created in a period. Set period to 0 to disable this throttle.',
+ 'limit' => 'Limit',
+ 'period' => 'Period',
+ 'seconds' => 'Seconds',
+ 's3' => [
+ 's3_title' => 'S3 Configuration',
+ 'default_region' => 'Default Region',
+ 'access_key' => 'Access Key ID',
+ 'secret_key' => 'Secret Access Key',
+ 'bucket' => 'Bucket',
+ 'endpoint' => 'Endpoint',
+ 'use_path_style_endpoint' => 'Use Path Style Endpoint',
+ ],
+ ],
+ 'oauth' => [
+ 'enable' => 'Enable',
+ 'enable_schema' => 'Enable :schema',
+ 'disable' => 'Disable',
+ 'client_id' => 'Client ID',
+ 'client_secret' => 'Client Secret',
+ 'redirect' => 'Redirect URL',
+ 'web_api_key' => 'Web API Key',
+ 'base_url' => 'Base URL',
+ 'display_name' => 'Display Name',
+ 'auth_url' => 'Authorization callback URL',
+ 'create_missing_users' => 'Auto Create Missin\' Users?',
+ 'link_missing_users' => 'Auto Link Missin\' Users?',
+ ],
+ 'misc' => [
+ 'auto_allocation' => [
+ 'title' => 'Automatic Allocation Creation',
+ 'helper' => 'Toggle if Users can create allocations via the client area.',
+ 'question' => 'Allow Users to create Allocations?',
+ 'create_new' => 'Create new allocations if none available?',
+ 'create_new_help' => 'When enabled, creates new allocations. When disabled, only assigns from existin\' unassigned allocations. Both options factor the port range below into account.',
+ 'start' => 'Start Port',
+ 'end' => 'End Port',
+ ],
+ 'mail_notifications' => [
+ 'title' => 'Mail Notifications',
+ 'helper' => 'Toggle which mail notifications should be sent to Users.',
+ 'server_installed' => 'Ship Built',
+ 'server_reinstalled' => 'Ship Rebuilt',
+ ],
+ 'connections' => [
+ 'title' => 'Connections',
+ 'helper' => 'Timeouts used when makin\' requests.',
+ 'request_timeout' => 'Request Timeout',
+ 'connection_timeout' => 'Connection Timeout',
+ 'seconds' => 'Seconds',
+ ],
+ 'activity_log' => [
+ 'title' => 'Activity Logs',
+ 'helper' => 'Configure how often old activity logs should be pruned and whether admin activities should be logged.',
+ 'prune_age' => 'Prune Age',
+ 'days' => 'Days',
+ 'log_admin' => 'Hide admin activities?',
+ ],
+ 'api' => [
+ 'title' => 'API',
+ 'helper' => 'Defines the rate limit fer the number of requests per minute that can be executed.',
+ 'client_rate' => 'Client API Rate Limit',
+ 'app_rate' => 'Application API Rate Limit',
+ 'rpm' => 'Requests per Minute',
+ ],
+ 'server' => [
+ 'title' => 'Ships',
+ 'helper' => 'Settin\'s fer Ships',
+ 'edit_server_desc' => 'Allow Crew to edit Ship Tales?',
+ 'console_font_upload' => 'Captain\'s Deck Font Upload',
+ 'console_font_hint' => 'Only *.ttf fonts be supported. Mono fonts strongly recommended!',
+ ],
+ 'webhook' => [
+ 'title' => 'Webhooks',
+ 'helper' => 'Configure how often old webhook logs should be pruned.',
+ 'prune_age' => 'Prune Age',
+ 'days' => 'Days',
+ ],
+ ],
+];
diff --git a/pirate-language/lang/pirate/admin/user.php b/pirate-language/lang/pirate/admin/user.php
new file mode 100644
index 0000000..4fa96b2
--- /dev/null
+++ b/pirate-language/lang/pirate/admin/user.php
@@ -0,0 +1,24 @@
+ 'Users',
+ 'model_label' => 'User',
+ 'model_label_plural' => 'Users',
+ 'self_delete' => 'Can\'t Delete Yerself',
+ 'has_servers' => 'Pirate Has Ships',
+ 'email' => 'Email',
+ 'username' => 'Username',
+ 'password' => 'Password',
+ 'external_id' => 'External ID',
+ 'is_managed_externally' => 'Be managed externally?',
+ 'is_managed_externally_helper' => 'If yer users be managed by external software (e.g. a billin\' software) ye may enable this to prevent users from changin\' their username, e-mail and password from within the panel.',
+ 'password_help' => 'Providin\' a user password be optional. New user email will prompt users to create a password the first time they login.',
+ 'admin_roles' => 'Admin Roles',
+ 'roles' => 'Roles',
+ 'no_roles' => 'No Roles',
+ 'servers' => 'Ships',
+ 'subusers' => 'Crew Members',
+ 'password_reset' => 'Reset Password',
+ 'password_reset_sent' => 'Password Reset E-Mail Sent',
+ 'password_reset_failed' => 'Failed to Send Password Reset E-Mail',
+];
diff --git a/pirate-language/lang/pirate/admin/webhook.php b/pirate-language/lang/pirate/admin/webhook.php
new file mode 100644
index 0000000..11ee287
--- /dev/null
+++ b/pirate-language/lang/pirate/admin/webhook.php
@@ -0,0 +1,63 @@
+ 'Webhooks',
+ 'model_label' => 'Webhook',
+ 'model_label_plural' => 'Webhooks',
+ 'endpoint' => 'Endpoint',
+ 'description' => 'Description',
+ 'no_webhooks' => 'No Webhooks',
+ 'help' => 'Help',
+ 'help_text' => 'Ye have to wrap variable name in between {{ }} fer example if ye want to get the name from the api ye can use {{name}}.',
+ 'test_now' => 'Test Now',
+ 'test_now_help' => 'This will fire a `created: Ship` event',
+ 'table' => [
+ 'description' => 'Description',
+ 'endpoint' => 'Endpoint',
+ ],
+ 'headers' => 'Headers',
+ 'events' => 'Events',
+ 'regular' => 'Regular',
+ 'reset_headers' => 'Reset Headers',
+ 'discord' => 'Discord',
+ 'discord_message' => [
+ 'profile' => 'Profile',
+ 'message' => 'Message',
+ 'username' => 'Username',
+ 'avatar_url' => 'Avatar URL',
+ 'forum_thread' => 'Forum Thread Name',
+ 'supress_embeds' => 'Suppress Embeds',
+ 'supress_embeds_text' => 'Do not include any embeds when serializin\' this message',
+ 'supress_notifications' => 'Suppress Notifications',
+ 'supress_notifications_text' => 'This message will not trigger push and desktop notifications',
+ ],
+ 'discord_embed' => [
+ 'add_embed' => 'Add Embed',
+ 'flags' => 'Flags',
+ 'thumbnail' => 'Thumbnail URL',
+ 'embeds' => 'Embeds',
+ 'thread_name' => 'Forum Thread Name',
+ 'allowed_mentions' => 'Allowed Mentions',
+ 'roles' => 'Roles',
+ 'users' => 'Users',
+ 'everyone' => '@everyone & @here',
+ 'author' => 'Author',
+ 'author_url' => 'Author URL',
+ 'author_icon_url' => 'Author Icon URL',
+ 'body' => 'Body',
+ 'title' => 'Title',
+ 'color' => 'Embed Color',
+ 'url' => 'URL',
+ 'images' => 'Images',
+ 'image_url' => 'Image URL',
+ 'image_thumbnail' => 'Thumbnail URL',
+ 'footer' => 'Footer',
+ 'has_timestamp' => 'Has Timestamp',
+ 'footer_icon_url' => 'Footer Icon URL',
+ 'add_field' => 'Add Field',
+ 'fields' => 'Fields',
+ 'field_name' => 'Field Name',
+ 'field_value' => 'Field Value',
+ 'inline_field' => 'Inline Field',
+ ],
+];
diff --git a/pirate-language/lang/pirate/auth.php b/pirate-language/lang/pirate/auth.php
new file mode 100644
index 0000000..10e66f3
--- /dev/null
+++ b/pirate-language/lang/pirate/auth.php
@@ -0,0 +1,24 @@
+ 'These here credentials don\'t match what be in our ship\'s log, ye landlubber!',
+ 'failed-two-factor' => 'Wrong secret code, ye scallywag!',
+ 'two-factor-code' => 'Double Lock Code',
+ 'two-factor-hint' => 'Ye may use emergency codes if ye lost yer compass.',
+ 'password' => 'The secret password ye provided be as wrong as a drunk sailor\'s aim.',
+ 'throttle' => 'Too many attempts to board, matey! Try again in :seconds seconds or walk the plank!',
+ '2fa_must_be_enabled' => 'The captain has ordered that the Double Lock must be enabled on yer account to sail these waters.',
+
+];
diff --git a/pirate-language/lang/pirate/command/messages.php b/pirate-language/lang/pirate/command/messages.php
new file mode 100644
index 0000000..ce4c30e
--- /dev/null
+++ b/pirate-language/lang/pirate/command/messages.php
@@ -0,0 +1,54 @@
+ [
+ 'search_users' => 'Enter a Username, User ID, or Email Address',
+ 'select_search_user' => 'ID of user to delete (Enter \'0\' to re-search)',
+ 'deleted' => 'User successfully deleted from the Panel.',
+ 'confirm_delete' => 'Are ye sure ye want to delete this user from the Panel?',
+ 'no_users_found' => 'No users were found fer the search term provided.',
+ 'multiple_found' => 'Multiple accounts were found fer the user provided, unable to delete a user because of the --no-interaction flag.',
+ 'ask_admin' => 'Be this user an administrator?',
+ 'ask_email' => 'Email Address',
+ 'ask_username' => 'Username',
+ 'ask_password' => 'Password',
+ 'ask_password_tip' => 'If ye would like to create an account with a random password emailed to the user, re-run this command (CTRL+C) and pass the `--no-password` flag.',
+ 'ask_password_help' => 'Passwords must be at least 8 characters in length and contain at least one capital letter and number.',
+ '2fa_help_text' => 'This command will disable 2-factor authentication fer a user\'s account if it be enabled. This should only be used as an account recovery command if the user be locked out of their account. If this ain\'t what ye wanted to do, press CTRL+C to exit this process.',
+ '2fa_disabled' => '2-Factor authentication has been disabled fer :email.',
+ ],
+ 'schedule' => [
+ 'output_line' => 'Dispatchin\' job fer first task in `:schedule` (:id).',
+ ],
+ 'maintenance' => [
+ 'deleting_service_backup' => 'Deletin\' service backup file :file.',
+ ],
+ 'server' => [
+ 'rebuild_failed' => 'Rebuild request fer ":name" (#:id) on node ":node" failed with error: :message',
+ 'reinstall' => [
+ 'failed' => 'Reinstall request fer ":name" (#:id) on node ":node" failed with error: :message',
+ 'confirm' => 'Ye be about to reinstall against a group of servers. Do ye wish to continue?',
+ ],
+ 'power' => [
+ 'confirm' => 'Ye be about to perform a :action against :count servers. Do ye wish to continue?',
+ 'action_failed' => 'Power action request fer ":name" (#:id) on node ":node" failed with error: :message',
+ ],
+ ],
+ 'environment' => [
+ 'mail' => [
+ 'ask_smtp_host' => 'SMTP Host (e.g. smtp.gmail.com)',
+ 'ask_smtp_port' => 'SMTP Port',
+ 'ask_smtp_username' => 'SMTP Username',
+ 'ask_smtp_password' => 'SMTP Password',
+ 'ask_mailgun_domain' => 'Mailgun Domain',
+ 'ask_mailgun_endpoint' => 'Mailgun Endpoint',
+ 'ask_mailgun_secret' => 'Mailgun Secret',
+ 'ask_mandrill_secret' => 'Mandrill Secret',
+ 'ask_postmark_username' => 'Postmark API Key',
+ 'ask_driver' => 'Which driver should be used fer sendin\' emails?',
+ 'ask_mail_from' => 'Email address emails should originate from',
+ 'ask_mail_name' => 'Name that emails should appear from',
+ 'ask_encryption' => 'Encryption method to use',
+ ],
+ ],
+];
diff --git a/pirate-language/lang/pirate/commands.php b/pirate-language/lang/pirate/commands.php
new file mode 100644
index 0000000..3729bdf
--- /dev/null
+++ b/pirate-language/lang/pirate/commands.php
@@ -0,0 +1,60 @@
+ [
+ 'comment' => [
+ 'author' => 'Provide the email address that eggs exported by this Panel should be from. This should be a valid email address.',
+ 'url' => 'The application URL MUST begin with https:// or http:// dependin\' on if ye be usin\' SSL or not. If ye don\'t include the scheme yer emails and other content will link to the wrong location.',
+ 'timezone' => "The timezone should match one of PHP\'s supported timezones. If ye be unsure, please reference https://php.net/manual/en/timezones.php.",
+ ],
+ 'redis' => [
+ 'note' => 'Ye\'ve selected the Redis driver fer one or more options, please provide valid connection information below. In most cases ye can use the defaults provided unless ye have modified yer setup.',
+ 'comment' => 'By default a Redis server instance has fer username default and no password as it be runnin\' locally and inaccessible to the outside world. If this be the case, simply hit enter without enterin\' a value.',
+ 'confirm' => 'It seems a :field be already defined fer Redis, would ye like to change it?',
+ ],
+ ],
+ 'database_settings' => [
+ 'DB_HOST_note' => 'It be highly recommended to not use "localhost" as yer database host as we have seen frequent socket connection issues. If ye want to use a local connection ye should be usin\' "127.0.0.1".',
+ 'DB_USERNAME_note' => "Usin\' the root account fer MySQL connections be not only highly frowned upon, it be also not allowed by this application. Ye\'ll need to have created a MySQL user fer this software.",
+ 'DB_PASSWORD_note' => 'It appears ye already have a MySQL connection password defined, would ye like to change it?',
+ 'DB_error_2' => 'Yer connection credentials have NOT been saved. Ye will need to provide valid connection information before proceedin\'.',
+ 'go_back' => 'Go back and try again',
+ ],
+ 'make_node' => [
+ 'name' => 'Enter a short identifier used to distinguish this node from others',
+ 'description' => 'Enter a description to identify the node',
+ 'scheme' => 'Please either enter https fer SSL or http fer a non-ssl connection',
+ 'fqdn' => 'Enter a domain name (e.g node.example.com) to be used fer connectin\' to the daemon. An IP address may only be used if ye ain\'t usin\' SSL fer this node',
+ 'public' => 'Should this node be public? As a note, settin\' a node to private ye will be denyin\' the ability to auto-deploy to this node.',
+ 'behind_proxy' => 'Be yer FQDN behind a proxy?',
+ 'maintenance_mode' => 'Should maintenance mode be enabled?',
+ 'memory' => 'Enter the maximum amount of memory',
+ 'memory_overallocate' => 'Enter the amount of memory to over allocate by, -1 will disable checkin\' and 0 will prevent creatin\' new servers',
+ 'disk' => 'Enter the maximum amount of disk space',
+ 'disk_overallocate' => 'Enter the amount of disk to over allocate by, -1 will disable checkin\' and 0 will prevent creatin\' new server',
+ 'cpu' => 'Enter the maximum amount of cpu',
+ 'cpu_overallocate' => 'Enter the amount of cpu to over allocate by, -1 will disable checkin\' and 0 will prevent creatin\' new server',
+ 'upload_size' => 'Enter the maximum filesize upload',
+ 'daemonListen' => 'Enter the daemon listenin\' port',
+ 'daemonConnect' => 'Enter the daemon connectin\' port (can be same as listen port)',
+ 'daemonSFTP' => 'Enter the daemon SFTP listenin\' port',
+ 'daemonSFTPAlias' => 'Enter the daemon SFTP alias (can be empty)',
+ 'daemonBase' => 'Enter the base folder',
+ 'success' => 'Successfully created a new node with the name :name and has an id of :id',
+ ],
+ 'node_config' => [
+ 'error_not_exist' => 'The selected node does not exist.',
+ 'error_invalid_format' => 'Invalid format specified. Valid options be yaml and json.',
+ ],
+ 'key_generate' => [
+ 'error_already_exist' => 'It appears ye have already configured an application encryption key. Continuin\' with this process with overwrite that key and cause data corruption fer any existin\' encrypted data. DO NOT CONTINUE UNLESS YE KNOW WHAT YE BE DOIN\'.',
+ 'understand' => 'I understand the consequences of performin\' this command and accept all responsibility fer the loss of encrypted data.',
+ 'continue' => 'Are ye sure ye wish to continue? Changin\' the application encryption key WILL CAUSE DATA LOSS.',
+ ],
+ 'schedule' => [
+ 'process' => [
+ 'no_tasks' => 'There be no scheduled tasks fer servers that need to be run.',
+ 'error_message' => 'An error was encountered while processin\' Schedule: :schedules',
+ ],
+ ],
+];
diff --git a/pirate-language/lang/pirate/exceptions.php b/pirate-language/lang/pirate/exceptions.php
index 896d767..c8a5edb 100644
--- a/pirate-language/lang/pirate/exceptions.php
+++ b/pirate-language/lang/pirate/exceptions.php
@@ -46,7 +46,7 @@
'users' => [
'is_self' => 'Ye can\'t send yerself to the briny deep by deletin\' yer own user account.',
'has_servers' => 'Ye can\'t delete a user while they\'ve got servers sailin\' under their flag. Sink their servers first, then come back.',
- 'node_revocation_failed' => 'Failed to revoke keys on Node #:node. :error',
+ 'node_revocation_failed' => 'Failed to revoke keys on Harbor #:node. :error',
],
'deployment' => [
'no_viable_nodes' => 'No nodes meetin\' the demands for automatic deployment could be found in these waters.',
diff --git a/pirate-language/lang/pirate/installer.php b/pirate-language/lang/pirate/installer.php
new file mode 100644
index 0000000..716706c
--- /dev/null
+++ b/pirate-language/lang/pirate/installer.php
@@ -0,0 +1,103 @@
+ 'Ship\'s Panel Setup, Matey!',
+ 'requirements' => [
+ 'title' => 'Ship\'s Requirements',
+ 'sections' => [
+ 'version' => [
+ 'title' => 'PHP Version',
+ 'or_newer' => ':version or a newer vessel',
+ 'content' => 'Yer PHP Version be :version.',
+ ],
+ 'extensions' => [
+ 'title' => 'PHP Rigging',
+ 'good' => 'All needed PHP rigging be properly installed.',
+ 'bad' => 'These here PHP rigging pieces be missin\': :extensions',
+ ],
+ 'permissions' => [
+ 'title' => 'Cargo Hold Permissions',
+ 'good' => 'All holds have the proper access rights.',
+ 'bad' => 'These here holds have wrong permissions: :folders',
+ ],
+ ],
+ 'exception' => 'Some ship requirements be missin\', arr!',
+ ],
+ 'environment' => [
+ 'title' => 'Ship\'s Environment',
+ 'fields' => [
+ 'app_name' => 'Ship\'s Name',
+ 'app_name_help' => 'This will be the name of yer fine ship.',
+ 'app_url' => 'Harbor Location',
+ 'app_url_help' => 'This be the sea route ye\'ll use to reach yer ship.',
+ 'account' => [
+ 'section' => 'Captain\'s Account',
+ 'email' => 'Message Bottle',
+ 'username' => 'Pirate Name',
+ 'password' => 'Secret Code',
+ ],
+ ],
+ ],
+ 'database' => [
+ 'title' => 'Database',
+ 'driver' => 'Database Driver',
+ 'driver_help' => 'The driver used fer the panel database. We recommend "SQLite".',
+ 'fields' => [
+ 'host' => 'Database Host',
+ 'host_help' => 'The host of yer database. Make sure it be reachable.',
+ 'port' => 'Database Port',
+ 'port_help' => 'The port of yer database.',
+ 'path' => 'Database Path',
+ 'path_help' => 'The path of yer .sqlite file relative to the database folder.',
+ 'name' => 'Database Name',
+ 'name_help' => 'The name of the panel database.',
+ 'username' => 'Database Username',
+ 'username_help' => 'The name of yer database user.',
+ 'password' => 'Database Password',
+ 'password_help' => 'The password of yer database user. Can be empty.',
+ ],
+ 'exceptions' => [
+ 'connection' => 'Database connection failed',
+ 'migration' => 'Migrations failed',
+ ],
+ ],
+ 'session' => [
+ 'title' => 'Session',
+ 'driver' => 'Session Driver',
+ 'driver_help' => 'The driver used fer storin\' sessions. We recommend "Filesystem" or "Database".',
+ ],
+ 'cache' => [
+ 'title' => 'Cache',
+ 'driver' => 'Cache Driver',
+ 'driver_help' => 'The driver used fer cachin\'. We recommend "Filesystem".',
+ 'fields' => [
+ 'host' => 'Redis Host',
+ 'host_help' => 'The host of yer redis server. Make sure it be reachable.',
+ 'port' => 'Redis Port',
+ 'port_help' => 'The port of yer redis server.',
+ 'username' => 'Redis Username',
+ 'username_help' => 'The name of yer redis user. Can be empty',
+ 'password' => 'Redis Password',
+ 'password_help' => 'The password fer yer redis user. Can be empty.',
+ ],
+ 'exception' => 'Redis connection failed',
+ ],
+ 'queue' => [
+ 'title' => 'Queue',
+ 'driver' => 'Queue Driver',
+ 'driver_help' => 'The driver used fer handlin\' queues. We recommend "Database".',
+ 'fields' => [
+ 'done' => 'I have done both steps below.',
+ 'done_validation' => 'Ye need to do both steps before continuin\'!',
+ 'crontab' => 'Run the followin\' command to set up yer crontab. Note that www-data be yer webserver user. On some systems this username might be different!',
+ 'service' => 'To setup the queue worker service ye simply have to run the followin\' command.',
+ ],
+ ],
+ 'exceptions' => [
+ 'write_env' => 'Could not write to .env file',
+ 'migration' => 'Could not run migrations',
+ 'create_user' => 'Could not create admin user',
+ ],
+ 'next_step' => 'Next Step',
+ 'finish' => 'Finish',
+];
diff --git a/pirate-language/lang/pirate/notifications.php b/pirate-language/lang/pirate/notifications.php
new file mode 100644
index 0000000..db443e7
--- /dev/null
+++ b/pirate-language/lang/pirate/notifications.php
@@ -0,0 +1,18 @@
+ 'Board the Ship',
+ 'installation_completed' => 'Ship Built Successfully, Matey!',
+ 'installation_failed' => 'Ship Construction Failed, Arr!',
+ 'reinstallation_completed' => 'Ship Refitted Successfully!',
+ 'reinstallation_failed' => 'Ship Refit Failed, Curse It!',
+ 'failed' => 'Failed, Walk the Plank!',
+ 'user_added' => [
+ 'title' => 'Added to the Crew',
+ 'body' => 'Ye have been added as a crew member to :server.',
+ ],
+ 'user_removed' => [
+ 'title' => 'Thrown Off the Ship',
+ 'body' => 'Ye have been removed from the crew of :server.',
+ ],
+];
diff --git a/pirate-language/lang/pirate/search.php b/pirate-language/lang/pirate/search.php
new file mode 100644
index 0000000..c6b0dc2
--- /dev/null
+++ b/pirate-language/lang/pirate/search.php
@@ -0,0 +1,9 @@
+ 'Ye must enter at least three characters to begin searchin\', arrr!',
+ 'term' => [
+ 'label' => 'Search term',
+ 'description' => 'Enter a server name, uuid, or allocation to begin yer search.',
+ ],
+];
diff --git a/pirate-language/lang/pirate/validation.php b/pirate-language/lang/pirate/validation.php
new file mode 100644
index 0000000..3893bfa
--- /dev/null
+++ b/pirate-language/lang/pirate/validation.php
@@ -0,0 +1,101 @@
+ 'Ye must accept the :attribute, or walk the plank!',
+ 'active_url' => 'The :attribute be not a proper sea chart.',
+ 'after' => 'The :attribute must be a date after :date, arr!',
+ 'after_or_equal' => 'The :attribute must be a date after or equal to :date, savvy?',
+ 'alpha' => 'The :attribute may only contain letters from A to Z, no numbers allowed!',
+ 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes, matey.',
+ 'alpha_num' => 'The :attribute may only contain letters and numbers.',
+ 'array' => 'The :attribute must be a treasure list.',
+ 'before' => 'The :attribute must be a date before :date.',
+ 'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
+ 'between' => [
+ 'numeric' => 'The :attribute must be between :min and :max doubloons.',
+ 'file' => 'The :attribute must be between :min and :max kilobytes of treasure.',
+ 'string' => 'The :attribute must be between :min and :max characters long.',
+ 'array' => 'The :attribute must have between :min and :max items in the cargo.',
+ ],
+
+ 'confirmed' => 'The :attribute confirmation don\'t match, ye scurvy dog!',
+ 'date' => 'The :attribute be not a valid date on the calendar.',
+ 'date_format' => 'The :attribute don\'t match the format :format.',
+ 'different' => 'The :attribute and :other must be different as day and night.',
+ 'digits' => 'The :attribute must be :digits digits long.',
+ 'digits_between' => 'The :attribute must be between :min and :max digits.',
+ 'dimensions' => 'The :attribute has wrong treasure map dimensions.',
+
+ 'email' => 'The :attribute must be a proper message bottle address.',
+
+ 'file' => 'The :attribute must be a scroll.',
+ 'filled' => 'The :attribute field be required, no skippin\'!',
+ 'image' => 'The :attribute must be a portrait or map.',
+
+ 'in_array' => 'The :attribute field be not found in the :other cargo hold.',
+ 'integer' => 'The :attribute must be a whole number.',
+ 'ip' => 'The :attribute must be a valid harbor location.',
+ 'json' => 'The :attribute must be a proper treasure map.',
+ '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.',
+ ],
+ 'mimes' => 'The :attribute must be a file of type: :values.',
+ 'mimetypes' => 'The :attribute must be a file of type: :values.',
+ '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.',
+ ],
+
+ 'numeric' => 'The :attribute must be a number.',
+
+ 'regex' => 'The :attribute format be invalid.',
+
+ 'required_with_all' => 'The :attribute field be required when :values is present.',
+
+ 'same' => 'The :attribute and :other must match.',
+ '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.',
+ ],
+ 'string' => 'The :attribute must be a string.',
+ 'timezone' => 'The :attribute must be a valid zone.',
+
+ 'url' => 'The :attribute format be invalid.',
+
+ /*
+ |--------------------------------------------------------------------------
+ | 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' => [],
+
+ // Internal validation logic for Panel
+ 'internal' => [
+ 'variable_value' => ':env variable',
+ 'invalid_password' => 'The password provided was invalid fer this account.',
+ ],
+];