diff --git a/gulpfile.ts b/gulpfile.ts
index 9619ea66..60d3429c 100644
--- a/gulpfile.ts
+++ b/gulpfile.ts
@@ -1,12 +1,17 @@
import * as gulp from 'gulp';
import * as fs from 'fs';
+import {promises as fsp} from 'fs';
+import * as path from 'path';
+import * as util from 'util';
import * as zip from 'gulp-zip';
import * as ts from 'gulp-typescript';
+import * as xml2js from 'xml2js';
+import * as child_process from 'child_process';
// @ts-ignore
import * as jeditor from 'gulp-json-editor';
+import {XLIFF} from 'xlf-google-translate';
-
-const exec = require('child_process').exec;
+const execPr = util.promisify(child_process.exec);
const translationFolder = 'translate';
const tsBackendProject = ts.createProject('tsconfig.json');
@@ -45,10 +50,79 @@ const handleError = (cb: (err: any) => void) => {
cb(err);
};
};
+const createDynamicTranslationFile = async (language: string) => {
+ // load
+ const folder = './src/frontend/' + translationFolder;
+ const data: string = await fsp.readFile(path.join(folder, `messages.${language}.xlf`), 'utf-8');
+ const translationXml: XLIFF.Root = await xml2js.parseStringPromise(data);
-const createFrontendTask = (type: string, script: string) => {
- gulp.task(type, (cb) => {
- exec(script, handleError(cb));
+ // clean translations, keep only .ts transaltions
+ const hasTsTranslation = (cg: XLIFF.ContextGroup) =>
+ cg.context.findIndex((c: any) => c.$['context-type'] === 'sourcefile' && c._.endsWith('.ts')) !== -1;
+ const translations = translationXml.xliff.file[0].body[0]['trans-unit'];
+ const filtered = translations.filter(tr => tr['context-group'].findIndex(hasTsTranslation) !== -1);
+ filtered.forEach(tr => delete tr['context-group']);
+ translationXml.xliff.file[0].body[0]['trans-unit'] = filtered;
+
+ // save
+ const builder = new xml2js.Builder({trim: true, normalize: true});
+ const xml = builder.buildObject(translationXml);
+ await fsp.writeFile(path.join(folder, `ts-only-msg.${language}.xlf`), xml);
+
+};
+
+const removeDynamicTranslationFile = async (language: string) => {
+ const translationFile = path.join('./src/frontend/', translationFolder, `ts-only-msg.${language}.xlf`);
+ fsp.unlink(translationFile);
+};
+
+
+const setDynTransFileAtAppModule = async (language: string) => {
+ const file = './src/frontend/app/app.module.ts';
+ let data: string = await fsp.readFile(file, 'utf-8');
+ const from = 'messages.${locale}.xlf';
+ const to = `ts-only-msg.${language}.xlf`;
+ data = data.replace(from, to);
+ await fsp.writeFile(file, data);
+};
+
+const resetAppModule = async (language: string) => {
+ const file = './src/frontend/app/app.module.ts';
+ let data: string = await fsp.readFile(file, 'utf-8');
+ const from = 'messages.${locale}.xlf';
+ const to = `ts-only-msg.${language}.xlf`;
+ data = data.replace(to, from);
+ await fsp.writeFile(file, data);
+};
+
+
+const createFrontendTask = (type: string, language: string, script: string) => {
+ gulp.task(type, async (cb) => {
+ let error;
+ try {
+ // TODO: remove this once i18n-pollify is removed from the project
+ // Adding filtered translation as webpack would pack all translations into the created release
+ await createDynamicTranslationFile(language);
+ await setDynTransFileAtAppModule(language);
+ const {stdout, stderr} = await execPr(script);
+ console.log(stdout);
+ console.error(stderr);
+ } catch (e) {
+ console.error(e);
+ error = e;
+ } finally {
+ try {
+ await resetAppModule(language);
+ } catch (e) {
+
+ }
+ try {
+ await removeDynamicTranslationFile(language);
+ } catch (e) {
+
+ }
+ cb(error);
+ }
});
};
@@ -85,13 +159,13 @@ gulp.task('build-frontend', (() => {
return l !== 'en';
});
const tasks = [];
- createFrontendTask('build-frontend-release default',
+ createFrontendTask('build-frontend-release default', 'en',
'ng build --aot --prod --output-path=./release/dist --no-progress --i18n-locale=en' +
' --i18n-format xlf --i18n-file src/frontend/' + translationFolder + '/messages.en.xlf' +
' --i18n-missing-translation warning');
tasks.push('build-frontend-release default');
for (let i = 0; i < languages.length; i++) {
- createFrontendTask('build-frontend-release ' + languages[i],
+ createFrontendTask('build-frontend-release ' + languages[i], languages[i],
'ng build --aot --prod --output-path=./release/dist/' + languages[i] +
' --no-progress --i18n-locale=' + languages[i] +
' --i18n-format xlf --i18n-file src/frontend/' + translationFolder + '/messages.' + languages[i] + '.xlf' +
@@ -105,7 +179,7 @@ gulp.task('copy-static', function () {
return gulp.src([
'src/backend/model/diagnostics/blank.jpg',
'README.md',
- // 'package-lock.json', should not add, it keeps optional packages optional even with --force-opt-packages.
+ // 'package-lock.json', should not add, it keeps optional packages optional even with --force-opt-packages.
'LICENSE'], {base: '.'})
.pipe(gulp.dest('./release'));
});
@@ -172,12 +246,12 @@ const simpleBuild = (isProd: boolean) => {
if (isProd) {
cmd += ' --prod --no-extract-licenses ';
}
- createFrontendTask('build-frontend default', cmd + '--output-path=./dist --no-progress --no-progress --i18n-locale en' +
+ createFrontendTask('build-frontend default', 'en', cmd + '--output-path=./dist --no-progress --no-progress --i18n-locale en' +
' --i18n-format=xlf --i18n-file=src/frontend/' + translationFolder + '/messages.en.xlf' + ' --i18n-missing-translation warning');
tasks.push('build-frontend default');
if (!process.env.CI) { // don't build languages if running in CI
for (let i = 0; i < languages.length; i++) {
- createFrontendTask('build-frontend ' + languages[i], cmd +
+ createFrontendTask('build-frontend ' + languages[i], languages[i], cmd +
'--output-path=./dist/' + languages[i] +
' --no-progress --i18n-locale ' + languages[i] +
' --i18n-format=xlf --i18n-file=src/frontend/' + translationFolder +
@@ -188,31 +262,59 @@ const simpleBuild = (isProd: boolean) => {
return gulp.series(...tasks);
};
-gulp.task('extract-locale', (cb) => {
+gulp.task('extract-locale', async (cb) => {
console.log('creating source translation file: locale.source.xlf');
- exec('ng xi18n --out-file=./../../locale.source.xlf --i18n-format=xlf --i18n-locale=en',
- {maxBuffer: 1024 * 1024}, (error: any, stdOut: string, stdErr: string) => {
- console.log(stdOut);
- console.log(stdErr);
- if (error) {
- return cb(error);
- }
- exec('ngx-extractor -i src/frontend/**/*.ts -f xlf --out-file locale.source.xlf',
- handleError(cb));
- });
+ try {
+ {
+ const {stdout, stderr} = await execPr('ng xi18n --out-file=./../../locale.source.xlf --i18n-format=xlf --i18n-locale=en',
+ {maxBuffer: 1024 * 1024});
+ console.log(stdout);
+ console.error(stderr);
+ }
+ {
+ const {stdout, stderr} = await execPr('ngx-extractor -i src/frontend/**/*.ts -f xlf --out-file locale.source.xlf');
+ console.log(stdout);
+ console.error(stderr);
+ }
+ cb();
+ } catch (e) {
+ console.error(e);
+ return cb(e);
+ }
});
-const translate = (list: any[], cb: (err: any) => void) => {
- const localsStr = '"[\\"' + list.join('\\",\\"') + '\\"]"';
- exec('xlf-google-translate --source-lang="en" --source-file="./locale.source.xlf" --destination-folder="./src/frontend/"' +
- translationFolder + ' --destination-languages=' + localsStr,
- handleError(cb));
+const translate = async (list: any[], cb: (err?: any) => void) => {
+ try {
+ const localsStr = '"[\\"' + list.join('\\",\\"') + '\\"]"';
+ const {stdout, stderr} = await execPr('xlf-google-translate ' +
+ '--source-lang="en" ' +
+ '--source-file="./locale.source.xlf" ' +
+ '--destination-filename="messages" ' +
+ '--destination-folder="./src/frontend/"' + translationFolder + ' --destination-languages=' + localsStr);
+ console.log(stdout);
+ console.error(stderr);
+ cb();
+ } catch (e) {
+ console.error(e);
+ return cb(e);
+ }
};
-const merge = (list: any[], cb: (err: any) => void) => {
- const localsStr = '"[\\"' + list.join('\\",\\"') + '\\"]"';
- exec('xlf-google-translate --method="extend-only" --source-lang="en" --source-file="./locale.source.xlf" --destination-folder="./src/frontend/"' +
- translationFolder + ' --destination-languages=' + localsStr,
- handleError(cb));
+const merge = async (list: any[], cb: (err?: any) => void) => {
+ try {
+ const localsStr = '"[\\"' + list.join('\\",\\"') + '\\"]"';
+ const {stdout, stderr} = await execPr('xlf-google-translate ' +
+ '--method="extend-only" ' +
+ '--source-lang="en" ' +
+ '--source-file="./locale.source.xlf" ' +
+ '--destination-filename="messages" ' +
+ '--destination-folder="./src/frontend/"' + translationFolder + ' --destination-languages=' + localsStr);
+ console.log(stdout);
+ console.error(stderr);
+ cb();
+ } catch (e) {
+ console.error(e);
+ return cb(e);
+ }
};
gulp.task('update-translation-only', function (cb) {
diff --git a/package-lock.json b/package-lock.json
index f8337368..1a15b80e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "pigallery2",
- "version": "1.7.9",
+ "version": "1.8.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -4106,6 +4106,15 @@
"winston": "*"
}
},
+ "@types/xml2js": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.5.tgz",
+ "integrity": "sha512-yohU3zMn0fkhlape1nxXG2bLEGZRc1FeqF80RoHaYXJN7uibaauXfhzhOJr1Xh36sn+/tx21QAOf07b/xYVk1w==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"@webassemblyjs/ast": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
@@ -7293,9 +7302,9 @@
"dev": true
},
"defer-to-connect": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.1.tgz",
- "integrity": "sha512-2e0FJesseUqQj671gvZWfUyxpnFx/5n4xleamlpCD3U6Fm5dh5qzmmLNxNhtmHF06+SYVHH8QU6FACffYTnj0Q==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.1.tgz",
+ "integrity": "sha512-J7thop4u3mRTkYRQ+Vpfwy2G5Ehoy82I14+14W4YMDLKdWloI9gSzRbV30s/NckQGVJtPkWNcW4oMAUigTdqiQ==",
"dev": true
},
"define-properties": {
@@ -13671,9 +13680,9 @@
"dev": true
},
"normalize-url": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz",
- "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
+ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
"dev": true
},
"now-and-later": {
@@ -14087,9 +14096,9 @@
}
},
"p-cancelable": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.0.0.tgz",
- "integrity": "sha512-USgPoaC6tkTGlS831CxsVdmZmyb8tR1D+hStI84MyckLOzfJlYQUweomrwE3D8T7u5u5GVuW064LT501wHTYYA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
+ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
"dev": true
},
"p-defer": {
@@ -20145,14 +20154,14 @@
}
},
"xlf-google-translate": {
- "version": "1.0.0-beta.15",
- "resolved": "https://registry.npmjs.org/xlf-google-translate/-/xlf-google-translate-1.0.0-beta.15.tgz",
- "integrity": "sha512-2JbIyS6rjBU5aJ7hhlWSLxNk8JC9BCwjjVhZu5Sm66c0NMukgn4RRnu9Z8d41NnDfPFrrkONYxkJm57lzRysUw==",
+ "version": "1.0.0-beta.18",
+ "resolved": "https://registry.npmjs.org/xlf-google-translate/-/xlf-google-translate-1.0.0-beta.18.tgz",
+ "integrity": "sha512-BDsJm+i6rNNuFqm3EYXhojTb9V/PYdgt3zt0X56kIrWqJKrI08iDOdhIXcujqdYwiPxnS4nVPW4DKbXy8UA1gw==",
"dev": true,
"requires": {
"@k3rn31p4nic/google-translate-api": "1.0.6",
"typeconfig": "1.0.7",
- "xml2js": "0.4.19"
+ "xml2js": "0.4.23"
},
"dependencies": {
"typeconfig": {
@@ -20172,18 +20181,18 @@
"integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig="
},
"xml2js": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
- "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
+ "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
"requires": {
"sax": ">=0.6.0",
- "xmlbuilder": "~9.0.1"
+ "xmlbuilder": "~11.0.0"
}
},
"xmlbuilder": {
- "version": "9.0.7",
- "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
- "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
},
"xmldom": {
"version": "0.1.27",
diff --git a/package.json b/package.json
index ccf59e35..ed68708b 100644
--- a/package.json
+++ b/package.json
@@ -79,6 +79,7 @@
"@types/rimraf": "2.0.3",
"@types/sharp": "0.23.1",
"@types/winston": "2.4.4",
+ "@types/xml2js": "0.4.5",
"@yaga/leaflet-ng2": "1.0.0",
"bootstrap": "4.4.1",
"chai": "4.2.0",
@@ -118,7 +119,8 @@
"ts-node": "8.5.4",
"tslint": "5.20.1",
"typescript": "3.5.3",
- "xlf-google-translate": "1.0.0-beta.15",
+ "xlf-google-translate": "1.0.0-beta.19",
+ "xml2js": "0.4.23",
"zone.js": "0.10.2"
},
"//": [
@@ -138,5 +140,10 @@
},
"engines": {
"node": ">=10.17 <13.0"
- }
+ },
+ "browserslist": [
+ "> 5%",
+ "Firefox ESR",
+ "not dead"
+ ]
}
diff --git a/src/frontend/translate/messages.en.xlf b/src/frontend/translate/messages.en.xlf
index 98313dfd..3cc453f4 100644
--- a/src/frontend/translate/messages.en.xlf
+++ b/src/frontend/translate/messages.en.xlf
@@ -588,7 +588,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 237
+ 260
Close
@@ -710,7 +710,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 196
+ 219
Save
@@ -767,7 +767,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 200
+ 223
Reset
@@ -1685,7 +1685,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 130
+ 132
Statistic:
@@ -1693,7 +1693,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 134
+ 136
Folders
@@ -1701,7 +1701,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 138
+ 140
Photos
@@ -1709,7 +1709,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 142
+ 144
Videos
@@ -1717,7 +1717,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 147
+ 149
Size
@@ -1821,7 +1821,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 114
+ 118
every
@@ -1845,7 +1845,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 49
+ 52
Job:
@@ -1853,7 +1853,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 62
+ 66
Periodicity:
@@ -1862,7 +1862,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 72
+ 76
Set the time to run the job.
@@ -1870,7 +1870,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 78
+ 82
After:
@@ -1879,7 +1879,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 89
+ 93
The job will run after that job finishes.
@@ -1887,20 +1887,38 @@
app/ui/settings/jobs/jobs.settings.component.html
- 96
+ 100
app/ui/settings/jobs/jobs.settings.component.html
- 106
+ 110
At:
+
+
+
+ app/ui/settings/jobs/jobs.settings.component.html
+ 129
+
+ Allow parallel run
+
+
+
+
+ app/ui/settings/jobs/jobs.settings.component.html
+ 144
+
+ Enables the job to start even if an other job is already running.
+
+
app/ui/settings/jobs/jobs.settings.component.html
- 175
+ 198
';' separated integers.
@@ -1909,7 +1927,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 203
+ 226
+ Add Job
@@ -1917,7 +1935,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 218
+ 241
Add new job
@@ -1926,7 +1944,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 232
+ 255
Select a job to schedule.
@@ -1935,7 +1953,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 240
+ 263
Add Job
@@ -2374,13 +2392,13 @@
Job started
-
-
+
+
src/frontend/app/ui/settings/jobs/button/job-button.settings.component.ts
1
- Job stopped
+ Stopping job
diff --git a/src/frontend/translate/messages.fr.xlf b/src/frontend/translate/messages.fr.xlf
index f8d16257..da5521a5 100644
--- a/src/frontend/translate/messages.fr.xlf
+++ b/src/frontend/translate/messages.fr.xlf
@@ -588,7 +588,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 237
+ 260
Fermer
@@ -710,7 +710,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 196
+ 219
Enregistrer
@@ -767,7 +767,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 200
+ 223
Réinitialiser
@@ -1685,7 +1685,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 130
+ 132
Statistique :
@@ -1693,7 +1693,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 134
+ 136
Dossiers
@@ -1701,7 +1701,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 138
+ 140
Photos
@@ -1709,7 +1709,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 142
+ 144
Vidéos
@@ -1717,7 +1717,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 147
+ 149
Taille
@@ -1821,7 +1821,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 114
+ 118
every
@@ -1845,7 +1845,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 49
+ 52
Job:
@@ -1853,7 +1853,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 62
+ 66
Periodicity:
@@ -1862,7 +1862,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 72
+ 76
Set the time to run the job.
@@ -1870,7 +1870,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 78
+ 82
After:
@@ -1879,7 +1879,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 89
+ 93
The job will run after that job finishes.
@@ -1887,20 +1887,38 @@
app/ui/settings/jobs/jobs.settings.component.html
- 96
+ 100
app/ui/settings/jobs/jobs.settings.component.html
- 106
+ 110
At:
+
+
+
+ app/ui/settings/jobs/jobs.settings.component.html
+ 129
+
+ Allow parallel run
+
+
+
+
+ app/ui/settings/jobs/jobs.settings.component.html
+ 144
+
+ Enables the job to start even if an other job is already running.
+
+
app/ui/settings/jobs/jobs.settings.component.html
- 175
+ 198
';' separated integers.
@@ -1909,7 +1927,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 203
+ 226
+ Add Job
@@ -1917,7 +1935,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 218
+ 241
Add new job
@@ -1926,7 +1944,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 232
+ 255
Select a job to schedule.
@@ -1935,7 +1953,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 240
+ 263
Add Job
@@ -2374,13 +2392,13 @@
Job started
-
-
+
+
src/frontend/app/ui/settings/jobs/button/job-button.settings.component.ts
1
- Job stopped
+ Stopping job
diff --git a/src/frontend/translate/messages.hu.xlf b/src/frontend/translate/messages.hu.xlf
index 93b6f769..cc9877a3 100644
--- a/src/frontend/translate/messages.hu.xlf
+++ b/src/frontend/translate/messages.hu.xlf
@@ -588,7 +588,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 237
+ 260
Bezárás
@@ -710,7 +710,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 196
+ 219
Mentés
@@ -767,7 +767,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 200
+ 223
Visszaállítás
@@ -1685,7 +1685,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 130
+ 132
Statisztika:
@@ -1693,7 +1693,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 134
+ 136
Mappák
@@ -1701,7 +1701,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 138
+ 140
Fotók
@@ -1709,7 +1709,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 142
+ 144
Videók
@@ -1717,7 +1717,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 147
+ 149
Méret
@@ -1821,7 +1821,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 114
+ 118
minden
@@ -1845,7 +1845,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 49
+ 52
Feladat:
@@ -1853,7 +1853,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 62
+ 66
Gyakoriság:
@@ -1862,7 +1862,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 72
+ 76
Állítsd be, hogy mikos fusson a feladat.
@@ -1870,7 +1870,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 78
+ 82
Ez után:
@@ -1879,7 +1879,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 89
+ 93
Ez a feladat a beállított feladat után fog futni.
@@ -1887,20 +1887,37 @@
app/ui/settings/jobs/jobs.settings.component.html
- 96
+ 100
app/ui/settings/jobs/jobs.settings.component.html
- 106
+ 110
Ekkor:
+
+
+
+ app/ui/settings/jobs/jobs.settings.component.html
+ 129
+
+ Párhuzamos futtatás
+
+
+
+
+ app/ui/settings/jobs/jobs.settings.component.html
+ 144
+
+ Akkor is elundul a feladat, ha egy másik már fut.
+
app/ui/settings/jobs/jobs.settings.component.html
- 175
+ 198
';'-vel elválaszott egész számok.
@@ -1909,7 +1926,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 203
+ 226
+ Új feladat
@@ -1917,7 +1934,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 218
+ 241
Új feladat
@@ -1926,7 +1943,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 232
+ 255
Válaszd ki az ütemezendő feladatot.
@@ -1935,7 +1952,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 240
+ 263
Feladat hozzáadása
@@ -2374,13 +2391,13 @@
Feladat elindult
-
-
+
+
src/frontend/app/ui/settings/jobs/button/job-button.settings.component.ts
1
- Feladat leállt
+ Stopping job
diff --git a/src/frontend/translate/messages.ro.xlf b/src/frontend/translate/messages.ro.xlf
index 486f7a68..b8f390bf 100644
--- a/src/frontend/translate/messages.ro.xlf
+++ b/src/frontend/translate/messages.ro.xlf
@@ -588,7 +588,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 237
+ 260
Închide
@@ -710,7 +710,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 196
+ 219
Salvare
@@ -767,7 +767,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 200
+ 223
Restabilire
@@ -1685,7 +1685,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 130
+ 132
Statistici:
@@ -1693,7 +1693,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 134
+ 136
Dosare
@@ -1701,7 +1701,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 138
+ 140
Fotografii
@@ -1709,7 +1709,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 142
+ 144
Videoclipuri
@@ -1717,7 +1717,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 147
+ 149
Dimensiuni
@@ -1821,7 +1821,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 114
+ 118
every
@@ -1845,7 +1845,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 49
+ 52
Job:
@@ -1853,7 +1853,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 62
+ 66
Periodicity:
@@ -1862,7 +1862,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 72
+ 76
Set the time to run the job.
@@ -1870,7 +1870,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 78
+ 82
After:
@@ -1879,7 +1879,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 89
+ 93
The job will run after that job finishes.
@@ -1887,20 +1887,38 @@
app/ui/settings/jobs/jobs.settings.component.html
- 96
+ 100
app/ui/settings/jobs/jobs.settings.component.html
- 106
+ 110
At:
+
+
+
+ app/ui/settings/jobs/jobs.settings.component.html
+ 129
+
+ Allow parallel run
+
+
+
+
+ app/ui/settings/jobs/jobs.settings.component.html
+ 144
+
+ Enables the job to start even if an other job is already running.
+
+
app/ui/settings/jobs/jobs.settings.component.html
- 175
+ 198
';' separated integers.
@@ -1909,7 +1927,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 203
+ 226
+ Add Job
@@ -1917,7 +1935,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 218
+ 241
Add new job
@@ -1926,7 +1944,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 232
+ 255
Select a job to schedule.
@@ -1935,7 +1953,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 240
+ 263
Add Job
@@ -2374,13 +2392,13 @@
Job started
-
-
+
+
src/frontend/app/ui/settings/jobs/button/job-button.settings.component.ts
1
- Job stopped
+ Stopping job
diff --git a/src/frontend/translate/messages.ru.xlf b/src/frontend/translate/messages.ru.xlf
index 3e522dab..87da6139 100644
--- a/src/frontend/translate/messages.ru.xlf
+++ b/src/frontend/translate/messages.ru.xlf
@@ -588,7 +588,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 237
+ 260
Закрыть
@@ -710,7 +710,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 196
+ 219
Сохранить
@@ -767,7 +767,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 200
+ 223
Сбросить
@@ -1685,7 +1685,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 130
+ 132
Статистика:
@@ -1693,7 +1693,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 134
+ 136
Папки
@@ -1701,7 +1701,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 138
+ 140
Фото
@@ -1709,7 +1709,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 142
+ 144
Видео
@@ -1717,7 +1717,7 @@
app/ui/settings/indexing/indexing.settings.component.html
- 147
+ 149
Размер
@@ -1821,7 +1821,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 114
+ 118
every
@@ -1845,7 +1845,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 49
+ 52
Job:
@@ -1853,7 +1853,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 62
+ 66
Periodicity:
@@ -1862,7 +1862,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 72
+ 76
Set the time to run the job.
@@ -1870,7 +1870,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 78
+ 82
After:
@@ -1879,7 +1879,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 89
+ 93
The job will run after that job finishes.
@@ -1887,20 +1887,38 @@
app/ui/settings/jobs/jobs.settings.component.html
- 96
+ 100
app/ui/settings/jobs/jobs.settings.component.html
- 106
+ 110
At:
+
+
+
+ app/ui/settings/jobs/jobs.settings.component.html
+ 129
+
+ Allow parallel run
+
+
+
+
+ app/ui/settings/jobs/jobs.settings.component.html
+ 144
+
+ Enables the job to start even if an other job is already running.
+
+
app/ui/settings/jobs/jobs.settings.component.html
- 175
+ 198
';' separated integers.
@@ -1909,7 +1927,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 203
+ 226
+ Add Job
@@ -1917,7 +1935,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 218
+ 241
Add new job
@@ -1926,7 +1944,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 232
+ 255
Select a job to schedule.
@@ -1935,7 +1953,7 @@
app/ui/settings/jobs/jobs.settings.component.html
- 240
+ 263
Add Job
@@ -2374,13 +2392,13 @@
Job started
-
-
+
+
src/frontend/app/ui/settings/jobs/button/job-button.settings.component.ts
1
- Job stopped
+ Stopping job