[Update] UI: ローマ字/かな 表示するように。
This commit is contained in:
@@ -45,6 +45,10 @@ export const Others = () => {
|
||||
<SendMessageFormatPartsContainer />
|
||||
<ReceivedMessageFormatPartsContainer />
|
||||
</div>
|
||||
<div>
|
||||
<ConvertMessageToRomajiContainer />
|
||||
<ConvertMessageToHiraganaContainer />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -201,4 +205,35 @@ const ReceivedMessageFormatPartsContainer = () => {
|
||||
format_id="received"
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
const ConvertMessageToRomajiContainer = () => {
|
||||
const { t } = useI18n();
|
||||
const { currentConvertMessageToRomaji, toggleConvertMessageToRomaji } = useOthers();
|
||||
|
||||
return (
|
||||
<CheckboxContainer
|
||||
label={t("config_page.others.convert_message_to_romaji.label")}
|
||||
desc={t(
|
||||
"config_page.others.convert_message_to_romaji.desc",
|
||||
{ convert_message_to_hiragana: t("config_page.others.convert_message_to_hiragana.label") }
|
||||
)}
|
||||
variable={currentConvertMessageToRomaji}
|
||||
toggleFunction={toggleConvertMessageToRomaji}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
const ConvertMessageToHiraganaContainer = () => {
|
||||
const { t } = useI18n();
|
||||
const { currentConvertMessageToHiragana, toggleConvertMessageToHiragana } = useOthers();
|
||||
|
||||
return (
|
||||
<CheckboxContainer
|
||||
label={t("config_page.others.convert_message_to_hiragana.label")}
|
||||
desc={t("config_page.others.convert_message_to_hiragana.desc")}
|
||||
variable={currentConvertMessageToHiragana}
|
||||
toggleFunction={toggleConvertMessageToHiragana}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -39,7 +39,7 @@ export const MessageContainer = ({ messages, status, category, created_at }) =>
|
||||
setIsLocked(true);
|
||||
};
|
||||
|
||||
const is_translated_exist = messages.translated?.length >= 1;
|
||||
const is_translation_exist = messages.translations?.length > 0;
|
||||
const is_pending = status === "pending";
|
||||
const is_sent_message = category === "sent";
|
||||
const is_system_message = category === "system";
|
||||
@@ -69,11 +69,11 @@ export const MessageContainer = ({ messages, status, category, created_at }) =>
|
||||
</div>
|
||||
<div className={clsx(styles.message_box, message_type_class_name)}>
|
||||
{is_system_message ? (
|
||||
<p className={styles.message_main_system}>{messages.message}</p>
|
||||
) : is_translated_exist ? (
|
||||
<p className={styles.message_main_system}>{messages.original.message}</p>
|
||||
) : is_translation_exist ? (
|
||||
<WithTranslatedMessages messages={messages} />
|
||||
) : (
|
||||
<p className={styles.message_main}>{messages.original}</p>
|
||||
<OriginalMessage messages={messages} />
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
@@ -88,13 +88,74 @@ export const MessageContainer = ({ messages, status, category, created_at }) =>
|
||||
);
|
||||
};
|
||||
|
||||
const WithTranslatedMessages = ({ messages }) => {
|
||||
const translated_data = Array.isArray(messages.translated) ? messages.translated : [messages.translated];
|
||||
const MessageWithTransliteration = ({ item }) => {
|
||||
const renderTokenNode = (token, key) => {
|
||||
const orig = token.orig ?? "";
|
||||
const hira = token.hira ?? "";
|
||||
const hepburn = token.hepburn ?? "";
|
||||
|
||||
if ((hira && orig === hira) || (hepburn && orig === hepburn) || (!hira && !hepburn)) {
|
||||
return (
|
||||
<span key={key} className={styles.token}>
|
||||
{orig}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
if (hira && hira !== orig) {
|
||||
const needHepburn = hepburn && hepburn !== orig;
|
||||
const titleAttr = needHepburn ? hepburn : undefined;
|
||||
return (
|
||||
<ruby key={key} title={titleAttr} className={styles.tokenRuby}>
|
||||
{orig}
|
||||
<rt>{hira}</rt>
|
||||
</ruby>
|
||||
);
|
||||
}
|
||||
|
||||
if (hepburn && hepburn !== orig) {
|
||||
return (
|
||||
<ruby key={key} className={styles.tokenRuby}>
|
||||
{orig}
|
||||
<rt>{hepburn}</rt>
|
||||
</ruby>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<span key={key} className={styles.token}>
|
||||
{orig}
|
||||
</span>
|
||||
);
|
||||
};
|
||||
|
||||
if (!item.transliteration.length) {
|
||||
return <p className={styles.message_main}>{item.message}</p>;
|
||||
}
|
||||
|
||||
return (
|
||||
<p className={styles.message_main}>
|
||||
{item.transliteration.map((token, idx) => renderTokenNode(token, idx))}
|
||||
</p>
|
||||
);
|
||||
};
|
||||
|
||||
const OriginalMessage = ({ messages }) => {
|
||||
return (
|
||||
<>
|
||||
<p className={styles.message_second}>{messages.original}</p>
|
||||
{translated_data.map((message, index) => (
|
||||
<p key={index} className={styles.message_main}>{message}</p>
|
||||
<MessageWithTransliteration item={messages.original} />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const WithTranslatedMessages = ({ messages }) => {
|
||||
return (
|
||||
<>
|
||||
<p className={styles.message_second}>{messages.original.message}</p>
|
||||
{messages.translations.map((item, idx) => (
|
||||
<div key={idx}>
|
||||
<MessageWithTransliteration item={item} />
|
||||
</div>
|
||||
))}
|
||||
</>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user