1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-18 20:59:43 +02:00

i18n admin sections

This commit is contained in:
McMatts 2022-03-02 19:55:52 -05:00
parent a7dac6911c
commit 479d03ba70
9 changed files with 131 additions and 78 deletions

View file

@ -15,14 +15,21 @@ import Component from '@ember/component';
export default Component.extend(Notifier, {
appMeta: service(),
buttonLabel: 'Rebuild',
i18n: service(),
buttonLabel: '',
init() {
this._super(...arguments);
this.buttonLabel = this.i18n.localize('search_reindex_rebuild');
},
actions: {
reindex() {
this.set('buttonLabel', 'Running...');
this.notifyInfo("Starting search re-index process");
this.set('buttonLabel', this.i18n.localize('running'));
this.notifyInfo(this.i18n.localize('search_reindex_start'));
this.get('reindex')(() => {
this.notifySuccess("Search re-indexing complete");
this.notifySuccess(this.i18n.localize('search_reindex_finish'));
this.set('buttonLabel', this.i18n.localize('search_reindex_rebuild'));
});
}
}

View file

@ -21,8 +21,6 @@ export default Service.extend({
},
localize(key, ...args) {
console.log(this.session.locale);
let str = "";
switch(this.session.locale) {
@ -33,13 +31,15 @@ export default Service.extend({
str = this.langs.enUS[key];
}
if (str === "") {
console.log("i18n miss", key);
return;
if (_.isUndefined(str)) {
console.log(">>>>>>>>>>>> i18n missed key", key);
return `!${key}!`;
}
for (let i = 0; i < args.length; i++) {
str = str.replace(`{${i+1}}`, args[i]);
if (args) {
for (let i = 0; i < args.length; i++) {
str = str.replace(`{${i+1}}`, args[i]);
}
}
return str;

View file

@ -4,28 +4,28 @@
<ul class="options">
<li class="option {{if isDocumizeProvider "selected"}}" {{action "onDocumize"}} role="button" tabindex="0">
<div class="text-header">Documize</div>
<div class="text">Built-in email/password</div>
<div class="text">{{localize 'auth_email_password'}}</div>
{{#if isDocumizeProvider}}
<i class="dicon {{constants.Icon.Tick}}" />
{{/if}}
</li>
<li class="option {{if isKeycloakProvider "selected"}}" {{action "onKeycloak"}} role="button" tabindex="0">
<div class="text-header">Keycloak</div>
<div class="text">Via authentication server</div>
<div class="text">{{localize 'auth_connect_keycloak'}}</div>
{{#if isKeycloakProvider}}
<i class="dicon {{constants.Icon.Tick}}" />
{{/if}}
</li>
<li class="option {{if isLDAPProvider "selected"}}" {{action "onLDAP"}} role="button" tabindex="0">
<div class="text-header">LDAP</div>
<div class="text">Connect to LDAP/Active Directory</div>
<div class="text">{{localize 'auth_connect_ldap'}}</div>
{{#if isLDAPProvider}}
<i class="dicon {{constants.Icon.Tick}}" />
{{/if}}
</li>
<li class="option {{if isCASProvider "selected"}}" {{action "onCAS"}} role="button" tabindex="0">
<div class="text-header">CAS</div>
<div class="text">Via Central Authentication Server</div>
<div class="text">{{localize 'auth_connect_cas'}}</div>
{{#if isCASProvider}}
<i class="dicon {{constants.Icon.Tick}}" />
{{/if}}
@ -174,7 +174,8 @@
{{ui/ui-button color=constants.Color.Yellow light=true label="Test →" onClick=(action "onLDAPPreview")}}
{{ui/ui-button-gap}}
{{/if}}
{{#if isCASProvider}}
{{#if isCASProvider}}
<div class="form-group">
<label for="cas-url">CAS Server URL</label>
{{focus-input id="cas-url" type="text" value=casConfig.url class=(if casErrorUrl "form-control is-invalid" "form-control")}}
@ -183,9 +184,10 @@
<div class="form-group">
<label for="cas-redirect-url">Documize CAS URL</label>
{{focus-input id="cas-redirect-url" type="text" value=casConfig.redirectUrl class=(if casErrorRedirectUrl "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. http://Documize URL/auth/cas</small>
<small class="form-text text-muted">e.g. http://DocumizeURL/auth/cas</small>
</div>
{{/if}}
{{ui/ui-button color=constants.Color.Green light=true icon=constants.Icon.Locked label=(localize 'activate') onClick=(action "onSave")}}
</form>

View file

@ -2,40 +2,32 @@
<div class="backup-restore">
<div class="backup-zone">
{{#if session.isGlobalAdmin}}
<p>
Documize Community is a multi-tenanted application enabling both "tech.mycompany.com" and "sales.mycompany.com" to run using the same executable/database.
As a Documize Community <b>Global Administrator</b>, you will be performing a complete system-wide backup across all tenants.
The Documize Community <b>Tenant Administrator</b> can login to perform a tenant-level backup (e.g. marketing.mycompany.com).
</p>
<p>{{localize 'backup_explain1'}}</p>
{{else}}
<p>
Documize Community is a multi-tenanted application enabling both "tech.mycompany.com" and "sales.mycompany.com" to run using the same executable/database.
A Documize Community <b>Global Administrator</b>, you will be performing a complete system-wide backup across all tenants.
As a Documize Community <b>Tenant Administrator</b> you can perform a tenant-level backup (e.g. marketing.mycompany.com).
</p>
<p>{{localize 'backup_explain2'}}</p>
{{/if}}
<p>It can take <b>several minutes</b> to complete the backup process &mdash; please be patient while the backup operation is in progress.</p>
<p>{{localize 'backup_explain3'}}</p>
<div class="margin-top-30 margin-bottom-20">
{{#ui/ui-checkbox selected=backupSpec.retain}}
Retain backup file on server
{{localize 'backup_retain'}}
{{/ui/ui-checkbox}}
</div>
{{#if backupRunning}}
<h3 class="text-success">Backup running, please wait...</h3>
<h3 class="text-success">{{localize 'backup_running'}}</h3>
{{else}}
{{ui/ui-button color=constants.Color.Yellow light=true icon=constants.Icon.Database label=(concat "BACKUP TENANT (" appMeta.appHost ")") onClick=(action "onBackup")}}
{{ui/ui-button color=constants.Color.Yellow light=true icon=constants.Icon.Database label=(concat (localize 'backup_tenant') " " appMeta.appHost) onClick=(action "onBackup")}}
{{#if session.isGlobalAdmin}}
{{ui/ui-button-gap}}
{{ui/ui-button color=constants.Color.Yellow light=true icon=constants.Icon.Database label="BACKUP SYSTEM" onClick=(action "onSystemBackup")}}
{{ui/ui-button color=constants.Color.Yellow light=true icon=constants.Icon.Database label=(localize 'backup_system') onClick=(action "onSystemBackup")}}
{{/if}}
{{/if}}
{{#if backupFailed}}
<div class="backup-fail">Backup failed &mdash; please check server logs</div>
<div class="backup-fail">{{localize 'backup_failed'}}</div>
{{/if}}
{{#if backupSuccess}}
<div class="backup-success">Backup successful ({{backupFilename}})</div>
<div class="backup-success">{{localize 'backup_success'}} ({{backupFilename}})</div>
{{/if}}
</div>
</div>
@ -43,23 +35,23 @@
<div class="backup-restore">
<div class="restore-zone">
{{#if session.isGlobalAdmin}}
<p>Restore from a <b>system backup</b> should only be performed on an <b>empty Documize Community database.</b></p>
<p>{{localize 'restore_explain1'}}</p>
{{/if}}
<p>Restore operation will <b>re-create</b> users, groups, permissions, spaces, categories and content.</p>
<p>It can take <b>several minutes</b> to complete the restore process &mdash; please be patient while the restore operation is in progress.</p>
<p>{{localize 'restore_explain2'}}</p>
<p>{{localize 'restore_explain3'}}</p>
<div class="margin-top-30 margin-bottom-20">
<div class="custom-file">
<input type="file" class="custom-file-input" id="restore-file" accept="application/zip" multiple="false" onchange={{action "upload"}}>
<label class="custom-file-label" for="restore-file">Choose backup file</label>
<label class="custom-file-label" for="restore-file">{{localize 'restore_select_file'}}</label>
</div>
<div class="margin-top-20"></div>
</div>
{{#if restoreFailed}}
<div class="restore-fail">Restore failed &mdash; please check server logs</div>
<div class="restore-fail">{{localize 'restore_failed'}}</div>
{{else if restoreSuccess}}
<div class="restore-success">Restore completed &mdash; restart your browser and log in</div>
<div class="restore-success">{{localize 'restore_success'}}</div>
{{else}}
{{#if restoreUploadReady}}
{{ui/ui-button color=constants.Color.Red light=false icon=constants.Icon.Database label=restoreButtonLabel onClick=(action "onShowRestoreModal")}}
@ -72,13 +64,13 @@
<div id="confirm-restore-modal" class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">Confirm Restore</div>
<div class="modal-header">{{localize 'restore_confirm'}}</div>
<div class="modal-body">
<form onsubmit={{action "onRestore"}}>
<div class="form-group">
<label for="delete-space-name">Please type RESTORE to commence the process</label>
{{input type="text" id="confirm-restore" class="form-control mousetrap" placeholder="Please type RESTORE" value=confirmRestore}}
<small class="form-text text-muted">You should only restore to an empty Documize Community instance</small>
<label for="delete-space-name">{{localize 'restore_confirm'}}</label>
{{input type="text" id="confirm-restore" class="form-control mousetrap" placeholder="RESTORE" value=confirmRestore}}
<small class="form-text text-muted">{{localize 'restore_warn'}}</small>
</div>
</form>
</div>

View file

@ -1,10 +1,8 @@
<div class="product-update">
<div class="update-status">
{{#if appMeta.updateAvailable }}
<a class="title" href="https://www.documize.com/community/downloads">Product update is available :)</a>
<p class="instructions">
To upgrade, replace existing binary and restart Documize Community.
</p>
<a class="title" href="https://www.documize.com/community">{{localize 'changelog_available'}}</a>
<p class="instructions">{{localize 'changelog_guidance'}}</p>
<Ui::UiSpacer @size="400" />
{{/if}}
</div>

View file

@ -1,52 +1,51 @@
<div class="view-customize">
<div class="form-group">
<label for="siteTitle">Site Name</label>
<label for="siteTitle">{{localize 'customize_name'}}</label>
{{focus-input id="siteTitle" type="text" value=model.general.title class=(if hasTitleInputError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Provide short title for this Documize Community instance</small>
<small class="form-text text-muted">{{localize 'customize_name_explain'}}</small>
</div>
<div class="form-group">
<label id="siteMessage">Site Message</label>
<label id="siteMessage">{{localize 'customize_message'}}</label>
<div id="editor-message" class="wysiwyg wysiwyg-editor">
{{{model.general.message}}}
</div>
<small class="form-text text-muted">Provide short message explaining this Documize Community instance</small>
<small class="form-text text-muted">{{localize 'customize_message_explain'}}</small>
</div>
<div class="form-group">
<label>Site Theme</label>
<label>{{localize 'customize_theme'}}</label>
{{ui/theme-picker onChange=(action "onThemeChange")}}
</div>
<div class="form-group">
<label>Site Logo</label>
<label>{{localize 'customize_logo'}}</label>
<div>
{{ui/ui-button light=true color=constants.Color.Gray label="Use Default" onClick=(action "onDefaultLogo")}}
{{ui/ui-button light=true color=constants.Color.Gray label=(localize 'customize_logo_default') onClick=(action "onDefaultLogo")}}
{{ui/ui-button-gap}}
{{ui/ui-button light=true color=constants.Color.Yellow label="Upload Custom" id="upload-logo"}}
{{ui/ui-button light=true color=constants.Color.Yellow label=(localize 'customize_logo_upload') id="upload-logo"}}
</div>
<small class="form-text text-muted">You can choose to upload a small logo (e.g. 64px x 64px)</small>
<small class="form-text text-muted">{{localize 'customize_logo_explain'}}</small>
</div>
{{#if (eq appMeta.location "selfhost")}}
<div class="form-group">
<label for="orgDomain">Site URL Subdomain</label>
<label for="orgDomain">{{localize 'customize_subdomain'}}</label>
{{input id="orgDomain" type="text" value=domain class="form-control" placeholder="e.g. docs"}}
<small class="form-text text-muted">If you are hosting on "docs.example.org" then the subdomain value should be set to "docs"</small>
<small class="form-text text-muted">{{localize 'customize_subdomain_explain'}}</small>
</div>
{{/if}}
<div class="form-group">
<label>Public Spaces Viewable By Anonymous Users</label>
<label>{{localize 'customize_anon'}}</label>
{{x-toggle value=model.general.allowAnonymousAccess size="medium" theme="light" onToggle=(action (mut model.general.allowAnonymousAccess))}}
<small class="form-text text-muted">Share content with unauthenticated site visitors</small>
<small class="form-text text-muted">{{localize 'customize_anon_explain'}}</small>
</div>
<div class="form-group">
<label for="conversionEndpoint">Conversion Service URL</label>
<label for="conversionEndpoint">{{localize 'customize_conversion_url'}}</label>
{{input id="conversionEndpoint" type="text" value=model.general.conversionEndpoint class=(if hasConversionEndpointInputError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">
Endpoint for handling import/export (e.g. https://api.documize.com,
<a href="https://docs.documize.com/s/WNEpptWJ9AABRnha/administration-guides/d/WO0pt_MXigAB6sJ7/general-options">read the documentation</a>)
{{localize 'customize_conversion_explain'}} (e.g. https://api.documize.com, <a href="https://docs.documize.com/s/WNEpptWJ9AABRnha/administration-guides/d/WO0pt_MXigAB6sJ7/general-options">read the documentation</a>)
</small>
</div>
<div class="form-group">
<label for="maxTags">Maximum Tags Per Document</label>
<label for="maxTags">{{localize 'customize_tags'}}</label>
<select class="form-control" id="maxTags" {{action "change" on="change"}}>
<option selected={{is-equal 3 maxTags}} value="3">3</option>
<option selected={{is-equal 4 maxTags}} value="4">4</option>
@ -57,7 +56,7 @@
<option selected={{is-equal 9 maxTags}} value="9">9</option>
<option selected={{is-equal 10 maxTags}} value="10">10</option>
</select>
<small class="form-text text-muted">How many tags can be assigned to a document (between 3 and 10 tags)</small>
<small class="form-text text-muted">{{localize 'customize_tags_explain'}}</small>
</div>
{{ui/ui-button color=constants.Color.Green light=true icon=constants.Icon.Settings label=(localize 'save') onClick=(action "save")}}

View file

@ -1,30 +1,28 @@
<div class="view-customize">
<form>
<h2>Jira</h2>
<p>Displays issues within documentation</p>
<div class="form-group">
<label for="jira-url">URL</label>
<label for="jira-url">{{localize 'integration_jira_url'}}</label>
{{focus-input id="jira-url" type="text" value=jiraCreds.url class="form-control"}}
<small class="form-text text-muted">Fully qualified domain name for your Jira instance e.g. http://jira.example.org</small>
<small class="form-text text-muted">{{localize 'integration_jira_url_explain'}}</small>
</div>
<div class="form-group">
<label for="jira-username">Username</label>
<label for="jira-username">{{localize 'integration_jira_username'}}</label>
{{input id="jira-username" type="text" value=jiraCreds.username class="form-control"}}
<small class="form-text text-muted">Your Jira login username/email</small>
<small class="form-text text-muted">{{localize 'integration_jira_username_explain'}}</small>
</div>
<div class="form-group">
<label for="jira-secret">Password</label>
<label for="jira-secret">{{localize 'integration_jira_password'}}</label>
{{input id="jira-secret" type="password" value=jiraCreds.secret class="form-control"}}
<small class="form-text text-muted">Provide API Token if using Atlassian Cloud or Password when self-hosting Jira</small>
<small class="form-text text-muted">{{localize 'integration_jira_password_explain'}}</small>
</div>
{{#if session.isGlobalAdmin}}
<h2>Trello</h2>
<p>Displays boards within documentation</p>
<div class="form-group">
<label for="trello-key">App Key</label>
<label for="trello-key">{{localize 'integration_trello_appkey'}}</label>
{{input id="trello-key" type="text" value=trelloCreds.appKey class="form-control"}}
<small class="form-text text-muted">See <a href="https://trello.com/app-key">https://trello.com/app-key</a></small>
<small class="form-text text-muted"><a href="https://trello.com/app-key">https://trello.com/app-key</a></small>
</div>
{{/if}}

View file

@ -1,7 +1,7 @@
<div class="view-customize">
<form>
<div class="form-group">
<p>It can take up to 30 minutes to rebuild the search index.</p>
<p>{{localize 'search_reindex'}}</p>
{{ui/ui-button color=constants.Color.Yellow light=true icon=constants.Icon.Search label=buttonLabel onClick=(action "reindex")}}
</div>
</form>

View file

@ -53,6 +53,7 @@
"name": "Name",
"description": "Description",
"icon": "Icon",
"running": "Running...",
"filter": "Filter",
"all": "All",
@ -86,5 +87,61 @@
"block_published": "Published Block",
"z": "z"
"auth_email_password": "Built-in email/password",
"auth_connect_keycloak": "Connect to authentication server",
"auth_connect_ldap": "Connect to LDAP/Active Directory",
"auth_connect_cas": "Connect to Central Authentication Server",
"backup_explain1": "Documize Community is a multi-tenanted application enabling both 'tech.mycompany.com' and 'sales.mycompany.com' to run using the same executable/database. As a Documize Community Global Administrator, you will be performing a complete system-wide backup across all tenants. The Documize Community Tenant Administrator can login to perform a tenant-level backup (e.g. marketing.mycompany.com).",
"backup_explain2": "Documize Community is a multi-tenanted application enabling both 'tech.mycompany.com' and 'sales.mycompany.com' to run using the same executable/database. A Documize Community Global Administrator, you will be performing a complete system-wide backup across all tenants. As a Documize Community Tenant Administrator you can perform a tenant-level backup (e.g. marketing.mycompany.com).",
"backup_explain3": "It can take several minutes to complete the backup process -- please be patient while the backup operation is in progress.",
"backup_retain": "Retain backup file on server",
"backup_running": "Backup running, please wait...",
"backup_tenant": "Backup Tenant",
"backup_system": "Backup System",
"backup_failed": "Backup failed -- please check server logs",
"backup_success": "Backup successful",
"restore_explain1": "Restore from a system backup should only be performed on an empty Documize Community database.",
"restore_explain2": "Restore operation will re-create users, groups, permissions, spaces, categories and content.",
"restore_explain3": "It can take several minutes to complete the restore process -- please be patient while the restore operation is in progress.",
"restore_select_file": "Choose backup file",
"restore_failed": "Restore failed -- please check server logs",
"restore_success": "Restore completed -- restart your browser and log in",
"restore_confirm": "Confirm Restore",
"restore_confirm_input": "Please type RESTORE to commence the process",
"restore_warn": "You should only restore to an empty Documize Community instance",
"changelog_available": "Product update is available",
"changelog_guidance": "To upgrade, replace existing binary and restart Documize Community.",
"customize_name": "Site Name",
"customize_name_explain": "Provide short title for this Documize Community instance",
"customize_message": "Site Message",
"customize_message_explain": "Provide short message explaining this Documize Community instance",
"customize_theme": "Site Theme",
"customize_logo": "Site Logo",
"customize_logo_default": "Use Default",
"customize_logo_upload": "Upload Custom",
"customize_logo_explain": "You can choose to upload a small logo (e.g. 64px x 64px)",
"customize_subdomain": "Site URL Subdomain",
"customize_subdomain_explain": "If you are hosting on 'docs.example.org' then the subdomain value should be set to 'docs'",
"customize_anon": "Public Spaces Viewable By Anonymous Users",
"customize_anon_explain": "Share content with unauthenticated site visitors",
"customize_conversion_url": "Conversion Service URL",
"customize_conversion_explain": "Endpoint for handling import/export",
"customize_tags": "Maximum Tags Per Document",
"customize_tags_explain": "How many tags can be assigned to a document (between 3 and 10 tags)",
"integration_jira_url": "URL",
"integration_jira_url_explain": "Fully qualified domain name for your Jira instance e.g. http://jira.example.org",
"integration_jira_username": "Username",
"integration_jira_username_explain": "Your Jira login username/email",
"integration_jira_password": "Password",
"integration_jira_password_explain": "Provide API Token if using Atlassian Cloud or Password when self-hosting Jira",
"integration_trello_appkey": "App Key",
"search_reindex": "It can take up to 30 minutes to rebuild the search index.",
"search_reindex_rebuild": "Rebuild",
"search_reindex_start": "Starting search re-index process",
"search_reindex_finish": "Search re-indexing complete",
"x": "x"
}