mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
chore: update locale file structure (#1478)
This commit is contained in:
@ -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}
|
||||||
|
1
web/src/helpers/site.ts
Normal file
1
web/src/helpers/site.ts
Normal file
@ -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"
|
||||||
},
|
},
|
||||||
"resources": {
|
"memo": {
|
||||||
"description": "View your static resources in memos. e.g. images",
|
"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"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
"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>
|
||||||
|
Reference in New Issue
Block a user