From d5361a015f042ea961ee9b128bf0aadd99c8bce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 13:17:42 +0100 Subject: [PATCH 01/18] Added POT file generation --- gulpfile.ts | 14 ++++++++++++ package-lock.json | 56 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +++- 3 files changed, 73 insertions(+), 1 deletion(-) diff --git a/gulpfile.ts b/gulpfile.ts index 0b13d92e..07024c2c 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -10,6 +10,7 @@ const merge = require("merge-stream"); const rename = require("gulp-rename"); const ts = require("gulp-typescript"); const uglify = require("uglify-js"); +const wpPot = require('gulp-wp-pot'); const minify = composer(uglify, console); @@ -144,3 +145,16 @@ gulp.task( "build:txt" ) ); + +gulp.task("generate-pot", function() { + return gulp + .src("src/php/**/*.php") + .pipe( + wpPot({ + bugReport: "https://github.com/skaut/crdm-modern/issues", + domain: "crdm-modern", + relativeTo: "src/php" + }) + ) + .pipe(gulp.dest("src/langs/crdm-modern.pot")); +}); diff --git a/package-lock.json b/package-lock.json index f677d5fb..a9b27046 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4383,6 +4383,29 @@ "vinyl-sourcemaps-apply": "^0.2.0" } }, + "gulp-wp-pot": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/gulp-wp-pot/-/gulp-wp-pot-2.3.6.tgz", + "integrity": "sha512-RaS7MiT8w9HdfmH8c6l7QKeeZeWDMDoyWUb//vFXGH05XY1t2w4iv22k0AIWyZ9w2ceX6W2ia3jC5hH+5wn2rA==", + "dev": true, + "requires": { + "plugin-error": "^1.0.1", + "through2": "^3.0.1", + "vinyl": "^2.2.0", + "wp-pot": "^1.7.1" + }, + "dependencies": { + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + } + } + }, "gulplog": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", @@ -5516,6 +5539,16 @@ } } }, + "matched": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/matched/-/matched-4.0.0.tgz", + "integrity": "sha512-mD08ireECeLL/CCgum8EeLx/SZiAmhbbt4FPlCZ4GG2xKBJ/yB8qn0uvuvouQzCORknElll2jSNVdtCWNQdR2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "picomatch": "^2.0.5" + } + }, "mathml-tag-names": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz", @@ -6423,6 +6456,12 @@ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", "dev": true }, + "path-sort": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-sort/-/path-sort-0.1.0.tgz", + "integrity": "sha1-ywF11Oy/paGP5nTMbXIL/hXguAU=", + "dev": true + }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -6449,6 +6488,12 @@ "through": "~2.3" } }, + "php-parser": { + "version": "3.0.0-prerelease.9", + "resolved": "https://registry.npmjs.org/php-parser/-/php-parser-3.0.0-prerelease.9.tgz", + "integrity": "sha512-QTVGKeiGZyRq7NpXMx15Dkiq9+B2KLGStck1Wrik+Hui+vb70rDBF+dY1RD6/IC8Wy/tUAhcKiCfKWVJUjymDA==", + "dev": true + }, "picomatch": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", @@ -8827,6 +8872,17 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wp-pot": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/wp-pot/-/wp-pot-1.8.0.tgz", + "integrity": "sha512-/mAX/emTaZ8IByXLVWHILzP6Epm22kk09S5vaUD20xpirqV6EzTF4Cn5JPivcbanczo6Bb98JR6B/mL8EHHQMA==", + "dev": true, + "requires": { + "matched": "^4.0.0", + "path-sort": "^0.1.0", + "php-parser": "^3.0.0-prerelease.9" + } + }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", diff --git a/package.json b/package.json index 53ab2146..7ab96a47 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,8 @@ "lint:phpcs": "vendor/bin/phpcs", "lint:phpmd": "vendor/bin/phpmd src text phpmd.xml", "disabled_lint:stylelint": "stylelint src/**/*.css", - "lint": "run-s -c lint:*" + "lint": "run-s -c lint:*", + "generate-pot": "gulp generate-pot" }, "dependencies": { "dripicons": "^2.0.0" @@ -48,6 +49,7 @@ "gulp-rename": "^2.0.0", "gulp-typescript": "^6.0.0-alpha.1", "gulp-uglify": "^3.0.2", + "gulp-wp-pot": "^2.3.6", "merge-stream": "^2.0.0", "npm-run-all": "^4.1.5", "stylelint": "^12.0.1", From 0e55830fd9b538d3fa1ba7eb71aa583b639257f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 13:38:57 +0100 Subject: [PATCH 02/18] Added gettext to POT file generation for update indempotency --- gulpfile.ts | 32 +++++++++------ package-lock.json | 100 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 120 insertions(+), 13 deletions(-) diff --git a/gulpfile.ts b/gulpfile.ts index 07024c2c..02738440 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -8,9 +8,10 @@ const concat = require("gulp-concat"); const inject = require("gulp-inject-string"); const merge = require("merge-stream"); const rename = require("gulp-rename"); +const shell = require("gulp-shell"); const ts = require("gulp-typescript"); const uglify = require("uglify-js"); -const wpPot = require('gulp-wp-pot'); +const wpPot = require("gulp-wp-pot"); const minify = composer(uglify, console); @@ -146,15 +147,20 @@ gulp.task( ) ); -gulp.task("generate-pot", function() { - return gulp - .src("src/php/**/*.php") - .pipe( - wpPot({ - bugReport: "https://github.com/skaut/crdm-modern/issues", - domain: "crdm-modern", - relativeTo: "src/php" - }) - ) - .pipe(gulp.dest("src/langs/crdm-modern.pot")); -}); +gulp.task( + "generate-pot", + gulp.series(function() { + return gulp + .src("src/php/**/*.php") + .pipe( + wpPot({ + bugReport: "https://github.com/skaut/crdm-modern/issues", + domain: "crdm-modern", + relativeTo: "src/php" + }) + ) + .pipe(gulp.dest("src/langs/crdm-modern.pot")); + }, shell.task( + "msgmerge -U src/langs/crdm-modern.pot src/langs/crdm-modern.pot" + )) +); diff --git a/package-lock.json b/package-lock.json index a9b27046..c040b63d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4328,6 +4328,81 @@ "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", "dev": true }, + "gulp-shell": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/gulp-shell/-/gulp-shell-0.8.0.tgz", + "integrity": "sha512-wHNCgmqbWkk1c6Gc2dOL5SprcoeujQdeepICwfQRo91DIylTE7a794VEE+leq3cE2YDoiS5ulvRfKVIEMazcTQ==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "fancy-log": "^1.3.3", + "lodash.template": "^4.5.0", + "plugin-error": "^1.0.1", + "through2": "^3.0.1", + "tslib": "^1.10.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + } + } + }, "gulp-typescript": { "version": "6.0.0-alpha.1", "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-6.0.0-alpha.1.tgz", @@ -5347,6 +5422,12 @@ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, "lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", @@ -5371,6 +5452,25 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, "lodash.unescape": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", diff --git a/package.json b/package.json index 7ab96a47..86980fb7 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "gulp-concat": "^2.6.1", "gulp-inject-string": "^1.1.2", "gulp-rename": "^2.0.0", + "gulp-shell": "^0.8.0", "gulp-typescript": "^6.0.0-alpha.1", "gulp-uglify": "^3.0.2", "gulp-wp-pot": "^2.3.6", From 0668f337724528456f46b9232385c66221060b44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 14:51:11 +0100 Subject: [PATCH 03/18] Added PO file synchronization --- gulpfile.ts | 6 ++++++ package.json | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gulpfile.ts b/gulpfile.ts index 02738440..781ed1dd 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -164,3 +164,9 @@ gulp.task( "msgmerge -U src/langs/crdm-modern.pot src/langs/crdm-modern.pot" )) ); + +gulp.task("update-po", function() { + return gulp + .src("src/langs/*.po", { read: false }) + .pipe(shell("msgmerge -U <%= file.path %> src/langs/crdm-modern.pot")); +}); diff --git a/package.json b/package.json index 86980fb7..f2614fbc 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,8 @@ "lint:phpmd": "vendor/bin/phpmd src text phpmd.xml", "disabled_lint:stylelint": "stylelint src/**/*.css", "lint": "run-s -c lint:*", - "generate-pot": "gulp generate-pot" + "generate-pot": "gulp generate-pot", + "update-po": "gulp update-po" }, "dependencies": { "dripicons": "^2.0.0" From 95f86885bfb4d2d93a0e0e1a6039e45ac2dbecd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 15:22:00 +0100 Subject: [PATCH 04/18] Added MO file generation --- gulpfile.ts | 8 ++ package-lock.json | 359 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +- 3 files changed, 370 insertions(+), 1 deletion(-) diff --git a/gulpfile.ts b/gulpfile.ts index 781ed1dd..3ae626d2 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -7,6 +7,7 @@ const composer = require("gulp-uglify/composer"); const concat = require("gulp-concat"); const inject = require("gulp-inject-string"); const merge = require("merge-stream"); +const potomo = require("gulp-potomo"); const rename = require("gulp-rename"); const shell = require("gulp-shell"); const ts = require("gulp-typescript"); @@ -170,3 +171,10 @@ gulp.task("update-po", function() { .src("src/langs/*.po", { read: false }) .pipe(shell("msgmerge -U <%= file.path %> src/langs/crdm-modern.pot")); }); + +gulp.task("generate-mo", function() { + return gulp + .src("src/langs/*.po") + .pipe(potomo()) + .pipe(gulp.dest("dist/langs/")); +}); diff --git a/package-lock.json b/package-lock.json index c040b63d..483d1309 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1239,6 +1239,12 @@ } } }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", @@ -1961,6 +1967,12 @@ "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", "dev": true }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -3229,6 +3241,19 @@ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", "dev": true }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, "fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -4322,6 +4347,62 @@ "plugin-error": "^1.0.1" } }, + "gulp-potomo": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gulp-potomo/-/gulp-potomo-1.1.0.tgz", + "integrity": "sha512-lEsFoqZkZvCoWq1vk2ykWhjejbtA5hE15asLAUeBjiL2azpqBbe2zZJW9SfPkV5+6Y45K7SagcMw92PYqgF6mQ==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "fs-extra": "^0.30.0", + "gulp-util": "^3.0.7", + "ramda": "^0.21.0", + "shelljs": "^0.6.0", + "through2": "^2.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "gulp-rename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", @@ -4458,6 +4539,142 @@ "vinyl-sourcemaps-apply": "^0.2.0" } }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, "gulp-wp-pot": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/gulp-wp-pot/-/gulp-wp-pot-2.3.6.tgz", @@ -4499,6 +4716,23 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -5145,6 +5379,15 @@ } } }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "jsonfilter": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/jsonfilter/-/jsonfilter-1.1.2.tgz", @@ -5227,6 +5470,15 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, "known-css-properties": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.17.0.tgz", @@ -5422,12 +5674,81 @@ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", "dev": true }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "^3.0.0" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, "lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", @@ -5446,12 +5767,29 @@ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, "lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -5843,6 +6181,15 @@ "minimatch": "^3.0.0" } }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } + }, "mute-stdout": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", @@ -6885,6 +7232,12 @@ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", "dev": true }, + "ramda": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz", + "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=", + "dev": true + }, "react-is": { "version": "16.12.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", @@ -7425,6 +7778,12 @@ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", "dev": true }, + "shelljs": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", + "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=", + "dev": true + }, "side-channel": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", diff --git a/package.json b/package.json index f2614fbc..c5cce100 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,8 @@ "disabled_lint:stylelint": "stylelint src/**/*.css", "lint": "run-s -c lint:*", "generate-pot": "gulp generate-pot", - "update-po": "gulp update-po" + "update-po": "gulp update-po", + "generate-mo": "gulp generate-mo" }, "dependencies": { "dripicons": "^2.0.0" @@ -47,6 +48,7 @@ "gulp-clean-css": "^4.2.0", "gulp-concat": "^2.6.1", "gulp-inject-string": "^1.1.2", + "gulp-potomo": "^1.1.0", "gulp-rename": "^2.0.0", "gulp-shell": "^0.8.0", "gulp-typescript": "^6.0.0-alpha.1", From ce69c98ec1907096cae296ae52072099a29e15a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 15:24:56 +0100 Subject: [PATCH 05/18] Added mo file generation to build step --- gulpfile.ts | 15 ++++++++------- package.json | 3 +-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/gulpfile.ts b/gulpfile.ts index 3ae626d2..05522aae 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -91,6 +91,13 @@ gulp.task("build:js", function() { ); }); +gulp.task("build:mo", function() { + return gulp + .src("src/langs/*.po") + .pipe(potomo()) + .pipe(gulp.dest("dist/langs/")); +}); + gulp.task("build:php:root", function() { return gulp.src("src/php/*.php").pipe(gulp.dest("dist/")); }); @@ -142,6 +149,7 @@ gulp.task( "build:deps", "build:jpg", "build:js", + "build:mo", "build:php", "build:png", "build:txt" @@ -171,10 +179,3 @@ gulp.task("update-po", function() { .src("src/langs/*.po", { read: false }) .pipe(shell("msgmerge -U <%= file.path %> src/langs/crdm-modern.pot")); }); - -gulp.task("generate-mo", function() { - return gulp - .src("src/langs/*.po") - .pipe(potomo()) - .pipe(gulp.dest("dist/langs/")); -}); diff --git a/package.json b/package.json index c5cce100..13cd7aa9 100644 --- a/package.json +++ b/package.json @@ -31,8 +31,7 @@ "disabled_lint:stylelint": "stylelint src/**/*.css", "lint": "run-s -c lint:*", "generate-pot": "gulp generate-pot", - "update-po": "gulp update-po", - "generate-mo": "gulp generate-mo" + "update-po": "gulp update-po" }, "dependencies": { "dripicons": "^2.0.0" From 3ced69274582f708b841c3ff3f0ab932e34a1d50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 15:51:13 +0100 Subject: [PATCH 06/18] Added update-translations task --- gulpfile.ts | 12 ++++++++++-- package.json | 3 +-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/gulpfile.ts b/gulpfile.ts index 05522aae..bd605c75 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -157,7 +157,7 @@ gulp.task( ); gulp.task( - "generate-pot", + "update-translations:generate-pot", gulp.series(function() { return gulp .src("src/php/**/*.php") @@ -174,8 +174,16 @@ gulp.task( )) ); -gulp.task("update-po", function() { +gulp.task("update-translations:update-po", function() { return gulp .src("src/langs/*.po", { read: false }) .pipe(shell("msgmerge -U <%= file.path %> src/langs/crdm-modern.pot")); }); + +gulp.task( + "update-translations", + gulp.series( + "update-translations:generate-pot", + "update-translations:update-po" + ) +); diff --git a/package.json b/package.json index 13cd7aa9..43325993 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,7 @@ "lint:phpmd": "vendor/bin/phpmd src text phpmd.xml", "disabled_lint:stylelint": "stylelint src/**/*.css", "lint": "run-s -c lint:*", - "generate-pot": "gulp generate-pot", - "update-po": "gulp update-po" + "update-translations": "gulp update-translations" }, "dependencies": { "dripicons": "^2.0.0" From c9835278bbb83e12234b7a27143a129571483358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 16:02:30 +0100 Subject: [PATCH 07/18] Added translation sync check to CI --- .circleci/config.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 71bc1333..46b07a1c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,6 +6,7 @@ workflows: - lint: requires: - build + - translation-sync - package: filters: branches: @@ -91,6 +92,29 @@ jobs: - run: name: "Lint" command: npm run lint + + translation-sync: + docker: + - image: circleci/node:latest + steps: + - checkout + + - restore_cache: *restore_npm + - run: *install_npm + - save_cache: *save_npm + + - run: + name: "Install gettext" + command: | + sudo apt-get update + sudo apt-get install gettext + - run: + name: "Update translations" + command: npm run update-translations + - run: + name: Check for clean repo + command: [ -z "$(git status --porcelain)" ] || (c=$?; git status; (exit $c)) + package: docker: - image: circleci/golang:latest From 26c184209dc7140ad94f61e04e5dd3d554436b7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 16:04:44 +0100 Subject: [PATCH 08/18] CI: command format fix --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 46b07a1c..1b4b6580 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -113,7 +113,8 @@ jobs: command: npm run update-translations - run: name: Check for clean repo - command: [ -z "$(git status --porcelain)" ] || (c=$?; git status; (exit $c)) + command: | + [ -z "$(git status --porcelain)" ] || (c=$?; git status; (exit $c)) package: docker: From dcf14576401149df0db0242bce68880bf853d2a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 16:07:07 +0100 Subject: [PATCH 09/18] Added POT file --- src/langs/crdm-modern.pot | 156 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 src/langs/crdm-modern.pot diff --git a/src/langs/crdm-modern.pot b/src/langs/crdm-modern.pot new file mode 100644 index 00000000..4d0c4b2a --- /dev/null +++ b/src/langs/crdm-modern.pot @@ -0,0 +1,156 @@ +# Copyright (C) 2020 crdm-modern +# This file is distributed under the same license as the crdm-modern package. +msgid "" +msgstr "" +"Project-Id-Version: crdm-modern\n" +"Report-Msgid-Bugs-To: https://github.com/skaut/crdm-modern/issues\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Basepath: ..\n" +"X-Poedit-KeywordsList: __;_e;_ex:1,2c;_n:1,2;_n_noop:1,2;_nx:1,2,4c;" +"_nx_noop:1,2,3c;_x:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;" +"esc_html_e;esc_html_x:1,2c\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: *.js\n" +"X-Poedit-SourceCharset: UTF-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: functions.php:72 +msgid "CRDM - Modern theme requires at least WordPress 5.0" +msgstr "" + +#: functions.php:83 +msgid "CRDM - Modern theme requires at least PHP 7.0" +msgstr "" + +#: functions.php:93 +msgid "CRDM - Modern theme requires GeneratePress Premium" +msgstr "" + +#. translators: %s: Theme name. +#: admin/update.php:20 +msgid "The theme %s is not available for updating." +msgstr "" + +#. translators: %s: Theme name. +#: admin/update.php:22 +msgid "The GitHub API request for updates for the theme %s has failed." +msgstr "" + +#: admin/update.php:23 +msgid "Error message:" +msgstr "" + +#. translators: %s: Theme name. +#: admin/update.php:25 +msgid "The GitHub API response for the theme %s is invalid." +msgstr "" + +#. translators: %s: Theme name. +#: admin/update.php:27 +msgid "The latest version of the theme %s does not contain an update zip file." +msgstr "" + +#: frontend/class-title-widget.php:61 +msgid "Title Widget" +msgstr "" + +#: frontend/class-title-widget.php:61 +msgid "A widget containing the site logo, title and tagline." +msgstr "" + +#: admin/customizer/class-preset-registry.php:80 +msgid "Blue" +msgstr "" + +#: admin/customizer/class-preset-registry.php:158, +#: admin/customizer/class-preset-registry.php:266 +msgid "Read more" +msgstr "" + +#: admin/customizer/class-preset-registry.php:188 +msgid "Green" +msgstr "" + +#: admin/customizer/colors.php:46 +msgid "Widget Separator" +msgstr "" + +#: admin/customizer/colors.php:70 +msgid "Excerpt Border" +msgstr "" + +#: admin/customizer/colors.php:94 +msgid "Excerpt Background Hover" +msgstr "" + +#: admin/customizer/colors.php:118 +msgid "Excerpt Text Hover" +msgstr "" + +#: admin/customizer/colors.php:142 +msgid "\"Read more\" Link" +msgstr "" + +#: admin/customizer/colors.php:165 +msgid "\"Read more\" Link Hover" +msgstr "" + +#: admin/customizer/layout.php:46 +msgid "Navigation spacing" +msgstr "" + +#: admin/customizer/layout.php:78 +msgid "Navigation shadow" +msgstr "" + +#: admin/customizer/layout.php:100 +msgid "Sidebar widget separator width" +msgstr "" + +#: admin/customizer/layout.php:134 +msgid "Sidebar widget separator spacing" +msgstr "" + +#: admin/customizer/layout.php:160 +msgid "Featured Posts" +msgstr "" + +#: admin/customizer/layout.php:179 +msgid "Number of featured posts" +msgstr "" + +#: admin/customizer/preset.php:33 +msgid "Preset" +msgstr "" + +#: admin/customizer/site-identity.php:45 +msgid "Header Image" +msgstr "" + +#: admin/customizer/site-identity.php:67 +msgid "Header Image Height" +msgstr "" + +#: admin/customizer/site-identity.php:100 +msgid "Header Image Top Position" +msgstr "" + +#: admin/customizer/site-identity.php:133 +msgid "Header Image Right Position" +msgstr "" + +#: admin/customizer/site-identity.php:165 +msgid "Minimum Width to Show Header Image" +msgstr "" + +#: admin/customizer/controls/class-preset-customize-control.php:126 +msgid "" +"Applying the preset overrides a lot of the theme options. You can always go " +"back by closing the customizer before saving." +msgstr "" + +#: admin/customizer/controls/class-preset-customize-control.php:129 +msgid "Apply" +msgstr "" From 993dc73f5b63a00aeeea4f5e6d62b13590e9d201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 16:45:25 +0100 Subject: [PATCH 10/18] Added Czech translation --- src/langs/crdm-modern-cs_CZ.po | 158 +++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 src/langs/crdm-modern-cs_CZ.po diff --git a/src/langs/crdm-modern-cs_CZ.po b/src/langs/crdm-modern-cs_CZ.po new file mode 100644 index 00000000..0cff0a80 --- /dev/null +++ b/src/langs/crdm-modern-cs_CZ.po @@ -0,0 +1,158 @@ +# Copyright (C) 2020 crdm-modern +# This file is distributed under the same license as the crdm-modern package. +msgid "" +msgstr "" +"Project-Id-Version: crdm-modern\n" +"Report-Msgid-Bugs-To: https://github.com/skaut/crdm-modern/issues\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Basepath: ..\n" +"X-Poedit-KeywordsList: __;_e;_ex:1,2c;_n:1,2;_n_noop:1,2;_nx:1,2,4c;" +"_nx_noop:1,2,3c;_x:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;" +"esc_html_e;esc_html_x:1,2c\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: *.js\n" +"X-Poedit-SourceCharset: UTF-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: functions.php:72 +msgid "CRDM - Modern theme requires at least WordPress 5.0" +msgstr "Šablona CRDM - Modern vyžaduje alespoň WordPress 5.0" + +#: functions.php:83 +msgid "CRDM - Modern theme requires at least PHP 7.0" +msgstr "Šablona CRDM - Modern vyžaduje alespoň PHP 7.0" + +#: functions.php:93 +msgid "CRDM - Modern theme requires GeneratePress Premium" +msgstr "Šablona CRDM - Modern vyžaduje premium verzi GeneratePress" + +#. translators: %s: Theme name. +#: admin/update.php:20 +msgid "The theme %s is not available for updating." +msgstr "Šablona %s není dostupná k aktualizaci" + +#. translators: %s: Theme name. +#: admin/update.php:22 +msgid "The GitHub API request for updates for the theme %s has failed." +msgstr "Požadavek na GitHub API pro aktualizaci šablony %s selhal." + +#: admin/update.php:23 +msgid "Error message:" +msgstr "Chybová hláška:" + +#. translators: %s: Theme name. +#: admin/update.php:25 +msgid "The GitHub API response for the theme %s is invalid." +msgstr "Odpověď GitHub API pro aktualizaci šablony %s je neplatná." + +#. translators: %s: Theme name. +#: admin/update.php:27 +msgid "The latest version of the theme %s does not contain an update zip file." +msgstr "Nejnovější verze šablony %s neobsahuje soubor zip s aktualizací." + +#: frontend/class-title-widget.php:61 +msgid "Title Widget" +msgstr "Widget názvu webu" + +#: frontend/class-title-widget.php:61 +msgid "A widget containing the site logo, title and tagline." +msgstr "Widget obsahující logo, název a popis webu." + +#: admin/customizer/class-preset-registry.php:80 +msgid "Blue" +msgstr "Modrá" + +#: admin/customizer/class-preset-registry.php:158, +#: admin/customizer/class-preset-registry.php:266 +msgid "Read more" +msgstr "Číst více" + +#: admin/customizer/class-preset-registry.php:188 +msgid "Green" +msgstr "Zelená" + +#: admin/customizer/colors.php:46 +msgid "Widget Separator" +msgstr "Oddělovač widgetů" + +#: admin/customizer/colors.php:70 +msgid "Excerpt Border" +msgstr "Rámeček úryvku" + +#: admin/customizer/colors.php:94 +msgid "Excerpt Background Hover" +msgstr "Pozadí úryvku při přejetí myší" + +#: admin/customizer/colors.php:118 +msgid "Excerpt Text Hover" +msgstr "Text úryvku při přejetí myší" + +#: admin/customizer/colors.php:142 +msgid "\"Read more\" Link" +msgstr "Odkaz \"Číst více\"" + +#: admin/customizer/colors.php:165 +msgid "\"Read more\" Link Hover" +msgstr "Odkaz \"Číst více\" při přejetí myší" + +#: admin/customizer/layout.php:46 +msgid "Navigation spacing" +msgstr "Rozestupy navigace" + +#: admin/customizer/layout.php:78 +msgid "Navigation shadow" +msgstr "Stín navigace" + +#: admin/customizer/layout.php:100 +msgid "Sidebar widget separator width" +msgstr "Šířka oddělovače widgetů v postranním panelu" + +#: admin/customizer/layout.php:134 +msgid "Sidebar widget separator spacing" +msgstr "Rozestup oddělovače widgetů v postranním panelu" + +#: admin/customizer/layout.php:160 +msgid "Featured Posts" +msgstr "Zvýrazněné příspěvky" + +#: admin/customizer/layout.php:179 +msgid "Number of featured posts" +msgstr "Počet zvýrazněných příspěvků" + +#: admin/customizer/preset.php:33 +msgid "Preset" +msgstr "Předvolby šablony" + +#: admin/customizer/site-identity.php:45 +msgid "Header Image" +msgstr "Obrázek v záhlaví" + +#: admin/customizer/site-identity.php:67 +msgid "Header Image Height" +msgstr "Výška obrázku v záhlaví" + +#: admin/customizer/site-identity.php:100 +msgid "Header Image Top Position" +msgstr "Odsazení obrázku v záhlaví zeshora" + +#: admin/customizer/site-identity.php:133 +msgid "Header Image Right Position" +msgstr "Odsazení obrázku v záhlaví zprava" + +#: admin/customizer/site-identity.php:165 +msgid "Minimum Width to Show Header Image" +msgstr "Minimální šířka pro zobrazení obrázku v záhlaví" + +#: admin/customizer/controls/class-preset-customize-control.php:126 +msgid "" +"Applying the preset overrides a lot of the theme options. You can always go " +"back by closing the customizer before saving." +msgstr "" +"Požitím předvolby se změní velké množství nastavení šablony. Vždy se můžete " +"vrátit zpět zavřením přizpůsobování webu před uložením nového nastavení." + +#: admin/customizer/controls/class-preset-customize-control.php:129 +msgid "Apply" +msgstr "Použít" From 48bfb3df305ffd07d23ff7b884d27daca7beaeb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 16:48:40 +0100 Subject: [PATCH 11/18] CI: Moved gettext to build --- .circleci/config.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1b4b6580..c1eeeee7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -60,6 +60,11 @@ jobs: - run: *install_npm - save_cache: *save_npm + - run: + name: "Install gettext" + command: | + sudo apt-get update + sudo apt-get install gettext - run: name: "Build" command: npm run build @@ -103,11 +108,6 @@ jobs: - run: *install_npm - save_cache: *save_npm - - run: - name: "Install gettext" - command: | - sudo apt-get update - sudo apt-get install gettext - run: name: "Update translations" command: npm run update-translations From 2493f23443c14006b8224165e2a9f43064fed0d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Tue, 10 Mar 2020 16:50:14 +0100 Subject: [PATCH 12/18] CI: gettext both in build & translation-sync --- .circleci/config.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index c1eeeee7..ce3306af 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -108,6 +108,11 @@ jobs: - run: *install_npm - save_cache: *save_npm + - run: + name: "Install gettext" + command: | + sudo apt-get update + sudo apt-get install gettext - run: name: "Update translations" command: npm run update-translations From eb51835485885ce2705f534c92c8aafc61a0306a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 11 Mar 2020 18:51:08 +0100 Subject: [PATCH 13/18] Added loading of translations --- gulpfile.ts | 2 +- src/php/functions.php | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/gulpfile.ts b/gulpfile.ts index bd605c75..5d1a22d1 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -94,7 +94,7 @@ gulp.task("build:js", function() { gulp.task("build:mo", function() { return gulp .src("src/langs/*.po") - .pipe(potomo()) + .pipe(potomo({verbose: false})) .pipe(gulp.dest("dist/langs/")); }); diff --git a/src/php/functions.php b/src/php/functions.php index 3bd34466..d2abf916 100644 --- a/src/php/functions.php +++ b/src/php/functions.php @@ -23,6 +23,7 @@ */ function init() { add_action( 'after_switch_theme', '\\CrdmModern\\activate' ); + add_action( 'after_setup_theme', '\\CrdmModern\\internationalize' ); Admin\Customizer\register(); Admin\Update\register(); Frontend\Blog\register(); @@ -31,6 +32,11 @@ function init() { Frontend\Widget_Icons\register(); } +function internationalize() { + $locale = apply_filters( 'theme_locale', determine_locale(), 'crdm-modern' ); + load_textdomain( 'crdm-modern', get_stylesheet_directory() . '/langs/crdm-modern-' . $locale . '.mo' ); +} + /** * Theme activation function * From b397aff7a73a48f11593856985d4af7100857e93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 11 Mar 2020 18:57:14 +0100 Subject: [PATCH 14/18] Loading translations sooner to fix updater --- src/php/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/php/functions.php b/src/php/functions.php index d2abf916..c8a02dc5 100644 --- a/src/php/functions.php +++ b/src/php/functions.php @@ -23,7 +23,7 @@ */ function init() { add_action( 'after_switch_theme', '\\CrdmModern\\activate' ); - add_action( 'after_setup_theme', '\\CrdmModern\\internationalize' ); + internationalize(); Admin\Customizer\register(); Admin\Update\register(); Frontend\Blog\register(); From 16a3379c99c4ef7856ee0a0be358eecac80aeac4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 11 Mar 2020 18:59:21 +0100 Subject: [PATCH 15/18] Translation sync --- src/langs/crdm-modern-cs_CZ.po | 6 +++--- src/langs/crdm-modern.pot | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/langs/crdm-modern-cs_CZ.po b/src/langs/crdm-modern-cs_CZ.po index 0cff0a80..60983327 100644 --- a/src/langs/crdm-modern-cs_CZ.po +++ b/src/langs/crdm-modern-cs_CZ.po @@ -16,15 +16,15 @@ msgstr "" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: functions.php:72 +#: functions.php:78 msgid "CRDM - Modern theme requires at least WordPress 5.0" msgstr "Šablona CRDM - Modern vyžaduje alespoň WordPress 5.0" -#: functions.php:83 +#: functions.php:89 msgid "CRDM - Modern theme requires at least PHP 7.0" msgstr "Šablona CRDM - Modern vyžaduje alespoň PHP 7.0" -#: functions.php:93 +#: functions.php:99 msgid "CRDM - Modern theme requires GeneratePress Premium" msgstr "Šablona CRDM - Modern vyžaduje premium verzi GeneratePress" diff --git a/src/langs/crdm-modern.pot b/src/langs/crdm-modern.pot index 4d0c4b2a..0fce90d8 100644 --- a/src/langs/crdm-modern.pot +++ b/src/langs/crdm-modern.pot @@ -16,15 +16,15 @@ msgstr "" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: functions.php:72 +#: functions.php:78 msgid "CRDM - Modern theme requires at least WordPress 5.0" msgstr "" -#: functions.php:83 +#: functions.php:89 msgid "CRDM - Modern theme requires at least PHP 7.0" msgstr "" -#: functions.php:93 +#: functions.php:99 msgid "CRDM - Modern theme requires GeneratePress Premium" msgstr "" From 9ac458b8cde8ff1b2511995e48400a3a69743f06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 11 Mar 2020 19:04:50 +0100 Subject: [PATCH 16/18] Fixed PHPCS & eslint issues --- gulpfile.ts | 2 +- src/php/frontend/blog.php | 4 ++-- src/php/functions.php | 11 ++++++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/gulpfile.ts b/gulpfile.ts index 5d1a22d1..19bb5e9c 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -94,7 +94,7 @@ gulp.task("build:js", function() { gulp.task("build:mo", function() { return gulp .src("src/langs/*.po") - .pipe(potomo({verbose: false})) + .pipe(potomo({ verbose: false })) .pipe(gulp.dest("dist/langs/")); }); diff --git a/src/php/frontend/blog.php b/src/php/frontend/blog.php index a6eccfda..4d02708b 100644 --- a/src/php/frontend/blog.php +++ b/src/php/frontend/blog.php @@ -162,11 +162,11 @@ function featured_image() { // TODO Dynamically select the best size depending on whether it is in columns. $post_ID = get_the_ID(); return '
' . - apply_filters( 'generate_inside_featured_image_output', '' ) //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound + apply_filters( 'generate_inside_featured_image_output', '' ) // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound . '' . get_the_post_thumbnail( $post_ID, - apply_filters( 'generate_page_header_default_size', 'full' ), //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound + apply_filters( 'generate_page_header_default_size', 'full' ), // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound array( 'itemprop' => 'image', ) diff --git a/src/php/functions.php b/src/php/functions.php index c8a02dc5..4e3e937f 100644 --- a/src/php/functions.php +++ b/src/php/functions.php @@ -23,7 +23,7 @@ */ function init() { add_action( 'after_switch_theme', '\\CrdmModern\\activate' ); - internationalize(); + localize(); Admin\Customizer\register(); Admin\Update\register(); Frontend\Blog\register(); @@ -32,8 +32,13 @@ function init() { Frontend\Widget_Icons\register(); } -function internationalize() { - $locale = apply_filters( 'theme_locale', determine_locale(), 'crdm-modern' ); +/** + * Loads localization files. + * + * @return void + */ +function localize() { + $locale = apply_filters( 'theme_locale', determine_locale(), 'crdm-modern' ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound load_textdomain( 'crdm-modern', get_stylesheet_directory() . '/langs/crdm-modern-' . $locale . '.mo' ); } From d053aed337188bc75abdda2ad13288062c2e2bc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 11 Mar 2020 19:08:27 +0100 Subject: [PATCH 17/18] langs -> languages --- gulpfile.ts | 12 ++++++------ src/{langs => languages}/crdm-modern-cs_CZ.po | 6 +++--- src/{langs => languages}/crdm-modern.pot | 6 +++--- src/php/functions.php | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) rename src/{langs => languages}/crdm-modern-cs_CZ.po (98%) rename src/{langs => languages}/crdm-modern.pot (98%) diff --git a/gulpfile.ts b/gulpfile.ts index 19bb5e9c..134707fc 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -93,9 +93,9 @@ gulp.task("build:js", function() { gulp.task("build:mo", function() { return gulp - .src("src/langs/*.po") + .src("src/languages/*.po") .pipe(potomo({ verbose: false })) - .pipe(gulp.dest("dist/langs/")); + .pipe(gulp.dest("dist/languages/")); }); gulp.task("build:php:root", function() { @@ -168,16 +168,16 @@ gulp.task( relativeTo: "src/php" }) ) - .pipe(gulp.dest("src/langs/crdm-modern.pot")); + .pipe(gulp.dest("src/languages/crdm-modern.pot")); }, shell.task( - "msgmerge -U src/langs/crdm-modern.pot src/langs/crdm-modern.pot" + "msgmerge -U src/languages/crdm-modern.pot src/languages/crdm-modern.pot" )) ); gulp.task("update-translations:update-po", function() { return gulp - .src("src/langs/*.po", { read: false }) - .pipe(shell("msgmerge -U <%= file.path %> src/langs/crdm-modern.pot")); + .src("src/languages/*.po", { read: false }) + .pipe(shell("msgmerge -U <%= file.path %> src/languages/crdm-modern.pot")); }); gulp.task( diff --git a/src/langs/crdm-modern-cs_CZ.po b/src/languages/crdm-modern-cs_CZ.po similarity index 98% rename from src/langs/crdm-modern-cs_CZ.po rename to src/languages/crdm-modern-cs_CZ.po index 60983327..7e9f9980 100644 --- a/src/langs/crdm-modern-cs_CZ.po +++ b/src/languages/crdm-modern-cs_CZ.po @@ -16,15 +16,15 @@ msgstr "" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: functions.php:78 +#: functions.php:83 msgid "CRDM - Modern theme requires at least WordPress 5.0" msgstr "Šablona CRDM - Modern vyžaduje alespoň WordPress 5.0" -#: functions.php:89 +#: functions.php:94 msgid "CRDM - Modern theme requires at least PHP 7.0" msgstr "Šablona CRDM - Modern vyžaduje alespoň PHP 7.0" -#: functions.php:99 +#: functions.php:104 msgid "CRDM - Modern theme requires GeneratePress Premium" msgstr "Šablona CRDM - Modern vyžaduje premium verzi GeneratePress" diff --git a/src/langs/crdm-modern.pot b/src/languages/crdm-modern.pot similarity index 98% rename from src/langs/crdm-modern.pot rename to src/languages/crdm-modern.pot index 0fce90d8..31b95429 100644 --- a/src/langs/crdm-modern.pot +++ b/src/languages/crdm-modern.pot @@ -16,15 +16,15 @@ msgstr "" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: functions.php:78 +#: functions.php:83 msgid "CRDM - Modern theme requires at least WordPress 5.0" msgstr "" -#: functions.php:89 +#: functions.php:94 msgid "CRDM - Modern theme requires at least PHP 7.0" msgstr "" -#: functions.php:99 +#: functions.php:104 msgid "CRDM - Modern theme requires GeneratePress Premium" msgstr "" diff --git a/src/php/functions.php b/src/php/functions.php index 4e3e937f..9ec4b07b 100644 --- a/src/php/functions.php +++ b/src/php/functions.php @@ -39,7 +39,7 @@ function init() { */ function localize() { $locale = apply_filters( 'theme_locale', determine_locale(), 'crdm-modern' ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound - load_textdomain( 'crdm-modern', get_stylesheet_directory() . '/langs/crdm-modern-' . $locale . '.mo' ); + load_textdomain( 'crdm-modern', get_stylesheet_directory() . '/languages/crdm-modern-' . $locale . '.mo' ); } /** From 5aac530ee311609e817c08765b374093d48c487e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Wed, 11 Mar 2020 19:17:54 +0100 Subject: [PATCH 18/18] Composer update --- composer.lock | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/composer.lock b/composer.lock index d555c7eb..e27ec397 100644 --- a/composer.lock +++ b/composer.lock @@ -114,20 +114,20 @@ }, { "name": "felixfbecker/advanced-json-rpc", - "version": "v3.1.0", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "a407a6cb0325cd489c6dff57afcba6baeccc0483" + "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/a407a6cb0325cd489c6dff57afcba6baeccc0483", - "reference": "a407a6cb0325cd489c6dff57afcba6baeccc0483", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/0ed363f8de17d284d479ec813c9ad3f6834b5c40", + "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40", "shasum": "" }, "require": { - "netresearch/jsonmapper": "^1.0", + "netresearch/jsonmapper": "^1.0 || ^2.0", "php": ">=7.0", "phpdocumentor/reflection-docblock": "^4.0.0 || ^5.0.0" }, @@ -151,7 +151,7 @@ } ], "description": "A more advanced JSONRPC implementation", - "time": "2020-02-11T20:48:40+00:00" + "time": "2020-03-11T15:21:41+00:00" }, { "name": "microsoft/tolerant-php-parser", @@ -899,16 +899,16 @@ }, { "name": "skaut/phan-wordpress-stubs", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/skaut/phan-wordpress-stubs.git", - "reference": "1db4b1b63c8bde518549903a5cb85ff6ea702ce3" + "reference": "9257ab1fc489eb0362ae2ab0fbb52b2caa22153f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/skaut/phan-wordpress-stubs/zipball/1db4b1b63c8bde518549903a5cb85ff6ea702ce3", - "reference": "1db4b1b63c8bde518549903a5cb85ff6ea702ce3", + "url": "https://api.github.com/repos/skaut/phan-wordpress-stubs/zipball/9257ab1fc489eb0362ae2ab0fbb52b2caa22153f", + "reference": "9257ab1fc489eb0362ae2ab0fbb52b2caa22153f", "shasum": "" }, "require": { @@ -944,7 +944,7 @@ "wordpress plugin", "wordpress theme" ], - "time": "2020-03-09T14:12:51+00:00" + "time": "2020-03-11T18:14:43+00:00" }, { "name": "squizlabs/php_codesniffer",