From 949f47063b0114cd72630d3862df96429835f925 Mon Sep 17 00:00:00 2001 From: taehoon Date: Tue, 12 Nov 2019 10:40:36 -0500 Subject: [PATCH 01/38] show N/A when count is hidden --- src/components/user_card/user_card.js | 6 ++++++ src/components/user_card/user_card.vue | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/user_card/user_card.js b/src/components/user_card/user_card.js index cc8a1ed6..a9278200 100644 --- a/src/components/user_card/user_card.js +++ b/src/components/user_card/user_card.js @@ -93,6 +93,12 @@ export default { const roleTitle = rights.admin ? 'admin' : 'moderator' return validRole && roleTitle }, + hideFollowsCount () { + return this.isOtherUser && this.user.hide_follows_count + }, + hideFollowersCount () { + return this.isOtherUser && this.user.hide_followers_count + }, ...mapGetters(['mergedConfig']) }, components: { diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index 6f3c958e..e54d30d4 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -208,14 +208,14 @@ @click.prevent="setProfileView('friends')" >
{{ $t('user_card.followees') }}
- {{ user.friends_count }} + {{ hideFollowsCount ? 'N/A' : user.friends_count }}
{{ $t('user_card.followers') }}
- {{ user.followers_count }} + {{ hideFollowersCount ? 'N/A' : user.followers_count }}
From 85685d64788193f3f40ce14d3066c48c4523dde0 Mon Sep 17 00:00:00 2001 From: taehoon Date: Tue, 12 Nov 2019 10:47:49 -0500 Subject: [PATCH 02/38] add a translation --- src/components/user_card/user_card.vue | 4 ++-- src/i18n/en.json | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index e54d30d4..421a1236 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -208,14 +208,14 @@ @click.prevent="setProfileView('friends')" >
{{ $t('user_card.followees') }}
- {{ hideFollowsCount ? 'N/A' : user.friends_count }} + {{ hideFollowsCount ? $t('user_card.na') : user.friends_count }}
{{ $t('user_card.followers') }}
- {{ hideFollowersCount ? 'N/A' : user.followers_count }} + {{ hideFollowersCount ? $t('user_card.na') : user.followers_count }}
diff --git a/src/i18n/en.json b/src/i18n/en.json index ead333c1..b9519617 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -574,6 +574,7 @@ "mention": "Mention", "mute": "Mute", "muted": "Muted", + "na": "N/A", "per_day": "per day", "remote_follow": "Remote follow", "report": "Report", From 58839ecef895bbf7cf5fd94ed048a0736ee951fe Mon Sep 17 00:00:00 2001 From: taehoon Date: Tue, 12 Nov 2019 13:31:30 -0500 Subject: [PATCH 03/38] change N/A to Hidden --- src/components/user_card/user_card.vue | 4 ++-- src/i18n/en.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index 421a1236..96acf610 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -208,14 +208,14 @@ @click.prevent="setProfileView('friends')" >
{{ $t('user_card.followees') }}
- {{ hideFollowsCount ? $t('user_card.na') : user.friends_count }} + {{ hideFollowsCount ? $t('user_card.hidden') : user.friends_count }}
{{ $t('user_card.followers') }}
- {{ hideFollowersCount ? $t('user_card.na') : user.followers_count }} + {{ hideFollowersCount ? $t('user_card.hidden') : user.followers_count }}
diff --git a/src/i18n/en.json b/src/i18n/en.json index b9519617..ad3e671d 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -569,12 +569,12 @@ "followers": "Followers", "following": "Following!", "follows_you": "Follows you!", + "hidden": "Hidden", "its_you": "It's you!", "media": "Media", "mention": "Mention", "mute": "Mute", "muted": "Muted", - "na": "N/A", "per_day": "per day", "remote_follow": "Remote follow", "report": "Report", From 50dc9df8a44d408dd83ae4b17c407fa36c85cf8e Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 14 Nov 2019 00:18:14 +0200 Subject: [PATCH 04/38] adds greentext, also small fixes --- src/components/status/status.js | 49 +++++++++-- .../tiny_post_html_processor.service.js | 84 +++++++++++++++++++ 2 files changed, 124 insertions(+), 9 deletions(-) create mode 100644 src/services/tiny_post_html_processor/tiny_post_html_processor.service.js diff --git a/src/components/status/status.js b/src/components/status/status.js index 4fbd5ac3..6dbb2199 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -13,10 +13,11 @@ import Timeago from '../timeago/timeago.vue' import StatusPopover from '../status_popover/status_popover.vue' import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator' import fileType from 'src/services/file_type/file_type.service' +import { processHtml } from 'src/services/tiny_post_html_processor/tiny_post_html_processor.service.js' import { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js' import { mentionMatchesUrl, extractTagFromUrl } from 'src/services/matcher/matcher.service.js' import { filter, unescape, uniqBy } from 'lodash' -import { mapGetters } from 'vuex' +import { mapGetters, mapState } from 'vuex' const Status = { name: 'Status', @@ -42,8 +43,8 @@ const Status = { showingTall: this.inConversation && this.focused, showingLongSubject: false, error: null, + // Initial state expandingSubject: !this.$store.getters.mergedConfig.collapseMessageWithSubject, - betterShadow: this.$store.state.interface.browserSupport.cssFilter } }, computed: { @@ -103,7 +104,7 @@ const Status = { return this.$store.state.statuses.allStatusesObject[this.status.id] }, loggedIn () { - return !!this.$store.state.users.currentUser + return !!this.currentUser }, muteWordHits () { const statusText = this.status.text.toLowerCase() @@ -163,7 +164,7 @@ const Status = { if (this.inConversation || !this.isReply) { return false } - if (this.status.user.id === this.$store.state.users.currentUser.id) { + if (this.status.user.id === this.currentUser.id) { return false } if (this.status.type === 'retweet') { @@ -178,7 +179,7 @@ const Status = { if (checkFollowing && taggedUser && taggedUser.following) { return false } - if (this.status.attentions[i].id === this.$store.state.users.currentUser.id) { + if (this.status.attentions[i].id === this.currentUser.id) { return false } } @@ -255,11 +256,37 @@ const Status = { maxThumbnails () { return this.mergedConfig.maxThumbnails }, + postBodyHtml () { + const html = this.status.statusnet_html + + try { + if (html.includes('>')) { + // This checks if post has '>' at the beginning, excluding mentions so that @mention >impying works + return processHtml(html, (string) => { + if (string.includes('>') && + string + .replace(/<[^>]+?>/gi, '') // remove all tags + .replace(/@\w+/gi, '') // remove mentions (even failed ones) + .trim() + .startsWith('>')) { + return `${string}` + } else { + return string + } + }) + } else { + return html + } + } catch (e) { + console.err('Failed to process status html', e) + return html + } + }, contentHtml () { if (!this.status.summary_html) { - return this.status.statusnet_html + return this.postBodyHtml } - return this.status.summary_html + '
' + this.status.statusnet_html + return this.status.summary_html + '
' + this.postBodyHtml }, combinedFavsAndRepeatsUsers () { // Use the status from the global status repository since favs and repeats are saved in it @@ -270,7 +297,7 @@ const Status = { return uniqBy(combinedUsers, 'id') }, ownStatus () { - return this.status.user.id === this.$store.state.users.currentUser.id + return this.status.user.id === this.currentUser.id }, tags () { return this.status.tags.filter(tagObj => tagObj.hasOwnProperty('name')).map(tagObj => tagObj.name).join(' ') @@ -278,7 +305,11 @@ const Status = { hidePostStats () { return this.mergedConfig.hidePostStats }, - ...mapGetters(['mergedConfig']) + ...mapGetters(['mergedConfig']), + ...mapState({ + betterShadow: state => state.interface.browserSupport.cssFilter, + currentUser: state => state.users.currentUser + }) }, components: { Attachment, diff --git a/src/services/tiny_post_html_processor/tiny_post_html_processor.service.js b/src/services/tiny_post_html_processor/tiny_post_html_processor.service.js new file mode 100644 index 00000000..c9ff81e1 --- /dev/null +++ b/src/services/tiny_post_html_processor/tiny_post_html_processor.service.js @@ -0,0 +1,84 @@ +/** + * This is a tiny purpose-built HTML parser/processor. This basically detects any type of visual newline and + * allows it to be processed, useful for greentexting, mostly + * + * @param {Object} input - input data + * @param {(string) => string} processor - function that will be called on every line + * @return {string} processed html + */ +export const processHtml = (html, processor) => { + const handledTags = new Set(['p', 'br', 'div']) + const openCloseTags = new Set(['p', 'div']) + const tagRegex = /(?:<\/(\w+)>|<(\w+)\s?[^/]*?\/?>)/gi + + let buffer = '' // Current output buffer + const level = [] // How deep we are in tags and which tags were there + let textBuffer = '' // Current line content + let tagBuffer = null // Current tag buffer, if null = we are not currently reading a tag + + // Extracts tagname from tag, i.e. => span + const getTagName = (tag) => { + // eslint-disable-next-line no-unused-vars + const result = tagRegex.exec(tag) + return result && (result[1] || result[2]) + } + + const flush = () => { // Processes current line buffer, adds it to output buffer and clears line buffer + buffer += processor(textBuffer) + textBuffer = '' + } + + const handleBr = (tag) => { // handles single newlines/linebreaks + flush() + buffer += tag + } + + const handleOpen = (tag) => { // handles opening tags + flush() + buffer += tag + level.push(tag) + } + + const handleClose = (tag) => { // handles closing tags + flush() + buffer += tag + if (level[level.length - 1] === tag) { + level.pop() + } + } + + for (let i = 0; i < html.length; i++) { + const char = html[i] + if (char === '<' && tagBuffer !== null) { + tagBuffer = char + } else if (char !== '>' && tagBuffer !== null) { + tagBuffer += char + } else if (char === '>' && tagBuffer !== null) { + tagBuffer += char + const tagName = getTagName(tagBuffer) + if (handledTags.has(tagName)) { + if (tagName === 'br') { + handleBr(tagBuffer) + } + if (openCloseTags.has(tagBuffer)) { + if (tagBuffer[1] === '/') { + handleClose(tagBuffer) + } else { + handleOpen(tagBuffer) + } + } + } else { + textBuffer += tagBuffer + } + tagBuffer = null + } else if (char === '\n') { + handleBr(char) + } else { + textBuffer += char + } + } + + flush() + + return buffer +} From 692ee0e95a852b1f803b7ae92d65cbf4f3ce3445 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 14 Nov 2019 00:41:14 +0200 Subject: [PATCH 05/38] Fix regex, tag detector condition --- src/components/status/status.js | 2 +- .../tiny_post_html_processor.service.js | 25 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/components/status/status.js b/src/components/status/status.js index 6dbb2199..416aa36a 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -43,7 +43,7 @@ const Status = { showingTall: this.inConversation && this.focused, showingLongSubject: false, error: null, - // Initial state + // not as computed because it sets the initial state which will be changed later expandingSubject: !this.$store.getters.mergedConfig.collapseMessageWithSubject, } }, diff --git a/src/services/tiny_post_html_processor/tiny_post_html_processor.service.js b/src/services/tiny_post_html_processor/tiny_post_html_processor.service.js index c9ff81e1..b96c1ccf 100644 --- a/src/services/tiny_post_html_processor/tiny_post_html_processor.service.js +++ b/src/services/tiny_post_html_processor/tiny_post_html_processor.service.js @@ -9,17 +9,15 @@ export const processHtml = (html, processor) => { const handledTags = new Set(['p', 'br', 'div']) const openCloseTags = new Set(['p', 'div']) - const tagRegex = /(?:<\/(\w+)>|<(\w+)\s?[^/]*?\/?>)/gi let buffer = '' // Current output buffer const level = [] // How deep we are in tags and which tags were there let textBuffer = '' // Current line content let tagBuffer = null // Current tag buffer, if null = we are not currently reading a tag - // Extracts tagname from tag, i.e. => span + // Extracts tag name from tag, i.e. => span const getTagName = (tag) => { - // eslint-disable-next-line no-unused-vars - const result = tagRegex.exec(tag) + const result = /(?:<\/(\w+)>|<(\w+)\s?[^/]*?\/?>)/gi.exec(tag) return result && (result[1] || result[2]) } @@ -49,28 +47,29 @@ export const processHtml = (html, processor) => { for (let i = 0; i < html.length; i++) { const char = html[i] - if (char === '<' && tagBuffer !== null) { + if (char === '<' && tagBuffer === null) { tagBuffer = char } else if (char !== '>' && tagBuffer !== null) { tagBuffer += char } else if (char === '>' && tagBuffer !== null) { tagBuffer += char - const tagName = getTagName(tagBuffer) + const tagFull = tagBuffer + tagBuffer = null + const tagName = getTagName(tagFull) if (handledTags.has(tagName)) { if (tagName === 'br') { - handleBr(tagBuffer) + handleBr(tagFull) } - if (openCloseTags.has(tagBuffer)) { - if (tagBuffer[1] === '/') { - handleClose(tagBuffer) + if (openCloseTags.has(tagFull)) { + if (tagFull[1] === '/') { + handleClose(tagFull) } else { - handleOpen(tagBuffer) + handleOpen(tagFull) } } } else { - textBuffer += tagBuffer + textBuffer += tagFull } - tagBuffer = null } else if (char === '\n') { handleBr(char) } else { From 897131572f62c36277e06e464f328f37cf6acad2 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 14 Nov 2019 00:47:20 +0200 Subject: [PATCH 06/38] Made it optional --- src/components/settings/settings.vue | 11 ++++++++ src/components/status/status.js | 40 +++++++++++++++------------- src/components/status/status.vue | 5 ++-- src/i18n/en.json | 2 ++ src/modules/config.js | 1 + src/modules/instance.js | 1 + 6 files changed, 40 insertions(+), 20 deletions(-) diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue index a83489d2..c4021137 100644 --- a/src/components/settings/settings.vue +++ b/src/components/settings/settings.vue @@ -270,6 +270,17 @@ + +
+

{{ $t('settings.fun') }}

+
    +
  • + + {{ $t('settings.greentext') }} {{ $t('settings.instance_default', { value: greentextLocalizedValue }) }} + +
  • +
+
diff --git a/src/components/status/status.js b/src/components/status/status.js index 416aa36a..dd0ce3ab 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -259,26 +259,30 @@ const Status = { postBodyHtml () { const html = this.status.statusnet_html - try { - if (html.includes('>')) { - // This checks if post has '>' at the beginning, excluding mentions so that @mention >impying works - return processHtml(html, (string) => { - if (string.includes('>') && - string - .replace(/<[^>]+?>/gi, '') // remove all tags - .replace(/@\w+/gi, '') // remove mentions (even failed ones) - .trim() - .startsWith('>')) { - return `${string}` - } else { - return string - } - }) - } else { + if (this.mergedConfig.greentext) { + try { + if (html.includes('>')) { + // This checks if post has '>' at the beginning, excluding mentions so that @mention >impying works + return processHtml(html, (string) => { + if (string.includes('>') && + string + .replace(/<[^>]+?>/gi, '') // remove all tags + .replace(/@\w+/gi, '') // remove mentions (even failed ones) + .trim() + .startsWith('>')) { + return `${string}` + } else { + return string + } + }) + } else { + return html + } + } catch (e) { + console.err('Failed to process status html', e) return html } - } catch (e) { - console.err('Failed to process status html', e) + } else { return html } }, diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 65778b2e..d291e762 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -606,7 +606,7 @@ $status-margin: 0.75em; height: 100%; mask: linear-gradient(to top, white, transparent) bottom/100% 70px no-repeat, linear-gradient(to top, white, white); - // Autoprefixed seem to ignore this one, and also syntax is different + /* Autoprefixed seem to ignore this one, and also syntax is different */ -webkit-mask-composite: xor; mask-composite: exclude; } @@ -752,7 +752,8 @@ $status-margin: 0.75em; } .greentext { - color: green; + color: $fallback--cGreen; + color: var(--cGreen, $fallback--cGreen); } .status-conversation { diff --git a/src/i18n/en.json b/src/i18n/en.json index ead333c1..7b0b3b94 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -370,6 +370,8 @@ "false": "no", "true": "yes" }, + "fun": "Fun", + "greentext": "Meme arrows", "notifications": "Notifications", "notification_setting": "Receive notifications from:", "notification_setting_follows": "Users you follow", diff --git a/src/modules/config.js b/src/modules/config.js index d4819ee8..329b4091 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -45,6 +45,7 @@ export const defaultState = { playVideosInModal: false, useOneClickNsfw: false, useContainFit: false, + greentext: undefined, // instance default hidePostStats: undefined, // instance default hideUserStats: undefined // instance default } diff --git a/src/modules/instance.js b/src/modules/instance.js index 7b0e0da4..96f14ed5 100644 --- a/src/modules/instance.js +++ b/src/modules/instance.js @@ -32,6 +32,7 @@ const defaultState = { noAttachmentLinks: false, showFeaturesPanel: true, minimalScopesMode: false, + greentext: false, // Nasty stuff pleromaBackend: true, From bce750c5717419b8f2f2de6d8a4380a4e664f986 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 14 Nov 2019 00:49:31 +0200 Subject: [PATCH 07/38] making dtluna proud or disgusted --- src/i18n/ru.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/i18n/ru.json b/src/i18n/ru.json index f8bcd996..19e10f1e 100644 --- a/src/i18n/ru.json +++ b/src/i18n/ru.json @@ -174,6 +174,8 @@ "name_bio": "Имя и описание", "new_email": "Новый email", "new_password": "Новый пароль", + "fun": "Потешное", + "greentext": "Мемные стрелочки", "notification_visibility": "Показывать уведомления", "notification_visibility_follows": "Подписки", "notification_visibility_likes": "Лайки", From 51ea295704c52b1f9a922868aedf264e53a5ec92 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 14 Nov 2019 00:52:38 +0200 Subject: [PATCH 08/38] eslint --- src/components/status/status.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/status/status.js b/src/components/status/status.js index dd0ce3ab..714ea6d2 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -44,7 +44,7 @@ const Status = { showingLongSubject: false, error: null, // not as computed because it sets the initial state which will be changed later - expandingSubject: !this.$store.getters.mergedConfig.collapseMessageWithSubject, + expandingSubject: !this.$store.getters.mergedConfig.collapseMessageWithSubject } }, computed: { @@ -266,10 +266,10 @@ const Status = { return processHtml(html, (string) => { if (string.includes('>') && string - .replace(/<[^>]+?>/gi, '') // remove all tags - .replace(/@\w+/gi, '') // remove mentions (even failed ones) - .trim() - .startsWith('>')) { + .replace(/<[^>]+?>/gi, '') // remove all tags + .replace(/@\w+/gi, '') // remove mentions (even failed ones) + .trim() + .startsWith('>')) { return `${string}` } else { return string From 90fc6b07743c87cbb08f07d9cf640b14efab1c8e Mon Sep 17 00:00:00 2001 From: taehoon Date: Thu, 14 Nov 2019 14:07:05 -0500 Subject: [PATCH 09/38] close image modal by clicking image --- src/components/media_modal/media_modal.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/media_modal/media_modal.vue b/src/components/media_modal/media_modal.vue index 49e3143e..80d2a8b9 100644 --- a/src/components/media_modal/media_modal.vue +++ b/src/components/media_modal/media_modal.vue @@ -10,13 +10,13 @@ :src="currentMedia.url" @touchstart.stop="mediaTouchStart" @touchmove.stop="mediaTouchMove" + @click="hide" >
whats going on
wha

' + expect(processHtml(inputOutput, processorKeep)).to.eql(inputOutput) + }) + + it('fed with sorta valid HTML but tags aren\'t closed', () => { + const inputOutput = 'just leaving a

hanging' + expect(processHtml(inputOutput, processorKeep)).to.eql(inputOutput) + }) + + it('fed with not really HTML at this point... tags that aren\'t finished', () => { + const inputOutput = 'do you expect me to finish this
{ + const inputOutput = 'look ma

p \nwithin

p!

and a
div!

' + expect(processHtml(inputOutput, processorKeep)).to.eql(inputOutput) + }) + + it('fed with maybe valid HTML? self-closing divs and ps', () => { + const inputOutput = 'a
what now

?' + expect(processHtml(inputOutput, processorKeep)).to.eql(inputOutput) + }) + + it('fed with valid XHTML containing a CDATA', () => { + const inputOutput = 'Yes, it is me, ' + expect(processHtml(inputOutput, processorKeep)).to.eql(inputOutput) + }) + }) + describe('with processor that replaces lines with word "_" should match expected line when', () => { + const processorReplace = (line) => '_' + it('fed with regular HTML with newlines', () => { + const input = '1
2

3 4

5 \n 6

7
8


\n
' + const output = '_
_

_

_\n_

_
_


\n
' + expect(processHtml(input, processorReplace)).to.eql(output) + }) + + it('fed with possibly broken HTML with invalid tags/composition', () => { + const input = ' ayylmao ' + const output = '_' + expect(processHtml(input, processorReplace)).to.eql(output) + }) + + it('fed with very broken HTML with broken composition', () => { + const input = '

lmao what
whats going on
wha

' + const output = '

_
_
_

' + expect(processHtml(input, processorReplace)).to.eql(output) + }) + + it('fed with sorta valid HTML but tags aren\'t closed', () => { + const input = 'just leaving a

hanging' + const output = '_
_' + expect(processHtml(input, processorReplace)).to.eql(output) + }) + + it('fed with not really HTML at this point... tags that aren\'t finished', () => { + const input = 'do you expect me to finish this
{ + const input = 'look ma

p \nwithin

p!

and a
div!

' + const output = '_

_\n_

_

_
_

' + expect(processHtml(input, processorReplace)).to.eql(output) + }) + + it('fed with maybe valid HTML? self-closing divs and ps', () => { + const input = 'a
what now

?' + const output = '_

_

_' + expect(processHtml(input, processorReplace)).to.eql(output) + }) + + it('fed with valid XHTML containing a CDATA', () => { + const input = 'Yes, it is me, ' + const output = '_' + expect(processHtml(input, processorReplace)).to.eql(output) + }) + }) +}) From 28efd7d862d3fb890969448479d3034af7201170 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 14 Nov 2019 23:46:19 +0200 Subject: [PATCH 11/38] use yarn, try to restart pipeline --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9d42288e..7f6d3c92 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,7 +24,7 @@ test: - apt install firefox-esr -y --no-install-recommends - firefox --version - yarn - - npm run unit + - yarn unit build: stage: build From 3ecfbc8ea2b60aa0fe40f2969d27fcb916d6b639 Mon Sep 17 00:00:00 2001 From: Mew Mew Date: Fri, 15 Nov 2019 05:09:01 +0000 Subject: [PATCH 12/38] Fix translation (https://blob.cat/notice/9oyYO1RzcNbJXxKxeq) --- src/i18n/zh.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/zh.json b/src/i18n/zh.json index 80c4e0d8..8d9462ab 100644 --- a/src/i18n/zh.json +++ b/src/i18n/zh.json @@ -111,7 +111,7 @@ }, "interactions": { "favs_repeats": "转发和收藏", - "follows": "新的关注着", + "follows": "新的关注者", "load_older": "加载更早的互动" }, "post_status": { From a9022d0c32e2fcd6735f02c680312d93e215fd0f Mon Sep 17 00:00:00 2001 From: rinpatch Date: Fri, 15 Nov 2019 22:56:16 +0300 Subject: [PATCH 13/38] Remove outdated changelog file This hasn't been updated in 2 years and we have CHANGELOG.md now. --- CHANGELOG | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 CHANGELOG diff --git a/CHANGELOG b/CHANGELOG deleted file mode 100644 index ca2ebcfa..00000000 --- a/CHANGELOG +++ /dev/null @@ -1,35 +0,0 @@ -## 2017-02-20 - -- Overall CSS styling fixes -- Current theme is displayed in theme selector -- Theme selector is moved to the settings page -- Oembed attachments will now display correctly -- Styling changes to the user info cards -- Notification count in title -- Better Notification handling (persistance, mark as read) -- Post statuses with ctrl+enter -- Links in statuses open in a new tab -- Optimized mobile view -- Fix crash on persistance failure -- Compress persisted state -- Sync mutes with backend (SEE NOTE BELOW) - -Pleroma will now try to get the current mutes from the backend. Sadly, a bug in -Qvitter will not allow getting the mutes from the endpoint, because it will -ignore HTTP Basic authentication. Mutes will still persist in Pleroma through -localstorage, but the mutes from Qvitter won't be picked up if the call fails. - -The patch for Qvitter: - ---- a/actions/apiqvittermutes.php -+++ b/actions/apiqvittermutes.php -@@ -74,7 +74,7 @@ class ApiQvitterMutesAction extends ApiPrivateAuthAction - { - parent::handle(); - -- $this->target = Profile::current(); -+ $this->target = $this->scoped; - - if(!$this->target instanceof Profile) { - $this->clientError(_('You have to be logged in to view your mutes.'), 403); - From 67c95c9d061ebb2754d56b85969a08c786d34424 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Sun, 17 Nov 2019 01:11:19 +0900 Subject: [PATCH 14/38] Use kana+kanji as default for Japanese translation --- .../interface_language_switcher.vue | 4 +- src/i18n/ja.json | 658 +++++++++--------- src/i18n/ja_easy.json | 639 +++++++++++++++++ src/i18n/ja_pedantic.json | 639 ----------------- src/i18n/messages.js | 2 +- 5 files changed, 971 insertions(+), 971 deletions(-) create mode 100644 src/i18n/ja_easy.json delete mode 100644 src/i18n/ja_pedantic.json diff --git a/src/components/interface_language_switcher/interface_language_switcher.vue b/src/components/interface_language_switcher/interface_language_switcher.vue index 1ca22001..f5ace0cc 100644 --- a/src/components/interface_language_switcher/interface_language_switcher.vue +++ b/src/components/interface_language_switcher/interface_language_switcher.vue @@ -51,8 +51,8 @@ export default { methods: { getLanguageName (code) { const specialLanguageNames = { - 'ja': 'Japanese (やさしいにほんご)', - 'ja_pedantic': 'Japanese (日本語)', + 'ja': 'Japanese (日本語)', + 'ja_easy': 'Japanese (やさしいにほんご)', 'zh': 'Chinese (简体中文)' } return specialLanguageNames[code] || ISO6391.getName(code) diff --git a/src/i18n/ja.json b/src/i18n/ja.json index 592a7257..2ca7dca8 100644 --- a/src/i18n/ja.json +++ b/src/i18n/ja.json @@ -4,128 +4,128 @@ }, "exporter": { "export": "エクスポート", - "processing": "おまちください。しばらくすると、あなたのファイルをダウンロードするように、メッセージがでます。" + "processing": "処理中です。処理が完了すると、ファイルをダウンロードするよう指示があります。" }, "features_panel": { "chat": "チャット", "gopher": "Gopher", "media_proxy": "メディアプロクシ", - "scope_options": "こうかいはんいせんたく", - "text_limit": "もじのかず", - "title": "ゆうこうなきのう", + "scope_options": "公開範囲選択", + "text_limit": "文字の数", + "title": "有効な機能", "who_to_follow": "おすすめユーザー" }, "finder": { - "error_fetching_user": "ユーザーけんさくがエラーになりました。", - "find_user": "ユーザーをさがす" + "error_fetching_user": "ユーザー検索がエラーになりました。", + "find_user": "ユーザーを探す" }, "general": { - "apply": "てきよう", - "submit": "そうしん", - "more": "つづき", + "apply": "適用", + "submit": "送信", + "more": "続き", "generic_error": "エラーになりました", - "optional": "かかなくてもよい", - "show_more": "つづきをみる", + "optional": "省略可", + "show_more": "もっと見る", "show_less": "たたむ", "cancel": "キャンセル", - "disable": "なし", - "enable": "あり", - "confirm": "たしかめる", - "verify": "たしかめる" + "disable": "無効", + "enable": "有効", + "confirm": "確認", + "verify": "検査" }, "image_cropper": { - "crop_picture": "がぞうをきりぬく", - "save": "セーブ", - "save_without_cropping": "きりぬかずにセーブ", + "crop_picture": "画像を切り抜く", + "save": "保存", + "save_without_cropping": "切り抜かずに保存", "cancel": "キャンセル" }, "importer": { - "submit": "そうしん", - "success": "インポートできました。", - "error": "インポートがエラーになりました。" + "submit": "送信", + "success": "正常にインポートされました。", + "error": "このファイルをインポートするとき、エラーが発生しました。" }, "login": { "login": "ログイン", "description": "OAuthでログイン", "logout": "ログアウト", "password": "パスワード", - "placeholder": "れい: lain", - "register": "はじめる", - "username": "ユーザーめい", - "hint": "はなしあいにくわわるには、ログインしてください", - "authentication_code": "にんしょうコード", - "enter_recovery_code": "リカバリーコードをいれてください", - "enter_two_factor_code": "2-ファクターコードをいれてください", + "placeholder": "例: lain", + "register": "登録", + "username": "ユーザー名", + "hint": "会話に加わるには、ログインしてください", + "authentication_code": "認証コード", + "enter_recovery_code": "リカバリーコードを入力してください", + "enter_two_factor_code": "2段階認証コードを入力してください", "recovery_code": "リカバリーコード", "heading" : { - "totp" : "2-ファクターにんしょう", - "recovery" : "2-ファクターリカバリー" + "totp" : "2段階認証", + "recovery" : "2段階リカバリー" } }, "media_modal": { - "previous": "まえ", - "next": "つぎ" + "previous": "前", + "next": "次" }, "nav": { - "about": "これはなに?", - "back": "もどる", + "about": "このインスタンスについて", + "back": "戻る", "chat": "ローカルチャット", "friend_requests": "フォローリクエスト", - "mentions": "メンション", - "interactions": "やりとり", + "mentions": "通知", + "interactions": "インタラクション", "dms": "ダイレクトメッセージ", "public_tl": "パブリックタイムライン", "timeline": "タイムライン", - "twkn": "つながっているすべてのネットワーク", - "user_search": "ユーザーをさがす", - "search": "さがす", + "twkn": "接続しているすべてのネットワーク", + "user_search": "ユーザーを探す", + "search": "検索", "who_to_follow": "おすすめユーザー", - "preferences": "せってい" + "preferences": "設定" }, "notifications": { - "broken_favorite": "ステータスがみつかりません。さがしています...", - "favorited_you": "あなたのステータスがおきにいりされました", + "broken_favorite": "ステータスが見つかりません。探しています...", + "favorited_you": "あなたのステータスがお気に入りされました", "followed_you": "フォローされました", - "load_older": "ふるいつうちをみる", - "notifications": "つうち", - "read": "よんだ!", + "load_older": "古い通知をみる", + "notifications": "通知", + "read": "読んだ!", "repeated_you": "あなたのステータスがリピートされました", - "no_more_notifications": "つうちはありません" + "no_more_notifications": "通知はありません" }, "polls": { - "add_poll": "いれふだをはじめる", - "add_option": "オプションをふやす", - "option": "オプション", - "votes": "いれふだ", - "vote": "ふだをいれる", - "type": "いれふだのかた", - "single_choice": "ひとつえらぶ", - "multiple_choices": "いくつでもえらべる", - "expiry": "いれふだのながさ", - "expires_in": "いれふだは {0} で、おわります", - "expired": "いれふだは {0} まえに、おわりました", - "not_enough_options": "ユニークなオプションが、たりません" + "add_poll": "投票を追加", + "add_option": "選択肢を追加", + "option": "選択肢", + "votes": "票", + "vote": "投票", + "type": "投票の形式", + "single_choice": "択一式", + "multiple_choices": "複数選択式", + "expiry": "投票期間", + "expires_in": "投票は {0} で終了します", + "expired": "投票は {0} 前に終了しました", + "not_enough_options": "相異なる選択肢が不足しています" }, "emoji": { "stickers": "ステッカー", - "emoji": "えもじ", - "keep_open": "ピッカーをあけたままにする", - "search_emoji": "えもじをさがす", - "add_emoji": "えもじをうちこむ", - "custom": "カスタムえもじ", - "unicode": "ユニコードえもじ" + "emoji": "絵文字", + "keep_open": "ピッカーを開いたままにする", + "search_emoji": "絵文字を検索", + "add_emoji": "絵文字を挿入", + "custom": "カスタム絵文字", + "unicode": "Unicode絵文字" }, "stickers": { - "add_sticker": "ステッカーをふやす" + "add_sticker": "ステッカーを追加" }, "interactions": { - "favs_repeats": "リピートとおきにいり", - "follows": "あたらしいフォロー", - "load_older": "ふるいやりとりをみる" + "favs_repeats": "リピートとお気に入り", + "follows": "新しいフォロワー", + "load_older": "古いインタラクションを見る" }, "post_status": { - "new_status": "とうこうする", - "account_not_locked_warning": "あなたのアカウントは {0} ではありません。あなたをフォローすれば、だれでも、フォロワーげんていのステータスをよむことができます。", + "new_status": "投稿する", + "account_not_locked_warning": "あなたのアカウントは {0} ではありません。あなたをフォローすれば、誰でも、フォロワー限定のステータスを読むことができます。", "account_not_locked_warning_link": "ロックされたアカウント", "attachments_sensitive": "ファイルをNSFWにする", "content_type": { @@ -134,131 +134,131 @@ "text/markdown": "Markdown", "text/bbcode": "BBCode" }, - "content_warning": "せつめい (かかなくてもよい)", - "default": "はねだくうこうに、つきました。", - "direct_warning_to_all": "このとうこうは、メンションされたすべてのユーザーが、みることができます。", - "direct_warning_to_first_only": "このとうこうは、メッセージのはじめでメンションされたユーザーだけが、みることができます。", - "direct_warning": "このステータスは、メンションされたユーザーだけが、よむことができます。", - "posting": "とうこう", + "content_warning": "説明 (省略可)", + "default": "羽田空港に着きました。", + "direct_warning_to_all": "この投稿は、メンションされたすべてのユーザーが、見ることができます。", + "direct_warning_to_first_only": "この投稿は、メッセージの冒頭でメンションされたユーザーだけが、見ることができます。", + "direct_warning": "このステータスは、メンションされたユーザーだけが、読むことができます。", + "posting": "投稿", "scope_notice": { - "public": "このとうこうは、だれでもみることができます", - "private": "このとうこうは、あなたのフォロワーだけが、みることができます", - "unlisted": "このとうこうは、パブリックタイムラインと、つながっているすべてのネットワークでは、みることができません" + "public": "この投稿は、誰でも見ることができます", + "private": "この投稿は、あなたのフォロワーだけが、見ることができます。", + "unlisted": "この投稿は、パブリックタイムラインと、接続しているすべてのネットワークには、表示されません。" }, "scope": { - "direct": "ダイレクト: メンションされたユーザーのみにとどきます。", - "private": "フォロワーげんてい: フォロワーのみにとどきます。", - "public": "パブリック: パブリックタイムラインにとどきます。", - "unlisted": "アンリステッド: パブリックタイムラインにとどきません。" + "direct": "ダイレクト: メンションされたユーザーのみに届きます。", + "private": "フォロワーげんてい: フォロワーのみに届きます。", + "public": "パブリック: パブリックタイムラインに届きます。", + "unlisted": "アンリステッド: パブリックタイムラインに届きません。" } }, "registration": { "bio": "プロフィール", "email": "Eメール", "fullname": "スクリーンネーム", - "password_confirm": "パスワードのかくにん", - "registration": "はじめる", - "token": "しょうたいトークン", + "password_confirm": "パスワードの確認", + "registration": "登録", + "token": "招待トークン", "captcha": "CAPTCHA", - "new_captcha": "もじがよめないときは、がぞうをクリックすると、あたらしいがぞうになります", - "username_placeholder": "れい: lain", - "fullname_placeholder": "れい: いわくら れいん", - "bio_placeholder": "れい:\nごきげんよう。わたしはれいん。\nわたしはアニメのおんなのこで、にほんのベッドタウンにすんでいます。ワイヤードで、わたしにあったことが、あるかもしれませんね。", + "new_captcha": "文字が読めないときは、画像をクリックすると、新しい画像になります", + "username_placeholder": "例: lain", + "fullname_placeholder": "例: 岩倉玲音", + "bio_placeholder": "例:\nこんにちは。私は玲音。\n私はアニメのキャラクターで、日本の郊外に住んでいます。私をWiredで見たことがあるかもしれません。", "validations": { - "username_required": "なにかかいてください", - "fullname_required": "なにかかいてください", - "email_required": "なにかかいてください", - "password_required": "なにかかいてください", - "password_confirmation_required": "なにかかいてください", - "password_confirmation_match": "パスワードがちがいます" + "username_required": "必須", + "fullname_required": "必須", + "email_required": "必須", + "password_required": "必須", + "password_confirmation_required": "必須", + "password_confirmation_match": "パスワードが違います" } }, "selectable_list": { - "select_all": "すべてえらぶ" + "select_all": "すべて選択" }, "settings": { - "app_name": "アプリのなまえ", + "app_name": "アプリの名称", "security": "セキュリティ", - "enter_current_password_to_confirm": "あなたのアイデンティティをたしかめるため、あなたのいまのパスワードをかいてください", + "enter_current_password_to_confirm": "あなたのアイデンティティを証明するため、現在のパスワードを入力してください", "mfa": { "otp" : "OTP", - "setup_otp" : "OTPをつくる", - "wait_pre_setup_otp" : "OTPをよういしています", - "confirm_and_enable" : "OTPをたしかめて、ゆうこうにする", - "title": "2-ファクターにんしょう", - "generate_new_recovery_codes" : "あたらしいリカバリーコードをつくる", - "warning_of_generate_new_codes" : "あたらしいリカバリーコードをつくったら、ふるいコードはつかえなくなります。", + "setup_otp" : "OTPのセットアップ", + "wait_pre_setup_otp" : "OTPのプリセット", + "confirm_and_enable" : "OTPの確認と有効化", + "title": "2段階認証", + "generate_new_recovery_codes" : "新しいリカバリーコードを生成", + "warning_of_generate_new_codes" : "新しいリカバリーコードを生成すると、古いコードは使用できなくなります。", "recovery_codes" : "リカバリーコード。", - "waiting_a_recovery_codes": "バックアップコードをうけとっています...", - "recovery_codes_warning" : "コードをかきうつすか、ひとにみられないところにセーブしてください。そうでなければ、あなたはこのコードをふたたびみることはできません。もしあなたが、2FAアプリのアクセスをうしなって、なおかつ、リカバリーコードもおもいだせないならば、あなたはあなたのアカウントから、しめだされます。", - "authentication_methods" : "にんしょうメソッド", + "waiting_a_recovery_codes": "バックアップコードを受信しています...", + "recovery_codes_warning" : "コードを紙に書くか、安全な場所に保存してください。そうでなければ、あなたはコードを再び見ることはできません。もし2段階認証アプリのアクセスを喪失し、なおかつ、リカバリーコードもないならば、あなたは自分のアカウントから閉め出されます。", + "authentication_methods" : "認証方法", "scan": { "title": "スキャン", - "desc": "あなたの2-ファクターアプリをつかって、このQRコードをスキャンするか、テキストキーをうちこんでください:", + "desc": "あなたの2段階認証アプリを使って、このQRコードをスキャンするか、テキストキーを入力してください:", "secret_code": "キー" }, "verify": { - "desc": "2-ファクターにんしょうをつかうには、あなたの2-ファクターアプリのコードをいれてください:" + "desc": "2段階認証を有効にするには、あなたの2段階認証アプリのコードを入力してください:" } }, "attachmentRadius": "ファイル", "attachments": "ファイル", - "autoload": "したにスクロールしたとき、じどうてきによみこむ。", + "autoload": "下にスクロールしたとき、自動的に読み込む。", "avatar": "アバター", - "avatarAltRadius": "つうちのアバター", + "avatarAltRadius": "通知のアバター", "avatarRadius": "アバター", "background": "バックグラウンド", "bio": "プロフィール", "block_export": "ブロックのエクスポート", - "block_export_button": "ブロックをCSVファイルにエクスポート", + "block_export_button": "ブロックをCSVファイルにエクスポートする", "block_import": "ブロックのインポート", - "block_import_error": "ブロックのインポートがエラーになりました", - "blocks_imported": "ブロックをインポートしました! じっさいにブロックするまでには、もうしばらくかかります。", + "block_import_error": "ブロックのインポートに失敗しました", + "blocks_imported": "ブロックをインポートしました! 実際に処理されるまでに、しばらく時間がかかります。", "blocks_tab": "ブロック", "btnRadius": "ボタン", - "cBlue": "リプライとフォロー", + "cBlue": "返信とフォロー", "cGreen": "リピート", - "cOrange": "おきにいり", + "cOrange": "お気に入り", "cRed": "キャンセル", - "change_password": "パスワードをかえる", - "change_password_error": "パスワードをかえることが、できなかったかもしれません。", - "changed_password": "パスワードが、かわりました!", - "collapse_subject": "せつめいのあるとうこうをたたむ", - "composing": "とうこう", - "confirm_new_password": "あたらしいパスワードのかくにん", - "current_avatar": "いまのアバター", - "current_password": "いまのパスワード", - "current_profile_banner": "いまのプロフィールバナー", + "change_password": "パスワードを変える", + "change_password_error": "パスワードを変えることが、できなかったかもしれません。", + "changed_password": "パスワードが、変わりました!", + "collapse_subject": "説明のある投稿をたたむ", + "composing": "投稿", + "confirm_new_password": "新しいパスワードの確認", + "current_avatar": "現在のアバター", + "current_password": "現在のパスワード", + "current_profile_banner": "現在のプロフィールバナー", "data_import_export_tab": "インポートとエクスポート", - "default_vis": "デフォルトのこうかいはんい", - "delete_account": "アカウントをけす", - "delete_account_description": "あなたのアカウントとメッセージが、きえます。", - "delete_account_error": "アカウントをけすことが、できなかったかもしれません。インスタンスのアドミニストレーターに、おといあわせください。", - "delete_account_instructions": "ほんとうにアカウントをけしてもいいなら、パスワードをかいてください。", - "discoverable": "けんさくなどのサービスで、このアカウントをみつけてもよい", - "avatar_size_instruction": "アバターのおおきさは、150×150ピクセルか、それよりもおおきくするといいです。", - "pad_emoji": "えもじをピッカーでえらんだとき、えもじのまわりにスペースをいれる", - "export_theme": "セーブ", + "default_vis": "デフォルトの公開範囲", + "delete_account": "アカウントを消す", + "delete_account_description": "あなたのアカウントとメッセージが、消えます。", + "delete_account_error": "アカウントを消すことが、できなかったかもしれません。インスタンスの管理者に、連絡してください。", + "delete_account_instructions": "本当にアカウントを消してもいいなら、パスワードを入力してください。", + "discoverable": "検索などのサービスでこのアカウントを見つけることを許可する", + "avatar_size_instruction": "アバターの大きさは、150×150ピクセルか、それよりも大きくするといいです。", + "pad_emoji": "ピッカーから絵文字を挿入するとき、絵文字の両側にスペースを入れる", + "export_theme": "保存", "filtering": "フィルタリング", - "filtering_explanation": "これらのことばをふくむすべてのものがミュートされます。1ぎょうに1つのことばをかいてください。", + "filtering_explanation": "これらの言葉を含むすべてのものがミュートされます。1行に1つの言葉を書いてください。", "follow_export": "フォローのエクスポート", "follow_export_button": "エクスポート", - "follow_export_processing": "おまちください。まもなくファイルをダウンロードできます。", - "follow_import": "フォローインポート", + "follow_export_processing": "お待ちください。まもなくファイルをダウンロードできます。", + "follow_import": "フォローのインポート", "follow_import_error": "フォローのインポートがエラーになりました。", - "follows_imported": "フォローがインポートされました! すこしじかんがかかるかもしれません。", + "follows_imported": "フォローがインポートされました! 少し時間がかかるかもしれません。", "foreground": "フォアグラウンド", - "general": "ぜんぱん", - "hide_attachments_in_convo": "スレッドのファイルをかくす", - "hide_attachments_in_tl": "タイムラインのファイルをかくす", - "hide_muted_posts": "ミュートしたユーザーのとうこうをかくす", - "max_thumbnails": "ひとつのとうこうにいれられるサムネイルのかず", - "hide_isp": "インスタンススペシフィックパネルをかくす", - "preload_images": "がぞうをさきよみする", - "use_one_click_nsfw": "NSFWなファイルを1クリックでひらく", - "hide_post_stats": "とうこうのとうけいをかくす (れい: おきにいりのかず)", - "hide_user_stats": "ユーザーのとうけいをかくす (れい: フォロワーのかず)", - "hide_filtered_statuses": "フィルターされたとうこうをかくす", + "general": "全般", + "hide_attachments_in_convo": "スレッドのファイルを隠す", + "hide_attachments_in_tl": "タイムラインのファイルを隠す", + "hide_muted_posts": "ミュートしているユーザーの投稿を隠す", + "max_thumbnails": "投稿に含まれるサムネイルの最大数", + "hide_isp": "インスタンス固有パネルを隠す", + "preload_images": "画像を先読みする", + "use_one_click_nsfw": "NSFWなファイルを1クリックで開く", + "hide_post_stats": "投稿の統計を隠す (例: お気に入りの数)", + "hide_user_stats": "ユーザーの統計を隠す (例: フォロワーの数)", + "hide_filtered_statuses": "フィルターされた投稿を隠す", "import_blocks_from_a_csv_file": "CSVファイルからブロックをインポートする", "import_followers_from_a_csv_file": "CSVファイルからフォローをインポートする", "import_theme": "ロード", @@ -267,198 +267,198 @@ "instance_default": "(デフォルト: {value})", "instance_default_simple": "(デフォルト)", "interface": "インターフェース", - "interfaceLanguage": "インターフェースのことば", - "invalid_theme_imported": "このファイルはPleromaのテーマではありません。テーマはへんこうされませんでした。", + "interfaceLanguage": "インターフェースの言語", + "invalid_theme_imported": "このファイルはPleromaのテーマではありません。テーマは変更されませんでした。", "limited_availability": "あなたのブラウザではできません", "links": "リンク", - "lock_account_description": "あなたがみとめたひとだけ、あなたのアカウントをフォローできる", - "loop_video": "ビデオをくりかえす", - "loop_video_silent_only": "おとのないビデオだけくりかえす", + "lock_account_description": "あなたが認めた人だけ、あなたのアカウントをフォローできる", + "loop_video": "ビデオを繰り返す", + "loop_video_silent_only": "音のないビデオだけ繰り返す", "mutes_tab": "ミュート", - "play_videos_in_modal": "ビデオをメディアビューアーでみる", - "use_contain_fit": "がぞうのサムネイルを、きりぬかない", - "name": "なまえ", - "name_bio": "なまえとプロフィール", - "new_password": "あたらしいパスワード", - "notification_visibility": "ひょうじするつうち", + "play_videos_in_modal": "ビデオをメディアビューアーで見る", + "use_contain_fit": "画像のサムネイルを、切り抜かない", + "name": "名前", + "name_bio": "名前とプロフィール", + "new_password": "新しいパスワード", + "notification_visibility": "表示する通知", "notification_visibility_follows": "フォロー", - "notification_visibility_likes": "おきにいり", + "notification_visibility_likes": "お気に入り", "notification_visibility_mentions": "メンション", "notification_visibility_repeats": "リピート", - "no_rich_text_description": "リッチテキストをつかわない", - "no_blocks": "ブロックしていません", - "no_mutes": "ミュートしていません", - "hide_follows_description": "フォローしているひとをみせない", - "hide_followers_description": "フォロワーをみせない", - "hide_follows_count_description": "フォローしているひとのかずをみせない", - "hide_followers_count_description": "フォロワーのかずをみせない", - "show_admin_badge": "アドミンのしるしをみせる", - "show_moderator_badge": "モデレーターのしるしをみせる", - "nsfw_clickthrough": "NSFWなファイルをかくす", + "no_rich_text_description": "リッチテキストを使わない", + "no_blocks": "ブロックはありません", + "no_mutes": "ミュートはありません", + "hide_follows_description": "フォローしている人を見せない", + "hide_followers_description": "フォロワーを見せない", + "hide_follows_count_description": "フォローしている人の数を見せない", + "hide_followers_count_description": "フォロワーの数を見せない", + "show_admin_badge": "管理者のバッジを見せる", + "show_moderator_badge": "モデレーターのバッジを見せる", + "nsfw_clickthrough": "NSFWなファイルを隠す", "oauth_tokens": "OAuthトークン", "token": "トークン", - "refresh_token": "トークンをリフレッシュ", - "valid_until": "おわりのとき", - "revoke_token": "とりけす", + "refresh_token": "トークンを更新", + "valid_until": "まで有効", + "revoke_token": "取り消す", "panelRadius": "パネル", - "pause_on_unfocused": "タブにフォーカスがないときストリーミングをとめる", + "pause_on_unfocused": "タブにフォーカスがないときストリーミングを止める", "presets": "プリセット", "profile_background": "プロフィールのバックグラウンド", "profile_banner": "プロフィールバナー", "profile_tab": "プロフィール", - "radii_help": "インターフェースのまるさをせっていする。", + "radii_help": "インターフェースの丸さを設定する。", "replies_in_timeline": "タイムラインのリプライ", - "reply_link_preview": "カーソルをかさねたとき、リプライのプレビューをみる", - "reply_visibility_all": "すべてのリプライをみる", - "reply_visibility_following": "わたしにあてられたリプライと、フォローしているひとからのリプライをみる", - "reply_visibility_self": "わたしにあてられたリプライをみる", - "autohide_floating_post_button": "あたらしいとうこうのボタンを、じどうてきにかくす (モバイル)", - "saving_err": "せっていをセーブできませんでした", - "saving_ok": "せっていをセーブしました", - "search_user_to_block": "ブロックしたいひとを、ここでけんさくできます", - "search_user_to_mute": "ミュートしたいひとを、ここでけんさくできます", + "reply_link_preview": "カーソルを重ねたとき、リプライのプレビューを見る", + "reply_visibility_all": "すべてのリプライを見る", + "reply_visibility_following": "私に宛てられたリプライと、フォローしている人からのリプライを見る", + "reply_visibility_self": "私に宛てられたリプライを見る", + "autohide_floating_post_button": "新しい投稿ボタンを自動的に隠す (モバイル)", + "saving_err": "設定を保存できませんでした", + "saving_ok": "設定を保存しました", + "search_user_to_block": "ブロックしたいユーザーを検索", + "search_user_to_mute": "ミュートしたいユーザーを検索", "security_tab": "セキュリティ", - "scope_copy": "リプライするとき、こうかいはんいをコピーする (DMのこうかいはんいは、つねにコピーされます)", - "minimal_scopes_mode": "こうかいはんいせんたくオプションを、ちいさくする", - "set_new_avatar": "あたらしいアバターをせっていする", - "set_new_profile_background": "あたらしいプロフィールのバックグラウンドをせっていする", - "set_new_profile_banner": "あたらしいプロフィールバナーを設定する", - "settings": "せってい", - "subject_input_always_show": "サブジェクトフィールドをいつでもひょうじする", - "subject_line_behavior": "リプライするときサブジェクトをコピーする", - "subject_line_email": "メールふう: \"re: サブジェクト\"", - "subject_line_mastodon": "マストドンふう: そのままコピー", + "scope_copy": "返信するとき、公開範囲をコピーする (DMの公開範囲は、常にコピーされます)", + "minimal_scopes_mode": "公開範囲選択オプションを最小にする", + "set_new_avatar": "新しいアバターを設定する", + "set_new_profile_background": "新しいプロフィールのバックグラウンドを設定する", + "set_new_profile_banner": "新しいプロフィールバナーを設定する", + "settings": "設定", + "subject_input_always_show": "サブジェクトフィールドをいつでも表示する", + "subject_line_behavior": "返信するときサブジェクトをコピーする", + "subject_line_email": "メール風: \"re: サブジェクト\"", + "subject_line_mastodon": "マストドン風: そのままコピー", "subject_line_noop": "コピーしない", - "post_status_content_type": "とうこうのコンテントタイプ", - "stop_gifs": "カーソルをかさねたとき、GIFをうごかす", - "streaming": "うえまでスクロールしたとき、じどうてきにストリーミングする", - "text": "もじ", + "post_status_content_type": "投稿のコンテントタイプ", + "stop_gifs": "カーソルを重ねたとき、GIFを動かす", + "streaming": "上までスクロールしたとき、自動的にストリーミングする", + "text": "文字", "theme": "テーマ", "theme_help": "カラーテーマをカスタマイズできます", - "theme_help_v2_1": "チェックボックスをONにすると、コンポーネントごとに、いろと、とうめいどを、オーバーライドできます。「すべてクリア」ボタンをおすと、すべてのオーバーライドを、やめます。", - "theme_help_v2_2": "バックグラウンドとテキストのコントラストをあらわすアイコンがあります。マウスをホバーすると、くわしいせつめいがでます。とうめいないろをつかっているときは、もっともわるいばあいのコントラストがしめされます。", - "upload_a_photo": "がぞうをアップロード", + "theme_help_v2_1": "チェックボックスをONにすると、コンポーネントごとに、色と透明度をオーバーライドできます。「すべてクリア」ボタンを押すと、すべてのオーバーライドをやめます。", + "theme_help_v2_2": "バックグラウンドとテキストのコントラストを表すアイコンがあります。マウスをホバーすると、詳しい説明が出ます。透明な色を使っているときは、最悪の場合のコントラストが示されます。", "tooltipRadius": "ツールチップとアラート", - "user_settings": "ユーザーせってい", + "upload_a_photo": "画像をアップロード", + "user_settings": "ユーザー設定", "values": { "false": "いいえ", "true": "はい" }, - "notifications": "つうち", - "notification_setting": "つうちをうけとる:", - "notification_setting_follows": "あなたがフォローしているひとから", - "notification_setting_non_follows": "あなたがフォローしていないひとから", - "notification_setting_followers": "あなたをフォローしているひとから", - "notification_setting_non_followers": "あなたをフォローしていないひとから", - "notification_mutes": "あるユーザーからのつうちをとめるには、ミュートしてください。", - "notification_blocks": "ブロックしているユーザーからのつうちは、すべてとまります。", - "enable_web_push_notifications": "ウェブプッシュつうちをゆるす", + "notifications": "通知", + "notification_setting": "通知を受け取る:", + "notification_setting_follows": "あなたがフォローしているユーザーから", + "notification_setting_non_follows": "あなたがフォローしていないユーザーから", + "notification_setting_followers": "あなたをフォローしているユーザーから", + "notification_setting_non_followers": "あなたをフォローしていないユーザーから", + "notification_mutes": "特定のユーザーからの通知を止めるには、ミュートしてください。", + "notification_blocks": "ブロックしているユーザーからの通知は、すべて止まります。", + "enable_web_push_notifications": "ウェブプッシュ通知を許可する", "style": { "switcher": { - "keep_color": "いろをのこす", - "keep_shadows": "かげをのこす", - "keep_opacity": "とうめいどをのこす", - "keep_roundness": "まるさをのこす", - "keep_fonts": "フォントをのこす", - "save_load_hint": "「のこす」オプションをONにすると、テーマをえらんだときとロードしたとき、いまのせっていをのこします。また、テーマをエクスポートするとき、これらのオプションをストアします。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべてのせっていをセーブします。", + "keep_color": "色を残す", + "keep_shadows": "影を残す", + "keep_opacity": "透明度を残す", + "keep_roundness": "丸さを残す", + "keep_fonts": "フォントを残す", + "save_load_hint": "「残す」オプションをONにすると、テーマを選んだときとロードしたとき、現在の設定を残します。また、テーマをエクスポートするとき、これらのオプションを維持します。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべての設定を保存します。", "reset": "リセット", "clear_all": "すべてクリア", - "clear_opacity": "とうめいどをクリア" + "clear_opacity": "透明度をクリア" }, "common": { - "color": "いろ", - "opacity": "とうめいど", + "color": "色", + "opacity": "透明度", "contrast": { "hint": "コントラストは {ratio} です。{level}。({context})", "level": { - "aa": "AAレベルガイドライン (ミニマル) をみたします", - "aaa": "AAAレベルガイドライン (レコメンデッド) をみたします。", - "bad": "ガイドラインをみたしません。" + "aa": "AAレベルガイドライン (ミニマル) を満たします", + "aaa": "AAAレベルガイドライン (レコメンデッド) を満たします。", + "bad": "ガイドラインを満たしません。" }, "context": { - "18pt": "おおきい (18ポイントいじょう) テキスト", + "18pt": "大きい (18ポイント以上) テキスト", "text": "テキスト" } } }, "common_colors": { - "_tab_label": "きょうつう", - "main": "きょうつうのいろ", - "foreground_hint": "「くわしく」タブで、もっとこまかくせっていできます", + "_tab_label": "共通", + "main": "共通の色", + "foreground_hint": "「詳細」タブで、もっと細かく設定できます", "rgbo": "アイコンとアクセントとバッジ" }, "advanced_colors": { - "_tab_label": "くわしく", + "_tab_label": "詳細", "alert": "アラートのバックグラウンド", "alert_error": "エラー", "badge": "バッジのバックグラウンド", - "badge_notification": "つうち", + "badge_notification": "通知", "panel_header": "パネルヘッダー", "top_bar": "トップバー", - "borders": "さかいめ", + "borders": "境界", "buttons": "ボタン", "inputs": "インプットフィールド", - "faint_text": "うすいテキスト" + "faint_text": "薄いテキスト" }, "radii": { - "_tab_label": "まるさ" + "_tab_label": "丸さ" }, "shadows": { - "_tab_label": "ひかりとかげ", + "_tab_label": "光と影", "component": "コンポーネント", "override": "オーバーライド", - "shadow_id": "かげ #{value}", + "shadow_id": "影 #{value}", "blur": "ぼかし", - "spread": "ひろがり", - "inset": "うちがわ", - "hint": "かげのせっていでは、いろのあたいとして --variable をつかうことができます。これはCSS3へんすうです。ただし、とうめいどのせっていは、きかなくなります。", + "spread": "広がり", + "inset": "内側", + "hint": "影の設定では、色の値として --variable を使うことができます。これはCSS3変数です。ただし、透明度の設定は、効かなくなります。", "filter_hint": { - "always_drop_shadow": "ブラウザーがサポートしていれば、つねに {0} がつかわれます。", + "always_drop_shadow": "ブラウザーがサポートしていれば、常に {0} が使われます。", "drop_shadow_syntax": "{0} は、{1} パラメーターと {2} キーワードをサポートしていません。", - "avatar_inset": "うちがわのかげと、そとがわのかげを、いっしょにつかうと、とうめいなアバターが、へんなみためになります。", - "spread_zero": "ひろがりが 0 よりもおおきなかげは、0 とおなじです。", - "inset_classic": "うちがわのかげは {0} をつかいます。" + "avatar_inset": "内側の影と外側の影を同時に使うと、透明なアバターの表示が乱れます。", + "spread_zero": "広がりが 0 よりも大きな影は、0 と同じです。", + "inset_classic": "内側の影は {0} を使います。" }, "components": { "panel": "パネル", "panelHeader": "パネルヘッダー", "topBar": "トップバー", "avatar": "ユーザーアバター (プロフィール)", - "avatarStatus": "ユーザーアバター (とうこう)", + "avatarStatus": "ユーザーアバター (投稿)", "popup": "ポップアップとツールチップ", "button": "ボタン", "buttonHover": "ボタン (ホバー)", - "buttonPressed": "ボタン (おされているとき)", - "buttonPressedHover": "ボタン (ホバー、かつ、おされているとき)", + "buttonPressed": "ボタン (押されているとき)", + "buttonPressedHover": "ボタン (ホバー、かつ、押されているとき)", "input": "インプットフィールド" } }, "fonts": { "_tab_label": "フォント", - "help": "「カスタム」をえらんだときは、システムにあるフォントのなまえを、ただしくにゅうりょくしてください。", + "help": "「カスタム」を選んだときは、システムにあるフォントの名前を、正しく入力してください。", "components": { "interface": "インターフェース", "input": "インプットフィールド", - "post": "とうこう", - "postCode": "モノスペース (とうこうがリッチテキストであるとき)" + "post": "投稿", + "postCode": "等幅 (投稿がリッチテキストであるとき)" }, - "family": "フォントめい", - "size": "おおきさ (px)", - "weight": "ふとさ", + "family": "フォント名", + "size": "大きさ (px)", + "weight": "太さ", "custom": "カスタム" }, "preview": { "header": "プレビュー", - "content": "ほんぶん", - "error": "エラーのれい", + "content": "本文", + "error": "エラーの例", "button": "ボタン", - "text": "これは{0}と{1}のれいです。", + "text": "これは{0}と{1}の例です。", "mono": "monospace", - "input": "はねだくうこうに、つきました。", - "faint_link": "とてもたすけになるマニュアル", - "fine_print": "わたしたちの{0}を、よまないでください!", + "input": "羽田空港に着きました。", + "faint_link": "とても助けになるマニュアル", + "fine_print": "私たちの{0}を、読まないでください!", "header_faint": "エラーではありません", - "checkbox": "りようきやくを、よみました", + "checkbox": "利用規約を読みました", "link": "ハイパーリンク" } }, @@ -505,38 +505,38 @@ "timeline": { "collapse": "たたむ", "conversation": "スレッド", - "error_fetching": "よみこみがエラーになりました", - "load_older": "ふるいステータス", - "no_retweet_hint": "とうこうを「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります", + "error_fetching": "読み込みがエラーになりました", + "load_older": "古いステータス", + "no_retweet_hint": "投稿を「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります", "repeated": "リピート", - "show_new": "よみこみ", - "up_to_date": "さいしん", - "no_more_statuses": "これでおわりです", - "no_statuses": "ありません" + "show_new": "読み込み", + "up_to_date": "最新", + "no_more_statuses": "これで終わりです", + "no_statuses": "ステータスはありません" }, "status": { - "favorites": "おきにいり", + "favorites": "お気に入り", "repeats": "リピート", - "delete": "ステータスをけす", - "pin": "プロフィールにピンどめする", - "unpin": "プロフィールにピンどめするのをやめる", - "pinned": "ピンどめ", - "delete_confirm": "ほんとうに、このステータスを、けしてもいいですか?", - "reply_to": "へんしん:", - "replies_list": "へんしん:", - "mute_conversation": "スレッドをミュートする", - "unmute_conversation": "スレッドをミュートするのをやめる" + "delete": "ステータスを削除", + "pin": "プロフィールにピン留め", + "unpin": "プロフィールのピン留めを外す", + "pinned": "ピン留め", + "delete_confirm": "本当にこのステータスを削除してもよろしいですか?", + "reply_to": "返信", + "replies_list": "返信:", + "mute_conversation": "スレッドをミュート", + "unmute_conversation": "スレッドのミュートを解除" }, "user_card": { - "approve": "うけいれ", + "approve": "受け入れ", "block": "ブロック", "blocked": "ブロックしています!", - "deny": "おことわり", - "favorites": "おきにいり", + "deny": "お断り", + "favorites": "お気に入り", "follow": "フォロー", - "follow_sent": "リクエストを、おくりました!", + "follow_sent": "リクエストを送りました!", "follow_progress": "リクエストしています…", - "follow_again": "ふたたびリクエストをおくりますか?", + "follow_again": "再びリクエストを送りますか?", "follow_unfollow": "フォローをやめる", "followees": "フォロー", "followers": "フォロワー", @@ -549,66 +549,66 @@ "muted": "ミュートしています!", "per_day": "/日", "remote_follow": "リモートフォロー", - "report": "つうほう", + "report": "通報", "statuses": "ステータス", - "subscribe": "サブスクライブ", - "unsubscribe": "サブスクライブをやめる", - "unblock": "ブロックをやめる", - "unblock_progress": "ブロックをとりけしています...", + "subscribe": "購読", + "unsubscribe": "購読を解除", + "unblock": "ブロック解除", + "unblock_progress": "ブロックを解除しています...", "block_progress": "ブロックしています...", - "unmute": "ミュートをやめる", - "unmute_progress": "ミュートをとりけしています...", + "unmute": "ミュート解除", + "unmute_progress": "ミュートを解除しています...", "mute_progress": "ミュートしています...", "admin_menu": { "moderation": "モデレーション", - "grant_admin": "アドミンにする", - "revoke_admin": "アドミンをやめさせる", - "grant_moderator": "モデレーターにする", - "revoke_moderator": "モデレーターをやめさせる", + "grant_admin": "管理者権限を付与", + "revoke_admin": "管理者権限を解除", + "grant_moderator": "モデレーター権限を付与", + "revoke_moderator": "モデレーター権限を解除", "activate_account": "アカウントをアクティブにする", "deactivate_account": "アカウントをアクティブでなくする", - "delete_account": "アカウントをけす", - "force_nsfw": "すべてのとうこうをNSFWにする", - "strip_media": "とうこうからメディアをなくす", - "force_unlisted": "とうこうをアンリステッドにする", - "sandbox": "とうこうをフォロワーのみにする", - "disable_remote_subscription": "ほかのインスタンスからフォローされないようにする", + "delete_account": "アカウントを削除", + "force_nsfw": "すべての投稿をNSFWにする", + "strip_media": "投稿からメディアを除去する", + "force_unlisted": "投稿を未収載にする", + "sandbox": "投稿をフォロワーのみにする", + "disable_remote_subscription": "他のインスタンスからフォローされないようにする", "disable_any_subscription": "フォローされないようにする", - "quarantine": "ほかのインスタンスのユーザーのとうこうをとめる", - "delete_user": "ユーザーをけす", - "delete_user_confirmation": "あなたは、ほんとうに、きはたしかですか? これは、とりけすことが、できません。" + "quarantine": "他のインスタンスからの投稿を止める", + "delete_user": "ユーザーを削除", + "delete_user_confirmation": "あなたの精神状態に何か問題はございませんか? この操作を取り消すことはできません。" } }, "user_profile": { "timeline_title": "ユーザータイムライン", - "profile_does_not_exist": "ごめんなさい。このプロフィールは、そんざいしません。", - "profile_loading_error": "ごめんなさい。プロフィールのロードがエラーになりました。" + "profile_does_not_exist": "申し訳ない。このプロフィールは存在しません。", + "profile_loading_error": "申し訳ない。プロフィールの読み込みがエラーになりました。" }, "user_reporting": { - "title": "つうほうする: {0}", - "add_comment_description": "このつうほうは、あなたのインスタンスのモデレーターに、おくられます。このアカウントを、つうほうするりゆうを、せつめいすることができます:", - "additional_comments": "ついかのコメント", - "forward_description": "このアカウントは、ほかのインスタンスのものです。そのインスタンスにも、このつうほうのコピーを、おくりますか?", - "forward_to": "コピーをおくる: {0}", - "submit": "そうしん", - "generic_error": "あなたのリクエストをうけつけようとしましたが、エラーになってしまいました。" + "title": "通報する: {0}", + "add_comment_description": "この通報は、あなたのインスタンスのモデレーターに送られます。このアカウントを通報する理由を説明することができます:", + "additional_comments": "追加のコメント", + "forward_description": "このアカウントは他のサーバーに置かれています。この通報のコピーをリモートのサーバーに送りますか?", + "forward_to": "転送する: {0}", + "submit": "送信", + "generic_error": "あなたのリクエストを処理しようとしましたが、エラーになりました。" }, "who_to_follow": { - "more": "くわしく", + "more": "詳細", "who_to_follow": "おすすめユーザー" }, "tool_tip": { "media_upload": "メディアをアップロード", "repeat": "リピート", - "reply": "リプライ", - "favorite": "おきにいり", - "user_settings": "ユーザーせってい" + "reply": "返信", + "favorite": "お気に入り", + "user_settings": "ユーザー設定" }, "upload":{ "error": { - "base": "アップロードにしっぱいしました。", - "file_too_big": "ファイルがおおきすぎます [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]", - "default": "しばらくしてから、ためしてください" + "base": "アップロードに失敗しました。", + "file_too_big": "ファイルが大きすぎます [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]", + "default": "しばらくしてから試してください" }, "file_size_units": { "B": "B", @@ -619,21 +619,21 @@ } }, "search": { - "people": "ひとびと", + "people": "人々", "hashtags": "ハッシュタグ", - "person_talking": "{count} にんが、はなしています", - "people_talking": "{count} にんが、はなしています", - "no_results": "みつかりませんでした" + "person_talking": "{count} 人が話しています", + "people_talking": "{count} 人が話しています", + "no_results": "見つかりませんでした" }, "password_reset": { - "forgot_password": "パスワードを、わすれましたか?", + "forgot_password": "パスワードを忘れましたか?", "password_reset": "パスワードリセット", - "instruction": "あなたのメールアドレスかユーザーめいをいれてください。パスワードをリセットするためのリンクをおくります。", - "placeholder": "あなたのメールアドレスかユーザーめい", - "check_email": "パスワードをリセットするためのリンクがかかれたメールが、とどいているかどうか、みてください。", - "return_home": "ホームページにもどる", - "not_found": "そのメールアドレスまたはユーザーめいを、みつけることができませんでした。", - "too_many_requests": "パスワードリセットを、ためすことが、おおすぎます。しばらくしてから、ためしてください。", - "password_reset_disabled": "このインスタンスでは、パスワードリセットは、できません。インスタンスのアドミニストレーターに、おといあわせください。" + "instruction": "メールアドレスまたはユーザー名を入力してください。パスワードをリセットするためのリンクを送信します。", + "placeholder": "メールアドレスまたはユーザー名", + "check_email": "パスワードをリセットするためのリンクが記載されたメールが届いているか確認してください。", + "return_home": "ホームページに戻る", + "not_found": "メールアドレスまたはユーザー名が見つかりませんでした。", + "too_many_requests": "試行回数の制限に達しました。しばらく時間を置いてから再試行してください。", + "password_reset_disabled": "このインスタンスではパスワードリセットは無効になっています。インスタンスの管理者に連絡してください。" } } diff --git a/src/i18n/ja_easy.json b/src/i18n/ja_easy.json new file mode 100644 index 00000000..592a7257 --- /dev/null +++ b/src/i18n/ja_easy.json @@ -0,0 +1,639 @@ +{ + "chat": { + "title": "チャット" + }, + "exporter": { + "export": "エクスポート", + "processing": "おまちください。しばらくすると、あなたのファイルをダウンロードするように、メッセージがでます。" + }, + "features_panel": { + "chat": "チャット", + "gopher": "Gopher", + "media_proxy": "メディアプロクシ", + "scope_options": "こうかいはんいせんたく", + "text_limit": "もじのかず", + "title": "ゆうこうなきのう", + "who_to_follow": "おすすめユーザー" + }, + "finder": { + "error_fetching_user": "ユーザーけんさくがエラーになりました。", + "find_user": "ユーザーをさがす" + }, + "general": { + "apply": "てきよう", + "submit": "そうしん", + "more": "つづき", + "generic_error": "エラーになりました", + "optional": "かかなくてもよい", + "show_more": "つづきをみる", + "show_less": "たたむ", + "cancel": "キャンセル", + "disable": "なし", + "enable": "あり", + "confirm": "たしかめる", + "verify": "たしかめる" + }, + "image_cropper": { + "crop_picture": "がぞうをきりぬく", + "save": "セーブ", + "save_without_cropping": "きりぬかずにセーブ", + "cancel": "キャンセル" + }, + "importer": { + "submit": "そうしん", + "success": "インポートできました。", + "error": "インポートがエラーになりました。" + }, + "login": { + "login": "ログイン", + "description": "OAuthでログイン", + "logout": "ログアウト", + "password": "パスワード", + "placeholder": "れい: lain", + "register": "はじめる", + "username": "ユーザーめい", + "hint": "はなしあいにくわわるには、ログインしてください", + "authentication_code": "にんしょうコード", + "enter_recovery_code": "リカバリーコードをいれてください", + "enter_two_factor_code": "2-ファクターコードをいれてください", + "recovery_code": "リカバリーコード", + "heading" : { + "totp" : "2-ファクターにんしょう", + "recovery" : "2-ファクターリカバリー" + } + }, + "media_modal": { + "previous": "まえ", + "next": "つぎ" + }, + "nav": { + "about": "これはなに?", + "back": "もどる", + "chat": "ローカルチャット", + "friend_requests": "フォローリクエスト", + "mentions": "メンション", + "interactions": "やりとり", + "dms": "ダイレクトメッセージ", + "public_tl": "パブリックタイムライン", + "timeline": "タイムライン", + "twkn": "つながっているすべてのネットワーク", + "user_search": "ユーザーをさがす", + "search": "さがす", + "who_to_follow": "おすすめユーザー", + "preferences": "せってい" + }, + "notifications": { + "broken_favorite": "ステータスがみつかりません。さがしています...", + "favorited_you": "あなたのステータスがおきにいりされました", + "followed_you": "フォローされました", + "load_older": "ふるいつうちをみる", + "notifications": "つうち", + "read": "よんだ!", + "repeated_you": "あなたのステータスがリピートされました", + "no_more_notifications": "つうちはありません" + }, + "polls": { + "add_poll": "いれふだをはじめる", + "add_option": "オプションをふやす", + "option": "オプション", + "votes": "いれふだ", + "vote": "ふだをいれる", + "type": "いれふだのかた", + "single_choice": "ひとつえらぶ", + "multiple_choices": "いくつでもえらべる", + "expiry": "いれふだのながさ", + "expires_in": "いれふだは {0} で、おわります", + "expired": "いれふだは {0} まえに、おわりました", + "not_enough_options": "ユニークなオプションが、たりません" + }, + "emoji": { + "stickers": "ステッカー", + "emoji": "えもじ", + "keep_open": "ピッカーをあけたままにする", + "search_emoji": "えもじをさがす", + "add_emoji": "えもじをうちこむ", + "custom": "カスタムえもじ", + "unicode": "ユニコードえもじ" + }, + "stickers": { + "add_sticker": "ステッカーをふやす" + }, + "interactions": { + "favs_repeats": "リピートとおきにいり", + "follows": "あたらしいフォロー", + "load_older": "ふるいやりとりをみる" + }, + "post_status": { + "new_status": "とうこうする", + "account_not_locked_warning": "あなたのアカウントは {0} ではありません。あなたをフォローすれば、だれでも、フォロワーげんていのステータスをよむことができます。", + "account_not_locked_warning_link": "ロックされたアカウント", + "attachments_sensitive": "ファイルをNSFWにする", + "content_type": { + "text/plain": "プレーンテキスト", + "text/html": "HTML", + "text/markdown": "Markdown", + "text/bbcode": "BBCode" + }, + "content_warning": "せつめい (かかなくてもよい)", + "default": "はねだくうこうに、つきました。", + "direct_warning_to_all": "このとうこうは、メンションされたすべてのユーザーが、みることができます。", + "direct_warning_to_first_only": "このとうこうは、メッセージのはじめでメンションされたユーザーだけが、みることができます。", + "direct_warning": "このステータスは、メンションされたユーザーだけが、よむことができます。", + "posting": "とうこう", + "scope_notice": { + "public": "このとうこうは、だれでもみることができます", + "private": "このとうこうは、あなたのフォロワーだけが、みることができます", + "unlisted": "このとうこうは、パブリックタイムラインと、つながっているすべてのネットワークでは、みることができません" + }, + "scope": { + "direct": "ダイレクト: メンションされたユーザーのみにとどきます。", + "private": "フォロワーげんてい: フォロワーのみにとどきます。", + "public": "パブリック: パブリックタイムラインにとどきます。", + "unlisted": "アンリステッド: パブリックタイムラインにとどきません。" + } + }, + "registration": { + "bio": "プロフィール", + "email": "Eメール", + "fullname": "スクリーンネーム", + "password_confirm": "パスワードのかくにん", + "registration": "はじめる", + "token": "しょうたいトークン", + "captcha": "CAPTCHA", + "new_captcha": "もじがよめないときは、がぞうをクリックすると、あたらしいがぞうになります", + "username_placeholder": "れい: lain", + "fullname_placeholder": "れい: いわくら れいん", + "bio_placeholder": "れい:\nごきげんよう。わたしはれいん。\nわたしはアニメのおんなのこで、にほんのベッドタウンにすんでいます。ワイヤードで、わたしにあったことが、あるかもしれませんね。", + "validations": { + "username_required": "なにかかいてください", + "fullname_required": "なにかかいてください", + "email_required": "なにかかいてください", + "password_required": "なにかかいてください", + "password_confirmation_required": "なにかかいてください", + "password_confirmation_match": "パスワードがちがいます" + } + }, + "selectable_list": { + "select_all": "すべてえらぶ" + }, + "settings": { + "app_name": "アプリのなまえ", + "security": "セキュリティ", + "enter_current_password_to_confirm": "あなたのアイデンティティをたしかめるため、あなたのいまのパスワードをかいてください", + "mfa": { + "otp" : "OTP", + "setup_otp" : "OTPをつくる", + "wait_pre_setup_otp" : "OTPをよういしています", + "confirm_and_enable" : "OTPをたしかめて、ゆうこうにする", + "title": "2-ファクターにんしょう", + "generate_new_recovery_codes" : "あたらしいリカバリーコードをつくる", + "warning_of_generate_new_codes" : "あたらしいリカバリーコードをつくったら、ふるいコードはつかえなくなります。", + "recovery_codes" : "リカバリーコード。", + "waiting_a_recovery_codes": "バックアップコードをうけとっています...", + "recovery_codes_warning" : "コードをかきうつすか、ひとにみられないところにセーブしてください。そうでなければ、あなたはこのコードをふたたびみることはできません。もしあなたが、2FAアプリのアクセスをうしなって、なおかつ、リカバリーコードもおもいだせないならば、あなたはあなたのアカウントから、しめだされます。", + "authentication_methods" : "にんしょうメソッド", + "scan": { + "title": "スキャン", + "desc": "あなたの2-ファクターアプリをつかって、このQRコードをスキャンするか、テキストキーをうちこんでください:", + "secret_code": "キー" + }, + "verify": { + "desc": "2-ファクターにんしょうをつかうには、あなたの2-ファクターアプリのコードをいれてください:" + } + }, + "attachmentRadius": "ファイル", + "attachments": "ファイル", + "autoload": "したにスクロールしたとき、じどうてきによみこむ。", + "avatar": "アバター", + "avatarAltRadius": "つうちのアバター", + "avatarRadius": "アバター", + "background": "バックグラウンド", + "bio": "プロフィール", + "block_export": "ブロックのエクスポート", + "block_export_button": "ブロックをCSVファイルにエクスポート", + "block_import": "ブロックのインポート", + "block_import_error": "ブロックのインポートがエラーになりました", + "blocks_imported": "ブロックをインポートしました! じっさいにブロックするまでには、もうしばらくかかります。", + "blocks_tab": "ブロック", + "btnRadius": "ボタン", + "cBlue": "リプライとフォロー", + "cGreen": "リピート", + "cOrange": "おきにいり", + "cRed": "キャンセル", + "change_password": "パスワードをかえる", + "change_password_error": "パスワードをかえることが、できなかったかもしれません。", + "changed_password": "パスワードが、かわりました!", + "collapse_subject": "せつめいのあるとうこうをたたむ", + "composing": "とうこう", + "confirm_new_password": "あたらしいパスワードのかくにん", + "current_avatar": "いまのアバター", + "current_password": "いまのパスワード", + "current_profile_banner": "いまのプロフィールバナー", + "data_import_export_tab": "インポートとエクスポート", + "default_vis": "デフォルトのこうかいはんい", + "delete_account": "アカウントをけす", + "delete_account_description": "あなたのアカウントとメッセージが、きえます。", + "delete_account_error": "アカウントをけすことが、できなかったかもしれません。インスタンスのアドミニストレーターに、おといあわせください。", + "delete_account_instructions": "ほんとうにアカウントをけしてもいいなら、パスワードをかいてください。", + "discoverable": "けんさくなどのサービスで、このアカウントをみつけてもよい", + "avatar_size_instruction": "アバターのおおきさは、150×150ピクセルか、それよりもおおきくするといいです。", + "pad_emoji": "えもじをピッカーでえらんだとき、えもじのまわりにスペースをいれる", + "export_theme": "セーブ", + "filtering": "フィルタリング", + "filtering_explanation": "これらのことばをふくむすべてのものがミュートされます。1ぎょうに1つのことばをかいてください。", + "follow_export": "フォローのエクスポート", + "follow_export_button": "エクスポート", + "follow_export_processing": "おまちください。まもなくファイルをダウンロードできます。", + "follow_import": "フォローインポート", + "follow_import_error": "フォローのインポートがエラーになりました。", + "follows_imported": "フォローがインポートされました! すこしじかんがかかるかもしれません。", + "foreground": "フォアグラウンド", + "general": "ぜんぱん", + "hide_attachments_in_convo": "スレッドのファイルをかくす", + "hide_attachments_in_tl": "タイムラインのファイルをかくす", + "hide_muted_posts": "ミュートしたユーザーのとうこうをかくす", + "max_thumbnails": "ひとつのとうこうにいれられるサムネイルのかず", + "hide_isp": "インスタンススペシフィックパネルをかくす", + "preload_images": "がぞうをさきよみする", + "use_one_click_nsfw": "NSFWなファイルを1クリックでひらく", + "hide_post_stats": "とうこうのとうけいをかくす (れい: おきにいりのかず)", + "hide_user_stats": "ユーザーのとうけいをかくす (れい: フォロワーのかず)", + "hide_filtered_statuses": "フィルターされたとうこうをかくす", + "import_blocks_from_a_csv_file": "CSVファイルからブロックをインポートする", + "import_followers_from_a_csv_file": "CSVファイルからフォローをインポートする", + "import_theme": "ロード", + "inputRadius": "インプットフィールド", + "checkboxRadius": "チェックボックス", + "instance_default": "(デフォルト: {value})", + "instance_default_simple": "(デフォルト)", + "interface": "インターフェース", + "interfaceLanguage": "インターフェースのことば", + "invalid_theme_imported": "このファイルはPleromaのテーマではありません。テーマはへんこうされませんでした。", + "limited_availability": "あなたのブラウザではできません", + "links": "リンク", + "lock_account_description": "あなたがみとめたひとだけ、あなたのアカウントをフォローできる", + "loop_video": "ビデオをくりかえす", + "loop_video_silent_only": "おとのないビデオだけくりかえす", + "mutes_tab": "ミュート", + "play_videos_in_modal": "ビデオをメディアビューアーでみる", + "use_contain_fit": "がぞうのサムネイルを、きりぬかない", + "name": "なまえ", + "name_bio": "なまえとプロフィール", + "new_password": "あたらしいパスワード", + "notification_visibility": "ひょうじするつうち", + "notification_visibility_follows": "フォロー", + "notification_visibility_likes": "おきにいり", + "notification_visibility_mentions": "メンション", + "notification_visibility_repeats": "リピート", + "no_rich_text_description": "リッチテキストをつかわない", + "no_blocks": "ブロックしていません", + "no_mutes": "ミュートしていません", + "hide_follows_description": "フォローしているひとをみせない", + "hide_followers_description": "フォロワーをみせない", + "hide_follows_count_description": "フォローしているひとのかずをみせない", + "hide_followers_count_description": "フォロワーのかずをみせない", + "show_admin_badge": "アドミンのしるしをみせる", + "show_moderator_badge": "モデレーターのしるしをみせる", + "nsfw_clickthrough": "NSFWなファイルをかくす", + "oauth_tokens": "OAuthトークン", + "token": "トークン", + "refresh_token": "トークンをリフレッシュ", + "valid_until": "おわりのとき", + "revoke_token": "とりけす", + "panelRadius": "パネル", + "pause_on_unfocused": "タブにフォーカスがないときストリーミングをとめる", + "presets": "プリセット", + "profile_background": "プロフィールのバックグラウンド", + "profile_banner": "プロフィールバナー", + "profile_tab": "プロフィール", + "radii_help": "インターフェースのまるさをせっていする。", + "replies_in_timeline": "タイムラインのリプライ", + "reply_link_preview": "カーソルをかさねたとき、リプライのプレビューをみる", + "reply_visibility_all": "すべてのリプライをみる", + "reply_visibility_following": "わたしにあてられたリプライと、フォローしているひとからのリプライをみる", + "reply_visibility_self": "わたしにあてられたリプライをみる", + "autohide_floating_post_button": "あたらしいとうこうのボタンを、じどうてきにかくす (モバイル)", + "saving_err": "せっていをセーブできませんでした", + "saving_ok": "せっていをセーブしました", + "search_user_to_block": "ブロックしたいひとを、ここでけんさくできます", + "search_user_to_mute": "ミュートしたいひとを、ここでけんさくできます", + "security_tab": "セキュリティ", + "scope_copy": "リプライするとき、こうかいはんいをコピーする (DMのこうかいはんいは、つねにコピーされます)", + "minimal_scopes_mode": "こうかいはんいせんたくオプションを、ちいさくする", + "set_new_avatar": "あたらしいアバターをせっていする", + "set_new_profile_background": "あたらしいプロフィールのバックグラウンドをせっていする", + "set_new_profile_banner": "あたらしいプロフィールバナーを設定する", + "settings": "せってい", + "subject_input_always_show": "サブジェクトフィールドをいつでもひょうじする", + "subject_line_behavior": "リプライするときサブジェクトをコピーする", + "subject_line_email": "メールふう: \"re: サブジェクト\"", + "subject_line_mastodon": "マストドンふう: そのままコピー", + "subject_line_noop": "コピーしない", + "post_status_content_type": "とうこうのコンテントタイプ", + "stop_gifs": "カーソルをかさねたとき、GIFをうごかす", + "streaming": "うえまでスクロールしたとき、じどうてきにストリーミングする", + "text": "もじ", + "theme": "テーマ", + "theme_help": "カラーテーマをカスタマイズできます", + "theme_help_v2_1": "チェックボックスをONにすると、コンポーネントごとに、いろと、とうめいどを、オーバーライドできます。「すべてクリア」ボタンをおすと、すべてのオーバーライドを、やめます。", + "theme_help_v2_2": "バックグラウンドとテキストのコントラストをあらわすアイコンがあります。マウスをホバーすると、くわしいせつめいがでます。とうめいないろをつかっているときは、もっともわるいばあいのコントラストがしめされます。", + "upload_a_photo": "がぞうをアップロード", + "tooltipRadius": "ツールチップとアラート", + "user_settings": "ユーザーせってい", + "values": { + "false": "いいえ", + "true": "はい" + }, + "notifications": "つうち", + "notification_setting": "つうちをうけとる:", + "notification_setting_follows": "あなたがフォローしているひとから", + "notification_setting_non_follows": "あなたがフォローしていないひとから", + "notification_setting_followers": "あなたをフォローしているひとから", + "notification_setting_non_followers": "あなたをフォローしていないひとから", + "notification_mutes": "あるユーザーからのつうちをとめるには、ミュートしてください。", + "notification_blocks": "ブロックしているユーザーからのつうちは、すべてとまります。", + "enable_web_push_notifications": "ウェブプッシュつうちをゆるす", + "style": { + "switcher": { + "keep_color": "いろをのこす", + "keep_shadows": "かげをのこす", + "keep_opacity": "とうめいどをのこす", + "keep_roundness": "まるさをのこす", + "keep_fonts": "フォントをのこす", + "save_load_hint": "「のこす」オプションをONにすると、テーマをえらんだときとロードしたとき、いまのせっていをのこします。また、テーマをエクスポートするとき、これらのオプションをストアします。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべてのせっていをセーブします。", + "reset": "リセット", + "clear_all": "すべてクリア", + "clear_opacity": "とうめいどをクリア" + }, + "common": { + "color": "いろ", + "opacity": "とうめいど", + "contrast": { + "hint": "コントラストは {ratio} です。{level}。({context})", + "level": { + "aa": "AAレベルガイドライン (ミニマル) をみたします", + "aaa": "AAAレベルガイドライン (レコメンデッド) をみたします。", + "bad": "ガイドラインをみたしません。" + }, + "context": { + "18pt": "おおきい (18ポイントいじょう) テキスト", + "text": "テキスト" + } + } + }, + "common_colors": { + "_tab_label": "きょうつう", + "main": "きょうつうのいろ", + "foreground_hint": "「くわしく」タブで、もっとこまかくせっていできます", + "rgbo": "アイコンとアクセントとバッジ" + }, + "advanced_colors": { + "_tab_label": "くわしく", + "alert": "アラートのバックグラウンド", + "alert_error": "エラー", + "badge": "バッジのバックグラウンド", + "badge_notification": "つうち", + "panel_header": "パネルヘッダー", + "top_bar": "トップバー", + "borders": "さかいめ", + "buttons": "ボタン", + "inputs": "インプットフィールド", + "faint_text": "うすいテキスト" + }, + "radii": { + "_tab_label": "まるさ" + }, + "shadows": { + "_tab_label": "ひかりとかげ", + "component": "コンポーネント", + "override": "オーバーライド", + "shadow_id": "かげ #{value}", + "blur": "ぼかし", + "spread": "ひろがり", + "inset": "うちがわ", + "hint": "かげのせっていでは、いろのあたいとして --variable をつかうことができます。これはCSS3へんすうです。ただし、とうめいどのせっていは、きかなくなります。", + "filter_hint": { + "always_drop_shadow": "ブラウザーがサポートしていれば、つねに {0} がつかわれます。", + "drop_shadow_syntax": "{0} は、{1} パラメーターと {2} キーワードをサポートしていません。", + "avatar_inset": "うちがわのかげと、そとがわのかげを、いっしょにつかうと、とうめいなアバターが、へんなみためになります。", + "spread_zero": "ひろがりが 0 よりもおおきなかげは、0 とおなじです。", + "inset_classic": "うちがわのかげは {0} をつかいます。" + }, + "components": { + "panel": "パネル", + "panelHeader": "パネルヘッダー", + "topBar": "トップバー", + "avatar": "ユーザーアバター (プロフィール)", + "avatarStatus": "ユーザーアバター (とうこう)", + "popup": "ポップアップとツールチップ", + "button": "ボタン", + "buttonHover": "ボタン (ホバー)", + "buttonPressed": "ボタン (おされているとき)", + "buttonPressedHover": "ボタン (ホバー、かつ、おされているとき)", + "input": "インプットフィールド" + } + }, + "fonts": { + "_tab_label": "フォント", + "help": "「カスタム」をえらんだときは、システムにあるフォントのなまえを、ただしくにゅうりょくしてください。", + "components": { + "interface": "インターフェース", + "input": "インプットフィールド", + "post": "とうこう", + "postCode": "モノスペース (とうこうがリッチテキストであるとき)" + }, + "family": "フォントめい", + "size": "おおきさ (px)", + "weight": "ふとさ", + "custom": "カスタム" + }, + "preview": { + "header": "プレビュー", + "content": "ほんぶん", + "error": "エラーのれい", + "button": "ボタン", + "text": "これは{0}と{1}のれいです。", + "mono": "monospace", + "input": "はねだくうこうに、つきました。", + "faint_link": "とてもたすけになるマニュアル", + "fine_print": "わたしたちの{0}を、よまないでください!", + "header_faint": "エラーではありません", + "checkbox": "りようきやくを、よみました", + "link": "ハイパーリンク" + } + }, + "version": { + "title": "バージョン", + "backend_version": "バックエンドのバージョン", + "frontend_version": "フロントエンドのバージョン" + } + }, + "time": { + "day": "{0}日", + "days": "{0}日", + "day_short": "{0}日", + "days_short": "{0}日", + "hour": "{0}時間", + "hours": "{0}時間", + "hour_short": "{0}時間", + "hours_short": "{0}時間", + "in_future": "{0}で", + "in_past": "{0}前", + "minute": "{0}分", + "minutes": "{0}分", + "minute_short": "{0}分", + "minutes_short": "{0}分", + "month": "{0}ヶ月前", + "months": "{0}ヶ月前", + "month_short": "{0}ヶ月前", + "months_short": "{0}ヶ月前", + "now": "たった今", + "now_short": "たった今", + "second": "{0}秒", + "seconds": "{0}秒", + "second_short": "{0}秒", + "seconds_short": "{0}秒", + "week": "{0}週間", + "weeks": "{0}週間", + "week_short": "{0}週間", + "weeks_short": "{0}週間", + "year": "{0}年", + "years": "{0}年", + "year_short": "{0}年", + "years_short": "{0}年" + }, + "timeline": { + "collapse": "たたむ", + "conversation": "スレッド", + "error_fetching": "よみこみがエラーになりました", + "load_older": "ふるいステータス", + "no_retweet_hint": "とうこうを「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります", + "repeated": "リピート", + "show_new": "よみこみ", + "up_to_date": "さいしん", + "no_more_statuses": "これでおわりです", + "no_statuses": "ありません" + }, + "status": { + "favorites": "おきにいり", + "repeats": "リピート", + "delete": "ステータスをけす", + "pin": "プロフィールにピンどめする", + "unpin": "プロフィールにピンどめするのをやめる", + "pinned": "ピンどめ", + "delete_confirm": "ほんとうに、このステータスを、けしてもいいですか?", + "reply_to": "へんしん:", + "replies_list": "へんしん:", + "mute_conversation": "スレッドをミュートする", + "unmute_conversation": "スレッドをミュートするのをやめる" + }, + "user_card": { + "approve": "うけいれ", + "block": "ブロック", + "blocked": "ブロックしています!", + "deny": "おことわり", + "favorites": "おきにいり", + "follow": "フォロー", + "follow_sent": "リクエストを、おくりました!", + "follow_progress": "リクエストしています…", + "follow_again": "ふたたびリクエストをおくりますか?", + "follow_unfollow": "フォローをやめる", + "followees": "フォロー", + "followers": "フォロワー", + "following": "フォローしています!", + "follows_you": "フォローされました!", + "its_you": "これはあなたです!", + "media": "メディア", + "mention": "メンション", + "mute": "ミュート", + "muted": "ミュートしています!", + "per_day": "/日", + "remote_follow": "リモートフォロー", + "report": "つうほう", + "statuses": "ステータス", + "subscribe": "サブスクライブ", + "unsubscribe": "サブスクライブをやめる", + "unblock": "ブロックをやめる", + "unblock_progress": "ブロックをとりけしています...", + "block_progress": "ブロックしています...", + "unmute": "ミュートをやめる", + "unmute_progress": "ミュートをとりけしています...", + "mute_progress": "ミュートしています...", + "admin_menu": { + "moderation": "モデレーション", + "grant_admin": "アドミンにする", + "revoke_admin": "アドミンをやめさせる", + "grant_moderator": "モデレーターにする", + "revoke_moderator": "モデレーターをやめさせる", + "activate_account": "アカウントをアクティブにする", + "deactivate_account": "アカウントをアクティブでなくする", + "delete_account": "アカウントをけす", + "force_nsfw": "すべてのとうこうをNSFWにする", + "strip_media": "とうこうからメディアをなくす", + "force_unlisted": "とうこうをアンリステッドにする", + "sandbox": "とうこうをフォロワーのみにする", + "disable_remote_subscription": "ほかのインスタンスからフォローされないようにする", + "disable_any_subscription": "フォローされないようにする", + "quarantine": "ほかのインスタンスのユーザーのとうこうをとめる", + "delete_user": "ユーザーをけす", + "delete_user_confirmation": "あなたは、ほんとうに、きはたしかですか? これは、とりけすことが、できません。" + } + }, + "user_profile": { + "timeline_title": "ユーザータイムライン", + "profile_does_not_exist": "ごめんなさい。このプロフィールは、そんざいしません。", + "profile_loading_error": "ごめんなさい。プロフィールのロードがエラーになりました。" + }, + "user_reporting": { + "title": "つうほうする: {0}", + "add_comment_description": "このつうほうは、あなたのインスタンスのモデレーターに、おくられます。このアカウントを、つうほうするりゆうを、せつめいすることができます:", + "additional_comments": "ついかのコメント", + "forward_description": "このアカウントは、ほかのインスタンスのものです。そのインスタンスにも、このつうほうのコピーを、おくりますか?", + "forward_to": "コピーをおくる: {0}", + "submit": "そうしん", + "generic_error": "あなたのリクエストをうけつけようとしましたが、エラーになってしまいました。" + }, + "who_to_follow": { + "more": "くわしく", + "who_to_follow": "おすすめユーザー" + }, + "tool_tip": { + "media_upload": "メディアをアップロード", + "repeat": "リピート", + "reply": "リプライ", + "favorite": "おきにいり", + "user_settings": "ユーザーせってい" + }, + "upload":{ + "error": { + "base": "アップロードにしっぱいしました。", + "file_too_big": "ファイルがおおきすぎます [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]", + "default": "しばらくしてから、ためしてください" + }, + "file_size_units": { + "B": "B", + "KiB": "KiB", + "MiB": "MiB", + "GiB": "GiB", + "TiB": "TiB" + } + }, + "search": { + "people": "ひとびと", + "hashtags": "ハッシュタグ", + "person_talking": "{count} にんが、はなしています", + "people_talking": "{count} にんが、はなしています", + "no_results": "みつかりませんでした" + }, + "password_reset": { + "forgot_password": "パスワードを、わすれましたか?", + "password_reset": "パスワードリセット", + "instruction": "あなたのメールアドレスかユーザーめいをいれてください。パスワードをリセットするためのリンクをおくります。", + "placeholder": "あなたのメールアドレスかユーザーめい", + "check_email": "パスワードをリセットするためのリンクがかかれたメールが、とどいているかどうか、みてください。", + "return_home": "ホームページにもどる", + "not_found": "そのメールアドレスまたはユーザーめいを、みつけることができませんでした。", + "too_many_requests": "パスワードリセットを、ためすことが、おおすぎます。しばらくしてから、ためしてください。", + "password_reset_disabled": "このインスタンスでは、パスワードリセットは、できません。インスタンスのアドミニストレーターに、おといあわせください。" + } +} diff --git a/src/i18n/ja_pedantic.json b/src/i18n/ja_pedantic.json deleted file mode 100644 index 2ca7dca8..00000000 --- a/src/i18n/ja_pedantic.json +++ /dev/null @@ -1,639 +0,0 @@ -{ - "chat": { - "title": "チャット" - }, - "exporter": { - "export": "エクスポート", - "processing": "処理中です。処理が完了すると、ファイルをダウンロードするよう指示があります。" - }, - "features_panel": { - "chat": "チャット", - "gopher": "Gopher", - "media_proxy": "メディアプロクシ", - "scope_options": "公開範囲選択", - "text_limit": "文字の数", - "title": "有効な機能", - "who_to_follow": "おすすめユーザー" - }, - "finder": { - "error_fetching_user": "ユーザー検索がエラーになりました。", - "find_user": "ユーザーを探す" - }, - "general": { - "apply": "適用", - "submit": "送信", - "more": "続き", - "generic_error": "エラーになりました", - "optional": "省略可", - "show_more": "もっと見る", - "show_less": "たたむ", - "cancel": "キャンセル", - "disable": "無効", - "enable": "有効", - "confirm": "確認", - "verify": "検査" - }, - "image_cropper": { - "crop_picture": "画像を切り抜く", - "save": "保存", - "save_without_cropping": "切り抜かずに保存", - "cancel": "キャンセル" - }, - "importer": { - "submit": "送信", - "success": "正常にインポートされました。", - "error": "このファイルをインポートするとき、エラーが発生しました。" - }, - "login": { - "login": "ログイン", - "description": "OAuthでログイン", - "logout": "ログアウト", - "password": "パスワード", - "placeholder": "例: lain", - "register": "登録", - "username": "ユーザー名", - "hint": "会話に加わるには、ログインしてください", - "authentication_code": "認証コード", - "enter_recovery_code": "リカバリーコードを入力してください", - "enter_two_factor_code": "2段階認証コードを入力してください", - "recovery_code": "リカバリーコード", - "heading" : { - "totp" : "2段階認証", - "recovery" : "2段階リカバリー" - } - }, - "media_modal": { - "previous": "前", - "next": "次" - }, - "nav": { - "about": "このインスタンスについて", - "back": "戻る", - "chat": "ローカルチャット", - "friend_requests": "フォローリクエスト", - "mentions": "通知", - "interactions": "インタラクション", - "dms": "ダイレクトメッセージ", - "public_tl": "パブリックタイムライン", - "timeline": "タイムライン", - "twkn": "接続しているすべてのネットワーク", - "user_search": "ユーザーを探す", - "search": "検索", - "who_to_follow": "おすすめユーザー", - "preferences": "設定" - }, - "notifications": { - "broken_favorite": "ステータスが見つかりません。探しています...", - "favorited_you": "あなたのステータスがお気に入りされました", - "followed_you": "フォローされました", - "load_older": "古い通知をみる", - "notifications": "通知", - "read": "読んだ!", - "repeated_you": "あなたのステータスがリピートされました", - "no_more_notifications": "通知はありません" - }, - "polls": { - "add_poll": "投票を追加", - "add_option": "選択肢を追加", - "option": "選択肢", - "votes": "票", - "vote": "投票", - "type": "投票の形式", - "single_choice": "択一式", - "multiple_choices": "複数選択式", - "expiry": "投票期間", - "expires_in": "投票は {0} で終了します", - "expired": "投票は {0} 前に終了しました", - "not_enough_options": "相異なる選択肢が不足しています" - }, - "emoji": { - "stickers": "ステッカー", - "emoji": "絵文字", - "keep_open": "ピッカーを開いたままにする", - "search_emoji": "絵文字を検索", - "add_emoji": "絵文字を挿入", - "custom": "カスタム絵文字", - "unicode": "Unicode絵文字" - }, - "stickers": { - "add_sticker": "ステッカーを追加" - }, - "interactions": { - "favs_repeats": "リピートとお気に入り", - "follows": "新しいフォロワー", - "load_older": "古いインタラクションを見る" - }, - "post_status": { - "new_status": "投稿する", - "account_not_locked_warning": "あなたのアカウントは {0} ではありません。あなたをフォローすれば、誰でも、フォロワー限定のステータスを読むことができます。", - "account_not_locked_warning_link": "ロックされたアカウント", - "attachments_sensitive": "ファイルをNSFWにする", - "content_type": { - "text/plain": "プレーンテキスト", - "text/html": "HTML", - "text/markdown": "Markdown", - "text/bbcode": "BBCode" - }, - "content_warning": "説明 (省略可)", - "default": "羽田空港に着きました。", - "direct_warning_to_all": "この投稿は、メンションされたすべてのユーザーが、見ることができます。", - "direct_warning_to_first_only": "この投稿は、メッセージの冒頭でメンションされたユーザーだけが、見ることができます。", - "direct_warning": "このステータスは、メンションされたユーザーだけが、読むことができます。", - "posting": "投稿", - "scope_notice": { - "public": "この投稿は、誰でも見ることができます", - "private": "この投稿は、あなたのフォロワーだけが、見ることができます。", - "unlisted": "この投稿は、パブリックタイムラインと、接続しているすべてのネットワークには、表示されません。" - }, - "scope": { - "direct": "ダイレクト: メンションされたユーザーのみに届きます。", - "private": "フォロワーげんてい: フォロワーのみに届きます。", - "public": "パブリック: パブリックタイムラインに届きます。", - "unlisted": "アンリステッド: パブリックタイムラインに届きません。" - } - }, - "registration": { - "bio": "プロフィール", - "email": "Eメール", - "fullname": "スクリーンネーム", - "password_confirm": "パスワードの確認", - "registration": "登録", - "token": "招待トークン", - "captcha": "CAPTCHA", - "new_captcha": "文字が読めないときは、画像をクリックすると、新しい画像になります", - "username_placeholder": "例: lain", - "fullname_placeholder": "例: 岩倉玲音", - "bio_placeholder": "例:\nこんにちは。私は玲音。\n私はアニメのキャラクターで、日本の郊外に住んでいます。私をWiredで見たことがあるかもしれません。", - "validations": { - "username_required": "必須", - "fullname_required": "必須", - "email_required": "必須", - "password_required": "必須", - "password_confirmation_required": "必須", - "password_confirmation_match": "パスワードが違います" - } - }, - "selectable_list": { - "select_all": "すべて選択" - }, - "settings": { - "app_name": "アプリの名称", - "security": "セキュリティ", - "enter_current_password_to_confirm": "あなたのアイデンティティを証明するため、現在のパスワードを入力してください", - "mfa": { - "otp" : "OTP", - "setup_otp" : "OTPのセットアップ", - "wait_pre_setup_otp" : "OTPのプリセット", - "confirm_and_enable" : "OTPの確認と有効化", - "title": "2段階認証", - "generate_new_recovery_codes" : "新しいリカバリーコードを生成", - "warning_of_generate_new_codes" : "新しいリカバリーコードを生成すると、古いコードは使用できなくなります。", - "recovery_codes" : "リカバリーコード。", - "waiting_a_recovery_codes": "バックアップコードを受信しています...", - "recovery_codes_warning" : "コードを紙に書くか、安全な場所に保存してください。そうでなければ、あなたはコードを再び見ることはできません。もし2段階認証アプリのアクセスを喪失し、なおかつ、リカバリーコードもないならば、あなたは自分のアカウントから閉め出されます。", - "authentication_methods" : "認証方法", - "scan": { - "title": "スキャン", - "desc": "あなたの2段階認証アプリを使って、このQRコードをスキャンするか、テキストキーを入力してください:", - "secret_code": "キー" - }, - "verify": { - "desc": "2段階認証を有効にするには、あなたの2段階認証アプリのコードを入力してください:" - } - }, - "attachmentRadius": "ファイル", - "attachments": "ファイル", - "autoload": "下にスクロールしたとき、自動的に読み込む。", - "avatar": "アバター", - "avatarAltRadius": "通知のアバター", - "avatarRadius": "アバター", - "background": "バックグラウンド", - "bio": "プロフィール", - "block_export": "ブロックのエクスポート", - "block_export_button": "ブロックをCSVファイルにエクスポートする", - "block_import": "ブロックのインポート", - "block_import_error": "ブロックのインポートに失敗しました", - "blocks_imported": "ブロックをインポートしました! 実際に処理されるまでに、しばらく時間がかかります。", - "blocks_tab": "ブロック", - "btnRadius": "ボタン", - "cBlue": "返信とフォロー", - "cGreen": "リピート", - "cOrange": "お気に入り", - "cRed": "キャンセル", - "change_password": "パスワードを変える", - "change_password_error": "パスワードを変えることが、できなかったかもしれません。", - "changed_password": "パスワードが、変わりました!", - "collapse_subject": "説明のある投稿をたたむ", - "composing": "投稿", - "confirm_new_password": "新しいパスワードの確認", - "current_avatar": "現在のアバター", - "current_password": "現在のパスワード", - "current_profile_banner": "現在のプロフィールバナー", - "data_import_export_tab": "インポートとエクスポート", - "default_vis": "デフォルトの公開範囲", - "delete_account": "アカウントを消す", - "delete_account_description": "あなたのアカウントとメッセージが、消えます。", - "delete_account_error": "アカウントを消すことが、できなかったかもしれません。インスタンスの管理者に、連絡してください。", - "delete_account_instructions": "本当にアカウントを消してもいいなら、パスワードを入力してください。", - "discoverable": "検索などのサービスでこのアカウントを見つけることを許可する", - "avatar_size_instruction": "アバターの大きさは、150×150ピクセルか、それよりも大きくするといいです。", - "pad_emoji": "ピッカーから絵文字を挿入するとき、絵文字の両側にスペースを入れる", - "export_theme": "保存", - "filtering": "フィルタリング", - "filtering_explanation": "これらの言葉を含むすべてのものがミュートされます。1行に1つの言葉を書いてください。", - "follow_export": "フォローのエクスポート", - "follow_export_button": "エクスポート", - "follow_export_processing": "お待ちください。まもなくファイルをダウンロードできます。", - "follow_import": "フォローのインポート", - "follow_import_error": "フォローのインポートがエラーになりました。", - "follows_imported": "フォローがインポートされました! 少し時間がかかるかもしれません。", - "foreground": "フォアグラウンド", - "general": "全般", - "hide_attachments_in_convo": "スレッドのファイルを隠す", - "hide_attachments_in_tl": "タイムラインのファイルを隠す", - "hide_muted_posts": "ミュートしているユーザーの投稿を隠す", - "max_thumbnails": "投稿に含まれるサムネイルの最大数", - "hide_isp": "インスタンス固有パネルを隠す", - "preload_images": "画像を先読みする", - "use_one_click_nsfw": "NSFWなファイルを1クリックで開く", - "hide_post_stats": "投稿の統計を隠す (例: お気に入りの数)", - "hide_user_stats": "ユーザーの統計を隠す (例: フォロワーの数)", - "hide_filtered_statuses": "フィルターされた投稿を隠す", - "import_blocks_from_a_csv_file": "CSVファイルからブロックをインポートする", - "import_followers_from_a_csv_file": "CSVファイルからフォローをインポートする", - "import_theme": "ロード", - "inputRadius": "インプットフィールド", - "checkboxRadius": "チェックボックス", - "instance_default": "(デフォルト: {value})", - "instance_default_simple": "(デフォルト)", - "interface": "インターフェース", - "interfaceLanguage": "インターフェースの言語", - "invalid_theme_imported": "このファイルはPleromaのテーマではありません。テーマは変更されませんでした。", - "limited_availability": "あなたのブラウザではできません", - "links": "リンク", - "lock_account_description": "あなたが認めた人だけ、あなたのアカウントをフォローできる", - "loop_video": "ビデオを繰り返す", - "loop_video_silent_only": "音のないビデオだけ繰り返す", - "mutes_tab": "ミュート", - "play_videos_in_modal": "ビデオをメディアビューアーで見る", - "use_contain_fit": "画像のサムネイルを、切り抜かない", - "name": "名前", - "name_bio": "名前とプロフィール", - "new_password": "新しいパスワード", - "notification_visibility": "表示する通知", - "notification_visibility_follows": "フォロー", - "notification_visibility_likes": "お気に入り", - "notification_visibility_mentions": "メンション", - "notification_visibility_repeats": "リピート", - "no_rich_text_description": "リッチテキストを使わない", - "no_blocks": "ブロックはありません", - "no_mutes": "ミュートはありません", - "hide_follows_description": "フォローしている人を見せない", - "hide_followers_description": "フォロワーを見せない", - "hide_follows_count_description": "フォローしている人の数を見せない", - "hide_followers_count_description": "フォロワーの数を見せない", - "show_admin_badge": "管理者のバッジを見せる", - "show_moderator_badge": "モデレーターのバッジを見せる", - "nsfw_clickthrough": "NSFWなファイルを隠す", - "oauth_tokens": "OAuthトークン", - "token": "トークン", - "refresh_token": "トークンを更新", - "valid_until": "まで有効", - "revoke_token": "取り消す", - "panelRadius": "パネル", - "pause_on_unfocused": "タブにフォーカスがないときストリーミングを止める", - "presets": "プリセット", - "profile_background": "プロフィールのバックグラウンド", - "profile_banner": "プロフィールバナー", - "profile_tab": "プロフィール", - "radii_help": "インターフェースの丸さを設定する。", - "replies_in_timeline": "タイムラインのリプライ", - "reply_link_preview": "カーソルを重ねたとき、リプライのプレビューを見る", - "reply_visibility_all": "すべてのリプライを見る", - "reply_visibility_following": "私に宛てられたリプライと、フォローしている人からのリプライを見る", - "reply_visibility_self": "私に宛てられたリプライを見る", - "autohide_floating_post_button": "新しい投稿ボタンを自動的に隠す (モバイル)", - "saving_err": "設定を保存できませんでした", - "saving_ok": "設定を保存しました", - "search_user_to_block": "ブロックしたいユーザーを検索", - "search_user_to_mute": "ミュートしたいユーザーを検索", - "security_tab": "セキュリティ", - "scope_copy": "返信するとき、公開範囲をコピーする (DMの公開範囲は、常にコピーされます)", - "minimal_scopes_mode": "公開範囲選択オプションを最小にする", - "set_new_avatar": "新しいアバターを設定する", - "set_new_profile_background": "新しいプロフィールのバックグラウンドを設定する", - "set_new_profile_banner": "新しいプロフィールバナーを設定する", - "settings": "設定", - "subject_input_always_show": "サブジェクトフィールドをいつでも表示する", - "subject_line_behavior": "返信するときサブジェクトをコピーする", - "subject_line_email": "メール風: \"re: サブジェクト\"", - "subject_line_mastodon": "マストドン風: そのままコピー", - "subject_line_noop": "コピーしない", - "post_status_content_type": "投稿のコンテントタイプ", - "stop_gifs": "カーソルを重ねたとき、GIFを動かす", - "streaming": "上までスクロールしたとき、自動的にストリーミングする", - "text": "文字", - "theme": "テーマ", - "theme_help": "カラーテーマをカスタマイズできます", - "theme_help_v2_1": "チェックボックスをONにすると、コンポーネントごとに、色と透明度をオーバーライドできます。「すべてクリア」ボタンを押すと、すべてのオーバーライドをやめます。", - "theme_help_v2_2": "バックグラウンドとテキストのコントラストを表すアイコンがあります。マウスをホバーすると、詳しい説明が出ます。透明な色を使っているときは、最悪の場合のコントラストが示されます。", - "tooltipRadius": "ツールチップとアラート", - "upload_a_photo": "画像をアップロード", - "user_settings": "ユーザー設定", - "values": { - "false": "いいえ", - "true": "はい" - }, - "notifications": "通知", - "notification_setting": "通知を受け取る:", - "notification_setting_follows": "あなたがフォローしているユーザーから", - "notification_setting_non_follows": "あなたがフォローしていないユーザーから", - "notification_setting_followers": "あなたをフォローしているユーザーから", - "notification_setting_non_followers": "あなたをフォローしていないユーザーから", - "notification_mutes": "特定のユーザーからの通知を止めるには、ミュートしてください。", - "notification_blocks": "ブロックしているユーザーからの通知は、すべて止まります。", - "enable_web_push_notifications": "ウェブプッシュ通知を許可する", - "style": { - "switcher": { - "keep_color": "色を残す", - "keep_shadows": "影を残す", - "keep_opacity": "透明度を残す", - "keep_roundness": "丸さを残す", - "keep_fonts": "フォントを残す", - "save_load_hint": "「残す」オプションをONにすると、テーマを選んだときとロードしたとき、現在の設定を残します。また、テーマをエクスポートするとき、これらのオプションを維持します。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべての設定を保存します。", - "reset": "リセット", - "clear_all": "すべてクリア", - "clear_opacity": "透明度をクリア" - }, - "common": { - "color": "色", - "opacity": "透明度", - "contrast": { - "hint": "コントラストは {ratio} です。{level}。({context})", - "level": { - "aa": "AAレベルガイドライン (ミニマル) を満たします", - "aaa": "AAAレベルガイドライン (レコメンデッド) を満たします。", - "bad": "ガイドラインを満たしません。" - }, - "context": { - "18pt": "大きい (18ポイント以上) テキスト", - "text": "テキスト" - } - } - }, - "common_colors": { - "_tab_label": "共通", - "main": "共通の色", - "foreground_hint": "「詳細」タブで、もっと細かく設定できます", - "rgbo": "アイコンとアクセントとバッジ" - }, - "advanced_colors": { - "_tab_label": "詳細", - "alert": "アラートのバックグラウンド", - "alert_error": "エラー", - "badge": "バッジのバックグラウンド", - "badge_notification": "通知", - "panel_header": "パネルヘッダー", - "top_bar": "トップバー", - "borders": "境界", - "buttons": "ボタン", - "inputs": "インプットフィールド", - "faint_text": "薄いテキスト" - }, - "radii": { - "_tab_label": "丸さ" - }, - "shadows": { - "_tab_label": "光と影", - "component": "コンポーネント", - "override": "オーバーライド", - "shadow_id": "影 #{value}", - "blur": "ぼかし", - "spread": "広がり", - "inset": "内側", - "hint": "影の設定では、色の値として --variable を使うことができます。これはCSS3変数です。ただし、透明度の設定は、効かなくなります。", - "filter_hint": { - "always_drop_shadow": "ブラウザーがサポートしていれば、常に {0} が使われます。", - "drop_shadow_syntax": "{0} は、{1} パラメーターと {2} キーワードをサポートしていません。", - "avatar_inset": "内側の影と外側の影を同時に使うと、透明なアバターの表示が乱れます。", - "spread_zero": "広がりが 0 よりも大きな影は、0 と同じです。", - "inset_classic": "内側の影は {0} を使います。" - }, - "components": { - "panel": "パネル", - "panelHeader": "パネルヘッダー", - "topBar": "トップバー", - "avatar": "ユーザーアバター (プロフィール)", - "avatarStatus": "ユーザーアバター (投稿)", - "popup": "ポップアップとツールチップ", - "button": "ボタン", - "buttonHover": "ボタン (ホバー)", - "buttonPressed": "ボタン (押されているとき)", - "buttonPressedHover": "ボタン (ホバー、かつ、押されているとき)", - "input": "インプットフィールド" - } - }, - "fonts": { - "_tab_label": "フォント", - "help": "「カスタム」を選んだときは、システムにあるフォントの名前を、正しく入力してください。", - "components": { - "interface": "インターフェース", - "input": "インプットフィールド", - "post": "投稿", - "postCode": "等幅 (投稿がリッチテキストであるとき)" - }, - "family": "フォント名", - "size": "大きさ (px)", - "weight": "太さ", - "custom": "カスタム" - }, - "preview": { - "header": "プレビュー", - "content": "本文", - "error": "エラーの例", - "button": "ボタン", - "text": "これは{0}と{1}の例です。", - "mono": "monospace", - "input": "羽田空港に着きました。", - "faint_link": "とても助けになるマニュアル", - "fine_print": "私たちの{0}を、読まないでください!", - "header_faint": "エラーではありません", - "checkbox": "利用規約を読みました", - "link": "ハイパーリンク" - } - }, - "version": { - "title": "バージョン", - "backend_version": "バックエンドのバージョン", - "frontend_version": "フロントエンドのバージョン" - } - }, - "time": { - "day": "{0}日", - "days": "{0}日", - "day_short": "{0}日", - "days_short": "{0}日", - "hour": "{0}時間", - "hours": "{0}時間", - "hour_short": "{0}時間", - "hours_short": "{0}時間", - "in_future": "{0}で", - "in_past": "{0}前", - "minute": "{0}分", - "minutes": "{0}分", - "minute_short": "{0}分", - "minutes_short": "{0}分", - "month": "{0}ヶ月前", - "months": "{0}ヶ月前", - "month_short": "{0}ヶ月前", - "months_short": "{0}ヶ月前", - "now": "たった今", - "now_short": "たった今", - "second": "{0}秒", - "seconds": "{0}秒", - "second_short": "{0}秒", - "seconds_short": "{0}秒", - "week": "{0}週間", - "weeks": "{0}週間", - "week_short": "{0}週間", - "weeks_short": "{0}週間", - "year": "{0}年", - "years": "{0}年", - "year_short": "{0}年", - "years_short": "{0}年" - }, - "timeline": { - "collapse": "たたむ", - "conversation": "スレッド", - "error_fetching": "読み込みがエラーになりました", - "load_older": "古いステータス", - "no_retweet_hint": "投稿を「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります", - "repeated": "リピート", - "show_new": "読み込み", - "up_to_date": "最新", - "no_more_statuses": "これで終わりです", - "no_statuses": "ステータスはありません" - }, - "status": { - "favorites": "お気に入り", - "repeats": "リピート", - "delete": "ステータスを削除", - "pin": "プロフィールにピン留め", - "unpin": "プロフィールのピン留めを外す", - "pinned": "ピン留め", - "delete_confirm": "本当にこのステータスを削除してもよろしいですか?", - "reply_to": "返信", - "replies_list": "返信:", - "mute_conversation": "スレッドをミュート", - "unmute_conversation": "スレッドのミュートを解除" - }, - "user_card": { - "approve": "受け入れ", - "block": "ブロック", - "blocked": "ブロックしています!", - "deny": "お断り", - "favorites": "お気に入り", - "follow": "フォロー", - "follow_sent": "リクエストを送りました!", - "follow_progress": "リクエストしています…", - "follow_again": "再びリクエストを送りますか?", - "follow_unfollow": "フォローをやめる", - "followees": "フォロー", - "followers": "フォロワー", - "following": "フォローしています!", - "follows_you": "フォローされました!", - "its_you": "これはあなたです!", - "media": "メディア", - "mention": "メンション", - "mute": "ミュート", - "muted": "ミュートしています!", - "per_day": "/日", - "remote_follow": "リモートフォロー", - "report": "通報", - "statuses": "ステータス", - "subscribe": "購読", - "unsubscribe": "購読を解除", - "unblock": "ブロック解除", - "unblock_progress": "ブロックを解除しています...", - "block_progress": "ブロックしています...", - "unmute": "ミュート解除", - "unmute_progress": "ミュートを解除しています...", - "mute_progress": "ミュートしています...", - "admin_menu": { - "moderation": "モデレーション", - "grant_admin": "管理者権限を付与", - "revoke_admin": "管理者権限を解除", - "grant_moderator": "モデレーター権限を付与", - "revoke_moderator": "モデレーター権限を解除", - "activate_account": "アカウントをアクティブにする", - "deactivate_account": "アカウントをアクティブでなくする", - "delete_account": "アカウントを削除", - "force_nsfw": "すべての投稿をNSFWにする", - "strip_media": "投稿からメディアを除去する", - "force_unlisted": "投稿を未収載にする", - "sandbox": "投稿をフォロワーのみにする", - "disable_remote_subscription": "他のインスタンスからフォローされないようにする", - "disable_any_subscription": "フォローされないようにする", - "quarantine": "他のインスタンスからの投稿を止める", - "delete_user": "ユーザーを削除", - "delete_user_confirmation": "あなたの精神状態に何か問題はございませんか? この操作を取り消すことはできません。" - } - }, - "user_profile": { - "timeline_title": "ユーザータイムライン", - "profile_does_not_exist": "申し訳ない。このプロフィールは存在しません。", - "profile_loading_error": "申し訳ない。プロフィールの読み込みがエラーになりました。" - }, - "user_reporting": { - "title": "通報する: {0}", - "add_comment_description": "この通報は、あなたのインスタンスのモデレーターに送られます。このアカウントを通報する理由を説明することができます:", - "additional_comments": "追加のコメント", - "forward_description": "このアカウントは他のサーバーに置かれています。この通報のコピーをリモートのサーバーに送りますか?", - "forward_to": "転送する: {0}", - "submit": "送信", - "generic_error": "あなたのリクエストを処理しようとしましたが、エラーになりました。" - }, - "who_to_follow": { - "more": "詳細", - "who_to_follow": "おすすめユーザー" - }, - "tool_tip": { - "media_upload": "メディアをアップロード", - "repeat": "リピート", - "reply": "返信", - "favorite": "お気に入り", - "user_settings": "ユーザー設定" - }, - "upload":{ - "error": { - "base": "アップロードに失敗しました。", - "file_too_big": "ファイルが大きすぎます [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]", - "default": "しばらくしてから試してください" - }, - "file_size_units": { - "B": "B", - "KiB": "KiB", - "MiB": "MiB", - "GiB": "GiB", - "TiB": "TiB" - } - }, - "search": { - "people": "人々", - "hashtags": "ハッシュタグ", - "person_talking": "{count} 人が話しています", - "people_talking": "{count} 人が話しています", - "no_results": "見つかりませんでした" - }, - "password_reset": { - "forgot_password": "パスワードを忘れましたか?", - "password_reset": "パスワードリセット", - "instruction": "メールアドレスまたはユーザー名を入力してください。パスワードをリセットするためのリンクを送信します。", - "placeholder": "メールアドレスまたはユーザー名", - "check_email": "パスワードをリセットするためのリンクが記載されたメールが届いているか確認してください。", - "return_home": "ホームページに戻る", - "not_found": "メールアドレスまたはユーザー名が見つかりませんでした。", - "too_many_requests": "試行回数の制限に達しました。しばらく時間を置いてから再試行してください。", - "password_reset_disabled": "このインスタンスではパスワードリセットは無効になっています。インスタンスの管理者に連絡してください。" - } -} diff --git a/src/i18n/messages.js b/src/i18n/messages.js index 89c8a8c8..774a48e0 100644 --- a/src/i18n/messages.js +++ b/src/i18n/messages.js @@ -24,7 +24,7 @@ const messages = { hu: require('./hu.json'), it: require('./it.json'), ja: require('./ja.json'), - ja_pedantic: require('./ja_pedantic.json'), + ja_easy: require('./ja_easy.json'), ko: require('./ko.json'), nb: require('./nb.json'), nl: require('./nl.json'), From 44cd5ef8145b6799f7956401bb7cdd847e34c878 Mon Sep 17 00:00:00 2001 From: taehoon Date: Fri, 15 Nov 2019 12:52:29 -0500 Subject: [PATCH 15/38] show badge visibility user setting checkbox only if needed --- src/components/user_settings/user_settings.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/user_settings/user_settings.vue b/src/components/user_settings/user_settings.vue index 8c18cf49..3f1982a6 100644 --- a/src/components/user_settings/user_settings.vue +++ b/src/components/user_settings/user_settings.vue @@ -104,7 +104,7 @@ {{ $t('settings.hide_followers_count_description') }}

-

+

From 7ebf3602d5d9a8630ffbe239bfe4431655046821 Mon Sep 17 00:00:00 2001 From: taehoon Date: Tue, 26 Nov 2019 19:57:27 -0500 Subject: [PATCH 20/38] move mention button right next to mute button --- .../account_actions/account_actions.js | 3 --- .../account_actions/account_actions.vue | 18 ++++-------------- src/components/user_card/user_card.js | 3 +++ src/components/user_card/user_card.vue | 8 ++++++++ 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/components/account_actions/account_actions.js b/src/components/account_actions/account_actions.js index 204d506a..d2153680 100644 --- a/src/components/account_actions/account_actions.js +++ b/src/components/account_actions/account_actions.js @@ -25,9 +25,6 @@ const AccountActions = { }, reportUser () { this.$store.dispatch('openUserReportingModal', this.user.id) - }, - mentionUser () { - this.$store.dispatch('openPostStatusModal', { replyTo: true, repliedUser: this.user }) } } } diff --git a/src/components/account_actions/account_actions.vue b/src/components/account_actions/account_actions.vue index 046cba93..d3235be1 100644 --- a/src/components/account_actions/account_actions.vue +++ b/src/components/account_actions/account_actions.vue @@ -9,17 +9,7 @@ >
    diff --git a/src/modules/instance.js b/src/modules/instance.js index 96f14ed5..625323b9 100644 --- a/src/modules/instance.js +++ b/src/modules/instance.js @@ -27,6 +27,7 @@ const defaultState = { scopeCopy: true, subjectLineBehavior: 'email', postContentType: 'text/plain', + hideSitename: false, nsfwCensorImage: undefined, vapidPublicKey: undefined, noAttachmentLinks: false, From fee3226705beb4b6eddb8e64f8c53b2651ca89fa Mon Sep 17 00:00:00 2001 From: taehoon Date: Mon, 9 Dec 2019 15:21:33 -0500 Subject: [PATCH 33/38] add documentation for new instance option --- docs/CONFIGURATION.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 35363537..3a21828b 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -77,6 +77,9 @@ Use custom image for NSFW'd images ### `showFeaturesPanel` Show panel showcasing instance features/settings to logged-out visitors +### `hideSitename` +Hide instance name in header + ## Indirect configuration Some features are configured depending on how backend is configured. In general the approach is "if backend allows it there's no need to hide it, if backend doesn't allow it there's no need to show it. From 386719b0d03475fb5cab667ce28a5aff354fbc4d Mon Sep 17 00:00:00 2001 From: seven Date: Thu, 12 Dec 2019 08:33:40 +0500 Subject: [PATCH 34/38] fix css runtime loading issue --- src/App.scss | 13 +++++++++++++ src/components/timeline/timeline.vue | 13 ------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/App.scss b/src/App.scss index 925913f2..754ca62e 100644 --- a/src/App.scss +++ b/src/App.scss @@ -870,3 +870,16 @@ nav { transform: rotate(359deg); } } + +.new-status-notification { + position:relative; + margin-top: -1px; + font-size: 1.1em; + border-width: 1px 0 0 0; + border-style: solid; + border-color: var(--border, $fallback--border); + padding: 10px; + z-index: 1; + background-color: $fallback--fg; + background-color: var(--panel, $fallback--fg); +} diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue index 93f6f570..a6fba452 100644 --- a/src/components/timeline/timeline.vue +++ b/src/components/timeline/timeline.vue @@ -93,17 +93,4 @@ opacity: 1; } } - -.new-status-notification { - position:relative; - margin-top: -1px; - font-size: 1.1em; - border-width: 1px 0 0 0; - border-style: solid; - border-color: var(--border, $fallback--border); - padding: 10px; - z-index: 1; - background-color: $fallback--fg; - background-color: var(--panel, $fallback--fg); -} From b3992358487d5afa7499759a90d6447a2b0bfe20 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 12 Dec 2019 09:38:24 +0000 Subject: [PATCH 35/38] Revert "Merge branch 'oauth-extra-scopes' into 'develop'" This reverts merge request !1024 --- src/services/new_api/oauth.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/new_api/oauth.js b/src/services/new_api/oauth.js index 3c8e64bd..d0d18c03 100644 --- a/src/services/new_api/oauth.js +++ b/src/services/new_api/oauth.js @@ -12,7 +12,7 @@ export const getOrCreateApp = ({ clientId, clientSecret, instance, commit }) => form.append('client_name', `PleromaFE_${window.___pleromafe_commit_hash}_${(new Date()).toISOString()}`) form.append('redirect_uris', REDIRECT_URI) - form.append('scopes', 'read write follow push admin') + form.append('scopes', 'read write follow') return window.fetch(url, { method: 'POST', @@ -28,7 +28,7 @@ const login = ({ instance, clientId }) => { response_type: 'code', client_id: clientId, redirect_uri: REDIRECT_URI, - scope: 'read write follow push admin' + scope: 'read write follow' } const dataString = reduce(data, (acc, v, k) => { From ed3144eb1168ece5fcd3eed2867c653f785039d8 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 12 Dec 2019 18:19:46 +0700 Subject: [PATCH 36/38] Support "native" captcha --- src/components/registration/registration.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index 5bb06a4f..222b67a8 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -172,7 +172,7 @@ for="captcha-label" >{{ $t('captcha') }} -