about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/javascript/flavours/glitch/actions/alerts.js3
-rw-r--r--app/javascript/flavours/glitch/styles/components/columns.scss4
-rw-r--r--app/javascript/mastodon/actions/alerts.js3
-rw-r--r--app/javascript/mastodon/locales/de.json24
-rw-r--r--app/javascript/mastodon/locales/fa.json20
-rw-r--r--app/javascript/mastodon/locales/whitelist_de.json7
-rw-r--r--app/javascript/mastodon/locales/zh-CN.json239
-rw-r--r--app/javascript/styles/mastodon/components.scss4
-rw-r--r--config/locales/activerecord.zh-CN.yml4
-rw-r--r--config/locales/de.yml10
-rw-r--r--config/locales/devise.zh-CN.yml11
-rw-r--r--config/locales/doorkeeper.zh-CN.yml24
-rw-r--r--config/locales/fa.yml105
-rw-r--r--config/locales/ko.yml2
-rw-r--r--config/locales/simple_form.de.yml7
-rw-r--r--config/locales/simple_form.zh-CN.yml62
-rw-r--r--crowdin.yml3
17 files changed, 380 insertions, 152 deletions
diff --git a/app/javascript/flavours/glitch/actions/alerts.js b/app/javascript/flavours/glitch/actions/alerts.js
index b2c7ab76a..ef2500e7b 100644
--- a/app/javascript/flavours/glitch/actions/alerts.js
+++ b/app/javascript/flavours/glitch/actions/alerts.js
@@ -8,6 +8,7 @@ const messages = defineMessages({
 export const ALERT_SHOW    = 'ALERT_SHOW';
 export const ALERT_DISMISS = 'ALERT_DISMISS';
 export const ALERT_CLEAR   = 'ALERT_CLEAR';
+export const ALERT_NOOP    = 'ALERT_NOOP';
 
 export function dismissAlert(alert) {
   return {
@@ -36,7 +37,7 @@ export function showAlertForError(error) {
 
     if (status === 404 || status === 410) {
       // Skip these errors as they are reflected in the UI
-      return {};
+      return { type: ALERT_NOOP };
     }
 
     let message = statusText;
diff --git a/app/javascript/flavours/glitch/styles/components/columns.scss b/app/javascript/flavours/glitch/styles/components/columns.scss
index 7a8accc27..0bf01ed8d 100644
--- a/app/javascript/flavours/glitch/styles/components/columns.scss
+++ b/app/javascript/flavours/glitch/styles/components/columns.scss
@@ -294,6 +294,10 @@
   margin-left: 0;
 }
 
+.column-header__links {
+  margin-bottom: 14px;
+}
+
 .column-header__links .text-btn {
   margin-right: 10px;
 }
diff --git a/app/javascript/mastodon/actions/alerts.js b/app/javascript/mastodon/actions/alerts.js
index b2c7ab76a..ef2500e7b 100644
--- a/app/javascript/mastodon/actions/alerts.js
+++ b/app/javascript/mastodon/actions/alerts.js
@@ -8,6 +8,7 @@ const messages = defineMessages({
 export const ALERT_SHOW    = 'ALERT_SHOW';
 export const ALERT_DISMISS = 'ALERT_DISMISS';
 export const ALERT_CLEAR   = 'ALERT_CLEAR';
+export const ALERT_NOOP    = 'ALERT_NOOP';
 
 export function dismissAlert(alert) {
   return {
@@ -36,7 +37,7 @@ export function showAlertForError(error) {
 
     if (status === 404 || status === 410) {
       // Skip these errors as they are reflected in the UI
-      return {};
+      return { type: ALERT_NOOP };
     }
 
     let message = statusText;
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index ff1a1eebc..b658641b8 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -77,19 +77,19 @@
   "compose_form.poll.remove_option": "Auswahl entfernen",
   "compose_form.publish": "Tröt",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "Mark media as sensitive",
+  "compose_form.sensitive.hide": "Medien als heikel markieren",
   "compose_form.sensitive.marked": "Medien sind als heikel markiert",
   "compose_form.sensitive.unmarked": "Medien sind nicht als heikel markiert",
   "compose_form.spoiler.marked": "Text ist hinter einer Warnung versteckt",
   "compose_form.spoiler.unmarked": "Text ist nicht versteckt",
   "compose_form.spoiler_placeholder": "Inhaltswarnung",
   "confirmation_modal.cancel": "Abbrechen",
-  "confirmations.block.block_and_report": "Block & Report",
+  "confirmations.block.block_and_report": "Blockieren und melden",
   "confirmations.block.confirm": "Blockieren",
   "confirmations.block.message": "Bist du dir sicher, dass du {name} blockieren möchtest?",
   "confirmations.delete.confirm": "Löschen",
   "confirmations.delete.message": "Bist du dir sicher, dass du diesen Beitrag löschen möchtest?",
-  "confirmations.delete_list.confirm": "Delete",
+  "confirmations.delete_list.confirm": "Löschen",
   "confirmations.delete_list.message": "Bist du dir sicher, dass du diese Liste permanent löschen möchtest?",
   "confirmations.domain_block.confirm": "Die ganze Domain verbergen",
   "confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} blockieren willst? In den meisten Fällen reichen ein paar gezielte Blockierungen oder Stummschaltungen aus. Du wirst den Inhalt von dieser Domain nicht in irgendwelchen öffentlichen Timelines oder den Benachrichtigungen finden. Deine Follower von dieser Domain werden entfernt.",
@@ -162,7 +162,7 @@
   "introduction.federation.action": "Weiter",
   "introduction.federation.federated.headline": "Föderiert",
   "introduction.federation.federated.text": "Öffentliche Beiträge von anderen Servern im Fediverse erscheinen in der föderierten Zeitleiste.",
-  "introduction.federation.home.headline": "Home",
+  "introduction.federation.home.headline": "Startseite",
   "introduction.federation.home.text": "Beiträge von Leuten, denen du folgst, erscheinen in deiner Start-Zeitleiste. Du kannst Menschen auf beliebigen Servern folgen!",
   "introduction.federation.local.headline": "Lokal",
   "introduction.federation.local.text": "Öffentliche Beiträge von Leuten auf demselben Server wie du erscheinen in der lokalen Zeitleiste.",
@@ -204,17 +204,17 @@
   "keyboard_shortcuts.search": "Suche fokussieren",
   "keyboard_shortcuts.start": "\"Erste Schritte-Spalte öffnen",
   "keyboard_shortcuts.toggle_hidden": "Text hinter einer Inhaltswarnung verstecken/anzeigen",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.toggle_sensitivity": "Medien hinter einer Inhaltswarnung verstecken/anzeigen",
   "keyboard_shortcuts.toot": "einen neuen Toot beginnen",
   "keyboard_shortcuts.unfocus": "Textfeld/die Suche nicht mehr fokussieren",
   "keyboard_shortcuts.up": "sich in der Liste hinauf bewegen",
   "lightbox.close": "Schließen",
   "lightbox.next": "Weiter",
   "lightbox.previous": "Zurück",
-  "lightbox.view_context": "View context",
+  "lightbox.view_context": "Beitrag sehen",
   "lists.account.add": "Zur Liste hinzufügen",
   "lists.account.remove": "Von der Liste entfernen",
-  "lists.delete": "Delete list",
+  "lists.delete": "Liste löschen",
   "lists.edit": "Liste bearbeiten",
   "lists.edit.submit": "Titel ändern",
   "lists.new.create": "Liste hinzufügen",
@@ -237,16 +237,16 @@
   "navigation_bar.favourites": "Favoriten",
   "navigation_bar.filters": "Stummgeschaltene Wörter",
   "navigation_bar.follow_requests": "Folgeanfragen",
-  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.follows_and_followers": "Folgende und Follower",
   "navigation_bar.info": "Über diesen Server",
   "navigation_bar.keyboard_shortcuts": "Tastenkombinationen",
   "navigation_bar.lists": "Listen",
   "navigation_bar.logout": "Abmelden",
   "navigation_bar.mutes": "Stummgeschaltete Profile",
-  "navigation_bar.personal": "Personal",
+  "navigation_bar.personal": "Persönlich",
   "navigation_bar.pins": "Angeheftete Beiträge",
   "navigation_bar.preferences": "Einstellungen",
-  "navigation_bar.profile_directory": "Profile directory",
+  "navigation_bar.profile_directory": "Profilverzeichnis",
   "navigation_bar.public_timeline": "Föderierte Zeitleiste",
   "navigation_bar.security": "Sicherheit",
   "notification.favourite": "{name} hat deinen Beitrag favorisiert",
@@ -308,7 +308,7 @@
   "search_popout.search_format": "Fortgeschrittenes Suchformat",
   "search_popout.tips.full_text": "Simpler Text gibt Beiträge, die du geschrieben, favorisiert und geteilt hast zurück. Außerdem auch Beiträge in denen du erwähnt wurdest, als auch passende Nutzernamen, Anzeigenamen oder Hashtags.",
   "search_popout.tips.hashtag": "Hashtag",
-  "search_popout.tips.status": "status",
+  "search_popout.tips.status": "Beitrag",
   "search_popout.tips.text": "Einfacher Text gibt Anzeigenamen, Benutzernamen und Hashtags zurück",
   "search_popout.tips.user": "Nutzer",
   "search_results.accounts": "Personen",
@@ -382,7 +382,7 @@
   "video.fullscreen": "Vollbild",
   "video.hide": "Video verbergen",
   "video.mute": "Stummschalten",
-  "video.pause": "Pause",
+  "video.pause": "Pausieren",
   "video.play": "Abspielen",
   "video.unmute": "Ton einschalten"
 }
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index d80487875..def140df6 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -77,7 +77,7 @@
   "compose_form.poll.remove_option": "حذف این گزینه",
   "compose_form.publish": "بوق",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "Mark media as sensitive",
+  "compose_form.sensitive.hide": "علامت‌گذاری به عنوان حساس",
   "compose_form.sensitive.marked": "این تصویر به عنوان حساس علامت‌گذاری شده",
   "compose_form.sensitive.unmarked": "این تصویر به عنوان حساس علامت‌گذاری نشده",
   "compose_form.spoiler.marked": "نوشته پشت هشدار محتوا پنهان است",
@@ -89,7 +89,7 @@
   "confirmations.block.message": "آیا واقعاً می‌خواهید {name} را مسدود کنید؟",
   "confirmations.delete.confirm": "پاک کن",
   "confirmations.delete.message": "آیا واقعاً می‌خواهید این نوشته را پاک کنید؟",
-  "confirmations.delete_list.confirm": "Delete",
+  "confirmations.delete_list.confirm": "پاک کن",
   "confirmations.delete_list.message": "آیا واقعاً می‌خواهید این فهرست را برای همیشه پاک کنید؟",
   "confirmations.domain_block.confirm": "پنهان‌سازی کل دامین",
   "confirmations.domain_block.message": "آیا جدی جدی می‌خواهید کل دامین {domain} را مسدود کنید؟ بیشتر وقت‌ها مسدودکردن یا بی‌صداکردن چند حساب کاربری خاص کافی است و توصیه می‌شود. پس از این کار شما هیچ نوشته‌ای را از این دامین در فهرست نوشته‌های عمومی یا اعلان‌هایتان نخواهید دید. پیگیران شما از این دامین هم حذف خواهد شد.",
@@ -204,14 +204,14 @@
   "keyboard_shortcuts.search": "برای فعال‌کردن جستجو",
   "keyboard_shortcuts.start": "برای گشودن ستون «آغاز کنید»",
   "keyboard_shortcuts.toggle_hidden": "برای نمایش/نهفتن نوشتهٔ پشت هشدار محتوا",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.toggle_sensitivity": "برای نمایش/نهفتن عکس و ویدیو",
   "keyboard_shortcuts.toot": "برای آغاز یک بوق تازه",
   "keyboard_shortcuts.unfocus": "برای برداشتن توجه از نوشتن/جستجو",
   "keyboard_shortcuts.up": "برای بالا رفتن در فهرست",
   "lightbox.close": "بستن",
   "lightbox.next": "بعدی",
   "lightbox.previous": "قبلی",
-  "lightbox.view_context": "View context",
+  "lightbox.view_context": "نمایش گفتگو",
   "lists.account.add": "افزودن به فهرست",
   "lists.account.remove": "پاک‌کردن از فهرست",
   "lists.delete": "حذف فهرست",
@@ -237,7 +237,7 @@
   "navigation_bar.favourites": "پسندیده‌ها",
   "navigation_bar.filters": "واژگان بی‌صداشده",
   "navigation_bar.follow_requests": "درخواست‌های پیگیری",
-  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.follows_and_followers": "پیگیری‌ها و پیگیران",
   "navigation_bar.info": "دربارهٔ این سرور",
   "navigation_bar.keyboard_shortcuts": "میان‌برهای صفحه‌کلید",
   "navigation_bar.lists": "فهرست‌ها",
@@ -246,7 +246,7 @@
   "navigation_bar.personal": "شخصی",
   "navigation_bar.pins": "نوشته‌های ثابت",
   "navigation_bar.preferences": "ترجیحات",
-  "navigation_bar.profile_directory": "Profile directory",
+  "navigation_bar.profile_directory": "فهرست گزیدهٔ کاربران",
   "navigation_bar.public_timeline": "نوشته‌های همه‌جا",
   "navigation_bar.security": "امنیت",
   "notification.favourite": "‫{name}‬ نوشتهٔ شما را پسندید",
@@ -292,11 +292,11 @@
   "privacy.unlisted.short": "فهرست‌نشده",
   "regeneration_indicator.label": "در حال باز شدن…",
   "regeneration_indicator.sublabel": "این فهرست دارد آماده می‌شود!",
-  "relative_time.days": "{number}d",
-  "relative_time.hours": "{number}h",
+  "relative_time.days": "{number} روز",
+  "relative_time.hours": "{number} ساعت",
   "relative_time.just_now": "الان",
-  "relative_time.minutes": "{number}m",
-  "relative_time.seconds": "{number}s",
+  "relative_time.minutes": "{number} دقیقه",
+  "relative_time.seconds": "{number} ثانیه",
   "reply_indicator.cancel": "لغو",
   "report.forward": "فرستادن به {target}",
   "report.forward_hint": "این حساب در سرور دیگری ثبت شده. آیا می‌خواهید رونوشتی از این گزارش به طور ناشناس به آن‌جا هم فرستاده شود؟",
diff --git a/app/javascript/mastodon/locales/whitelist_de.json b/app/javascript/mastodon/locales/whitelist_de.json
index 0d4f101c7..6c9617e60 100644
--- a/app/javascript/mastodon/locales/whitelist_de.json
+++ b/app/javascript/mastodon/locales/whitelist_de.json
@@ -1,2 +1,9 @@
 [
+  "relative_time.seconds",
+  "relative_time.minutes",
+  "relative_time.hours",
+  "relative_time.days",
+  "account.badges.bot",
+  "compose_form.publish_loud",
+  "search_results.hashtags"
 ]
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index f6e3d73d3..b4143c70c 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -1,5 +1,5 @@
 {
-  "account.add_or_remove_from_list": "Add or Remove from lists",
+  "account.add_or_remove_from_list": "从列表中添加或删除",
   "account.badges.bot": "机器人",
   "account.block": "屏蔽 @{name}",
   "account.block_domain": "隐藏来自 {domain} 的内容",
@@ -7,16 +7,16 @@
   "account.direct": "发送私信给 @{name}",
   "account.domain_blocked": "网站已屏蔽",
   "account.edit_profile": "修改个人资料",
-  "account.endorse": "Feature on profile",
+  "account.endorse": "在个人资料中推荐此用户",
   "account.follow": "关注",
   "account.followers": "关注者",
-  "account.followers.empty": "No one follows this user yet.",
+  "account.followers.empty": "目前无人关注此用户。",
   "account.follows": "正在关注",
-  "account.follows.empty": "This user doesn't follow anyone yet.",
+  "account.follows.empty": "此用户目前没有关注任何人。",
   "account.follows_you": "关注了你",
   "account.hide_reblogs": "隐藏来自 @{name} 的转嘟",
-  "account.link_verified_on": "Ownership of this link was checked on {date}",
-  "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
+  "account.link_verified_on": "此链接的所有权已在 {date} 检查",
+  "account.locked_info": "此账户已锁嘟。账户的主人会手动审核关注者。",
   "account.media": "媒体",
   "account.mention": "提及 @{name}",
   "account.moved_to": "{name} 已经迁移到:",
@@ -31,7 +31,7 @@
   "account.show_reblogs": "显示来自 @{name} 的转嘟",
   "account.unblock": "不再屏蔽 @{name}",
   "account.unblock_domain": "不再隐藏来自 {domain} 的内容",
-  "account.unendorse": "Don't feature on profile",
+  "account.unendorse": "不在个人资料中推荐此用户",
   "account.unfollow": "取消关注",
   "account.unmute": "不再隐藏 @{name}",
   "account.unmute_notifications": "不再隐藏来自 @{name} 的通知",
@@ -71,20 +71,20 @@
   "compose_form.lock_disclaimer": "你的帐户没有{locked}。任何人都可以在关注你后立即查看仅关注者可见的嘟文。",
   "compose_form.lock_disclaimer.lock": "开启保护",
   "compose_form.placeholder": "在想啥?",
-  "compose_form.poll.add_option": "Add a choice",
-  "compose_form.poll.duration": "Poll duration",
-  "compose_form.poll.option_placeholder": "Choice {number}",
-  "compose_form.poll.remove_option": "Remove this choice",
+  "compose_form.poll.add_option": "添加一个选项",
+  "compose_form.poll.duration": "投票持续时间",
+  "compose_form.poll.option_placeholder": "选项 {number}",
+  "compose_form.poll.remove_option": "移除这个选项",
   "compose_form.publish": "嘟嘟",
   "compose_form.publish_loud": "{publish}!",
-  "compose_form.sensitive.hide": "Mark media as sensitive",
+  "compose_form.sensitive.hide": "标记媒体为敏感内容",
   "compose_form.sensitive.marked": "媒体已被标记为敏感内容",
   "compose_form.sensitive.unmarked": "媒体未被标记为敏感内容",
   "compose_form.spoiler.marked": "正文已被折叠在警告信息之后",
   "compose_form.spoiler.unmarked": "正文未被折叠",
   "compose_form.spoiler_placeholder": "折叠部分的警告消息",
   "confirmation_modal.cancel": "取消",
-  "confirmations.block.block_and_report": "Block & Report",
+  "confirmations.block.block_and_report": "屏蔽与举报",
   "confirmations.block.confirm": "屏蔽",
   "confirmations.block.message": "你确定要屏蔽 {name} 吗?",
   "confirmations.delete.confirm": "删除",
@@ -96,9 +96,9 @@
   "confirmations.mute.confirm": "隐藏",
   "confirmations.mute.message": "你确定要隐藏 {name} 吗?",
   "confirmations.redraft.confirm": "删除并重新编辑",
-  "confirmations.redraft.message": "你确定要删除这条嘟文并重新编辑它吗?所有相关的回复、转嘟和收藏都会被清除。",
-  "confirmations.reply.confirm": "Reply",
-  "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
+  "confirmations.redraft.message": "你确定要删除这条嘟文并重新编辑它吗?所有相关的转嘟和收藏都会被清除,回复将会被孤立。",
+  "confirmations.reply.confirm": "回复",
+  "confirmations.reply.message": "回复此消息会覆盖掉当前正在编辑的消息。确定继续吗?",
   "confirmations.unfollow.confirm": "取消关注",
   "confirmations.unfollow.message": "你确定要取消关注 {name} 吗?",
   "embed.instructions": "要在你的网站上嵌入这条嘟文,请复制以下代码。",
@@ -117,106 +117,106 @@
   "emoji_button.search_results": "搜索结果",
   "emoji_button.symbols": "符号",
   "emoji_button.travel": "旅行和地点",
-  "empty_column.account_timeline": "No toots here!",
-  "empty_column.account_unavailable": "Profile unavailable",
-  "empty_column.blocks": "You haven't blocked any users yet.",
+  "empty_column.account_timeline": "这里没有嘟文!",
+  "empty_column.account_unavailable": "个人资料不可用",
+  "empty_column.blocks": "你目前没有屏蔽任何用户。",
   "empty_column.community": "本站时间轴暂时没有内容,快嘟几个来抢头香啊!",
   "empty_column.direct": "你还没有使用过私信。当你发出或者收到私信时,它会在这里显示。",
-  "empty_column.domain_blocks": "There are no hidden domains yet.",
-  "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
-  "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
-  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
+  "empty_column.domain_blocks": "目前没有被隐藏的站点。",
+  "empty_column.favourited_statuses": "你还没有收藏过任何嘟文。收藏过的嘟文会显示在这里。",
+  "empty_column.favourites": "没人收藏过这条嘟文。假如有人收藏了,就会显示在这里。",
+  "empty_column.follow_requests": "你没有收到新的关注请求。收到了之后就会显示在这里。",
   "empty_column.hashtag": "这个话题标签下暂时没有内容。",
   "empty_column.home": "你还没有关注任何用户。快看看{public},向其他用户搭讪吧。",
   "empty_column.home.public_timeline": "公共时间轴",
   "empty_column.list": "这个列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。",
-  "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
-  "empty_column.mutes": "You haven't muted any users yet.",
+  "empty_column.lists": "你没有创建过列表。你创建的列表会在这里显示。",
+  "empty_column.mutes": "你没有隐藏任何用户。",
   "empty_column.notifications": "你还没有收到过任何通知,快向其他用户搭讪吧。",
-  "empty_column.public": "这里神马都没有!写一些公开的嘟文,或者关注其他实例的用户后,这里就会有嘟文出现了哦!",
+  "empty_column.public": "这里什么都没有!写一些公开的嘟文,或者关注其他服务器的用户后,这里就会有嘟文出现了",
   "follow_request.authorize": "同意",
   "follow_request.reject": "拒绝",
   "getting_started.developers": "开发",
-  "getting_started.directory": "Profile directory",
+  "getting_started.directory": "用户资料目录",
   "getting_started.documentation": "文档",
   "getting_started.heading": "开始使用",
   "getting_started.invite": "邀请用户",
   "getting_started.open_source_notice": "Mastodon 是一个开源软件。欢迎前往 GitHub({github})贡献代码或反馈问题。",
   "getting_started.security": "帐户安全",
   "getting_started.terms": "使用条款",
-  "hashtag.column_header.tag_mode.all": "and {additional}",
-  "hashtag.column_header.tag_mode.any": "or {additional}",
-  "hashtag.column_header.tag_mode.none": "without {additional}",
-  "hashtag.column_settings.select.no_options_message": "No suggestions found",
-  "hashtag.column_settings.select.placeholder": "Enter hashtags…",
-  "hashtag.column_settings.tag_mode.all": "All of these",
-  "hashtag.column_settings.tag_mode.any": "Any of these",
-  "hashtag.column_settings.tag_mode.none": "None of these",
-  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
+  "hashtag.column_header.tag_mode.all": "以及 {additional}",
+  "hashtag.column_header.tag_mode.any": "或是 {additional}",
+  "hashtag.column_header.tag_mode.none": "而不用 {additional}",
+  "hashtag.column_settings.select.no_options_message": "没有找到建议",
+  "hashtag.column_settings.select.placeholder": "输入话题标签…",
+  "hashtag.column_settings.tag_mode.all": "全部",
+  "hashtag.column_settings.tag_mode.any": "任一",
+  "hashtag.column_settings.tag_mode.none": "全都不要",
+  "hashtag.column_settings.tag_toggle": "在此栏加入额外的标签",
   "home.column_settings.basic": "基本设置",
   "home.column_settings.show_reblogs": "显示转嘟",
   "home.column_settings.show_replies": "显示回复",
-  "intervals.full.days": "{number, plural, one {# day} other {# days}}",
-  "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
-  "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
-  "introduction.federation.action": "Next",
-  "introduction.federation.federated.headline": "Federated",
-  "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
-  "introduction.federation.home.headline": "Home",
-  "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
-  "introduction.federation.local.headline": "Local",
-  "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
-  "introduction.interactions.action": "Finish tutorial!",
-  "introduction.interactions.favourite.headline": "Favourite",
-  "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
-  "introduction.interactions.reblog.headline": "Boost",
-  "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
-  "introduction.interactions.reply.headline": "Reply",
-  "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
-  "introduction.welcome.action": "Let's go!",
-  "introduction.welcome.headline": "First steps",
-  "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
+  "intervals.full.days": "{number} 天",
+  "intervals.full.hours": "{number} 小时",
+  "intervals.full.minutes": "{number} 分钟",
+  "introduction.federation.action": "下一步",
+  "introduction.federation.federated.headline": "跨站",
+  "introduction.federation.federated.text": "其他跨站服务器的公共动态会显示在跨站时间线中。",
+  "introduction.federation.home.headline": "主页",
+  "introduction.federation.home.text": "你所关注的用户的动态会显示在主页里。你可以关注任何服务器上的任何人!",
+  "introduction.federation.local.headline": "本站",
+  "introduction.federation.local.text": "你所关注的用户的动态会显示在主页里,你可以关注任何服务器上的任何人。",
+  "introduction.interactions.action": "教程结束!",
+  "introduction.interactions.favourite.headline": "收藏",
+  "introduction.interactions.favourite.text": "你可以保存嘟文以便以后阅读。或者通过收藏功能告诉作者你点了个赞。",
+  "introduction.interactions.reblog.headline": "转嘟",
+  "introduction.interactions.reblog.text": "通过转嘟,你可以向你的关注者分享其他人的嘟文。",
+  "introduction.interactions.reply.headline": "回复",
+  "introduction.interactions.reply.text": "你可以向其他人回复,这些回复会像对话一样串在一起。",
+  "introduction.welcome.action": "让我们开始吧!",
+  "introduction.welcome.headline": "首先",
+  "introduction.welcome.text": "欢迎来到联邦!稍后,您将可以广播消息冰河您的朋友交流,这些消息将穿越于联邦中的各式服务器。但是这台服务器,{domain},是特殊的——它保存了你的个人资料,所以请记住它的名字。",
   "keyboard_shortcuts.back": "返回上一页",
-  "keyboard_shortcuts.blocked": "to open blocked users list",
+  "keyboard_shortcuts.blocked": "打开被屏蔽用户列表",
   "keyboard_shortcuts.boost": "转嘟",
-  "keyboard_shortcuts.column": "选择第 X 栏中的嘟文",
+  "keyboard_shortcuts.column": "选择某一栏中的嘟文",
   "keyboard_shortcuts.compose": "选择嘟文撰写框",
   "keyboard_shortcuts.description": "说明",
-  "keyboard_shortcuts.direct": "to open direct messages column",
+  "keyboard_shortcuts.direct": "打开私信栏",
   "keyboard_shortcuts.down": "在列表中让光标下移",
   "keyboard_shortcuts.enter": "展开嘟文",
   "keyboard_shortcuts.favourite": "收藏嘟文",
-  "keyboard_shortcuts.favourites": "to open favourites list",
-  "keyboard_shortcuts.federated": "to open federated timeline",
+  "keyboard_shortcuts.favourites": "打开收藏列表",
+  "keyboard_shortcuts.federated": "打开跨站时间线",
   "keyboard_shortcuts.heading": "快捷键列表",
-  "keyboard_shortcuts.home": "to open home timeline",
+  "keyboard_shortcuts.home": "打开主页时间线",
   "keyboard_shortcuts.hotkey": "快捷键",
   "keyboard_shortcuts.legend": "显示此列表",
-  "keyboard_shortcuts.local": "to open local timeline",
+  "keyboard_shortcuts.local": "打开本站时间线",
   "keyboard_shortcuts.mention": "提及嘟文作者",
-  "keyboard_shortcuts.muted": "to open muted users list",
-  "keyboard_shortcuts.my_profile": "to open your profile",
-  "keyboard_shortcuts.notifications": "to open notifications column",
-  "keyboard_shortcuts.pinned": "to open pinned toots list",
-  "keyboard_shortcuts.profile": "to open author's profile",
+  "keyboard_shortcuts.muted": "打开屏蔽用户列表",
+  "keyboard_shortcuts.my_profile": "打开你的个人资料",
+  "keyboard_shortcuts.notifications": "打卡通知栏",
+  "keyboard_shortcuts.pinned": "打开置顶嘟文列表",
+  "keyboard_shortcuts.profile": "打开作者的个人资料",
   "keyboard_shortcuts.reply": "回复嘟文",
-  "keyboard_shortcuts.requests": "to open follow requests list",
+  "keyboard_shortcuts.requests": "打开关注请求列表",
   "keyboard_shortcuts.search": "选择搜索框",
-  "keyboard_shortcuts.start": "to open \"get started\" column",
+  "keyboard_shortcuts.start": "打开“开始使用”栏",
   "keyboard_shortcuts.toggle_hidden": "显示或隐藏被折叠的正文",
-  "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
+  "keyboard_shortcuts.toggle_sensitivity": "显示/隐藏媒体",
   "keyboard_shortcuts.toot": "发送新嘟文",
   "keyboard_shortcuts.unfocus": "取消输入",
   "keyboard_shortcuts.up": "在列表中让光标上移",
   "lightbox.close": "关闭",
-  "lightbox.next": "下一步",
-  "lightbox.previous": "上一步",
-  "lightbox.view_context": "View context",
+  "lightbox.next": "下一个",
+  "lightbox.previous": "上一个",
+  "lightbox.view_context": "查看上下文",
   "lists.account.add": "添加到列表",
   "lists.account.remove": "从列表中删除",
   "lists.delete": "删除列表",
   "lists.edit": "编辑列表",
-  "lists.edit.submit": "Change title",
+  "lists.edit.submit": "更改标题",
   "lists.new.create": "新建列表",
   "lists.new.title_placeholder": "新列表的标题",
   "lists.search": "搜索你关注的人",
@@ -225,19 +225,19 @@
   "media_gallery.toggle_visible": "切换显示/隐藏",
   "missing_indicator.label": "找不到内容",
   "missing_indicator.sublabel": "无法找到此资源",
-  "mute_modal.hide_notifications": "同时隐藏来自这个用户的通知",
-  "navigation_bar.apps": "Mobile apps",
+  "mute_modal.hide_notifications": "同时隐藏来自这个用户的通知?",
+  "navigation_bar.apps": "移动应用",
   "navigation_bar.blocks": "已屏蔽的用户",
   "navigation_bar.community_timeline": "本站时间轴",
-  "navigation_bar.compose": "Compose new toot",
+  "navigation_bar.compose": "撰写新嘟文",
   "navigation_bar.direct": "私信",
   "navigation_bar.discover": "发现",
   "navigation_bar.domain_blocks": "已屏蔽的网站",
   "navigation_bar.edit_profile": "修改个人资料",
   "navigation_bar.favourites": "收藏的内容",
-  "navigation_bar.filters": "Muted words",
+  "navigation_bar.filters": "被隐藏的词",
   "navigation_bar.follow_requests": "关注请求",
-  "navigation_bar.follows_and_followers": "Follows and followers",
+  "navigation_bar.follows_and_followers": "正在关注以及关注者",
   "navigation_bar.info": "关于本站",
   "navigation_bar.keyboard_shortcuts": "快捷键列表",
   "navigation_bar.lists": "列表",
@@ -246,41 +246,41 @@
   "navigation_bar.personal": "个人",
   "navigation_bar.pins": "置顶嘟文",
   "navigation_bar.preferences": "首选项",
-  "navigation_bar.profile_directory": "Profile directory",
+  "navigation_bar.profile_directory": "用户资料目录",
   "navigation_bar.public_timeline": "跨站公共时间轴",
   "navigation_bar.security": "安全",
   "notification.favourite": "{name} 收藏了你的嘟文",
   "notification.follow": "{name} 开始关注你",
   "notification.mention": "{name} 提及你",
-  "notification.poll": "A poll you have voted in has ended",
+  "notification.poll": "你参与的一个投票已经结束",
   "notification.reblog": "{name} 转嘟了你的嘟文",
   "notifications.clear": "清空通知列表",
   "notifications.clear_confirmation": "你确定要永久清空通知列表吗?",
   "notifications.column_settings.alert": "桌面通知",
   "notifications.column_settings.favourite": "当你的嘟文被收藏时:",
-  "notifications.column_settings.filter_bar.advanced": "Display all categories",
-  "notifications.column_settings.filter_bar.category": "Quick filter bar",
-  "notifications.column_settings.filter_bar.show": "Show",
+  "notifications.column_settings.filter_bar.advanced": "显示所有类别",
+  "notifications.column_settings.filter_bar.category": "快速过滤栏",
+  "notifications.column_settings.filter_bar.show": "显示",
   "notifications.column_settings.follow": "当有人关注你时:",
   "notifications.column_settings.mention": "当有人在嘟文中提及你时:",
-  "notifications.column_settings.poll": "Poll results:",
+  "notifications.column_settings.poll": "投票结果:",
   "notifications.column_settings.push": "推送通知",
   "notifications.column_settings.reblog": "当有人转嘟了你的嘟文时:",
   "notifications.column_settings.show": "在通知栏显示",
   "notifications.column_settings.sound": "播放音效",
-  "notifications.filter.all": "All",
-  "notifications.filter.boosts": "Boosts",
-  "notifications.filter.favourites": "Favourites",
-  "notifications.filter.follows": "Follows",
-  "notifications.filter.mentions": "Mentions",
-  "notifications.filter.polls": "Poll results",
+  "notifications.filter.all": "全部",
+  "notifications.filter.boosts": "转嘟",
+  "notifications.filter.favourites": "收藏",
+  "notifications.filter.follows": "关注",
+  "notifications.filter.mentions": "提及",
+  "notifications.filter.polls": "投票结果",
   "notifications.group": "{count} 条通知",
-  "poll.closed": "Closed",
-  "poll.refresh": "Refresh",
-  "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
-  "poll.vote": "Vote",
-  "poll_button.add_poll": "Add a poll",
-  "poll_button.remove_poll": "Remove poll",
+  "poll.closed": "已关闭",
+  "poll.refresh": "刷新",
+  "poll.total_votes": "{count} 票",
+  "poll.vote": "投票",
+  "poll_button.add_poll": "发起投票",
+  "poll_button.remove_poll": "移除投票",
   "privacy.change": "设置嘟文可见范围",
   "privacy.direct.long": "只有被提及的用户能看到",
   "privacy.direct.short": "私信",
@@ -299,8 +299,8 @@
   "relative_time.seconds": "{number}秒",
   "reply_indicator.cancel": "取消",
   "report.forward": "发送举报至 {target}",
-  "report.forward_hint": "这名用户来自另一个实例。是否要向那个实例发送一条匿名的举报?",
-  "report.hint": "举报将会发送给你所在实例的监察员。你可以在下面填写举报这个用户的理由:",
+  "report.forward_hint": "这名用户来自另一个服务器。是否要向那个服务器发送一条匿名的举报?",
+  "report.hint": "举报将会发送给你所在服务器的监察员。你可以在下面填写举报这个用户的理由:",
   "report.placeholder": "附言",
   "report.submit": "提交",
   "report.target": "举报 {target}",
@@ -315,18 +315,18 @@
   "search_results.hashtags": "话题标签",
   "search_results.statuses": "嘟文",
   "search_results.total": "共 {count, number} 个结果",
-  "status.admin_account": "Open moderation interface for @{name}",
-  "status.admin_status": "Open this status in the moderation interface",
+  "status.admin_account": "打开 @{name} 的管理界面",
+  "status.admin_status": "打开这条嘟文的管理界面",
   "status.block": "屏蔽 @{name}",
   "status.cancel_reblog_private": "取消转嘟",
   "status.cannot_reblog": "无法转嘟这条嘟文",
-  "status.copy": "Copy link to status",
+  "status.copy": "复制链接到嘟文中",
   "status.delete": "删除",
-  "status.detailed_status": "Detailed conversation view",
+  "status.detailed_status": "对话详情",
   "status.direct": "发送私信给 @{name}",
   "status.embed": "嵌入",
   "status.favourite": "收藏",
-  "status.filtered": "Filtered",
+  "status.filtered": "已过滤",
   "status.load_more": "加载更多",
   "status.media_hidden": "隐藏媒体内容",
   "status.mention": "提及 @{name}",
@@ -336,45 +336,46 @@
   "status.open": "展开嘟文",
   "status.pin": "在个人资料页面置顶",
   "status.pinned": "置顶嘟文",
-  "status.read_more": "Read more",
+  "status.read_more": "阅读全文",
   "status.reblog": "转嘟",
   "status.reblog_private": "转嘟给原有关注者",
   "status.reblogged_by": "{name} 转嘟了",
-  "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
+  "status.reblogs.empty": "无人转嘟此条。如果有人转嘟了,就会显示在这里。",
   "status.redraft": "删除并重新编辑",
   "status.reply": "回复",
   "status.replyAll": "回复所有人",
   "status.report": "举报 @{name}",
+  "status.sensitive_toggle": "点击显示",
   "status.sensitive_warning": "敏感内容",
   "status.share": "分享",
   "status.show_less": "隐藏内容",
   "status.show_less_all": "隐藏所有内容",
   "status.show_more": "显示内容",
   "status.show_more_all": "显示所有内容",
-  "status.show_thread": "Show thread",
+  "status.show_thread": "显示全部对话",
   "status.unmute_conversation": "不再隐藏此对话",
   "status.unpin": "在个人资料页面取消置顶",
-  "suggestions.dismiss": "Dismiss suggestion",
-  "suggestions.header": "You might be interested in…",
+  "suggestions.dismiss": "关闭建议",
+  "suggestions.header": "您可能会感兴趣…",
   "tabs_bar.federated_timeline": "跨站",
   "tabs_bar.home": "主页",
   "tabs_bar.local_timeline": "本站",
   "tabs_bar.notifications": "通知",
   "tabs_bar.search": "搜索",
-  "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
-  "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
-  "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
-  "time_remaining.moments": "Moments remaining",
-  "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
+  "time_remaining.days": "剩余 {number, plural, one {# 天} other {# 天}}",
+  "time_remaining.hours": "剩余 {number, plural, one {# 小时} other {# 小时}}",
+  "time_remaining.minutes": "剩余 {number, plural, one {# 分钟} other {# 分钟}}",
+  "time_remaining.moments": "即将结束",
+  "time_remaining.seconds": "剩余 {number, plural, one {# 秒} other {# 秒}}",
   "trends.count_by_accounts": "{count} 人正在讨论",
   "ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会被丢弃。",
   "upload_area.title": "将文件拖放到此处开始上传",
-  "upload_button.label": "上传媒体文件",
-  "upload_error.limit": "File upload limit exceeded.",
-  "upload_error.poll": "File upload not allowed with polls.",
+  "upload_button.label": "上传媒体文件 (JPEG, PNG, GIF, WebM, MP4, MOV)",
+  "upload_error.limit": "超过文件上传限制。",
+  "upload_error.poll": "投票中不允许上传文件。",
   "upload_form.description": "为视觉障碍人士添加文字说明",
   "upload_form.focus": "剪裁",
-  "upload_form.undo": "取消上传",
+  "upload_form.undo": "删除",
   "upload_progress.label": "上传中…",
   "video.close": "关闭视频",
   "video.exit_fullscreen": "退出全屏",
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 578e98990..8450f13d9 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -3075,6 +3075,10 @@ a.status-card.compact:hover {
   display: flex;
 }
 
+.column-header__links {
+  margin-bottom: 14px;
+}
+
 .column-header__links .text-btn {
   margin-right: 10px;
 }
diff --git a/config/locales/activerecord.zh-CN.yml b/config/locales/activerecord.zh-CN.yml
index 8628d6677..8d2ddfd14 100644
--- a/config/locales/activerecord.zh-CN.yml
+++ b/config/locales/activerecord.zh-CN.yml
@@ -1,6 +1,10 @@
 ---
 zh-CN:
   activerecord:
+    attributes:
+      poll:
+        expires_at: 截止时间
+        options: 选项
     errors:
       models:
         account:
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 04a3e7eaf..c63b31442 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -174,6 +174,7 @@ de:
       statuses: Beiträge
       subscribe: Abonnieren
       suspended: Gesperrt
+      time_in_queue: "%{time} in der Warteschlange"
       title: Konten
       unconfirmed_email: Unbestätigte E-Mail-Adresse
       undo_silenced: Stummschaltung zurücknehmen
@@ -269,6 +270,7 @@ de:
       created_msg: Die Domain-Blockade wird nun durchgeführt
       destroyed_msg: Die Domain-Blockade wurde rückgängig gemacht
       domain: Domain
+      existing_domain_block_html: Es gibt schon eine Blockade für %{name}, diese muss erst <a href="%{unblock_url}">aufgehoben</a> werden.
       new:
         create: Blockade einrichten
         hint: Die Domain-Blockade wird nicht verhindern, dass Konteneinträge in der Datenbank erstellt werden. Aber es werden rückwirkend und automatisch alle Moderationsmethoden auf diese Konten angewendet.
@@ -497,6 +499,12 @@ de:
       body: "%{reporter} hat %{target} gemeldet"
       body_remote: Jemand von %{domain} hat %{target} gemeldet
       subject: Neue Meldung auf %{instance} (#%{id})
+  appearance:
+    advanced_web_interface: Fortgeschrittene Benutzeroberfläche
+    advanced_web_interface_hint: Wenn du mehr aus deiner Bildschirmbreite herausholen möchtest, erlaubt dir die fortgeschrittene Benutzeroberfläche viele unterschiedliche Spalten auf einmal zu sehen, wie z.B. deine Startseite, Benachrichtigungen, das gesamte bekannte Netz, deine Listen und beliebige Hashtags.
+    animations_and_accessibility: Animationen und Barrierefreiheit
+    confirmation_dialogs: Bestätigungsfenster
+    sensitive_content: Heikle Inhalte
   application_mailer:
     notification_preferences: Ändere E-Mail-Einstellungen
     salutation: "%{name},"
@@ -777,6 +785,8 @@ de:
       too_many_options: kann nicht mehr als %{max} Einträge beinhalten
   preferences:
     other: Weiteres
+    posting_defaults: Standardeinstellungen für Beiträge
+    public_timelines: Öffentliche Zeitleisten
   relationships:
     activity: Kontoaktivität
     dormant: Inaktiv
diff --git a/config/locales/devise.zh-CN.yml b/config/locales/devise.zh-CN.yml
index bef2baa18..b15515250 100644
--- a/config/locales/devise.zh-CN.yml
+++ b/config/locales/devise.zh-CN.yml
@@ -12,24 +12,27 @@ zh-CN:
       last_attempt: 你还有最后一次尝试机会,再次失败你的帐户将被锁定。
       locked: 你的帐户已被锁定。
       not_found_in_database: "%{authentication_keys}或密码错误。"
+      pending: 你的账户仍在审核中。
       timeout: 你已登录超时,请重新登录。
       unauthenticated: 继续操作前请注册或者登录。
       unconfirmed: 继续操作前请先确认你的帐户。
     mailer:
       confirmation_instructions:
         action: 验证电子邮件地址
+        action_with_app: 确认并返回%{app}
         explanation: 你在 %{host} 上使用这个电子邮件地址创建了一个帐户。只需点击下面的链接,即可完成激活。如果你并没有创建过帐户,请忽略此邮件。
-        extra_html: 请记得阅读<a href="%{terms_path}">本实例的相关规定</a>和<a href="%{policy_path}">我们的使用条款</a>。
+        explanation_when_pending: 你用这个电子邮件申请了在 %{host} 注册。在确认电子邮件地址之后,我们会审核你的申请。在此之前,你不能登录。如果你的申请被驳回,你的数据会被移除,因此你无需再采取任何行动。如果申请人不是你,请忽略这封邮件。
+        extra_html: 请记得阅读<a href="%{terms_path}">本服务器的相关规定</a>和<a href="%{policy_path}">我们的使用条款</a>。
         subject: Mastodon:确认 %{instance} 帐户信息
         title: 验证电子邮件地址
       email_changed:
         explanation: 你的帐户的电子邮件地址即将变更为:
-        extra: 如果你并没有请求更改你的电子邮件地址,则他人很有可能已经入侵你的帐户。请立即更改你的密码;如果你已经无法访问你的帐户,请联系实例的管理员请求协助。
+        extra: 如果你并没有请求更改你的电子邮件地址,则他人很有可能已经入侵你的帐户。请立即更改你的密码;如果你已经无法访问你的帐户,请联系服务器管理员请求协助。
         subject: Mastodon:电子邮件地址已被更改
         title: 新电子邮件地址
       password_change:
         explanation: 你的帐户的密码已被更改。
-        extra: 如果你并没有请求更改你的密码,则他人很有可能已经入侵你的帐户。请立即更改你的密码;如果你已经无法访问你的帐户,请联系实例的管理员请求协助。
+        extra: 如果你并没有请求更改你的密码,则他人很有可能已经入侵你的帐户。请立即更改你的密码;如果你已经无法访问你的帐户,请联系服务器的管理员请求协助。
         subject: Mastodon:密码已被更改
         title: 密码已被重置
       reconfirmation_instructions:
@@ -59,6 +62,7 @@ zh-CN:
       signed_up: 欢迎!你已注册成功。
       signed_up_but_inactive: 你已注册,但尚未激活帐户。
       signed_up_but_locked: 你已注册,但帐户被锁定了。
+      signed_up_but_pending: 一封带有确认链接的邮件已经发送到了您的邮箱。 在您点击确认链接后,我们将会审核您的申请。审核通过后,我们将会通知您。
       signed_up_but_unconfirmed: 一封带有确认链接的邮件已经发送至你的邮箱,请点击邮件中的链接以激活你的帐户。如果没有,请检查你的垃圾邮件。
       update_needs_confirmation: 信息更新成功,但我们需要验证你的新电子邮件地址,请点击邮件中的链接以确认。如果没有,请检查你的垃圾邮箱。
       updated: 帐户资料更新成功。
@@ -78,4 +82,5 @@ zh-CN:
       not_found: 找不到
       not_locked: 未被锁定
       not_saved:
+        one: 一个错误导致这个%{resource}保存失败:
         other: 发生 %{count} 个错误,导致%{resource}保存失败:
diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml
index 3c7dd99be..5c606e470 100644
--- a/config/locales/doorkeeper.zh-CN.yml
+++ b/config/locales/doorkeeper.zh-CN.yml
@@ -117,4 +117,26 @@ zh-CN:
       follow: 关注或屏蔽用户
       push: 接收你的帐户的推送通知
       read: 读取你的帐户数据
-      write: 为你发表嘟文
+      read:accounts: 查看账户信息
+      read:blocks: 查看你的屏蔽列表
+      read:favourites: 查看你的收藏
+      read:filters: 查看你的过滤器
+      read:follows: 查看你的关注
+      read:lists: 查看你的列表
+      read:mutes: 查看你的隐藏列表
+      read:notifications: 查看你的通知
+      read:reports: 查看你的举报
+      read:search: 以你的身份搜索
+      read:statuses: 查看所有嘟文
+      write: 修改你的账户数据
+      write:accounts: 修改你的个人资料
+      write:blocks: 屏蔽账户和域名
+      write:favourites: 收藏嘟文
+      write:filters: 创建过滤器
+      write:follows: 关注其他人
+      write:lists: 创建列表
+      write:media: 上传媒体文件
+      write:mutes: 隐藏用户和对话
+      write:notifications: 清除你的通知
+      write:reports: 举报他人
+      write:statuses: 发表嘟文
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index f00ffdf2f..247e2e9d7 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -80,6 +80,7 @@ fa:
       destroyed_msg: یادداشت مدیر با موفقیت پاک شد!
     accounts:
       approve: پذیرفتن
+      approve_all: پذیرفتن همه
       are_you_sure: آیا مطمئن هستید؟
       avatar: تصویر نمایه
       by_domain: دامین
@@ -132,6 +133,7 @@ fa:
       moderation_notes: یادداشت مدیر
       most_recent_activity: آخرین فعالیت‌ها
       most_recent_ip: آخرین IP ها
+      no_account_selected: هیچ حسابی تغییر نکرد زیرا حسابی انتخاب نشده بود
       no_limits_imposed: بدون محدودیت
       not_subscribed: عضو نیست
       outbox_url: نشانی صندوق خروجی
@@ -144,6 +146,7 @@ fa:
       push_subscription_expires: عضویت از راه PuSH منقضی شد
       redownload: به‌روزرسانی نمایه
       reject: نپذیرفتن
+      reject_all: نپذیرفتن هیچکدام
       remove_avatar: حذف تصویر نمایه
       remove_header: برداشتن تصویر زمینه
       resend_confirmation:
@@ -170,6 +173,7 @@ fa:
       statuses: نوشته‌ها
       subscribe: اشتراک
       suspended: تعلیق‌شده
+      time_in_queue: در حال انتظار %{time}
       title: حساب‌ها
       unconfirmed_email: ایمیل تأییدنشده
       undo_silenced: واگردانی بی‌صداکردن
@@ -245,6 +249,7 @@ fa:
       feature_profile_directory: فهرست گزیدهٔ کاربران
       feature_registrations: ثبت‌نام‌ها
       feature_relay: رله
+      feature_timeline_preview: پیش‌نمایش نوشته‌ها
       features: ویژگی‌ها
       hidden_service: ارتباط میان‌سروری با سرویس‌های نهفته
       open_reports: گزارش‌های فعال
@@ -295,7 +300,7 @@ fa:
     email_domain_blocks:
       add_new: افزودن تازه
       created_msg: مسدودسازی دامین ایمیل با موفقیت ساخته شد
-      delete: Delete
+      delete: پاک‌کردن
       destroyed_msg: مسدودسازی دامین ایمیل با موفقیت پاک شد
       domain: دامین
       new:
@@ -490,6 +495,12 @@ fa:
       body: کاربر %{reporter} کاربر %{target} را گزارش داد
       body_remote: کسی از %{domain} گزارش %{target} را فرستاده
       subject: گزارش تازه‌ای برای %{instance} (#%{id})
+  appearance:
+    advanced_web_interface: رابط کاربری پیشرفته
+    advanced_web_interface_hint: 'اگر می‌خواهید همهٔ فضای نمایشگر خود را به کار ببرید، می‌توانید به کمک رابط کاربری پیشرفته ستون‌های گوناگونی داشته باشید تا در یک نگاه همهٔ اطلاعاتی را که می‌خواهید ببینید: نوشته‌های دیگران، اعلان‌ها، فهرست نوشته‌های همه‌جا، و هر تعداد فهرست و برچسب که بخواهید.'
+    animations_and_accessibility: پویانمایی‌های و دسترسی‌پذیری
+    confirmation_dialogs: پیغام‌های تأیید
+    sensitive_content: محتوای حساس
   application_mailer:
     notification_preferences: تغییر ترجیحات ایمیل
     salutation: "%{name}،"
@@ -631,6 +642,7 @@ fa:
     all: همه
     changes_saved_msg: تغییرات با موفقیت ذخیره شدند!
     copy: رونوشت
+    order_by: مرتب‌سازی
     save_changes: ذخیرهٔ تغییرات
     validation_errors:
       one: یک چیزی هنوز درست نیست! لطفاً خطاهای زیر را ببینید
@@ -646,10 +658,13 @@ fa:
       keybase:
         invalid_token: کدهای Keybase چکیده (هش) امضاهای دیجیتال هستند و دست‌کم ۶۶ نویسه در مبنای ۱۶ دارند
         verification_failed: این کد را Keybase به عنوان امضای دیجیتال کاربر %{kb_username} تأیید نمی‌کند. لطفاً دوباره از Keybase تلاش کنید.
+      wrong_user: نمی‌توان تأییدی برای %{proving} در حالی که به عنوان %{current} وارد شده‌اید. به عنوان %{proving} وارد شوید و دوباره تلاش کنید.
     explanation_html: این‌جا می‌توانید به شناسه‌های دیگر خود مانند نمایهٔ Keybase خودتان به طور رمزنگارانه متصل شوید. با این کار دیگران می‌توانند به شما پیغام‌های رمزشده بفرستند و به چیزی که شما به آن‌ها می‌فرستید اعتماد کنند.
     i_am_html: من %{username} روی %{service} هستم.
     identity: شناسه
     inactive: غیرفعال
+    publicize_checkbox: 'این را ببوقید:'
+    publicize_toot: 'تأیید شد! من %{username} روی %{service} هستم: %{url}'
     status: وضعیت تأیید
     view_proof: دیدن مدرک
   imports:
@@ -769,6 +784,8 @@ fa:
   relationships:
     activity: فعالیت حساب
     dormant: غیرفعال
+    last_active: آخرین فعالیت
+    most_recent: تازه‌ترین
     moved: منتقل‌شده
     mutual: دوطرفه
     primary: اصلی
@@ -844,6 +861,9 @@ fa:
     revoke_success: نشست با موفقیت لغو شد
     title: نشست‌ها
   settings:
+    account: حساب
+    account_settings: تنظیمات حساب
+    appearance: نما
     authorized_apps: برنامه‌های مجاز
     back: بازگشت به ماستدون
     delete: پاک‌کردن حساب
@@ -853,9 +873,11 @@ fa:
     featured_tags: برچسب‌های منتخب
     identity_proofs: مدرک شناسه‌ها
     import: درون‌ریزی
+    import_and_export: درون‌ریزی و برون‌بری
     migrate: انتقال حساب
     notifications: اعلان‌ها
     preferences: ترجیحات
+    profile: نمایه
     relationships: پیگیری‌ها و پیگیران
     two_factor_authentication: ورود دومرحله‌ای
   statuses:
@@ -900,6 +922,87 @@ fa:
     reblogged: بازبوقید
     sensitive_content: محتوای حساس
   terms:
+    body_html: |
+      <h2>سیاست رازداری</h2>
+      <h3 id="collect">What information do we collect?</h3>
+
+      <ul>
+        <li><em>Basic account information</em>: If you register on this server, you may be asked to enter a username, an e-mail address and a password. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly.</li>
+        <li><em>Posts, following and other public information</em>: The list of people you follow is listed publicly, the same is true for your followers. When you submit a message, the date and time is stored as well as the application you submitted the message from. Messages may contain media attachments, such as pictures and videos. Public and unlisted posts are available publicly. When you feature a post on your profile, that is also publicly available information. Your posts are delivered to your followers, in some cases it means they are delivered to different servers and copies are stored there. When you delete posts, this is likewise delivered to your followers. The action of reblogging or favouriting another post is always public.</li>
+        <li><em>Direct and followers-only posts</em>: All posts are stored and processed on the server. Followers-only posts are delivered to your followers and users who are mentioned in them, and direct posts are delivered only to users mentioned in them. In some cases it means they are delivered to different servers and copies are stored there. We make a good faith effort to limit the access to those posts only to authorized persons, but other servers may fail to do so. Therefore it's important to review servers your followers belong to. You may toggle an option to approve and reject new followers manually in the settings. <em>Please keep in mind that the operators of the server and any receiving server may view such messages</em>, and that recipients may screenshot, copy or otherwise re-share them. <em>Do not share any dangerous information over Mastodon.</em></li>
+        <li><em>IPs and other metadata</em>: When you log in, we record the IP address you log in from, as well as the name of your browser application. All the logged in sessions are available for your review and revocation in the settings. The latest IP address used is stored for up to 12 months. We also may retain server logs which include the IP address of every request to our server.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="use">What do we use your information for?</h3>
+
+      <p>Any of the information we collect from you may be used in the following ways:</p>
+
+      <ul>
+        <li>To provide the core functionality of Mastodon. You can only interact with other people's content and post your own content when you are logged in. For example, you may follow other people to view their combined posts in your own personalized home timeline.</li>
+        <li>To aid moderation of the community, for example comparing your IP address with other known ones to determine ban evasion or other violations.</li>
+        <li>The email address you provide may be used to send you information, notifications about other people interacting with your content or sending you messages, and to respond to inquiries, and/or other requests or questions.</li>
+      </ul>
+
+      <hr class="spacer" />
+
+      <h3 id="protect">How do we protect your information?</h3>
+
+      <p>We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="data-retention">What is our data retention policy?</h3>
+
+      <p>We will make a good faith effort to:</p>
+
+      <ul>
+        <li>Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more than 90 days.</li>
+        <li>Retain the IP addresses associated with registered users no more than 12 months.</li>
+      </ul>
+
+      <p>You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image.</p>
+
+      <p>You may irreversibly delete your account at any time.</p>
+
+      <hr class="spacer"/>
+
+      <h3 id="cookies">Do we use cookies?</h3>
+
+      <p>Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.</p>
+
+      <p>We use cookies to understand and save your preferences for future visits.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="disclose">Do we disclose any information to outside parties?</h3>
+
+      <p>We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.</p>
+
+      <p>Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this.</p>
+
+      <p>When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your favourites. Applications can never access your e-mail address or password.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="children">Site usage by children</h3>
+
+      <p>If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) do not use this site.</p>
+
+      <p>If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) do not use this site.</p>
+
+      <p>Law requirements can be different if this server is in another jurisdiction.</p>
+
+      <hr class="spacer" />
+
+      <h3 id="changes">Changes to our Privacy Policy</h3>
+
+      <p>If we decide to change our privacy policy, we will post those changes on this page.</p>
+
+      <p>This document is CC-BY-SA. It was last updated March 7, 2018.</p>
+
+      <p>Originally adapted from the <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
     title: شرایط استفاده و سیاست رازداری %{instance}
   themes:
     contrast: ماستدون (کنتراست بالا)
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index ba459d244..718ad15ae 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -897,7 +897,7 @@ ko:
       video:
         one: "%{count} 영상"
         other: "%{count} 영상"
-    boosted_from_html: "%{acct_link} 님이 부스트"
+    boosted_from_html: "%{acct_link} 님으로부터 부스트"
     content_warning: '열람 주의: %{warning}'
     disallowed_hashtags:
       one: '허용 되지 않은 해시태그를 포함하고 있습니다: %{tags}'
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 1356d5275..0fab1ff1f 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -27,6 +27,7 @@ de:
         phrase: Wird unabhängig vom umgebenen Text oder Inhaltswarnung eines Beitrags verglichen
         scopes: Welche Schnittstellen der Applikation erlaubt sind. Wenn du einen Top-Level-Scope auswählst, dann musst du nicht jeden einzelnen darunter auswählen.
         setting_aggregate_reblogs: Zeige denselben Beitrag nicht nochmal an, wenn er erneut geteilt wurde (dies betrifft nur neulich erhaltene erneut geteilte Beiträge)
+        setting_default_sensitive: Heikle Medien werden erst nach einem Klick sichtbar
         setting_display_media_default: Verstecke Medien, die als sensibel markiert sind
         setting_display_media_hide_all: Alle Medien immer verstecken
         setting_display_media_show_all: Medien, die als sensibel markiert sind, immer anzeigen
@@ -39,8 +40,8 @@ de:
         name: 'Du möchtest vielleicht einen von diesen benutzen:'
       imports:
         data: CSV-Datei, die aus einem anderen Mastodon-Server exportiert wurde
-      inivte_request:
-        text: Dies wird uns helfen deine Anfrage besser zu verstehen
+      invite_request:
+        text: Dies wird uns helfen deine Anmeldungsanfrage besser zu verarbeiten
       sessions:
         otp: 'Gib den Zwei-Faktor-Authentisierungscode von deinem Telefon ein oder benutze einen deiner Wiederherstellungscodes:'
       user:
@@ -88,6 +89,7 @@ de:
         otp_attempt: Zwei-Faktor-Authentisierungs-Code
         password: Passwort
         phrase: Schlagwort oder Phrase
+        setting_advanced_layout: Fortgeschrittene Benutzeroberfläche benutzen
         setting_aggregate_reblogs: Gruppiere erneut geteilte Beiträge in Zeitleisten
         setting_auto_play_gif: Animierte GIFs automatisch abspielen
         setting_boost_modal: Bestätigungsdialog anzeigen, bevor ein Beitrag geteilt wird
@@ -130,6 +132,7 @@ de:
         reblog: E-Mail senden, wenn jemand meinen Beitrag teilt
         report: E-Mail senden, wenn ein neuer Bericht vorliegt
     'no': Nein
+    recommended: Empfohlen
     required:
       mark: "*"
       text: Pflichtfeld
diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml
index eaed42aba..5e445076b 100644
--- a/config/locales/simple_form.zh-CN.yml
+++ b/config/locales/simple_form.zh-CN.yml
@@ -2,19 +2,46 @@
 zh-CN:
   simple_form:
     hints:
+      account_warning_preset:
+        text: 你可以使用嘟文格式,在嘟文中加入 URL、话题标签和提及“@”
+      admin_account_action:
+        send_email_notification: 用户将收到对其帐号上发生的事的解释
+        text_html: 可选。你可以使用嘟文格式。你可以<a href="%{path}">预置警告</a>以节省时间
+        type_html: 用<strong>%{acct}</strong>选择做什么
+        warning_preset_id: 可选。你可以在预置文本末尾添加自定义文本
       defaults:
         autofollow: 通过邀请链接注册的用户将会自动关注你
         avatar: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 %{dimensions}px
         bot: 来自这个帐户的绝大多数操作都是自动进行的,并且可能无人监控
+        context: 过滤器的应用场景
         digest: 仅在你长时间未登录,且收到了私信时发送
+        discoverable_html: <a href="%{path}" target="_blank">目录</a> 让大家能根据兴趣和活动寻找用户。需要至少 %{min_followers} 位关注者
+        email: 我们会向你发送一封确认邮件
         fields: 这将会在个人资料页上以表格的形式展示,最多 4 个项目
         header: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 %{dimensions}px
+        inbox_url: 从你想要使用的中继的主页上复制 URL
+        irreversible: 已过滤的嘟文会不可逆转地消失,即便移除过滤器之后也一样
         locale: 用户界面、电子邮件和推送通知中使用的语言
         locked: 你需要手动审核所有关注请求
+        password: 至少需要8个字符
+        phrase: 匹配将无视大小写和嘟文的内容警告
+        scopes: 哪些 API 被允许使用。如果你选中了更高一级的范围,就不能单个选中了。
+        setting_aggregate_reblogs: 请不要显示最近已经被转嘟过的转嘟(只会影响新收到的转嘟)
+        setting_default_sensitive: 敏感内容默认隐藏,并在点击后显示
+        setting_display_media_default: 隐藏被标记为敏感内容的媒体
+        setting_display_media_hide_all: 总是隐藏所有媒体
+        setting_display_media_show_all: 总是显示被标记为敏感内容的媒体
         setting_hide_network: 你关注的人和关注你的人将不会在你的个人资料页上展示
         setting_noindex: 此设置会影响到你的公开个人资料以及嘟文页面
+        setting_show_application: 你用来发表嘟文的应用程序将会在你嘟文的详细内容中显示
+        username: 你的用户名在 %{domain} 上是独特的
+        whole_word: 如果关键词只包含字母和数字,就只会在整个词被匹配时才会套用
+      featured_tag:
+        name: 你可能想要使用以下之一:
       imports:
-        data: 请上传从其他 Mastodon 实例导出的 CSV 文件
+        data: 从其他 Mastodon 服务器导出的 CSV 文件
+      invite_request:
+        text: 这会有助于我们处理你的申请
       sessions:
         otp: 输入你手机应用上生成的双重认证码,或者任意一个恢复代码:
       user:
@@ -24,6 +51,18 @@ zh-CN:
         fields:
           name: 标签
           value: 内容
+      account_warning_preset:
+        text: 预置文本
+      admin_account_action:
+        send_email_notification: 通过邮件提醒此用户
+        text: 内容警告
+        type: 动作
+        types:
+          disable: 禁用
+          none: 忽略
+          silence: 静音
+          suspend: 停用并永久删除账户数据
+        warning_preset_id: 使用预置警告
       defaults:
         autofollow: 让被邀请人关注你的帐户
         avatar: 头像
@@ -31,13 +70,17 @@ zh-CN:
         chosen_languages: 语言过滤
         confirm_new_password: 确认新密码
         confirm_password: 确认密码
+        context: 过滤器场景
         current_password: 当前密码
         data: 数据文件
+        discoverable: 在本站用户资料目录中列出此账户
         display_name: 昵称
         email: 电子邮件地址
         expires_in: 失效时间
         fields: 个人资料附加信息
         header: 个人资料页横幅图片
+        inbox_url: 中继收件箱的 URL
+        irreversible: 放弃而非隐藏
         locale: 界面语言
         locked: 保护你的帐户(锁嘟)
         max_uses: 最大使用次数
@@ -45,15 +88,24 @@ zh-CN:
         note: 简介
         otp_attempt: 双重认证代码
         password: 密码
+        phrase: 关键词
+        setting_advanced_layout: 启用高级 web 界面
+        setting_aggregate_reblogs: 在时间线中合并转嘟
         setting_auto_play_gif: 自动播放 GIF 动画
         setting_boost_modal: 在转嘟前询问我
         setting_default_language: 发布语言
         setting_default_privacy: 嘟文默认可见范围
         setting_default_sensitive: 总是将我发送的媒体文件标记为敏感内容
         setting_delete_modal: 在删除嘟文前询问我
+        setting_display_media: 媒体展示
+        setting_display_media_default: 默认
+        setting_display_media_hide_all: 隐藏全部
+        setting_display_media_show_all: 显示全部
+        setting_expand_spoilers: 始终展开具有内容警告的嘟文
         setting_hide_network: 隐藏你的社交网络
         setting_noindex: 禁止搜索引擎建立索引
         setting_reduce_motion: 降低过渡动画效果
+        setting_show_application: 展示你用来发嘟的应用
         setting_system_font_ui: 使用系统默认字体
         setting_theme: 站点主题
         setting_unfollow_modal: 在取消关注前询问我
@@ -61,18 +113,26 @@ zh-CN:
         type: 导入数据类型
         username: 用户名
         username_or_email: 用户名或电子邮件地址
+        whole_word: 整个词条
+      featured_tag:
+        name: 话题标签
       interactions:
         must_be_follower: 屏蔽来自未关注我的用户的通知
         must_be_following: 屏蔽来自我未关注的用户的通知
         must_be_following_dm: 屏蔽来自我未关注的用户的私信
+      invite_request:
+        text: 你为什么想要加入?
       notification_emails:
         digest: 发送摘要邮件
         favourite: 当有用户收藏了我的嘟文时,发送电子邮件提醒我
         follow: 当有用户关注我时,发送电子邮件提醒我
         follow_request: 当有用户向我发送关注请求时,发送电子邮件提醒我
         mention: 当有用户在嘟文中提及我时,发送电子邮件提醒我
+        pending_account: 在有账户需要审核时,发送电子邮件提醒我
         reblog: 当有用户转嘟了我的嘟文时,发送电子邮件提醒我
+        report: 在提交新举报时,发送电子邮件提醒我
     'no': 否
+    recommended: 推荐
     required:
       mark: "*"
       text: 必填
diff --git a/crowdin.yml b/crowdin.yml
new file mode 100644
index 000000000..f60af46b2
--- /dev/null
+++ b/crowdin.yml
@@ -0,0 +1,3 @@
+files:
+  - source: /app/javascript/mastodon/locales/en.json
+    translation: /app/javascript/mastodon/locales/%two_letters_code%.json