Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F1427241
LegacyTranslationAids.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
LegacyTranslationAids.php
View Options
<?php
declare
(
strict_types
=
1
);
namespace
MediaWiki\Extension\Translate\TranslatorInterface
;
use
MediaWiki\Context\IContextSource
;
use
MediaWiki\Extension\Translate\MessageLoading\MessageHandle
;
use
MediaWiki\Extension\Translate\TranslatorInterface\Aid\MessageDefinitionAid
;
use
MediaWiki\Extension\Translate\TranslatorInterface\Aid\TranslationAidDataProvider
;
use
MediaWiki\Extension\Translate\Utilities\Utilities
;
use
MediaWiki\Html\Html
;
use
MediaWiki\Languages\LanguageFactory
;
use
MediaWiki\Title\Title
;
use
MessageGroup
;
/**
* Provides minimal translation aids which integrate with the edit page and on diffs for
* translatable messages.
* @author Niklas Laxström
* @license GPL-2.0-or-later
*/
class
LegacyTranslationAids
{
private
MessageHandle
$handle
;
private
?
MessageGroup
$group
;
private
IContextSource
$context
;
private
LanguageFactory
$languageFactory
;
public
function
__construct
(
MessageHandle
$handle
,
IContextSource
$context
,
LanguageFactory
$languageFactory
)
{
$this
->
handle
=
$handle
;
$this
->
context
=
$context
;
$this
->
group
=
$handle
->
getGroup
();
$this
->
languageFactory
=
$languageFactory
;
}
private
function
getDefinition
():
?
string
{
$obj
=
new
MessageDefinitionAid
(
$this
->
group
,
$this
->
handle
,
$this
->
context
,
new
TranslationAidDataProvider
(
$this
->
handle
)
);
return
$obj
->
getData
()[
'value'
];
}
/**
* Returns block element HTML snippet that contains the translation aids.
* Not all boxes are shown all the time depending on whether they have
* any information to show and on configuration variables.
* @return string Block level HTML snippet or empty string.
*/
public
function
getBoxes
():
string
{
$boxes
=
[];
try
{
$boxes
[]
=
$this
->
getDocumentationBox
();
}
catch
(
TranslationHelperException
$e
)
{
$boxes
[]
=
"<!-- Documentation not available: {$e->getMessage()} -->"
;
}
try
{
$boxes
[]
=
$this
->
getDefinitionBox
();
}
catch
(
TranslationHelperException
$e
)
{
$boxes
[]
=
"<!-- Definition not available: {$e->getMessage()} -->"
;
}
$this
->
context
->
getOutput
()->
addModuleStyles
(
'ext.translate.quickedit'
);
return
Html
::
rawElement
(
'div'
,
[
'class'
=>
'mw-sp-translate-edit-fields'
],
implode
(
"
\n\n
"
,
$boxes
)
);
}
private
function
getDefinitionBox
():
string
{
$definition
=
$this
->
getDefinition
();
if
(
(
string
)
$definition
===
''
)
{
throw
new
TranslationHelperException
(
'Message lacks definition'
);
}
$linkTag
=
self
::
ajaxEditLink
(
$this
->
handle
->
getTitle
(),
$this
->
group
->
getLabel
()
);
$label
=
wfMessage
(
'translate-edit-definition'
)->
escaped
()
.
wfMessage
(
'word-separator'
)->
escaped
()
.
wfMessage
(
'parentheses'
)->
rawParams
(
$linkTag
)->
escaped
();
$sl
=
$this
->
languageFactory
->
getLanguage
(
$this
->
group
->
getSourceLanguage
()
);
$msg
=
Html
::
rawElement
(
'div'
,
[
'class'
=>
'mw-translate-edit-deftext'
,
'dir'
=>
$sl
->
getDir
(),
'lang'
=>
$sl
->
getHtmlCode
(),
],
Utilities
::
convertWhiteSpaceToHTML
(
$definition
)
);
$class
=
[
'class'
=>
'mw-sp-translate-edit-definition'
];
return
Utilities
::
fieldset
(
$label
,
$msg
,
$class
);
}
private
function
getDocumentationBox
():
string
{
global
$wgTranslateDocumentationLanguageCode
;
if
(
!
$wgTranslateDocumentationLanguageCode
)
{
throw
new
TranslationHelperException
(
'Message documentation language code is not defined'
);
}
$page
=
$this
->
handle
->
getKey
();
$ns
=
$this
->
handle
->
getTitle
()->
getNamespace
();
$title
=
$this
->
handle
->
getTitleForLanguage
(
$wgTranslateDocumentationLanguageCode
);
$edit
=
$this
->
ajaxEditLink
(
$title
,
$this
->
context
->
msg
(
'translate-edit-contribute'
)->
text
()
);
$info
=
Utilities
::
getMessageContent
(
$page
,
$wgTranslateDocumentationLanguageCode
,
$ns
);
$class
=
'mw-sp-translate-edit-info'
;
// The information is most likely in English
$divAttribs
=
[
'dir'
=>
'ltr'
,
'lang'
=>
'en'
,
'class'
=>
'mw-content-ltr mw-parser-output'
];
if
(
(
string
)
$info
===
''
)
{
$info
=
$this
->
context
->
msg
(
'translate-edit-no-information'
)->
plain
();
$class
=
'mw-sp-translate-edit-noinfo'
;
$lang
=
$this
->
context
->
getLanguage
();
// The message saying that there's no info, should be translated
$divAttribs
=
[
'dir'
=>
$lang
->
getDir
(),
'lang'
=>
$lang
->
getHtmlCode
()
];
}
$class
.=
' mw-sp-translate-message-documentation'
;
$contents
=
$this
->
context
->
getOutput
()->
parseInlineAsInterface
(
$info
);
return
Utilities
::
fieldset
(
$this
->
context
->
msg
(
'translate-edit-information'
)->
rawParams
(
$edit
)->
escaped
(),
Html
::
rawElement
(
'div'
,
$divAttribs
,
$contents
),
[
'class'
=>
$class
]
);
}
private
function
ajaxEditLink
(
Title
$target
,
string
$linkText
):
string
{
$handle
=
new
MessageHandle
(
$target
);
$uri
=
Utilities
::
getEditorUrl
(
$handle
);
return
Html
::
element
(
'a'
,
[
'href'
=>
$uri
],
$linkText
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, May 16, 14:23 (1 d, 10 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
cc/f8/c4fde6b9a1b4426d348de9b6cac2
Default Alt Text
LegacyTranslationAids.php (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment