mirror of
https://activitypub.software/TransFem-org/Sharkey.git
synced 2024-12-14 06:00:44 +01:00
翻訳の抜けを修正その2 (#5893)
* Missing translation
* use npx
* ✌️
* Update ja-JP.yml
* Update signup.vue
* Update ja-JP.yml
* Update messaging-room.vue
* Update ja-JP.yml
* Update signup.vue
* Update ja-JP.yml
* Update signin.vue
* Update ja-JP.yml
* Update index.vue
* Update ja-JP.yml
* Update signup.vue
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
This commit is contained in:
parent
46575d4f04
commit
c2d5a96bb6
14 changed files with 66 additions and 43 deletions
|
@ -371,12 +371,35 @@ members: "メンバー"
|
||||||
transfer: "譲渡"
|
transfer: "譲渡"
|
||||||
messagingWithUser: "ユーザーとチャット"
|
messagingWithUser: "ユーザーとチャット"
|
||||||
messagingWithGroup: "グループでチャット"
|
messagingWithGroup: "グループでチャット"
|
||||||
|
title: "タイトル"
|
||||||
|
text: "テキスト"
|
||||||
enable: "有効にする"
|
enable: "有効にする"
|
||||||
next: "次"
|
next: "次"
|
||||||
retype: "再入力"
|
retype: "再入力"
|
||||||
noteOf: "{user}のノート"
|
noteOf: "{user}のノート"
|
||||||
inviteToGroup: "グループに招待"
|
inviteToGroup: "グループに招待"
|
||||||
maxNoteTextLength: "ノートの文字数制限"
|
maxNoteTextLength: "ノートの文字数制限"
|
||||||
|
quoteAttached: "引用付き"
|
||||||
|
quoteQuestion: "引用として添付しますか?"
|
||||||
|
noMessagesYet: "まだチャットはありません"
|
||||||
|
newMessageExists: "新しいメッセージがあります"
|
||||||
|
onlyOneFileCanBeAttached: "メッセージに添付できるファイルはひとつです"
|
||||||
|
signinRequired: "ログインしてください"
|
||||||
|
invitationCode: "招待コード"
|
||||||
|
checking: "確認しています"
|
||||||
|
available: "利用できます"
|
||||||
|
unavailable: "利用できません"
|
||||||
|
usernameInvalidFormat: "a~z、A~Z、0~9、_が使えます"
|
||||||
|
tooShort: "短すぎます"
|
||||||
|
tooLong: "長すぎます"
|
||||||
|
weakPassword: "弱いパスワード"
|
||||||
|
normalPassword: "普通のパスワード"
|
||||||
|
strongPassword: "強いパスワード"
|
||||||
|
passwordMatched: "一致しました"
|
||||||
|
passwordNotMatched: "一致していません"
|
||||||
|
signinWith: "{x}でログイン"
|
||||||
|
tapSecurityKey: "セキュリティーキーにタッチ"
|
||||||
|
or: "もしくは"
|
||||||
|
|
||||||
_tutorial:
|
_tutorial:
|
||||||
title: "Misskeyの使い方"
|
title: "Misskeyの使い方"
|
||||||
|
|
|
@ -23,13 +23,13 @@
|
||||||
<x-folder v-for="folder in folders" :key="folder.id" class="folder" :folder="folder"/>
|
<x-folder v-for="folder in folders" :key="folder.id" class="folder" :folder="folder"/>
|
||||||
<!-- SEE: https://stackoverflow.com/questions/18744164/flex-box-align-last-row-to-grid -->
|
<!-- SEE: https://stackoverflow.com/questions/18744164/flex-box-align-last-row-to-grid -->
|
||||||
<div class="padding" v-for="n in 16"></div>
|
<div class="padding" v-for="n in 16"></div>
|
||||||
<mk-button v-if="moreFolders">{{ $t('@.load-more') }}</mk-button>
|
<mk-button v-if="moreFolders">{{ $t('loadMore') }}</mk-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="files" ref="filesContainer" v-if="files.length > 0">
|
<div class="files" ref="filesContainer" v-if="files.length > 0">
|
||||||
<x-file v-for="file in files" :key="file.id" class="file" :file="file" :select-mode="selectMode"/>
|
<x-file v-for="file in files" :key="file.id" class="file" :file="file" :select-mode="selectMode"/>
|
||||||
<!-- SEE: https://stackoverflow.com/questions/18744164/flex-box-align-last-row-to-grid -->
|
<!-- SEE: https://stackoverflow.com/questions/18744164/flex-box-align-last-row-to-grid -->
|
||||||
<div class="padding" v-for="n in 16"></div>
|
<div class="padding" v-for="n in 16"></div>
|
||||||
<mk-button v-if="moreFiles" @click="fetchMoreFiles">{{ $t('@.load-more') }}</mk-button>
|
<mk-button v-if="moreFiles" @click="fetchMoreFiles">{{ $t('loadMore') }}</mk-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="empty" v-if="files.length == 0 && folders.length == 0 && !fetching">
|
<div class="empty" v-if="files.length == 0 && folders.length == 0 && !fetching">
|
||||||
<p v-if="draghover">{{ $t('empty-draghover') }}</p>
|
<p v-if="draghover">{{ $t('empty-draghover') }}</p>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="mk-google">
|
<div class="mk-google">
|
||||||
<input type="search" v-model="query" :placeholder="q">
|
<input type="search" v-model="query" :placeholder="q">
|
||||||
<button @click="search"><fa icon="search"/> {{ $t('@.search') }}</button>
|
<button @click="search"><fa icon="search"/> {{ $t('search') }}</button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<div class="form">
|
<div class="form">
|
||||||
<x-note-preview class="preview" v-if="reply" :note="reply"/>
|
<x-note-preview class="preview" v-if="reply" :note="reply"/>
|
||||||
<x-note-preview class="preview" v-if="renote" :note="renote"/>
|
<x-note-preview class="preview" v-if="renote" :note="renote"/>
|
||||||
<div class="with-quote" v-if="quoteId"><fa icon="quote-left"/> {{ $t('@.post-form.quote-attached') }}<button @click="quoteId = null"><fa icon="times"/></button></div>
|
<div class="with-quote" v-if="quoteId"><fa icon="quote-left"/> {{ $t('quoteAttached') }}<button @click="quoteId = null"><fa icon="times"/></button></div>
|
||||||
<div v-if="visibility === 'specified'" class="to-specified">
|
<div v-if="visibility === 'specified'" class="to-specified">
|
||||||
<span style="margin-right: 8px;">{{ $t('recipient') }}</span>
|
<span style="margin-right: 8px;">{{ $t('recipient') }}</span>
|
||||||
<div class="visibleUsers">
|
<div class="visibleUsers">
|
||||||
|
@ -445,7 +445,7 @@ export default Vue.extend({
|
||||||
|
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'info',
|
type: 'info',
|
||||||
text: this.$t('@.post-form.quote-question'),
|
text: this.$t('quoteQuestion'),
|
||||||
showCancelButton: true
|
showCancelButton: true
|
||||||
}).then(({ canceled }) => {
|
}).then(({ canceled }) => {
|
||||||
if (canceled) {
|
if (canceled) {
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
mode="out-in"
|
mode="out-in"
|
||||||
appear
|
appear
|
||||||
>
|
>
|
||||||
<button class="_button" v-for="(reaction, i) in rs" :key="reaction" @click="react(reaction)" :tabindex="i + 1" :title="/^[a-z]+$/.test(reaction) ? $t('@.reactions.' + reaction) : reaction"><x-reaction-icon :reaction="reaction"/></button>
|
<button class="_button" v-for="(reaction, i) in rs" :key="reaction" @click="react(reaction)" :tabindex="i + 1" :title="reaction"><x-reaction-icon :reaction="reaction"/></button>
|
||||||
</transition-group>
|
</transition-group>
|
||||||
<input class="text" v-model="text" :placeholder="$t('enterEmoji')" @keyup.enter="reactText" @input="tryReactText" v-autocomplete="{ model: 'text' }">
|
<input class="text" v-model="text" :placeholder="$t('enterEmoji')" @keyup.enter="reactText" @input="tryReactText" v-autocomplete="{ model: 'text' }">
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -12,15 +12,15 @@
|
||||||
<template #prefix><fa :icon="faLock"/></template>
|
<template #prefix><fa :icon="faLock"/></template>
|
||||||
</mk-input>
|
</mk-input>
|
||||||
<mk-button type="submit" primary :disabled="signing" style="margin: 0 auto;">{{ signing ? $t('loggingIn') : $t('login') }}</mk-button>
|
<mk-button type="submit" primary :disabled="signing" style="margin: 0 auto;">{{ signing ? $t('loggingIn') : $t('login') }}</mk-button>
|
||||||
<p v-if="meta && meta.enableTwitterIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/twitter`"><fa :icon="['fab', 'twitter']"/> {{ $t('signin-with-twitter') }}</a></p>
|
<p v-if="meta && meta.enableTwitterIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/twitter`"><fa :icon="faTwitter"/> {{ $t('signinWith', { x: 'Twitter' }) }}</a></p>
|
||||||
<p v-if="meta && meta.enableGithubIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/github`"><fa :icon="['fab', 'github']"/> {{ $t('signin-with-github') }}</a></p>
|
<p v-if="meta && meta.enableGithubIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/github`"><fa :icon="faGithub"/> {{ $t('signinWith', { x: 'GitHub' }) }}</a></p>
|
||||||
<p v-if="meta && meta.enableDiscordIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/discord`"><fa :icon="['fab', 'discord']"/> {{ $t('signin-with-discord') /* TODO: Make these layouts better */ }}</a></p>
|
<p v-if="meta && meta.enableDiscordIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/discord`"><fa :icon="faDiscord"/> {{ $t('signinWith', { x: 'Discord' }) }}</a></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="2fa-signin" v-if="totpLogin" :class="{ securityKeys: user && user.securityKeys }">
|
<div class="2fa-signin" v-if="totpLogin" :class="{ securityKeys: user && user.securityKeys }">
|
||||||
<div v-if="user && user.securityKeys" class="twofa-group tap-group">
|
<div v-if="user && user.securityKeys" class="twofa-group tap-group">
|
||||||
<p>{{ $t('tap-key') }}</p>
|
<p>{{ $t('tapSecurityKey') }}</p>
|
||||||
<mk-button @click="queryKey" v-if="!queryingKey">
|
<mk-button @click="queryKey" v-if="!queryingKey">
|
||||||
{{ $t('@.error.retry') }}
|
{{ $t('retry') }}
|
||||||
</mk-button>
|
</mk-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="or-hr" v-if="user && user.securityKeys">
|
<div class="or-hr" v-if="user && user.securityKeys">
|
||||||
|
@ -46,6 +46,7 @@
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { toUnicode } from 'punycode';
|
import { toUnicode } from 'punycode';
|
||||||
import { faLock, faGavel } from '@fortawesome/free-solid-svg-icons';
|
import { faLock, faGavel } from '@fortawesome/free-solid-svg-icons';
|
||||||
|
import { faTwitter, faDiscord, faGithub } from '@fortawesome/free-brands-svg-icons';
|
||||||
import MkButton from './ui/button.vue';
|
import MkButton from './ui/button.vue';
|
||||||
import MkInput from './ui/input.vue';
|
import MkInput from './ui/input.vue';
|
||||||
import i18n from '../i18n';
|
import i18n from '../i18n';
|
||||||
|
@ -86,7 +87,7 @@ export default Vue.extend({
|
||||||
credential: null,
|
credential: null,
|
||||||
challengeData: null,
|
challengeData: null,
|
||||||
queryingKey: false,
|
queryingKey: false,
|
||||||
faLock, faGavel
|
faLock, faGavel, faTwitter, faDiscord, faGithub
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,8 @@
|
||||||
<form class="mk-signup" @submit.prevent="onSubmit" :autocomplete="Math.random()">
|
<form class="mk-signup" @submit.prevent="onSubmit" :autocomplete="Math.random()">
|
||||||
<template v-if="meta">
|
<template v-if="meta">
|
||||||
<mk-input v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required>
|
<mk-input v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required>
|
||||||
<span>{{ $t('invitation-code') }}</span>
|
<span>{{ $t('invitationCode') }}</span>
|
||||||
<template #prefix><fa icon="id-card-alt"/></template>
|
<template #prefix><fa :icon="faKey"/></template>
|
||||||
<template #desc v-html="this.$t('invitation-info').replace('{}', 'mailto:' + meta.maintainerEmail)"></template>
|
|
||||||
</mk-input>
|
</mk-input>
|
||||||
<mk-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @input="onChangeUsername">
|
<mk-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @input="onChangeUsername">
|
||||||
<span>{{ $t('username') }}</span>
|
<span>{{ $t('username') }}</span>
|
||||||
|
@ -15,26 +14,26 @@
|
||||||
<span v-if="usernameState == 'ok'" style="color:#3CB7B5"><fa :icon="faCheck" fixed-width/> {{ $t('available') }}</span>
|
<span v-if="usernameState == 'ok'" style="color:#3CB7B5"><fa :icon="faCheck" fixed-width/> {{ $t('available') }}</span>
|
||||||
<span v-if="usernameState == 'unavailable'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('unavailable') }}</span>
|
<span v-if="usernameState == 'unavailable'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('unavailable') }}</span>
|
||||||
<span v-if="usernameState == 'error'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('error') }}</span>
|
<span v-if="usernameState == 'error'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('error') }}</span>
|
||||||
<span v-if="usernameState == 'invalid-format'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('invalid-format') }}</span>
|
<span v-if="usernameState == 'invalid-format'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('usernameInvalidFormat') }}</span>
|
||||||
<span v-if="usernameState == 'min-range'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('too-short') }}</span>
|
<span v-if="usernameState == 'min-range'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('tooShort') }}</span>
|
||||||
<span v-if="usernameState == 'max-range'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('too-long') }}</span>
|
<span v-if="usernameState == 'max-range'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('tooLong') }}</span>
|
||||||
</template>
|
</template>
|
||||||
</mk-input>
|
</mk-input>
|
||||||
<mk-input v-model="password" type="password" :autocomplete="Math.random()" required @input="onChangePassword">
|
<mk-input v-model="password" type="password" :autocomplete="Math.random()" required @input="onChangePassword">
|
||||||
<span>{{ $t('password') }}</span>
|
<span>{{ $t('password') }}</span>
|
||||||
<template #prefix><fa :icon="faLock"/></template>
|
<template #prefix><fa :icon="faLock"/></template>
|
||||||
<template #desc>
|
<template #desc>
|
||||||
<p v-if="passwordStrength == 'low'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('weak-password') }}</p>
|
<p v-if="passwordStrength == 'low'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('weakPassword') }}</p>
|
||||||
<p v-if="passwordStrength == 'medium'" style="color:#3CB7B5"><fa :icon="faCheck" fixed-width/> {{ $t('normal-password') }}</p>
|
<p v-if="passwordStrength == 'medium'" style="color:#3CB7B5"><fa :icon="faCheck" fixed-width/> {{ $t('normalPassword') }}</p>
|
||||||
<p v-if="passwordStrength == 'high'" style="color:#3CB7B5"><fa :icon="faCheck" fixed-width/> {{ $t('strong-password') }}</p>
|
<p v-if="passwordStrength == 'high'" style="color:#3CB7B5"><fa :icon="faCheck" fixed-width/> {{ $t('strongPassword') }}</p>
|
||||||
</template>
|
</template>
|
||||||
</mk-input>
|
</mk-input>
|
||||||
<mk-input v-model="retypedPassword" type="password" :autocomplete="Math.random()" required @input="onChangePasswordRetype">
|
<mk-input v-model="retypedPassword" type="password" :autocomplete="Math.random()" required @input="onChangePasswordRetype">
|
||||||
<span>{{ $t('password') }} ({{ $t('retype') }})</span>
|
<span>{{ $t('password') }} ({{ $t('retype') }})</span>
|
||||||
<template #prefix><fa :icon="faLock"/></template>
|
<template #prefix><fa :icon="faLock"/></template>
|
||||||
<template #desc>
|
<template #desc>
|
||||||
<p v-if="passwordRetypeState == 'match'" style="color:#3CB7B5"><fa :icon="faCheck" fixed-width/> {{ $t('password-matched') }}</p>
|
<p v-if="passwordRetypeState == 'match'" style="color:#3CB7B5"><fa :icon="faCheck" fixed-width/> {{ $t('passwordMatched') }}</p>
|
||||||
<p v-if="passwordRetypeState == 'not-match'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('password-not-matched') }}</p>
|
<p v-if="passwordRetypeState == 'not-match'" style="color:#FF1161"><fa :icon="faExclamationTriangle" fixed-width/> {{ $t('passwordNotMatched') }}</p>
|
||||||
</template>
|
</template>
|
||||||
</mk-input>
|
</mk-input>
|
||||||
<mk-switch v-model="ToSAgreement" v-if="meta.tosUrl">
|
<mk-switch v-model="ToSAgreement" v-if="meta.tosUrl">
|
||||||
|
@ -50,7 +49,7 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { faLock, faExclamationTriangle, faSpinner, faCheck } from '@fortawesome/free-solid-svg-icons';
|
import { faLock, faExclamationTriangle, faSpinner, faCheck, faKey } from '@fortawesome/free-solid-svg-icons';
|
||||||
const getPasswordStrength = require('syuilo-password-strength');
|
const getPasswordStrength = require('syuilo-password-strength');
|
||||||
import { toUnicode } from 'punycode';
|
import { toUnicode } from 'punycode';
|
||||||
import i18n from '../i18n';
|
import i18n from '../i18n';
|
||||||
|
@ -81,7 +80,7 @@ export default Vue.extend({
|
||||||
passwordRetypeState: null,
|
passwordRetypeState: null,
|
||||||
submitting: false,
|
submitting: false,
|
||||||
ToSAgreement: false,
|
ToSAgreement: false,
|
||||||
faLock, faExclamationTriangle, faSpinner, faCheck
|
faLock, faExclamationTriangle, faSpinner, faCheck, faKey
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -175,7 +174,7 @@ export default Vue.extend({
|
||||||
|
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: this.$t('some-error')
|
text: this.$t('error')
|
||||||
});
|
});
|
||||||
|
|
||||||
if (this.meta.enableRecaptcha) {
|
if (this.meta.enableRecaptcha) {
|
||||||
|
|
|
@ -48,7 +48,7 @@ export default Vue.extend({
|
||||||
ago >= 10 ? this.$t('_ago.secondsAgo', { n: (~~(ago % 60)).toString() }) :
|
ago >= 10 ? this.$t('_ago.secondsAgo', { n: (~~(ago % 60)).toString() }) :
|
||||||
ago >= -1 ? this.$t('_ago.justNow') :
|
ago >= -1 ? this.$t('_ago.justNow') :
|
||||||
ago < -1 ? this.$t('_ago.future') :
|
ago < -1 ? this.$t('_ago.future') :
|
||||||
this.$t('@.time.unknown'));
|
this.$t('_ago.unknown'));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
<mk-follow-button class="koudoku-button" v-if="$store.getters.isSignedIn && user.id != $store.state.i.id" :user="user" mini/>
|
<mk-follow-button class="koudoku-button" v-if="$store.getters.isSignedIn && user.id != $store.state.i.id" :user="user" mini/>
|
||||||
</div>
|
</div>
|
||||||
<button class="more" :class="{ fetching: moreFetching }" v-if="more" @click="fetchMore()" :disabled="moreFetching">
|
<button class="more" :class="{ fetching: moreFetching }" v-if="more" @click="fetchMore()" :disabled="moreFetching">
|
||||||
<template v-if="moreFetching"><fa icon="spinner" pulse fixed-width/></template>{{ moreFetching ? $t('@.loading') : $t('@.load-more') }}
|
<template v-if="moreFetching"><fa icon="spinner" pulse fixed-width/></template>{{ moreFetching ? $t('loading') : $t('loadMore') }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</mk-container>
|
</mk-container>
|
||||||
|
|
|
@ -43,8 +43,8 @@
|
||||||
<div class="_content">
|
<div class="_content">
|
||||||
<mk-switch v-model="enableRecaptcha">{{ $t('enableRecaptcha') }}</mk-switch>
|
<mk-switch v-model="enableRecaptcha">{{ $t('enableRecaptcha') }}</mk-switch>
|
||||||
<template v-if="enableRecaptcha">
|
<template v-if="enableRecaptcha">
|
||||||
<mk-info>{{ $t('recaptcha-info') }}</mk-info>
|
<mk-info>{{ $t('recaptchaInfo') }}</mk-info>
|
||||||
<mk-info warn>{{ $t('recaptcha-info2') }}</mk-info>
|
<mk-info warn>{{ $t('recaptchaInfo2') }}</mk-info>
|
||||||
<mk-input v-model="recaptchaSiteKey" :disabled="!enableRecaptcha"><template #icon><fa :icon="faKey"/></template>{{ $t('recaptchaSiteKey') }}</mk-input>
|
<mk-input v-model="recaptchaSiteKey" :disabled="!enableRecaptcha"><template #icon><fa :icon="faKey"/></template>{{ $t('recaptchaSiteKey') }}</mk-input>
|
||||||
<mk-input v-model="recaptchaSecretKey" :disabled="!enableRecaptcha"><template #icon><fa :icon="faKey"/></template>{{ $t('recaptchaSecretKey') }}</mk-input>
|
<mk-input v-model="recaptchaSecretKey" :disabled="!enableRecaptcha"><template #icon><fa :icon="faKey"/></template>{{ $t('recaptchaSecretKey') }}</mk-input>
|
||||||
</template>
|
</template>
|
||||||
|
@ -61,12 +61,12 @@
|
||||||
<section class="_card">
|
<section class="_card">
|
||||||
<div class="_title"><fa :icon="faBolt"/> {{ $t('serviceworker') }}</div>
|
<div class="_title"><fa :icon="faBolt"/> {{ $t('serviceworker') }}</div>
|
||||||
<div class="_content">
|
<div class="_content">
|
||||||
<mk-switch v-model="enableServiceWorker">{{ $t('enableServiceworker') }}<template #desc>{{ $t('serviceworker-info') }}</template></mk-switch>
|
<mk-switch v-model="enableServiceWorker">{{ $t('enableServiceworker') }}<template #desc>{{ $t('serviceworkerInfo') }}</template></mk-switch>
|
||||||
<template v-if="enableServiceWorker">
|
<template v-if="enableServiceWorker">
|
||||||
<mk-info>{{ $t('vapid-info') }}<br><code>npm i web-push -g<br>web-push generate-vapid-keys</code></mk-info>
|
<mk-info>{{ $t('vapidInfo') }}<br><code>npx web-push generate-vapid-keys</code></mk-info>
|
||||||
<mk-horizon-group inputs class="fit-bottom">
|
<mk-horizon-group inputs class="fit-bottom">
|
||||||
<mk-input v-model="swPublicKey" :disabled="!enableServiceWorker"><template #icon><fa :icon="faKey"/></template>{{ $t('vapid-publickey') }}</mk-input>
|
<mk-input v-model="swPublicKey" :disabled="!enableServiceWorker"><template #icon><fa :icon="faKey"/></template>Public key</mk-input>
|
||||||
<mk-input v-model="swPrivateKey" :disabled="!enableServiceWorker"><template #icon><fa :icon="faKey"/></template>{{ $t('vapid-privatekey') }}</mk-input>
|
<mk-input v-model="swPrivateKey" :disabled="!enableServiceWorker"><template #icon><fa :icon="faKey"/></template>Private key</mk-input>
|
||||||
</mk-horizon-group>
|
</mk-horizon-group>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -100,7 +100,7 @@ export default Vue.extend({
|
||||||
const formatted = `${formatTimeString(new Date(file.lastModified), this.$store.state.settings.pastedFileName).replace(/{{number}}/g, '1')}${ext}`;
|
const formatted = `${formatTimeString(new Date(file.lastModified), this.$store.state.settings.pastedFileName).replace(/{{number}}/g, '1')}${ext}`;
|
||||||
const name = this.$store.state.settings.pasteDialog
|
const name = this.$store.state.settings.pasteDialog
|
||||||
? await this.$root.dialog({
|
? await this.$root.dialog({
|
||||||
title: this.$t('@.post-form.enter-file-name'),
|
title: this.$t('enterFileName'),
|
||||||
input: {
|
input: {
|
||||||
default: formatted
|
default: formatted
|
||||||
},
|
},
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<mk-avatar class="avatar" :user="message.user"/>
|
<mk-avatar class="avatar" :user="message.user"/>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="balloon _panel" :data-no-text="message.text == null">
|
<div class="balloon _panel" :data-no-text="message.text == null">
|
||||||
<button class="delete-button" v-if="isMe" :title="$t('@.delete')" @click="del">
|
<button class="delete-button" v-if="isMe" :title="$t('delete')" @click="del">
|
||||||
<img src="/assets/desktop/remove.png" alt="Delete"/>
|
<img src="/assets/desktop/remove.png" alt="Delete"/>
|
||||||
</button>
|
</button>
|
||||||
<div class="content" v-if="!message.isDeleted">
|
<div class="content" v-if="!message.isDeleted">
|
||||||
|
|
|
@ -14,10 +14,10 @@
|
||||||
|
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<mk-loading v-if="fetching"/>
|
<mk-loading v-if="fetching"/>
|
||||||
<p class="empty" v-if="!fetching && messages.length == 0"><fa icon="info-circle"/>{{ user ? $t('not-talked-user') : $t('not-talked-group') }}</p>
|
<p class="empty" v-if="!fetching && messages.length == 0"><fa :icon="faInfoCircle"/>{{ $t('noMessagesYet') }}</p>
|
||||||
<p class="no-history" v-if="!fetching && messages.length > 0 && !existMoreMessages"><fa :icon="faFlag"/>{{ $t('noMoreHistory') }}</p>
|
<p class="no-history" v-if="!fetching && messages.length > 0 && !existMoreMessages"><fa :icon="faFlag"/>{{ $t('noMoreHistory') }}</p>
|
||||||
<button class="more _button" :class="{ fetching: fetchingMoreMessages }" v-if="existMoreMessages" @click="fetchMoreMessages" :disabled="fetchingMoreMessages">
|
<button class="more _button" :class="{ fetching: fetchingMoreMessages }" v-if="existMoreMessages" @click="fetchMoreMessages" :disabled="fetchingMoreMessages">
|
||||||
<template v-if="fetchingMoreMessages"><fa icon="spinner" pulse fixed-width/></template>{{ fetchingMoreMessages ? $t('@.loading') : $t('@.load-more') }}
|
<template v-if="fetchingMoreMessages"><fa icon="spinner" pulse fixed-width/></template>{{ fetchingMoreMessages ? $t('loading') : $t('loadMore') }}
|
||||||
</button>
|
</button>
|
||||||
<x-list class="messages" :items="messages" v-slot="{ item: message, i }" direction="up" reversed>
|
<x-list class="messages" :items="messages" v-slot="{ item: message, i }" direction="up" reversed>
|
||||||
<x-message :message="message" :is-group="group != null" :key="message.id"/>
|
<x-message :message="message" :is-group="group != null" :key="message.id"/>
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
<footer>
|
<footer>
|
||||||
<transition name="fade">
|
<transition name="fade">
|
||||||
<div class="new-message" v-show="showIndicator">
|
<div class="new-message" v-show="showIndicator">
|
||||||
<button class="_buttonPrimary" @click="onIndicatorClick"><i><fa :icon="faArrowCircleDown"/></i>{{ $t('new-message') }}</button>
|
<button class="_buttonPrimary" @click="onIndicatorClick"><i><fa :icon="faArrowCircleDown"/></i>{{ $t('newMessageExists') }}</button>
|
||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
<x-form v-if="!fetching" :user="user" :group="group" ref="form"/>
|
<x-form v-if="!fetching" :user="user" :group="group" ref="form"/>
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { faArrowCircleDown, faFlag, faUsers } from '@fortawesome/free-solid-svg-icons';
|
import { faArrowCircleDown, faFlag, faUsers, faInfoCircle } from '@fortawesome/free-solid-svg-icons';
|
||||||
import i18n from '../i18n';
|
import i18n from '../i18n';
|
||||||
import XList from '../components/date-separated-list.vue';
|
import XList from '../components/date-separated-list.vue';
|
||||||
import XMessage from './messaging-room.message.vue';
|
import XMessage from './messaging-room.message.vue';
|
||||||
|
@ -64,7 +64,7 @@ export default Vue.extend({
|
||||||
connection: null,
|
connection: null,
|
||||||
showIndicator: false,
|
showIndicator: false,
|
||||||
timer: null,
|
timer: null,
|
||||||
faArrowCircleDown, faFlag, faUsers
|
faArrowCircleDown, faFlag, faUsers, faInfoCircle
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ export default Vue.extend({
|
||||||
} else if (e.dataTransfer.files.length > 1) {
|
} else if (e.dataTransfer.files.length > 1) {
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: this.$t('only-one-file-attached')
|
text: this.$t('onlyOneFileCanBeAttached')
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ export default ($root: any) => {
|
||||||
if ($root.$store.getters.isSignedIn) return;
|
if ($root.$store.getters.isSignedIn) return;
|
||||||
|
|
||||||
$root.dialog({
|
$root.dialog({
|
||||||
title: $root.$t('@.signin-required'),
|
title: $root.$t('signinRequired'),
|
||||||
text: null
|
text: null
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue