diff options
Diffstat (limited to 'src/client/app')
55 files changed, 112 insertions, 106 deletions
diff --git a/src/client/app/auth/script.ts b/src/client/app/auth/script.ts index bdfdf70be3..64ab6536db 100644 --- a/src/client/app/auth/script.ts +++ b/src/client/app/auth/script.ts @@ -8,14 +8,14 @@ import VueRouter from 'vue-router'; import './style.styl'; import init from '../init'; - import Index from './views/index.vue'; +import * as config from '../config'; /** * init */ init(launch => { - document.title = '%i18n:common.name% | %i18n:common.application-authorization%'; + document.title = `${config.name} | %i18n:common.application-authorization%`; // Init router const router = new VueRouter({ diff --git a/src/client/app/common/scripts/compose-notification.ts b/src/client/app/common/scripts/compose-notification.ts index 4fb0610fd7..f42af94370 100644 --- a/src/client/app/common/scripts/compose-notification.ts +++ b/src/client/app/common/scripts/compose-notification.ts @@ -38,7 +38,7 @@ export default function(type, data): Notification { switch (data.type) { case 'mention': return { - title: '%i18n:common.notification.notified-by%'.split("{}")[0] + `${getUserName(data.user)}さんから:` + '%i18n:common.notification.notified-by%'.split("{}")[1], + title: '%i18n:common.notification.notified-by%'.split("{}")[0] + `${getUserName(data.user)}:` + '%i18n:common.notification.notified-by%'.split("{}")[1], body: getNoteSummary(data), icon: data.user.avatarUrl }; diff --git a/src/client/app/common/scripts/date-stringify.ts b/src/client/app/common/scripts/date-stringify.ts deleted file mode 100644 index 2b8e525567..0000000000 --- a/src/client/app/common/scripts/date-stringify.ts +++ /dev/null @@ -1,13 +0,0 @@ -export default date => { - if (typeof date == 'string') date = new Date(date); - return ( - date.getFullYear() + '%i18n:common.date.full-year%' + - (date.getMonth() + 1) + '%i18n:common.date.month%' + - date.getDate() + '%i18n:common.date.day%' + - ' ' + - date.getHours() + '%i18n:common.date.hours%' + - date.getMinutes() + '%i18n:common.date.minutes%' + - ' ' + - `(${['日', '月', '火', '水', '木', '金', '土'][date.getDay()]})` - ); -}; diff --git a/src/client/app/common/views/components/autocomplete.vue b/src/client/app/common/views/components/autocomplete.vue index cd6066877c..b274eaa0a0 100644 --- a/src/client/app/common/views/components/autocomplete.vue +++ b/src/client/app/common/views/components/autocomplete.vue @@ -132,7 +132,7 @@ export default Vue.extend({ this.users = users; this.fetching = false; } else { - (this as any).api('users/search_by_username', { + (this as any).api('users/search', { query: this.q, limit: 30 }).then(users => { diff --git a/src/client/app/common/views/components/messaging-room.form.vue b/src/client/app/common/views/components/messaging-room.form.vue index b6ca902660..f183749fad 100644 --- a/src/client/app/common/views/components/messaging-room.form.vue +++ b/src/client/app/common/views/components/messaging-room.form.vue @@ -83,7 +83,7 @@ export default Vue.extend({ } } else { if (items[0].kind == 'file') { - alert('メッセージに添付できるのはひとつのファイルのみです'); + alert('%i18n:only-one-file-attached%'); } } }, @@ -105,7 +105,7 @@ export default Vue.extend({ return; } else if (e.dataTransfer.files.length > 1) { e.preventDefault(); - alert('メッセージに添付できるのはひとつのファイルのみです'); + alert('%i18n:only-one-file-attached%'); return; } diff --git a/src/client/app/common/views/components/messaging-room.vue b/src/client/app/common/views/components/messaging-room.vue index b2831d6928..30143b4f1d 100644 --- a/src/client/app/common/views/components/messaging-room.vue +++ b/src/client/app/common/views/components/messaging-room.vue @@ -61,7 +61,7 @@ export default Vue.extend({ const date = new Date(message.createdAt).getDate(); const month = new Date(message.createdAt).getMonth() + 1; message._date = date; - message._datetext = `${month}月 ${date}日`; + message._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString()); return message; }); }, @@ -111,7 +111,7 @@ export default Vue.extend({ this.form.upload(e.dataTransfer.files[0]); return; } else if (e.dataTransfer.files.length > 1) { - alert('メッセージに添付できるのはひとつのファイルのみです'); + alert('%i18n:@only-one-file-attached%'); return; } diff --git a/src/client/app/common/views/components/signin.vue b/src/client/app/common/views/components/signin.vue index 58241cef09..deaeeca6a7 100644 --- a/src/client/app/common/views/components/signin.vue +++ b/src/client/app/common/views/components/signin.vue @@ -12,7 +12,7 @@ </ui-input> <ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/> <ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button> - <p style="margin: 8px 0;">または<a :href="`${apiUrl}/signin/twitter`">Twitterでログイン</a></p> + <p style="margin: 8px 0;">%i18n:@or%<a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p> </form> </template> diff --git a/src/client/app/common/views/components/ui/form/button.vue b/src/client/app/common/views/components/ui/form/button.vue index 6e1475bc38..9c37b3118b 100644 --- a/src/client/app/common/views/components/ui/form/button.vue +++ b/src/client/app/common/views/components/ui/form/button.vue @@ -45,6 +45,9 @@ root(isDark) color isDark ? #fff : #606266 transition 0.1s + * + pointer-events none + &:hover &:focus color $theme-color diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue index e1b5b1f120..13d855d20a 100644 --- a/src/client/app/common/views/pages/follow.vue +++ b/src/client/app/common/views/pages/follow.vue @@ -71,7 +71,6 @@ export default Vue.extend({ this.user = user; this.fetching = false; Progress.done(); - document.title = getUserName(this.user) + ' | %i18n:common.name%'; }); }, diff --git a/src/client/app/common/views/widgets/server.disk.vue b/src/client/app/common/views/widgets/server.disk.vue index 5c7e9678de..99ce624051 100644 --- a/src/client/app/common/views/widgets/server.disk.vue +++ b/src/client/app/common/views/widgets/server.disk.vue @@ -4,7 +4,7 @@ <div> <p>%fa:R hdd%Storage</p> <p>Total: {{ total | bytes(1) }}</p> - <p>Available: {{ available | bytes(1) }}</p> + <p>Free: {{ available | bytes(1) }}</p> <p>Used: {{ used | bytes(1) }}</p> </div> </div> diff --git a/src/client/app/desktop/api/update-avatar.ts b/src/client/app/desktop/api/update-avatar.ts index 887367a24e..83820f92bd 100644 --- a/src/client/app/desktop/api/update-avatar.ts +++ b/src/client/app/desktop/api/update-avatar.ts @@ -8,7 +8,7 @@ export default (os: OS) => (cb, file = null) => { const w = os.new(CropWindow, { image: file, - title: 'アバターとして表示する部分を選択', + title: '%i18n:desktop.avatar-crop-title%', aspectRatio: 1 / 1 }); @@ -18,11 +18,11 @@ export default (os: OS) => (cb, file = null) => { data.append('file', blob, file.name + '.cropped.png'); os.api('drive/folders/find', { - name: 'アイコン' + name: '%i18n:desktop.avatar%' }).then(iconFolder => { if (iconFolder.length === 0) { os.api('drive/folders/create', { - name: 'アイコン' + name: '%i18n:desktop.avatar%' }).then(iconFolder => { upload(data, iconFolder); }); @@ -41,7 +41,7 @@ export default (os: OS) => (cb, file = null) => { const upload = (data, folder) => { const dialog = os.new(ProgressDialog, { - title: '新しいアバターをアップロードしています' + title: '%i18n:desktop.uploading-avatar%' }); document.body.appendChild(dialog.$el); @@ -76,10 +76,10 @@ export default (os: OS) => (cb, file = null) => { }); os.apis.dialog({ - title: '%fa:info-circle%アバターを更新しました', - text: '新しいアバターが反映されるまで時間がかかる場合があります。', + title: '%fa:info-circle% %i18n:desktop.avatar-updated%', + text: null, actions: [{ - text: 'わかった' + text: '%i18n:common.got-it%' }] }); @@ -92,7 +92,7 @@ export default (os: OS) => (cb, file = null) => { } else { os.apis.chooseDriveFile({ multiple: false, - title: '%fa:image%アバターにする画像を選択' + title: '%fa:image% %i18n:desktop.choose-avatar%' }).then(file => { fileSelected(file); }); diff --git a/src/client/app/desktop/api/update-banner.ts b/src/client/app/desktop/api/update-banner.ts index 4e6dd4e2c7..33c4e306a2 100644 --- a/src/client/app/desktop/api/update-banner.ts +++ b/src/client/app/desktop/api/update-banner.ts @@ -8,7 +8,7 @@ export default (os: OS) => { const cropImage = file => new Promise((resolve, reject) => { const w = os.new(CropWindow, { image: file, - title: 'バナーとして表示する部分を選択', + title: '%i18n:desktop.banner-crop-title%', aspectRatio: 16 / 9 }); @@ -18,11 +18,11 @@ export default (os: OS) => { data.append('file', blob, file.name + '.cropped.png'); os.api('drive/folders/find', { - name: 'バナー' + name: '%i18n:desktop.banner%' }).then(bannerFolder => { if (bannerFolder.length === 0) { os.api('drive/folders/create', { - name: 'バナー' + name: '%i18n:desktop.banner%' }).then(iconFolder => { resolve(upload(data, iconFolder)); }); @@ -43,7 +43,7 @@ export default (os: OS) => { const upload = (data, folder) => new Promise((resolve, reject) => { const dialog = os.new(ProgressDialog, { - title: '新しいバナーをアップロードしています' + title: '%i18n:desktop.uploading-banner%' }); document.body.appendChild(dialog.$el); @@ -79,10 +79,10 @@ export default (os: OS) => { }); os.apis.dialog({ - title: '%fa:info-circle%バナーを更新しました', - text: '新しいバナーが反映されるまで時間がかかる場合があります。', + title: '%fa:info-circle% %i18n:desktop.banner-updated%', + text: null, actions: [{ - text: 'わかった' + text: '%i18n:common.got-it%' }] }); @@ -95,7 +95,7 @@ export default (os: OS) => { ? Promise.resolve(file) : os.apis.chooseDriveFile({ multiple: false, - title: '%fa:image%バナーにする画像を選択' + title: '%fa:image% %i18n:desktop.choose-banner%' }); return selectedFile diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue index 36a5889220..b6980fae72 100644 --- a/src/client/app/desktop/views/components/note-detail.vue +++ b/src/client/app/desktop/views/components/note-detail.vue @@ -79,7 +79,6 @@ <script lang="ts"> import Vue from 'vue'; -import dateStringify from '../../../common/scripts/date-stringify'; import parse from '../../../../../mfm/parse'; import MkPostFormWindow from './post-form-window.vue'; @@ -129,7 +128,7 @@ export default Vue.extend({ : 0; }, title(): string { - return dateStringify(this.p.createdAt); + return new Date(this.p.createdAt).toLocaleString(); }, urls(): string[] { if (this.p.text) { diff --git a/src/client/app/desktop/views/components/note-preview.vue b/src/client/app/desktop/views/components/note-preview.vue index 2a49557247..c723db98c0 100644 --- a/src/client/app/desktop/views/components/note-preview.vue +++ b/src/client/app/desktop/views/components/note-preview.vue @@ -12,7 +12,6 @@ <script lang="ts"> import Vue from 'vue'; -import dateStringify from '../../../common/scripts/date-stringify'; export default Vue.extend({ props: { @@ -28,7 +27,7 @@ export default Vue.extend({ }, computed: { title(): string { - return dateStringify(this.note.createdAt); + return new Date(this.note.createdAt).toLocaleString(); } } }); diff --git a/src/client/app/desktop/views/components/notes.note.sub.vue b/src/client/app/desktop/views/components/notes.note.sub.vue index a8186fb7e4..fc851e83e9 100644 --- a/src/client/app/desktop/views/components/notes.note.sub.vue +++ b/src/client/app/desktop/views/components/notes.note.sub.vue @@ -12,13 +12,12 @@ <script lang="ts"> import Vue from 'vue'; -import dateStringify from '../../../common/scripts/date-stringify'; export default Vue.extend({ props: ['note'], computed: { title(): string { - return dateStringify(this.note.createdAt); + return new Date(this.note.createdAt).toLocaleString(); } } }); diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue index 3aa52f75f0..a98df104a3 100644 --- a/src/client/app/desktop/views/components/notes.note.vue +++ b/src/client/app/desktop/views/components/notes.note.vue @@ -18,7 +18,7 @@ <div class="body"> <p v-if="p.cw != null" class="cw"> <span class="text" v-if="p.cw != ''">{{ p.cw }}</span> - <span class="toggle" @click="showContent = !showContent">{{ showContent ? '隠す' : 'もっと見る' }}</span> + <span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span> </p> <div class="content" v-show="p.cw == null || showContent"> <div class="text"> @@ -71,7 +71,6 @@ <script lang="ts"> import Vue from 'vue'; -import dateStringify from '../../../common/scripts/date-stringify'; import parse from '../../../../../mfm/parse'; import MkPostFormWindow from './post-form-window.vue'; @@ -128,7 +127,7 @@ export default Vue.extend({ }, title(): string { - return dateStringify(this.p.createdAt); + return new Date(this.p.createdAt).toLocaleString(); }, urls(): string[] { diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue index 0ec2f16dbc..02167ef85c 100644 --- a/src/client/app/desktop/views/components/notes.vue +++ b/src/client/app/desktop/views/components/notes.vue @@ -33,7 +33,7 @@ <script lang="ts"> import Vue from 'vue'; -import { url } from '../../../config'; +import * as config from '../../../config'; import getNoteSummary from '../../../../../misc/get-note-summary'; import XNote from './notes.note.vue'; @@ -69,7 +69,7 @@ export default Vue.extend({ const date = new Date(note.createdAt).getDate(); const month = new Date(note.createdAt).getMonth() + 1; note._date = date; - note._datetext = `${month}月 ${date}日`; + note._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString()); return note; }); } @@ -149,7 +149,7 @@ export default Vue.extend({ // サウンドを再生する if (this.$store.state.device.enableSounds && !silent) { - const sound = new Audio(`${url}/assets/post.mp3`); + const sound = new Audio(`${config.url}/assets/post.mp3`); sound.volume = this.$store.state.device.soundVolume; sound.play(); } @@ -187,7 +187,7 @@ export default Vue.extend({ clearNotification() { this.unreadCount = 0; - document.title = '%i18n:common.name%'; + document.title = config.name; }, onVisibilitychange() { diff --git a/src/client/app/desktop/views/components/notifications.vue b/src/client/app/desktop/views/components/notifications.vue index b291e1f54a..bfe71903e4 100644 --- a/src/client/app/desktop/views/components/notifications.vue +++ b/src/client/app/desktop/views/components/notifications.vue @@ -130,7 +130,7 @@ export default Vue.extend({ const date = new Date(notification.createdAt).getDate(); const month = new Date(notification.createdAt).getMonth() + 1; notification._date = date; - notification._datetext = `${month}月 ${date}日`; + notification._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString()); return notification; }); } diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue index 9b8a0c0f18..334a457504 100644 --- a/src/client/app/desktop/views/components/post-form.vue +++ b/src/client/app/desktop/views/components/post-form.vue @@ -14,7 +14,7 @@ <b>%i18n:@recent-tags%:</b> <a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" title="%@click-to-tagging%">#{{ tag }}</a> </div> - <input v-show="useCw" v-model="cw" placeholder="内容への注釈 (オプション)"> + <input v-show="useCw" v-model="cw" placeholder="%i18n:@annotations%"> <textarea :class="{ with: (files.length != 0 || poll) }" ref="text" v-model="text" :disabled="posting" @keydown="onKeydown" @paste="onPaste" :placeholder="placeholder" diff --git a/src/client/app/desktop/views/components/ui.header.vue b/src/client/app/desktop/views/components/ui.header.vue index 1ed5c3523b..83df4b2fbc 100644 --- a/src/client/app/desktop/views/components/ui.header.vue +++ b/src/client/app/desktop/views/components/ui.header.vue @@ -4,7 +4,7 @@ <div class="main" ref="main"> <div class="backdrop"></div> <div class="main"> - <p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>さん</p> + <p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>%i18n:@adjective%</p> <div class="container" ref="mainContainer"> <div class="left"> <x-nav/> diff --git a/src/client/app/desktop/views/components/user-lists-window.vue b/src/client/app/desktop/views/components/user-lists-window.vue index 47648c287d..72ae9cf4e4 100644 --- a/src/client/app/desktop/views/components/user-lists-window.vue +++ b/src/client/app/desktop/views/components/user-lists-window.vue @@ -27,7 +27,7 @@ export default Vue.extend({ methods: { add() { (this as any).apis.input({ - title: 'リスト名', + title: '%i18n:@list-name%', }).then(async title => { const list = await (this as any).api('users/lists/create', { title diff --git a/src/client/app/desktop/views/pages/deck/deck.notes.vue b/src/client/app/desktop/views/pages/deck/deck.notes.vue index a5ed45b64c..3578e17287 100644 --- a/src/client/app/desktop/views/pages/deck/deck.notes.vue +++ b/src/client/app/desktop/views/pages/deck/deck.notes.vue @@ -72,7 +72,7 @@ export default Vue.extend({ const date = new Date(note.createdAt).getDate(); const month = new Date(note.createdAt).getMonth() + 1; note._date = date; - note._datetext = `${month}月 ${date}日`; + note._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString()); return note; }); } diff --git a/src/client/app/desktop/views/pages/deck/deck.notifications.vue b/src/client/app/desktop/views/pages/deck/deck.notifications.vue index 10c06b0ad2..fcb74b9140 100644 --- a/src/client/app/desktop/views/pages/deck/deck.notifications.vue +++ b/src/client/app/desktop/views/pages/deck/deck.notifications.vue @@ -51,7 +51,7 @@ export default Vue.extend({ const date = new Date(notification.createdAt).getDate(); const month = new Date(notification.createdAt).getMonth() + 1; notification._date = date; - notification._datetext = `${month}月 ${date}日`; + notification._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString()); return notification; }); } diff --git a/src/client/app/desktop/views/pages/home-customize.vue b/src/client/app/desktop/views/pages/home-customize.vue index ffdcf39fe2..4318e89821 100644 --- a/src/client/app/desktop/views/pages/home-customize.vue +++ b/src/client/app/desktop/views/pages/home-customize.vue @@ -4,9 +4,11 @@ <script lang="ts"> import Vue from 'vue'; +import * as config from '../../../config'; + export default Vue.extend({ mounted() { - document.title = '%i18n:common.name% - %i18n:@title%'; + document.title = `${config.name} - %i18n:@title%`; } }); </script> diff --git a/src/client/app/desktop/views/pages/home.vue b/src/client/app/desktop/views/pages/home.vue index 0c42e42bd2..3d3c24bfa4 100644 --- a/src/client/app/desktop/views/pages/home.vue +++ b/src/client/app/desktop/views/pages/home.vue @@ -7,6 +7,7 @@ <script lang="ts"> import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; +import * as config from '../../../config'; export default Vue.extend({ props: { @@ -16,7 +17,7 @@ export default Vue.extend({ } }, mounted() { - document.title = '%i18n:common.name%'; + document.title = config.name; Progress.start(); }, diff --git a/src/client/app/desktop/views/pages/share.vue b/src/client/app/desktop/views/pages/share.vue index f5f5c4e184..4a7bdb14cd 100644 --- a/src/client/app/desktop/views/pages/share.vue +++ b/src/client/app/desktop/views/pages/share.vue @@ -1,6 +1,6 @@ <template> <div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr"> - <h1>{{'%i18n:@share-with%'.split("{}")[0] + '%i18n:common.name%' + '%i18n:@share-with%'.split("{}")[1]}}</h1> + <h1>{{ '%i18n:@share-with%'.replace('{}', name) }}</h1> <div> <mk-signin v-if="!$store.getters.isSignedIn"/> <mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/> @@ -12,10 +12,12 @@ <script lang="ts"> import Vue from 'vue'; +import * as config from '../../../config'; export default Vue.extend({ data() { return { + name: config.name, posted: false, text: new URLSearchParams(location.search).get('text') }; diff --git a/src/client/app/desktop/views/pages/user/user.profile.vue b/src/client/app/desktop/views/pages/user/user.profile.vue index b74dbc7e25..efd5be4672 100644 --- a/src/client/app/desktop/views/pages/user/user.profile.vue +++ b/src/client/app/desktop/views/pages/user/user.profile.vue @@ -13,7 +13,7 @@ <span v-if="user.isMuted">%fa:eye% %i18n:@unmute%</span> <span v-if="!user.isMuted">%fa:eye-slash% %i18n:@mute%</span> </button> - <button class="mute ui" @click="list">%fa:list% リストに追加</button> + <button class="mute ui" @click="list">%fa:list% %i18n:@push-to-a-list%</button> </div> </div> </template> @@ -76,7 +76,7 @@ export default Vue.extend({ }); (this as any).apis.dialog({ title: 'Done!', - text: `${this.user.name}を${list.title}に追加しました。` + text: '%i18n:@list-pushed%'.replace('{user}', this.user.name).replace('{list}', list.title) }); }); } diff --git a/src/client/app/desktop/views/pages/user/user.vue b/src/client/app/desktop/views/pages/user/user.vue index 1a83f81342..300fd68f06 100644 --- a/src/client/app/desktop/views/pages/user/user.vue +++ b/src/client/app/desktop/views/pages/user/user.vue @@ -68,7 +68,6 @@ export default Vue.extend({ this.user = user; this.fetching = false; Progress.done(); - document.title = getUserName(this.user) + ' | %i18n:common.name%'; }); }, diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue index 9543a55b9a..a01b44fc73 100644 --- a/src/client/app/desktop/views/pages/welcome.vue +++ b/src/client/app/desktop/views/pages/welcome.vue @@ -8,7 +8,7 @@ <div class="body" :style="{ backgroundImage: `url('${ welcomeBgUrl }')` }"> <div class="container"> <div class="info"> - <span>%i18n:common.name% <b>{{ host }}</b></span> + <span><b>{{ host }}</b></span> <span class="stats" v-if="stats"> <span>%fa:user% {{ stats.originalUsersCount | number }}</span> <span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span> @@ -16,9 +16,9 @@ </div> <main> <div class="about"> - <h1 v-if="name">{{ name }}</h1> - <h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" alt="%i18n:common.name%"></h1> - <p class="powerd-by" v-if="name">%i18n:@powered-by-misskey%</p> + <h1 v-if="name != 'Misskey'">{{ name }}</h1> + <h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1> + <p class="powerd-by" v-if="name != 'Misskey'">%i18n:@powered-by-misskey%</p> <p class="desc" v-html="description || '%i18n:common.about%'"></p> <a ref="signup" @click="signup">📦 %i18n:@signup%</a> </div> @@ -32,7 +32,7 @@ <mk-nav class="nav"/> </div> <mk-forkit class="forkit"/> - <img src="assets/title.dark.svg" alt="%i18n:common.name%"> + <img src="assets/title.dark.svg" :alt="name"> </div> <div class="tl"> <mk-welcome-timeline :max="20"/> diff --git a/src/client/app/desktop/views/widgets/post-form.vue b/src/client/app/desktop/views/widgets/post-form.vue index 618d19efc4..19a2790d95 100644 --- a/src/client/app/desktop/views/widgets/post-form.vue +++ b/src/client/app/desktop/views/widgets/post-form.vue @@ -55,7 +55,7 @@ export default define({ }).then(data => { this.clear(); }).catch(err => { - alert('失敗した'); + alert('Something happened'); }).then(() => { this.posting = false; }); diff --git a/src/client/app/dev/views/app.vue b/src/client/app/dev/views/app.vue index a35b032b73..54d99ec82a 100644 --- a/src/client/app/dev/views/app.vue +++ b/src/client/app/dev/views/app.vue @@ -1,6 +1,6 @@ <template> <mk-ui> - <p v-if="fetching">読み込み中</p> + <p v-if="fetching">%i18n:common.loading%</p> <b-card v-if="!fetching" :header="app.name"> <b-form-group label="App Secret"> <b-input :value="app.secret" readonly/> diff --git a/src/client/app/dev/views/index.vue b/src/client/app/dev/views/index.vue index 3f572b3907..bb137481f4 100644 --- a/src/client/app/dev/views/index.vue +++ b/src/client/app/dev/views/index.vue @@ -1,6 +1,6 @@ <template> <mk-ui> - <b-button to="/apps" variant="primary">アプリの管理</b-button> + <b-button to="/apps" variant="primary">%i18n:@manage-apps%</b-button> </mk-ui> </template> diff --git a/src/client/app/dev/views/ui.vue b/src/client/app/dev/views/ui.vue index 0a1cdf829b..f1e001909f 100644 --- a/src/client/app/dev/views/ui.vue +++ b/src/client/app/dev/views/ui.vue @@ -1,7 +1,7 @@ <template> <div> <b-navbar toggleable="md" type="dark" variant="info"> - <b-navbar-brand>%i18n:common.name% Developers</b-navbar-brand> + <b-navbar-brand>Developers</b-navbar-brand> <b-navbar-nav> <b-nav-item to="/">Home</b-nav-item> <b-nav-item to="/apps">Apps</b-nav-item> diff --git a/src/client/app/init.ts b/src/client/app/init.ts index 043f26d0bc..18f510ea24 100644 --- a/src/client/app/init.ts +++ b/src/client/app/init.ts @@ -55,7 +55,7 @@ Vue.mixin({ console.info(`Misskey v${version} (${codename})`); console.info( - '%cここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。', + '%c%i18n:common.do-not-copy-paste%', 'color: red; background: yellow; font-size: 16px; font-weight: bold;'); // BootTimer解除 diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue index cba8ef1804..aed372d9a2 100644 --- a/src/client/app/mobile/views/components/notes.vue +++ b/src/client/app/mobile/views/components/notes.vue @@ -38,6 +38,7 @@ <script lang="ts"> import Vue from 'vue'; import getNoteSummary from '../../../../../misc/get-note-summary'; +import * as config from '../../../config'; const displayLimit = 30; @@ -66,7 +67,7 @@ export default Vue.extend({ const date = new Date(note.createdAt).getDate(); const month = new Date(note.createdAt).getMonth() + 1; note._date = date; - note._datetext = `${month}月 ${date}日`; + note._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString()); return note; }); } @@ -183,7 +184,7 @@ export default Vue.extend({ clearNotification() { this.unreadCount = 0; - document.title = '%i18n:common.name%'; + document.title = config.name; }, onVisibilitychange() { diff --git a/src/client/app/mobile/views/components/notifications.vue b/src/client/app/mobile/views/components/notifications.vue index fc220c252a..9f20c3fb22 100644 --- a/src/client/app/mobile/views/components/notifications.vue +++ b/src/client/app/mobile/views/components/notifications.vue @@ -42,7 +42,7 @@ export default Vue.extend({ const date = new Date(notification.createdAt).getDate(); const month = new Date(notification.createdAt).getMonth() + 1; notification._date = date; - notification._datetext = `${month}月 ${date}日`; + notification._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString()); return notification; }); } diff --git a/src/client/app/mobile/views/components/ui.header.vue b/src/client/app/mobile/views/components/ui.header.vue index 794ec9a307..b87c6f1eb7 100644 --- a/src/client/app/mobile/views/components/ui.header.vue +++ b/src/client/app/mobile/views/components/ui.header.vue @@ -3,12 +3,12 @@ <mk-special-message/> <div class="main" ref="main"> <div class="backdrop"></div> - <p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>さん</p> + <p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>%i18n:@adjective%</p> <div class="content" ref="mainContainer"> <button class="nav" @click="$parent.isDrawerOpening = true">%fa:bars%</button> <template v-if="hasUnreadNotification || hasUnreadMessagingMessage || hasGameInvitation">%fa:circle%</template> <h1> - <slot>%i18n:common.name%</slot> + <slot>config.name</slot> </h1> <slot name="func"></slot> </div> @@ -20,11 +20,13 @@ <script lang="ts"> import Vue from 'vue'; import * as anime from 'animejs'; +import * as config from '../../../config'; export default Vue.extend({ props: ['func'], data() { return { + config, hasGameInvitation: false, connection: null, connectionId: null diff --git a/src/client/app/mobile/views/pages/drive.vue b/src/client/app/mobile/views/pages/drive.vue index 9c635be05b..72427a4780 100644 --- a/src/client/app/mobile/views/pages/drive.vue +++ b/src/client/app/mobile/views/pages/drive.vue @@ -25,6 +25,7 @@ <script lang="ts"> import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; +import * as config from '../../../config'; export default Vue.extend({ data() { @@ -43,7 +44,7 @@ export default Vue.extend({ window.addEventListener('popstate', this.onPopState); }, mounted() { - document.title = '%i18n:common.name% Drive'; + document.title = `${config.name} Drive`; document.documentElement.style.background = '#fff'; }, beforeDestroy() { @@ -63,7 +64,7 @@ export default Vue.extend({ (this.$refs as any).browser.openContextMenu(); }, onMoveRoot(silent) { - const title = '%i18n:common.name% Drive'; + const title = `${config.name} Drive`; if (!silent) { // Rewrite URL @@ -76,7 +77,7 @@ export default Vue.extend({ this.folder = null; }, onOpenFolder(folder, silent) { - const title = folder.name + ' | %i18n:common.name% Drive'; + const title = `${folder.name} | ${config.name} Drive`; if (!silent) { // Rewrite URL @@ -89,7 +90,7 @@ export default Vue.extend({ this.folder = folder; }, onOpenFile(file, silent) { - const title = file.name + ' | %i18n:common.name% Drive'; + const title = `${file.name} | ${config.name} Drive`; if (!silent) { // Rewrite URL diff --git a/src/client/app/mobile/views/pages/favorites.vue b/src/client/app/mobile/views/pages/favorites.vue index 88a84bd8a2..491890bb0e 100644 --- a/src/client/app/mobile/views/pages/favorites.vue +++ b/src/client/app/mobile/views/pages/favorites.vue @@ -14,6 +14,7 @@ <script lang="ts"> import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; +import * as config from '../../../config'; export default Vue.extend({ data() { @@ -28,7 +29,7 @@ export default Vue.extend({ this.fetch(); }, mounted() { - document.title = '%i18n:common.name% | %i18n:@notifications%'; + document.title = `${config.name} | %i18n:@notifications%`; }, methods: { fetch() { diff --git a/src/client/app/mobile/views/pages/followers.vue b/src/client/app/mobile/views/pages/followers.vue index 4956eb1b94..5bba534ba0 100644 --- a/src/client/app/mobile/views/pages/followers.vue +++ b/src/client/app/mobile/views/pages/followers.vue @@ -21,6 +21,7 @@ import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; import parseAcct from '../../../../../misc/acct/parse'; import getUserName from '../../../../../misc/get-user-name'; +import * as config from '../../../config'; export default Vue.extend({ data() { @@ -49,7 +50,7 @@ export default Vue.extend({ this.user = user; this.fetching = false; - document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | %i18n:common.name%'; + document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + config.name; }); }, onLoaded() { diff --git a/src/client/app/mobile/views/pages/following.vue b/src/client/app/mobile/views/pages/following.vue index fa6807a245..cdc009b768 100644 --- a/src/client/app/mobile/views/pages/following.vue +++ b/src/client/app/mobile/views/pages/following.vue @@ -20,6 +20,7 @@ import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; import parseAcct from '../../../../../misc/acct/parse'; +import * as config from '../../../config'; export default Vue.extend({ data() { @@ -48,7 +49,7 @@ export default Vue.extend({ this.user = user; this.fetching = false; - document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | %i18n:common.name%'; + document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + config.name; }); }, onLoaded() { diff --git a/src/client/app/mobile/views/pages/games/reversi.vue b/src/client/app/mobile/views/pages/games/reversi.vue index e6e6325f8b..448c9b8d77 100644 --- a/src/client/app/mobile/views/pages/games/reversi.vue +++ b/src/client/app/mobile/views/pages/games/reversi.vue @@ -7,10 +7,11 @@ <script lang="ts"> import Vue from 'vue'; +import * as config from '../../../../config'; export default Vue.extend({ mounted() { - document.title = '%i18n:common.name% %i18n:@reversi%'; + document.title = `${config.name} %i18n:@reversi%`; document.documentElement.style.background = '#fff'; }, methods: { diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue index 7b14c7ee98..c1ed97ac13 100644 --- a/src/client/app/mobile/views/pages/home.vue +++ b/src/client/app/mobile/views/pages/home.vue @@ -49,6 +49,7 @@ import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; import XTl from './home.timeline.vue'; +import * as config from '../../../config'; export default Vue.extend({ components: { @@ -96,7 +97,7 @@ export default Vue.extend({ }, mounted() { - document.title = '%i18n:common.name%'; + document.title = config.name; Progress.start(); diff --git a/src/client/app/mobile/views/pages/messaging-room.vue b/src/client/app/mobile/views/pages/messaging-room.vue index 24ffc658a3..e2016fc82a 100644 --- a/src/client/app/mobile/views/pages/messaging-room.vue +++ b/src/client/app/mobile/views/pages/messaging-room.vue @@ -11,6 +11,7 @@ <script lang="ts"> import Vue from 'vue'; import parseAcct from '../../../../../misc/acct/parse'; +import * as config from '../../../config'; export default Vue.extend({ data() { @@ -47,7 +48,7 @@ export default Vue.extend({ this.user = user; this.fetching = false; - document.title = `%i18n:@messaging%: ${Vue.filter('userName')(this.user)} | %i18n:common.name%`; + document.title = `%i18n:@messaging%: ${Vue.filter('userName')(this.user)} | ${config.name}`; }); } } diff --git a/src/client/app/mobile/views/pages/messaging.vue b/src/client/app/mobile/views/pages/messaging.vue index b5a4f405fb..9f2beb860c 100644 --- a/src/client/app/mobile/views/pages/messaging.vue +++ b/src/client/app/mobile/views/pages/messaging.vue @@ -8,10 +8,11 @@ <script lang="ts"> import Vue from 'vue'; import getAcct from '../../../../../misc/acct/render'; +import * as config from '../../../config'; export default Vue.extend({ mounted() { - document.title = '%i18n:common.name% %i18n:@messaging%'; + document.title = `${config.name} %i18n:@messaging%`; }, methods: { navigate(user) { diff --git a/src/client/app/mobile/views/pages/note.vue b/src/client/app/mobile/views/pages/note.vue index 64d46f051b..8b1095c509 100644 --- a/src/client/app/mobile/views/pages/note.vue +++ b/src/client/app/mobile/views/pages/note.vue @@ -16,6 +16,7 @@ <script lang="ts"> import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; +import * as config from '../../../config'; export default Vue.extend({ data() { @@ -31,7 +32,7 @@ export default Vue.extend({ this.fetch(); }, mounted() { - document.title = '%i18n:common.name%'; + document.title = config.name; }, methods: { fetch() { diff --git a/src/client/app/mobile/views/pages/notifications.vue b/src/client/app/mobile/views/pages/notifications.vue index 3688721613..4d3c8ee534 100644 --- a/src/client/app/mobile/views/pages/notifications.vue +++ b/src/client/app/mobile/views/pages/notifications.vue @@ -15,7 +15,7 @@ import Progress from '../../../common/scripts/loading'; export default Vue.extend({ mounted() { - document.title = '%i18n:common.name% | %i18n:@notifications%'; + document.title = '%i18n:@notifications%'; Progress.start(); }, diff --git a/src/client/app/mobile/views/pages/received-follow-requests.vue b/src/client/app/mobile/views/pages/received-follow-requests.vue index fff2fdea56..77938c3d60 100644 --- a/src/client/app/mobile/views/pages/received-follow-requests.vue +++ b/src/client/app/mobile/views/pages/received-follow-requests.vue @@ -25,7 +25,7 @@ export default Vue.extend({ }; }, mounted() { - document.title = '%i18n:common.name% | %i18n:@title%'; + document.title = '%i18n:@title%'; Progress.start(); diff --git a/src/client/app/mobile/views/pages/search.vue b/src/client/app/mobile/views/pages/search.vue index 7801068c1a..0b37a3c7bd 100644 --- a/src/client/app/mobile/views/pages/search.vue +++ b/src/client/app/mobile/views/pages/search.vue @@ -3,7 +3,7 @@ <span slot="header">%fa:search% {{ q }}</span> <main> - <p v-if="!fetching && empty">%fa:search%「{{ q }}」に関する投稿は見つかりませんでした。</p> + <p :class="$style.empty" v-if="!fetching && empty">%fa:search% {{ '%i18n:not-found%'.split('{}')[0] }}{{ q }}{{ '%i18n:not-found%'.split('{}')[1] }}</p> <mk-notes ref="timeline" :more="existMore ? more : null"/> </main> </mk-ui> @@ -12,6 +12,7 @@ <script lang="ts"> import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; +import * as config from '../../../config'; const limit = 20; @@ -34,7 +35,7 @@ export default Vue.extend({ } }, mounted() { - document.title = `%i18n:@search%: ${this.q} | %i18n:common.name%`; + document.title = `%i18n:@search%: ${this.q} | ${config.name}`; this.fetch(); }, diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue index 63fca64ab1..f74b734b6e 100644 --- a/src/client/app/mobile/views/pages/settings.vue +++ b/src/client/app/mobile/views/pages/settings.vue @@ -143,7 +143,7 @@ export default Vue.extend({ }, mounted() { - document.title = '%i18n:common.name% | %i18n:@settings%'; + document.title = '%i18n:@settings%'; }, methods: { diff --git a/src/client/app/mobile/views/pages/share.vue b/src/client/app/mobile/views/pages/share.vue index 3e33e32732..dcb55e6702 100644 --- a/src/client/app/mobile/views/pages/share.vue +++ b/src/client/app/mobile/views/pages/share.vue @@ -1,21 +1,23 @@ <template> <div class="azibmfpleajagva420swmu4c3r7ni7iw"> - <h1>{{'%i18n:@share-with%'.split("{}")[0] + '%i18n:common.name%' + '%i18n:@share-with%'.split("{}")[1]}}</h1> + <h1>{{ '%i18n:@share-with%'.replace('{}', name) }}</h1> <div> <mk-signin v-if="!$store.getters.isSignedIn"/> <mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/> <p v-if="posted" class="posted">%fa:check%</p> </div> - <ui-button class="close" v-if="posted" @click="close">閉じる</ui-button> + <ui-button class="close" v-if="posted" @click="close">%i18n:common.close%</ui-button> </div> </template> <script lang="ts"> import Vue from 'vue'; +import * as config from '../../../config'; export default Vue.extend({ data() { return { + name: config.name, posted: false, text: new URLSearchParams(location.search).get('text') }; diff --git a/src/client/app/mobile/views/pages/user-lists.vue b/src/client/app/mobile/views/pages/user-lists.vue index 1cce3e9bdd..abd04c1496 100644 --- a/src/client/app/mobile/views/pages/user-lists.vue +++ b/src/client/app/mobile/views/pages/user-lists.vue @@ -23,7 +23,7 @@ export default Vue.extend({ }; }, mounted() { - document.title = '%i18n:common.name% | %i18n:@title%'; + document.title = '%i18n:@title%'; Progress.start(); diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue index d016345717..11ca1caebf 100644 --- a/src/client/app/mobile/views/pages/user.vue +++ b/src/client/app/mobile/views/pages/user.vue @@ -67,6 +67,7 @@ import * as age from 's-age'; import parseAcct from '../../../../../misc/acct/parse'; import Progress from '../../../common/scripts/loading'; import XHome from './user/home.vue'; +import * as config from '../../../config'; export default Vue.extend({ components: { @@ -106,7 +107,7 @@ export default Vue.extend({ this.fetching = false; Progress.done(); - document.title = Vue.filter('userName')(this.user) + ' | %i18n:common.name%'; + document.title = Vue.filter('userName')(this.user) + ' | ' + config.name; }); } } diff --git a/src/client/app/mobile/views/pages/welcome.vue b/src/client/app/mobile/views/pages/welcome.vue index acc8e2c490..f8a7ff1c80 100644 --- a/src/client/app/mobile/views/pages/welcome.vue +++ b/src/client/app/mobile/views/pages/welcome.vue @@ -1,10 +1,10 @@ <template> <div class="welcome"> <div> - <img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" alt="%i18n:common.name%"> + <img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"> <p class="host">{{ host }}</p> <div class="about"> - <h2>{{ name || 'unidentified' }}</h2> + <h2>{{ name }}</h2> <p v-html="description || '%i18n:common.about%'"></p> <router-link class="signup" to="/signup">%i18n:@signup%</router-link> </div> diff --git a/src/client/app/mobile/views/pages/widgets.vue b/src/client/app/mobile/views/pages/widgets.vue index 4400132bf2..b90d710c67 100644 --- a/src/client/app/mobile/views/pages/widgets.vue +++ b/src/client/app/mobile/views/pages/widgets.vue @@ -24,8 +24,8 @@ <option value="nav">%i18n:common.widgets.nav%</option> <option value="tips">%i18n:common.widgets.tips%</option> </select> - <button @click="addWidget">追加</button> - <p><a @click="hint">カスタマイズのヒント</a></p> + <button @click="addWidget">%i18n:add-widget%</button> + <p><a @click="hint">%i18n:customization-tips%</a></p> </header> <x-draggable :list="widgets" @@ -53,6 +53,7 @@ import Vue from 'vue'; import * as XDraggable from 'vuedraggable'; import * as uuid from 'uuid'; +import * as config from '../../../config'; export default Vue.extend({ components: { @@ -102,7 +103,7 @@ export default Vue.extend({ }, mounted() { - document.title = '%i18n:common.name%'; + document.title = config.name; }, methods: { |