Finish settings translation

This commit is contained in:
Johannes Zellner
2020-11-11 21:10:43 +01:00
parent 5617e19e7c
commit 017e8bf0e5
3 changed files with 144 additions and 96 deletions

View File

@@ -1,44 +1,42 @@
<!-- Modal update -->
<div class="modal fade" id="updateModal" tabindex="-1" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">Update Cloudron to <b>{{config.update.box.version}}</b> </h4>
</div>
<div class="modal-body">
<div ng-hide="installedApps | readyToUpdate">
<p>The apps below are blocking the update because they have pending actions:</p>
<ul>
<li ng-repeat="app in installedApps | inProgressApps">{{app.location}}</li>
</ul>
<span>Please wait for the above operations to finish.</span>
<br/>
<br/>
</div>
<div ng-show="installedApps | readyToUpdate">
<p class="text-danger" ng-show="config.update.box.unstable">
This update is a pre-release and not considered stable yet. Please update at your own risk.
</p>
<p>Changes:</p>
<ul>
<li ng-repeat="change in config.update.box.changelog" ng-bind-html="change | markdown2html"></li>
</ul>
<br/>
<p ng-show="update.error.generic" class="text-danger">{{ update.error.generic }}</p>
</div>
</div>
<div class="modal-footer">
<label class="checkbox-inline pull-left">
<input type="checkbox" ng-model="update.skipBackup"><b>Skip backup</b>
</label>
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" ng-class="config.update.box.unstable ? 'btn btn-danger' : 'btn btn-success'" ng-click="update.startUpdate()" ng-disabled="update.busy" ng-show="(installedApps | readyToUpdate)"><i class="fa fa-circle-notch fa-spin" ng-show="update.busy"></i> Update</button>
</div>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">{{ 'settings.updateDialog.title' | tr }} <b>{{config.update.box.version}}</b> </h4>
</div>
<div class="modal-body">
<div ng-hide="installedApps | readyToUpdate">
<p>{{ 'settings.updateDialog.blockingApps' | tr }}</p>
<ul>
<li ng-repeat="app in installedApps | inProgressApps">{{app.location}}</li>
</ul>
<span>{{ 'settings.updateDialog.blockingAppsInfo' | tr }}</span>
<br/>
<br/>
</div>
<div ng-show="installedApps | readyToUpdate">
<p class="text-danger" ng-show="config.update.box.unstable">{{ 'settings.updateDialog.unstableWarning' | tr }}</p>
<p>{{ 'settings.updateDialog.changes' | tr }}:</p>
<ul>
<li ng-repeat="change in config.update.box.changelog" ng-bind-html="change | markdown2html"></li>
</ul>
<br/>
<p ng-show="update.error.generic" class="text-danger">{{ update.error.generic }}</p>
</div>
</div>
<div class="modal-footer">
<label class="checkbox-inline pull-left">
<input type="checkbox" ng-model="update.skipBackup">{{ 'settings.updateDialog.skipBackupCheckbox' | tr }}
</label>
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'main.dialog.cancel' | tr }}</button>
<button type="button" class="btn" ng-class="config.update.box.unstable ? 'btn-danger' : 'btn-success'" ng-click="update.startUpdate()" ng-disabled="update.busy" ng-show="(installedApps | readyToUpdate)"><i class="fa fa-circle-notch fa-spin" ng-show="update.busy"></i> {{ 'settings.updateDialog.updateAction' | tr }}</button>
</div>
</div>
</div>
</div>
<!-- modal update schedule config -->
@@ -46,7 +44,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Configure Automatic Update Schedule</h4>
<h4 class="modal-title">{{ 'settings.updateScheduleDialog.title' | tr }}</h4>
</div>
<div class="modal-body">
<form name="updateScheduleForm" role="form" novalidate ng-submit="updateSchedule.submit()" autocomplete="off">
@@ -54,29 +52,27 @@
<p class="has-error text-center" ng-show="updateSchedule.error">{{ updateSchedule.error.generic }}</p>
<div class="form-group">
<p>Select the days and hours during which Cloudron will apply automatic platform and app updates. Please take care to not overlap this schedule with the
<a href="/#/backups">backup schedule</a>.
</p>
<p ng-bind-html=" 'settings.updateScheduleDialog.description' | tr "></p>
<div class="radio">
<label>
<input type="radio" ng-model="updateSchedule.type" value="never"> Disable Automatic Updates
<input type="radio" ng-model="updateSchedule.type" value="never"> {{ 'settings.updateScheduleDialog.disableCheckbox' | tr }}
</label>
</div>
<div class="radio">
<label>
<input type="radio" ng-model="updateSchedule.type" value="pattern"> Enable Automatic Updates
<span class="label label-danger" ng-show="updateSchedule.type === 'pattern' && !updateSchedule.isScheduleValid()">Select at least one day and time</span>
<input type="radio" ng-model="updateSchedule.type" value="pattern"> {{ 'settings.updateScheduleDialog.enableCheckbox' | tr }}
<span class="label label-danger" ng-show="updateSchedule.type === 'pattern' && !updateSchedule.isScheduleValid()">{{ 'settings.updateScheduleDialog.selectOne' | tr }}</span>
</label>
</div>
<div>
<div style="margin-left: 20px;">
<div class="col-md-5">
Days: <multiselect class="input-sm stretch" ng-model="updateSchedule.days" ng-disabled="updateSchedule.type !== 'pattern'" options="a.name for a in cronDays" data-multiple="true"></multiselect>
{{ 'settings.updateScheduleDialog.days' | tr }}: <multiselect class="input-sm stretch" ng-model="updateSchedule.days" ng-disabled="updateSchedule.type !== 'pattern'" options="a.name for a in cronDays" data-multiple="true"></multiselect>
</div>
<div class="col-md-5">
Hours: <multiselect class="input-sm stretch" ng-model="updateSchedule.hours" ng-disabled="updateSchedule.type !== 'pattern'" options="a.name for a in cronHours" data-multiple="true"></multiselect>
{{ 'settings.updateScheduleDialog.hours' | tr }}: <multiselect class="input-sm stretch" ng-model="updateSchedule.hours" ng-disabled="updateSchedule.type !== 'pattern'" options="a.name for a in cronHours" data-multiple="true"></multiselect>
</div>
</div>
</div>
@@ -85,8 +81,8 @@
</form>
</div>
<div class="modal-footer ">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-outline btn-success pull-right" ng-click="updateSchedule.submit()" ng-disabled="updateSchedule.$invalid || updateSchedule.busy"><i class="fa fa-circle-notch fa-spin" ng-show="updateSchedule.busy"></i><span> Save</span></button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'main.dialog.cancel' | tr }}</button>
<button type="submit" class="btn btn-outline btn-success pull-right" ng-click="updateSchedule.submit()" ng-disabled="updateSchedule.$invalid || updateSchedule.busy"><i class="fa fa-circle-notch fa-spin" ng-show="updateSchedule.busy"></i><span> {{ 'main.dialog.save' | tr }}</span></button>
</div>
</div>
</div>
@@ -97,7 +93,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Private Registry Configuration</h4>
<h4 class="modal-title">{{ 'settings.privateDockerRegistryDialog.title' | tr }}</h4>
</div>
<div class="modal-body">
<form name="registryConfigForm" role="form" novalidate ng-submit="registryConfig.submit()" autocomplete="off">
@@ -105,30 +101,30 @@
<p class="has-error text-center" ng-show="registryConfig.error">{{ registryConfig.error }}</p>
<div class="form-group">
<label class="control-label" for="registryConfigServerAddress">Registry Server</label>
<label class="control-label" for="registryConfigServerAddress">{{ 'settings.privateDockerRegistry.server' | tr }}</label>
<input type="text" class="form-control" ng-model="registryConfig.serverAddress" id="registryConfigServerAddress" name="serveraddress" ng-disabled="registryConfig.busy" placeholder="docker.io" ng-required>
</div>
<div class="form-group">
<label class="control-label" for="registryConfigUsername">Username</label>
<label class="control-label" for="registryConfigUsername">{{ 'settings.privateDockerRegistry.username' | tr }}</label>
<input type="text" class="form-control" ng-model="registryConfig.username" id="registryConfigUsername" name="username" ng-disabled="registryConfig.busy" ng-required>
</div>
<div class="form-group">
<label class="control-label" for="registryConfigEmail">Email (Optional)</label>
<label class="control-label" for="registryConfigEmail">{{ 'settings.privateDockerRegistryDialog.email' | tr }}</label>
<input type="text" class="form-control" ng-model="registryConfig.email" id="registryConfigEmail" name="email" ng-disabled="registryConfig.busy">
</div>
<div class="form-group">
<label class="control-label" for="registryConfigPassword">Password/Token</label>
<label class="control-label" for="registryConfigPassword">{{ 'settings.privateDockerRegistryDialog.passwordToken' | tr }}</label>
<input type="password" class="form-control" ng-model="registryConfig.password" id="registryConfigPassword" name="password" ng-disabled="registryConfig.busy" ng-required>
</div>
</fieldset>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-success" ng-click="registryConfig.submit()" ng-disabled="registryConfigForm.$invalid || registryConfig.busy"><i class="fa fa-circle-notch fa-spin" ng-show="registryConfig.busy"></i> Save</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'main.dialog.cancel' | tr }}</button>
<button type="button" class="btn btn-success" ng-click="registryConfig.submit()" ng-disabled="registryConfigForm.$invalid || registryConfig.busy"><i class="fa fa-circle-notch fa-spin" ng-show="registryConfig.busy"></i> {{ 'main.dialog.save' | tr }}</button>
</div>
</div>
</div>
@@ -141,7 +137,7 @@
</div>
<div class="text-left" ng-show="user.isAtLeastOwner && !config.isDemo">
<h3>Cloudron.io Account</h3>
<h3>{{ 'settings.appstoreAccount.title' | tr }}</h3>
</div>
<div class="card" style="margin-bottom: 15px;" ng-show="user.isAtLeastOwner && !config.isDemo">
@@ -154,19 +150,17 @@
</div>
<div ng-show="!subscriptionBusy">
<div class="row">
<div class="col-xs-12">
A Cloudron.io account is used to access the App Store and manage your subscription.
</div>
<div class="col-xs-12">{{ 'settings.appstoreAccount.description' | tr }}</div>
</div>
<br/>
<div class="row" ng-show="!subscription">
<div class="col-xs-12 text-center">
<a class="btn btn-success" ng-href="/#/appstore">Setup Account</a>
<a class="btn btn-success" ng-href="/#/appstore">{{ 'settings.appstoreAccount.setupAction' | tr }}</a>
</div>
</div>
<div class="row" ng-show="subscription">
<div class="col-xs-6">
<span class="text-muted">Account Email</span>
<span class="text-muted">{{ 'settings.appstoreAccount.email' | tr }}</span>
</div>
<div class="col-xs-6 text-right">
<a ng-href="{{ config.webServerOrigin + '/console.html#/userprofile?email=' + subscription.emailEncoded }}" target="_blank">{{ subscription.email }}</a>
@@ -174,7 +168,7 @@
</div>
<div class="row" ng-show="subscription">
<div class="col-xs-6">
<span class="text-muted">Cloudron ID</span>
<span class="text-muted">{{ 'settings.appstoreAccount.cloudronId' | tr }}</span>
</div>
<div class="col-xs-6 text-right">
<span>{{ subscription.cloudronId }}</span>
@@ -182,7 +176,7 @@
</div>
<div class="row" ng-show="subscription">
<div class="col-xs-6">
<span class="text-muted">Subscription</span>
<span class="text-muted">{{ 'settings.appstoreAccount.subscription' | tr }}</span>
</div>
<div class="col-xs-6 text-right">
<span>{{ subscription.plan.name }}</span>
@@ -190,29 +184,26 @@
</div>
<div class="row" ng-show="subscription">
<div class="col-xs-12 text-right">
<b class="text-danger" ng-show="subscription.cancel_at">Canceled and ends on {{ (subscription.cancel_at*1000) | prettyShortDate }}</b>
<b class="text-danger" ng-show="subscription.cancel_at">{{ 'settings.appstoreAccount.subscriptionEndsAt' | tr }} {{ (subscription.cancel_at*1000) | prettyShortDate }}</b>
</div>
</div>
<br/>
<div class="row" ng-show="subscription">
<div class="col-xs-12">
<a class="btn btn-success pull-right" ng-click="openSubscriptionSetup()">{{ subscription.plan.id === 'free' ? 'Setup' : (subscription.cancel_at ? 'Reactivate' : 'Change') }} Subscription</a>
<a class="btn btn-success pull-right" ng-click="openSubscriptionSetup()">{{ subscription.plan.id === 'free' ? ('settings.appstoreAccount.subscriptionSetupAction' | tr) : (subscription.cancel_at ? ('settings.appstoreAccount.subscriptionReactivateAction' | tr) : ('settings.appstoreAccount.subscriptionChangeAction' | tr)) }} </a>
</div>
</div>
</div>
</div>
<div class="text-left">
<h3>Time Zone</h3>
<h3>{{ 'settings.timezone.title' | tr }}</h3>
</div>
<div class="card" style="margin-bottom: 15px;">
<div class="row">
<div class="col-md-8">
<p>
The current timezone setting is <b>{{ timeZone.currentTimeZone.display }}</b>.<br/>
This setting is used for scheduling backup and update tasks.
</p>
<p ng-bind-html=" 'settings.timezone.description' | tr:timeZone "></p>
<p class="text-danger" ng-show="timeZone.error"><br/>{{ timeZone.error }}</p>
</div>
<div class="col-md-4">
@@ -223,25 +214,21 @@
<br/>
<div class="row">
<div class="col-md-6">
<span class="text-success text-bold" ng-show="timeZone.success && timeZone.timeZone === timeZone.currentTimeZone">Saved</span>
</div>
<div class="col-md-6 text-right">
<button class="btn btn-outline btn-primary pull-right" ng-click="timeZone.submit()" ng-disabled="timeZone.busy || timeZone.timeZone === timeZone.currentTimeZone"><i class="fa fa-circle-notch fa-spin" ng-show="timeZone.busy"></i> Save</button>
<div class="col-md-12 text-right">
<button class="btn btn-outline btn-primary pull-right" ng-click="timeZone.submit()" ng-disabled="timeZone.busy || timeZone.timeZone === timeZone.currentTimeZone"><i class="fa fa-circle-notch fa-spin" ng-show="timeZone.busy"></i> {{ 'main.dialog.save' | tr }}</button>
</div>
</div>
</div>
<div class="text-left">
<h3>Updates</h3>
<h3>{{ 'settings.updates.title' | tr }}</h3>
</div>
<div class="card" style="margin-bottom: 15px;">
<div class="row">
<div class="col-md-12">
<span ng-show="updateSchedule.currentPattern !== 'never'">The current automatic update schedule for platform and apps is <b>{{ prettyAutoUpdateSchedule(updateSchedule.currentPattern) }}</b>.</span>
<span ng-show="updateSchedule.currentPattern === 'never'">Automatic update for the platform and apps is <b>disabled</b>.</span>
<span ng-show="updateSchedule.currentPattern !== 'never'">{{ 'settings.updates.currentSchedule' | tr }}<b>{{ prettyAutoUpdateSchedule(updateSchedule.currentPattern) }}</b></span>
<span ng-show="updateSchedule.currentPattern === 'never'" ng-bind-html=" 'settings.updates.autoUpdateDisabled' | tr "></span>
</div>
</div>
@@ -249,7 +236,7 @@
<div class="row">
<div class="col-xs-6">
<span class="text-muted">Platform version</span>
<span class="text-muted">{{ 'settings.updates.version' | tr }}</span>
</div>
<div class="col-xs-6 text-right">
v{{ config.version }}
@@ -270,31 +257,28 @@
<p ng-show="update.busy">{{ update.message }}</p>
<p ng-if="update.busy">
<div class="has-error" ng-show="update.errorMessage">
{{ update.errorMessage }}. <a ng-class="warning" ng-href="/logs.html?taskId={{update.taskId}}" target="_blank">Show Logs</a>
{{ update.errorMessage }}. <a ng-class="warning" ng-href="/logs.html?taskId={{update.taskId}}" target="_blank">{{ 'settings.updates.showLogsAction' | tr }}</a>
</div>
</p>
</div>
<div class="col-md-6 text-right">
<button class="btn btn-outline btn-primary pull-right" ng-click="updateSchedule.show()">Change Schedule</button>
<button class="btn btn-default pull-right" ng-show="!config.update.box && !update.busy" ng-disabled="update.checking" ng-click="update.checkNow()">
<i class="fa fa-circle-notch fa-spin" ng-show="update.checking"></i> Check for Updates
</button>
<button ng-class="config.update.box.unstable ? 'btn btn-danger pull-right' : 'btn btn-success pull-right'" ng-show="config.update.box && !update.busy" ng-click="update.show()">Update Available</button>
<button class="btn btn-danger pull-right" ng-show="config.update.box && update.busy" ng-click="update.stopUpdate()">Stop Update</button>
<button class="btn btn-outline btn-primary pull-right" ng-click="updateSchedule.show()">{{ 'settings.updates.changeScheduleAction' | tr }}</button>
<button class="btn btn-default pull-right" ng-show="!config.update.box && !update.busy" ng-disabled="update.checking" ng-click="update.checkNow()"><i class="fa fa-circle-notch fa-spin" ng-show="update.checking"></i> {{ 'settings.updates.checkForUpdatesAction' | tr }}</button>
<button ng-class="config.update.box.unstable ? 'btn btn-danger pull-right' : 'btn btn-success pull-right'" ng-show="config.update.box && !update.busy" ng-click="update.show()">{{ 'settings.updates.updateAvailableAction' | tr }}</button>
<button class="btn btn-danger pull-right" ng-show="config.update.box && update.busy" ng-click="update.stopUpdate()">{{ 'settings.updates.stopUpdateAction' | tr }}</button>
</div>
</div>
</div>
<div class="text-left">
<h3>Private Docker Registry</h3>
<h3>{{ 'settings.privateDockerRegistry.title' | tr }}</h3>
</div>
<div class="card" style="margin-bottom: 15px;">
<div class="row">
<div class="col-xs-12">
Cloudron can pull and install <a href="https://docs.cloudron.io/custom-apps/tutorial/" target="_blank">custom apps</a> from
a private docker registry.
<span ng-bind-html=" 'settings.privateDockerRegistry.description' | tr:translationLinks "></span>
</div>
</div>
@@ -302,13 +286,13 @@
<div class="row" ng-hide="config.features.privateDockerRegistry">
<div class="col-xs-12">
This feature is only available in the paid plans. <a href="" class="pull-right" ng-click="openSubscriptionSetup()">Setup Subscription Now</a>
{{ 'settings.privateDockerRegistry.subscriptionRequired' | tr }} <a href="" class="pull-right" ng-click="openSubscriptionSetup()">{{ 'settings.privateDockerRegistry.setupSubscriptionAction' | tr }}</a>
</div>
</div>
<div class="row" ng-show="config.features.privateDockerRegistry">
<div class="col-xs-6">
<span class="text-muted">Server address</span>
<span class="text-muted">{{ 'settings.privateDockerRegistry.server' | tr }}</span>
</div>
<div class="col-xs-6 text-right">
<span>{{ registryConfig.currentConfig.serverAddress || 'Not set' }}</span>
@@ -317,10 +301,10 @@
<div class="row" ng-show="config.features.privateDockerRegistry">
<div class="col-xs-6">
<span class="text-muted">Username</span>
<span class="text-muted">{{ 'settings.privateDockerRegistry.username' | tr }}</span>
</div>
<div class="col-xs-6 text-right">
<span>{{ registryConfig.currentConfig.username || registryConfig.currentConfig.email || 'Not set' }}</span>
<span>{{ registryConfig.currentConfig.username || registryConfig.currentConfig.email || ('settings.privateDockerRegistry.usernameNotSet' | tr) }}</span>
</div>
</div>
@@ -328,7 +312,7 @@
<div class="row" ng-show="config.features.privateDockerRegistry">
<div class="col-xs-12">
<button class="btn btn-primary pull-right" ng-click="registryConfig.show()">Configure Registry</button>
<button class="btn btn-primary pull-right" ng-click="registryConfig.show()">{{ 'settings.privateDockerRegistry.configureAction' | tr }}</button>
</div>
</div>
</div>