about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJenkins <jenkins@jenkins.ninjawedding.org>2017-12-20 08:17:15 +0000
committerJenkins <jenkins@jenkins.ninjawedding.org>2017-12-20 08:17:15 +0000
commit6f11aa8383a6afc4ef1b82c25b5f933027278457 (patch)
treeda08b28a01f5d7b14120db225d778cf411f4811c
parent6cb47f17fc3718a0f86cb595787369515cb262d8 (diff)
parent81d29e41260b608bff545ed2283d9444ce28bbec (diff)
Merge remote-tracking branch 'tootsuite/master' into glitchsoc/master
-rw-r--r--app/javascript/mastodon/features/keyboard_shortcuts/index.js28
-rw-r--r--app/javascript/mastodon/features/notifications/components/column_settings.js32
-rw-r--r--app/javascript/mastodon/features/notifications/components/setting_toggle.js10
-rw-r--r--app/javascript/mastodon/locales/ko.json136
-rw-r--r--app/javascript/styles/mastodon/components.scss2
-rw-r--r--config/locales/ko.yml87
-rw-r--r--config/locales/simple_form.ko.yml6
7 files changed, 197 insertions, 104 deletions
diff --git a/app/javascript/mastodon/features/keyboard_shortcuts/index.js b/app/javascript/mastodon/features/keyboard_shortcuts/index.js
index 22991fcba..8531e03c0 100644
--- a/app/javascript/mastodon/features/keyboard_shortcuts/index.js
+++ b/app/javascript/mastodon/features/keyboard_shortcuts/index.js
@@ -33,59 +33,59 @@ export default class KeyboardShortcuts extends ImmutablePureComponent {
             </thead>
             <tbody>
               <tr>
-                <td><code>r</code></td>
+                <td><kbd>r</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.reply' defaultMessage='to reply' /></td>
               </tr>
               <tr>
-                <td><code>m</code></td>
+                <td><kbd>m</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.mention' defaultMessage='to mention author' /></td>
               </tr>
               <tr>
-                <td><code>f</code></td>
+                <td><kbd>f</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.favourite' defaultMessage='to favourite' /></td>
               </tr>
               <tr>
-                <td><code>b</code></td>
+                <td><kbd>b</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.boost' defaultMessage='to boost' /></td>
               </tr>
               <tr>
-                <td><code>enter</code></td>
+                <td><kbd>enter</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.enter' defaultMessage='to open status' /></td>
               </tr>
               <tr>
-                <td><code>up</code></td>
+                <td><kbd>up</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.up' defaultMessage='to move up in the list' /></td>
               </tr>
               <tr>
-                <td><code>down</code></td>
+                <td><kbd>down</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.down' defaultMessage='to move down in the list' /></td>
               </tr>
               <tr>
-                <td><code>1</code>-<code>9</code></td>
+                <td><kbd>1</kbd>-<kbd>9</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.column' defaultMessage='to focus a status in one of the columns' /></td>
               </tr>
               <tr>
-                <td><code>n</code></td>
+                <td><kbd>n</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.compose' defaultMessage='to focus the compose textarea' /></td>
               </tr>
               <tr>
-                <td><code>alt</code>+<code>n</code></td>
+                <td><kbd>alt</kbd>+<kbd>n</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.toot' defaultMessage='to start a brand new toot' /></td>
               </tr>
               <tr>
-                <td><code>backspace</code></td>
+                <td><kbd>backspace</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.back' defaultMessage='to navigate back' /></td>
               </tr>
               <tr>
-                <td><code>s</code></td>
+                <td><kbd>s</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.search' defaultMessage='to focus search' /></td>
               </tr>
               <tr>
-                <td><code>esc</code></td>
+                <td><kbd>esc</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.unfocus' defaultMessage='to un-focus compose textarea/search' /></td>
               </tr>
               <tr>
-                <td><code>?</code></td>
+                <td><kbd>?</kbd></td>
                 <td><FormattedMessage id='keyboard_shortcuts.legend' defaultMessage='to display this legend' /></td>
               </tr>
             </tbody>
diff --git a/app/javascript/mastodon/features/notifications/components/column_settings.js b/app/javascript/mastodon/features/notifications/components/column_settings.js
index 88a29d4d3..57cded4f1 100644
--- a/app/javascript/mastodon/features/notifications/components/column_settings.js
+++ b/app/javascript/mastodon/features/notifications/components/column_settings.js
@@ -40,10 +40,10 @@ export default class ColumnSettings extends React.PureComponent {
           <span id='notifications-follow' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow' defaultMessage='New followers:' /></span>
 
           <div className='column-settings__row'>
-            <SettingToggle prefix='notifications_desktop' settings={settings} settingKey={['alerts', 'follow']} onChange={onChange} label={alertStr} />
-            {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingKey={['alerts', 'follow']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}
-            <SettingToggle prefix='notifications' settings={settings} settingKey={['shows', 'follow']} onChange={onChange} label={showStr} />
-            <SettingToggle prefix='notifications' settings={settings} settingKey={['sounds', 'follow']} onChange={onChange} label={soundStr} />
+            <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow']} onChange={onChange} label={alertStr} />
+            {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}
+            <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow']} onChange={onChange} label={showStr} />
+            <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow']} onChange={onChange} label={soundStr} />
           </div>
         </div>
 
@@ -51,10 +51,10 @@ export default class ColumnSettings extends React.PureComponent {
           <span id='notifications-favourite' className='column-settings__section'><FormattedMessage id='notifications.column_settings.favourite' defaultMessage='Favourites:' /></span>
 
           <div className='column-settings__row'>
-            <SettingToggle prefix='notifications_desktop' settings={settings} settingKey={['alerts', 'favourite']} onChange={onChange} label={alertStr} />
-            {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingKey={['alerts', 'favourite']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}
-            <SettingToggle prefix='notifications' settings={settings} settingKey={['shows', 'favourite']} onChange={onChange} label={showStr} />
-            <SettingToggle prefix='notifications' settings={settings} settingKey={['sounds', 'favourite']} onChange={onChange} label={soundStr} />
+            <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'favourite']} onChange={onChange} label={alertStr} />
+            {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'favourite']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}
+            <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'favourite']} onChange={onChange} label={showStr} />
+            <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'favourite']} onChange={onChange} label={soundStr} />
           </div>
         </div>
 
@@ -62,10 +62,10 @@ export default class ColumnSettings extends React.PureComponent {
           <span id='notifications-mention' className='column-settings__section'><FormattedMessage id='notifications.column_settings.mention' defaultMessage='Mentions:' /></span>
 
           <div className='column-settings__row'>
-            <SettingToggle prefix='notifications_desktop' settings={settings} settingKey={['alerts', 'mention']} onChange={onChange} label={alertStr} />
-            {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingKey={['alerts', 'mention']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}
-            <SettingToggle prefix='notifications' settings={settings} settingKey={['shows', 'mention']} onChange={onChange} label={showStr} />
-            <SettingToggle prefix='notifications' settings={settings} settingKey={['sounds', 'mention']} onChange={onChange} label={soundStr} />
+            <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'mention']} onChange={onChange} label={alertStr} />
+            {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'mention']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}
+            <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'mention']} onChange={onChange} label={showStr} />
+            <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'mention']} onChange={onChange} label={soundStr} />
           </div>
         </div>
 
@@ -73,10 +73,10 @@ export default class ColumnSettings extends React.PureComponent {
           <span id='notifications-reblog' className='column-settings__section'><FormattedMessage id='notifications.column_settings.reblog' defaultMessage='Boosts:' /></span>
 
           <div className='column-settings__row'>
-            <SettingToggle prefix='notifications_desktop' settings={settings} settingKey={['alerts', 'reblog']} onChange={onChange} label={alertStr} />
-            {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingKey={['alerts', 'reblog']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}
-            <SettingToggle prefix='notifications' settings={settings} settingKey={['shows', 'reblog']} onChange={onChange} label={showStr} />
-            <SettingToggle prefix='notifications' settings={settings} settingKey={['sounds', 'reblog']} onChange={onChange} label={soundStr} />
+            <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'reblog']} onChange={onChange} label={alertStr} />
+            {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'reblog']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}
+            <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'reblog']} onChange={onChange} label={showStr} />
+            <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'reblog']} onChange={onChange} label={soundStr} />
           </div>
         </div>
       </div>
diff --git a/app/javascript/mastodon/features/notifications/components/setting_toggle.js b/app/javascript/mastodon/features/notifications/components/setting_toggle.js
index 281359d2a..ac2211e48 100644
--- a/app/javascript/mastodon/features/notifications/components/setting_toggle.js
+++ b/app/javascript/mastodon/features/notifications/components/setting_toggle.js
@@ -8,23 +8,23 @@ export default class SettingToggle extends React.PureComponent {
   static propTypes = {
     prefix: PropTypes.string,
     settings: ImmutablePropTypes.map.isRequired,
-    settingKey: PropTypes.array.isRequired,
+    settingPath: PropTypes.array.isRequired,
     label: PropTypes.node.isRequired,
     meta: PropTypes.node,
     onChange: PropTypes.func.isRequired,
   }
 
   onChange = ({ target }) => {
-    this.props.onChange(this.props.settingKey, target.checked);
+    this.props.onChange(this.props.settingPath, target.checked);
   }
 
   render () {
-    const { prefix, settings, settingKey, label, meta } = this.props;
-    const id = ['setting-toggle', prefix, ...settingKey].filter(Boolean).join('-');
+    const { prefix, settings, settingPath, label, meta } = this.props;
+    const id = ['setting-toggle', prefix, ...settingPath].filter(Boolean).join('-');
 
     return (
       <div className='setting-toggle'>
-        <Toggle id={id} checked={settings.getIn(settingKey)} onChange={this.onChange} onKeyDown={this.onKeyDown} />
+        <Toggle id={id} checked={settings.getIn(settingPath)} onChange={this.onChange} onKeyDown={this.onKeyDown} />
         <label htmlFor={id} className='setting-toggle__label'>{label}</label>
         {meta && <span className='setting-meta__label'>{meta}</span>}
       </div>
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 472a52a99..0798fa7cf 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -1,52 +1,52 @@
 {
   "account.block": "차단",
   "account.block_domain": "{domain} 전체를 숨김",
-  "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
+  "account.disclaimer_full": "여기 있는 정보는 유저의 프로파일을 정확히 반영하지 못 할 수도 있습니다.",
   "account.edit_profile": "프로필 편집",
   "account.follow": "팔로우",
   "account.followers": "팔로워",
   "account.follows": "팔로우",
   "account.follows_you": "날 팔로우합니다",
-  "account.hide_reblogs": "Hide boosts from @{name}",
+  "account.hide_reblogs": "@{name}의 부스트를 숨기기",
   "account.media": "미디어",
   "account.mention": "답장",
-  "account.moved_to": "{name} has moved to:",
+  "account.moved_to": "{name}는 계정을 이동했습니다:",
   "account.mute": "뮤트",
-  "account.mute_notifications": "Mute notifications from @{name}",
+  "account.mute_notifications": "@{name}의 알림을 뮤트",
   "account.posts": "포스트",
   "account.report": "신고",
   "account.requested": "승인 대기 중",
-  "account.share": "Share @{name}'s profile",
-  "account.show_reblogs": "Show boosts from @{name}",
+  "account.share": "@{name}의 프로파일 공유",
+  "account.show_reblogs": "@{name}의 부스트 보기",
   "account.unblock": "차단 해제",
   "account.unblock_domain": "{domain} 숨김 해제",
   "account.unfollow": "팔로우 해제",
   "account.unmute": "뮤트 해제",
-  "account.unmute_notifications": "Unmute notifications from @{name}",
+  "account.unmute_notifications": "@{name}의 알림 뮤트 해제",
   "account.view_full_profile": "전체 프로필 보기",
   "boost_modal.combo": "다음부터 {combo}를 누르면 이 과정을 건너뛸 수 있습니다.",
   "bundle_column_error.body": "Something went wrong while loading this component.",
-  "bundle_column_error.retry": "Try again",
-  "bundle_column_error.title": "Network error",
-  "bundle_modal_error.close": "Close",
+  "bundle_column_error.retry": "다시 시도",
+  "bundle_column_error.title": "네트워크 에러",
+  "bundle_modal_error.close": "닫기",
   "bundle_modal_error.message": "Something went wrong while loading this component.",
-  "bundle_modal_error.retry": "Try again",
+  "bundle_modal_error.retry": "다시 시도",
   "column.blocks": "차단 중인 사용자",
   "column.community": "로컬 타임라인",
   "column.favourites": "즐겨찾기",
   "column.follow_requests": "팔로우 요청",
   "column.home": "홈",
-  "column.lists": "Lists",
+  "column.lists": "리스트",
   "column.mutes": "뮤트 중인 사용자",
   "column.notifications": "알림",
   "column.pins": "고정된 툿",
   "column.public": "연합 타임라인",
   "column_back_button.label": "돌아가기",
-  "column_header.hide_settings": "Hide settings",
-  "column_header.moveLeft_settings": "Move column to the left",
-  "column_header.moveRight_settings": "Move column to the right",
+  "column_header.hide_settings": "설정 숨기기",
+  "column_header.moveLeft_settings": "왼쪽으로 이동",
+  "column_header.moveRight_settings": "오른쪽으로 이동",
   "column_header.pin": "고정하기",
-  "column_header.show_settings": "Show settings",
+  "column_header.show_settings": "설정 보이기",
   "column_header.unpin": "고정 해제",
   "column_subheading.navigation": "내비게이션",
   "column_subheading.settings": "설정",
@@ -63,35 +63,35 @@
   "confirmations.block.message": "정말로 {name}를 차단하시겠습니까?",
   "confirmations.delete.confirm": "삭제",
   "confirmations.delete.message": "정말로 삭제하시겠습니까?",
-  "confirmations.delete_list.confirm": "Delete",
-  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+  "confirmations.delete_list.confirm": "삭제",
+  "confirmations.delete_list.message": "정말로 이 리스트를 삭제하시겠습니까?",
   "confirmations.domain_block.confirm": "도메인 전체를 숨김",
   "confirmations.domain_block.message": "정말로 {domain} 전체를 숨기시겠습니까? 대부분의 경우 개별 차단이나 뮤트로 충분합니다.",
   "confirmations.mute.confirm": "뮤트",
   "confirmations.mute.message": "정말로 {name}를 뮤트하시겠습니까?",
-  "confirmations.unfollow.confirm": "Unfollow",
-  "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
+  "confirmations.unfollow.confirm": "언팔로우",
+  "confirmations.unfollow.message": "정말로 {name}를 언팔로우하시겠습니까?",
   "embed.instructions": "아래의 코드를 복사하여 대화를 원하는 곳으로 공유하세요.",
   "embed.preview": "다음과 같이 표시됩니다:",
   "emoji_button.activity": "활동",
-  "emoji_button.custom": "Custom",
+  "emoji_button.custom": "커스텀",
   "emoji_button.flags": "국기",
   "emoji_button.food": "음식",
   "emoji_button.label": "emoji를 추가",
   "emoji_button.nature": "자연",
-  "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+  "emoji_button.not_found": "없어!! (╯°□°)╯︵ ┻━┻",
   "emoji_button.objects": "물건",
   "emoji_button.people": "사람들",
-  "emoji_button.recent": "Frequently used",
+  "emoji_button.recent": "자주 사용 됨",
   "emoji_button.search": "검색...",
-  "emoji_button.search_results": "Search results",
+  "emoji_button.search_results": "검색 결과",
   "emoji_button.symbols": "기호",
   "emoji_button.travel": "여행과 장소",
   "empty_column.community": "로컬 타임라인에 아무 것도 없습니다. 아무거나 적어 보세요!",
   "empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.",
   "empty_column.home": "아직 아무도 팔로우 하고 있지 않습니다. {public}를 보러 가거나, 검색하여 다른 사용자를 찾아 보세요.",
   "empty_column.home.public_timeline": "연합 타임라인",
-  "empty_column.list": "There is nothing in this list yet.",
+  "empty_column.list": "리스트에 아직 아무 것도 없습니다.",
   "empty_column.notifications": "아직 알림이 없습니다. 다른 사람과 대화를 시작해 보세요!",
   "empty_column.public": "여기엔 아직 아무 것도 없습니다! 공개적으로 무언가 포스팅하거나, 다른 인스턴스 유저를 팔로우 해서 가득 채워보세요!",
   "follow_request.authorize": "허가",
@@ -107,46 +107,46 @@
   "home.column_settings.show_reblogs": "부스트 표시",
   "home.column_settings.show_replies": "답글 표시",
   "home.settings": "컬럼 설정",
-  "keyboard_shortcuts.back": "to navigate back",
-  "keyboard_shortcuts.boost": "to boost",
-  "keyboard_shortcuts.column": "to focus a status in one of the columns",
-  "keyboard_shortcuts.compose": "to focus the compose textarea",
-  "keyboard_shortcuts.description": "Description",
-  "keyboard_shortcuts.down": "to move down in the list",
-  "keyboard_shortcuts.enter": "to open status",
-  "keyboard_shortcuts.favourite": "to favourite",
-  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
-  "keyboard_shortcuts.hotkey": "Hotkey",
-  "keyboard_shortcuts.legend": "to display this legend",
-  "keyboard_shortcuts.mention": "to mention author",
-  "keyboard_shortcuts.reply": "to reply",
-  "keyboard_shortcuts.search": "to focus search",
-  "keyboard_shortcuts.toot": "to start a brand new toot",
-  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
-  "keyboard_shortcuts.up": "to move up in the list",
+  "keyboard_shortcuts.back": "뒤로가기",
+  "keyboard_shortcuts.boost": "부스트",
+  "keyboard_shortcuts.column": "해당 열에 포커스",
+  "keyboard_shortcuts.compose": "작성창으로 포커스",
+  "keyboard_shortcuts.description": "설명",
+  "keyboard_shortcuts.down": "리스트에서 아래로 이동",
+  "keyboard_shortcuts.enter": "열기",
+  "keyboard_shortcuts.favourite": "관심글 지정",
+  "keyboard_shortcuts.heading": "키보드 단축키",
+  "keyboard_shortcuts.hotkey": "핫키",
+  "keyboard_shortcuts.legend": "이 도움말 표시",
+  "keyboard_shortcuts.mention": "멘션",
+  "keyboard_shortcuts.reply": "답장",
+  "keyboard_shortcuts.search": "검색창에 포커스",
+  "keyboard_shortcuts.toot": "새 툿 작성",
+  "keyboard_shortcuts.unfocus": "작성창에서 포커스 해제",
+  "keyboard_shortcuts.up": "리스트에서 위로 이동",
   "lightbox.close": "닫기",
-  "lightbox.next": "Next",
-  "lightbox.previous": "Previous",
-  "lists.account.add": "Add to list",
-  "lists.account.remove": "Remove from list",
-  "lists.delete": "Delete list",
-  "lists.edit": "Edit list",
-  "lists.new.create": "Add list",
-  "lists.new.title_placeholder": "New list title",
-  "lists.search": "Search among people you follow",
+  "lightbox.next": "다음",
+  "lightbox.previous": "이전",
+  "lists.account.add": "리스트에 추가",
+  "lists.account.remove": "리스트에서 제거",
+  "lists.delete": "리스트 삭제",
+  "lists.edit": "리스트 편집",
+  "lists.new.create": "리스트 추가",
+  "lists.new.title_placeholder": "새 리스트의 이름",
+  "lists.search": "팔로우 중인 사람들 중에서 찾기",
   "lists.subheading": "Your lists",
   "loading_indicator.label": "불러오는 중...",
   "media_gallery.toggle_visible": "표시 전환",
   "missing_indicator.label": "찾을 수 없습니다",
-  "mute_modal.hide_notifications": "Hide notifications from this user?",
+  "mute_modal.hide_notifications": "이 사용자로부터의 알림을 뮤트하시겠습니까?",
   "navigation_bar.blocks": "차단한 사용자",
   "navigation_bar.community_timeline": "로컬 타임라인",
   "navigation_bar.edit_profile": "프로필 편집",
   "navigation_bar.favourites": "즐겨찾기",
   "navigation_bar.follow_requests": "팔로우 요청",
   "navigation_bar.info": "이 인스턴스에 대해서",
-  "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
-  "navigation_bar.lists": "Lists",
+  "navigation_bar.keyboard_shortcuts": "키보드 단축키",
+  "navigation_bar.lists": "리스트",
   "navigation_bar.logout": "로그아웃",
   "navigation_bar.mutes": "뮤트 중인 사용자",
   "navigation_bar.pins": "고정된 툿",
@@ -162,8 +162,8 @@
   "notifications.column_settings.favourite": "즐겨찾기",
   "notifications.column_settings.follow": "새 팔로워",
   "notifications.column_settings.mention": "답글",
-  "notifications.column_settings.push": "Push notifications",
-  "notifications.column_settings.push_meta": "This device",
+  "notifications.column_settings.push": "푸시 알림",
+  "notifications.column_settings.push_meta": "이 장치",
   "notifications.column_settings.reblog": "부스트",
   "notifications.column_settings.show": "컬럼에 표시",
   "notifications.column_settings.sound": "효과음 재생",
@@ -220,7 +220,7 @@
   "status.load_more": "더 보기",
   "status.media_hidden": "미디어 숨겨짐",
   "status.mention": "답장",
-  "status.more": "More",
+  "status.more": "자세히",
   "status.mute_conversation": "이 대화를 뮤트",
   "status.open": "상세 정보 표시",
   "status.pin": "고정",
@@ -231,7 +231,7 @@
   "status.report": "신고",
   "status.sensitive_toggle": "클릭해서 표시하기",
   "status.sensitive_warning": "민감한 미디어",
-  "status.share": "Share",
+  "status.share": "공유",
   "status.show_less": "숨기기",
   "status.show_more": "더 보기",
   "status.unmute_conversation": "이 대화의 뮤트 해제하기",
@@ -241,19 +241,19 @@
   "tabs_bar.home": "홈",
   "tabs_bar.local_timeline": "로컬",
   "tabs_bar.notifications": "알림",
-  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
+  "ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
   "upload_area.title": "드래그 & 드롭으로 업로드",
   "upload_button.label": "미디어 추가",
   "upload_form.description": "Describe for the visually impaired",
   "upload_form.undo": "재시도",
   "upload_progress.label": "업로드 중...",
-  "video.close": "Close video",
-  "video.exit_fullscreen": "Exit full screen",
-  "video.expand": "Expand video",
-  "video.fullscreen": "Full screen",
-  "video.hide": "Hide video",
-  "video.mute": "Mute sound",
-  "video.pause": "Pause",
-  "video.play": "Play",
-  "video.unmute": "Unmute sound"
+  "video.close": "동영상 닫기",
+  "video.exit_fullscreen": "전체화면 나가기",
+  "video.expand": "동영상 확장",
+  "video.fullscreen": "전체화면",
+  "video.hide": "동영상 숨기기",
+  "video.mute": "음소거",
+  "video.pause": "일시정지",
+  "video.play": "재생",
+  "video.unmute": "음소거 해제"
 }
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index cf15def68..b5655975a 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -2104,7 +2104,7 @@
     padding: 0 10px 8px;
   }
 
-  code {
+  kbd {
     display: inline-block;
     padding: 3px 5px;
     background-color: lighten($ui-base-color, 8%);
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 333bcc689..a60884b27 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -64,6 +64,7 @@ ko:
       by_domain: 도메인
       confirm: 확인
       confirmed: 확인됨
+      demote: 모더레이터 강등
       disable: 비활성화
       disable_two_factor_authentication: 2단계 인증을 비활성화
       disabled: 비활성화된
@@ -86,6 +87,7 @@ ko:
         title: 위치
       login_status: 로그인 상태
       media_attachments: 첨부된 미디어
+      memorialize: 메모리엄으로 전환
       moderation:
         all: 전체
         silenced: 침묵 중
@@ -102,6 +104,7 @@ ko:
       outbox_url: Outbox URL
       perform_full_suspension: 완전히 정지시키기
       profile_url: 프로필 URL
+      promote: 모더레이터로 승급
       protocol: Protocol
       public: 전체 공개
       push_subscription_expires: PuSH 구독 기간 만료
@@ -112,6 +115,8 @@ ko:
       role: 권한
       roles:
         admin: 관리자
+        moderator: 모더레이터
+        staff: 스태프
         user: 사용자
       salmon_url: Salmon URL
       search: 검색
@@ -129,7 +134,34 @@ ko:
       unsubscribe: 구독 해제
       username: 아이디
       web: Web
+    action_logs:
+      actions:
+        confirm_user: "%{name}이 %{target}의 이메일 주소를 컨펌했습니다"
+        create_custom_emoji: "%{name}이 새로운 에모지 %{target}를 추가했습니다"
+        create_domain_block: "%{name}이 도메인 %{target}를 차단했습니다"
+        create_email_domain_block: "%{name}이 이메일 도메인 %{target}를 차단했습니다"
+        demote_user: "%{name}이 %{target}을 강등했습니다"
+        destroy_domain_block: "%{name}이 도메인 %{target}의 차단을 해제했습니다"
+        destroy_email_domain_block: "%{name}이 이메일 도메인 %{target}을 화이트리스트에 넣었습니다"
+        destroy_status: "%{name}이 %{target}의 툿을 삭제했습니다"
+        disable_2fa_user: "%{name}이 %{target}의 2FA를 비활성화 했습니다"
+        disable_custom_emoji: "%{name}이 에모지 %{target}를 비활성화 했습니다"
+        disable_user: "%{name}이 %{target}의 로그인을 비활성화 했습니다"
+        enable_custom_emoji: "%{name}이 에모지 %{target}를 활성화 했습니다"
+        enable_user: "%{name}이 %{target}의 로그인을 활성화 했습니다"
+        memorialize_account: "%{name}이 %{target}의 계정을 메모리엄으로 전환했습니다"
+        promote_user: "%{name}이 %{target}를 승급시켰습니다"
+        reset_password_user: "%{name}이 %{target}의 암호를 초기화했습니다"
+        resolve_report: "%{name}이 %{target} 신고를 처리됨으로 변경하였습니다"
+        silence_account: "%{name}이 %{target}의 계정을 뮤트시켰습니다"
+        suspend_account: "%{name}이 %{target}의 계정을 정지시켰습니다 "
+        unsilence_account: "%{name}이 %{target}에 대한 뮤트를 해제했습니다"
+        unsuspend_account: "%{name}이 %{target}에 대한 정지를 해제했습니다"
+        update_custom_emoji: "%{name}이 에모지 %{target}를 업데이트 했습니다"
+        update_status: "%{name}이 %{target}의 상태를 업데이트 했습니다"
+      title: 감사 기록
     custom_emojis:
+      by_domain: 도메인
       copied_msg: 성공적으로 에모지의 로컬 복사본을 생성했습니다
       copy: 복사
       copy_failed_msg: 에모지의 로컬 복사본을 만드는 데 실패하였습니다
@@ -142,11 +174,16 @@ ko:
       enable: 활성화
       enabled_msg: 성공적으로 활성화하였습니다
       image_hint: 50KB 이하의 PNG
+      listed: 목록에 실림
       new:
         title: 새 커스텀 에모지 추가
+      overwrite: 덮어쓰기
       shortcode: 짧은 코드
       shortcode_hint: 최소 2글자, 영문자, 숫자, _만 사용 가능
       title: 커스텀 에모지
+      unlisted: 목록에 없음
+      update_failed_msg: 에모지를 업데이트 할 수 없습니다
+      updated_msg: 에모지가 성공적으로 업데이트 되었습니다!
       upload: 업로드
     domain_blocks:
       add_new: 추가하기
@@ -196,6 +233,13 @@ ko:
       reset: 리셋
       search: 검색
       title: 알려진 인스턴스들
+    invites:
+      filter:
+        all: 모두
+        available: 사용가능
+        expired: 만료됨
+        title: 필터
+      title: 초대
     reports:
       action_taken_by: 신고 처리자
       are_you_sure: 정말로 실행하시겠습니까?
@@ -234,9 +278,15 @@ ko:
         deletion:
           desc_html: 유저가 자신의 계정을 삭제할 수 있도록 설정합니다.
           title: 계정 삭제를 허가함
+        min_invite_role:
+          disabled: 아무도 못 하게
+          title: 초대링크를 만들 수 있는 권한
         open:
           desc_html: 유저가 자신의 계정을 생성할 수 있도록 설정합니다.
           title: 신규 계정 등록을 받음
+      show_staff_badge:
+        desc_html: 유저 페이지에 스태프 배지를 표시합니다.
+        title: 스태프 배지 표시
       site_description:
         desc_html: 탑 페이지와 meta 태그에 사용됩니다.<br>HTML 태그, 예를 들어<code>&lt;a&gt;</code> 태그와 <code>&lt;em&gt;</code> 태그를 사용할 수 있습니다.
         title: 사이트 설명
@@ -303,6 +353,8 @@ ko:
     invalid_reset_password_token: 비밀번호 리셋 토큰이 올바르지 못하거나 기간이 만료되었습니다. 다시 요청해주세요.
     login: 로그인
     logout: 로그아웃
+    migrate_account: 계정 옮기기
+    migrate_account_html: 이 계정을 다른 계정으로 리디렉션 하길 원하는 경우 <a href="%{path}">여기</a>에서 설정할 수 있습니다.
     register: 등록하기
     resend_confirmation: 확인 메일을 다시 보내기
     reset_password: 비밀번호 재설정
@@ -384,12 +436,43 @@ ko:
       following: 팔로우 중인 계정 목록
       muting: 뮤트 중인 계정 목록
     upload: 업로드
+  in_memoriam_html: 메모리엄에 있음.
+  invites:
+    delete: 비활성화
+    expired: 만료됨
+    expires_in:
+      '1800': 30 분
+      '21600': 6 시간
+      '3600': 1 시간
+      '43200': 12 시간
+      '86400': 하루
+    expires_in_prompt: 영원히
+    generate: 생성
+    max_uses:
+      one: 일회용
+      other: "%{count} 회"
+    max_uses_prompt: 제한 없음
+    prompt: 이 인스턴스에 대한 초대 링크를 만들고 공유합니다
+    table:
+      expires_at: 만료
+      uses: 사용됨
+    title: 초대
   landing_strip_html: "<strong>%{name}</strong> 님은 %{link_to_root_path} 인스턴스의 사용자입니다. 계정을 가지고 있다면 팔로우 하거나 대화할 수 있습니다."
   landing_strip_signup_html: 아직 계정이 없다면 <a href="%{sign_up_path}">여기서</a> 등록할 수 있습니다.
+  lists:
+    errors:
+      limit: 리스트 최대치에 도달했습니다
   media_attachments:
     validations:
       images_and_video: 이미 사진이 첨부되어 있으므로 동영상을 첨부할 수 없습니다.
       too_many: 최대 4개까지 첨부할 수 있습니다.
+  migrations:
+    acct: 새 계정의 username@domain
+    currently_redirecting: '당신의 프로파일은 여기로 리디렉션 됩니다:'
+    proceed: 저장
+    updated_msg: 계정 이동 설정이 저장되었습니다!
+  moderation:
+    title: 모더레이션
   notification_mailer:
     digest:
       body: "%{instance} 에서 마지막 로그인 뒤로 일어난 일:"
@@ -502,6 +585,7 @@ ko:
     export: 데이터 내보내기
     followers: 신뢰 중인 인스턴스
     import: 데이터 가져오기
+    migrate: 계정 이동
     notifications: 알림
     preferences: 사용자 설정
     settings: 설정
@@ -516,6 +600,7 @@ ko:
       private: 비공개 툿은 고정될 수 없습니다.
       reblog: 부스트는 고정될 수 없습니다.
     show_more: 더 보기
+    title: '%{name}: "%{quote}"'
     visibilities:
       private: 비공개
       private_long: 팔로워에게만 공개됩니다
@@ -530,6 +615,8 @@ ko:
     sensitive_content: 민감한 컨텐츠
   terms:
     title: "%{instance} 이용약관과 개인정보 취급 방침"
+  themes:
+    default: Mastodon
   time:
     formats:
       default: "%Y년 %m월 %d일 %H:%M"
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index e2a678121..48306f418 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -4,6 +4,7 @@ ko:
     hints:
       defaults:
         avatar: PNG, GIF 혹은 JPG. 최대 2MB. 120x120px로 다운스케일 됨
+        digest: 오랫동안 활동하지 않았을 때 받은 멘션들에 대한 요약 받기.
         display_name:
           one: <span class="name-counter">1</span> 글자 남음
           other: <span class="name-counter">%{count}</span> 글자 남음
@@ -29,9 +30,12 @@ ko:
         data: 데이터
         display_name: 표시되는 이름
         email: 이메일 주소
+        expires_in: 만료시각
+        filtered_languages: 숨긴 언어들
         header: 헤더
         locale: 언어
         locked: 계정 잠금
+        max_uses: 사용 횟수 제한
         new_password: 새로운 비밀번호 입력
         note: 자기소개
         otp_attempt: 2단계 인증 코드
@@ -42,6 +46,7 @@ ko:
         setting_default_sensitive: 미디어를 언제나 민감한 컨텐츠로 설정
         setting_delete_modal: 툿 삭제 전 확인 창을 표시
         setting_noindex: 검색엔진의 인덱싱을 거절
+        setting_reduce_motion: 애니메이션 줄이기
         setting_system_font_ui: 시스템의 초기 설정 폰트를 사용
         setting_theme: 사이트 테마
         setting_unfollow_modal: 언팔로우 전 언팔로우 확인 표시
@@ -51,6 +56,7 @@ ko:
       interactions:
         must_be_follower: 나를 팔로우 하지 않는 사람에게서 온 알림을 차단
         must_be_following: 내가 팔로우 하지 않는 사람에게서 온 알림을 차단
+        must_be_following_dm: 내가 팔로우 하지 않은 사람에게서 오는 다이렉트메시지를 차단
       notification_emails:
         digest: 요약 이메일 보내기
         favourite: 누군가 내 상태를 즐겨찾기로 등록했을 때 이메일 보내기