summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/messagegroups/MessageGroupOld.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Translate/messagegroups/MessageGroupOld.php')
-rw-r--r--www/wiki/extensions/Translate/messagegroups/MessageGroupOld.php409
1 files changed, 409 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/messagegroups/MessageGroupOld.php b/www/wiki/extensions/Translate/messagegroups/MessageGroupOld.php
new file mode 100644
index 00000000..34af7a36
--- /dev/null
+++ b/www/wiki/extensions/Translate/messagegroups/MessageGroupOld.php
@@ -0,0 +1,409 @@
+<?php
+/**
+ * This file contains the base information of unmanaged message groups.
+ * These classes don't use Yaml configuration nor Special:ManageMessageGroups
+ * nor processMessageChanges.php
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * This is the interface and base implementation of unmanaged
+ * message groups.
+ * @todo Rename the class
+ * @ingroup MessageGroup
+ */
+abstract class MessageGroupOld implements MessageGroup {
+ /**
+ * Human-readable name of this group
+ */
+ protected $label = 'none';
+
+ /**
+ * @param IContextSource|null $context
+ * @return string
+ */
+ public function getLabel( IContextSource $context = null ) {
+ return $this->label;
+ }
+
+ /**
+ * @param string $value
+ */
+ public function setLabel( $value ) {
+ $this->label = $value;
+ }
+
+ /**
+ * Group-wide unique id of this group. Used also for sorting.
+ */
+ protected $id = 'none';
+
+ /**
+ * @return string
+ */
+ public function getId() {
+ return $this->id;
+ }
+
+ /**
+ * @param string $value
+ */
+ public function setId( $value ) {
+ $this->id = $value;
+ }
+
+ /**
+ * The namespace where all the messages of this group belong.
+ * If the group has messages from multiple namespaces, set this to false
+ * and look how RecentMessageGroup implements the definitions.
+ */
+ protected $namespace = NS_MEDIAWIKI;
+
+ /**
+ * Get the namespace where all the messages of this group belong.
+ * @return int
+ */
+ public function getNamespace() {
+ return $this->namespace;
+ }
+
+ /**
+ * Set the namespace where all the messages of this group belong.
+ * @param int $ns
+ */
+ public function setNamespace( $ns ) {
+ $this->namespace = $ns;
+ }
+
+ /**
+ * List of messages that are hidden by default, but can still be translated if
+ * needed.
+ */
+ protected $optional = [];
+
+ /**
+ * @return array
+ */
+ public function getOptional() {
+ return $this->optional;
+ }
+
+ /**
+ * @param array $value
+ */
+ public function setOptional( $value ) {
+ $this->optional = $value;
+ }
+
+ /**
+ * List of messages that are always hidden and cannot be translated.
+ */
+ protected $ignored = [];
+
+ /**
+ * @return array
+ */
+ public function getIgnored() {
+ return $this->ignored;
+ }
+
+ /**
+ * @param array $value
+ */
+ public function setIgnored( $value ) {
+ $this->ignored = $value;
+ }
+
+ /**
+ * Holds descripton of this group. Description is a wiki text snippet that
+ * gives information about this group to translators.
+ */
+ protected $description = null;
+
+ public function getDescription( IContextSource $context = null ) {
+ return $this->description;
+ }
+
+ public function setDescription( $value ) {
+ $this->description = $value;
+ }
+
+ public function getIcon() {
+ return null;
+ }
+
+ /**
+ * Meta groups consist of multiple groups or parts of other groups. This info
+ * is used on many places, like when creating message index.
+ */
+ protected $meta = false;
+
+ public function isMeta() {
+ return $this->meta;
+ }
+
+ public function setMeta( $value ) {
+ $this->meta = $value;
+ }
+
+ public function getSourceLanguage() {
+ return 'en';
+ }
+
+ /**
+ * To avoid key conflicts between groups or separated changed messages between
+ * branches one can set a message key mangler.
+ */
+ protected $mangler = null;
+
+ /**
+ * @return StringMatcher
+ */
+ public function getMangler() {
+ if ( !isset( $this->mangler ) ) {
+ $this->mangler = StringMatcher::EmptyMatcher();
+ }
+
+ return $this->mangler;
+ }
+
+ public function setMangler( $value ) {
+ $this->mangler = $value;
+ }
+
+ public function load( $code ) {
+ return [];
+ }
+
+ /**
+ * This function returns array of type key => definition of all messages
+ * this message group handles.
+ *
+ * @throws MWException
+ * @return Array of messages definitions indexed by key.
+ */
+ public function getDefinitions() {
+ $defs = $this->load( $this->getSourceLanguage() );
+ if ( !is_array( $defs ) ) {
+ throw new MWException( 'Unable to load definitions for ' . $this->getLabel() );
+ }
+
+ return $defs;
+ }
+
+ /**
+ * This function can be used for meta message groups to list their "own"
+ * messages. For example branched message groups can exclude the messages they
+ * share with each other.
+ * @return array
+ */
+ public function getUniqueDefinitions() {
+ return $this->meta ? [] : $this->getDefinitions();
+ }
+
+ /**
+ * Returns of stored translation of message specified by the $key in language
+ * code $code.
+ *
+ * @param string $key Message key
+ * @param string $code Language code
+ * @return Mixed List of stored translation or \null.
+ */
+ public function getMessage( $key, $code ) {
+ if ( !isset( $this->messages[$code] ) ) {
+ $this->messages[$code] = self::normaliseKeys( $this->load( $code ) );
+ }
+ $key = strtolower( str_replace( ' ', '_', $key ) );
+
+ return $this->messages[$code][$key] ?? null;
+ }
+
+ public static function normaliseKeys( $array ) {
+ if ( !is_array( $array ) ) {
+ return null;
+ }
+
+ $new = [];
+ foreach ( $array as $key => $v ) {
+ $key = strtolower( str_replace( ' ', '_', $key ) );
+ $new[$key] = $v;
+ }
+
+ return $new;
+ }
+
+ /**
+ * All the messages for this group, by language code.
+ */
+ protected $messages = [];
+
+ /**
+ * Returns path to the file where translation of language code $code are.
+ *
+ * @param string $code
+ * @return string Path to the file or false if not applicable.
+ */
+ public function getMessageFile( $code ) {
+ return false;
+ }
+
+ public function getPath() {
+ return false;
+ }
+
+ /**
+ * @param string $code
+ * @return bool|string
+ */
+ public function getMessageFileWithPath( $code ) {
+ $path = $this->getPath();
+ $file = $this->getMessageFile( $code );
+
+ if ( !$path || !$file ) {
+ return false;
+ }
+
+ return "$path/$file";
+ }
+
+ public function getSourceFilePath( $code ) {
+ return $this->getMessageFileWithPath( $code );
+ }
+
+ /**
+ * Creates a new MessageCollection for this group.
+ *
+ * @param string $code Language code for this collection.
+ * @param bool $unique Whether to build collection for messages unique to this
+ * group only.
+ * @return MessageCollection
+ */
+ public function initCollection( $code, $unique = false ) {
+ if ( !$unique ) {
+ $definitions = $this->getDefinitions();
+ } else {
+ $definitions = $this->getUniqueDefinitions();
+ }
+
+ $defs = new MessageDefinitions( $definitions, $this->getNamespace() );
+ $collection = MessageCollection::newFromDefinitions( $defs, $code );
+
+ foreach ( $this->getTags() as $type => $tags ) {
+ $collection->setTags( $type, $tags );
+ }
+
+ return $collection;
+ }
+
+ public function __construct() {
+ }
+
+ /**
+ * Can be overwritten to retun false if something is wrong.
+ * @return bool
+ */
+ public function exists() {
+ return true;
+ }
+
+ public function getChecker() {
+ return null;
+ }
+
+ public function getTags( $type = null ) {
+ $tags = [
+ 'optional' => $this->optional,
+ 'ignored' => $this->ignored,
+ ];
+
+ if ( !$type ) {
+ return $tags;
+ }
+
+ return $tags[$type] ?? [];
+ }
+
+ /**
+ * @param string $code
+ * @return bool
+ */
+ protected function isSourceLanguage( $code ) {
+ return $code === $this->getSourceLanguage();
+ }
+
+ /**
+ * Unsupported stuff, just to satisfy the new interface
+ * @param array $conf
+ */
+ public function setConfiguration( $conf ) {
+ }
+
+ public function getConfiguration() {
+ }
+
+ public function getFFS() {
+ return null;
+ }
+
+ /**
+ * @deprecated Use getMessageGroupStates
+ */
+ public function getWorkflowConfiguration() {
+ global $wgTranslateWorkflowStates;
+ if ( !$wgTranslateWorkflowStates ) {
+ // Not configured
+ $conf = [];
+ } else {
+ $conf = $wgTranslateWorkflowStates;
+ }
+
+ return $conf;
+ }
+
+ /**
+ * Get the message group workflow state configuration.
+ * @return MessageGroupStates
+ */
+ public function getMessageGroupStates() {
+ // @todo Replace deprecated call.
+ $conf = $this->getWorkflowConfiguration();
+
+ Hooks::run( 'Translate:modifyMessageGroupStates', [ $this->getId(), &$conf ] );
+
+ return new MessageGroupStates( $conf );
+ }
+
+ /**
+ * Get all the translatable languages for a group, considering the whitelisting
+ * and blacklisting.
+ * @return array|null The language codes as array keys.
+ */
+ public function getTranslatableLanguages() {
+ return null;
+ }
+
+ protected static function addContext( Message $message, IContextSource $context = null ) {
+ if ( $context ) {
+ $message->inLanguage( $context->getLanguage() );
+ } else {
+ $message->inLanguage( 'en' );
+ }
+
+ return $message;
+ }
+
+ /**
+ * List of available message types mapped to the classes
+ * implementing them. Default implementation (all).
+ *
+ * @return array
+ */
+ public function getTranslationAids() {
+ return TranslationAid::getTypes();
+ }
+}