Use new translation argument passing

This commit is contained in:
Johannes Zellner
2020-11-12 23:13:52 +01:00
parent 50433206a3
commit bf2965dba0
16 changed files with 50 additions and 72 deletions

View File

@@ -89,7 +89,7 @@
<div class="modal-content">
<div class="modal-body">
<p class="text-bold text-danger" ng-show="entryRemove.error">{{ entryRemove.error }}</p>
<h4 ng-hide="entryRemove.error">{{ 'filemanager.removeDialog.reallyDelete' | tr:entryRemove.entry }}</h4>
<h4 ng-hide="entryRemove.error">{{ 'filemanager.removeDialog.reallyDelete' | tr:{ fileName: entryRemove.entry.fileName } }}</h4>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'main.dialog.no' | tr }}</button>
@@ -152,7 +152,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{ 'filemanager.renameDialog.title' | tr:renameEntry.entry }}</h4>
<h4 class="modal-title">{{ 'filemanager.renameDialog.title' | tr:{ fileName: renameEntry.entry.fileName } }}</h4>
</div>
<div class="modal-body">
<form role="form" name="renameEntryForm" ng-submit="renameEntry.submit()" autocomplete="off">
@@ -177,7 +177,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{ 'filemanager.chownDialog.title' | tr:chownEntry.entry }}</h4>
<h4 class="modal-title">{{ 'filemanager.chownDialog.title' | tr:{ fileName: chownEntry.entry.fileName } }}</h4>
</div>
<div class="modal-body">
<form role="form" name="chownEntryForm" ng-submit="chownEntry.submit()" autocomplete="off">
@@ -206,7 +206,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{ 'filemanager.uploadingDialog.title' | tr:uploadStatus }}</h4>
<h4 class="modal-title">{{ 'filemanager.uploadingDialog.title' | tr:{ countDone: uploadStatus.countDone, count: uploadStatus.count } }}</h4>
</div>
<div class="modal-body">
<div ng-show="uploadStatus.error">
@@ -233,7 +233,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{ 'filemanager.extractDialog.title' | tr:extractStatus }}</h4>
<h4 class="modal-title">{{ 'filemanager.extractDialog.title' | tr:{ fileName: extractStatus.fileName } }}</h4>
</div>
<div class="modal-body">
<div ng-show="extractStatus.error">
@@ -338,7 +338,7 @@
<td style="width: 40px" ng-click="open(entry)" ng-class="{ 'hand': !entry.isSymbolicLink }" class="text-center">
<i class="fas fa-lg {{ entry.icon }}" ng-class="{ 'text-primary': entry.isDirectory }"></i>
</td>
<td ng-class="{ 'hand': !entry.isSymbolicLink }" class="elide-table-cell" ng-click="open(entry)">{{ entry.fileName }}<span ng-show="entry.isSymbolicLink" class="text-muted" style="margin-left: 20px;">{{ 'filemanager.list.symlink' | tr:entry }}</span></td>
<td ng-class="{ 'hand': !entry.isSymbolicLink }" class="elide-table-cell" ng-click="open(entry)">{{ entry.fileName }}<span ng-show="entry.isSymbolicLink" class="text-muted" style="margin-left: 20px;">{{ 'filemanager.list.symlink' | tr:{ target: entry.target } }}</span></td>
<td style="width: 80px" ng-class="{ 'hand': !entry.isSymbolicLink }" class="elide-table-cell" ng-click="open(entry)">{{ entry.size | prettyByteSize }}</td>
<td style="width:100px" ng-class="{ 'hand': !entry.isSymbolicLink }" class="elide-table-cell" ng-click="open(entry)">{{ entry.uid | prettyOwner }}</td>
<td style="width: 40px" class="text-right no-wrap" style="vertical-align: bottom">

View File

@@ -69,7 +69,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{ 'terminal.download.title' | tr:selected }}</h4>
<h4 class="modal-title">{{ 'terminal.download.title' | tr:{ name: selected.name } }}</h4>
</div>
<div class="modal-body">
<form name="downloadFileForm" ng-submit="downloadFile.submit()">
@@ -98,7 +98,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{ 'terminal.upload.title' | tr:selected }}</h4>
<h4 class="modal-title">{{ 'terminal.upload.title' | tr:{ name: selected.name } }}</h4>
</div>
<div class="modal-body">
<span><b>{{ uploadProgress.current | prettyByteSize }}</b> (total {{ uploadProgress.total | prettyByteSize }})</span>

View File

@@ -86,7 +86,7 @@
},
"loginTokens": {
"title": "Login Tokens",
"description": "You have {{ webadminTokens.length }} active web token(s) and {{ cliTokens.length }} CLI token(s).",
"description": "You have {{ webadminTokenCount}} active web token(s) and {{ cliTokenCount }} CLI token(s).",
"logoutAll": "Logout From All"
},
"changeEmail": {
@@ -151,7 +151,7 @@
"contents": "Contents",
"version": "Version",
"noApps": "No apps",
"appCount": "{{ contents.length }} apps",
"appCount": "{{ appCount }} apps",
"tooltipDownloadBackupConfig": "Download Backup Configuration",
"cleanupBackups": "Cleanup Backups",
"backupNow": "Backup now",
@@ -168,7 +168,7 @@
"date": "Date",
"version": "Version",
"format": "Format",
"list": "References backups of {{ backup.contents.length }} apps"
"list": "References backups of {{ appCount }} apps"
},
"backupFailed": {
"title": "Unable to create backup"
@@ -191,7 +191,7 @@
"provider": "Storage provider",
"noopNote": "This option breaks the backup and restore functionality of Cloudron and should only be used for testing. Please make sure the server is completely backed up using alternate means.",
"mountPoint": "Mount point",
"mountPointDescription": "The mount point has to be setup manually. See <a href=\"https://docs.cloudron.io/backups/#{{ provider }}\" target=\"_blank\">docs</a>.",
"mountPointDescription": "The mount point has to be setup manually. See <a href=\"{{ providerDocsLink }}\" target=\"_blank\">docs</a>.",
"localDirectory": "Local backup directory",
"ext4Label": "Backup directory is an external EXT4 Disk",
"hardlinksLabel": "Use hardlinks",
@@ -244,7 +244,7 @@
"config": "Config",
"outbound": "Outbound only",
"disabled": "Disabled",
"stats": "{{ mailboxCount }} Mailbox(es) / Usage: {{ usage | prettyByteSize }}",
"stats": "{{ mailboxCount }} Mailbox(es) / Usage: {{ usage }}",
"testEmailTooltip": "Send Test Email"
},
"settings": {
@@ -253,7 +253,7 @@
"location": "Mail server location",
"maxMailSize": "Maximum email size",
"spamFilter": "Spam filtering",
"spamFilterOverview": "{{ acl.blacklist.length }} address(es) blacklisted {{ customConfig ? '. Custom rules set.' : '.' }}",
"spamFilterOverview": "{{ blacklistCount }} address(es) blacklisted.",
"changeDomainProgress": "Changing Email domain:"
},
"eventlog": {
@@ -287,7 +287,7 @@
"location": "Location",
"locationPlaceholder": "Leave empty to use bare domain",
"linodeInfo": "Linode DNS average <a target=\"_blank\" href=\"{{ linodeDocsLink }}\">propagation time</a> is 30 minutes. Changing the location will take a while.",
"manualInfo": "Add an A record manually for {{ (!subdomain ? '' : '.') + domain.domain }} to this Cloudron's public IP"
"manualInfo": "Add an A record manually for {{ domain }} to this Cloudron's public IP"
},
"changeMailSizeDialog": {
"title": "Change Maximum Email Size",
@@ -304,7 +304,7 @@
},
"testMailDialog": {
"title": "Send test email for {{ domain }}",
"description": "This will send a test email from <b>no-reply@{{domain}}</b> to the address below.",
"description": "This will send a test email from <b>no-reply@{{ domain }}</b> to the address below.",
"mailTo": "Email to",
"mailToPlaceholder": "Email address",
"sendAction": "Send"
@@ -324,7 +324,7 @@
"firewall": {
"title": "Firewall",
"blockedIpRanges": "Blocked IPs & Ranges",
"blocklist": "{{ currentBlocklistLength }} IP(s) blocked",
"blocklist": "{{ blockCount }} IP(s) blocked",
"configure": {
"title": "Firewall Configuration",
"description": "Matched addresses will be unable to connect to the server including the mail server, the dashboard and all apps. Be careful not to lock yourself out.",
@@ -351,7 +351,7 @@
"configureActionTooltip": "Configure",
"restartActionTooltip": "Restart",
"configure": {
"title": "Configure {{ displayName }}",
"title": "Configure {{ name }}",
"memoryLimitDescription": "Cloudron allocates 50% of this value as RAM and 50% as swap.",
"accessControl": "Access Control",
"accessControlDescription": "Allowing non-admins to access SFTP will let them read application config files and secret keys. For some apps like WordPress, they can also log the password.",
@@ -375,7 +375,7 @@
},
"timezone": {
"title": "Time Zone",
"description": "The current timezone setting is <b>{{ currentTimeZone.display }}</b>.\nThis setting is used for scheduling backup and update tasks."
"description": "The current timezone setting is <b>{{ timeZone }}</b>.\nThis setting is used for scheduling backup and update tasks."
},
"updates": {
"title": "Updates",
@@ -527,7 +527,7 @@
"namecheapInfo": "The server IP needs to be whitelisted for this API Key.",
"linodeInfo": "Linode DNS average <a target=\"_blank\" href=\"{{ linodeDocsLink }}\">propagation time</a> is 30 minutes. Installing apps &amp; and getting a Let's Encrypt certificate will take a while.",
"manualInfo": "All DNS records have to be setup manually before each app installation.",
"wildcardInfo": "Setup <i>A</i> records for <b>*.{{ newDomain || domain.domain }}</b> and <b>{{ newDomain || domain.domain }}</b> to this server's IP.",
"wildcardInfo": "Setup <i>A</i> records for <b>*.{{ domain }}</b> and <b>{{ domain }}</b> to this server's IP.",
"letsEncryptInfo": "Let's Encrypt requires your server to be reachable on port 80",
"advancedAction": "Advanced settings...",
"zoneName": "Zone Name (Optional)",

View File

@@ -23,7 +23,7 @@
<div class="col-xs-9 text-right">{{ backupDetails.backup.format }}</div>
</div>
<br/>
<p class="text-muted">{{ 'backups.backupDetails.list' | tr:backupDetails }}:</p>
<p class="text-muted">{{ 'backups.backupDetails.list' | tr:{ appCount: backupDetails.backup.contents.length } }}:</p>
<span ng-repeat="app in backupDetails.backup.contents | orderBy:['label','fqdn']">
<a ng-href="/#/app/{{app.id}}/backups">{{ app.label || app.fqdn }}</a><span ng-hide="$last">,</span>
</span>
@@ -134,7 +134,7 @@
<div class="form-group" ng-class="{ 'has-error': configureBackup.error.mountPoint || (configureBackupForm.mountPoint.$dirty && !configureBackup.mountPoint) }" ng-show="mountlike(configureBackup.provider)">
<label class="control-label" for="inputConfigureMountPoint">{{ 'backups.configureBackupStorage.mountPoint' | tr }}</label>
<input type="text" class="form-control" ng-model="configureBackup.mountPoint" id="inputConfigureMountPoint" name="mountPoint" ng-disabled="configureBackup.busy" placeholder="Folder where filesystem is mounted" ng-required="mountlike(configureBackup.provider)">
<p ng-bind-html="'backups.configureBackupStorage.mountPointDescription' | tr:configureBackup"></p>
<p ng-bind-html="'backups.configureBackupStorage.mountPointDescription' | tr:{ providerDocsLink: 'https://docs.cloudron.io/backups/#'+configureBackup.provider }"></p>
</div>
<!-- Filesystem -->
@@ -437,7 +437,7 @@
<td ng-click="backupDetails.show(backup)" class="hand"><span uib-tooltip="{{ backup.creationTime | prettyLongDate }}">{{ backup.creationTime | prettyDate }}</span></td>
<td ng-click="backupDetails.show(backup)" class="hand">
<span ng-show="!backup.contents.length">{{ 'backups.listing.noApps' | tr }}</span>
<span ng-show="backup.contents.length">{{ 'backups.listing.appCount' | tr:backups }}</span>
<span ng-show="backup.contents.length">{{ 'backups.listing.appCount' | tr:{ appCount: backups.contents.length } }}</span>
</td>
<td class="text-right no-wrap" style="vertical-align: bottom">
<button class="btn btn-xs btn-default" ng-click="downloadConfig(backup)" uib-tooltip="{{ 'backups.listing.tooltipDownloadBackupConfig' | tr }}"><i class="fas fa-file-alt"></i></button>
@@ -469,7 +469,7 @@
<div class="col-md-12 text-right">
<button class="btn btn-default" ng-click="createBackup.cleanupBackups()" ng-show="!createBackup.busy" style="margin-right: 5px">{{ 'backups.listing.cleanupBackups' | tr }}</button>
<button class="btn btn-outline btn-primary" ng-click="createBackup.startBackup()" ng-show="!createBackup.busy">{{ 'backups.listing.backupNow' | tr }}</button>
<button class="btn btn-outline btn-danger" ng-click="createBackup.stopTask()" ng-show="createBackup.busy">{{ 'backups.listing.stopTask' | tr:createBackup }}</button>
<button class="btn btn-outline btn-danger" ng-click="createBackup.stopTask()" ng-show="createBackup.busy">{{ 'backups.listing.stopTask' | tr:{ taskType: createBackup.taskType } }}</button>
</div>
</div>
</div>

View File

@@ -22,7 +22,7 @@
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" ng-show="domainConfigure.adding">{{ 'domains.domainDialog.addTitle' | tr }}</h4>
<h4 class="modal-title" ng-hide="domainConfigure.adding">{{ 'domains.domainDialog.editTitle' | tr:domainConfigure.domain }}</h4>
<h4 class="modal-title" ng-hide="domainConfigure.adding">{{ 'domains.domainDialog.editTitle' | tr:{ domain: domainConfigure.domain.domain } }}</h4>
</div>
<div class="modal-body">
<p ng-show="domainConfigure.adding" ng-bind-html="'domains.domainDialog.addDescription' | tr"></p>
@@ -130,10 +130,10 @@
</div>
<p class="small text-info text-bold" ng-show="domainConfigure.provider === 'namecheap'" ng-bind-html="'domains.domainDialog.namecheapInfo' | tr"></p>
<p class="small text-info text-bold" ng-show="domainConfigure.provider === 'linode'" ng-bind-html="'domains.domainDialog.linodeInfo' | tr:translationLinks"></p>
<p class="small text-info text-bold" ng-show="domainConfigure.provider === 'wildcard'" ng-bind-html="'domains.domainDialog.wildcardInfo' | tr:domainConfigure"></p>
<p class="small text-info text-bold" ng-show="domainConfigure.provider === 'manual'" ng-bind-html="'domains.domainDialog.manualInfo' | tr:translationLinks"></p>
<p class="small text-info text-bold" ng-show="needsPort80(domainConfigure.provider, domainConfigure.tlsConfig.provider)" ng-bind-html="'domains.domainDialog.letsEncryptInfo' | tr:translationLinks"></p>
<p class="small text-info text-bold" ng-show="domainConfigure.provider === 'linode'" ng-bind-html="'domains.domainDialog.linodeInfo' | tr:{ linodeDocsLink: 'https://docs.cloudron.io/domains/#linode-dns' }"></p>
<p class="small text-info text-bold" ng-show="domainConfigure.provider === 'wildcard'" ng-bind-html="'domains.domainDialog.wildcardInfo' | tr:{ domain: domainConfigure.adding ? domainConfigure.newDomain : domainConfigure.domain.domain } }"></p>
<p class="small text-info text-bold" ng-show="domainConfigure.provider === 'manual'" ng-bind-html="'domains.domainDialog.manualInfo' | tr"></p>
<p class="small text-info text-bold" ng-show="needsPort80(domainConfigure.provider, domainConfigure.tlsConfig.provider)" ng-bind-html="'domains.domainDialog.letsEncryptInfo' | tr"></p>
<a href="" ng-click="domainConfigure.advancedVisible = true" ng-hide="domainConfigure.advancedVisible">{{ 'domains.domainDialog.advancedAction' | tr }}</a>
<div uib-collapse="!domainConfigure.advancedVisible">
@@ -155,7 +155,7 @@
<div ng-show="domainConfigure.tlsConfig.provider === 'fallback'">
<label class="control-label">{{ 'domains.domainDialog.fallbackCertCustomCert' | tr }}</label>
<p ng-bind-html="'domains.domainDialog.fallbackCertCustomCertInfo' | tr:translationLinks"></p>
<p ng-bind-html="'domains.domainDialog.fallbackCertCustomCertInfo' | tr:{ customCertLink: 'https://docs.cloudron.io/certificates/#custom-certificates' }"></p>
</div>
<div class="form-group" ng-class="{ 'has-error': (!fallbackCert.cert.$dirty && fallbackCert.error) }">
@@ -191,10 +191,10 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{ 'domains.removeDialog.title' | tr:domainRemove.domain }}</h4>
<h4 class="modal-title">{{ 'domains.removeDialog.title' | tr:{ domain: domainRemove.domain.domain } }}</h4>
</div>
<div class="modal-body">
<p ng-bind-html="'domains.removeDialog.description' | tr:domainRemove.domain"></p>
<p ng-bind-html="'domains.removeDialog.description' | tr:{ domain: domainRemove.domain.domin }"></p>
<br/>
<span class="has-error" ng-show="domainRemove.error">{{ domainRemove.error }}</span>
</div>

View File

@@ -32,8 +32,8 @@
</div>
</div>
<p class="text-center text-warning text-bold" ng-show="mailLocation.domain.provider === 'linode'" ng-bind-html=" 'emails.changeDomainDialog.linodeInfo' | tr:translationLinks "></p>
<p class="text-center text-warning text-bold" ng-show="mailLocation.domain.provider === 'manual'" ng-bind-html=" 'emails.changeDomainDialog.manualInfo' | tr:mailLocation "></p>
<p class="text-center text-warning text-bold" ng-show="mailLocation.domain.provider === 'linode'" ng-bind-html="'emails.changeDomainDialog.linodeInfo' | tr:{ linodeDocsLink: 'https://docs.cloudron.io/domains/#linode-dns' }"></p>
<p class="text-center text-warning text-bold" ng-show="mailLocation.domain.provider === 'manual'" ng-bind-html="'emails.changeDomainDialog.manualInfo' | tr:{ domain: mailLocation.domain.domain }"></p>
<input class="ng-hide" type="submit" ng-disabled="mailLocationForm.$invalid"/>
</form>
@@ -108,13 +108,13 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{ 'emails.testMailDialog.title' | tr:testEmail.domain }}</h4>
<h4 class="modal-title">{{ 'emails.testMailDialog.title' | tr:{ domain: testEmail.domain.domain } }}</h4>
</div>
<div class="modal-body">
<form name="testEmailForm" role="form" novalidate ng-submit="testEmail.submit()" autocomplete="off">
<fieldset>
<p class="has-error text-center" ng-show="testEmail.error">{{ testEmail.error.generic }}</p>
<p ng-bind-html=" 'emails.testMailDialog.description' | tr:testEmail.domain "></p>
<p ng-bind-html="'emails.testMailDialog.description' | tr:{ domain: testEmail.domain.domain }"></p>
<br/>
<div class="form-group" ng-class="{ 'has-error': testEmail.error.key }">
<label class="control-label" for="inputTestEmailKey">{{ 'emails.testMailDialog.mailTo' | tr }}</label>
@@ -170,7 +170,7 @@
</td>
<td class="elide-table-cell no-padding">
<a href="/#/email/{{ domain.domain }}" class="email-domain-list-item">
<span ng-show="domain.inbound && domain.outbound">{{ 'emails.domains.stats' | tr:domain }}</span>
<span ng-show="domain.inbound && domain.outbound">{{ 'emails.domains.stats' | tr:{ mailboxCount: domain.mailboxCount, usage: (domain.usage | prettyByteSize) } }}</span>
<span ng-show="!domain.inbound && domain.outbound">{{ 'emails.domains.outbound' | tr }}</span>
<span ng-show="!domain.inbound && !domain.outbound">{{ 'emails.domains.disabled' | tr }}</span>
</a>
@@ -214,7 +214,7 @@
<span class="text-muted">{{ 'emails.settings.spamFilter' | tr }}</span>
</div>
<div class="col-xs-6 text-right">
<span>{{ 'emails.settings.spamFilterOverview' | tr:spamConfig }} <a href="" ng-click="spamConfig.show()"><i class="fa fa-edit text-small"></i></a></span>
<span>{{ 'emails.settings.spamFilterOverview' | tr:{ blacklistCount: spamConfig.acl.blacklist.length } }} <a href="" ng-click="spamConfig.show()"><i class="fa fa-edit text-small"></i></a></span>
</div>
</div>

View File

@@ -10,10 +10,6 @@ angular.module('Application').controller('EmailsController', ['$scope', '$locati
$scope.user = Client.getUserInfo();
$scope.domains = [];
$scope.translationLinks = {
linodeDocsLink: 'https://docs.cloudron.io/domains/#linode-dns'
};
$scope.pageItemCount = [
{ name: $translate.instant('main.pagination.perPageSelector', { n: 20 }), value: 20 },
{ name: $translate.instant('main.pagination.perPageSelector', { n: 50 }), value: 50 },

View File

@@ -134,7 +134,7 @@
<span class="text-muted">{{ 'network.firewall.blockedIpRanges' | tr }}</span>
</div>
<div class="col-xs-6 text-right">
<span>{{ 'network.firewall.blocklist' | tr:blocklist }} <a href="" ng-click="blocklist.show()"><i class="fa fa-edit text-small"></i></a></span>
<span>{{ 'network.firewall.blocklist' | tr:{ blockCount: blocklist.currentBlocklistLength } }} <a href="" ng-click="blocklist.show()"><i class="fa fa-edit text-small"></i></a></span>
</div>
</div>
</div>

View File

@@ -10,7 +10,7 @@
<div class="radio">
<label>
<input type="radio" name="useGravatar" ng-model="avatarChange.useGravatar" value="true_string">
<span ng-bind-html=" 'profile.changeAvatar.useGravatar' | tr:translationData "></span>
<span ng-bind-html="'profile.changeAvatar.useGravatar' | tr:{ gravatarLink: 'https://gravatar.com/' }"></span>
</label>
</div>
<div class="radio">
@@ -175,7 +175,7 @@
<h2><i class="fa fa-circle-notch fa-spin"></i></h2>
</div>
<div class="modal-body" ng-show="twoFactorAuthentication.secret">
<p ng-bind-html="'profile.enable2FA.authenticatorAppDescription' | tr:translationData"></p>
<p ng-bind-html="'profile.enable2FA.authenticatorAppDescription' | tr:{ googleAuthenticatorPlayStoreLink: 'https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2', googleAuthenticatorITunesLink: 'https://itunes.apple.com/us/app/google-authenticator/id388497605', freeOTPPlayStoreLink: 'https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp', freeOTPITunesLink: 'https://itunes.apple.com/us/app/freeotp-authenticator/id872559395' }"></p>
<center>
<img ng-src="{{ twoFactorAuthentication.qrcode }}"/>
<p>{{ twoFactorAuthentication.secret }}</p>
@@ -426,7 +426,7 @@
<div class="grid-item-top">
<div class="row">
<div class="col-xs-12">
<p ng-bind-html="'profile.apiTokens.description' | tr:translationData"></p>
<p ng-bind-html="'profile.apiTokens.description' | tr:{ apiDocsLink: 'https://docs.cloudron.io/api.html' }"></p>
<table class="table table-hover" style="margin: 0;">
<thead>
<tr>
@@ -467,7 +467,7 @@
<div class="grid-item-top">
<div class="row">
<div class="col-xs-12">
<p>{{ 'profile.loginTokens.description' | tr:tokens }}</p>
<p>{{ 'profile.loginTokens.description' | tr:{ webadminTokenCount: tokens.webadminTokens.length, cliTokenCount: cliTokens.length }}</p>
<button class="btn btn-outline btn-danger pull-right" ng-click="tokens.revokeAllWebAndCliTokens()" ng-disabled="tokens.busy"><i class="fa fa-circle-notch fa-spin" ng-show="tokens.busy"></i> {{ 'profile.loginTokens.logoutAll' | tr }}</button>
<br/>
</div>

View File

@@ -9,15 +9,6 @@ angular.module('Application').controller('ProfileController', ['$scope', '$trans
$scope.config = Client.getConfig();
$scope.apps = Client.getInstalledApps();
$scope.translationData = {
gravatarLink: 'https://gravatar.com/',
apiDocsLink: 'https://docs.cloudron.io/api.html',
googleAuthenticatorPlayStoreLink: 'https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2',
googleAuthenticatorITunesLink: 'https://itunes.apple.com/us/app/google-authenticator/id388497605',
freeOTPPlayStoreLink: 'https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp',
freeOTPITunesLink: 'https://itunes.apple.com/us/app/freeotp-authenticator/id872559395',
};
$scope.language;
$scope.languages = [
{ label: 'English', key: 'en' },

View File

@@ -3,7 +3,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{ 'services.configure.title' | tr:serviceConfigure.service }}</h4>
<h4 class="modal-title">{{ 'services.configure.title' | tr:{ name: serviceConfigure.service.displayName } }}</h4>
</div>
<div class="modal-body">
<form name="serviceConfigureForm" role="form" novalidate ng-submit="serviceConfigure.submit()" autocomplete="off">

View File

@@ -203,7 +203,7 @@
<div class="card" style="margin-bottom: 15px;">
<div class="row">
<div class="col-md-8">
<p ng-bind-html=" 'settings.timezone.description' | tr:timeZone "></p>
<p ng-bind-html=" 'settings.timezone.description' | tr:{ timeZone: currentTimeZone.display } "></p>
<p class="text-danger" ng-show="timeZone.error"><br/>{{ timeZone.error }}</p>
</div>
<div class="col-md-4">
@@ -278,7 +278,7 @@
<div class="card" style="margin-bottom: 15px;">
<div class="row">
<div class="col-xs-12">
<span ng-bind-html=" 'settings.privateDockerRegistry.description' | tr:translationLinks "></span>
<span ng-bind-html="'settings.privateDockerRegistry.description' | tr:{ customAppsLink: 'https://docs.cloudron.io/custom-apps/tutorial/' }"></span>
</div>
</div>

View File

@@ -14,10 +14,6 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca
$scope.subscription = null;
$scope.subscriptionBusy = true;
$scope.translationLinks = {
customAppsLink: 'https://docs.cloudron.io/custom-apps/tutorial/'
};
// values correspond to cron days
$scope.cronDays = [
{ name: 'Sunday', value: 0 },

View File

@@ -12,7 +12,7 @@
<div class="grid-item-top">
<div class="row" ng-hide="config.features.support">
<p class="text-bold">{{ 'support.ticket.subscriptionRequired' | tr }}</p>
<p ng-bind-html=" 'support.ticket.subscriptionRequiredDescription' | tr:translationLinks "></p>
<p ng-bind-html=" 'support.ticket.subscriptionRequiredDescription' | tr:{ supportViewLink: 'https://docs.cloudron.io/apps/?support_view', forumLink: 'https://forum.cloudron.io/' } "></p>
</div>
<div class="row" ng-show="config.features.support">
<div class="col-lg-12">
@@ -41,7 +41,7 @@
<textarea class="form-control" name="description" rows="3" placeholder="{{ 'support.ticket.reportPlaceholder' | tr }}" ng-model="feedback.description" ng-minlength="1" required></textarea>
</div>
<div class="form-group" ng-class="{ 'has-error': (feedbackForm.email.$dirty && feedbackForm.email.$invalid) }">
<label>{{ 'support.ticket.email' | tr }}</label> <small>{{ 'support.ticket.emailInfo' | tr:subscription }}</small>
<label>{{ 'support.ticket.email' | tr }}</label> <small>{{ 'support.ticket.emailInfo' | tr:{ email: subscription.email } }}</small>
<input type="text" class="form-control" name="email" placeholder="{{ 'support.ticket.emailPlaceholder' | tr }}" ng-model="feedback.altEmail" ng-maxlength="512" ng-minlength="1" ng-required="feedback.type === 'email_error'">
</div>
<div class="form-group">

View File

@@ -11,11 +11,6 @@ angular.module('Application').controller('SupportController', ['$scope', '$locat
$scope.apps = Client.getInstalledApps();
$scope.supportConfig = null;
$scope.translationLinks = {
supportViewLink: 'https://docs.cloudron.io/apps/?support_view',
forumLink: 'https://forum.cloudron.io/'
};
$scope.feedback = {
error: null,
result: null,

View File

@@ -26,12 +26,12 @@
<div ng-show="!disks.busy" class="ng-hide">
<div class="row" ng-repeat="disk in disks.disks" style="margin-bottom: 20px;">
<div class="col-md-12">
<h3><span ng-bind-html="'system.diskUsage.mountedAt' | tr:disk"></span> <span class="pull-right small" ng-bind-html="'system.diskUsage.usageInfo' | tr:disk"></span></h3>
<h3><span ng-bind-html="'system.diskUsage.mountedAt' | tr:{ filesystem: disk.filesystem, mountpoint: disk.mountpoint }"></span> <span class="pull-right small" ng-bind-html="'system.diskUsage.usageInfo' | tr:{ filesystem: disk.filesystem, mountpoint: disk.mountpoint }"></span></h3>
<div class="progress">
<div class="progress-bar" ng-repeat="content in disk.contains" style="width: {{ content.usage / disk.size * 100 }}%; background-color: {{ content.color }};" uib-tooltip="{{ content.label + ' ' + (content.usage | prettyDiskSize) }}"></div>
</div>
<br/>
<p>{{ 'system.diskUsage.diskContent' | tr:disk }}:</p>
<p>{{ 'system.diskUsage.diskContent' | tr:{ filesystem: disk.filesystem, mountpoint: disk.mountpoint } }}:</p>
<ul>
<li ng-repeat="content in disk.contains">
<span ng-hide="content.app">{{ content.label }} <span class="color-indicator" style="background-color: {{ content.color }};">&nbsp;</span> <small class="text-muted">{{ content.usage | prettyDiskSize }}</small></span>