aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components/emoji_reactions/emoji_reactions.js26
-rw-r--r--src/components/emoji_reactions/emoji_reactions.vue127
-rw-r--r--src/components/notification/notification.vue3
-rw-r--r--src/components/react_button/react_button.js2
-rw-r--r--src/i18n/ar.json325
-rw-r--r--src/i18n/en.json3
-rw-r--r--src/i18n/eo.json94
-rw-r--r--src/i18n/ko.json64
-rw-r--r--src/main.js2
9 files changed, 578 insertions, 68 deletions
diff --git a/src/components/emoji_reactions/emoji_reactions.js b/src/components/emoji_reactions/emoji_reactions.js
index bb11b840..b4936424 100644
--- a/src/components/emoji_reactions/emoji_reactions.js
+++ b/src/components/emoji_reactions/emoji_reactions.js
@@ -1,5 +1,17 @@
import UserAvatar from '../user_avatar/user_avatar.vue'
import UserListPopover from '../user_list_popover/user_list_popover.vue'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faPlus,
+ faMinus,
+ faCheck
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faPlus,
+ faMinus,
+ faCheck
+)
const EMOJI_REACTION_COUNT_CUTOFF = 12
@@ -33,6 +45,9 @@ const EmojiReactions = {
},
loggedIn () {
return !!this.$store.state.users.currentUser
+ },
+ remoteInteractionLink () {
+ return this.$store.getters.remoteInteractionLink({ statusId: this.status.id })
}
},
methods: {
@@ -62,6 +77,17 @@ const EmojiReactions = {
} else {
this.reactWith(emoji)
}
+ },
+ counterTriggerAttrs (reaction) {
+ return {
+ class: [
+ 'btn',
+ 'button-default',
+ 'emoji-reaction-count-button',
+ { '-picked-reaction': this.reactedWith(reaction.name) }
+ ],
+ 'aria-label': this.$tc('status.reaction_count_label', reaction.count, { num: reaction.count })
+ }
}
}
}
diff --git a/src/components/emoji_reactions/emoji_reactions.vue b/src/components/emoji_reactions/emoji_reactions.vue
index eb46018e..92fc58ca 100644
--- a/src/components/emoji_reactions/emoji_reactions.vue
+++ b/src/components/emoji_reactions/emoji_reactions.vue
@@ -1,15 +1,19 @@
<template>
<div class="EmojiReactions">
- <UserListPopover
+ <span
v-for="(reaction) in emojiReactions"
:key="reaction.url || reaction.name"
- :users="accountsForEmoji[reaction.name]"
+ class="emoji-reaction-container btn-group"
>
- <button
+ <component
+ :is="loggedIn ? 'button' : 'a'"
+ v-bind="!loggedIn ? { href: remoteInteractionLink } : {}"
+ role="button"
class="emoji-reaction btn button-default"
- :class="{ '-picked-reaction': reactedWith(reaction.name), 'not-clickable': !loggedIn }"
+ :class="{ '-picked-reaction': reactedWith(reaction.name) }"
+ :title="reaction.url ? reaction.name : undefined"
+ :aria-pressed="reactedWith(reaction.name)"
@click="emojiOnClick(reaction.name, $event)"
- @mouseenter="fetchEmojiReactionsByIfMissing()"
>
<span
class="reaction-emoji"
@@ -17,7 +21,6 @@
<img
v-if="reaction.url"
:src="reaction.url"
- :title="reaction.name"
class="reaction-emoji-content"
width="1em"
>
@@ -26,9 +29,36 @@
class="reaction-emoji reaction-emoji-content"
>{{ reaction.name }}</span>
</span>
- <span>{{ reaction.count }}</span>
- </button>
- </UserListPopover>
+ <FALayers>
+ <FAIcon
+ v-if="reactedWith(reaction.name)"
+ class="active-marker"
+ transform="shrink-6 up-9"
+ icon="check"
+ />
+ <FAIcon
+ v-if="!reactedWith(reaction.name)"
+ class="focus-marker"
+ transform="shrink-6 up-9"
+ icon="plus"
+ />
+ <FAIcon
+ v-else
+ class="focus-marker"
+ transform="shrink-6 up-9"
+ icon="minus"
+ />
+ </FALayers>
+ </component>
+ <UserListPopover
+ :users="accountsForEmoji[reaction.name]"
+ class="emoji-reaction-popover"
+ :trigger-attrs="counterTriggerAttrs(reaction)"
+ @show="fetchEmojiReactionsByIfMissing()"
+ >
+ <span class="emoji-reaction-counts">{{ reaction.count }}</span>
+ </UserListPopover>
+ </span>
<a
v-if="tooManyReactions"
class="emoji-reaction-expand faint"
@@ -43,6 +73,7 @@
<script src="./emoji_reactions.js"></script>
<style lang="scss">
@import "../../variables";
+@import "../../mixins";
.EmojiReactions {
display: flex;
@@ -51,14 +82,44 @@
--emoji-size: calc(1.25em * var(--emojiReactionsScale, 1));
- .emoji-reaction {
- padding: 0 0.5em;
- margin-right: 0.5em;
+ .emoji-reaction-container {
+ display: flex;
+ align-items: stretch;
margin-top: 0.5em;
+ margin-right: 0.5em;
+
+ .emoji-reaction-popover {
+ padding: 0;
+
+ .emoji-reaction-count-button {
+ background-color: var(--btn);
+ height: 100%;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ box-sizing: border-box;
+ min-width: 2em;
+ display: inline-flex;
+ justify-content: center;
+ align-items: center;
+ color: $fallback--text;
+ color: var(--btnText, $fallback--text);
+
+ &.-picked-reaction {
+ border: 1px solid var(--accent, $fallback--link);
+ margin-right: -1px;
+ }
+ }
+ }
+ }
+
+ .emoji-reaction {
+ padding-left: 0.5em;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
.reaction-emoji {
width: var(--emoji-size);
@@ -85,19 +146,45 @@
outline: none;
}
- &.not-clickable {
- cursor: default;
-
- &:hover {
- box-shadow: $fallback--buttonShadow;
- box-shadow: var(--buttonShadow);
- }
+ .svg-inline--fa {
+ color: $fallback--text;
+ color: var(--btnText, $fallback--text);
}
&.-picked-reaction {
border: 1px solid var(--accent, $fallback--link);
margin-left: -1px; // offset the border, can't use inset shadows either
- margin-right: calc(0.5em - 1px);
+ margin-right: -1px;
+
+ .svg-inline--fa {
+ color: $fallback--link;
+ color: var(--accent, $fallback--link);
+ }
+ }
+
+ @include unfocused-style {
+ .focus-marker {
+ visibility: hidden;
+ }
+
+ .active-marker {
+ visibility: visible;
+ }
+ }
+
+ @include focused-style {
+ .svg-inline--fa {
+ color: $fallback--link;
+ color: var(--accent, $fallback--link);
+ }
+
+ .focus-marker {
+ visibility: visible;
+ }
+
+ .active-marker {
+ visibility: hidden;
+ }
}
}
diff --git a/src/components/notification/notification.vue b/src/components/notification/notification.vue
index 13e7f9b8..6b3315f9 100644
--- a/src/components/notification/notification.vue
+++ b/src/components/notification/notification.vue
@@ -125,7 +125,8 @@
v-if="notification.emoji_url"
class="emoji-reaction-emoji emoji-reaction-emoji-image"
:src="notification.emoji_url"
- :name="notification.emoji"
+ :alt="notification.emoji"
+ :title="notification.emoji"
>
<span
v-else
diff --git a/src/components/react_button/react_button.js b/src/components/react_button/react_button.js
index 8eed4b60..0d252155 100644
--- a/src/components/react_button/react_button.js
+++ b/src/components/react_button/react_button.js
@@ -46,7 +46,7 @@ const ReactButton = {
},
computed: {
hideCustomEmoji () {
- return !this.$store.state.instance.pleromaChatMessagesAvailable
+ return !this.$store.state.instance.pleromaCustomEmojiReactionsAvailable
}
}
}
diff --git a/src/i18n/ar.json b/src/i18n/ar.json
index cd9a410a..7915e779 100644
--- a/src/i18n/ar.json
+++ b/src/i18n/ar.json
@@ -9,7 +9,8 @@
"scope_options": "",
"text_limit": "الحد الأقصى للنص",
"title": "الميّزات",
- "who_to_follow": "للمتابعة"
+ "who_to_follow": "للمتابعة",
+ "upload_limit": "حد الرفع"
},
"finder": {
"error_fetching_user": "خطأ أثناء جلب صفحة المستخدم",
@@ -17,7 +18,35 @@
},
"general": {
"apply": "تطبيق",
- "submit": "إرسال"
+ "submit": "إرسال",
+ "error_retry": "حاول مجددًا",
+ "retry": "حاول مجدداً",
+ "optional": "اختياري",
+ "show_more": "اعرض المزيد",
+ "show_less": "اعرض أقل",
+ "cancel": "ألغ",
+ "disable": "عطّل",
+ "enable": "فعّل",
+ "confirm": "تأكيد",
+ "close": "أغلق",
+ "role": {
+ "admin": "مدير",
+ "moderator": "مشرف"
+ },
+ "generic_error_message": "حدث خطأ: {0}",
+ "never_show_again": "لا تظهره مجددًا",
+ "yes": "نعم",
+ "no": "لا",
+ "unpin": "ألغ تثبيت العنصر",
+ "undo": "تراجع",
+ "more": "المزيد",
+ "loading": "يحمل…",
+ "generic_error": "حدث خطأ",
+ "scope_in_timeline": {
+ "private": "المتابِعون فقط"
+ },
+ "scroll_to_top": "مرر لأعلى",
+ "pin": "ثبت العنصر"
},
"login": {
"login": "تسجيل الدخول",
@@ -25,7 +54,19 @@
"password": "الكلمة السرية",
"placeholder": "مثال lain",
"register": "انشاء حساب",
- "username": "إسم المستخدم"
+ "username": "إسم المستخدم",
+ "logout_confirm_title": "تأكيد الخروج",
+ "logout_confirm": "أتريد الخروج؟",
+ "logout_confirm_accept_button": "خروج",
+ "logout_confirm_cancel_button": "لا تخرج",
+ "hint": "لِج للانضمام للمناقشة",
+ "authentication_code": "رمز الاستيثاق",
+ "enter_recovery_code": "أدخل رمز التأكيد",
+ "enter_two_factor_code": "أدخل رمز الاستيثاق بعاملين",
+ "recovery_code": "رمز الاستعادة",
+ "heading": {
+ "totp": "الاستيثاق بعاملين"
+ }
},
"nav": {
"chat": "الدردشة المحلية",
@@ -33,23 +74,48 @@
"mentions": "الإشارات",
"public_tl": "الخيط الزمني العام",
"timeline": "الخيط الزمني",
- "twkn": "كافة الشبكة المعروفة"
+ "twkn": "كافة الشبكة المعروفة",
+ "search_close": "أغلق شربط البحث",
+ "back": "للخلف",
+ "administration": "الإدارة",
+ "preferences": "التفضيلات",
+ "chats": "المحادثات",
+ "lists": "القوائم",
+ "edit_nav_mobile": "خصص شريط التنقل",
+ "edit_pinned": "حرر العناصر المثبتة",
+ "mobile_notifications_close": "أغلق الاشعارات",
+ "announcements": "إعلانات",
+ "home_timeline": "الخط الزمني الرئيس",
+ "search": "بحث",
+ "who_to_follow": "للمتابعة",
+ "dms": "رسالة شخصية",
+ "edit_finish": "تم التحرير",
+ "timelines": "الخيوط الزمنية",
+ "mobile_notifications": "افتح الإشعارات (تتواجد اشعارات غير مقروءة)"
},
"notifications": {
"broken_favorite": "منشور مجهول، جارٍ البحث عنه…",
"favorited_you": "أعجِب بمنشورك",
"followed_you": "يُتابعك",
"load_older": "تحميل الإشعارات الأقدم",
- "notifications": "الإخطارات",
+ "notifications": "الاشعارات",
"read": "مقروء!",
- "repeated_you": "شارَك منشورك"
+ "repeated_you": "شارَك منشورك",
+ "error": "خطأ أثناء جلب الاشعارات: {0}",
+ "follow_request": "يريد متابعتك",
+ "poll_ended": "انتهى الاستطلاع",
+ "no_more_notifications": "لا مزيد من الإشعارات",
+ "reacted_with": "تفاعل بـ{0}",
+ "submitted_report": "أرسل بلاغًا"
},
"post_status": {
"account_not_locked_warning": "",
"account_not_locked_warning_link": "مقفل",
"attachments_sensitive": "اعتبر المرفقات كلها كمحتوى حساس",
"content_type": {
- "text/plain": "نص صافٍ"
+ "text/plain": "نص صِرف",
+ "text/html": "HTML",
+ "text/markdown": "ماركداون"
},
"content_warning": "الموضوع (اختياري)",
"default": "وصلت للتوّ إلى لوس أنجلس.",
@@ -60,15 +126,47 @@
"private": "",
"public": "علني - يُنشر على الخيوط الزمنية العمومية",
"unlisted": "غير مُدرَج - لا يُنشَر على الخيوط الزمنية العمومية"
- }
+ },
+ "media_description": "وصف الوسائط",
+ "direct_warning_to_all": "سيكون عذا المنشور مرئيًا لكل المستخدمين المذكورين.",
+ "post": "انشر",
+ "preview": "معاينة",
+ "preview_empty": "فارغ",
+ "scope_notice": {
+ "public": "سيكون هذا المنشور مرئيًا للجميع",
+ "private": "سيكون هذا المنشور مرئيا لمتابِعيك فقط"
+ },
+ "direct_warning_to_first_only": "سيكون عذا المنشور مرئيًا للمستخدمين المذكورين في أول الرسالة.",
+ "edit_unsupported_warning": "بليروما لا يدعم تعديل الذكر والاستطلاع.",
+ "empty_status_error": "يتعذر نشر منشور فارغ دون ملفات"
},
"registration": {
"bio": "السيرة الذاتية",
"email": "عنوان البريد الإلكتروني",
- "fullname": "الإسم المعروض",
+ "fullname": "الاسم العلني",
"password_confirm": "تأكيد الكلمة السرية",
"registration": "التسجيل",
- "token": "رمز الدعوة"
+ "token": "رمز الدعوة",
+ "bio_optional": "سيرة (اختيارية)",
+ "email_optional": "بيرد إلكتروني (اختياري)",
+ "username_placeholder": "مثل lain",
+ "reason": "سبب التسجيل",
+ "register": "سجل",
+ "validations": {
+ "username_required": "لايمكن تركه فارغًا",
+ "email_required": "لايمكن تركه فارغًا",
+ "password_required": "لايمكن تركه فارغًا",
+ "password_confirmation_required": "لايمكن تركه فارغًا",
+ "fullname_required": "لايمكن تركه فارغًا",
+ "password_confirmation_match": "يلزم أن يطابق كلمة السر",
+ "birthday_required": "لايمكن تركه فارغًا",
+ "birthday_min_age": "يلزم أن يكون في {date} أو قبله"
+ },
+ "fullname_placeholder": "مثل Lain Iwakura",
+ "reason_placeholder": "قبول التسجيل في هذا المثيل يستلزم موافقة المدير\nلهذا يجب عليك إعلامه بسبب التسجيل.",
+ "birthday_optional": "تاريخ الميلاد (اختياري):",
+ "email_language": "بأي لغة تريد استلام رسائل البريد الإلكتروني؟",
+ "birthday": "تاريخ الميلاد:"
},
"settings": {
"attachmentRadius": "المُرفَقات",
@@ -83,9 +181,9 @@
"cGreen": "أخضر (إعادة النشر)",
"cOrange": "برتقالي (مفضلة)",
"cRed": "أحمر (إلغاء)",
- "change_password": "تغيير كلمة السر",
- "change_password_error": "وقع هناك خلل أثناء تعديل كلمتك السرية.",
- "changed_password": "تم تغيير كلمة المرور بنجاح!",
+ "change_password": "غيّر كلمة السر",
+ "change_password_error": "حدث خلل أثناء تعديل كلمتك السرية.",
+ "changed_password": "نجح تغيير كلمة السر!",
"collapse_subject": "",
"confirm_new_password": "تأكيد كلمة السر الجديدة",
"current_avatar": "صورتك الرمزية الحالية",
@@ -94,11 +192,11 @@
"data_import_export_tab": "تصدير واستيراد البيانات",
"default_vis": "أسلوب العرض الافتراضي",
"delete_account": "حذف الحساب",
- "delete_account_description": "حذف حسابك و كافة منشوراتك نهائيًا.",
- "delete_account_error": "",
+ "delete_account_description": "حذف حسابك و كافة بياناتك نهائيًا.",
+ "delete_account_error": "حدثة مشكلة اثناء حذف حسابك، إذا استمرت تواصل مع مدير المثيل.",
"delete_account_instructions": "يُرجى إدخال كلمتك السرية أدناه لتأكيد عملية حذف الحساب.",
"export_theme": "حفظ النموذج",
- "filtering": "التصفية",
+ "filtering": "الترشيح",
"filtering_explanation": "سيتم إخفاء كافة المنشورات التي تحتوي على هذه الكلمات، كلمة واحدة في كل سطر",
"follow_export": "تصدير الاشتراكات",
"follow_export_button": "تصدير الاشتراكات كملف csv",
@@ -108,10 +206,10 @@
"follows_imported": "",
"foreground": "الأمامية",
"general": "الإعدادات العامة",
- "hide_attachments_in_convo": "إخفاء المرفقات على المحادثات",
- "hide_attachments_in_tl": "إخفاء المرفقات على الخيط الزمني",
- "hide_post_stats": "",
- "hide_user_stats": "",
+ "hide_attachments_in_convo": "اخف المرفقات من المحادثات",
+ "hide_attachments_in_tl": "اخف المرفقات من الخيط الزمني",
+ "hide_post_stats": "اخف احصائيات المنشور (مثل عدد التفضيلات)",
+ "hide_user_stats": "اخف احصائيات المستخدم (مثل عدد المتابِعين)",
"import_followers_from_a_csv_file": "",
"import_theme": "تحميل نموذج",
"inputRadius": "",
@@ -166,7 +264,92 @@
"values": {
"false": "لا",
"true": "نعم"
- }
+ },
+ "emoji_reactions_scale": "معامل تحجيم التفاعلات",
+ "app_name": "اسم تطبيق",
+ "security": "الأمن",
+ "enter_current_password_to_confirm": "أدخل كلمة السر الحالية لتيقن من هويتك",
+ "mfa": {
+ "title": "الاستيثاق بعاملين",
+ "generate_new_recovery_codes": "ولّد رموز استعادة جديدة",
+ "warning_of_generate_new_codes": "عند توليد رموز استعادة جديدة ستزال القديمة.",
+ "recovery_codes": "رموز الاستعادة.",
+ "recovery_codes_warning": "خزن هذه الرموز في مكان آمن. إذا فقدت هذه الرموز وتعذر عليك الوصول إلى تطبيق الاستيثاق بعاملين، لن تتمكن من الوصول لحسابك.",
+ "authentication_methods": "طرق الاستيثاق",
+ "scan": {
+ "title": "مسح",
+ "desc": "امسح رمز الاستجابة السريعة QR من تطبيق الاستيثاق أو أدخل المفتاح:",
+ "secret_code": "مفتاح"
+ },
+ "verify": {
+ "desc": "لتفعيل الاستيثاق بعاملين أدخل الرمز من تطبيق الاستيثاق:"
+ }
+ },
+ "block_import": "استيراد المحجوبين",
+ "import_mutes_from_a_csv_file": "استورد قائمة المكتومين من ملف csv",
+ "account_backup": "نسخ احتياطي للحساب",
+ "download_backup": "نزّل",
+ "account_backup_table_head": "نسخ احتياطي",
+ "backup_not_ready": "هذا النسخ الاحتياطي ليس جاهزًا.",
+ "backup_failed": "فشل النسخ الاحتياطي.",
+ "remove_backup": "أزل",
+ "list_backups_error": "خطأ أثناء حلب قائمة النُسخ الاحتياطية: {error}",
+ "added_backup": "أُضيفت نسخة احتياطية جديدة.",
+ "blocks_tab": "المحجوبون",
+ "confirm_dialogs_block": "حجب مستخدم",
+ "confirm_dialogs_mute": "كتم مستخدم",
+ "confirm_dialogs_delete": "حذف حالة",
+ "confirm_dialogs_logout": "خروج",
+ "confirm_dialogs_approve_follow": "قبول متابِع",
+ "confirm_dialogs_deny_follow": "رفض متابِع",
+ "list_aliases_error": "خطأ أثناء جلب الكنيات: {error}",
+ "hide_list_aliases_error_action": "أغلق",
+ "remove_alias": "أزل هذه الكنية",
+ "add_alias_error": "حدث خطأ أثناء إضافة الكنية: {error}",
+ "confirm_dialogs": "أطلب تأكيدًا عند",
+ "confirm_dialogs_repeat": "مشاركة حالة",
+ "mutes_and_blocks": "المكتومون والمحجوبون",
+ "move_account_target": "الحساب المستهدف (مثل {example})",
+ "wordfilter": "ترشيح الكلمات",
+ "always_show_post_button": "أظهر الزر العائم لإنشاء منشور جديد دائمًا",
+ "hide_wallpaper": "اخف خلفية المثيل",
+ "save": "احفظ التعديلات",
+ "lists_navigation": "أظهر القوائم في شريط التنقل",
+ "mute_export_button": "صدّر قائمة المكتومين إلى ملف csv",
+ "blocks_imported": "اُستورد المحجوبون! معالجة القائمة ستستغرق وقتًا.",
+ "mute_export": "تصدير المكتومين",
+ "mute_import": "استيراد المكتومين",
+ "mute_import_error": "خطأ أثناء استيراد المكتومين",
+ "change_email_error": "حدثت خلل أثناء تغيير بريدك الإلكتروني.",
+ "change_email": "غيّر البريد الإلكتروني",
+ "changed_email": "نجح تغيير البريد الإلكتروني!",
+ "account_alias_table_head": "الكنية",
+ "account_alias": "كنيات الحساب",
+ "move_account": "أنقل الحساب",
+ "moved_account": "نُقل الحساب.",
+ "hide_media_previews": "اخف معاينات الوسائط",
+ "hide_muted_posts": "اخف منشورات المستخدمين المكتومين",
+ "confirm_dialogs_unfollow": "الغاء متابعة مستخدم",
+ "confirm_dialogs_remove_follower": "إزالة متابع",
+ "new_alias_target": "أضف كنية جديدة (مثل {example})",
+ "added_alias": "أُضيفت الكنية.",
+ "move_account_error": "خطأ أثناء نقل الحساب: {error}",
+ "emoji_reactions_on_timeline": "أظهر التفاعلات في الخط الزمني",
+ "mutes_imported": "اُستورد المكتومون! معالجة القئمة ستستغرق وقتًا.",
+ "remove_language": "أزل",
+ "primary_language": "اللغة الرئيسية:",
+ "expert_mode": "أظهر الإعدادات المتقدمة",
+ "block_import_error": "خطأ أثناء استيراد قائمة المحجوبين",
+ "add_backup": "أنشئ نسخة احتياطية جديدة",
+ "add_backup_error": "خطأ أثناء إضافة نسخ احتياطي جديد: {error}",
+ "move_account_notes": "إذا أردت نقل حسابك عليك إضافة كنية تشير إلى هنا في الحساب المستهدف.",
+ "avatar_size_instruction": "أدنى حجم مستحسن للصورة الرمزية هو 150x150 بيكسل.",
+ "word_filter_and_more": "مرشح الكلمات والمزيد...",
+ "hide_all_muted_posts": "اخف المنشورات المكتومة",
+ "max_thumbnails": "أقصى عدد للصور المصغرة لكل منشور (فارغ = غير محدود)",
+ "block_export_button": "صدّر قائمة المحجوبين إلى ملف csv",
+ "block_export": "تصدير المحجوبين",
+ "use_one_click_nsfw": "افتح المرفقات ذات المحتوى الحساس NSFW بنقرة واحدة"
},
"timeline": {
"collapse": "",
@@ -211,11 +394,109 @@
"keyword_policies": "سياسة الكلمات الدلالية"
},
"simple": {
- "simple_policies": "سياسات الخادم"
+ "simple_policies": "سياسات الخادم",
+ "instance": "مثيل",
+ "reason": "السبب",
+ "accept": "قبول",
+ "reject": "رفض"
},
"federation": "الاتحاد",
"mrf_policies": "تفعيل سياسات إعادة كتابة المنشور",
"mrf_policies_desc": "خاصية إعادة كتابة المناشير تقوم بتعديل تفاعل الاتحاد مع هذا الخادم. السياسات التالية مفعّلة:"
}
+ },
+ "announcements": {
+ "page_header": "إعلانات",
+ "title": "إعلان",
+ "mark_as_read_action": "علّمه كمقروء",
+ "post_form_header": "انشر إعلانًا",
+ "post_placeholder": "اكتب محتوى الاعلان هنا...",
+ "post_action": "انشر",
+ "post_error": "خطأ: {error}",
+ "close_error": "أغلاق",
+ "delete_action": "احذف",
+ "start_time_prompt": "وقت البدأ: ",
+ "end_time_prompt": "وقت النهاية: ",
+ "all_day_prompt": "هذا حدث يوم كامل",
+ "start_time_display": "يبدأ في {time}",
+ "end_time_display": "ينتهي في {time}",
+ "edit_action": "حرر",
+ "submit_edit_action": "أرسل",
+ "cancel_edit_action": "ألغِ",
+ "inactive_message": "هذا الاعلان غير نشط",
+ "published_time_display": "نُشر في {time}"
+ },
+ "polls": {
+ "votes": "أصوات",
+ "vote": "صوّت",
+ "type": "نوع الاستطلاع",
+ "single_choice": "خيار واحد",
+ "multiple_choices": "متعدد الخيارات",
+ "expiry": "عمر الاستطلاع",
+ "expires_in": "ينتهي الاستطلاع في {0}",
+ "expired": "انتهى الاستطلاع منذ {0}",
+ "add_poll": "أضف استطلاعًا",
+ "add_option": "أضف خيارًا",
+ "option": "خيار"
+ },
+ "emoji": {
+ "stickers": "ملصقات",
+ "emoji": "إيموجي",
+ "search_emoji": "ابحث عن إيموجي",
+ "unicode_groups": {
+ "animals-and-nature": "حيوانات وطبيعة",
+ "food-and-drink": "أطعمة ومشروبات",
+ "symbols": "رموز",
+ "activities": "نشاطات",
+ "flags": "أعلام"
+ },
+ "add_emoji": "أدخل إيموجي",
+ "custom": "إيموجي مخصص"
+ },
+ "interactions": {
+ "emoji_reactions": "تفاعلات بالإيموجي",
+ "reports": "البلاغات",
+ "follows": "المتابعات الجديدة"
+ },
+ "report": {
+ "state_closed": "مغلق",
+ "state_resolved": "عولج",
+ "reported_statuses": "الحالة المبلغة عنها:",
+ "state_open": "مفتوح",
+ "notes": "ملاحظة:",
+ "state": "الحالة:",
+ "reporter": "المبلِّغ:",
+ "reported_user": "المُبلغ عنه:"
+ },
+ "selectable_list": {
+ "select_all": "اختر الكل"
+ },
+ "image_cropper": {
+ "save": "احفظ",
+ "cancel": "ألغ"
+ },
+ "importer": {
+ "submit": "أرسل",
+ "success": "نجح الاستيراد.",
+ "error": "حدث خطأ أثناء الاستيراد."
+ },
+ "domain_mute_card": {
+ "mute": "اكتم",
+ "mute_progress": "يكتم…",
+ "unmute": "ارفع الكتم",
+ "unmute_progress": "يرفع الكتم…"
+ },
+ "exporter": {
+ "export": "صدر",
+ "processing": "يُعالج. سيُطلب منك تنزيل الملف قريباً"
+ },
+ "media_modal": {
+ "previous": "السابق",
+ "next": "التالي",
+ "hide": "أغلق عارض الوسائط"
+ },
+ "remote_user_resolver": {
+ "searching_for": "يبحث عن",
+ "error": "لم يُعثر عليه."
}
}
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 33f48225..a7ab451f 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -1027,7 +1027,8 @@
"show_all_conversation_with_icon": "{icon} {text}",
"show_all_conversation": "Show full conversation ({numStatus} other status) | Show full conversation ({numStatus} other statuses)",
"show_only_conversation_under_this": "Only show replies to this status",
- "status_history": "Status history"
+ "status_history": "Status history",
+ "reaction_count_label": "{num} person reacted | {num} people reacted"
},
"user_card": {
"approve": "Approve",
diff --git a/src/i18n/eo.json b/src/i18n/eo.json
index e013edee..249a0aab 100644
--- a/src/i18n/eo.json
+++ b/src/i18n/eo.json
@@ -55,8 +55,8 @@
"undo": "Malfari",
"yes": "Jes",
"no": "Ne",
- "unpin": "Malfiksi eron",
- "pin": "Fiksi eron",
+ "unpin": "Malfiksi",
+ "pin": "Fiksi",
"scroll_to_top": "Rulumi supren"
},
"image_cropper": {
@@ -81,7 +81,11 @@
"recovery_code": "Rehava kodo",
"enter_two_factor_code": "Enigu kodon de duobla aŭtentikigo",
"enter_recovery_code": "Enigu rehavan kodon",
- "authentication_code": "Aŭtentikiga kodo"
+ "authentication_code": "Aŭtentikiga kodo",
+ "logout_confirm_title": "Konfirmo de adiaŭo",
+ "logout_confirm": "Ĉu vi certe volas adiaŭi?",
+ "logout_confirm_accept_button": "Adiaŭi",
+ "logout_confirm_cancel_button": "Ne adiaŭi"
},
"media_modal": {
"previous": "Antaŭa",
@@ -90,7 +94,7 @@
"hide": "Fermi vidilon de vidaŭdaĵoj"
},
"nav": {
- "about": "Pri",
+ "about": "Prio",
"back": "Reen",
"chat": "Loka babilejo",
"friend_requests": "Petoj pri abono",
@@ -115,7 +119,9 @@
"edit_finish": "Fini redakton",
"mobile_notifications": "Malfermi sciigojn (estas nelegitaj)",
"mobile_notifications_close": "Fermi sciigojn",
- "announcements": "Anoncoj"
+ "announcements": "Anoncoj",
+ "search_close": "Fermi serĉujon",
+ "mobile_sidebar": "(Mal)ŝalti flankan breton por telefonoj"
},
"notifications": {
"broken_favorite": "Nekonata afiŝo, serĉante ĝin…",
@@ -169,7 +175,9 @@
"post": "Afiŝo",
"edit_remote_warning": "Aliaj foraj nodoj eble ne subtenas redaktadon, kaj ne povos ricevi pli novan version de via afiŝo.",
"edit_unsupported_warning": "Pleroma ne subtenas redaktadon de mencioj aŭ enketoj.",
- "edit_status": "Redakti afiŝon"
+ "edit_status": "Redakti afiŝon",
+ "content_type_selection": "Formo de afiŝo",
+ "scope_notice_dismiss": "Fermi ĉi tiun avizon"
},
"registration": {
"bio": "Priskribo",
@@ -189,14 +197,18 @@
"email_required": "ne povas resti malplena",
"password_required": "ne povas resti malplena",
"password_confirmation_required": "ne povas resti malplena",
- "password_confirmation_match": "samu la pasvorton"
+ "password_confirmation_match": "samu la pasvorton",
+ "birthday_min_age": "ne povas esti post {date}",
+ "birthday_required": "ne povas resti malplena"
},
"reason_placeholder": "Ĉi-node oni aprobas registriĝojn permane.\nSciigu la administrantojn kial vi volas registriĝi.",
"reason": "Kialo registriĝi",
"register": "Registriĝi",
"bio_optional": "Prio (malnepra)",
"email_optional": "Retpoŝtadreso (malnepra)",
- "email_language": "En kiu lingvo vi volus ricevi retleterojn de la servilo?"
+ "email_language": "En kiu lingvo vi volus ricevi retleterojn de la servilo?",
+ "birthday": "Naskiĝtago:",
+ "birthday_optional": "Naskiĝtago (malnepra):"
},
"settings": {
"app_name": "Nomo de aplikaĵo",
@@ -666,7 +678,28 @@
"user_popover_avatar_overlay": "Aperigi ŝprucaĵon pri uzanto sur profilbildo",
"show_yous": "Montri la markon «(Vi)»",
"user_popover_avatar_action_zoom": "Zomi la profilbildon",
- "third_column_mode": "Kun sufiĉo da spaco, montri trian kolumnon kun"
+ "third_column_mode": "Kun sufiĉo da spaco, montri trian kolumnon kun",
+ "birthday": {
+ "show_birthday": "Montri mian naskiĝtagon",
+ "label": "Naskiĝtago"
+ },
+ "confirm_dialogs_delete": "forigo de afiŝo",
+ "backup_running": "Ĉi tiu savkopiado progresas, traktis {number} datumon. | Ĉi tiu savkopiado progresas, traktis {number} datumojn.",
+ "backup_failed": "Ĉi tiu savkopiado malsukcesis.",
+ "autocomplete_select_first": "Memage elekti unuan kandidaton kiam rezultoj de memaga konjektado disponeblas",
+ "confirm_dialogs_logout": "adiaŭo",
+ "user_popover_avatar_action": "Post klako sur profilbildon en ŝprucaĵo",
+ "remove_language": "Forigi",
+ "primary_language": "Ĉefa lingvo:",
+ "confirm_dialogs": "Peti konfirmon je",
+ "confirm_dialogs_repeat": "ripeto de afiŝo",
+ "confirm_dialogs_unfollow": "malabono de uzanto",
+ "confirm_dialogs_block": "blokado de uzanto",
+ "confirm_dialogs_mute": "silentigo de uzanto",
+ "confirm_dialogs_approve_follow": "aprobo de abonanto",
+ "confirm_dialogs_deny_follow": "malaprobo de abonanto",
+ "confirm_dialogs_remove_follower": "forigo de abonanto",
+ "tree_fade_ancestors": "Montri responditojn de la nuna afiŝo per teksto malvigla"
},
"timeline": {
"collapse": "Maletendi",
@@ -753,7 +786,33 @@
"note_blank": "(Neniu)",
"edit_note_apply": "Apliki",
"edit_note_cancel": "Nuligi",
- "edit_note": "Redakti noton"
+ "edit_note": "Redakti noton",
+ "block_confirm": "Ĉu vi certe volas bloki uzanton {user}?",
+ "block_confirm_accept_button": "Bloki",
+ "remove_follower_confirm": "Ĉu vi certe volas forigi uzanton {user} de viaj abonantoj?",
+ "approve_confirm_accept_button": "Aprobi",
+ "approve_confirm_cancel_button": "Ne aprobi",
+ "approve_confirm": "Ĉu vi certe volas aprobi abonan peton de {user}?",
+ "block_confirm_title": "Konfirmo de blokado",
+ "approve_confirm_title": "Konfirmo de aprobo",
+ "block_confirm_cancel_button": "Ne bloki",
+ "deny_confirm_accept_button": "Malaprobi",
+ "deny_confirm_cancel_button": "Ne malaprobi",
+ "mute_confirm_title": "Silentigi konfirmon",
+ "deny_confirm_title": "Konfirmo de malaprobo",
+ "mute_confirm": "Ĉu vi certe volas silentigi uzanton {user}?",
+ "mute_confirm_accept_button": "Silentigi",
+ "mute_confirm_cancel_button": "Ne silentigi",
+ "mute_duration_prompt": "Silentigi ĉi tiun uzanton por (0 signifas senliman silentigon):",
+ "remove_follower_confirm_accept_button": "Forigi",
+ "remove_follower_confirm_title": "Konfirmo de forigo de abonanto",
+ "birthday": "Naskita je {birthday}",
+ "deny_confirm": "Ĉu vi certe volas malaprobi abonan peton de {user}?",
+ "unfollow_confirm_cancel_button": "Ne malaboni",
+ "unfollow_confirm_title": "Konfirmo de malabono",
+ "unfollow_confirm": "Ĉu vi certe volas malaboni uzanton {user}?",
+ "unfollow_confirm_accept_button": "Malaboni",
+ "remove_follower_confirm_cancel_button": "Ne forigi"
},
"user_profile": {
"timeline_title": "Historio de uzanto",
@@ -775,7 +834,8 @@
"accept_follow_request": "Akcepti abonpeton",
"add_reaction": "Aldoni reagon",
"toggle_expand": "Etendi aŭ maletendi sciigon por montri plenan afiŝon",
- "toggle_mute": "Etendi aŭ maletendi afiŝon por montri silentigitan enhavon"
+ "toggle_mute": "Etendi aŭ maletendi afiŝon por montri silentigitan enhavon",
+ "autocomplete_available": "{number} rezulto disponeblas. Uzu la sagajn klavojn supren kaj suben por foliumi ilin. | {number} rezulto disponeblas. Uzu la sagajn klavojn supren kaj suben por foliumi ilin."
},
"upload": {
"error": {
@@ -951,7 +1011,14 @@
"show_all_conversation_with_icon": "{icon} {text}",
"show_only_conversation_under_this": "Montri nur respondojn al ĉi tiu afiŝo",
"status_history": "Historio de afiŝo",
- "open_gallery": "Malfermi galerion"
+ "open_gallery": "Malfermi galerion",
+ "delete_confirm_title": "Konfirmo de forigo",
+ "delete_confirm_accept_button": "Forigi",
+ "repeat_confirm": "Ĉu vi certe volas ripeti ĉi tiun afiŝon?",
+ "repeat_confirm_title": "Konfirmo de ripeto",
+ "repeat_confirm_accept_button": "Ripeti",
+ "repeat_confirm_cancel_button": "Ne ripeti",
+ "delete_confirm_cancel_button": "Ne forigi"
},
"time": {
"years_short": "{0}j",
@@ -1119,6 +1186,7 @@
"edit_action": "Redakti",
"submit_edit_action": "Afiŝi",
"cancel_edit_action": "Nuligi",
- "inactive_message": "Ĉi tiu anonco estas neaktiva"
+ "inactive_message": "Ĉi tiu anonco estas neaktiva",
+ "post_form_header": "Afiŝi anoncon"
}
}
diff --git a/src/i18n/ko.json b/src/i18n/ko.json
index 657bb079..1e7e58c3 100644
--- a/src/i18n/ko.json
+++ b/src/i18n/ko.json
@@ -75,7 +75,11 @@
"enter_two_factor_code": "2단계인증 코드를 입력하십시오",
"enter_recovery_code": "복구 코드를 입력하십시오",
"authentication_code": "인증 코드",
- "hint": "로그인해서 대화에 참여"
+ "hint": "로그인해서 대화에 참여",
+ "logout_confirm_title": "로그아웃 확인",
+ "logout_confirm": "정말 로그아웃 하시겠습니까?",
+ "logout_confirm_accept_button": "로그아웃",
+ "logout_confirm_cancel_button": "로그아웃 안 함"
},
"nav": {
"about": "인스턴스 소개",
@@ -104,7 +108,8 @@
"edit_finish": "편집 종료",
"mobile_notifications_close": "알림 닫기",
"mobile_sidebar": "모바일 사이드바 토글",
- "announcements": "공지사항"
+ "announcements": "공지사항",
+ "search_close": "검색 바 닫기"
},
"notifications": {
"broken_favorite": "알 수 없는 게시물입니다, 검색합니다…",
@@ -158,7 +163,9 @@
"edit_status": "수정",
"edit_remote_warning": "수정 기능이 없는 다른 인스턴스에서는 수정한 사항이 반영되지 않을 수 있습니다.",
"post": "게시",
- "direct_warning_to_first_only": "맨 앞에 멘션한 사용자들에게만 보여집니다."
+ "direct_warning_to_first_only": "맨 앞에 멘션한 사용자들에게만 보여집니다.",
+ "content_type_selection": "게시물 형태",
+ "scope_notice_dismiss": "알림 닫기"
},
"registration": {
"bio": "소개",
@@ -175,7 +182,9 @@
"email_required": "공백으로 둘 수 없습니다",
"password_required": "공백으로 둘 수 없습니다",
"password_confirmation_required": "공백으로 둘 수 없습니다",
- "password_confirmation_match": "패스워드와 일치해야 합니다"
+ "password_confirmation_match": "패스워드와 일치해야 합니다",
+ "birthday_required": "공백으로 둘 수 없습니다",
+ "birthday_min_age": "{date} 또는 그 이전 출생만 가능합니다"
},
"fullname_placeholder": "예: 김례인",
"username_placeholder": "예: lain",
@@ -185,7 +194,9 @@
"reason": "가입하려는 이유",
"reason_placeholder": "이 인스턴스는 수동으로 가입을 승인하고 있습니다.\n왜 가입하고 싶은지 관리자에게 알려주세요.",
"register": "가입",
- "email_language": "무슨 언어로 이메일을 받길 원하시나요?"
+ "email_language": "무슨 언어로 이메일을 받길 원하시나요?",
+ "birthday": "생일:",
+ "birthday_optional": "생일 (선택):"
},
"settings": {
"attachmentRadius": "첨부물",
@@ -383,7 +394,8 @@
"highlight": "강조 요소",
"pressed": "눌렸을 때",
"toggled": "토글됨",
- "tabs": "탭"
+ "tabs": "탭",
+ "underlay": "밑배경"
},
"radii": {
"_tab_label": "둥글기"
@@ -652,7 +664,29 @@
"post_status_content_type": "게시물 내용 형식",
"list_aliases_error": "별칭을 가져오는 중 에러 발생: {error}",
"add_alias_error": "별칭을 추가하는 중 에러 발생: {error}",
- "mention_link_show_avatar_quick": "멘션 옆에 유저 프로필 사진을 보임"
+ "mention_link_show_avatar_quick": "멘션 옆에 유저 프로필 사진을 보임",
+ "backup_running": "백업 중입니다, {number}개 처리 완료. | 백업 중입니다, {number}개 처리 완료.",
+ "confirm_dialogs": "하기 전에 다시 물어보기",
+ "autocomplete_select_first": "자동완성이 가능하면 자동으로 첫 번째 후보를 선택",
+ "backup_failed": "백업에 실패했습니다.",
+ "emoji_reactions_scale": "리액션 크기",
+ "birthday": {
+ "label": "생일",
+ "show_birthday": "내 생일 보여주기"
+ },
+ "add_language": "보조 언어 추가",
+ "confirm_dialogs_repeat": "리핏",
+ "confirm_dialogs_unfollow": "언팔로우",
+ "confirm_dialogs_block": "차단",
+ "confirm_dialogs_mute": "뮤트",
+ "confirm_dialogs_delete": "게시물 삭제",
+ "confirm_dialogs_approve_follow": "팔로워 승인",
+ "confirm_dialogs_deny_follow": "팔로워 거절",
+ "confirm_dialogs_remove_follower": "팔로워 제거",
+ "remove_language": "삭제",
+ "primary_language": "주 언어:",
+ "fallback_language": "보조 언어 {index}:",
+ "confirm_dialogs_logout": "로그아웃"
},
"timeline": {
"collapse": "접기",
@@ -735,7 +769,12 @@
"striped": "줄무늬 배경",
"solid": "단색 배경",
"side": "옆트임"
- }
+ },
+ "approve_confirm_title": "승인 확인",
+ "approve_confirm_accept_button": "승인",
+ "approve_confirm_cancel_button": "승인 안 함",
+ "approve_confirm": "{user}의 팔로우 요청을 승인할까요?",
+ "block_confirm_title": "차단 확인"
},
"user_profile": {
"timeline_title": "사용자 타임라인",
@@ -1069,7 +1108,14 @@
"ancestor_follow_with_icon": "{icon} {text}",
"show_all_conversation_with_icon": "{icon} {text}",
"ancestor_follow": "이 게시물 아래 {numReplies}개 답글 더 보기 | 이 게시물 아래 {numReplies}개 답글 더 보기",
- "show_only_conversation_under_this": "이 게시물의 답글만 보기"
+ "show_only_conversation_under_this": "이 게시물의 답글만 보기",
+ "repeat_confirm": "리핏할까요?",
+ "repeat_confirm_title": "리핏 확인",
+ "repeat_confirm_accept_button": "리핏",
+ "repeat_confirm_cancel_button": "리핏 안 함",
+ "delete_confirm_title": "삭제 확인",
+ "delete_confirm_accept_button": "삭제",
+ "delete_confirm_cancel_button": "냅두기"
},
"errors": {
"storage_unavailable": "Pleroma가 브라우저 저장소에 접근할 수 없습니다. 로그인이 풀리거나 로컬 설정이 초기화 되는 등 예상치 못한 문제를 겪을 수 있습니다. 쿠키를 활성화 해보세요."
diff --git a/src/main.js b/src/main.js
index 71f19a82..0b7c7674 100644
--- a/src/main.js
+++ b/src/main.js
@@ -45,7 +45,7 @@ const i18n = createI18n({
messages: messages.default
})
-messages.setLanguage(i18n, currentLocale)
+messages.setLanguage(i18n.global, currentLocale)
const persistedStateOptions = {
paths: [