Merge branch 'misskey-dev:develop' into develop
This commit is contained in:
commit
1615787b82
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## 2023.11.0 (unreleased)
|
## 2023.11.0
|
||||||
|
|
||||||
### Note
|
### Note
|
||||||
- iOS 16.4未満を使用している場合はiOS 16.4以上にアップデートをお願いします
|
- iOS 16.4未満を使用している場合はiOS 16.4以上にアップデートをお願いします
|
||||||
@ -51,7 +51,7 @@
|
|||||||
- Enhance: プラグインで`Plugin:register_note_view_interruptor`を用いてnoteの代わりにnullを返却することでノートを非表示にできるようになりました
|
- Enhance: プラグインで`Plugin:register_note_view_interruptor`を用いてnoteの代わりにnullを返却することでノートを非表示にできるようになりました
|
||||||
- Enhance: AiScript関数`Mk:nyaize()`が追加されました
|
- Enhance: AiScript関数`Mk:nyaize()`が追加されました
|
||||||
- Enhance: 情報→ツール はナビゲーションバーにツールとして独立した項目になりました
|
- Enhance: 情報→ツール はナビゲーションバーにツールとして独立した項目になりました
|
||||||
- Enhance: ノート内のカスタム絵文字をクリックすることで、コピーおよびリアクションができるように
|
- Enhance: ノート内の絵文字をクリックすることで、コピーおよびリアクションができるように
|
||||||
- Enhance: その他細かなブラッシュアップ
|
- Enhance: その他細かなブラッシュアップ
|
||||||
- Fix: 投稿フォームでのユーザー変更がプレビューに反映されない問題を修正
|
- Fix: 投稿フォームでのユーザー変更がプレビューに反映されない問題を修正
|
||||||
- Fix: ユーザーページの ノート > ファイル付き タブにリプライが表示されてしまう
|
- Fix: ユーザーページの ノート > ファイル付き タブにリプライが表示されてしまう
|
||||||
|
@ -1088,7 +1088,26 @@ _initialAccountSetting:
|
|||||||
profileSetting: "Paramètres du profil"
|
profileSetting: "Paramètres du profil"
|
||||||
privacySetting: "Paramètres de confidentialité"
|
privacySetting: "Paramètres de confidentialité"
|
||||||
initialAccountSettingCompleted: "Configuration du profil terminée avec succès !"
|
initialAccountSettingCompleted: "Configuration du profil terminée avec succès !"
|
||||||
|
startTutorial: "Démarrer le tutoriel"
|
||||||
skipAreYouSure: "Désirez-vous ignorer la configuration du profil ?"
|
skipAreYouSure: "Désirez-vous ignorer la configuration du profil ?"
|
||||||
|
_initialTutorial:
|
||||||
|
title: "Tutoriel"
|
||||||
|
wellDone: "Bien joué !"
|
||||||
|
skipAreYouSure: "Quitter le tutoriel ?"
|
||||||
|
_landing:
|
||||||
|
title: "Bienvenue dans le tutoriel"
|
||||||
|
description: "Ici, vous pouvez apprendre l'utilisation de base de Misskey et ses fonctionnalités."
|
||||||
|
_note:
|
||||||
|
title: "Qu'est-ce que les notes ?"
|
||||||
|
description: "Les messages sur Misskey sont appelés des « notes » . Les notes sont classées par ordre chronologique sur le fil et sont mises à jour en temps réel."
|
||||||
|
reply: "Vous pouvez répondre aux messages. Vous pouvez également répondre aux réponses et poursuivre la conversation comme un fil de discussion."
|
||||||
|
renote: "Vous pouvez partager cette note sur votre propre fil. Vous pouvez aussi ajouter du texte en citant."
|
||||||
|
reaction: "Vous pouvez ajouter des réactions. Les détails sont expliqués à la page suivante."
|
||||||
|
menu: "Vous pouvez afficher les détails de la note, copier le lien et effectuer d'autres actions."
|
||||||
|
_reaction:
|
||||||
|
title: "Qu'est-ce que les réactions ?"
|
||||||
|
description: "Vous pouvez ajouter des « réactions » aux notes. Les réactions vous permettent d'exprimer à l'aise des nuances qui ne peuvent pas être exprimées par des mentions j'aime."
|
||||||
|
letsTryReacting: "Des réactions peuvent être ajoutées en cliquant sur le bouton « + » de la note. Essayez d'ajouter une réaction à cet exemple de note !"
|
||||||
_serverSettings:
|
_serverSettings:
|
||||||
iconUrl: "URL de l’icône"
|
iconUrl: "URL de l’icône"
|
||||||
fanoutTimelineDescription: "Si activée, la performance de la récupération de la chronologie augmentera considérablement et la charge sur la base de données sera réduite. En revanche, l'utilisation de la mémoire de Redis augmentera. Considérez désactiver cette option si le serveur est bas en mémoire ou instable."
|
fanoutTimelineDescription: "Si activée, la performance de la récupération de la chronologie augmentera considérablement et la charge sur la base de données sera réduite. En revanche, l'utilisation de la mémoire de Redis augmentera. Considérez désactiver cette option si le serveur est bas en mémoire ou instable."
|
||||||
|
@ -53,6 +53,19 @@ const clean = (text) => text.replace(new RegExp(String.fromCodePoint(0x08), 'g')
|
|||||||
|
|
||||||
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(new URL(`${c}.yml`, import.meta.url), 'utf-8'))) || {}, a), {});
|
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(new URL(`${c}.yml`, import.meta.url), 'utf-8'))) || {}, a), {});
|
||||||
|
|
||||||
|
// 空文字列が入ることがあり、フォールバックが動作しなくなるのでプロパティごと消す
|
||||||
|
const removeEmpty = (obj) => {
|
||||||
|
for (const [k, v] of Object.entries(obj)) {
|
||||||
|
if (v === '') {
|
||||||
|
delete obj[k];
|
||||||
|
} else if (typeof v === 'object') {
|
||||||
|
removeEmpty(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
removeEmpty(locales);
|
||||||
|
|
||||||
export default Object.entries(locales)
|
export default Object.entries(locales)
|
||||||
.reduce((a, [k ,v]) => (a[k] = (() => {
|
.reduce((a, [k ,v]) => (a[k] = (() => {
|
||||||
const [lang] = k.split('-');
|
const [lang] = k.split('-');
|
||||||
@ -63,7 +76,7 @@ export default Object.entries(locales)
|
|||||||
default: return merge(
|
default: return merge(
|
||||||
locales['ja-JP'],
|
locales['ja-JP'],
|
||||||
locales['en-US'],
|
locales['en-US'],
|
||||||
locales[`${lang}-${primaries[lang]}`] || {},
|
locales[`${lang}-${primaries[lang]}`] ?? {},
|
||||||
v
|
v
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1157,6 +1157,7 @@ disableStreamingTimeline: "Disabilitare gli aggiornamenti della TL in tempo real
|
|||||||
useGroupedNotifications: "Mostra le notifiche raggruppate"
|
useGroupedNotifications: "Mostra le notifiche raggruppate"
|
||||||
signupPendingError: "Si è verificato un problema durante la verifica del tuo indirizzo email. Potrebbe essere scaduto il collegamento temporaneo."
|
signupPendingError: "Si è verificato un problema durante la verifica del tuo indirizzo email. Potrebbe essere scaduto il collegamento temporaneo."
|
||||||
cwNotationRequired: "Devi indicare perché il contenuto è indicato come esplicito."
|
cwNotationRequired: "Devi indicare perché il contenuto è indicato come esplicito."
|
||||||
|
doReaction: "Reagisci"
|
||||||
_announcement:
|
_announcement:
|
||||||
forExistingUsers: "Solo ai profili attuali"
|
forExistingUsers: "Solo ai profili attuali"
|
||||||
forExistingUsersDescription: "L'annuncio sarà visibile solo ai profili esistenti in questo momento. Se disabilitato, sarà visibile anche ai profili che verranno creati dopo la pubblicazione di questo annuncio."
|
forExistingUsersDescription: "L'annuncio sarà visibile solo ai profili esistenti in questo momento. Se disabilitato, sarà visibile anche ai profili che verranno creati dopo la pubblicazione di questo annuncio."
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"version": "2023.11.0-beta.10",
|
"version": "2023.11.0",
|
||||||
"codename": "nasubi",
|
"codename": "nasubi",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -4,21 +4,28 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<img v-if="!useOsNativeEmojis" :class="$style.root" :src="url" :alt="props.emoji" decoding="async" @pointerenter="computeTitle"/>
|
<img v-if="!useOsNativeEmojis" :class="$style.root" :src="url" :alt="props.emoji" decoding="async" @pointerenter="computeTitle" @click="onClick"/>
|
||||||
<span v-else-if="useOsNativeEmojis" :alt="props.emoji" @pointerenter="computeTitle">{{ props.emoji }}</span>
|
<span v-else-if="useOsNativeEmojis" :alt="props.emoji" @pointerenter="computeTitle" @click="onClick">{{ props.emoji }}</span>
|
||||||
<span v-else>{{ emoji }}</span>
|
<span v-else>{{ emoji }}</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed } from 'vue';
|
import { computed, inject } from 'vue';
|
||||||
import { char2twemojiFilePath, char2fluentEmojiFilePath } from '@/scripts/emoji-base.js';
|
import { char2twemojiFilePath, char2fluentEmojiFilePath } from '@/scripts/emoji-base.js';
|
||||||
import { defaultStore } from '@/store.js';
|
import { defaultStore } from '@/store.js';
|
||||||
import { getEmojiName } from '@/scripts/emojilist.js';
|
import { getEmojiName } from '@/scripts/emojilist.js';
|
||||||
|
import * as os from '@/os.js';
|
||||||
|
import copyToClipboard from '@/scripts/copy-to-clipboard.js';
|
||||||
|
import { i18n } from '@/i18n.js';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
emoji: string;
|
emoji: string;
|
||||||
|
menu?: boolean;
|
||||||
|
menuReaction?: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
const react = inject<((name: string) => void) | null>('react', null);
|
||||||
|
|
||||||
const char2path = defaultStore.state.emojiStyle === 'twemoji' ? char2twemojiFilePath : char2fluentEmojiFilePath;
|
const char2path = defaultStore.state.emojiStyle === 'twemoji' ? char2twemojiFilePath : char2fluentEmojiFilePath;
|
||||||
|
|
||||||
const useOsNativeEmojis = computed(() => defaultStore.state.emojiStyle === 'native');
|
const useOsNativeEmojis = computed(() => defaultStore.state.emojiStyle === 'native');
|
||||||
@ -31,6 +38,28 @@ function computeTitle(event: PointerEvent): void {
|
|||||||
const title = getEmojiName(props.emoji as string) ?? props.emoji as string;
|
const title = getEmojiName(props.emoji as string) ?? props.emoji as string;
|
||||||
(event.target as HTMLElement).title = title;
|
(event.target as HTMLElement).title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onClick(ev: MouseEvent) {
|
||||||
|
if (props.menu) {
|
||||||
|
os.popupMenu([{
|
||||||
|
type: 'label',
|
||||||
|
text: props.emoji,
|
||||||
|
}, {
|
||||||
|
text: i18n.ts.copy,
|
||||||
|
icon: 'ti ti-copy',
|
||||||
|
action: () => {
|
||||||
|
copyToClipboard(props.emoji);
|
||||||
|
os.success();
|
||||||
|
},
|
||||||
|
}, ...(props.menuReaction && react ? [{
|
||||||
|
text: i18n.ts.doReaction,
|
||||||
|
icon: 'ti ti-plus',
|
||||||
|
action: () => {
|
||||||
|
react(props.emoji);
|
||||||
|
},
|
||||||
|
}] : [])], ev.currentTarget ?? ev.target);
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" module>
|
<style lang="scss" module>
|
||||||
|
@ -354,6 +354,8 @@ export default function(props: MfmProps) {
|
|||||||
return [h(MkEmoji, {
|
return [h(MkEmoji, {
|
||||||
key: Math.random(),
|
key: Math.random(),
|
||||||
emoji: token.props.emoji,
|
emoji: token.props.emoji,
|
||||||
|
menu: props.enableEmojiMenu,
|
||||||
|
menuReaction: props.enableEmojiMenuReaction,
|
||||||
})];
|
})];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user