diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index bfa5f0b5..8c9b4cb2 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -64,7 +64,11 @@ export function SideBar() { - + diff --git a/src/components/boards/BoardAnalysis.tsx b/src/components/boards/BoardAnalysis.tsx index 8f5a2f98..81076d2f 100644 --- a/src/components/boards/BoardAnalysis.tsx +++ b/src/components/boards/BoardAnalysis.tsx @@ -173,32 +173,32 @@ function BoardAnalysis() { value="practice" leftSection={} > - { t("Board.Tabs.Practice") } + {t("Board.Tabs.Practice")} )} } > - { t("Board.Tabs.Analysis") } + {t("Board.Tabs.Analysis")} } > - { t("Board.Tabs.Database") } + {t("Board.Tabs.Database")} } > - { t("Board.Tabs.Annotate") } + {t("Board.Tabs.Annotate")} } > - { t("Board.Tabs.Info") } + {t("Board.Tabs.Info")} {isRepertoire && ( diff --git a/src/components/common/ConfirmModal.tsx b/src/components/common/ConfirmModal.tsx index 56f6ba82..ceac3bc7 100644 --- a/src/components/common/ConfirmModal.tsx +++ b/src/components/common/ConfirmModal.tsx @@ -26,12 +26,12 @@ function ConfirmModal({ {title} {description} - { t("Common.CannotUndo") } + {t("Common.CannotUndo")} )} )} - + {!selectedDatabase.error && ( )} - + {!selectedDatabase.error && ( @@ -303,7 +312,7 @@ export default function DatabasesPage() { setConvertLoading(false); }} > - { t("Databases.Settings.AddGames") } + {t("Databases.Settings.AddGames")} )} @@ -346,7 +355,7 @@ function GeneralSettings({ selectedDatabase: DatabaseInfo; mutate: () => void; }) { - const { t } = useTranslation() + const { t } = useTranslation(); const [title, setTitle] = useState(selectedDatabase.title); const [description, setDescription] = useState(selectedDatabase.description); @@ -422,11 +431,9 @@ function PlayerMerger({ return ( - { t("Databases.Settings.MergePlayers") } - - - { t("Databases.Settings.MergePlayers.Desc") } + {t("Databases.Settings.MergePlayers")} + {t("Databases.Settings.MergePlayers.Desc")} } > - { t("Databases.Settings.Merge") } + {t("Databases.Settings.Merge")} - { t("Databases.Settings.BatchDelete") } - - - { t("Databases.Settings.BatchDelete.Desc") } + {t("Databases.Settings.BatchDelete")} + {t("Databases.Settings.BatchDelete.Desc")} diff --git a/src/components/engines/AddEngine.tsx b/src/components/engines/AddEngine.tsx index f182d2b1..60008ac6 100644 --- a/src/components/engines/AddEngine.tsx +++ b/src/components/engines/AddEngine.tsx @@ -64,7 +64,8 @@ function AddEngine({ validate: { name: (value) => { if (!value) return t("Common.RequireName"); - if (engines.find((e) => e.name === value)) return t("Common.NameAlreadyUsed"); + if (engines.find((e) => e.name === value)) + return t("Common.NameAlreadyUsed"); }, path: (value) => { if (!value) return t("Common.RequirePath"); @@ -73,12 +74,16 @@ function AddEngine({ }); return ( - setOpened(false)} title={ t("Engines.Add.Title") }> + setOpened(false)} + title={t("Engines.Add.Title")} + > - { t("Common.Download") } - { t("Engines.Add.Cloud") } - { t("Common.Local") } + {t("Common.Download")} + {t("Engines.Add.Cloud")} + {t("Common.Local")} {isLoading && ( @@ -99,10 +104,10 @@ function AddEngine({ {error && ( } - title={ t("Common.Error") } + title={t("Common.Error")} color="red" > - { t("Engines.Add.ErrorFetch") } + {t("Engines.Add.ErrorFetch")} )} @@ -128,7 +133,7 @@ function AddEngine({ { setEngines(async (prev) => [...(await prev), values]); @@ -176,7 +181,7 @@ function CloudCard({ engine }: { engine: RemoteEngine }) { ]); }} > - { t("Common.Add") } + {t("Common.Add")} diff --git a/src/components/engines/EditEngine.tsx b/src/components/engines/EditEngine.tsx index cc0eb0dd..a3e04550 100644 --- a/src/components/engines/EditEngine.tsx +++ b/src/components/engines/EditEngine.tsx @@ -30,7 +30,7 @@ export default function EditEngine({ return ( { setEngines(async (prev) => diff --git a/src/components/engines/EnginesPage.tsx b/src/components/engines/EnginesPage.tsx index c57eeca6..e0ca0710 100644 --- a/src/components/engines/EnginesPage.tsx +++ b/src/components/engines/EnginesPage.tsx @@ -71,7 +71,7 @@ export default function EnginesPage() { - { t("Engines.Title") } + {t("Engines.Title")} @@ -115,7 +115,7 @@ export default function EnginesPage() { onClick={() => setOpened(true)} > - { t("Common.AddNew") } + {t("Common.AddNew")} @@ -125,16 +125,16 @@ export default function EnginesPage() { {!selectedEngine || selected === undefined ? ( - { t("Engines.Settings.NoEngine") } + {t("Engines.Settings.NoEngine")} ) : selectedEngine.type === "local" ? ( ) : ( - + { setEngines(async (prev) => { @@ -146,7 +146,7 @@ export default function EnginesPage() { /> { const checked = e.currentTarget.checked; @@ -158,9 +158,12 @@ export default function EnginesPage() { }} /> - + - { t("Engines.Settings.NumOfLines") } + {t("Engines.Settings.NumOfLines")} - { t("Common.Remove") } + {t("Common.Remove")} @@ -319,20 +322,20 @@ function EngineSettings({ return ( - + setEngine({ ...engine, name: e.currentTarget.value }) } /> setEngine({ ...engine, @@ -356,7 +359,7 @@ function EngineSettings({ /> setEngine({ ...engine, loaded: e.currentTarget.checked }) @@ -394,13 +397,19 @@ function EngineSettings({ )} - + setEngine({ ...engine, go: v })} /> - + {completeOptions .filter((option: { type: string }) => option.type !== "check") @@ -491,7 +500,7 @@ function EngineSettings({ { @@ -530,7 +537,7 @@ function EngineSettings({ setSelected(null); toggleDeleteModal(); }} - confirmLabel={ t("Common.Remove") } + confirmLabel={t("Common.Remove")} /> void; }) { - const { t } = useTranslation() + const { t } = useTranslation(); const [value, setValue] = useState(JSON.stringify(engine, null, 2)); const [error, setError] = useState(null); return ( - + - { t("Common.Save") } + {t("Common.Save")} ); diff --git a/src/components/files/DirectoryTable.tsx b/src/components/files/DirectoryTable.tsx index 6c3d365f..3f0e5d13 100644 --- a/src/components/files/DirectoryTable.tsx +++ b/src/components/files/DirectoryTable.tsx @@ -240,7 +240,8 @@ function Table({ accessor: "metadata.type", title: "Type", width: 100, - render: (row) => t(`Files.FileType.${capitalize(row.metadata?.type || "Folder")}`), + render: (row) => + t(`Files.FileType.${capitalize(row.metadata?.type || "Folder")}`), }, { accessor: "lastModified", diff --git a/src/components/files/FileCard.tsx b/src/components/files/FileCard.tsx index 5977937b..98012123 100644 --- a/src/components/files/FileCard.tsx +++ b/src/components/files/FileCard.tsx @@ -74,7 +74,9 @@ function FileCard({ {selected?.name} - {t(`Files.FileType.${capitalize(selected.metadata.type)}`)} + + {t(`Files.FileType.${capitalize(selected.metadata.type)}`)} + diff --git a/src/components/files/FilesPage.tsx b/src/components/files/FilesPage.tsx index a2766c9d..60bfc6ed 100644 --- a/src/components/files/FilesPage.tsx +++ b/src/components/files/FilesPage.tsx @@ -102,7 +102,7 @@ const useFileDirectory = (dir: string) => { }; function FilesPage() { - const { t } = useTranslation() + const { t } = useTranslation(); const { documentDir } = useLoaderData({ from: "/files" }); const { files, isLoading, error, mutate } = useFileDirectory(documentDir); @@ -142,7 +142,7 @@ function FilesPage() { /> )} - { t("Files.Title") } + {t("Files.Title")} @@ -161,7 +161,7 @@ function FilesPage() { leftSection={} onClick={() => toggleCreateModal()} > - { t("Common.Create") } + {t("Common.Create")} @@ -205,7 +205,9 @@ function FilesPage() { <> { diff --git a/src/components/files/Modals.tsx b/src/components/files/Modals.tsx index f57649ce..2d26120d 100644 --- a/src/components/files/Modals.tsx +++ b/src/components/files/Modals.tsx @@ -37,7 +37,7 @@ export function CreateModal({ setFiles: (files: MetadataOrEntry[]) => void; setSelected: React.Dispatch>; }) { - const { t } = useTranslation() + const { t } = useTranslation(); const [filename, setFilename] = useState(""); const [filetype, setFiletype] = useState("game"); @@ -65,7 +65,11 @@ export function CreateModal({ } return ( - setOpened(false)} title={t("Files.Create.Title")}> + setOpened(false)} + title={t("Files.Create.Title")} + >
{ e.preventDefault(); @@ -93,7 +97,9 @@ export function CreateModal({ id={v.value} isSelected={filetype === v.value} setSelected={setFiletype} - Header={{ t(`Files.FileType.${v.label}`) }} + Header={ + {t(`Files.FileType.${v.label}`)} + } /> ))} @@ -171,7 +177,11 @@ export function EditModal({ } return ( - setOpened(false)} title={t("Files.Edit.Title")}> + setOpened(false)} + title={t("Files.Edit.Title")} + > { e.preventDefault(); @@ -199,7 +209,9 @@ export function EditModal({ id={v.value} isSelected={filetype === v.value} setSelected={setFiletype} - Header={{ t(`Files.FileType.${v.label}`) }} + Header={ + {t(`Files.FileType.${v.label}`)} + } /> ))} diff --git a/src/components/panels/analysis/ReportModal.tsx b/src/components/panels/analysis/ReportModal.tsx index 3a31e1e6..fb2b3310 100644 --- a/src/components/panels/analysis/ReportModal.tsx +++ b/src/components/panels/analysis/ReportModal.tsx @@ -70,8 +70,7 @@ function ReportModal({ if (!value) return t("Board.Analysis.EngineRequired"); }, novelty: (value) => { - if (value && !referenceDb) - return t("Board.Analysis.RefDBRequired"); + if (value && !referenceDb) return t("Board.Analysis.RefDBRequired"); }, }, }); diff --git a/src/components/panels/annotation/AnnotationPanel.tsx b/src/components/panels/annotation/AnnotationPanel.tsx index 92793283..6bb16953 100644 --- a/src/components/panels/annotation/AnnotationPanel.tsx +++ b/src/components/panels/annotation/AnnotationPanel.tsx @@ -38,9 +38,10 @@ const SymbolButton = memo(function SymbolButton({ const isActive = curAnnotations.includes(annotation); const theme = useMantineTheme(); return ( - + setAnnotation(annotation)} variant={isActive ? "filled" : "default"} diff --git a/src/components/panels/database/DatabasePanel.tsx b/src/components/panels/database/DatabasePanel.tsx index a00fd96b..3851a33a 100644 --- a/src/components/panels/database/DatabasePanel.tsx +++ b/src/components/panels/database/DatabasePanel.tsx @@ -179,13 +179,11 @@ function DatabasePanel() { {tabType !== "options" && ( - { - t("Board.Database.Matches", { - matches: formatNumber( - Math.max(grandTotal || 0, openingData?.games.length || 0), - ) - }) - } + {t("Board.Database.Matches", { + matches: formatNumber( + Math.max(grandTotal || 0, openingData?.games.length || 0), + ), + })} )} diff --git a/src/components/panels/database/NoDatabaseWarning.tsx b/src/components/panels/database/NoDatabaseWarning.tsx index 4d06604c..e62a1eb9 100644 --- a/src/components/panels/database/NoDatabaseWarning.tsx +++ b/src/components/panels/database/NoDatabaseWarning.tsx @@ -9,7 +9,8 @@ function NoDatabaseWarning() { <> {t("Board.Database.NoReference1")} - {t("Board.Database.NoReference2")} {t("Board.Database.SelectReference")} {" "} + {t("Board.Database.NoReference2")}{" "} + {t("Board.Database.SelectReference")}{" "} {t("Board.Database.NoReference3")} diff --git a/src/components/panels/practice/PracticePanel.tsx b/src/components/panels/practice/PracticePanel.tsx index 8a6b5fcd..312ad65d 100644 --- a/src/components/panels/practice/PracticePanel.tsx +++ b/src/components/panels/practice/PracticePanel.tsx @@ -154,7 +154,9 @@ function PracticePanel() {
- {t("Board.Practice.Practiced")} + + {t("Board.Practice.Practiced")} + {stats.practiced}
@@ -179,7 +181,9 @@ function PracticePanel() { - + diff --git a/src/components/settings/SettingsPage.tsx b/src/components/settings/SettingsPage.tsx index d38450d7..abbab71f 100644 --- a/src/components/settings/SettingsPage.tsx +++ b/src/components/settings/SettingsPage.tsx @@ -76,28 +76,28 @@ export default function Page() { }> - { t("Settings.Board") } + {t("Settings.Board")} }> - { t("Settings.Inputs") } + {t("Settings.Inputs")} }> - { t("Settings.OpeningReport") } + {t("Settings.OpeningReport")} }> - { t("Settings.Anarchy") } + {t("Settings.Anarchy")} }> - { t("Settings.Appearance") } + {t("Settings.Appearance")} }> - { t("Settings.Sound") } + {t("Settings.Sound")} }> - { t("Settings.Keybinds") } + {t("Settings.Keybinds")} }> - { t("Settings.Directories") } + {t("Settings.Directories")} @@ -105,10 +105,10 @@ export default function Page() { - { t("Settings.Board") } + {t("Settings.Board")} - { t("Settings.Board.Desc") } + {t("Settings.Board.Desc")}
- { t("Settings.Arrows") } + {t("Settings.Arrows")} - { t("Settings.Arrows.Desc") } + {t("Settings.Arrows.Desc")}
@@ -146,9 +146,9 @@ export default function Page() { className={classes.item} >
- { t("Settings.SnapArrows") } + {t("Settings.SnapArrows")} - { t("Settings.SnapArrows.Desc") } + {t("Settings.SnapArrows.Desc")}
@@ -161,9 +161,9 @@ export default function Page() { className={classes.item} >
- { t("Settings.ConsecutiveArrows") } + {t("Settings.ConsecutiveArrows")} - { t("Settings.ConsecutiveArrows.Desc") } + {t("Settings.ConsecutiveArrows.Desc")}
@@ -175,9 +175,9 @@ export default function Page() { className={classes.item} >
- { t("Settings.AutoPromition") } + {t("Settings.AutoPromition")} - { t("Settings.AutoPromition.Desc") } + {t("Settings.AutoPromition.Desc")}
@@ -189,9 +189,9 @@ export default function Page() { className={classes.item} >
- { t("Settings.Coordinates") } + {t("Settings.Coordinates")} - { t("Settings.Coordinates.Desc") } + {t("Settings.Coordinates.Desc")}
@@ -203,9 +203,9 @@ export default function Page() { className={classes.item} >
- { t("Settings.AutoSave") } + {t("Settings.AutoSave")} - { t("Settings.AutoSave.Desc") } + {t("Settings.AutoSave.Desc")}
@@ -218,9 +218,9 @@ export default function Page() { className={classes.item} >
- { t("Settings.PreviewBoard") } + {t("Settings.PreviewBoard")} - { t("Settings.PreviewBoard.Desc") } + {t("Settings.PreviewBoard.Desc")}
@@ -232,9 +232,9 @@ export default function Page() { className={classes.item} >
- { t("Settings.ScrollThroughMoves") } + {t("Settings.ScrollThroughMoves")} - { t("Settings.ScrollThroughMoves.Desc") } + {t("Settings.ScrollThroughMoves.Desc")}
diff --git a/src/index.tsx b/src/index.tsx index 152d9c6f..368b8c49 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -9,16 +9,14 @@ import { initReactI18next } from "react-i18next"; import { en_US } from "./translation/en_US"; import { zh_CN } from "./translation/zh_CN"; -i18n - .use(initReactI18next) - .init({ - resources: { - en: en_US, - zh_CN: zh_CN - }, - lng: "zh_CN", - fallbackLng: "en" - }) +i18n.use(initReactI18next).init({ + resources: { + en: en_US, + zh_CN: zh_CN, + }, + lng: "zh_CN", + fallbackLng: "en", +}); dayjs.extend(customParseFormat); diff --git a/src/translation/en_US.ts b/src/translation/en_US.ts index e3d512c4..fdc66f10 100644 --- a/src/translation/en_US.ts +++ b/src/translation/en_US.ts @@ -1,324 +1,348 @@ -export const en_US = { - translation: { - "Common.On": "ON", - "Common.Off": "OFF", - "Common.Name": "Name", - "Common.Description": "Description", - "Common.Version": "Version", - "Common.Enabled": "Enabled", - "Common.Remove": "Remove", - "Common.Delete": "Delete", - "Common.Add": "Add", - "Common.Open": "Open", - "Common.Create": "Create", - "Common.Save": "Save", - "Common.Download": "Download", - "Common.Local": "Local", - "Common.Install": "Install", - "Common.Installed": "Installed", - "Common.Downloading": "Downloading", - "Common.Extracting": "Extracting", - "Common.Error": "Error", - "Common.AddNew": "Add New", - "Common.OpenFolder": "Open folder in file explorer", - "Common.Unknown": "Unknown", - "Common.Cancel": "Cancel", - "Common.CannotUndo": "This action cannot be undone.", - "Common.NameAlreadyUsed": "Name is required", - "Common.RequireName": "Name already used", - "Common.RequirePath": "Path is required", - "Common.PGNFile": "PGN file", - "Common.PGNGame": "PGN Game", - "Common.Size": "Size", - "Common.GeneralSettings": "General settings", - "Common.Data": "Data", - "Common.Games": "Games", - "Common.Edit": "Edit", - "Common.EnterFileName": "Enter your filename", - "Common.Next": "Next", - "Common.Skip": "Skip", - "Common.Reset": "Reset", - "Common.Incorrect": "Incorrect", - "Common.Run": "Run", - "Common.Stop": "Stop", - "Common.Engine": "Engine", - "Common.Checkmate": "Checkmate", - "Common.Stalemate": "Stalemate", - "Common.WHITE": "WHITE", - "Common.BLACK": "BLACK", - - "GoMode.Time": "Time", - "GoMode.Depth": "Depth", - "GoMode.Nodes": "Nodes", - "GoMode.Infinite": "Infinite", - - "Annotate.Brilliant": "Brilliant", - "Annotate.Good": "Good", - "Annotate.Interesting": "Interesting", - "Annotate.Dubious": "Dubious", - "Annotate.Mistake": "Mistake", - "Annotate.Blunder": "Blunder", - "Annotate.WhiteWinning": "White is winning", - "Annotate.WhiteAdvantage": "White has a clear advantage", - "Annotate.WhiteEdge": "White has a slight advantage", - "Annotate.Equal": "Equal position", - "Annotate.Unclear": "Unclear position", - "Annotate.BlackEdge": "Black has a slight advantage", - "Annotate.BlackAdvantage": "Black has a clear advantage", - "Annotate.BlackWinning": "Black is winning", - "Annotate.Novelty": "Novelty", - "Annotate.Development": "Development", - "Annotate.Initiative": "Initiative", - "Annotate.Attack": "Attack", - "Annotate.Counterplay": "Counterplay", - "Annotate.WithCompensation": "With compensation", - "Annotate.TimeTrouble": "Time Trouble", - "Annotate.WithIdea": "With the idea", - "Annotate.OnlyMove": "Only move", - "Annotate.Zugzwang": "Zugzwang", - - "RichText.Bold": "Bold", - "RichText.Italic": "Italic", - "RichText.Underline": "Underline", - "RichText.Strike": "Strikethrough", - "RichText.ClearFormatting": "Clear formatting", - "RichText.H1": "Heading 1", - "RichText.H2": "Heading 2", - "RichText.H3": "Heading 3", - "RichText.H4": "Heading 4", - "RichText.Quote": "Blockquote", - "RichText.HLine": "Horizontal line", - "RichText.BulletList": "Bullet list", - "RichText.NumberedList": "Ordered list", - "RichText.Link": "Link", - "RichText.RemoveLink": "Remove link", - - "TimeControl.UltraBullet": "UltraBullet", - "TimeControl.Bullet": "Bullet", - "TimeControl.Blitz": "Blitz", - "TimeControl.Rapid": "Rapid", - "TimeControl.Classical": "Classical", - "TimeControl.Correspondence": "Correspondence", - - "Menu.File": "File", - "Menu.File.NewTab": "New Tab", - "Menu.File.OpenFile": "Open File", - "Menu.File.Exit": "Exit", - "Menu.View": "View", - "Menu.View.Reload": "Reload", - "Menu.Help": "Help", - "Menu.Help.Documentation": "Documentation", - "Menu.Help.ClearSavedData": "Clear saved data", - "Menu.Help.OpenLogs": "Open Logs", - "Menu.Help.CheckUpdate": "Check for updates", - "Menu.Help.About": "About", - - "SideBar.Board": "Board", - "SideBar.User": "User", - "SideBar.Files": "Files", - "SideBar.Databases": "Databases", - "SideBar.Engines": "Engines", - "SideBar.Settings": "Settings", - - "Tab.NewTab": "New Tab", - - "Home.Card.PlayChess.Title": "Play Chess", - "Home.Card.PlayChess.Desc": "Play against an engine or a friend", - "Home.Card.PlayChess.Button": "Play", - "Home.Card.AnalysisBoard.Title": "Analysis Board", - "Home.Card.AnalysisBoard.Desc": "Analyze a game or position", - "Home.Card.AnalysisBoard.Button": "Open", - "Home.Card.ImportGame.Title": "Import Game", - "Home.Card.ImportGame.Desc": "Import a game from a PGN", - "Home.Card.ImportGame.Button": "Import", - "Home.Card.Puzzle.Title": "Puzzles", - "Home.Card.Puzzle.Desc": "Train your chess skills", - "Home.Card.Puzzle.Button": "Train", - - "Board.Tabs.Practice": "Practice", - "Board.Tabs.Analysis": "Analysis", - "Board.Tabs.Database": "Database", - "Board.Tabs.Annotate": "Annotate", - "Board.Tabs.Info": "Info", - "Board.Practice.Train": "Train", - "Board.Practice.Build": "Build", - "Board.Practice.NoPositionForTrain1": "There are no position to practice. Start by adding moves to this PGN file.", - "Board.Practice.NoPositionForTrain2": "You'll need to change to Analysis mode to be able to add moves.", - "Board.Practice.SeeAnser": "See Answer", - "Board.Practice.Practiced": "Practiced", - "Board.Practice.Due": "Due", - "Board.Practice.Unseen": "Unseen", - "Board.Practice.ShowAll": "Show all positions", - "Board.Practice.ShowLogs": "Show logs", - "Board.Practice.PracticedAll1": "You have practiced all positions.", - "Board.Practice.PracticedAll2": "The next review is on", - "Board.Practice.CorrectMoveWas": "The correct move was {{move}}", - "Board.Analysis.Engines": "Engines", - "Board.Analysis.Report": "Report", - "Board.Analysis.Logs": "Logs", - "Board.Analysis.Summary": "Summary", - "Board.Analysis.InactiveEngine": "Engine isn't enabled", - "Board.Analysis.SyncGlobally": "Sync globally", - "Board.Analysis.KillEngine": "Kill engine", - "Board.Analysis.GenerateReport": "Generate report", - "Board.Analysis.ReportGenerated": "Report generated", - "Board.Analysis.GeneratingReport": "Generating report", - "Board.Analysis.NotAnalysed": "Not analysed", - "Board.Analysis.EngineRequired": "Engine is required", - "Board.Analysis.RefDBRequired": "No reference database selected. Select one first in the databases page", - "Board.Analysis.Time": "Time (ms)", - "Board.Analysis.Reversed": "Reversed analysis", - "Board.Analysis.Reversed.Desc": "Analyze the game in starting from the last move.", - "Board.Analysis.AnnotateNovelties": "Annotate Novelties", - "Board.Analysis.AnnotateNovelties.Desc": "Add a comment to the first position that is not in the reference database.", - "Board.Analysis.Analyze": "Analyze", - "Board.Analysis.Advantage": "Advantage", - "Board.Analysis.Accuracy": "Accuracy", - "Board.Database.Local": "Local", - "Board.Database.LichessAll": "Lichess All", - "Board.Database.LichessMaster": "Lichess Masters", - "Board.Database.Matches": "{{matches}} matches", - "Board.Database.Stats": "Stats", - "Board.Database.Games": "Games", - "Board.Database.Options": "Options", - "Board.Database.NoReference1": "No reference database selected.", - "Board.Database.NoReference2": "Please", - "Board.Database.SelectReference": "add a database", - "Board.Database.NoReference3": "first and mark it as the reference.", - "Board.Database.TimeControl": "Time control", - "Board.Database.AverageRating": "Average rating", - "Board.Annotate.WriteHere": "Write here...", - - "Engines.Title": "Your Engines", - "Engines.Settings.NoEngine": "No engine selected", - "Engines.Settings.SearchSettings": "Search settings", - "Engines.Settings.AdvancedSettings": "Advanced settings", - "Engines.Settings.NumOfLines": "Number of lines", - "Engines.Settings.NumOfCores": "Number of cores", - "Engines.Settings.SizeOfHash": "Size of Hash", - "Engines.Settings.EditJSON": "Edit JSON", - "Engines.Settings.Reset": "Reset to default", - "Engines.Add.Title": "Add Engine", - "Engines.Add.Cloud": "Cloud", - "Engines.Add.ErrorFetch": "Failed to fetch the engine's info from the server.", - "Engines.Add.BinaryFile": "Binary file", - "Engines.Add.BinaryFile.Desc": "Click to select the binary file", - "Engines.Add.Name": "Name", - "Engines.Add.Name.Autodetect": "Autodetect", - "Engines.Add.Elo.Desc": "Engine's Elo", - "Engines.Add.ImageFile": "Image file", - "Engines.Add.ImageFile.Desc": "Click to select the image file (recommended size: 60x60)", - "Engines.Remove.Title": "Remove Engine", - "Engines.Remove.Message": "Are you sure you want to remove this engine from En Croissant?", - - "Databases.Title": "Your Databases", - "Databases.Card.Games": "Games", - "Databases.Card.Players": "Players", - "Databases.Card.Storage": "Storage", - "Databases.Add.Title": "Add Database", - "Databases.Add.Web": "Web", - "Databases.Add.ErrorFetch": "Failed to fetch the database's info from the server.", - "Databases.Add.ClickToSelectPGN": "Click to select the PGN file", - "Databases.Add.Convert": "Convert", - "Databases.Settings.ReferenceDatabase": "Reference Database", - "Databases.Settings.Indexed": "Indexed", - "Databases.Settings.Indexed.Desc": "Indexes are used to speed up the search process, but they take up extra space.", - "Databases.Settings.Events": "Events", - "Databases.Settings.Explore": "Explore", - "Databases.Settings.AdvancedTools": "Advanced tools", - "Databases.Settings.MergePlayers": "Merge Players", - "Databases.Settings.MergePlayers.Desc": "Replace all occurrences of the first player with the second player in the database.", - "Databases.Settings.Merge": "Merge", - "Databases.Settings.BatchDelete": "Batch Delete", - "Databases.Settings.BatchDelete.Desc": "These actions will irreversibly remove games from the database. Use with caution.", - "Databases.Settings.RemoveDup": "Remove Duplicates", - "Databases.Settings.RemoveEmpty": "Remove Empty Games", - "Databases.Settings.Actions": "Actions", - "Databases.Settings.AddGames": "Add Games", - "Databases.Settings.ExportPGN": "Export to PGN", - "Databases.Delete.Title": "Delete Database", - "Databases.Delete.Message": "Are you sure you want to delete this database?", - - "Files.Title": "Files", - "Files.FileType": "File type", - "Files.FileType.Game": "Game", - "Files.FileType.Repertoire": "Repertoire", - "Files.FileType.Tournament": "Tournament", - "Files.FileType.Puzzle": "Puzzle", - "Files.FileType.Other": "Other", - "Files.FileType.Folder": "Folder", - "Files.Delete.Title": "Delete file", - "Files.Delete.Message": "Are you sure you want to delete {{fileName}}?", - "Files.EditMetadata": "Edit Metadata", - "Files.Edit.Title": "Edit file", - "Files.Create.Title": "Create file", - "Files.Search": "Search for files", - - "Settings.Board": "Board", - "Settings.Inputs": "Inputs", - "Settings.OpeningReport": "Opening Report", - "Settings.Anarchy": "Anarchy", - "Settings.Appearance": "Appearance", - "Settings.Sound": "Sound", - "Settings.Keybinds": "Keybinds", - "Settings.Directories": "Directories", - - "Settings.Board.Desc": "Customize the analysis board and game controls", - "Settings.PieceDest": "Piece Destinations", - "Settings.PieceDest.Desc": "Show possible moves for each piece", - "Settings.Arrows": "Arrows", - "Settings.Arrows.Desc": "Show best move arrows", - "Settings.SnapArrows": "Snap Arrows", - "Settings.SnapArrows.Desc": "Snap arrows to valid moves", - "Settings.ConsecutiveArrows": "Consecutive Arrows", - "Settings.ConsecutiveArrows.Desc": "Show multiple arrows for the best line, if it involves moving the same piece several times", - "Settings.AutoPromition": "Auto Promotion", - "Settings.AutoPromition.Desc": "Automatically promote to a queen when a pawn reaches the last rank", - "Settings.Coordinates": "Coordinates", - "Settings.Coordinates.Desc": "Show coordinates on the board", - "Settings.AutoSave": "Auto Save", - "Settings.AutoSave.Desc": "Auto save to file after each move", - "Settings.PreviewBoard": "Preview Board", - "Settings.PreviewBoard.Desc": "Show a preview of the board when hovering over a move in the engine analysis", - "Settings.ScrollThroughMoves": "Scroll Through Moves", - "Settings.ScrollThroughMoves.Desc": "Enable or disable scrolling through moves on the chessboard", - "Settings.Inputs.Desc": "Customize the input settings", - "Settings.Inputs.TextInput": "Text Move Input", - "Settings.Inputs.TextInput.Desc": "Enter moves in text format", - "Settings.Inputs.SpellCheck": "Spell Check", - "Settings.Inputs.SpellCheck.Desc": "Enable or disable spell check on text inputs", - "Settings.OpeningReport.Desc": "Customize the opening report settings", - "Settings.OpeningReport.PercentCoverage": "Percent Coverage", - "Settings.OpeningReport.PercentCoverage.Desc": "Percentage of moves covered in each position", - "Settings.OpeningReport.MinGames": "Minimum Games", - "Settings.OpeningReport.MinGames.Desc": "Minimum number of games in each position for it to be considered", - "Settings.Anarchy.Desc": "Fun options", - "Settings.Anarchy.ForcedEnCroissant": "Forced En Croissant", - "Settings.Anarchy.ForcedEnCroissant.Desc": "Forces you to play En Croissant, if it's a legal move.", - "Settings.Appearance.Desc": "Customize the look of the app", - "Settings.Appearance.Theme": "Theme", - "Settings.Appearance.Theme.Desc": "Overall color scheme", - "Settings.Appearance.Theme.Light": "Light", - "Settings.Appearance.Theme.Dark": "Dark", - "Settings.Appearance.TitleBar": "Title Bar", - "Settings.Appearance.TitleBar.Desc": "Choose between native or custom title bar", - "Settings.Appearance.TitleBar.Native": "Native", - "Settings.Appearance.TitleBar.Custom": "Custom", - "Settings.Appearance.FontSize": "Font Size", - "Settings.Appearance.FontSize.Desc": "Overall font size", - "Settings.Appearance.PieceSet": "Piece Set", - "Settings.Appearance.PieceSet.Desc": "Pieces used on the boards", - "Settings.Appearance.BoardImage": "Board Image", - "Settings.Appearance.BoardImage.Desc": "Image used as the background of the board", - "Settings.Appearance.AccentColor": "Accent Color", - "Settings.Appearance.AccentColor.Desc": "Main color of the app", - "Settings.Sound.Desc": "Customize the sound settings", - "Settings.Sound.Volume": "Volume", - "Settings.Sound.Volume.Desc": "Overall volume", - "Settings.Sound.Collection": "Sound collection", - "Settings.Sound.Collection.Desc": "Collection of sounds used", - "Settings.Directories.Desc": "Customize the directories used by the app", - "Settings.Directories.Files": "Files directory", - "Settings.Directories.Files.Desc": "This is where your games in the Files page are stored", - } -} +export const en_US = { + translation: { + "Common.On": "ON", + "Common.Off": "OFF", + "Common.Name": "Name", + "Common.Description": "Description", + "Common.Version": "Version", + "Common.Enabled": "Enabled", + "Common.Remove": "Remove", + "Common.Delete": "Delete", + "Common.Add": "Add", + "Common.Open": "Open", + "Common.Create": "Create", + "Common.Save": "Save", + "Common.Download": "Download", + "Common.Local": "Local", + "Common.Install": "Install", + "Common.Installed": "Installed", + "Common.Downloading": "Downloading", + "Common.Extracting": "Extracting", + "Common.Error": "Error", + "Common.AddNew": "Add New", + "Common.OpenFolder": "Open folder in file explorer", + "Common.Unknown": "Unknown", + "Common.Cancel": "Cancel", + "Common.CannotUndo": "This action cannot be undone.", + "Common.NameAlreadyUsed": "Name is required", + "Common.RequireName": "Name already used", + "Common.RequirePath": "Path is required", + "Common.PGNFile": "PGN file", + "Common.PGNGame": "PGN Game", + "Common.Size": "Size", + "Common.GeneralSettings": "General settings", + "Common.Data": "Data", + "Common.Games": "Games", + "Common.Edit": "Edit", + "Common.EnterFileName": "Enter your filename", + "Common.Next": "Next", + "Common.Skip": "Skip", + "Common.Reset": "Reset", + "Common.Incorrect": "Incorrect", + "Common.Run": "Run", + "Common.Stop": "Stop", + "Common.Engine": "Engine", + "Common.Checkmate": "Checkmate", + "Common.Stalemate": "Stalemate", + "Common.WHITE": "WHITE", + "Common.BLACK": "BLACK", + + "GoMode.Time": "Time", + "GoMode.Depth": "Depth", + "GoMode.Nodes": "Nodes", + "GoMode.Infinite": "Infinite", + + "Annotate.Brilliant": "Brilliant", + "Annotate.Good": "Good", + "Annotate.Interesting": "Interesting", + "Annotate.Dubious": "Dubious", + "Annotate.Mistake": "Mistake", + "Annotate.Blunder": "Blunder", + "Annotate.WhiteWinning": "White is winning", + "Annotate.WhiteAdvantage": "White has a clear advantage", + "Annotate.WhiteEdge": "White has a slight advantage", + "Annotate.Equal": "Equal position", + "Annotate.Unclear": "Unclear position", + "Annotate.BlackEdge": "Black has a slight advantage", + "Annotate.BlackAdvantage": "Black has a clear advantage", + "Annotate.BlackWinning": "Black is winning", + "Annotate.Novelty": "Novelty", + "Annotate.Development": "Development", + "Annotate.Initiative": "Initiative", + "Annotate.Attack": "Attack", + "Annotate.Counterplay": "Counterplay", + "Annotate.WithCompensation": "With compensation", + "Annotate.TimeTrouble": "Time Trouble", + "Annotate.WithIdea": "With the idea", + "Annotate.OnlyMove": "Only move", + "Annotate.Zugzwang": "Zugzwang", + + "RichText.Bold": "Bold", + "RichText.Italic": "Italic", + "RichText.Underline": "Underline", + "RichText.Strike": "Strikethrough", + "RichText.ClearFormatting": "Clear formatting", + "RichText.H1": "Heading 1", + "RichText.H2": "Heading 2", + "RichText.H3": "Heading 3", + "RichText.H4": "Heading 4", + "RichText.Quote": "Blockquote", + "RichText.HLine": "Horizontal line", + "RichText.BulletList": "Bullet list", + "RichText.NumberedList": "Ordered list", + "RichText.Link": "Link", + "RichText.RemoveLink": "Remove link", + + "TimeControl.UltraBullet": "UltraBullet", + "TimeControl.Bullet": "Bullet", + "TimeControl.Blitz": "Blitz", + "TimeControl.Rapid": "Rapid", + "TimeControl.Classical": "Classical", + "TimeControl.Correspondence": "Correspondence", + + "Menu.File": "File", + "Menu.File.NewTab": "New Tab", + "Menu.File.OpenFile": "Open File", + "Menu.File.Exit": "Exit", + "Menu.View": "View", + "Menu.View.Reload": "Reload", + "Menu.Help": "Help", + "Menu.Help.Documentation": "Documentation", + "Menu.Help.ClearSavedData": "Clear saved data", + "Menu.Help.OpenLogs": "Open Logs", + "Menu.Help.CheckUpdate": "Check for updates", + "Menu.Help.About": "About", + + "SideBar.Board": "Board", + "SideBar.User": "User", + "SideBar.Files": "Files", + "SideBar.Databases": "Databases", + "SideBar.Engines": "Engines", + "SideBar.Settings": "Settings", + + "Tab.NewTab": "New Tab", + + "Home.Card.PlayChess.Title": "Play Chess", + "Home.Card.PlayChess.Desc": "Play against an engine or a friend", + "Home.Card.PlayChess.Button": "Play", + "Home.Card.AnalysisBoard.Title": "Analysis Board", + "Home.Card.AnalysisBoard.Desc": "Analyze a game or position", + "Home.Card.AnalysisBoard.Button": "Open", + "Home.Card.ImportGame.Title": "Import Game", + "Home.Card.ImportGame.Desc": "Import a game from a PGN", + "Home.Card.ImportGame.Button": "Import", + "Home.Card.Puzzle.Title": "Puzzles", + "Home.Card.Puzzle.Desc": "Train your chess skills", + "Home.Card.Puzzle.Button": "Train", + + "Board.Tabs.Practice": "Practice", + "Board.Tabs.Analysis": "Analysis", + "Board.Tabs.Database": "Database", + "Board.Tabs.Annotate": "Annotate", + "Board.Tabs.Info": "Info", + "Board.Practice.Train": "Train", + "Board.Practice.Build": "Build", + "Board.Practice.NoPositionForTrain1": + "There are no position to practice. Start by adding moves to this PGN file.", + "Board.Practice.NoPositionForTrain2": + "You'll need to change to Analysis mode to be able to add moves.", + "Board.Practice.SeeAnser": "See Answer", + "Board.Practice.Practiced": "Practiced", + "Board.Practice.Due": "Due", + "Board.Practice.Unseen": "Unseen", + "Board.Practice.ShowAll": "Show all positions", + "Board.Practice.ShowLogs": "Show logs", + "Board.Practice.PracticedAll1": "You have practiced all positions.", + "Board.Practice.PracticedAll2": "The next review is on", + "Board.Practice.CorrectMoveWas": "The correct move was {{move}}", + "Board.Analysis.Engines": "Engines", + "Board.Analysis.Report": "Report", + "Board.Analysis.Logs": "Logs", + "Board.Analysis.Summary": "Summary", + "Board.Analysis.InactiveEngine": "Engine isn't enabled", + "Board.Analysis.SyncGlobally": "Sync globally", + "Board.Analysis.KillEngine": "Kill engine", + "Board.Analysis.GenerateReport": "Generate report", + "Board.Analysis.ReportGenerated": "Report generated", + "Board.Analysis.GeneratingReport": "Generating report", + "Board.Analysis.NotAnalysed": "Not analysed", + "Board.Analysis.EngineRequired": "Engine is required", + "Board.Analysis.RefDBRequired": + "No reference database selected. Select one first in the databases page", + "Board.Analysis.Time": "Time (ms)", + "Board.Analysis.Reversed": "Reversed analysis", + "Board.Analysis.Reversed.Desc": + "Analyze the game in starting from the last move.", + "Board.Analysis.AnnotateNovelties": "Annotate Novelties", + "Board.Analysis.AnnotateNovelties.Desc": + "Add a comment to the first position that is not in the reference database.", + "Board.Analysis.Analyze": "Analyze", + "Board.Analysis.Advantage": "Advantage", + "Board.Analysis.Accuracy": "Accuracy", + "Board.Database.Local": "Local", + "Board.Database.LichessAll": "Lichess All", + "Board.Database.LichessMaster": "Lichess Masters", + "Board.Database.Matches": "{{matches}} matches", + "Board.Database.Stats": "Stats", + "Board.Database.Games": "Games", + "Board.Database.Options": "Options", + "Board.Database.NoReference1": "No reference database selected.", + "Board.Database.NoReference2": "Please", + "Board.Database.SelectReference": "add a database", + "Board.Database.NoReference3": "first and mark it as the reference.", + "Board.Database.TimeControl": "Time control", + "Board.Database.AverageRating": "Average rating", + "Board.Annotate.WriteHere": "Write here...", + + "Engines.Title": "Your Engines", + "Engines.Settings.NoEngine": "No engine selected", + "Engines.Settings.SearchSettings": "Search settings", + "Engines.Settings.AdvancedSettings": "Advanced settings", + "Engines.Settings.NumOfLines": "Number of lines", + "Engines.Settings.NumOfCores": "Number of cores", + "Engines.Settings.SizeOfHash": "Size of Hash", + "Engines.Settings.EditJSON": "Edit JSON", + "Engines.Settings.Reset": "Reset to default", + "Engines.Add.Title": "Add Engine", + "Engines.Add.Cloud": "Cloud", + "Engines.Add.ErrorFetch": + "Failed to fetch the engine's info from the server.", + "Engines.Add.BinaryFile": "Binary file", + "Engines.Add.BinaryFile.Desc": "Click to select the binary file", + "Engines.Add.Name": "Name", + "Engines.Add.Name.Autodetect": "Autodetect", + "Engines.Add.Elo.Desc": "Engine's Elo", + "Engines.Add.ImageFile": "Image file", + "Engines.Add.ImageFile.Desc": + "Click to select the image file (recommended size: 60x60)", + "Engines.Remove.Title": "Remove Engine", + "Engines.Remove.Message": + "Are you sure you want to remove this engine from En Croissant?", + + "Databases.Title": "Your Databases", + "Databases.Card.Games": "Games", + "Databases.Card.Players": "Players", + "Databases.Card.Storage": "Storage", + "Databases.Add.Title": "Add Database", + "Databases.Add.Web": "Web", + "Databases.Add.ErrorFetch": + "Failed to fetch the database's info from the server.", + "Databases.Add.ClickToSelectPGN": "Click to select the PGN file", + "Databases.Add.Convert": "Convert", + "Databases.Settings.ReferenceDatabase": "Reference Database", + "Databases.Settings.Indexed": "Indexed", + "Databases.Settings.Indexed.Desc": + "Indexes are used to speed up the search process, but they take up extra space.", + "Databases.Settings.Events": "Events", + "Databases.Settings.Explore": "Explore", + "Databases.Settings.AdvancedTools": "Advanced tools", + "Databases.Settings.MergePlayers": "Merge Players", + "Databases.Settings.MergePlayers.Desc": + "Replace all occurrences of the first player with the second player in the database.", + "Databases.Settings.Merge": "Merge", + "Databases.Settings.BatchDelete": "Batch Delete", + "Databases.Settings.BatchDelete.Desc": + "These actions will irreversibly remove games from the database. Use with caution.", + "Databases.Settings.RemoveDup": "Remove Duplicates", + "Databases.Settings.RemoveEmpty": "Remove Empty Games", + "Databases.Settings.Actions": "Actions", + "Databases.Settings.AddGames": "Add Games", + "Databases.Settings.ExportPGN": "Export to PGN", + "Databases.Delete.Title": "Delete Database", + "Databases.Delete.Message": + "Are you sure you want to delete this database?", + + "Files.Title": "Files", + "Files.FileType": "File type", + "Files.FileType.Game": "Game", + "Files.FileType.Repertoire": "Repertoire", + "Files.FileType.Tournament": "Tournament", + "Files.FileType.Puzzle": "Puzzle", + "Files.FileType.Other": "Other", + "Files.FileType.Folder": "Folder", + "Files.Delete.Title": "Delete file", + "Files.Delete.Message": "Are you sure you want to delete {{fileName}}?", + "Files.EditMetadata": "Edit Metadata", + "Files.Edit.Title": "Edit file", + "Files.Create.Title": "Create file", + "Files.Search": "Search for files", + + "Settings.Board": "Board", + "Settings.Inputs": "Inputs", + "Settings.OpeningReport": "Opening Report", + "Settings.Anarchy": "Anarchy", + "Settings.Appearance": "Appearance", + "Settings.Sound": "Sound", + "Settings.Keybinds": "Keybinds", + "Settings.Directories": "Directories", + + "Settings.Board.Desc": "Customize the analysis board and game controls", + "Settings.PieceDest": "Piece Destinations", + "Settings.PieceDest.Desc": "Show possible moves for each piece", + "Settings.Arrows": "Arrows", + "Settings.Arrows.Desc": "Show best move arrows", + "Settings.SnapArrows": "Snap Arrows", + "Settings.SnapArrows.Desc": "Snap arrows to valid moves", + "Settings.ConsecutiveArrows": "Consecutive Arrows", + "Settings.ConsecutiveArrows.Desc": + "Show multiple arrows for the best line, if it involves moving the same piece several times", + "Settings.AutoPromition": "Auto Promotion", + "Settings.AutoPromition.Desc": + "Automatically promote to a queen when a pawn reaches the last rank", + "Settings.Coordinates": "Coordinates", + "Settings.Coordinates.Desc": "Show coordinates on the board", + "Settings.AutoSave": "Auto Save", + "Settings.AutoSave.Desc": "Auto save to file after each move", + "Settings.PreviewBoard": "Preview Board", + "Settings.PreviewBoard.Desc": + "Show a preview of the board when hovering over a move in the engine analysis", + "Settings.ScrollThroughMoves": "Scroll Through Moves", + "Settings.ScrollThroughMoves.Desc": + "Enable or disable scrolling through moves on the chessboard", + "Settings.Inputs.Desc": "Customize the input settings", + "Settings.Inputs.TextInput": "Text Move Input", + "Settings.Inputs.TextInput.Desc": "Enter moves in text format", + "Settings.Inputs.SpellCheck": "Spell Check", + "Settings.Inputs.SpellCheck.Desc": + "Enable or disable spell check on text inputs", + "Settings.OpeningReport.Desc": "Customize the opening report settings", + "Settings.OpeningReport.PercentCoverage": "Percent Coverage", + "Settings.OpeningReport.PercentCoverage.Desc": + "Percentage of moves covered in each position", + "Settings.OpeningReport.MinGames": "Minimum Games", + "Settings.OpeningReport.MinGames.Desc": + "Minimum number of games in each position for it to be considered", + "Settings.Anarchy.Desc": "Fun options", + "Settings.Anarchy.ForcedEnCroissant": "Forced En Croissant", + "Settings.Anarchy.ForcedEnCroissant.Desc": + "Forces you to play En Croissant, if it's a legal move.", + "Settings.Appearance.Desc": "Customize the look of the app", + "Settings.Appearance.Theme": "Theme", + "Settings.Appearance.Theme.Desc": "Overall color scheme", + "Settings.Appearance.Theme.Light": "Light", + "Settings.Appearance.Theme.Dark": "Dark", + "Settings.Appearance.TitleBar": "Title Bar", + "Settings.Appearance.TitleBar.Desc": + "Choose between native or custom title bar", + "Settings.Appearance.TitleBar.Native": "Native", + "Settings.Appearance.TitleBar.Custom": "Custom", + "Settings.Appearance.FontSize": "Font Size", + "Settings.Appearance.FontSize.Desc": "Overall font size", + "Settings.Appearance.PieceSet": "Piece Set", + "Settings.Appearance.PieceSet.Desc": "Pieces used on the boards", + "Settings.Appearance.BoardImage": "Board Image", + "Settings.Appearance.BoardImage.Desc": + "Image used as the background of the board", + "Settings.Appearance.AccentColor": "Accent Color", + "Settings.Appearance.AccentColor.Desc": "Main color of the app", + "Settings.Sound.Desc": "Customize the sound settings", + "Settings.Sound.Volume": "Volume", + "Settings.Sound.Volume.Desc": "Overall volume", + "Settings.Sound.Collection": "Sound collection", + "Settings.Sound.Collection.Desc": "Collection of sounds used", + "Settings.Directories.Desc": "Customize the directories used by the app", + "Settings.Directories.Files": "Files directory", + "Settings.Directories.Files.Desc": + "This is where your games in the Files page are stored", + }, +}; diff --git a/src/translation/zh_CN.ts b/src/translation/zh_CN.ts index b9b029f1..1a1e0dfe 100644 --- a/src/translation/zh_CN.ts +++ b/src/translation/zh_CN.ts @@ -1,324 +1,336 @@ -export const zh_CN = { - translation: { - "Common.On": "开", - "Common.Off": "关", - "Common.Name": "名称", - "Common.Description": "描述", - "Common.Version": "版本", - "Common.Enabled": "启用", - "Common.Remove": "移除", - "Common.Delete": "删除", - "Common.Download": "下载", - "Common.Local": "本地", - "Common.Add": "添加", - "Common.Open": "打开", - "Common.Create": "创建", - "Common.Save": "保存", - "Common.Install": "安装", - "Common.Installed": "已安装", - "Common.Downloading": "下载中", - "Common.Extracting": "解压中", - "Common.Error": "错误", - "Common.AddNew": "新增", - "Common.OpenFolder": "在文件管理器中打开文件夹", - "Common.Unknown": "未知", - "Common.Cancel": "取消", - "Common.CannotUndo": "这一操作无法撤销", - "Common.NameAlreadyUsed": "名称已被使用", - "Common.RequireName": "必须填写名称", - "Common.RequirePath": "必须填写路径", - "Common.PGNFile": "PGN 文件", - "Common.PGNGame": "对局 PGN", - "Common.Size": "大小", - "Common.GeneralSettings": "通用设置", - "Common.Data": "数据", - "Common.Games": "对局", - "Common.Edit": "编辑", - "Common.EnterFileName": "输入文件名", - "Common.Next": "下一个", - "Common.Skip": "跳过", - "Common.Reset": "重置", - "Common.Incorrect": "不正确", - "Common.Run": "运行", - "Common.Stop": "停止", - "Common.Engine": "引擎", - "Common.Checkmate": "将杀", - "Common.Stalemate": "无子可动", - "Common.WHITE": "白方", - "Common.BLACK": "黑方", - - "GoMode.Time": "时间", - "GoMode.Depth": "深度", - "GoMode.Nodes": "局面数", - "GoMode.Infinite": "无限", - - "Annotate.Brilliant": "Brilliant", - "Annotate.Good": "Good", - "Annotate.Interesting": "Interesting", - "Annotate.Dubious": "Dubious", - "Annotate.Mistake": "Mistake", - "Annotate.Blunder": "Blunder", - "Annotate.WhiteWinning": "白胜", - "Annotate.WhiteAdvantage": "白大优", - "Annotate.WhiteEdge": "白略优", - "Annotate.Equal": "均势", - "Annotate.Unclear": "局势不明", - "Annotate.BlackEdge": "黑略优", - "Annotate.BlackAdvantage": "黑大优", - "Annotate.BlackWinning": "黑胜", - "Annotate.Novelty": "新奇着法", - "Annotate.Development": "发展", - "Annotate.Initiative": "主动", - "Annotate.Attack": "进攻", - "Annotate.Counterplay": "反击", - "Annotate.WithCompensation": "优势补偿", - "Annotate.TimeTrouble": "无暇多虑", - "Annotate.WithIdea": "有想法", - "Annotate.OnlyMove": "唯一着法", - "Annotate.Zugzwang": "楚茨文克", - - "RichText.Bold": "粗体", - "RichText.Italic": "斜体", - "RichText.Underline": "下划线", - "RichText.Strike": "删除线", - "RichText.ClearFormatting": "清除格式", - "RichText.H1": "一级标题", - "RichText.H2": "二级标题", - "RichText.H3": "三级标题", - "RichText.H4": "四级标题", - "RichText.Quote": "引用", - "RichText.HLine": "水平分隔", - "RichText.BulletList": "无序列表", - "RichText.NumberedList": "有序列表", - "RichText.Link": "链接", - "RichText.RemoveLink": "移除链接", - - "TimeControl.UltraBullet": "UltraBullet", - "TimeControl.Bullet": "超超快棋", - "TimeControl.Blitz": "超快棋", - "TimeControl.Rapid": "快棋", - "TimeControl.Classical": "慢棋", - "TimeControl.Correspondence": "通讯棋", - - "Menu.File": "文件", - "Menu.File.NewTab": "新建标签页", - "Menu.File.OpenFile": "打开文件", - "Menu.File.Exit": "退出", - "Menu.View": "视图", - "Menu.View.Reload": "刷新", - "Menu.Help": "帮助", - "Menu.Help.Documentation": "文档", - "Menu.Help.ClearSavedData": "清除数据", - "Menu.Help.OpenLogs": "打开日志", - "Menu.Help.CheckUpdate": "检查更新", - "Menu.Help.About": "关于", - - "SideBar.Board": "棋盘", - "SideBar.User": "用户", - "SideBar.Files": "文件", - "SideBar.Databases": "数据库", - "SideBar.Engines": "引擎", - "SideBar.Settings": "设置", - - "Tab.NewTab": "新标签页", - - "Home.Card.PlayChess.Title": "开始对局", - "Home.Card.PlayChess.Desc": "和朋友或者引擎对弈", - "Home.Card.PlayChess.Button": "开始对局", - "Home.Card.AnalysisBoard.Title": "分析面板", - "Home.Card.AnalysisBoard.Desc": "分析棋局或者局面", - "Home.Card.AnalysisBoard.Button": "打开面板", - "Home.Card.ImportGame.Title": "导入棋局", - "Home.Card.ImportGame.Desc": "从 PGN 文件导入棋局", - "Home.Card.ImportGame.Button": "导入棋局", - "Home.Card.Puzzle.Title": "谜题", - "Home.Card.Puzzle.Desc": "训练你的棋战技巧", - "Home.Card.Puzzle.Button": "开始训练", - - "Board.Tabs.Practice": "练习", - "Board.Tabs.Analysis": "分析", - "Board.Tabs.Database": "数据库", - "Board.Tabs.Annotate": "评注", - "Board.Tabs.Info": "信息", - "Board.Practice.Train": "训练", - "Board.Practice.Build": "构建", - "Board.Practice.NoPositionForTrain1": "没有可供练习的局面,请先向 PGN 文件中添加着法。", - "Board.Practice.NoPositionForTrain2": "你需要切换到分析模式来向 PGN 文件中添加着法。", - "Board.Practice.SeeAnser": "查看答案", - "Board.Practice.Practiced": "已练习", - "Board.Practice.Due": "需复习", - "Board.Practice.Unseen": "未学习", - "Board.Practice.ShowAll": "显示所有局面", - "Board.Practice.ShowLogs": "显示日志", - "Board.Practice.PracticedAll1": "你已经练习了所有的局面", - "Board.Practice.PracticedAll2": "下次复习将在", - "Board.Practice.CorrectMoveWas": "正确的着法是 {{move}}", - "Board.Analysis.Engines": "引擎", - "Board.Analysis.Report": "报告", - "Board.Analysis.Logs": "日志", - "Board.Analysis.Summary": "总结", - "Board.Analysis.InactiveEngine": "引擎未启用", - "Board.Analysis.SyncGlobally": "全局同步", - "Board.Analysis.KillEngine": "杀死引擎", - "Board.Analysis.GenerateReport": "生成报告", - "Board.Analysis.ReportGenerated": "报告已生成", - "Board.Analysis.GeneratingReport": "正在生成报告", - "Board.Analysis.NotAnalysed": "尚未分析", - "Board.Analysis.EngineRequired": "请指定一个引擎", - "Board.Analysis.RefDBRequired": "没有参考数据库,请在数据库页面选择一个参考数据库", - "Board.Analysis.Time": "时间 (ms)", - "Board.Analysis.Reversed": "反向分析", - "Board.Analysis.Reversed.Desc": "从最后一步开始分析", - "Board.Analysis.AnnotateNovelties": "评注新奇着法", - "Board.Analysis.AnnotateNovelties.Desc": "在不在参考数据库中的第一个着法上添加注释", - "Board.Analysis.Analyze": "分析", - "Board.Analysis.Advantage": "优势", - "Board.Analysis.Accuracy": "精度", - "Board.Database.Local": "本地", - "Board.Database.LichessAll": "Lichess 全部对局", - "Board.Database.LichessMaster": "Lichess 大师对局", - "Board.Database.Matches": "{{matches}} 个匹配的对局", - "Board.Database.Stats": "统计", - "Board.Database.Games": "对局", - "Board.Database.Options": "选项", - "Board.Database.NoReference1": "没有参考数据库", - "Board.Database.NoReference2": "请先", - "Board.Database.SelectReference": "添加一个数据库", - "Board.Database.NoReference3": "并将其作为参考", - "Board.Database.TimeControl": "时间控制", - "Board.Database.AverageRating": "平均等级分", - "Board.Annotate.WriteHere": "在这里写评注...", - - "Engines.Title": "引擎管理", - "Engines.Settings.NoEngine": "没有选中的引擎", - "Engines.Settings.SearchSettings": "搜索设置", - "Engines.Settings.AdvancedSettings": "高级设置", - "Engines.Settings.NumOfLines": "分支数量", - "Engines.Settings.NumOfCores": "CPU 核心数量", - "Engines.Settings.SizeOfHash": "Hash 大小", - "Engines.Settings.EditJSON": "编辑 JSON", - "Engines.Settings.Reset": "重置为默认", - "Engines.Add.Title": "添加引擎", - "Engines.Add.Cloud": "云引擎", - "Engines.Add.ErrorFetch": "无法从服务器获取引擎信息", - "Engines.Add.BinaryFile": "二进制文件", - "Engines.Add.BinaryFile.Desc": "点击选择二进制文件", - "Engines.Add.Name": "名称", - "Engines.Add.Name.Autodetect": "自动检测", - "Engines.Add.Elo.Desc": "引擎的 Elo 等级分", - "Engines.Add.ImageFile": "图片文件", - "Engines.Add.ImageFile.Desc": "点击选择图片文件 (推荐尺寸: 60x60)", - "Engines.Remove.Title": "移除引擎", - "Engines.Remove.Message": "你确定要从 En Croissant 中移除这个引擎吗?", - - "Databases.Title": "数据库管理", - "Databases.Card.Games": "对局数量", - "Databases.Card.Players": "棋手数量", - "Databases.Card.Storage": "磁盘使用", - "Databases.Add.Title": "添加数据库", - "Databases.Add.Web": "网络数据库", - "Databases.Add.ErrorFetch": "无法从服务器获取数据库信息", - "Databases.Add.ClickToSelectPGN": "点击选择 PGN 文件", - "Databases.Add.Convert": "转换", - "Databases.Settings.ReferenceDatabase": "作为参考数据库", - "Databases.Settings.Indexed": "建立索引", - "Databases.Settings.Indexed.Desc": "索引可以加速搜索,但会占用额外的磁盘空间", - "Databases.Settings.Events": "赛事数量", - "Databases.Settings.Explore": "查看对局", - "Databases.Settings.AdvancedTools": "高级工具", - "Databases.Settings.MergePlayers": "合并棋手", - "Databases.Settings.MergePlayers.Desc": "将数据库中第一位棋手替换为第二位棋手", - "Databases.Settings.Merge": "合并", - "Databases.Settings.BatchDelete": "批量删除", - "Databases.Settings.BatchDelete.Desc": "这会不可逆地从数据库中删除对局,小心地使用", - "Databases.Settings.RemoveDup": "删除重复对局", - "Databases.Settings.RemoveEmpty": "删除空对局", - "Databases.Settings.Actions": "动作", - "Databases.Settings.AddGames": "添加对局", - "Databases.Settings.ExportPGN": "导出为 PGN", - "Databases.Delete.Title": "删除数据库", - "Databases.Delete.Message": "你确定要删除这个数据库吗?", - - "Files.Title": "文件", - "Files.FileType": "文件类型", - "Files.FileType.Game": "对局", - "Files.FileType.Repertoire": "开局库", - "Files.FileType.Tournament": "锦标赛", - "Files.FileType.Puzzle": "谜题", - "Files.FileType.Other": "其他", - "Files.FileType.Folder": "文件夹", - "Files.Delete.Title": "删除文件", - "Files.Delete.Message": "你确定要删除文件 {{fileName}}?", - "Files.EditMetadata": "编辑元数据", - "Files.Edit.Title": "编辑文件", - "Files.Create.Title": "新建文件", - "Files.Search": "搜索文件", - - "Settings.Board": "棋盘", - "Settings.Inputs": "输入", - "Settings.OpeningReport": "开局报告", - "Settings.Anarchy": "安那其", - "Settings.Appearance": "外观", - "Settings.Sound": "声音", - "Settings.Keybinds": "快捷键", - "Settings.Directories": "目录", - - "Settings.Board.Desc": "自定义分析面板和游戏控制", - "Settings.PieceDest": "棋子目的地", - "Settings.PieceDest.Desc": "显示棋子可以到达的位置", - "Settings.Arrows": "箭头", - "Settings.Arrows.Desc": "用箭头显示最佳着法", - "Settings.SnapArrows": "吸附箭头", - "Settings.SnapArrows.Desc": "将箭头吸附到合法的移动上", - "Settings.ConsecutiveArrows": "连续箭头", - "Settings.ConsecutiveArrows.Desc": "如果最佳着法中会多次移动同一个棋子,显示多个箭头", - "Settings.AutoPromition": "自动升变", - "Settings.AutoPromition.Desc": "兵抵达底线时自动升变为后", - "Settings.Coordinates": "坐标", - "Settings.Coordinates.Desc": "在棋盘上显示坐标", - "Settings.AutoSave": "自动保存", - "Settings.AutoSave.Desc": "每走一步棋都自动保存棋局", - "Settings.PreviewBoard": "预览棋盘", - "Settings.PreviewBoard.Desc": "在引擎分析中,当鼠标悬停在着法上时显示一个预览棋盘", - "Settings.ScrollThroughMoves": "滚动着法", - "Settings.ScrollThroughMoves.Desc": "在引擎分析中,用鼠标滚轮在着法之间快速切换", - "Settings.Inputs.Desc": "自定义输入选项", - "Settings.Inputs.TextInput": "文本输入着法", - "Settings.Inputs.TextInput.Desc": "以文本方式输入着法", - "Settings.Inputs.SpellCheck": "拼写检查", - "Settings.Inputs.SpellCheck.Desc": "启用或禁用文本输入的拼写检查", - "Settings.OpeningReport.Desc": "自定义开局报告", - "Settings.OpeningReport.PercentCoverage": "覆盖率百分比", - "Settings.OpeningReport.PercentCoverage.Desc": "每个局面中的着法覆盖率百分比", - "Settings.OpeningReport.MinGames": "最小对局数", - "Settings.OpeningReport.MinGames.Desc": "每个局面中被考虑的最小对局数", - "Settings.Anarchy.Desc": "有趣的选项", - "Settings.Anarchy.ForcedEnCroissant": "强制 En Croissant", - "Settings.Anarchy.ForcedEnCroissant.Desc": "如果 En Croissant 是合法的着法,强制走出这一着", - "Settings.Appearance.Desc": "自定义应用程序的外观", - "Settings.Appearance.Theme": "主题", - "Settings.Appearance.Theme.Desc": "总体的颜色主题", - "Settings.Appearance.Theme.Light": "亮", - "Settings.Appearance.Theme.Dark": "暗", - "Settings.Appearance.TitleBar": "标题栏", - "Settings.Appearance.TitleBar.Desc": "使用原生或自定义标题栏", - "Settings.Appearance.TitleBar.Native": "Native", - "Settings.Appearance.TitleBar.Custom": "Custom", - "Settings.Appearance.FontSize": "字体大小", - "Settings.Appearance.FontSize.Desc": "应用程序中的字体大小", - "Settings.Appearance.PieceSet": "棋子", - "Settings.Appearance.PieceSet.Desc": "棋盘上使用的棋子", - "Settings.Appearance.BoardImage": "棋盘图案", - "Settings.Appearance.BoardImage.Desc": "棋盘背景图案", - "Settings.Appearance.AccentColor": "主题色", - "Settings.Appearance.AccentColor.Desc": "应用程序的主题色", - "Settings.Sound.Desc": "自定义声音选项", - "Settings.Sound.Volume": "音量", - "Settings.Sound.Volume.Desc": "总音量", - "Settings.Sound.Collection": "声音集", - "Settings.Sound.Collection.Desc": "使用的声音集", - "Settings.Directories.Desc": "自定义应用程序使用的目录", - "Settings.Directories.Files": "文件目录", - "Settings.Directories.Files.Desc": "这是你在文件页面中的对局存储的位置", - } -} +export const zh_CN = { + translation: { + "Common.On": "开", + "Common.Off": "关", + "Common.Name": "名称", + "Common.Description": "描述", + "Common.Version": "版本", + "Common.Enabled": "启用", + "Common.Remove": "移除", + "Common.Delete": "删除", + "Common.Download": "下载", + "Common.Local": "本地", + "Common.Add": "添加", + "Common.Open": "打开", + "Common.Create": "创建", + "Common.Save": "保存", + "Common.Install": "安装", + "Common.Installed": "已安装", + "Common.Downloading": "下载中", + "Common.Extracting": "解压中", + "Common.Error": "错误", + "Common.AddNew": "新增", + "Common.OpenFolder": "在文件管理器中打开文件夹", + "Common.Unknown": "未知", + "Common.Cancel": "取消", + "Common.CannotUndo": "这一操作无法撤销", + "Common.NameAlreadyUsed": "名称已被使用", + "Common.RequireName": "必须填写名称", + "Common.RequirePath": "必须填写路径", + "Common.PGNFile": "PGN 文件", + "Common.PGNGame": "对局 PGN", + "Common.Size": "大小", + "Common.GeneralSettings": "通用设置", + "Common.Data": "数据", + "Common.Games": "对局", + "Common.Edit": "编辑", + "Common.EnterFileName": "输入文件名", + "Common.Next": "下一个", + "Common.Skip": "跳过", + "Common.Reset": "重置", + "Common.Incorrect": "不正确", + "Common.Run": "运行", + "Common.Stop": "停止", + "Common.Engine": "引擎", + "Common.Checkmate": "将杀", + "Common.Stalemate": "无子可动", + "Common.WHITE": "白方", + "Common.BLACK": "黑方", + + "GoMode.Time": "时间", + "GoMode.Depth": "深度", + "GoMode.Nodes": "局面数", + "GoMode.Infinite": "无限", + + "Annotate.Brilliant": "Brilliant", + "Annotate.Good": "Good", + "Annotate.Interesting": "Interesting", + "Annotate.Dubious": "Dubious", + "Annotate.Mistake": "Mistake", + "Annotate.Blunder": "Blunder", + "Annotate.WhiteWinning": "白胜", + "Annotate.WhiteAdvantage": "白大优", + "Annotate.WhiteEdge": "白略优", + "Annotate.Equal": "均势", + "Annotate.Unclear": "局势不明", + "Annotate.BlackEdge": "黑略优", + "Annotate.BlackAdvantage": "黑大优", + "Annotate.BlackWinning": "黑胜", + "Annotate.Novelty": "新奇着法", + "Annotate.Development": "发展", + "Annotate.Initiative": "主动", + "Annotate.Attack": "进攻", + "Annotate.Counterplay": "反击", + "Annotate.WithCompensation": "优势补偿", + "Annotate.TimeTrouble": "无暇多虑", + "Annotate.WithIdea": "有想法", + "Annotate.OnlyMove": "唯一着法", + "Annotate.Zugzwang": "楚茨文克", + + "RichText.Bold": "粗体", + "RichText.Italic": "斜体", + "RichText.Underline": "下划线", + "RichText.Strike": "删除线", + "RichText.ClearFormatting": "清除格式", + "RichText.H1": "一级标题", + "RichText.H2": "二级标题", + "RichText.H3": "三级标题", + "RichText.H4": "四级标题", + "RichText.Quote": "引用", + "RichText.HLine": "水平分隔", + "RichText.BulletList": "无序列表", + "RichText.NumberedList": "有序列表", + "RichText.Link": "链接", + "RichText.RemoveLink": "移除链接", + + "TimeControl.UltraBullet": "UltraBullet", + "TimeControl.Bullet": "超超快棋", + "TimeControl.Blitz": "超快棋", + "TimeControl.Rapid": "快棋", + "TimeControl.Classical": "慢棋", + "TimeControl.Correspondence": "通讯棋", + + "Menu.File": "文件", + "Menu.File.NewTab": "新建标签页", + "Menu.File.OpenFile": "打开文件", + "Menu.File.Exit": "退出", + "Menu.View": "视图", + "Menu.View.Reload": "刷新", + "Menu.Help": "帮助", + "Menu.Help.Documentation": "文档", + "Menu.Help.ClearSavedData": "清除数据", + "Menu.Help.OpenLogs": "打开日志", + "Menu.Help.CheckUpdate": "检查更新", + "Menu.Help.About": "关于", + + "SideBar.Board": "棋盘", + "SideBar.User": "用户", + "SideBar.Files": "文件", + "SideBar.Databases": "数据库", + "SideBar.Engines": "引擎", + "SideBar.Settings": "设置", + + "Tab.NewTab": "新标签页", + + "Home.Card.PlayChess.Title": "开始对局", + "Home.Card.PlayChess.Desc": "和朋友或者引擎对弈", + "Home.Card.PlayChess.Button": "开始对局", + "Home.Card.AnalysisBoard.Title": "分析面板", + "Home.Card.AnalysisBoard.Desc": "分析棋局或者局面", + "Home.Card.AnalysisBoard.Button": "打开面板", + "Home.Card.ImportGame.Title": "导入棋局", + "Home.Card.ImportGame.Desc": "从 PGN 文件导入棋局", + "Home.Card.ImportGame.Button": "导入棋局", + "Home.Card.Puzzle.Title": "谜题", + "Home.Card.Puzzle.Desc": "训练你的棋战技巧", + "Home.Card.Puzzle.Button": "开始训练", + + "Board.Tabs.Practice": "练习", + "Board.Tabs.Analysis": "分析", + "Board.Tabs.Database": "数据库", + "Board.Tabs.Annotate": "评注", + "Board.Tabs.Info": "信息", + "Board.Practice.Train": "训练", + "Board.Practice.Build": "构建", + "Board.Practice.NoPositionForTrain1": + "没有可供练习的局面,请先向 PGN 文件中添加着法。", + "Board.Practice.NoPositionForTrain2": + "你需要切换到分析模式来向 PGN 文件中添加着法。", + "Board.Practice.SeeAnser": "查看答案", + "Board.Practice.Practiced": "已练习", + "Board.Practice.Due": "需复习", + "Board.Practice.Unseen": "未学习", + "Board.Practice.ShowAll": "显示所有局面", + "Board.Practice.ShowLogs": "显示日志", + "Board.Practice.PracticedAll1": "你已经练习了所有的局面", + "Board.Practice.PracticedAll2": "下次复习将在", + "Board.Practice.CorrectMoveWas": "正确的着法是 {{move}}", + "Board.Analysis.Engines": "引擎", + "Board.Analysis.Report": "报告", + "Board.Analysis.Logs": "日志", + "Board.Analysis.Summary": "总结", + "Board.Analysis.InactiveEngine": "引擎未启用", + "Board.Analysis.SyncGlobally": "全局同步", + "Board.Analysis.KillEngine": "杀死引擎", + "Board.Analysis.GenerateReport": "生成报告", + "Board.Analysis.ReportGenerated": "报告已生成", + "Board.Analysis.GeneratingReport": "正在生成报告", + "Board.Analysis.NotAnalysed": "尚未分析", + "Board.Analysis.EngineRequired": "请指定一个引擎", + "Board.Analysis.RefDBRequired": + "没有参考数据库,请在数据库页面选择一个参考数据库", + "Board.Analysis.Time": "时间 (ms)", + "Board.Analysis.Reversed": "反向分析", + "Board.Analysis.Reversed.Desc": "从最后一步开始分析", + "Board.Analysis.AnnotateNovelties": "评注新奇着法", + "Board.Analysis.AnnotateNovelties.Desc": + "在不在参考数据库中的第一个着法上添加注释", + "Board.Analysis.Analyze": "分析", + "Board.Analysis.Advantage": "优势", + "Board.Analysis.Accuracy": "精度", + "Board.Database.Local": "本地", + "Board.Database.LichessAll": "Lichess 全部对局", + "Board.Database.LichessMaster": "Lichess 大师对局", + "Board.Database.Matches": "{{matches}} 个匹配的对局", + "Board.Database.Stats": "统计", + "Board.Database.Games": "对局", + "Board.Database.Options": "选项", + "Board.Database.NoReference1": "没有参考数据库", + "Board.Database.NoReference2": "请先", + "Board.Database.SelectReference": "添加一个数据库", + "Board.Database.NoReference3": "并将其作为参考", + "Board.Database.TimeControl": "时间控制", + "Board.Database.AverageRating": "平均等级分", + "Board.Annotate.WriteHere": "在这里写评注...", + + "Engines.Title": "引擎管理", + "Engines.Settings.NoEngine": "没有选中的引擎", + "Engines.Settings.SearchSettings": "搜索设置", + "Engines.Settings.AdvancedSettings": "高级设置", + "Engines.Settings.NumOfLines": "分支数量", + "Engines.Settings.NumOfCores": "CPU 核心数量", + "Engines.Settings.SizeOfHash": "Hash 大小", + "Engines.Settings.EditJSON": "编辑 JSON", + "Engines.Settings.Reset": "重置为默认", + "Engines.Add.Title": "添加引擎", + "Engines.Add.Cloud": "云引擎", + "Engines.Add.ErrorFetch": "无法从服务器获取引擎信息", + "Engines.Add.BinaryFile": "二进制文件", + "Engines.Add.BinaryFile.Desc": "点击选择二进制文件", + "Engines.Add.Name": "名称", + "Engines.Add.Name.Autodetect": "自动检测", + "Engines.Add.Elo.Desc": "引擎的 Elo 等级分", + "Engines.Add.ImageFile": "图片文件", + "Engines.Add.ImageFile.Desc": "点击选择图片文件 (推荐尺寸: 60x60)", + "Engines.Remove.Title": "移除引擎", + "Engines.Remove.Message": "你确定要从 En Croissant 中移除这个引擎吗?", + + "Databases.Title": "数据库管理", + "Databases.Card.Games": "对局数量", + "Databases.Card.Players": "棋手数量", + "Databases.Card.Storage": "磁盘使用", + "Databases.Add.Title": "添加数据库", + "Databases.Add.Web": "网络数据库", + "Databases.Add.ErrorFetch": "无法从服务器获取数据库信息", + "Databases.Add.ClickToSelectPGN": "点击选择 PGN 文件", + "Databases.Add.Convert": "转换", + "Databases.Settings.ReferenceDatabase": "作为参考数据库", + "Databases.Settings.Indexed": "建立索引", + "Databases.Settings.Indexed.Desc": + "索引可以加速搜索,但会占用额外的磁盘空间", + "Databases.Settings.Events": "赛事数量", + "Databases.Settings.Explore": "查看对局", + "Databases.Settings.AdvancedTools": "高级工具", + "Databases.Settings.MergePlayers": "合并棋手", + "Databases.Settings.MergePlayers.Desc": + "将数据库中第一位棋手替换为第二位棋手", + "Databases.Settings.Merge": "合并", + "Databases.Settings.BatchDelete": "批量删除", + "Databases.Settings.BatchDelete.Desc": + "这会不可逆地从数据库中删除对局,小心地使用", + "Databases.Settings.RemoveDup": "删除重复对局", + "Databases.Settings.RemoveEmpty": "删除空对局", + "Databases.Settings.Actions": "动作", + "Databases.Settings.AddGames": "添加对局", + "Databases.Settings.ExportPGN": "导出为 PGN", + "Databases.Delete.Title": "删除数据库", + "Databases.Delete.Message": "你确定要删除这个数据库吗?", + + "Files.Title": "文件", + "Files.FileType": "文件类型", + "Files.FileType.Game": "对局", + "Files.FileType.Repertoire": "开局库", + "Files.FileType.Tournament": "锦标赛", + "Files.FileType.Puzzle": "谜题", + "Files.FileType.Other": "其他", + "Files.FileType.Folder": "文件夹", + "Files.Delete.Title": "删除文件", + "Files.Delete.Message": "你确定要删除文件 {{fileName}}?", + "Files.EditMetadata": "编辑元数据", + "Files.Edit.Title": "编辑文件", + "Files.Create.Title": "新建文件", + "Files.Search": "搜索文件", + + "Settings.Board": "棋盘", + "Settings.Inputs": "输入", + "Settings.OpeningReport": "开局报告", + "Settings.Anarchy": "安那其", + "Settings.Appearance": "外观", + "Settings.Sound": "声音", + "Settings.Keybinds": "快捷键", + "Settings.Directories": "目录", + + "Settings.Board.Desc": "自定义分析面板和游戏控制", + "Settings.PieceDest": "棋子目的地", + "Settings.PieceDest.Desc": "显示棋子可以到达的位置", + "Settings.Arrows": "箭头", + "Settings.Arrows.Desc": "用箭头显示最佳着法", + "Settings.SnapArrows": "吸附箭头", + "Settings.SnapArrows.Desc": "将箭头吸附到合法的移动上", + "Settings.ConsecutiveArrows": "连续箭头", + "Settings.ConsecutiveArrows.Desc": + "如果最佳着法中会多次移动同一个棋子,显示多个箭头", + "Settings.AutoPromition": "自动升变", + "Settings.AutoPromition.Desc": "兵抵达底线时自动升变为后", + "Settings.Coordinates": "坐标", + "Settings.Coordinates.Desc": "在棋盘上显示坐标", + "Settings.AutoSave": "自动保存", + "Settings.AutoSave.Desc": "每走一步棋都自动保存棋局", + "Settings.PreviewBoard": "预览棋盘", + "Settings.PreviewBoard.Desc": + "在引擎分析中,当鼠标悬停在着法上时显示一个预览棋盘", + "Settings.ScrollThroughMoves": "滚动着法", + "Settings.ScrollThroughMoves.Desc": + "在引擎分析中,用鼠标滚轮在着法之间快速切换", + "Settings.Inputs.Desc": "自定义输入选项", + "Settings.Inputs.TextInput": "文本输入着法", + "Settings.Inputs.TextInput.Desc": "以文本方式输入着法", + "Settings.Inputs.SpellCheck": "拼写检查", + "Settings.Inputs.SpellCheck.Desc": "启用或禁用文本输入的拼写检查", + "Settings.OpeningReport.Desc": "自定义开局报告", + "Settings.OpeningReport.PercentCoverage": "覆盖率百分比", + "Settings.OpeningReport.PercentCoverage.Desc": + "每个局面中的着法覆盖率百分比", + "Settings.OpeningReport.MinGames": "最小对局数", + "Settings.OpeningReport.MinGames.Desc": "每个局面中被考虑的最小对局数", + "Settings.Anarchy.Desc": "有趣的选项", + "Settings.Anarchy.ForcedEnCroissant": "强制 En Croissant", + "Settings.Anarchy.ForcedEnCroissant.Desc": + "如果 En Croissant 是合法的着法,强制走出这一着", + "Settings.Appearance.Desc": "自定义应用程序的外观", + "Settings.Appearance.Theme": "主题", + "Settings.Appearance.Theme.Desc": "总体的颜色主题", + "Settings.Appearance.Theme.Light": "亮", + "Settings.Appearance.Theme.Dark": "暗", + "Settings.Appearance.TitleBar": "标题栏", + "Settings.Appearance.TitleBar.Desc": "使用原生或自定义标题栏", + "Settings.Appearance.TitleBar.Native": "Native", + "Settings.Appearance.TitleBar.Custom": "Custom", + "Settings.Appearance.FontSize": "字体大小", + "Settings.Appearance.FontSize.Desc": "应用程序中的字体大小", + "Settings.Appearance.PieceSet": "棋子", + "Settings.Appearance.PieceSet.Desc": "棋盘上使用的棋子", + "Settings.Appearance.BoardImage": "棋盘图案", + "Settings.Appearance.BoardImage.Desc": "棋盘背景图案", + "Settings.Appearance.AccentColor": "主题色", + "Settings.Appearance.AccentColor.Desc": "应用程序的主题色", + "Settings.Sound.Desc": "自定义声音选项", + "Settings.Sound.Volume": "音量", + "Settings.Sound.Volume.Desc": "总音量", + "Settings.Sound.Collection": "声音集", + "Settings.Sound.Collection.Desc": "使用的声音集", + "Settings.Directories.Desc": "自定义应用程序使用的目录", + "Settings.Directories.Files": "文件目录", + "Settings.Directories.Files.Desc": "这是你在文件页面中的对局存储的位置", + }, +}; diff --git a/src/utils/annotation.ts b/src/utils/annotation.ts index a9125ccb..e363895e 100644 --- a/src/utils/annotation.ts +++ b/src/utils/annotation.ts @@ -77,20 +77,64 @@ export const ANNOTATION_INFO: Record = { "?!": { group: "basic", name: "Dubious", color: "yellow", nag: 6 }, "?": { group: "basic", name: "Mistake", color: "orange", nag: 2 }, "??": { group: "basic", name: "Blunder", color: "red", nag: 4 }, - "+-": { group: "advantage", name: "White is winning", translationKey: "WhiteWinning", nag: 18 }, - "±": { group: "advantage", name: "White has a clear advantage", translationKey: "WhiteAdvantage", nag: 16 }, - "⩲": { group: "advantage", name: "White has a slight advantage", translationKey: "WhiteEdge", nag: 14 }, - "=": { group: "advantage", name: "Equal position", translationKey: "Equal", nag: 10 }, - "∞": { group: "advantage", name: "Unclear position", translationKey: "Unclear", nag: 13 }, - "⩱": { group: "advantage", name: "Black has a slight advantage", translationKey: "BlackEdge", nag: 15 }, - "∓": { group: "advantage", name: "Black has a clear advantage", translationKey: "BlackAdvantage", nag: 17 }, - "-+": { group: "advantage", name: "Black is winning", translationKey: "BlackWinning", nag: 19 }, + "+-": { + group: "advantage", + name: "White is winning", + translationKey: "WhiteWinning", + nag: 18, + }, + "±": { + group: "advantage", + name: "White has a clear advantage", + translationKey: "WhiteAdvantage", + nag: 16, + }, + "⩲": { + group: "advantage", + name: "White has a slight advantage", + translationKey: "WhiteEdge", + nag: 14, + }, + "=": { + group: "advantage", + name: "Equal position", + translationKey: "Equal", + nag: 10, + }, + "∞": { + group: "advantage", + name: "Unclear position", + translationKey: "Unclear", + nag: 13, + }, + "⩱": { + group: "advantage", + name: "Black has a slight advantage", + translationKey: "BlackEdge", + nag: 15, + }, + "∓": { + group: "advantage", + name: "Black has a clear advantage", + translationKey: "BlackAdvantage", + nag: 17, + }, + "-+": { + group: "advantage", + name: "Black is winning", + translationKey: "BlackWinning", + nag: 19, + }, N: { name: "Novelty", translationKey: "Novelty", nag: 146 }, "↑↑": { name: "Development", translationKey: "Development", nag: 32 }, "↑": { name: "Initiative", translationKey: "Initiative", nag: 36 }, "→": { name: "Attack", translationKey: "Attack", nag: 40 }, "⇆": { name: "Counterplay", translationKey: "Counterplay", nag: 132 }, - "=∞": { name: "With compensation", translationKey: "WithCompensation", nag: 44 }, + "=∞": { + name: "With compensation", + translationKey: "WithCompensation", + nag: 44, + }, "⊕": { name: "Time Trouble", translationKey: "TimeTrouble", nag: 138 }, "∆": { name: "With the idea", translationKey: "WithIdea", nag: 140 }, "□": { name: "Only move", translationKey: "OnlyMove", nag: 7 },