mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-12-23 14:13:07 +02:00
i18n
This commit is contained in:
parent
75c44cd349
commit
d733a1b445
12 changed files with 43 additions and 51 deletions
|
@ -11,6 +11,7 @@ common:
|
||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
|
@ -41,13 +42,6 @@ common:
|
||||||
|
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
|
|
||||||
date:
|
|
||||||
full-year: "年"
|
|
||||||
month: "月"
|
|
||||||
day: "日"
|
|
||||||
hours: "時"
|
|
||||||
minutes: "分"
|
|
||||||
|
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
monday: "月"
|
monday: "月"
|
||||||
|
@ -311,6 +305,8 @@ common/views/components/signin.vue:
|
||||||
token: "トークン"
|
token: "トークン"
|
||||||
signing-in: "やってます..."
|
signing-in: "やってます..."
|
||||||
signin: "サインイン"
|
signin: "サインイン"
|
||||||
|
or: "または"
|
||||||
|
signin-with-twitter: "Twitterでログイン"
|
||||||
|
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
username: "ユーザー名"
|
username: "ユーザー名"
|
||||||
|
@ -438,6 +434,18 @@ common/views/pages/follow.vue:
|
||||||
request-pending: "フォロー許可待ち"
|
request-pending: "フォロー許可待ち"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "フォロー申請"
|
||||||
|
|
||||||
|
desktop:
|
||||||
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
|
banner: "バナー"
|
||||||
|
uploading-banner: "新しいバナーをアップロードしています"
|
||||||
|
banner-updated: "バナーを更新しました"
|
||||||
|
choose-banner: "バナーにする画像を選択"
|
||||||
|
avatar-crop-title: "アバターとして表示する部分を選択"
|
||||||
|
avatar: "アバター"
|
||||||
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
|
avatar-updated: "アバターを更新しました"
|
||||||
|
choose-avatar: "アバターにする画像を選択"
|
||||||
|
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
|
@ -855,11 +863,10 @@ desktop/views/components/received-follow-requests-window.vue:
|
||||||
accept: "承認"
|
accept: "承認"
|
||||||
reject: "拒否"
|
reject: "拒否"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "リスト"
|
title: "リスト"
|
||||||
create-list: "リストを作成"
|
create-list: "リストを作成"
|
||||||
|
list-name: "リスト名"
|
||||||
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
|
@ -964,6 +971,8 @@ desktop/views/pages/user/user.profile.vue:
|
||||||
mute: "ミュートする"
|
mute: "ミュートする"
|
||||||
muted: "ミュートしています"
|
muted: "ミュートしています"
|
||||||
unmute: "ミュート解除"
|
unmute: "ミュート解除"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
list-pushed: "{user}を{list}に追加しました。"
|
||||||
|
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
export default date => {
|
|
||||||
if (typeof date == 'string') date = new Date(date);
|
|
||||||
return (
|
|
||||||
date.getFullYear() + '%i18n:common.date.full-year%' +
|
|
||||||
(date.getMonth() + 1) + '%i18n:common.date.month%' +
|
|
||||||
date.getDate() + '%i18n:common.date.day%' +
|
|
||||||
' ' +
|
|
||||||
date.getHours() + '%i18n:common.date.hours%' +
|
|
||||||
date.getMinutes() + '%i18n:common.date.minutes%' +
|
|
||||||
' ' +
|
|
||||||
`(${['日', '月', '火', '水', '木', '金', '土'][date.getDay()]})`
|
|
||||||
);
|
|
||||||
};
|
|
|
@ -12,7 +12,7 @@
|
||||||
</ui-input>
|
</ui-input>
|
||||||
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/>
|
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/>
|
||||||
<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
|
<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
|
||||||
<p style="margin: 8px 0;">または<a :href="`${apiUrl}/signin/twitter`">Twitterでログイン</a></p>
|
<p style="margin: 8px 0;">%i18n:@or%<a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p>
|
||||||
</form>
|
</form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ export default (os: OS) => (cb, file = null) => {
|
||||||
|
|
||||||
const w = os.new(CropWindow, {
|
const w = os.new(CropWindow, {
|
||||||
image: file,
|
image: file,
|
||||||
title: 'アバターとして表示する部分を選択',
|
title: '%i18n:desktop.avatar-crop-title%',
|
||||||
aspectRatio: 1 / 1
|
aspectRatio: 1 / 1
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -18,11 +18,11 @@ export default (os: OS) => (cb, file = null) => {
|
||||||
data.append('file', blob, file.name + '.cropped.png');
|
data.append('file', blob, file.name + '.cropped.png');
|
||||||
|
|
||||||
os.api('drive/folders/find', {
|
os.api('drive/folders/find', {
|
||||||
name: 'アイコン'
|
name: '%i18n:desktop.avatar%'
|
||||||
}).then(iconFolder => {
|
}).then(iconFolder => {
|
||||||
if (iconFolder.length === 0) {
|
if (iconFolder.length === 0) {
|
||||||
os.api('drive/folders/create', {
|
os.api('drive/folders/create', {
|
||||||
name: 'アイコン'
|
name: '%i18n:desktop.avatar%'
|
||||||
}).then(iconFolder => {
|
}).then(iconFolder => {
|
||||||
upload(data, iconFolder);
|
upload(data, iconFolder);
|
||||||
});
|
});
|
||||||
|
@ -41,7 +41,7 @@ export default (os: OS) => (cb, file = null) => {
|
||||||
|
|
||||||
const upload = (data, folder) => {
|
const upload = (data, folder) => {
|
||||||
const dialog = os.new(ProgressDialog, {
|
const dialog = os.new(ProgressDialog, {
|
||||||
title: '新しいアバターをアップロードしています'
|
title: '%i18n:desktop.uploading-avatar%'
|
||||||
});
|
});
|
||||||
document.body.appendChild(dialog.$el);
|
document.body.appendChild(dialog.$el);
|
||||||
|
|
||||||
|
@ -76,10 +76,10 @@ export default (os: OS) => (cb, file = null) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
os.apis.dialog({
|
os.apis.dialog({
|
||||||
title: '%fa:info-circle%アバターを更新しました',
|
title: '%fa:info-circle% %i18n:desktop.avatar-updated%',
|
||||||
text: '新しいアバターが反映されるまで時間がかかる場合があります。',
|
text: null,
|
||||||
actions: [{
|
actions: [{
|
||||||
text: 'わかった'
|
text: '%i18n:common.got-it%'
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ export default (os: OS) => (cb, file = null) => {
|
||||||
} else {
|
} else {
|
||||||
os.apis.chooseDriveFile({
|
os.apis.chooseDriveFile({
|
||||||
multiple: false,
|
multiple: false,
|
||||||
title: '%fa:image%アバターにする画像を選択'
|
title: '%fa:image% %i18n:desktop.choose-avatar%'
|
||||||
}).then(file => {
|
}).then(file => {
|
||||||
fileSelected(file);
|
fileSelected(file);
|
||||||
});
|
});
|
||||||
|
|
|
@ -8,7 +8,7 @@ export default (os: OS) => {
|
||||||
const cropImage = file => new Promise((resolve, reject) => {
|
const cropImage = file => new Promise((resolve, reject) => {
|
||||||
const w = os.new(CropWindow, {
|
const w = os.new(CropWindow, {
|
||||||
image: file,
|
image: file,
|
||||||
title: 'バナーとして表示する部分を選択',
|
title: '%i18n:desktop.banner-crop-title%',
|
||||||
aspectRatio: 16 / 9
|
aspectRatio: 16 / 9
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -18,11 +18,11 @@ export default (os: OS) => {
|
||||||
data.append('file', blob, file.name + '.cropped.png');
|
data.append('file', blob, file.name + '.cropped.png');
|
||||||
|
|
||||||
os.api('drive/folders/find', {
|
os.api('drive/folders/find', {
|
||||||
name: 'バナー'
|
name: '%i18n:desktop.banner%'
|
||||||
}).then(bannerFolder => {
|
}).then(bannerFolder => {
|
||||||
if (bannerFolder.length === 0) {
|
if (bannerFolder.length === 0) {
|
||||||
os.api('drive/folders/create', {
|
os.api('drive/folders/create', {
|
||||||
name: 'バナー'
|
name: '%i18n:desktop.banner%'
|
||||||
}).then(iconFolder => {
|
}).then(iconFolder => {
|
||||||
resolve(upload(data, iconFolder));
|
resolve(upload(data, iconFolder));
|
||||||
});
|
});
|
||||||
|
@ -43,7 +43,7 @@ export default (os: OS) => {
|
||||||
|
|
||||||
const upload = (data, folder) => new Promise((resolve, reject) => {
|
const upload = (data, folder) => new Promise((resolve, reject) => {
|
||||||
const dialog = os.new(ProgressDialog, {
|
const dialog = os.new(ProgressDialog, {
|
||||||
title: '新しいバナーをアップロードしています'
|
title: '%i18n:desktop.uploading-banner%'
|
||||||
});
|
});
|
||||||
document.body.appendChild(dialog.$el);
|
document.body.appendChild(dialog.$el);
|
||||||
|
|
||||||
|
@ -79,10 +79,10 @@ export default (os: OS) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
os.apis.dialog({
|
os.apis.dialog({
|
||||||
title: '%fa:info-circle%バナーを更新しました',
|
title: '%fa:info-circle% %i18n:desktop.banner-updated%',
|
||||||
text: '新しいバナーが反映されるまで時間がかかる場合があります。',
|
text: null,
|
||||||
actions: [{
|
actions: [{
|
||||||
text: 'わかった'
|
text: '%i18n:common.got-it%'
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ export default (os: OS) => {
|
||||||
? Promise.resolve(file)
|
? Promise.resolve(file)
|
||||||
: os.apis.chooseDriveFile({
|
: os.apis.chooseDriveFile({
|
||||||
multiple: false,
|
multiple: false,
|
||||||
title: '%fa:image%バナーにする画像を選択'
|
title: '%fa:image% %i18n:desktop.choose-banner%'
|
||||||
});
|
});
|
||||||
|
|
||||||
return selectedFile
|
return selectedFile
|
||||||
|
|
|
@ -79,7 +79,6 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import dateStringify from '../../../common/scripts/date-stringify';
|
|
||||||
import parse from '../../../../../mfm/parse';
|
import parse from '../../../../../mfm/parse';
|
||||||
|
|
||||||
import MkPostFormWindow from './post-form-window.vue';
|
import MkPostFormWindow from './post-form-window.vue';
|
||||||
|
@ -129,7 +128,7 @@ export default Vue.extend({
|
||||||
: 0;
|
: 0;
|
||||||
},
|
},
|
||||||
title(): string {
|
title(): string {
|
||||||
return dateStringify(this.p.createdAt);
|
return new Date(this.p.createdAt).toLocaleString();
|
||||||
},
|
},
|
||||||
urls(): string[] {
|
urls(): string[] {
|
||||||
if (this.p.text) {
|
if (this.p.text) {
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import dateStringify from '../../../common/scripts/date-stringify';
|
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: {
|
props: {
|
||||||
|
@ -28,7 +27,7 @@ export default Vue.extend({
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
title(): string {
|
title(): string {
|
||||||
return dateStringify(this.note.createdAt);
|
return new Date(this.note.createdAt).toLocaleString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -12,13 +12,12 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import dateStringify from '../../../common/scripts/date-stringify';
|
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: ['note'],
|
props: ['note'],
|
||||||
computed: {
|
computed: {
|
||||||
title(): string {
|
title(): string {
|
||||||
return dateStringify(this.note.createdAt);
|
return new Date(this.note.createdAt).toLocaleString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -71,7 +71,6 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import dateStringify from '../../../common/scripts/date-stringify';
|
|
||||||
import parse from '../../../../../mfm/parse';
|
import parse from '../../../../../mfm/parse';
|
||||||
|
|
||||||
import MkPostFormWindow from './post-form-window.vue';
|
import MkPostFormWindow from './post-form-window.vue';
|
||||||
|
@ -128,7 +127,7 @@ export default Vue.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
title(): string {
|
title(): string {
|
||||||
return dateStringify(this.p.createdAt);
|
return new Date(this.p.createdAt).toLocaleString();
|
||||||
},
|
},
|
||||||
|
|
||||||
urls(): string[] {
|
urls(): string[] {
|
||||||
|
|
|
@ -27,7 +27,7 @@ export default Vue.extend({
|
||||||
methods: {
|
methods: {
|
||||||
add() {
|
add() {
|
||||||
(this as any).apis.input({
|
(this as any).apis.input({
|
||||||
title: 'リスト名',
|
title: '%i18n:@list-name%',
|
||||||
}).then(async title => {
|
}).then(async title => {
|
||||||
const list = await (this as any).api('users/lists/create', {
|
const list = await (this as any).api('users/lists/create', {
|
||||||
title
|
title
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<span v-if="user.isMuted">%fa:eye% %i18n:@unmute%</span>
|
<span v-if="user.isMuted">%fa:eye% %i18n:@unmute%</span>
|
||||||
<span v-if="!user.isMuted">%fa:eye-slash% %i18n:@mute%</span>
|
<span v-if="!user.isMuted">%fa:eye-slash% %i18n:@mute%</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="mute ui" @click="list">%fa:list% リストに追加</button>
|
<button class="mute ui" @click="list">%fa:list% %i18n:@push-to-a-list%</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -76,7 +76,7 @@ export default Vue.extend({
|
||||||
});
|
});
|
||||||
(this as any).apis.dialog({
|
(this as any).apis.dialog({
|
||||||
title: 'Done!',
|
title: 'Done!',
|
||||||
text: `${this.user.name}を${list.title}に追加しました。`
|
text: '%i18n:@list-pushed%'.replace('{user}', this.user.name).replace('{list}', list.title)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ export default define({
|
||||||
}).then(data => {
|
}).then(data => {
|
||||||
this.clear();
|
this.clear();
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
alert('失敗した');
|
alert('Something happened');
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.posting = false;
|
this.posting = false;
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue