<?php
/* Copyright 2005-2023, Lime Technology
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version 2,
 * as published by the Free Software Foundation.
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 */
/**
 * Welcome to the Thunderdome. A place where you can get lost in a sea of translations.
 *
 * This file is used to generate the translations for the Vue3 based web components.
 *
 * These key value pairs are derived from web/locales/en_US.json.
 * We use the en_US.json file as the source of truth for the translations.
 * This file is then used to generate the translations for the web components and delivered to them via PHP as a JSON object in myservers2.php (my favorite file name).
 * The web components then use the translations to display the appropriate text to the user.
 *
 * Workflow is as follows:
 * 1. Create a new translation in en_US.json
 * 2. Create a new translation in this file
 * 3. Open unraid/lang-en_US and add the new translation to the appropriate file – typically translations.txt.
 * 3a. This is done so that the translation is available to the rest of the Unraid webgui.
 * 3b. Unfortunately there are numerous "special characters" that aren't allowed in Unraid's translation keys as they're automatically stripped out.
 * 3c. This means that we have to create a new translation key that is a "safe" version of the translation key used in the web components.
 * 3d. Special characters that are not allowed are: ? { } | & ~ ! [ ] ( ) / : * ^ . " '
 * 3e. There are likely more but I'm unable to find the documentation PDF - updated list of invalid characters above as mentioned in the language guide document.
 *
 * Usage example:
 * ```
 * $wCTranslations = new WebComponentTranslations();
 * $wCTranslations->getTranslations();
 * ```
 */
$docroot ??= ($_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp');
require_once "$docroot/webGui/include/Translations.php";

class WebComponentTranslations
{
    private $translations = [];

    public function __construct()
    {
        $this->initializeTranslations();
    }

    private function initializeTranslations()
    {
        $this->translations[$_SESSION['locale'] ?? 'en_US'] = [
            '{0} {1} Key…' => sprintf(_('%1s %2s Key…'), '{0}', '{1}'),
            '{0} devices' => sprintf(_('%s devices'), '{0}'),
            '{0} out of {1} allowed devices – upgrade your key to support more devices' => sprintf(_('%1s out of %2s allowed devices – upgrade your key to support more devices'), '{0}', '{1}'),
            '{0} out of {1} devices' => sprintf(_('%1s out of %2s devices'), '{0}', '{1}'),
            '{0} Release Notes' => sprintf(_('%s Release Notes'), '{0}'),
            '{0} Signed In Successfully' => sprintf(_('%s Signed In Successfully'), '{0}'),
            '{0} Signed Out Successfully' => sprintf(_('%s Signed Out Successfully'), '{0}'),
            '{0} Update Available' => sprintf(_('%s Update Available'), '{0}'),
            '{1} Key {0} Successfully' => sprintf(_('%2s Key %1s Successfully'), '{0}', '{1}'),
            '<p>It is not possible to use a Trial key with an existing Unraid OS installation.</p><p>You may purchase a license key corresponding to this USB Flash device to continue using this installation.</p>' => '<p>' . _('It is not possible to use a Trial key with an existing Unraid OS installation') . '</p><p>' . _('You may purchase a license key corresponding to this USB Flash device to continue using this installation.') . '</p>',
            '<p>Please refresh the page to ensure you load your latest configuration</p>' => '<p>' . _('Please refresh the page to ensure you load your latest configuration') . '</p>',
            '<p>Register for Connect by signing in to your Unraid.net account</p>' => '<p>' . _('Register for Connect by signing in to your Unraid.net account') . '</p>',
            '<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.</p><p>Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.</p>' => '<p>' . _('The license key file does not correspond to the USB Flash boot device.') . ' ' . _('Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key') . '</p><p>' . _('Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.') . '</p>',
            '<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.</p><p>Your Unraid registration key is ineligible for replacement as it is blacklisted.</p>' => '<p>' . _('The license key file does not correspond to the USB Flash boot device.') . ' ' . _('Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key') . '</p><p>' . _('Your Unraid registration key is ineligible for replacement as it is blacklisted.') . '</p>',
            '<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device.</p><p>You may also attempt to Purchase or Replace your key.</p>' => '<p>' . _('The license key file does not correspond to the USB Flash boot device.') . ' ' . _('Please copy the correct key file to the /config directory on your USB Flash boot device') . '</p><p>' . _('You may also attempt to Purchase or Replace your key.') . '</p>',
            '<p>There are multiple license key files present on your USB flash device and none of them correspond to the USB Flash boot device. Please remove all key files, except the one you want to replace, from the /config directory on your USB Flash boot device.</p><p>Alternately you may purchase a license key for this USB flash device.</p><p>If you want to replace one of your license keys with a new key bound to this USB Flash device, please first remove all other key files first.</p>' => '<p>' . _('There are multiple license key files present on your USB flash device and none of them correspond to the USB Flash boot device.') . ' ' . _('Please remove all key files, except the one you want to replace, from the /config directory on your USB Flash boot device') . '</p><p>' . _('Alternately you may purchase a license key for this USB flash device') . '</p><p>' . _('If you want to replace one of your license keys with a new key bound to this USB Flash device, please first remove all other key files first.') . '</p>',
            '<p>There is a physical problem accessing your USB Flash boot device</p>' => '<p>' . _('There is a physical problem accessing your USB Flash boot device') . '</p>',
            '<p>There is a problem with your USB Flash device</p>' => '<p>' . _('There is a problem with your USB Flash device') . '</p>',
            '<p>This USB Flash boot device has been blacklisted. This can occur as a result of transferring your license key to a replacement USB Flash device, and you are currently booted from your old USB Flash device.</p><p>A USB Flash device may also be blacklisted if we discover the serial number is not unique – this is common with USB card readers.</p>' => '<p>' . _('This USB Flash boot device has been blacklisted.') . ' ' . _('This can occur as a result of transferring your license key to a replacement USB Flash device, and you are currently booted from your old USB Flash device.') . '</p><p>' . _('A USB Flash device may also be blacklisted if we discover the serial number is not unique – this is common with USB card readers.') . '</p>',
            '<p>This USB Flash device has an invalid GUID. Please try a different USB Flash device</p>' => '<p>' . _('This USB Flash device has an invalid GUID. Please try a different USB Flash device') . '</p>',
            '<p>To continue using Unraid OS you may purchase a license key. Alternately, you may request a Trial extension.</p>' => '<p>' . _('To continue using Unraid OS you may purchase a license key.') . ' ' . _('Alternately, you may request a Trial extension.') . '</p>',
            '<p>To support more storage devices as your server grows, click Upgrade Key.</p>' => '<p>' . _('To support more storage devices as your server grows, click Upgrade Key.') . '</p>',
            '<p>You have used all your Trial extensions. To continue using Unraid OS you may purchase a license key.</p>' => '<p>' . _('You have used all your Trial extensions.') . ' ' . _('To continue using Unraid OS you may purchase a license key.') . '</p>',
            '<p>Your <em>Trial</em> key includes all the functionality and device support of an <em>Unleashed</em> key.</p><p>After your <em>Trial</em> has reached expiration, your server <strong>still functions normally</strong> until the next time you Stop the array or reboot your server.</p><p>At that point you may either purchase a license key or request a <em>Trial</em> extension.</p>' => '<p>' . _('Your **Trial** key includes all the functionality and device support of an **Unleashed** key') . '</p><p>' . _('After your **Trial** has reached expiration, your server *still functions normally* until the next time you Stop the array or reboot your server') . '</p><p>' . _('At that point you may either purchase a license key or request a *Trial* extension.') . '</p>',
            '<p>Your license key file is corrupted or missing. The key file should be located in the /config directory on your USB Flash boot device.</p><p>If you do not have a backup copy of your license key file you may attempt to recover your key.</p><p>If this was an expired Trial installation, you may purchase a license key.</p>' => '<p>' . _('Your license key file is corrupted or missing.') . ' ' . _('The key file should be located in the /config directory on your USB Flash boot device') . '</p><p>' . _('If you do not have a backup copy of your license key file you may attempt to recover your key with your Unraid.net account') . '</p><p>' . _('If this was an expired Trial installation, you may purchase a license key.') . '</p>',
            '<p>Your license key file is corrupted or missing. The key file should be located in the /config directory on your USB Flash boot device.</p><p>You may attempt to recover your key with your Unraid.net account.</p><p>If this was an expired Trial installation, you may purchase a license key.</p>' => '<p>' . _('Your license key file is corrupted or missing.') . ' ' . _('The key file should be located in the /config directory on your USB Flash boot device') . '</p><p>' . _('If you do not have a backup copy of your license key file you may attempt to recover your key with your Unraid.net account') . '</p><p>' . _('If this was an expired Trial installation, you may purchase a license key.') . '</p>',
            '<p>Your server will not be usable until you purchase a Registration key or install a free 30 day <em>Trial</em> key. A <em>Trial</em> key provides all the functionality of an Unleashed Registration key.</p><p>Registration keys are bound to your USB Flash boot device serial number (GUID). Please use a high quality name brand device at least 1GB in size.</p><p>Note: USB memory card readers are generally not supported because most do not present unique serial numbers.</p><p><strong>Important:</strong></p><ul class="list-disc pl-16px"><li>Please make sure your server time is accurate to within 5 minutes</li><li>Please make sure there is a DNS server specified</li></ul>' => '<p>' . _('Your server will not be usable until you purchase a Registration key or install a free 30 day <em>Trial</em> key.') . ' ' . _('A <em>Trial</em> key provides all the functionality of an Unleashed Registration key.') . '</p><p>' . _('Registration keys are bound to your USB Flash boot device serial number (GUID).') . ' ' . _('Please use a high quality name brand device at least 1GB in size.') . '</p><p>' . _('Note: USB memory card readers are generally not supported because most do not present unique serial numbers.') . '</p><p>' . _('*Important:*') . '</p><ul class="list-disc pl-16px"><li>' . _('Please make sure your server time is accurate to within 5 minutes') . '</li><li>' . _('Please make sure there is a DNS server specified') . '</li>>' . '</ul>',
            '<p>Your Trial key requires an internet connection.</p><p><a href="/Settings/NetworkSettings" class="underline">Please check Settings > Network</a></p>' => '<p>' . _('Your Trial key requires an internet connection') . '</p><p><a href="/Settings/NetworkSettings" class="underline">' . _('Please check Settings > Network') . '</a></p>',
            '<p>Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.</p>' => '<p>' . _('Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.') . '</p>',
            'A Trial key provides all the functionality of an Unleashed Registration key' => _('A Trial key provides all the functionality of an Unleashed Registration key'),
            'Acklowledge that you have made a Flash Backup to enable this action' => _('Acklowledge that you have made a Flash Backup to enable this action'),
            'Activate License' => _('Activate License'),
            'Activate Now' => _('Activate Now'),
            'ago' => _('ago'),
            'All you need is an active internet connection, an Unraid.net account, and the Connect plugin. Get started by installing the plugin.' => _('All you need is an active internet connection, an Unraid.net account, and the Connect plugin.') . ' ' . _('Get started by installing the plugin.'),
            'Attached Storage Devices' => _('Attached Storage Devices'),
            'Backing up...this may take a few minutes' => _('Backing up...this may take a few minutes'),
            'Basic' => _('Basic'),
            'Begin downgrade to {0}' => sprintf(_('Begin downgrade to %s'), '{0}'),
            'Beta' => _('Beta'),
            'Blacklisted USB Flash GUID' => _('Blacklisted USB Flash GUID'),
            'BLACKLISTED' => _('BLACKLISTED'),
            'Calculating OS Update Eligibility…' => _('Calculating OS Update Eligibility…'),
            'Calculating trial expiration…' => _('Calculating trial expiration…'),
            'Callback redirect type not present or incorrect' => _('Callback redirect type not present or incorrect'),
            'Cancel {0}' => sprintf(_('Cancel %s'), '{0}'),
            'Cancel' => _('Cancel'),
            'Cannot access your USB Flash boot device' => _('Cannot access your USB Flash boot device'),
            'Cannot validate Unraid Trial key' => _('Cannot validate Unraid Trial key'),
            'Check for OS Updates' => _('Check for OS Updates'),
            'check for OS updates' => _('check for OS updates'),
            'Check for Prereleases' => _('Check for Prereleases'),
            'Checking WAN IPs…' => _('Checking WAN IPs…'),
            'Checking...' => _('Checking...'),
            'Checkout the Connect Documentation' => _('Checkout the Connect Documentation'),
            'Click to close modal' => _('Click to close modal'),
            'Click to Copy LAN IP {0}' => sprintf(_('Click to copy LAN IP %s'), '{0}'),
            'Close Dropdown' => _('Close Dropdown'),
            'Close Modal' => _('Close Modal'),
            'Close' => _('Close'),
            'Configure Connect Features' => _('Configure Connect Features'),
            'Confirm and start update' => _('Confirm and start update'),
            'Confirm to Install Unraid OS {0}' => sprintf(_('Confirm to Install Unraid OS %s'), '{0}'),
            'Connected' => _('Connected'),
            'Contact Support' => _('Contact Support'),
            'Continue' => _('Continue'),
            'Copied' => _('Copied'),
            'Copy Key URL' => _('Copy Key URL'),
            'Copy your Key URL: {0}' => sprintf(_('Copy your Key URL: %s'), '{0}'),
            'Create Flash Backup' => _('Create Flash Backup'),
            'Create a password' => _('Create a password'),
            'Create an Unraid.net account and activate your key' => _('Create an Unraid.net account and activate your key'),
            'Create Device Password' => _('Create Device Password'),
            'Current Version {0}' => sprintf(_('Current Version %s'), '{0}'),
            'Current Version: Unraid {0}' => sprintf(_('Current Version: Unraid %s'), '{0}'),
            'Customizable Dashboard Tiles' => _('Customizable Dashboard Tiles'),
            'day' => sprintf(_('%s day'), '{n}') . ' | ' . sprintf(_('%s days'), '{n}'),
            'Deep Linking' => _('Deep Linking'),
            'Device is ready to configure' => _('Device is ready to configure'),
            'DNS issue, unable to resolve wanip4.unraid.net' => _('DNS issue, unable to resolve wanip4.unraid.net'),
            'Downgrade Unraid OS to {0}' => sprintf(_('Downgrade Unraid OS to %s'), '{0}'),
            'Downgrade Unraid OS' => _('Downgrade Unraid OS'),
            'Downgrades are only recommended if you\'re unable to solve a critical issue.' => _('Downgrades are only recommended if you\'re unable to solve a critical issue.'),
            'Download Diagnostics' => _('Download Diagnostics'),
            'Download the Diagnostics zip then please open a bug report on our forums with a description of the issue along with your diagnostics.' => _('Download the Diagnostics zip then please open a bug report on our forums with a description of the issue along with your diagnostics.'),
            'Download unraid-api Logs' => _('Download unraid-api Logs'),
            'Dynamic Remote Access' => _('Dynamic Remote Access'),
            'Enable update notifications' => _('Enable update notifications'),
            'Enhance your experience with Unraid Connect' => _('Enhance your experience with Unraid Connect'),
            'Enhance your Unraid experience with Connect' => _('Enhance your Unraid experience with Connect'),
            'Enhance your Unraid experience' => _('Enhance your Unraid experience'),
            'Error creating a trial key. Please try again later.' => _('Error creating a trial key. Please try again later.'),
            'Error Parsing Changelog • {0}' => sprintf(_('Error Parsing Changelog • %s'), '{0}'),
            'Error' => _('Error'),
            'Expired {0}' => sprintf(_('Expired %s'), '{0}'),
            'Expired' => _('Expired'),
            'Expires at {0}' => sprintf(_('Expires at %s'), '{0}'),
            'Expires in {0}' => sprintf(_('Expires in %s'), '{0}'),
            'Extend License to Update' => _('Extend License to Update'),
            'Extend License' => _('Extend License'),
            'Extend Trial' => _('Extend Trial'),
            'Extending your free trial by 15 days' => _('Extending your free trial by 15 days'),
            'Extension Installed' => _('Extension Installed'),
            'Failed to {0} {1} Key' => sprintf(_('Failed to %1s %2s Key'), '{0}', '{1}'),
            'Failed to install key' => _('Failed to install key'),
            'Failed to update Connect account configuration' => _('Failed to update Connect account configuration'),
            'Fetching & parsing changelog…' => _('Fetching & parsing changelog…'),
            'Fix Error' => _('Fix Error'),
            'Flash Backup is not available. Navigate to {0}/Main/Settings/Flash to try again then come back to this page.' => sprintf(_('Flash Backup is not available. Navigate to %s/Main/Settings/Flash to try again then come back to this page.'), '{0}'),
            'Flash GUID Error' => _('Flash GUID Error'),
            'Flash GUID required to check replacement status' => _('Flash GUID required to check replacement status'),
            'Flash GUID' => _('Flash GUID'),
            'Flash Product' => _('Flash Product'),
            'Flash Vendor' => _('Flash Vendor'),
            'Get an overview of your server\'s state, storage space, apps and VMs status, and more.' => _('Get an overview of your server\'s state, storage space, apps and VMs status, and more.'),
            'Get Started' => _('Get Started'),
            'Go to Connect plugin settings' => _('Go to Connect plugin settings'),
            'Go to Connect' => _('Go to Connect'),
            'Go to Management Access Now' => _('Go to Management Access Now'),
            'Go to Settings > Notifications to enable automatic OS update notifications for future releases.' => _('Go to Settings > Notifications to enable automatic OS update notifications for future releases.'),
            'Go to Tools > Management Access to activate the Flash Backup feature and ensure your backup is up-to-date.' => _('Go to Tools > Management Access to activate the Flash Backup feature and ensure your backup is up-to-date.'),
            'Go to Tools > Management Access to ensure your backup is up-to-date.' => _('Go to Tools > Management Access to ensure your backup is up-to-date.'),
            'Go to Tools > Registration to fix' => _('Go to Tools > Registration to fix'),
            'Go to Tools > Registration to Learn More' => _('Go to Tools > Registration to Learn More'),
            'Go to Tools > Update OS for more options.' => _('Go to Tools > Update OS for more options.'),
            'Go to Tools > Update' => _('Go to Tools > Update'),
            'hour' => sprintf(_('%s hour'), '{n}') . ' | ' . sprintf(_('%s hours'), '{n}'),
            'I have made a Flash Backup' => _('I have made a Flash Backup'),
            'If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached.' => _('If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached.'),
            'Ignore this message if you are currently connected via Remote Access or VPN.' => _('Ignore this message if you are currently connected via Remote Access or VPN.'),
            'Ignore this release until next reboot' => _('Ignore this release until next reboot'),
            'Ignored Releases' => _('Ignored Releases'),
            'In the rare event you need to downgrade we ask that you please provide us with Diagnostics so we can investigate your issue.' => _('In the rare event you need to downgrade we ask that you please provide us with Diagnostics so we can investigate your issue.'),
            'Install Connect' => _('Install Connect'),
            'Install Recovered' => _('Install Recovered'),
            'Install Replaced' => _('Install Replaced'),
            'Install Unraid OS {0}' => sprintf(_('Install Unraid OS %s'), '{0}'),
            'Install' => _('Install'),
            'Installed' => _('Installed'),
            'Installing Extended Trial' => _('Installing Extended Trial'),
            'Installing Extended' => _('Installing Extended'),
            'Installing Recovered' => _('Installing Recovered'),
            'Installing Replaced' => _('Installing Replaced'),
            'Installing' => _('Installing'),
            'Introducing Unraid Connect' => _('Introducing Unraid Connect'),
            'Invalid API Key Format' => _('Invalid API Key Format'),
            'Invalid API Key' => _('Invalid API Key'),
            'Invalid installation' => _('Invalid installation'),
            'It\s highly recommended to review the changelog before continuing your update.' => _('It\'s highly recommended to review the changelog before continuing your update.'),
            'Key ineligible for {0}' => sprintf(_('Key ineligible for %s'), '{0}'),
            'Key ineligible for future releases' => _('Key ineligible for future releases'),
            'Keyfile required to check replacement status' => _('Keyfile required to check replacement status'),
            'LAN IP {0}' => sprintf(_('LAN IP %s'), '{0}'),
            'LAN IP Copied' => _('LAN IP Copied'),
            'LAN IP' => _('LAN IP'),
            'Last checked: {0}' => sprintf(_('Last checked: %s'), '{0}'),
            'Learn more about the error' => _('Learn more about the error'),
            'Learn more and fix' => _('Learn more and fix'),
            'Learn more and link your key to your account' => _('Learn more and link your key to your account'),
            'Learn More' => _('Learn More'),
            'Learn more' => _('Learn more'),
            'Let\'s activate your Unraid OS License' => _('Let\'s activate your Unraid OS License'),
            'Let\'s Unleash your Hardware!' => _('Let\'s Unleash your Hardware!'),
            'License key actions' => _('License key actions'),
            'License key type' => _('License key type'),
            'License Management' => _('License Management'),
            'Link Key' => _('Link Key'),
            'Linked to Unraid.net account' => _('Linked to Unraidnet account'),
            'Loading' => _('Loading'),
            'Manage Unraid.net Account in new tab' => _('Manage Unraid.net Account in new tab'),
            'Manage Unraid.net Account' => _('Manage Unraid.net Account'),
            'Manage your license keys at any time via the My Keys section.' => _('Manage your license keys at any time via the My Keys section.'),
            'Manage Your Server Within Connect' => _('Manage Your Server Within Connect'),
            'minute' => sprintf(_('%s minute'), '{n}') . ' | ' . sprintf(_('%s minutes'), '{n}'),
            'Missing key file' => _('Missing key file'),
            'month' => sprintf(_('%s month'), '{n}') . ' | ' . sprintf(_('%s months'), '{n}'),
            'More about Unraid.net Accounts' => _('More about Unraid.net Accounts'),
            'More about Unraid.net' => _('More about Unraid.net'),
            'More options' => _('More options'),
            'Multiple License Keys Present' => _('Multiple License Keys Present'),
            'Never ever be left without a backup of your config. If you need to change flash drives, generate a backup from Connect and be up and running in minutes.' => _('Never ever be left without a backup of your config.') . ' ' . _('If you need to change flash drives, generate a backup from Connect and be up and running in minutes.'),
            'New Version: {0}' => sprintf(_('New Version: %s'), '{0}'),
            'No downgrade available' => _('No downgrade available'),
            'No Flash' => _('No Flash'),
            'No Keyfile' => _('No Keyfile'),
            'No thanks' => _('No thanks'),
            'No USB flash configuration data' => _('No USB flash configuration data'),
            'Not Linked' => _('Not Linked'),
            'On January 1st, 2023 SSL certificates for unraid.net were deprecated. You MUST provision a new SSL certificate to use our new myunraid.net domain. You can do this on the Settings > Management Access page.' => _('On January 1st, 2023 SSL certificates for unraid.net were deprecated. You MUST provision a new SSL certificate to use our new myunraid.net domain. You can do this on the Settings > Management Access page.'),
            'Online Flash Backup' => _('Online Flash Backup'),
            'Open a bug report' => _('Open a bug report'),
            'Open Dropdown' => _('Open Dropdown'),
            'Opens Connect in new tab' => _('Opens Connect in new tab'),
            'Original release date {0}' => sprintf(_('Original release date %s'), '{0}'),
            'OS Update Eligibility Expired' => _('OS Update Eligibility Expired'),
            'Performing actions' => _('Performing actions'),
            'Please confirm the update details below' => _('Please confirm the update details below'),
            'Please finish the initiated downgrade to enable updates.' => _('Please finish the initiated downgrade to enable updates.'),
            'Please finish the initiated update to enable a downgrade.' => _('Please finish the initiated update to enable a downgrade.'),
            'Please fix any errors and try again.' => _('Please fix any errors and try again.'),
            'Please keep this window open while we perform some actions' => _('Please keep this window open while we perform some actions'),
            'Please keep this window open' => _('Please keep this window open'),
            'Please sign out then sign back in to refresh your API key.' => _('Please sign out then sign back in to refresh your API key.'),
            'Please wait while the page reloads to install your trial key' => _('Please wait while the page reloads to install your trial key'),
            'Plus more on the way' => _('Plus more on the way'),
            'Plus' => _('Plus'),
            'Pro' => _('Pro'),
            'Purchase Key' => _('Purchase Key'),
            'Purchase' => _('Purchase'),
            'Ready to Install Key' => _('Ready to Install Key'),
            'Ready to update Connect account configuration' => _('Ready to update Connect account configuration'),
            'Real-time Monitoring' => _('Real-time Monitoring'),
            'Reboot Now to Downgrade to {0}' => sprintf(_('Reboot Now to Downgrade to %s'), '{0}'),
            'Reboot Now to Downgrade' => _('Reboot Now to Downgrade'),
            'Reboot Now to Update to {0}' => sprintf(_('Reboot Now to Update to %s'), '{0}'),
            'Reboot Now to Update' => _('Reboot Now to Update'),
            'Reboot Required for Downgrade to {0}' => sprintf(_('Reboot Required for Downgrade to %s'), '{0}'),
            'Reboot Required for Downgrade' => _('Reboot Required for Downgrade'),
            'Reboot Required for Update to {0}' => sprintf(_('Reboot Required for Update to %s'), '{0}'),
            'Reboot Required for Update' => _('Reboot Required for Update'),
            'Rebooting will likely solve this.' => _('Rebooting will likely solve this.'),
            'Receive the latest and greatest for Unraid OS. Whether it new features, security patches, or bug fixes – keeping your server up-to-date ensures the best experience that Unraid has to offer.' => _('Receive the latest and greatest for Unraid OS.') . ' ' . _('Whether it new features, security patches, or bug fixes – keeping your server up-to-date ensures the best experience that Unraid has to offer.'),
            'Recover Key' => _('Recover Key'),
            'Recovered' => _('Recovered'),
            'Redeem Activation Code' => _('Redeem Activation Code'),
            'Refresh' => _('Refresh'),
            'Registered on' => _('Registered on'),
            'Registered to' => _('Registered to'),
            'Registration key / USB Flash GUID mismatch' => _('Registration key / USB Flash GUID mismatch'),
            'Release date {0}' => sprintf(_('Release date %s'), '{0}'),
            'Release requires verification to update' => _('Release requires verification to update'),
            'Reload' => _('Reload'),
            'Remark: Unraid\'s WAN IPv4 {0} does not match your client\'s WAN IPv4 {1}.' => sprintf(_('Remark: Unraid\'s WAN IPv4 %1s does not match your client\'s WAN IPv4 %2s.'), '{0}', '{1}'),
            'Remark: your WAN IPv4 is {0}' => sprintf(_('Remark: your WAN IPv4 is %s'), '{0}'),
            'Remove from ignore list' => _('Remove from ignore list'),
            'Remove' => _('Remove'),
            'Replace Key' => _('Replace Key'),
            'Replaced' => _('Replaced'),
            'Requires the local unraid-api to be running successfully' => _('Requires the local unraid-api to be running successfully'),
            'Restarting unraid-api…' => _('Restarting unraid-api…'),
            'second' => sprintf(_('%s second'), '{n}') . ' | ' . sprintf(_('%s seconds'), '{n}'),
            'Secure your device' => _('Secure your device'),
            'Server Up Since {0}' => sprintf(_('Server Up Since %s'), '{0}'),
            'Servers equipped with a myunraid.net certificate can be managed directly from within the Connect web UI. Manage multiple servers from your phone, tablet, laptop, or PC in the same browser window.' => _('Servers equipped with a myunraid.net certificate can be managed directly from within the Connect web UI.') . ' ' . _('Manage multiple servers from your phone, tablet, laptop, or PC in the same browser window.'),
            'Set custom server tiles how you like and automatically display your server\'s banner image on your Connect Dashboard.' => _('Set custom server tiles how you like and automatically display your server\'s banner image on your Connect Dashboard.'),
            'Settings' => _('Settings'),
            'Sign In Failed' => _('Sign In Failed'),
            'Sign In requires the local unraid-api to be running' => _('Sign In requires the local unraid-api to be running'),
            'Sign In to utilize Unraid Connect' => _('Sign In to utilize Unraid Connect'),
            'Sign In to your Unraid.net account to get started' => _('Sign In to your Unraid.net account to get started'),
            'Sign In with Unraid.net Account' => _('Sign In with Unraid.net Account'),
            'Sign In' => _('Sign In'),
            'Sign Out Failed' => _('Sign Out Failed'),
            'Sign Out of Unraid.net' => _('Sign Out of Unraid.net'),
            'Sign Out requires the local unraid-api to be running' => _('Sign Out requires the local unraid-api to be running'),
            'Signing in {0}…' => sprintf(_('Signing in %s…'), '{0}'),
            'Signing In' => _('Signing In'),
            'Signing out {0}…' => sprintf(_('Signing out %s…'), '{0}'),
            'Signing Out' => _('Signing Out'),
            'Something went wrong' => _('Something went wrong'),
            'SSL certificates for unraid.net deprecated' => _('SSL certificates for unraid.net deprecated'),
            'Stale Server' => _('Stale Server'),
            'Stale' => _('Stale'),
            'On the following screen, your license will be activated. You\'ll then create an Unraid.net Account to manage your license going forward.' => _('On the following screen, your license will be activated.') . ' ' . _('You\'ll then create an Unraid.net Account to manage your license going forward.'),
            'Start Free 30 Day Trial' => _('Start Free 30 Day Trial'),
            'Starting your free 30 day trial' => _('Starting your free 30 day trial'),
            'Success!' => _('Success!'),
            'Thank you for choosing Unraid OS!' => _('Thank you for choosing Unraid OS!'),
            'Thank you for installing Connect!' => _('Thank you for installing Connect!'),
            'Thank you for purchasing an Unraid {0} Key!' => sprintf(_('Thank you for purchasing an Unraid %s Key!'), '{0}'),
            'Thank you for upgrading to an Unraid {0} Key!' => sprintf(_('Thank you for upgrading to an Unraid %s Key!'), '{0}'),
            'The Connect dashboard links to relevant sections of the webgui, allowing quick access to those settings and server sections.' => _('The Connect dashboard links to relevant sections of the webgui, allowing quick access to those settings and server sections.'),
            'The logs may contain sensitive information so do not post them publicly.' => _('The logs may contain sensitive information so do not post them publicly.'),
            'The primary method of support for Unraid Connect is through our forums and Discord.' => _('The primary method of support for Unraid Connect is through our forums and Discord.'),
            'Then go to Tools > Registration to manually install it' => _('Then go to Tools > Registration to manually install it'),
            'This may indicate a complex network that will not work with this Remote Access solution.' => _('This may indicate a complex network that will not work with this Remote Access solution.'),
            'This update will require a reboot' => _('This update will require a reboot'),
            'Toggle on/off server accessibility with dynamic remote access. Automatically turn on UPnP and open a random WAN port on your router at the click of a button and close off access in seconds.' => _('Toggle on/off server accessibility with dynamic remote access.') . ' ' . _('Automatically turn on UPnP and open a random WAN port on your router at the click of a button and close off access in seconds.'),
            'Too Many Devices' => _('Too Many Devices'),
            'Transfer License to New Flash' => _('Transfer License to New Flash'),
            'Trial Expired, see options below' => _('Trial Expired, see options below'),
            'Trial Expired' => _('Trial Expired'),
            'Trial Key Created' => _('Trial Key Created'),
            'Trial Key Creation Failed' => _('Trial Key Creation Failed'),
            'Trial Key Expired {0}' => sprintf(_('Trial Key Expired %s'), '{0}'),
            'Trial Key Expired at {0}' => sprintf(_('Trial Key Expired at %s'), '{0}'),
            'Trial Key Expires at {0}' => sprintf(_('Trial Key Expires at %s'), '{0}'),
            'Trial Key Expires in {0}' => sprintf(_('Trial Key Expires in %s'), '{0}'),
            'Trial Requires Internet Connection' => _('Trial Requires Internet Connection'),
            'Trial' => _('Trial'),
            'Unable to check for OS updates' => _('Unable to check for OS updates'),
            'Unable to fetch client WAN IPv4' => _('Unable to fetch client WAN IPv4'),
            'Unable to open release notes' => _('Unable to open release notes'),
            'Unknown error' => _('Unknown error'),
            'Unknown' => _('Unknown'),
            'unlimited' => _('unlimited'),
            'Unraid {0} Available' => sprintf(_('Unraid %s Available'), '{0}'),
            'Unraid {0} Update Available' => sprintf(_('Unraid %s Update Available'), '{0}'),
            'Unraid {0}' => sprintf(_('Unraid %s'), '{0}'),
            'Unraid Connect Error' => _('Unraid Connect Error'),
            'Unraid Connect Forums' => _('Unraid Connect Forums'),
            'Unraid Connect Install Failed' => _('Unraid Connect Install Failed'),
            'Unraid Contact Page' => _('Unraid Contact Page'),
            'Unraid Discord' => _('Unraid Discord'),
            'Unraid logo animating with a wave like effect' => _('Unraid logo animating with a wave like effect'),
            'Unraid OS {0} Released' => sprintf(_('Unraid OS %s Released'), '{0}'),
            'Unraid OS {0} Update Available' => sprintf(_('Unraid OS %s Update Available'), '{0}'),
            'Unraid OS is up-to-date' => _('Unraid OS is up-to-date'),
            'Unraid OS Update Available' => _('Unraid OS Update Available'),
            'unraid-api is offline' => _('unraid-api is offline'),
            'Up-to-date with eligible releases' => _('Up-to-date with eligible releases'),
            'Up-to-date' => _('Up-to-date'),
            'Update Available' => _('Update Available'),
            'Update Released' => _('Update Released'),
            'Update Unraid OS confirmation required' => _('Update Unraid OS confirmation required'),
            'Update Unraid OS' => _('Update Unraid OS'),
            'Updating 3rd party drivers' => _('Updating 3rd party drivers'),
            'Upgrade Key' => _('Upgrade Key'),
            'Upgrade' => _('Upgrade'),
            'Uptime {0}' => sprintf(_('Uptime %s'), '{0}'),
            'USB Flash device error' => _('USB Flash device error'),
            'USB Flash has no serial number' => _('USB Flash has no serial number'),
            'Verify to Update' => _('Verify to Update'),
            'Version available for restore {0}' => sprintf(_('Version available for restore %s'), '{0}'),
            'Version: {0}' => sprintf(_('Version: %s'), '{0}'),
            'View Available Updates' => _('View Available Updates'),
            'View Changelog & Update' => _('View Changelog & Update'),
            'View Changelog for {0}' => sprintf(_('View Changelog for %s'), '{0}'),
            'View Changelog on Docs' => _('View Changelog on Docs'),
            'View Changelog to Start Update' => _('View Changelog to Start Update'),
            'View Changelog' => _('View Changelog'),
            'View on Docs' => _('View on Docs'),
            'View release notes' => _('View release notes'),
            'We recommend backing up your USB Flash Boot Device before starting the update.' => _('We recommend backing up your USB Flash Boot Device before starting the update.'),
            'Welcome to your new ${0} system, powered by Unraid!' => _('Welcome to your new ${0} system, powered by Unraid!'),
            'Welcome to Unraid!' => _('Welcome to Unraid!'),
            'year' => sprintf(_('%s year'), '{n}') . ' | ' . sprintf(_('%s years'), '{n}'),
            'You are still eligible to access OS updates that were published on or before {1}.' => sprintf(_('You are still eligible to access OS updates that were published on or before %s.'), '{1}'),
            'You can also manually create a new backup by clicking the Create Flash Backup button.' => _('You can also manually create a new backup by clicking the Create Flash Backup button.'),
            'You can manually create a backup by clicking the Create Flash Backup button.' => _('You can manually create a backup by clicking the Create Flash Backup button.'),
            'You have already activated the Flash Backup feature via the Unraid Connect plugin.' => _('You have already activated the Flash Backup feature via the Unraid Connect plugin.'),
            'You have exceeded the number of devices allowed for your license. Please remove a device before adding another.' => _('You have exceeded the number of devices allowed for your license. Please remove a device before adding another.'),
            'You have not activated the Flash Backup feature via the Unraid Connect plugin.' => _('You have not activated the Flash Backup feature via the Unraid Connect plugin.'),
            'You may still update to releases dated prior to your update expiration date.' => _('You may still update to releases dated prior to your update expiration date.'),
            'You\'re about to create a password to secure access to your system. This password is essential for managing and configuring your server. You’ll use this password every time you access the Unraid web interface.' => _('You\'re about to create a password to secure access to your system.') . ' ' . _('This password is essential for managing and configuring your server.') . ' ' . _('You’ll use this password every time you access the Unraid web interface.'),
            'You\'re one step closer to enhancing your Unraid experience' => _('You\'re one step closer to enhancing your Unraid experience'),
            'Your {0} Key has been replaced!' => sprintf(_('Your %s Key has been replaced!'), '{0}'),
            'Your {0} license included one year of free updates at the time of purchase. You are now eligible to extend your license and access the latest OS updates. You are still eligible to access OS updates that were published on or before {1}.' => sprintf(_('Your %s license included one year of free updates at the time of purchase.'), '{0}') . ' ' . _('You are now eligible to extend your license and access the latest OS updates.') . ' ' . sprintf(_('You are still eligible to access OS updates that were published on or before %s.'), '{1}'),
            'Your {0} license included one year of free updates at the time of purchase. You are now eligible to extend your license and access the latest OS updates.' => sprintf(_('Your %s license included one year of free updates at the time of purchase.'), '{0}') . ' ' . _('You are now eligible to extend your license and access the latest OS updates.'),
            'Your free Trial key provides all the functionality of an Unleashed Registration key' => _('Your free Trial key provides all the functionality of an Unleashed Registration key'),
            'Your license key is not eligible for Unraid OS {0}' => sprintf(_('Your license key is not eligible for Unraid OS %s'), '{0}'),
            'Your Trial has expired' => _('Your Trial has expired'),
            'Your Trial key has been extended!' => _('Your Trial key has been extended!'),
            'Unraid OS {0} Changelog' => sprintf(_('Unraid OS %s Changelog'), '{0}'),
            'or' => _('or'),
            'Logging in...' => _('Logging in...'),
            'Try Again' => _('Try Again'),
            'Log In With Unraid.net' => _('Log In With Unraid.net'),
            'Invalid Unraid.net credentials' => _('Invalid Unraid.net credentials'),
            'This Unraid.net account is not authorized to access this server' => _('This Unraid.net account is not authorized to access this server'),
            'SSO login is not enabled on this server' => _('SSO login is not enabled on this server'),
            'Login session expired. Please try again' => _('Login session expired. Please try again'),
            'Network error. Please check your connection' => _('Network error. Please check your connection'),
            'SSO login failed. Please try again' => _('SSO login failed. Please try again'),
            'Error fetching token' => _('Error fetching token'),
        ];
    }

    public function getTranslations()
    {
        return $this->translations ?? [];
    }

    /**
     * @param $urlEncode {bool}
     * @return string
     */
    public function getTranslationsJson($urlEncode = false)
    {
        if ($urlEncode) {
            return rawurlencode(json_encode($this->getTranslations(), JSON_UNESCAPED_SLASHES, JSON_UNESCAPED_UNICODE));
        }
        return json_encode($this->getTranslations(), JSON_UNESCAPED_SLASHES, JSON_UNESCAPED_UNICODE);
    }
}
