summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Evans <grknight@gentoo.org>2018-12-20 10:54:58 -0500
committerBrian Evans <grknight@gentoo.org>2018-12-20 10:54:58 -0500
commite8c28f1b9df13f9cca5a6f5125b75ccff4f164ba (patch)
tree7535ff01e954a0e98fb8b945ae77b28d5e1a1771
parentCommentStreams: backport enable tag code (diff)
downloadextensions-e8c28f1b9df13f9cca5a6f5125b75ccff4f164ba.tar.gz
extensions-e8c28f1b9df13f9cca5a6f5125b75ccff4f164ba.tar.bz2
extensions-e8c28f1b9df13f9cca5a6f5125b75ccff4f164ba.zip
CommentStreams: Update to 4.5
Signed-off-by: Brian Evans <grknight@gentoo.org>
-rw-r--r--CommentStreams/.gitignore3
-rw-r--r--CommentStreams/.phpcs.xml7
-rw-r--r--CommentStreams/composer.json21
-rw-r--r--CommentStreams/extension.json16
-rw-r--r--CommentStreams/gitinfo.json1
-rw-r--r--CommentStreams/i18n/ar.json158
-rw-r--r--CommentStreams/i18n/as.json8
-rw-r--r--CommentStreams/i18n/ast.json35
-rw-r--r--CommentStreams/i18n/az.json8
-rw-r--r--CommentStreams/i18n/bn.json51
-rw-r--r--CommentStreams/i18n/br.json8
-rw-r--r--CommentStreams/i18n/ca.json10
-rw-r--r--CommentStreams/i18n/ce.json9
-rw-r--r--CommentStreams/i18n/cs.json10
-rw-r--r--CommentStreams/i18n/de.json119
-rw-r--r--CommentStreams/i18n/el.json33
-rw-r--r--CommentStreams/i18n/en.json14
-rw-r--r--CommentStreams/i18n/es.json72
-rw-r--r--CommentStreams/i18n/fa.json10
-rw-r--r--CommentStreams/i18n/fi.json10
-rw-r--r--CommentStreams/i18n/fr.json158
-rw-r--r--CommentStreams/i18n/gl.json69
-rw-r--r--CommentStreams/i18n/got.json10
-rw-r--r--CommentStreams/i18n/he.json157
-rw-r--r--CommentStreams/i18n/hi.json14
-rw-r--r--CommentStreams/i18n/hu.json8
-rw-r--r--CommentStreams/i18n/hy.json22
-rw-r--r--CommentStreams/i18n/ia.json9
-rw-r--r--CommentStreams/i18n/ig.json11
-rw-r--r--CommentStreams/i18n/it.json29
-rw-r--r--CommentStreams/i18n/ja.json71
-rw-r--r--CommentStreams/i18n/jv.json26
-rw-r--r--CommentStreams/i18n/ko.json118
-rw-r--r--CommentStreams/i18n/ku-latn.json17
-rw-r--r--CommentStreams/i18n/lb.json53
-rw-r--r--CommentStreams/i18n/lv.json24
-rw-r--r--CommentStreams/i18n/mk.json131
-rw-r--r--CommentStreams/i18n/nb.json98
-rw-r--r--CommentStreams/i18n/nl.json37
-rw-r--r--CommentStreams/i18n/pl.json49
-rw-r--r--CommentStreams/i18n/ps.json9
-rw-r--r--CommentStreams/i18n/pt-br.json157
-rw-r--r--CommentStreams/i18n/pt.json158
-rw-r--r--CommentStreams/i18n/qqq.json62
-rw-r--r--CommentStreams/i18n/roa-tara.json10
-rw-r--r--CommentStreams/i18n/ru.json22
-rw-r--r--CommentStreams/i18n/sa.json9
-rw-r--r--CommentStreams/i18n/sat.json21
-rw-r--r--CommentStreams/i18n/sd.json28
-rw-r--r--CommentStreams/i18n/sk.json8
-rw-r--r--CommentStreams/i18n/skr-arab.json34
-rw-r--r--CommentStreams/i18n/sq.json10
-rw-r--r--CommentStreams/i18n/sv.json158
-rw-r--r--CommentStreams/i18n/tet.json10
-rw-r--r--CommentStreams/i18n/tg-cyrl.json14
-rw-r--r--CommentStreams/i18n/tr.json8
-rw-r--r--CommentStreams/i18n/ug-arab.json10
-rw-r--r--CommentStreams/i18n/uk.json156
-rw-r--r--CommentStreams/i18n/ur.json9
-rw-r--r--CommentStreams/i18n/yi.json8
-rw-r--r--CommentStreams/i18n/zh-hans.json158
-rw-r--r--CommentStreams/i18n/zh-hant.json158
-rw-r--r--CommentStreams/includes/ApiCSBase.php6
-rw-r--r--CommentStreams/includes/ApiCSDeleteComment.php8
-rw-r--r--CommentStreams/includes/ApiCSEditComment.php4
-rw-r--r--CommentStreams/includes/ApiCSPostComment.php12
-rw-r--r--CommentStreams/includes/Comment.php198
-rw-r--r--CommentStreams/includes/CommentStreams.php68
-rw-r--r--CommentStreams/includes/CommentStreamsAllComments.alias.php15
-rw-r--r--CommentStreams/includes/CommentStreamsAllComments.php77
-rw-r--r--CommentStreams/includes/CommentStreamsHooks.php63
-rw-r--r--CommentStreams/includes/CommentStreamsUtils.php39
-rw-r--r--CommentStreams/includes/EchoCSPresentationModel.php21
-rw-r--r--CommentStreams/resources/CommentStreams.css27
-rw-r--r--CommentStreams/resources/CommentStreams.js380
-rw-r--r--CommentStreams/sql/commentData.sql15
-rw-r--r--CommentStreams/sql/dropForeignKey1.sql2
-rw-r--r--CommentStreams/sql/dropForeignKey2.sql2
-rw-r--r--CommentStreams/sql/updateFieldNames.sql9
-rw-r--r--CommentStreams/sql/votes.sql10
-rw-r--r--CommentStreams/sql/watch.sql8
-rw-r--r--CommentStreams/version4
82 files changed, 3551 insertions, 348 deletions
diff --git a/CommentStreams/.gitignore b/CommentStreams/.gitignore
index a7abe44f..994b50f7 100644
--- a/CommentStreams/.gitignore
+++ b/CommentStreams/.gitignore
@@ -1,3 +1,4 @@
node_modules/
vendor/
-
+composer.lock
+package-lock.json
diff --git a/CommentStreams/.phpcs.xml b/CommentStreams/.phpcs.xml
new file mode 100644
index 00000000..3839d784
--- /dev/null
+++ b/CommentStreams/.phpcs.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<ruleset>
+ <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki" />
+ <file>.</file>
+ <arg name="extensions" value="php,php5,inc" />
+ <arg name="encoding" value="UTF-8" />
+</ruleset>
diff --git a/CommentStreams/composer.json b/CommentStreams/composer.json
new file mode 100644
index 00000000..104cbaef
--- /dev/null
+++ b/CommentStreams/composer.json
@@ -0,0 +1,21 @@
+{
+ "name": "mediawiki/comment-streams",
+ "type": "mediawiki-extension",
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "1.0.0",
+ "jakub-onderka/php-console-highlighter": "0.3.2",
+ "mediawiki/mediawiki-codesniffer": "20.0.0",
+ "mediawiki/minus-x": "0.3.1"
+ },
+ "scripts": {
+ "test": [
+ "parallel-lint . --exclude vendor --exclude node_modules",
+ "phpcs -p -s",
+ "minus-x check ."
+ ],
+ "fix": [
+ "phpcbf",
+ "minus-x fix ."
+ ]
+ }
+}
diff --git a/CommentStreams/extension.json b/CommentStreams/extension.json
index 7df4da33..75048583 100644
--- a/CommentStreams/extension.json
+++ b/CommentStreams/extension.json
@@ -1,9 +1,9 @@
{
"name": "CommentStreams",
- "version": "3.9",
+ "version": "4.5",
"author": [
- "[http://www.mediawiki.org/wiki/User:Jji Jason Ji]",
- "[http://www.mediawiki.org/wiki/User:Cindy.cicalese Cindy Cicalese]"
+ "[https://www.mediawiki.org/wiki/User:Jji Jason Ji]",
+ "[https://www.mediawiki.org/wiki/User:Cindy.cicalese Cindy Cicalese]"
],
"url": "https://www.mediawiki.org/wiki/Extension:CommentStreams",
"descriptionmsg": "commentstreams-desc",
@@ -33,7 +33,6 @@
"dependencies": [
"oojs-ui"
],
- "position": "top",
"targets": [
"desktop",
"mobile"
@@ -67,6 +66,8 @@
"commentstreams-api-error-unwatch",
"commentstreams-validation-error-nocommenttitle",
"commentstreams-validation-error-nocommenttext",
+ "commentstreams-buttontext-add",
+ "commentstreams-buttontext-reply",
"commentstreams-buttontooltip-add",
"commentstreams-buttontooltip-reply",
"commentstreams-buttontooltip-edit",
@@ -83,7 +84,9 @@
"commentstreams-buttontooltip-submit",
"commentstreams-buttontooltip-cancel",
"commentstreams-dialog-delete-message",
+ "commentstreams-dialog-anonymous-message",
"commentstreams-dialog-buttontext-ok",
+ "commentstreams-dialog-buttontext-cancel",
"commentstreams-dialog-buttontext-yes",
"commentstreams-dialog-buttontext-no",
"commentstreams-urldialog-instructions",
@@ -91,7 +94,8 @@
"commentstreams-datetext-lasteditedon",
"commentstreams-datetext-moderated",
"commentstreams-title-field-placeholder",
- "commentstreams-body-field-placeholder"
+ "commentstreams-body-field-placeholder",
+ "commentstreams-ve-conversion-error"
]
},
"ext.CommentStreamsAllComments": {
@@ -110,6 +114,7 @@
},
"AutoloadClasses": {
"CommentStreamsHooks": "includes/CommentStreamsHooks.php",
+ "CommentStreamsUtils": "includes/CommentStreamsUtils.php",
"CommentStreams": "includes/CommentStreams.php",
"Comment": "includes/Comment.php",
"ApiCSBase": "includes/ApiCSBase.php",
@@ -152,6 +157,7 @@
"CommentStreamsEnableTalk": false,
"CommentStreamsNewestStreamsOnTop": true,
"CommentStreamsModeratorFastDelete": false,
+ "CommentStreamsShowLabels": true,
"CommentStreamsEnableVoting": false,
"CommentStreamsInitiallyCollapsedNamespaces" : [],
"CommentStreamsUserRealNamePropertyName" : null,
diff --git a/CommentStreams/gitinfo.json b/CommentStreams/gitinfo.json
deleted file mode 100644
index 5eefb7ec..00000000
--- a/CommentStreams/gitinfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"headSHA1": "08aec406a1dd80fce03133e93c07656a16f26437\n", "head": "08aec406a1dd80fce03133e93c07656a16f26437\n", "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/extensions/CommentStreams", "branch": "08aec406a1dd80fce03133e93c07656a16f26437\n", "headCommitDate": "1504900131"} \ No newline at end of file
diff --git a/CommentStreams/i18n/ar.json b/CommentStreams/i18n/ar.json
new file mode 100644
index 00000000..64585be3
--- /dev/null
+++ b/CommentStreams/i18n/ar.json
@@ -0,0 +1,158 @@
+{
+ "@metadata": {
+ "authors": [
+ "محمد أحمد عبد الفتاح",
+ "ديفيد"
+ ]
+ },
+ "commentstreams-desc": "يسمح بالتعليق على صفحات الويكي",
+ "commentstreams-error-prohibitedaction": "جراء $1 غير مسموح به في صفحات التعليقات.",
+ "commentstreams-error-comment-on-deleted-page": "الصفحة التي يرتبط بها هذا التعليق تم حذفها.",
+ "commentstreams-author-anonymous": "مجهول",
+ "apihelp-csQueryComment-description": "أعد العنوان، والمستخدم والطابع الزمني للإنشاء ونص الويكي للتعليق، يجب توفير إما معرف أو عنوان الصفحة.",
+ "apihelp-csQueryComment-summary": "أعد العنوان، والمستخدم والطابع الزمني للإنشاء ونص الويكي للتعليق، يجب توفير إما معرف أو عنوان الصفحة.",
+ "apihelp-csQueryComment-param-pageid": "معرف الصفحة للصفحة التي تحمل التعليق للاستعلام",
+ "apihelp-csQueryComment-param-title": "عنوان الصفحة للصفحة التي تحمل التعليق للاستعلام",
+ "apihelp-csQueryComment-pageid-example": "تعليق الاستعلام بمعرف الصفحة 3 في نص الويكي",
+ "apihelp-csQueryComment-title-example": "تعليق الاستعلام بعنوان الصفحة CommentStreams:3 في نص الويكي",
+ "apihelp-csDeleteComment-description": "احذف تعليقا، يجب توفير إما معرف أو عنوان الصفحة.",
+ "apihelp-csDeleteComment-summary": "احذف تعليقا، يجب توفير إما معرف أو عنوان الصفحة.",
+ "apihelp-csDeleteComment-param-pageid": "معرف الصفحة للصفحة التي تحمل التعليق لحذفه",
+ "apihelp-csDeleteComment-param-title": "معرف الصفحة للصفحة التي تحمل التعليق لحذفه",
+ "apihelp-csDeleteComment-pageid-example": "حذف التعليق بمعرف الصفحة 3",
+ "apihelp-csDeleteComment-title-example": "حذف التعليق بعنوان الصفحة CommentStreams:3",
+ "apihelp-csPostComment-description": "انشر تعليقا جديدا.",
+ "apihelp-csPostComment-summary": "انشر تعليقا جديدا.",
+ "apihelp-csPostComment-param-commenttitle": "عنوان اختياري للتعليق.",
+ "apihelp-csPostComment-param-wikitext": "نص الويكي للتعليق.",
+ "apihelp-csPostComment-param-associatedid": "الصفحة التي يرتبط بها هذا التعليق.",
+ "apihelp-csPostComment-param-parentid": "معرف الصفحة للتعليق الأصلي إذا كان هذا ردا.",
+ "apihelp-csEditComment-description": "تحرير تعليق موجود; يجب توفير إما معرف أو عنوان الصفحة.",
+ "apihelp-csEditComment-summary": "تحرير تعليق موجود; يجب توفير إما معرف أو عنوان الصفحة.",
+ "apihelp-csEditComment-param-pageid": "معرف الصفحة للصفحة التي تحمل التعليق للتعديل",
+ "apihelp-csEditComment-param-title": "عنوان الصفحة للصفحة التي تحمل التعليق للتعديل",
+ "apihelp-csEditComment-param-commenttitle": "عنوان اختياري للتعليق.",
+ "apihelp-csEditComment-param-wikitext": "نص الويكي للتعليق",
+ "apihelp-csVote-description": "التصويت (أعلى أو أسفل أو محايد) على تعليق.",
+ "apihelp-csVote-summary": "التصويت (أعلى أو أسفل أو محايد) على تعليق.",
+ "apihelp-csVote-param-pageid": "معرف الصفحة للصفحة التي تحمل التعليق ليتم التصويت فييها",
+ "apihelp-csVote-param-title": "عنوان الصفحة للصفحة التي تحمل التعليق ليتم التصويت فييها",
+ "apihelp-csVote-param-vote": "صوت (1 أو -1 أو 0).",
+ "apihelp-csVote-pageid-example": "التصويت على التعليق بمعرف الصفحة 3",
+ "apihelp-csVote-title-example": "التصويت على التعليق بعنوان الصفحة CommentStreams: 3",
+ "apihelp-csWatch-description": "راقب تعليقا ليتم إخطارك عندما يتلقى ردودا",
+ "apihelp-csWatch-summary": "راقب تعليقا ليتم إخطارك عندما يتلقى ردودا",
+ "apihelp-csWatch-param-pageid": "معرف الصفحة للصفحة التي تحمل التعليق المراد مراقبته",
+ "apihelp-csWatch-param-title": "عنوان الصفحة للصفحة التي تحمل التعليق المراد مراقبته",
+ "apihelp-csWatch-pageid-example": "مراقبة تعليق بمعرف الصفحة 3",
+ "apihelp-csWatch-title-example": "مراقبة تعليق بعنوان الصفحة CommentStreams: 3",
+ "apihelp-csUnwatch-description": "عدم مراقبة تعليق لكي لا يتم إخطارك عندما يتلقى ردودا",
+ "apihelp-csUnwatch-summary": "عدم مراقبة تعليق لكي لا يتم إخطارك عندما يتلقى ردودا",
+ "apihelp-csUnwatch-param-pageid": "عنوان الصفحة للصفحة التي تحمل التعليق المراد عدم مراقبته",
+ "apihelp-csUnwatch-param-title": "عنوان الصفحة للصفحة التي تحمل التعليق المراد عدم مراقبته",
+ "apihelp-csUnwatch-pageid-example": "عدم مراقبة تعليق بمعرف الصفحة 3",
+ "apihelp-csUnwatch-title-example": "عدم مراقبة تعليق بعنوان الصفحة CommentStreams: 3",
+ "commentstreams-api-error-notloggedin": "يجب أن تكون مسجلا.",
+ "commentstreams-api-error-commentnotfound": "لم يتم العثور على التعليق المطلوب.",
+ "commentstreams-api-error-notacomment": "لا يشير معرف الصفحة الذي تم توفيره إلى تعليق صالح.",
+ "commentstreams-api-error-missingcommenttitle": "يجب توفير عنوان تعليق للتعليقات التي ليست ردودا.",
+ "commentstreams-api-error-post-permissions": "لا يمتلك المستخدم صلاحية بنشر تعليق.",
+ "commentstreams-api-error-post-parentandtitle": "لا يجوز لك تحديد كل من معرف الأصل وعنوان التعليق.",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "التعليق الذي يتم الرد عليه غير موجود.",
+ "commentstreams-api-error-post-associatedpageidmismatch": "الصفحة التي يتم التعليق عليها لا تتطابق مع الصفحة التي يعلق عليها التعليق الأصي.",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "الصفحة التي يتم التعليق عليها غير موجودة.",
+ "commentstreams-api-error-post": "خطأ في إضافة تعليق.",
+ "commentstreams-api-error-edit-notloggedin": "يجب أن تكون مسجلا للتعديل.",
+ "commentstreams-api-error-edit-permissions": "لا يمتلك المستخدم صلاحية لتعديل التعليق.",
+ "commentstreams-api-error-edit": "خطأ في تحرير التعليق.",
+ "commentstreams-api-error-delete-notloggedin": "يجب عليك تسجيل الدخول لحذف.",
+ "commentstreams-api-error-delete-permissions": "لا يمتلك المستخدم صلاحية بحذف التعليق.",
+ "commentstreams-api-error-delete-haschildren": "لا يمكن حذف موضوع يحتوي على ردود; يُرجَى تحديث الصفحة للاطلاع على مجموعة التعليقات المحدثة.",
+ "commentstreams-api-error-delete": "خطأ في حذف التعليق.",
+ "commentstreams-api-error-vote-notloggedin": "يجب عليك تسجيل الدخول للتصويت.",
+ "commentstreams-api-error-vote-novoteonreply": "التصويت على الردود غير مسموح به.",
+ "commentstreams-api-error-vote": "خطأ في التصويت على التعليق.",
+ "commentstreams-api-error-watch-notloggedin": "يجب عليك تسجيل الدخول لمراقبة تعليق.",
+ "commentstreams-api-error-watch-nowatchreply": "غير مسموح بمراقبة الردود.",
+ "commentstreams-api-error-watch": "خطأ في مراقبة التعليق.",
+ "commentstreams-api-error-unwatch-notloggedin": "يجب عليك تسجيل الدخول لعدم مراقبة تعليق.",
+ "commentstreams-api-error-unwatch-nounwatchreply": "غير مسموح بالردود غير المراقبة.",
+ "commentstreams-api-error-unwatch": "خطأ في عدم مراقبة التعليق.",
+ "commentstreams-validation-error-nocommenttitle": "يجب عليك إدخال عنوان تعليق.",
+ "commentstreams-validation-error-nocommenttext": "يجب عليك إدخال نص التعليق.",
+ "commentstreams-buttontext-add": "أضف تعليقا",
+ "commentstreams-buttontext-reply": "الرد",
+ "commentstreams-buttontooltip-add": "إضافة تعليق",
+ "commentstreams-buttontooltip-reply": "الرد",
+ "commentstreams-buttontooltip-edit": "تعديل",
+ "commentstreams-buttontooltip-moderator-edit": "تحرير مشرف",
+ "commentstreams-buttontooltip-delete": "حذف",
+ "commentstreams-buttontooltip-moderator-delete": "حذف مشرف",
+ "commentstreams-buttontooltip-permalink": "وصلة دائمة",
+ "commentstreams-buttontooltip-collapse": "أخفِ",
+ "commentstreams-buttontooltip-expand": "وسع",
+ "commentstreams-buttontooltip-upvote": "التصويت لأعلى",
+ "commentstreams-buttontooltip-downvote": "التصويت لأسفل",
+ "commentstreams-buttontooltip-watch": "راقب",
+ "commentstreams-buttontooltip-unwatch": "أوقف المراقبة",
+ "commentstreams-buttontooltip-submit": "إرسال",
+ "commentstreams-buttontooltip-cancel": "إلغاء",
+ "commentstreams-dialog-delete-message": "هل أنت متأكد أنك تريد حذف هذا التعليق؟",
+ "commentstreams-dialog-anonymous-message": "لم تقم بتسجيل الدخول; إذا تابعت حفظ هذا التعليق، فسيتم تسجيل عنوان الآيبي الخاص بك، ولن تتمكن من تحرير هذا التعليق أو حذفه.",
+ "commentstreams-dialog-buttontext-ok": "موافق",
+ "commentstreams-dialog-buttontext-cancel": "إلغاء",
+ "commentstreams-dialog-buttontext-yes": "نعم",
+ "commentstreams-dialog-buttontext-no": "لا",
+ "commentstreams-urldialog-instructions": "انسخ المسار أدناه والصقه لمشاركة الرابط الثابت مع هذا التعليق.، اضغط على الهروب لإغلاق مربع الحوار هذا.",
+ "commentstreams-datetext-postedon": "نُشِر في",
+ "commentstreams-datetext-lasteditedon": "آخر تعديل في",
+ "commentstreams-datetext-moderated": "الإشراف",
+ "commentstreams-title-field-placeholder": "أدخل العنوان...",
+ "commentstreams-body-field-placeholder": "أدخل نص التعليق الجديد...",
+ "echo-category-title-commentstreams-notification-category": "التعليقات والردود الجديدة",
+ "notification-header-commentstreams-comment-on-watched-page": "$1 {{GENDER:$4|علق}} \"<i>$2</i>\" على صفحة \"<i>$3</i>\"، التي {{GENDER:$6|تراقبها}}.",
+ "notification-header-commentstreams-reply-on-watched-page": "$1 {{GENDER:$4|رد}} to comment \"<i>$2</i>\" على صفحة \"<i>$3</i>\"، التي {{GENDER:$6|تراقبها}}.",
+ "notification-header-commentstreams-reply-to-watched-comment": "$1 {{GENDER:$4|رد}} \"<i>$2</i>\" على صفحة \"<i>$3</i>\"، التي {{GENDER:$6|تراقبها}}، في صفحة \"<i>$3</i>\".",
+ "notification-subject-commentstreams-comment-on-watched-page": "علق شخص ما على صفحة تراقبها",
+ "notification-subject-commentstreams-reply-on-watched-page": "علق شخص ما على تعليق في صفحة تراقبها",
+ "notification-subject-commentstreams-reply-to-watched-comment": "رد شخص ما على تعليق تراقبه",
+ "notification-body-commentstreams-comment-on-watched-page": "التعليق هو:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "الرد هو:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "الرد هو:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "زيارة التعليق",
+ "notification-link-label-commentstreams-reply-on-watched-page": "زيارة الرد",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "زيارة الرد",
+ "group-csmoderator": "المراقبون (CommentStreams)",
+ "group-csmoderator-member": "{{GENDER:$1|مراقب (CommentStreams)|مراقبة (CommentStreams)}}",
+ "grouppage-csmoderator": "{{ns:project}}:مراقبون (CommentStreams)",
+ "right-cs-comment": "نشر وتعديل وحذف تعليقات المستخدم الخاصة",
+ "action-cs-comment": "نشر أو تعديل أو حذف التعليقات",
+ "right-cs-moderator-edit": "تحرير التعليقات من قبل أي مستخدم",
+ "action-cs-moderator-edit": "تحرير التعليقات من قبل المستخدمين الآخرين",
+ "right-cs-moderator-delete": "حذف التعليقات من قبل أي مستخدم",
+ "action-cs-moderator-delete": "حذف التعليقات من قبل المستخدمين الآخرين",
+ "log-name-commentstreams": "سجل تيارات التعليق",
+ "log-description-commentstreams": "تتبع هذه الأحداث عند حدوث أحداث تيارات التعليق.",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|أنشأ|أنشأت}} التعليق $3",
+ "logentry-commentstreams-reply-create": "$1 {{GENDER:$2|أنشأ|أنشأت}} الرد $3",
+ "logentry-commentstreams-comment-edit": "$1 {{GENDER:$2|عدل|عدلت}} التعليق $3",
+ "logentry-commentstreams-comment-moderator-edit": "$1 {{GENDER:$2|(مشرف) عدل|(مشرفة) عدلت}} التعليق $3",
+ "logentry-commentstreams-reply-edit": "$1 {{GENDER:$2|عدل|عدلت}} الرد $3",
+ "logentry-commentstreams-reply-moderator-edit": "$1 {{GENDER:$2|(مشرف) عدل|(مشرفة) عدلت}} الرد $3",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|حذف|حذفت}} التعليق $3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|(مشرف) حذف|(مشرفة) حذفت}} التعليق $3",
+ "logentry-commentstreams-reply-delete": "$1 {{GENDER:$2|حذف|حذفت}} الرد $3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|(مشرف) حذف|(مشرفة) حذفت}} الرد $3",
+ "commentstreamsallcomments": "كل التعليقات",
+ "commentstreams-allcomments-nocommentsfound": "لا توجد تعليقات.",
+ "commentstreams-allcomments-label-page": "صفحة التعليق",
+ "commentstreams-allcomments-label-associatedpage": "الصفحة المرتبطة",
+ "commentstreams-allcomments-label-commenttitle": "عنوان التعليق",
+ "commentstreams-allcomments-label-wikitext": " التعليق",
+ "commentstreams-allcomments-label-author": "المؤلف",
+ "commentstreams-allcomments-label-created": "أُنشِئت",
+ "commentstreams-allcomments-label-lasteditor": "آخر محرر",
+ "commentstreams-allcomments-label-lastedited": "آخر تعديل",
+ "commentstreams-allcomments-button-next": "التالي",
+ "commentstreams-allcomments-button-previous": "السابق"
+}
diff --git a/CommentStreams/i18n/as.json b/CommentStreams/i18n/as.json
new file mode 100644
index 00000000..047791e0
--- /dev/null
+++ b/CommentStreams/i18n/as.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sagsag"
+ ]
+ },
+ "commentstreams-buttontext-reply": "সঁহাৰি জনাওক"
+}
diff --git a/CommentStreams/i18n/ast.json b/CommentStreams/i18n/ast.json
new file mode 100644
index 00000000..b3bf6b3d
--- /dev/null
+++ b/CommentStreams/i18n/ast.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xuacu"
+ ]
+ },
+ "commentstreams-desc": "Permite facer comentarios nes páxines de la wiki",
+ "commentstreams-error-prohibitedaction": "L'aición $1 nun se permite nes páxines de comentarios.",
+ "commentstreams-error-comment-on-deleted-page": "La páxina cola que ta asociáu esti comentariu desanicióse.",
+ "commentstreams-author-anonymous": "anónimu",
+ "apihelp-csQueryComment-description": "Devuelve'l títulu. usuariu, hora de creación y testu wiki d'un comentariu. Tien de dase l'identificador de páxina o'l títulu.",
+ "apihelp-csQueryComment-summary": "Devuelve'l títulu. usuariu, hora de creación y testu wiki d'un comentariu. Tien de dase l'identificador de páxina o'l títulu.",
+ "apihelp-csQueryComment-param-pageid": "identificador de la páxina que tien el comentariu a consultar",
+ "apihelp-csQueryComment-param-title": "títulu de la páxina que tien el comentariu a consultar",
+ "apihelp-csQueryComment-pageid-example": "consultar el comentariu con identificador de páxina 3 en testu wiki",
+ "apihelp-csQueryComment-title-example": "consultar el comentariu con títulu de páxina CommentStreams:3 en testu wiki",
+ "apihelp-csDeleteComment-description": "Desaniciar un comentariu. Tien de dase l'identificador de páxina o'l títulu.",
+ "apihelp-csDeleteComment-summary": "Desaniciar un comentariu. Tien de dase l'identificador de páxina o'l títulu.",
+ "apihelp-csDeleteComment-param-pageid": "identificador de la páxina que tien el comentariu a desaniciar",
+ "apihelp-csDeleteComment-param-title": "títulu de la páxina que tien el comentariu a desaniciar",
+ "apihelp-csDeleteComment-pageid-example": "desaniciar el comentariu con identificador de páxina 3",
+ "apihelp-csDeleteComment-title-example": "desaniciar el comentariu con títulu de páxina CommentStreams:3",
+ "apihelp-csPostComment-description": "Publicar un comentariu nuevu.",
+ "apihelp-csPostComment-summary": "Publicar un comentariu nuevu.",
+ "apihelp-csPostComment-param-commenttitle": "títulu opcional pal comentariu.",
+ "apihelp-csPostComment-param-wikitext": "testu wiki pal comentariu.",
+ "apihelp-csPostComment-param-associatedid": "páxina cola que ta asociáu esti comentariu",
+ "apihelp-csPostComment-param-parentid": "identificador de la páxina del comentariu padre, si ye una respuesta.",
+ "apihelp-csEditComment-description": "Editar un comentariu esistiente. Tien de dase l'identificador de páxina o'l títulu.",
+ "apihelp-csEditComment-summary": "Editar un comentariu esistiente. Tien de dase l'identificador de páxina o'l títulu.",
+ "apihelp-csEditComment-param-pageid": "identificador de la páxina que tien el comentariu a editar",
+ "apihelp-csEditComment-param-title": "títulu de la páxina que tien el comentariu a editar",
+ "apihelp-csEditComment-param-commenttitle": "títulu opcional pal comentariu.",
+ "apihelp-csEditComment-param-wikitext": "testu wiki pal comentariu."
+}
diff --git a/CommentStreams/i18n/az.json b/CommentStreams/i18n/az.json
new file mode 100644
index 00000000..8566f494
--- /dev/null
+++ b/CommentStreams/i18n/az.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wertuose"
+ ]
+ },
+ "commentstreams-buttontooltip-edit": "redaktə"
+}
diff --git a/CommentStreams/i18n/bn.json b/CommentStreams/i18n/bn.json
new file mode 100644
index 00000000..bc294d6c
--- /dev/null
+++ b/CommentStreams/i18n/bn.json
@@ -0,0 +1,51 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftabuzzaman",
+ "আফতাবুজ্জামান"
+ ]
+ },
+ "commentstreams-desc": "উইকি পাতাগুলিতে মন্তব্য করতে দেয়",
+ "commentstreams-error-prohibitedaction": "মন্তব্যের পাতায় $1 কর্ম অনুমোদিত নয়।",
+ "commentstreams-author-anonymous": "নামহীন",
+ "apihelp-csVote-param-vote": "ভোট (1, -1, বা 0)।",
+ "commentstreams-api-error-delete": "মন্তব্য অপসারণের সময় ত্রুটি।",
+ "commentstreams-api-error-vote-notloggedin": "ভোট দিতে হলে আপনাকে অবশ্যই প্রবেশ করতে হবে।",
+ "commentstreams-buttontext-add": "একটি মন্তব্য যোগ করুন",
+ "commentstreams-buttontext-reply": "উত্তর দিন",
+ "commentstreams-buttontooltip-add": "একটি মন্তব্য যোগ করুন",
+ "commentstreams-buttontooltip-reply": "প্রত্যুত্তর",
+ "commentstreams-buttontooltip-edit": "সম্পাদনা",
+ "commentstreams-buttontooltip-delete": "অপসারণ",
+ "commentstreams-buttontooltip-permalink": "স্থায়ী সংযোগ",
+ "commentstreams-buttontooltip-collapse": "সংকোচন",
+ "commentstreams-buttontooltip-expand": "প্রসারণ",
+ "commentstreams-buttontooltip-watch": "নজর রাখুন",
+ "commentstreams-buttontooltip-unwatch": "নজর সরিয়ে নিন",
+ "commentstreams-buttontooltip-submit": "জমা দিন",
+ "commentstreams-buttontooltip-cancel": "বাতিল",
+ "commentstreams-dialog-buttontext-ok": "ঠিক আছে",
+ "commentstreams-dialog-buttontext-cancel": "বাতিল",
+ "commentstreams-dialog-buttontext-yes": "হ্যাঁ",
+ "commentstreams-dialog-buttontext-no": "না",
+ "commentstreams-title-field-placeholder": "শিরোনাম লিখুন...",
+ "notification-body-commentstreams-comment-on-watched-page": "মন্তব্যটি হল:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "উত্তরটি হল:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "উত্তরটি হল:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "মন্তব্য দেখুন",
+ "notification-link-label-commentstreams-reply-on-watched-page": "উত্তর দেখুন",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "উত্তর দেখুন",
+ "action-cs-moderator-delete": "অন্যান্য ব্যবহারকারীদের মন্তব্য অপসারণ করার",
+ "commentstreamsallcomments": "সকল মন্তব্য",
+ "commentstreams-allcomments-nocommentsfound": "কোন মন্তব্য পাওয়া যায়নি।",
+ "commentstreams-allcomments-label-page": "মন্তব্যের পাতা",
+ "commentstreams-allcomments-label-associatedpage": "সংযুক্ত পাতা",
+ "commentstreams-allcomments-label-commenttitle": "মন্তব্যের শিরোনাম",
+ "commentstreams-allcomments-label-wikitext": "মন্তব্য",
+ "commentstreams-allcomments-label-author": "লেখক",
+ "commentstreams-allcomments-label-created": "তৈরি হয়েছে",
+ "commentstreams-allcomments-label-lasteditor": "সর্বশেষ সম্পাদক",
+ "commentstreams-allcomments-label-lastedited": "সর্বশেষ সম্পাদিত",
+ "commentstreams-allcomments-button-next": "পরবর্তী",
+ "commentstreams-allcomments-button-previous": "পূর্ববর্তী"
+}
diff --git a/CommentStreams/i18n/br.json b/CommentStreams/i18n/br.json
new file mode 100644
index 00000000..334923b5
--- /dev/null
+++ b/CommentStreams/i18n/br.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gwendal"
+ ]
+ },
+ "commentstreams-buttontext-reply": "Respont"
+}
diff --git a/CommentStreams/i18n/ca.json b/CommentStreams/i18n/ca.json
new file mode 100644
index 00000000..2c785fb7
--- /dev/null
+++ b/CommentStreams/i18n/ca.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fitoschido"
+ ]
+ },
+ "commentstreams-buttontext-add": "Afegeix-hi un comentari",
+ "commentstreams-buttontext-reply": "Respon",
+ "commentstreams-buttontooltip-add": "afegeix un comentari"
+}
diff --git a/CommentStreams/i18n/ce.json b/CommentStreams/i18n/ce.json
new file mode 100644
index 00000000..cb1440d6
--- /dev/null
+++ b/CommentStreams/i18n/ce.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Умар"
+ ]
+ },
+ "commentstreams-buttontext-add": "ТӀетоха коммент",
+ "commentstreams-buttontext-reply": "Жоп ло"
+}
diff --git a/CommentStreams/i18n/cs.json b/CommentStreams/i18n/cs.json
new file mode 100644
index 00000000..e9938729
--- /dev/null
+++ b/CommentStreams/i18n/cs.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ilimanaq29",
+ "Dvorapa"
+ ]
+ },
+ "commentstreams-buttontext-add": "Přidat komentář",
+ "commentstreams-buttontext-reply": "Odpovědět"
+}
diff --git a/CommentStreams/i18n/de.json b/CommentStreams/i18n/de.json
new file mode 100644
index 00000000..76f9c32d
--- /dev/null
+++ b/CommentStreams/i18n/de.json
@@ -0,0 +1,119 @@
+{
+ "@metadata": {
+ "authors": [
+ "Metalhead64",
+ "ToBeFree"
+ ]
+ },
+ "commentstreams-desc": "Erlaubt die Kommentierung von Wikiseiten",
+ "commentstreams-error-prohibitedaction": "Die Aktion $1 ist auf Kommentarseiten nicht erlaubt.",
+ "commentstreams-error-comment-on-deleted-page": "Die Seite, die mit diesem Kommentar verbunden ist, wurde gelöscht.",
+ "commentstreams-author-anonymous": "Anonym",
+ "apihelp-csPostComment-description": "Speichert einen neuen Kommentar.",
+ "apihelp-csPostComment-summary": "Speichert einen neuen Kommentar.",
+ "apihelp-csPostComment-param-commenttitle": "optionaler Titel für den Kommentar.",
+ "apihelp-csEditComment-param-wikitext": "Wikitext für den Kommentar.",
+ "commentstreams-api-error-notloggedin": "Du musst angemeldet sein.",
+ "commentstreams-api-error-commentnotfound": "Der angeforderte Kommentar wurde nicht gefunden.",
+ "commentstreams-api-error-notacomment": "Die angegebene Seitenkennung bezieht sich nicht auf einen gültigen Kommentar.",
+ "commentstreams-api-error-missingcommenttitle": "Ein Kommentartitel muss für Kommentare, die keine Antworten sind, angegeben werden.",
+ "commentstreams-api-error-post-permissions": "Der Benutzer hat keine Berechtigung, um einen Kommentar zu speichern.",
+ "commentstreams-api-error-post-parentandtitle": "Du darfst die Elternkennung und den Kommentartitel nicht gleichzeitig angeben.",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "Der Kommentar, auf den geantwortet werden soll, ist nicht vorhanden.",
+ "commentstreams-api-error-post-associatedpageidmismatch": "Die Seite, die kommentiert werden soll, entspricht nicht der Seite des übergeordneten Kommentars.",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "Die Seite, die kommentiert werden soll, ist nicht vorhanden.",
+ "commentstreams-api-error-post": "Fehler beim Hinzufügen des Kommentars.",
+ "commentstreams-api-error-edit-notloggedin": "Zum Bearbeiten musst du angemeldet sein.",
+ "commentstreams-api-error-edit-permissions": "Der Benutzer hat nicht die Berechtigung, um den Kommentar zu bearbeiten.",
+ "commentstreams-api-error-edit": "Fehler beim Bearbeiten des Kommentars.",
+ "commentstreams-api-error-delete-notloggedin": "Du musst angemeldet sein zum Löschen.",
+ "commentstreams-api-error-delete-permissions": "Der Benutzer hat nicht die Berechtigung, um den Kommentar zu löschen.",
+ "commentstreams-api-error-delete-haschildren": "Es kann kein Thema gelöscht werden, das Antworten enthält. Bitte aktualisiere die Seite, um den aktualisierten Kommentarstrom zu sehen.",
+ "commentstreams-api-error-delete": "Fehler beim Löschen des Kommentars.",
+ "commentstreams-api-error-vote-notloggedin": "Zum Abstimmen musst du angemeldet sein.",
+ "commentstreams-api-error-vote-novoteonreply": "Das Abstimmen zu Antworten ist nicht erlaubt.",
+ "commentstreams-api-error-vote": "Fehler beim Abstimmen zum Kommentar.",
+ "commentstreams-api-error-watch-notloggedin": "Du musst angemeldet sein, um einen Kommentar zu beobachten.",
+ "commentstreams-api-error-watch-nowatchreply": "Das Beobachten von Antworten ist nicht erlaubt.",
+ "commentstreams-api-error-watch": "Fehler beim Beobachten des Kommentars.",
+ "commentstreams-api-error-unwatch-notloggedin": "Du musst angemeldet sein, um einen Kommentar zu entbeobachten.",
+ "commentstreams-api-error-unwatch-nounwatchreply": "Das Entbeobachten von Antworten ist nicht erlaubt.",
+ "commentstreams-api-error-unwatch": "Fehler beim Entbeobachten des Kommentars.",
+ "commentstreams-validation-error-nocommenttitle": "Du musst einen Kommentartitel eingeben.",
+ "commentstreams-validation-error-nocommenttext": "Du musst einen Kommentartext eingeben.",
+ "commentstreams-buttontext-add": "Kommentar hinzufügen",
+ "commentstreams-buttontext-reply": "Antworten",
+ "commentstreams-buttontooltip-add": "Kommentar hinzufügen",
+ "commentstreams-buttontooltip-reply": "Antworten",
+ "commentstreams-buttontooltip-edit": "Bearbeiten",
+ "commentstreams-buttontooltip-moderator-edit": "Bearbeitung des Moderators",
+ "commentstreams-buttontooltip-delete": "Löschen",
+ "commentstreams-buttontooltip-moderator-delete": "Löschung des Moderators",
+ "commentstreams-buttontooltip-permalink": "Permanentlink",
+ "commentstreams-buttontooltip-collapse": "Einklappen",
+ "commentstreams-buttontooltip-expand": "Erweitern",
+ "commentstreams-buttontooltip-upvote": "Gefällt mir",
+ "commentstreams-buttontooltip-downvote": "Gefällt mir nicht",
+ "commentstreams-buttontooltip-watch": "Beobachten",
+ "commentstreams-buttontooltip-unwatch": "Nicht mehr beobachten",
+ "commentstreams-buttontooltip-submit": "Speichern",
+ "commentstreams-buttontooltip-cancel": "Abbrechen",
+ "commentstreams-dialog-delete-message": "Bist du sicher, dass du diesen Kommentar löschen möchtest?",
+ "commentstreams-dialog-anonymous-message": "Du bist nicht angemeldet. Falls du mit dem Speichern dieses Kommentars fortfährst, wird deine IP-Adresse aufgezeichnet und du wirst nicht in der Lage sein, diesen Kommentar zu bearbeiten oder zu löschen.",
+ "commentstreams-dialog-buttontext-ok": "Okay",
+ "commentstreams-dialog-buttontext-cancel": "Abbrechen",
+ "commentstreams-dialog-buttontext-yes": "Ja",
+ "commentstreams-dialog-buttontext-no": "Nein",
+ "commentstreams-urldialog-instructions": "Kopiere die unten stehende URL, um einen Permanentlink zu diesem Kommentar zu teilen. Drücke Esc, um den Dialog auszublenden.",
+ "commentstreams-datetext-postedon": "Verfasst am",
+ "commentstreams-datetext-lasteditedon": "Zuletzt bearbeitet am",
+ "commentstreams-datetext-moderated": "Moderiert",
+ "commentstreams-title-field-placeholder": "Titel eingeben …",
+ "commentstreams-body-field-placeholder": "Neuen Kommentartext eingeben …",
+ "echo-category-title-commentstreams-notification-category": "Neue Kommentare und Antworten",
+ "notification-header-commentstreams-comment-on-watched-page": "$1 {{GENDER:$4|kommentierte}} „<i>$2</i>“ auf der Seite „<i>$3</i>“, die {{GENDER:$6|du}} beobachtest.",
+ "notification-header-commentstreams-reply-on-watched-page": "$1 {{GENDER:$4|antwortete}} auf den Kommentar „<i>$2</i>“ auf der Seite „<i>$3</i>“, den {{GENDER:$6|du}} beobachtest.",
+ "notification-header-commentstreams-reply-to-watched-comment": "$1 {{GENDER:$4|antwortete}} auf den Kommentar „<i>$2</i>“, den {{GENDER:$6|du}} beobachtest, auf der Seite „<i>$3</i>“.",
+ "notification-subject-commentstreams-comment-on-watched-page": "Jemand hat eine Seite kommentiert, die du beobachtest.",
+ "notification-subject-commentstreams-reply-on-watched-page": "Jemand hat auf einen Kommentar auf einer Seite geantwortet, die du beobachtest.",
+ "notification-subject-commentstreams-reply-to-watched-comment": "Jemand hat auf einen Kommentar geantwortet, den du beobachtest.",
+ "notification-body-commentstreams-comment-on-watched-page": "Der Kommentar ist:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "Die Antwort ist:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "Die Antwort ist:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "Kommentar besuchen",
+ "notification-link-label-commentstreams-reply-on-watched-page": "Antwort besuchen",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "Antwort besuchen",
+ "group-csmoderator": "Moderatoren (CommentStreams)",
+ "group-csmoderator-member": "{{GENDER:$1|Moderator|Moderatorin}} (CommentStreams)",
+ "grouppage-csmoderator": "{{ns:project}}:Moderatoren (CommentStreams)",
+ "right-cs-comment": "Eigene Kommentare verfassen, bearbeiten und löschen",
+ "action-cs-comment": "Kommentare zu verfassen, bearbeiten oder zu löschen",
+ "right-cs-moderator-edit": "Kommentare von jedem Benutzer bearbeiten",
+ "action-cs-moderator-edit": "Kommentare von anderen Benutzern zu bearbeiten",
+ "right-cs-moderator-delete": "Kommentare von jedem Benutzer löschen",
+ "action-cs-moderator-delete": "Kommentare von anderen Benutzern zu löschen",
+ "log-name-commentstreams": "CommentStreams-Logbuch",
+ "log-description-commentstreams": "Dies ist das Logbuch der CommentStreams-Ereignisse.",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|erstellte}} den Kommentar $3",
+ "logentry-commentstreams-reply-create": "$1 {{GENDER:$2|erstellte}} die Antwort $3",
+ "logentry-commentstreams-comment-edit": "$1 {{GENDER:$2|bearbeitete}} den Kommentar $3",
+ "logentry-commentstreams-comment-moderator-edit": "$1 {{GENDER:$2|(Moderator)|(Moderatorin)}} bearbeitete den Kommentar $3",
+ "logentry-commentstreams-reply-edit": "$1 {{GENDER:$2|bearbeitete}} die Antwort $3",
+ "logentry-commentstreams-reply-moderator-edit": "$1 {{GENDER:$2|(Moderator)|(Moderatorin)}} bearbeitete die Antwort $3",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|löschte}} den Kommentar $3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|(Moderator)|(Moderatorin)}} löschte den Kommentar $3",
+ "logentry-commentstreams-reply-delete": "$1 {{GENDER:$2|löschte}} die Antwort $3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|(Moderator)|(Moderatorin)}} löschte die Antwort $3",
+ "commentstreamsallcomments": "Alle Kommentare",
+ "commentstreams-allcomments-nocommentsfound": "Keine Kommentare gefunden.",
+ "commentstreams-allcomments-label-page": "Kommentarseite",
+ "commentstreams-allcomments-label-associatedpage": "Verbundene Seite",
+ "commentstreams-allcomments-label-commenttitle": "Titel des Kommentars",
+ "commentstreams-allcomments-label-wikitext": "Kommentar",
+ "commentstreams-allcomments-label-author": "Autor",
+ "commentstreams-allcomments-label-created": "Erstellt",
+ "commentstreams-allcomments-label-lasteditor": "Letzter Bearbeiter",
+ "commentstreams-allcomments-label-lastedited": "Zuletzt bearbeitet",
+ "commentstreams-allcomments-button-next": "Nächster",
+ "commentstreams-allcomments-button-previous": "Vorheriger"
+}
diff --git a/CommentStreams/i18n/el.json b/CommentStreams/i18n/el.json
new file mode 100644
index 00000000..cc47b457
--- /dev/null
+++ b/CommentStreams/i18n/el.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nikosgranturismogt"
+ ]
+ },
+ "commentstreams-author-anonymous": "ανώνυμος",
+ "apihelp-csPostComment-description": "Αποστολή νέου σχολίου.",
+ "apihelp-csPostComment-summary": "Αποστολή νέου σχολίου.",
+ "apihelp-csPostComment-param-commenttitle": "προαιρετικός τίτλος για το σχόλιο.",
+ "apihelp-csPostComment-param-wikitext": "βικικείμενο για το σχόλιο.",
+ "commentstreams-api-error-vote-notloggedin": "Πρέπει να είστε συνδεδεμένοι για να ψηφίσετε.",
+ "commentstreams-buttontext-add": "Πρόσθεση σχόλιου",
+ "commentstreams-buttontext-reply": "Απάντηση",
+ "commentstreams-buttontooltip-add": "Προσθήκη σχόλιου",
+ "commentstreams-buttontooltip-reply": "απάντηση",
+ "commentstreams-buttontooltip-edit": "επεξεργασία",
+ "commentstreams-buttontooltip-delete": "διαγραφή",
+ "commentstreams-buttontooltip-permalink": "Μόνιμος σύνδεσμος",
+ "commentstreams-buttontooltip-collapse": "σύμπτυξη",
+ "commentstreams-buttontooltip-expand": "επέκτεινε",
+ "commentstreams-buttontooltip-submit": "Υποβολή",
+ "commentstreams-buttontooltip-cancel": "Ακύρωση",
+ "commentstreams-dialog-buttontext-ok": "Εντάξει",
+ "commentstreams-dialog-buttontext-cancel": "Ακύρωση",
+ "commentstreams-dialog-buttontext-yes": "Ναι",
+ "commentstreams-dialog-buttontext-no": "Όχι",
+ "commentstreams-datetext-postedon": "Καταχωρήθηκε στις",
+ "notification-link-label-commentstreams-comment-on-watched-page": "Επίσκεψη σχόλιου",
+ "commentstreams-allcomments-label-wikitext": "Σχολιάστε",
+ "commentstreams-allcomments-label-author": "Συγγραφέας",
+ "commentstreams-allcomments-button-next": "Επόμενο"
+}
diff --git a/CommentStreams/i18n/en.json b/CommentStreams/i18n/en.json
index d6cff7db..c776dff9 100644
--- a/CommentStreams/i18n/en.json
+++ b/CommentStreams/i18n/en.json
@@ -7,6 +7,8 @@
},
"commentstreams-desc": "Allows commenting on wiki pages",
"commentstreams-error-prohibitedaction": "Action $1 is not allowed on comment pages.",
+ "commentstreams-error-comment-on-deleted-page": "The page with which this comment is associated has been deleted.",
+ "commentstreams-author-anonymous": "anonymous",
"apihelp-csQueryComment-description": "Return the title, user, creation timestamp, and wikitext of a comment. Either pageid or title must be provided.",
"apihelp-csQueryComment-summary": "Return the title, user, creation timestamp, and wikitext of a comment. Either pageid or title must be provided.",
"apihelp-csQueryComment-param-pageid": "page ID of the page which holds the comment to query",
@@ -78,7 +80,9 @@
"commentstreams-api-error-unwatch": "Error unwatching comment.",
"commentstreams-validation-error-nocommenttitle": "You must enter a comment title.",
"commentstreams-validation-error-nocommenttext": "You must enter comment text.",
- "commentstreams-buttontooltip-add": "add a comment",
+ "commentstreams-buttontext-add": "Add comment",
+ "commentstreams-buttontext-reply": "Reply",
+ "commentstreams-buttontooltip-add": "add comment",
"commentstreams-buttontooltip-reply": "reply",
"commentstreams-buttontooltip-edit": "edit",
"commentstreams-buttontooltip-moderator-edit": "moderator edit",
@@ -94,7 +98,9 @@
"commentstreams-buttontooltip-submit": "submit",
"commentstreams-buttontooltip-cancel": "cancel",
"commentstreams-dialog-delete-message": "Are you sure you want to delete this comment?",
+ "commentstreams-dialog-anonymous-message": "You are not logged in. If you proceed to save this comment, your IP address will be recorded, and you will not be able to edit or delete this comment.",
"commentstreams-dialog-buttontext-ok": "OK",
+ "commentstreams-dialog-buttontext-cancel": "Cancel",
"commentstreams-dialog-buttontext-yes": "Yes",
"commentstreams-dialog-buttontext-no": "No",
"commentstreams-urldialog-instructions": "Copy and paste the URL below to share a permalink to this comment. Press escape to dismiss this dialog.",
@@ -119,6 +125,8 @@
"group-csmoderator": "Moderators (CommentStreams)",
"group-csmoderator-member": "{{GENDER:$1|moderator (CommentStreams)}}",
"grouppage-csmoderator": "{{ns:project}}:Moderators (CommentStreams)",
+ "right-cs-comment": "Post, edit, and delete user's own comments",
+ "action-cs-comment": "post, edit, or delete comments",
"right-cs-moderator-edit": "Edit comments by any user",
"action-cs-moderator-edit": "edit comments by other users",
"right-cs-moderator-delete": "Delete comments by any user",
@@ -136,6 +144,7 @@
"logentry-commentstreams-reply-delete": "$1 {{GENDER:$2|deleted}} reply $3",
"logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|(moderator) deleted}} reply $3",
"commentstreamsallcomments": "All Comments",
+ "commentstreams-allcomments-nocommentsfound": "No comments found.",
"commentstreams-allcomments-label-page": "Comment Page",
"commentstreams-allcomments-label-associatedpage": "Associated Page",
"commentstreams-allcomments-label-commenttitle": "Comment Title",
@@ -145,5 +154,6 @@
"commentstreams-allcomments-label-lasteditor": "Last Editor",
"commentstreams-allcomments-label-lastedited": "Last Edited",
"commentstreams-allcomments-button-next": "Next",
- "commentstreams-allcomments-button-previous": "Previous"
+ "commentstreams-allcomments-button-previous": "Previous",
+ "commentstreams-ve-conversion-error": "Error converting between wikitext and HTML for VisualEditor"
}
diff --git a/CommentStreams/i18n/es.json b/CommentStreams/i18n/es.json
new file mode 100644
index 00000000..fa7a2076
--- /dev/null
+++ b/CommentStreams/i18n/es.json
@@ -0,0 +1,72 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fitoschido",
+ "Macofe"
+ ]
+ },
+ "commentstreams-desc": "Permite dejar comentarios en las páginas del wiki",
+ "commentstreams-error-prohibitedaction": "No se permite efectuar la acción $1 en las páginas de comentarios.",
+ "commentstreams-error-comment-on-deleted-page": "Se eliminó la página que estaba asociada con este comentario.",
+ "commentstreams-author-anonymous": "anónimo",
+ "apihelp-csPostComment-description": "Publicar un comentario nuevo.",
+ "apihelp-csPostComment-summary": "Publicar un comentario nuevo.",
+ "apihelp-csPostComment-param-commenttitle": "título opcional para el comentario.",
+ "apihelp-csVote-summary": "Votar (a favor, en contra o como indiferente) un comentario.",
+ "apihelp-csVote-param-vote": "votar (1, −1 o 0).",
+ "commentstreams-api-error-commentnotfound": "No se encontró el comentario solicitado.",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "No existe el comentario al que se está respondiendo.",
+ "commentstreams-api-error-post": "Error al añadir el comentario.",
+ "commentstreams-api-error-edit-notloggedin": "Debes acceder a tu cuenta para editar.",
+ "commentstreams-api-error-edit": "Error al editar el comentario.",
+ "commentstreams-api-error-vote-notloggedin": "Debes acceder a tu cuenta para votar.",
+ "commentstreams-api-error-vote-novoteonreply": "No se permite emitir votos para las respuestas.",
+ "commentstreams-api-error-vote": "Error al emitir el voto para el comentario.",
+ "commentstreams-validation-error-nocommenttitle": "Debes proporcionar un título para el comentario.",
+ "commentstreams-buttontext-add": "Añadir comentario",
+ "commentstreams-buttontext-reply": "Responder",
+ "commentstreams-buttontooltip-add": "comentar",
+ "commentstreams-buttontooltip-reply": "responder",
+ "commentstreams-buttontooltip-edit": "editar",
+ "commentstreams-buttontooltip-delete": "borrar",
+ "commentstreams-buttontooltip-permalink": "enlace permanente",
+ "commentstreams-buttontooltip-collapse": "contraer",
+ "commentstreams-buttontooltip-expand": "expandir",
+ "commentstreams-buttontooltip-upvote": "votar a favor",
+ "commentstreams-buttontooltip-downvote": "votar en contra",
+ "commentstreams-buttontooltip-submit": "enviar",
+ "commentstreams-buttontooltip-cancel": "cancelar",
+ "commentstreams-dialog-delete-message": "¿Confirmas que quieres borrar este comentario?",
+ "commentstreams-dialog-anonymous-message": "No has accedido a ninguna cuenta. Si continúas con el guardado del comentario, se almacenará tu dirección IP y no podrás editar ni borrar el comentario.",
+ "commentstreams-dialog-buttontext-ok": "Aceptar",
+ "commentstreams-dialog-buttontext-cancel": "Cancelar",
+ "commentstreams-dialog-buttontext-yes": "Sí",
+ "commentstreams-dialog-buttontext-no": "No",
+ "commentstreams-urldialog-instructions": "Copia y pega el URL siguiente; es un enlace permanente a este comentario. Para cerrar el cuadro de diálogo, oprime Esc.",
+ "commentstreams-datetext-postedon": "Publicado el",
+ "commentstreams-datetext-lasteditedon": "Última edición el",
+ "commentstreams-datetext-moderated": "moderado",
+ "commentstreams-title-field-placeholder": "Escribe el título…",
+ "commentstreams-body-field-placeholder": "Escribe el texto del comentario nuevo…",
+ "echo-category-title-commentstreams-notification-category": "Comentarios y respuestas nuevos",
+ "notification-body-commentstreams-comment-on-watched-page": "El comentario es:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "La respuesta es:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "Visitar comentario",
+ "notification-link-label-commentstreams-reply-on-watched-page": "Visitar respuesta",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "Visitar respuesta",
+ "action-cs-comment": "publicar, editar o borrar comentarios",
+ "action-cs-moderator-edit": "editar comentarios de otros usuarios",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|creó}} el comentario $3",
+ "commentstreamsallcomments": "Todos los comentarios",
+ "commentstreams-allcomments-nocommentsfound": "No se encontró ningún comentario.",
+ "commentstreams-allcomments-label-page": "Página de comentarios",
+ "commentstreams-allcomments-label-associatedpage": "Página asociada",
+ "commentstreams-allcomments-label-commenttitle": "Título del comentario",
+ "commentstreams-allcomments-label-wikitext": "Comentario",
+ "commentstreams-allcomments-label-author": "Autor",
+ "commentstreams-allcomments-label-created": "Creación",
+ "commentstreams-allcomments-label-lasteditor": "Último editor",
+ "commentstreams-allcomments-label-lastedited": "Última edición",
+ "commentstreams-allcomments-button-next": "Siguiente",
+ "commentstreams-allcomments-button-previous": "Anterior"
+}
diff --git a/CommentStreams/i18n/fa.json b/CommentStreams/i18n/fa.json
new file mode 100644
index 00000000..0f3fe5e2
--- /dev/null
+++ b/CommentStreams/i18n/fa.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ommmmid"
+ ]
+ },
+ "commentstreams-buttontext-reply": "پاسخ",
+ "commentstreams-buttontooltip-delete": "حذف",
+ "commentstreams-allcomments-label-lastedited": "آخرین ویرایش"
+}
diff --git a/CommentStreams/i18n/fi.json b/CommentStreams/i18n/fi.json
new file mode 100644
index 00000000..d1e7126b
--- /dev/null
+++ b/CommentStreams/i18n/fi.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nike"
+ ]
+ },
+ "commentstreams-buttontooltip-add": "lisää kommentti",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|loi}} kommentin $3",
+ "commentstreams-allcomments-label-lastedited": "Viimeksi muokattu"
+}
diff --git a/CommentStreams/i18n/fr.json b/CommentStreams/i18n/fr.json
new file mode 100644
index 00000000..ff39bdff
--- /dev/null
+++ b/CommentStreams/i18n/fr.json
@@ -0,0 +1,158 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gomoko",
+ "Wladek92"
+ ]
+ },
+ "commentstreams-desc": "Permet de commenter les pages wiki",
+ "commentstreams-error-prohibitedaction": "L’action $1 n’est pas permise sur les pages de commentaire.",
+ "commentstreams-error-comment-on-deleted-page": "La page à laquelle ce commentaire est associé, a été supprimée.",
+ "commentstreams-author-anonymous": "anonyme",
+ "apihelp-csQueryComment-description": "Renvoyer le titre, l’utilisateur, l’horodatage de création et le wikitexte d’un commentaire. Le pageid ou le titre doit être fourni.",
+ "apihelp-csQueryComment-summary": "Renvoyer le titre, l’utilisateur, l’horodatage de création et le wikitexte d’un commentaire. Le pageid ou le titre doit être fourni.",
+ "apihelp-csQueryComment-param-pageid": "ID de la page qui contient le commentaire à rechercher",
+ "apihelp-csQueryComment-param-title": "titre de la page qui contient le commentaire à rechercher",
+ "apihelp-csQueryComment-pageid-example": "rechercher le commentaire de la page d’ID 3 en wikitexte",
+ "apihelp-csQueryComment-title-example": "rechercher le commentaire de la page de titre CommentStreams:3 en wikitexte",
+ "apihelp-csDeleteComment-description": "Supprimer un commentaire. Le pageid ou le titre doit être fourni.",
+ "apihelp-csDeleteComment-summary": "Supprimer un commentaire. Le pageid ou le titre doit être fourni.",
+ "apihelp-csDeleteComment-param-pageid": "l’ID de la page qui contient le commentaire à supprimer",
+ "apihelp-csDeleteComment-param-title": "le titre de la page qui contient le commentaire à supprimer",
+ "apihelp-csDeleteComment-pageid-example": "supprimer le commentaire de la page d’ID 3",
+ "apihelp-csDeleteComment-title-example": "supprimer le commentaire de la page de titre CommentStreams:3",
+ "apihelp-csPostComment-description": "Publier un nouveau commentaire.",
+ "apihelp-csPostComment-summary": "Publier un nouveau commentaire.",
+ "apihelp-csPostComment-param-commenttitle": "titre facultatif pour le commentaire.",
+ "apihelp-csPostComment-param-wikitext": "wikitexte pour le commentaire.",
+ "apihelp-csPostComment-param-associatedid": "page à laquelle est associé le commentaire.",
+ "apihelp-csPostComment-param-parentid": "ID de page ou commentaire parent si c’est une réponse.",
+ "apihelp-csEditComment-description": "Modifier un commentaire existant. Le pageid ou le titre doit être fourni.",
+ "apihelp-csEditComment-summary": "Modifier un commentaire existant. Le pageid ou le titre doit être fourni.",
+ "apihelp-csEditComment-param-pageid": "ID de la page qui contient le commentaire à modifier",
+ "apihelp-csEditComment-param-title": "titre de la page qui contient le commentaire à modifier",
+ "apihelp-csEditComment-param-commenttitle": "titre facultatif pour le commentaire.",
+ "apihelp-csEditComment-param-wikitext": "wikitexte pour le commentaire.",
+ "apihelp-csVote-description": "Vote (positif, négatif ou neutre) sur un commentaire.",
+ "apihelp-csVote-summary": "Vote (positif, négatif ou neutre) sur un commentaire.",
+ "apihelp-csVote-param-pageid": "ID de la page qui contient le commentaire pour lequel voter",
+ "apihelp-csVote-param-title": "titre de la page qui contient le commentaire pour lequel voter",
+ "apihelp-csVote-param-vote": "vote (1, -1, ou 0).",
+ "apihelp-csVote-pageid-example": "voter pour le commentaire de la page d’ID 3",
+ "apihelp-csVote-title-example": "voter pour le commentaire de la page ayant pour titre CommentStreams:3",
+ "apihelp-csWatch-description": "Surveiller un commentaire à notifier quand il reçoit des réponses",
+ "apihelp-csWatch-summary": "Surveiller un commentaire à notifier quand il reçoit des réponses",
+ "apihelp-csWatch-param-pageid": "ID de la page qui contient le commentaire à surveiller",
+ "apihelp-csWatch-param-title": "titre de la page qui contient le commentaire à surveiller",
+ "apihelp-csWatch-pageid-example": "surveiller le commentaire de la page d’ID 3",
+ "apihelp-csWatch-title-example": "surveiller le commentaire de la page de titre CommentStreams:3",
+ "apihelp-csUnwatch-description": "Ne plus surveiller un commentaire pour ne plus être notifié quand il reçoit des réponses",
+ "apihelp-csUnwatch-summary": "Ne plus surveiller un commentaire pour ne plus être notifié quand il reçoit des réponses",
+ "apihelp-csUnwatch-param-pageid": "ID de la page qui contient le commentaire à ne plus surveiller",
+ "apihelp-csUnwatch-param-title": "titre de la page qui contient le commentaire à ne plus surveiller",
+ "apihelp-csUnwatch-pageid-example": "ne plus surveiller le commentaire de la page d’ID 3",
+ "apihelp-csUnwatch-title-example": "ne plus surveiller le commentaire de la page de titre CommentStreams:3",
+ "commentstreams-api-error-notloggedin": "Vous devez être connecté.",
+ "commentstreams-api-error-commentnotfound": "Le commentaire demandé n’a pas été trouvé.",
+ "commentstreams-api-error-notacomment": "L’ID de page fourni ne fait pas référence à un commentaire valide.",
+ "commentstreams-api-error-missingcommenttitle": "Un titre de commentaire doit être fourni pour les commentaires qui ne sont pas des réponses.",
+ "commentstreams-api-error-post-permissions": "L’utilisateur n’a pas le droit de publier un commentaire.",
+ "commentstreams-api-error-post-parentandtitle": "Vous ne devez pas spécifier à la fois l’id parent et le titre du commentaire.",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "Le commentaire auquel vous répondez n’existe pas.",
+ "commentstreams-api-error-post-associatedpageidmismatch": "La page commentée ne correspond pas à la page du commentaire parent.",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "La page commentée n’existe pas.",
+ "commentstreams-api-error-post": "Erreur en ajoutant le commentaire.",
+ "commentstreams-api-error-edit-notloggedin": "Vous devez être connecté pour modifier.",
+ "commentstreams-api-error-edit-permissions": "L’utilisateur n’a pas le droit de modifier le commentaire.",
+ "commentstreams-api-error-edit": "Erreur en modifiant le commentaire.",
+ "commentstreams-api-error-delete-notloggedin": "Vous devez être connecté pour supprimer.",
+ "commentstreams-api-error-delete-permissions": "L’utilisateur n’a pas le droit de supprimer le commentaire.",
+ "commentstreams-api-error-delete-haschildren": "Impossible de supprimer un sujet qui a des réponses. Veuillez rafraîchir la page pour voir le flux des commentaires mis à jour.",
+ "commentstreams-api-error-delete": "Erreur à la suppression du commentaire.",
+ "commentstreams-api-error-vote-notloggedin": "Vous devez être connecté pour voter.",
+ "commentstreams-api-error-vote-novoteonreply": "Voter sur des réponses n’est pas autorisé.",
+ "commentstreams-api-error-vote": "Erreur en votant sur le commentaire.",
+ "commentstreams-api-error-watch-notloggedin": "Vous devez être connecté pour surveiller un commentaire.",
+ "commentstreams-api-error-watch-nowatchreply": "Surveiller des réponses n’est pas autorisé.",
+ "commentstreams-api-error-watch": "Erreur en surveillant un commentaire.",
+ "commentstreams-api-error-unwatch-notloggedin": "Vous devez être connecté pour ne plus surveiller un commentaire.",
+ "commentstreams-api-error-unwatch-nounwatchreply": "Ne plus surveiller les réponses n’est pas autorisé.",
+ "commentstreams-api-error-unwatch": "Erreur en ne surveillant plus les commentaires.",
+ "commentstreams-validation-error-nocommenttitle": "Vous devez saisir un titre de commentaire.",
+ "commentstreams-validation-error-nocommenttext": "Vous devez saisir un texte de commentaire.",
+ "commentstreams-buttontext-add": "Ajouter un commentaire",
+ "commentstreams-buttontext-reply": "Répondre",
+ "commentstreams-buttontooltip-add": "ajouter un commentaire",
+ "commentstreams-buttontooltip-reply": "répondre",
+ "commentstreams-buttontooltip-edit": "modifier",
+ "commentstreams-buttontooltip-moderator-edit": "modification par un modérateur",
+ "commentstreams-buttontooltip-delete": "supprimer",
+ "commentstreams-buttontooltip-moderator-delete": "suppression par un modérateur",
+ "commentstreams-buttontooltip-permalink": "lien permanent",
+ "commentstreams-buttontooltip-collapse": "replier",
+ "commentstreams-buttontooltip-expand": "développer",
+ "commentstreams-buttontooltip-upvote": "vote positif",
+ "commentstreams-buttontooltip-downvote": "vote négatif",
+ "commentstreams-buttontooltip-watch": "surveiller",
+ "commentstreams-buttontooltip-unwatch": "ne plus surveiller",
+ "commentstreams-buttontooltip-submit": "soumettre",
+ "commentstreams-buttontooltip-cancel": "annuler",
+ "commentstreams-dialog-delete-message": "Êtes-vous sûr de vouloir supprimer ce commentaire ?",
+ "commentstreams-dialog-anonymous-message": "Vous n’êtes pas connecté. Si vous poursuivez l’enregistrement de ce commentaire, votre adresse IP sera enregistrée, et vous ne pourrez plus modifier ou supprimer ce commentaire.",
+ "commentstreams-dialog-buttontext-ok": "OK",
+ "commentstreams-dialog-buttontext-cancel": "Annuler",
+ "commentstreams-dialog-buttontext-yes": "Oui",
+ "commentstreams-dialog-buttontext-no": "Non",
+ "commentstreams-urldialog-instructions": "Copier et coller l’URL ci-dessous pour partager un lien permanent vers ce commentaire. Appuyez sur Échap pour faire disparaître cette fenêtre.",
+ "commentstreams-datetext-postedon": "Publié le",
+ "commentstreams-datetext-lasteditedon": "Dernière modification le",
+ "commentstreams-datetext-moderated": "modéré",
+ "commentstreams-title-field-placeholder": "Saisir le titre…",
+ "commentstreams-body-field-placeholder": "Saisir le nouveau texte du commentaire…",
+ "echo-category-title-commentstreams-notification-category": "Nouveaux commentaires et réponses",
+ "notification-header-commentstreams-comment-on-watched-page": "$1 {{GENDER:$4|a commenté}} \"<i>$2</i>\" sur la page \"<i>$3</i>\", que {{GENDER:$6|vous}} lisez.",
+ "notification-header-commentstreams-reply-on-watched-page": "$1 {{GENDER:$4|a répondu}} au commentaire \"<i>$2</i>\" sur la page \"<i>$3</i>\", que {{GENDER:$6|vous}} lisez.",
+ "notification-header-commentstreams-reply-to-watched-comment": "$1 {{GENDER:$4|a répondu}} au commentaire \"<i>$2</i>\", que {{GENDER:$6|vous}} lisez, sur la page \"<i>$3</i>\".",
+ "notification-subject-commentstreams-comment-on-watched-page": "Quelqu’un a commenté une page que vous surveillez.",
+ "notification-subject-commentstreams-reply-on-watched-page": "Quelqu’un a répondu à un commentaire sur une page que vous surveillez",
+ "notification-subject-commentstreams-reply-to-watched-comment": "Quelqu’un a répondu à un commentaire que vous surveillez",
+ "notification-body-commentstreams-comment-on-watched-page": "Le commentaire est :\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "La réponse est :\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "La réponse est :\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "Visiter le commentaire",
+ "notification-link-label-commentstreams-reply-on-watched-page": "Visiter la réponse",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "Visiter la réponse",
+ "group-csmoderator": "Modérateurs (CommentStreams)",
+ "group-csmoderator-member": "{{GENDER:$1|modérateur|modératrice}} (CommentStreams)",
+ "grouppage-csmoderator": "{{ns:project}}:Moderators (CommentStreams)",
+ "right-cs-comment": "Publier, modifier et supprimer les commentaires appartenant à l’utilisateur",
+ "action-cs-comment": "publier, modifier ou supprimer des commentaires",
+ "right-cs-moderator-edit": "Modifier les commentaires de n’importe quel utilisateur",
+ "action-cs-moderator-edit": "modifier les commentaires des autres utilisateurs",
+ "right-cs-moderator-delete": "Supprimer les commentaires d’un utilisateur",
+ "action-cs-moderator-delete": "supprimer les commentaires des autres utilisateurs",
+ "log-name-commentstreams": "Journal de CommentStreams",
+ "log-description-commentstreams": "Ces événements tracent quand les événements de CommentStreams se produisent.",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|a créé}} le commentaire $3",
+ "logentry-commentstreams-reply-create": "$1 {{GENDER:$2|a écrit}} la réponse $3",
+ "logentry-commentstreams-comment-edit": "$1 {{GENDER:$2|a modifié}} le commentaire $3",
+ "logentry-commentstreams-comment-moderator-edit": "$1 {{GENDER:$2|(modérateur) a modifié}} le commentaire $3",
+ "logentry-commentstreams-reply-edit": "$1 {{GENDER:$2|a modifié}} la réponse $3",
+ "logentry-commentstreams-reply-moderator-edit": "$1 {{GENDER:$2|(modérateur)|(modératrice)}} a modifié la réponse $3",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|a supprimé}} le commentaire $3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|(modérateur)|(modératrice)}} a supprimé le commentaire $3",
+ "logentry-commentstreams-reply-delete": "$1 {{GENDER:$2|a supprimé}} la réponse $3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|(modérateur) a supprimé}} la réponse $3",
+ "commentstreamsallcomments": "Tous les commentaires",
+ "commentstreams-allcomments-nocommentsfound": "Pas de commentaire trouvé.",
+ "commentstreams-allcomments-label-page": "Page de commentaire",
+ "commentstreams-allcomments-label-associatedpage": "Page associée",
+ "commentstreams-allcomments-label-commenttitle": "Titre du commentaire",
+ "commentstreams-allcomments-label-wikitext": "Commentaire",
+ "commentstreams-allcomments-label-author": "Auteur",
+ "commentstreams-allcomments-label-created": "Créé",
+ "commentstreams-allcomments-label-lasteditor": "Dernier contributeur",
+ "commentstreams-allcomments-label-lastedited": "Dernière modification",
+ "commentstreams-allcomments-button-next": "Suivant",
+ "commentstreams-allcomments-button-previous": "Précédent"
+}
diff --git a/CommentStreams/i18n/gl.json b/CommentStreams/i18n/gl.json
new file mode 100644
index 00000000..b2d1ea85
--- /dev/null
+++ b/CommentStreams/i18n/gl.json
@@ -0,0 +1,69 @@
+{
+ "@metadata": {
+ "authors": [
+ "Elisardojm",
+ "Athena in Wonderland"
+ ]
+ },
+ "commentstreams-desc": "Permite deixar comentarios nas páxinas da wiki",
+ "commentstreams-author-anonymous": "anónimo",
+ "apihelp-csPostComment-description": "Publicar un novo comentario.",
+ "apihelp-csPostComment-summary": "Publicar un novo comentario.",
+ "apihelp-csPostComment-param-commenttitle": "título opcional para o comentario.",
+ "apihelp-csPostComment-param-wikitext": "texto wiki para o comentario.",
+ "apihelp-csEditComment-param-commenttitle": "título opcional para o comentario.",
+ "apihelp-csEditComment-param-wikitext": "texto wiki para o comentario.",
+ "apihelp-csVote-description": "Votar (positivo, negativo ou neutro) nun comentario.",
+ "apihelp-csVote-summary": "Votar (positivo, negativo ou neutro) nun comentario.",
+ "apihelp-csVote-param-vote": "votar (1, −1 ou 0).",
+ "commentstreams-api-error-notloggedin": "Debe estar conectado.",
+ "commentstreams-api-error-commentnotfound": "Non se atopou o comentario solicitado.",
+ "commentstreams-api-error-post": "Erro ó engadir o comentario.",
+ "commentstreams-api-error-edit": "Erro ó editar o comentario.",
+ "commentstreams-api-error-delete-notloggedin": "Debe estar conectado para borrar.",
+ "commentstreams-api-error-delete": "Erro ó borrar o comentario.",
+ "commentstreams-buttontext-add": "ENGADIR UN COMENTARIO",
+ "commentstreams-buttontext-reply": "RESPONDER",
+ "commentstreams-buttontooltip-add": "engadir un comentario",
+ "commentstreams-buttontooltip-reply": "responder",
+ "commentstreams-buttontooltip-edit": "editar",
+ "commentstreams-buttontooltip-delete": "borrar",
+ "commentstreams-buttontooltip-permalink": "ligazón permanente",
+ "commentstreams-buttontooltip-collapse": "contraer",
+ "commentstreams-buttontooltip-expand": "expandir",
+ "commentstreams-buttontooltip-upvote": "votar a favor",
+ "commentstreams-buttontooltip-downvote": "votar en contra",
+ "commentstreams-buttontooltip-watch": "vixiar",
+ "commentstreams-buttontooltip-unwatch": "deixar de vixiar",
+ "commentstreams-buttontooltip-submit": "enviar",
+ "commentstreams-buttontooltip-cancel": "cancelar",
+ "commentstreams-dialog-buttontext-ok": "Aceptar",
+ "commentstreams-dialog-buttontext-cancel": "Cancelar",
+ "commentstreams-dialog-buttontext-yes": "Si",
+ "commentstreams-dialog-buttontext-no": "Non",
+ "commentstreams-datetext-lasteditedon": "Última edición o",
+ "commentstreams-title-field-placeholder": "Insire o título...",
+ "commentstreams-body-field-placeholder": "Insire novo texto do comentario...",
+ "notification-subject-commentstreams-comment-on-watched-page": "Alguén deixou un comentario nunha páxina que vostede está a vixilar",
+ "notification-body-commentstreams-comment-on-watched-page": "O comentario é:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "A resposta é:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "A resposta é:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "Visitar o comentário",
+ "notification-link-label-commentstreams-reply-on-watched-page": "Visitar a resposta",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "Visitar a resposta",
+ "group-csmoderator": "Moderadores (CommentStreams)",
+ "group-csmoderator-member": "{{GENDER:$1|moderador|moderadora}} (CommentStreams)",
+ "grouppage-csmoderator": "{{ns:project}}:Moderadores (CommentStreams)",
+ "commentstreamsallcomments": "Todos os comentarios",
+ "commentstreams-allcomments-nocommentsfound": "Non se atopou ningún comentario.",
+ "commentstreams-allcomments-label-page": "Páxina de comentarios",
+ "commentstreams-allcomments-label-associatedpage": "Páxina asociada",
+ "commentstreams-allcomments-label-commenttitle": "Título do comentario",
+ "commentstreams-allcomments-label-wikitext": "Comentario",
+ "commentstreams-allcomments-label-author": "Autor",
+ "commentstreams-allcomments-label-created": "Creado",
+ "commentstreams-allcomments-label-lasteditor": "Último editor",
+ "commentstreams-allcomments-label-lastedited": "Última edición",
+ "commentstreams-allcomments-button-next": "Seguinte",
+ "commentstreams-allcomments-button-previous": "Anterior"
+}
diff --git a/CommentStreams/i18n/got.json b/CommentStreams/i18n/got.json
new file mode 100644
index 00000000..3f199812
--- /dev/null
+++ b/CommentStreams/i18n/got.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gothicspeaker"
+ ]
+ },
+ "commentstreams-buttontext-add": "𐌰𐌽𐌰𐌰𐌹𐌰𐌿𐌺 𐍅𐌰𐌿𐍂𐌳",
+ "commentstreams-buttontext-reply": "𐌰𐌽𐌳𐌷𐌰𐍆𐌴𐌹",
+ "commentstreams-buttontooltip-add": "𐌰𐌽𐌰𐌰𐌹𐌰𐌿𐌺 𐍅𐌰𐌿𐍂𐌳"
+}
diff --git a/CommentStreams/i18n/he.json b/CommentStreams/i18n/he.json
new file mode 100644
index 00000000..8e4c2263
--- /dev/null
+++ b/CommentStreams/i18n/he.json
@@ -0,0 +1,157 @@
+{
+ "@metadata": {
+ "authors": [
+ "Guycn2"
+ ]
+ },
+ "commentstreams-desc": "מתן אפשרות להגיב על דפי ויקי",
+ "commentstreams-error-prohibitedaction": "הפעולה $1 אינה מותרת בדפי תגובות.",
+ "commentstreams-error-comment-on-deleted-page": "הדף שאליו התגובה הזו משויכת נמחק.",
+ "commentstreams-author-anonymous": "אנונימי",
+ "apihelp-csQueryComment-description": "החזרת הכותרת, המשתמש, מועד היצירה וטקסט הוויקי של תגובה. יש לציין את מזהה הדף או את כותרתו.",
+ "apihelp-csQueryComment-summary": "החזרת הכותרת, המשתמש, מועד היצירה וטקסט הוויקי של תגובה. יש לציין את מזהה הדף או את כותרתו.",
+ "apihelp-csQueryComment-param-pageid": "מזהה הדף שבו נמצאת התגובה שעליה תבוצע השאילתה",
+ "apihelp-csQueryComment-param-title": "כותרת הדף שבו נמצאת התגובה שעליה תבוצע השאילתה",
+ "apihelp-csQueryComment-pageid-example": "שאילתה על תגובה בדף שהמזהה שלו הוא 3 בטקסט ויקי",
+ "apihelp-csQueryComment-title-example": "שאילתה על תגובה בדף שהכותרת שלו היא CommentStreams:3 בקוד ויקי",
+ "apihelp-csDeleteComment-description": "מחיקת תגובה. יש לציין את מזהה הדף או את כותרתו.",
+ "apihelp-csDeleteComment-summary": "מחיקת תגובה. יש לציין את מזהה הדף או את כותרתו.",
+ "apihelp-csDeleteComment-param-pageid": "מזהה הדף שבו נמצאת התגובה שתימחק",
+ "apihelp-csDeleteComment-param-title": "כותרת הדף שבו נמצאת התגובה שתימחק",
+ "apihelp-csDeleteComment-pageid-example": "מחיקת תגובה בדף שהמזהה שלו הוא 3",
+ "apihelp-csDeleteComment-title-example": "מחיקת תגובה בדף שהכותרת שלו היא CommentStreams:3",
+ "apihelp-csPostComment-description": "הוספת תגובה חדשה.",
+ "apihelp-csPostComment-summary": "הוספת תגובה חדשה.",
+ "apihelp-csPostComment-param-commenttitle": "כותרת לתגובה (לא חובה).",
+ "apihelp-csPostComment-param-wikitext": "טקסט הוויקי של התגובה.",
+ "apihelp-csPostComment-param-associatedid": "הדף שאליו תשויך התגובה.",
+ "apihelp-csPostComment-param-parentid": "אם זו תשובה לתגובה אחרת, מזהה הדף של התגובה שעליה תיכתב התשובה.",
+ "apihelp-csEditComment-description": "עריכת תגובה קיימת. יש לציין את מזהה הדף או את כותרתו.",
+ "apihelp-csEditComment-summary": "עריכת תגובה קיימת. יש לציין את מזהה הדף או את כותרתו.",
+ "apihelp-csEditComment-param-pageid": "מזהה הדף שבו נמצאת התגובה שתיערך",
+ "apihelp-csEditComment-param-title": "כותרת הדף שבו נמצאת התגובה שתיערך",
+ "apihelp-csEditComment-param-commenttitle": "כותרת לתגובה (לא חובה).",
+ "apihelp-csEditComment-param-wikitext": "טקסט הוויקי של התגובה.",
+ "apihelp-csVote-description": "הצבעה (אהבתי, לא אהבתי או נייטרלי) על תגובה.",
+ "apihelp-csVote-summary": "הצבעה (אהבתי, לא אהבתי או נייטרלי) על תגובה.",
+ "apihelp-csVote-param-pageid": "מזהה הדף שבו נמצאת התגובה שעליה תבוצע ההצבעה",
+ "apihelp-csVote-param-title": "כותרת הדף שבו נמצאת התגובה שעליה תבוצע ההצבעה",
+ "apihelp-csVote-param-vote": "הצבעה (1, <span dir=\"ltr\">-1</span> או 0).",
+ "apihelp-csVote-pageid-example": "הצבעה על תגובה בדף שהמזהה שלו הוא 3",
+ "apihelp-csVote-title-example": "הצבעה על תגובה בדף שהכותרת שלו היא CommentStreams:3",
+ "apihelp-csWatch-description": "מעקב אחרי תגובה כדי לקבל התראות כשמישהו משיב עליה",
+ "apihelp-csWatch-summary": "מעקב אחרי תגובה כדי לקבל התראות כשמישהו משיב עליה",
+ "apihelp-csWatch-param-pageid": "מזהה הדף שבו נמצאת התגובה שברצונך לעקוב אחריה",
+ "apihelp-csWatch-param-title": "כותרת הדף שבו נמצאת התגובה שברצונך לעקוב אחריה",
+ "apihelp-csWatch-pageid-example": "מעקב אחרי תגובה בדף שהמזהה שלו הוא 3",
+ "apihelp-csWatch-title-example": "מעקב אחרי תגובה בדף שהכותרת שלו היא CommentStreams:3",
+ "apihelp-csUnwatch-description": "הפסקת המעקב אחרי תגובה כדי להפסיק לקבל התראות כשמישהו משיב עליה",
+ "apihelp-csUnwatch-summary": "הפסקת המעקב אחרי תגובה כדי להפסיק לקבל התראות כשמישהו משיב עליה",
+ "apihelp-csUnwatch-param-pageid": "מזהה הדף שבו נמצאת התגובה שברצונך להפסיק לעקוב אחריה",
+ "apihelp-csUnwatch-param-title": "כותרת הדף שבו נמצאת התגובה שברצונך להפסיק לעקוב אחריה",
+ "apihelp-csUnwatch-pageid-example": "הפסקת המעקב אחרי תגובה בדף שהמזהה שלו הוא 3",
+ "apihelp-csUnwatch-title-example": "הפסקת המעקב אחרי תגובה בדף שהכותרת שלו היא CommentStreams:3",
+ "commentstreams-api-error-notloggedin": "יש להיכנס לחשבון.",
+ "commentstreams-api-error-commentnotfound": "התגובה שביקשת לא נמצאה.",
+ "commentstreams-api-error-notacomment": "מזהה הדף שסופק אינו תואם לתגובה תקינה.",
+ "commentstreams-api-error-missingcommenttitle": "חובה לספק כותרת לתגובות שאינן תשובות לתגובות אחרות.",
+ "commentstreams-api-error-post-permissions": "למשתמש אין הרשאה להוסיף תגובה חדשה.",
+ "commentstreams-api-error-post-parentandtitle": "לא ניתן לספק גם את מזהה התגובה וגם את כותרתה.",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "התגובה שעליה תישלח התשובה אינה קיימת.",
+ "commentstreams-api-error-post-associatedpageidmismatch": "הדף שאליו מיועדת התגובה אינו תואם לדף שבו נמצאת התגובה שעליה תישלח התשובה.",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "הדף שאליו מיועדת התגובה אינו קיים.",
+ "commentstreams-api-error-post": "שגיאה בהוספת התגובה.",
+ "commentstreams-api-error-edit-notloggedin": "יש להיכנס לחשבון כדי לערוך.",
+ "commentstreams-api-error-edit-permissions": "למשתמש אין הרשאה לערוך את התגובה.",
+ "commentstreams-api-error-edit": "שגיאה בעריכת התגובה.",
+ "commentstreams-api-error-delete-notloggedin": "יש להיכנס לחשבון כדי למחוק.",
+ "commentstreams-api-error-delete-permissions": "למשתמש אין הרשאה למחוק את התגובה.",
+ "commentstreams-api-error-delete-haschildren": "לא ניתן למחוק נושא שיש בו תשובות. נא לטעון מחדש את הדף כדי לראות את התגובות העדכניות.",
+ "commentstreams-api-error-delete": "שגיאה במחיקת התגובה.",
+ "commentstreams-api-error-vote-notloggedin": "יש להיכנס לחשבון כדי להצביע.",
+ "commentstreams-api-error-vote-novoteonreply": "אין אפשרות להצביע על תשובות.",
+ "commentstreams-api-error-vote": "שגיאה בהצבעה על התגובה.",
+ "commentstreams-api-error-watch-notloggedin": "יש להיכנס לחשבון כדי לעקוב אחרי תגובה.",
+ "commentstreams-api-error-watch-nowatchreply": "אין אפשרות לעקוב אחרי תשובות.",
+ "commentstreams-api-error-watch": "שגיאה במעקב אחרי התגובה.",
+ "commentstreams-api-error-unwatch-notloggedin": "יש להיכנס לחשבון כדי להפסיק את המעקב אחרי תגובה.",
+ "commentstreams-api-error-unwatch-nounwatchreply": "אין אפשרות להפסיק את המעקב אחרי תשובות.",
+ "commentstreams-api-error-unwatch": "שגיאה בהפסקת המעקב אחרי התגובה.",
+ "commentstreams-validation-error-nocommenttitle": "יש להזין כותרת לתגובה.",
+ "commentstreams-validation-error-nocommenttext": "יש להזין טקסט לתגובה.",
+ "commentstreams-buttontext-add": "הוספת תגובה",
+ "commentstreams-buttontext-reply": "תשובה",
+ "commentstreams-buttontooltip-add": "הוספת תגובה",
+ "commentstreams-buttontooltip-reply": "תשובה",
+ "commentstreams-buttontooltip-edit": "עריכה",
+ "commentstreams-buttontooltip-moderator-edit": "עריכה כמנהל",
+ "commentstreams-buttontooltip-delete": "מחיקה",
+ "commentstreams-buttontooltip-moderator-delete": "מחיקה כמנהל",
+ "commentstreams-buttontooltip-permalink": "קישור קבוע",
+ "commentstreams-buttontooltip-collapse": "הסתרה",
+ "commentstreams-buttontooltip-expand": "הצגה",
+ "commentstreams-buttontooltip-upvote": "הצבעת \"אהבתי\"",
+ "commentstreams-buttontooltip-downvote": "הצבעת \"לא אהבתי\"",
+ "commentstreams-buttontooltip-watch": "מעקב",
+ "commentstreams-buttontooltip-unwatch": "הפסקת מעקב",
+ "commentstreams-buttontooltip-submit": "שליחה",
+ "commentstreams-buttontooltip-cancel": "ביטול",
+ "commentstreams-dialog-delete-message": "האם ברצונך למחוק תגובה זו?",
+ "commentstreams-dialog-anonymous-message": "לא נכנסת לחשבון. שמירת התגובה תגרום לתיעוד כתובת ה־IP שלך, ולא יהיה באפשרותך לערוך או למחוק את התגובה הזו.",
+ "commentstreams-dialog-buttontext-ok": "אישור",
+ "commentstreams-dialog-buttontext-cancel": "ביטול",
+ "commentstreams-dialog-buttontext-yes": "כן",
+ "commentstreams-dialog-buttontext-no": "לא",
+ "commentstreams-urldialog-instructions": "יש להעתיק ולהדביק את כתובת ה־URL שלהלן כדי לשתף קישור קבוע לתגובה זו. ניתן להקיש על Esc כדי לסגור את תיבת הדו־שיח הזו.",
+ "commentstreams-datetext-postedon": "פורסמה בתאריך",
+ "commentstreams-datetext-lasteditedon": "נערכה לאחרונה בתאריך",
+ "commentstreams-datetext-moderated": "נוהלה",
+ "commentstreams-title-field-placeholder": "יש להקליד כותרת...",
+ "commentstreams-body-field-placeholder": "יש להקליד את הטקסט של התגובה החדשה...",
+ "echo-category-title-commentstreams-notification-category": "תגובות ותשובות חדשות",
+ "notification-header-commentstreams-comment-on-watched-page": "$1 {{GENDER:$4|פרסם|פרסמה}} את התגובה \"<i>$2</i>\" בדף \"<i>$3</i>\", שאחריו {{GENDER:$6|אתה עוקב|את עוקבת}}.",
+ "notification-header-commentstreams-reply-on-watched-page": "$1 {{GENDER:$4|השיב|השיבה}} על התגובה \"<i>$2</i>\" בדף \"<i>$3</i>\", שאחריו {{GENDER:$6|אתה עוקב|את עוקבת}}.",
+ "notification-header-commentstreams-reply-to-watched-comment": "$1 {{GENDER:$4|השיב|השיבה}} על התגובה \"<i>$2</i>\", שאחריה {{GENDER:$6|אתה עוקב|את עוקבת}}, בדף \"<i>$3</i>\".",
+ "notification-subject-commentstreams-comment-on-watched-page": "מישהו פרסם תגובה בדף שנמצא ברשימת המעקב שלך",
+ "notification-subject-commentstreams-reply-on-watched-page": "מישהו השיב על תגובה בדף שנמצא ברשימת המעקב שלך",
+ "notification-subject-commentstreams-reply-to-watched-comment": "מישהו השיב על תגובה שעקבת אחריה",
+ "notification-body-commentstreams-comment-on-watched-page": "התגובה היא:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "התשובה היא:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "התשובה היא:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "צפייה בתגובה",
+ "notification-link-label-commentstreams-reply-on-watched-page": "צפייה בתשובה",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "צפייה בתשובה",
+ "group-csmoderator": "מנהלי תגובות",
+ "group-csmoderator-member": "{{GENDER:$1|מנהל תגובות|מנהלת תגובות}}",
+ "grouppage-csmoderator": "{{ns:project}}:מנהל תגובות",
+ "right-cs-comment": "פרסום, עריכה ומחיקה של תגובות של המשתמש עצמו",
+ "action-cs-comment": "לפרסם, לערוך או למחוק תגובות",
+ "right-cs-moderator-edit": "עריכת תגובות של משתמשים אחרים",
+ "action-cs-moderator-edit": "לערוך תגובות של משתמשים אחרים",
+ "right-cs-moderator-delete": "מחיקת תגובות של משתמשים אחרים",
+ "action-cs-moderator-delete": "למחוק תגובות של משתמשים אחרים",
+ "log-name-commentstreams": "יומן תגובות",
+ "log-description-commentstreams": "יומן זה מציג את הפעולות שנעשות בתגובות.",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|יצר|יצרה}} את התגובה $3",
+ "logentry-commentstreams-reply-create": "$1 {{GENDER:$2|יצר|יצרה}} את התשובה $3",
+ "logentry-commentstreams-comment-edit": "$1 {{GENDER:$2|ערך|ערכה}} את התגובה $3",
+ "logentry-commentstreams-comment-moderator-edit": "$1 {{GENDER:$2|ערך|ערכה}} את התגובה $3 {{GENDER:$2|כמנהל|כמנהלת}}",
+ "logentry-commentstreams-reply-edit": "$1 {{GENDER:$2|ערך|ערכה}} את התשובה $3",
+ "logentry-commentstreams-reply-moderator-edit": "$1 {{GENDER:$2|ערך|ערכה}} את התשובה $3 {{GENDER:$2|כמנהל|כמנהלת}}",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|מחק|מחקה}} את התגובה $3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|מחק|מחקה}} את התגובה $3 {{GENDER:$2|כמנהל|כמנהלת}}",
+ "logentry-commentstreams-reply-delete": "$1 {{GENDER:$2|מחק|מחקה}} את התשובה $3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|מחק|מחקה}} את התשובה $3 {{GENDER:$2|כמנהל|כמנהלת}}",
+ "commentstreamsallcomments": "כל התגובות",
+ "commentstreams-allcomments-nocommentsfound": "לא נמצאו תגובות.",
+ "commentstreams-allcomments-label-page": "דף התגובה",
+ "commentstreams-allcomments-label-associatedpage": "הדף המשויך",
+ "commentstreams-allcomments-label-commenttitle": "כותרת התגובה",
+ "commentstreams-allcomments-label-wikitext": "התגובה",
+ "commentstreams-allcomments-label-author": "הכותב",
+ "commentstreams-allcomments-label-created": "תאריך היצירה",
+ "commentstreams-allcomments-label-lasteditor": "העורך האחרון",
+ "commentstreams-allcomments-label-lastedited": "תאריך העריכה האחרונה",
+ "commentstreams-allcomments-button-next": "הבא",
+ "commentstreams-allcomments-button-previous": "הקודם"
+}
diff --git a/CommentStreams/i18n/hi.json b/CommentStreams/i18n/hi.json
new file mode 100644
index 00000000..7ab85135
--- /dev/null
+++ b/CommentStreams/i18n/hi.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rishi.Singh",
+ "Bhatakati aatma"
+ ]
+ },
+ "apihelp-csWatch-summary": "उत्तर प्राप्त होने पर अधिसूचित होने के लिए एक टिप्पणी देखें",
+ "commentstreams-api-error-post-permissions": "उपयोगकर्ता को एक टिप्पणी पोस्ट करने की अनुमति नहीं है।",
+ "commentstreams-buttontext-add": "टिप्पणी जोड़ें",
+ "commentstreams-buttontext-reply": "प्रत्युत्तर",
+ "commentstreams-allcomments-nocommentsfound": "और अधिक सीखें।",
+ "commentstreams-allcomments-label-lastedited": "अंतिम संपादन"
+}
diff --git a/CommentStreams/i18n/hu.json b/CommentStreams/i18n/hu.json
new file mode 100644
index 00000000..8e21c9ca
--- /dev/null
+++ b/CommentStreams/i18n/hu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Csega"
+ ]
+ },
+ "commentstreams-buttontext-reply": "VÁLASZ"
+}
diff --git a/CommentStreams/i18n/hy.json b/CommentStreams/i18n/hy.json
new file mode 100644
index 00000000..c3d09018
--- /dev/null
+++ b/CommentStreams/i18n/hy.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kareyac"
+ ]
+ },
+ "commentstreams-buttontooltip-edit": "խմբագրել",
+ "commentstreams-buttontooltip-delete": "ջնջել",
+ "commentstreams-buttontooltip-permalink": "մշտական հղում",
+ "commentstreams-buttontooltip-expand": "բացել",
+ "commentstreams-buttontooltip-watch": "հսկել",
+ "commentstreams-buttontooltip-cancel": "չեղարկել",
+ "commentstreams-dialog-buttontext-ok": "Լավ",
+ "commentstreams-dialog-buttontext-cancel": "Չեղարկել",
+ "commentstreams-dialog-buttontext-yes": "Այո",
+ "commentstreams-dialog-buttontext-no": "Ոչ",
+ "commentstreamsallcomments": "Բոլոր մեկնաբանություններ",
+ "commentstreams-allcomments-label-author": "Հեղինակ",
+ "commentstreams-allcomments-label-created": "Ստեղծված է",
+ "commentstreams-allcomments-button-next": "Հաջորդ",
+ "commentstreams-allcomments-button-previous": "Նախորդ"
+}
diff --git a/CommentStreams/i18n/ia.json b/CommentStreams/i18n/ia.json
new file mode 100644
index 00000000..1e8cff69
--- /dev/null
+++ b/CommentStreams/i18n/ia.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "commentstreams-buttontext-add": "ADDER UN COMMENTO",
+ "commentstreams-buttontext-reply": "RESPONDER"
+}
diff --git a/CommentStreams/i18n/ig.json b/CommentStreams/i18n/ig.json
new file mode 100644
index 00000000..d9d6cc36
--- /dev/null
+++ b/CommentStreams/i18n/ig.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ukabia"
+ ]
+ },
+ "commentstreams-buttontooltip-edit": "mèzi",
+ "commentstreams-buttontooltip-submit": "zibànye",
+ "commentstreams-buttontooltip-cancel": "hapụ̀",
+ "commentstreams-dialog-buttontext-cancel": "Hapụ̀"
+}
diff --git a/CommentStreams/i18n/it.json b/CommentStreams/i18n/it.json
new file mode 100644
index 00000000..2c818c03
--- /dev/null
+++ b/CommentStreams/i18n/it.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16"
+ ]
+ },
+ "commentstreams-author-anonymous": "anonimo",
+ "apihelp-csVote-param-vote": "voto (1, -1, o 0).",
+ "commentstreams-api-error-delete-permissions": "L'utente non dispone dell'autorizzazione per cancellare il commento.",
+ "commentstreams-api-error-vote-notloggedin": "Devi aver effettuato l'accesso per votare.",
+ "commentstreams-buttontext-add": "Aggiungi commento",
+ "commentstreams-buttontext-reply": "Rispondi",
+ "commentstreams-buttontooltip-add": "aggiungi un commento",
+ "commentstreams-buttontooltip-reply": "rispondi",
+ "commentstreams-buttontooltip-edit": "modifica",
+ "commentstreams-buttontooltip-delete": "cancella",
+ "commentstreams-buttontooltip-collapse": "comprimi",
+ "commentstreams-buttontooltip-expand": "espandi",
+ "commentstreams-buttontooltip-cancel": "annulla",
+ "commentstreams-dialog-buttontext-cancel": "Annulla",
+ "commentstreams-dialog-buttontext-yes": "Sì",
+ "commentstreams-dialog-buttontext-no": "No",
+ "echo-category-title-commentstreams-notification-category": "Nuovi commenti e risposte",
+ "notification-body-commentstreams-reply-on-watched-page": "La risposta è:\n\n\n$5",
+ "action-cs-moderator-edit": "modificare i commenti degli altri utenti",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|ha creato}} il commento $3",
+ "commentstreams-allcomments-nocommentsfound": "Nessun commento trovato.",
+ "commentstreams-allcomments-label-lastedited": "Ultima modifica"
+}
diff --git a/CommentStreams/i18n/ja.json b/CommentStreams/i18n/ja.json
new file mode 100644
index 00000000..2d0ce033
--- /dev/null
+++ b/CommentStreams/i18n/ja.json
@@ -0,0 +1,71 @@
+{
+ "@metadata": {
+ "authors": [
+ "Otokoume",
+ "Hinaloe"
+ ]
+ },
+ "commentstreams-desc": "ウィキページへのコメントを可能にする",
+ "commentstreams-author-anonymous": "匿名",
+ "commentstreams-api-error-notloggedin": "ログインをしてください。",
+ "commentstreams-api-error-post-permissions": "コメントを投稿する権限がありません。",
+ "commentstreams-api-error-post": "コメントの追加中にエラーが発生しました。",
+ "commentstreams-api-error-edit-notloggedin": "編集するにはログインをしてください。",
+ "commentstreams-api-error-edit-permissions": "コメントを編集する権限がありません。",
+ "commentstreams-api-error-edit": "コメントの編集中にエラーが発生しました。",
+ "commentstreams-api-error-delete-permissions": "コメントを削除する権限がありません。",
+ "commentstreams-api-error-delete": "コメントの削除中にエラーが発生しました。",
+ "commentstreams-api-error-vote-notloggedin": "投票するにはログインをしてください。",
+ "commentstreams-api-error-vote-novoteonreply": "返信に投票することはできません。",
+ "commentstreams-api-error-vote": "コメントの投票中にエラーが発生しました。",
+ "commentstreams-api-error-watch-notloggedin": "コメントを閲覧するにはログインをしてください。",
+ "commentstreams-validation-error-nocommenttitle": "コメントのタイトルを入力してください。",
+ "commentstreams-validation-error-nocommenttext": "コメントを入力してください。",
+ "commentstreams-buttontext-add": "コメントを追加",
+ "commentstreams-buttontext-reply": "返信",
+ "commentstreams-buttontooltip-add": "コメントを追加",
+ "commentstreams-buttontooltip-reply": "返信",
+ "commentstreams-buttontooltip-edit": "編集",
+ "commentstreams-buttontooltip-delete": "削除",
+ "commentstreams-buttontooltip-permalink": "固定リンク",
+ "commentstreams-buttontooltip-collapse": "折り畳む",
+ "commentstreams-buttontooltip-expand": "展開",
+ "commentstreams-buttontooltip-watch": "ウォッチ",
+ "commentstreams-buttontooltip-submit": "送信",
+ "commentstreams-buttontooltip-cancel": "キャンセル",
+ "commentstreams-dialog-delete-message": "このコメントを削除して本当によろしいですか?",
+ "commentstreams-dialog-anonymous-message": "ログインをしてください。このコメントをそのまま保存すると、あなたのIPアドレスは記録され、このコメントを編集または削除することができません。",
+ "commentstreams-dialog-buttontext-ok": "OK",
+ "commentstreams-dialog-buttontext-cancel": "キャンセル",
+ "commentstreams-dialog-buttontext-yes": "はい",
+ "commentstreams-dialog-buttontext-no": "いいえ",
+ "commentstreams-datetext-postedon": "投稿日",
+ "commentstreams-title-field-placeholder": "タイトルを入力...",
+ "commentstreams-body-field-placeholder": "新しいコメントを入力...",
+ "echo-category-title-commentstreams-notification-category": "新着のコメントと返信",
+ "notification-subject-commentstreams-reply-on-watched-page": "閲覧中のページのコメントに他の利用者が返信しました",
+ "notification-body-commentstreams-comment-on-watched-page": "コメントはこちらから確認できます:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "返信はこちらから確認できます:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "返信はこちらから確認できます:\n\n\n$5",
+ "right-cs-comment": "自身のコメントの投稿、編集、削除",
+ "right-cs-moderator-edit": "利用者によるコメントの編集",
+ "action-cs-moderator-edit": "利用者によるコメントの編集",
+ "right-cs-moderator-delete": "利用者によるコメントの削除",
+ "action-cs-moderator-delete": "利用者によるコメントの削除",
+ "logentry-commentstreams-comment-create": "$1 がコメント $3 を{{GENDER:$2|作成しました}}",
+ "logentry-commentstreams-reply-create": "$1 が返信 $3 を{{GENDER:$2|作成しました}}",
+ "logentry-commentstreams-comment-edit": "$1 がコメント $3 を{{GENDER:$2|編集しました}}",
+ "logentry-commentstreams-reply-edit": "$1 が返信 $3 を{{GENDER:$2|編集しました}}",
+ "logentry-commentstreams-comment-delete": "$1 が コメント $3 を{{GENDER:$2|削除しました}}",
+ "logentry-commentstreams-reply-delete": "$1 が返信 $3 を{{GENDER:$2|削除しました}}",
+ "commentstreamsallcomments": "すべてのコメント",
+ "commentstreams-allcomments-nocommentsfound": "コメントはありません。",
+ "commentstreams-allcomments-label-page": "コメントページ",
+ "commentstreams-allcomments-label-commenttitle": "コメントのタイトル",
+ "commentstreams-allcomments-label-wikitext": "コメント",
+ "commentstreams-allcomments-label-created": "作成日時",
+ "commentstreams-allcomments-label-lasteditor": "最終編集者",
+ "commentstreams-allcomments-label-lastedited": "最終編集",
+ "commentstreams-allcomments-button-next": "次へ",
+ "commentstreams-allcomments-button-previous": "前へ"
+}
diff --git a/CommentStreams/i18n/jv.json b/CommentStreams/i18n/jv.json
new file mode 100644
index 00000000..5381e499
--- /dev/null
+++ b/CommentStreams/i18n/jv.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "NoiX180"
+ ]
+ },
+ "commentstreams-error-prohibitedaction": "Tumindak $1 ora diidinaké tumrap ing kaca tanggapan.",
+ "commentstreams-author-anonymous": "anonim",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "Kaca sing ditanggapi ora ana.",
+ "commentstreams-api-error-edit-notloggedin": "Panjenengan kudu mlebu log saperlu mbesut.",
+ "commentstreams-api-error-vote-notloggedin": "Panjenengan kudu mlebu log saperlu awèh swara.",
+ "commentstreams-api-error-vote-novoteonreply": "Ora diidinaké awèh swara ing wangsulan.",
+ "commentstreams-validation-error-nocommenttext": "Panjenengan kudu ngisèni tulisan tanggapan.",
+ "commentstreams-buttontooltip-delete": "busak",
+ "commentstreams-dialog-buttontext-yes": "Ya",
+ "commentstreams-dialog-buttontext-no": "Ora",
+ "commentstreams-title-field-placeholder": "Isi sesirah...",
+ "echo-category-title-commentstreams-notification-category": "Ora ana tanggapan lan wangsulané",
+ "action-cs-comment": "kirim, besut, utawa busak tanggapan",
+ "action-cs-moderator-edit": "besut tanggapané panganggo liyané",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|awèh}} tanggapan $3",
+ "commentstreams-allcomments-nocommentsfound": "Ora ana tanggapan.",
+ "commentstreams-allcomments-label-page": "Kaca Tanggapan",
+ "commentstreams-allcomments-label-commenttitle": "Sesirah Tanggapan",
+ "commentstreams-allcomments-label-lastedited": "Dibesut Pungkasan"
+}
diff --git a/CommentStreams/i18n/ko.json b/CommentStreams/i18n/ko.json
new file mode 100644
index 00000000..50ac4d46
--- /dev/null
+++ b/CommentStreams/i18n/ko.json
@@ -0,0 +1,118 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ykhwong"
+ ]
+ },
+ "commentstreams-desc": "위키 문서에 댓글을 달 수 있게 합니다",
+ "commentstreams-error-prohibitedaction": "$1 동작은 댓글 문서에서 허용되지 않습니다.",
+ "commentstreams-error-comment-on-deleted-page": "이 댓글이 속하는 문서가 삭제되었습니다.",
+ "commentstreams-author-anonymous": "익명",
+ "apihelp-csQueryComment-description": "댓글의 제목, 사용자, 작성 타임스탬프, 위키텍스트를 반환합니다. pageid 또는 title을 지정해야 합니다.",
+ "apihelp-csQueryComment-summary": "댓글의 제목, 사용자, 작성 타임스탬프, 위키텍스트를 반환합니다. pageid나 title을 지정해야 합니다.",
+ "apihelp-csDeleteComment-description": "댓글을 삭제합니다. pageid 또는 title을 지정해야 합니다.",
+ "apihelp-csDeleteComment-summary": "댓글을 삭제합니다. pageid나 title을 지정해야 합니다.",
+ "apihelp-csDeleteComment-pageid-example": "문서 ID 3의 댓글 삭제",
+ "apihelp-csPostComment-description": "새로운 댓글을 게시합니다.",
+ "apihelp-csPostComment-summary": "새 댓글을 게시합니다.",
+ "apihelp-csPostComment-param-commenttitle": "댓글의 선택적 제목입니다.",
+ "apihelp-csPostComment-param-associatedid": "이 댓글이 속한 문서.",
+ "apihelp-csEditComment-description": "기존의 댓글을 편집합니다. pageid 또는 title을 지정해야 합니다.",
+ "apihelp-csEditComment-param-wikitext": "댓글의 위키텍스트입니다.",
+ "apihelp-csVote-description": "댓글에 투표(찬성, 반대, 중립)합니다.",
+ "apihelp-csVote-summary": "댓글에 투표(찬성, 반대, 중립)합니다.",
+ "apihelp-csVote-param-vote": "투표 (1, -1, 0).",
+ "apihelp-csVote-pageid-example": "문서 ID 3의 댓글에 투표",
+ "apihelp-csWatch-description": "답변을 받으면 알림을 받을 댓글을 주시합니다",
+ "apihelp-csUnwatch-description": "응답을 받을 때 더 이상 알림을 받지 않도록 댓글의 주시를 해제합니다",
+ "apihelp-csUnwatch-pageid-example": "문서 ID 3의 댓글의 주시를 해제합니다",
+ "commentstreams-api-error-notloggedin": "로그인해야 합니다.",
+ "commentstreams-api-error-commentnotfound": "요청하신 댓글을 찾을 수 없습니다.",
+ "commentstreams-api-error-notacomment": "지정된 문서 ID는 유효한 댓글을 참조하지 않습니다.",
+ "commentstreams-api-error-missingcommenttitle": "답변이 아닌 댓글에 대해서는 댓글 제목을 지정해야 합니다.",
+ "commentstreams-api-error-post-permissions": "사용자는 댓글을 게시할 권한이 없습니다.",
+ "commentstreams-api-error-post-parentandtitle": "parent id와 댓글 제목을 둘 다 지정할 수 없습니다.",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "응답을 받는 댓글이 존재하지 않습니다.",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "댓글을 달려는 문서가 존재하지 않습니다.",
+ "commentstreams-api-error-post": "댓글 추가 중에 오류가 발생했습니다.",
+ "commentstreams-api-error-edit-notloggedin": "편집하려면 로그인해야 합니다.",
+ "commentstreams-api-error-edit-permissions": "사용자는 댓글을 편집할 권한이 없습니다.",
+ "commentstreams-api-error-edit": "댓글 편집 중 오류가 발생했습니다.",
+ "commentstreams-api-error-delete-notloggedin": "삭제하려면 로그인해야 합니다.",
+ "commentstreams-api-error-delete-permissions": "사용자는 댓글을 삭제할 권한이 없습니다.",
+ "commentstreams-api-error-delete": "댓글 삭제 중에 오류가 발생했습니다.",
+ "commentstreams-api-error-vote-notloggedin": "투표하려면 로그인해야 합니다.",
+ "commentstreams-api-error-vote-novoteonreply": "답변에 투표하는 것은 허용되지 않습니다.",
+ "commentstreams-api-error-vote": "댓글에 투표하는 중에 오류가 발생했습니다.",
+ "commentstreams-api-error-watch-notloggedin": "댓글을 주시하려면 로그인해야 합니다.",
+ "commentstreams-api-error-watch-nowatchreply": "댓글 주시는 허용되지 않습니다.",
+ "commentstreams-api-error-watch": "댓글 주시에 오류가 발생했습니다.",
+ "commentstreams-api-error-unwatch-notloggedin": "댓글의 주시를 해제하려면 로그인해야 합니다.",
+ "commentstreams-api-error-unwatch-nounwatchreply": "답변의 주시 해제는 허용되지 않습니다.",
+ "commentstreams-api-error-unwatch": "댓글의 주시를 해제하는 중 오류가 발생했습니다.",
+ "commentstreams-validation-error-nocommenttitle": "댓글의 제목을 입력해야 합니다.",
+ "commentstreams-validation-error-nocommenttext": "댓글의 텍스트를 입력해야 합니다.",
+ "commentstreams-buttontext-add": "댓글 추가",
+ "commentstreams-buttontext-reply": "답변",
+ "commentstreams-buttontooltip-add": "댓글 추가",
+ "commentstreams-buttontooltip-reply": "답변",
+ "commentstreams-buttontooltip-edit": "편집",
+ "commentstreams-buttontooltip-delete": "삭제",
+ "commentstreams-buttontooltip-permalink": "고유링크",
+ "commentstreams-buttontooltip-collapse": "접기",
+ "commentstreams-buttontooltip-expand": "펼치기",
+ "commentstreams-buttontooltip-watch": "주시",
+ "commentstreams-buttontooltip-unwatch": "주시 해제",
+ "commentstreams-buttontooltip-submit": "제출",
+ "commentstreams-buttontooltip-cancel": "취소",
+ "commentstreams-dialog-delete-message": "이 댓글을 삭제하겠습니까?",
+ "commentstreams-dialog-buttontext-ok": "확인",
+ "commentstreams-dialog-buttontext-cancel": "취소",
+ "commentstreams-dialog-buttontext-yes": "예",
+ "commentstreams-dialog-buttontext-no": "아니오",
+ "commentstreams-datetext-postedon": "게시한 날짜",
+ "commentstreams-datetext-lasteditedon": "최근 편집:",
+ "commentstreams-title-field-placeholder": "제목을 입력하십시오...",
+ "commentstreams-body-field-placeholder": "새로운 댓글 텍스트를 입력하십시오...",
+ "echo-category-title-commentstreams-notification-category": "새로운 댓글과 답변",
+ "notification-header-commentstreams-comment-on-watched-page": "{{GENDER:$6|당신}}이 주시하고 있는 \"<i>$3</i>\" 문서의 \"<i>$2</i>\"에 $1님이 {{GENDER:$4|댓글을 달았습니다}}.",
+ "notification-subject-commentstreams-comment-on-watched-page": "주시 중인 문서에 누군가가 댓글을 달았습니다",
+ "notification-subject-commentstreams-reply-on-watched-page": "주시 중인 문서의 댓글에 누군가가 답변했습니다",
+ "notification-body-commentstreams-comment-on-watched-page": "댓글은 다음과 같습니다:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "응답:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "답변은 다음과 같습니다:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "댓글 방문",
+ "notification-link-label-commentstreams-reply-on-watched-page": "답변 방문",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "답변 방문",
+ "group-csmoderator": "조정자 (CommentStreams)",
+ "group-csmoderator-member": "{{GENDER:$1|조정자 (CommentStreams)}}",
+ "grouppage-csmoderator": "{{ns:project}}:조정자 (CommentStreams)",
+ "right-cs-comment": "사용자 자신의 댓글을 게시, 편집, 삭제합니다",
+ "action-cs-comment": "댓글을 게시, 편집, 삭제합니다",
+ "right-cs-moderator-edit": "사용자의 댓글 편집",
+ "action-cs-moderator-edit": "다른 사용자의 댓글 편집",
+ "right-cs-moderator-delete": "사용자의 댓글 삭제",
+ "action-cs-moderator-delete": "다른 사용자의 댓글 삭제",
+ "logentry-commentstreams-comment-create": "$1님이 $3 댓글을 {{GENDER:$2|만들었습니다}}",
+ "logentry-commentstreams-reply-create": "$1님이 $3 답변을 {{GENDER:$2|만들었습니다}}",
+ "logentry-commentstreams-comment-edit": "$1님이 $3 댓글을 {{GENDER:$2|편집했습니다}}",
+ "logentry-commentstreams-comment-moderator-edit": "$1님(조정자)이 $3 댓글을 {{GENDER:$2|편집했습니다}}",
+ "logentry-commentstreams-reply-edit": "$1님이 $3 답변을 {{GENDER:$2|편집했습니다}}",
+ "logentry-commentstreams-reply-moderator-edit": "$1님(조정자)이 $3 답변을 {{GENDER:$2|편집했습니다}}",
+ "logentry-commentstreams-comment-delete": "$1님이 $3 댓글을 {{GENDER:$2|삭제했습니다}}",
+ "logentry-commentstreams-comment-moderator-delete": "$1님(조정자)이 $3 댓글을 {{GENDER:$2|삭제했습니다}}",
+ "logentry-commentstreams-reply-delete": "$1님이 $3 답변을 {{GENDER:$2|삭제했습니다}}",
+ "logentry-commentstreams-reply-moderator-delete": "$1님(조정자)이 $3 답변을 {{GENDER:$2|삭제했습니다}}",
+ "commentstreamsallcomments": "모든 댓글",
+ "commentstreams-allcomments-nocommentsfound": "메시지가 없습니다.",
+ "commentstreams-allcomments-label-page": "댓글 문서",
+ "commentstreams-allcomments-label-associatedpage": "관련 문서",
+ "commentstreams-allcomments-label-commenttitle": "댓글 제목",
+ "commentstreams-allcomments-label-wikitext": "댓글",
+ "commentstreams-allcomments-label-author": "만든이",
+ "commentstreams-allcomments-label-created": "만들어짐",
+ "commentstreams-allcomments-label-lasteditor": "마지막 편집자",
+ "commentstreams-allcomments-label-lastedited": "최근 편집",
+ "commentstreams-allcomments-button-next": "다음",
+ "commentstreams-allcomments-button-previous": "이전"
+}
diff --git a/CommentStreams/i18n/ku-latn.json b/CommentStreams/i18n/ku-latn.json
new file mode 100644
index 00000000..f23b5c41
--- /dev/null
+++ b/CommentStreams/i18n/ku-latn.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cûndûllah el-Kurdî"
+ ]
+ },
+ "commentstreams-buttontooltip-edit": "biguherîne",
+ "commentstreams-buttontooltip-delete": "Jê bibe",
+ "commentstreams-buttontooltip-cancel": "betal bike",
+ "commentstreams-dialog-buttontext-cancel": "Betal bike",
+ "commentstreams-dialog-buttontext-yes": "Erê",
+ "commentstreams-dialog-buttontext-no": "Na",
+ "notification-body-commentstreams-reply-on-watched-page": "Bersiv:\n\n\n$5",
+ "commentstreams-allcomments-label-author": "Nivîskar",
+ "commentstreams-allcomments-label-lastedited": "Sererastkirina dawî",
+ "commentstreams-allcomments-button-next": "Pêşve"
+}
diff --git a/CommentStreams/i18n/lb.json b/CommentStreams/i18n/lb.json
new file mode 100644
index 00000000..e8975cf3
--- /dev/null
+++ b/CommentStreams/i18n/lb.json
@@ -0,0 +1,53 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby"
+ ]
+ },
+ "commentstreams-error-prohibitedaction": "D'Aktioun $1 ass op Bemierkungssäiten net erlaabt.",
+ "commentstreams-error-comment-on-deleted-page": "D'Säit mat där dës Bemierkung associéiert ass gouf geläscht.",
+ "commentstreams-author-anonymous": "anonym",
+ "apihelp-csPostComment-description": "Eng nei Bemierkung publizéieren.",
+ "apihelp-csPostComment-summary": "En nei Bemierkung publizéieren.",
+ "apihelp-csPostComment-param-commenttitle": "fakultativen Titel fir d'Bemierkung.",
+ "apihelp-csPostComment-param-wikitext": "Wikitext fir d'Bemierkung.",
+ "apihelp-csEditComment-param-commenttitle": "fakultativen Titel fir d'Bemierkung.",
+ "apihelp-csVote-param-vote": "ofstëmmen (1,-1, oder 0)",
+ "commentstreams-api-error-notloggedin": "Dir musst ageloggt sinn.",
+ "commentstreams-api-error-edit-notloggedin": "Dir musst ageloggt si fir z'änneren.",
+ "commentstreams-api-error-delete": "Feeler beim Läsche vun der Bemierkung.",
+ "commentstreams-api-error-vote-notloggedin": "Dir musst ageloggt si fir kënnen ofzestëmmen.",
+ "commentstreams-buttontext-add": "Bemierkung derbäisetzen",
+ "commentstreams-buttontext-reply": "Äntwerten",
+ "commentstreams-buttontooltip-add": "eng Bemierkung dobäisetzen",
+ "commentstreams-buttontooltip-reply": "äntwerten",
+ "commentstreams-buttontooltip-edit": "änneren",
+ "commentstreams-buttontooltip-delete": "läschen",
+ "commentstreams-buttontooltip-collapse": "zesummeklappen",
+ "commentstreams-buttontooltip-expand": "Opklappen",
+ "commentstreams-buttontooltip-watch": "Iwwerwaachen",
+ "commentstreams-buttontooltip-submit": "späicheren",
+ "commentstreams-buttontooltip-cancel": "ofbriechen",
+ "commentstreams-dialog-delete-message": "Sidd Dir sécher datt Dir dës Bemierkung läsche wëllt?",
+ "commentstreams-dialog-buttontext-ok": "OK",
+ "commentstreams-dialog-buttontext-cancel": "Ofbriechen",
+ "commentstreams-dialog-buttontext-yes": "Jo",
+ "commentstreams-dialog-buttontext-no": "Neen",
+ "commentstreams-datetext-lasteditedon": "Lescht Ännerung den",
+ "commentstreams-title-field-placeholder": "Titel aginn...",
+ "notification-body-commentstreams-comment-on-watched-page": "D'Bemierkung ass:\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "D'Äntwert ass:\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "D'Äntwert ass:\n\n\n$5",
+ "action-cs-moderator-edit": "Bemierkunge vun anere Benotzer änneren",
+ "action-cs-moderator-delete": "Bemierkunge vun anere Benotzer ze läschen",
+ "commentstreamsallcomments": "All Bemierkungen",
+ "commentstreams-allcomments-nocommentsfound": "Keng Bemierkunge fonnt.",
+ "commentstreams-allcomments-label-page": "Bemierkungs-Säit",
+ "commentstreams-allcomments-label-wikitext": "Bemierkung",
+ "commentstreams-allcomments-label-author": "Auteur",
+ "commentstreams-allcomments-label-created": "Ugeluecht",
+ "commentstreams-allcomments-label-lasteditor": "Leschte Benotzer deen eppes geännert huet",
+ "commentstreams-allcomments-label-lastedited": "Lescht Ännerung",
+ "commentstreams-allcomments-button-next": "Virun",
+ "commentstreams-allcomments-button-previous": "Vireg"
+}
diff --git a/CommentStreams/i18n/lv.json b/CommentStreams/i18n/lv.json
new file mode 100644
index 00000000..3e60a9b4
--- /dev/null
+++ b/CommentStreams/i18n/lv.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Papuass"
+ ]
+ },
+ "commentstreams-author-anonymous": "anonīms",
+ "apihelp-csVote-param-vote": "balsot (1, -1 vai 0).",
+ "commentstreams-buttontext-add": "Pievienot komentāru",
+ "commentstreams-buttontext-reply": "Atbildēt",
+ "commentstreams-buttontooltip-add": "pievienot komentāru",
+ "commentstreams-buttontooltip-edit": "labot",
+ "commentstreams-buttontooltip-delete": "dzēst",
+ "commentstreams-buttontooltip-cancel": "atcelt",
+ "commentstreams-dialog-buttontext-cancel": "Atcelt",
+ "commentstreams-dialog-buttontext-yes": "Jā",
+ "commentstreams-dialog-buttontext-no": "Nē",
+ "commentstreams-title-field-placeholder": "Ievadi nosaukumu...",
+ "notification-body-commentstreams-reply-on-watched-page": "Atbilde ir:\n\n\n$5",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|izveidoja}} komentāri $3",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|izdzēsa}} komentāru $3",
+ "commentstreams-allcomments-label-page": "Komentāra lapa",
+ "commentstreams-allcomments-label-author": "Autors"
+}
diff --git a/CommentStreams/i18n/mk.json b/CommentStreams/i18n/mk.json
new file mode 100644
index 00000000..2cd7a16c
--- /dev/null
+++ b/CommentStreams/i18n/mk.json
@@ -0,0 +1,131 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "commentstreams-desc": "Овозможува коментирање во викистраници",
+ "commentstreams-error-prohibitedaction": "Дејството $1 не е дозволено на страници со коментари.",
+ "commentstreams-error-comment-on-deleted-page": "Страницата со која е поврзан коментарот е избришана.",
+ "commentstreams-author-anonymous": "анонимен",
+ "apihelp-csQueryComment-description": "Дај го насловот, корисникот, времето и датумот и викитекстот на коментарот. Мора да се укаже назнака на страницата или наслов.",
+ "apihelp-csQueryComment-summary": "Дај го насловот, корисникот, времето и датумот и викитекстот на коментарот. Мора да се укаже назнака на страницата или наслов.",
+ "apihelp-csQueryComment-param-pageid": "назнака на страницата каде се наоѓа коментарот што се бара",
+ "apihelp-csQueryComment-param-title": "наслов на страницата каде се наоѓа коментарот што се бара",
+ "apihelp-csQueryComment-pageid-example": "побарај коментар со назнака на страницата 3 во викитекстот",
+ "apihelp-csPostComment-description": "Ставете нов коментар.",
+ "apihelp-csPostComment-summary": "Ставете нов коментар.",
+ "apihelp-csPostComment-param-commenttitle": "незадолжителен наслов на коментарот.",
+ "apihelp-csPostComment-param-wikitext": "викитекст за коментарот.",
+ "apihelp-csPostComment-param-associatedid": "со која страница е поврзан коментаров.",
+ "apihelp-csPostComment-param-parentid": "назнака на матичниот коментар, ако ова е одговор.",
+ "apihelp-csEditComment-description": "Изменете постоечки коментар. Треба да се укаже назнака или наслов на страницата.",
+ "apihelp-csEditComment-summary": "Изменете постоечки коменар. Треба да се укаже назнака или наслов на страницата.",
+ "apihelp-csEditComment-param-commenttitle": "незадолжителен наслов на коментарот.",
+ "apihelp-csEditComment-param-wikitext": "викитекст за коментарот.",
+ "apihelp-csVote-description": "Гласај (за, против или воздржан) по коментарот.",
+ "apihelp-csVote-summary": "Гласај (за, против или воздржан) по коментарот.",
+ "apihelp-csVote-param-vote": "глас (1, -1 или 0).",
+ "apihelp-csVote-pageid-example": "гласај за коментар со назнака на страницата 3",
+ "commentstreams-api-error-notloggedin": "Мора да сте најавени.",
+ "commentstreams-api-error-commentnotfound": "Не го најдов бараниот коментар.",
+ "commentstreams-api-error-notacomment": "Укажаната назнака на страницата не се однесува на важечки коментар.",
+ "commentstreams-api-error-missingcommenttitle": "Коментарите кои не се одговори мора да имаат укажано наслов.",
+ "commentstreams-api-error-post-permissions": "Корисникот нема дозвола за објавување коментари.",
+ "commentstreams-api-error-post-parentandtitle": "Не можете да ја укажете и матичната назнака и насловот на коментарот.",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "Коментарот на кој се одговара не постои.",
+ "commentstreams-api-error-post-associatedpageidmismatch": "Страницата на која се коментира не одговара на страницата на матичниот коментар.",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "Страницата на која се коментира не постои.",
+ "commentstreams-api-error-post": "Грешка при додавањето на коментарот.",
+ "commentstreams-api-error-edit-notloggedin": "Мора да сте најавени за да уредувате.",
+ "commentstreams-api-error-edit-permissions": "Корисникот нема дозвола да го менува коментарот.",
+ "commentstreams-api-error-edit": "Грешка при измена на коментарот.",
+ "commentstreams-api-error-delete-notloggedin": "Мора да сте најавени за да бришете.",
+ "commentstreams-api-error-delete-permissions": "Корисникот нема дозвола за бришење на коментарот.",
+ "commentstreams-api-error-delete": "Грешка при бришењето на коментарот.",
+ "commentstreams-api-error-vote-notloggedin": "Мора да сте најавени за да гласате.",
+ "commentstreams-api-error-vote-novoteonreply": "Гласањето за одговори не е дозволено.",
+ "commentstreams-api-error-vote": "Грешка при гласањето за коментарот.",
+ "commentstreams-api-error-watch-notloggedin": "Мора да сте најавени за да набљудувате коментар.",
+ "commentstreams-api-error-watch-nowatchreply": "Набљудувањето на одговори не е дозволено.",
+ "commentstreams-api-error-watch": "Грешка при набљудувањето на коментарот.",
+ "commentstreams-api-error-unwatch-notloggedin": "Мора да сте најавени за да го отстраните коментарот од набљудуваните.",
+ "commentstreams-api-error-unwatch-nounwatchreply": "Отстранување на одговори од набљудуваните не е дозволено.",
+ "commentstreams-api-error-unwatch": "Грешка при отстранувањето на коментарот од набљудуваните.",
+ "commentstreams-validation-error-nocommenttitle": "Мора да внесете наслов на коментарот.",
+ "commentstreams-validation-error-nocommenttext": "Мора да внесете текст на коментарот.",
+ "commentstreams-buttontext-add": "Додај коментар",
+ "commentstreams-buttontext-reply": "Одговори",
+ "commentstreams-buttontooltip-add": "додај коментар",
+ "commentstreams-buttontooltip-reply": "одговори",
+ "commentstreams-buttontooltip-edit": "измени",
+ "commentstreams-buttontooltip-moderator-edit": "модераторско уредување",
+ "commentstreams-buttontooltip-delete": "избриши",
+ "commentstreams-buttontooltip-moderator-delete": "модераторско бришење",
+ "commentstreams-buttontooltip-permalink": "постојана врска",
+ "commentstreams-buttontooltip-collapse": "собери",
+ "commentstreams-buttontooltip-expand": "отвори",
+ "commentstreams-buttontooltip-upvote": "гласај позитивно",
+ "commentstreams-buttontooltip-downvote": "гласај негативно",
+ "commentstreams-buttontooltip-watch": "набљудувај",
+ "commentstreams-buttontooltip-unwatch": "престани набљуд.",
+ "commentstreams-buttontooltip-submit": "поднеси",
+ "commentstreams-buttontooltip-cancel": "откажи",
+ "commentstreams-dialog-delete-message": "Дали сте сигурни дека сакате да го избришете коментаров?",
+ "commentstreams-dialog-anonymous-message": "Не сте најавени. Ако продолжите со зачувување на коментаров, ќе се заведе вашата IP-адреса и нема да можете да го измените или избришете истиот.",
+ "commentstreams-dialog-buttontext-ok": "ОК",
+ "commentstreams-dialog-buttontext-cancel": "Откажи",
+ "commentstreams-dialog-buttontext-yes": "Да",
+ "commentstreams-dialog-buttontext-no": "Не",
+ "commentstreams-datetext-postedon": "Објавено на",
+ "commentstreams-datetext-lasteditedon": "Последно уредување:",
+ "commentstreams-datetext-moderated": "модерирано",
+ "commentstreams-title-field-placeholder": "Внесете наслов...",
+ "commentstreams-body-field-placeholder": "Текст на новиот коментар...",
+ "echo-category-title-commentstreams-notification-category": "Нови коментари и одговори",
+ "notification-header-commentstreams-comment-on-watched-page": "$1 {{GENDER:$4|коментираше}} „<i>$2</i>“ на страницата „<i>$3</i>“, која ја {{GENDER:$6|набљудувате}}.",
+ "notification-header-commentstreams-reply-on-watched-page": "$1 {{GENDER:$4|одговори}} на коментарот „<i>$2</i>“ на страницата „<i>$3</i>“, која ја {{GENDER:$6|набљудувате}}.",
+ "notification-header-commentstreams-reply-to-watched-comment": "$1 {{GENDER:$4|одговори}} на коментарот „<i>$2</i>“ што го {{GENDER:$6|набљудувате}} на страницата „<i>$3</i>“.",
+ "notification-subject-commentstreams-comment-on-watched-page": "Некој коментираше на страница што ја набљудувате",
+ "notification-subject-commentstreams-reply-on-watched-page": "Некој одговори на коментар на страница која ја набљудувате",
+ "notification-subject-commentstreams-reply-to-watched-comment": "Некој одговори на коментар што го набљудувате",
+ "notification-body-commentstreams-comment-on-watched-page": "Коментарот гласи:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "Одговорот гласи:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "Одговорот гласи:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "Појди на коментарот",
+ "notification-link-label-commentstreams-reply-on-watched-page": "Појди на одговорот",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "Појди на одговорот",
+ "group-csmoderator": "Модератори (CommentStreams)",
+ "group-csmoderator-member": "{{GENDER:$1|модератор (CommentStreams)}}",
+ "grouppage-csmoderator": "{{ns:project}}:Модератори (CommentStreams)",
+ "right-cs-comment": "Објава, измена и бришење на сопствените коментари на корисникот",
+ "action-cs-comment": "објава, измена или бришење на коментари",
+ "right-cs-moderator-edit": "Измена на било чии коментари",
+ "action-cs-moderator-edit": "измена на коментари на други корисници",
+ "right-cs-moderator-delete": "Бришење било чии коментари.",
+ "action-cs-moderator-delete": "бришење коментари на други корисници",
+ "log-name-commentstreams": "Дневник на CommentStreams",
+ "log-description-commentstreams": "Ова е следач на дјества на CommentStreams.",
+ "logentry-commentstreams-comment-create": "$1 го {{GENDER:$2|создаде}} коментарот $3",
+ "logentry-commentstreams-reply-create": "$1 го {{GENDER:$2|создаде}} одговорот $3",
+ "logentry-commentstreams-comment-edit": "$1 го {{GENDER:$2|измени}} коментарот $3",
+ "logentry-commentstreams-comment-moderator-edit": "$1 {{GENDER:$2|(модератор) го измени}} коментарот $3",
+ "logentry-commentstreams-reply-edit": "$1 го {{GENDER:$2|измени}} одговорот $3",
+ "logentry-commentstreams-reply-moderator-edit": "$1 {{GENDER:$2|(модератор) го измени}} одговорот $3",
+ "logentry-commentstreams-comment-delete": "$1 го {{GENDER:$2|избриша}} коментарот $3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|(модератор) го избриша}} коментарот $3",
+ "logentry-commentstreams-reply-delete": "$1 го {{GENDER:$2|избриша}} одговорот $3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|(модератор) го избриша}} одговорот $3",
+ "commentstreamsallcomments": "Сите коментари",
+ "commentstreams-allcomments-nocommentsfound": "Не пронајдов коментари.",
+ "commentstreams-allcomments-label-page": "Страница за коментари",
+ "commentstreams-allcomments-label-associatedpage": "Поврзана страница",
+ "commentstreams-allcomments-label-commenttitle": "Наслов на коментарот",
+ "commentstreams-allcomments-label-wikitext": "Коментар",
+ "commentstreams-allcomments-label-author": "Автор",
+ "commentstreams-allcomments-label-created": "Создадено",
+ "commentstreams-allcomments-label-lasteditor": "Последен уредник",
+ "commentstreams-allcomments-label-lastedited": "Последно уредување",
+ "commentstreams-allcomments-button-next": "Следно",
+ "commentstreams-allcomments-button-previous": "Претходно"
+}
diff --git a/CommentStreams/i18n/nb.json b/CommentStreams/i18n/nb.json
new file mode 100644
index 00000000..35012417
--- /dev/null
+++ b/CommentStreams/i18n/nb.json
@@ -0,0 +1,98 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jon Harald Søby",
+ "Citadell",
+ "Orf3us"
+ ]
+ },
+ "commentstreams-desc": "Muliggjør kommentarer på wikisider",
+ "commentstreams-error-prohibitedaction": "Handlingen $1 er ikke tillatt på kommentarsider.",
+ "commentstreams-author-anonymous": "anonym",
+ "apihelp-csQueryComment-summary": "Returnerer tittelen, brukeren, opprettelsestidsstempelet og wikiteksten til en kommentar. Enten pageid eller title må oppgis.",
+ "apihelp-csQueryComment-pageid-example": "spørringskommentar med side-ID 3 i wikitekst",
+ "apihelp-csDeleteComment-summary": "Slett en kommentar. Enten pageid eller title må oppgis.",
+ "apihelp-csDeleteComment-pageid-example": "slett kommentar med side-ID 3",
+ "apihelp-csPostComment-description": "Post en ny kommentar.",
+ "apihelp-csPostComment-param-commenttitle": "valgfri tittel på kommentar.",
+ "apihelp-csEditComment-description": "Redigere en eksisterende kommentar. Enten pageid eller title må oppgis.",
+ "apihelp-csEditComment-summary": "Rediger en eksisterende kommentar. Enten pageid eller title må oppgis.",
+ "apihelp-csEditComment-param-wikitext": "wikitekst for kommentar.",
+ "apihelp-csVote-description": "Stem (opp, ned eller nøytralt) på en kommentar.",
+ "apihelp-csVote-summary": "Stem (opp, ned eller nøytralt) på en kommentar.",
+ "apihelp-csVote-param-title": "tittelen på siden som inneholder kommentaren det skal stemmes på",
+ "apihelp-csVote-param-vote": "stem (1, -1 eller 0).",
+ "apihelp-csVote-pageid-example": "stem på kommentar med side-ID 3",
+ "apihelp-csWatch-summary": "Overvåk en kommentar for å få varsel når det kommer svar",
+ "apihelp-csWatch-param-title": "tittelen på siden som inneholder kommentaren som skal overvåkes",
+ "apihelp-csWatch-title-example": "overvåk kommentaren med sidetittelen CommentStreams:3",
+ "apihelp-csUnwatch-summary": "Fjern overvåkning av en kommentar for ikke lenger å motta varsler når den får svar",
+ "apihelp-csUnwatch-pageid-example": "fjern overvåking av kommentaren med side-ID 3",
+ "commentstreams-api-error-commentnotfound": "Den etterspurte kommentaren ble ikke funnet.",
+ "commentstreams-api-error-post-permissions": "Brukeren har ikke tillatelse til å poste en kommentar.",
+ "commentstreams-api-error-post-parentandtitle": "Du kan ikke angi både foreldre-ID-en og kommentartittelen.",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "Siden det kommenteres på finnes ikke.",
+ "commentstreams-api-error-post": "Feil under tilføyelse av kommentar.",
+ "commentstreams-api-error-edit-notloggedin": "Du må være logget inn for å redigere.",
+ "commentstreams-api-error-edit-permissions": "Brukeren har ikke tillatelse til å redigere kommentaren.",
+ "commentstreams-api-error-delete-haschildren": "Kan ikke slette et emne som har svar. Oppdater siden for å se den oppdaterte kommentarstrømmen.",
+ "commentstreams-api-error-delete": "Feil under sletting av kommentar.",
+ "commentstreams-api-error-vote-notloggedin": "Du må være logget inn for å stemme.",
+ "commentstreams-api-error-vote-novoteonreply": "Å stemme på svar er ikke tillatt.",
+ "commentstreams-api-error-vote": "Feil under stemming på kommentar.",
+ "commentstreams-api-error-watch-notloggedin": "Du må være logget inn for å overvåke en kommentar.",
+ "commentstreams-api-error-watch-nowatchreply": "Overvåking av svar er ikke tillatt.",
+ "commentstreams-api-error-unwatch-notloggedin": "Du må være logget inn for å fjerne overvåkning av en kommentar.",
+ "commentstreams-validation-error-nocommenttext": "Du må skrive inn kommentartekst.",
+ "commentstreams-buttontext-add": "Legg til kommentar",
+ "commentstreams-buttontext-reply": "Svar",
+ "commentstreams-buttontooltip-add": "legg til en kommentar",
+ "commentstreams-buttontooltip-reply": "svar",
+ "commentstreams-buttontooltip-edit": "rediger",
+ "commentstreams-buttontooltip-delete": "slett",
+ "commentstreams-buttontooltip-permalink": "permanent lenke",
+ "commentstreams-buttontooltip-collapse": "slå sammen",
+ "commentstreams-buttontooltip-expand": "utvid",
+ "commentstreams-buttontooltip-upvote": "stem opp",
+ "commentstreams-buttontooltip-unwatch": "fjern overvåkning",
+ "commentstreams-buttontooltip-submit": "send",
+ "commentstreams-buttontooltip-cancel": "avbryt",
+ "commentstreams-dialog-delete-message": "Er du sikker på at du vil slette denne kommentaren?",
+ "commentstreams-dialog-buttontext-cancel": "Avbryt",
+ "commentstreams-dialog-buttontext-yes": "Ja",
+ "commentstreams-dialog-buttontext-no": "Nei",
+ "commentstreams-datetext-postedon": "Postet",
+ "commentstreams-datetext-lasteditedon": "Sist redigert",
+ "commentstreams-datetext-moderated": "moderert",
+ "commentstreams-title-field-placeholder": "Skriv inn tittel …",
+ "echo-category-title-commentstreams-notification-category": "Nye kommentarer og svar",
+ "notification-header-commentstreams-comment-on-watched-page": "$1 {{GENDER:$4|kommenterte}} «<i>$2</i>» på siden «<i>$3</i>», som {{GENDER:$6|du}} overvåker.",
+ "notification-subject-commentstreams-reply-on-watched-page": "Noen har svart på en kommentar på en side du overvåker",
+ "notification-body-commentstreams-comment-on-watched-page": "Kommentaren er:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "Svaret er:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "Besøk kommentar",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "Besøk svar",
+ "right-cs-comment": "Poste, redigere og slette sine egne kommentarer",
+ "action-cs-comment": "poste, redigere eller slette kommentarer",
+ "right-cs-moderator-edit": "Redigere kommentarer fra andre brukere",
+ "action-cs-moderator-edit": "redigere kommentarer fra andre brukere",
+ "right-cs-moderator-delete": "Slette kommentarer av alle brukere",
+ "action-cs-moderator-delete": "slette kommentarer av andre brukere",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|opprettet}} kommentaren $3",
+ "logentry-commentstreams-reply-create": "$1 {{GENDER:$2|opprettet}} svaret $3",
+ "logentry-commentstreams-comment-moderator-edit": "$1 (moderator) {{GENDER:$2|redigerte}} kommentaren $3",
+ "logentry-commentstreams-reply-moderator-edit": "$1 (moderator) {{GENDER:$2|redigerte}} svaret $3",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|slettet}} kommentaren $3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 (moderator) {{GENDER:$2|slettet}} kommentaren $3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 (moderator) {{GENDER:$2|slettet}} svaret $3",
+ "commentstreamsallcomments": "Alle kommentarer",
+ "commentstreams-allcomments-nocommentsfound": "Ingen kommentarer funnet.",
+ "commentstreams-allcomments-label-page": "Kommentarside",
+ "commentstreams-allcomments-label-commenttitle": "Kommentartittel",
+ "commentstreams-allcomments-label-wikitext": "Kommentar",
+ "commentstreams-allcomments-label-author": "Forfatter",
+ "commentstreams-allcomments-label-lasteditor": "Siste bidragsyter",
+ "commentstreams-allcomments-label-lastedited": "Sist redigert",
+ "commentstreams-allcomments-button-next": "Neste",
+ "commentstreams-allcomments-button-previous": "Forrige"
+}
diff --git a/CommentStreams/i18n/nl.json b/CommentStreams/i18n/nl.json
new file mode 100644
index 00000000..45278354
--- /dev/null
+++ b/CommentStreams/i18n/nl.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mainframe98"
+ ]
+ },
+ "commentstreams-author-anonymous": "anoniem",
+ "commentstreams-api-error-notloggedin": "U moet ingelogd zijn.",
+ "commentstreams-api-error-edit-notloggedin": "U moet aangemeld zijn om te kunnen bewerken.",
+ "commentstreams-api-error-delete-notloggedin": "U moet aangemeld zijn om te kunnen verwijderen.",
+ "commentstreams-buttontooltip-reply": "antwoorden",
+ "commentstreams-buttontooltip-edit": "bewerken",
+ "commentstreams-buttontooltip-delete": "verwijderen",
+ "commentstreams-buttontooltip-permalink": "permanente koppeling",
+ "commentstreams-buttontooltip-collapse": "samenvouwen",
+ "commentstreams-buttontooltip-expand": "uitvouwen",
+ "commentstreams-buttontooltip-watch": "volgen",
+ "commentstreams-buttontooltip-submit": "verzenden",
+ "commentstreams-buttontooltip-cancel": "annuleren",
+ "commentstreams-dialog-buttontext-ok": "OK",
+ "commentstreams-dialog-buttontext-cancel": "Annuleren",
+ "commentstreams-dialog-buttontext-yes": "Ja",
+ "commentstreams-dialog-buttontext-no": "Nee",
+ "commentstreams-datetext-postedon": "Geplaatst op",
+ "commentstreams-datetext-lasteditedon": "Laatste bewerkt op",
+ "commentstreams-title-field-placeholder": "Voer titel in...",
+ "notification-link-label-commentstreams-reply-on-watched-page": "Bekijk reactie",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "Bekijk reactie",
+ "log-name-commentstreams": "CommentStreams logboek",
+ "commentstreams-allcomments-label-associatedpage": "Gekoppelde pagina",
+ "commentstreams-allcomments-label-author": "Auteur",
+ "commentstreams-allcomments-label-created": "Aangemaakt",
+ "commentstreams-allcomments-label-lasteditor": "Laatste bewerker",
+ "commentstreams-allcomments-label-lastedited": "Laatste bewerking",
+ "commentstreams-allcomments-button-next": "Volgende",
+ "commentstreams-allcomments-button-previous": "Vorige"
+}
diff --git a/CommentStreams/i18n/pl.json b/CommentStreams/i18n/pl.json
new file mode 100644
index 00000000..394b5df0
--- /dev/null
+++ b/CommentStreams/i18n/pl.json
@@ -0,0 +1,49 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrumps"
+ ]
+ },
+ "apihelp-csVote-param-vote": "głos (1, -1 albo 0).",
+ "commentstreams-api-error-notloggedin": "Musisz się zalogować.",
+ "commentstreams-api-error-post": "Błąd dodawania komentarza.",
+ "commentstreams-api-error-edit-notloggedin": "Aby edytować, musisz się zalogować.",
+ "commentstreams-api-error-delete": "Błąd usuwania komentarza.",
+ "commentstreams-api-error-vote-notloggedin": "Aby głosować, musisz się zalogować.",
+ "commentstreams-validation-error-nocommenttitle": "Musisz wprowadzić tytuł komentarza.",
+ "commentstreams-validation-error-nocommenttext": "Musisz wprowadzić tekst komentarza.",
+ "commentstreams-buttontext-add": "Dodaj komentarz",
+ "commentstreams-buttontext-reply": "Odpowiedz",
+ "commentstreams-buttontooltip-add": "dodaj komentarz",
+ "commentstreams-buttontooltip-reply": "odpowiedz",
+ "commentstreams-buttontooltip-edit": "edytuj",
+ "commentstreams-buttontooltip-delete": "usuń",
+ "commentstreams-buttontooltip-collapse": "zwiń",
+ "commentstreams-buttontooltip-expand": "rozwiń",
+ "commentstreams-buttontooltip-watch": "obserwuj",
+ "commentstreams-buttontooltip-submit": "wyślij",
+ "commentstreams-buttontooltip-cancel": "anuluj",
+ "commentstreams-dialog-delete-message": "Czy na pewno chcesz usunąć ten komentarz?",
+ "commentstreams-dialog-buttontext-ok": "OK",
+ "commentstreams-dialog-buttontext-cancel": "Anuluj",
+ "commentstreams-dialog-buttontext-yes": "Tak",
+ "commentstreams-dialog-buttontext-no": "Nie",
+ "commentstreams-datetext-lasteditedon": "Ostatnio edytowano",
+ "commentstreams-title-field-placeholder": "Wprowadź tytuł...",
+ "echo-category-title-commentstreams-notification-category": "Nowe komentarze i odpowiedzi",
+ "group-csmoderator": "Moderatorzy (CommentStreams)",
+ "group-csmoderator-member": "{{GENDER:$1|moderator|moderatorka}} (CommentStreams)",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|utworzył|utworzyła}} komentarz $3",
+ "logentry-commentstreams-reply-create": "$1 {{GENDER:$2|utworzył|utworzyła}} odpowiedź $3",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|usunął|usunęła}} komentarz $3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|(moderator) usunął|(moderatorka) usunęła}} komentarz $3",
+ "logentry-commentstreams-reply-delete": "$1 {{GENDER:$2|usunął|usunęła}} odpowiedź $3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|(moderator) usunął|(moderatorka) usunęła}} odpowiedź $3",
+ "commentstreamsallcomments": "Wszystkie komentarze",
+ "commentstreams-allcomments-nocommentsfound": "Nie znaleziono komentarzy.",
+ "commentstreams-allcomments-label-commenttitle": "Tytuł komentarza",
+ "commentstreams-allcomments-label-wikitext": "Komentarz",
+ "commentstreams-allcomments-label-author": "Autor",
+ "commentstreams-allcomments-button-next": "Następny",
+ "commentstreams-allcomments-button-previous": "Poprzedni"
+}
diff --git a/CommentStreams/i18n/ps.json b/CommentStreams/i18n/ps.json
new file mode 100644
index 00000000..5337bbbd
--- /dev/null
+++ b/CommentStreams/i18n/ps.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Khan"
+ ]
+ },
+ "commentstreams-buttontooltip-edit": "سمول",
+ "commentstreams-dialog-buttontext-ok": "ښه"
+}
diff --git a/CommentStreams/i18n/pt-br.json b/CommentStreams/i18n/pt-br.json
new file mode 100644
index 00000000..885c8dfe
--- /dev/null
+++ b/CommentStreams/i18n/pt-br.json
@@ -0,0 +1,157 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eduardo Addad de Oliveira"
+ ]
+ },
+ "commentstreams-desc": "Permite deixar comentários nas páginas da wiki",
+ "commentstreams-error-prohibitedaction": "A ação $1 não é permitida nas páginas de comentários.",
+ "commentstreams-error-comment-on-deleted-page": "A página à qual este comentário está associado foi eliminada.",
+ "commentstreams-author-anonymous": "anônimo",
+ "apihelp-csQueryComment-description": "Devolver o título, o usuário, a data e hora de criação, e o texto wiki de um comentário. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csQueryComment-summary": "Devolver o título, o usuário, a data e hora de criação, e o texto wiki de um comentário. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csQueryComment-param-pageid": "identificador da página que contém o comentário a ser consultado",
+ "apihelp-csQueryComment-param-title": "título da página que contém o comentário a ser consultado",
+ "apihelp-csQueryComment-pageid-example": "consultar o comentário com o identificador de página 3 em texto wiki",
+ "apihelp-csQueryComment-title-example": "consultar o comentário com o título de página CommentStreams:3 em texto wiki",
+ "apihelp-csDeleteComment-description": "Eliminar um comentário. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csDeleteComment-summary": "Eliminar um comentário. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csDeleteComment-param-pageid": "identificador da página que contém o comentário para ser eliminado",
+ "apihelp-csDeleteComment-param-title": "título da página que contém o comentário para ser eliminado",
+ "apihelp-csDeleteComment-pageid-example": "eliminar o comentário com o identificador de página 3",
+ "apihelp-csDeleteComment-title-example": "eliminar o comentário com o título de página CommentStreams:3",
+ "apihelp-csPostComment-description": "Publicar um comentário novo.",
+ "apihelp-csPostComment-summary": "Publicar um comentário novo.",
+ "apihelp-csPostComment-param-commenttitle": "título opcional para o comentário.",
+ "apihelp-csPostComment-param-wikitext": "texto wiki para o comentário.",
+ "apihelp-csPostComment-param-associatedid": "página à qual este comentário está associado.",
+ "apihelp-csPostComment-param-parentid": "identificador de página do comentário mãe se isto for uma resposta.",
+ "apihelp-csEditComment-description": "Editar um comentário existente. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csEditComment-summary": "Editar um comentário existente. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csEditComment-param-pageid": "identificador da página que contém o comentário a ser editado",
+ "apihelp-csEditComment-param-title": "título da página que contém o comentário para ser editado",
+ "apihelp-csEditComment-param-commenttitle": "título opcional para o comentário.",
+ "apihelp-csEditComment-param-wikitext": "texto wiki para o comentário.",
+ "apihelp-csVote-description": "Votar (positivo, negativo ou neutro) num comentário.",
+ "apihelp-csVote-summary": "Votar (positivo, negativo ou neutro) num comentário.",
+ "apihelp-csVote-param-pageid": "identificador da página que contém o comentário para ser votado",
+ "apihelp-csVote-param-title": "título da página que contém o comentário para ser votado",
+ "apihelp-csVote-param-vote": "voto (1, -1 ou 0).",
+ "apihelp-csVote-pageid-example": "votar no comentário com o identificador de página 3",
+ "apihelp-csVote-title-example": "votar no comentário com o título de página CommentStreams:3",
+ "apihelp-csWatch-description": "Vigiar um comentário para ser notificado quando ele receber respostas",
+ "apihelp-csWatch-summary": "Vigiar um comentário para ser notificado quando ele receber respostas",
+ "apihelp-csWatch-param-pageid": "identificador da página que contém o comentário para ser vigiado",
+ "apihelp-csWatch-param-title": "título da página que contém o comentário para ser vigiado",
+ "apihelp-csWatch-pageid-example": "vigiar o comentário com o identificador de página 3",
+ "apihelp-csWatch-title-example": "vigiar o comentário com o título de página CommentStreams:3",
+ "apihelp-csUnwatch-description": "Deixar de vigiar um comentário para não ser notificado quando ele receber respostas",
+ "apihelp-csUnwatch-summary": "Deixar de vigiar um comentário para não ser notificado quando ele receber respostas",
+ "apihelp-csUnwatch-param-pageid": "identificador da página que contém o comentário a deixar de ser vigiado",
+ "apihelp-csUnwatch-param-title": "título da página que contém o comentário para deixar de ser vigiado",
+ "apihelp-csUnwatch-pageid-example": "deixar de vigiar o comentário com o identificador de página 3",
+ "apihelp-csUnwatch-title-example": "deixar de vigiar o comentário com o título de página CommentStreams:3",
+ "commentstreams-api-error-notloggedin": "Você deve estar logado.",
+ "commentstreams-api-error-commentnotfound": "O comentário solicitado não foi encontrado.",
+ "commentstreams-api-error-notacomment": "O identificador de página fornecido não remete para um comentário válido.",
+ "commentstreams-api-error-missingcommenttitle": "Tem de ser fornecido um título para comentários que não são respostas.",
+ "commentstreams-api-error-post-permissions": "O usuário não tem permissão para publicar um comentário.",
+ "commentstreams-api-error-post-parentandtitle": "Não pode especificar em simultâneo o identificador do comentário mãe e o título do comentário.",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "O comentário que está para ser respondido não existe.",
+ "commentstreams-api-error-post-associatedpageidmismatch": "A página que está a ser comentada não corresponde à página que o comentário mãe está a comentar.",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "A página que está a ser comentada não existe.",
+ "commentstreams-api-error-post": "Ocorreu uma falha ao adicionar o comentário.",
+ "commentstreams-api-error-edit-notloggedin": "Tem de ter uma sessão iniciada para editar.",
+ "commentstreams-api-error-edit-permissions": "O usuário não tem permissão para editar o comentário.",
+ "commentstreams-api-error-edit": "Erro ao editar comentários.",
+ "commentstreams-api-error-delete-notloggedin": "Você deve estar logado para excluir.",
+ "commentstreams-api-error-delete-permissions": "O usuário não possui permissão para excluir o comentário.",
+ "commentstreams-api-error-delete-haschildren": "Não pode eliminar um tópico que tem respostas. Recarregue a página para ver a cadeia de comentários atualizada.",
+ "commentstreams-api-error-delete": "Ocorreu uma falha ao eliminar o comentário.",
+ "commentstreams-api-error-vote-notloggedin": "Você deve estar logado para votar.",
+ "commentstreams-api-error-vote-novoteonreply": "Não é permitido votar em respostas.",
+ "commentstreams-api-error-vote": "Ocorreu uma falha ao votar no comentário.",
+ "commentstreams-api-error-watch-notloggedin": "Tem de ter uma sessão iniciada para vigiar um comentário.",
+ "commentstreams-api-error-watch-nowatchreply": "Não é permitido ver respostas.",
+ "commentstreams-api-error-watch": "Ocorreu uma falha ao vigiar o comentário.",
+ "commentstreams-api-error-unwatch-notloggedin": "Tem de ter uma sessão iniciada para deixar de vigiar um comentário.",
+ "commentstreams-api-error-unwatch-nounwatchreply": "Não é permitido deixar de vigiar respostas.",
+ "commentstreams-api-error-unwatch": "Ocorreu uma falha ao deixar de vigiar o comentário.",
+ "commentstreams-validation-error-nocommenttitle": "Tem de introduzir um título no comentário.",
+ "commentstreams-validation-error-nocommenttext": "Tem de introduzir um texto no comentário.",
+ "commentstreams-buttontext-add": "Escrever um comentário",
+ "commentstreams-buttontext-reply": "Responder",
+ "commentstreams-buttontooltip-add": "adicionar um comentário",
+ "commentstreams-buttontooltip-reply": "responder",
+ "commentstreams-buttontooltip-edit": "editar",
+ "commentstreams-buttontooltip-moderator-edit": "edição de moderador",
+ "commentstreams-buttontooltip-delete": "excluir",
+ "commentstreams-buttontooltip-moderator-delete": "eliminação de moderador",
+ "commentstreams-buttontooltip-permalink": "Link permanente",
+ "commentstreams-buttontooltip-collapse": "recolher",
+ "commentstreams-buttontooltip-expand": "expandir",
+ "commentstreams-buttontooltip-upvote": "voto positivo",
+ "commentstreams-buttontooltip-downvote": "voto negativo",
+ "commentstreams-buttontooltip-watch": "vigiar",
+ "commentstreams-buttontooltip-unwatch": "deixar de vigiar",
+ "commentstreams-buttontooltip-submit": "enviar",
+ "commentstreams-buttontooltip-cancel": "cancelar",
+ "commentstreams-dialog-delete-message": "Tem a certeza de que deseja eliminar este comentário?",
+ "commentstreams-dialog-anonymous-message": "Você não está logado. Se você continuar a salvar este comentário, seu endereço IP será gravado e você não poderá editar ou excluir este comentário.",
+ "commentstreams-dialog-buttontext-ok": "OK",
+ "commentstreams-dialog-buttontext-cancel": "Cancelar",
+ "commentstreams-dialog-buttontext-yes": "Sim",
+ "commentstreams-dialog-buttontext-no": "Não",
+ "commentstreams-urldialog-instructions": "Copie e cole o URL abaixo para compartilhar um permalink para este comentário. Pressione escape para descartar essa caixa de diálogo.",
+ "commentstreams-datetext-postedon": "Publicado em",
+ "commentstreams-datetext-lasteditedon": "Última edição",
+ "commentstreams-datetext-moderated": "moderado",
+ "commentstreams-title-field-placeholder": "Digite o título ...",
+ "commentstreams-body-field-placeholder": "Introduzir novo texto de comentário...",
+ "echo-category-title-commentstreams-notification-category": "Comentários e respostas novos",
+ "notification-header-commentstreams-comment-on-watched-page": "$1 {{GENDER:$4|comentou}} \"<i>$2</i>\" na página \"<i>$3</i>\", que {{GENDER:$6|você}} está para vigiar.",
+ "notification-header-commentstreams-reply-on-watched-page": "$1 {{GENDER:$4|respondeu}} ao comentário \"<i>$2</i>\" na página \"<i>$3</i>\", que {{GENDER:$6|você}} está vigiando.",
+ "notification-header-commentstreams-reply-to-watched-comment": "$1 {{GENDER:$4|respondeu}} ao comentário \"<i>$2</i>\", que {{GENDER:$6|você}} está vigiando, na página \"<i>$3</i>\".",
+ "notification-subject-commentstreams-comment-on-watched-page": "Alguém deixou um comentário numa página que você está vigiando.",
+ "notification-subject-commentstreams-reply-on-watched-page": "Alguém respondeu a um comentário numa página que você está está vigiando.",
+ "notification-subject-commentstreams-reply-to-watched-comment": "Alguém respondeu a um comentário que você está vigiando.",
+ "notification-body-commentstreams-comment-on-watched-page": "O comentário é:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "A resposta é:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "A resposta é:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "Visitar o comentário",
+ "notification-link-label-commentstreams-reply-on-watched-page": "Visitar a resposta",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "Visitar a resposta",
+ "group-csmoderator": "Moderadores (CommentStreams)",
+ "group-csmoderator-member": "{{GENDER:$1|moderador|moderadora}} (CommentStreams)",
+ "grouppage-csmoderator": "{{ns:project}}:Moderadores (CommentStreams)",
+ "right-cs-comment": "Publicar, editar e eliminar comentários do próprio utilizador",
+ "action-cs-comment": "publicar, editar ou eliminar comentários",
+ "right-cs-moderator-edit": "Editar comentários de qualquer usuário",
+ "action-cs-moderator-edit": "editar comentários de outros usuários",
+ "right-cs-moderator-delete": "Excluir comentários por qualquer usuário",
+ "action-cs-moderator-delete": "excluir comentários de outros usuários",
+ "log-name-commentstreams": "Registo de CommentStreams",
+ "log-description-commentstreams": "Estes eventos registam as ocorrências de eventos CommentStreams.",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|criou}} o comentário $3",
+ "logentry-commentstreams-reply-create": "$1 {{GENDER:$2|criou}} a resposta $3",
+ "logentry-commentstreams-comment-edit": "$1 {{GENDER:$2|editou}} o comentário $3",
+ "logentry-commentstreams-comment-moderator-edit": "$1 {{GENDER:$2|(moderador)|(moderadora)}} editou o comentário $3",
+ "logentry-commentstreams-reply-edit": "$1 {{GENDER:$2|editou}} a resposta $3",
+ "logentry-commentstreams-reply-moderator-edit": "$1 {{GENDER:$2|(moderador)|(moderadora)}} editou a resposta $3",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|eliminou}} o comentário $3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|(moderador)|(moderadora)}} eliminou o comentário $3",
+ "logentry-commentstreams-reply-delete": "$1 {{GENDER:$2|eliminou}} a resposta $3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|(moderador)|(moderadora)}} eliminou a resposta $3",
+ "commentstreamsallcomments": "Todos os comentários",
+ "commentstreams-allcomments-nocommentsfound": "Não foi encontrado nenhum comentário.",
+ "commentstreams-allcomments-label-page": "Página de comentários",
+ "commentstreams-allcomments-label-associatedpage": "Página associada",
+ "commentstreams-allcomments-label-commenttitle": "Título do comentário",
+ "commentstreams-allcomments-label-wikitext": "Comentário",
+ "commentstreams-allcomments-label-author": "Autor",
+ "commentstreams-allcomments-label-created": "Criado",
+ "commentstreams-allcomments-label-lasteditor": "Último editor",
+ "commentstreams-allcomments-label-lastedited": "Última edição",
+ "commentstreams-allcomments-button-next": "Próximo",
+ "commentstreams-allcomments-button-previous": "Anterior"
+}
diff --git a/CommentStreams/i18n/pt.json b/CommentStreams/i18n/pt.json
new file mode 100644
index 00000000..9652106b
--- /dev/null
+++ b/CommentStreams/i18n/pt.json
@@ -0,0 +1,158 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hamilton Abreu",
+ "Athena in Wonderland"
+ ]
+ },
+ "commentstreams-desc": "Permite deixar comentários nas páginas da wiki",
+ "commentstreams-error-prohibitedaction": "A ação $1 não é permitida nas páginas de comentários.",
+ "commentstreams-error-comment-on-deleted-page": "A página à qual este comentário está associado foi eliminada.",
+ "commentstreams-author-anonymous": "anónimo",
+ "apihelp-csQueryComment-description": "Devolver o título, o utilizador, a data e hora de criação, e o texto wiki de um comentário. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csQueryComment-summary": "Devolver o título, o utilizador, a data e hora de criação, e o texto wiki de um comentário. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csQueryComment-param-pageid": "identificador da página que contém o comentário a ser consultado",
+ "apihelp-csQueryComment-param-title": "título da página que contém o comentário a ser consultado",
+ "apihelp-csQueryComment-pageid-example": "consultar o comentário com o identificador de página 3 em texto wiki",
+ "apihelp-csQueryComment-title-example": "consultar o comentário com o título de página CommentStreams:3 em texto wiki",
+ "apihelp-csDeleteComment-description": "Eliminar um comentário. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csDeleteComment-summary": "Eliminar um comentário. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csDeleteComment-param-pageid": "identificador da página que contém o comentário a ser eliminado",
+ "apihelp-csDeleteComment-param-title": "título da página que contém o comentário a ser eliminado",
+ "apihelp-csDeleteComment-pageid-example": "eliminar o comentário com o identificador de página 3",
+ "apihelp-csDeleteComment-title-example": "eliminar o comentário com o título de página CommentStreams:3",
+ "apihelp-csPostComment-description": "Publicar um comentário novo.",
+ "apihelp-csPostComment-summary": "Publicar um comentário novo.",
+ "apihelp-csPostComment-param-commenttitle": "título opcional para o comentário.",
+ "apihelp-csPostComment-param-wikitext": "texto wiki para o comentário.",
+ "apihelp-csPostComment-param-associatedid": "página à qual este comentário está associado.",
+ "apihelp-csPostComment-param-parentid": "identificador de página do comentário mãe se isto for uma resposta.",
+ "apihelp-csEditComment-description": "Editar um comentário existente. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csEditComment-summary": "Editar um comentário existente. Tem de ser fornecido o identificador da página ou o título.",
+ "apihelp-csEditComment-param-pageid": "identificador da página que contém o comentário a ser editado",
+ "apihelp-csEditComment-param-title": "título da página que contém o comentário a ser editado",
+ "apihelp-csEditComment-param-commenttitle": "título opcional para o comentário.",
+ "apihelp-csEditComment-param-wikitext": "texto wiki para o comentário.",
+ "apihelp-csVote-description": "Votar (positivo, negativo ou neutro) num comentário.",
+ "apihelp-csVote-summary": "Votar (positivo, negativo ou neutro) num comentário.",
+ "apihelp-csVote-param-pageid": "identificador da página que contém o comentário a ser votado",
+ "apihelp-csVote-param-title": "título da página que contém o comentário a ser votado",
+ "apihelp-csVote-param-vote": "voto (1, -1 ou 0).",
+ "apihelp-csVote-pageid-example": "votar no comentário com o identificador de página 3",
+ "apihelp-csVote-title-example": "votar no comentário com o título de página CommentStreams:3",
+ "apihelp-csWatch-description": "Vigiar um comentário para ser notificado quando ele receber respostas",
+ "apihelp-csWatch-summary": "Vigiar um comentário para ser notificado quando ele receber respostas",
+ "apihelp-csWatch-param-pageid": "identificador da página que contém o comentário a ser vigiado",
+ "apihelp-csWatch-param-title": "título da página que contém o comentário a ser vigiado",
+ "apihelp-csWatch-pageid-example": "vigiar o comentário com o identificador de página 3",
+ "apihelp-csWatch-title-example": "vigiar o comentário com o título de página CommentStreams:3",
+ "apihelp-csUnwatch-description": "Deixar de vigiar um comentário para não ser notificado quando ele receber respostas",
+ "apihelp-csUnwatch-summary": "Deixar de vigiar um comentário para não ser notificado quando ele receber respostas",
+ "apihelp-csUnwatch-param-pageid": "identificador da página que contém o comentário a deixar de ser vigiado",
+ "apihelp-csUnwatch-param-title": "título da página que contém o comentário a deixar de ser vigiado",
+ "apihelp-csUnwatch-pageid-example": "deixar de vigiar o comentário com o identificador de página 3",
+ "apihelp-csUnwatch-title-example": "deixar de vigiar o comentário com o título de página CommentStreams:3",
+ "commentstreams-api-error-notloggedin": "Tem de ter uma sessão iniciada.",
+ "commentstreams-api-error-commentnotfound": "O comentário solicitado não foi encontrado.",
+ "commentstreams-api-error-notacomment": "O identificador de página fornecido não remete para um comentário válido.",
+ "commentstreams-api-error-missingcommenttitle": "Tem de ser fornecido um título para comentários que não são respostas.",
+ "commentstreams-api-error-post-permissions": "O utilizador não tem permissão para publicar um comentário.",
+ "commentstreams-api-error-post-parentandtitle": "Não pode especificar em simultâneo o identificador do comentário mãe e o título do comentário.",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "O comentário que está a ser respondido não existe.",
+ "commentstreams-api-error-post-associatedpageidmismatch": "A página que está a ser comentada não corresponde à página que o comentário mãe está a comentar.",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "A página que está a ser comentada não existe.",
+ "commentstreams-api-error-post": "Ocorreu uma falha ao adicionar o comentário.",
+ "commentstreams-api-error-edit-notloggedin": "Tem de ter uma sessão iniciada para editar.",
+ "commentstreams-api-error-edit-permissions": "O utilizador não tem permissão para editar o comentário.",
+ "commentstreams-api-error-edit": "Ocorreu uma falha ao editar o comentário.",
+ "commentstreams-api-error-delete-notloggedin": "Tem de ter uma sessão iniciada para eliminar.",
+ "commentstreams-api-error-delete-permissions": "O utilizador não tem permissão para eliminar o comentário.",
+ "commentstreams-api-error-delete-haschildren": "Não pode eliminar um tópico que tem respostas. Recarregue a página para ver a cadeia de comentários atualizada.",
+ "commentstreams-api-error-delete": "Ocorreu uma falha ao eliminar o comentário.",
+ "commentstreams-api-error-vote-notloggedin": "Tem de ter uma sessão iniciada para votar.",
+ "commentstreams-api-error-vote-novoteonreply": "Não é permitido votar em respostas.",
+ "commentstreams-api-error-vote": "Ocorreu uma falha ao votar no comentário.",
+ "commentstreams-api-error-watch-notloggedin": "Tem de ter uma sessão iniciada para vigiar um comentário.",
+ "commentstreams-api-error-watch-nowatchreply": "Não é permitido vigiar respostas.",
+ "commentstreams-api-error-watch": "Ocorreu uma falha ao vigiar o comentário.",
+ "commentstreams-api-error-unwatch-notloggedin": "Tem de ter uma sessão iniciada para deixar de vigiar um comentário.",
+ "commentstreams-api-error-unwatch-nounwatchreply": "Não é permitido deixar de vigiar respostas.",
+ "commentstreams-api-error-unwatch": "Ocorreu uma falha ao deixar de vigiar o comentário.",
+ "commentstreams-validation-error-nocommenttitle": "Tem de introduzir um título no comentário.",
+ "commentstreams-validation-error-nocommenttext": "Tem de introduzir um texto no comentário.",
+ "commentstreams-buttontext-add": "Escrever um comentário",
+ "commentstreams-buttontext-reply": "Responder",
+ "commentstreams-buttontooltip-add": "adicionar um comentário",
+ "commentstreams-buttontooltip-reply": "responder",
+ "commentstreams-buttontooltip-edit": "editar",
+ "commentstreams-buttontooltip-moderator-edit": "edição de moderador",
+ "commentstreams-buttontooltip-delete": "eliminar",
+ "commentstreams-buttontooltip-moderator-delete": "eliminação de moderador",
+ "commentstreams-buttontooltip-permalink": "hiperligação permanente",
+ "commentstreams-buttontooltip-collapse": "recolher",
+ "commentstreams-buttontooltip-expand": "expandir",
+ "commentstreams-buttontooltip-upvote": "voto positivo",
+ "commentstreams-buttontooltip-downvote": "voto negativo",
+ "commentstreams-buttontooltip-watch": "vigiar",
+ "commentstreams-buttontooltip-unwatch": "deixar de vigiar",
+ "commentstreams-buttontooltip-submit": "enviar",
+ "commentstreams-buttontooltip-cancel": "cancelar",
+ "commentstreams-dialog-delete-message": "Tem a certeza de que deseja eliminar este comentário?",
+ "commentstreams-dialog-anonymous-message": "Não tem uma sessão iniciada. Se gravar este comentário o seu endereço IP será registado, e não poderá editar nem eliminar este comentário.",
+ "commentstreams-dialog-buttontext-ok": "OK",
+ "commentstreams-dialog-buttontext-cancel": "Cancelar",
+ "commentstreams-dialog-buttontext-yes": "Sim",
+ "commentstreams-dialog-buttontext-no": "Não",
+ "commentstreams-urldialog-instructions": "Copiar e inserir o URL abaixo para partilhar uma hiperligação permanente para este comentário. Pressione escape para dispensar este diálogo.",
+ "commentstreams-datetext-postedon": "Publicado em",
+ "commentstreams-datetext-lasteditedon": "Última edição",
+ "commentstreams-datetext-moderated": "moderado",
+ "commentstreams-title-field-placeholder": "Introduzir o título...",
+ "commentstreams-body-field-placeholder": "Introduzir novo texto de comentário...",
+ "echo-category-title-commentstreams-notification-category": "Comentários e respostas novos",
+ "notification-header-commentstreams-comment-on-watched-page": "$1 {{GENDER:$4|comentou}} \"<i>$2</i>\" na página \"<i>$3</i>\", que {{GENDER:$6|você}} está a vigiar.",
+ "notification-header-commentstreams-reply-on-watched-page": "$1 {{GENDER:$4|respondeu}} ao comentário \"<i>$2</i>\" na página \"<i>$3</i>\", que {{GENDER:$6|você}} está a vigiar.",
+ "notification-header-commentstreams-reply-to-watched-comment": "$1 {{GENDER:$4|respondeu}} ao comentário \"<i>$2</i>\", que {{GENDER:$6|você}} está a vigiar, na página \"<i>$3</i>\".",
+ "notification-subject-commentstreams-comment-on-watched-page": "Alguém deixou um comentário numa página que você está a vigiar.",
+ "notification-subject-commentstreams-reply-on-watched-page": "Alguém respondeu a um comentário numa página que você está a vigiar.",
+ "notification-subject-commentstreams-reply-to-watched-comment": "Alguém respondeu a um comentário que você está a vigiar.",
+ "notification-body-commentstreams-comment-on-watched-page": "O comentário é:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "A resposta é:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "A resposta é:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "Visitar o comentário",
+ "notification-link-label-commentstreams-reply-on-watched-page": "Visitar a resposta",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "Visitar a resposta",
+ "group-csmoderator": "Moderadores (CommentStreams)",
+ "group-csmoderator-member": "{{GENDER:$1|moderador|moderadora}} (CommentStreams)",
+ "grouppage-csmoderator": "{{ns:project}}:Moderadores (CommentStreams)",
+ "right-cs-comment": "Publicar, editar e eliminar comentários do próprio utilizador",
+ "action-cs-comment": "publicar, editar ou eliminar comentários",
+ "right-cs-moderator-edit": "Editar comentários de qualquer utilizador",
+ "action-cs-moderator-edit": "editar comentários de outros utilizadores",
+ "right-cs-moderator-delete": "Eliminar comentários de qualquer utilizador",
+ "action-cs-moderator-delete": "eliminar comentários de outros utilizadores",
+ "log-name-commentstreams": "Registo de CommentStreams",
+ "log-description-commentstreams": "Estes eventos registam as ocorrências de eventos CommentStreams.",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|criou}} o comentário $3",
+ "logentry-commentstreams-reply-create": "$1 {{GENDER:$2|criou}} a resposta $3",
+ "logentry-commentstreams-comment-edit": "$1 {{GENDER:$2|editou}} o comentário $3",
+ "logentry-commentstreams-comment-moderator-edit": "$1 {{GENDER:$2|(moderador)|(moderadora)}} editou o comentário $3",
+ "logentry-commentstreams-reply-edit": "$1 {{GENDER:$2|editou}} a resposta $3",
+ "logentry-commentstreams-reply-moderator-edit": "$1 {{GENDER:$2|(moderador)|(moderadora)}} editou a resposta $3",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|eliminou}} o comentário $3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|(moderador)|(moderadora)}} eliminou o comentário $3",
+ "logentry-commentstreams-reply-delete": "$1 {{GENDER:$2|eliminou}} a resposta $3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|(moderador)|(moderadora)}} eliminou a resposta $3",
+ "commentstreamsallcomments": "Todos os comentários",
+ "commentstreams-allcomments-nocommentsfound": "Não foi encontrado nenhum comentário.",
+ "commentstreams-allcomments-label-page": "Página de comentários",
+ "commentstreams-allcomments-label-associatedpage": "Página associada",
+ "commentstreams-allcomments-label-commenttitle": "Título do comentário",
+ "commentstreams-allcomments-label-wikitext": "Comentário",
+ "commentstreams-allcomments-label-author": "Autor",
+ "commentstreams-allcomments-label-created": "Criado",
+ "commentstreams-allcomments-label-lasteditor": "Último editor",
+ "commentstreams-allcomments-label-lastedited": "Última edição",
+ "commentstreams-allcomments-button-next": "Seguinte",
+ "commentstreams-allcomments-button-previous": "Anterior"
+}
diff --git a/CommentStreams/i18n/qqq.json b/CommentStreams/i18n/qqq.json
index d824cf43..72fb8202 100644
--- a/CommentStreams/i18n/qqq.json
+++ b/CommentStreams/i18n/qqq.json
@@ -2,11 +2,15 @@
"@metadata": {
"authors": [
"Cindy Cicalese",
- "Jason Ji"
+ "Jason Ji",
+ "Liuxinyu970226",
+ "Robby"
]
},
- "commentstreams-desc": "{{desc|name=CommentStreams|url=http://gestalt.mitre.org/gestaltd/index.php/CommentStreams}}",
+ "commentstreams-desc": "{{desc|name=CommentStreams|url=https://www.mediawiki.org/wiki/Extension:CommentStreams}}",
"commentstreams-error-prohibitedaction": "Error message.",
+ "commentstreams-error-comment-on-deleted-page": "Error message.",
+ "commentstreams-author-anonymous": "The name displayed for anonymous comment authors\n{{Identical|Anonymous}}",
"apihelp-csQueryComment-description": "{{doc-apihelp-description|csQueryComment}}",
"apihelp-csQueryComment-summary": "{{doc-apihelp-summary|csQueryComment}}",
"apihelp-csQueryComment-param-pageid": "{{doc-apihelp-param|csQueryComment|pageid}}",
@@ -78,25 +82,29 @@
"commentstreams-api-error-unwatch": "Error message.",
"commentstreams-validation-error-nocommenttitle": "Error message.",
"commentstreams-validation-error-nocommenttext": "Error message.",
+ "commentstreams-buttontext-add": "User interface button label. Upper case for stylistic reasons.",
+ "commentstreams-buttontext-reply": "User interface button label. Upper case for stylistic reasons.\n{{Identical|Reply}}",
"commentstreams-buttontooltip-add": "User interface button tooltip.",
- "commentstreams-buttontooltip-reply": "User interface button tooltip.",
- "commentstreams-buttontooltip-edit": "User interface button tooltip.",
+ "commentstreams-buttontooltip-reply": "User interface button tooltip.\n{{Identical|Reply}}",
+ "commentstreams-buttontooltip-edit": "User interface button tooltip.\n{{Identical|Edit}}",
"commentstreams-buttontooltip-moderator-edit": "User interface button tooltip.",
- "commentstreams-buttontooltip-delete": "User interface button tooltip.",
+ "commentstreams-buttontooltip-delete": "User interface button tooltip.\n{{Identical|Delete}}",
"commentstreams-buttontooltip-moderator-delete": "User interface button tooltip.",
- "commentstreams-buttontooltip-permalink": "User interface button tooltip.",
- "commentstreams-buttontooltip-collapse": "User interface button tooltip.",
- "commentstreams-buttontooltip-expand": "User interface button tooltip.",
+ "commentstreams-buttontooltip-permalink": "User interface button tooltip.\n{{Identical|Permalink}}",
+ "commentstreams-buttontooltip-collapse": "User interface button tooltip.\n{{Identical|Collapse}}",
+ "commentstreams-buttontooltip-expand": "User interface button tooltip.\n{{Identical|Expand}}",
"commentstreams-buttontooltip-upvote": "User interface button tooltip.",
"commentstreams-buttontooltip-downvote": "User interface button tooltip.",
- "commentstreams-buttontooltip-watch": "User interface button tooltip.",
- "commentstreams-buttontooltip-unwatch": "User interface button tooltip.",
- "commentstreams-buttontooltip-submit": "User interface button text.",
- "commentstreams-buttontooltip-cancel": "User interface button text.",
+ "commentstreams-buttontooltip-watch": "User interface button tooltip.\n{{Identical|Watch}}",
+ "commentstreams-buttontooltip-unwatch": "User interface button tooltip.",
+ "commentstreams-buttontooltip-submit": "User interface button text.\n{{Identical|Submit}}",
+ "commentstreams-buttontooltip-cancel": "User interface button text.\n{{Identical|Cancel}}",
"commentstreams-dialog-delete-message": "User interface dialog message.",
- "commentstreams-dialog-buttontext-ok": "User interface dialog button text.",
- "commentstreams-dialog-buttontext-yes": "User interface dialog button text.",
- "commentstreams-dialog-buttontext-no": "User interface dialog button text.",
+ "commentstreams-dialog-anonymous-message": "User interface dialog message.",
+ "commentstreams-dialog-buttontext-ok": "User interface dialog button text.\n{{Identical|OK}}",
+ "commentstreams-dialog-buttontext-cancel": "User interface dialog button text.\n{{Identical|Cancel}}",
+ "commentstreams-dialog-buttontext-yes": "User interface dialog button text.\n{{Identical|Yes}}",
+ "commentstreams-dialog-buttontext-no": "User interface dialog button text.\n{{Identical|No}}",
"commentstreams-urldialog-instructions": "User interface dialog button text.",
"commentstreams-datetext-postedon": "User interface date text",
"commentstreams-datetext-lasteditedon": "User interface date text",
@@ -108,10 +116,10 @@
"notification-header-commentstreams-reply-on-watched-page": "Flyout-specific format for displaying notification header of a new reply on a watched page.\n\nParameters:\n* $1 - the formatted username of the person who commented.\n* $2 - the comment title.\n* $3 - the display name of the page being commented on.\n* $4 - the username of the person who commented (for gender).\n* $5 - the username of the viewing user (for gender).",
"notification-header-commentstreams-reply-to-watched-comment": "Flyout-specific format for displaying notification header of a reply to a comment by the user.\n\nParameters:\n* $1 - the formatted username of the person who commented.\n* $2 - the comment title.\n* $3 - the display name of the page being commented on.\n* $4 - the username of the person who commented (for gender).\n* $5 - the username of the viewing user (for gender).",
"notification-subject-commentstreams-comment-on-watched-page": "Echo email subject.",
- "notification-body-commentstreams-comment-on-watched-page": "Echo email body.\n\nParameters:\n*$1 - the username of the user authoring the new comment.\n* $2 - the display name of the comment author.\n* $3 - the title of the comment.\n* $4 - the display title of the page being commented on.\n* $5 - a link to that page.\n* $6 - the wikitext of the new comment.",
"notification-subject-commentstreams-reply-on-watched-page": "Echo email subject.",
- "notification-body-commentstreams-reply-on-watched-page": "Echo email body.\n\nParameters:\n*$1 - the username of the user authoring the new comment.\n* $2 - the display name of the comment author.\n* $3 - the title of the comment.\n* $4 - the display title of the page being commented on.\n* $5 - a link to that page.\n* $6 - the wikitext of the new comment.",
"notification-subject-commentstreams-reply-to-watched-comment": "Echo email subject.",
+ "notification-body-commentstreams-comment-on-watched-page": "Echo email body.\n\nParameters:\n*$1 - the username of the user authoring the new comment.\n* $2 - the display name of the comment author.\n* $3 - the title of the comment.\n* $4 - the display title of the page being commented on.\n* $5 - a link to that page.\n* $6 - the wikitext of the new comment.",
+ "notification-body-commentstreams-reply-on-watched-page": "Echo email body.\n\nParameters:\n*$1 - the username of the user authoring the new comment.\n* $2 - the display name of the comment author.\n* $3 - the title of the comment.\n* $4 - the display title of the page being commented on.\n* $5 - a link to that page.\n* $6 - the wikitext of the new comment.",
"notification-body-commentstreams-reply-to-watched-comment": "Echo email body.\n\nParameters:\n*$1 - the username of the user authoring the new comment.\n* $2 - the display name of the comment author.\n* $3 - the title of the comment.\n* $4 - the display title of the page being commented on.\n* $5 - a link to that page.\n* $6 - the wikitext of the new comment.",
"notification-link-label-commentstreams-comment-on-watched-page": "Label",
"notification-link-label-commentstreams-reply-on-watched-page": "Label",
@@ -119,10 +127,12 @@
"group-csmoderator": "{{doc-group|csmoderator|group}}",
"group-csmoderator-member": "{{doc-group|csmoderator|member}}",
"grouppage-csmoderator": "{{doc-group|csmoderator|page}}",
- "right-cs-moderator-edit": "{{doc-right|csedit}}",
- "action-cs-moderator-edit": "{{doc-action|csedit}}",
- "right-cs-moderator-delete": "{{doc-right|csdelete}}",
- "action-cs-moderator-delete": "{{doc-action|csdelete}}",
+ "right-cs-comment": "{{doc-right|cs-comment}}",
+ "action-cs-comment": "{{doc-action|cs-comment}}",
+ "right-cs-moderator-edit": "{{doc-right|cs-moderator-edit}}",
+ "action-cs-moderator-edit": "{{doc-action|cs-moderator-edit}}",
+ "right-cs-moderator-delete": "{{doc-right|cs-moderator-delete}}",
+ "action-cs-moderator-delete": "{{doc-action|cs-moderator-delete}}",
"log-name-commentstreams": "The Special:Log log name that appears in the drop-down on the Special:Log page",
"log-description-commentstreams": "The Special:Log description that appears on the Special:Log page when you filter logs on this specific log name",
"logentry-commentstreams-comment-create": "The template of the log entry message",
@@ -136,14 +146,16 @@
"logentry-commentstreams-reply-delete": "The template of the log entry message",
"logentry-commentstreams-reply-moderator-delete": "The template of the log entry message",
"commentstreamsallcomments": "Special page title",
+ "commentstreams-allcomments-nocommentsfound": "Message to user.",
"commentstreams-allcomments-label-page": "Table column label",
"commentstreams-allcomments-label-associatedpage": "Table column label",
"commentstreams-allcomments-label-commenttitle": "Table column label",
- "commentstreams-allcomments-label-wikitext": "Table column label",
- "commentstreams-allcomments-label-author": "Table column label",
+ "commentstreams-allcomments-label-wikitext": "Table column label\n{{Identical|Comment}}",
+ "commentstreams-allcomments-label-author": "Table column label\n{{Identical|Author}}",
"commentstreams-allcomments-label-created": "Table column label",
"commentstreams-allcomments-label-lasteditor": "Table column label",
"commentstreams-allcomments-label-lastedited": "Table column label",
- "commentstreams-allcomments-button-next": "Button label",
- "commentstreams-allcomments-button-previous": "Button label"
+ "commentstreams-allcomments-button-next": "Button label\n{{Identical|Next}}",
+ "commentstreams-allcomments-button-previous": "Button label\n{{Identical|Previous}}",
+ "commentstreams-ve-conversion-error": "Error message"
}
diff --git a/CommentStreams/i18n/roa-tara.json b/CommentStreams/i18n/roa-tara.json
new file mode 100644
index 00000000..5bf6d8dd
--- /dev/null
+++ b/CommentStreams/i18n/roa-tara.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "logentry-commentstreams-comment-create": "$1 commende {{GENDER:$2|ccrejate}} $3",
+ "commentstreams-allcomments-nocommentsfound": "Nisciune commende acchiate.",
+ "commentstreams-allcomments-label-lastedited": "Urteme cangiamende"
+}
diff --git a/CommentStreams/i18n/ru.json b/CommentStreams/i18n/ru.json
new file mode 100644
index 00000000..99aad599
--- /dev/null
+++ b/CommentStreams/i18n/ru.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kareyac"
+ ]
+ },
+ "commentstreams-author-anonymous": "аноним",
+ "commentstreams-buttontooltip-add": "добавить комментарий",
+ "commentstreams-buttontooltip-reply": "ответить",
+ "commentstreams-buttontooltip-edit": "править",
+ "commentstreams-buttontooltip-delete": "удалить",
+ "commentstreams-buttontooltip-expand": "развернуть",
+ "commentstreams-buttontooltip-unwatch": "не следить",
+ "commentstreams-buttontooltip-cancel": "отмена",
+ "commentstreams-dialog-buttontext-ok": "ОК",
+ "commentstreams-dialog-buttontext-yes": "Да",
+ "commentstreams-dialog-buttontext-no": "Нет",
+ "commentstreamsallcomments": "Все комментарии",
+ "commentstreams-allcomments-label-author": "Автор",
+ "commentstreams-allcomments-label-created": "Создано",
+ "commentstreams-allcomments-button-previous": "Предыдущая"
+}
diff --git a/CommentStreams/i18n/sa.json b/CommentStreams/i18n/sa.json
new file mode 100644
index 00000000..6d8be5fa
--- /dev/null
+++ b/CommentStreams/i18n/sa.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Charunandan16"
+ ]
+ },
+ "commentstreams-buttontext-reply": "उत्तरम्",
+ "commentstreams-buttontooltip-add": "टिप्पनी सम्पाद्यताम्"
+}
diff --git a/CommentStreams/i18n/sat.json b/CommentStreams/i18n/sat.json
new file mode 100644
index 00000000..8c77faa1
--- /dev/null
+++ b/CommentStreams/i18n/sat.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ramjit Tudu"
+ ]
+ },
+ "commentstreams-buttontooltip-reply": "ᱛᱮᱞᱟ",
+ "commentstreams-buttontooltip-delete": "ᱜᱮᱫ ᱜᱤᱰᱤ",
+ "commentstreams-buttontooltip-expand": "ᱯᱟᱥᱱᱟᱶ",
+ "commentstreams-buttontooltip-watch": "ᱧᱮᱞᱢᱮ",
+ "commentstreams-buttontooltip-unwatch": "ᱵᱟᱝ ᱧᱮᱞ",
+ "commentstreams-buttontooltip-submit": "ᱮᱢ",
+ "commentstreams-dialog-buttontext-ok": "ᱴᱷᱤᱠ ᱜᱮᱭᱟ",
+ "commentstreams-dialog-buttontext-yes": "ᱦᱮᱸ",
+ "commentstreams-dialog-buttontext-no": "ᱵᱟᱝ",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "ᱛᱮᱞᱟ ᱧᱮᱞ",
+ "commentstreams-allcomments-label-lasteditor": "ᱢᱩᱪᱟᱹᱫ ᱥᱟᱯᱲᱮᱛ",
+ "commentstreams-allcomments-label-lastedited": "ᱢᱩᱪᱟᱹᱫ ᱥᱟᱯᱲᱟᱣ ᱟᱹᱨᱩ",
+ "commentstreams-allcomments-button-next": "ᱞᱟᱦᱟ ᱥᱮᱫ",
+ "commentstreams-allcomments-button-previous": "ᱯᱟᱹᱪᱷᱞᱟᱹ"
+}
diff --git a/CommentStreams/i18n/sd.json b/CommentStreams/i18n/sd.json
new file mode 100644
index 00000000..4cea6bc8
--- /dev/null
+++ b/CommentStreams/i18n/sd.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Indus Asia"
+ ]
+ },
+ "apihelp-csPostComment-description": "نيئن راءِ درج ڪيو.",
+ "apihelp-csPostComment-summary": "نيئن راءِ ڏيو",
+ "commentstreams-buttontooltip-add": "راءِ شامل ڪيو",
+ "commentstreams-buttontooltip-reply": "ورندي ڏيو",
+ "commentstreams-buttontooltip-edit": "سنواريو",
+ "commentstreams-buttontooltip-delete": "ڊاهيو",
+ "commentstreams-buttontooltip-expand": "وڌايو",
+ "commentstreams-buttontooltip-cancel": "رد",
+ "commentstreams-dialog-buttontext-ok": "ٺيڪ (او ڪي) آهي",
+ "commentstreams-dialog-buttontext-yes": "ھا",
+ "commentstreams-dialog-buttontext-no": "نه",
+ "commentstreams-datetext-postedon": "تي درجيڪاري ڪئي وئي (پوسٽيڊ آن)",
+ "commentstreams-datetext-lasteditedon": "تي آخري ڀيرو سنواريو ويو",
+ "commentstreams-title-field-placeholder": "عنوان ڏيو (اينٽر ٽائيٽل)",
+ "commentstreams-allcomments-nocommentsfound": "ڪي به رايا نه مليا.",
+ "commentstreams-allcomments-label-associatedpage": "لاڳاپيل صفحو",
+ "commentstreams-allcomments-label-author": "ليکڪ",
+ "commentstreams-allcomments-label-created": "سرجيل (Created)",
+ "commentstreams-allcomments-label-lasteditor": "آخري ايڊيٽر",
+ "commentstreams-allcomments-label-lastedited": "آخري ڀيرو سنواريل",
+ "commentstreams-allcomments-button-previous": "اڳوڻو"
+}
diff --git a/CommentStreams/i18n/sk.json b/CommentStreams/i18n/sk.json
new file mode 100644
index 00000000..13d6a5ac
--- /dev/null
+++ b/CommentStreams/i18n/sk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pmikolas44"
+ ]
+ },
+ "commentstreams-error-comment-on-deleted-page": "Stránka, ku ktorej je tento komentár priradený, bola odstránená."
+}
diff --git a/CommentStreams/i18n/skr-arab.json b/CommentStreams/i18n/skr-arab.json
new file mode 100644
index 00000000..343c1f34
--- /dev/null
+++ b/CommentStreams/i18n/skr-arab.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saraiki"
+ ]
+ },
+ "commentstreams-author-anonymous": "گمنام",
+ "apihelp-csPostComment-description": "نویں رائے ݙیوو",
+ "apihelp-csPostComment-summary": "نویں رائے ݙیوو",
+ "commentstreams-buttontext-add": "تبصرہ کرو",
+ "commentstreams-buttontext-reply": "جواب",
+ "commentstreams-buttontooltip-reply": "جواب",
+ "commentstreams-buttontooltip-edit": "لکھو",
+ "commentstreams-buttontooltip-delete": "مٹاؤ",
+ "commentstreams-buttontooltip-collapse": "لکاؤ",
+ "commentstreams-buttontooltip-expand": "ودھاؤ",
+ "commentstreams-buttontooltip-watch": "اکھ تلے رکھو",
+ "commentstreams-buttontooltip-unwatch": "اکھ ہیٹھوں ہٹاؤ",
+ "commentstreams-buttontooltip-submit": "جمع کرواؤ",
+ "commentstreams-buttontooltip-cancel": "منسوخ",
+ "commentstreams-dialog-buttontext-ok": "ٹھیک ہے",
+ "commentstreams-dialog-buttontext-cancel": "منسوخ",
+ "commentstreams-dialog-buttontext-yes": "جیا",
+ "commentstreams-dialog-buttontext-no": "کو",
+ "notification-link-label-commentstreams-comment-on-watched-page": "رائے ݙیکھو",
+ "notification-link-label-commentstreams-reply-on-watched-page": "جواب ݙیکھو",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "جواب ݙیکھو",
+ "commentstreamsallcomments": "سارے تبصرے",
+ "commentstreams-allcomments-label-wikitext": "رائے",
+ "commentstreams-allcomments-label-author": "مصنف",
+ "commentstreams-allcomments-label-created": "بݨ ڳیا",
+ "commentstreams-allcomments-button-next": "اڳلا",
+ "commentstreams-allcomments-button-previous": "پچھلا"
+}
diff --git a/CommentStreams/i18n/sq.json b/CommentStreams/i18n/sq.json
new file mode 100644
index 00000000..52c5da99
--- /dev/null
+++ b/CommentStreams/i18n/sq.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjakupi"
+ ]
+ },
+ "commentstreams-buttontext-add": "Shto koment",
+ "commentstreams-buttontext-reply": "Pergjigju",
+ "commentstreams-buttontooltip-add": "shto koment"
+}
diff --git a/CommentStreams/i18n/sv.json b/CommentStreams/i18n/sv.json
new file mode 100644
index 00000000..ff985daf
--- /dev/null
+++ b/CommentStreams/i18n/sv.json
@@ -0,0 +1,158 @@
+{
+ "@metadata": {
+ "authors": [
+ "WikiPhoenix",
+ "Bengtsson96"
+ ]
+ },
+ "commentstreams-desc": "Tillåter kommentarer på wikisidor",
+ "commentstreams-error-prohibitedaction": "Åtärden $1 tillåts inte på kommentarssidor.",
+ "commentstreams-error-comment-on-deleted-page": "Sidan som denna kommentar associeras med har raderats.",
+ "commentstreams-author-anonymous": "anonym",
+ "apihelp-csQueryComment-description": "Returnera en kommentars titel, författare, tidsstämpel och wikitext. Sidans titel eller ID måste anges.",
+ "apihelp-csQueryComment-summary": "Returnera en kommentars titel, författare, tidsstämpel och wikitext. Sidans titel eller ID måste anges.",
+ "apihelp-csQueryComment-param-pageid": "sid-ID för sidan som innehåller kommentaren i fråga",
+ "apihelp-csQueryComment-param-title": "titel på sidan som innehåller kommentaren i fråga",
+ "apihelp-csQueryComment-pageid-example": "fråga efter kommentar med sid-ID 3 i wikitext",
+ "apihelp-csQueryComment-title-example": "fråga efter kommentar med sidtiteln CommentStreams:3 i wikitext",
+ "apihelp-csDeleteComment-description": "Radera en kommentar. Antingen sid-ID eller titel måste anges.",
+ "apihelp-csDeleteComment-summary": "Radera en kommentar. Sid-ID eller titel måste anges.",
+ "apihelp-csDeleteComment-param-pageid": "sid-ID för sidan som innehåller kommentaren att radera",
+ "apihelp-csDeleteComment-param-title": "titel för sidan som innehåller kommentaren att radera",
+ "apihelp-csDeleteComment-pageid-example": "radera kommentar med sid-ID 3",
+ "apihelp-csDeleteComment-title-example": "radera kommentar med sidtitel CommentStreams:3",
+ "apihelp-csPostComment-description": "Publicera en ny kommentar.",
+ "apihelp-csPostComment-summary": "Kommentera.",
+ "apihelp-csPostComment-param-commenttitle": "alternativ titel på kommentar",
+ "apihelp-csPostComment-param-wikitext": "kommentarens wikikod.",
+ "apihelp-csPostComment-param-associatedid": "sidan som kommenterats.",
+ "apihelp-csPostComment-param-parentid": "sid-ID för överordnad kommentar om detta är ett svar.",
+ "apihelp-csEditComment-description": "Redigera en kommentar. Sidans titel eller ID-nummer måste uppges.",
+ "apihelp-csEditComment-summary": "Redigera en befintlig kommentar. Sidans titel eller ID måste anges.",
+ "apihelp-csEditComment-param-pageid": "sid-ID för sidan som innehåller kommentaren att redigera",
+ "apihelp-csEditComment-param-title": "titel på sidan som innehåller kommentaren att redigera",
+ "apihelp-csEditComment-param-commenttitle": "kommentarens titel (behöver inte uppges).",
+ "apihelp-csEditComment-param-wikitext": "wikitext för kommentar.",
+ "apihelp-csVote-description": "Rösta (upp, ned eller neutralt) på en kommentar.",
+ "apihelp-csVote-summary": "Rösta (upp, ned eller neutralt) på en kommentar.",
+ "apihelp-csVote-param-pageid": "sid-ID för sidan som innehåller kommentaren att rösta på",
+ "apihelp-csVote-param-title": "titeln på sidan som innehåller kommentaren att rösta på",
+ "apihelp-csVote-param-vote": "rösta (1, -1 eller 0).",
+ "apihelp-csVote-pageid-example": "rösta på kommentaren med sid-ID 3",
+ "apihelp-csVote-title-example": "rösta på kommentaren med sidtiteln CommentStreams:3",
+ "apihelp-csWatch-description": "Bevaka en kommentar att notifieras när den får svar",
+ "apihelp-csWatch-summary": "Bevaka en kommentar att notifieras när den får svar",
+ "apihelp-csWatch-param-pageid": "sid-ID för sidan som innehåller kommentaren att bevaka",
+ "apihelp-csWatch-param-title": "titel på sidan där kommentaren att bevaka finns",
+ "apihelp-csWatch-pageid-example": "bevaka kommentaren med sid-ID 3",
+ "apihelp-csWatch-title-example": "bevaka kommentaren med sidtiteln CommentStreams:3",
+ "apihelp-csUnwatch-description": "Sluta bevaka kommentaren för att inte längre bli notifierad när den får svar",
+ "apihelp-csUnwatch-summary": "Sluta bevaka kommentaren för att inte längre bli notifierad när den får svar",
+ "apihelp-csUnwatch-param-pageid": "sid-ID för sidan som innehåller kommentaren att sluta bevaka",
+ "apihelp-csUnwatch-param-title": "titeln på sidan som innehåller kommentaren att sluta bevaka",
+ "apihelp-csUnwatch-pageid-example": "sluta bevaka kommentar med sid-ID 3",
+ "apihelp-csUnwatch-title-example": "sluta bevaka kommentaren med sidtiteln CommentStreams:3",
+ "commentstreams-api-error-notloggedin": "Du måste vara inloggad.",
+ "commentstreams-api-error-commentnotfound": "Den efterfrågade kommentaren kunde inte hittas.",
+ "commentstreams-api-error-notacomment": "Angivet sid-ID hänvisar inte till en giltig kommentar.",
+ "commentstreams-api-error-missingcommenttitle": "En kommentarstitel måste anges för kommentarer som inte är svar.",
+ "commentstreams-api-error-post-permissions": "Användaren har inte behörighet att kommentera.",
+ "commentstreams-api-error-post-parentandtitle": "Du kan inte specificera både ID:et för den överordnade och kommentarstiteln.",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "Kommentaren som du svarar på finns inte.",
+ "commentstreams-api-error-post-associatedpageidmismatch": "Sidan som du kommenterar på matchar inte sidan som den överordnade kommentaren kommenteras på.",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "Sidan som kommenteras på finns inte.",
+ "commentstreams-api-error-post": "Fel vid kommentering",
+ "commentstreams-api-error-edit-notloggedin": "Du måste vara inloggad för att redigera.",
+ "commentstreams-api-error-edit-permissions": "Du har inte behörighet att redigera kommentaren.",
+ "commentstreams-api-error-edit": "Fel vid redigering av kommentar.",
+ "commentstreams-api-error-delete-notloggedin": "Du måste vara inloggad för att radera.",
+ "commentstreams-api-error-delete-permissions": "Användaren har inte behörighet att radera kommentaren.",
+ "commentstreams-api-error-delete-haschildren": "Kan inte radera ett ämne som har svar. Uppdatera sidan för att se alla kommentarer.",
+ "commentstreams-api-error-delete": "Fel vid radering av kommentar",
+ "commentstreams-api-error-vote-notloggedin": "Du måste vara inloggad för att rösta.",
+ "commentstreams-api-error-vote-novoteonreply": "Det går inte att rösta på svar.",
+ "commentstreams-api-error-vote": "Fel vid röstning på kommentar.",
+ "commentstreams-api-error-watch-notloggedin": "Du måste vara inloggad för att bevaka en kommentar.",
+ "commentstreams-api-error-watch-nowatchreply": "Det går inte att bevaka svar.",
+ "commentstreams-api-error-watch": "Fel uppstod när kommentar bevakades.",
+ "commentstreams-api-error-unwatch-notloggedin": "Du måste vara inloggad för att sluta bevaka en kommentar.",
+ "commentstreams-api-error-unwatch-nounwatchreply": "Det går inte att sluta bevaka svar.",
+ "commentstreams-api-error-unwatch": "Fel uppstod vid upphörande av bevakning av en kommentar.",
+ "commentstreams-validation-error-nocommenttitle": "Du måste ange en kommentarstitel.",
+ "commentstreams-validation-error-nocommenttext": "Du måste ange kommentarstext.",
+ "commentstreams-buttontext-add": "Lägg till kommentar",
+ "commentstreams-buttontext-reply": "Svara",
+ "commentstreams-buttontooltip-add": "kommentera",
+ "commentstreams-buttontooltip-reply": "svara",
+ "commentstreams-buttontooltip-edit": "redigera",
+ "commentstreams-buttontooltip-moderator-edit": "moderatorredigering",
+ "commentstreams-buttontooltip-delete": "radera",
+ "commentstreams-buttontooltip-moderator-delete": "moderatorradering",
+ "commentstreams-buttontooltip-permalink": "permanent länk",
+ "commentstreams-buttontooltip-collapse": "dölj",
+ "commentstreams-buttontooltip-expand": "visa",
+ "commentstreams-buttontooltip-upvote": "rösta upp",
+ "commentstreams-buttontooltip-downvote": "rösta ner",
+ "commentstreams-buttontooltip-watch": "bevaka",
+ "commentstreams-buttontooltip-unwatch": "sluta bevaka",
+ "commentstreams-buttontooltip-submit": "skicka",
+ "commentstreams-buttontooltip-cancel": "avbryt",
+ "commentstreams-dialog-delete-message": "Är du säker på att du vill radera kommentaren?",
+ "commentstreams-dialog-anonymous-message": "Du har inte loggat in. Om du sparar kommentaren ändå, sparas även din IP-adress och du kommer inte kunna redigera eller ta bort kommentaren.",
+ "commentstreams-dialog-buttontext-ok": "OK",
+ "commentstreams-dialog-buttontext-cancel": "Avbryt",
+ "commentstreams-dialog-buttontext-yes": "Ja",
+ "commentstreams-dialog-buttontext-no": "Nej",
+ "commentstreams-urldialog-instructions": "Kopiera och klistra in webbadressen nedan för att dela en permanent länk till denna kommentar. Tryck på escape för att stänga dialogrutan.",
+ "commentstreams-datetext-postedon": "Skickades den",
+ "commentstreams-datetext-lasteditedon": "Redigerades senast",
+ "commentstreams-datetext-moderated": "modererad",
+ "commentstreams-title-field-placeholder": "Ange titel …",
+ "commentstreams-body-field-placeholder": "Ange ny kommentarstext …",
+ "echo-category-title-commentstreams-notification-category": "Nya kommentarer och svar",
+ "notification-header-commentstreams-comment-on-watched-page": "$1 {{GENDER:$4|kommenterade}} \"<i>$2</i>\" på sidan \"<i>$3</i>\", som {{GENDER:$6|du}} bevakar.",
+ "notification-header-commentstreams-reply-on-watched-page": "$1 {{GENDER:$4|besvarade}} kommentaren \"<i>$2</i>\" på sidan \"<i>$3</i>\", som {{GENDER:$6|du}} bevakar.",
+ "notification-header-commentstreams-reply-to-watched-comment": "$1 {{GENDER:$4|besvarade}} kommentaren \"<i>$2</i>\" som {{GENDER:$6|du}} bevakar på sidan \"<i>$3</i>\".",
+ "notification-subject-commentstreams-comment-on-watched-page": "Någon har kommenterat på en sida du bevakar",
+ "notification-subject-commentstreams-reply-on-watched-page": "Någon har svarat på en kommentar på en sida som du bevakar",
+ "notification-subject-commentstreams-reply-to-watched-comment": "Någon har svarat på en kommentar du bevakar",
+ "notification-body-commentstreams-comment-on-watched-page": "Kommentaren hittas här:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "Svaret är:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "Kommentaren kan ses här:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "Visa kommentar",
+ "notification-link-label-commentstreams-reply-on-watched-page": "Se svar",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "Se svar",
+ "group-csmoderator": "Moderatorer (CommentStreams)",
+ "group-csmoderator-member": "{{GENDER:$1|moderator (CommentStreams)}}",
+ "grouppage-csmoderator": "{{ns:project}}:Moderatorer (CommentStreams)",
+ "right-cs-comment": "Publicera, redigera och ta bort sina egna kommentarer",
+ "action-cs-comment": "skicka, redigera eller radera kommentarer",
+ "right-cs-moderator-edit": "Redigera kommentarer av alla användare",
+ "action-cs-moderator-edit": "redigera andra användares kommentarer",
+ "right-cs-moderator-delete": "Radera kommentarer av valfri användare",
+ "action-cs-moderator-delete": "radera kommentarer av andra användare",
+ "log-name-commentstreams": "CommentStreams-logg",
+ "log-description-commentstreams": "De här händelserna uppdateras när CommentStreams-händelser sker.",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|skapade}} kommentaren $3",
+ "logentry-commentstreams-reply-create": "$1 {{GENDER:$2|skapade}} svaret $3",
+ "logentry-commentstreams-comment-edit": "$1 {{GENDER:$2|redigerade}} kommentaren $3",
+ "logentry-commentstreams-comment-moderator-edit": "$1 {{GENDER:$2|(moderator) redigerade}} kommentaren $3",
+ "logentry-commentstreams-reply-edit": "$1 {{GENDER:$2|redigerade}} kommentaren $3",
+ "logentry-commentstreams-reply-moderator-edit": "$1 {{GENDER:$2|(moderator) redigerade}} svaret $3",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|raderade}} kommentaren $3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|(moderator) raderade}} kommentaren $3",
+ "logentry-commentstreams-reply-delete": "$1 {{GENDER:$2|raderade}} svaret $3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|(moderator) raderade}} svaret $3",
+ "commentstreamsallcomments": "Alla kommentarer",
+ "commentstreams-allcomments-nocommentsfound": "Inga kommentarer hittades.",
+ "commentstreams-allcomments-label-page": "Kommentarssida",
+ "commentstreams-allcomments-label-associatedpage": "Tillhörande sida",
+ "commentstreams-allcomments-label-commenttitle": "Kommentarstitel",
+ "commentstreams-allcomments-label-wikitext": "Kommentar",
+ "commentstreams-allcomments-label-author": "Författare",
+ "commentstreams-allcomments-label-created": "Skapad",
+ "commentstreams-allcomments-label-lasteditor": "Senaste redigerare",
+ "commentstreams-allcomments-label-lastedited": "Senast redigerad",
+ "commentstreams-allcomments-button-next": "Nästa",
+ "commentstreams-allcomments-button-previous": "Föregående"
+}
diff --git a/CommentStreams/i18n/tet.json b/CommentStreams/i18n/tet.json
new file mode 100644
index 00000000..52d75c0d
--- /dev/null
+++ b/CommentStreams/i18n/tet.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Raphael Merx"
+ ]
+ },
+ "commentstreams-buttontext-add": "Hatama komentariu",
+ "commentstreams-buttontext-reply": "Hatan",
+ "commentstreams-buttontooltip-add": "Hatama komentariu"
+}
diff --git a/CommentStreams/i18n/tg-cyrl.json b/CommentStreams/i18n/tg-cyrl.json
new file mode 100644
index 00000000..4df641c4
--- /dev/null
+++ b/CommentStreams/i18n/tg-cyrl.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vashgird"
+ ]
+ },
+ "commentstreams-buttontooltip-edit": "вироиш",
+ "commentstreams-buttontooltip-delete": "ҳазф",
+ "commentstreams-dialog-buttontext-yes": "бале",
+ "commentstreams-dialog-buttontext-no": "не",
+ "grouppage-csmoderator": "{{ns:project}}:Мудирон(CommentStreams)",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|(мудир)}} изҳори назари $3 ҳазф кард",
+ "commentstreams-allcomments-button-next": "баъдӣ"
+}
diff --git a/CommentStreams/i18n/tr.json b/CommentStreams/i18n/tr.json
new file mode 100644
index 00000000..6c52f597
--- /dev/null
+++ b/CommentStreams/i18n/tr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sayginer"
+ ]
+ },
+ "commentstreams-error-comment-on-deleted-page": "Bu yorumla bağlantılı olan sayfa silinmiş."
+}
diff --git a/CommentStreams/i18n/ug-arab.json b/CommentStreams/i18n/ug-arab.json
new file mode 100644
index 00000000..67b728ae
--- /dev/null
+++ b/CommentStreams/i18n/ug-arab.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "چۈشكۈن",
+ "Uzdil"
+ ]
+ },
+ "commentstreams-buttontext-add": "باھا قوشۇش",
+ "commentstreams-buttontext-reply": "جاۋاپ قايتۇرۇش"
+}
diff --git a/CommentStreams/i18n/uk.json b/CommentStreams/i18n/uk.json
new file mode 100644
index 00000000..254e9f89
--- /dev/null
+++ b/CommentStreams/i18n/uk.json
@@ -0,0 +1,156 @@
+{
+ "@metadata": {
+ "authors": [
+ "SimondR",
+ "Piramidion"
+ ]
+ },
+ "commentstreams-desc": "Дає можливість коментувати вікісторінки",
+ "commentstreams-error-prohibitedaction": "Дія $1 недозволена на сторінках для коментарів.",
+ "commentstreams-error-comment-on-deleted-page": "Сторінку, з якою пов'язаний цей коментар, вилучено.",
+ "commentstreams-author-anonymous": "анонім",
+ "apihelp-csQueryComment-description": "Вивести назву, користувача, час створення та вікірозмітку коментаря. Слід вказати або pageid або назву.",
+ "apihelp-csQueryComment-summary": "Вивести назву, користувача, час створення та вікірозмітку коментаря. Слід вказати або pageid або назву.",
+ "apihelp-csQueryComment-param-pageid": "ідентифікатор сторінки, яка містить коментар, щодо якого слід надіслати запит",
+ "apihelp-csQueryComment-param-title": "назва сторінки, яка містить коментар, щодо якого слід надіслати запит",
+ "apihelp-csQueryComment-pageid-example": "надіслати запит щодо коментаря з ідентифікатором сторінки 3 у вікірозмітці",
+ "apihelp-csQueryComment-title-example": "надіслати запит щодо коментаря із назвою сторінки CommentStreams:3 у вікірозмітці",
+ "apihelp-csDeleteComment-description": "Вилучити коментар. Слід вказати або pageid, або назву.",
+ "apihelp-csDeleteComment-summary": "Вилучити коментар. Слід вказати або pageid, або назву.",
+ "apihelp-csDeleteComment-param-pageid": "ідентифікатор сторінки, яка містить коментар, який слід вилучити",
+ "apihelp-csDeleteComment-param-title": "назва сторінки, яка містить коментар, який слід вилучити",
+ "apihelp-csDeleteComment-pageid-example": "вилучити коментар з ідентифікатором сторінки 3",
+ "apihelp-csDeleteComment-title-example": "вилучити коментар з назвою сторінки CommentStreams:3",
+ "apihelp-csPostComment-description": "Опублікувати новий коментар.",
+ "apihelp-csPostComment-summary": "Опублікувати новий коментар.",
+ "apihelp-csPostComment-param-commenttitle": "необов'язкова назва коментаря.",
+ "apihelp-csPostComment-param-wikitext": "вікірозмітка для коментаря.",
+ "apihelp-csPostComment-param-associatedid": "сторінка, з якою пов'язаний цей коментар.",
+ "apihelp-csPostComment-param-parentid": "ідентифікатор сторінки батьківського коментаря, якщо це — відповідь.",
+ "apihelp-csEditComment-description": "Редагувати наявний коментар. Слід вказати або pageid, або назву.",
+ "apihelp-csEditComment-summary": "Редагувати наявний коментар. Слід вказати або pageid, або назву.",
+ "apihelp-csEditComment-param-pageid": "ідентифікатор сторінки, яка містить коментар, який треба відредагувати",
+ "apihelp-csEditComment-param-title": "назва сторінки, яка містить коментар, який треба відредагувати",
+ "apihelp-csEditComment-param-commenttitle": "необов'язкова назва коментаря.",
+ "apihelp-csEditComment-param-wikitext": "вікірозмітка для коментаря.",
+ "apihelp-csVote-description": "Проголосувати (позитивно, негативно, чи нейтрально) щодо коментаря.",
+ "apihelp-csVote-summary": "Проголосувати (позитивно, негативно, чи нейтрально) щодо коментаря.",
+ "apihelp-csVote-param-pageid": "ідентифікатор сторінки, яка містить коментар, щодо якого слід проголосувати",
+ "apihelp-csVote-param-title": "назва сторінки, яка містить коментар, щодо якого слід проголосувати",
+ "apihelp-csVote-param-vote": "голос (1, -1 або 0).",
+ "apihelp-csVote-pageid-example": "голосування щодо коментаря з ідентифікатором сторінки 3",
+ "apihelp-csVote-title-example": "голосування щодо коментаря з назвою сторінки CommentStreams:3",
+ "apihelp-csWatch-description": "Спостерігати за коментарем, щоб отримати сповіщення, коли він отримає якісь відповіді",
+ "apihelp-csWatch-summary": "Спостерігати за коментарем, щоб отримати сповіщення, коли він отримає якісь відповіді",
+ "apihelp-csWatch-param-pageid": "ідентифікатор сторінки, яка містить коментар, за яким слід спостерігати",
+ "apihelp-csWatch-param-title": "назва сторінки, яка містить коментар, за яким слід спостерігати",
+ "apihelp-csWatch-pageid-example": "спостерігати за коментарем з ідентифікатором 3",
+ "apihelp-csWatch-title-example": "спостерігати за коментарем з назвою сторінки CommentStreams:3",
+ "apihelp-csUnwatch-description": "Припинити спостереження за коментарем, щоб більше не отримувати сповіщень, коли він отримуватиме відповіді",
+ "apihelp-csUnwatch-summary": "Припинити спостереження за коментарем, щоб більше не отримувати сповіщень, коли він отримуватиме відповіді",
+ "apihelp-csUnwatch-param-pageid": "ідентифікатор сторінки, яка містить коментар, спостереження за яким слід припинити",
+ "apihelp-csUnwatch-param-title": "назва сторінки, яка містить коментар, спостереження за яким слід припинити",
+ "apihelp-csUnwatch-pageid-example": "припинити спостереження за коментарем з ідентифікатором сторінки 3",
+ "apihelp-csUnwatch-title-example": "припинити спостереження за коментарем з назвою сторінки CommentStreams:3",
+ "commentstreams-api-error-notloggedin": "Ви повинні увійти в систему.",
+ "commentstreams-api-error-commentnotfound": "Запитуваний коментар не знайдено.",
+ "commentstreams-api-error-notacomment": "Вказаний ідентифікатор сторінки не пов'язаний з валідним коментарем.",
+ "commentstreams-api-error-missingcommenttitle": "Для коментарів, які не є відповідями, слід вказувати їхні назви.",
+ "commentstreams-api-error-post-permissions": "Користувач не має прав для публікації коментарів.",
+ "commentstreams-api-error-post-parentandtitle": "Не можна вказувати батьківський ідентифікатор та назву коментаря водночас.",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "Коментар, на який дається відповідь, не існує.",
+ "commentstreams-api-error-post-associatedpageidmismatch": "Сторінка, щодо якої дається коментар, не відповідає сторінці, з якою пов'язаний батьківський коментар.",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "Сторінка, щодо якої дається коментар, не існує.",
+ "commentstreams-api-error-post": "Помилка додавання коментаря.",
+ "commentstreams-api-error-edit-notloggedin": "Ви повинні перебувати в системі, щоб редагувати.",
+ "commentstreams-api-error-edit-permissions": "Користувач не має права на редагування коментаря.",
+ "commentstreams-api-error-edit": "Помилка редагування коментаря.",
+ "commentstreams-api-error-delete-notloggedin": "Ви повинні перебувати в системі, щоб вилучати.",
+ "commentstreams-api-error-delete-permissions": "Користувач не має прав для вилучення коментаря.",
+ "commentstreams-api-error-delete-haschildren": "Неможливо вилучити тему, яка має відповіді. Будь ласка, оновіть сторінку, щоб побачити оновлену стрічку коментарів.",
+ "commentstreams-api-error-delete": "Помилка видалення коментаря.",
+ "commentstreams-api-error-vote-notloggedin": "Вам треба перебувати в системі, щоб проголосувати.",
+ "commentstreams-api-error-vote-novoteonreply": "Голосувати щодо відповідей недозволено.",
+ "commentstreams-api-error-vote": "Помилка при спробі проголосувати щодо коментаря.",
+ "commentstreams-api-error-watch-notloggedin": "Вам треба перебувати в системі, щоб спостерігати за коментарем.",
+ "commentstreams-api-error-watch-nowatchreply": "Спостерігати за відповідями недозволено.",
+ "commentstreams-api-error-watch": "Помилка при спробі увімкнути спостереження за коментарем.",
+ "commentstreams-api-error-unwatch-notloggedin": "Вам треба перебувати в системі, щоб припинити спостерігати за коментарем.",
+ "commentstreams-api-error-unwatch-nounwatchreply": "Припиняти спостерігати за відповідями недозволено.",
+ "commentstreams-api-error-unwatch": "Помилка при спробі припинити спостереження за коментарем.",
+ "commentstreams-validation-error-nocommenttitle": "Вам треба вказати назву коментаря.",
+ "commentstreams-validation-error-nocommenttext": "Вам треба вказати текст коментаря.",
+ "commentstreams-buttontooltip-add": "додати коментар",
+ "commentstreams-buttontooltip-reply": "відповісти",
+ "commentstreams-buttontooltip-edit": "редагувати",
+ "commentstreams-buttontooltip-moderator-edit": "редагування модератора",
+ "commentstreams-buttontooltip-delete": "вилучення",
+ "commentstreams-buttontooltip-moderator-delete": "вилучення модератором",
+ "commentstreams-buttontooltip-permalink": "постійне посилання",
+ "commentstreams-buttontooltip-collapse": "згорнути",
+ "commentstreams-buttontooltip-expand": "розгорнути",
+ "commentstreams-buttontooltip-upvote": "позитивний голос",
+ "commentstreams-buttontooltip-downvote": "негативний голос",
+ "commentstreams-buttontooltip-watch": "спостерігати",
+ "commentstreams-buttontooltip-unwatch": "припинити спостереження",
+ "commentstreams-buttontooltip-submit": "надіслати",
+ "commentstreams-buttontooltip-cancel": "скасувати",
+ "commentstreams-dialog-delete-message": "Ви впевнені, що хочете вилучити цей коментар?",
+ "commentstreams-dialog-anonymous-message": "Ви не увійшли в систему. Якщо Ви продовжите й збережете цей коментар, буде записано Вашу IP-адресу, і Ви не зможете відредагувати чи вилучити цей коментар.",
+ "commentstreams-dialog-buttontext-ok": "Готово",
+ "commentstreams-dialog-buttontext-cancel": "Скасувати",
+ "commentstreams-dialog-buttontext-yes": "Так",
+ "commentstreams-dialog-buttontext-no": "Ні",
+ "commentstreams-urldialog-instructions": "Скопіюйте та вставте URL-посилання внизу, щоб додати постійне посилання до цього коментаря. Клацніть Esc, щоб закрити цей діалог.",
+ "commentstreams-datetext-postedon": "Опубліковано:",
+ "commentstreams-datetext-lasteditedon": "Останнє редагування:",
+ "commentstreams-datetext-moderated": "модеровано",
+ "commentstreams-title-field-placeholder": "Введіть назву...",
+ "commentstreams-body-field-placeholder": "Введіть новий текст коментаря...",
+ "echo-category-title-commentstreams-notification-category": "Нові коментарі та відповіді",
+ "notification-header-commentstreams-comment-on-watched-page": "$1 {{GENDER:$4|залишив коментар|залишила коментар}} «<i>$2</i>» на сторінці «<i>$3</i>», за якою {{GENDER:$6|Ви}} спостерігаєте.",
+ "notification-header-commentstreams-reply-on-watched-page": "$1 {{GENDER:$4|відповів|відповіла}} на коментар «<i>$2</i>» на сторінці «<i>$3</i>», за якою {{GENDER:$6|Ви}} спостерігаєте.",
+ "notification-header-commentstreams-reply-to-watched-comment": "$1 {{GENDER:$4|відповів|відповіла}} на коментар «<i>$2</i>», за яким {{GENDER:$6|Ви}} спостерігаєте, на сторінці «<i>$3</i>».",
+ "notification-subject-commentstreams-comment-on-watched-page": "Хтось залишив коментар на сторінці, за якою Ви спостерігаєте",
+ "notification-subject-commentstreams-reply-on-watched-page": "Хтось відповів на коментар на сторінці, за якою Ви спостерігаєте",
+ "notification-subject-commentstreams-reply-to-watched-comment": "Хтось відповів на коментар, за яким Ви спостерігаєте",
+ "notification-body-commentstreams-comment-on-watched-page": "Ось цей коментар:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "Ось ця відповідь:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "Ось ця відповідь:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "Переглянути коментар",
+ "notification-link-label-commentstreams-reply-on-watched-page": "Переглянути відповідь",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "Переглянути відповідь",
+ "group-csmoderator": "Модератори (CommentStreams)",
+ "group-csmoderator-member": "{{GENDER:$1|модератор (CommentStreams)|модераторка (CommentStreams)}}",
+ "grouppage-csmoderator": "{{ns:project}}:Модератори (CommentStreams)",
+ "right-cs-comment": "публікація, редагування та вилучення власних коментарів",
+ "action-cs-comment": "публікацію, редагування чи вилучення коментарів",
+ "right-cs-moderator-edit": "редагування коментарів будь-якого користувача",
+ "action-cs-moderator-edit": "редагування коментарів інших користувачів",
+ "right-cs-moderator-delete": "вилучення коментарів будь-якого користувача",
+ "action-cs-moderator-delete": "вилучення коментарів інших користувачів",
+ "log-name-commentstreams": "Журнал CommentStreams",
+ "log-description-commentstreams": "Ці події відстежуються, коли відбуваються події CommentStreams.",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|створив|створила}} коментар $3",
+ "logentry-commentstreams-reply-create": "$1 {{GENDER:$2|створив|створила}} відповідь $3",
+ "logentry-commentstreams-comment-edit": "$1 {{GENDER:$2|відредагував|відредагувала}} коментар $3",
+ "logentry-commentstreams-comment-moderator-edit": "$1 {{GENDER:$2|(модератор) відредагував|(модераторка) відредагувала}} коментар $3",
+ "logentry-commentstreams-reply-edit": "$1 {{GENDER:$2|відредагував|відредагувала}} відповідь $3",
+ "logentry-commentstreams-reply-moderator-edit": "$1 {{GENDER:$2|(модератор) відредагував|(модератор) відредагувала}} відповідь $3",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|вилучив|вилучила}} коментар $3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|(модератор) вилучив|(модератор) вилучила}} коментар $3",
+ "logentry-commentstreams-reply-delete": "$1 {{GENDER:$2|вилучив|вилучила}} відповідь $3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|(модератор) вилучив|(модераторка) вилучила}} відповідь $3",
+ "commentstreamsallcomments": "Усі коментарі",
+ "commentstreams-allcomments-nocommentsfound": "Коментарів не знайдено.",
+ "commentstreams-allcomments-label-page": "Сторінка коментарів",
+ "commentstreams-allcomments-label-associatedpage": "Пов'язана сторінка",
+ "commentstreams-allcomments-label-commenttitle": "Назва коментаря",
+ "commentstreams-allcomments-label-wikitext": "Коментар",
+ "commentstreams-allcomments-label-author": "Автор",
+ "commentstreams-allcomments-label-created": "Створено",
+ "commentstreams-allcomments-label-lasteditor": "Останній редактор",
+ "commentstreams-allcomments-label-lastedited": "Востаннє відредаговано",
+ "commentstreams-allcomments-button-next": "Наступне",
+ "commentstreams-allcomments-button-previous": "Попереднє"
+}
diff --git a/CommentStreams/i18n/ur.json b/CommentStreams/i18n/ur.json
new file mode 100644
index 00000000..4b3e8b11
--- /dev/null
+++ b/CommentStreams/i18n/ur.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "BukhariSaeed"
+ ]
+ },
+ "commentstreams-author-anonymous": "نامعلوم",
+ "commentstreams-allcomments-label-author": "مصنف"
+}
diff --git a/CommentStreams/i18n/yi.json b/CommentStreams/i18n/yi.json
new file mode 100644
index 00000000..8ce32466
--- /dev/null
+++ b/CommentStreams/i18n/yi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "commentstreams-buttontooltip-add": "צולייגן א הערה"
+}
diff --git a/CommentStreams/i18n/zh-hans.json b/CommentStreams/i18n/zh-hans.json
new file mode 100644
index 00000000..d81d3bc8
--- /dev/null
+++ b/CommentStreams/i18n/zh-hans.json
@@ -0,0 +1,158 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liuxinyu970226",
+ "NeverBehave"
+ ]
+ },
+ "commentstreams-desc": "允许在wiki页面上评论",
+ "commentstreams-error-prohibitedaction": "操作$1不允许在评论页面上进行。",
+ "commentstreams-error-comment-on-deleted-page": "此评论所分配的页面已删除。",
+ "commentstreams-author-anonymous": "匿名",
+ "apihelp-csQueryComment-description": "返回评论标题、用户、创建时间戳和wiki文本。必须提供页面id或标题。",
+ "apihelp-csQueryComment-summary": "返回评论标题、用户、创建时间戳和wiki文本。必须提供页面id或标题。",
+ "apihelp-csQueryComment-param-pageid": "保留评论用于查询的页面的页面ID",
+ "apihelp-csQueryComment-param-title": "保留评论用于查询的页面的标题",
+ "apihelp-csQueryComment-pageid-example": "查询wiki文本中,页面ID为3的评论",
+ "apihelp-csQueryComment-title-example": "查询wiki文本中,页面标题为CommentStreams:3的评论",
+ "apihelp-csDeleteComment-description": "删除评论。必须提供页面id或标题。",
+ "apihelp-csDeleteComment-summary": "删除评论。必须提供页面id或标题。",
+ "apihelp-csDeleteComment-param-pageid": "保留评论用于删除的页面的页面ID",
+ "apihelp-csDeleteComment-param-title": "保留评论用于删除的页面的标题",
+ "apihelp-csDeleteComment-pageid-example": "删除页面ID为3的评论",
+ "apihelp-csDeleteComment-title-example": "删除页面标题为CommentStreams:3的评论",
+ "apihelp-csPostComment-description": "发布新评论。",
+ "apihelp-csPostComment-summary": "发布新评论。",
+ "apihelp-csPostComment-param-commenttitle": "评论的可选标题。",
+ "apihelp-csPostComment-param-wikitext": "评论的wiki文本。",
+ "apihelp-csPostComment-param-associatedid": "与此评论相关联的页面。",
+ "apihelp-csPostComment-param-parentid": "如果该评论是回复的话,父评论的页面ID。",
+ "apihelp-csEditComment-description": "编辑现有评论。必须提供页面id或标题。",
+ "apihelp-csEditComment-summary": "编辑现有评论。必须提供页面id或标题。",
+ "apihelp-csEditComment-param-pageid": "保留评论用于编辑的页面的页面ID",
+ "apihelp-csEditComment-param-title": "保留评论用于编辑的页面的标题",
+ "apihelp-csEditComment-param-commenttitle": "评论的可选标题。",
+ "apihelp-csEditComment-param-wikitext": "评论的wiki文本。",
+ "apihelp-csVote-description": "评论上的投票(上、下或中立)。",
+ "apihelp-csVote-summary": "评论上的投票(上、下或中立)。",
+ "apihelp-csVote-param-pageid": "保留评论用于投票的页面的页面ID",
+ "apihelp-csVote-param-title": "保留评论用于投票的页面的标题",
+ "apihelp-csVote-param-vote": "投票(1、-1或0)。",
+ "apihelp-csVote-pageid-example": "在页面ID为3的评论上投票",
+ "apihelp-csVote-title-example": "在页面标题为CommentStreams:3的评论上投票",
+ "apihelp-csWatch-description": "当评论收到回复时,监视评论以获得通知",
+ "apihelp-csWatch-summary": "当评论收到回复时,监视评论以获得通知",
+ "apihelp-csWatch-param-pageid": "保留评论用于监视的页面的页面ID",
+ "apihelp-csWatch-param-title": "保留评论用于监视的页面的标题",
+ "apihelp-csWatch-pageid-example": "监视页面ID为3的评论",
+ "apihelp-csWatch-title-example": "监视页面标题为CommentStreams:3的评论",
+ "apihelp-csUnwatch-description": "取消监视评论,这样在评论收到回复时就不再收到通知",
+ "apihelp-csUnwatch-summary": "取消监视评论,这样在评论收到回复时就不再收到通知",
+ "apihelp-csUnwatch-param-pageid": "保留评论用于取消监视的页面的页面ID",
+ "apihelp-csUnwatch-param-title": "保留评论用于取消监视的页面的标题",
+ "apihelp-csUnwatch-pageid-example": "取消监视页面ID为3的评论",
+ "apihelp-csUnwatch-title-example": "取消监视页面标题为CommentStreams:3的评论",
+ "commentstreams-api-error-notloggedin": "您必须登录。",
+ "commentstreams-api-error-commentnotfound": "找不到请求的评论。",
+ "commentstreams-api-error-notacomment": "提供的页面ID并不指向有效的评论。",
+ "commentstreams-api-error-missingcommenttitle": "对于并非回复的评论,必须提供评论标题。",
+ "commentstreams-api-error-post-permissions": "用户没有权限发布评论。",
+ "commentstreams-api-error-post-parentandtitle": "您不可以同时指定父id和评论标题。",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "回复的评论不存在。",
+ "commentstreams-api-error-post-associatedpageidmismatch": "要评论的页面并不匹配其父评论所在的页面。",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "要评论的页面不存在。",
+ "commentstreams-api-error-post": "添加评论时出错。",
+ "commentstreams-api-error-edit-notloggedin": "您必须登录以编辑。",
+ "commentstreams-api-error-edit-permissions": "用户没有权限编辑评论。",
+ "commentstreams-api-error-edit": "编辑评论时出错。",
+ "commentstreams-api-error-delete-notloggedin": "您必须登录以删除。",
+ "commentstreams-api-error-delete-permissions": "用户没有权限删除评论。",
+ "commentstreams-api-error-delete-haschildren": "不能删除有回复的话题。请刷新页面以查看更新的评论流。",
+ "commentstreams-api-error-delete": "删除评论时出错。",
+ "commentstreams-api-error-vote-notloggedin": "您必须登录以投票。",
+ "commentstreams-api-error-vote-novoteonreply": "不允许在回复上投票。",
+ "commentstreams-api-error-vote": "在评论上投票时出错。",
+ "commentstreams-api-error-watch-notloggedin": "您必须登录以监视评论。",
+ "commentstreams-api-error-watch-nowatchreply": "不允许监视回复。",
+ "commentstreams-api-error-watch": "监视评论时出错。",
+ "commentstreams-api-error-unwatch-notloggedin": "您必须登录以取消监视评论。",
+ "commentstreams-api-error-unwatch-nounwatchreply": "不允许取消监视回复。",
+ "commentstreams-api-error-unwatch": "取消监视评论时出错。",
+ "commentstreams-validation-error-nocommenttitle": "您必须输入评论标题。",
+ "commentstreams-validation-error-nocommenttext": "您必须输入评论文本。",
+ "commentstreams-buttontext-add": "添加评论",
+ "commentstreams-buttontext-reply": "回复",
+ "commentstreams-buttontooltip-add": "添加一条评论",
+ "commentstreams-buttontooltip-reply": "回复",
+ "commentstreams-buttontooltip-edit": "编辑",
+ "commentstreams-buttontooltip-moderator-edit": "版主编辑",
+ "commentstreams-buttontooltip-delete": "删除",
+ "commentstreams-buttontooltip-moderator-delete": "版主删除",
+ "commentstreams-buttontooltip-permalink": "固定链接",
+ "commentstreams-buttontooltip-collapse": "折叠",
+ "commentstreams-buttontooltip-expand": "展开",
+ "commentstreams-buttontooltip-upvote": "赞同",
+ "commentstreams-buttontooltip-downvote": "否决",
+ "commentstreams-buttontooltip-watch": "监视",
+ "commentstreams-buttontooltip-unwatch": "取消监视",
+ "commentstreams-buttontooltip-submit": "提交",
+ "commentstreams-buttontooltip-cancel": "取消",
+ "commentstreams-dialog-delete-message": "您确定要删除此评论吗?",
+ "commentstreams-dialog-anonymous-message": "您尚未登录。如果您继续保存该评论,您的IP地址将被记录,并且您将无法编辑或删除该评论。",
+ "commentstreams-dialog-buttontext-ok": "确定",
+ "commentstreams-dialog-buttontext-cancel": "取消",
+ "commentstreams-dialog-buttontext-yes": "是",
+ "commentstreams-dialog-buttontext-no": "否",
+ "commentstreams-urldialog-instructions": "复制粘贴下方的URL将该评论分享为固定链接。点击退出按钮关闭该对话框。",
+ "commentstreams-datetext-postedon": "发布于",
+ "commentstreams-datetext-lasteditedon": "上次编辑于",
+ "commentstreams-datetext-moderated": "已节制",
+ "commentstreams-title-field-placeholder": "输入标题...",
+ "commentstreams-body-field-placeholder": "输入新评论文本...",
+ "echo-category-title-commentstreams-notification-category": "新评论和回复",
+ "notification-header-commentstreams-comment-on-watched-page": "$1在页面“<i>$3</i>”上{{GENDER:$4|评论}}了“<i>$2</i>”,这是{{GENDER:$6|您}}监视的评论。",
+ "notification-header-commentstreams-reply-on-watched-page": "$1在页面“<i>$3</i>”上{{GENDER:$4|回复}}了“<i>$2</i>”,这是{{GENDER:$6|您}}监视的页面。",
+ "notification-header-commentstreams-reply-to-watched-comment": "$1{{GENDER:$4|回复}}了“<i>$2</i>”,这是{{GENDER:$6|您}}在页面“<i>$3</i>”上监视的评论。",
+ "notification-subject-commentstreams-comment-on-watched-page": "有人在您监视的页面上做出了评论",
+ "notification-subject-commentstreams-reply-on-watched-page": "有人在您监视的页面上回复了评论",
+ "notification-subject-commentstreams-reply-to-watched-comment": "有人回复了您监视的评论",
+ "notification-body-commentstreams-comment-on-watched-page": "评论是:\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "回复是:\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "回复是:\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "访问评论",
+ "notification-link-label-commentstreams-reply-on-watched-page": "访问回复",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "访问回复",
+ "group-csmoderator": "版主(评论流)",
+ "group-csmoderator-member": "{{GENDER:$1|版主(评论流)}}",
+ "grouppage-csmoderator": "{{ns:project}}:版主(评论流)",
+ "right-cs-comment": "发布、编辑及删除用户自己的评论",
+ "action-cs-comment": "发布、编辑或删除评论",
+ "right-cs-moderator-edit": "编辑任意用户的评论",
+ "action-cs-moderator-edit": "编辑其他用户的评论",
+ "right-cs-moderator-delete": "删除任意用户的评论",
+ "action-cs-moderator-delete": "删除其他用户的评论",
+ "log-name-commentstreams": "评论流日志",
+ "log-description-commentstreams": "这些活动追踪发生的评论流活动。",
+ "logentry-commentstreams-comment-create": "$1{{GENDER:$2|创建}}了评论$3",
+ "logentry-commentstreams-reply-create": "$1{{GENDER:$2|创建}}了回复$3",
+ "logentry-commentstreams-comment-edit": "$1{{GENDER:$2|编辑}}了评论$3",
+ "logentry-commentstreams-comment-moderator-edit": "$1{{GENDER:$2|(版主)编辑}}了评论$3",
+ "logentry-commentstreams-reply-edit": "$1{{GENDER:$2|编辑}}了回复$3",
+ "logentry-commentstreams-reply-moderator-edit": "$1{{GENDER:$2|(版主)编辑}}了回复$3",
+ "logentry-commentstreams-comment-delete": "$1{{GENDER:$2|删除}}了评论$3",
+ "logentry-commentstreams-comment-moderator-delete": "$1{{GENDER:$2|(版主)删除}}了评论$3",
+ "logentry-commentstreams-reply-delete": "$1{{GENDER:$2|删除}}了回复$3",
+ "logentry-commentstreams-reply-moderator-delete": "$1{{GENDER:$2|(版主)删除}}了回复$3",
+ "commentstreamsallcomments": "所有评论",
+ "commentstreams-allcomments-nocommentsfound": "找不到评论。",
+ "commentstreams-allcomments-label-page": "评论页面",
+ "commentstreams-allcomments-label-associatedpage": "相关页面",
+ "commentstreams-allcomments-label-commenttitle": "评论标题",
+ "commentstreams-allcomments-label-wikitext": "评论",
+ "commentstreams-allcomments-label-author": "作者",
+ "commentstreams-allcomments-label-created": "创建于",
+ "commentstreams-allcomments-label-lasteditor": "最后编辑者",
+ "commentstreams-allcomments-label-lastedited": "上次编辑于",
+ "commentstreams-allcomments-button-next": "下一个",
+ "commentstreams-allcomments-button-previous": "上一个"
+}
diff --git a/CommentStreams/i18n/zh-hant.json b/CommentStreams/i18n/zh-hant.json
new file mode 100644
index 00000000..3a5438fd
--- /dev/null
+++ b/CommentStreams/i18n/zh-hant.json
@@ -0,0 +1,158 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liuxinyu970226",
+ "Kly"
+ ]
+ },
+ "commentstreams-desc": "允許在 wiki 頁面上評論",
+ "commentstreams-error-prohibitedaction": "在評論頁面上不允許 $1 操作。",
+ "commentstreams-error-comment-on-deleted-page": "與此評論關聯的頁面已被刪除。",
+ "commentstreams-author-anonymous": "匿名",
+ "apihelp-csQueryComment-description": "返回標題、使用者、創建時間戳記、以及評論的 wiki 文字。需提供頁面 ID 或標題。",
+ "apihelp-csQueryComment-summary": "返回標題、使用者、創建時間戳記、以及評論的 wiki 文字。需提供頁面 ID 或標題。",
+ "apihelp-csQueryComment-param-pageid": "含有要查詢評論的頁面 ID",
+ "apihelp-csQueryComment-param-title": "含有要查詢評論的頁面標題",
+ "apihelp-csQueryComment-pageid-example": "查詢在 wiki 文字上頁面 ID 為 3 的評論",
+ "apihelp-csQueryComment-title-example": "查詢在 wiki 文字上頁面標題爲 CommentStreams:3 的評論",
+ "apihelp-csDeleteComment-description": "刪除評論。需提供頁面 ID 或標題。",
+ "apihelp-csDeleteComment-summary": "刪除評論。需提供頁面 ID 或標題。",
+ "apihelp-csDeleteComment-param-pageid": "含有要刪除評論的頁面 ID",
+ "apihelp-csDeleteComment-param-title": "含有要刪除評論的頁面標題",
+ "apihelp-csDeleteComment-pageid-example": "刪除頁面 ID 為 3 的評論",
+ "apihelp-csDeleteComment-title-example": "刪除頁面標題為 CommentStreams:3 的評論",
+ "apihelp-csPostComment-description": "發佈新評論。",
+ "apihelp-csPostComment-summary": "發佈新評論。",
+ "apihelp-csPostComment-param-commenttitle": "評論的選用標題。",
+ "apihelp-csPostComment-param-wikitext": "用於評論的 wiki 文字。",
+ "apihelp-csPostComment-param-associatedid": "與此評論關聯的頁面。",
+ "apihelp-csPostComment-param-parentid": "父評論的頁面 ID,若此為回覆的情況下。",
+ "apihelp-csEditComment-description": "編輯現有評論。需提供頁面 ID 或標題。",
+ "apihelp-csEditComment-summary": "編輯現有評論。需提供頁面 ID 或標題。",
+ "apihelp-csEditComment-param-pageid": "含有要編輯評論的頁面 ID",
+ "apihelp-csEditComment-param-title": "含有要編輯評論的頁面標題",
+ "apihelp-csEditComment-param-commenttitle": "用於評論的選用標題。",
+ "apihelp-csEditComment-param-wikitext": "用於評論的 wiki 文字。",
+ "apihelp-csVote-description": "在評論上投票(贊成、反對、或中立)。",
+ "apihelp-csVote-summary": "在評論上投票(贊成、反對、或中立)。",
+ "apihelp-csVote-param-pageid": "含有要評論投票的頁面 ID",
+ "apihelp-csVote-param-title": "含有要評論投票的頁面標題",
+ "apihelp-csVote-param-vote": "投票(1、-1、或 0)。",
+ "apihelp-csVote-pageid-example": "在頁面 ID 為 3 的評論上投票",
+ "apihelp-csVote-title-example": "在頁面 ID 為 CommentStreams:3 的評論上投票",
+ "apihelp-csWatch-description": "監視評論在接收到回覆時會得到通知",
+ "apihelp-csWatch-summary": "監視評論在接收到回覆時會得到通知",
+ "apihelp-csWatch-param-pageid": "含有要監視評論的頁面 ID",
+ "apihelp-csWatch-param-title": "含有要監視評論的頁面標題",
+ "apihelp-csWatch-pageid-example": "監視頁面 ID 為 3 的評論",
+ "apihelp-csWatch-title-example": "監視頁面標題為 CommentStreams:3 的評論",
+ "apihelp-csUnwatch-description": "取消監視評論後在接收到回覆時不會再得到通知",
+ "apihelp-csUnwatch-summary": "取消監視評論後在接收到回覆時不會再得到通知",
+ "apihelp-csUnwatch-param-pageid": "含有要取消監視評論的頁面 ID",
+ "apihelp-csUnwatch-param-title": "含有要取消監視評論的頁面標題",
+ "apihelp-csUnwatch-pageid-example": "取消監視頁面 ID 為 3 的評論",
+ "apihelp-csUnwatch-title-example": "取消監視頁面標題為 CommentStreams:3 的評論",
+ "commentstreams-api-error-notloggedin": "您必須要先登入。",
+ "commentstreams-api-error-commentnotfound": "找不到請求的評論。",
+ "commentstreams-api-error-notacomment": "提供的頁面 ID 沒有參照到有效的評論。",
+ "commentstreams-api-error-missingcommenttitle": "未有回覆的評論必須提供評論標題。",
+ "commentstreams-api-error-post-permissions": "使用者沒有權限來發佈評論。",
+ "commentstreams-api-error-post-parentandtitle": "您不可以同時指定父 ID 與評論標題。",
+ "commentstreams-api-error-post-parentpagedoesnotexist": "要回覆的評論不存在。",
+ "commentstreams-api-error-post-associatedpageidmismatch": "要評論的頁面不符合父評論所在的頁面。",
+ "commentstreams-api-error-post-associatedpagedoesnotexist": "評論的頁面不存在。",
+ "commentstreams-api-error-post": "添加評論時出錯。",
+ "commentstreams-api-error-edit-notloggedin": "您必須要先登入才能編輯。",
+ "commentstreams-api-error-edit-permissions": "使用者沒有權限編輯評論。",
+ "commentstreams-api-error-edit": "編輯評論時出錯。",
+ "commentstreams-api-error-delete-notloggedin": "您必須要先登入才能刪除。",
+ "commentstreams-api-error-delete-permissions": "使用者沒有權限刪除評論。",
+ "commentstreams-api-error-delete-haschildren": "不能刪除帶有回覆的話題。請重新整理頁面來查看更新的評論串流。",
+ "commentstreams-api-error-delete": "刪除評論時出錯。",
+ "commentstreams-api-error-vote-notloggedin": "您必須要先登入才能投票。",
+ "commentstreams-api-error-vote-novoteonreply": "不允許在回覆上投票。",
+ "commentstreams-api-error-vote": "在評論上投票時出錯。",
+ "commentstreams-api-error-watch-notloggedin": "您必須要先登入才能監視評論。",
+ "commentstreams-api-error-watch-nowatchreply": "不允許監視回覆。",
+ "commentstreams-api-error-watch": "監視評論時出錯。",
+ "commentstreams-api-error-unwatch-notloggedin": "您必須登入才能取消監視評論。",
+ "commentstreams-api-error-unwatch-nounwatchreply": "不允許取消監視回覆。",
+ "commentstreams-api-error-unwatch": "取消監視評論時出錯。",
+ "commentstreams-validation-error-nocommenttitle": "您必須輸入評論標題。",
+ "commentstreams-validation-error-nocommenttext": "您必須輸入評論文字。",
+ "commentstreams-buttontext-add": "添加評論",
+ "commentstreams-buttontext-reply": "回覆",
+ "commentstreams-buttontooltip-add": "新增評論",
+ "commentstreams-buttontooltip-reply": "回覆",
+ "commentstreams-buttontooltip-edit": "編輯",
+ "commentstreams-buttontooltip-moderator-edit": "版主編輯",
+ "commentstreams-buttontooltip-delete": "刪除",
+ "commentstreams-buttontooltip-moderator-delete": "版主刪除",
+ "commentstreams-buttontooltip-permalink": "靜態連結",
+ "commentstreams-buttontooltip-collapse": "摺疊",
+ "commentstreams-buttontooltip-expand": "展開",
+ "commentstreams-buttontooltip-upvote": "贊成",
+ "commentstreams-buttontooltip-downvote": "反對",
+ "commentstreams-buttontooltip-watch": "監視",
+ "commentstreams-buttontooltip-unwatch": "取消監視",
+ "commentstreams-buttontooltip-submit": "送出",
+ "commentstreams-buttontooltip-cancel": "取消",
+ "commentstreams-dialog-delete-message": "您確定要刪除此評論?",
+ "commentstreams-dialog-anonymous-message": "您尚未登入。如果您要繼續保留此評論,您的 IP 位址將會記錄下來,而您將無法編輯或刪除此評論。",
+ "commentstreams-dialog-buttontext-ok": "確定",
+ "commentstreams-dialog-buttontext-cancel": "取消",
+ "commentstreams-dialog-buttontext-yes": "是",
+ "commentstreams-dialog-buttontext-no": "否",
+ "commentstreams-urldialog-instructions": "複製並貼上下方的 URL 來分享此評論的固定連結。請按下退出鍵來關閉此對話框。",
+ "commentstreams-datetext-postedon": "發佈於",
+ "commentstreams-datetext-lasteditedon": "上一次編輯於",
+ "commentstreams-datetext-moderated": "已協調",
+ "commentstreams-title-field-placeholder": "輸入標題...",
+ "commentstreams-body-field-placeholder": "輸入新的評論文字...",
+ "echo-category-title-commentstreams-notification-category": "新評論與回覆",
+ "notification-header-commentstreams-comment-on-watched-page": "$1 在{{GENDER:$6|您}}所監視的頁面「<i>$3</i>」上{{GENDER:$4|評論}}了「<i>$2</i>」。",
+ "notification-header-commentstreams-reply-on-watched-page": "$1 {{GENDER:$4|回覆}}了在{{GENDER:$6|您}}所監視的頁面「<i>$3</i>」上的評論「<i>$2</i>」。",
+ "notification-header-commentstreams-reply-to-watched-comment": "$1 在頁面「<i>$3</i>」上{{GENDER:$4|回覆}}了{{GENDER:$6|您}}所監視的評論「<i>$2</i>」。",
+ "notification-subject-commentstreams-comment-on-watched-page": "有人在您監視的頁面上做出評論",
+ "notification-subject-commentstreams-reply-on-watched-page": "有人在您監視的頁面上回覆了評論",
+ "notification-subject-commentstreams-reply-to-watched-comment": "有人在您監視的頁面上回覆了評論",
+ "notification-body-commentstreams-comment-on-watched-page": "評論是:\n\n\n$5",
+ "notification-body-commentstreams-reply-on-watched-page": "回覆是:\n\n\n$5",
+ "notification-body-commentstreams-reply-to-watched-comment": "回覆是:\n\n\n$5",
+ "notification-link-label-commentstreams-comment-on-watched-page": "訪問評論",
+ "notification-link-label-commentstreams-reply-on-watched-page": "查看回覆",
+ "notification-link-label-commentstreams-reply-to-watched-comment": "查看回覆",
+ "group-csmoderator": "版主(評論串流)",
+ "group-csmoderator-member": "{{GENDER:$1|版主(評論串流)}}",
+ "grouppage-csmoderator": "{{ns:project}}:版主(評論串流)",
+ "right-cs-comment": "發佈、編輯、或刪除使用者自己的評論",
+ "action-cs-comment": "發佈、編輯、或刪除評論",
+ "right-cs-moderator-edit": "由任何人編輯的評論",
+ "action-cs-moderator-edit": "由其他使用者編輯的評論",
+ "right-cs-moderator-delete": "由任何人刪除的評論",
+ "action-cs-moderator-delete": "由其他使用者刪除的評論",
+ "log-name-commentstreams": "評論串流日誌",
+ "log-description-commentstreams": "這些事項在當評論串流事件發生時追蹤。",
+ "logentry-commentstreams-comment-create": "$1 {{GENDER:$2|建立}}了評論$3",
+ "logentry-commentstreams-reply-create": "$1 {{GENDER:$2|建立}}了回覆$3",
+ "logentry-commentstreams-comment-edit": "$1 {{GENDER:$2|編輯}}了評論$3",
+ "logentry-commentstreams-comment-moderator-edit": "$1 {{GENDER:$2|(版主)建立}}了評論$3",
+ "logentry-commentstreams-reply-edit": "$1 {{GENDER:$2|編輯}}了回覆$3",
+ "logentry-commentstreams-reply-moderator-edit": "$1 {{GENDER:$2|(版主)建立}}了回覆$3",
+ "logentry-commentstreams-comment-delete": "$1 {{GENDER:$2|刪除}}了評論$3",
+ "logentry-commentstreams-comment-moderator-delete": "$1 {{GENDER:$2|(版主)刪除}}了評論$3",
+ "logentry-commentstreams-reply-delete": "$1 {{GENDER:$2|刪除}}了回覆$3",
+ "logentry-commentstreams-reply-moderator-delete": "$1 {{GENDER:$2|(版主)刪除}}了回覆$3",
+ "commentstreamsallcomments": "所有評論",
+ "commentstreams-allcomments-nocommentsfound": "找不到評論",
+ "commentstreams-allcomments-label-page": "評論頁面",
+ "commentstreams-allcomments-label-associatedpage": "相關頁面",
+ "commentstreams-allcomments-label-commenttitle": "評論標題",
+ "commentstreams-allcomments-label-wikitext": "評論",
+ "commentstreams-allcomments-label-author": "作者",
+ "commentstreams-allcomments-label-created": "已建立",
+ "commentstreams-allcomments-label-lasteditor": "上一個編輯者",
+ "commentstreams-allcomments-label-lastedited": "上一次編輯",
+ "commentstreams-allcomments-button-next": "下一個",
+ "commentstreams-allcomments-button-previous": "上一個"
+}
diff --git a/CommentStreams/includes/ApiCSBase.php b/CommentStreams/includes/ApiCSBase.php
index 78ac2e27..e524e97c 100644
--- a/CommentStreams/includes/ApiCSBase.php
+++ b/CommentStreams/includes/ApiCSBase.php
@@ -29,7 +29,7 @@ abstract class ApiCSBase extends ApiBase {
/**
* @param ApiMain $main main module
* @param string $action name of this module
- * @param boolean $edit whether this API module will be editing the database
+ * @param bool $edit whether this API module will be editing the database
*/
public function __construct( $main, $action, $edit = false ) {
parent::__construct( $main, $action );
@@ -56,7 +56,7 @@ abstract class ApiCSBase extends ApiBase {
/**
* the real body of the execute function
*/
- protected abstract function executeBody();
+ abstract protected function executeBody();
/**
* @return array allowed parameters
@@ -100,6 +100,8 @@ abstract class ApiCSBase extends ApiBase {
/**
* log action
* @param string $action the name of the action to be logged
+ * @param string|null $title the title of the page for the comment that the
+ * action was performed upon, if differen from the current comment
*/
protected function logAction( $action, $title = null ) {
$logEntry = new ManualLogEntry( 'commentstreams', $action );
diff --git a/CommentStreams/includes/ApiCSDeleteComment.php b/CommentStreams/includes/ApiCSDeleteComment.php
index 460038cd..7609e2e9 100644
--- a/CommentStreams/includes/ApiCSDeleteComment.php
+++ b/CommentStreams/includes/ApiCSDeleteComment.php
@@ -45,7 +45,7 @@ class ApiCSDeleteComment extends ApiCSBase {
if ( $this->getUser()->getId() ===
$this->comment->getWikiPage()->getOldestRevision()->getUser() &&
$this->comment->getNumReplies() === 0 ) {
- $action = 'edit'; // need edit but not delete to delete a comment
+ $action = 'cs-comment';
} else {
$action = 'cs-moderator-delete';
}
@@ -66,7 +66,7 @@ class ApiCSDeleteComment extends ApiCSBase {
}
} else {
$result = $this->comment->delete();
- if ( $action === 'edit' ) {
+ if ( $action === 'cs-comment' ) {
if ( is_null( $this->comment->getParentId() ) ) {
$this->logAction( 'comment-delete' );
} else {
@@ -105,9 +105,9 @@ class ApiCSDeleteComment extends ApiCSBase {
$result = $comment->delete();
$title = $comment->getWikiPage()->getTitle();
if ( is_null( $comment->getParentId() ) ) {
- $this->logAction( 'comment-moderator-delete', $title );
+ $this->logAction( 'comment-moderator-delete', $title );
} else {
- $this->logAction( 'reply-moderator-delete', $title );
+ $this->logAction( 'reply-moderator-delete', $title );
}
return $result;
}
diff --git a/CommentStreams/includes/ApiCSEditComment.php b/CommentStreams/includes/ApiCSEditComment.php
index 0423fdb8..485553c5 100644
--- a/CommentStreams/includes/ApiCSEditComment.php
+++ b/CommentStreams/includes/ApiCSEditComment.php
@@ -44,7 +44,7 @@ class ApiCSEditComment extends ApiCSBase {
if ( $this->getUser()->getId() ===
$this->comment->getWikiPage()->getOldestRevision()->getUser() ) {
- $action = 'edit';
+ $action = 'cs-comment';
} else {
$action = 'cs-moderator-edit';
}
@@ -67,7 +67,7 @@ class ApiCSEditComment extends ApiCSBase {
$this->dieCustomUsageMessage( 'commentstreams-api-error-edit' );
}
- if ( $action === 'edit' ) {
+ if ( $action === 'cs-comment' ) {
if ( is_null( $this->comment->getParentId() ) ) {
$this->logAction( 'comment-edit' );
} else {
diff --git a/CommentStreams/includes/ApiCSPostComment.php b/CommentStreams/includes/ApiCSPostComment.php
index adc1c797..83b35f91 100644
--- a/CommentStreams/includes/ApiCSPostComment.php
+++ b/CommentStreams/includes/ApiCSPostComment.php
@@ -35,7 +35,7 @@ class ApiCSPostComment extends ApiBase {
* execute the API request
*/
public function execute() {
- if ( !in_array( 'edit', $this->getUser()->getRights() ) ||
+ if ( !in_array( 'cs-comment', $this->getUser()->getRights() ) ||
$this->getUser()->isBlocked() ) {
$this->dieCustomUsageMessage(
'commentstreams-api-error-post-permissions' );
@@ -63,7 +63,7 @@ class ApiCSPostComment extends ApiBase {
'commentstreams-api-error-post-parentpagedoesnotexist' );
}
$parent_comment = Comment::newFromWikiPage( $parent_page );
- if ( $parent_comment->getAssociatedId() !== (integer)$associatedid ) {
+ if ( $parent_comment->getAssociatedId() !== (int)$associatedid ) {
$this->dieCustomUsageMessage(
'commentstreams-api-error-post-associatedpageidmismatch' );
}
@@ -90,7 +90,9 @@ class ApiCSPostComment extends ApiBase {
}
$json = $comment->getJSON();
- if ( class_exists( 'EchoEvent' ) && is_null( $comment->getParentId() ) ) {
+ if ( ExtensionRegistry::getInstance()->isLoaded( 'Echo' ) &&
+ is_null( $comment->getParentId() )
+ ) {
$json['watching'] = 1;
}
$this->getResult()->addValue( null, $this->getModuleName(), $json );
@@ -137,7 +139,7 @@ class ApiCSPostComment extends ApiBase {
* @return not used
*/
private function sendNotifications( $comment, $associated_page ) {
- if ( !class_exists( 'EchoEvent' ) ) {
+ if ( !ExtensionRegistry::getInstance()->isLoaded( 'Echo' ) ) {
return;
}
@@ -205,6 +207,8 @@ class ApiCSPostComment extends ApiBase {
/**
* log action
* @param string $action the name of the action to be logged
+ * @param string|null $title the title of the page for the comment that the
+ * action was performed upon
*/
protected function logAction( $action, $title ) {
$logEntry = new ManualLogEntry( 'commentstreams', $action );
diff --git a/CommentStreams/includes/Comment.php b/CommentStreams/includes/Comment.php
index 84bf186f..33304b35 100644
--- a/CommentStreams/includes/Comment.php
+++ b/CommentStreams/includes/Comment.php
@@ -114,9 +114,12 @@ class Comment {
$index = wfRandomString();
$title = Title::newFromText( (string)$index, NS_COMMENTSTREAMS );
if ( !$title->isDeletedQuick() && !$title->exists() ) {
+ if ( !$title->userCan( 'cs-comment' ) ) {
+ return null;
+ }
$wikipage = new WikiPage( $title );
$status = $wikipage->doEditContent( $content, '',
- EDIT_NEW | EDIT_SUPPRESS_RC , false, $user, null );
+ EDIT_NEW | EDIT_SUPPRESS_RC, false, $user, null );
if ( !$status->isOK() && !$status->isGood() ) {
if ( $status->getMessage()->getKey() == 'edit-already-exists' ) {
$index = wfRandomString();
@@ -137,10 +140,10 @@ class Comment {
$result = $dbw->insert(
'cs_comment_data',
[
- 'page_id' => $wikipage->getId(),
- 'assoc_page_id' => $assoc_page_id,
- 'parent_page_id' => $parent_page_id,
- 'comment_title' => $comment_title
+ 'cst_page_id' => $wikipage->getId(),
+ 'cst_assoc_page_id' => $assoc_page_id,
+ 'cst_parent_page_id' => $parent_page_id,
+ 'cst_comment_title' => $comment_title
],
__METHOD__
);
@@ -176,20 +179,26 @@ class Comment {
* load comment data from database
*/
private function loadFromDatabase() {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$result = $dbr->selectRow(
'cs_comment_data',
- [ 'assoc_page_id', 'parent_page_id', 'comment_title' ],
- [ 'page_id' => $this->getId() ],
+ [
+ 'cst_assoc_page_id',
+ 'cst_parent_page_id',
+ 'cst_comment_title'
+ ],
+ [
+ 'cst_page_id' => $this->getId()
+ ],
__METHOD__
);
if ( $result ) {
- $this->assoc_page_id = (integer)$result->assoc_page_id;
- $this->parent_page_id = $result->parent_page_id;
+ $this->assoc_page_id = (int)$result->cst_assoc_page_id;
+ $this->parent_page_id = $result->cst_parent_page_id;
if ( !is_null( $this->parent_page_id ) ) {
- $this->parent_page_id = (integer)$this->parent_page_id;
+ $this->parent_page_id = (int)$this->parent_page_id;
}
- $this->comment_title = $result->comment_title;
+ $this->comment_title = $result->cst_comment_title;
$this->loaded = true;
}
}
@@ -204,10 +213,10 @@ class Comment {
*/
private function loadFromValues( $assoc_page_id, $parent_page_id,
$comment_title ) {
- $this->assoc_page_id = (integer)$assoc_page_id;
+ $this->assoc_page_id = (int)$assoc_page_id;
$this->parent_page_id = $parent_page_id;
if ( !is_null( $this->parent_page_id ) ) {
- $this->parent_page_id = (integer)$this->parent_page_id;
+ $this->parent_page_id = (int)$this->parent_page_id;
}
$this->comment_title = $comment_title;
$this->loaded = true;
@@ -298,7 +307,7 @@ class Comment {
}
/**
- * @return boolean true if the last edit to this comment was not done by the
+ * @return bool true if the last edit to this comment was not done by the
* original author
*/
public function isLastEditModerated() {
@@ -334,7 +343,8 @@ class Comment {
*/
public function getAvatar() {
if ( is_null( $this->avatar ) ) {
- if ( class_exists( 'wAvatar' ) ) { // from Extension:SocialProfile
+ if ( class_exists( 'wAvatar' ) ) {
+ // from Extension:SocialProfile
$avatar = new wAvatar( $this->getUser()->getId(), 'l' );
$this->avatar = $GLOBALS['wgUploadPath'] . '/avatars/' .
$avatar->getAvatarImage();
@@ -398,11 +408,13 @@ class Comment {
*/
public function getNumReplies() {
if ( is_null( $this->num_replies ) ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$this->num_replies = $dbr->selectRowCount(
'cs_comment_data',
'*',
- [ 'parent_page_id' => $this->getId() ],
+ [
+ 'cst_parent_page_id' => $this->getId()
+ ],
__METHOD__
);
}
@@ -422,7 +434,7 @@ class Comment {
'created_timestamp' => $this->getCreationTimestamp()->format( "U" ),
'modified' => $this->getModificationDate(),
'moderated' => $this->isLastEditModerated() ? "moderated" : null,
- 'wikitext' => $this->getWikiText(),
+ 'wikitext' => htmlentities( $this->getWikiText() ),
'html' => $this->getHTML(),
'pageid' => $this->getId(),
'associatedid' => $this->getAssociatedId(),
@@ -443,18 +455,20 @@ class Comment {
* @return +1 for up vote, -1 for down vote, 0 for no vote
*/
public function getVote( $user ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$result = $dbr->selectRow(
'cs_votes',
- [ 'vote' ],
[
- 'page_id' => $this->getId(),
- 'user_id' => $user->getId()
+ 'cst_v_vote'
+ ],
+ [
+ 'cst_v_page_id' => $this->getId(),
+ 'cst_v_user_id' => $user->getId()
],
__METHOD__
);
if ( $result ) {
- $vote = (integer)$result->vote;
+ $vote = (int)$result->cst_v_vote;
if ( $vote > 0 ) {
return 1;
}
@@ -470,13 +484,13 @@ class Comment {
*/
public function getNumUpVotes() {
if ( is_null( $this->num_up_votes ) ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$this->num_up_votes = $dbr->selectRowCount(
'cs_votes',
'*',
[
- 'page_id' => $this->getId(),
- 'vote' => 1
+ 'cst_v_page_id' => $this->getId(),
+ 'cst_v_vote' => 1
],
__METHOD__
);
@@ -489,13 +503,13 @@ class Comment {
*/
public function getNumDownVotes() {
if ( is_null( $this->num_down_votes ) ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$this->num_down_votes = $dbr->selectRowCount(
'cs_votes',
'*',
[
- 'page_id' => $this->getId(),
- 'vote' => -1
+ 'cst_v_page_id' => $this->getId(),
+ 'cst_v_vote' => -1
],
__METHOD__
);
@@ -506,7 +520,7 @@ class Comment {
/**
* record a vote
*
- * @param vote 1 for up vote, -1 for down vote, 0 for no vote
+ * @param string $vote 1 for up vote, -1 for down vote, 0 for no vote
* @param User $user the user voting on the comment
* @return database status code
*/
@@ -514,29 +528,33 @@ class Comment {
if ( $vote !== "-1" && $vote !== "0" && $vote !== "1" ) {
return false;
}
- $vote = (integer)$vote;
- $dbr = wfGetDB( DB_SLAVE );
+ $vote = (int)$vote;
+ $dbr = wfGetDB( DB_REPLICA );
$result = $dbr->selectRow(
'cs_votes',
- [ 'vote' ],
[
- 'page_id' => $this->getId(),
- 'user_id' => $user->getId()
+ 'cst_v_vote'
+ ],
+ [
+ 'cst_v_page_id' => $this->getId(),
+ 'cst_v_user_id' => $user->getId()
],
__METHOD__
);
if ( $result ) {
- if ( $vote === (integer)$result->vote ) {
+ if ( $vote === (int)$result->cst_v_vote ) {
return true;
}
if ( $vote === 1 || $vote === -1 ) {
$dbw = wfGetDB( DB_MASTER );
$result = $dbw->update(
'cs_votes',
- [ 'vote' => $vote ],
[
- 'page_id' => $this->getId(),
- 'user_id' => $user->getId()
+ 'cst_v_vote' => $vote
+ ],
+ [
+ 'cst_v_page_id' => $this->getId(),
+ 'cst_v_user_id' => $user->getId()
],
__METHOD__
);
@@ -545,8 +563,8 @@ class Comment {
$result = $dbw->delete(
'cs_votes',
[
- 'page_id' => $this->getId(),
- 'user_id' => $user->getId()
+ 'cst_v_page_id' => $this->getId(),
+ 'cst_v_user_id' => $user->getId()
],
__METHOD__
);
@@ -559,9 +577,9 @@ class Comment {
$result = $dbw->insert(
'cs_votes',
[
- 'page_id' => $this->getId(),
- 'user_id' => $user->getId(),
- 'vote' => $vote
+ 'cst_v_page_id' => $this->getId(),
+ 'cst_v_user_id' => $user->getId(),
+ 'cst_v_vote' => $vote
],
__METHOD__
);
@@ -594,8 +612,8 @@ class Comment {
$result = $dbw->insert(
'cs_watchlist',
[
- 'page_id' => $pageid,
- 'user_id' => $user->getId()
+ 'cst_wl_page_id' => $pageid,
+ 'cst_wl_user_id' => $user->getId()
],
__METHOD__
);
@@ -613,11 +631,11 @@ class Comment {
return true;
}
$dbw = wfGetDB( DB_MASTER );
- $result = $dbw->delete (
+ $result = $dbw->delete(
'cs_watchlist',
[
- 'page_id' => $this->getId(),
- 'user_id' => $user->getId()
+ 'cst_wl_page_id' => $this->getId(),
+ 'cst_wl_user_id' => $user->getId()
],
__METHOD__
);
@@ -642,13 +660,15 @@ class Comment {
* @return database true for OK, false for error
*/
private static function isWatchingComment( $pageid, $user ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$result = $dbr->selectRow(
'cs_watchlist',
- [ 'page_id' ],
[
- 'page_id' => $pageid,
- 'user_id' => $user->getId()
+ 'cst_wl_page_id'
+ ],
+ [
+ 'cst_wl_page_id' => $pageid,
+ 'cst_wl_user_id' => $user->getId()
],
__METHOD__
);
@@ -664,18 +684,22 @@ class Comment {
* @return array of user IDs
*/
public function getWatchers() {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$result = $dbr->select(
'cs_watchlist',
- [ 'user_id' ],
- [ 'page_id' => $this->getId() ],
+ [
+ 'cst_wl_user_id'
+ ],
+ [
+ 'cst_wl_page_id' => $this->getId()
+ ],
__METHOD__
);
$users = [];
foreach ( $result as $row ) {
- $user_id = $row->user_id;
+ $user_id = $row->cst_wl_user_id;
$user = User::newFromId( $user_id );
- $users[$user_id] = $user;
+ $users[$user_id] = $user;
}
return $users;
}
@@ -689,7 +713,7 @@ class Comment {
* @param string $comment_title the new title for the comment
* @param string $wikitext the wikitext to add
* @param User $user the author of the edit
- * @return boolean true if successful
+ * @return bool true if successful
*/
public function update( $comment_title, $wikitext, $user ) {
if ( is_null( $comment_title ) && is_null( $this->getParentId() ) ) {
@@ -703,7 +727,7 @@ class Comment {
$this->getAssociatedId() );
$content = new WikitextContent( $annotated_wikitext );
$status = $this->wikipage->doEditContent( $content, '',
- EDIT_UPDATE | EDIT_SUPPRESS_RC , false, $user, null );
+ EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $user, null );
if ( !$status->isOK() && !$status->isGood() ) {
return false;
}
@@ -714,8 +738,12 @@ class Comment {
$dbw = wfGetDB( DB_MASTER );
$result = $dbw->update(
'cs_comment_data',
- [ 'comment_title' => $comment_title ],
- [ 'page_id' => $this->getId() ],
+ [
+ 'cst_comment_title' => $comment_title
+ ],
+ [
+ 'cst_page_id' => $this->getId()
+ ],
__METHOD__
);
if ( !$result ) {
@@ -729,7 +757,7 @@ class Comment {
/**
* delete comment from database
*
- * @return boolean true if successful
+ * @return bool true if successful
*/
public function delete() {
$pageid = $this->getId();
@@ -743,7 +771,9 @@ class Comment {
$dbw = wfGetDB( DB_MASTER );
$result = $dbw->delete(
'cs_comment_data',
- [ 'page_id' => $pageid ],
+ [
+ 'cst_page_id' => $pageid
+ ],
__METHOD__
);
return $result;
@@ -795,16 +825,20 @@ EOT;
* @return array array of comments for the given page
*/
public static function getAssociatedComments( $assoc_page_id ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$result = $dbr->select(
'cs_comment_data',
- [ 'page_id' ],
- [ 'assoc_page_id' => $assoc_page_id ],
+ [
+ 'cst_page_id'
+ ],
+ [
+ 'cst_assoc_page_id' => $assoc_page_id
+ ],
__METHOD__
);
$comments = [];
foreach ( $result as $row ) {
- $page_id = $row->page_id;
+ $page_id = $row->cst_page_id;
$wikipage = WikiPage::newFromId( $page_id );
$comment = self::newFromWikiPage( $wikipage );
if ( !is_null( $comment ) ) {
@@ -821,16 +855,20 @@ EOT;
* @return array array of comments for the given page
*/
public static function getReplies( $parent_page_id ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$result = $dbr->select(
'cs_comment_data',
- [ 'page_id' ],
- [ 'parent_page_id' => $parent_page_id ],
+ [
+ 'cst_page_id'
+ ],
+ [
+ 'cst_parent_page_id' => $parent_page_id
+ ],
__METHOD__
);
$comments = [];
foreach ( $result as $row ) {
- $page_id = $row->page_id;
+ $page_id = $row->cst_page_id;
$wikipage = WikiPage::newFromId( $page_id );
$comment = self::newFromWikiPage( $wikipage );
if ( !is_null( $comment ) ) {
@@ -844,11 +882,19 @@ EOT;
* return the text to use to represent the user at the top of a comment
*
* @param User $user the user
- * @param boolean $linked whether to link the display name to the user page,
+ * @param bool $linked whether to link the display name to the user page,
* if it exists
* @return string display name for user
*/
public static function getDisplayNameFromUser( $user, $linked = true ) {
+ if ( $user->isAnon() ) {
+ $html = Html::openElement( 'span', [
+ 'class' => 'cs-comment-author-anonymous'
+ ] )
+ . wfMessage( 'commentstreams-author-anonymous' )
+ . Html::closeElement( 'span' );
+ return $html;
+ }
$userpage = $user->getUserPage();
$displayname = null;
if ( !is_null( $GLOBALS['wgCommentStreamsUserRealNamePropertyName'] ) ) {
@@ -871,7 +917,7 @@ EOT;
$displayname = $user->getName();
}
if ( $linked && $userpage->exists() ) {
- $displayname = Linker::link( $userpage, $displayname );
+ $displayname = CommentStreamsUtils::link( $userpage, $displayname );
}
return $displayname;
}
@@ -948,7 +994,7 @@ EOT;
$id = $event->getExtraParam( 'parent_id' );
$wikipage = WikiPage::newFromId( $id );
if ( !is_null( $wikipage ) ) {
- $comment = Comment::newFromWikiPage( $wikipage );
+ $comment = self::newFromWikiPage( $wikipage );
if ( !is_null( $comment ) ) {
return $comment->getWatchers();
}
diff --git a/CommentStreams/includes/CommentStreams.php b/CommentStreams/includes/CommentStreams.php
index 3954dc19..fba47e54 100644
--- a/CommentStreams/includes/CommentStreams.php
+++ b/CommentStreams/includes/CommentStreams.php
@@ -144,6 +144,8 @@ class CommentStreams {
return false;
}
} elseif ( !in_array( $namespace, $csAllowedNamespaces ) ) {
+ // only display comments in subject namespaces in the list of allowed
+ // namespaces
return false;
}
@@ -168,7 +170,7 @@ class CommentStreams {
if ( $GLOBALS['wgCommentStreamsEnableVoting'] ) {
$parentJSON['vote'] = $parentComment->getVote( $output->getUser() );
}
- if ( class_exists( 'EchoEvent' ) ) {
+ if ( ExtensionRegistry::getInstance()->isLoaded( 'Echo' ) ) {
$parentJSON['watching'] = $parentComment->isWatching( $output->getUser() );
}
$childComments = $this->getReplies( $allComments,
@@ -204,13 +206,22 @@ class CommentStreams {
$GLOBALS['wgCommentStreamsInitiallyCollapsedNamespaces'] );
}
+ $canComment = true;
+ if ( !in_array( 'cs-comment', $output->getUser()->getRights() ) ||
+ $output->getUser()->isBlocked() ) {
+ $canComment = false;
+ }
+
$commentStreamsParams = [
+ 'canComment' => $canComment,
'moderatorEdit' => in_array( 'cs-moderator-edit',
$output->getUser()->getRights() ),
'moderatorDelete' => in_array( 'cs-moderator-delete',
$output->getUser()->getRights() ),
'moderatorFastDelete' =>
$GLOBALS['wgCommentStreamsModeratorFastDelete'] ? 1 : 0,
+ 'showLabels' =>
+ $GLOBALS['wgCommentStreamsShowLabels'] ? 1 : 0,
'userDisplayName' =>
Comment::getDisplayNameFromUser( $output->getUser() ),
'userAvatar' =>
@@ -221,11 +232,14 @@ class CommentStreams {
'enableVoting' =>
$GLOBALS['wgCommentStreamsEnableVoting'] ? 1 : 0,
'enableWatchlist' =>
- class_exists( 'EchoEvent' ) ? 1 : 0,
+ ExtensionRegistry::getInstance()->isLoaded( 'Echo' ) ? 1 : 0,
'comments' => $comments
];
$output->addJsConfigVars( 'CommentStreams', $commentStreamsParams );
$output->addModules( 'ext.CommentStreams' );
+ if ( ExtensionRegistry::getInstance()->isLoaded( 'VEForAll' ) ) {
+ $output->addModules( 'ext.veforall.main' );
+ }
}
/**
@@ -242,39 +256,37 @@ class CommentStreams {
return is_null( $comment->getParentId() );
}
);
- usort( $array, function ( $comment1, $comment2 )
- use ( $newestOnTop, $enableVoting ) {
- $date1 = $comment1->getCreationTimestamp()->timestamp;
- $date2 = $comment2->getCreationTimestamp()->timestamp;
- if ( $enableVoting ) {
- $upvotes1 = $comment1->getNumUpVotes();
- $downvotes1 = $comment1->getNumDownVotes();
- $votediff1 = $upvotes1 - $downvotes1;
- $upvotes2 = $comment2->getNumUpVotes();
- $downvotes2 = $comment2->getNumDownVotes();
- $votediff2 = $upvotes2 - $downvotes2;
- if ( $votediff1 === $votediff2 ) {
- if ( $upvotes1 === $upvotes2 ) {
- if ( $newestOnTop ) {
- return $date1 > $date2 ? -1 : 1;
- } else {
- return $date1 < $date2 ? -1 : 1;
- }
+ usort( $array, function ( $comment1, $comment2 ) use ( $newestOnTop, $enableVoting ) {
+ $date1 = $comment1->getCreationTimestamp()->timestamp;
+ $date2 = $comment2->getCreationTimestamp()->timestamp;
+ if ( $enableVoting ) {
+ $upvotes1 = $comment1->getNumUpVotes();
+ $downvotes1 = $comment1->getNumDownVotes();
+ $votediff1 = $upvotes1 - $downvotes1;
+ $upvotes2 = $comment2->getNumUpVotes();
+ $downvotes2 = $comment2->getNumDownVotes();
+ $votediff2 = $upvotes2 - $downvotes2;
+ if ( $votediff1 === $votediff2 ) {
+ if ( $upvotes1 === $upvotes2 ) {
+ if ( $newestOnTop ) {
+ return $date1 > $date2 ? -1 : 1;
} else {
- return $upvotes1 > $upvotes2 ? -1 : 1;
+ return $date1 < $date2 ? -1 : 1;
}
} else {
- return $votediff1 > $votediff2 ? -1 : 1;
+ return $upvotes1 > $upvotes2 ? -1 : 1;
}
} else {
- if ( $newestOnTop ) {
- return $date1 > $date2 ? -1 : 1;
- } else {
- return $date1 < $date2 ? -1 : 1;
- }
+ return $votediff1 > $votediff2 ? -1 : 1;
+ }
+ } else {
+ if ( $newestOnTop ) {
+ return $date1 > $date2 ? -1 : 1;
+ } else {
+ return $date1 < $date2 ? -1 : 1;
}
}
- );
+ } );
return $array;
}
diff --git a/CommentStreams/includes/CommentStreamsAllComments.alias.php b/CommentStreams/includes/CommentStreamsAllComments.alias.php
index 76c5d1f4..7a213537 100644
--- a/CommentStreams/includes/CommentStreamsAllComments.alias.php
+++ b/CommentStreams/includes/CommentStreamsAllComments.alias.php
@@ -28,3 +28,18 @@ $specialPageAliases = [];
$specialPageAliases['en'] = [
'CommentStreamsAllComments' => [ 'AllComments' ]
];
+
+/** Hebrew (עברית) */
+$specialPageAliases['he'] = [
+ 'CommentStreamsAllComments' => [ 'כל_התגובות' ]
+];
+
+/** Serbian Cyrilic (српски (ћирлица)) */
+$specialPageAliases['sr-ec'] = [
+ 'CommentStreamsAllComments' => [ 'Сви_коментари' ]
+];
+
+/** Serbian Latin (srpski (latinica)) */
+$specialPageAliases['sr-el'] = [
+ 'CommentStreamsAllComments' => [ 'Svi_komentari' ]
+];
diff --git a/CommentStreams/includes/CommentStreamsAllComments.php b/CommentStreams/includes/CommentStreamsAllComments.php
index 9631842d..52eea7b1 100644
--- a/CommentStreams/includes/CommentStreamsAllComments.php
+++ b/CommentStreams/includes/CommentStreamsAllComments.php
@@ -24,11 +24,14 @@
class CommentStreamsAllComments extends SpecialPage {
- function __construct() {
+ public function __construct() {
parent::__construct( 'CommentStreamsAllComments' );
}
- function execute( $par ) {
+ /**
+ * @inheritDoc
+ */
+ public function execute( $par ) {
$request = $this->getRequest();
$this->setHeaders();
$this->getOutput()->addModuleStyles( 'ext.CommentStreamsAllComments' );
@@ -72,25 +75,45 @@ class CommentStreamsAllComments extends SpecialPage {
if ( $index < $limit ) {
$wikipage = WikiPage::newFromId( $page->page_id );
$comment = Comment::newFromWikiPage( $wikipage );
- $pagename = $comment->getWikiPage()->getTitle()->getPrefixedText() ;
- $associatedpageid = $comment->getAssociatedId();
- $associatedpagename =
- WikiPage::newFromId( $associatedpageid )->getTitle()->getPrefixedText();
- $author = $comment->getUser()->getName();
- $lasteditor = User::newFromId( $wikipage->getRevision()->getUser() )->getName();
- if ( $lasteditor === $author ) {
- $lasteditor = '';
+ if ( !is_null( $comment ) ) {
+ $pagename = $comment->getWikiPage()->getTitle()->getPrefixedText();
+ $associatedpageid = $comment->getAssociatedId();
+ $associatedpage = WikiPage::newFromId( $associatedpageid );
+ if ( !is_null( $associatedpage ) ) {
+ $associatedpagename =
+ '[[' . $associatedpage->getTitle()->getPrefixedText() . ']]';
+ $author = $comment->getUser();
+ if ( $author->isAnon() ) {
+ $author = '<i>' . wfMessage( 'commentstreams-author-anonymous' )
+ . '</i>';
+ } else {
+ $author = $author->getName();
+ }
+ $modificationdate = $comment->getModificationDate();
+ if ( is_null( $modificationdate ) ) {
+ $lasteditor = '';
+ } else {
+ $lasteditor =
+ User::newFromId( $wikipage->getRevision()->getUser() );
+ if ( $lasteditor->isAnon() ) {
+ $lasteditor = '<i>' .
+ wfMessage( 'commentstreams-author-anonymous' ) . '</i>';
+ } else {
+ $lasteditor = $lasteditor->getName();
+ }
+ }
+ $wikitext .= '|-' . PHP_EOL;
+ $wikitext .= '|[[' . $pagename . ']]' . PHP_EOL;
+ $wikitext .= '| ' . $associatedpagename . PHP_EOL;
+ $wikitext .= '| ' . $comment->getCommentTitle() . PHP_EOL;
+ $wikitext .= '| ' . $comment->getWikiText() . PHP_EOL;
+ $wikitext .= '| ' . $author . PHP_EOL;
+ $wikitext .= '| ' . $lasteditor . PHP_EOL;
+ $wikitext .= '| ' . $comment->getCreationDate() . PHP_EOL;
+ $wikitext .= '| ' . $modificationdate . PHP_EOL;
+ $index ++;
+ }
}
- $wikitext .= '|-' . PHP_EOL;
- $wikitext .= '|[[' . $pagename . ']]' . PHP_EOL;
- $wikitext .= '|[[' . $associatedpagename . ']]' . PHP_EOL;
- $wikitext .= '|' . $comment->getCommentTitle() . PHP_EOL;
- $wikitext .= '|' . $comment->getWikiText() . PHP_EOL;
- $wikitext .= '|' . $author . PHP_EOL;
- $wikitext .= '|' . $lasteditor . PHP_EOL;
- $wikitext .= '|' . $comment->getCreationDate() . PHP_EOL;
- $wikitext .= '|' . $comment->getModificationDate() . PHP_EOL;
- $index ++;
} else {
$more = true;
}
@@ -114,7 +137,6 @@ class CommentStreamsAllComments extends SpecialPage {
}
private function addTableNavigation( $offset, $more, $limit, $paramname ) {
-
$title = Title::newFromText( 'Special:' . __CLASS__ );
$url = $title->getFullURL();
@@ -156,18 +178,23 @@ class CommentStreamsAllComments extends SpecialPage {
}
private static function getCommentPages( $limit, $offset ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$pages = $dbr->select(
- 'page',
+ [
+ 'cs_comment_data',
+ 'page',
+ 'revision'
+ ],
[
'page_id'
],
[
- 'page_namespace' => $GLOBALS['wgCommentStreamsNamespaceIndex']
+ 'cst_page_id = page_id',
+ 'page_latest = rev_id'
],
__METHOD__,
[
- 'ORDER BY' => 'page_latest DESC' ,
+ 'ORDER BY' => 'rev_timestamp DESC' ,
'LIMIT' => $limit,
'OFFSET' => $offset
]
diff --git a/CommentStreams/includes/CommentStreamsHooks.php b/CommentStreams/includes/CommentStreamsHooks.php
index 42a9ed6e..6bfcf99a 100644
--- a/CommentStreams/includes/CommentStreamsHooks.php
+++ b/CommentStreams/includes/CommentStreamsHooks.php
@@ -34,10 +34,15 @@ class CommentStreamsHooks {
public static function addCommentTableToDatabase( DatabaseUpdater $updater ) {
$dir = $GLOBALS['wgExtensionDirectory'] . DIRECTORY_SEPARATOR .
'CommentStreams' . DIRECTORY_SEPARATOR . 'sql' . DIRECTORY_SEPARATOR;
- $updater->addExtensionTable( 'cs_comment_data', $dir . 'commentData.sql',
- true );
- $updater->addExtensionTable( 'cs_votes', $dir . 'votes.sql', true );
- $updater->addExtensionTable( 'cs_watchlist', $dir . 'watch.sql', true );
+ $updater->addExtensionTable( 'cs_comment_data', $dir . 'commentData.sql' );
+ $updater->addExtensionTable( 'cs_votes', $dir . 'votes.sql' );
+ $updater->addExtensionTable( 'cs_watchlist', $dir . 'watch.sql' );
+ $updater->modifyExtensionField( 'cs_comment_data', 'page_id',
+ $dir . 'updateFieldNames.sql' );
+ $updater->dropExtensionIndex( 'cs_comment_data', 'assoc_page_id',
+ $dir . 'dropForeignKey1.sql' );
+ $updater->dropExtensionIndex( 'cs_comment_data', 'cst_assoc_page_id',
+ $dir . 'dropForeignKey2.sql' );
return true;
}
@@ -80,7 +85,6 @@ class CommentStreamsHooks {
if ( $action === 'info' || $action === 'history' ) {
return true;
}
-
if ( $action !== 'view' ) {
$message =
wfMessage( 'commentstreams-error-prohibitedaction', $action )->text();
@@ -105,10 +109,15 @@ class CommentStreamsHooks {
} else {
$displaytitle = $associatedTitle->getPrefixedText();
}
- $link = Linker::link( $associatedTitle, '< ' . $displaytitle );
- $output->setSubtitle( $link );
- $output->addWikitext( $comment->getHTML() );
+ $output->setSubtitle(
+ CommentStreamsUtils::link( $associatedTitle, '< ' . $displaytitle )
+ );
+ } else {
+ $message =
+ wfMessage( 'commentstreams-error-comment-on-deleted-page' )->text();
+ $output->addHTML( '<p class="error">' . $message . '</p>' );
}
+ $output->addWikitext( $comment->getHTML() );
}
return false;
}
@@ -142,7 +151,7 @@ class CommentStreamsHooks {
* @param Title &$title the title object in question
* @param User &$user the user performing the action
* @param string $action the action being performed
- * @param boolean &$result true means the user is allowed, false means the
+ * @param bool &$result true means the user is allowed, false means the
* user is not allowed, untouched means this hook has no opinion
* @return bool continue checking hooks
*/
@@ -163,7 +172,7 @@ class CommentStreamsHooks {
return false;
}
- if ( $action === 'edit' ) {
+ if ( $action === 'cs-comment' ) {
if ( $user->getId() === $wikipage->getOldestRevision()->getUser() ) {
$result = true;
} else {
@@ -196,8 +205,8 @@ class CommentStreamsHooks {
/**
* Implements ParserFirstCallInit hook.
* See https://www.mediawiki.org/wiki/Manual:Hooks/ParserFirstCallInit
- * Adds no-comment-streams and comment-streams-initially-collapsed magic
- * words.
+ * Adds comment-streams, no-comment-streams, and
+ * comment-streams-initially-collapsed magic words.
*
* @param Parser $parser the parser
* @return bool continue checking hooks
@@ -206,7 +215,7 @@ class CommentStreamsHooks {
$parser->setHook( 'comment-streams',
'CommentStreamsHooks::enableCommentStreams' );
$parser->setHook( 'no-comment-streams',
- 'CommentStreamsHooks::hideCommentStreams' );
+ 'CommentStreamsHooks::disableCommentStreams' );
$parser->setHook( 'comment-streams-initially-collapsed',
'CommentStreamsHooks::initiallyCollapseCommentStreams' );
return true;
@@ -245,7 +254,7 @@ class CommentStreamsHooks {
* @param PPFrame $frame the parent frame
* @return string to replace tag with
*/
- public static function hideCommentStreams( $input, array $args,
+ public static function disableCommentStreams( $input, array $args,
Parser $parser, PPFrame $frame ) {
$parser->disableCache();
$cs = CommentStreams::singleton();
@@ -274,7 +283,7 @@ class CommentStreamsHooks {
/**
* Implements BeforePageDisplay hook.
* See https://www.mediawiki.org/wiki/Manual:Hooks/BeforePageDisplay
- * Updates database schema.
+ * Gets comments for page and initializes variables to be passed to JavaScript.
*
* @param OutputPage &$output OutputPage object
* @param Skin &$skin Skin object that will be used to generate the page
@@ -304,7 +313,10 @@ class CommentStreamsHooks {
SearchResult $result, array $terms, SpecialSearch $page ) {
$comment = Comment::newFromWikiPage( WikiPage::factory( $title ) );
if ( !is_null( $comment ) ) {
- $title = Title::newFromId( $comment->getAssociatedId() );
+ $t = Title::newFromId( $comment->getAssociatedId() );
+ if ( !is_null( $t ) ) {
+ $title = $t;
+ }
}
return true;
}
@@ -321,6 +333,21 @@ class CommentStreamsHooks {
$GLOBALS['wgCommentStreamsNamespaceIndex'] + 1 );
$GLOBALS['wgNamespacesToBeSearchedDefault'][NS_COMMENTSTREAMS] = true;
$GLOBALS['smwgNamespacesWithSemanticLinks'][NS_COMMENTSTREAMS] = true;
+ $found = false;
+ foreach ( $GLOBALS['wgGroupPermissions'] as $groupperms ) {
+ if ( isset( $groupperms['cs-comment'] ) ) {
+ $found = true;
+ break;
+ }
+ }
+ if ( !$found ) {
+ foreach ( $GLOBALS['wgGroupPermissions'] as $group => $groupperms ) {
+ if ( isset( $groupperms['edit'] ) ) {
+ $GLOBALS['wgGroupPermissions'][$group]['cs-comment'] =
+ $groupperms['edit'];
+ }
+ }
+ }
if ( !isset( $GLOBALS['wgGroupPermissions']['csmoderator']
['cs-moderator-delete'] ) ) {
$GLOBALS['wgGroupPermissions']['csmoderator']['cs-moderator-delete'] =
@@ -331,6 +358,7 @@ class CommentStreamsHooks {
$GLOBALS['wgGroupPermissions']['csmoderator']['cs-moderator-edit'] =
false;
}
+ $GLOBALS['wgAvailableRights'][] = 'cs-comment';
$GLOBALS['wgAvailableRights'][] = 'cs-moderator-edit';
$GLOBALS['wgAvailableRights'][] = 'cs-moderator-delete';
$GLOBALS['wgLogTypes'][] = 'commentstreams';
@@ -360,7 +388,7 @@ class CommentStreamsHooks {
*
* @param SMW\Store $store semantic data store
* @param SMW\SemanticData $semanticData semantic data for page
- * @return boolean true to continue
+ * @return bool true to continue
*/
public static function updateData( $store, $semanticData ) {
$subject = $semanticData->getSubject();
@@ -428,7 +456,6 @@ class CommentStreamsHooks {
*/
public static function onBeforeCreateEchoEvent( &$notifications,
&$notificationCategories, &$icons ) {
-
$notificationCategories['commentstreams-notification-category'] = [
'priority' => 3
];
diff --git a/CommentStreams/includes/CommentStreamsUtils.php b/CommentStreams/includes/CommentStreamsUtils.php
new file mode 100644
index 00000000..10d3446e
--- /dev/null
+++ b/CommentStreams/includes/CommentStreamsUtils.php
@@ -0,0 +1,39 @@
+<?php
+/*
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+use MediaWiki\MediaWikiServices;
+
+class CommentStreamsUtils {
+
+ /**
+ * Shim for compatibility
+ * @param Title $title to link to
+ * @param string $display to show
+ * @return string for link
+ */
+ public static function link( Title $title, $display ) {
+ if ( method_exists( 'MediaWikiServices', 'getLinkRenderer' ) ) {
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+ return $linkRenderer->makeLink( $title, $display );
+ };
+ return Linker::link( $title, $display );
+ }
+}
diff --git a/CommentStreams/includes/EchoCSPresentationModel.php b/CommentStreams/includes/EchoCSPresentationModel.php
index c95657cb..bc6786cf 100644
--- a/CommentStreams/includes/EchoCSPresentationModel.php
+++ b/CommentStreams/includes/EchoCSPresentationModel.php
@@ -24,17 +24,14 @@
class EchoCSPresentationModel extends EchoEventPresentationModel {
/**
- * @return string The symbolic icon name as defined in $wgEchoNotificationIcons
+ * @inheritDoc
*/
public function getIconType() {
return 'chat';
}
/**
- * Array of primary link details, with possibly-relative URL & label.
- *
- * @return array|bool Array of link data, or false for no link:
- * ['url' => (string) url, 'label' => (string) link text (non-escaped)]
+ * @inheritDoc
*/
public function getPrimaryLink() {
$id = $this->event->getExtraParam( 'comment_id' );
@@ -45,11 +42,7 @@ class EchoCSPresentationModel extends EchoEventPresentationModel {
}
/**
- * Get a message object and add the performer's name as
- * a parameter. It is expected that subclasses will override
- * this.
- *
- * @return Message
+ * @inheritDoc
*/
public function getHeaderMessage() {
$msg = wfMessage( "notification-header-{$this->type}" );
@@ -66,6 +59,9 @@ class EchoCSPresentationModel extends EchoEventPresentationModel {
return $msg;
}
+ /**
+ * @inheritDoc
+ */
public function getBodyMessage() {
$msg = wfMessage( "notification-body-{$this->type}" );
$msg->params( $this->event->getExtraParam(
@@ -82,10 +78,7 @@ class EchoCSPresentationModel extends EchoEventPresentationModel {
}
/**
- * If this function returns false, no other methods will be called
- * on the object.
- *
- * @return bool
+ * @inheritDoc
*/
public function canRender() {
return !is_null( $this->event->getTitle() );
diff --git a/CommentStreams/resources/CommentStreams.css b/CommentStreams/resources/CommentStreams.css
index 818ef1c4..9473a305 100644
--- a/CommentStreams/resources/CommentStreams.css
+++ b/CommentStreams/resources/CommentStreams.css
@@ -10,7 +10,6 @@
.cs-stream {
margin-top: 5px;
margin-bottom: 5px;
- overflow: hidden;
}
.cs-comment {
@@ -79,6 +78,12 @@
font-size: 12px;
}
+.cs-comment-author-anonymous {
+ font-style: italic;
+ opacity: 0.8;
+ color: #555555;
+}
+
.cs-comment-author a {
color: #00a7d8;
font-weight: bold;
@@ -97,6 +102,10 @@
padding-left: 5px;
}
+.cs-comment-button-label {
+ padding-left: 5px;
+}
+
button:hover {
background-color: #8eddf5;
}
@@ -189,3 +198,19 @@ button:hover {
font-family: sans-serif;
font-size: 14px;
}
+
+// VisualEditor/VEForAll CSS
+.ve-area-wrapper, .ve-ce-documentNode {
+ width: auto !important;
+}
+
+.ve-area-wrapper {
+ z-index: 100;
+}
+
+div.ve-ce-branchNode {
+ border: 1px solid #00a7d8;
+ background: white;
+ margin-bottom: 5px;
+}
+
diff --git a/CommentStreams/resources/CommentStreams.js b/CommentStreams/resources/CommentStreams.js
index bd2fb3d4..e16ed87e 100644
--- a/CommentStreams/resources/CommentStreams.js
+++ b/CommentStreams/resources/CommentStreams.js
@@ -28,9 +28,11 @@ var commentstreams_controller = ( function( mw, $ ) {
imagepath: null,
targetComment: null,
isLoggedIn: false,
+ canComment: false,
moderatorEdit: false,
moderatorDelete: false,
moderatorFastDelete: false,
+ showLabels: false,
userDisplayName: null,
newestStreamsOnTop: false,
initiallyCollapsed: false,
@@ -57,7 +59,7 @@ var commentstreams_controller = ( function( mw, $ ) {
},
initialize: function() {
var self = this;
- this.baseUrl = window.location.href.split(/[?#]/)[0];
+ this.baseUrl = window.location.href.split( /[?#]/ )[0];
this.imagepath = mw.config.get( 'wgExtensionAssetsPath' ) +
'/CommentStreams/images/';
if ( window.location.hash ) {
@@ -70,10 +72,12 @@ var commentstreams_controller = ( function( mw, $ ) {
}
this.isLoggedIn = mw.config.get( 'wgUserName' ) !== null;
var config = mw.config.get( 'CommentStreams' );
+ this.canComment = config.canComment;
this.moderatorEdit = config.moderatorEdit;
this.moderatorDelete = config.moderatorDelete;
this.moderatorFastDelete = this.moderatorDelete ?
config.moderatorFastDelete : false;
+ this.showLabels = config.showLabels;
this.userDisplayName = config.userDisplayName;
this.newestStreamsOnTop = config.newestStreamsOnTop;
this.initiallyCollapsed = config.initiallyCollapsed;
@@ -89,13 +93,17 @@ var commentstreams_controller = ( function( mw, $ ) {
scrollToAnchor: function( id ){
var element = $( '#' + id );
if ( element.length ) {
- $('html,body').animate( {scrollTop: element.offset().top},'slow');
+ $( 'html,body' ).animate( {scrollTop: element.offset().top},'slow');
}
},
setupDivs: function() {
var self = this;
- var mainDiv = $( '<div>' ).attr( 'id', 'cs-comments' );
+ var mainDiv = $( '#cs-comments' );
+ if ( !mainDiv.length ) {
+ mainDiv = $( '<div>' ).attr( 'id', 'cs-comments' );
+ mainDiv.insertAfter( '#catlinks' );
+ }
var headerDiv = $( '<div> ').attr( 'id', 'cs-header');
mainDiv.append( headerDiv );
@@ -103,19 +111,27 @@ var commentstreams_controller = ( function( mw, $ ) {
var footerDiv = $( '<div> ').attr( 'id', 'cs-footer');
mainDiv.append( footerDiv );
- if ( this.isLoggedIn ) {
+ if ( this.canComment ) {
var addButton = $( '<button>' )
.attr( {
type: 'button',
- id: 'cs-add-button'
+ id: 'cs-add-button',
+ title: mw.message( 'commentstreams-buttontext-add' ),
+ 'data-toggle': 'tooltip'
} )
.addClass( 'cs-button' );
- var addimage = $( '<img>' )
+ var addImage = $( '<img>' )
.attr( {
title: mw.message( 'commentstreams-buttontooltip-add' ),
src: this.imagepath + 'comment_add.png'
} );
- addButton.append( addimage );
+ addButton.append( addImage );
+ if ( this.showLabels ) {
+ var addLabel = $( '<span>' )
+ .text( mw.message( 'commentstreams-buttontext-add' ) )
+ .addClass( 'cs-comment-button-label' )
+ addButton.append( addLabel );
+ }
if ( this.newestStreamsOnTop ) {
headerDiv.append( addButton );
@@ -127,8 +143,6 @@ var commentstreams_controller = ( function( mw, $ ) {
self.showNewCommentStreamBox();
} );
}
-
- mainDiv.insertAfter( '#catlinks' );
},
addInitialComments: function() {
var self = this;
@@ -179,24 +193,24 @@ var commentstreams_controller = ( function( mw, $ ) {
} );
},
disableAllButtons: function() {
- $( '.cs-edit-button' ).attr( 'disabled', 'disabled' );
- $( '.cs-reply-button' ).attr( 'disabled', 'disabled' );
- $( '#cs-add-button' ).attr( 'disabled', 'disabled' );
- $( '.cs-delete-button' ).attr( 'disabled', 'disabled' );
- $( '.cs-toggle-button' ).attr( 'disabled', 'disabled' );
- $( '.cs-link-button' ).attr( 'disabled', 'disabled' );
- $( '.cs-vote-button' ).attr( 'disabled', 'disabled' );
- $( '.cs-watch-button' ).attr( 'disabled', 'disabled' );
+ $( '.cs-edit-button' ).prop( 'disabled', true );
+ $( '.cs-reply-button' ).prop( 'disabled', true );
+ $( '#cs-add-button' ).prop( 'disabled', true );
+ $( '.cs-delete-button' ).prop( 'disabled', true );
+ $( '.cs-toggle-button' ).prop( 'disabled', true );
+ $( '.cs-link-button' ).prop( 'disabled', true );
+ $( '.cs-vote-button' ).prop( 'disabled', true );
+ $( '.cs-watch-button' ).prop( 'disabled', true );
},
enableAllButtons: function() {
- $( '.cs-edit-button' ).attr( 'disabled', false );
- $( '.cs-reply-button' ).attr( 'disabled', false );
- $( '#cs-add-button' ).attr( 'disabled', false );
- $( '.cs-delete-button' ).attr( 'disabled', false );
- $( '.cs-toggle-button' ).attr( 'disabled', false );
- $( '.cs-link-button' ).attr( 'disabled', false );
- $( '.cs-vote-button' ).attr( 'disabled', false );
- $( '.cs-watch-button' ).attr( 'disabled', false );
+ $( '.cs-edit-button' ).prop( 'disabled', false );
+ $( '.cs-reply-button' ).prop( 'disabled', false );
+ $( '#cs-add-button' ).prop( 'disabled', false );
+ $( '.cs-delete-button' ).prop( 'disabled', false );
+ $( '.cs-toggle-button' ).prop( 'disabled', false );
+ $( '.cs-link-button' ).prop( 'disabled', false );
+ $( '.cs-vote-button' ).prop( 'disabled', false );
+ $( '.cs-watch-button' ).prop( 'disabled', false );
},
formatComment: function( commentData ) {
var self = this;
@@ -213,20 +227,28 @@ var commentstreams_controller = ( function( mw, $ ) {
.addClass( 'cs-stream-footer' );
comment.append( streamFooter );
- if ( this.isLoggedIn ) {
+ if ( this.canComment ) {
var replyButton = $( '<button>' )
.addClass( 'cs-button' )
.addClass( 'cs-reply-button' )
.attr( {
type: 'button',
- 'data-stream-id': commentData.pageid
+ 'data-stream-id': commentData.pageid,
+ title: mw.message( 'commentstreams-buttontext-reply' ),
+ 'data-toggle': 'tooltip'
} );
- var replyimage = $( '<img>' )
+ var replyImage = $( '<img>' )
.attr( {
title: mw.message( 'commentstreams-buttontooltip-reply' ),
src: this.imagepath + 'comment_reply.png'
} );
- replyButton.append( replyimage );
+ replyButton.append( replyImage );
+ if ( this.showLabels ) {
+ var replyLabel = $( '<span>' )
+ .text( mw.message( 'commentstreams-buttontext-reply' ) )
+ .addClass( 'cs-comment-button-label' )
+ replyButton.append( replyLabel );
+ }
streamFooter.append( replyButton );
replyButton.click( function() {
var pageId = $( this ).attr( 'data-stream-id' );
@@ -258,7 +280,11 @@ var commentstreams_controller = ( function( mw, $ ) {
if ( commentData.parentid === null ) {
var title = $( '<div>' )
.addClass( 'cs-comment-title' )
- .text( commentData.commenttitle );
+ .text( commentData.commenttitle )
+ .attr( {
+ title: commentData.commenttitle,
+ 'data-toggle': 'tooltip'
+ } );
centerDiv.append( title );
}
@@ -405,7 +431,11 @@ var commentstreams_controller = ( function( mw, $ ) {
var editButton = $( '<button>' )
.addClass( 'cs-button' )
.addClass( 'cs-edit-button' )
- .attr( 'type', 'button' );
+ .attr( {
+ type: 'button',
+ title: mw.message( 'commentstreams-buttontooltip-edit' ),
+ 'data-toggle': 'tooltip'
+ } );
var editimage = $( '<img>' );
if ( mw.user.getName() !== username ) {
editimage
@@ -435,7 +465,11 @@ var commentstreams_controller = ( function( mw, $ ) {
var deleteButton = $( '<button>' )
.addClass( 'cs-button' )
.addClass( 'cs-delete-button' )
- .attr( 'type', 'button' );
+ .attr( {
+ type: 'button',
+ title: mw.message( 'commentstreams-buttontooltip-delete' ),
+ 'data-toggle': 'tooltip'
+ } );
var deleteimage = $( '<img>' );
if ( mw.user.getName() !== username ) {
deleteimage
@@ -460,12 +494,16 @@ var commentstreams_controller = ( function( mw, $ ) {
} );
return deleteButton;
},
- createPermalinkButton( pageid ) {
+ createPermalinkButton: function( pageid ) {
var self = this;
var id = 'cs-comment-' + pageid;
var permalinkButton = $( '<button>' )
.addClass( 'cs-button' )
.addClass( 'cs-link-button' )
+ .attr( {
+ title: mw.message( 'commentstreams-buttontooltip-permalink' ),
+ 'data-toggle': 'tooltip'
+ } )
.click( function() {
$( '.cs-target-comment' )
.removeClass( 'cs-target-comment' );
@@ -484,7 +522,7 @@ var commentstreams_controller = ( function( mw, $ ) {
permalinkButton.append( permalinkimage );
return permalinkButton;
},
- createWatchButton( commentData ) {
+ createWatchButton: function( commentData ) {
var self = this;
var watchButton = $( '<button>' )
.addClass( 'cs-button' )
@@ -511,7 +549,7 @@ var commentstreams_controller = ( function( mw, $ ) {
watchButton.append( watchimage );
return watchButton;
},
- createVotingButtons( commentData ) {
+ createVotingButtons: function( commentData ) {
var self = this;
var upButton;
@@ -581,10 +619,10 @@ var commentstreams_controller = ( function( mw, $ ) {
var self = this;
var votespan = button.closest( '.cs-voting-span' );
var upcountspan = votespan.find( '.cs-vote-upcount' );
- var upcount = parseInt(upcountspan.text());
+ var upcount = parseInt( upcountspan.text() );
var upimage = votespan.find( '.cs-vote-upimage' );
var downcountspan = votespan.find( '.cs-vote-downcount' );
- var downcount = parseInt(downcountspan.text());
+ var downcount = parseInt( downcountspan.text() );
var downimage = votespan.find( '.cs-vote-downimage' );
var newvote;
@@ -710,10 +748,10 @@ var commentstreams_controller = ( function( mw, $ ) {
var sibling = nextSiblings[index];
var nextupcountspan =
$( sibling ).find( '.cs-vote-upcount' );
- var nextupcount = parseInt(nextupcountspan.text());
+ var nextupcount = parseInt( nextupcountspan.text() );
var nextdowncountspan =
$( sibling ).find( '.cs-vote-downcount' );
- var nextdowncount = parseInt(nextdowncountspan.text());
+ var nextdowncount = parseInt( nextdowncountspan.text() );
var nextvotediff = nextupcount - nextdowncount;
if ( nextvotediff > votediff ) {
// keeping looking
@@ -769,10 +807,10 @@ var commentstreams_controller = ( function( mw, $ ) {
var sibling = prevSiblings[index];
var prevupcountspan =
$( sibling ).find( '.cs-vote-upcount' );
- var prevupcount = parseInt(prevupcountspan.text());
+ var prevupcount = parseInt( prevupcountspan.text() );
var prevdowncountspan =
$( sibling ).find( '.cs-vote-downcount' );
- var prevdowncount = parseInt(prevdowncountspan.text());
+ var prevdowncount = parseInt( prevdowncountspan.text() );
var prevvotediff = prevupcount - prevdowncount;
if ( prevvotediff < votediff ) {
// keeping looking
@@ -837,7 +875,7 @@ var commentstreams_controller = ( function( mw, $ ) {
}
stream.slideDown( 1000, function() {
self.enableAllButtons();
- var id = $ (this ).find( '.cs-head-comment:first' ).attr( 'id' );
+ var id = $( this ).find( '.cs-head-comment:first' ).attr( 'id' );
self.scrollToAnchor( id );
} );
} );
@@ -845,7 +883,7 @@ var commentstreams_controller = ( function( mw, $ ) {
createDivider: function() {
return $( '<span>' )
.addClass( 'cs-comment-details' )
- .text('|');
+ .text( '|' );
},
formatEditBox: function( is_stream ) {
var commentBox = $( '<div>' )
@@ -864,6 +902,11 @@ var commentstreams_controller = ( function( mw, $ ) {
commentBox.addClass( 'cs-reply-edit-box' );
}
+ if ( $.fn.applyVisualEditor ) {
+ // VEForAll is installed.
+ commentBox.addClass( 've-area-wrapper' );
+ }
+
var bodyField = $( '<textarea>' )
.attr( {
'id': 'cs-body-edit-field',
@@ -920,6 +963,11 @@ var commentstreams_controller = ( function( mw, $ ) {
.hide()
.slideDown();
}
+ if ( $.fn.applyVisualEditor ) {
+ // VEForAll is installed.
+ var editField = $( '#cs-body-edit-field' );
+ editField.applyVisualEditor();
+ }
$( '#cs-submit-button' ).click( function() {
self.postComment( null );
} );
@@ -950,6 +998,10 @@ var commentstreams_controller = ( function( mw, $ ) {
var editField = $( '#cs-body-edit-field' );
if ( editField !== null ) {
editField.focus();
+ if ( $.fn.applyVisualEditor ) {
+ // VEForAll is installed.
+ editField.applyVisualEditor();
+ }
}
},
hideEditBox: function( animated ) {
@@ -965,13 +1017,73 @@ var commentstreams_controller = ( function( mw, $ ) {
},
postComment: function( parentPageId ) {
var self = this;
+ if ( this.isLoggedIn ) {
+ self.postComment2( parentPageId );
+ } else {
+ var message_text =
+ mw.message( 'commentstreams-dialog-anonymous-message' ).text();
+ var ok_text =
+ mw.message( 'commentstreams-dialog-buttontext-ok' ).text();
+ var cancel_text =
+ mw.message( 'commentstreams-dialog-buttontext-cancel' ).text();
+ var dialog = new OO.ui.MessageDialog();
+ var window_manager = new OO.ui.WindowManager();
+ $( '#cs-comments' ).append( window_manager.$element );
+ window_manager.addWindows( [ dialog ] );
+ window_manager.openWindow( dialog, {
+ message: message_text,
+ actions: [
+ { label: ok_text, action: 'ok' },
+ { label: cancel_text, flags: 'primary' }
+ ]
+ } ).then( function ( opened ) {
+ opened.then( function ( closing, data ) {
+ if ( data && data.action ) {
+ if ( data.action === 'ok' ) {
+ self.postComment2( parentPageId );
+ }
+ }
+ } );
+ } );
+ }
+ },
+ postComment2: function( parentPageId ) {
+ var self = this;
+ if ( $( '#cs-body-edit-field' ).css( 'display' ) == 'none' ) {
+ self.postCommentFromVE( parentPageId );
+ } else {
+ var commentText = $( '#cs-body-edit-field' ).val();
+ self.realPostComment( parentPageId, commentText );
+ }
+ },
+ postCommentFromVE: function( parentPageId ) {
+ var self = this;
+ var editField = $( '#cs-body-edit-field' );
+ var veInstances = editField.getVEInstances();
+ var curVEEditor = veInstances[veInstances.length - 1];
+ new mw.Api().post( {
+ action: 'veforall-parsoid-utils',
+ from: 'html',
+ to: 'wikitext',
+ content: curVEEditor.target.getSurface().getHtml(),
+ title: mw.config.get( 'wgPageName' ).split( /(\\|\/)/g ).pop()
+ } ).then( function ( data ) {
+ var commentText = data[ 'veforall-parsoid-utils' ].content;
+ self.realPostComment( parentPageId, commentText );
+ } )
+ .fail( function ( data ) {
+ self.reportError( 'commentstreams-ve-conversion-error' );
+ } );
+ },
+ realPostComment: function( parentPageId, commentText ) {
+ var self = this;
var commentTitle;
if ( parentPageId === null ) {
var titleField = $( '#cs-title-edit-field' );
if ( titleField !== null ) {
commentTitle = titleField .val();
- if ( commentTitle === null || commentTitle.trim() === "" ) {
+ if ( commentTitle === null || commentTitle.trim() === '' ) {
this.reportError( 'commentstreams-validation-error-nocommenttitle' );
return;
}
@@ -980,14 +1092,13 @@ var commentstreams_controller = ( function( mw, $ ) {
commentTitle = null;
}
- var commentText = $( '#cs-body-edit-field' ).val();
- if ( commentText === null || commentText.trim() === "" ) {
+ if ( commentText === null || commentText.trim() === '' ) {
this.reportError( 'commentstreams-validation-error-nocommenttext' );
return;
}
- $( '#cs-submit-button' ).attr( 'disabled', 'disabled' );
- $( '#cs-cancel-button' ).attr( 'disabled', 'disabled' );
+ $( '#cs-submit-button' ).prop( 'disabled', true );
+ $( '#cs-cancel-button' ).prop( 'disabled', true );
$( '#cs-edit-box' ).fadeTo( 100, 0.2, function() {
new Spinner( self.spinnerOptions )
@@ -1032,8 +1143,8 @@ var commentstreams_controller = ( function( mw, $ ) {
} else {
self.reportError( result.error );
$( '#cs-edit-box').fadeTo( 0.2, 100, function() {
- $( '#cs-submit-button' ).attr( 'disabled', false );
- $( '#cs-cancel-button' ).attr( 'disabled', false );
+ $( '#cs-submit-button' ).prop( 'disabled', false );
+ $( '#cs-cancel-button' ).prop( 'disabled', false );
} );
}
} );
@@ -1130,7 +1241,7 @@ var commentstreams_controller = ( function( mw, $ ) {
commentBox.slideDown();
var editField = $( '#cs-body-edit-field' );
- editField.val( result.wikitext );
+ editField.val( $( '<textarea/>' ).html( result.wikitext ).text() );
if ( is_stream ) {
var titleField = $( '#cs-title-edit-field' );
titleField.val( result.commenttitle );
@@ -1138,6 +1249,10 @@ var commentstreams_controller = ( function( mw, $ ) {
} else {
editField.focus();
}
+ if ( $.fn.applyVisualEditor ) {
+ // VEForAll is installed.
+ editField.applyVisualEditor();
+ }
$( '#cs-cancel-button' ).click( function() {
commentBox.slideUp( 'normal', function() {
@@ -1149,75 +1264,12 @@ var commentstreams_controller = ( function( mw, $ ) {
} );
$( '#cs-submit-button' ).click( function() {
- if ( element.hasClass( 'cs-head-comment' ) ) {
- var commentTitle = $( '#cs-title-edit-field' ).val();
- if ( commentTitle === null || commentTitle.trim() === "" ) {
- self.reportError(
- 'commentstreams-validation-error-nocommenttitle' );
- return;
- }
- }
-
- var commentText = $( '#cs-body-edit-field' ).val();
- if ( commentText === null || commentText.trim() === "" ) {
- self.reportError(
- 'commentstreams-validation-error-nocommenttext' );
- return;
+ if ( $( '#cs-body-edit-field' ).css( 'display' ) == 'none' ) {
+ self.editCommentFromVE( element, commentBox, pageId );
+ } else {
+ var commentText = $( '#cs-body-edit-field' ).val();
+ self.realEditComment( element, commentBox, pageId, commentText );
}
-
- $( '#cs-submit-button' ).attr( 'disabled', 'disabled' );
- $( '#cs-cancel-button' ).attr( 'disabled', 'disabled' );
-
- commentBox.fadeTo( 100, 0.2, function() {
- new Spinner( self.spinnerOptions )
- .spin( document.getElementById( 'cs-edit-box' ) );
-
- CommentStreamsQuerier.editComment( commentTitle, commentText,
- pageId, function( result ) {
- $( '.spinner' ).remove();
- if ( result.error === undefined ) {
- var comment = self.formatCommentInner( result );
- if ( element.closest( '.cs-stream' ).hasClass( 'cs-collapsed' ) ) {
- comment.find( '.cs-comment-body' ).addClass( 'cs-hidden' );
- }
- commentBox.slideUp( 'normal', function() {
- comment.insertAfter( commentBox );
- commentBox.remove();
- element.remove();
- self.enableAllButtons();
- } );
- } else if ( result.error === 'commentstreams-api-error-commentnotfound' ) {
- self.reportError( result.error );
- var parentId = element
- .closest( '.cs-stream' )
- .find( '.cs-head-comment' )
- .attr( 'data-id' );
- CommentStreamsQuerier.queryComment( parentId, function( result ) {
- if ( result.error === undefined &&
- self.canDelete( result ) &&
- !self.moderatorFastDelete ) {
- self.createDeleteButton( result.username )
- .insertAfter ( element
- .closest( '.cs-stream' )
- .find( '.cs-head-comment' )
- .find( '.cs-comment-header' )
- .find( '.cs-edit-button' ) );
- }
- commentBox.slideUp( 'normal', function() {
- commentBox.remove();
- element.remove();
- self.enableAllButtons();
- } );
- } );
- } else {
- self.reportError( result.error );
- commentBox.fadeTo( 0.2, 100, function() {
- $( '#cs-submit-button' ).attr( 'disabled', false );
- $( '#cs-cancel-button' ).attr( 'disabled', false );
- } );
- }
- } );
- } );
} );
} else if ( result.error === 'commentstreams-api-error-commentnotfound' ) {
self.reportError( result.error );
@@ -1248,6 +1300,96 @@ var commentstreams_controller = ( function( mw, $ ) {
} );
} );
},
+ editCommentFromVE: function( element, commentBox, pageId ) {
+ var self = this;
+ var editField = $( '#cs-body-edit-field' );
+ var veInstances = editField.getVEInstances();
+ var curVEEditor = veInstances[veInstances.length - 1];
+ new mw.Api().post( {
+ action: 'veforall-parsoid-utils',
+ from: 'html',
+ to: 'wikitext',
+ content: curVEEditor.target.getSurface().getHtml(),
+ title: mw.config.get( 'wgPageName' ).split( /(\\|\/)/g ).pop()
+ } ).then( function ( data ) {
+ var commentText = data[ 'veforall-parsoid-utils' ].content;
+ self.realEditComment( element, commentBox, pageId, commentText );
+ } )
+ .fail( function ( data ) {
+ self.reportError( 'commentstreams-ve-conversion-error' );
+ } );
+ },
+ realEditComment: function( element, commentBox, pageId, commentText ) {
+ var self = this;
+ if ( element.hasClass( 'cs-head-comment' ) ) {
+ var commentTitle = $( '#cs-title-edit-field' ).val();
+ if ( commentTitle === null || commentTitle.trim() === '' ) {
+ self.reportError(
+ 'commentstreams-validation-error-nocommenttitle' );
+ return;
+ }
+ }
+
+ if ( commentText === null || commentText.trim() === '' ) {
+ self.reportError(
+ 'commentstreams-validation-error-nocommenttext' );
+ return;
+ }
+
+ $( '#cs-submit-button' ).prop( 'disabled', true );
+ $( '#cs-cancel-button' ).prop( 'disabled', true );
+
+ commentBox.fadeTo( 100, 0.2, function() {
+ new Spinner( self.spinnerOptions )
+ .spin( document.getElementById( 'cs-edit-box' ) );
+
+ CommentStreamsQuerier.editComment( commentTitle, commentText,
+ pageId, function( result ) {
+ $( '.spinner' ).remove();
+ if ( result.error === undefined ) {
+ var comment = self.formatCommentInner( result );
+ if ( element.closest( '.cs-stream' ).hasClass( 'cs-collapsed' ) ) {
+ comment.find( '.cs-comment-body' ).addClass( 'cs-hidden' );
+ }
+ commentBox.slideUp( 'normal', function() {
+ comment.insertAfter( commentBox );
+ commentBox.remove();
+ element.remove();
+ self.enableAllButtons();
+ } );
+ } else if ( result.error === 'commentstreams-api-error-commentnotfound' ) {
+ self.reportError( result.error );
+ var parentId = element
+ .closest( '.cs-stream' )
+ .find( '.cs-head-comment' )
+ .attr( 'data-id' );
+ CommentStreamsQuerier.queryComment( parentId, function( result ) {
+ if ( result.error === undefined &&
+ self.canDelete( result ) &&
+ !self.moderatorFastDelete ) {
+ self.createDeleteButton( result.username )
+ .insertAfter ( element
+ .closest( '.cs-stream' )
+ .find( '.cs-head-comment' )
+ .find( '.cs-comment-header' )
+ .find( '.cs-edit-button' ) );
+ }
+ commentBox.slideUp( 'normal', function() {
+ commentBox.remove();
+ element.remove();
+ self.enableAllButtons();
+ } );
+ } );
+ } else {
+ self.reportError( result.error );
+ commentBox.fadeTo( 0.2, 100, function() {
+ $( '#cs-submit-button' ).prop( 'disabled', false );
+ $( '#cs-cancel-button' ).prop( 'disabled', false );
+ } );
+ }
+ } );
+ } );
+ },
canEdit: function( comment ) {
var username = comment.username;
if ( !mw.user.isAnon() && ( mw.user.getName() === username ||
diff --git a/CommentStreams/sql/commentData.sql b/CommentStreams/sql/commentData.sql
index 00b8fead..d8d26d73 100644
--- a/CommentStreams/sql/commentData.sql
+++ b/CommentStreams/sql/commentData.sql
@@ -1,9 +1,8 @@
-CREATE TABLE IF NOT EXISTS cs_comment_data
+CREATE TABLE IF NOT EXISTS /*_*/cs_comment_data
(
-page_id int(10) unsigned,
-assoc_page_id int(10) unsigned,
-parent_page_id int(10) unsigned,
-comment_title varbinary(255),
-PRIMARY KEY (page_id),
-FOREIGN KEY (assoc_page_id) REFERENCES page(page_id)
-); \ No newline at end of file
+cst_page_id int(10) unsigned,
+cst_assoc_page_id int(10) unsigned,
+cst_parent_page_id int(10) unsigned,
+cst_comment_title varbinary(255),
+PRIMARY KEY (cst_page_id)
+);
diff --git a/CommentStreams/sql/dropForeignKey1.sql b/CommentStreams/sql/dropForeignKey1.sql
new file mode 100644
index 00000000..a8b4d946
--- /dev/null
+++ b/CommentStreams/sql/dropForeignKey1.sql
@@ -0,0 +1,2 @@
+ALTER TABLE /*_*/cs_comment_data DROP FOREIGN KEY cs_comment_data_ibfk_1;
+ALTER TABLE /*_*/cs_comment_data DROP INDEX assoc_page_id;
diff --git a/CommentStreams/sql/dropForeignKey2.sql b/CommentStreams/sql/dropForeignKey2.sql
new file mode 100644
index 00000000..f2f7ae44
--- /dev/null
+++ b/CommentStreams/sql/dropForeignKey2.sql
@@ -0,0 +1,2 @@
+ALTER TABLE /*_*/cs_comment_data DROP FOREIGN KEY cs_comment_data_ibfk_1;
+ALTER TABLE /*_*/cs_comment_data DROP INDEX cst_assoc_page_id;
diff --git a/CommentStreams/sql/updateFieldNames.sql b/CommentStreams/sql/updateFieldNames.sql
new file mode 100644
index 00000000..5f4526bf
--- /dev/null
+++ b/CommentStreams/sql/updateFieldNames.sql
@@ -0,0 +1,9 @@
+ALTER TABLE /*_*/cs_comment_data CHANGE page_id cst_page_id int(10) unsigned;
+ALTER TABLE /*_*/cs_comment_data CHANGE assoc_page_id cst_assoc_page_id int(10) unsigned;
+ALTER TABLE /*_*/cs_comment_data CHANGE parent_page_id cst_parent_page_id int(10) unsigned;
+ALTER TABLE /*_*/cs_comment_data CHANGE comment_title cst_comment_title varbinary(255);
+ALTER TABLE /*_*/cs_votes CHANGE page_id cst_v_page_id int(10) unsigned NOT NULL;
+ALTER TABLE /*_*/cs_votes CHANGE user_id cst_v_user_id int(10) unsigned NOT NULL;
+ALTER TABLE /*_*/cs_votes CHANGE vote cst_v_vote tinyint NOT NULL;
+ALTER TABLE /*_*/cs_watchlist CHANGE page_id cst_wl_page_id int(10) unsigned NOT NULL;
+ALTER TABLE /*_*/cs_watchlist CHANGE user_id cst_wl_user_id int(10) unsigned NOT NULL;
diff --git a/CommentStreams/sql/votes.sql b/CommentStreams/sql/votes.sql
index 4e232eb2..cffdcb27 100644
--- a/CommentStreams/sql/votes.sql
+++ b/CommentStreams/sql/votes.sql
@@ -1,7 +1,7 @@
-CREATE TABLE IF NOT EXISTS cs_votes
+CREATE TABLE IF NOT EXISTS /*_*/cs_votes
(
-page_id int(10) unsigned NOT NULL,
-user_id int(10) unsigned NOT NULL,
-vote tinyint NOT NULL,
-INDEX (page_id, user_id)
+cst_v_page_id int(10) unsigned NOT NULL,
+cst_v_user_id int(10) unsigned NOT NULL,
+cst_v_vote tinyint NOT NULL,
+INDEX (cst_v_page_id, cst_v_user_id)
);
diff --git a/CommentStreams/sql/watch.sql b/CommentStreams/sql/watch.sql
index 4e3dbf61..33e05ae4 100644
--- a/CommentStreams/sql/watch.sql
+++ b/CommentStreams/sql/watch.sql
@@ -1,6 +1,6 @@
-CREATE TABLE IF NOT EXISTS cs_watchlist
+CREATE TABLE IF NOT EXISTS /*_*/cs_watchlist
(
-page_id int(10) unsigned NOT NULL,
-user_id int(10) unsigned NOT NULL,
-INDEX (page_id, user_id)
+cst_wl_page_id int(10) unsigned NOT NULL,
+cst_wl_user_id int(10) unsigned NOT NULL,
+INDEX (cst_wl_page_id, cst_wl_user_id)
);
diff --git a/CommentStreams/version b/CommentStreams/version
deleted file mode 100644
index 7342fdcf..00000000
--- a/CommentStreams/version
+++ /dev/null
@@ -1,4 +0,0 @@
-CommentStreams: REL1_30
-2017-09-21T22:04:40
-
-08aec40