summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Translate/src/Validation/Validators/MediaWikiTimeListValidator.php')
-rw-r--r--Translate/src/Validation/Validators/MediaWikiTimeListValidator.php81
1 files changed, 81 insertions, 0 deletions
diff --git a/Translate/src/Validation/Validators/MediaWikiTimeListValidator.php b/Translate/src/Validation/Validators/MediaWikiTimeListValidator.php
new file mode 100644
index 00000000..fad5fd70
--- /dev/null
+++ b/Translate/src/Validation/Validators/MediaWikiTimeListValidator.php
@@ -0,0 +1,81 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * "Time list" message format validation for MediaWiki.
+ *
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2019.06
+ */
+class MediaWikiTimeListValidator implements MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+
+ $definition = $message->definition();
+ $translation = $message->translation();
+ $defArray = explode( ',', $definition );
+ $traArray = explode( ',', $translation );
+
+ $defCount = count( $defArray );
+ $traCount = count( $traArray );
+ if ( $defCount !== $traCount ) {
+ $issue = new ValidationIssue(
+ 'miscmw',
+ 'timelist-count',
+ 'translate-checks-format',
+ [
+ [
+ 'MESSAGE',
+ [
+ 'translate-checks-parametersnotequal',
+ [ 'COUNT', $traCount ],
+ [ 'COUNT', $defCount ],
+ ]
+ ]
+ ]
+ );
+ $issues->add( $issue );
+
+ return $issues;
+ }
+
+ for ( $i = 0; $i < $defCount; $i++ ) {
+ $defItems = array_map( 'trim', explode( ':', $defArray[$i] ) );
+ $traItems = array_map( 'trim', explode( ':', $traArray[$i] ) );
+
+ if ( count( $traItems ) !== 2 ) {
+ $issue = new ValidationIssue(
+ 'miscmw',
+ 'timelist-format',
+ 'translate-checks-format',
+ [ [ 'MESSAGE', [ 'translate-checks-malformed', $traArray[$i] ] ] ]
+ );
+
+ $issues->add( $issue );
+ continue;
+ }
+
+ if ( $traItems[1] !== $defItems[1] ) {
+ $issue = new ValidationIssue(
+ 'miscmw',
+ 'timelist-format-value',
+ 'translate-checks-format',
+ // FIXME: i18n missing.
+ [ "<samp><nowiki>$traItems[1] !== $defItems[1]</nowiki></samp>" ]
+ );
+
+ $issues->add( $issue );
+ }
+ }
+
+ return $issues;
+ }
+}