Merge pull request #1653 from m4sk1n/master

some moar i18n
This commit is contained in:
syuilo 2018-05-27 21:57:16 +09:00 committed by GitHub
commit beb8da9283
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 78 additions and 34 deletions

View file

@ -724,6 +724,16 @@ mobile/views/components/drive.vue:
load-more: "もっと読み込む" load-more: "もっと読み込む"
nothing-in-drive: "ドライブには何もありません" nothing-in-drive: "ドライブには何もありません"
folder-is-empty: "このフォルダは空です" 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: mobile/views/components/drive-file-chooser.vue:
select-file: "ファイルを選択" select-file: "ファイルを選択"
@ -742,26 +752,60 @@ mobile/views/components/follow-button.vue:
follow: "フォロー" follow: "フォロー"
unfollow: "フォロー解除" unfollow: "フォロー解除"
mobile/views/components/friends-maker.vue:
title: "気になるユーザーをフォロー"
empty: "おすすめのユーザーは見つかりませんでした。"
fetching: "読み込んでいます"
refresh: "もっと見る"
close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
hidden: "この投稿は非公開です"
location: "位置情報"
mobile/views/components/note-detail.vue: mobile/views/components/note-detail.vue:
reply: "返信" reply: "返信"
reaction: "リアクション" 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: mobile/views/components/notifications.vue:
more: "もっと見る" more: "もっと見る"
empty: "ありません!" empty: "ありません!"
mobile/views/components/post-form.vue: mobile/views/components/post-form.vue:
add-visible-user: "ユーザーを追加"
submit: "投稿" submit: "投稿"
reply: "返信" reply: "返信"
renote: "Renote" renote: "Renote"
renote-placeholder: "この投稿を引用... (オプション)" renote-placeholder: "この投稿を引用... (オプション)"
reply-placeholder: "この投稿への返信..." reply-placeholder: "この投稿への返信..."
note-placeholder: "いまどうしてる?" note-placeholder: "いまどうしてる?"
cw-placeholder: "内容への注釈 (オプション)"
location-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
username-prompt: "ユーザー名を入力してください"
mobile/views/components/sub-note-content.vue: mobile/views/components/sub-note-content.vue:
hidden: "この投稿は非公開です"
media-count: "{}個のメディア" media-count: "{}個のメディア"
poll: "投票" poll: "投票"

View file

@ -93,7 +93,7 @@ export default Vue.extend({
}, },
methods: { methods: {
rename() { 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; if (name == null || name == '' || name == this.file.name) return;
(this as any).api('drive/files/update', { (this as any).api('drive/files/update', {
fileId: this.file.id, fileId: this.file.id,

View file

@ -372,7 +372,7 @@ export default Vue.extend({
}, },
openContextMenu() { openContextMenu() {
const fn = window.prompt('何をしますか?(数字を入力してください): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>'); const fn = window.prompt('%i18n:@prompt%');
if (fn == null || fn == '') return; if (fn == null || fn == '') return;
switch (fn) { switch (fn) {
case '1': case '1':
@ -391,7 +391,7 @@ export default Vue.extend({
this.moveFolder(); this.moveFolder();
break; break;
case '6': case '6':
alert('ごめんなさい!フォルダの削除は未実装です...。'); alert('%i18n:@deletion-alert%');
break; break;
} }
}, },
@ -401,7 +401,7 @@ export default Vue.extend({
}, },
createFolder() { createFolder() {
const name = window.prompt('フォルダー名'); const name = window.prompt('%i18n:@folder-name%');
if (name == null || name == '') return; if (name == null || name == '') return;
(this as any).api('drive/folders/create', { (this as any).api('drive/folders/create', {
name: name, name: name,
@ -413,10 +413,10 @@ export default Vue.extend({
renameFolder() { renameFolder() {
if (this.folder == null) { if (this.folder == null) {
alert('現在いる場所はルートで、フォルダではないため名前の変更はできません。名前を変更したいフォルダに移動してからやってください。'); alert('%i18n:@root-rename-alert%');
return; return;
} }
const name = window.prompt('フォルダー名', this.folder.name); const name = window.prompt('%i18n:@folder-name%', this.folder.name);
if (name == null || name == '') return; if (name == null || name == '') return;
(this as any).api('drive/folders/update', { (this as any).api('drive/folders/update', {
name: name, name: name,
@ -428,7 +428,7 @@ export default Vue.extend({
moveFolder() { moveFolder() {
if (this.folder == null) { if (this.folder == null) {
alert('現在いる場所はルートで、フォルダではないため移動はできません。移動したいフォルダに移動してからやってください。'); alert('%i18n:@root-move-alert%');
return; return;
} }
(this as any).apis.chooseDriveFolder().then(folder => { (this as any).apis.chooseDriveFolder().then(folder => {
@ -442,13 +442,13 @@ export default Vue.extend({
}, },
urlUpload() { urlUpload() {
const url = window.prompt('アップロードしたいファイルのURL'); const url = window.prompt('%i18n:@url-prompt%');
if (url == null || url == '') return; if (url == null || url == '') return;
(this as any).api('drive/files/upload_from_url', { (this as any).api('drive/files/upload_from_url', {
url: url, url: url,
folderId: this.folder ? this.folder.id : undefined folderId: this.folder ? this.folder.id : undefined
}); });
alert('アップロードをリクエストしました。アップロードが完了するまで時間がかかる場合があります。'); alert('%i18n:@uploading%');
}, },
onChangeLocalFile() { onChangeLocalFile() {

View file

@ -1,13 +1,13 @@
<template> <template>
<div class="mk-friends-maker"> <div class="mk-friends-maker">
<p class="title">気になるユーザーをフォロー:</p> <p class="title">%i18n:@title%:</p>
<div class="users" v-if="!fetching && users.length > 0"> <div class="users" v-if="!fetching && users.length > 0">
<mk-user-card v-for="user in users" :key="user.id" :user="user"/> <mk-user-card v-for="user in users" :key="user.id" :user="user"/>
</div> </div>
<p class="empty" v-if="!fetching && users.length == 0">おすすめのユーザーは見つかりませんでした</p> <p class="empty" v-if="!fetching && users.length == 0">%i18n:@empty%</p>
<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%読み込んでいます<mk-ellipsis/></p> <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@fetching%<mk-ellipsis/></p>
<a class="refresh" @click="refresh">もっと見る</a> <a class="refresh" @click="refresh">%i18n:@refresh%</a>
<button class="close" @click="close" title="閉じる">%fa:times%</button> <button class="close" @click="close" title="%i18n:@close%">%fa:times%</button>
</div> </div>
</template> </template>

View file

@ -17,7 +17,7 @@
</div> </div>
<div class="renote" v-if="isRenote"> <div class="renote" v-if="isRenote">
<p> <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> </p>
</div> </div>
<article> <article>
@ -30,7 +30,7 @@
</header> </header>
<div class="body"> <div class="body">
<div class="text"> <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"/> <mk-note-html v-if="p.text" :text="p.text" :i="$store.state.i"/>
</div> </div>
<div class="tags" v-if="p.tags && p.tags.length > 0"> <div class="tags" v-if="p.tags && p.tags.length > 0">
@ -41,7 +41,7 @@
</div> </div>
<mk-poll v-if="p.poll" :note="p"/> <mk-poll v-if="p.poll" :note="p"/>
<mk-url-preview v-for="url in urls" :url="url" :key="url"/> <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="map" v-if="p.geo" ref="map"></div>
<div class="renote" v-if="p.renote"> <div class="renote" v-if="p.renote">
<mk-note-preview :note="p.renote"/> <mk-note-preview :note="p.renote"/>

View file

@ -5,9 +5,9 @@
<header> <header>
<mk-avatar class="avatar" :user="note.user" v-if="$store.state.device.postStyle == 'smart'"/> <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> <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-admin" v-if="note.user.isAdmin">%i18n:@admin%</span>
<span class="is-bot" v-if="note.user.isBot">bot</span> <span class="is-bot" v-if="note.user.isBot">%i18n:@bot%</span>
<span class="is-cat" v-if="note.user.isCat">cat</span> <span class="is-cat" v-if="note.user.isCat">%i18n:@cat%</span>
<span class="username"><mk-acct :user="note.user"/></span> <span class="username"><mk-acct :user="note.user"/></span>
<router-link class="time" :to="note | notePage"> <router-link class="time" :to="note | notePage">
<mk-time :time="note.createdAt"/> <mk-time :time="note.createdAt"/>

View file

@ -5,9 +5,9 @@
<header> <header>
<mk-avatar class="avatar" :user="note.user" v-if="$store.state.device.postStyle == 'smart'"/> <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> <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-admin" v-if="note.user.isAdmin">%i18n:@admin%</span>
<span class="is-bot" v-if="note.user.isBot">bot</span> <span class="is-bot" v-if="note.user.isBot">%i18n:@bot%</span>
<span class="is-cat" v-if="note.user.isCat">cat</span> <span class="is-cat" v-if="note.user.isCat">%i18n:@cat%</span>
<span class="username"><mk-acct :user="note.user"/></span> <span class="username"><mk-acct :user="note.user"/></span>
<div class="info"> <div class="info">
<span class="mobile" v-if="note.viaMobile">%fa:mobile-alt%</span> <span class="mobile" v-if="note.viaMobile">%fa:mobile-alt%</span>

View file

@ -37,11 +37,11 @@
<div class="body"> <div class="body">
<p v-if="p.cw != null" class="cw"> <p v-if="p.cw != null" class="cw">
<span class="text" v-if="p.cw != ''">{{ p.cw }}</span> <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> </p>
<div class="content" v-show="p.cw == null || showContent"> <div class="content" v-show="p.cw == null || showContent">
<div class="text"> <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> <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"/> <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> <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> <router-link v-for="tag in p.tags" :key="tag" :to="`/search?q=#${tag}`">{{ tag }}</router-link>
</div> </div>
<mk-url-preview v-for="url in urls" :url="url" :key="url"/> <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="map" v-if="p.geo" ref="map"></div>
<div class="renote" v-if="p.renote"> <div class="renote" v-if="p.renote">
<mk-note-preview :note="p.renote"/> <mk-note-preview :note="p.renote"/>

View file

@ -9,8 +9,8 @@
</div> </div>
<div v-if="!fetching && requestInitPromise != null"> <div v-if="!fetching && requestInitPromise != null">
<p>読み込みに失敗しました</p> <p>%i18n:@failed%</p>
<button @click="resolveInitPromise">リトライ</button> <button @click="resolveInitPromise">%i18n:@retry%</button>
</div> </div>
<transition-group name="mk-notes" class="transition"> <transition-group name="mk-notes" class="transition">

View file

@ -17,9 +17,9 @@
<mk-note-preview v-if="renote" :note="renote"/> <mk-note-preview v-if="renote" :note="renote"/>
<div v-if="visibility == 'specified'" class="visibleUsers"> <div v-if="visibility == 'specified'" class="visibleUsers">
<span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span> <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> </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> <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"> <div class="attaches" v-show="files.length != 0">
<x-draggable class="files" :list="files" :options="{ animation: 150 }"> <x-draggable class="files" :list="files" :options="{ animation: 150 }">
@ -141,14 +141,14 @@ export default Vue.extend({
setGeo() { setGeo() {
if (navigator.geolocation == null) { if (navigator.geolocation == null) {
alert('お使いの端末は位置情報に対応していません'); alert('%i18n:@location-alert%');
return; return;
} }
navigator.geolocation.getCurrentPosition(pos => { navigator.geolocation.getCurrentPosition(pos => {
this.geo = pos.coords; this.geo = pos.coords;
}, err => { }, err => {
alert('エラー: ' + err.message); alert('%i18n:@error%: ' + err.message);
}, { }, {
enableHighAccuracy: true enableHighAccuracy: true
}); });
@ -171,7 +171,7 @@ export default Vue.extend({
addVisibleUser() { addVisibleUser() {
(this as any).apis.input({ (this as any).apis.input({
title: 'ユーザー名を入力してください' title: '%i18n:@username-prompt%'
}).then(username => { }).then(username => {
(this as any).api('users/show', { (this as any).api('users/show', {
username username

View file

@ -1,7 +1,7 @@
<template> <template>
<div class="mk-sub-note-content"> <div class="mk-sub-note-content">
<div class="body"> <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> <a class="reply" v-if="note.replyId">%fa:reply%</a>
<mk-note-html v-if="note.text" :text="note.text" :i="$store.state.i"/> <mk-note-html v-if="note.text" :text="note.text" :i="$store.state.i"/>
<a class="rp" v-if="note.renoteId">RP: ...</a> <a class="rp" v-if="note.renoteId">RP: ...</a>