summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Poem
diff options
context:
space:
mode:
authorYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
committerYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
commitfc7369835258467bf97eb64f184b93691f9a9fd5 (patch)
treedaabd60089d2dd76d9f5fb416b005fbe159c799d /www/wiki/extensions/Poem
first commit
Diffstat (limited to 'www/wiki/extensions/Poem')
-rw-r--r--www/wiki/extensions/Poem/CODE_OF_CONDUCT.md1
-rw-r--r--www/wiki/extensions/Poem/Gruntfile.js28
-rw-r--r--www/wiki/extensions/Poem/LICENSE121
-rw-r--r--www/wiki/extensions/Poem/Poem.class.php84
-rw-r--r--www/wiki/extensions/Poem/Poem.php14
-rw-r--r--www/wiki/extensions/Poem/composer.json26
-rw-r--r--www/wiki/extensions/Poem/extension.json26
-rw-r--r--www/wiki/extensions/Poem/i18n/af.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/an.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ar.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/arz.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ast.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/az.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ba.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/bar.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/bcc.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/be-tarask.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/bg.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/bn.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/br.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/bs.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ca.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ce.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ckb.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/cs.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/da.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/de.json11
-rw-r--r--www/wiki/extensions/Poem/i18n/diq.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/dsb.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/el.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/en.json6
-rw-r--r--www/wiki/extensions/Poem/i18n/eo.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/es.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/et.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/eu.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/fa.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/fi.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/fr.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/frp.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/frr.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/gl.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/gsw.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/he.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/hi.json9
-rw-r--r--www/wiki/extensions/Poem/i18n/hil.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/hr.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/hsb.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/hu.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ia.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/id.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ilo.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/it.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ja.json10
-rw-r--r--www/wiki/extensions/Poem/i18n/jut.json9
-rw-r--r--www/wiki/extensions/Poem/i18n/jv.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ka.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/km.json10
-rw-r--r--www/wiki/extensions/Poem/i18n/ko.json9
-rw-r--r--www/wiki/extensions/Poem/i18n/ksh.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/lb.json9
-rw-r--r--www/wiki/extensions/Poem/i18n/li.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/lt.json9
-rw-r--r--www/wiki/extensions/Poem/i18n/lus.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/lv.json9
-rw-r--r--www/wiki/extensions/Poem/i18n/mk.json9
-rw-r--r--www/wiki/extensions/Poem/i18n/ml.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/mr.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ms.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/nb.json4
-rw-r--r--www/wiki/extensions/Poem/i18n/nds.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/nl.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/nn.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/oc.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/pl.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/pms.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ps.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/pt-br.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/pt.json9
-rw-r--r--www/wiki/extensions/Poem/i18n/qqq.json9
-rw-r--r--www/wiki/extensions/Poem/i18n/rif.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ro.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/roa-tara.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/ru.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/rue.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/sah.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/scn.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/sco.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/sk.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/sl.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/sli.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/sq.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/sr-ec.json10
-rw-r--r--www/wiki/extensions/Poem/i18n/sr-el.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/stq.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/sv.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/te.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/tg-cyrl.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/tg-latn.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/th.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/tk.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/tl.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/tr.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/uk.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/vec.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/vep.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/vi.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/vo.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/yue.json8
-rw-r--r--www/wiki/extensions/Poem/i18n/zh-hans.json11
-rw-r--r--www/wiki/extensions/Poem/i18n/zh-hant.json9
-rw-r--r--www/wiki/extensions/Poem/includes/Poem.php87
-rw-r--r--www/wiki/extensions/Poem/install.settings2
-rw-r--r--www/wiki/extensions/Poem/phpcs.xml10
-rw-r--r--www/wiki/extensions/Poem/poemParserTests.txt142
-rw-r--r--www/wiki/extensions/Poem/tests/parser/parserTests.txt162
-rw-r--r--www/wiki/extensions/Poem/tests/phan/config.php3
116 files changed, 1546 insertions, 0 deletions
diff --git a/www/wiki/extensions/Poem/CODE_OF_CONDUCT.md b/www/wiki/extensions/Poem/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000..d8e5d087
--- /dev/null
+++ b/www/wiki/extensions/Poem/CODE_OF_CONDUCT.md
@@ -0,0 +1 @@
+The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Code_of_Conduct).
diff --git a/www/wiki/extensions/Poem/Gruntfile.js b/www/wiki/extensions/Poem/Gruntfile.js
new file mode 100644
index 00000000..26ca0c16
--- /dev/null
+++ b/www/wiki/extensions/Poem/Gruntfile.js
@@ -0,0 +1,28 @@
+/*jshint node:true */
+module.exports = function ( grunt ) {
+ grunt.loadNpmTasks( 'grunt-banana-checker' );
+ grunt.loadNpmTasks( 'grunt-jsonlint' );
+ grunt.loadNpmTasks( 'grunt-contrib-jshint' );
+
+ var conf = grunt.file.readJSON( 'extension.json' );
+ grunt.initConfig( {
+ banana: conf.MessagesDirs,
+ jshint: {
+ all: [
+ '**/*.js',
+ '!node_modules/**',
+ '!vendor/**'
+ ]
+ },
+ jsonlint: {
+ all: [
+ '**/*.json',
+ '!node_modules/**',
+ '!vendor/**'
+ ]
+ }
+ } );
+
+ grunt.registerTask( 'test', [ 'jsonlint', 'banana', 'jshint' ] );
+ grunt.registerTask( 'default', 'test' );
+};
diff --git a/www/wiki/extensions/Poem/LICENSE b/www/wiki/extensions/Poem/LICENSE
new file mode 100644
index 00000000..0e259d42
--- /dev/null
+++ b/www/wiki/extensions/Poem/LICENSE
@@ -0,0 +1,121 @@
+Creative Commons Legal Code
+
+CC0 1.0 Universal
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+ PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+ THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+ HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display,
+ communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+ likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+ v. rights protecting the extraction, dissemination, use and reuse of data
+ in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation
+ thereof, including any amended or successor version of such
+ directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+ world based on applicable law or treaty, and any national
+ implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+ warranties of any kind concerning the Work, express, implied,
+ statutory or otherwise, including without limitation warranties of
+ title, merchantability, fitness for a particular purpose, non
+ infringement, or the absence of latent or other defects, accuracy, or
+ the present or absence of errors, whether or not discoverable, all to
+ the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without
+ limitation any person's Copyright and Related Rights in the Work.
+ Further, Affirmer disclaims responsibility for obtaining any necessary
+ consents, permissions or other rights required for any use of the
+ Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to
+ this CC0 or use of the Work.
diff --git a/www/wiki/extensions/Poem/Poem.class.php b/www/wiki/extensions/Poem/Poem.class.php
new file mode 100644
index 00000000..b366c970
--- /dev/null
+++ b/www/wiki/extensions/Poem/Poem.class.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * This class handles formatting poems in WikiText, specifically anything within
+ * <poem></poem> tags.
+ */
+class Poem {
+ /**
+ * Bind the renderPoem function to the <poem> tag
+ * @param Parser &$parser
+ * @return bool true
+ */
+ public static function init( &$parser ) {
+ $parser->setHook( 'poem', [ 'Poem', 'renderPoem' ] );
+ return true;
+ }
+
+ /**
+ * Parse the text into proper poem format
+ * @param string $in The text inside the poem tag
+ * @param array $param
+ * @param Parser $parser
+ * @param bool $frame
+ * @return string
+ */
+ public static function renderPoem( $in, $param = [], $parser = null, $frame = false ) {
+ // using newlines in the text will cause the parser to add <p> tags,
+ // which may not be desired in some cases
+ $newline = isset( $param['compact'] ) ? '' : "\n";
+
+ $tag = $parser->insertStripItem( "<br />", $parser->mStripState );
+
+ // replace colons with indented spans
+ $text = preg_replace_callback( '/^(:+)(.+)$/m', [ 'Poem', 'indentVerse' ], $in );
+
+ // replace newlines with <br /> tags unless they are at the beginning or end
+ // of the poem
+ $text = preg_replace(
+ [ "/^\n/", "/\n$/D", "/\n/" ],
+ [ "", "", "$tag\n" ],
+ $text );
+
+ // replace spaces at the beginning of a line with non-breaking spaces
+ $text = preg_replace_callback( '/^( +)/m', [ 'Poem', 'replaceSpaces' ], $text );
+
+ $text = $parser->recursiveTagParse( $text, $frame );
+
+ $attribs = Sanitizer::validateTagAttributes( $param, 'div' );
+
+ // Wrap output in a <div> with "poem" class.
+ if ( isset( $attribs['class'] ) ) {
+ $attribs['class'] = 'poem ' . $attribs['class'];
+ } else {
+ $attribs['class'] = 'poem';
+ }
+
+ return Html::rawElement( 'div', $attribs, $newline . trim( $text ) . $newline );
+ }
+
+ /**
+ * Callback for preg_replace_callback() that replaces spaces with non-breaking spaces
+ * @param array $m Matches from the regular expression
+ * - $m[1] consists of 1 or more spaces
+ * @return mixed
+ */
+ protected static function replaceSpaces( $m ) {
+ return str_replace( ' ', '&#160;', $m[1] );
+ }
+
+ /**
+ * Callback for preg_replace_callback() that wraps content in an indented span
+ * @param array $m Matches from the regular expression
+ * - $m[1] consists of 1 or more colons
+ * - $m[2] consists of the text after the colons
+ * @return string
+ */
+ protected static function indentVerse( $m ) {
+ $attribs = [
+ 'class' => 'mw-poem-indented',
+ 'style' => 'display: inline-block; margin-left: ' . strlen( $m[1] ) . 'em;'
+ ];
+ // @todo Should this really be raw?
+ return Html::rawElement( 'span', $attribs, $m[2] );
+ }
+}
diff --git a/www/wiki/extensions/Poem/Poem.php b/www/wiki/extensions/Poem/Poem.php
new file mode 100644
index 00000000..3362060b
--- /dev/null
+++ b/www/wiki/extensions/Poem/Poem.php
@@ -0,0 +1,14 @@
+<?php
+
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'Poem' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['Poem'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for Poem extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the Poem extension requires MediaWiki 1.25+' );
+}
diff --git a/www/wiki/extensions/Poem/composer.json b/www/wiki/extensions/Poem/composer.json
new file mode 100644
index 00000000..85b14ed3
--- /dev/null
+++ b/www/wiki/extensions/Poem/composer.json
@@ -0,0 +1,26 @@
+{
+ "require": {
+ "php": ">=5.5.9"
+ },
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "1.0.0",
+ "jakub-onderka/php-console-highlighter": "0.3.2",
+ "mediawiki/mediawiki-codesniffer": "18.0.0",
+ "mediawiki/minus-x": "0.3.1",
+ "mediawiki/mediawiki-phan-config": "0.2.0"
+ },
+ "scripts": {
+ "fix": [
+ "phpcbf",
+ "minus-x fix ."
+ ],
+ "test": [
+ "parallel-lint . --exclude node_modules --exclude vendor",
+ "phpcs -p -s",
+ "minus-x check ."
+ ]
+ },
+ "extra": {
+ "phan-taint-check-plugin": "1.2.0"
+ }
+}
diff --git a/www/wiki/extensions/Poem/extension.json b/www/wiki/extensions/Poem/extension.json
new file mode 100644
index 00000000..130de1a0
--- /dev/null
+++ b/www/wiki/extensions/Poem/extension.json
@@ -0,0 +1,26 @@
+{
+ "name": "Poem",
+ "author": [
+ "Nikola Smolenski",
+ "Brion Vibber",
+ "Steve Sanbeg"
+ ],
+ "license-name": "CC0-1.0",
+ "url": "https://www.mediawiki.org/wiki/Extension:Poem",
+ "descriptionmsg": "poem-desc",
+ "type": "parserhook",
+ "MessagesDirs": {
+ "Poem": [
+ "i18n"
+ ]
+ },
+ "Hooks": {
+ "ParserFirstCallInit": [
+ "Poem::init"
+ ]
+ },
+ "AutoloadClasses": {
+ "Poem": "includes/Poem.php"
+ },
+ "manifest_version": 1
+}
diff --git a/www/wiki/extensions/Poem/i18n/af.json b/www/wiki/extensions/Poem/i18n/af.json
new file mode 100644
index 00000000..2e04cb0e
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/af.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Naudefj"
+ ]
+ },
+ "poem-desc": "Maak 'n <code>&lt;poem&gt;</code> etiket beskikbaar vir die formatering van poësie"
+}
diff --git a/www/wiki/extensions/Poem/i18n/an.json b/www/wiki/extensions/Poem/i18n/an.json
new file mode 100644
index 00000000..8d40effd
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/an.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Juanpabl"
+ ]
+ },
+ "poem-desc": "Adibe a etiqueta <code>&lt;poem&gt;</code> ta formateyar poesía"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ar.json b/www/wiki/extensions/Poem/i18n/ar.json
new file mode 100644
index 00000000..9d3d1e2a
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ar.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meno25"
+ ]
+ },
+ "poem-desc": "يضيف الوسم <code>&lt;poem&gt;</code> لصياغة القصيدة"
+}
diff --git a/www/wiki/extensions/Poem/i18n/arz.json b/www/wiki/extensions/Poem/i18n/arz.json
new file mode 100644
index 00000000..a857d410
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/arz.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ramsis II"
+ ]
+ },
+ "poem-desc": "بيضيف تاج ال <code>&lt;poem&gt;</code> لصياغة القصيدة"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ast.json b/www/wiki/extensions/Poem/i18n/ast.json
new file mode 100644
index 00000000..3ef0f5a4
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ast.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Esbardu"
+ ]
+ },
+ "poem-desc": "Añade la etiqueta <code>&lt;poem&gt;</code> pal formatu de poemes"
+}
diff --git a/www/wiki/extensions/Poem/i18n/az.json b/www/wiki/extensions/Poem/i18n/az.json
new file mode 100644
index 00000000..6cd8c637
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/az.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sortilegus"
+ ]
+ },
+ "poem-desc": "Şeirlərin formatlaşdırılması üçün <code>&lt;poem&gt;</code> teqini əlavə edir"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ba.json b/www/wiki/extensions/Poem/i18n/ba.json
new file mode 100644
index 00000000..22941009
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ba.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Assele"
+ ]
+ },
+ "poem-desc": "Шиғырҙарҙы форматлау өсөн <code>&lt;poem&gt;</code> билдәһен өҫтәй"
+}
diff --git a/www/wiki/extensions/Poem/i18n/bar.json b/www/wiki/extensions/Poem/i18n/bar.json
new file mode 100644
index 00000000..1ed8b4bd
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/bar.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Man77"
+ ]
+ },
+ "poem-desc": "Fügt s'<code>&lt;poem&gt;</code>-Tag zum Formatian vu Gedichtln dazua"
+}
diff --git a/www/wiki/extensions/Poem/i18n/bcc.json b/www/wiki/extensions/Poem/i18n/bcc.json
new file mode 100644
index 00000000..f483e043
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/bcc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mostafadaneshvar"
+ ]
+ },
+ "poem-desc": "هورکنت <code>&lt;poem&gt;</code> برچسپء په فرمت شئر"
+}
diff --git a/www/wiki/extensions/Poem/i18n/be-tarask.json b/www/wiki/extensions/Poem/i18n/be-tarask.json
new file mode 100644
index 00000000..9fcf9599
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/be-tarask.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jim-by"
+ ]
+ },
+ "poem-desc": "Дадае тэг <code>&lt;poem&gt;</code> для фарматаваньня вершаў"
+}
diff --git a/www/wiki/extensions/Poem/i18n/bg.json b/www/wiki/extensions/Poem/i18n/bg.json
new file mode 100644
index 00000000..fe124499
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/bg.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "DCLXVI"
+ ]
+ },
+ "poem-desc": "Добавя етикет <code>&lt;poem&gt;</code> за форматиране на стихове"
+}
diff --git a/www/wiki/extensions/Poem/i18n/bn.json b/www/wiki/extensions/Poem/i18n/bn.json
new file mode 100644
index 00000000..c4dfd146
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/bn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bellayet"
+ ]
+ },
+ "poem-desc": "কবিতার ফরমেটিং এর জন্য <code>&lt;poem&gt;</code> ট্যাগ যোগ করুন"
+}
diff --git a/www/wiki/extensions/Poem/i18n/br.json b/www/wiki/extensions/Poem/i18n/br.json
new file mode 100644
index 00000000..a7f46977
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/br.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fulup"
+ ]
+ },
+ "poem-desc": "Ouzhpennañ a ra an dikedenn <code>&lt;poem&gt;</code> da furmadiñ testennoù barzhonegoù."
+}
diff --git a/www/wiki/extensions/Poem/i18n/bs.json b/www/wiki/extensions/Poem/i18n/bs.json
new file mode 100644
index 00000000..791d1185
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/bs.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "CERminator"
+ ]
+ },
+ "poem-desc": "Dodaje oznaku <code>&lt;poem&gt;</code> za formatiranje stihova"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ca.json b/www/wiki/extensions/Poem/i18n/ca.json
new file mode 100644
index 00000000..274c06d4
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ca.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Paucabot"
+ ]
+ },
+ "poem-desc": "Afegeix l'etiqueta <code>&lt;poem&gt;</code> per al formatatge de poemes"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ce.json b/www/wiki/extensions/Poem/i18n/ce.json
new file mode 100644
index 00000000..6069a195
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ce.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Умар"
+ ]
+ },
+ "poem-desc": "ТӀетуху тег <code>&lt;poem&gt;</code> дешнаш дӀадаха"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ckb.json b/www/wiki/extensions/Poem/i18n/ckb.json
new file mode 100644
index 00000000..2ecb06db
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ckb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Asoxor"
+ ]
+ },
+ "poem-desc": "تاگی <code>&lt;poem&gt;</code> زێدەدەکات بۆ ڕێکخستنی ھۆنراوەکان"
+}
diff --git a/www/wiki/extensions/Poem/i18n/cs.json b/www/wiki/extensions/Poem/i18n/cs.json
new file mode 100644
index 00000000..36d23906
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/cs.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Matěj Grabovský"
+ ]
+ },
+ "poem-desc": "Přidává značku <code>&lt;poem&gt;</code> pro formátování básní"
+}
diff --git a/www/wiki/extensions/Poem/i18n/da.json b/www/wiki/extensions/Poem/i18n/da.json
new file mode 100644
index 00000000..11b34178
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/da.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Peter Alberti"
+ ]
+ },
+ "poem-desc": "Tilføjer tagget <code>&lt;poem&gt;</code> til formatering af digte"
+}
diff --git a/www/wiki/extensions/Poem/i18n/de.json b/www/wiki/extensions/Poem/i18n/de.json
new file mode 100644
index 00000000..ffd46059
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/de.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kghbln",
+ "Purodha",
+ "Raimond Spekking",
+ "FriedhelmW"
+ ]
+ },
+ "poem-desc": "Fügt das Tag <code>&lt;poem&gt;</code> zur Formatierung von Gedichten hinzu"
+}
diff --git a/www/wiki/extensions/Poem/i18n/diq.json b/www/wiki/extensions/Poem/i18n/diq.json
new file mode 100644
index 00000000..c222a3f5
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/diq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aspar"
+ ]
+ },
+ "poem-desc": "qey fesaldayişê şiiri etiketê <code>&lt;poem&gt;</code>i têarê keno"
+}
diff --git a/www/wiki/extensions/Poem/i18n/dsb.json b/www/wiki/extensions/Poem/i18n/dsb.json
new file mode 100644
index 00000000..6833c1d7
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/dsb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "poem-desc": "Pśidawa toflicku <code>&lt;poem&gt;</code> za formatěrowanje basnjow"
+}
diff --git a/www/wiki/extensions/Poem/i18n/el.json b/www/wiki/extensions/Poem/i18n/el.json
new file mode 100644
index 00000000..96b744e3
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/el.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dead3y3"
+ ]
+ },
+ "poem-desc": "Προσθέτει την ετικέτα <code>&lt;poem&gt;</code> για την μορφοποίηση ποιημάτων"
+}
diff --git a/www/wiki/extensions/Poem/i18n/en.json b/www/wiki/extensions/Poem/i18n/en.json
new file mode 100644
index 00000000..4d0a3623
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/en.json
@@ -0,0 +1,6 @@
+{
+ "@metadata": {
+ "authors": []
+ },
+ "poem-desc": "Adds <code>&lt;poem&gt;</code> tag for poem formatting"
+} \ No newline at end of file
diff --git a/www/wiki/extensions/Poem/i18n/eo.json b/www/wiki/extensions/Poem/i18n/eo.json
new file mode 100644
index 00000000..834cd25b
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/eo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yekrats"
+ ]
+ },
+ "poem-desc": "Aldonas <code>&lt;poem&gt;</code> etikedon por formatado de poezio."
+}
diff --git a/www/wiki/extensions/Poem/i18n/es.json b/www/wiki/extensions/Poem/i18n/es.json
new file mode 100644
index 00000000..f2f0f6e8
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/es.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Muro de Aguas"
+ ]
+ },
+ "poem-desc": "Añade la etiqueta <code>&lt;poem&gt;</code> para dar el formato propio de un poema."
+}
diff --git a/www/wiki/extensions/Poem/i18n/et.json b/www/wiki/extensions/Poem/i18n/et.json
new file mode 100644
index 00000000..db4fe5da
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/et.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pikne"
+ ]
+ },
+ "poem-desc": "Lisab sildi <code>&lt;poem&gt;</code> luuletuse vormindamiseks."
+}
diff --git a/www/wiki/extensions/Poem/i18n/eu.json b/www/wiki/extensions/Poem/i18n/eu.json
new file mode 100644
index 00000000..bfa84392
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/eu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Theklan"
+ ]
+ },
+ "poem-desc": "<code>&lt;poem&gt;</code> etiketa gehitzen du olerkien formaturako"
+}
diff --git a/www/wiki/extensions/Poem/i18n/fa.json b/www/wiki/extensions/Poem/i18n/fa.json
new file mode 100644
index 00000000..7e5ec91f
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/fa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Huji"
+ ]
+ },
+ "poem-desc": "برچسب <code>&lt;poem&gt;</code> را برای قالب‌بندی شعرها می‌افزاید"
+}
diff --git a/www/wiki/extensions/Poem/i18n/fi.json b/www/wiki/extensions/Poem/i18n/fi.json
new file mode 100644
index 00000000..8b3d97e9
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/fi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nike"
+ ]
+ },
+ "poem-desc": "Mahdollistaa runojen muotoilun <code>&lt;poem&gt;</code>-elementillä."
+}
diff --git a/www/wiki/extensions/Poem/i18n/fr.json b/www/wiki/extensions/Poem/i18n/fr.json
new file mode 100644
index 00000000..4c2ebc01
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/fr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Grondin"
+ ]
+ },
+ "poem-desc": "Ajoute la balise <code>&lt;poem&gt;</code> pour le formatage des poèmes"
+}
diff --git a/www/wiki/extensions/Poem/i18n/frp.json b/www/wiki/extensions/Poem/i18n/frp.json
new file mode 100644
index 00000000..df355d45
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/frp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChrisPtDe"
+ ]
+ },
+ "poem-desc": "Apond la balisa <code>&lt;poem&gt;</code> por lo formatâjo des poèmos."
+}
diff --git a/www/wiki/extensions/Poem/i18n/frr.json b/www/wiki/extensions/Poem/i18n/frr.json
new file mode 100644
index 00000000..ebd1cc35
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/frr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Murma174"
+ ]
+ },
+ "poem-desc": "Saat <code>&lt;poem&gt;</code> diartu, am dachtangen tu formatiarin"
+}
diff --git a/www/wiki/extensions/Poem/i18n/gl.json b/www/wiki/extensions/Poem/i18n/gl.json
new file mode 100644
index 00000000..f4f5c156
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/gl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alma"
+ ]
+ },
+ "poem-desc": "Engada a etiqueta <code>&lt;poem&gt;</code> para o formato poema"
+}
diff --git a/www/wiki/extensions/Poem/i18n/gsw.json b/www/wiki/extensions/Poem/i18n/gsw.json
new file mode 100644
index 00000000..2ffd74cd
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/gsw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Holder"
+ ]
+ },
+ "poem-desc": "Fiegt s <code>&lt;poem&gt;</code>-Tag zue zum Formatiere vu Gedicht"
+}
diff --git a/www/wiki/extensions/Poem/i18n/he.json b/www/wiki/extensions/Poem/i18n/he.json
new file mode 100644
index 00000000..c140e584
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/he.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80"
+ ]
+ },
+ "poem-desc": "הוספת התג <code>&lt;poem&gt;</code> לעיצוב שירה"
+}
diff --git a/www/wiki/extensions/Poem/i18n/hi.json b/www/wiki/extensions/Poem/i18n/hi.json
new file mode 100644
index 00000000..c6e472c4
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/hi.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaustubh",
+ "Siddhartha Ghai"
+ ]
+ },
+ "poem-desc": "कविता स्वरूपण के लिये <code>&lt;poem&gt;</code> टैग जोड़ता है"
+}
diff --git a/www/wiki/extensions/Poem/i18n/hil.json b/www/wiki/extensions/Poem/i18n/hil.json
new file mode 100644
index 00000000..e48dd962
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/hil.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tagimata"
+ ]
+ },
+ "poem-desc": "Gadugang <code>&lt;poem&gt;</code> tag para sa pagformat sang tula"
+}
diff --git a/www/wiki/extensions/Poem/i18n/hr.json b/www/wiki/extensions/Poem/i18n/hr.json
new file mode 100644
index 00000000..067f1e82
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/hr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dalibor Bosits"
+ ]
+ },
+ "poem-desc": "Dodaje <code>&lt;poem&gt;</code> oznaku za formatiranje pjesama"
+}
diff --git a/www/wiki/extensions/Poem/i18n/hsb.json b/www/wiki/extensions/Poem/i18n/hsb.json
new file mode 100644
index 00000000..c67ed3d7
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/hsb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "poem-desc": "Přidawa tafličku <code>&lt;poem&gt;</code> za formatowanje basnjow"
+}
diff --git a/www/wiki/extensions/Poem/i18n/hu.json b/www/wiki/extensions/Poem/i18n/hu.json
new file mode 100644
index 00000000..85391931
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/hu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dani"
+ ]
+ },
+ "poem-desc": "<code>&lt;poem&gt;</code> tag a versek formázásához"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ia.json b/www/wiki/extensions/Poem/i18n/ia.json
new file mode 100644
index 00000000..0f014795
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ia.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "poem-desc": "Adde le etiquetta <code>&lt;poem&gt;</code> pro formatar poemas"
+}
diff --git a/www/wiki/extensions/Poem/i18n/id.json b/www/wiki/extensions/Poem/i18n/id.json
new file mode 100644
index 00000000..e956564b
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/id.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "IvanLanin"
+ ]
+ },
+ "poem-desc": "Menambahkan tag <code>&lt;poem&gt;</code> tag untuk pemformatan puisi"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ilo.json b/www/wiki/extensions/Poem/i18n/ilo.json
new file mode 100644
index 00000000..72cf003a
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ilo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lam-ang"
+ ]
+ },
+ "poem-desc": "Agnayon ti etiketa ti <code>&lt;poem&gt;</code> para iti panagporma ti daniw"
+}
diff --git a/www/wiki/extensions/Poem/i18n/it.json b/www/wiki/extensions/Poem/i18n/it.json
new file mode 100644
index 00000000..ec0c24f1
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/it.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "BrokenArrow"
+ ]
+ },
+ "poem-desc": "Aggiunge il tag <code>&lt;poem&gt;</code> per la formattazione dei testi poetici"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ja.json b/www/wiki/extensions/Poem/i18n/ja.json
new file mode 100644
index 00000000..bc7dd07e
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ja.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aotake",
+ "JtFuruhata",
+ "Shirayuki"
+ ]
+ },
+ "poem-desc": "詩を整形する <code>&lt;poem&gt;</code> タグを追加する"
+}
diff --git a/www/wiki/extensions/Poem/i18n/jut.json b/www/wiki/extensions/Poem/i18n/jut.json
new file mode 100644
index 00000000..ceb46c94
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/jut.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Huslåke",
+ "Jyllanj"
+ ]
+ },
+ "poem-desc": "Tilfye taggi <code>&lt;poem&gt;</code> te formatiireng å dijt"
+}
diff --git a/www/wiki/extensions/Poem/i18n/jv.json b/www/wiki/extensions/Poem/i18n/jv.json
new file mode 100644
index 00000000..015495d5
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/jv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meursault2004"
+ ]
+ },
+ "poem-desc": "Nambahaké tag <code>&lt;poem&gt;</code> tag kanggo formatting tembang utawa puisi"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ka.json b/www/wiki/extensions/Poem/i18n/ka.json
new file mode 100644
index 00000000..7915f7be
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ka.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "David1010"
+ ]
+ },
+ "poem-desc": "ამატებს ტეგს <code>&lt;პოემა&gt;</code> ლექსების ფორმატირებისათვის"
+}
diff --git a/www/wiki/extensions/Poem/i18n/km.json b/www/wiki/extensions/Poem/i18n/km.json
new file mode 100644
index 00000000..e4531936
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/km.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lovekhmer",
+ "Thearith",
+ "គីមស៊្រុន"
+ ]
+ },
+ "poem-desc": "ដាក់ស្លាក <code>&lt;poem&gt;</code> សម្រាប់ទ្រង់ទ្រាយកំណាព្យ"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ko.json b/www/wiki/extensions/Poem/i18n/ko.json
new file mode 100644
index 00000000..0720720a
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ko.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "ToePeu",
+ "아라"
+ ]
+ },
+ "poem-desc": "시 형식을 위해 <code>&lt;poem&gt;</code> 태그를 추가합니다"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ksh.json b/www/wiki/extensions/Poem/i18n/ksh.json
new file mode 100644
index 00000000..530705dc
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ksh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "poem-desc": "Brengk et <code>&lt;poem&gt;</code>-Komanndo met, för Jedeeschte un Rühmscher ze jeschtallde."
+}
diff --git a/www/wiki/extensions/Poem/i18n/lb.json b/www/wiki/extensions/Poem/i18n/lb.json
new file mode 100644
index 00000000..38348270
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/lb.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby",
+ "Les Meloures"
+ ]
+ },
+ "poem-desc": "Setzt de <code>&lt;poem&gt;</code>-Tag fir d'Formatéierung vu Gedichter derbäi"
+}
diff --git a/www/wiki/extensions/Poem/i18n/li.json b/www/wiki/extensions/Poem/i18n/li.json
new file mode 100644
index 00000000..4cd08c70
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/li.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Matthias"
+ ]
+ },
+ "poem-desc": "Voegt de tag <code>&lt;poem&gt;</code> toe veur de opmaak van poëzie"
+}
diff --git a/www/wiki/extensions/Poem/i18n/lt.json b/www/wiki/extensions/Poem/i18n/lt.json
new file mode 100644
index 00000000..6468f2cc
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/lt.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Garas",
+ "Hugo.arg"
+ ]
+ },
+ "poem-desc": "Prideda <code>&lt;poem&gt;</code> gaires poemų formatavimui"
+}
diff --git a/www/wiki/extensions/Poem/i18n/lus.json b/www/wiki/extensions/Poem/i18n/lus.json
new file mode 100644
index 00000000..8678e402
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/lus.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "RMizo"
+ ]
+ },
+ "poem-desc": "Hlahril tàrphung siamrem nan tàrreuh <code>&lt;poem&gt;</code> hi a belh."
+}
diff --git a/www/wiki/extensions/Poem/i18n/lv.json b/www/wiki/extensions/Poem/i18n/lv.json
new file mode 100644
index 00000000..b48d869a
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/lv.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Papuass",
+ "Xil"
+ ]
+ },
+ "poem-desc": "Pievieno <code>&lt;poem&gt;</code> iezīmi dzejas formatēšanai"
+}
diff --git a/www/wiki/extensions/Poem/i18n/mk.json b/www/wiki/extensions/Poem/i18n/mk.json
new file mode 100644
index 00000000..a07e5021
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/mk.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06",
+ "Brest"
+ ]
+ },
+ "poem-desc": "Додава <code>&lt;poem&gt;</code> ознака за форматирање на стихови"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ml.json b/www/wiki/extensions/Poem/i18n/ml.json
new file mode 100644
index 00000000..daf706f0
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ml.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shijualex"
+ ]
+ },
+ "poem-desc": "പദ്യത്തിന്റെ ഫോർമാറ്റിങ്ങിനു <code>&lt;poem&gt;</code> എന്ന ടാഗ് ചേർക്കുന്നു"
+}
diff --git a/www/wiki/extensions/Poem/i18n/mr.json b/www/wiki/extensions/Poem/i18n/mr.json
new file mode 100644
index 00000000..835ffc9e
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/mr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaustubh"
+ ]
+ },
+ "poem-desc": "कवितेच्या सादरीकरणासाठी आवश्यक असणारा <code>&lt;poem&gt;</code> टॅग देतो."
+}
diff --git a/www/wiki/extensions/Poem/i18n/ms.json b/www/wiki/extensions/Poem/i18n/ms.json
new file mode 100644
index 00000000..4169bb85
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ms.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aviator"
+ ]
+ },
+ "poem-desc": "Menambah tag <code>&lt;poem&gt;</code> untuk pemformatan puisi"
+}
diff --git a/www/wiki/extensions/Poem/i18n/nb.json b/www/wiki/extensions/Poem/i18n/nb.json
new file mode 100644
index 00000000..b2c1a600
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/nb.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "poem-desc": "Legger til taggen <code>&lt;poem&gt;</code> for å kunne formatere dikt"
+}
diff --git a/www/wiki/extensions/Poem/i18n/nds.json b/www/wiki/extensions/Poem/i18n/nds.json
new file mode 100644
index 00000000..5cc3fa59
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/nds.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Slomox"
+ ]
+ },
+ "poem-desc": "Föögt dat <code>&lt;poem&gt;</code>-Tag för dat Formateren vun Gedichten to"
+}
diff --git a/www/wiki/extensions/Poem/i18n/nl.json b/www/wiki/extensions/Poem/i18n/nl.json
new file mode 100644
index 00000000..c9cd9b80
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/nl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Siebrand"
+ ]
+ },
+ "poem-desc": "Voegt het label <code>&lt;poem&gt;</code> toe voor de opmaak van poëzie"
+}
diff --git a/www/wiki/extensions/Poem/i18n/nn.json b/www/wiki/extensions/Poem/i18n/nn.json
new file mode 100644
index 00000000..66476f82
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/nn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Harald Khan"
+ ]
+ },
+ "poem-desc": "Legg til merket <code>&lt;poem&gt;</code> for å kunna formatera dikt"
+}
diff --git a/www/wiki/extensions/Poem/i18n/oc.json b/www/wiki/extensions/Poem/i18n/oc.json
new file mode 100644
index 00000000..dbb22c2f
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/oc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "poem-desc": "Apond la balisa <code>&lt;poem&gt;</code> pel formatatge dels poèmas"
+}
diff --git a/www/wiki/extensions/Poem/i18n/pl.json b/www/wiki/extensions/Poem/i18n/pl.json
new file mode 100644
index 00000000..b98f774a
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/pl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sp5uhe"
+ ]
+ },
+ "poem-desc": "Dodaje znacznik <code>&lt;poem&gt;</code> służący do formatowania wierszy"
+}
diff --git a/www/wiki/extensions/Poem/i18n/pms.json b/www/wiki/extensions/Poem/i18n/pms.json
new file mode 100644
index 00000000..0e50bf81
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/pms.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dragonòt"
+ ]
+ },
+ "poem-desc": "A gionta ël tag <code>&lt;poem&gt;</code> për formatassion ëd poema"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ps.json b/www/wiki/extensions/Poem/i18n/ps.json
new file mode 100644
index 00000000..235b6e30
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ps.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "poem-desc": "د شعر بڼه ورکولو کړنې لپاره د <tt>&lt;شعر&gt;</tt> وييکه ورگډوي"
+}
diff --git a/www/wiki/extensions/Poem/i18n/pt-br.json b/www/wiki/extensions/Poem/i18n/pt-br.json
new file mode 100644
index 00000000..727589da
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/pt-br.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eduardo.mps"
+ ]
+ },
+ "poem-desc": "Adiciona a marca <code>&lt;poem&gt;</code> para formatação de poemas"
+}
diff --git a/www/wiki/extensions/Poem/i18n/pt.json b/www/wiki/extensions/Poem/i18n/pt.json
new file mode 100644
index 00000000..809b04dc
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/pt.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hamilton Abreu",
+ "Malafaya"
+ ]
+ },
+ "poem-desc": "Adiciona o elemento <code>&lt;poem&gt;</code> para formatação de poemas"
+}
diff --git a/www/wiki/extensions/Poem/i18n/qqq.json b/www/wiki/extensions/Poem/i18n/qqq.json
new file mode 100644
index 00000000..57c928f1
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/qqq.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Raymond",
+ "Umherirrender"
+ ]
+ },
+ "poem-desc": "{{desc|name=Poem|url=https://www.mediawiki.org/wiki/Extension:Poem}}"
+}
diff --git a/www/wiki/extensions/Poem/i18n/rif.json b/www/wiki/extensions/Poem/i18n/rif.json
new file mode 100644
index 00000000..5d65145c
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/rif.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aryaz"
+ ]
+ },
+ "poem-desc": "Issadaf <code>&lt;poem&gt;</code> i usmal d tira n tmdyazt"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ro.json b/www/wiki/extensions/Poem/i18n/ro.json
new file mode 100644
index 00000000..8a50de98
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ro.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mihai"
+ ]
+ },
+ "poem-desc": "Adaugă eticheta <code>&lt;poem&gt;</code> pentru formatarea poem"
+}
diff --git a/www/wiki/extensions/Poem/i18n/roa-tara.json b/www/wiki/extensions/Poem/i18n/roa-tara.json
new file mode 100644
index 00000000..30aee93c
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/roa-tara.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "poem-desc": "Aggiunge 'u tag <code>&lt;poem&gt;</code> p'a formattazione de le poesie"
+}
diff --git a/www/wiki/extensions/Poem/i18n/ru.json b/www/wiki/extensions/Poem/i18n/ru.json
new file mode 100644
index 00000000..c42305b6
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/ru.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Александр Сигачёв"
+ ]
+ },
+ "poem-desc": "Добавляет тег <code>&lt;poem&gt;</code> для форматирования стихов"
+}
diff --git a/www/wiki/extensions/Poem/i18n/rue.json b/www/wiki/extensions/Poem/i18n/rue.json
new file mode 100644
index 00000000..d8d531d8
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/rue.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazeb"
+ ]
+ },
+ "poem-desc": "Додасть значку <code>&lt;poem&gt;</code> про форматованя віршів"
+}
diff --git a/www/wiki/extensions/Poem/i18n/sah.json b/www/wiki/extensions/Poem/i18n/sah.json
new file mode 100644
index 00000000..87d510bb
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/sah.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "HalanTul"
+ ]
+ },
+ "poem-desc": "Хоһооннору суруйарга <code>&lt;poem&gt;</code> тиэги эбэр"
+}
diff --git a/www/wiki/extensions/Poem/i18n/scn.json b/www/wiki/extensions/Poem/i18n/scn.json
new file mode 100644
index 00000000..7b098a04
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/scn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Melos"
+ ]
+ },
+ "poem-desc": "Iunci lu tag <code>&lt;poem&gt;</code> pi la furmattazioni di li testa puetici"
+}
diff --git a/www/wiki/extensions/Poem/i18n/sco.json b/www/wiki/extensions/Poem/i18n/sco.json
new file mode 100644
index 00000000..fb5ae05f
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/sco.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "John Reid"
+ ]
+ },
+ "poem-desc": "Eiks <code>&lt;poem&gt;</code> tag fer poem formattin"
+}
diff --git a/www/wiki/extensions/Poem/i18n/sk.json b/www/wiki/extensions/Poem/i18n/sk.json
new file mode 100644
index 00000000..82e6d27e
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/sk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Helix84"
+ ]
+ },
+ "poem-desc": "Pridáva značku <code>&lt;poem&gt;</code> pre formátovanie básní"
+}
diff --git a/www/wiki/extensions/Poem/i18n/sl.json b/www/wiki/extensions/Poem/i18n/sl.json
new file mode 100644
index 00000000..be339f65
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/sl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dbc334"
+ ]
+ },
+ "poem-desc": "Doda etiketo <code>&lt;poem&gt;</code> za oblikovanje pesmi"
+}
diff --git a/www/wiki/extensions/Poem/i18n/sli.json b/www/wiki/extensions/Poem/i18n/sli.json
new file mode 100644
index 00000000..967d1536
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/sli.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Piotron"
+ ]
+ },
+ "poem-desc": "Fiegt is <code>&lt;poem&gt;</code>-Tag zur Furmatierung voo Gedichta hinzu"
+}
diff --git a/www/wiki/extensions/Poem/i18n/sq.json b/www/wiki/extensions/Poem/i18n/sq.json
new file mode 100644
index 00000000..aa0edc10
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/sq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Puntori"
+ ]
+ },
+ "poem-desc": "Vendosë kodin <code>&lt;poem&gt;</code> për formatim të poezive"
+}
diff --git a/www/wiki/extensions/Poem/i18n/sr-ec.json b/www/wiki/extensions/Poem/i18n/sr-ec.json
new file mode 100644
index 00000000..8b80fc33
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/sr-ec.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Millosh",
+ "Nikola Smolenski",
+ "Acamicamacaraca"
+ ]
+ },
+ "poem-desc": "Додаје <code>&lt;poem&gt;</code> ознаку за обликовање песама."
+}
diff --git a/www/wiki/extensions/Poem/i18n/sr-el.json b/www/wiki/extensions/Poem/i18n/sr-el.json
new file mode 100644
index 00000000..c09146c7
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/sr-el.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michaello"
+ ]
+ },
+ "poem-desc": "Dodaje <code>&lt;poem&gt;</code> oznaku za formatiranje pesama."
+}
diff --git a/www/wiki/extensions/Poem/i18n/stq.json b/www/wiki/extensions/Poem/i18n/stq.json
new file mode 100644
index 00000000..6a9063eb
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/stq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyt"
+ ]
+ },
+ "poem-desc": "Föiget dät <code>&lt;poem&gt;</code>-Tag tou ju Formatierenge fon Gedichte bietou"
+}
diff --git a/www/wiki/extensions/Poem/i18n/sv.json b/www/wiki/extensions/Poem/i18n/sv.json
new file mode 100644
index 00000000..366962b7
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/sv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lejonel"
+ ]
+ },
+ "poem-desc": "Lägger till taggen <code>&lt;poem&gt;</code> för att formatera dikter"
+}
diff --git a/www/wiki/extensions/Poem/i18n/te.json b/www/wiki/extensions/Poem/i18n/te.json
new file mode 100644
index 00000000..b8a9a014
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/te.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Veeven"
+ ]
+ },
+ "poem-desc": "పద్యాల ఫార్మాటింగుకై <code>&lt;poem&gt;</code> అనే టాగుని చేరుస్తుంది"
+}
diff --git a/www/wiki/extensions/Poem/i18n/tg-cyrl.json b/www/wiki/extensions/Poem/i18n/tg-cyrl.json
new file mode 100644
index 00000000..14d87ddc
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/tg-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibrahim"
+ ]
+ },
+ "poem-desc": "Барчасби <code>&lt;poem&gt;</code>-ро барои қолаббандиҳои шеърҳо илова мекунад"
+}
diff --git a/www/wiki/extensions/Poem/i18n/tg-latn.json b/www/wiki/extensions/Poem/i18n/tg-latn.json
new file mode 100644
index 00000000..797d4ad7
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/tg-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liangent"
+ ]
+ },
+ "poem-desc": "Barcasbi <code>&lt;poem&gt;</code>-ro baroi qolabbandihoi şe'rho ilova mekunad"
+}
diff --git a/www/wiki/extensions/Poem/i18n/th.json b/www/wiki/extensions/Poem/i18n/th.json
new file mode 100644
index 00000000..bb079845
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/th.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Octahedron80"
+ ]
+ },
+ "poem-desc": "เพิ่มแท็ก <code>&lt;poem&gt;</code> สำหรับการจัดรูปแบบบทกวี"
+}
diff --git a/www/wiki/extensions/Poem/i18n/tk.json b/www/wiki/extensions/Poem/i18n/tk.json
new file mode 100644
index 00000000..ce199b1f
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/tk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hanberke"
+ ]
+ },
+ "poem-desc": "Goşgy formatirlemesi üçin <code>&lt;poem&gt;</code> tegini goşýar"
+}
diff --git a/www/wiki/extensions/Poem/i18n/tl.json b/www/wiki/extensions/Poem/i18n/tl.json
new file mode 100644
index 00000000..a556e567
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/tl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "AnakngAraw"
+ ]
+ },
+ "poem-desc": "Nagdaragdag ng tatak na <code>&lt;poem&gt;</code> para sa pagpopormat ng tula"
+}
diff --git a/www/wiki/extensions/Poem/i18n/tr.json b/www/wiki/extensions/Poem/i18n/tr.json
new file mode 100644
index 00000000..55fe3459
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/tr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joseph"
+ ]
+ },
+ "poem-desc": "Şiir biçimlendirmesi için <code>&lt;poem&gt;</code> etiketini ekler"
+}
diff --git a/www/wiki/extensions/Poem/i18n/uk.json b/www/wiki/extensions/Poem/i18n/uk.json
new file mode 100644
index 00000000..fb19a0cf
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/uk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahonc"
+ ]
+ },
+ "poem-desc": "Додає тег <code>&lt;poem&gt;</code> для форматування віршів"
+}
diff --git a/www/wiki/extensions/Poem/i18n/vec.json b/www/wiki/extensions/Poem/i18n/vec.json
new file mode 100644
index 00000000..4ba70f30
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/vec.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Candalua"
+ ]
+ },
+ "poem-desc": "Zonta el tag <code>&lt;poem&gt;</code> par la formatazion dei testi poetici"
+}
diff --git a/www/wiki/extensions/Poem/i18n/vep.json b/www/wiki/extensions/Poem/i18n/vep.json
new file mode 100644
index 00000000..cce6fcd1
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/vep.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Игорь Бродский"
+ ]
+ },
+ "poem-desc": "Ližadab <code>&lt;poem&gt;</code>-virg runod formatiruides"
+}
diff --git a/www/wiki/extensions/Poem/i18n/vi.json b/www/wiki/extensions/Poem/i18n/vi.json
new file mode 100644
index 00000000..20f1b1a6
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/vi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen"
+ ]
+ },
+ "poem-desc": "Thêm thẻ <code>&lt;poem&gt;</code> để định dạng các bài thơ"
+}
diff --git a/www/wiki/extensions/Poem/i18n/vo.json b/www/wiki/extensions/Poem/i18n/vo.json
new file mode 100644
index 00000000..b6f29343
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/vo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Smeira"
+ ]
+ },
+ "poem-desc": "Läükon mali: <code>&lt;poem&gt;</code> pro fomät: poedot"
+}
diff --git a/www/wiki/extensions/Poem/i18n/yue.json b/www/wiki/extensions/Poem/i18n/yue.json
new file mode 100644
index 00000000..068beeb2
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/yue.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shinjiman"
+ ]
+ },
+ "poem-desc": "加 <code>&lt;poem&gt;</code> 標籤畀詩格式用"
+}
diff --git a/www/wiki/extensions/Poem/i18n/zh-hans.json b/www/wiki/extensions/Poem/i18n/zh-hans.json
new file mode 100644
index 00000000..b181400e
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/zh-hans.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shinjiman",
+ "Wmr89502270",
+ "Xiaomingyan",
+ "Liuxinyu970226"
+ ]
+ },
+ "poem-desc": "添加<code>&lt;poem&gt;</code>标签用于诗歌格式"
+}
diff --git a/www/wiki/extensions/Poem/i18n/zh-hant.json b/www/wiki/extensions/Poem/i18n/zh-hant.json
new file mode 100644
index 00000000..fedde731
--- /dev/null
+++ b/www/wiki/extensions/Poem/i18n/zh-hant.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shinjiman",
+ "Cwlin0416"
+ ]
+ },
+ "poem-desc": "提供 <code>&lt;poem&gt;</code> 標籤給予詩詞格式使用"
+}
diff --git a/www/wiki/extensions/Poem/includes/Poem.php b/www/wiki/extensions/Poem/includes/Poem.php
new file mode 100644
index 00000000..ac139f40
--- /dev/null
+++ b/www/wiki/extensions/Poem/includes/Poem.php
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * This class handles formatting poems in WikiText, specifically anything within
+ * <poem></poem> tags.
+ *
+ * @license CC0-1.0
+ * @author Nikola Smolenski <smolensk@eunet.yu>
+ */
+class Poem {
+ /**
+ * Bind the renderPoem function to the <poem> tag
+ * @param Parser $parser
+ */
+ public static function init( Parser $parser ) {
+ $parser->setHook( 'poem', [ self::class, 'renderPoem' ] );
+ }
+
+ /**
+ * Parse the text into proper poem format
+ * @param string|null $in The text inside the poem tag
+ * @param string[] $param
+ * @param Parser $parser
+ * @param PPFrame $frame
+ * @return string
+ */
+ public static function renderPoem( $in, array $param = [], Parser $parser, PPFrame $frame ) {
+ // using newlines in the text will cause the parser to add <p> tags,
+ // which may not be desired in some cases
+ $newline = isset( $param['compact'] ) ? '' : "\n";
+
+ $tag = $parser->insertStripItem( "<br />" );
+
+ // replace colons with indented spans
+ $text = preg_replace_callback( '/^(:+)(.+)$/m', [ self::class, 'indentVerse' ], $in );
+
+ // replace newlines with <br /> tags unless they are at the beginning or end
+ // of the poem
+ $text = preg_replace(
+ [ "/^\n/", "/\n$/D", "/\n/" ],
+ [ "", "", "$tag\n" ],
+ $text
+ );
+
+ // replace spaces at the beginning of a line with non-breaking spaces
+ $text = preg_replace_callback( '/^( +)/m', [ self::class, 'replaceSpaces' ], $text );
+
+ $text = $parser->recursiveTagParse( $text, $frame );
+
+ $attribs = Sanitizer::validateTagAttributes( $param, 'div' );
+
+ // Wrap output in a <div> with "poem" class.
+ if ( isset( $attribs['class'] ) ) {
+ $attribs['class'] = 'poem ' . $attribs['class'];
+ } else {
+ $attribs['class'] = 'poem';
+ }
+
+ return Html::rawElement( 'div', $attribs, $newline . trim( $text ) . $newline );
+ }
+
+ /**
+ * Callback for preg_replace_callback() that replaces spaces with non-breaking spaces
+ * @param string[] $m Matches from the regular expression
+ * - $m[1] consists of 1 or more spaces
+ * @return string
+ */
+ protected static function replaceSpaces( array $m ) {
+ return str_replace( ' ', '&#160;', $m[1] );
+ }
+
+ /**
+ * Callback for preg_replace_callback() that wraps content in an indented span
+ * @param string[] $m Matches from the regular expression
+ * - $m[1] consists of 1 or more colons
+ * - $m[2] consists of the text after the colons
+ * @return string
+ */
+ protected static function indentVerse( array $m ) {
+ $attribs = [
+ 'class' => 'mw-poem-indented',
+ 'style' => 'display: inline-block; margin-left: ' . strlen( $m[1] ) . 'em;'
+ ];
+ // @todo Should this really be raw?
+ return Html::rawElement( 'span', $attribs, $m[2] );
+ }
+}
diff --git a/www/wiki/extensions/Poem/install.settings b/www/wiki/extensions/Poem/install.settings
new file mode 100644
index 00000000..973dbc72
--- /dev/null
+++ b/www/wiki/extensions/Poem/install.settings
@@ -0,0 +1,2 @@
+require_once( "{{path}}/Poem.php" );
+
diff --git a/www/wiki/extensions/Poem/phpcs.xml b/www/wiki/extensions/Poem/phpcs.xml
new file mode 100644
index 00000000..90e8108a
--- /dev/null
+++ b/www/wiki/extensions/Poem/phpcs.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<ruleset>
+ <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamComment" />
+ <exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
+ </rule>
+ <file>.</file>
+ <arg name="extensions" value="php,php5,inc" />
+ <arg name="encoding" value="UTF-8" />
+</ruleset>
diff --git a/www/wiki/extensions/Poem/poemParserTests.txt b/www/wiki/extensions/Poem/poemParserTests.txt
new file mode 100644
index 00000000..266dd614
--- /dev/null
+++ b/www/wiki/extensions/Poem/poemParserTests.txt
@@ -0,0 +1,142 @@
+# Force the test runner to ensure the extension is loaded
+!! hooks
+poem
+!! endhooks
+
+#Regression tests for existing functionality, to ensure nothing was broken.
+!! test
+<poem>
+!! input
+<poem>
+this
+is
+a
+test
+</poem>
+!! result
+<div class="poem">
+<p>this<br />
+is<br />
+a<br />
+test
+</p>
+</div>
+
+!! end
+
+!!test
+ <poem> with recursive parsing
+!!input
+<poem>
+this ''is'' a '''test'''
+</poem>
+!! result
+<div class="poem">
+<p>this <i>is</i> a <b>test</b>
+</p>
+</div>
+
+!!end
+
+
+!!test
+ <poem> with leading whitespace
+!!input
+<poem>
+
+ test
+
+</poem>
+!! result
+<div class="poem">
+<p><br />
+&#160;&#160;&#160;test<br />
+</p>
+</div>
+
+!!end
+
+!!test
+Horizontal rule
+!!input
+<poem>
+some
+-----
+text
+</poem>
+!!result
+<div class="poem">
+<p>some<br />
+</p>
+<hr /><br />
+<p>text
+</p>
+</div>
+
+!!end
+
+#test for new poem/nowiki feature; should fail without new enhancement.
+!! test 2
+example of <nowiki> without <poem>
+!!options
+disabled
+!! input
+<nowiki>
+this
+is
+a
+test
+</nowiki>
+!! result
+<p>
+this
+is
+a
+test
+
+</p>
+!! end
+
+!! test
+ nested <poem><nowiki>
+!! input
+<poem><nowiki>
+this
+is
+a
+test
+</nowiki></poem>
+!! result
+<div class="poem">
+<p><br />
+this<br />
+is<br />
+a<br />
+test<br />
+
+</p>
+</div>
+
+!!end
+
+!! test 5
+ nested <poem><nowiki> with formatting
+!! input
+<poem><nowiki>
+this
+'''is'''
+a
+test
+</nowiki></poem>
+!! result
+<div class="poem">
+<p><br />
+this<br />
+'''is'''<br />
+a<br />
+test<br />
+
+</p>
+</div>
+
+!! end
diff --git a/www/wiki/extensions/Poem/tests/parser/parserTests.txt b/www/wiki/extensions/Poem/tests/parser/parserTests.txt
new file mode 100644
index 00000000..3bc95e44
--- /dev/null
+++ b/www/wiki/extensions/Poem/tests/parser/parserTests.txt
@@ -0,0 +1,162 @@
+# Force the test runner to ensure the extension is loaded
+!! hooks
+poem
+!! endhooks
+
+#Regression tests for existing functionality, to ensure nothing was broken.
+!! test
+<poem>
+!! input
+<poem>
+this
+is
+a
+test
+</poem>
+!! result
+<div class="poem">
+<p>this<br />
+is<br />
+a<br />
+test
+</p>
+</div>
+
+!! end
+
+!!test
+ <poem> with recursive parsing
+!!input
+<poem>
+this ''is'' a '''test'''
+</poem>
+!! result
+<div class="poem">
+<p>this <i>is</i> a <b>test</b>
+</p>
+</div>
+
+!!end
+
+
+!!test
+ <poem> with leading whitespace
+!!input
+<poem>
+
+ test
+
+</poem>
+!! result
+<div class="poem">
+<p><br />
+&#160;&#160;&#160;test<br />
+</p>
+</div>
+
+!!end
+
+!!test
+Horizontal rule
+!!input
+<poem>
+some
+-----
+text
+</poem>
+!!result
+<div class="poem">
+<p>some<br />
+</p>
+<hr /><br />
+<p>text
+</p>
+</div>
+
+!!end
+
+#test for new poem/nowiki feature; should fail without new enhancement.
+!! test 2
+example of <nowiki> without <poem>
+!!options
+disabled
+!! input
+<nowiki>
+this
+is
+a
+test
+</nowiki>
+!! result
+<p>
+this
+is
+a
+test
+
+</p>
+!! end
+
+!! test
+ nested <poem><nowiki>
+!! input
+<poem><nowiki>
+this
+is
+a
+test
+</nowiki></poem>
+!! result
+<div class="poem">
+<p><br />
+this<br />
+is<br />
+a<br />
+test<br />
+
+</p>
+</div>
+
+!!end
+
+!! test 5
+ nested <poem><nowiki> with formatting
+!! input
+<poem><nowiki>
+this
+'''is'''
+a
+test
+</nowiki></poem>
+!! result
+<div class="poem">
+<p><br />
+this<br />
+'''is'''<br />
+a<br />
+test<br />
+
+</p>
+</div>
+
+!! end
+
+!! test
+Basic <poem> usage with style
+!! input
+<poem style="border: 2px solid #d6d2c5; background-color: #f9f4e6; padding: 1em;">
+A stately pleasure-dome decree:
+Where Alph, the sacred river, ran
+Through caverns measureless to man
+Down to a sunless sea.
+</poem>
+!! result
+<div style="border: 2px solid #d6d2c5; background-color: #f9f4e6; padding: 1em;" class="poem">
+<p>A stately pleasure-dome decree:<br />
+Where Alph, the sacred river, ran<br />
+Through caverns measureless to man<br />
+Down to a sunless sea.
+</p>
+</div>
+
+!! end
diff --git a/www/wiki/extensions/Poem/tests/phan/config.php b/www/wiki/extensions/Poem/tests/phan/config.php
new file mode 100644
index 00000000..f2660b8a
--- /dev/null
+++ b/www/wiki/extensions/Poem/tests/phan/config.php
@@ -0,0 +1,3 @@
+<?php
+
+return require __DIR__ . '/../../vendor/mediawiki/mediawiki-phan-config/src/config.php';