Merge branch 'when_the_same_language_is_selected' into for_webui
This commit is contained in:
@@ -19,6 +19,10 @@ main_page:
|
|||||||
translator: Translator
|
translator: Translator
|
||||||
translator_ctranslate2: Internal (Default)
|
translator_ctranslate2: Internal (Default)
|
||||||
|
|
||||||
|
translator_selector:
|
||||||
|
is_selected_same_language: |-
|
||||||
|
Since the same language is selected for both '{{your_language}}' and '{{target_language}}', only '{{translator_ctranslate2}}' is available.
|
||||||
|
|
||||||
message_log:
|
message_log:
|
||||||
all: All
|
all: All
|
||||||
sent: Sent
|
sent: Sent
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ main_page:
|
|||||||
translator: 翻訳エンジン
|
translator: 翻訳エンジン
|
||||||
translator_ctranslate2: オフライン翻訳 (Default)
|
translator_ctranslate2: オフライン翻訳 (Default)
|
||||||
|
|
||||||
|
translator_selector:
|
||||||
|
is_selected_same_language: |-
|
||||||
|
「{{your_language}}」と「{{target_language}}」に同じ言語が選択がされているため、「{{translator_ctranslate2}}」のみが使用できます。
|
||||||
|
|
||||||
message_log:
|
message_log:
|
||||||
all: 全て
|
all: 全て
|
||||||
sent: 送信
|
sent: 送信
|
||||||
|
|||||||
@@ -4,10 +4,13 @@ import styles from "./TranslatorSelectorOpenButton.module.scss";
|
|||||||
import { TranslatorSelector } from "./translator_selector/TranslatorSelector";
|
import { TranslatorSelector } from "./translator_selector/TranslatorSelector";
|
||||||
import { useStore_IsOpenedTranslatorSelector } from "@store";
|
import { useStore_IsOpenedTranslatorSelector } from "@store";
|
||||||
import { useLanguageSettings } from "@logics_main";
|
import { useLanguageSettings } from "@logics_main";
|
||||||
|
import WarningSvg from "@images/warning.svg?react";
|
||||||
|
|
||||||
export const TranslatorSelectorOpenButton = () => {
|
export const TranslatorSelectorOpenButton = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const {
|
const {
|
||||||
|
currentSelectedYourLanguages,
|
||||||
|
currentSelectedTargetLanguages,
|
||||||
currentSelectedPresetTabNumber,
|
currentSelectedPresetTabNumber,
|
||||||
currentTranslationEngines,
|
currentTranslationEngines,
|
||||||
currentSelectedTranslationEngines,
|
currentSelectedTranslationEngines,
|
||||||
@@ -21,6 +24,35 @@ export const TranslatorSelectorOpenButton = () => {
|
|||||||
|
|
||||||
const selected_engine_id = currentSelectedTranslationEngines.data[currentSelectedPresetTabNumber.data];
|
const selected_engine_id = currentSelectedTranslationEngines.data[currentSelectedPresetTabNumber.data];
|
||||||
|
|
||||||
|
const checkIsSelectedSameLanguage = () => {
|
||||||
|
const your_language_data = currentSelectedYourLanguages.data[currentSelectedPresetTabNumber.data];
|
||||||
|
const target_language_data = currentSelectedTargetLanguages.data[currentSelectedPresetTabNumber.data];
|
||||||
|
|
||||||
|
const yourLanguage = your_language_data["1"];
|
||||||
|
const yourLanguageName = yourLanguage.language;
|
||||||
|
const yourCountry = yourLanguage.country;
|
||||||
|
|
||||||
|
let is_selected_same_language = false;
|
||||||
|
|
||||||
|
for (const key in target_language_data) {
|
||||||
|
const targetLanguage = target_language_data[key];
|
||||||
|
|
||||||
|
if (targetLanguage.enable) {
|
||||||
|
const targetLanguageName = targetLanguage.language;
|
||||||
|
const targetCountry = targetLanguage.country;
|
||||||
|
|
||||||
|
if (yourLanguageName === targetLanguageName && yourCountry === targetCountry) {
|
||||||
|
is_selected_same_language = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return is_selected_same_language;
|
||||||
|
};
|
||||||
|
|
||||||
|
const is_selected_same_language = checkIsSelectedSameLanguage();
|
||||||
|
|
||||||
const getSelectedLabel = () => {
|
const getSelectedLabel = () => {
|
||||||
|
|
||||||
const selected_engine = translation_engines.find(
|
const selected_engine = translation_engines.find(
|
||||||
@@ -44,11 +76,16 @@ export const TranslatorSelectorOpenButton = () => {
|
|||||||
<div className={styles.translator_selector_button} onClick={openTranslatorSelector}>
|
<div className={styles.translator_selector_button} onClick={openTranslatorSelector}>
|
||||||
<p className={styles.label}>{t("main_page.translator")}: </p>
|
<p className={styles.label}>{t("main_page.translator")}: </p>
|
||||||
<p className={styles.label}>{selected_label}</p>
|
<p className={styles.label}>{selected_label}</p>
|
||||||
|
{is_selected_same_language
|
||||||
|
? <WarningSvg className={styles.warning_svg}/>
|
||||||
|
: null
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
{currentIsOpenedTranslatorSelector.data &&
|
{currentIsOpenedTranslatorSelector.data &&
|
||||||
<TranslatorSelector
|
<TranslatorSelector
|
||||||
selected_id={selected_engine_id}
|
selected_id={selected_engine_id}
|
||||||
translation_engines={translation_engines}
|
translation_engines={translation_engines}
|
||||||
|
is_selected_same_language={is_selected_same_language}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.translator_selector_button {
|
.translator_selector_button {
|
||||||
|
position: relative;
|
||||||
width: auto;
|
width: auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -26,3 +27,10 @@
|
|||||||
color: var(--dark_basic_text_color);
|
color: var(--dark_basic_text_color);
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.warning_svg {
|
||||||
|
margin-left: 0.2rem;
|
||||||
|
padding-bottom: 0.2rem;
|
||||||
|
width: 1.8rem;
|
||||||
|
color: #cb944f;
|
||||||
|
}
|
||||||
@@ -1,15 +1,17 @@
|
|||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
import styles from "./TranslatorSelector.module.scss";
|
import styles from "./TranslatorSelector.module.scss";
|
||||||
import { chunkArray } from "@utils";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
import { chunkArray } from "@utils";
|
||||||
import { useStore_IsOpenedTranslatorSelector } from "@store";
|
import { useStore_IsOpenedTranslatorSelector } from "@store";
|
||||||
import { useLanguageSettings } from "@logics_main";
|
import { useLanguageSettings } from "@logics_main";
|
||||||
|
|
||||||
export const TranslatorSelector = ({selected_id, translation_engines}) => {
|
export const TranslatorSelector = ({selected_id, translation_engines, is_selected_same_language}) => { const { t } = useTranslation();
|
||||||
const columns = chunkArray(translation_engines, 2);
|
const columns = chunkArray(translation_engines, 2);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div className={styles.container}>
|
||||||
|
<div className={styles.relative_container}>
|
||||||
<div className={styles.wrapper}>
|
<div className={styles.wrapper}>
|
||||||
{columns.map((column, column_index) => (
|
{columns.map((column, column_index) => (
|
||||||
<div className={styles.column_wrapper} key={`column_${column_index}`}>
|
<div className={styles.column_wrapper} key={`column_${column_index}`}>
|
||||||
@@ -25,6 +27,19 @@ export const TranslatorSelector = ({selected_id, translation_engines}) => {
|
|||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
{is_selected_same_language ?
|
||||||
|
<div className={styles.is_selected_same_language_wrapper}>
|
||||||
|
<p className={styles.is_selected_same_language_text}>
|
||||||
|
{t("main_page.translator_selector.is_selected_same_language", {
|
||||||
|
your_language: t("main_page.your_language"),
|
||||||
|
target_language: t("main_page.target_language"),
|
||||||
|
translator_ctranslate2: t("main_page.translator_ctranslate2"),
|
||||||
|
})}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
: null
|
||||||
|
}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
bottom: 100%;
|
bottom: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 26rem;
|
height: 26rem;
|
||||||
padding: 1rem;
|
|
||||||
background-color: (#000000dd);
|
background-color: (#000000dd);
|
||||||
// background-color: (var(--dark_875_color) + 80);
|
// background-color: (var(--dark_875_color) + 80);
|
||||||
backdrop-filter: blur(0.1rem);
|
backdrop-filter: blur(0.1rem);
|
||||||
@@ -12,7 +11,16 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.relative_container {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.wrapper {
|
.wrapper {
|
||||||
|
// padding: 1rem;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -61,3 +69,23 @@ $box_size: 6.8rem;
|
|||||||
.translator_name {
|
.translator_name {
|
||||||
font-size: 1.4rem;
|
font-size: 1.4rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.is_selected_same_language_wrapper {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: (#22222233);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: start;
|
||||||
|
pointer-events: none;
|
||||||
|
padding: 4rem 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is_selected_same_language_text {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
text-align: center;
|
||||||
|
text-wrap: balance;
|
||||||
|
color: var(--dark_basic_text_color);
|
||||||
|
}
|
||||||
1
src-ui/assets/warning.svg
Normal file
1
src-ui/assets/warning.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 5.177l8.631 15.823h-17.262l8.631-15.823zm0-4.177l-12 22h24l-12-22zm-1 9h2v6h-2v-6zm1 9.75c-.689 0-1.25-.56-1.25-1.25s.561-1.25 1.25-1.25 1.25.56 1.25 1.25-.561 1.25-1.25 1.25z"/></svg>
|
||||||
|
After Width: | Height: | Size: 257 B |
Reference in New Issue
Block a user