From fd1eea21d2578ad3a2491ac48e833a4b227dc5d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Miko=C5=82ajczak?= <me@m4sk.in> Date: Sun, 27 May 2018 14:51:57 +0200 Subject: [PATCH] some moar i18n MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marcin Mikołajczak <me@m4sk.in> --- locales/ja.yml | 44 +++++++++++++++++++ .../views/components/drive.file-detail.vue | 2 +- .../app/mobile/views/components/drive.vue | 16 +++---- .../mobile/views/components/friends-maker.vue | 10 ++--- .../mobile/views/components/note-detail.vue | 6 +-- .../mobile/views/components/note-preview.vue | 6 +-- .../app/mobile/views/components/note.sub.vue | 6 +-- .../app/mobile/views/components/note.vue | 6 +-- .../app/mobile/views/components/notes.vue | 4 +- .../app/mobile/views/components/post-form.vue | 10 ++--- .../views/components/sub-note-content.vue | 2 +- 11 files changed, 78 insertions(+), 34 deletions(-) diff --git a/locales/ja.yml b/locales/ja.yml index 0fcbca536..ab87494f9 100644 --- a/locales/ja.yml +++ b/locales/ja.yml @@ -724,6 +724,16 @@ mobile/views/components/drive.vue: load-more: "もっと読み込む" nothing-in-drive: "ドライブには何もありません" folder-is-empty: "このフォルダは空です" + prompt: "何をしますか?(数字を入力してください): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>" + deletion-alert: "ごめんなさい!フォルダの削除は未実装です...。" + folder-name: "フォルダー名" + root-rename-alert: "現在いる場所はルートで、フォルダではないため名前の変更はできません。名前を変更したいフォルダに移動してからやってください。" + root-move-alert: "現在いる場所はルートで、フォルダではないため移動はできません。移動したいフォルダに移動してからやってください。" + url-prompt: "アップロードしたいファイルのURL" + uploading: "アップロードをリクエストしました。アップロードが完了するまで時間がかかる場合があります。" + +mobile/views/components/drive-file-detail.vue: + rename: "名前を変更" mobile/views/components/drive-file-chooser.vue: select-file: "ファイルを選択" @@ -742,26 +752,60 @@ mobile/views/components/follow-button.vue: follow: "フォロー" unfollow: "フォロー解除" +mobile/views/components/friends-maker.vue: + title: "気になるユーザーをフォロー" + empty: "おすすめのユーザーは見つかりませんでした。" + fetching: "読み込んでいます" + refresh: "もっと見る" + close: "閉じる" + mobile/views/components/note.vue: reposted-by: "{}がRenote" + more: "もっと見る" + less: "隠す" + hidden: "この投稿は非公開です" + location: "位置情報" mobile/views/components/note-detail.vue: reply: "返信" reaction: "リアクション" + is-renote: "がRenote" + hidden: "この投稿は非公開です" + location: "位置情報" + +mobile/views/components/note-preview.vue: + admin: "admin" + bot: "bot" + cat: "cat" + +mobile/views/components/note-sub.vue: + admin: "admin" + bot: "bot" + cat: "cat" + +mobile/views/components/notes.vue: + failed: "読み込みに失敗しました。" + retry: "リトライ" mobile/views/components/notifications.vue: more: "もっと見る" empty: "ありません!" mobile/views/components/post-form.vue: + add-visible-user: "ユーザーを追加" submit: "投稿" reply: "返信" renote: "Renote" renote-placeholder: "この投稿を引用... (オプション)" reply-placeholder: "この投稿への返信..." note-placeholder: "いまどうしてる?" + cw-placeholder: "内容への注釈 (オプション)" + location-alert: "お使いの端末は位置情報に対応していません" + error: "エラー" + username-prompt: "ユーザー名を入力してください" mobile/views/components/sub-note-content.vue: + hidden: "この投稿は非公開です" media-count: "{}個のメディア" poll: "投票" 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 ddf17d272..ad2913526 100644 --- a/src/client/app/mobile/views/components/drive.file-detail.vue +++ b/src/client/app/mobile/views/components/drive.file-detail.vue @@ -93,7 +93,7 @@ export default Vue.extend({ }, methods: { rename() { - const name = window.prompt('名前を変更', this.file.name); + const name = window.prompt('%i18n:@rename%', this.file.name); if (name == null || name == '' || name == this.file.name) return; (this as any).api('drive/files/update', { fileId: this.file.id, diff --git a/src/client/app/mobile/views/components/drive.vue b/src/client/app/mobile/views/components/drive.vue index 8e35e6c88..8adf6d854 100644 --- a/src/client/app/mobile/views/components/drive.vue +++ b/src/client/app/mobile/views/components/drive.vue @@ -372,7 +372,7 @@ export default Vue.extend({ }, openContextMenu() { - const fn = window.prompt('何をしますか?(数字を入力してください): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>'); + const fn = window.prompt('%i18n:@prompt%'); if (fn == null || fn == '') return; switch (fn) { case '1': @@ -391,7 +391,7 @@ export default Vue.extend({ this.moveFolder(); break; case '6': - alert('ごめんなさい!フォルダの削除は未実装です...。'); + alert('%i18n:@deletion-alert%'); break; } }, @@ -401,7 +401,7 @@ export default Vue.extend({ }, createFolder() { - const name = window.prompt('フォルダー名'); + const name = window.prompt('%i18n:@folder-name%'); if (name == null || name == '') return; (this as any).api('drive/folders/create', { name: name, @@ -413,10 +413,10 @@ export default Vue.extend({ renameFolder() { if (this.folder == null) { - alert('現在いる場所はルートで、フォルダではないため名前の変更はできません。名前を変更したいフォルダに移動してからやってください。'); + alert('%i18n:@root-rename-alert%'); return; } - const name = window.prompt('フォルダー名', this.folder.name); + const name = window.prompt('%i18n:@folder-name%', this.folder.name); if (name == null || name == '') return; (this as any).api('drive/folders/update', { name: name, @@ -428,7 +428,7 @@ export default Vue.extend({ moveFolder() { if (this.folder == null) { - alert('現在いる場所はルートで、フォルダではないため移動はできません。移動したいフォルダに移動してからやってください。'); + alert('%i18n:@root-move-alert%'); return; } (this as any).apis.chooseDriveFolder().then(folder => { @@ -442,13 +442,13 @@ export default Vue.extend({ }, urlUpload() { - const url = window.prompt('アップロードしたいファイルのURL'); + const url = window.prompt('%i18n:@url-prompt%'); if (url == null || url == '') return; (this as any).api('drive/files/upload_from_url', { url: url, folderId: this.folder ? this.folder.id : undefined }); - alert('アップロードをリクエストしました。アップロードが完了するまで時間がかかる場合があります。'); + alert('%i18n:@uploading%'); }, onChangeLocalFile() { diff --git a/src/client/app/mobile/views/components/friends-maker.vue b/src/client/app/mobile/views/components/friends-maker.vue index ba4abe341..e0461d2bc 100644 --- a/src/client/app/mobile/views/components/friends-maker.vue +++ b/src/client/app/mobile/views/components/friends-maker.vue @@ -1,13 +1,13 @@ <template> <div class="mk-friends-maker"> - <p class="title">気になるユーザーをフォロー:</p> + <p class="title">%i18n:@title%:</p> <div class="users" 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">おすすめのユーザーは見つかりませんでした。</p> - <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%読み込んでいます<mk-ellipsis/></p> - <a class="refresh" @click="refresh">もっと見る</a> - <button class="close" @click="close" title="閉じる">%fa:times%</button> + <p class="empty" v-if="!fetching && users.length == 0">%i18n:@empty%</p> + <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@fetching%<mk-ellipsis/></p> + <a class="refresh" @click="refresh">%i18n:@refresh%</a> + <button class="close" @click="close" title="%i18n:@close%">%fa:times%</button> </div> </template> diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue index eb934431d..9282848d7 100644 --- a/src/client/app/mobile/views/components/note-detail.vue +++ b/src/client/app/mobile/views/components/note-detail.vue @@ -17,7 +17,7 @@ </div> <div class="renote" v-if="isRenote"> <p> - <mk-avatar class="avatar" :user="note.user"/>%fa:retweet%<router-link class="name" :to="note.user | userPage">{{ note.user | userName }}</router-link>がRenote + <mk-avatar class="avatar" :user="note.user"/>%fa:retweet%<router-link class="name" :to="note.user | userPage">{{ note.user | userName }}</router-link>%i18n:@is-renote% </p> </div> <article> @@ -30,7 +30,7 @@ </header> <div class="body"> <div class="text"> - <span v-if="p.isHidden" style="opacity: 0.5">(この投稿は非公開です)</span> + <span v-if="p.isHidden" style="opacity: 0.5">(%i18n:@hidden%)</span> <mk-note-html v-if="p.text" :text="p.text" :i="$store.state.i"/> </div> <div class="tags" v-if="p.tags && p.tags.length > 0"> @@ -41,7 +41,7 @@ </div> <mk-poll v-if="p.poll" :note="p"/> <mk-url-preview v-for="url in urls" :url="url" :key="url"/> - <a class="location" v-if="p.geo" :href="`http://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a> + <a class="location" v-if="p.geo" :href="`http://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a> <div class="map" v-if="p.geo" ref="map"></div> <div class="renote" v-if="p.renote"> <mk-note-preview :note="p.renote"/> diff --git a/src/client/app/mobile/views/components/note-preview.vue b/src/client/app/mobile/views/components/note-preview.vue index f3805ac48..1c97e610d 100644 --- a/src/client/app/mobile/views/components/note-preview.vue +++ b/src/client/app/mobile/views/components/note-preview.vue @@ -5,9 +5,9 @@ <header> <mk-avatar class="avatar" :user="note.user" v-if="$store.state.device.postStyle == 'smart'"/> <router-link class="name" :to="note.user | userPage">{{ note.user | userName }}</router-link> - <span class="is-admin" v-if="note.user.isAdmin">admin</span> - <span class="is-bot" v-if="note.user.isBot">bot</span> - <span class="is-cat" v-if="note.user.isCat">cat</span> + <span class="is-admin" v-if="note.user.isAdmin">%i18n:@admin%</span> + <span class="is-bot" v-if="note.user.isBot">%i18n:@bot%</span> + <span class="is-cat" v-if="note.user.isCat">%i18n:@cat%</span> <span class="username"><mk-acct :user="note.user"/></span> <router-link class="time" :to="note | notePage"> <mk-time :time="note.createdAt"/> diff --git a/src/client/app/mobile/views/components/note.sub.vue b/src/client/app/mobile/views/components/note.sub.vue index 149a78ecd..42787e6d7 100644 --- a/src/client/app/mobile/views/components/note.sub.vue +++ b/src/client/app/mobile/views/components/note.sub.vue @@ -5,9 +5,9 @@ <header> <mk-avatar class="avatar" :user="note.user" v-if="$store.state.device.postStyle == 'smart'"/> <router-link class="name" :to="note.user | userPage">{{ note.user | userName }}</router-link> - <span class="is-admin" v-if="note.user.isAdmin">admin</span> - <span class="is-bot" v-if="note.user.isBot">bot</span> - <span class="is-cat" v-if="note.user.isCat">cat</span> + <span class="is-admin" v-if="note.user.isAdmin">%i18n:@admin%</span> + <span class="is-bot" v-if="note.user.isBot">%i18n:@bot%</span> + <span class="is-cat" v-if="note.user.isCat">%i18n:@cat%</span> <span class="username"><mk-acct :user="note.user"/></span> <div class="info"> <span class="mobile" v-if="note.viaMobile">%fa:mobile-alt%</span> diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue index 42d3ffe40..5cc864f31 100644 --- a/src/client/app/mobile/views/components/note.vue +++ b/src/client/app/mobile/views/components/note.vue @@ -37,11 +37,11 @@ <div class="body"> <p v-if="p.cw != null" class="cw"> <span class="text" v-if="p.cw != ''">{{ p.cw }}</span> - <span class="toggle" @click="showContent = !showContent">{{ showContent ? '隠す' : 'もっと見る' }}</span> + <span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@less%' : '%i18n:@more%' }}</span> </p> <div class="content" v-show="p.cw == null || showContent"> <div class="text"> - <span v-if="p.isHidden" style="opacity: 0.5">(この投稿は非公開です)</span> + <span v-if="p.isHidden" style="opacity: 0.5">(%i18n:@hidden%)</span> <a class="reply" v-if="p.reply">%fa:reply%</a> <mk-note-html v-if="p.text && !canHideText(p)" :text="p.text" :i="$store.state.i" :class="$style.text"/> <a class="rp" v-if="p.renote != null">RP:</a> @@ -54,7 +54,7 @@ <router-link v-for="tag in p.tags" :key="tag" :to="`/search?q=#${tag}`">{{ tag }}</router-link> </div> <mk-url-preview v-for="url in urls" :url="url" :key="url"/> - <a class="location" v-if="p.geo" :href="`http://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a> + <a class="location" v-if="p.geo" :href="`http://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a> <div class="map" v-if="p.geo" ref="map"></div> <div class="renote" v-if="p.renote"> <mk-note-preview :note="p.renote"/> diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue index fbba11166..09cee966a 100644 --- a/src/client/app/mobile/views/components/notes.vue +++ b/src/client/app/mobile/views/components/notes.vue @@ -9,8 +9,8 @@ </div> <div v-if="!fetching && requestInitPromise != null"> - <p>読み込みに失敗しました。</p> - <button @click="resolveInitPromise">リトライ</button> + <p>%i18n:@failed%</p> + <button @click="resolveInitPromise">%i18n:@retry%</button> </div> <transition-group name="mk-notes" class="transition"> diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue index f999988c6..f5badb48c 100644 --- a/src/client/app/mobile/views/components/post-form.vue +++ b/src/client/app/mobile/views/components/post-form.vue @@ -17,9 +17,9 @@ <mk-note-preview v-if="renote" :note="renote"/> <div v-if="visibility == 'specified'" class="visibleUsers"> <span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span> - <a @click="addVisibleUser">+ユーザーを追加</a> + <a @click="addVisibleUser">+%i18n:@add-visible-user%</a> </div> - <input v-show="useCw" v-model="cw" placeholder="内容への注釈 (オプション)"> + <input v-show="useCw" v-model="cw" placeholder="%i18n:@cw-placeholder%"> <textarea v-model="text" ref="text" :disabled="posting" :placeholder="reply ? '%i18n:@reply-placeholder%' : renote ? '%i18n:@renote-placeholder%' : '%i18n:@note-placeholder%'"></textarea> <div class="attaches" v-show="files.length != 0"> <x-draggable class="files" :list="files" :options="{ animation: 150 }"> @@ -141,14 +141,14 @@ export default Vue.extend({ setGeo() { if (navigator.geolocation == null) { - alert('お使いの端末は位置情報に対応していません'); + alert('%i18n:@location-alert%'); return; } navigator.geolocation.getCurrentPosition(pos => { this.geo = pos.coords; }, err => { - alert('エラー: ' + err.message); + alert('%i18n:@error%: ' + err.message); }, { enableHighAccuracy: true }); @@ -171,7 +171,7 @@ export default Vue.extend({ addVisibleUser() { (this as any).apis.input({ - title: 'ユーザー名を入力してください' + title: '%i18n:@username-prompt%' }).then(username => { (this as any).api('users/show', { username 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 bb96d6514..023dec70d 100644 --- a/src/client/app/mobile/views/components/sub-note-content.vue +++ b/src/client/app/mobile/views/components/sub-note-content.vue @@ -1,7 +1,7 @@ <template> <div class="mk-sub-note-content"> <div class="body"> - <span v-if="note.isHidden" style="opacity: 0.5">(この投稿は非公開です)</span> + <span v-if="note.isHidden" style="opacity: 0.5">(%i18n:@hidden%)</span> <a class="reply" v-if="note.replyId">%fa:reply%</a> <mk-note-html v-if="note.text" :text="note.text" :i="$store.state.i"/> <a class="rp" v-if="note.renoteId">RP: ...</a>