Translate extension for MediaWiki
 
Loading...
Searching...
No Matches
MessageTable.php
1<?php
2declare( strict_types = 1 );
3
4namespace MediaWiki\Extension\Translate\TranslatorInterface;
5
6use MediaWiki\Context\ContextSource;
7use MediaWiki\Context\IContextSource;
9use MediaWiki\Html\Html;
10use MediaWiki\MediaWikiServices;
11use MessageGroup;
12
18class MessageTable extends ContextSource {
19
20 protected string $language;
21
22 public function __construct(
23 IContextSource $context,
24 private readonly MessageGroup $group,
25 string $language,
26 ) {
27 $this->setContext( $context );
28 if ( MediaWikiServices::getInstance()->getLanguageNameUtils()->isKnownLanguageTag( $language ) ) {
29 $this->language = $language;
30 } else {
31 $this->language = $context->getLanguage()->getCode();
32 }
33 }
34
35 public function fullTable(): string {
36 $modules = [];
37 Services::getInstance()->getHookRunner()->onTranslateBeforeAddModules( $modules );
38 $this->getOutput()->addModules( $modules );
39
40 $languageFactory = MediaWikiServices::getInstance()->getLanguageFactory();
41 $sourceLang = $languageFactory->getLanguage( $this->group->getSourceLanguage() );
42 $targetLang = $languageFactory->getLanguage( $this->language );
43 $batchSize = 100;
44
45 $list = Html::element( 'div', [
46 'class' => 'row tux-messagelist',
47 'data-grouptype' => get_class( $this->group ),
48 'data-sourcelangcode' => $sourceLang->getCode(),
49 'data-sourcelangdir' => $sourceLang->getDir(),
50 'data-targetlangcode' => $targetLang->getCode(),
51 'data-targetlangdir' => $targetLang->getDir(),
52 ] );
53
54 $groupId = htmlspecialchars( $this->group->getId() );
55 $msg = $this->msg( 'tux-messagetable-loading-messages' )
56 ->numParams( $batchSize )
57 ->escaped();
58
59 $loader =
60 <<<HTML
61 <div class="tux-messagetable-loader hide" data-messagegroup="$groupId" data-pagesize="$batchSize">
62 <span class="tux-loading-indicator"></span>
63 <div class="tux-messagetable-loader-info">$msg</div>
64 </div>
65 HTML;
66
67 $hideOwn = $this->msg( 'tux-editor-proofreading-hide-own-translations' )->escaped();
68 $clearTranslated = $this->msg( 'tux-editor-clear-translated' )->escaped();
69 $modeTranslate = $this->msg( 'tux-editor-translate-mode' )->escaped();
70 $modePage = $this->msg( 'tux-editor-page-mode' )->escaped();
71 $modeProofread = $this->msg( 'tux-editor-proofreading-mode' )->escaped();
72
73 $actionbar =
74 <<<HTML
75 <div class="tux-action-bar hide row">
76 <div class="three columns tux-message-list-statsbar" data-messagegroup="$groupId"></div>
77 <div class="three columns text-center">
78 <button class="toggle button tux-proofread-own-translations-button hide">
79 $hideOwn
80 </button>
81 <button class="toggle button tux-editor-clear-translated hide">$clearTranslated</button>
82 </div>
83 <div class="six columns tux-view-switcher text-center">
84 <button class="toggle down translate-mode-button">$modeTranslate
85 </button><button class="toggle down page-mode-button">$modePage
86 </button><button class="toggle hide proofread-mode-button">$modeProofread
87 </button>
88 </div>
89 </div>
90 HTML;
91
92 // Actual message table is fetched and rendered at client side. This just provides
93 // the loader and action bar.
94 return $list . $loader . $actionbar;
95 }
96}
Minimal service container.
Definition Services.php:60
Interface for message groups.