i18n
This commit is contained in:
@ -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 v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/>
|
||||
<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
|
||||
<p style="margin: 8px 0;">または<a :href="`${apiUrl}/signin/twitter`">Twitterでログイン</a></p>
|
||||
<p style="margin: 8px 0;">%i18n:@or%<a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p>
|
||||
</form>
|
||||
</template>
|
||||
|
||||
|
@ -8,7 +8,7 @@ export default (os: OS) => (cb, file = null) => {
|
||||
|
||||
const w = os.new(CropWindow, {
|
||||
image: file,
|
||||
title: 'アバターとして表示する部分を選択',
|
||||
title: '%i18n:desktop.avatar-crop-title%',
|
||||
aspectRatio: 1 / 1
|
||||
});
|
||||
|
||||
@ -18,11 +18,11 @@ export default (os: OS) => (cb, file = null) => {
|
||||
data.append('file', blob, file.name + '.cropped.png');
|
||||
|
||||
os.api('drive/folders/find', {
|
||||
name: 'アイコン'
|
||||
name: '%i18n:desktop.avatar%'
|
||||
}).then(iconFolder => {
|
||||
if (iconFolder.length === 0) {
|
||||
os.api('drive/folders/create', {
|
||||
name: 'アイコン'
|
||||
name: '%i18n:desktop.avatar%'
|
||||
}).then(iconFolder => {
|
||||
upload(data, iconFolder);
|
||||
});
|
||||
@ -41,7 +41,7 @@ export default (os: OS) => (cb, file = null) => {
|
||||
|
||||
const upload = (data, folder) => {
|
||||
const dialog = os.new(ProgressDialog, {
|
||||
title: '新しいアバターをアップロードしています'
|
||||
title: '%i18n:desktop.uploading-avatar%'
|
||||
});
|
||||
document.body.appendChild(dialog.$el);
|
||||
|
||||
@ -76,10 +76,10 @@ export default (os: OS) => (cb, file = null) => {
|
||||
});
|
||||
|
||||
os.apis.dialog({
|
||||
title: '%fa:info-circle%アバターを更新しました',
|
||||
text: '新しいアバターが反映されるまで時間がかかる場合があります。',
|
||||
title: '%fa:info-circle% %i18n:desktop.avatar-updated%',
|
||||
text: null,
|
||||
actions: [{
|
||||
text: 'わかった'
|
||||
text: '%i18n:common.got-it%'
|
||||
}]
|
||||
});
|
||||
|
||||
@ -92,7 +92,7 @@ export default (os: OS) => (cb, file = null) => {
|
||||
} else {
|
||||
os.apis.chooseDriveFile({
|
||||
multiple: false,
|
||||
title: '%fa:image%アバターにする画像を選択'
|
||||
title: '%fa:image% %i18n:desktop.choose-avatar%'
|
||||
}).then(file => {
|
||||
fileSelected(file);
|
||||
});
|
||||
|
@ -8,7 +8,7 @@ export default (os: OS) => {
|
||||
const cropImage = file => new Promise((resolve, reject) => {
|
||||
const w = os.new(CropWindow, {
|
||||
image: file,
|
||||
title: 'バナーとして表示する部分を選択',
|
||||
title: '%i18n:desktop.banner-crop-title%',
|
||||
aspectRatio: 16 / 9
|
||||
});
|
||||
|
||||
@ -18,11 +18,11 @@ export default (os: OS) => {
|
||||
data.append('file', blob, file.name + '.cropped.png');
|
||||
|
||||
os.api('drive/folders/find', {
|
||||
name: 'バナー'
|
||||
name: '%i18n:desktop.banner%'
|
||||
}).then(bannerFolder => {
|
||||
if (bannerFolder.length === 0) {
|
||||
os.api('drive/folders/create', {
|
||||
name: 'バナー'
|
||||
name: '%i18n:desktop.banner%'
|
||||
}).then(iconFolder => {
|
||||
resolve(upload(data, iconFolder));
|
||||
});
|
||||
@ -43,7 +43,7 @@ export default (os: OS) => {
|
||||
|
||||
const upload = (data, folder) => new Promise((resolve, reject) => {
|
||||
const dialog = os.new(ProgressDialog, {
|
||||
title: '新しいバナーをアップロードしています'
|
||||
title: '%i18n:desktop.uploading-banner%'
|
||||
});
|
||||
document.body.appendChild(dialog.$el);
|
||||
|
||||
@ -79,10 +79,10 @@ export default (os: OS) => {
|
||||
});
|
||||
|
||||
os.apis.dialog({
|
||||
title: '%fa:info-circle%バナーを更新しました',
|
||||
text: '新しいバナーが反映されるまで時間がかかる場合があります。',
|
||||
title: '%fa:info-circle% %i18n:desktop.banner-updated%',
|
||||
text: null,
|
||||
actions: [{
|
||||
text: 'わかった'
|
||||
text: '%i18n:common.got-it%'
|
||||
}]
|
||||
});
|
||||
|
||||
@ -95,7 +95,7 @@ export default (os: OS) => {
|
||||
? Promise.resolve(file)
|
||||
: os.apis.chooseDriveFile({
|
||||
multiple: false,
|
||||
title: '%fa:image%バナーにする画像を選択'
|
||||
title: '%fa:image% %i18n:desktop.choose-banner%'
|
||||
});
|
||||
|
||||
return selectedFile
|
||||
|
@ -79,7 +79,6 @@
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import dateStringify from '../../../common/scripts/date-stringify';
|
||||
import parse from '../../../../../mfm/parse';
|
||||
|
||||
import MkPostFormWindow from './post-form-window.vue';
|
||||
@ -129,7 +128,7 @@ export default Vue.extend({
|
||||
: 0;
|
||||
},
|
||||
title(): string {
|
||||
return dateStringify(this.p.createdAt);
|
||||
return new Date(this.p.createdAt).toLocaleString();
|
||||
},
|
||||
urls(): string[] {
|
||||
if (this.p.text) {
|
||||
|
@ -12,7 +12,6 @@
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import dateStringify from '../../../common/scripts/date-stringify';
|
||||
|
||||
export default Vue.extend({
|
||||
props: {
|
||||
@ -28,7 +27,7 @@ export default Vue.extend({
|
||||
},
|
||||
computed: {
|
||||
title(): string {
|
||||
return dateStringify(this.note.createdAt);
|
||||
return new Date(this.note.createdAt).toLocaleString();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -12,13 +12,12 @@
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import dateStringify from '../../../common/scripts/date-stringify';
|
||||
|
||||
export default Vue.extend({
|
||||
props: ['note'],
|
||||
computed: {
|
||||
title(): string {
|
||||
return dateStringify(this.note.createdAt);
|
||||
return new Date(this.note.createdAt).toLocaleString();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -71,7 +71,6 @@
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import dateStringify from '../../../common/scripts/date-stringify';
|
||||
import parse from '../../../../../mfm/parse';
|
||||
|
||||
import MkPostFormWindow from './post-form-window.vue';
|
||||
@ -128,7 +127,7 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
title(): string {
|
||||
return dateStringify(this.p.createdAt);
|
||||
return new Date(this.p.createdAt).toLocaleString();
|
||||
},
|
||||
|
||||
urls(): string[] {
|
||||
|
@ -27,7 +27,7 @@ export default Vue.extend({
|
||||
methods: {
|
||||
add() {
|
||||
(this as any).apis.input({
|
||||
title: 'リスト名',
|
||||
title: '%i18n:@list-name%',
|
||||
}).then(async title => {
|
||||
const list = await (this as any).api('users/lists/create', {
|
||||
title
|
||||
|
@ -13,7 +13,7 @@
|
||||
<span v-if="user.isMuted">%fa:eye% %i18n:@unmute%</span>
|
||||
<span v-if="!user.isMuted">%fa:eye-slash% %i18n:@mute%</span>
|
||||
</button>
|
||||
<button class="mute ui" @click="list">%fa:list% リストに追加</button>
|
||||
<button class="mute ui" @click="list">%fa:list% %i18n:@push-to-a-list%</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -76,7 +76,7 @@ export default Vue.extend({
|
||||
});
|
||||
(this as any).apis.dialog({
|
||||
title: 'Done!',
|
||||
text: `${this.user.name}を${list.title}に追加しました。`
|
||||
text: '%i18n:@list-pushed%'.replace('{user}', this.user.name).replace('{list}', list.title)
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ export default define({
|
||||
}).then(data => {
|
||||
this.clear();
|
||||
}).catch(err => {
|
||||
alert('失敗した');
|
||||
alert('Something happened');
|
||||
}).then(() => {
|
||||
this.posting = false;
|
||||
});
|
||||
|
Reference in New Issue
Block a user