fix(frontend): 誕生日の日付が言語ごとのフォーマットで表示されるように
This commit is contained in:
parent
389861f1da
commit
01687b31ae
|
|
@ -94,7 +94,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
</dl>
|
</dl>
|
||||||
<dl v-if="user.birthday" class="field">
|
<dl v-if="user.birthday" class="field">
|
||||||
<dt class="name"><i class="ti ti-cake ti-fw"></i> {{ i18n.ts.birthday }}</dt>
|
<dt class="name"><i class="ti ti-cake ti-fw"></i> {{ i18n.ts.birthday }}</dt>
|
||||||
<dd class="value">{{ user.birthday.replace('-', '/').replace('-', '/') }} ({{ i18n.tsx.yearsOld({ age }) }})</dd>
|
<dd class="value">{{ birthdateString }} ({{ i18n.tsx.yearsOld({ age }) }})</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl class="field">
|
<dl class="field">
|
||||||
<dt class="name"><i class="ti ti-calendar ti-fw"></i> {{ i18n.ts.registeredDate }}</dt>
|
<dt class="name"><i class="ti ti-calendar ti-fw"></i> {{ i18n.ts.registeredDate }}</dt>
|
||||||
|
|
@ -161,6 +161,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { defineAsyncComponent, computed, onMounted, onUnmounted, onActivated, onDeactivated, nextTick, watch, ref, useTemplateRef } from 'vue';
|
import { defineAsyncComponent, computed, onMounted, onUnmounted, onActivated, onDeactivated, nextTick, watch, ref, useTemplateRef } from 'vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
|
import { versatileLang } from '@@/js/intl-const.js';
|
||||||
import { getScrollContainer } from '@@/js/scroll.js';
|
import { getScrollContainer } from '@@/js/scroll.js';
|
||||||
import MkNote from '@/components/MkNote.vue';
|
import MkNote from '@/components/MkNote.vue';
|
||||||
import MkFollowButton from '@/components/MkFollowButton.vue';
|
import MkFollowButton from '@/components/MkFollowButton.vue';
|
||||||
|
|
@ -188,6 +189,12 @@ import { prefer } from '@/preferences.js';
|
||||||
import MkPullToRefresh from '@/components/MkPullToRefresh.vue';
|
import MkPullToRefresh from '@/components/MkPullToRefresh.vue';
|
||||||
import { isBirthday } from '@/utility/is-birthday.js';
|
import { isBirthday } from '@/utility/is-birthday.js';
|
||||||
|
|
||||||
|
const birthdateFormat = new Intl.DateTimeFormat(versatileLang, {
|
||||||
|
year: 'numeric',
|
||||||
|
month: 'numeric',
|
||||||
|
day: 'numeric',
|
||||||
|
});
|
||||||
|
|
||||||
function calcAge(birthdate: string): number {
|
function calcAge(birthdate: string): number {
|
||||||
const date = new Date(birthdate);
|
const date = new Date(birthdate);
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
|
|
@ -248,6 +255,9 @@ const style = computed(() => {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const birthdateString = computed(() => {
|
||||||
|
return props.user.birthday ? birthdateFormat.format(new Date(props.user.birthday)) : null;
|
||||||
|
});
|
||||||
const age = computed(() => {
|
const age = computed(() => {
|
||||||
return props.user.birthday ? calcAge(props.user.birthday) : NaN;
|
return props.user.birthday ? calcAge(props.user.birthday) : NaN;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { lang } from '@@/js/config.js';
|
|
||||||
|
|
||||||
export const versatileLang = (lang ?? 'ja-JP').replace('ja-KS', 'ja-JP');
|
|
||||||
|
|
||||||
let _dateTimeFormat: Intl.DateTimeFormat;
|
|
||||||
try {
|
|
||||||
_dateTimeFormat = new Intl.DateTimeFormat(versatileLang, {
|
|
||||||
year: 'numeric',
|
|
||||||
month: 'numeric',
|
|
||||||
day: 'numeric',
|
|
||||||
hour: 'numeric',
|
|
||||||
minute: 'numeric',
|
|
||||||
second: 'numeric',
|
|
||||||
});
|
|
||||||
} catch (err) {
|
|
||||||
console.warn(err);
|
|
||||||
if (_DEV_) console.log('[Intl] Fallback to en-US');
|
|
||||||
|
|
||||||
// Fallback to en-US
|
|
||||||
_dateTimeFormat = new Intl.DateTimeFormat('en-US', {
|
|
||||||
year: 'numeric',
|
|
||||||
month: 'numeric',
|
|
||||||
day: 'numeric',
|
|
||||||
hour: 'numeric',
|
|
||||||
minute: 'numeric',
|
|
||||||
second: 'numeric',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
export const dateTimeFormat = _dateTimeFormat;
|
|
||||||
|
|
||||||
export const timeZone = dateTimeFormat.resolvedOptions().timeZone;
|
|
||||||
|
|
||||||
export const hemisphere = /^(australia|pacific|antarctica|indian)\//i.test(timeZone) ? 'S' : 'N';
|
|
||||||
|
|
||||||
let _numberFormat: Intl.NumberFormat;
|
|
||||||
try {
|
|
||||||
_numberFormat = new Intl.NumberFormat(versatileLang);
|
|
||||||
} catch (err) {
|
|
||||||
console.warn(err);
|
|
||||||
if (_DEV_) console.log('[Intl] Fallback to en-US');
|
|
||||||
|
|
||||||
// Fallback to en-US
|
|
||||||
_numberFormat = new Intl.NumberFormat('en-US');
|
|
||||||
}
|
|
||||||
export const numberFormat = _numberFormat;
|
|
||||||
Loading…
Reference in New Issue