chore: update locale file structure (#1478)

pull/1474/head^2
boojack 2 years ago committed by GitHub
parent cc23f69f66
commit f48d91539e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -54,7 +54,7 @@ const ArchivedMemo: React.FC<Props> = (props: Props) => {
<div className={`memo-wrapper archived ${"memos-" + memo.id}`} onMouseLeave={handleMouseLeaveMemoWrapper}> <div className={`memo-wrapper archived ${"memos-" + memo.id}`} onMouseLeave={handleMouseLeaveMemoWrapper}>
<div className="memo-top-wrapper"> <div className="memo-top-wrapper">
<span className="time-text"> <span className="time-text">
{t("common.archived-at")} {utils.getDateTimeString(memo.updatedTs)} {t("memo.archived-at")} {utils.getDateTimeString(memo.updatedTs)}
</span> </span>
<div className="btns-container"> <div className="btns-container">
<span className="btn-text" onClick={handleRestoreMemoClick}> <span className="btn-text" onClick={handleRestoreMemoClick}>

@ -36,7 +36,7 @@ const ArchivedMemoDialog: React.FC<Props> = (props: Props) => {
return ( return (
<> <>
<div className="dialog-header-container"> <div className="dialog-header-container">
<p className="title-text">{t("archived.archived-memos")}</p> <p className="title-text">{t("memo.archived-memos")}</p>
<button className="btn close-btn" onClick={destroy}> <button className="btn close-btn" onClick={destroy}>
<Icon.X className="icon-img" /> <Icon.X className="icon-img" />
</button> </button>
@ -44,11 +44,11 @@ const ArchivedMemoDialog: React.FC<Props> = (props: Props) => {
<div className="dialog-content-container"> <div className="dialog-content-container">
{loadingState.isLoading ? ( {loadingState.isLoading ? (
<div className="tip-text-container"> <div className="tip-text-container">
<p className="tip-text">{t("archived.fetching-data")}</p> <p className="tip-text">{t("memo.fetching-data")}</p>
</div> </div>
) : archivedMemos.length === 0 ? ( ) : archivedMemos.length === 0 ? (
<div className="tip-text-container"> <div className="tip-text-container">
<p className="tip-text">{t("archived.no-archived-memos")}</p> <p className="tip-text">{t("memo.no-archived-memos")}</p>
</div> </div>
) : ( ) : (
<div className="archived-memos-container"> <div className="archived-memos-container">

@ -70,19 +70,19 @@ const ChangeMemberPasswordDialog: React.FC<Props> = (props: Props) => {
</button> </button>
</div> </div>
<div className="dialog-content-container"> <div className="dialog-content-container">
<p className="text-sm mb-1">{t("common.new-password")}</p> <p className="text-sm mb-1">{t("auth.new-password")}</p>
<input <input
type="password" type="password"
className="input-text" className="input-text"
placeholder={t("common.repeat-new-password")} placeholder={t("auth.repeat-new-password")}
value={newPassword} value={newPassword}
onChange={handleNewPasswordChanged} onChange={handleNewPasswordChanged}
/> />
<p className="text-sm mb-1 mt-2">{t("common.repeat-new-password")}</p> <p className="text-sm mb-1 mt-2">{t("auth.repeat-new-password")}</p>
<input <input
type="password" type="password"
className="input-text" className="input-text"
placeholder={t("common.repeat-new-password")} placeholder={t("auth.repeat-new-password")}
value={newPasswordAgain} value={newPasswordAgain}
onChange={handleNewPasswordAgainChanged} onChange={handleNewPasswordAgainChanged}
/> />

@ -66,21 +66,21 @@ const ChangePasswordDialog: React.FC<Props> = ({ destroy }: Props) => {
</button> </button>
</div> </div>
<div className="dialog-content-container"> <div className="dialog-content-container">
<p className="text-sm mb-1">{t("common.new-password")}</p> <p className="text-sm mb-1">{t("auth.new-password")}</p>
<input <input
type="password" type="password"
autoComplete="new-password" autoComplete="new-password"
className="input-text" className="input-text"
placeholder={t("common.repeat-new-password")} placeholder={t("auth.repeat-new-password")}
value={newPassword} value={newPassword}
onChange={handleNewPasswordChanged} onChange={handleNewPasswordChanged}
/> />
<p className="text-sm mb-1 mt-2">{t("common.repeat-new-password")}</p> <p className="text-sm mb-1 mt-2">{t("auth.repeat-new-password")}</p>
<input <input
type="password" type="password"
autoComplete="new-password" autoComplete="new-password"
className="input-text" className="input-text"
placeholder={t("common.repeat-new-password")} placeholder={t("auth.repeat-new-password")}
value={newPasswordAgain} value={newPasswordAgain}
onChange={handleNewPasswordAgainChanged} onChange={handleNewPasswordAgainChanged}
/> />

@ -146,14 +146,14 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
return ( return (
<> <>
<div className="dialog-header-container"> <div className="dialog-header-container">
<p className="title-text">{t("resources.create-dialog.title")}</p> <p className="title-text">{t("resource.create-dialog.title")}</p>
<button className="btn close-btn" onClick={handleCloseDialog}> <button className="btn close-btn" onClick={handleCloseDialog}>
<Icon.X /> <Icon.X />
</button> </button>
</div> </div>
<div className="dialog-content-container !w-80"> <div className="dialog-content-container !w-80">
<Typography className="!mb-1" level="body2"> <Typography className="!mb-1" level="body2">
{t("resources.create-dialog.upload-method")} {t("resource.create-dialog.upload-method")}
</Typography> </Typography>
<Select <Select
className="w-full mb-2" className="w-full mb-2"
@ -161,15 +161,15 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
value={state.selectedMode} value={state.selectedMode}
startDecorator={<Icon.File className="w-4 h-auto" />} startDecorator={<Icon.File className="w-4 h-auto" />}
> >
<Option value="local-file">{t("resources.create-dialog.local-file.option")}</Option> <Option value="local-file">{t("resource.create-dialog.local-file.option")}</Option>
<Option value="external-link">{t("resources.create-dialog.external-link.option")}</Option> <Option value="external-link">{t("resource.create-dialog.external-link.option")}</Option>
</Select> </Select>
{state.selectedMode === "local-file" && ( {state.selectedMode === "local-file" && (
<> <>
<div className="w-full relative bg-blue-50 dark:bg-zinc-900 rounded-md flex flex-row justify-center items-center py-8"> <div className="w-full relative bg-blue-50 dark:bg-zinc-900 rounded-md flex flex-row justify-center items-center py-8">
<label htmlFor="files" className="p-2 px-4 text-sm text-white cursor-pointer bg-blue-500 block rounded hover:opacity-80"> <label htmlFor="files" className="p-2 px-4 text-sm text-white cursor-pointer bg-blue-500 block rounded hover:opacity-80">
{t("resources.create-dialog.local-file.choose")} {t("resource.create-dialog.local-file.choose")}
</label> </label>
<input <input
className="absolute inset-0 w-full h-full opacity-0" className="absolute inset-0 w-full h-full opacity-0"
@ -196,7 +196,7 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
{state.selectedMode === "external-link" && ( {state.selectedMode === "external-link" && (
<> <>
<Typography className="!mb-1" level="body2"> <Typography className="!mb-1" level="body2">
{t("resources.create-dialog.external-link.link")} {t("resource.create-dialog.external-link.link")}
</Typography> </Typography>
<Input <Input
className="mb-2" className="mb-2"
@ -206,22 +206,22 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
fullWidth fullWidth
/> />
<Typography className="!mb-1" level="body2"> <Typography className="!mb-1" level="body2">
{t("resources.create-dialog.external-link.file-name")} {t("resource.create-dialog.external-link.file-name")}
</Typography> </Typography>
<Input <Input
className="mb-2" className="mb-2"
placeholder={t("resources.create-dialog.external-link.file-name-placeholder")} placeholder={t("resource.create-dialog.external-link.file-name-placeholder")}
value={resourceCreate.filename} value={resourceCreate.filename}
onChange={handleFileNameChanged} onChange={handleFileNameChanged}
fullWidth fullWidth
/> />
<Typography className="!mb-1" level="body2"> <Typography className="!mb-1" level="body2">
{t("resources.create-dialog.external-link.type")} {t("resource.create-dialog.external-link.type")}
</Typography> </Typography>
<Autocomplete <Autocomplete
className="w-full" className="w-full"
size="sm" size="sm"
placeholder={t("resources.create-dialog.external-link.type-placeholder")} placeholder={t("resource.create-dialog.external-link.type-placeholder")}
freeSolo={true} freeSolo={true}
options={fileTypeAutocompleteOptions} options={fileTypeAutocompleteOptions}
onChange={(_, value) => handleFileTypeChanged(value || "")} onChange={(_, value) => handleFileTypeChanged(value || "")}

@ -74,7 +74,7 @@ const Header = () => {
} }
> >
<> <>
<Icon.Calendar className="mr-4 w-6 h-auto opacity-80" /> {t("common.daily-review")} <Icon.Calendar className="mr-4 w-6 h-auto opacity-80" /> {t("daily-review.title")}
</> </>
</NavLink> </NavLink>
<NavLink <NavLink
@ -112,7 +112,7 @@ const Header = () => {
className="px-4 pr-5 py-2 rounded-lg flex flex-row items-center text-lg dark:text-gray-200 hover:bg-white hover:shadow dark:hover:bg-zinc-700" className="px-4 pr-5 py-2 rounded-lg flex flex-row items-center text-lg dark:text-gray-200 hover:bg-white hover:shadow dark:hover:bg-zinc-700"
onClick={() => showAskAIDialog()} onClick={() => showAskAIDialog()}
> >
<Icon.Bot className="mr-4 w-6 h-auto opacity-80" /> {t("common.ask-ai")} <Icon.Bot className="mr-4 w-6 h-auto opacity-80" /> {t("ask-ai.title")}
</button> </button>
<button <button
id="header-archived-memo" id="header-archived-memo"

@ -139,7 +139,7 @@ const MemoList = () => {
))} ))}
{isFetching ? ( {isFetching ? (
<div className="status-text-container fetching-tip"> <div className="status-text-container fetching-tip">
<p className="status-text">{t("memo-list.fetching-data")}</p> <p className="status-text">{t("memo.fetching-data")}</p>
</div> </div>
) : ( ) : (
<div className="status-text-container"> <div className="status-text-container">
@ -153,7 +153,7 @@ const MemoList = () => {
) : ( ) : (
<> <>
<span className="cursor-pointer hover:text-green-600" onClick={handleFetchMoreClick}> <span className="cursor-pointer hover:text-green-600" onClick={handleFetchMoreClick}>
{t("memo-list.fetch-more")} {t("memo.fetch-more")}
</span> </span>
</> </>
)} )}

@ -57,13 +57,13 @@ const ResourceItemDropdown = ({ resource }: Props) => {
}; };
const handleDeleteResourceBtnClick = (resource: Resource) => { const handleDeleteResourceBtnClick = (resource: Resource) => {
let warningText = t("resources.warning-text"); let warningText = t("resource.warning-text");
if (resource.linkedMemoAmount > 0) { if (resource.linkedMemoAmount > 0) {
warningText = warningText + `\n${t("resources.linked-amount")}: ${resource.linkedMemoAmount}`; warningText = warningText + `\n${t("resource.linked-amount")}: ${resource.linkedMemoAmount}`;
} }
showCommonDialog({ showCommonDialog({
title: t("resources.delete-resource"), title: t("resource.delete-resource"),
content: warningText, content: warningText,
style: "warning", style: "warning",
dialogName: "delete-resource-dialog", dialogName: "delete-resource-dialog",
@ -83,13 +83,13 @@ const ResourceItemDropdown = ({ resource }: Props) => {
className="w-full text-left text-sm leading-6 py-1 px-3 cursor-pointer rounded hover:bg-gray-100 dark:hover:bg-zinc-600" className="w-full text-left text-sm leading-6 py-1 px-3 cursor-pointer rounded hover:bg-gray-100 dark:hover:bg-zinc-600"
onClick={() => handlePreviewBtnClick(resource)} onClick={() => handlePreviewBtnClick(resource)}
> >
{t("resources.preview")} {t("common.preview")}
</button> </button>
<button <button
className="w-full text-left text-sm leading-6 py-1 px-3 cursor-pointer rounded hover:bg-gray-100 dark:hover:bg-zinc-600" className="w-full text-left text-sm leading-6 py-1 px-3 cursor-pointer rounded hover:bg-gray-100 dark:hover:bg-zinc-600"
onClick={() => handleCopyResourceLinkBtnClick(resource)} onClick={() => handleCopyResourceLinkBtnClick(resource)}
> >
{t("resources.copy-link")} {t("resource.copy-link")}
</button> </button>
<button <button
className="w-full text-left text-sm leading-6 py-1 px-3 cursor-pointer rounded hover:bg-gray-100 dark:hover:bg-zinc-600" className="w-full text-left text-sm leading-6 py-1 px-3 cursor-pointer rounded hover:bg-gray-100 dark:hover:bg-zinc-600"
@ -101,7 +101,7 @@ const ResourceItemDropdown = ({ resource }: Props) => {
className="w-full text-left text-sm leading-6 py-1 px-3 cursor-pointer rounded hover:bg-gray-100 dark:hover:bg-zinc-600" className="w-full text-left text-sm leading-6 py-1 px-3 cursor-pointer rounded hover:bg-gray-100 dark:hover:bg-zinc-600"
onClick={() => handleRenameBtnClick(resource)} onClick={() => handleRenameBtnClick(resource)}
> >
{t("resources.rename")} {t("common.rename")}
</button> </button>
<button <button
className="w-full text-left text-sm leading-6 py-1 px-3 cursor-pointer rounded text-red-600 hover:bg-gray-100 dark:hover:bg-zinc-600" className="w-full text-left text-sm leading-6 py-1 px-3 cursor-pointer rounded text-red-600 hover:bg-gray-100 dark:hover:bg-zinc-600"

@ -31,7 +31,7 @@ const ResourceSearchBar = ({ setQuery }: ResourceSearchBarProps) => {
<input <input
className="flex ml-2 w-24 grow text-sm outline-none bg-transparent dark:text-gray-200" className="flex ml-2 w-24 grow text-sm outline-none bg-transparent dark:text-gray-200"
type="text" type="text"
placeholder={t("resources.search-bar-placeholder")} placeholder={t("resource.search-bar-placeholder")}
ref={inputRef} ref={inputRef}
value={queryText} value={queryText}
onChange={handleTextQueryInput} onChange={handleTextQueryInput}

@ -87,17 +87,17 @@ const ResourcesSelectorDialog: React.FC<Props> = (props: Props) => {
<div className="dialog-content-container"> <div className="dialog-content-container">
{loadingState.isLoading ? ( {loadingState.isLoading ? (
<div className="loading-text-container"> <div className="loading-text-container">
<p className="tip-text">{t("resources.fetching-data")}</p> <p className="tip-text">{t("resource.fetching-data")}</p>
</div> </div>
) : ( ) : (
<div className="resource-table-container"> <div className="resource-table-container">
<div className="fields-container"> <div className="fields-container">
<span className="field-text name-text">{t("resources.name")}</span> <span className="field-text name-text">{t("common.name")}</span>
<span className="field-text type-text">Type</span> <span className="field-text type-text">Type</span>
<span></span> <span></span>
</div> </div>
{resources.length === 0 ? ( {resources.length === 0 ? (
<p className="tip-text">{t("resources.no-resources")}</p> <p className="tip-text">{t("resource.no-resources")}</p>
) : ( ) : (
resources.map((resource, index) => ( resources.map((resource, index) => (
<div key={resource.id} className="resource-container"> <div key={resource.id} className="resource-container">

@ -66,7 +66,7 @@ const SearchBar = () => {
<input <input
className="flex ml-2 w-24 grow text-sm outline-none bg-transparent dark:text-gray-200" className="flex ml-2 w-24 grow text-sm outline-none bg-transparent dark:text-gray-200"
type="text" type="text"
placeholder={t("search-bar.input-placeholder")} placeholder={t("memo.search-placeholder")}
ref={inputRef} ref={inputRef}
value={queryText} value={queryText}
onChange={handleTextQueryInput} onChange={handleTextQueryInput}

@ -0,0 +1 @@
export const slogan = "A lightweight, self-hosted memo hub. Open Source and Free forever.";

@ -51,7 +51,6 @@
"avatar": "Avatar", "avatar": "Avatar",
"database": "Database" "database": "Database"
}, },
"slogan": "Eine quelloffene, selbst gehostete Sammlung an Memos zur Wissensverwaltung und Vernetzung.",
"auth": { "auth": {
"signup-as-host": "Als Host registrieren", "signup-as-host": "Als Host registrieren",
"host-tip": "Du registrierst dich als Host dieser Seite.", "host-tip": "Du registrierst dich als Host dieser Seite.",
@ -63,10 +62,7 @@
"setting": "Einstellung", "setting": "Einstellung",
"archived": "Archiviert" "archived": "Archiviert"
}, },
"daily-review": { "resource": {
"oops-nothing": "Ups, hier ist nichts."
},
"resources": {
"no-resources": "Keine Ressourcen.", "no-resources": "Keine Ressourcen.",
"fetching-data": "Lade Daten...", "fetching-data": "Lade Daten...",
"upload": "Hochladen", "upload": "Hochladen",

@ -4,16 +4,12 @@
"home": "Home", "home": "Home",
"resources": "Resources", "resources": "Resources",
"settings": "Settings", "settings": "Settings",
"daily-review": "Daily Review",
"ask-ai": "Ask AI",
"archived": "Archived", "archived": "Archived",
"email": "Email", "email": "Email",
"password": "Password", "password": "Password",
"avatar": "Avatar", "avatar": "Avatar",
"username": "Username", "username": "Username",
"nickname": "Nickname", "nickname": "Nickname",
"new-password": "New password",
"repeat-new-password": "Repeat the new password",
"save": "Save", "save": "Save",
"close": "Close", "close": "Close",
"cancel": "Cancel", "cancel": "Cancel",
@ -37,53 +33,76 @@
"sign-in": "Sign in", "sign-in": "Sign in",
"sign-up": "Sign up", "sign-up": "Sign up",
"sign-out": "Sign out", "sign-out": "Sign out",
"back-to-home": "Back to Home",
"type": "Type", "type": "Type",
"shortcuts": "Shortcuts", "shortcuts": "Shortcuts",
"title": "Title", "title": "Title",
"filter": "Filter", "filter": "Filter",
"tags": "Tags", "tags": "Tags",
"yourself": "Yourself", "yourself": "Yourself",
"archived-at": "Archived at",
"changed": "changed", "changed": "changed",
"update-on": "Update on",
"fold": "Fold", "fold": "Fold",
"expand": "Expand", "expand": "Expand",
"image": "Image", "image": "Image",
"link": "Link", "link": "Link",
"vacuum": "Vacuum", "vacuum": "Vacuum",
"select": "Select", "select": "Select",
"database": "Database" "database": "Database",
"upload": "Upload",
"preview": "Preview",
"rename": "Rename",
"clear": "Clear",
"name": "Name"
},
"router": {
"back-to-home": "Back to Home"
}, },
"slogan": "An open-source, self-hosted memo hub with knowledge management and social networking.",
"auth": { "auth": {
"signup-as-host": "Sign up as Host", "signup-as-host": "Sign up as Host",
"host-tip": "You are registering as the Site Host.", "host-tip": "You are registering as the Site Host.",
"not-host-tip": "If you don't have an account, please contact the site host." "not-host-tip": "If you don't have an account, please contact the site host.",
"new-password": "New password",
"repeat-new-password": "Repeat the new password"
}, },
"daily-review": { "editor": {
"oops-nothing": "Oops, there is nothing." "editing": "Editing...",
"cancel-edit": "Cancel edit",
"save": "Save",
"placeholder": "Any thoughts...",
"only-image-supported": "Only image file supported.",
"cant-empty": "Content can't be empty",
"local": "Local",
"resources": "Resources"
},
"memo": {
"view-detail": "View Detail",
"copy": "Copy",
"embed": "Embed memo",
"archived-memos": "Archived Memos",
"no-archived-memos": "No archived memos.",
"fetching-data": "fetching data...",
"fetch-more": "Click here to fetch more",
"archived-at": "Archived at",
"search-placeholder": "Search memos",
"visibility": {
"private": "Only visible to you",
"protected": "Visible to members",
"public": "Everyone can see",
"disabled": "Public memos are disabled"
}
}, },
"resources": { "resource": {
"description": "View your static resources in memos. e.g. images",
"no-resources": "No resources.", "no-resources": "No resources.",
"fetching-data": "fetching data...", "fetching-data": "fetching data...",
"upload": "Upload",
"preview": "Preview",
"copy-link": "Copy Link", "copy-link": "Copy Link",
"delete-resource": "Delete Resource", "delete-resource": "Delete Resource",
"warning-text": "Are you sure to delete this resource? THIS ACTION IS IRREVERSIBLE❗", "warning-text": "Are you sure to delete this resource? THIS ACTION IS IRREVERSIBLE❗",
"linked-amount": "Linked memo amount", "linked-amount": "Linked memo amount",
"rename": "Rename",
"clear": "Clear",
"warning-text-unused": "Are you sure to delete these unused resources? THIS ACTION IS IRREVERSIBLE❗", "warning-text-unused": "Are you sure to delete these unused resources? THIS ACTION IS IRREVERSIBLE❗",
"no-unused-resources": "No unused resources", "no-unused-resources": "No unused resources",
"name": "Name",
"delete-selected-resources": "Delete Selected Resources", "delete-selected-resources": "Delete Selected Resources",
"no-files-selected": "No files selected❗", "no-files-selected": "No files selected❗",
"upload-successfully": "Upload successfully", "upload-successfully": "Upload successfully",
"file-drag-drop-prompt": "Drag and drop your file here to upload file", "file-drag-drop-prompt": "Drag and drop your file here to upload file",
"select": "Select",
"search-bar-placeholder": "Search resource", "search-bar-placeholder": "Search resource",
"create-dialog": { "create-dialog": {
"title": "Create Resource", "title": "Create Resource",
@ -102,36 +121,6 @@
} }
} }
}, },
"archived": {
"archived-memos": "Archived Memos",
"no-archived-memos": "No archived memos.",
"fetching-data": "fetching data..."
},
"editor": {
"editing": "Editing...",
"cancel-edit": "Cancel edit",
"save": "Save",
"placeholder": "Any thoughts...",
"only-image-supported": "Only image file supported.",
"cant-empty": "Content can't be empty",
"local": "Local",
"resources": "Resources"
},
"memo": {
"view-detail": "View Detail",
"copy": "Copy",
"embed": "Embed memo",
"visibility": {
"private": "Only visible to you",
"protected": "Visible to members",
"public": "Everyone can see",
"disabled": "Public memos are disabled"
}
},
"memo-list": {
"fetching-data": "fetching data...",
"fetch-more": "Click here to fetch more"
},
"shortcut-list": { "shortcut-list": {
"shortcut-title": "shortcut title", "shortcut-title": "shortcut title",
"create-shortcut": "Create Shortcut", "create-shortcut": "Create Shortcut",
@ -141,41 +130,14 @@
"title-required": "Title is required", "title-required": "Title is required",
"value-required": "Filter value is required" "value-required": "Filter value is required"
}, },
"filter": {
"new-filter": "New Filter",
"type": {
"tag": "Tag",
"type": "Type",
"text": "Text",
"display-time": "Display Time",
"visibility": "Visibility"
},
"operator": {
"contains": "Contains",
"not-contains": "Does not contain",
"is": "Is",
"is-not": "Is Not",
"before": "Before",
"after": "After"
},
"value": {
"not-tagged": "No tags",
"linked": "Has links",
"has-attachment": "Has attachments"
},
"text-placeholder": "Starts with ^ to use regex"
},
"tag-list": { "tag-list": {
"tip-text": "Input `#tag` to create", "tip-text": "Input `#tag` to create",
"create-tag": "Create Tag", "create-tag": "Create Tag",
"all-tags": "All Tags", "all-tags": "All Tags",
"tag-name": "TAG_NAME" "tag-name": "TAG_NAME"
}, },
"search": { "daily-review": {
"quickly-filter": "Quickly filter" "title": "Daily Review"
},
"search-bar": {
"input-placeholder": "Search memos"
}, },
"setting": { "setting": {
"my-account": "My Account", "my-account": "My Account",
@ -234,13 +196,29 @@
"dark": "Always dark" "dark": "Always dark"
} }
}, },
"amount-text": { "filter": {
"memo_one": "MEMO", "new-filter": "New Filter",
"memo_other": "MEMOS", "type": {
"tag_one": "TAG", "tag": "Tag",
"tag_other": "TAGS", "type": "Type",
"day_one": "DAY", "text": "Text",
"day_other": "DAYS" "display-time": "Display Time",
"visibility": "Visibility"
},
"operator": {
"contains": "Contains",
"not-contains": "Does not contain",
"is": "Is",
"is-not": "Is Not",
"before": "Before",
"after": "After"
},
"value": {
"not-tagged": "No tags",
"linked": "Has links",
"has-attachment": "Has attachments"
},
"text-placeholder": "Starts with ^ to use regex"
}, },
"message": { "message": {
"no-memos": "no memos 🌃", "no-memos": "no memos 🌃",
@ -285,19 +263,12 @@
"page-not-found": "404 - Page Not Found 😥" "page-not-found": "404 - Page Not Found 😥"
}, },
"days": { "days": {
"monday": "Monday",
"mon": "Mon", "mon": "Mon",
"tuesday": "Tuesday",
"tue": "Tue", "tue": "Tue",
"wednesday": "Wednesday",
"wed": "Wed", "wed": "Wed",
"thursday": "Thursday",
"thu": "Thu", "thu": "Thu",
"friday": "Friday",
"fri": "Fri", "fri": "Fri",
"saturday": "Saturday",
"sat": "Sat", "sat": "Sat",
"sunday": "Sunday",
"sun": "Sun" "sun": "Sun"
}, },
"ask-ai": { "ask-ai": {
@ -311,10 +282,5 @@
"text": "Copy and paste the below codes into your blog or website.", "text": "Copy and paste the below codes into your blog or website.",
"only-public-supported": "* Only the public memo supports.", "only-public-supported": "* Only the public memo supports.",
"copy": "Copy" "copy": "Copy"
},
"visibility": {
"PUBLIC": "PUBLIC",
"PROTECTED": "PROTECTED",
"PRIVATE": "PRIVATE"
} }
} }

@ -51,7 +51,6 @@
"database": "Base de datos", "database": "Base de datos",
"avatar": "Avatar" "avatar": "Avatar"
}, },
"slogan": "Un código abierto, centro de notas autoalojado con la gestión del conocimiento y la socialización.",
"auth": { "auth": {
"signup-as-host": "Registrarse como Anfitrión", "signup-as-host": "Registrarse como Anfitrión",
"host-tip": "Te estás registrando como Anfitrión del Sitio.", "host-tip": "Te estás registrando como Anfitrión del Sitio.",
@ -63,10 +62,7 @@
"setting": "Ajustes", "setting": "Ajustes",
"archived": "Archivado" "archived": "Archivado"
}, },
"daily-review": { "resource": {
"oops-nothing": "Ups, no hay nada."
},
"resources": {
"description": "Visualiza tus recursos estáticos en notas. p.ej., imágenes", "description": "Visualiza tus recursos estáticos en notas. p.ej., imágenes",
"no-resources": "Sin recursos.", "no-resources": "Sin recursos.",
"fetching-data": "obteniendo datos...", "fetching-data": "obteniendo datos...",

@ -51,7 +51,6 @@
"avatar": "Avatar", "avatar": "Avatar",
"database": "Database" "database": "Database"
}, },
"slogan": "An open-source, self-hosted memo hub with knowledge management and social networking.",
"auth": { "auth": {
"signup-as-host": "S'inscrire en tant qu'hôte", "signup-as-host": "S'inscrire en tant qu'hôte",
"host-tip": "Vous vous inscrivez en tant qu'hébergeur du site.", "host-tip": "Vous vous inscrivez en tant qu'hébergeur du site.",
@ -63,10 +62,7 @@
"setting": "Réglage", "setting": "Réglage",
"archived": "Archivé" "archived": "Archivé"
}, },
"daily-review": { "resource": {
"oops-nothing": "Oups, il n'y a rien."
},
"resources": {
"description": "Visualisez vos ressources statiques dans des mémos, par exemple des images.", "description": "Visualisez vos ressources statiques dans des mémos, par exemple des images.",
"no-resources": "Aucune ressource.", "no-resources": "Aucune ressource.",
"fetching-data": "récupération des données...", "fetching-data": "récupération des données...",

@ -51,7 +51,6 @@
"avatar": "Avatar", "avatar": "Avatar",
"database": "Database" "database": "Database"
}, },
"slogan": "An open-source, self-hosted memo hub with knowledge management and social networking.",
"auth": { "auth": {
"signup-as-host": "Registrati come Host", "signup-as-host": "Registrati come Host",
"host-tip": "Ti stai registrando come Host del sito.", "host-tip": "Ti stai registrando come Host del sito.",
@ -63,10 +62,7 @@
"setting": "Impostazioni", "setting": "Impostazioni",
"archived": "Archiviati" "archived": "Archiviati"
}, },
"daily-review": { "resource": {
"oops-nothing": "Oops, non c'è niente."
},
"resources": {
"description": "Visualizza le tue risorse statiche nei memo. es: immagini", "description": "Visualizza le tue risorse statiche nei memo. es: immagini",
"no-resources": "Nessuna risorsa.", "no-resources": "Nessuna risorsa.",
"fetching-data": "recupero i dati...", "fetching-data": "recupero i dati...",

@ -81,16 +81,12 @@
"tag_one": "TAG", "tag_one": "TAG",
"tag_other": "TAGS" "tag_other": "TAGS"
}, },
"slogan": "지식 정리와 소셜 네트워킹 기능을 갖춘 자체 호스팅의 오픈 소스 메모 허브입니다.",
"auth": { "auth": {
"signup-as-host": "호스트로서 회원등록", "signup-as-host": "호스트로서 회원등록",
"host-tip": "사이트 주인으로서의 계정을 등록합니다.", "host-tip": "사이트 주인으로서의 계정을 등록합니다.",
"not-host-tip": "계정이 없다면 사이트 주인에게 문의해 주세요." "not-host-tip": "계정이 없다면 사이트 주인에게 문의해 주세요."
}, },
"daily-review": { "resource": {
"oops-nothing": "앗, 아무것도 없네요."
},
"resources": {
"clear": "정리", "clear": "정리",
"copy-link": "링크 복사", "copy-link": "링크 복사",
"delete-resource": "리소스 삭제", "delete-resource": "리소스 삭제",

@ -51,7 +51,6 @@
"select": "Selecteer", "select": "Selecteer",
"database": "Database" "database": "Database"
}, },
"slogan": "Een open-source, zelf-beheerd memo applicatie voor kennismanagement en collaboratie.",
"auth": { "auth": {
"signup-as-host": "Registreren als Host", "signup-as-host": "Registreren als Host",
"host-tip": "Je registreert je als Site Host.", "host-tip": "Je registreert je als Site Host.",
@ -63,10 +62,7 @@
"setting": "Instellingen", "setting": "Instellingen",
"archived": "Gearchiveerd" "archived": "Gearchiveerd"
}, },
"daily-review": { "resource": {
"oops-nothing": "Oeps, er is niets."
},
"resources": {
"description": "Bekijk je statische bronnen in memos, zoals foto's.", "description": "Bekijk je statische bronnen in memos, zoals foto's.",
"no-resources": "Geen bronnen.", "no-resources": "Geen bronnen.",
"fetching-data": "data aan het ophalen...", "fetching-data": "data aan het ophalen...",

@ -51,7 +51,6 @@
"select": "Wybierz", "select": "Wybierz",
"database": "Baza danych" "database": "Baza danych"
}, },
"slogan": "Open-source centrum notatek do samodzielnego hostowania z zarządzaniem wiedzą i sieciami społecznościowymi.",
"auth": { "auth": {
"signup-as-host": "Zarejestruj się jako właściciel", "signup-as-host": "Zarejestruj się jako właściciel",
"host-tip": "Rejestrujesz się jako właściciel.", "host-tip": "Rejestrujesz się jako właściciel.",
@ -63,10 +62,7 @@
"setting": "Ustawienia", "setting": "Ustawienia",
"archived": "Zarchiwizowane" "archived": "Zarchiwizowane"
}, },
"daily-review": { "resource": {
"oops-nothing": "Ups, nic tu nie ma."
},
"resources": {
"description": "Zobacz statyczne zasoby w notatkach, na przykład obrazki", "description": "Zobacz statyczne zasoby w notatkach, na przykład obrazki",
"no-resources": "Brak zasobów.", "no-resources": "Brak zasobów.",
"fetching-data": "pobieranie danych...", "fetching-data": "pobieranie danych...",

@ -51,7 +51,6 @@
"select": "Selecionar", "select": "Selecionar",
"database": "Banco de dados" "database": "Banco de dados"
}, },
"slogan": "An open-source, self-hosted memo hub with knowledge management and social networking.",
"auth": { "auth": {
"signup-as-host": "Sign up as Host", "signup-as-host": "Sign up as Host",
"host-tip": "You are registering as the Site Host.", "host-tip": "You are registering as the Site Host.",
@ -63,10 +62,7 @@
"setting": "Configurações", "setting": "Configurações",
"archived": "Arquivado" "archived": "Arquivado"
}, },
"daily-review": { "resource": {
"oops-nothing": "Oops, não há nada aqui."
},
"resources": {
"description": "View your static resources in memos. e.g. images", "description": "View your static resources in memos. e.g. images",
"no-resources": "No resources.", "no-resources": "No resources.",
"fetching-data": "fetching data...", "fetching-data": "fetching data...",
@ -204,14 +200,6 @@
"dark": "Always dark" "dark": "Always dark"
} }
}, },
"amount-text": {
"memo_one": "MEMO",
"memo_many": "",
"tag_one": "TAG",
"tag_many": "",
"day_one": "DAY",
"day_many": ""
},
"message": { "message": {
"no-memos": "no memos 🌃", "no-memos": "no memos 🌃",
"memos-ready": "all memos are ready 🎉", "memos-ready": "all memos are ready 🎉",
@ -253,19 +241,12 @@
"page-not-found": "404 - Page Not Found 😥" "page-not-found": "404 - Page Not Found 😥"
}, },
"days": { "days": {
"monday": "Monday",
"mon": "Mon", "mon": "Mon",
"tuesday": "Tuesday",
"tue": "Tue", "tue": "Tue",
"wednesday": "Wednesday",
"wed": "Wed", "wed": "Wed",
"thursday": "Thursday",
"thu": "Thu", "thu": "Thu",
"friday": "Friday",
"fri": "Fri", "fri": "Fri",
"saturday": "Saturday",
"sat": "Sat", "sat": "Sat",
"sunday": "Sunday",
"sun": "Sun" "sun": "Sun"
} }
} }

@ -57,7 +57,6 @@
"database": "База-Данных", "database": "База-Данных",
"settings": "Настройки" "settings": "Настройки"
}, },
"slogan": "Self-hosted платформа с открытым исходным кодом для заметок и управления записями с поддержкой социальных функций.",
"auth": { "auth": {
"signup-as-host": "Зарегистрироваться как владелец", "signup-as-host": "Зарегистрироваться как владелец",
"host-tip": "Вы регистрируете владельца сайта.", "host-tip": "Вы регистрируете владельца сайта.",
@ -69,10 +68,7 @@
"setting": "Настройки", "setting": "Настройки",
"archived": "Заархивировано" "archived": "Заархивировано"
}, },
"daily-review": { "resource": {
"oops-nothing": "Ой, здесь ничего нет."
},
"resources": {
"description": "Посмотреть ваши статические ресурсы в Memos (изображения и пр.)", "description": "Посмотреть ваши статические ресурсы в Memos (изображения и пр.)",
"no-resources": "Нет ресурсов.", "no-resources": "Нет ресурсов.",
"fetching-data": "загрузка данных...", "fetching-data": "загрузка данных...",

@ -55,16 +55,12 @@
"select": "Izberi", "select": "Izberi",
"database": "Baza" "database": "Baza"
}, },
"slogan": "Odprtokodno, samo-gostovano vozlišče beležk z nadzorom znanja in socialne mreže.",
"auth": { "auth": {
"signup-as-host": "Prijavite se kot gostitelj", "signup-as-host": "Prijavite se kot gostitelj",
"host-tip": "Registrirani ste kot gostitelj strani.", "host-tip": "Registrirani ste kot gostitelj strani.",
"not-host-tip": "Če nimate računa, prosim kontaktirajte gostitelja strani." "not-host-tip": "Če nimate računa, prosim kontaktirajte gostitelja strani."
}, },
"daily-review": { "resource": {
"oops-nothing": "Ups, tu ni še ničesar."
},
"resources": {
"description": "Poglejte svoje statične vire v beležkah npr. slike", "description": "Poglejte svoje statične vire v beležkah npr. slike",
"no-resources": "Ni virov.", "no-resources": "Ni virov.",
"fetching-data": "pridobivam podatke...", "fetching-data": "pridobivam podatke...",

@ -51,7 +51,6 @@
"avatar": "Avatar", "avatar": "Avatar",
"database": "Databas" "database": "Databas"
}, },
"slogan": "En öppen källkod, self-hosted antecknings hubb med kunskapshantering och socialisering",
"auth": { "auth": {
"signup-as-host": "Registera dig som värd", "signup-as-host": "Registera dig som värd",
"host-tip": "Du registerar dig som webbplatsvärd.", "host-tip": "Du registerar dig som webbplatsvärd.",
@ -63,10 +62,7 @@
"setting": "Inställningar", "setting": "Inställningar",
"archived": "Arkiverade" "archived": "Arkiverade"
}, },
"daily-review": { "resource": {
"oops-nothing": "Oj, det finns inget här."
},
"resources": {
"description": "Visa dina statiska resurser i anteckningarn. t.ex bilder.", "description": "Visa dina statiska resurser i anteckningarn. t.ex bilder.",
"no-resources": "Inga resurser.", "no-resources": "Inga resurser.",
"fetching-data": "hämtar data...", "fetching-data": "hämtar data...",

@ -41,7 +41,6 @@
"yourself": "Sen", "yourself": "Sen",
"archived-at": "Arşivlendi" "archived-at": "Arşivlendi"
}, },
"slogan": "Açık kaynaklı bir not ve sosyalleşme platformu olan self-hosted.",
"auth": { "auth": {
"signup-as-host": "Sahip olarak kaydolun", "signup-as-host": "Sahip olarak kaydolun",
"host-tip": "Site sahibi olarak kaydoluyorsunuz.", "host-tip": "Site sahibi olarak kaydoluyorsunuz.",
@ -53,10 +52,7 @@
"setting": "Ayarlar", "setting": "Ayarlar",
"archived": "Arşivlenmiş" "archived": "Arşivlenmiş"
}, },
"daily-review": { "resource": {
"oops-nothing": "Oops, burada hiçbir şey yok."
},
"resources": {
"description": "Memos'taki statik kaynaklarınızı (fotoğraflar) görüntüleyin", "description": "Memos'taki statik kaynaklarınızı (fotoğraflar) görüntüleyin",
"no-resources": "Kaynak yok.", "no-resources": "Kaynak yok.",
"fetching-data": "veriler yükleniyor...", "fetching-data": "veriler yükleniyor...",

@ -51,7 +51,6 @@
"database": "Database", "database": "Database",
"avatar": "Avatar" "avatar": "Avatar"
}, },
"slogan": "Self-hosted платформа для записок та соціалізації з відкритим кодом An open-source.",
"auth": { "auth": {
"signup-as-host": "Зареєструватися як власник", "signup-as-host": "Зареєструватися як власник",
"host-tip": "Ви реєструєте власника сайту.", "host-tip": "Ви реєструєте власника сайту.",
@ -63,10 +62,7 @@
"setting": "Налаштування", "setting": "Налаштування",
"archived": "Заархівовані" "archived": "Заархівовані"
}, },
"daily-review": { "resource": {
"oops-nothing": "Ой, тут нічого немає."
},
"resources": {
"description": "Переглянути ваші статичні ресурси в Memos (світлини)", "description": "Переглянути ваші статичні ресурси в Memos (світлини)",
"no-resources": "Немає ресурсів.", "no-resources": "Немає ресурсів.",
"fetching-data": "завантаження даних...", "fetching-data": "завантаження даних...",

@ -51,7 +51,6 @@
"avatar": "Avatar", "avatar": "Avatar",
"database": "Database" "database": "Database"
}, },
"slogan": "Mã nguồn mở ghi chú cho phép quản lý tri thức và chia sẻ cộng đồng.",
"auth": { "auth": {
"signup-as-host": "Đăng ký như chủ nhân", "signup-as-host": "Đăng ký như chủ nhân",
"host-tip": "Bạn đang đăng ký với tư cách chủ nhân của trang web này.", "host-tip": "Bạn đang đăng ký với tư cách chủ nhân của trang web này.",
@ -63,10 +62,7 @@
"setting": "Cài Đặt", "setting": "Cài Đặt",
"archived": "Lưu Trữ" "archived": "Lưu Trữ"
}, },
"daily-review": { "resource": {
"oops-nothing": "Ồ, chẳng có gì ở đây cả."
},
"resources": {
"description": "Xem toàn bộ tài nguyên của trang web. Ví dụ như các hình ảnh.", "description": "Xem toàn bộ tài nguyên của trang web. Ví dụ như các hình ảnh.",
"no-resources": "Không có tài nguyên.", "no-resources": "Không có tài nguyên.",
"fetching-data": "đang tải dữ liệu...", "fetching-data": "đang tải dữ liệu...",

@ -54,16 +54,12 @@
"database": "資料庫", "database": "資料庫",
"avatar": "頭像" "avatar": "頭像"
}, },
"slogan": "一個可用於知識管理和社交網絡的開源、自托管的備忘錄中心。",
"auth": { "auth": {
"signup-as-host": "註冊為管理員", "signup-as-host": "註冊為管理員",
"host-tip": "你正在註冊為管理員帳號。", "host-tip": "你正在註冊為管理員帳號。",
"not-host-tip": "如果你沒有帳號,請聯絡網站管理員。" "not-host-tip": "如果你沒有帳號,請聯絡網站管理員。"
}, },
"daily-review": { "resource": {
"oops-nothing": "啊哦,空空蕩蕩。"
},
"resources": {
"description": "查看在 Memo 中的靜態資源。例如:圖片", "description": "查看在 Memo 中的靜態資源。例如:圖片",
"no-resources": "沒有資源", "no-resources": "沒有資源",
"fetching-data": "擷取資料中...", "fetching-data": "擷取資料中...",

@ -54,16 +54,12 @@
"database": "数据库", "database": "数据库",
"avatar": "头像" "avatar": "头像"
}, },
"slogan": "一个可用于知识管理和社交网络的开源、自托管的备忘录中心。",
"auth": { "auth": {
"signup-as-host": "注册为 Host", "signup-as-host": "注册为 Host",
"host-tip": "你正在注册为 Host 用户账号。", "host-tip": "你正在注册为 Host 用户账号。",
"not-host-tip": "如果你没有账号,请联系站点 Host" "not-host-tip": "如果你没有账号,请联系站点 Host"
}, },
"daily-review": { "resource": {
"oops-nothing": "啊哦,空空荡荡。"
},
"resources": {
"description": "查看在 Memo 中的静态资源。例如:图片", "description": "查看在 Memo 中的静态资源。例如:图片",
"no-resources": "没有资源", "no-resources": "没有资源",
"fetching-data": "请求数据中...", "fetching-data": "请求数据中...",

@ -4,6 +4,7 @@ import { toast } from "react-hot-toast";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useGlobalStore, useUserStore } from "@/store/module"; import { useGlobalStore, useUserStore } from "@/store/module";
import * as api from "@/helpers/api"; import * as api from "@/helpers/api";
import { slogan } from "@/helpers/site";
import { absolutifyLink } from "@/helpers/utils"; import { absolutifyLink } from "@/helpers/utils";
import useLoading from "@/hooks/useLoading"; import useLoading from "@/hooks/useLoading";
import Icon from "@/components/Icon"; import Icon from "@/components/Icon";
@ -132,7 +133,7 @@ const Auth = () => {
<img className="h-12 w-auto rounded-lg mr-1" src={systemStatus.customizedProfile.logoUrl} alt="" /> <img className="h-12 w-auto rounded-lg mr-1" src={systemStatus.customizedProfile.logoUrl} alt="" />
<p className="text-6xl tracking-wide text-black opacity-80 dark:text-gray-200">{systemStatus.customizedProfile.name}</p> <p className="text-6xl tracking-wide text-black opacity-80 dark:text-gray-200">{systemStatus.customizedProfile.name}</p>
</div> </div>
<p className="text-sm text-gray-700 dark:text-gray-300">{systemStatus.customizedProfile.description || t("slogan")}</p> <p className="text-sm text-gray-700 dark:text-gray-300">{systemStatus.customizedProfile.description || slogan}</p>
</div> </div>
<form className="w-full" onSubmit={handleFormSubmit}> <form className="w-full" onSubmit={handleFormSubmit}>
<div className={`flex flex-col justify-start items-start w-full ${actionBtnLoadingState.isLoading && "opacity-80"}`}> <div className={`flex flex-col justify-start items-start w-full ${actionBtnLoadingState.isLoading && "opacity-80"}`}>

@ -90,7 +90,7 @@ const DailyReview = () => {
className="px-2 py-1 flex flex-row justify-start items-center cursor-pointer select-none rounded hover:bg-gray-100 dark:hover:bg-zinc-700" className="px-2 py-1 flex flex-row justify-start items-center cursor-pointer select-none rounded hover:bg-gray-100 dark:hover:bg-zinc-700"
onClick={() => toggleShowDatePicker()} onClick={() => toggleShowDatePicker()}
> >
<Icon.Calendar className="w-5 h-auto mr-1" /> {t("common.daily-review")} <Icon.Calendar className="w-5 h-auto mr-1" /> {t("daily-review.title")}
</p> </p>
<div className="flex flex-row justify-end items-center"> <div className="flex flex-row justify-end items-center">
<button <button
@ -138,7 +138,7 @@ const DailyReview = () => {
</div> </div>
{dailyMemos.length === 0 ? ( {dailyMemos.length === 0 ? (
<div className="mx-auto pt-4 pb-5 px-0"> <div className="mx-auto pt-4 pb-5 px-0">
<p className="italic text-gray-400">{t("daily-review.oops-nothing")}</p> <p className="italic text-gray-400">Oops, there is nothing.</p>
</div> </div>
) : ( ) : (
<div className="flex flex-col justify-start items-start w-full mt-2"> <div className="flex flex-col justify-start items-start w-full mt-2">

@ -98,7 +98,7 @@ const Explore = () => {
) : null ) : null
) : ( ) : (
<p className="m-auto text-center mt-4 italic cursor-pointer text-gray-500 hover:text-green-600" onClick={handleFetchMoreClick}> <p className="m-auto text-center mt-4 italic cursor-pointer text-gray-500 hover:text-green-600" onClick={handleFetchMoreClick}>
{t("memo-list.fetch-more")} {t("memo.fetch-more")}
</p> </p>
)} )}
</main> </main>

@ -61,7 +61,7 @@ const MemoDetail = () => {
<> <>
{user ? ( {user ? (
<Link to="/" className="btn"> <Link to="/" className="btn">
<span className="icon">🏠</span> {t("common.back-to-home")} <span className="icon">🏠</span> {t("router.back-to-home")}
</Link> </Link>
) : ( ) : (
<Link to="/auth" className="btn"> <Link to="/auth" className="btn">

@ -11,7 +11,7 @@ const NotFound = () => {
<p className="title-text">{t("message.page-not-found")}</p> <p className="title-text">{t("message.page-not-found")}</p>
<div className="action-button-container"> <div className="action-button-container">
<Link to="/" className="link-btn"> <Link to="/" className="link-btn">
<span>🏠</span> {t("common.back-to-home")} <span>🏠</span> {t("router.back-to-home")}
</Link> </Link>
</div> </div>
</div> </div>

@ -54,7 +54,7 @@ const ResourcesDashboard = () => {
}; };
const handleDeleteUnusedResourcesBtnClick = async () => { const handleDeleteUnusedResourcesBtnClick = async () => {
let warningText = t("resources.warning-text-unused"); let warningText = t("resource.warning-text-unused");
const allResources = await fetchAllResources(); const allResources = await fetchAllResources();
const unusedResources = allResources.filter((resource) => { const unusedResources = allResources.filter((resource) => {
if (resource.linkedMemoAmount === 0) { if (resource.linkedMemoAmount === 0) {
@ -64,12 +64,12 @@ const ResourcesDashboard = () => {
return false; return false;
}); });
if (unusedResources.length === 0) { if (unusedResources.length === 0) {
toast.success(t("resources.no-unused-resources")); toast.success(t("resource.no-unused-resources"));
return; return;
} }
showCommonDialog({ showCommonDialog({
title: t("resources.delete-resource"), title: t("resource.delete-resource"),
content: warningText, content: warningText,
style: "warning", style: "warning",
dialogName: "delete-unused-resources", dialogName: "delete-unused-resources",
@ -83,11 +83,11 @@ const ResourcesDashboard = () => {
const handleDeleteSelectedBtnClick = () => { const handleDeleteSelectedBtnClick = () => {
if (selectedList.length == 0) { if (selectedList.length == 0) {
toast.error(t("resources.no-files-selected")); toast.error(t("resource.no-files-selected"));
} else { } else {
const warningText = t("resources.warning-text"); const warningText = t("resource.warning-text");
showCommonDialog({ showCommonDialog({
title: t("resources.delete-resource"), title: t("resource.delete-resource"),
content: warningText, content: warningText,
style: "warning", style: "warning",
dialogName: "delete-resource-dialog", dialogName: "delete-resource-dialog",
@ -182,7 +182,7 @@ const ResourcesDashboard = () => {
await resourceStore.createResourcesWithBlob(e.dataTransfer.files).then( await resourceStore.createResourcesWithBlob(e.dataTransfer.files).then(
(res) => { (res) => {
for (const resource of res) { for (const resource of res) {
toast.success(`${resource.filename} ${t("resources.upload-successfully")}`); toast.success(`${resource.filename} ${t("resource.upload-successfully")}`);
} }
}, },
(reason) => { (reason) => {
@ -205,7 +205,7 @@ const ResourcesDashboard = () => {
onDrop={handleDrop} onDrop={handleDrop}
> >
<div className="flex h-full w-full"> <div className="flex h-full w-full">
<p className="m-auto text-2xl text-white dark:text-black">{t("resources.file-drag-drop-prompt")}</p> <p className="m-auto text-2xl text-white dark:text-black">{t("resource.file-drag-drop-prompt")}</p>
</div> </div>
</div> </div>
)} )}
@ -242,7 +242,7 @@ const ResourcesDashboard = () => {
onClick={handleDeleteUnusedResourcesBtnClick} onClick={handleDeleteUnusedResourcesBtnClick}
> >
<Icon.Trash2 className="w-4 h-auto mr-2" /> <Icon.Trash2 className="w-4 h-auto mr-2" />
{t("resources.clear")} {t("common.clear")}
</button> </button>
</> </>
} }
@ -269,7 +269,7 @@ const ResourcesDashboard = () => {
<div className="w-full flex flex-col justify-start items-start mt-4 mb-6"> <div className="w-full flex flex-col justify-start items-start mt-4 mb-6">
{loadingState.isLoading ? ( {loadingState.isLoading ? (
<div className="w-full h-32 flex flex-col justify-center items-center"> <div className="w-full h-32 flex flex-col justify-center items-center">
<p className="w-full text-center text-base my-6 mt-8">{t("resources.fetching-data")}</p> <p className="w-full text-center text-base my-6 mt-8">{t("resource.fetching-data")}</p>
</div> </div>
) : ( ) : (
<div <div
@ -283,12 +283,12 @@ const ResourcesDashboard = () => {
<div className="px-2 py-2 w-full grid grid-cols-10 border-b dark:border-b-zinc-600"> <div className="px-2 py-2 w-full grid grid-cols-10 border-b dark:border-b-zinc-600">
<span></span> <span></span>
<span className="col-span-2">ID</span> <span className="col-span-2">ID</span>
<span className="col-span-6">{t("resources.name")}</span> <span className="col-span-6">{t("common.name")}</span>
<span></span> <span></span>
</div> </div>
)} )}
{resourceList.length === 0 ? ( {resourceList.length === 0 ? (
<p className="w-full text-center text-base my-6 mt-8">{t("resources.no-resources")}</p> <p className="w-full text-center text-base my-6 mt-8">{t("resource.no-resources")}</p>
) : ( ) : (
resourceList resourceList
)} )}
@ -299,7 +299,7 @@ const ResourcesDashboard = () => {
<p className="text-sm text-gray-400 italic"> <p className="text-sm text-gray-400 italic">
{!isComplete && ( {!isComplete && (
<span className="cursor-pointer my-6 hover:text-green-600" onClick={handleFetchMoreResourceBtnClick}> <span className="cursor-pointer my-6 hover:text-green-600" onClick={handleFetchMoreResourceBtnClick}>
{t("memo-list.fetch-more")} {t("memo.fetch-more")}
</span> </span>
)} )}
</p> </p>

Loading…
Cancel
Save