From 554570cb0964f9eca6eb3d645a0a2ca0550d4733 Mon Sep 17 00:00:00 2001 From: syuilo <syuilotan@yahoo.co.jp> Date: Sun, 15 Apr 2018 01:04:40 +0900 Subject: [PATCH] wip --- src/build/i18n.ts | 15 ++++++- .../connect-failed.troubleshooter.vue | 18 ++++----- .../views/components/connect-failed.vue | 12 +++--- .../app/common/views/components/forkit.vue | 2 +- .../views/components/messaging-room.form.vue | 4 +- .../components/messaging-room.message.vue | 4 +- .../views/components/messaging-room.vue | 8 ++-- .../app/common/views/components/messaging.vue | 6 +-- .../app/common/views/components/nav.vue | 14 +++---- .../app/common/views/components/note-menu.vue | 2 +- .../common/views/components/poll-editor.vue | 10 ++--- .../app/common/views/components/poll.vue | 10 ++--- .../views/components/reaction-picker.vue | 2 +- .../app/common/views/components/signin.vue | 8 ++-- .../app/common/views/components/signup.vue | 40 +++++++++---------- .../views/components/special-message.vue | 4 +- .../views/components/stream-indicator.vue | 6 +-- .../views/components/twitter-setting.vue | 8 ++-- .../app/common/views/components/uploader.vue | 2 +- .../app/common/views/widgets/access-log.vue | 2 +- .../app/common/views/widgets/broadcast.vue | 8 ++-- .../app/common/views/widgets/donation.vue | 6 +-- .../app/common/views/widgets/photo-stream.vue | 4 +- .../app/common/views/widgets/server.vue | 4 +- .../app/desktop/views/components/activity.vue | 4 +- .../app/desktop/views/components/calendar.vue | 8 ++-- .../desktop/views/components/drive-window.vue | 4 +- .../desktop/views/components/drive.file.vue | 28 ++++++------- .../desktop/views/components/drive.folder.vue | 16 ++++---- .../views/components/drive.nav-folder.vue | 2 +- .../app/desktop/views/components/drive.vue | 36 ++++++++--------- .../desktop/views/components/notes.note.vue | 12 +++--- .../views/components/notifications.vue | 2 +- .../views/components/post-form-window.vue | 8 ++-- .../desktop/views/components/post-form.vue | 38 +++++++++--------- .../views/components/renote-form-window.vue | 2 +- .../desktop/views/components/renote-form.vue | 10 ++--- .../views/components/repost-form-window.vue | 2 +- .../desktop/views/components/repost-form.vue | 10 ++--- .../desktop/views/components/settings.2fa.vue | 30 +++++++------- .../desktop/views/components/settings.api.vue | 10 ++--- .../views/components/settings.mute.vue | 2 +- .../views/components/settings.password.vue | 12 +++--- .../views/components/settings.profile.vue | 14 +++---- .../app/desktop/views/components/settings.vue | 22 +++++----- .../views/components/ui.header.account.vue | 10 ++--- .../views/components/ui.header.nav.vue | 4 +- .../components/ui.header.notifications.vue | 2 +- .../views/components/ui.header.post.vue | 2 +- .../views/components/ui.header.search.vue | 2 +- src/client/app/desktop/views/pages/note.vue | 4 +- .../app/desktop/views/pages/selectdrive.vue | 8 ++-- .../pages/user/user.followers-you-know.vue | 6 +-- .../desktop/views/pages/user/user.friends.vue | 6 +-- .../desktop/views/pages/user/user.home.vue | 2 +- .../desktop/views/pages/user/user.photos.vue | 6 +-- .../desktop/views/pages/user/user.profile.vue | 6 +-- .../app/desktop/views/widgets/channel.vue | 6 +-- .../app/desktop/views/widgets/messaging.vue | 2 +- .../desktop/views/widgets/notifications.vue | 4 +- .../app/desktop/views/widgets/polls.vue | 6 +-- .../app/desktop/views/widgets/post-form.vue | 6 +-- .../app/desktop/views/widgets/trends.vue | 6 +-- .../app/desktop/views/widgets/users.vue | 6 +-- .../views/components/drive-file-chooser.vue | 2 +- .../views/components/drive-folder-chooser.vue | 2 +- .../views/components/drive.file-detail.vue | 10 ++--- .../app/mobile/views/components/drive.vue | 18 ++++----- .../mobile/views/components/follow-button.vue | 2 +- .../mobile/views/components/note-detail.vue | 4 +- .../app/mobile/views/components/note.vue | 4 +- .../mobile/views/components/notifications.vue | 4 +- .../app/mobile/views/components/post-form.vue | 4 +- .../views/components/sub-note-content.vue | 2 +- .../app/mobile/views/components/timeline.vue | 4 +- .../app/mobile/views/components/ui.nav.vue | 16 ++++---- .../mobile/views/components/user-timeline.vue | 4 +- .../mobile/views/components/users-list.vue | 6 +-- src/client/app/mobile/views/pages/drive.vue | 2 +- .../app/mobile/views/pages/followers.vue | 6 +-- .../app/mobile/views/pages/following.vue | 6 +-- .../app/mobile/views/pages/messaging-room.vue | 2 +- .../app/mobile/views/pages/messaging.vue | 4 +- src/client/app/mobile/views/pages/note.vue | 6 +-- .../app/mobile/views/pages/notifications.vue | 6 +-- .../mobile/views/pages/profile-setting.vue | 30 +++++++------- src/client/app/mobile/views/pages/search.vue | 6 +-- .../app/mobile/views/pages/selectdrive.vue | 4 +- .../app/mobile/views/pages/settings.vue | 16 ++++---- src/client/app/mobile/views/pages/user.vue | 14 +++---- .../pages/user/home.followers-you-know.vue | 4 +- .../mobile/views/pages/user/home.friends.vue | 4 +- .../mobile/views/pages/user/home.notes.vue | 4 +- .../mobile/views/pages/user/home.photos.vue | 4 +- .../app/mobile/views/pages/user/home.vue | 12 +++--- webpack/loaders/replace.js | 5 ++- 96 files changed, 398 insertions(+), 384 deletions(-) diff --git a/src/build/i18n.ts b/src/build/i18n.ts index b9b740321..d9dacccd3 100644 --- a/src/build/i18n.ts +++ b/src/build/i18n.ts @@ -44,8 +44,19 @@ export default class Replacer { } } - public replacement(match, a, b, c) { - const key = a || b || c; + public replacement(ctx, match, a, b, c) { + const client = 'misskey/src/client/app/'; + const name = ctx.src.substr(ctx.src.indexOf(client) + client.length); + if (name == '') return match; + + let key = a || b || c; + if (key[0] == '@') { + const prefix = name.split('.')[0].replace(/\//g, '.') + '.'; + //if (name.startsWith('app/desktop/views/')) prefix = 'desktop.views.'; + //if (name.startsWith('app/mobile/views/')) prefix = 'mobile.views.'; + key = prefix + key.substr(1); + } + if (match[0] == '"') { return '"' + this.get(key).replace(/"/g, '\\"') + '"'; } else if (match[0] == "'") { diff --git a/src/client/app/common/views/components/connect-failed.troubleshooter.vue b/src/client/app/common/views/components/connect-failed.troubleshooter.vue index cadbd36ba..b0a9c87e7 100644 --- a/src/client/app/common/views/components/connect-failed.troubleshooter.vue +++ b/src/client/app/common/views/components/connect-failed.troubleshooter.vue @@ -1,34 +1,34 @@ <template> <div class="troubleshooter"> - <h1>%fa:wrench%%i18n:common.tags.mk-error.troubleshooter.title%</h1> + <h1>%fa:wrench%%i18n:@title%</h1> <div> <p :data-wip="network == null"> <template v-if="network != null"> <template v-if="network">%fa:check%</template> <template v-if="!network">%fa:times%</template> </template> - {{ network == null ? '%i18n:common.tags.mk-error.troubleshooter.checking-network%' : '%i18n:common.tags.mk-error.troubleshooter.network%' }}<mk-ellipsis v-if="network == null"/> + {{ network == null ? '%i18n:@checking-network%' : '%i18n:@network%' }}<mk-ellipsis v-if="network == null"/> </p> <p v-if="network == true" :data-wip="internet == null"> <template v-if="internet != null"> <template v-if="internet">%fa:check%</template> <template v-if="!internet">%fa:times%</template> </template> - {{ internet == null ? '%i18n:common.tags.mk-error.troubleshooter.checking-internet%' : '%i18n:common.tags.mk-error.troubleshooter.internet%' }}<mk-ellipsis v-if="internet == null"/> + {{ internet == null ? '%i18n:@checking-internet%' : '%i18n:@internet%' }}<mk-ellipsis v-if="internet == null"/> </p> <p v-if="internet == true" :data-wip="server == null"> <template v-if="server != null"> <template v-if="server">%fa:check%</template> <template v-if="!server">%fa:times%</template> </template> - {{ server == null ? '%i18n:common.tags.mk-error.troubleshooter.checking-server%' : '%i18n:common.tags.mk-error.troubleshooter.server%' }}<mk-ellipsis v-if="server == null"/> + {{ server == null ? '%i18n:@checking-server%' : '%i18n:@server%' }}<mk-ellipsis v-if="server == null"/> </p> </div> - <p v-if="!end">%i18n:common.tags.mk-error.troubleshooter.finding%<mk-ellipsis/></p> - <p v-if="network === false"><b>%fa:exclamation-triangle%%i18n:common.tags.mk-error.troubleshooter.no-network%</b><br>%i18n:common.tags.mk-error.troubleshooter.no-network-desc%</p> - <p v-if="internet === false"><b>%fa:exclamation-triangle%%i18n:common.tags.mk-error.troubleshooter.no-internet%</b><br>%i18n:common.tags.mk-error.troubleshooter.no-internet-desc%</p> - <p v-if="server === false"><b>%fa:exclamation-triangle%%i18n:common.tags.mk-error.troubleshooter.no-server%</b><br>%i18n:common.tags.mk-error.troubleshooter.no-server-desc%</p> - <p v-if="server === true" class="success"><b>%fa:info-circle%%i18n:common.tags.mk-error.troubleshooter.success%</b><br>%i18n:common.tags.mk-error.troubleshooter.success-desc%</p> + <p v-if="!end">%i18n:@finding%<mk-ellipsis/></p> + <p v-if="network === false"><b>%fa:exclamation-triangle%%i18n:@no-network%</b><br>%i18n:@no-network-desc%</p> + <p v-if="internet === false"><b>%fa:exclamation-triangle%%i18n:@no-internet%</b><br>%i18n:@no-internet-desc%</p> + <p v-if="server === false"><b>%fa:exclamation-triangle%%i18n:@no-server%</b><br>%i18n:@no-server-desc%</p> + <p v-if="server === true" class="success"><b>%fa:info-circle%%i18n:@success%</b><br>%i18n:@success-desc%</p> </div> </template> diff --git a/src/client/app/common/views/components/connect-failed.vue b/src/client/app/common/views/components/connect-failed.vue index 185250dbd..d90c8756b 100644 --- a/src/client/app/common/views/components/connect-failed.vue +++ b/src/client/app/common/views/components/connect-failed.vue @@ -1,15 +1,15 @@ <template> <div class="mk-connect-failed"> <img src="data:image/jpeg;base64,%base64:/assets/error.jpg%" alt=""/> - <h1>%i18n:common.tags.mk-error.title%</h1> + <h1>%i18n:@title%</h1> <p class="text"> - {{ '%i18n:common.tags.mk-error.description%'.substr(0, '%i18n:common.tags.mk-error.description%'.indexOf('{')) }} - <a @click="reload">{{ '%i18n:common.tags.mk-error.description%'.match(/\{(.+?)\}/)[1] }}</a> - {{ '%i18n:common.tags.mk-error.description%'.substr('%i18n:common.tags.mk-error.description%'.indexOf('}') + 1) }} + {{ '%i18n:@description%'.substr(0, '%i18n:@description%'.indexOf('{')) }} + <a @click="reload">{{ '%i18n:@description%'.match(/\{(.+?)\}/)[1] }}</a> + {{ '%i18n:@description%'.substr('%i18n:@description%'.indexOf('}') + 1) }} </p> - <button v-if="!troubleshooting" @click="troubleshooting = true">%i18n:common.tags.mk-error.troubleshoot%</button> + <button v-if="!troubleshooting" @click="troubleshooting = true">%i18n:@troubleshoot%</button> <x-troubleshooter v-if="troubleshooting"/> - <p class="thanks">%i18n:common.tags.mk-error.thanks%</p> + <p class="thanks">%i18n:@thanks%</p> </div> </template> diff --git a/src/client/app/common/views/components/forkit.vue b/src/client/app/common/views/components/forkit.vue index 6f334b965..05971cbf1 100644 --- a/src/client/app/common/views/components/forkit.vue +++ b/src/client/app/common/views/components/forkit.vue @@ -1,5 +1,5 @@ <template> -<a class="a" href="https://github.com/syuilo/misskey" target="_blank" title="%i18n:common.tags.mk-forkit.open-github-link%" aria-label="%i18n:common.tags.mk-forkit.open-github-link%"> +<a class="a" href="https://github.com/syuilo/misskey" target="_blank" title="%i18n:@open-github-link%" aria-label="%i18n:@open-github-link%"> <svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="aria-hidden"> <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path> <path class="octo-arm" d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor"></path> 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 704f2016d..1c7b68a26 100644 --- a/src/client/app/common/views/components/messaging-room.form.vue +++ b/src/client/app/common/views/components/messaging-room.form.vue @@ -16,10 +16,10 @@ <button class="send" @click="send" :disabled="!canSend || sending" title="%i18n:common.send%"> <template v-if="!sending">%fa:paper-plane%</template><template v-if="sending">%fa:spinner .spin%</template> </button> - <button class="attach-from-local" @click="chooseFile" title="%i18n:common.tags.mk-messaging-form.attach-from-local%"> + <button class="attach-from-local" @click="chooseFile" title="%i18n:@attach-from-local%"> %fa:upload% </button> - <button class="attach-from-drive" @click="chooseFileFromDrive" title="%i18n:common.tags.mk-messaging-form.attach-from-drive%"> + <button class="attach-from-drive" @click="chooseFileFromDrive" title="%i18n:@attach-from-drive%"> %fa:R folder-open% </button> <input ref="file" type="file" @change="onChangeFile"/> diff --git a/src/client/app/common/views/components/messaging-room.message.vue b/src/client/app/common/views/components/messaging-room.message.vue index 60e5258b6..afd700e77 100644 --- a/src/client/app/common/views/components/messaging-room.message.vue +++ b/src/client/app/common/views/components/messaging-room.message.vue @@ -5,7 +5,7 @@ </router-link> <div class="content"> <div class="balloon" :data-no-text="message.text == null"> - <p class="read" v-if="isMe && message.isRead">%i18n:common.tags.mk-messaging-message.is-read%</p> + <p class="read" v-if="isMe && message.isRead">%i18n:@is-read%</p> <button class="delete-button" v-if="isMe" title="%i18n:common.delete%"> <img src="/assets/desktop/messaging/delete.png" alt="Delete"/> </button> @@ -19,7 +19,7 @@ </div> </div> <div class="content" v-if="message.isDeleted"> - <p class="is-deleted">%i18n:common.tags.mk-messaging-message.deleted%</p> + <p class="is-deleted">%i18n:@deleted%</p> </div> </div> <div></div> diff --git a/src/client/app/common/views/components/messaging-room.vue b/src/client/app/common/views/components/messaging-room.vue index e1b775c33..ca5416a21 100644 --- a/src/client/app/common/views/components/messaging-room.vue +++ b/src/client/app/common/views/components/messaging-room.vue @@ -5,10 +5,10 @@ > <div class="stream"> <p class="init" v-if="init">%fa:spinner .spin%%i18n:common.loading%</p> - <p class="empty" v-if="!init && messages.length == 0">%fa:info-circle%%i18n:common.tags.mk-messaging-room.empty%</p> - <p class="no-history" v-if="!init && messages.length > 0 && !existMoreMessages">%fa:flag%%i18n:common.tags.mk-messaging-room.no-history%</p> + <p class="empty" v-if="!init && messages.length == 0">%fa:info-circle%%i18n:@empty%</p> + <p class="no-history" v-if="!init && messages.length > 0 && !existMoreMessages">%fa:flag%%i18n:@no-history%</p> <button class="more" :class="{ fetching: fetchingMoreMessages }" v-if="existMoreMessages" @click="fetchMoreMessages" :disabled="fetchingMoreMessages"> - <template v-if="fetchingMoreMessages">%fa:spinner .pulse .fw%</template>{{ fetchingMoreMessages ? '%i18n:common.loading%' : '%i18n:common.tags.mk-messaging-room.more%' }} + <template v-if="fetchingMoreMessages">%fa:spinner .pulse .fw%</template>{{ fetchingMoreMessages ? '%i18n:common.loading%' : '%i18n:@more%' }} </button> <template v-for="(message, i) in _messages"> <x-message :message="message" :key="message.id"/> @@ -172,7 +172,7 @@ export default Vue.extend({ }); } else if (message.userId != (this as any).os.i.id) { // Notify - this.notify('%i18n:common.tags.mk-messaging-room.new-message%'); + this.notify('%i18n:@new-message%'); } }, diff --git a/src/client/app/common/views/components/messaging.vue b/src/client/app/common/views/components/messaging.vue index e6c32f80d..f74d9643e 100644 --- a/src/client/app/common/views/components/messaging.vue +++ b/src/client/app/common/views/components/messaging.vue @@ -3,7 +3,7 @@ <div class="search" v-if="!compact" :style="{ top: headerTop + 'px' }"> <div class="form"> <label for="search-input">%fa:search%</label> - <input v-model="q" type="search" @input="search" @keydown="onSearchKeydown" placeholder="%i18n:common.tags.mk-messaging.search-user%"/> + <input v-model="q" type="search" @input="search" @keydown="onSearchKeydown" placeholder="%i18n:@search-user%"/> </div> <div class="result"> <ol class="users" v-if="result.length > 0" ref="searchResult"> @@ -38,13 +38,13 @@ <mk-time :time="message.createdAt"/> </header> <div class="body"> - <p class="text"><span class="me" v-if="isMe(message)">%i18n:common.tags.mk-messaging.you%:</span>{{ message.text }}</p> + <p class="text"><span class="me" v-if="isMe(message)">%i18n:@you%:</span>{{ message.text }}</p> </div> </div> </a> </template> </div> - <p class="no-history" v-if="!fetching && messages.length == 0">%i18n:common.tags.mk-messaging.no-history%</p> + <p class="no-history" v-if="!fetching && messages.length == 0">%i18n:@no-history%</p> <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p> </div> </template> diff --git a/src/client/app/common/views/components/nav.vue b/src/client/app/common/views/components/nav.vue index 8ce75d352..229595792 100644 --- a/src/client/app/common/views/components/nav.vue +++ b/src/client/app/common/views/components/nav.vue @@ -1,18 +1,18 @@ <template> <span class="mk-nav"> - <a :href="aboutUrl">%i18n:common.tags.mk-nav-links.about%</a> + <a :href="aboutUrl">%i18n:@about%</a> <i>・</i> - <a :href="statsUrl">%i18n:common.tags.mk-nav-links.stats%</a> + <a :href="statsUrl">%i18n:@stats%</a> <i>・</i> - <a :href="statusUrl">%i18n:common.tags.mk-nav-links.status%</a> + <a :href="statusUrl">%i18n:@status%</a> <i>・</i> - <a href="http://zawazawa.jp/misskey/">%i18n:common.tags.mk-nav-links.wiki%</a> + <a href="http://zawazawa.jp/misskey/">%i18n:@wiki%</a> <i>・</i> - <a href="https://github.com/syuilo/misskey/blob/master/DONORS.md">%i18n:common.tags.mk-nav-links.donors%</a> + <a href="https://github.com/syuilo/misskey/blob/master/DONORS.md">%i18n:@donors%</a> <i>・</i> - <a href="https://github.com/syuilo/misskey">%i18n:common.tags.mk-nav-links.repository%</a> + <a href="https://github.com/syuilo/misskey">%i18n:@repository%</a> <i>・</i> - <a :href="devUrl">%i18n:common.tags.mk-nav-links.develop%</a> + <a :href="devUrl">%i18n:@develop%</a> <i>・</i> <a href="https://twitter.com/misskey_xyz" target="_blank">Follow us on %fa:B twitter%</a> </span> diff --git a/src/client/app/common/views/components/note-menu.vue b/src/client/app/common/views/components/note-menu.vue index d05374872..06fe0dfd0 100644 --- a/src/client/app/common/views/components/note-menu.vue +++ b/src/client/app/common/views/components/note-menu.vue @@ -2,7 +2,7 @@ <div class="mk-note-menu"> <div class="backdrop" ref="backdrop" @click="close"></div> <div class="popover" :class="{ compact }" ref="popover"> - <button v-if="note.userId == os.i.id" @click="pin">%i18n:common.tags.mk-note-menu.pin%</button> + <button v-if="note.userId == os.i.id" @click="pin">%i18n:@pin%</button> </div> </div> </template> diff --git a/src/client/app/common/views/components/poll-editor.vue b/src/client/app/common/views/components/poll-editor.vue index 47d901d7b..fa1897f43 100644 --- a/src/client/app/common/views/components/poll-editor.vue +++ b/src/client/app/common/views/components/poll-editor.vue @@ -1,18 +1,18 @@ <template> <div class="mk-poll-editor"> <p class="caution" v-if="choices.length < 2"> - %fa:exclamation-triangle%%i18n:common.tags.mk-poll-editor.no-only-one-choice% + %fa:exclamation-triangle%%i18n:@no-only-one-choice% </p> <ul ref="choices"> <li v-for="(choice, i) in choices"> - <input :value="choice" @input="onInput(i, $event)" :placeholder="'%i18n:common.tags.mk-poll-editor.choice-n%'.replace('{}', i + 1)"> - <button @click="remove(i)" title="%i18n:common.tags.mk-poll-editor.remove%"> + <input :value="choice" @input="onInput(i, $event)" :placeholder="'%i18n:@choice-n%'.replace('{}', i + 1)"> + <button @click="remove(i)" title="%i18n:@remove%"> %fa:times% </button> </li> </ul> - <button class="add" v-if="choices.length < 10" @click="add">%i18n:common.tags.mk-poll-editor.add%</button> - <button class="destroy" @click="destroy" title="%i18n:common.tags.mk-poll-editor.destroy%"> + <button class="add" v-if="choices.length < 10" @click="add">%i18n:@add%</button> + <button class="destroy" @click="destroy" title="%i18n:@destroy%"> %fa:times% </button> </div> diff --git a/src/client/app/common/views/components/poll.vue b/src/client/app/common/views/components/poll.vue index eb29aa883..fd0ebc465 100644 --- a/src/client/app/common/views/components/poll.vue +++ b/src/client/app/common/views/components/poll.vue @@ -1,20 +1,20 @@ <template> <div class="mk-poll" :data-is-voted="isVoted"> <ul> - <li v-for="choice in poll.choices" :key="choice.id" @click="vote(choice.id)" :class="{ voted: choice.voted }" :title="!isVoted ? '%i18n:common.tags.mk-poll.vote-to%'.replace('{}', choice.text) : ''"> + <li v-for="choice in poll.choices" :key="choice.id" @click="vote(choice.id)" :class="{ voted: choice.voted }" :title="!isVoted ? '%i18n:@vote-to%'.replace('{}', choice.text) : ''"> <div class="backdrop" :style="{ 'width': (showResult ? (choice.votes / total * 100) : 0) + '%' }"></div> <span> <template v-if="choice.isVoted">%fa:check%</template> <span>{{ choice.text }}</span> - <span class="votes" v-if="showResult">({{ '%i18n:common.tags.mk-poll.vote-count%'.replace('{}', choice.votes) }})</span> + <span class="votes" v-if="showResult">({{ '%i18n:@vote-count%'.replace('{}', choice.votes) }})</span> </span> </li> </ul> <p v-if="total > 0"> - <span>{{ '%i18n:common.tags.mk-poll.total-users%'.replace('{}', total) }}</span> + <span>{{ '%i18n:@total-users%'.replace('{}', total) }}</span> <span>・</span> - <a v-if="!isVoted" @click="toggleShowResult">{{ showResult ? '%i18n:common.tags.mk-poll.vote%' : '%i18n:common.tags.mk-poll.show-result%' }}</a> - <span v-if="isVoted">%i18n:common.tags.mk-poll.voted%</span> + <a v-if="!isVoted" @click="toggleShowResult">{{ showResult ? '%i18n:@vote%' : '%i18n:@show-result%' }}</a> + <span v-if="isVoted">%i18n:@voted%</span> </p> </div> </template> diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue index fa1998dca..631ed1313 100644 --- a/src/client/app/common/views/components/reaction-picker.vue +++ b/src/client/app/common/views/components/reaction-picker.vue @@ -22,7 +22,7 @@ import Vue from 'vue'; import * as anime from 'animejs'; -const placeholder = '%i18n:common.tags.mk-reaction-picker.choose-reaction%'; +const placeholder = '%i18n:@choose-reaction%'; export default Vue.extend({ props: ['note', 'source', 'compact', 'cb'], diff --git a/src/client/app/common/views/components/signin.vue b/src/client/app/common/views/components/signin.vue index da7472b8c..4b114eb75 100644 --- a/src/client/app/common/views/components/signin.vue +++ b/src/client/app/common/views/components/signin.vue @@ -1,15 +1,15 @@ <template> <form class="mk-signin" :class="{ signing }" @submit.prevent="onSubmit"> <label class="user-name"> - <input v-model="username" type="text" pattern="^[a-zA-Z0-9_]+$" placeholder="%i18n:common.tags.mk-signin.username%" autofocus required @change="onUsernameChange"/>%fa:at% + <input v-model="username" type="text" pattern="^[a-zA-Z0-9_]+$" placeholder="%i18n:@username%" autofocus required @change="onUsernameChange"/>%fa:at% </label> <label class="password"> - <input v-model="password" type="password" placeholder="%i18n:common.tags.mk-signin.password%" required/>%fa:lock% + <input v-model="password" type="password" placeholder="%i18n:@password%" required/>%fa:lock% </label> <label class="token" v-if="user && user.twoFactorEnabled"> - <input v-model="token" type="number" placeholder="%i18n:common.tags.mk-signin.token%" required/>%fa:lock% + <input v-model="token" type="number" placeholder="%i18n:@token%" required/>%fa:lock% </label> - <button type="submit" :disabled="signing">{{ signing ? '%i18n:common.tags.mk-signin.signing-in%' : '%i18n:common.tags.mk-signin.signin%' }}</button> + <button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</button> もしくは <a :href="`${apiUrl}/signin/twitter`">Twitterでログイン</a> </form> </template> diff --git a/src/client/app/common/views/components/signup.vue b/src/client/app/common/views/components/signup.vue index 40262b54d..b998e6f42 100644 --- a/src/client/app/common/views/components/signup.vue +++ b/src/client/app/common/views/components/signup.vue @@ -1,42 +1,42 @@ <template> <form class="mk-signup" @submit.prevent="onSubmit" autocomplete="off"> <label class="username"> - <p class="caption">%fa:at%%i18n:common.tags.mk-signup.username%</p> + <p class="caption">%fa:at%%i18n:@username%</p> <input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" placeholder="a~z、A~Z、0~9、-" autocomplete="off" required @input="onChangeUsername"/> <p class="profile-page-url-preview" v-if="shouldShowProfileUrl">{{ `${url}/@${username}` }}</p> - <p class="info" v-if="usernameState == 'wait'" style="color:#999">%fa:spinner .pulse .fw%%i18n:common.tags.mk-signup.checking%</p> - <p class="info" v-if="usernameState == 'ok'" style="color:#3CB7B5">%fa:check .fw%%i18n:common.tags.mk-signup.available%</p> - <p class="info" v-if="usernameState == 'unavailable'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:common.tags.mk-signup.unavailable%</p> - <p class="info" v-if="usernameState == 'error'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:common.tags.mk-signup.error%</p> - <p class="info" v-if="usernameState == 'invalid-format'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:common.tags.mk-signup.invalid-format%</p> - <p class="info" v-if="usernameState == 'min-range'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:common.tags.mk-signup.too-short%</p> - <p class="info" v-if="usernameState == 'max-range'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:common.tags.mk-signup.too-long%</p> + <p class="info" v-if="usernameState == 'wait'" style="color:#999">%fa:spinner .pulse .fw%%i18n:@checking%</p> + <p class="info" v-if="usernameState == 'ok'" style="color:#3CB7B5">%fa:check .fw%%i18n:@available%</p> + <p class="info" v-if="usernameState == 'unavailable'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:@unavailable%</p> + <p class="info" v-if="usernameState == 'error'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:@error%</p> + <p class="info" v-if="usernameState == 'invalid-format'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:@invalid-format%</p> + <p class="info" v-if="usernameState == 'min-range'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:@too-short%</p> + <p class="info" v-if="usernameState == 'max-range'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:@too-long%</p> </label> <label class="password"> - <p class="caption">%fa:lock%%i18n:common.tags.mk-signup.password%</p> - <input v-model="password" type="password" placeholder="%i18n:common.tags.mk-signup.password-placeholder%" autocomplete="off" required @input="onChangePassword"/> + <p class="caption">%fa:lock%%i18n:@password%</p> + <input v-model="password" type="password" placeholder="%i18n:@password-placeholder%" autocomplete="off" required @input="onChangePassword"/> <div class="meter" v-show="passwordStrength != ''" :data-strength="passwordStrength"> <div class="value" ref="passwordMetar"></div> </div> - <p class="info" v-if="passwordStrength == 'low'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:common.tags.mk-signup.weak-password%</p> - <p class="info" v-if="passwordStrength == 'medium'" style="color:#3CB7B5">%fa:check .fw%%i18n:common.tags.mk-signup.normal-password%</p> - <p class="info" v-if="passwordStrength == 'high'" style="color:#3CB7B5">%fa:check .fw%%i18n:common.tags.mk-signup.strong-password%</p> + <p class="info" v-if="passwordStrength == 'low'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:@weak-password%</p> + <p class="info" v-if="passwordStrength == 'medium'" style="color:#3CB7B5">%fa:check .fw%%i18n:@normal-password%</p> + <p class="info" v-if="passwordStrength == 'high'" style="color:#3CB7B5">%fa:check .fw%%i18n:@strong-password%</p> </label> <label class="retype-password"> - <p class="caption">%fa:lock%%i18n:common.tags.mk-signup.password%(%i18n:common.tags.mk-signup.retype%)</p> - <input v-model="retypedPassword" type="password" placeholder="%i18n:common.tags.mk-signup.retype-placeholder%" autocomplete="off" required @input="onChangePasswordRetype"/> - <p class="info" v-if="passwordRetypeState == 'match'" style="color:#3CB7B5">%fa:check .fw%%i18n:common.tags.mk-signup.password-matched%</p> - <p class="info" v-if="passwordRetypeState == 'not-match'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:common.tags.mk-signup.password-not-matched%</p> + <p class="caption">%fa:lock%%i18n:@password%(%i18n:@retype%)</p> + <input v-model="retypedPassword" type="password" placeholder="%i18n:@retype-placeholder%" autocomplete="off" required @input="onChangePasswordRetype"/> + <p class="info" v-if="passwordRetypeState == 'match'" style="color:#3CB7B5">%fa:check .fw%%i18n:@password-matched%</p> + <p class="info" v-if="passwordRetypeState == 'not-match'" style="color:#FF1161">%fa:exclamation-triangle .fw%%i18n:@password-not-matched%</p> </label> <label class="recaptcha"> - <p class="caption"><template v-if="recaptchaed">%fa:toggle-on%</template><template v-if="!recaptchaed">%fa:toggle-off%</template>%i18n:common.tags.mk-signup.recaptcha%</p> + <p class="caption"><template v-if="recaptchaed">%fa:toggle-on%</template><template v-if="!recaptchaed">%fa:toggle-off%</template>%i18n:@recaptcha%</p> <div class="g-recaptcha" data-callback="onRecaptchaed" data-expired-callback="onRecaptchaExpired" :data-sitekey="recaptchaSitekey"></div> </label> <label class="agree-tou"> <input name="agree-tou" type="checkbox" autocomplete="off" required/> <p><a :href="touUrl" target="_blank">利用規約</a>に同意する</p> </label> - <button type="submit">%i18n:common.tags.mk-signup.create%</button> + <button type="submit">%i18n:@create%</button> </form> </template> @@ -127,7 +127,7 @@ export default Vue.extend({ location.href = '/'; }); }).catch(() => { - alert('%i18n:common.tags.mk-signup.some-error%'); + alert('%i18n:@some-error%'); (window as any).grecaptcha.reset(); this.recaptchaed = false; diff --git a/src/client/app/common/views/components/special-message.vue b/src/client/app/common/views/components/special-message.vue index 2fd4d6515..deac757c5 100644 --- a/src/client/app/common/views/components/special-message.vue +++ b/src/client/app/common/views/components/special-message.vue @@ -1,7 +1,7 @@ <template> <div class="mk-special-message"> - <p v-if="m == 1 && d == 1">%i18n:common.tags.mk-special-message.new-year%</p> - <p v-if="m == 12 && d == 25">%i18n:common.tags.mk-special-message.christmas%</p> + <p v-if="m == 1 && d == 1">%i18n:@new-year%</p> + <p v-if="m == 12 && d == 25">%i18n:@christmas%</p> </div> </template> diff --git a/src/client/app/common/views/components/stream-indicator.vue b/src/client/app/common/views/components/stream-indicator.vue index 1f18fa76e..93758102d 100644 --- a/src/client/app/common/views/components/stream-indicator.vue +++ b/src/client/app/common/views/components/stream-indicator.vue @@ -2,15 +2,15 @@ <div class="mk-stream-indicator"> <p v-if=" stream.state == 'initializing' "> %fa:spinner .pulse% - <span>%i18n:common.tags.mk-stream-indicator.connecting%<mk-ellipsis/></span> + <span>%i18n:@connecting%<mk-ellipsis/></span> </p> <p v-if=" stream.state == 'reconnecting' "> %fa:spinner .pulse% - <span>%i18n:common.tags.mk-stream-indicator.reconnecting%<mk-ellipsis/></span> + <span>%i18n:@reconnecting%<mk-ellipsis/></span> </p> <p v-if=" stream.state == 'connected' "> %fa:check% - <span>%i18n:common.tags.mk-stream-indicator.connected%</span> + <span>%i18n:@connected%</span> </p> </div> </template> diff --git a/src/client/app/common/views/components/twitter-setting.vue b/src/client/app/common/views/components/twitter-setting.vue index 00669cd83..77788290f 100644 --- a/src/client/app/common/views/components/twitter-setting.vue +++ b/src/client/app/common/views/components/twitter-setting.vue @@ -1,11 +1,11 @@ <template> <div class="mk-twitter-setting"> - <p>%i18n:common.tags.mk-twitter-setting.description%<a :href="`${docsUrl}/link-to-twitter`" target="_blank">%i18n:common.tags.mk-twitter-setting.detail%</a></p> - <p class="account" v-if="os.i.twitter" :title="`Twitter ID: ${os.i.twitter.userId}`">%i18n:common.tags.mk-twitter-setting.connected-to%: <a :href="`https://twitter.com/${os.i.twitter.screenName}`" target="_blank">@{{ os.i.twitter.screenName }}</a></p> + <p>%i18n:@description%<a :href="`${docsUrl}/link-to-twitter`" target="_blank">%i18n:@detail%</a></p> + <p class="account" v-if="os.i.twitter" :title="`Twitter ID: ${os.i.twitter.userId}`">%i18n:@connected-to%: <a :href="`https://twitter.com/${os.i.twitter.screenName}`" target="_blank">@{{ os.i.twitter.screenName }}</a></p> <p> - <a :href="`${apiUrl}/connect/twitter`" target="_blank" @click.prevent="connect">{{ os.i.twitter ? '%i18n:common.tags.mk-twitter-setting.reconnect%' : '%i18n:common.tags.mk-twitter-setting.connect%' }}</a> + <a :href="`${apiUrl}/connect/twitter`" target="_blank" @click.prevent="connect">{{ os.i.twitter ? '%i18n:@reconnect%' : '%i18n:@connect%' }}</a> <span v-if="os.i.twitter"> or </span> - <a :href="`${apiUrl}/disconnect/twitter`" target="_blank" v-if="os.i.twitter" @click.prevent="disconnect">%i18n:common.tags.mk-twitter-setting.disconnect%</a> + <a :href="`${apiUrl}/disconnect/twitter`" target="_blank" v-if="os.i.twitter" @click.prevent="disconnect">%i18n:@disconnect%</a> </p> <p class="id" v-if="os.i.twitter">Twitter ID: {{ os.i.twitter.userId }}</p> </div> diff --git a/src/client/app/common/views/components/uploader.vue b/src/client/app/common/views/components/uploader.vue index ccad50dc3..a6caa80f3 100644 --- a/src/client/app/common/views/components/uploader.vue +++ b/src/client/app/common/views/components/uploader.vue @@ -5,7 +5,7 @@ <div class="img" :style="{ backgroundImage: `url(${ ctx.img })` }"></div> <p class="name">%fa:spinner .pulse%{{ ctx.name }}</p> <p class="status"> - <span class="initing" v-if="ctx.progress == undefined">%i18n:common.tags.mk-uploader.waiting%<mk-ellipsis/></span> + <span class="initing" v-if="ctx.progress == undefined">%i18n:@waiting%<mk-ellipsis/></span> <span class="kb" v-if="ctx.progress != undefined">{{ String(Math.floor(ctx.progress.value / 1024)).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,') }}<i>KB</i> / {{ String(Math.floor(ctx.progress.max / 1024)).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,') }}<i>KB</i></span> <span class="percentage" v-if="ctx.progress != undefined">{{ Math.floor((ctx.progress.value / ctx.progress.max) * 100) }}</span> </p> diff --git a/src/client/app/common/views/widgets/access-log.vue b/src/client/app/common/views/widgets/access-log.vue index f7bb17d83..637ba328c 100644 --- a/src/client/app/common/views/widgets/access-log.vue +++ b/src/client/app/common/views/widgets/access-log.vue @@ -1,7 +1,7 @@ <template> <div class="mkw-access-log"> <mk-widget-container :show-header="props.design == 0"> - <template slot="header">%fa:server%%i18n:desktop.tags.mk-access-log-home-widget.title%</template> + <template slot="header">%fa:server%%i18n:@title%</template> <div :class="$style.logs" ref="log"> <p v-for="req in requests"> diff --git a/src/client/app/common/views/widgets/broadcast.vue b/src/client/app/common/views/widgets/broadcast.vue index bf41a5fc6..6e11ec29e 100644 --- a/src/client/app/common/views/widgets/broadcast.vue +++ b/src/client/app/common/views/widgets/broadcast.vue @@ -13,13 +13,13 @@ <path class="wave d" d="M29.18,1.06c-0.479-0.502-1.273-0.522-1.775-0.044c-0.016,0.015-0.029,0.029-0.045,0.044c-0.5,0.52-0.5,1.36,0,1.88 c1.361,1.4,2.041,3.24,2.041,5.08s-0.68,3.66-2.041,5.08c-0.5,0.52-0.5,1.36,0,1.88c0.509,0.508,1.332,0.508,1.841,0 c1.86-1.92,2.8-4.44,2.8-6.96C31.99,5.424,30.98,2.931,29.18,1.06z"></path> </svg> </div> - <p class="fetching" v-if="fetching">%i18n:desktop.tags.mk-broadcast-home-widget.fetching%<mk-ellipsis/></p> - <h1 v-if="!fetching">{{ broadcasts.length == 0 ? '%i18n:desktop.tags.mk-broadcast-home-widget.no-broadcasts%' : broadcasts[i].title }}</h1> + <p class="fetching" v-if="fetching">%i18n:@fetching%<mk-ellipsis/></p> + <h1 v-if="!fetching">{{ broadcasts.length == 0 ? '%i18n:@no-broadcasts%' : broadcasts[i].title }}</h1> <p v-if="!fetching"> <span v-if="broadcasts.length != 0" v-html="broadcasts[i].text"></span> - <template v-if="broadcasts.length == 0">%i18n:desktop.tags.mk-broadcast-home-widget.have-a-nice-day%</template> + <template v-if="broadcasts.length == 0">%i18n:@have-a-nice-day%</template> </p> - <a v-if="broadcasts.length > 1" @click="next">%i18n:desktop.tags.mk-broadcast-home-widget.next% >></a> + <a v-if="broadcasts.length > 1" @click="next">%i18n:@next% >></a> </div> </template> diff --git a/src/client/app/common/views/widgets/donation.vue b/src/client/app/common/views/widgets/donation.vue index e218df06e..0b0145fa0 100644 --- a/src/client/app/common/views/widgets/donation.vue +++ b/src/client/app/common/views/widgets/donation.vue @@ -1,11 +1,11 @@ <template> <div class="mkw-donation" :data-mobile="isMobile"> <article> - <h1>%fa:heart%%i18n:desktop.tags.mk-donation-home-widget.title%</h1> + <h1>%fa:heart%%i18n:@title%</h1> <p> - {{ '%i18n:desktop.tags.mk-donation-home-widget.text%'.substr(0, '%i18n:desktop.tags.mk-donation-home-widget.text%'.indexOf('{')) }} + {{ '%i18n:@text%'.substr(0, '%i18n:@text%'.indexOf('{')) }} <a href="https://syuilo.com">@syuilo</a> - {{ '%i18n:desktop.tags.mk-donation-home-widget.text%'.substr('%i18n:desktop.tags.mk-donation-home-widget.text%'.indexOf('}') + 1) }} + {{ '%i18n:@text%'.substr('%i18n:@text%'.indexOf('}') + 1) }} </p> </article> </div> diff --git a/src/client/app/common/views/widgets/photo-stream.vue b/src/client/app/common/views/widgets/photo-stream.vue index baafd4066..c51d932bd 100644 --- a/src/client/app/common/views/widgets/photo-stream.vue +++ b/src/client/app/common/views/widgets/photo-stream.vue @@ -1,13 +1,13 @@ <template> <div class="mkw-photo-stream" :class="$style.root" :data-melt="props.design == 2"> <mk-widget-container :show-header="props.design == 0" :naked="props.design == 2"> - <template slot="header">%fa:camera%%i18n:desktop.tags.mk-photo-stream-home-widget.title%</template> + <template slot="header">%fa:camera%%i18n:@title%</template> <p :class="$style.fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p> <div :class="$style.stream" v-if="!fetching && images.length > 0"> <div v-for="image in images" :class="$style.img" :style="`background-image: url(${image.url}?thumbnail&size=256)`"></div> </div> - <p :class="$style.empty" v-if="!fetching && images.length == 0">%i18n:desktop.tags.mk-photo-stream-home-widget.no-photos%</p> + <p :class="$style.empty" v-if="!fetching && images.length == 0">%i18n:@no-photos%</p> </mk-widget-container> </div> </template> diff --git a/src/client/app/common/views/widgets/server.vue b/src/client/app/common/views/widgets/server.vue index 3d5248998..2fbc07adf 100644 --- a/src/client/app/common/views/widgets/server.vue +++ b/src/client/app/common/views/widgets/server.vue @@ -1,8 +1,8 @@ <template> <div class="mkw-server"> <mk-widget-container :show-header="props.design == 0" :naked="props.design == 2"> - <template slot="header">%fa:server%%i18n:desktop.tags.mk-server-home-widget.title%</template> - <button slot="func" @click="toggle" title="%i18n:desktop.tags.mk-server-home-widget.toggle%">%fa:sort%</button> + <template slot="header">%fa:server%%i18n:@title%</template> + <button slot="func" @click="toggle" title="%i18n:@toggle%">%fa:sort%</button> <p :class="$style.fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p> <template v-if="!fetching"> diff --git a/src/client/app/desktop/views/components/activity.vue b/src/client/app/desktop/views/components/activity.vue index 480b956ec..ea33bf9ff 100644 --- a/src/client/app/desktop/views/components/activity.vue +++ b/src/client/app/desktop/views/components/activity.vue @@ -1,8 +1,8 @@ <template> <div class="mk-activity" :data-melt="design == 2"> <template v-if="design == 0"> - <p class="title">%fa:chart-bar%%i18n:desktop.tags.mk-activity-widget.title%</p> - <button @click="toggle" title="%i18n:desktop.tags.mk-activity-widget.toggle%">%fa:sort%</button> + <p class="title">%fa:chart-bar%%i18n:@title%</p> + <button @click="toggle" title="%i18n:@toggle%">%fa:sort%</button> </template> <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p> <template v-else> diff --git a/src/client/app/desktop/views/components/calendar.vue b/src/client/app/desktop/views/components/calendar.vue index 71aab2e8a..7f0052af5 100644 --- a/src/client/app/desktop/views/components/calendar.vue +++ b/src/client/app/desktop/views/components/calendar.vue @@ -1,9 +1,9 @@ <template> <div class="mk-calendar" :data-melt="design == 4 || design == 5"> <template v-if="design == 0 || design == 1"> - <button @click="prev" title="%i18n:desktop.tags.mk-calendar-widget.prev%">%fa:chevron-circle-left%</button> - <p class="title">{{ '%i18n:desktop.tags.mk-calendar-widget.title%'.replace('{1}', year).replace('{2}', month) }}</p> - <button @click="next" title="%i18n:desktop.tags.mk-calendar-widget.next%">%fa:chevron-circle-right%</button> + <button @click="prev" title="%i18n:@prev%">%fa:chevron-circle-left%</button> + <p class="title">{{ '%i18n:@title%'.replace('{1}', year).replace('{2}', month) }}</p> + <button @click="next" title="%i18n:@next%">%fa:chevron-circle-right%</button> </template> <div class="calendar"> @@ -21,7 +21,7 @@ :data-is-out-of-range="isOutOfRange(i + 1)" :data-is-donichi="isDonichi(i + 1)" @click="go(i + 1)" - :title="isOutOfRange(i + 1) ? null : '%i18n:desktop.tags.mk-calendar-widget.go%'" + :title="isOutOfRange(i + 1) ? null : '%i18n:@go%'" > <div>{{ i + 1 }}</div> </div> diff --git a/src/client/app/desktop/views/components/drive-window.vue b/src/client/app/desktop/views/components/drive-window.vue index 3a072f479..1f45b6432 100644 --- a/src/client/app/desktop/views/components/drive-window.vue +++ b/src/client/app/desktop/views/components/drive-window.vue @@ -1,8 +1,8 @@ <template> <mk-window ref="window" @closed="$destroy" width="800px" height="500px" :popout-url="popout"> <template slot="header"> - <p v-if="usage" :class="$style.info"><b>{{ usage.toFixed(1) }}%</b> %i18n:desktop.tags.mk-drive-browser-window.used%</p> - <span :class="$style.title">%fa:cloud%%i18n:desktop.tags.mk-drive-browser-window.drive%</span> + <p v-if="usage" :class="$style.info"><b>{{ usage.toFixed(1) }}%</b> %i18n:@used%</p> + <span :class="$style.title">%fa:cloud%%i18n:@drive%</span> </template> <mk-drive :class="$style.browser" multiple :init-folder="folder" ref="browser"/> </mk-window> diff --git a/src/client/app/desktop/views/components/drive.file.vue b/src/client/app/desktop/views/components/drive.file.vue index 85f8361c9..5ad81322b 100644 --- a/src/client/app/desktop/views/components/drive.file.vue +++ b/src/client/app/desktop/views/components/drive.file.vue @@ -10,10 +10,10 @@ :title="title" > <div class="label" v-if="os.i.avatarId == file.id"><img src="/assets/label.svg"/> - <p>%i18n:desktop.tags.mk-drive-browser-file.avatar%</p> + <p>%i18n:@avatar%</p> </div> <div class="label" v-if="os.i.bannerId == file.id"><img src="/assets/label.svg"/> - <p>%i18n:desktop.tags.mk-drive-browser-file.banner%</p> + <p>%i18n:@banner%</p> </div> <div class="thumbnail" ref="thumbnail" :style="`background-color: ${ background }`"> <img :src="`${file.url}?thumbnail&size=128`" alt="" @load="onThumbnailLoaded"/> @@ -64,18 +64,18 @@ export default Vue.extend({ this.isContextmenuShowing = true; contextmenu(e, [{ type: 'item', - text: '%i18n:desktop.tags.mk-drive-browser-file-contextmenu.rename%', + text: '%i18n:@contextmenu.rename%', icon: '%fa:i-cursor%', onClick: this.rename }, { type: 'item', - text: '%i18n:desktop.tags.mk-drive-browser-file-contextmenu.copy-url%', + text: '%i18n:@contextmenu.copy-url%', icon: '%fa:link%', onClick: this.copyUrl }, { type: 'link', href: `${this.file.url}?download`, - text: '%i18n:desktop.tags.mk-drive-browser-file-contextmenu.download%', + text: '%i18n:@contextmenu.download%', icon: '%fa:download%', }, { type: 'divider', @@ -88,22 +88,22 @@ export default Vue.extend({ type: 'divider', }, { type: 'nest', - text: '%i18n:desktop.tags.mk-drive-browser-file-contextmenu.else-files%', + text: '%i18n:@contextmenu.else-files%', menu: [{ type: 'item', - text: '%i18n:desktop.tags.mk-drive-browser-file-contextmenu.set-as-avatar%', + text: '%i18n:@contextmenu.set-as-avatar%', onClick: this.setAsAvatar }, { type: 'item', - text: '%i18n:desktop.tags.mk-drive-browser-file-contextmenu.set-as-banner%', + text: '%i18n:@contextmenu.set-as-banner%', onClick: this.setAsBanner }] }, { type: 'nest', - text: '%i18n:desktop.tags.mk-drive-browser-file-contextmenu.open-in-app%', + text: '%i18n:@contextmenu.open-in-app%', menu: [{ type: 'item', - text: '%i18n:desktop.tags.mk-drive-browser-file-contextmenu.add-app%...', + text: '%i18n:@contextmenu.add-app%...', onClick: this.addApp }] }], { @@ -141,8 +141,8 @@ export default Vue.extend({ rename() { (this as any).apis.input({ - title: '%i18n:desktop.tags.mk-drive-browser-file-contextmenu.rename-file%', - placeholder: '%i18n:desktop.tags.mk-drive-browser-file-contextmenu.input-new-file-name%', + title: '%i18n:@contextmenu.rename-file%', + placeholder: '%i18n:@contextmenu.input-new-file-name%', default: this.file.name, allowEmpty: false }).then(name => { @@ -156,8 +156,8 @@ export default Vue.extend({ copyUrl() { copyToClipboard(this.file.url); (this as any).apis.dialog({ - title: '%fa:check%%i18n:desktop.tags.mk-drive-browser-file-contextmenu.copied%', - text: '%i18n:desktop.tags.mk-drive-browser-file-contextmenu.copied-url-to-clipboard%', + title: '%fa:check%%i18n:@contextmenu.copied%', + text: '%i18n:@contextmenu.copied-url-to-clipboard%', actions: [{ text: '%i18n:common.ok%' }] diff --git a/src/client/app/desktop/views/components/drive.folder.vue b/src/client/app/desktop/views/components/drive.folder.vue index a926bf47b..16f474f4e 100644 --- a/src/client/app/desktop/views/components/drive.folder.vue +++ b/src/client/app/desktop/views/components/drive.folder.vue @@ -54,19 +54,19 @@ export default Vue.extend({ this.isContextmenuShowing = true; contextmenu(e, [{ type: 'item', - text: '%i18n:desktop.tags.mk-drive-browser-folder-contextmenu.move-to-this-folder%', + text: '%i18n:@contextmenu.move-to-this-folder%', icon: '%fa:arrow-right%', onClick: this.go }, { type: 'item', - text: '%i18n:desktop.tags.mk-drive-browser-folder-contextmenu.show-in-new-window%', + text: '%i18n:@contextmenu.show-in-new-window%', icon: '%fa:R window-restore%', onClick: this.newWindow }, { type: 'divider', }, { type: 'item', - text: '%i18n:desktop.tags.mk-drive-browser-folder-contextmenu.rename%', + text: '%i18n:@contextmenu.rename%', icon: '%fa:i-cursor%', onClick: this.rename }, { @@ -159,15 +159,15 @@ export default Vue.extend({ switch (err) { case 'detected-circular-definition': (this as any).apis.dialog({ - title: '%fa:exclamation-triangle%%i18n:desktop.tags.mk-drive-browser-folder.unable-to-process%', - text: '%i18n:desktop.tags.mk-drive-browser-folder.circular-reference-detected%', + title: '%fa:exclamation-triangle%%i18n:@unable-to-process%', + text: '%i18n:@circular-reference-detected%', actions: [{ text: '%i18n:common.ok%' }] }); break; default: - alert('%i18n:desktop.tags.mk-drive-browser-folder.unhandled-error% ' + err); + alert('%i18n:@unhandled-error% ' + err); } }); } @@ -199,8 +199,8 @@ export default Vue.extend({ rename() { (this as any).apis.input({ - title: '%i18n:desktop.tags.mk-drive-browser-folder-contextmenu.rename-folder%', - placeholder: '%i18n:desktop.tags.mk-drive-browser-folder-contextmenu.input-new-folder-name%', + title: '%i18n:@contextmenu.rename-folder%', + placeholder: '%i18n:@contextmenu.input-new-folder-name%', default: this.folder.name }).then(name => { (this as any).api('drive/folders/update', { diff --git a/src/client/app/desktop/views/components/drive.nav-folder.vue b/src/client/app/desktop/views/components/drive.nav-folder.vue index d885a72f7..e910cdbae 100644 --- a/src/client/app/desktop/views/components/drive.nav-folder.vue +++ b/src/client/app/desktop/views/components/drive.nav-folder.vue @@ -8,7 +8,7 @@ @drop.stop="onDrop" > <template v-if="folder == null">%fa:cloud%</template> - <span>{{ folder == null ? '%i18n:desktop.tags.mk-drive-browser-nav-folder.drive%' : folder.name }}</span> + <span>{{ folder == null ? '%i18n:@drive%' : folder.name }}</span> </div> </template> diff --git a/src/client/app/desktop/views/components/drive.vue b/src/client/app/desktop/views/components/drive.vue index c766dfec1..abdf1338b 100644 --- a/src/client/app/desktop/views/components/drive.vue +++ b/src/client/app/desktop/views/components/drive.vue @@ -10,7 +10,7 @@ <span class="separator" v-if="folder != null">%fa:angle-right%</span> <span class="folder current" v-if="folder != null">{{ folder.name }}</span> </div> - <input class="search" type="search" placeholder=" %i18n:desktop.tags.mk-drive-browser.search%"/> + <input class="search" type="search" placeholder=" %i18n:@search%"/> </nav> <div class="main" :class="{ uploading: uploadings.length > 0, fetching }" ref="main" @@ -27,18 +27,18 @@ <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 --> <div class="padding" v-for="n in 16"></div> - <button v-if="moreFolders">%i18n:desktop.tags.mk-drive-browser.load-more%</button> + <button v-if="moreFolders">%i18n:@load-more%</button> </div> <div class="files" ref="filesContainer" v-if="files.length > 0"> <x-file v-for="file in files" :key="file.id" class="file" :file="file"/> <!-- SEE: https://stackoverflow.com/questions/18744164/flex-box-align-last-row-to-grid --> <div class="padding" v-for="n in 16"></div> - <button v-if="moreFiles" @click="fetchMoreFiles">%i18n:desktop.tags.mk-drive-browser.load-more%</button> + <button v-if="moreFiles" @click="fetchMoreFiles">%i18n:@load-more%</button> </div> <div class="empty" v-if="files.length == 0 && folders.length == 0 && !fetching"> - <p v-if="draghover">%i18n:desktop.tags.mk-drive-browser.empty-draghover%</p> - <p v-if="!draghover && folder == null"><strong>%i18n:desktop.tags.mk-drive-browser.empty-drive%</strong><br/>%i18n:desktop.tags.mk-drive-browser.empty-drive-description%</p> - <p v-if="!draghover && folder != null">%i18n:desktop.tags.mk-drive-browser.empty-folder%</p> + <p v-if="draghover">%i18n:@empty-draghover%</p> + <p v-if="!draghover && folder == null"><strong>%i18n:@empty-drive%</strong><br/>%i18n:@empty-drive-description%</p> + <p v-if="!draghover && folder != null">%i18n:@empty-folder%</p> </div> </div> <div class="fetching" v-if="fetching"> @@ -138,17 +138,17 @@ export default Vue.extend({ onContextmenu(e) { contextmenu(e, [{ type: 'item', - text: '%i18n:desktop.tags.mk-drive-browser-base-contextmenu.create-folder%', + text: '%i18n:@contextmenu.create-folder%', icon: '%fa:R folder%', onClick: this.createFolder }, { type: 'item', - text: '%i18n:desktop.tags.mk-drive-browser-base-contextmenu.upload%', + text: '%i18n:@contextmenu.upload%', icon: '%fa:upload%', onClick: this.selectLocalFile }, { type: 'item', - text: '%i18n:desktop.tags.mk-drive-browser-base-contextmenu.url-upload%', + text: '%i18n:@contextmenu.url-upload%', icon: '%fa:cloud-upload-alt%', onClick: this.urlUpload }]); @@ -306,15 +306,15 @@ export default Vue.extend({ switch (err) { case 'detected-circular-definition': (this as any).apis.dialog({ - title: '%fa:exclamation-triangle%%i18n:desktop.tags.mk-drive-browser.unable-to-process%', - text: '%i18n:desktop.tags.mk-drive-browser.circular-reference-detected%', + title: '%fa:exclamation-triangle%%i18n:@unable-to-process%', + text: '%i18n:@circular-reference-detected%', actions: [{ text: '%i18n:common.ok%' }] }); break; default: - alert('%i18n:desktop.tags.mk-drive-browser.unhandled-error% ' + err); + alert('%i18n:@unhandled-error% ' + err); } }); } @@ -327,8 +327,8 @@ export default Vue.extend({ urlUpload() { (this as any).apis.input({ - title: '%i18n:desktop.tags.mk-drive-browser.url-upload%', - placeholder: '%i18n:desktop.tags.mk-drive-browser.url-of-file%' + title: '%i18n:@url-upload%', + placeholder: '%i18n:@url-of-file%' }).then(url => { (this as any).api('drive/files/upload_from_url', { url: url, @@ -336,8 +336,8 @@ export default Vue.extend({ }); (this as any).apis.dialog({ - title: '%fa:check%%i18n:desktop.tags.mk-drive-browser.url-upload-requested%', - text: '%i18n:desktop.tags.mk-drive-browser.may-take-time%', + title: '%fa:check%%i18n:@url-upload-requested%', + text: '%i18n:@may-take-time%', actions: [{ text: '%i18n:common.ok%' }] @@ -347,8 +347,8 @@ export default Vue.extend({ createFolder() { (this as any).apis.input({ - title: '%i18n:desktop.tags.mk-drive-browser.create-folder%', - placeholder: '%i18n:desktop.tags.mk-drive-browser.folder-name%' + title: '%i18n:@create-folder%', + placeholder: '%i18n:@folder-name%' }).then(name => { (this as any).api('drive/folders/create', { name: name, diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue index 8561643c9..90f9e98a5 100644 --- a/src/client/app/desktop/views/components/notes.note.vue +++ b/src/client/app/desktop/views/components/notes.note.vue @@ -9,9 +9,9 @@ <img class="avatar" :src="`${note.user.avatarUrl}?thumbnail&size=32`" alt="avatar"/> </router-link> %fa:retweet% - <span>{{ '%i18n:desktop.tags.mk-timeline-note.reposted-by%'.substr(0, '%i18n:desktop.tags.mk-timeline-note.reposted-by%'.indexOf('{')) }}</span> + <span>{{ '%i18n:@reposted-by%'.substr(0, '%i18n:@reposted-by%'.indexOf('{')) }}</span> <a class="name" :href="note.user | userPage" v-user-preview="note.userId">{{ note.user | userName }}</a> - <span>{{ '%i18n:desktop.tags.mk-timeline-note.reposted-by%'.substr('%i18n:desktop.tags.mk-timeline-note.reposted-by%'.indexOf('}') + 1) }}</span> + <span>{{ '%i18n:@reposted-by%'.substr('%i18n:@reposted-by%'.indexOf('}') + 1) }}</span> </p> <mk-time :time="note.createdAt"/> </div> @@ -57,19 +57,19 @@ </div> <footer> <mk-reactions-viewer :note="p" ref="reactionsViewer"/> - <button @click="reply" title="%i18n:desktop.tags.mk-timeline-note.reply%"> + <button @click="reply" title="%i18n:@reply%"> %fa:reply%<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p> </button> - <button @click="renote" title="%i18n:desktop.tags.mk-timeline-note.renote%"> + <button @click="renote" title="%i18n:@renote%"> %fa:retweet%<p class="count" v-if="p.renoteCount > 0">{{ p.renoteCount }}</p> </button> - <button :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:desktop.tags.mk-timeline-note.add-reaction%"> + <button :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:@add-reaction%"> %fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p> </button> <button @click="menu" ref="menuButton"> %fa:ellipsis-h% </button> - <button title="%i18n:desktop.tags.mk-timeline-note.detail"> + <button title="%i18n:@detail"> <template v-if="!isDetailOpened">%fa:caret-down%</template> <template v-if="isDetailOpened">%fa:caret-up%</template> </button> diff --git a/src/client/app/desktop/views/components/notifications.vue b/src/client/app/desktop/views/components/notifications.vue index 598c2ad2f..9b1a66dde 100644 --- a/src/client/app/desktop/views/components/notifications.vue +++ b/src/client/app/desktop/views/components/notifications.vue @@ -93,7 +93,7 @@ </template> </div> <button class="more" :class="{ fetching: fetchingMoreNotifications }" v-if="moreNotifications" @click="fetchMoreNotifications" :disabled="fetchingMoreNotifications"> - <template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:desktop.tags.mk-notifications.more%' }} + <template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }} </button> <p class="empty" v-if="notifications.length == 0 && !fetching">ありません!</p> <p class="loading" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p> diff --git a/src/client/app/desktop/views/components/post-form-window.vue b/src/client/app/desktop/views/components/post-form-window.vue index c890592a5..18bb39f9b 100644 --- a/src/client/app/desktop/views/components/post-form-window.vue +++ b/src/client/app/desktop/views/components/post-form-window.vue @@ -2,10 +2,10 @@ <mk-window ref="window" is-modal @closed="$destroy"> <span slot="header"> <span :class="$style.icon" v-if="geo">%fa:map-marker-alt%</span> - <span v-if="!reply">%i18n:desktop.tags.mk-post-form-window.note%</span> - <span v-if="reply">%i18n:desktop.tags.mk-post-form-window.reply%</span> - <span :class="$style.count" v-if="media.length != 0">{{ '%i18n:desktop.tags.mk-post-form-window.attaches%'.replace('{}', media.length) }}</span> - <span :class="$style.count" v-if="uploadings.length != 0">{{ '%i18n:desktop.tags.mk-post-form-window.uploading-media%'.replace('{}', uploadings.length) }}<mk-ellipsis/></span> + <span v-if="!reply">%i18n:@note%</span> + <span v-if="reply">%i18n:@reply%</span> + <span :class="$style.count" v-if="media.length != 0">{{ '%i18n:@attaches%'.replace('{}', media.length) }}</span> + <span :class="$style.count" v-if="uploadings.length != 0">{{ '%i18n:@uploading-media%'.replace('{}', uploadings.length) }}<mk-ellipsis/></span> </span> <mk-note-preview v-if="reply" :class="$style.notePreview" :note="reply"/> diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue index 8e3ec24bc..6071bbe31 100644 --- a/src/client/app/desktop/views/components/post-form.vue +++ b/src/client/app/desktop/views/components/post-form.vue @@ -15,7 +15,7 @@ <x-draggable :list="files" :options="{ animation: 150 }"> <div v-for="file in files" :key="file.id"> <div class="img" :style="{ backgroundImage: `url(${file.url}?thumbnail&size=64)` }" :title="file.name"></div> - <img class="remove" @click="detachMedia(file.id)" src="/assets/desktop/remove.png" title="%i18n:desktop.tags.mk-post-form.attach-cancel%" alt=""/> + <img class="remove" @click="detachMedia(file.id)" src="/assets/desktop/remove.png" title="%i18n:@attach-cancel%" alt=""/> </div> </x-draggable> <p class="remain">{{ 4 - files.length }}/4</p> @@ -23,14 +23,14 @@ <mk-poll-editor v-if="poll" ref="poll" @destroyed="poll = false" @updated="saveDraft()"/> </div> <mk-uploader ref="uploader" @uploaded="attachMedia" @change="onChangeUploadings"/> - <button class="upload" title="%i18n:desktop.tags.mk-post-form.attach-media-from-local%" @click="chooseFile">%fa:upload%</button> - <button class="drive" title="%i18n:desktop.tags.mk-post-form.attach-media-from-drive%" @click="chooseFileFromDrive">%fa:cloud%</button> - <button class="kao" title="%i18n:desktop.tags.mk-post-form.insert-a-kao%" @click="kao">%fa:R smile%</button> - <button class="poll" title="%i18n:desktop.tags.mk-post-form.create-poll%" @click="poll = true">%fa:chart-pie%</button> + <button class="upload" title="%i18n:@attach-media-from-local%" @click="chooseFile">%fa:upload%</button> + <button class="drive" title="%i18n:@attach-media-from-drive%" @click="chooseFileFromDrive">%fa:cloud%</button> + <button class="kao" title="%i18n:@insert-a-kao%" @click="kao">%fa:R smile%</button> + <button class="poll" title="%i18n:@create-poll%" @click="poll = true">%fa:chart-pie%</button> <button class="geo" title="位置情報を添付する" @click="geo ? removeGeo() : setGeo()">%fa:map-marker-alt%</button> - <p class="text-count" :class="{ over: text.length > 1000 }">{{ '%i18n:desktop.tags.mk-post-form.text-remain%'.replace('{}', 1000 - text.length) }}</p> + <p class="text-count" :class="{ over: text.length > 1000 }">{{ '%i18n:@text-remain%'.replace('{}', 1000 - text.length) }}</p> <button :class="{ posting }" class="submit" :disabled="!canPost" @click="post"> - {{ posting ? '%i18n:desktop.tags.mk-post-form.posting%' : submitText }}<mk-ellipsis v-if="posting"/> + {{ posting ? '%i18n:@posting%' : submitText }}<mk-ellipsis v-if="posting"/> </button> <input ref="file" type="file" accept="image/*" multiple="multiple" tabindex="-1" @change="onChangeFile"/> <div class="dropzone" v-if="draghover"></div> @@ -69,17 +69,17 @@ export default Vue.extend({ }, placeholder(): string { return this.renote - ? '%i18n:desktop.tags.mk-post-form.quote-placeholder%' + ? '%i18n:@quote-placeholder%' : this.reply - ? '%i18n:desktop.tags.mk-post-form.reply-placeholder%' - : '%i18n:desktop.tags.mk-post-form.note-placeholder%'; + ? '%i18n:@reply-placeholder%' + : '%i18n:@note-placeholder%'; }, submitText(): string { return this.renote - ? '%i18n:desktop.tags.mk-post-form.renote%' + ? '%i18n:@renote%' : this.reply - ? '%i18n:desktop.tags.mk-post-form.reply%' - : '%i18n:desktop.tags.mk-post-form.note%'; + ? '%i18n:@reply%' + : '%i18n:@note%'; }, canPost(): boolean { return !this.posting && (this.text.length != 0 || this.files.length != 0 || this.poll || this.renote); @@ -236,16 +236,16 @@ export default Vue.extend({ this.deleteDraft(); this.$emit('posted'); (this as any).apis.notify(this.renote - ? '%i18n:desktop.tags.mk-post-form.reposted%' + ? '%i18n:@reposted%' : this.reply - ? '%i18n:desktop.tags.mk-post-form.replied%' - : '%i18n:desktop.tags.mk-post-form.posted%'); + ? '%i18n:@replied%' + : '%i18n:@posted%'); }).catch(err => { (this as any).apis.notify(this.renote - ? '%i18n:desktop.tags.mk-post-form.renote-failed%' + ? '%i18n:@renote-failed%' : this.reply - ? '%i18n:desktop.tags.mk-post-form.reply-failed%' - : '%i18n:desktop.tags.mk-post-form.note-failed%'); + ? '%i18n:@reply-failed%' + : '%i18n:@note-failed%'); }).then(() => { this.posting = false; }); diff --git a/src/client/app/desktop/views/components/renote-form-window.vue b/src/client/app/desktop/views/components/renote-form-window.vue index 09176b5ba..df9d2f7fc 100644 --- a/src/client/app/desktop/views/components/renote-form-window.vue +++ b/src/client/app/desktop/views/components/renote-form-window.vue @@ -1,6 +1,6 @@ <template> <mk-window ref="window" is-modal @closed="$destroy"> - <span slot="header" :class="$style.header">%fa:retweet%%i18n:desktop.tags.mk-renote-form-window.title%</span> + <span slot="header" :class="$style.header">%fa:retweet%%i18n:@title%</span> <mk-renote-form ref="form" :note="note" @posted="onPosted" @canceled="onCanceled"/> </mk-window> </template> diff --git a/src/client/app/desktop/views/components/renote-form.vue b/src/client/app/desktop/views/components/renote-form.vue index c6b907415..1f947a71d 100644 --- a/src/client/app/desktop/views/components/renote-form.vue +++ b/src/client/app/desktop/views/components/renote-form.vue @@ -3,9 +3,9 @@ <mk-note-preview :note="note"/> <template v-if="!quote"> <footer> - <a class="quote" v-if="!quote" @click="onQuote">%i18n:desktop.tags.mk-renote-form.quote%</a> - <button class="cancel" @click="cancel">%i18n:desktop.tags.mk-renote-form.cancel%</button> - <button class="ok" @click="ok" :disabled="wait">{{ wait ? '%i18n:desktop.tags.mk-renote-form.reposting%' : '%i18n:desktop.tags.mk-renote-form.renote%' }}</button> + <a class="quote" v-if="!quote" @click="onQuote">%i18n:@quote%</a> + <button class="cancel" @click="cancel">%i18n:@cancel%</button> + <button class="ok" @click="ok" :disabled="wait">{{ wait ? '%i18n:@reposting%' : '%i18n:@renote%' }}</button> </footer> </template> <template v-if="quote"> @@ -32,9 +32,9 @@ export default Vue.extend({ renoteId: this.note.id }).then(data => { this.$emit('posted'); - (this as any).apis.notify('%i18n:desktop.tags.mk-renote-form.success%'); + (this as any).apis.notify('%i18n:@success%'); }).catch(err => { - (this as any).apis.notify('%i18n:desktop.tags.mk-renote-form.failure%'); + (this as any).apis.notify('%i18n:@failure%'); }).then(() => { this.wait = false; }); diff --git a/src/client/app/desktop/views/components/repost-form-window.vue b/src/client/app/desktop/views/components/repost-form-window.vue index 09176b5ba..df9d2f7fc 100644 --- a/src/client/app/desktop/views/components/repost-form-window.vue +++ b/src/client/app/desktop/views/components/repost-form-window.vue @@ -1,6 +1,6 @@ <template> <mk-window ref="window" is-modal @closed="$destroy"> - <span slot="header" :class="$style.header">%fa:retweet%%i18n:desktop.tags.mk-renote-form-window.title%</span> + <span slot="header" :class="$style.header">%fa:retweet%%i18n:@title%</span> <mk-renote-form ref="form" :note="note" @posted="onPosted" @canceled="onCanceled"/> </mk-window> </template> diff --git a/src/client/app/desktop/views/components/repost-form.vue b/src/client/app/desktop/views/components/repost-form.vue index c6b907415..1f947a71d 100644 --- a/src/client/app/desktop/views/components/repost-form.vue +++ b/src/client/app/desktop/views/components/repost-form.vue @@ -3,9 +3,9 @@ <mk-note-preview :note="note"/> <template v-if="!quote"> <footer> - <a class="quote" v-if="!quote" @click="onQuote">%i18n:desktop.tags.mk-renote-form.quote%</a> - <button class="cancel" @click="cancel">%i18n:desktop.tags.mk-renote-form.cancel%</button> - <button class="ok" @click="ok" :disabled="wait">{{ wait ? '%i18n:desktop.tags.mk-renote-form.reposting%' : '%i18n:desktop.tags.mk-renote-form.renote%' }}</button> + <a class="quote" v-if="!quote" @click="onQuote">%i18n:@quote%</a> + <button class="cancel" @click="cancel">%i18n:@cancel%</button> + <button class="ok" @click="ok" :disabled="wait">{{ wait ? '%i18n:@reposting%' : '%i18n:@renote%' }}</button> </footer> </template> <template v-if="quote"> @@ -32,9 +32,9 @@ export default Vue.extend({ renoteId: this.note.id }).then(data => { this.$emit('posted'); - (this as any).apis.notify('%i18n:desktop.tags.mk-renote-form.success%'); + (this as any).apis.notify('%i18n:@success%'); }).catch(err => { - (this as any).apis.notify('%i18n:desktop.tags.mk-renote-form.failure%'); + (this as any).apis.notify('%i18n:@failure%'); }).then(() => { this.wait = false; }); diff --git a/src/client/app/desktop/views/components/settings.2fa.vue b/src/client/app/desktop/views/components/settings.2fa.vue index fb2dc30f2..0809dd798 100644 --- a/src/client/app/desktop/views/components/settings.2fa.vue +++ b/src/client/app/desktop/views/components/settings.2fa.vue @@ -1,22 +1,22 @@ <template> <div class="2fa"> - <p>%i18n:desktop.tags.mk-2fa-setting.intro%<a href="%i18n:desktop.tags.mk-2fa-setting.url%" target="_blank">%i18n:desktop.tags.mk-2fa-setting.detail%</a></p> - <div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:desktop.tags.mk-2fa-setting.caution%</p></div> - <p v-if="!data && !os.i.twoFactorEnabled"><button @click="register" class="ui primary">%i18n:desktop.tags.mk-2fa-setting.register%</button></p> + <p>%i18n:@intro%<a href="%i18n:@url%" target="_blank">%i18n:@detail%</a></p> + <div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div> + <p v-if="!data && !os.i.twoFactorEnabled"><button @click="register" class="ui primary">%i18n:@register%</button></p> <template v-if="os.i.twoFactorEnabled"> - <p>%i18n:desktop.tags.mk-2fa-setting.already-registered%</p> - <button @click="unregister" class="ui">%i18n:desktop.tags.mk-2fa-setting.unregister%</button> + <p>%i18n:@already-registered%</p> + <button @click="unregister" class="ui">%i18n:@unregister%</button> </template> <div v-if="data"> <ol> - <li>%i18n:desktop.tags.mk-2fa-setting.authenticator% <a href="https://support.google.com/accounts/answer/1066447" target="_blank">%i18n:desktop.tags.mk-2fa-setting.howtoinstall%</a></li> - <li>%i18n:desktop.tags.mk-2fa-setting.scan%<br><img :src="data.qr"></li> - <li>%i18n:desktop.tags.mk-2fa-setting.done%<br> + <li>%i18n:@authenticator% <a href="https://support.google.com/accounts/answer/1066447" target="_blank">%i18n:@howtoinstall%</a></li> + <li>%i18n:@scan%<br><img :src="data.qr"></li> + <li>%i18n:@done%<br> <input type="number" v-model="token" class="ui"> - <button @click="submit" class="ui primary">%i18n:desktop.tags.mk-2fa-setting.submit%</button> + <button @click="submit" class="ui primary">%i18n:@submit%</button> </li> </ol> - <div class="ui info"><p>%fa:info-circle%%i18n:desktop.tags.mk-2fa-setting.info%</p></div> + <div class="ui info"><p>%fa:info-circle%%i18n:@info%</p></div> </div> </div> </template> @@ -34,7 +34,7 @@ export default Vue.extend({ methods: { register() { (this as any).apis.input({ - title: '%i18n:desktop.tags.mk-2fa-setting.enter-password%', + title: '%i18n:@enter-password%', type: 'password' }).then(password => { (this as any).api('i/2fa/register', { @@ -47,13 +47,13 @@ export default Vue.extend({ unregister() { (this as any).apis.input({ - title: '%i18n:desktop.tags.mk-2fa-setting.enter-password%', + title: '%i18n:@enter-password%', type: 'password' }).then(password => { (this as any).api('i/2fa/unregister', { password: password }).then(() => { - (this as any).apis.notify('%i18n:desktop.tags.mk-2fa-setting.unregistered%'); + (this as any).apis.notify('%i18n:@unregistered%'); (this as any).os.i.twoFactorEnabled = false; }); }); @@ -63,10 +63,10 @@ export default Vue.extend({ (this as any).api('i/2fa/done', { token: this.token }).then(() => { - (this as any).apis.notify('%i18n:desktop.tags.mk-2fa-setting.success%'); + (this as any).apis.notify('%i18n:@success%'); (this as any).os.i.twoFactorEnabled = true; }).catch(() => { - (this as any).apis.notify('%i18n:desktop.tags.mk-2fa-setting.failed%'); + (this as any).apis.notify('%i18n:@failed%'); }); } } diff --git a/src/client/app/desktop/views/components/settings.api.vue b/src/client/app/desktop/views/components/settings.api.vue index 5831f8207..6ae29cb58 100644 --- a/src/client/app/desktop/views/components/settings.api.vue +++ b/src/client/app/desktop/views/components/settings.api.vue @@ -1,10 +1,10 @@ <template> <div class="root api"> <p>Token: <code>{{ os.i.token }}</code></p> - <p>%i18n:desktop.tags.mk-api-info.intro%</p> - <div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:desktop.tags.mk-api-info.caution%</p></div> - <p>%i18n:desktop.tags.mk-api-info.regeneration-of-token%</p> - <button class="ui" @click="regenerateToken">%i18n:desktop.tags.mk-api-info.regenerate-token%</button> + <p>%i18n:@intro%</p> + <div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div> + <p>%i18n:@regeneration-of-token%</p> + <button class="ui" @click="regenerateToken">%i18n:@regenerate-token%</button> </div> </template> @@ -15,7 +15,7 @@ export default Vue.extend({ methods: { regenerateToken() { (this as any).apis.input({ - title: '%i18n:desktop.tags.mk-api-info.enter-password%', + title: '%i18n:@enter-password%', type: 'password' }).then(password => { (this as any).api('i/regenerate_token', { diff --git a/src/client/app/desktop/views/components/settings.mute.vue b/src/client/app/desktop/views/components/settings.mute.vue index 94492ad26..792afa923 100644 --- a/src/client/app/desktop/views/components/settings.mute.vue +++ b/src/client/app/desktop/views/components/settings.mute.vue @@ -1,7 +1,7 @@ <template> <div> <div class="none ui info" v-if="!fetching && users.length == 0"> - <p>%fa:info-circle%%i18n:desktop.tags.mk-mute-setting.no-users%</p> + <p>%fa:info-circle%%i18n:@no-users%</p> </div> <div class="users" v-if="users.length != 0"> <div v-for="user in users" :key="user.id"> diff --git a/src/client/app/desktop/views/components/settings.password.vue b/src/client/app/desktop/views/components/settings.password.vue index f883b5406..39896daf6 100644 --- a/src/client/app/desktop/views/components/settings.password.vue +++ b/src/client/app/desktop/views/components/settings.password.vue @@ -1,6 +1,6 @@ <template> <div> - <button @click="reset" class="ui primary">%i18n:desktop.tags.mk-password-setting.reset%</button> + <button @click="reset" class="ui primary">%i18n:@reset%</button> </div> </template> @@ -11,21 +11,21 @@ export default Vue.extend({ methods: { reset() { (this as any).apis.input({ - title: '%i18n:desktop.tags.mk-password-setting.enter-current-password%', + title: '%i18n:@enter-current-password%', type: 'password' }).then(currentPassword => { (this as any).apis.input({ - title: '%i18n:desktop.tags.mk-password-setting.enter-new-password%', + title: '%i18n:@enter-new-password%', type: 'password' }).then(newPassword => { (this as any).apis.input({ - title: '%i18n:desktop.tags.mk-password-setting.enter-new-password-again%', + title: '%i18n:@enter-new-password-again%', type: 'password' }).then(newPassword2 => { if (newPassword !== newPassword2) { (this as any).apis.dialog({ title: null, - text: '%i18n:desktop.tags.mk-password-setting.not-match%', + text: '%i18n:@not-match%', actions: [{ text: 'OK' }] @@ -36,7 +36,7 @@ export default Vue.extend({ currentPasword: currentPassword, newPassword: newPassword }).then(() => { - (this as any).apis.notify('%i18n:desktop.tags.mk-password-setting.changed%'); + (this as any).apis.notify('%i18n:@changed%'); }); }); }); diff --git a/src/client/app/desktop/views/components/settings.profile.vue b/src/client/app/desktop/views/components/settings.profile.vue index 324a939f9..84b09eb98 100644 --- a/src/client/app/desktop/views/components/settings.profile.vue +++ b/src/client/app/desktop/views/components/settings.profile.vue @@ -1,27 +1,27 @@ <template> <div class="profile"> <label class="avatar ui from group"> - <p>%i18n:desktop.tags.mk-profile-setting.avatar%</p> + <p>%i18n:@avatar%</p> <img class="avatar" :src="`${os.i.avatarUrl}?thumbnail&size=64`" alt="avatar"/> - <button class="ui" @click="updateAvatar">%i18n:desktop.tags.mk-profile-setting.choice-avatar%</button> + <button class="ui" @click="updateAvatar">%i18n:@choice-avatar%</button> </label> <label class="ui from group"> - <p>%i18n:desktop.tags.mk-profile-setting.name%</p> + <p>%i18n:@name%</p> <input v-model="name" type="text" class="ui"/> </label> <label class="ui from group"> - <p>%i18n:desktop.tags.mk-profile-setting.location%</p> + <p>%i18n:@location%</p> <input v-model="location" type="text" class="ui"/> </label> <label class="ui from group"> - <p>%i18n:desktop.tags.mk-profile-setting.description%</p> + <p>%i18n:@description%</p> <textarea v-model="description" class="ui"></textarea> </label> <label class="ui from group"> - <p>%i18n:desktop.tags.mk-profile-setting.birthday%</p> + <p>%i18n:@birthday%</p> <el-date-picker v-model="birthday" type="date" value-format="yyyy-MM-dd"/> </label> - <button class="ui primary" @click="save">%i18n:desktop.tags.mk-profile-setting.save%</button> + <button class="ui primary" @click="save">%i18n:@save%</button> <section> <h2>その他</h2> <mk-switch v-model="os.i.isBot" @change="onChangeIsBot" text="このアカウントはbotです"/> diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue index 9d074165e..335d78052 100644 --- a/src/client/app/desktop/views/components/settings.vue +++ b/src/client/app/desktop/views/components/settings.vue @@ -1,20 +1,20 @@ <template> <div class="mk-settings"> <div class="nav"> - <p :class="{ active: page == 'profile' }" @mousedown="page = 'profile'">%fa:user .fw%%i18n:desktop.tags.mk-settings.profile%</p> + <p :class="{ active: page == 'profile' }" @mousedown="page = 'profile'">%fa:user .fw%%i18n:@profile%</p> <p :class="{ active: page == 'web' }" @mousedown="page = 'web'">%fa:desktop .fw%Web</p> <p :class="{ active: page == 'notification' }" @mousedown="page = 'notification'">%fa:R bell .fw%通知</p> - <p :class="{ active: page == 'drive' }" @mousedown="page = 'drive'">%fa:cloud .fw%%i18n:desktop.tags.mk-settings.drive%</p> - <p :class="{ active: page == 'mute' }" @mousedown="page = 'mute'">%fa:ban .fw%%i18n:desktop.tags.mk-settings.mute%</p> + <p :class="{ active: page == 'drive' }" @mousedown="page = 'drive'">%fa:cloud .fw%%i18n:@drive%</p> + <p :class="{ active: page == 'mute' }" @mousedown="page = 'mute'">%fa:ban .fw%%i18n:@mute%</p> <p :class="{ active: page == 'apps' }" @mousedown="page = 'apps'">%fa:puzzle-piece .fw%アプリ</p> <p :class="{ active: page == 'twitter' }" @mousedown="page = 'twitter'">%fa:B twitter .fw%Twitter</p> - <p :class="{ active: page == 'security' }" @mousedown="page = 'security'">%fa:unlock-alt .fw%%i18n:desktop.tags.mk-settings.security%</p> + <p :class="{ active: page == 'security' }" @mousedown="page = 'security'">%fa:unlock-alt .fw%%i18n:@security%</p> <p :class="{ active: page == 'api' }" @mousedown="page = 'api'">%fa:key .fw%API</p> - <p :class="{ active: page == 'other' }" @mousedown="page = 'other'">%fa:cogs .fw%%i18n:desktop.tags.mk-settings.other%</p> + <p :class="{ active: page == 'other' }" @mousedown="page = 'other'">%fa:cogs .fw%%i18n:@other%</p> </div> <div class="pages"> <section class="profile" v-show="page == 'profile'"> - <h1>%i18n:desktop.tags.mk-settings.profile%</h1> + <h1>%i18n:@profile%</h1> <x-profile/> </section> @@ -98,12 +98,12 @@ </section> <section class="drive" v-show="page == 'drive'"> - <h1>%i18n:desktop.tags.mk-settings.drive%</h1> + <h1>%i18n:@drive%</h1> <x-drive/> </section> <section class="mute" v-show="page == 'mute'"> - <h1>%i18n:desktop.tags.mk-settings.mute%</h1> + <h1>%i18n:@mute%</h1> <x-mute/> </section> @@ -118,12 +118,12 @@ </section> <section class="password" v-show="page == 'security'"> - <h1>%i18n:desktop.tags.mk-settings.password%</h1> + <h1>%i18n:@password%</h1> <x-password/> </section> <section class="2fa" v-show="page == 'security'"> - <h1>%i18n:desktop.tags.mk-settings.2fa%</h1> + <h1>%i18n:@2fa%</h1> <x-2fa/> </section> @@ -186,7 +186,7 @@ </section> <section class="other" v-show="page == 'other'"> - <h1>%i18n:desktop.tags.mk-settings.license%</h1> + <h1>%i18n:@license%</h1> <div v-html="license"></div> <a :href="licenseUrl" target="_blank">サードパーティ</a> </section> diff --git a/src/client/app/desktop/views/components/ui.header.account.vue b/src/client/app/desktop/views/components/ui.header.account.vue index 61c301929..5fd32a4ce 100644 --- a/src/client/app/desktop/views/components/ui.header.account.vue +++ b/src/client/app/desktop/views/components/ui.header.account.vue @@ -8,13 +8,13 @@ <div class="menu" v-if="isOpen"> <ul> <li> - <router-link :to="`/@${ os.i.username }`">%fa:user%%i18n:desktop.tags.mk-ui-header-account.profile%%fa:angle-right%</router-link> + <router-link :to="`/@${ os.i.username }`">%fa:user%%i18n:@profile%%fa:angle-right%</router-link> </li> <li @click="drive"> - <p>%fa:cloud%%i18n:desktop.tags.mk-ui-header-account.drive%%fa:angle-right%</p> + <p>%fa:cloud%%i18n:@drive%%fa:angle-right%</p> </li> <li> - <a href="/i/mentions">%fa:at%%i18n:desktop.tags.mk-ui-header-account.mentions%%fa:angle-right%</a> + <a href="/i/mentions">%fa:at%%i18n:@mentions%%fa:angle-right%</a> </li> </ul> <ul> @@ -22,12 +22,12 @@ <a href="/i/customize-home">%fa:wrench%カスタマイズ%fa:angle-right%</a> </li> <li @click="settings"> - <p>%fa:cog%%i18n:desktop.tags.mk-ui-header-account.settings%%fa:angle-right%</p> + <p>%fa:cog%%i18n:@settings%%fa:angle-right%</p> </li> </ul> <ul> <li @click="signout"> - <p>%fa:power-off%%i18n:desktop.tags.mk-ui-header-account.signout%%fa:angle-right%</p> + <p>%fa:power-off%%i18n:@signout%%fa:angle-right%</p> </li> </ul> </div> diff --git a/src/client/app/desktop/views/components/ui.header.nav.vue b/src/client/app/desktop/views/components/ui.header.nav.vue index 5d7ae0a4e..b4f83d8ab 100644 --- a/src/client/app/desktop/views/components/ui.header.nav.vue +++ b/src/client/app/desktop/views/components/ui.header.nav.vue @@ -5,13 +5,13 @@ <li class="home" :class="{ active: $route.name == 'index' }"> <router-link to="/"> %fa:home% - <p>%i18n:desktop.tags.mk-ui-header-nav.home%</p> + <p>%i18n:@home%</p> </router-link> </li> <li class="messaging"> <a @click="messaging"> %fa:comments% - <p>%i18n:desktop.tags.mk-ui-header-nav.messaging%</p> + <p>%i18n:@messaging%</p> <template v-if="hasUnreadMessagingMessages">%fa:circle%</template> </a> </li> diff --git a/src/client/app/desktop/views/components/ui.header.notifications.vue b/src/client/app/desktop/views/components/ui.header.notifications.vue index e829418d1..e9a6b9b04 100644 --- a/src/client/app/desktop/views/components/ui.header.notifications.vue +++ b/src/client/app/desktop/views/components/ui.header.notifications.vue @@ -1,6 +1,6 @@ <template> <div class="notifications"> - <button :data-active="isOpen" @click="toggle" title="%i18n:desktop.tags.mk-ui-header-notifications.title%"> + <button :data-active="isOpen" @click="toggle" title="%i18n:@title%"> %fa:R bell%<template v-if="hasUnreadNotifications">%fa:circle%</template> </button> <div class="pop" v-if="isOpen"> diff --git a/src/client/app/desktop/views/components/ui.header.post.vue b/src/client/app/desktop/views/components/ui.header.post.vue index 5c1756b75..01329c7c8 100644 --- a/src/client/app/desktop/views/components/ui.header.post.vue +++ b/src/client/app/desktop/views/components/ui.header.post.vue @@ -1,6 +1,6 @@ <template> <div class="note"> - <button @click="post" title="%i18n:desktop.tags.mk-ui-header-note-button.note%">%fa:pencil-alt%</button> + <button @click="post" title="%i18n:@note%">%fa:pencil-alt%</button> </div> </template> diff --git a/src/client/app/desktop/views/components/ui.header.search.vue b/src/client/app/desktop/views/components/ui.header.search.vue index 86215556a..3167aab8a 100644 --- a/src/client/app/desktop/views/components/ui.header.search.vue +++ b/src/client/app/desktop/views/components/ui.header.search.vue @@ -1,7 +1,7 @@ <template> <form class="search" @submit.prevent="onSubmit"> %fa:search% - <input v-model="q" type="search" placeholder="%i18n:desktop.tags.mk-ui-header-search.placeholder%"/> + <input v-model="q" type="search" placeholder="%i18n:@placeholder%"/> <div class="result"></div> </form> </template> diff --git a/src/client/app/desktop/views/pages/note.vue b/src/client/app/desktop/views/pages/note.vue index 17c2b1e95..e92b0ff10 100644 --- a/src/client/app/desktop/views/pages/note.vue +++ b/src/client/app/desktop/views/pages/note.vue @@ -1,9 +1,9 @@ <template> <mk-ui> <main v-if="!fetching"> - <a v-if="note.next" :href="note.next">%fa:angle-up%%i18n:desktop.tags.mk-note-page.next%</a> + <a v-if="note.next" :href="note.next">%fa:angle-up%%i18n:@next%</a> <mk-note-detail :note="note"/> - <a v-if="note.prev" :href="note.prev">%fa:angle-down%%i18n:desktop.tags.mk-note-page.prev%</a> + <a v-if="note.prev" :href="note.prev">%fa:angle-down%%i18n:@prev%</a> </main> </mk-ui> </template> diff --git a/src/client/app/desktop/views/pages/selectdrive.vue b/src/client/app/desktop/views/pages/selectdrive.vue index 4f0b86014..c846f2418 100644 --- a/src/client/app/desktop/views/pages/selectdrive.vue +++ b/src/client/app/desktop/views/pages/selectdrive.vue @@ -6,9 +6,9 @@ @change-selection="onChangeSelection" /> <footer> - <button class="upload" title="%i18n:desktop.tags.mk-selectdrive-page.upload%" @click="upload">%fa:upload%</button> - <button class="cancel" @click="close">%i18n:desktop.tags.mk-selectdrive-page.cancel%</button> - <button class="ok" @click="ok">%i18n:desktop.tags.mk-selectdrive-page.ok%</button> + <button class="upload" title="%i18n:@upload%" @click="upload">%fa:upload%</button> + <button class="cancel" @click="close">%i18n:@cancel%</button> + <button class="ok" @click="ok">%i18n:@ok%</button> </footer> </div> </template> @@ -29,7 +29,7 @@ export default Vue.extend({ } }, mounted() { - document.title = '%i18n:desktop.tags.mk-selectdrive-page.title%'; + document.title = '%i18n:@title%'; }, methods: { onSelected(file) { diff --git a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue index 4113ef13a..e50f62d96 100644 --- a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue +++ b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue @@ -1,13 +1,13 @@ <template> <div class="followers-you-know"> - <p class="title">%fa:users%%i18n:desktop.tags.mk-user.followers-you-know.title%</p> - <p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:desktop.tags.mk-user.followers-you-know.loading%<mk-ellipsis/></p> + <p class="title">%fa:users%%i18n:@followers-you-know.title%</p> + <p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@followers-you-know.loading%<mk-ellipsis/></p> <div v-if="!fetching && users.length > 0"> <router-link v-for="user in users" :to="user | userPage" :key="user.id"> <img :src="`${user.avatarUrl}?thumbnail&size=64`" :alt="user | userName" v-user-preview="user.id"/> </router-link> </div> - <p class="empty" v-if="!fetching && users.length == 0">%i18n:desktop.tags.mk-user.followers-you-know.no-users%</p> + <p class="empty" v-if="!fetching && users.length == 0">%i18n:@followers-you-know.no-users%</p> </div> </template> diff --git a/src/client/app/desktop/views/pages/user/user.friends.vue b/src/client/app/desktop/views/pages/user/user.friends.vue index 4b5ec88d5..12426a26c 100644 --- a/src/client/app/desktop/views/pages/user/user.friends.vue +++ b/src/client/app/desktop/views/pages/user/user.friends.vue @@ -1,7 +1,7 @@ <template> <div class="friends"> - <p class="title">%fa:users%%i18n:desktop.tags.mk-user.frequently-replied-users.title%</p> - <p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:desktop.tags.mk-user.frequently-replied-users.loading%<mk-ellipsis/></p> + <p class="title">%fa:users%%i18n:@frequently-replied-users.title%</p> + <p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@frequently-replied-users.loading%<mk-ellipsis/></p> <template v-if="!fetching && users.length != 0"> <div class="user" v-for="friend in users"> <router-link class="avatar-anchor" :to="friend | userPage"> @@ -14,7 +14,7 @@ <mk-follow-button :user="friend"/> </div> </template> - <p class="empty" v-if="!fetching && users.length == 0">%i18n:desktop.tags.mk-user.frequently-replied-users.no-users%</p> + <p class="empty" v-if="!fetching && users.length == 0">%i18n:@frequently-replied-users.no-users%</p> </div> </template> diff --git a/src/client/app/desktop/views/pages/user/user.home.vue b/src/client/app/desktop/views/pages/user/user.home.vue index c254a320c..7ca520ea7 100644 --- a/src/client/app/desktop/views/pages/user/user.home.vue +++ b/src/client/app/desktop/views/pages/user/user.home.vue @@ -5,7 +5,7 @@ <x-profile :user="user"/> <x-photos :user="user"/> <x-followers-you-know v-if="os.isSignedIn && os.i.id != user.id" :user="user"/> - <p v-if="user.host === null">%i18n:desktop.tags.mk-user.last-used-at%: <b><mk-time :time="user.lastUsedAt"/></b></p> + <p v-if="user.host === null">%i18n:@last-used-at%: <b><mk-time :time="user.lastUsedAt"/></b></p> </div> </div> <main> diff --git a/src/client/app/desktop/views/pages/user/user.photos.vue b/src/client/app/desktop/views/pages/user/user.photos.vue index 99a1a8d70..d1dfac9d7 100644 --- a/src/client/app/desktop/views/pages/user/user.photos.vue +++ b/src/client/app/desktop/views/pages/user/user.photos.vue @@ -1,13 +1,13 @@ <template> <div class="photos"> - <p class="title">%fa:camera%%i18n:desktop.tags.mk-user.photos.title%</p> - <p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:desktop.tags.mk-user.photos.loading%<mk-ellipsis/></p> + <p class="title">%fa:camera%%i18n:@photos.title%</p> + <p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@photos.loading%<mk-ellipsis/></p> <div class="stream" v-if="!fetching && images.length > 0"> <div v-for="image in images" class="img" :style="`background-image: url(${image.url}?thumbnail&size=256)`" ></div> </div> - <p class="empty" v-if="!fetching && images.length == 0">%i18n:desktop.tags.mk-user.photos.no-photos%</p> + <p class="empty" v-if="!fetching && images.length == 0">%i18n:@photos.no-photos%</p> </div> </template> 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 44f20c2bc..72750e1b3 100644 --- a/src/client/app/desktop/views/pages/user/user.profile.vue +++ b/src/client/app/desktop/views/pages/user/user.profile.vue @@ -2,9 +2,9 @@ <div class="profile"> <div class="friend-form" v-if="os.isSignedIn && os.i.id != user.id"> <mk-follow-button :user="user" size="big"/> - <p class="followed" v-if="user.isFollowed">%i18n:desktop.tags.mk-user.follows-you%</p> - <p v-if="user.isMuted">%i18n:desktop.tags.mk-user.muted% <a @click="unmute">%i18n:desktop.tags.mk-user.unmute%</a></p> - <p v-if="!user.isMuted"><a @click="mute">%i18n:desktop.tags.mk-user.mute%</a></p> + <p class="followed" v-if="user.isFollowed">%i18n:@follows-you%</p> + <p v-if="user.isMuted">%i18n:@muted% <a @click="unmute">%i18n:@unmute%</a></p> + <p v-if="!user.isMuted"><a @click="mute">%i18n:@mute%</a></p> </div> <div class="description" v-if="user.description">{{ user.description }}</div> <div class="birthday" v-if="user.host === null && user.profile.birthday"> diff --git a/src/client/app/desktop/views/widgets/channel.vue b/src/client/app/desktop/views/widgets/channel.vue index c9b62dfea..975058b0e 100644 --- a/src/client/app/desktop/views/widgets/channel.vue +++ b/src/client/app/desktop/views/widgets/channel.vue @@ -1,10 +1,10 @@ <template> <div class="mkw-channel"> <template v-if="!props.compact"> - <p class="title">%fa:tv%{{ channel ? channel.title : '%i18n:desktop.tags.mk-channel-home-widget.title%' }}</p> - <button @click="settings" title="%i18n:desktop.tags.mk-channel-home-widget.settings%">%fa:cog%</button> + <p class="title">%fa:tv%{{ channel ? channel.title : '%i18n:@title%' }}</p> + <button @click="settings" title="%i18n:@settings%">%fa:cog%</button> </template> - <p class="get-started" v-if="props.channel == null">%i18n:desktop.tags.mk-channel-home-widget.get-started%</p> + <p class="get-started" v-if="props.channel == null">%i18n:@get-started%</p> <x-channel class="channel" :channel="channel" v-if="channel != null"/> </div> </template> diff --git a/src/client/app/desktop/views/widgets/messaging.vue b/src/client/app/desktop/views/widgets/messaging.vue index 2c9f473bd..0f197fb2d 100644 --- a/src/client/app/desktop/views/widgets/messaging.vue +++ b/src/client/app/desktop/views/widgets/messaging.vue @@ -1,6 +1,6 @@ <template> <div class="mkw-messaging"> - <p class="title" v-if="props.design == 0">%fa:comments%%i18n:desktop.tags.mk-messaging-home-widget.title%</p> + <p class="title" v-if="props.design == 0">%fa:comments%%i18n:@title%</p> <mk-messaging ref="index" compact @navigate="navigate"/> </div> </template> diff --git a/src/client/app/desktop/views/widgets/notifications.vue b/src/client/app/desktop/views/widgets/notifications.vue index 1a2b3d3f8..0c2fa0434 100644 --- a/src/client/app/desktop/views/widgets/notifications.vue +++ b/src/client/app/desktop/views/widgets/notifications.vue @@ -1,8 +1,8 @@ <template> <div class="mkw-notifications"> <template v-if="!props.compact"> - <p class="title">%fa:R bell%%i18n:desktop.tags.mk-notifications-home-widget.title%</p> - <button @click="settings" title="%i18n:desktop.tags.mk-notifications-home-widget.settings%">%fa:cog%</button> + <p class="title">%fa:R bell%%i18n:@title%</p> + <button @click="settings" title="%i18n:@settings%">%fa:cog%</button> </template> <mk-notifications/> </div> diff --git a/src/client/app/desktop/views/widgets/polls.vue b/src/client/app/desktop/views/widgets/polls.vue index 6ce980821..6cb1192c2 100644 --- a/src/client/app/desktop/views/widgets/polls.vue +++ b/src/client/app/desktop/views/widgets/polls.vue @@ -1,15 +1,15 @@ <template> <div class="mkw-polls"> <template v-if="!props.compact"> - <p class="title">%fa:chart-pie%%i18n:desktop.tags.mk-recommended-polls-home-widget.title%</p> - <button @click="fetch" title="%i18n:desktop.tags.mk-recommended-polls-home-widget.refresh%">%fa:sync%</button> + <p class="title">%fa:chart-pie%%i18n:@title%</p> + <button @click="fetch" title="%i18n:@refresh%">%fa:sync%</button> </template> <div class="poll" v-if="!fetching && poll != null"> <p v-if="poll.text"><router-link to="poll | notePage">{{ poll.text }}</router-link></p> <p v-if="!poll.text"><router-link to="poll | notePage">%fa:link%</router-link></p> <mk-poll :note="poll"/> </div> - <p class="empty" v-if="!fetching && poll == null">%i18n:desktop.tags.mk-recommended-polls-home-widget.nothing%</p> + <p class="empty" v-if="!fetching && poll == null">%i18n:@nothing%</p> <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p> </div> </template> diff --git a/src/client/app/desktop/views/widgets/post-form.vue b/src/client/app/desktop/views/widgets/post-form.vue index 5e59582a0..627943588 100644 --- a/src/client/app/desktop/views/widgets/post-form.vue +++ b/src/client/app/desktop/views/widgets/post-form.vue @@ -1,10 +1,10 @@ <template> <div class="mkw-post-form"> <template v-if="props.design == 0"> - <p class="title">%fa:pencil-alt%%i18n:desktop.tags.mk-post-form-home-widget.title%</p> + <p class="title">%fa:pencil-alt%%i18n:@title%</p> </template> - <textarea :disabled="posting" v-model="text" @keydown="onKeydown" placeholder="%i18n:desktop.tags.mk-post-form-home-widget.placeholder%"></textarea> - <button @click="post" :disabled="posting">%i18n:desktop.tags.mk-post-form-home-widget.note%</button> + <textarea :disabled="posting" v-model="text" @keydown="onKeydown" placeholder="%i18n:@placeholder%"></textarea> + <button @click="post" :disabled="posting">%i18n:@note%</button> </div> </template> diff --git a/src/client/app/desktop/views/widgets/trends.vue b/src/client/app/desktop/views/widgets/trends.vue index 20e298730..fccda3f9d 100644 --- a/src/client/app/desktop/views/widgets/trends.vue +++ b/src/client/app/desktop/views/widgets/trends.vue @@ -1,15 +1,15 @@ <template> <div class="mkw-trends"> <template v-if="!props.compact"> - <p class="title">%fa:fire%%i18n:desktop.tags.mk-trends-home-widget.title%</p> - <button @click="fetch" title="%i18n:desktop.tags.mk-trends-home-widget.refresh%">%fa:sync%</button> + <p class="title">%fa:fire%%i18n:@title%</p> + <button @click="fetch" title="%i18n:@refresh%">%fa:sync%</button> </template> <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p> <div class="note" v-else-if="note != null"> <p class="text"><router-link :to="note | notePage">{{ note.text }}</router-link></p> <p class="author">―<router-link :to="note.user | userPage">@{{ note.user | acct }}</router-link></p> </div> - <p class="empty" v-else>%i18n:desktop.tags.mk-trends-home-widget.nothing%</p> + <p class="empty" v-else>%i18n:@nothing%</p> </div> </template> diff --git a/src/client/app/desktop/views/widgets/users.vue b/src/client/app/desktop/views/widgets/users.vue index c7075d9a5..0955ebbd7 100644 --- a/src/client/app/desktop/views/widgets/users.vue +++ b/src/client/app/desktop/views/widgets/users.vue @@ -1,8 +1,8 @@ <template> <div class="mkw-users"> <template v-if="!props.compact"> - <p class="title">%fa:users%%i18n:desktop.tags.mk-user-recommendation-home-widget.title%</p> - <button @click="refresh" title="%i18n:desktop.tags.mk-user-recommendation-home-widget.refresh%">%fa:sync%</button> + <p class="title">%fa:users%%i18n:@title%</p> + <button @click="refresh" title="%i18n:@refresh%">%fa:sync%</button> </template> <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p> <template v-else-if="users.length != 0"> @@ -17,7 +17,7 @@ <mk-follow-button :user="_user"/> </div> </template> - <p class="empty" v-else>%i18n:desktop.tags.mk-user-recommendation-home-widget.no-one%</p> + <p class="empty" v-else>%i18n:@no-one%</p> </div> </template> diff --git a/src/client/app/mobile/views/components/drive-file-chooser.vue b/src/client/app/mobile/views/components/drive-file-chooser.vue index 6806af0f1..41536afbd 100644 --- a/src/client/app/mobile/views/components/drive-file-chooser.vue +++ b/src/client/app/mobile/views/components/drive-file-chooser.vue @@ -2,7 +2,7 @@ <div class="mk-drive-file-chooser"> <div class="body"> <header> - <h1>%i18n:mobile.tags.mk-drive-selector.select-file%<span class="count" v-if="files.length > 0">({{ files.length }})</span></h1> + <h1>%i18n:@select-file%<span class="count" v-if="files.length > 0">({{ files.length }})</span></h1> <button class="close" @click="cancel">%fa:times%</button> <button v-if="multiple" class="ok" @click="ok">%fa:check%</button> </header> diff --git a/src/client/app/mobile/views/components/drive-folder-chooser.vue b/src/client/app/mobile/views/components/drive-folder-chooser.vue index 853078664..bfd8fbda6 100644 --- a/src/client/app/mobile/views/components/drive-folder-chooser.vue +++ b/src/client/app/mobile/views/components/drive-folder-chooser.vue @@ -2,7 +2,7 @@ <div class="mk-drive-folder-chooser"> <div class="body"> <header> - <h1>%i18n:mobile.tags.mk-drive-folder-selector.select-folder%</h1> + <h1>%i18n:@select-folder%</h1> <button class="close" @click="cancel">%fa:times%</button> <button class="ok" @click="ok">%fa:check%</button> </header> diff --git a/src/client/app/mobile/views/components/drive.file-detail.vue b/src/client/app/mobile/views/components/drive.file-detail.vue index f3274f677..c7be7d187 100644 --- a/src/client/app/mobile/views/components/drive.file-detail.vue +++ b/src/client/app/mobile/views/components/drive.file-detail.vue @@ -35,20 +35,20 @@ <div class="menu"> <div> <a :href="`${file.url}?download`" :download="file.name"> - %fa:download%%i18n:mobile.tags.mk-drive-file-viewer.download% + %fa:download%%i18n:@download% </a> <button @click="rename"> - %fa:pencil-alt%%i18n:mobile.tags.mk-drive-file-viewer.rename% + %fa:pencil-alt%%i18n:@rename% </button> <button @click="move"> - %fa:R folder-open%%i18n:mobile.tags.mk-drive-file-viewer.move% + %fa:R folder-open%%i18n:@move% </button> </div> </div> <div class="exif" v-show="exif"> <div> <p> - %fa:camera%%i18n:mobile.tags.mk-drive-file-viewer.exif% + %fa:camera%%i18n:@exif% </p> <pre ref="exif" class="json">{{ exif ? JSON.stringify(exif, null, 2) : '' }}</pre> </div> @@ -56,7 +56,7 @@ <div class="hash"> <div> <p> - %fa:hashtag%%i18n:mobile.tags.mk-drive-file-viewer.hash% + %fa:hashtag%%i18n:@hash% </p> <code>{{ file.md5 }}</code> </div> diff --git a/src/client/app/mobile/views/components/drive.vue b/src/client/app/mobile/views/components/drive.vue index ff5366a0a..ec1b983d0 100644 --- a/src/client/app/mobile/views/components/drive.vue +++ b/src/client/app/mobile/views/components/drive.vue @@ -1,7 +1,7 @@ <template> <div class="mk-drive"> <nav ref="nav"> - <a @click.prevent="goRoot()" href="/i/drive">%fa:cloud%%i18n:mobile.tags.mk-drive.drive%</a> + <a @click.prevent="goRoot()" href="/i/drive">%fa:cloud%%i18n:@drive%</a> <template v-for="folder in hierarchyFolders"> <span :key="folder.id + '>'">%fa:angle-right%</span> <a :key="folder.id" @click.prevent="cd(folder)" :href="`/i/drive/folder/${folder.id}`">{{ folder.name }}</a> @@ -18,26 +18,26 @@ <mk-uploader ref="uploader"/> <div class="browser" :class="{ fetching }" v-if="file == null"> <div class="info" v-if="info"> - <p v-if="folder == null">{{ (info.usage / info.capacity * 100).toFixed(1) }}% %i18n:mobile.tags.mk-drive.used%</p> + <p v-if="folder == null">{{ (info.usage / info.capacity * 100).toFixed(1) }}% %i18n:@used%</p> <p v-if="folder != null && (folder.foldersCount > 0 || folder.filesCount > 0)"> - <template v-if="folder.foldersCount > 0">{{ folder.foldersCount }} %i18n:mobile.tags.mk-drive.folder-count%</template> - <template v-if="folder.foldersCount > 0 && folder.filesCount > 0">%i18n:mobile.tags.mk-drive.count-separator%</template> - <template v-if="folder.filesCount > 0">{{ folder.filesCount }} %i18n:mobile.tags.mk-drive.file-count%</template> + <template v-if="folder.foldersCount > 0">{{ folder.foldersCount }} %i18n:@folder-count%</template> + <template v-if="folder.foldersCount > 0 && folder.filesCount > 0">%i18n:@count-separator%</template> + <template v-if="folder.filesCount > 0">{{ folder.filesCount }} %i18n:@file-count%</template> </p> </div> <div class="folders" v-if="folders.length > 0"> <x-folder v-for="folder in folders" :key="folder.id" :folder="folder"/> - <p v-if="moreFolders">%i18n:mobile.tags.mk-drive.load-more%</p> + <p v-if="moreFolders">%i18n:@load-more%</p> </div> <div class="files" v-if="files.length > 0"> <x-file v-for="file in files" :key="file.id" :file="file"/> <button class="more" v-if="moreFiles" @click="fetchMoreFiles"> - {{ fetchingMoreFiles ? '%i18n:common.loading%' : '%i18n:mobile.tags.mk-drive.load-more%' }} + {{ fetchingMoreFiles ? '%i18n:common.loading%' : '%i18n:@load-more%' }} </button> </div> <div class="empty" v-if="files.length == 0 && folders.length == 0 && !fetching"> - <p v-if="folder == null">%i18n:mobile.tags.mk-drive.nothing-in-drive%</p> - <p v-if="folder != null">%i18n:mobile.tags.mk-drive.folder-is-empty%</p> + <p v-if="folder == null">%i18n:@nothing-in-drive%</p> + <p v-if="folder != null">%i18n:@folder-is-empty%</p> </div> </div> <div class="fetching" v-if="fetching && file == null && files.length == 0 && folders.length == 0"> diff --git a/src/client/app/mobile/views/components/follow-button.vue b/src/client/app/mobile/views/components/follow-button.vue index 43c69d4e0..a6b5cf055 100644 --- a/src/client/app/mobile/views/components/follow-button.vue +++ b/src/client/app/mobile/views/components/follow-button.vue @@ -7,7 +7,7 @@ <template v-if="!wait && user.isFollowing">%fa:minus%</template> <template v-if="!wait && !user.isFollowing">%fa:plus%</template> <template v-if="wait">%fa:spinner .pulse .fw%</template> - {{ user.isFollowing ? '%i18n:mobile.tags.mk-follow-button.unfollow%' : '%i18n:mobile.tags.mk-follow-button.follow%' }} + {{ user.isFollowing ? '%i18n:@unfollow%' : '%i18n:@follow%' }} </button> </template> diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue index 63e28b7f5..c29e46e45 100644 --- a/src/client/app/mobile/views/components/note-detail.vue +++ b/src/client/app/mobile/views/components/note-detail.vue @@ -54,13 +54,13 @@ </router-link> <footer> <mk-reactions-viewer :note="p"/> - <button @click="reply" title="%i18n:mobile.tags.mk-note-detail.reply%"> + <button @click="reply" title="%i18n:@reply%"> %fa:reply%<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p> </button> <button @click="renote" title="Renote"> %fa:retweet%<p class="count" v-if="p.renoteCount > 0">{{ p.renoteCount }}</p> </button> - <button :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:mobile.tags.mk-note-detail.reaction%"> + <button :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:@reaction%"> %fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p> </button> <button @click="menu" ref="menuButton"> diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue index 033de4f42..cde8b6c2c 100644 --- a/src/client/app/mobile/views/components/note.vue +++ b/src/client/app/mobile/views/components/note.vue @@ -9,9 +9,9 @@ <img class="avatar" :src="`${note.user.avatarUrl}?thumbnail&size=64`" alt="avatar"/> </router-link> %fa:retweet% - <span>{{ '%i18n:mobile.tags.mk-timeline-note.reposted-by%'.substr(0, '%i18n:mobile.tags.mk-timeline-note.reposted-by%'.indexOf('{')) }}</span> + <span>{{ '%i18n:@reposted-by%'.substr(0, '%i18n:@reposted-by%'.indexOf('{')) }}</span> <router-link class="name" :to="note.user | userPage">{{ note.user | userName }}</router-link> - <span>{{ '%i18n:mobile.tags.mk-timeline-note.reposted-by%'.substr('%i18n:mobile.tags.mk-timeline-note.reposted-by%'.indexOf('}') + 1) }}</span> + <span>{{ '%i18n:@reposted-by%'.substr('%i18n:@reposted-by%'.indexOf('}') + 1) }}</span> </p> <mk-time :time="note.createdAt"/> </div> diff --git a/src/client/app/mobile/views/components/notifications.vue b/src/client/app/mobile/views/components/notifications.vue index d68b990df..231ce2c1b 100644 --- a/src/client/app/mobile/views/components/notifications.vue +++ b/src/client/app/mobile/views/components/notifications.vue @@ -11,9 +11,9 @@ </div> <button class="more" v-if="moreNotifications" @click="fetchMoreNotifications" :disabled="fetchingMoreNotifications"> <template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template> - {{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:mobile.tags.mk-notifications.more%' }} + {{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }} </button> - <p class="empty" v-if="notifications.length == 0 && !fetching">%i18n:mobile.tags.mk-notifications.empty%</p> + <p class="empty" v-if="notifications.length == 0 && !fetching">%i18n:@empty%</p> <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p> </div> </template> diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue index 70be6db7b..4b038fd2b 100644 --- a/src/client/app/mobile/views/components/post-form.vue +++ b/src/client/app/mobile/views/components/post-form.vue @@ -5,12 +5,12 @@ <div> <span class="text-count" :class="{ over: text.length > 1000 }">{{ 1000 - text.length }}</span> <span class="geo" v-if="geo">%fa:map-marker-alt%</span> - <button class="submit" :disabled="posting" @click="post">{{ reply ? '返信' : '%i18n:mobile.tags.mk-post-form.submit%' }}</button> + <button class="submit" :disabled="posting" @click="post">{{ reply ? '返信' : '%i18n:@submit%' }}</button> </div> </header> <div class="form"> <mk-note-preview v-if="reply" :note="reply"/> - <textarea v-model="text" ref="text" :disabled="posting" :placeholder="reply ? '%i18n:mobile.tags.mk-post-form.reply-placeholder%' : '%i18n:mobile.tags.mk-post-form.note-placeholder%'"></textarea> + <textarea v-model="text" ref="text" :disabled="posting" :placeholder="reply ? '%i18n:@reply-placeholder%' : '%i18n:@note-placeholder%'"></textarea> <div class="attaches" v-show="files.length != 0"> <x-draggable class="files" :list="files" :options="{ animation: 150 }"> <div class="file" v-for="file in files" :key="file.id"> diff --git a/src/client/app/mobile/views/components/sub-note-content.vue b/src/client/app/mobile/views/components/sub-note-content.vue index 22e6ebe3f..54cc74f7f 100644 --- a/src/client/app/mobile/views/components/sub-note-content.vue +++ b/src/client/app/mobile/views/components/sub-note-content.vue @@ -10,7 +10,7 @@ <mk-media-list :media-list="note.media"/> </details> <details v-if="note.poll"> - <summary>%i18n:mobile.tags.mk-sub-note-content.poll%</summary> + <summary>%i18n:@poll%</summary> <mk-poll :note="note"/> </details> </div> diff --git a/src/client/app/mobile/views/components/timeline.vue b/src/client/app/mobile/views/components/timeline.vue index 4d6abcd16..6bc12096c 100644 --- a/src/client/app/mobile/views/components/timeline.vue +++ b/src/client/app/mobile/views/components/timeline.vue @@ -7,10 +7,10 @@ </div> <div class="empty" v-if="!fetching && notes.length == 0"> %fa:R comments% - %i18n:mobile.tags.mk-home-timeline.empty-timeline% + %i18n:@empty-timeline% </div> <button v-if="!fetching && existMore" @click="more" :disabled="moreFetching" slot="tail"> - <span v-if="!moreFetching">%i18n:mobile.tags.mk-timeline.load-more%</span> + <span v-if="!moreFetching">%i18n:@load-more%</span> <span v-if="moreFetching">%i18n:common.loading%<mk-ellipsis/></span> </button> </mk-notes> diff --git a/src/client/app/mobile/views/components/ui.nav.vue b/src/client/app/mobile/views/components/ui.nav.vue index f96e28540..2bab5fc7b 100644 --- a/src/client/app/mobile/views/components/ui.nav.vue +++ b/src/client/app/mobile/views/components/ui.nav.vue @@ -15,22 +15,22 @@ </router-link> <div class="links"> <ul> - <li><router-link to="/">%fa:home%%i18n:mobile.tags.mk-ui-nav.home%%fa:angle-right%</router-link></li> - <li><router-link to="/i/notifications">%fa:R bell%%i18n:mobile.tags.mk-ui-nav.notifications%<template v-if="hasUnreadNotifications">%fa:circle%</template>%fa:angle-right%</router-link></li> - <li><router-link to="/i/messaging">%fa:R comments%%i18n:mobile.tags.mk-ui-nav.messaging%<template v-if="hasUnreadMessagingMessages">%fa:circle%</template>%fa:angle-right%</router-link></li> + <li><router-link to="/">%fa:home%%i18n:@home%%fa:angle-right%</router-link></li> + <li><router-link to="/i/notifications">%fa:R bell%%i18n:@notifications%<template v-if="hasUnreadNotifications">%fa:circle%</template>%fa:angle-right%</router-link></li> + <li><router-link to="/i/messaging">%fa:R comments%%i18n:@messaging%<template v-if="hasUnreadMessagingMessages">%fa:circle%</template>%fa:angle-right%</router-link></li> <li><router-link to="/othello">%fa:gamepad%ゲーム<template v-if="hasGameInvitations">%fa:circle%</template>%fa:angle-right%</router-link></li> </ul> <ul> - <li><router-link to="/i/drive">%fa:cloud%%i18n:mobile.tags.mk-ui-nav.drive%%fa:angle-right%</router-link></li> + <li><router-link to="/i/drive">%fa:cloud%%i18n:@drive%%fa:angle-right%</router-link></li> </ul> <ul> - <li><a @click="search">%fa:search%%i18n:mobile.tags.mk-ui-nav.search%%fa:angle-right%</a></li> + <li><a @click="search">%fa:search%%i18n:@search%%fa:angle-right%</a></li> </ul> <ul> - <li><router-link to="/i/settings">%fa:cog%%i18n:mobile.tags.mk-ui-nav.settings%%fa:angle-right%</router-link></li> + <li><router-link to="/i/settings">%fa:cog%%i18n:@settings%%fa:angle-right%</router-link></li> </ul> </div> - <a :href="aboutUrl"><p class="about">%i18n:mobile.tags.mk-ui-nav.about%</p></a> + <a :href="aboutUrl"><p class="about">%i18n:@about%</p></a> </div> </transition> </div> @@ -92,7 +92,7 @@ export default Vue.extend({ }, methods: { search() { - const query = window.prompt('%i18n:mobile.tags.mk-ui-nav.search%'); + const query = window.prompt('%i18n:@search%'); if (query == null || query == '') return; this.$router.push('/search?q=' + encodeURIComponent(query)); }, diff --git a/src/client/app/mobile/views/components/user-timeline.vue b/src/client/app/mobile/views/components/user-timeline.vue index 7a04441f7..7cca6a55a 100644 --- a/src/client/app/mobile/views/components/user-timeline.vue +++ b/src/client/app/mobile/views/components/user-timeline.vue @@ -6,10 +6,10 @@ </div> <div class="empty" v-if="!fetching && notes.length == 0"> %fa:R comments% - {{ withMedia ? '%i18n:mobile.tags.mk-user-timeline.no-notes-with-media%' : '%i18n:mobile.tags.mk-user-timeline.no-notes%' }} + {{ withMedia ? '%i18n:@no-notes-with-media%' : '%i18n:@no-notes%' }} </div> <button v-if="!fetching && existMore" @click="more" :disabled="moreFetching" slot="tail"> - <span v-if="!moreFetching">%i18n:mobile.tags.mk-user-timeline.load-more%</span> + <span v-if="!moreFetching">%i18n:@load-more%</span> <span v-if="moreFetching">%i18n:common.loading%<mk-ellipsis/></span> </button> </mk-notes> diff --git a/src/client/app/mobile/views/components/users-list.vue b/src/client/app/mobile/views/components/users-list.vue index b11e4549d..8fa7a9cbe 100644 --- a/src/client/app/mobile/views/components/users-list.vue +++ b/src/client/app/mobile/views/components/users-list.vue @@ -1,14 +1,14 @@ <template> <div class="mk-users-list"> <nav> - <span :data-is-active="mode == 'all'" @click="mode = 'all'">%i18n:mobile.tags.mk-users-list.all%<span>{{ count }}</span></span> - <span v-if="os.isSignedIn && youKnowCount" :data-is-active="mode == 'iknow'" @click="mode = 'iknow'">%i18n:mobile.tags.mk-users-list.known%<span>{{ youKnowCount }}</span></span> + <span :data-is-active="mode == 'all'" @click="mode = 'all'">%i18n:@all%<span>{{ count }}</span></span> + <span v-if="os.isSignedIn && youKnowCount" :data-is-active="mode == 'iknow'" @click="mode = 'iknow'">%i18n:@known%<span>{{ youKnowCount }}</span></span> </nav> <div class="users" v-if="!fetching && users.length != 0"> <mk-user-preview v-for="u in users" :user="u" :key="u.id"/> </div> <button class="more" v-if="!fetching && next != null" @click="more" :disabled="moreFetching"> - <span v-if="!moreFetching">%i18n:mobile.tags.mk-users-list.load-more%</span> + <span v-if="!moreFetching">%i18n:@load-more%</span> <span v-if="moreFetching">%i18n:common.loading%<mk-ellipsis/></span> </button> <p class="no" v-if="!fetching && users.length == 0"> diff --git a/src/client/app/mobile/views/pages/drive.vue b/src/client/app/mobile/views/pages/drive.vue index 200379f22..2cf3f510a 100644 --- a/src/client/app/mobile/views/pages/drive.vue +++ b/src/client/app/mobile/views/pages/drive.vue @@ -3,7 +3,7 @@ <span slot="header"> <template v-if="folder">%fa:R folder-open%{{ folder.name }}</template> <template v-if="file"><mk-file-type-icon data-icon :type="file.type"/>{{ file.name }}</template> - <template v-if="!folder && !file">%fa:cloud%%i18n:mobile.tags.mk-drive-page.drive%</template> + <template v-if="!folder && !file">%fa:cloud%%i18n:@drive%</template> </span> <template slot="func"><button @click="fn">%fa:ellipsis-h%</button></template> <mk-drive diff --git a/src/client/app/mobile/views/pages/followers.vue b/src/client/app/mobile/views/pages/followers.vue index f4225d556..b1543b7cd 100644 --- a/src/client/app/mobile/views/pages/followers.vue +++ b/src/client/app/mobile/views/pages/followers.vue @@ -2,7 +2,7 @@ <mk-ui> <template slot="header" v-if="!fetching"> <img :src="`${user.avatarUrl}?thumbnail&size=64`" alt=""> - {{ '%i18n:mobile.tags.mk-user-followers-page.followers-of%'.replace('{}', name) }} + {{ '%i18n:@followers-of%'.replace('{}', name) }} </template> <mk-users-list v-if="!fetching" @@ -11,7 +11,7 @@ :you-know-count="user.followersYouKnowCount" @loaded="onLoaded" > - %i18n:mobile.tags.mk-user-followers.no-users% + %i18n:@no-users% </mk-users-list> </mk-ui> </template> @@ -52,7 +52,7 @@ export default Vue.extend({ this.user = user; this.fetching = false; - document.title = '%i18n:mobile.tags.mk-user-followers-page.followers-of%'.replace('{}', this.name) + ' | Misskey'; + document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | Misskey'; }); }, onLoaded() { diff --git a/src/client/app/mobile/views/pages/following.vue b/src/client/app/mobile/views/pages/following.vue index d0dcc117c..8dbdd5dba 100644 --- a/src/client/app/mobile/views/pages/following.vue +++ b/src/client/app/mobile/views/pages/following.vue @@ -2,7 +2,7 @@ <mk-ui> <template slot="header" v-if="!fetching"> <img :src="`${user.avatarUrl}?thumbnail&size=64`" alt=""> - {{ '%i18n:mobile.tags.mk-user-following-page.following-of%'.replace('{}', name) }} + {{ '%i18n:@following-of%'.replace('{}', name) }} </template> <mk-users-list v-if="!fetching" @@ -11,7 +11,7 @@ :you-know-count="user.followingYouKnowCount" @loaded="onLoaded" > - %i18n:mobile.tags.mk-user-following.no-users% + %i18n:@no-users% </mk-users-list> </mk-ui> </template> @@ -51,7 +51,7 @@ export default Vue.extend({ this.user = user; this.fetching = false; - document.title = '%i18n:mobile.tags.mk-user-followers-page.followers-of%'.replace('{}', this.name) + ' | Misskey'; + document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | Misskey'; }); }, onLoaded() { diff --git a/src/client/app/mobile/views/pages/messaging-room.vue b/src/client/app/mobile/views/pages/messaging-room.vue index 3b6fb11db..d436960f2 100644 --- a/src/client/app/mobile/views/pages/messaging-room.vue +++ b/src/client/app/mobile/views/pages/messaging-room.vue @@ -33,7 +33,7 @@ export default Vue.extend({ this.user = user; this.fetching = false; - document.title = `%i18n:mobile.tags.mk-messaging-room-page.message%: ${Vue.filter('userName')(this.user)} | Misskey`; + document.title = `%i18n:@message%: ${Vue.filter('userName')(this.user)} | Misskey`; }); } } diff --git a/src/client/app/mobile/views/pages/messaging.vue b/src/client/app/mobile/views/pages/messaging.vue index fa735a253..b52df7d3c 100644 --- a/src/client/app/mobile/views/pages/messaging.vue +++ b/src/client/app/mobile/views/pages/messaging.vue @@ -1,6 +1,6 @@ <template> <mk-ui> - <span slot="header">%fa:R comments%%i18n:mobile.tags.mk-messaging-page.message%</span> + <span slot="header">%fa:R comments%%i18n:@message%</span> <mk-messaging @navigate="navigate" :header-top="48"/> </mk-ui> </template> @@ -11,7 +11,7 @@ import getAcct from '../../../../../acct/render'; export default Vue.extend({ mounted() { - document.title = 'Misskey %i18n:mobile.tags.mk-messaging-page.message%'; + document.title = 'Misskey %i18n:@message%'; document.documentElement.style.background = '#fff'; }, methods: { diff --git a/src/client/app/mobile/views/pages/note.vue b/src/client/app/mobile/views/pages/note.vue index 89b8c776f..c866be8a1 100644 --- a/src/client/app/mobile/views/pages/note.vue +++ b/src/client/app/mobile/views/pages/note.vue @@ -1,12 +1,12 @@ <template> <mk-ui> - <span slot="header">%fa:R sticky-note%%i18n:mobile.tags.mk-note-page.title%</span> + <span slot="header">%fa:R sticky-note%%i18n:@title%</span> <main v-if="!fetching"> - <a v-if="note.next" :href="note.next">%fa:angle-up%%i18n:mobile.tags.mk-note-page.next%</a> + <a v-if="note.next" :href="note.next">%fa:angle-up%%i18n:@next%</a> <div> <mk-note-detail :note="note"/> </div> - <a v-if="note.prev" :href="note.prev">%fa:angle-down%%i18n:mobile.tags.mk-note-page.prev%</a> + <a v-if="note.prev" :href="note.prev">%fa:angle-down%%i18n:@prev%</a> </main> </mk-ui> </template> diff --git a/src/client/app/mobile/views/pages/notifications.vue b/src/client/app/mobile/views/pages/notifications.vue index 6d45e22a9..5ae94590c 100644 --- a/src/client/app/mobile/views/pages/notifications.vue +++ b/src/client/app/mobile/views/pages/notifications.vue @@ -1,6 +1,6 @@ <template> <mk-ui> - <span slot="header">%fa:R bell%%i18n:mobile.tags.mk-notifications-page.notifications%</span> + <span slot="header">%fa:R bell%%i18n:@notifications%</span> <template slot="func"><button @click="fn">%fa:check%</button></template> <mk-notifications @fetched="onFetched"/> </mk-ui> @@ -12,14 +12,14 @@ import Progress from '../../../common/scripts/loading'; export default Vue.extend({ mounted() { - document.title = 'Misskey | %i18n:mobile.tags.mk-notifications-page.notifications%'; + document.title = 'Misskey | %i18n:@notifications%'; document.documentElement.style.background = '#313a42'; Progress.start(); }, methods: { fn() { - const ok = window.confirm('%i18n:mobile.tags.mk-notifications-page.read-all%'); + const ok = window.confirm('%i18n:@read-all%'); if (!ok) return; (this as any).api('notifications/markAsRead_all'); diff --git a/src/client/app/mobile/views/pages/profile-setting.vue b/src/client/app/mobile/views/pages/profile-setting.vue index 7f0ff5aad..846be5995 100644 --- a/src/client/app/mobile/views/pages/profile-setting.vue +++ b/src/client/app/mobile/views/pages/profile-setting.vue @@ -1,38 +1,38 @@ <template> <mk-ui> - <span slot="header">%fa:user%%i18n:mobile.tags.mk-profile-setting-page.title%</span> + <span slot="header">%fa:user%%i18n:@title%</span> <div :class="$style.content"> - <p>%fa:info-circle%%i18n:mobile.tags.mk-profile-setting.will-be-published%</p> + <p>%fa:info-circle%%i18n:@will-be-published%</p> <div :class="$style.form"> <div :style="os.i.bannerUrl ? `background-image: url(${os.i.bannerUrl}?thumbnail&size=1024)` : ''" @click="setBanner"> <img :src="`${os.i.avatarUrl}?thumbnail&size=200`" alt="avatar" @click="setAvatar"/> </div> <label> - <p>%i18n:mobile.tags.mk-profile-setting.name%</p> + <p>%i18n:@name%</p> <input v-model="name" type="text"/> </label> <label> - <p>%i18n:mobile.tags.mk-profile-setting.location%</p> + <p>%i18n:@location%</p> <input v-model="location" type="text"/> </label> <label> - <p>%i18n:mobile.tags.mk-profile-setting.description%</p> + <p>%i18n:@description%</p> <textarea v-model="description"></textarea> </label> <label> - <p>%i18n:mobile.tags.mk-profile-setting.birthday%</p> + <p>%i18n:@birthday%</p> <input v-model="birthday" type="date"/> </label> <label> - <p>%i18n:mobile.tags.mk-profile-setting.avatar%</p> - <button @click="setAvatar" :disabled="avatarSaving">%i18n:mobile.tags.mk-profile-setting.set-avatar%</button> + <p>%i18n:@avatar%</p> + <button @click="setAvatar" :disabled="avatarSaving">%i18n:@set-avatar%</button> </label> <label> - <p>%i18n:mobile.tags.mk-profile-setting.banner%</p> - <button @click="setBanner" :disabled="bannerSaving">%i18n:mobile.tags.mk-profile-setting.set-banner%</button> + <p>%i18n:@banner%</p> + <button @click="setBanner" :disabled="bannerSaving">%i18n:@set-banner%</button> </label> </div> - <button :class="$style.save" @click="save" :disabled="saving">%fa:check%%i18n:mobile.tags.mk-profile-setting.save%</button> + <button :class="$style.save" @click="save" :disabled="saving">%fa:check%%i18n:@save%</button> </div> </mk-ui> </template> @@ -58,7 +58,7 @@ export default Vue.extend({ this.birthday = (this as any).os.i.profile.birthday; }, mounted() { - document.title = 'Misskey | %i18n:mobile.tags.mk-profile-setting-page.title%'; + document.title = 'Misskey | %i18n:@title%'; document.documentElement.style.background = '#313a42'; }, methods: { @@ -72,7 +72,7 @@ export default Vue.extend({ avatarId: file.id }).then(() => { this.avatarSaving = false; - alert('%i18n:mobile.tags.mk-profile-setting.avatar-saved%'); + alert('%i18n:@avatar-saved%'); }); }); }, @@ -86,7 +86,7 @@ export default Vue.extend({ bannerId: file.id }).then(() => { this.bannerSaving = false; - alert('%i18n:mobile.tags.mk-profile-setting.banner-saved%'); + alert('%i18n:@banner-saved%'); }); }); }, @@ -100,7 +100,7 @@ export default Vue.extend({ birthday: this.birthday || null }).then(() => { this.saving = false; - alert('%i18n:mobile.tags.mk-profile-setting.saved%'); + alert('%i18n:@saved%'); }); } } diff --git a/src/client/app/mobile/views/pages/search.vue b/src/client/app/mobile/views/pages/search.vue index a96832bee..2ea2c7338 100644 --- a/src/client/app/mobile/views/pages/search.vue +++ b/src/client/app/mobile/views/pages/search.vue @@ -3,9 +3,9 @@ <span slot="header">%fa:search% {{ q }}</span> <main v-if="!fetching"> <mk-notes :class="$style.notes" :notes="notes"> - <span v-if="notes.length == 0">{{ '%i18n:mobile.tags.mk-search-notes.empty%'.replace('{}', q) }}</span> + <span v-if="notes.length == 0">{{ '%i18n:@empty%'.replace('{}', q) }}</span> <button v-if="existMore" @click="more" :disabled="fetching" slot="tail"> - <span v-if="!fetching">%i18n:mobile.tags.mk-timeline.load-more%</span> + <span v-if="!fetching">%i18n:@load-more%</span> <span v-if="fetching">%i18n:common.loading%<mk-ellipsis/></span> </button> </mk-notes> @@ -38,7 +38,7 @@ export default Vue.extend({ } }, mounted() { - document.title = `%i18n:mobile.tags.mk-search-page.search%: ${this.q} | Misskey`; + document.title = `%i18n:@search%: ${this.q} | Misskey`; document.documentElement.style.background = '#313a42'; this.fetch(); diff --git a/src/client/app/mobile/views/pages/selectdrive.vue b/src/client/app/mobile/views/pages/selectdrive.vue index 3480a0d10..e8e256cae 100644 --- a/src/client/app/mobile/views/pages/selectdrive.vue +++ b/src/client/app/mobile/views/pages/selectdrive.vue @@ -1,7 +1,7 @@ <template> <div class="mk-selectdrive"> <header> - <h1>%i18n:mobile.tags.mk-selectdrive-page.select-file%<span class="count" v-if="files.length > 0">({{ files.length }})</span></h1> + <h1>%i18n:@select-file%<span class="count" v-if="files.length > 0">({{ files.length }})</span></h1> <button class="upload" @click="upload">%fa:upload%</button> <button v-if="multiple" class="ok" @click="ok">%fa:check%</button> </header> @@ -25,7 +25,7 @@ export default Vue.extend({ } }, mounted() { - document.title = '%i18n:desktop.tags.mk-selectdrive-page.title%'; + document.title = '%i18n:@title%'; }, methods: { onSelected(file) { diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue index 8d248f5cb..d48c69b06 100644 --- a/src/client/app/mobile/views/pages/settings.vue +++ b/src/client/app/mobile/views/pages/settings.vue @@ -1,16 +1,16 @@ <template> <mk-ui> - <span slot="header">%fa:cog%%i18n:mobile.tags.mk-settings-page.settings%</span> + <span slot="header">%fa:cog%%i18n:@settings%</span> <div :class="$style.content"> - <p v-html="'%i18n:mobile.tags.mk-settings.signed-in-as%'.replace('{}', '<b>' + name + '</b>')"></p> + <p v-html="'%i18n:@signed-in-as%'.replace('{}', '<b>' + name + '</b>')"></p> <ul> - <li><router-link to="./settings/profile">%fa:user%%i18n:mobile.tags.mk-settings-page.profile%%fa:angle-right%</router-link></li> - <li><router-link to="./settings/authorized-apps">%fa:puzzle-piece%%i18n:mobile.tags.mk-settings-page.applications%%fa:angle-right%</router-link></li> - <li><router-link to="./settings/twitter">%fa:B twitter%%i18n:mobile.tags.mk-settings-page.twitter-integration%%fa:angle-right%</router-link></li> - <li><router-link to="./settings/signin-history">%fa:sign-in-alt%%i18n:mobile.tags.mk-settings-page.signin-history%%fa:angle-right%</router-link></li> + <li><router-link to="./settings/profile">%fa:user%%i18n:@profile%%fa:angle-right%</router-link></li> + <li><router-link to="./settings/authorized-apps">%fa:puzzle-piece%%i18n:@applications%%fa:angle-right%</router-link></li> + <li><router-link to="./settings/twitter">%fa:B twitter%%i18n:@twitter-integration%%fa:angle-right%</router-link></li> + <li><router-link to="./settings/signin-history">%fa:sign-in-alt%%i18n:@signin-history%%fa:angle-right%</router-link></li> </ul> <ul> - <li><a @click="signout">%fa:power-off%%i18n:mobile.tags.mk-settings-page.signout%</a></li> + <li><a @click="signout">%fa:power-off%%i18n:@signout%</a></li> </ul> <p><small>ver {{ version }} ({{ codename }})</small></p> </div> @@ -34,7 +34,7 @@ export default Vue.extend({ } }, mounted() { - document.title = 'Misskey | %i18n:mobile.tags.mk-settings-page.settings%'; + document.title = 'Misskey | %i18n:@settings%'; document.documentElement.style.background = '#313a42'; }, methods: { diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue index 3d9fbda94..ea384308e 100644 --- a/src/client/app/mobile/views/pages/user.vue +++ b/src/client/app/mobile/views/pages/user.vue @@ -14,7 +14,7 @@ <div class="title"> <h1>{{ user | userName }}</h1> <span class="username">@{{ user | acct }}</span> - <span class="followed" v-if="user.isFollowed">%i18n:mobile.tags.mk-user.follows-you%</span> + <span class="followed" v-if="user.isFollowed">%i18n:@follows-you%</span> </div> <div class="description">{{ user.description }}</div> <div class="info"> @@ -28,24 +28,24 @@ <div class="status"> <a> <b>{{ user.notesCount | number }}</b> - <i>%i18n:mobile.tags.mk-user.notes%</i> + <i>%i18n:@notes%</i> </a> <a :href="user | userPage('following')"> <b>{{ user.followingCount | number }}</b> - <i>%i18n:mobile.tags.mk-user.following%</i> + <i>%i18n:@following%</i> </a> <a :href="user | userPage('followers')"> <b>{{ user.followersCount | number }}</b> - <i>%i18n:mobile.tags.mk-user.followers%</i> + <i>%i18n:@followers%</i> </a> </div> </div> </header> <nav> <div class="nav-container"> - <a :data-is-active=" page == 'home' " @click="page = 'home'">%i18n:mobile.tags.mk-user.overview%</a> - <a :data-is-active=" page == 'notes' " @click="page = 'notes'">%i18n:mobile.tags.mk-user.timeline%</a> - <a :data-is-active=" page == 'media' " @click="page = 'media'">%i18n:mobile.tags.mk-user.media%</a> + <a :data-is-active=" page == 'home' " @click="page = 'home'">%i18n:@overview%</a> + <a :data-is-active=" page == 'notes' " @click="page = 'notes'">%i18n:@timeline%</a> + <a :data-is-active=" page == 'media' " @click="page = 'media'">%i18n:@media%</a> </div> </nav> <div class="body"> diff --git a/src/client/app/mobile/views/pages/user/home.followers-you-know.vue b/src/client/app/mobile/views/pages/user/home.followers-you-know.vue index 2841c0d63..6f809d889 100644 --- a/src/client/app/mobile/views/pages/user/home.followers-you-know.vue +++ b/src/client/app/mobile/views/pages/user/home.followers-you-know.vue @@ -1,12 +1,12 @@ <template> <div class="root followers-you-know"> - <p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:mobile.tags.mk-user-overview-followers-you-know.loading%<mk-ellipsis/></p> + <p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@loading%<mk-ellipsis/></p> <div v-if="!fetching && users.length > 0"> <a v-for="user in users" :key="user.id" :href="user | userPage"> <img :src="`${user.avatarUrl}?thumbnail&size=64`" :alt="user | userName"/> </a> </div> - <p class="empty" v-if="!fetching && users.length == 0">%i18n:mobile.tags.mk-user-overview-followers-you-know.no-users%</p> + <p class="empty" v-if="!fetching && users.length == 0">%i18n:@no-users%</p> </div> </template> diff --git a/src/client/app/mobile/views/pages/user/home.friends.vue b/src/client/app/mobile/views/pages/user/home.friends.vue index 469781abb..cf257b124 100644 --- a/src/client/app/mobile/views/pages/user/home.friends.vue +++ b/src/client/app/mobile/views/pages/user/home.friends.vue @@ -1,10 +1,10 @@ <template> <div class="root friends"> - <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:mobile.tags.mk-user-overview-frequently-replied-users.loading%<mk-ellipsis/></p> + <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@loading%<mk-ellipsis/></p> <div v-if="!fetching && users.length > 0"> <mk-user-card v-for="user in users" :key="user.id" :user="user"/> </div> - <p class="empty" v-if="!fetching && users.length == 0">%i18n:mobile.tags.mk-user-overview-frequently-replied-users.no-users%</p> + <p class="empty" v-if="!fetching && users.length == 0">%i18n:@no-users%</p> </div> </template> diff --git a/src/client/app/mobile/views/pages/user/home.notes.vue b/src/client/app/mobile/views/pages/user/home.notes.vue index 02afed9b8..6483402a5 100644 --- a/src/client/app/mobile/views/pages/user/home.notes.vue +++ b/src/client/app/mobile/views/pages/user/home.notes.vue @@ -1,10 +1,10 @@ <template> <div class="root notes"> - <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:mobile.tags.mk-user-overview-notes.loading%<mk-ellipsis/></p> + <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@loading%<mk-ellipsis/></p> <div v-if="!fetching && notes.length > 0"> <mk-note-card v-for="note in notes" :key="note.id" :note="note"/> </div> - <p class="empty" v-if="!fetching && notes.length == 0">%i18n:mobile.tags.mk-user-overview-notes.no-notes%</p> + <p class="empty" v-if="!fetching && notes.length == 0">%i18n:@no-notes%</p> </div> </template> diff --git a/src/client/app/mobile/views/pages/user/home.photos.vue b/src/client/app/mobile/views/pages/user/home.photos.vue index 0e0d6926a..bfd2aa833 100644 --- a/src/client/app/mobile/views/pages/user/home.photos.vue +++ b/src/client/app/mobile/views/pages/user/home.photos.vue @@ -1,6 +1,6 @@ <template> <div class="root photos"> - <p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:mobile.tags.mk-user-overview-photos.loading%<mk-ellipsis/></p> + <p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@loading%<mk-ellipsis/></p> <div class="stream" v-if="!fetching && images.length > 0"> <a v-for="image in images" class="img" @@ -8,7 +8,7 @@ :href="image.note | notePage" ></a> </div> - <p class="empty" v-if="!fetching && images.length == 0">%i18n:mobile.tags.mk-user-overview-photos.no-photos%</p> + <p class="empty" v-if="!fetching && images.length == 0">%i18n:@no-photos%</p> </div> </template> diff --git a/src/client/app/mobile/views/pages/user/home.vue b/src/client/app/mobile/views/pages/user/home.vue index c0cd9b8da..4ba2ffd1d 100644 --- a/src/client/app/mobile/views/pages/user/home.vue +++ b/src/client/app/mobile/views/pages/user/home.vue @@ -2,36 +2,36 @@ <div class="root home"> <mk-note-detail v-if="user.pinnedNote" :note="user.pinnedNote" :compact="true"/> <section class="recent-notes"> - <h2>%fa:R comments%%i18n:mobile.tags.mk-user-overview.recent-notes%</h2> + <h2>%fa:R comments%%i18n:@recent-notes%</h2> <div> <x-notes :user="user"/> </div> </section> <section class="images"> - <h2>%fa:image%%i18n:mobile.tags.mk-user-overview.images%</h2> + <h2>%fa:image%%i18n:@images%</h2> <div> <x-photos :user="user"/> </div> </section> <section class="activity"> - <h2>%fa:chart-bar%%i18n:mobile.tags.mk-user-overview.activity%</h2> + <h2>%fa:chart-bar%%i18n:@activity%</h2> <div> <mk-activity :user="user"/> </div> </section> <section class="frequently-replied-users"> - <h2>%fa:users%%i18n:mobile.tags.mk-user-overview.frequently-replied-users%</h2> + <h2>%fa:users%%i18n:@frequently-replied-users%</h2> <div> <x-friends :user="user"/> </div> </section> <section class="followers-you-know" v-if="os.isSignedIn && os.i.id !== user.id"> - <h2>%fa:users%%i18n:mobile.tags.mk-user-overview.followers-you-know%</h2> + <h2>%fa:users%%i18n:@followers-you-know%</h2> <div> <x-followers-you-know :user="user"/> </div> </section> - <p v-if="user.host === null">%i18n:mobile.tags.mk-user-overview.last-used-at%: <b><mk-time :time="user.lastUsedAt"/></b></p> + <p v-if="user.host === null">%i18n:@last-used-at%: <b><mk-time :time="user.lastUsedAt"/></b></p> </div> </template> diff --git a/webpack/loaders/replace.js b/webpack/loaders/replace.js index 03cf1fcd7..8018e9cec 100644 --- a/webpack/loaders/replace.js +++ b/webpack/loaders/replace.js @@ -9,7 +9,10 @@ module.exports = function(src) { const options = loaderUtils.getOptions(this); const search = options.search; const g = search[search.length - 1] == 'g'; - const replace = global[options.replace]; + const file = this.resourcePath.replace(/\\/g, '/'); + const replace = global[options.replace].bind(null, { + src: file + }); if (typeof search != 'string' || search.length == 0) console.error('invalid search'); if (typeof replace != 'function') console.error('invalid replacer:', replace, this.request); src = src.replace(new RegExp(trim(search, g), g ? 'g' : ''), replace);