diff --git a/app/scripts/comp/settings-manager.js b/app/scripts/comp/settings-manager.js
index dabffb98..9e9d9479 100644
--- a/app/scripts/comp/settings-manager.js
+++ b/app/scripts/comp/settings-manager.js
@@ -7,6 +7,23 @@ const SettingsManager = {
neutralLocale: null,
activeLocale: 'en',
+ allLocales: {
+ 'en': 'English',
+ 'de-DE': 'Deutsch',
+ 'es-ES': 'Español',
+ 'fr-FR': 'Français',
+ 'it-IT': 'Italiano',
+ 'nl-NL': 'Nederlands',
+ 'pl': 'Polski',
+ 'pt-PT': 'Português',
+ 'ru-RU': 'Русский',
+ 'sv-SE': 'Svenska',
+ 'zh-CN': '汉语'
+ },
+
+ customLocales: {
+ },
+
setBySettings: function(settings) {
if (settings.get('theme')) {
this.setTheme(settings.get('theme'));
@@ -51,7 +68,11 @@ const SettingsManager = {
}
let localeValues;
if (loc !== 'en') {
- localeValues = require('../locales/' + loc + '.json');
+ if (this.customLocales[loc]) {
+ localeValues = this.customLocales[loc];
+ } else {
+ localeValues = require('../locales/' + loc + '.json');
+ }
}
if (!this.neutralLocale) {
this.neutralLocale = _.clone(Locale);
diff --git a/app/scripts/plugins/plugin-collection.js b/app/scripts/plugins/plugin-collection.js
new file mode 100644
index 00000000..878a794c
--- /dev/null
+++ b/app/scripts/plugins/plugin-collection.js
@@ -0,0 +1,10 @@
+'use strict';
+
+const Backbone = require('backbone');
+const Plugin = require('./plugin');
+
+const PluginCollection = Backbone.Collection.extend({
+ model: Plugin
+});
+
+module.exports = PluginCollection;
diff --git a/app/scripts/plugins/plugin-manager.js b/app/scripts/plugins/plugin-manager.js
index 6d8488e1..cc76f275 100644
--- a/app/scripts/plugins/plugin-manager.js
+++ b/app/scripts/plugins/plugin-manager.js
@@ -1,28 +1,40 @@
'use strict';
-// const Logger = require('../util/logger');
+const Backbone = require('backbone');
const Plugin = require('./plugin');
+const PluginCollection = require('./plugin-collection');
-// const logger = new Logger('plugin-manager');
-
-const PluginManager = {
- plugins: {},
+const PluginManager = Backbone.Model.extend({
+ defaults: {
+ state: '',
+ installing: false,
+ plugins: new PluginCollection()
+ },
install(url) {
+ this.set('installing', true);
return Plugin.load(url).then(plugin => {
- const name = plugin.get('name');
+ const plugins = this.get('plugins');
return Promise.resolve().then(() => {
- if (this.plugins[name]) {
- return this.plugins[name].uninstall().then(() => {
- delete this.plugins[name];
+ if (plugins.get(plugin.id)) {
+ return plugins.get(plugin.id).uninstall().then(() => {
+ plugins.remove(plugin.id);
});
}
}).then(() => {
- this.plugins[name] = plugin;
- return plugin.install();
+ plugins.push(plugin);
+ return plugin.install().then(() => {
+ this.set('installing', false);
+ }).catch(e => {
+ this.set('installing', false);
+ throw e;
+ });
});
+ }).catch(e => {
+ this.set('installing', false);
+ throw e;
});
}
-};
+});
-module.exports = PluginManager;
+module.exports = new PluginManager();
diff --git a/app/scripts/plugins/plugin.js b/app/scripts/plugins/plugin.js
index 5398ae07..2b97e6d1 100644
--- a/app/scripts/plugins/plugin.js
+++ b/app/scripts/plugins/plugin.js
@@ -4,10 +4,13 @@ const kdbxweb = require('kdbxweb');
const Backbone = require('backbone');
const PluginApi = require('./plugin-api');
const Logger = require('../util/logger');
+const SettingsManager = require('../comp/settings-manager');
const commonLogger = new Logger('plugin');
const Plugin = Backbone.Model.extend({
+ idAttribute: 'name',
+
defaults: {
name: '',
manifest: '',
@@ -83,7 +86,7 @@ const Plugin = Backbone.Model.extend({
results.push(this.loadResource('js', url + 'plugin.js'));
}
if (manifest.resources.loc) {
- results.push(this.loadResource('js', url + manifest.locale.name + '.json'));
+ results.push(this.loadResource('loc', url + manifest.locale.name + '.json'));
}
return Promise.all(results)
.catch(() => { throw 'Error loading plugin resources'; })
@@ -197,14 +200,17 @@ const Plugin = Backbone.Model.extend({
applyLoc(locale, data) {
return Promise.resolve().then(() => {
- data = JSON.parse(data);
- // TODO: apply locale
+ const text = kdbxweb.ByteUtils.bytesToString(data);
+ const localeData = JSON.parse(text);
+ SettingsManager.allLocales[locale.name] = locale.title;
+ SettingsManager.customLocales[locale.name] = localeData;
this.logger.debug('Plugin locale installed');
});
},
removeLoc(locale) {
- // TODO: remove locale
+ delete SettingsManager.allLocales[locale.name];
+ delete SettingsManager.customLocales[locale.name];
},
uninstall() {
diff --git a/app/scripts/views/settings/settings-general-view.js b/app/scripts/views/settings/settings-general-view.js
index bdd6e114..8f753c2e 100644
--- a/app/scripts/views/settings/settings-general-view.js
+++ b/app/scripts/views/settings/settings-general-view.js
@@ -57,20 +57,6 @@ const SettingsGeneralView = Backbone.View.extend({
hc: 'setGenThemeHc'
},
- allLocales: {
- 'en': 'English',
- 'de-DE': 'Deutsch',
- 'es-ES': 'Español',
- 'fr-FR': 'Français',
- 'it-IT': 'Italiano',
- 'nl-NL': 'Nederlands',
- 'pl': 'Polski',
- 'pt-PT': 'Português',
- 'ru-RU': 'Русский',
- 'sv-SE': 'Svenska',
- 'zh-CN': '汉语'
- },
-
initialize: function() {
this.views = {};
this.listenTo(UpdateModel.instance, 'change:status', this.render, this);
@@ -85,7 +71,7 @@ const SettingsGeneralView = Backbone.View.extend({
this.renderTemplate({
themes: _.mapObject(this.allThemes, theme => Locale[theme]),
activeTheme: AppSettingsModel.instance.get('theme'),
- locales: this.allLocales,
+ locales: SettingsManager.allLocales,
activeLocale: SettingsManager.activeLocale,
fontSize: AppSettingsModel.instance.get('fontSize'),
expandGroups: AppSettingsModel.instance.get('expandGroups'),
diff --git a/app/templates/settings/settings-plugins.hbs b/app/templates/settings/settings-plugins.hbs
index e82a4662..e6907e93 100644
--- a/app/templates/settings/settings-plugins.hbs
+++ b/app/templates/settings/settings-plugins.hbs
@@ -5,7 +5,7 @@
diff --git a/plugins/example/.gitignore b/plugins/examples/psychodelic/.gitignore
similarity index 100%
rename from plugins/example/.gitignore
rename to plugins/examples/psychodelic/.gitignore
diff --git a/plugins/example/manifest.json b/plugins/examples/psychodelic/manifest.json
similarity index 94%
rename from plugins/example/manifest.json
rename to plugins/examples/psychodelic/manifest.json
index e223fb93..3043b259 100644
--- a/plugins/example/manifest.json
+++ b/plugins/examples/psychodelic/manifest.json
@@ -1,8 +1,8 @@
{
"version": "0.0.1",
"manifestVersion": "0.1.0",
- "name": "example",
- "description": "KeeWeb plugin example",
+ "name": "psychodelic",
+ "description": "Crazy animations for KeeWeb",
"author": {
"name": "antelle",
"email": "antelle.net@gmail.com",
@@ -15,4 +15,4 @@
"css": "P3qX1ccKLeHI/75sWC/46O/Qs8cq6UFyoW2qPYRn05q8dtAfXr7YKXEndt1BqSqaa+ZanaA6TDmb5FJ/GKQpG1KfuXy+ug92uwSvp6QUd7/hj++OR6RRY/bsL4hA9J2BwMB3jYc58lCPcK2jcu3HCYX5T+I1tFLmqOAKbTUGQxl+a4lc0w/zAq9sEFIvm7Nj66HhF7TMqVoPt6pUBz7oWdTYuKJ3rz46rLd9kzTeaeG6WxGorFc6Sk5tlvy+o9e5S2T0lHJwCHw24rMeOSgwV8rA/RXXnKowVc9Qbb3KwVh2TlKUWRtUuygIIgSsp4GmzT+w8+5hXke7iXDTGczp1Q=="
},
"publicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1QB+yQofkqIHbHFVAtWhjEFjaxvNekyQx/aK7nEpZzqM8ReoVWbJGVA+7z7MhymwZanbL8uAUrSpNTp5eFWltDksxqHqmXT4UcFU+4reLjYfgwjIaA3c9Q+2JA1Iowqbv3NDcDKm6Ug+dROr04VDCfYE4WRYgGdTYHDbJs5svxUgQ25uc0KKUWAvhYbSKsw43AwmbPbKkHdfZHiS5ZST99HVEJWxn3Kd2zLY9Kk70nu9MzypMLDqxUqjKgdeRCIyZeAYzB75miH3B5vMKhFcdmA8+D6WU2N+6gzKsY5BfqF729uFKSTo4JUKQ5fMU0lKSDHG4qGrkgnURfAUuj9YMQIDAQAB"
-}
\ No newline at end of file
+}
diff --git a/plugins/example/plugin.css b/plugins/examples/psychodelic/plugin.css
similarity index 100%
rename from plugins/example/plugin.css
rename to plugins/examples/psychodelic/plugin.css
diff --git a/plugins/example/plugin.js b/plugins/examples/psychodelic/plugin.js
similarity index 100%
rename from plugins/example/plugin.js
rename to plugins/examples/psychodelic/plugin.js
diff --git a/plugins/examples/square-language/.gitignore b/plugins/examples/square-language/.gitignore
new file mode 100644
index 00000000..37fb1323
--- /dev/null
+++ b/plugins/examples/square-language/.gitignore
@@ -0,0 +1,3 @@
+.DS_Store
+*.log
+*.pem
\ No newline at end of file
diff --git a/plugins/examples/square-language/manifest.json b/plugins/examples/square-language/manifest.json
new file mode 100644
index 00000000..bd6bc60e
--- /dev/null
+++ b/plugins/examples/square-language/manifest.json
@@ -0,0 +1,21 @@
+{
+ "version": "0.0.1",
+ "manifestVersion": "0.1.0",
+ "name": "square-language",
+ "description": "KeeWeb language which replaces everything with squares",
+ "author": {
+ "name": "antelle",
+ "email": "antelle.net@gmail.com",
+ "url": "http://antelle.net"
+ },
+ "licence": "MIT",
+ "url": "https://keeweb.info",
+ "resources": {
+ "loc": "iQeeuzk/MuNvmqIboqMMvz+Jyw7dHBJtqNe9ja2i8GJrjbPIG0wPgiRohSFwiAqNDrRQlvfhoNdyvp7UlGO4fAWLaN4h4IUP/iQo7CElYQFMuN+4psJnAkx7HJajtMrJ5lHH5w5aeHxVW5jEYzY0SR2zxzYqxZVifOwJmj8/oKweWzkxt7Cs/2NfcFXLnrU83IyFk75yunvbDP7jlt08mEyrfOQIwzGnsrEiEZ6ha6w0kG2cd6Mmda/12Jnk95ZpQrZcK5J+nafIXYcGwvaQhmWMjZzIWp7/tDdqhBRUhiRDFQwl3rjdubeKUBjYvxZDkDH2DPiOR8kMw2kT6mNqiQ=="
+ },
+ "locale": {
+ "name": "xs-XS",
+ "title": "▮▮▮▮▮▮▮"
+ },
+ "publicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1QB+yQofkqIHbHFVAtWhjEFjaxvNekyQx/aK7nEpZzqM8ReoVWbJGVA+7z7MhymwZanbL8uAUrSpNTp5eFWltDksxqHqmXT4UcFU+4reLjYfgwjIaA3c9Q+2JA1Iowqbv3NDcDKm6Ug+dROr04VDCfYE4WRYgGdTYHDbJs5svxUgQ25uc0KKUWAvhYbSKsw43AwmbPbKkHdfZHiS5ZST99HVEJWxn3Kd2zLY9Kk70nu9MzypMLDqxUqjKgdeRCIyZeAYzB75miH3B5vMKhFcdmA8+D6WU2N+6gzKsY5BfqF729uFKSTo4JUKQ5fMU0lKSDHG4qGrkgnURfAUuj9YMQIDAQAB"
+}
diff --git a/plugins/examples/square-language/xs-XS.json b/plugins/examples/square-language/xs-XS.json
new file mode 100644
index 00000000..10c47171
--- /dev/null
+++ b/plugins/examples/square-language/xs-XS.json
@@ -0,0 +1,504 @@
+{
+ "months": ["▮▮▮▮▮▮▮", "▮▮▮▮▮▮▮▮", "▮▮▮▮▮", "▮▮▮▮▮", "▮▮▮", "▮▮▮▮", "▮▮▮▮", "▮▮▮▮▮▮", "▮▮▮▮▮▮▮▮▮", "▮▮▮▮▮▮▮", "▮▮▮▮▮▮▮▮", "▮▮▮▮▮▮▮▮"],
+ "monthsShort": ["▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮"],
+ "weekdays": ["▮▮▮▮▮▮", "▮▮▮▮▮▮", "▮▮▮▮▮▮▮", "▮▮▮▮▮▮▮▮▮", "▮▮▮▮▮▮▮▮", "▮▮▮▮▮▮", "▮▮▮▮▮▮▮▮"],
+ "weekdaysShort": ["▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮", "▮▮▮"],
+
+ "retToApp": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "name": "▮▮▮▮",
+ "icon": "▮▮▮▮",
+ "title": "▮▮▮▮▮",
+ "password": "▮▮▮▮▮▮▮▮",
+ "user": "▮▮▮▮",
+ "website": "▮▮▮▮▮▮▮",
+ "tags": "▮▮▮▮",
+ "notes": "▮▮▮▮▮",
+ "entry": "▮▮▮▮▮",
+ "group": "▮▮▮▮▮",
+ "noTitle": "▮▮▮▮▮▮▮▮",
+ "or": "▮▮",
+ "notImplemented": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "saveChanges": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "discardChanges": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "advanced": "▮▮▮▮▮▮▮▮",
+ "shortcuts": "▮▮▮▮▮▮▮▮▮",
+ "help": "▮▮▮▮",
+ "settings": "▮▮▮▮▮▮▮▮",
+ "plugins": "▮▮▮▮▮▮▮",
+ "history": "▮▮▮▮▮▮▮",
+
+ "cache": "▮▮▮▮▮",
+ "file": "▮▮▮▮",
+ "webdav": "▮▮▮▮▮▮",
+ "dropbox": "▮▮▮▮▮▮▮",
+ "gdrive": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "onedrive": "▮▮▮▮▮▮▮▮",
+
+ "menuAllItems": "▮▮▮▮▮▮▮▮▮",
+ "menuColors": "▮▮▮▮▮▮",
+ "menuTrash": "▮▮▮▮▮",
+ "menuSetGeneral": "▮▮▮▮▮▮▮",
+ "menuSetAbout": "▮▮▮▮▮",
+ "menuAlertNoTags": "▮▮▮▮▮▮▮",
+ "menuAlertNoTagsBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "menuEmptyTrash": "▮▮▮▮▮▮▮▮▮▮▮",
+ "menuEmptyTrashAlert": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "menuEmptyTrashAlertBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "menuItemCollapsed": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "alertYes": "▮▮▮",
+ "alertNo": "▮▮",
+ "alertOk": "▮▮",
+ "alertCancel": "▮▮▮▮▮▮",
+ "alertSignIn": "▮▮▮▮▮▮▮",
+ "alertCopy": "▮▮▮▮",
+ "alertClose": "▮▮▮▮▮",
+
+ "appBeta": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "footerOpen": "▮▮▮▮▮▮▮▮▮▮",
+ "footerSyncError": "▮▮▮▮▮▮▮▮▮▮",
+ "footerTitleGen": "▮▮▮▮▮▮▮▮",
+ "footerTitleLock": "▮▮▮▮",
+
+ "genLen": "▮▮▮▮▮▮",
+ "genNewPass": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPresetDefault": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPresetDerived": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPresetPronounceable": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPresetMed": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPresetLong": "▮▮▮▮",
+ "genPresetPin4": "▮▮▮▮▮▮▮▮▮▮▮",
+ "genPresetMac": "▮▮▮▮▮▮▮▮▮▮▮",
+ "genPresetHash128": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPresetHash256": "▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "grpTitle": "▮▮▮▮▮",
+ "grpSearch": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "grpAutoType": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "grpAutoTypeSeq": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "grpAutoTypeSeqDefault": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "grpTrash": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "tagTitle": "▮▮▮",
+ "tagTrash": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "tagRename": "▮▮▮▮▮▮",
+ "tagTrashQuestion": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "tagTrashQuestionBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "tagExists": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "tagExistsBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "tagBadName": "▮▮▮▮▮▮▮▮",
+ "tagBadNameBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "genPsTitle": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPsCreate": "▮▮▮▮▮▮▮▮▮▮",
+ "genPsDelete": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPsNew": "▮▮▮▮▮▮",
+ "genPsEnabled": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPsDefault": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPsDefaultLength": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPsUpper": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPsLower": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPsDigits": "▮▮▮▮▮▮",
+ "genPsSpecial": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPsBrackets": "▮▮▮▮▮▮▮▮",
+ "genPsHigh": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPsAmbiguous": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPsInclude": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "genPsExample": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "keyChangeTitleRemote": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "keyChangeMessageRemote": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "keyChangeTitleExpired": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "keyChangeMessageExpired": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "keyChangeRepeatPassword": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "iconFavTitle": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "iconSelCustom": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "listEmptyTitle": "▮▮▮▮▮",
+ "listEmptyAdd": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "listGroup": "▮▮▮▮▮",
+ "listNoWebsite": "▮▮▮▮▮▮▮▮▮▮",
+ "listNoUser": "▮▮▮▮▮▮▮",
+ "listNoAttachments": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "searchAddNew": "▮▮▮▮▮▮▮",
+ "searchSort": "▮▮▮▮",
+ "searchCreated": "▮▮▮▮▮▮▮",
+ "searchUpdated": "▮▮▮▮▮▮▮",
+ "searchAttachments": "▮▮▮▮▮▮▮▮▮▮▮",
+ "searchAZ": "▮▮▮▮▮▮",
+ "searchZA": "▮▮▮▮▮▮",
+ "searchON": "▮▮▮▮▮▮▮▮▮▮",
+ "searchNO": "▮▮▮▮▮▮▮▮▮▮",
+ "searchShiftClickOr": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "searchAdvTitle": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "searchSearchIn": "▮▮▮▮▮▮▮▮▮",
+ "searchOther": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "searchProtect": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "searchOptions": "▮▮▮▮▮▮▮",
+ "searchCase": "▮▮▮▮▮▮▮▮▮▮",
+ "searchRegex": "▮▮▮▮▮",
+
+ "openOpen": "▮▮▮▮",
+ "openNew": "▮▮▮",
+ "openMore": "▮▮▮▮",
+ "openDemo": "▮▮▮▮",
+ "openXml": "▮▮▮▮▮▮▮▮▮▮",
+ "openCaps": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openClickToOpen": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openKeyFile": "▮▮▮▮▮▮▮▮",
+ "openKeyFileDropbox": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openDropHere": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openFailedRead": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openNothingFound": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openNothingFoundBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openNothingFoundBodyFolder": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openAppFolder": "▮▮▮",
+ "openRootFolder": "▮▮▮▮",
+ "openSelectFile": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openSelectFileBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openPassFor": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openRemoveLastQuestion": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openRemoveLastQuestionBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openRemoveLastQuestionModBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openLocalFile": "▮▮▮▮▮▮▮▮▮▮",
+ "openLocalFileBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openLocalFileDontShow": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openWrongFile": "▮▮▮▮▮▮▮▮",
+ "openWrongFileBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openKdbFileBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openConfigHeader": "▮▮▮▮▮▮▮▮▮▮▮",
+ "openUrl": "▮▮▮",
+ "openUrlDesc": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openUser": "▮▮▮▮",
+ "openUserDesc": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openUserPlaceholder": "▮▮▮▮▮▮▮",
+ "openPass": "▮▮▮▮▮▮▮▮",
+ "openPassDesc": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openPassPlaceholder": "▮▮▮▮▮▮▮▮▮▮▮",
+ "openConfigError": "▮▮▮▮▮▮▮▮▮",
+ "openConfigErrorNotFound": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openError": "▮▮▮▮▮",
+ "openErrorDescription": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "openErrorFileNotFound": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "detAttDownload": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detAttDelToRemove": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detEmpty": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detGroupRestore": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detHistoryClickPoint": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detHistoryReturn": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detHistoryRevert": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detHistoryDel": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detHistoryEmpty": "▮▮▮▮▮",
+ "detHistoryModified": "▮▮▮▮▮▮▮▮",
+ "detHistoryRec": "▮▮▮▮▮▮",
+ "detHistoryRecs": "▮▮▮▮▮▮▮",
+ "detHistoryVersion": "▮▮▮▮▮▮▮",
+ "detHistorySaved": "▮▮▮▮▮",
+ "detHistoryNoTitle": "▮▮▮▮▮▮▮▮",
+ "detHistoryCurState": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detHistoryCurUnsavedState": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detBackToList": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetIconColor": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetIcon": "▮▮▮▮▮▮▮▮▮▮▮",
+ "detDropAttachments": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detDelEntry": "▮▮▮▮▮▮",
+ "detDelEntryPerm": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detExpires": "▮▮▮▮▮▮▮",
+ "detExpired": "▮▮▮▮▮▮▮",
+ "detGroup": "▮▮▮▮▮",
+ "detCreated": "▮▮▮▮▮▮▮",
+ "detUpdated": "▮▮▮▮▮▮▮",
+ "detNetField": "▮▮▮▮▮▮▮▮▮",
+ "detAttachments": "▮▮▮▮▮▮▮▮▮▮▮",
+ "detDelFromTrash": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detDelFromTrashBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detDelFromTrashBodyHint": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detFieldCopied": "▮▮▮▮▮▮",
+ "detFieldCopiedTime": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detCopyHint": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detMore": "▮▮▮▮",
+ "detClickToAddField": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detMenuAddNewField": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detMenuShowEmpty": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detMenuHideEmpty": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detMenuAddField": "▮▮▮▮▮▮",
+ "detMenuCopyPassword": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detMenuCopyUser": "▮▮▮▮▮▮▮▮▮",
+ "detSetupOtp": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detClone": "▮▮▮▮▮▮▮▮▮▮▮",
+ "detClonedName": "▮▮▮▮",
+ "detAutoType": "▮▮▮▮▮▮▮▮▮",
+ "detAutoTypeSettings": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detAutoTypeEnabled": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detAutoTypeSequence": "▮▮▮▮▮▮▮▮▮▮",
+ "detAutoTypeInput": "▮▮▮▮▮",
+ "detAutoTypeShortcutsDesc": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detAutoTypeObfuscation": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detAutoTypeWindow": "▮▮▮▮▮▮",
+ "detAutoTypeInputWindow": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetupOtpAlert": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetupOtpAlertBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetupOtpAlertBody1": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetupOtpAlertBody2": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetupOtpAlertBody3": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetupOtpAlertBody3Mobile": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetupOtpAlertBody4": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetupOtpManualButton": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetupOtpScanButton": "▮▮▮▮▮▮▮▮▮▮▮",
+ "detSetupOtpAlertBodyWith": "▮▮▮▮▮▮▮",
+ "detOtpImageError": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detOtpImageErrorBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detOtpImageReading": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detOtpQrError": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detOtpQrErrorBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detOtpQrWrong": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "detOtpQrWrongBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "autoTypeEntryFields": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "autoTypeModifiers": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "autoTypeKeys": "▮▮▮▮",
+ "autoTypeLink": "▮▮▮▮▮▮▮",
+ "autoTypeError": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "autoTypeErrorGeneric": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "autoTypeErrorGlobal": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "autoTypeErrorNotInstalled": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "autoTypeHeader": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "autoTypeMsgNoWindow": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "autoTypeMsgMatchedByWindow": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "autoTypeClearFilter": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "autoTypeNoMatches": "▮▮▮▮▮▮▮▮▮▮",
+
+ "appSecWarn": "▮▮▮▮▮▮▮▮▮▮▮",
+ "appSecWarnBody1": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appSecWarnBody2": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appSecWarnBtn": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appUnsavedWarn": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appUnsavedWarnBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appDontExitBtn": "▮▮▮▮▮▮▮▮▮▮",
+ "appCannotLockAutoInit": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appCannotLock": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appAutoSave": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appSaveError": "▮▮▮▮▮▮▮▮▮▮",
+ "appSaveErrorBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appSaveErrorBodyMul": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appSettingsError": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appSettingsErrorBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appTabWarn": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "appTabWarnBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "setGenTitle": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenUpdate": "▮▮▮▮▮▮",
+ "setGenNewVersion": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenReleaseNotes": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenReloadToUpdate": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenUpdateManual": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenDownloadUpdate": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenUpdateAuto": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenUpdateCheck": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenNoUpdate": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenUpdateChecking": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenCheckUpdate": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenErrorChecking": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLastCheckSuccess": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLastCheckVer": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenCheckedAt": "▮▮▮▮▮▮▮▮▮▮",
+ "setGenLatestVer": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenNewVer": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenDownloadingUpdate": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenExtractingUpdate": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenCheckErr": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenNeverChecked": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenRestartToUpdate": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenDownloadAndRestart": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenAppearance": "▮▮▮▮▮▮▮▮▮▮",
+ "setGenTheme": "▮▮▮▮▮",
+ "setGenThemeFb": "▮▮▮▮▮▮▮▮▮",
+ "setGenThemeDb": "▮▮▮▮▮▮▮▮▮▮",
+ "setGenThemeWh": "▮▮▮▮▮",
+ "setGenThemeTe": "▮▮▮▮▮▮▮▮",
+ "setGenThemeHc": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenThemeSd": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenThemeSl": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLocale": "▮▮▮▮▮▮▮▮",
+ "setGenLocImprove": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLocMsg": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLocMsgBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLocMsgLink": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenFontSize": "▮▮▮▮▮▮▮▮▮",
+ "setGenFontSizeNormal": "▮▮▮▮▮▮",
+ "setGenFontSizeLarge": "▮▮▮▮▮",
+ "setGenFontSizeLargest": "▮▮▮▮▮▮▮",
+ "setGenShowSubgroups": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenTableView": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenColorfulIcons": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenFunction": "▮▮▮▮▮▮▮▮",
+ "setGenAutoSync": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenRememberKeyFiles": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenNoRememberKeyFiles": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenRememberKeyFilesData": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenRememberKeyFilesPath": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLockInactive": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenNoAutoLock": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLockMinutes": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLockHour": "▮▮▮▮▮▮▮▮▮▮",
+ "setGenLockHours": "▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLockDay": "▮▮▮▮▮▮▮▮",
+ "setGenClearClip": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenNoClear": "▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenClearSeconds": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenClearMinute": "▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenMinInstead": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLockMinimize": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenLockCopy": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenStorage": "▮▮▮▮▮▮▮",
+ "setGenShowAdvanced": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenDevTools": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenTryBeta": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenTryBetaWarning": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenTryBetaWarningBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setGenShowAppLogs": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "setFilePath": "▮▮▮▮▮▮▮▮▮",
+ "setFileStorage": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileIntl": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileLocalHint": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileDownloadApp": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileSave": "▮▮▮▮",
+ "setFileSaveTo": "▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileClose": "▮▮▮▮▮",
+ "setFileSync": "▮▮▮▮",
+ "setFileSaveToXml": "▮▮▮",
+ "setFileLastSync": "▮▮▮▮▮▮▮▮▮",
+ "setFileLastSyncUnknown": "▮▮▮▮▮▮▮",
+ "setFileSyncInProgress": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileSyncError": "▮▮▮▮▮▮▮▮▮▮",
+ "setFilePass": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFilePassChanged": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileKeyFile": "▮▮▮▮▮▮▮▮",
+ "setFileSelKeyFile": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileNames": "▮▮▮▮▮",
+ "setFileDefUser": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileEnableTrash": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileHistLen": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileHistSize": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileBackups": "▮▮▮▮▮▮▮",
+ "setFileBackupEnable": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileBackupPath": "▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileBackupTime": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileBackupNow": "▮▮▮▮▮▮▮▮▮▮",
+ "setFileBackupNowWorking": "▮▮▮▮▮▮▮▮▮▮",
+ "setFileBackupError": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileBackupErrorDescription": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileBackupOnSave": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileBackupDaily": "▮▮▮▮▮",
+ "setFileBackupWeekly": "▮▮▮▮▮▮",
+ "setFileBackupMonthly": "▮▮▮▮▮▮▮",
+ "setFileBackupManually": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileRounds": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileKdfParams": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileKdfParamsIter": "▮▮▮▮▮▮▮▮▮▮",
+ "setFileKdfParamsMem": "▮▮▮▮▮▮▮▮▮▮",
+ "setFileKdfParamsPar": "▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileKeyChangeForce": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileUseKeyFile": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileUseGenKeyFile": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileUseOldKeyFile": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileGenKeyFile": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileDontUseKeyFile": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileEmptyPass": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileEmptyPassBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileSaveError": "▮▮▮▮▮▮▮▮▮▮",
+ "setFileSaveErrorBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileAlreadyExists": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileAlreadyExistsBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileUnsaved": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileUnsavedBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileCloseNoSave": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileDontClose": "▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileNoWebDavUpload": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setFileNoWebDavUploadBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "setShTitle": "▮▮▮▮▮▮▮▮▮",
+ "setShShowAll": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShColors": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShTrash": "▮▮▮▮▮▮▮▮▮▮▮",
+ "setShFind": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShClearSearch": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShCopyPass": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShCopyUser": "▮▮▮▮▮▮▮▮▮",
+ "setShCopyUrl": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShAutoType": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShPrev": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShNext": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShCreateEntry": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShOpen": "▮▮▮▮▮▮▮▮▮▮",
+ "setShSave": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShGen": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShSet": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShCopyPassGlobal": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShCopyUserGlobal": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShCopyUrlGlobal": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShAutoTypeGlobal": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setShLock": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "setPlInstallTitle": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setPlInstallDesc": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setPlInstallLabel": "▮▮▮▮▮▮▮▮▮▮",
+ "setPlInstallBtn": "▮▮▮▮▮▮▮",
+ "setPlInstallBtnProgress": "▮▮▮▮▮▮▮▮▮▮",
+
+ "setAboutTitle": "▮▮▮▮▮",
+ "setAboutBuilt": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setAboutLic": "▮▮▮▮▮▮▮",
+ "setAboutLicComment": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setAboutFirst": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setAboutSecond": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setAboutSource": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "setHelpFormat": "▮▮▮▮▮▮▮▮▮▮▮",
+ "setHelpFormatBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setHelpProblems": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setHelpProblems1": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setHelpProblems2": "▮▮▮▮▮",
+ "setHelpOpenIssue": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setHelpContactLink": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setHelpAppInfo": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setHelpOtherPlatforms": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setHelpDesktopApps": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "setHelpWebApp": "▮▮▮▮▮▮▮",
+ "setHelpUpdates": "▮▮▮▮▮▮▮",
+ "setHelpTwitter": "▮▮▮▮▮▮▮▮▮▮▮",
+
+ "dropboxLogin": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxLoginBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxSyncError": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxNotFoundBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxFull": "▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxFullBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxRateLimitedBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxNetError": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxNetErrorBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxErrorBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxErrorRepeatBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxSetupDesc": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxAppKey": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxAppKeyDesc": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxFolder": "▮▮▮▮▮▮▮▮▮▮",
+ "dropboxFolderDesc": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxFolderSettingsDesc": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxFolderPlaceholder": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxLink": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxLinkApp": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxLinkFull": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "dropboxLinkCustom": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "launcherSave": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "launcherFileFilter": "▮▮▮▮▮▮▮▮▮▮▮▮▮",
+
+ "authPopupRequired": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮",
+ "authPopupRequiredBody": "▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮"
+}
diff --git a/plugins/kw-plugin-control.js b/plugins/kw-plugin-control.js
index ca469067..d4a97132 100644
--- a/plugins/kw-plugin-control.js
+++ b/plugins/kw-plugin-control.js
@@ -233,7 +233,8 @@ function createResources(data) {
* @license ${data.licence}
*/
-/* global kw */
+module.exports.uninstall = function() {
+};
`);
}
if (data.resources.css) {