From dee2c8d23bc4c1fc83c1263cf29ea2de2b1098ec Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 25 Apr 2017 11:01:34 +0200 Subject: [PATCH 1/3] Check whether we can json decode the translations Signed-off-by: Joas Schilling --- .drone.yml | 7 +++ build/translation-checker.php | 81 +++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 build/translation-checker.php diff --git a/.drone.yml b/.drone.yml index 9b6a01bd4f094..6dccfa6d4d845 100644 --- a/.drone.yml +++ b/.drone.yml @@ -26,6 +26,13 @@ pipeline: when: matrix: TESTS: check-mergejs + translation-check: + image: nextcloudci/php7.0:php7.0-7 + commands: + - php ./build/translation-checker.php + when: + matrix: + TESTS: translation-check app-check-code: image: nextcloudci/php7.0:php7.0-7 commands: diff --git a/build/translation-checker.php b/build/translation-checker.php new file mode 100644 index 0000000000000..296a20243da0e --- /dev/null +++ b/build/translation-checker.php @@ -0,0 +1,81 @@ + + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +$directories = [ + __DIR__ . '/../core/l10n', + __DIR__ . '/../settings/l10n', + __DIR__ . '/../apps/admin_audit/l10n', + __DIR__ . '/../apps/comments/l10n', + __DIR__ . '/../apps/dav/l10n', + __DIR__ . '/../apps/encryption/l10n', + __DIR__ . '/../apps/federatedfilesharing/l10n', + __DIR__ . '/../apps/federation/l10n', + __DIR__ . '/../apps/files/l10n', + __DIR__ . '/../apps/files_external/l10n', + __DIR__ . '/../apps/files_sharing/l10n', + __DIR__ . '/../apps/files_trashbin/l10n', + __DIR__ . '/../apps/files_versions/l10n', + __DIR__ . '/../apps/lookup_server_connector/l10n', + __DIR__ . '/../apps/provisioning_api/l10n', + __DIR__ . '/../apps/sharebymail/l10n', + __DIR__ . '/../apps/systemtags/l10n', + __DIR__ . '/../apps/testing/l10n', + __DIR__ . '/../apps/theming/l10n', + __DIR__ . '/../apps/twofactor_backupcodes/l10n', + __DIR__ . '/../apps/updatenotification/l10n', + __DIR__ . '/../apps/user_ldap/l10n', + __DIR__ . '/../apps/workflowengine/l10n', +]; + +$errors = []; +foreach ($directories as $dir) { + if (!file_exists($dir)) { + continue; + } + $directory = new \DirectoryIterator($dir); + + foreach ($directory as $file) { + if ($file->getExtension() !== 'json') { + continue; + } + + $content = file_get_contents($file->getPathname()); + $json = json_decode($content, true); + + if (json_last_error() !== JSON_ERROR_NONE) { + echo '[Error] Could not parse: ' . $file->getPathname() . "\n"; + echo ' ' . json_last_error_msg() . "\n"; + $errors[] = $file->getPathname() . "\n" . ' ' . json_last_error_msg() . "\n"; + } else { + echo '[OK] ' . $file->getPathname() . "\n"; + } + } +} + +echo "\n\n"; +if (count($errors) > 0) { + echo sprintf('ERROR: There were %d errors:', count($errors)) . "\n"; + echo implode("\n", $errors); + exit(1); +} + +echo 'OK: all files parse'; +exit(0); From 5be1010d454f258f2a1529f3827c1add248866cf Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 25 Apr 2017 11:06:27 +0200 Subject: [PATCH 2/3] Fix invalid character Signed-off-by: Joas Schilling --- apps/comments/l10n/zh_CN.js | 2 +- apps/comments/l10n/zh_CN.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/comments/l10n/zh_CN.js b/apps/comments/l10n/zh_CN.js index d67e1ebdfc738..34e57061d2e1f 100644 --- a/apps/comments/l10n/zh_CN.js +++ b/apps/comments/l10n/zh_CN.js @@ -14,7 +14,7 @@ OC.L10N.register( "Save" : "保存", "Allowed characters {count} of {max}" : "当前字数: {count},最大允许:{max}", "Error occurred while retrieving comment with id {id}" : "检索 id 为 {id} 的评论出错", - "Error occurred while updating comment with id {id}" : "更新 id 为 {id} 的评论出错", + "Error occurred while updating comment with id {id}" : "更新 id 为 {id} 的评论出错", "Error occurred while posting comment" : "发布评论出错", "_%n unread comment_::_%n unread comments_" : ["%n 未读评论"], "Comment" : "评论", diff --git a/apps/comments/l10n/zh_CN.json b/apps/comments/l10n/zh_CN.json index 8c9cbae140fb7..a1445eba465a9 100644 --- a/apps/comments/l10n/zh_CN.json +++ b/apps/comments/l10n/zh_CN.json @@ -12,7 +12,7 @@ "Save" : "保存", "Allowed characters {count} of {max}" : "当前字数: {count},最大允许:{max}", "Error occurred while retrieving comment with id {id}" : "检索 id 为 {id} 的评论出错", - "Error occurred while updating comment with id {id}" : "更新 id 为 {id} 的评论出错", + "Error occurred while updating comment with id {id}" : "更新 id 为 {id} 的评论出错", "Error occurred while posting comment" : "发布评论出错", "_%n unread comment_::_%n unread comments_" : ["%n 未读评论"], "Comment" : "评论", From 7ea492b69a24435c4aa62567cf31a0a246afc517 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 25 Apr 2017 14:35:51 +0200 Subject: [PATCH 3/3] Loop over the apps directory and add the task Signed-off-by: Joas Schilling --- .drone.yml | 1 + build/translation-checker.php | 34 +++++++++++----------------------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/.drone.yml b/.drone.yml index 6dccfa6d4d845..698937197787d 100644 --- a/.drone.yml +++ b/.drone.yml @@ -543,6 +543,7 @@ pipeline: matrix: include: - TESTS: signed-off-check + - TESTS: translation-check - TESTS: htaccess-checker - TESTS: nodb-codecov - TESTS: db-codecov diff --git a/build/translation-checker.php b/build/translation-checker.php index 296a20243da0e..5532fb9f65b11 100644 --- a/build/translation-checker.php +++ b/build/translation-checker.php @@ -22,29 +22,17 @@ $directories = [ __DIR__ . '/../core/l10n', __DIR__ . '/../settings/l10n', - __DIR__ . '/../apps/admin_audit/l10n', - __DIR__ . '/../apps/comments/l10n', - __DIR__ . '/../apps/dav/l10n', - __DIR__ . '/../apps/encryption/l10n', - __DIR__ . '/../apps/federatedfilesharing/l10n', - __DIR__ . '/../apps/federation/l10n', - __DIR__ . '/../apps/files/l10n', - __DIR__ . '/../apps/files_external/l10n', - __DIR__ . '/../apps/files_sharing/l10n', - __DIR__ . '/../apps/files_trashbin/l10n', - __DIR__ . '/../apps/files_versions/l10n', - __DIR__ . '/../apps/lookup_server_connector/l10n', - __DIR__ . '/../apps/provisioning_api/l10n', - __DIR__ . '/../apps/sharebymail/l10n', - __DIR__ . '/../apps/systemtags/l10n', - __DIR__ . '/../apps/testing/l10n', - __DIR__ . '/../apps/theming/l10n', - __DIR__ . '/../apps/twofactor_backupcodes/l10n', - __DIR__ . '/../apps/updatenotification/l10n', - __DIR__ . '/../apps/user_ldap/l10n', - __DIR__ . '/../apps/workflowengine/l10n', ]; +$apps = new \DirectoryIterator(__DIR__ . '/../apps'); +foreach ($apps as $app) { + if (!file_exists($app->getPathname() . '/l10n')) { + continue; + } + + $directories[] = $app->getPathname() . '/l10n'; +} + $errors = []; foreach ($directories as $dir) { if (!file_exists($dir)) { @@ -73,9 +61,9 @@ echo "\n\n"; if (count($errors) > 0) { echo sprintf('ERROR: There were %d errors:', count($errors)) . "\n"; - echo implode("\n", $errors); + echo implode("\n", $errors) . "\n"; exit(1); } -echo 'OK: all files parse'; +echo 'OK: all files parse' . "\n"; exit(0);