feat: add export to Obsidian feature (#998)
Co-authored-by: zjnbwxq <zjnbwxq@users.noreply.github.com> Co-authored-by: Stephen Zhou <38493346+hyoban@users.noreply.github.com>
This commit is contained in:
parent
93461e8ad7
commit
e875edfd57
|
|
@ -1,3 +1,5 @@
|
|||
import fs from "node:fs"
|
||||
import fsp from "node:fs/promises"
|
||||
import path from "node:path"
|
||||
|
||||
import { getRendererHandlers } from "@egoist/tipc/main"
|
||||
|
|
@ -225,6 +227,46 @@ export const appRoute = {
|
|||
}),
|
||||
|
||||
clearAllData: t.procedure.action(clearAllData),
|
||||
|
||||
saveToObsidian: t.procedure
|
||||
.input<{
|
||||
url: string
|
||||
title: string
|
||||
content: string
|
||||
author: string
|
||||
publishedAt: string
|
||||
vaultPath: string
|
||||
}>()
|
||||
.action(async ({ input }) => {
|
||||
try {
|
||||
const { url, title, content, author, publishedAt, vaultPath } = input
|
||||
|
||||
const fileName = `${(title || publishedAt).trim().slice(0, 20)}.md`
|
||||
const filePath = path.join(vaultPath, fileName)
|
||||
const exists = fs.existsSync(filePath)
|
||||
if (exists) {
|
||||
return { success: false, error: "File already exists" }
|
||||
}
|
||||
|
||||
const markdown = `---
|
||||
url: ${url}
|
||||
author: ${author}
|
||||
publishedAt: ${publishedAt}
|
||||
---
|
||||
|
||||
# ${title}
|
||||
|
||||
${content}
|
||||
`
|
||||
|
||||
await fsp.writeFile(filePath, markdown, "utf-8")
|
||||
return { success: true }
|
||||
} catch (error) {
|
||||
console.error("Failed to save to Obsidian:", error)
|
||||
const errorMessage = error instanceof Error ? error.message : String(error)
|
||||
return { success: false, error: errorMessage }
|
||||
}
|
||||
}),
|
||||
}
|
||||
|
||||
interface Sender extends Electron.WebContents {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@ export const createDefaultSettings = (): IntegrationSettings => ({
|
|||
enableOmnivore: false,
|
||||
omnivoreEndpoint: "",
|
||||
omnivoreToken: "",
|
||||
|
||||
// obsidian
|
||||
enableObsidian: false,
|
||||
obsidianVaultPath: "",
|
||||
})
|
||||
|
||||
export const {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
import type { SVGProps } from "react"
|
||||
|
||||
export function SimpleIconsObsidian(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="1em"
|
||||
height="1em"
|
||||
viewBox="0 0 512 512"
|
||||
{...props}
|
||||
>
|
||||
<path
|
||||
fill="currentColor"
|
||||
d="M359.9 434.3c-2.6 19.1-21.3 34-40 28.9-26.4-7.3-57-18.7-84.7-20.8l-42.3-3.2a27.9 27.9 0 0 1-18-8.4l-73-75a27.9 27.9 0 0 1-5.4-31s45.1-99 46.8-104.2c1.7-5.1 7.8-50 11.4-74.2a28 28 0 0 1 9-16.6l86.2-77.5a28 28 0 0 1 40.6 3.5l72.5 92a29.7 29.7 0 0 1 6.2 18.3c0 17.4 1.5 53.2 11.1 76.3a303 303 0 0 0 35.6 58.5 14 14 0 0 1 1.1 15.7c-6.4 10.8-18.9 31.4-36.7 57.9a143.3 143.3 0 0 0-20.4 59.8Z"
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
export * from "./collections/eagle"
|
||||
export * from "./collections/instapaper"
|
||||
export * from "./collections/obsidian"
|
||||
export * from "./collections/omnivore"
|
||||
export * from "./collections/readwise"
|
||||
export * from "./collections/rss3"
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import { mountLottie } from "~/components/ui/lottie-container"
|
|||
import {
|
||||
SimpleIconsEagle,
|
||||
SimpleIconsInstapaper,
|
||||
SimpleIconsObsidian,
|
||||
SimpleIconsOmnivore,
|
||||
SimpleIconsReadwise,
|
||||
} from "~/components/ui/platform-icon/icons"
|
||||
|
|
@ -171,6 +172,34 @@ export const useEntryActions = ({
|
|||
const enableOmnivore = useIntegrationSettingKey("enableOmnivore")
|
||||
const omnivoreToken = useIntegrationSettingKey("omnivoreToken")
|
||||
const omnivoreEndpoint = useIntegrationSettingKey("omnivoreEndpoint")
|
||||
const enableObsidian = useIntegrationSettingKey("enableObsidian")
|
||||
const obsidianVaultPath = useIntegrationSettingKey("obsidianVaultPath")
|
||||
const isObsidianEnabled = enableObsidian && !!obsidianVaultPath
|
||||
|
||||
const saveToObsidian = useMutation({
|
||||
mutationKey: ["save-to-obsidian"],
|
||||
mutationFn: async (data: {
|
||||
url: string
|
||||
title: string
|
||||
content: string
|
||||
author: string
|
||||
publishedAt: string
|
||||
vaultPath: string
|
||||
}) => {
|
||||
return await tipcClient?.saveToObsidian(data)
|
||||
},
|
||||
onSuccess: (data) => {
|
||||
if (data?.success) {
|
||||
toast.success(t("entry_actions.saved_to_obsidian"), {
|
||||
duration: 3000,
|
||||
})
|
||||
} else {
|
||||
toast.error(`${t("entry_actions.failed_to_save_to_obsidian")}: ${data?.error}`, {
|
||||
duration: 3000,
|
||||
})
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
const checkEagle = useQuery({
|
||||
queryKey: ["check-eagle"],
|
||||
|
|
@ -370,6 +399,24 @@ export const useEntryActions = ({
|
|||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
name: t("entry_actions.save_to_obsidian"),
|
||||
icon: <SimpleIconsObsidian />,
|
||||
key: "saveToObsidian",
|
||||
hide: !isObsidianEnabled || !populatedEntry?.entries?.url,
|
||||
onClick: () => {
|
||||
if (!isObsidianEnabled || !populatedEntry?.entries?.url) return
|
||||
|
||||
saveToObsidian.mutate({
|
||||
url: populatedEntry.entries.url,
|
||||
title: populatedEntry.entries.title || "",
|
||||
content: populatedEntry.entries.content || "",
|
||||
author: populatedEntry.entries.author || "",
|
||||
publishedAt: populatedEntry.entries.publishedAt || "",
|
||||
vaultPath: obsidianVaultPath,
|
||||
})
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "tip",
|
||||
shortcut: shortcuts.entry.tip.key,
|
||||
|
|
@ -534,9 +581,16 @@ export const useEntryActions = ({
|
|||
enableInstapaper,
|
||||
instapaperPassword,
|
||||
instapaperUsername,
|
||||
enableOmnivore,
|
||||
omnivoreToken,
|
||||
omnivoreEndpoint,
|
||||
isObsidianEnabled,
|
||||
isInbox,
|
||||
feed?.ownerUserId,
|
||||
type,
|
||||
showSourceContent,
|
||||
obsidianVaultPath,
|
||||
saveToObsidian,
|
||||
openTipModal,
|
||||
collect,
|
||||
uncollect,
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import { Divider } from "~/components/ui/divider"
|
|||
import {
|
||||
SimpleIconsEagle,
|
||||
SimpleIconsInstapaper,
|
||||
SimpleIconsObsidian,
|
||||
SimpleIconsOmnivore,
|
||||
SimpleIconsReadwise,
|
||||
} from "~/components/ui/platform-icon/icons"
|
||||
|
|
@ -151,6 +152,24 @@ export const SettingIntegration = () => {
|
|||
</>
|
||||
),
|
||||
}),
|
||||
{
|
||||
type: "title",
|
||||
value: (
|
||||
<span className="flex items-center gap-2 font-bold">
|
||||
<SimpleIconsObsidian />
|
||||
{t("integration.obsidian.title")}
|
||||
</span>
|
||||
),
|
||||
},
|
||||
defineSettingItem("enableObsidian", {
|
||||
label: t("integration.obsidian.enable.label"),
|
||||
description: t("integration.obsidian.enable.description"),
|
||||
}),
|
||||
defineSettingItem("obsidianVaultPath", {
|
||||
label: t("integration.obsidian.vaultPath.label"),
|
||||
vertical: true,
|
||||
description: t("integration.obsidian.vaultPath.description"),
|
||||
}),
|
||||
|
||||
BottomTip,
|
||||
]}
|
||||
|
|
|
|||
|
|
@ -17,15 +17,18 @@
|
|||
"entry_actions.copy_link": "نسخ الرابط",
|
||||
"entry_actions.failed_to_save_to_eagle": "فشل في الحفظ إلى Eagle.",
|
||||
"entry_actions.failed_to_save_to_instapaper": "فشل في الحفظ إلى Instapaper.",
|
||||
"entry_actions.failed_to_save_to_obsidian": "فشل في الحفظ إلى Obsidian.",
|
||||
"entry_actions.failed_to_save_to_readwise": "فشل في الحفظ إلى Readwise.",
|
||||
"entry_actions.mark_as_read": "تحديد كمقروء",
|
||||
"entry_actions.mark_as_unread": "تحديد كغير مقروء",
|
||||
"entry_actions.open_in_browser": "فتح في المتصفح",
|
||||
"entry_actions.save_media_to_eagle": "حفظ الوسائط إلى Eagle",
|
||||
"entry_actions.save_to_instapaper": "حفظ إلى Instapaper",
|
||||
"entry_actions.save_to_obsidian": "حفظ إلى Obsidian",
|
||||
"entry_actions.save_to_readwise": "حفظ إلى Readwise",
|
||||
"entry_actions.saved_to_eagle": "تم الحفظ إلى Eagle.",
|
||||
"entry_actions.saved_to_instapaper": "تم الحفظ إلى Instapaper.",
|
||||
"entry_actions.saved_to_obsidian": "تم الحفظ إلى Obsidian.",
|
||||
"entry_actions.saved_to_readwise": "تم الحفظ إلى Readwise.",
|
||||
"entry_actions.share": "مشاركة",
|
||||
"entry_actions.star": "تمييز بنجمة",
|
||||
|
|
|
|||
|
|
@ -17,15 +17,18 @@
|
|||
"entry_actions.copy_link": "نسخ الرابط",
|
||||
"entry_actions.failed_to_save_to_eagle": "فشل في الحفظ إلى Eagle.",
|
||||
"entry_actions.failed_to_save_to_instapaper": "فشل في الحفظ إلى Instapaper.",
|
||||
"entry_actions.failed_to_save_to_obsidian": "فشل في الحفظ إلى Obsidian.",
|
||||
"entry_actions.failed_to_save_to_readwise": "فشل في الحفظ إلى Readwise.",
|
||||
"entry_actions.mark_as_read": "تحديد كمقروء",
|
||||
"entry_actions.mark_as_unread": "تحديد كغير مقروء",
|
||||
"entry_actions.open_in_browser": "فتح في المتصفح",
|
||||
"entry_actions.save_media_to_eagle": "حفظ الوسائط إلى Eagle",
|
||||
"entry_actions.save_to_instapaper": "حفظ إلى Instapaper",
|
||||
"entry_actions.save_to_obsidian": "حفظ إلى Obsidian",
|
||||
"entry_actions.save_to_readwise": "حفظ إلى Readwise",
|
||||
"entry_actions.saved_to_eagle": "تم الحفظ إلى Eagle.",
|
||||
"entry_actions.saved_to_instapaper": "تم الحفظ إلى Instapaper.",
|
||||
"entry_actions.saved_to_obsidian": "تم الحفظ إلى Obsidian.",
|
||||
"entry_actions.saved_to_readwise": "تم الحفظ إلى Readwise.",
|
||||
"entry_actions.share": "مشاركة",
|
||||
"entry_actions.star": "إضافة إلى المفضلة",
|
||||
|
|
|
|||
|
|
@ -17,15 +17,18 @@
|
|||
"entry_actions.copy_link": "نسخ الرابط",
|
||||
"entry_actions.failed_to_save_to_eagle": "فشل في الحفظ إلى Eagle.",
|
||||
"entry_actions.failed_to_save_to_instapaper": "فشل في الحفظ إلى Instapaper.",
|
||||
"entry_actions.failed_to_save_to_obsidian": "فشل في الحفظ إلى Obsidian",
|
||||
"entry_actions.failed_to_save_to_readwise": "فشل في الحفظ إلى Readwise.",
|
||||
"entry_actions.mark_as_read": "وضع علامة كمقروء",
|
||||
"entry_actions.mark_as_unread": "وضع علامة كغير مقروء",
|
||||
"entry_actions.open_in_browser": "فتح في المتصفح",
|
||||
"entry_actions.save_media_to_eagle": "حفظ الوسائط إلى Eagle",
|
||||
"entry_actions.save_to_instapaper": "حفظ إلى Instapaper",
|
||||
"entry_actions.save_to_obsidian": "حفظ إلى Obsidian",
|
||||
"entry_actions.save_to_readwise": "حفظ إلى Readwise",
|
||||
"entry_actions.saved_to_eagle": "تم الحفظ إلى Eagle.",
|
||||
"entry_actions.saved_to_instapaper": "تم الحفظ إلى Instapaper.",
|
||||
"entry_actions.saved_to_obsidian": "تم الحفظ إلى Obsidian.",
|
||||
"entry_actions.saved_to_readwise": "تم الحفظ إلى Readwise.",
|
||||
"entry_actions.share": "مشاركة",
|
||||
"entry_actions.star": "تفضيل",
|
||||
|
|
|
|||
|
|
@ -17,16 +17,19 @@
|
|||
"entry_actions.copy_link": "نسخ الرابط",
|
||||
"entry_actions.failed_to_save_to_eagle": "فشل الحفظ إلى Eagle.",
|
||||
"entry_actions.failed_to_save_to_instapaper": "فشل الحفظ إلى Instapaper.",
|
||||
"entry_actions.failed_to_save_to_obsidian": "فشل الحفظ في Obsidian",
|
||||
"entry_actions.failed_to_save_to_readwise": "فشل الحفظ إلى Readwise.",
|
||||
"entry_actions.mark_as_read": "وضع علامة كمقروء",
|
||||
"entry_actions.mark_as_unread": "وضع علامة كغير مقروء",
|
||||
"entry_actions.open_in_browser": "فتح في المتصفح",
|
||||
"entry_actions.save_media_to_eagle": "حفظ الوسائط إلى Eagle",
|
||||
"entry_actions.save_to_instapaper": "حفظ إلى Instapaper",
|
||||
"entry_actions.save_to_obsidian": "حفظ في Obsidian",
|
||||
"entry_actions.save_to_readwise": "حفظ إلى Readwise",
|
||||
"entry_actions.saved_to_eagle": "تم الحفظ إلى Eagle.",
|
||||
"entry_actions.saved_to_instapaper": "تم الحفظ إلى Instapaper.",
|
||||
"entry_actions.saved_to_readwise": "تم الحفظ إلى Readwise.",
|
||||
"entry_actions.saved_to_obsidian": "تم الحفظ في Obsidian",
|
||||
"entry_actions.saved_to_readwise": "تم الحفظ في Readwise.",
|
||||
"entry_actions.share": "مشاركة",
|
||||
"entry_actions.star": "إضافة إلى المفضلة",
|
||||
"entry_actions.starred": "مضاف إلى المفضلة.",
|
||||
|
|
|
|||
|
|
@ -17,15 +17,18 @@
|
|||
"entry_actions.copy_link": "Link kopieren",
|
||||
"entry_actions.failed_to_save_to_eagle": "Speichern in Eagle fehlgeschlagen.",
|
||||
"entry_actions.failed_to_save_to_instapaper": "Speichern in Instapaper fehlgeschlagen.",
|
||||
"entry_actions.failed_to_save_to_obsidian": "Speichern in Obsidian fehlgeschlagen",
|
||||
"entry_actions.failed_to_save_to_readwise": "Speichern in Readwise fehlgeschlagen.",
|
||||
"entry_actions.mark_as_read": "Als gelesen markieren",
|
||||
"entry_actions.mark_as_unread": "Als ungelesen markieren",
|
||||
"entry_actions.open_in_browser": "Im Browser öffnen",
|
||||
"entry_actions.save_media_to_eagle": "Medien in Eagle speichern",
|
||||
"entry_actions.save_to_instapaper": "In Instapaper speichern",
|
||||
"entry_actions.save_to_obsidian": "In Obsidian speichern",
|
||||
"entry_actions.save_to_readwise": "In Readwise speichern",
|
||||
"entry_actions.saved_to_eagle": "In Eagle gespeichert.",
|
||||
"entry_actions.saved_to_instapaper": "In Instapaper gespeichert.",
|
||||
"entry_actions.saved_to_obsidian": "In Obsidian gespeichert",
|
||||
"entry_actions.saved_to_readwise": "In Readwise gespeichert.",
|
||||
"entry_actions.share": "Teilen",
|
||||
"entry_actions.star": "Favorisieren",
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@
|
|||
"entry_actions.copy_title": "Copy Title",
|
||||
"entry_actions.failed_to_save_to_eagle": "Failed to save to Eagle.",
|
||||
"entry_actions.failed_to_save_to_instapaper": "Failed to save to Instapaper.",
|
||||
"entry_actions.failed_to_save_to_obsidian": "Failed to save to Obsidian",
|
||||
"entry_actions.failed_to_save_to_omnivore": "Failed to save to Omnivore.",
|
||||
"entry_actions.failed_to_save_to_readwise": "Failed to save to Readwise.",
|
||||
"entry_actions.mark_as_read": "Mark as Read",
|
||||
|
|
@ -67,10 +68,12 @@
|
|||
"entry_actions.recent_reader": "Recent reader:",
|
||||
"entry_actions.save_media_to_eagle": "Save Media To Eagle",
|
||||
"entry_actions.save_to_instapaper": "Save To Instapaper",
|
||||
"entry_actions.save_to_obsidian": "Save to Obsidian",
|
||||
"entry_actions.save_to_omnivore": "Save To Omnivore",
|
||||
"entry_actions.save_to_readwise": "Save To Readwise",
|
||||
"entry_actions.saved_to_eagle": "Saved To Eagle.",
|
||||
"entry_actions.saved_to_instapaper": "Saved To Instapaper.",
|
||||
"entry_actions.saved_to_obsidian": "Saved to Obsidian",
|
||||
"entry_actions.saved_to_omnivore": "Saved To Omnivore.",
|
||||
"entry_actions.saved_to_readwise": "Saved To Readwise.",
|
||||
"entry_actions.share": "Share",
|
||||
|
|
|
|||
|
|
@ -15,12 +15,15 @@
|
|||
"discover.rss_url": "RSS URL",
|
||||
"discover.select_placeholder": "Seleccionar",
|
||||
"entry_actions.copy_link": "Copiar enlace",
|
||||
"entry_actions.failed_to_save_to_obsidian": "Error al guardar en Obsidian",
|
||||
"entry_actions.mark_as_read": "Marcar como leído",
|
||||
"entry_actions.mark_as_unread": "Marcar como no leído",
|
||||
"entry_actions.open_in_browser": "Abrir en el navegador",
|
||||
"entry_actions.save_media_to_eagle": "Guardar medios en Eagle",
|
||||
"entry_actions.save_to_instapaper": "Guardar en Instapaper",
|
||||
"entry_actions.save_to_obsidian": "Guardar en Obsidian",
|
||||
"entry_actions.save_to_readwise": "Guardar en Readwise",
|
||||
"entry_actions.saved_to_obsidian": "Guardado en Obsidian",
|
||||
"entry_actions.share": "Compartir",
|
||||
"entry_actions.star": "Agregar a favoritos",
|
||||
"entry_actions.tip": "Dar propina",
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@
|
|||
"entry_actions.copy_title": "复制标题",
|
||||
"entry_actions.failed_to_save_to_eagle": "保存到 Eagle 失败",
|
||||
"entry_actions.failed_to_save_to_instapaper": "保存到 Instapaper 失败",
|
||||
"entry_actions.failed_to_save_to_obsidian": "保存到 Obsidian 失败",
|
||||
"entry_actions.failed_to_save_to_omnivore": "保存到 Omnivore 失败",
|
||||
"entry_actions.failed_to_save_to_readwise": "保存到 Readwise 失败",
|
||||
"entry_actions.mark_as_read": "标记为已读",
|
||||
|
|
@ -63,10 +64,12 @@
|
|||
"entry_actions.recent_reader": "最近阅读者:",
|
||||
"entry_actions.save_media_to_eagle": "保存到 Eagle",
|
||||
"entry_actions.save_to_instapaper": "保存到 Instapaper",
|
||||
"entry_actions.save_to_obsidian": "保存到 Obsidian",
|
||||
"entry_actions.save_to_omnivore": "保存到 Omnivore",
|
||||
"entry_actions.save_to_readwise": "保存到 Readwise",
|
||||
"entry_actions.saved_to_eagle": "保存到 Eagle",
|
||||
"entry_actions.saved_to_instapaper": "保存到 Instapaper.",
|
||||
"entry_actions.saved_to_obsidian": "已保存到 Obsidian",
|
||||
"entry_actions.saved_to_omnivore": "保存到 Omnivore.",
|
||||
"entry_actions.saved_to_readwise": "保存到 Readwise.",
|
||||
"entry_actions.share": "分享",
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@
|
|||
"entry_actions.copy_title": "複製標題",
|
||||
"entry_actions.failed_to_save_to_eagle": "無法保存至 Eagle",
|
||||
"entry_actions.failed_to_save_to_instapaper": "無法保存至 Instapaper",
|
||||
"entry_actions.failed_to_save_to_obsidian": "儲存至 Obsidian 失敗",
|
||||
"entry_actions.failed_to_save_to_omnivore": "無法保存至 Omnivore",
|
||||
"entry_actions.failed_to_save_to_readwise": "無法保存至 Readwise",
|
||||
"entry_actions.mark_as_read": "標記為已讀",
|
||||
|
|
@ -63,12 +64,14 @@
|
|||
"entry_actions.recent_reader": "最近閱讀者:",
|
||||
"entry_actions.save_media_to_eagle": "保存媒體至 Eagle",
|
||||
"entry_actions.save_to_instapaper": "保存至 Instapaper",
|
||||
"entry_actions.save_to_obsidian": "儲存至 Obsidian",
|
||||
"entry_actions.save_to_omnivore": "保存至 Omnivore",
|
||||
"entry_actions.save_to_readwise": "保存至 Readwise",
|
||||
"entry_actions.save_to_readwise": "儲存至 Readwise",
|
||||
"entry_actions.saved_to_eagle": "已保存至 Eagle",
|
||||
"entry_actions.saved_to_instapaper": "已保存至 Instapaper",
|
||||
"entry_actions.saved_to_obsidian": "已儲存至 Obsidian",
|
||||
"entry_actions.saved_to_omnivore": "已保存至 Omnivore",
|
||||
"entry_actions.saved_to_readwise": "已保存至 Readwise",
|
||||
"entry_actions.saved_to_readwise": "已儲存至 Readwise",
|
||||
"entry_actions.share": "分享",
|
||||
"entry_actions.star": "收藏",
|
||||
"entry_actions.starred": "已收藏",
|
||||
|
|
@ -197,7 +200,7 @@
|
|||
"sidebar.add_more_feeds": "添加訂閱源",
|
||||
"sidebar.category_remove_dialog.cancel": "取消",
|
||||
"sidebar.category_remove_dialog.continue": "繼續",
|
||||
"sidebar.category_remove_dialog.description": "此操作將刪除你的分類,但其中的訂閱源將保留並按網站分組。",
|
||||
"sidebar.category_remove_dialog.description": "此操作將刪除你的分類,但其中的訂閱源將留並按網站分組。",
|
||||
"sidebar.category_remove_dialog.title": "刪除分類",
|
||||
"sidebar.feed_actions.claim": "認領",
|
||||
"sidebar.feed_actions.claim_feed": "認領訂閱源",
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@
|
|||
"entry_actions.copy_title": "複製標題",
|
||||
"entry_actions.failed_to_save_to_eagle": "無法儲存到 Eagle。",
|
||||
"entry_actions.failed_to_save_to_instapaper": "無法儲存到 Instapaper。",
|
||||
"entry_actions.failed_to_save_to_obsidian": "儲存到 Obsidian 失敗",
|
||||
"entry_actions.failed_to_save_to_omnivore": "無法儲存到 Omnivore。",
|
||||
"entry_actions.failed_to_save_to_readwise": "無法儲存到 Readwise。",
|
||||
"entry_actions.mark_as_read": "標記為已讀",
|
||||
|
|
@ -63,10 +64,12 @@
|
|||
"entry_actions.recent_reader": "最近閲讀者:",
|
||||
"entry_actions.save_media_to_eagle": "儲存媒體至 Eagle",
|
||||
"entry_actions.save_to_instapaper": "儲存到 Instapaper",
|
||||
"entry_actions.save_to_obsidian": "儲存到 Obsidian",
|
||||
"entry_actions.save_to_omnivore": "儲存到 Omnivore",
|
||||
"entry_actions.save_to_readwise": "儲存到 Readwise",
|
||||
"entry_actions.saved_to_eagle": "已儲存至 Eagle。",
|
||||
"entry_actions.saved_to_instapaper": "已儲存至 Instapaper。",
|
||||
"entry_actions.saved_to_obsidian": "已儲存到 Obsidian",
|
||||
"entry_actions.saved_to_omnivore": "已儲存至 Omnivore。",
|
||||
"entry_actions.saved_to_readwise": "已儲存至 Readwise。",
|
||||
"entry_actions.share": "分享",
|
||||
|
|
|
|||
|
|
@ -109,6 +109,11 @@
|
|||
"integration.instapaper.password.label": "كلمة مرور Instapaper",
|
||||
"integration.instapaper.title": "Instapaper",
|
||||
"integration.instapaper.username.label": "اسم مستخدم Instapaper",
|
||||
"integration.obsidian.enable.description": "عرض زر 'حفظ إلى Obsidian' عند توفره.",
|
||||
"integration.obsidian.enable.label": "تمكين",
|
||||
"integration.obsidian.title": "Obsidian",
|
||||
"integration.obsidian.vaultPath.description": "المسار إلى خزنة Obsidian الخاصة بك.",
|
||||
"integration.obsidian.vaultPath.label": "مسار خزنة Obsidian",
|
||||
"integration.readwise.enable.description": "عرض زر 'حفظ إلى Readwise' عند توفره.",
|
||||
"integration.readwise.enable.label": "تمكين",
|
||||
"integration.readwise.title": "Readwise",
|
||||
|
|
|
|||
|
|
@ -115,6 +115,11 @@
|
|||
"integration.instapaper.password.label": "كلمة مرور Instapaper",
|
||||
"integration.instapaper.title": "Instapaper",
|
||||
"integration.instapaper.username.label": "اسم مستخدم Instapaper",
|
||||
"integration.obsidian.enable.description": "عرض زر 'حفظ إلى Obsidian' عند توفره.",
|
||||
"integration.obsidian.enable.label": "تمكين",
|
||||
"integration.obsidian.title": "Obsidian",
|
||||
"integration.obsidian.vaultPath.description": "المسار إلى خزنة Obsidian الخاصة بك.",
|
||||
"integration.obsidian.vaultPath.label": "مسار خزنة Obsidian",
|
||||
"integration.readwise.enable.description": "عرض زر 'حفظ إلى Readwise' عند توفره.",
|
||||
"integration.readwise.enable.label": "تمكين",
|
||||
"integration.readwise.title": "Readwise",
|
||||
|
|
|
|||
|
|
@ -115,6 +115,11 @@
|
|||
"integration.instapaper.password.label": "كلمة مرور Instapaper",
|
||||
"integration.instapaper.title": "Instapaper",
|
||||
"integration.instapaper.username.label": "اسم مستخدم Instapaper",
|
||||
"integration.obsidian.enable.description": "عرض زر 'حفظ إلى Obsidian' عند توفره.",
|
||||
"integration.obsidian.enable.label": "تمكين",
|
||||
"integration.obsidian.title": "Obsidian",
|
||||
"integration.obsidian.vaultPath.description": "المسار إلى خزنة Obsidian الخاصة بك.",
|
||||
"integration.obsidian.vaultPath.label": "مسار خزنة Obsidian",
|
||||
"integration.readwise.enable.description": "عرض زر 'حفظ إلى Readwise' عند توفره.",
|
||||
"integration.readwise.enable.label": "تمكين",
|
||||
"integration.readwise.title": "Readwise",
|
||||
|
|
|
|||
|
|
@ -109,11 +109,16 @@
|
|||
"integration.instapaper.password.label": "كلمة مرور Instapaper",
|
||||
"integration.instapaper.title": "Instapaper",
|
||||
"integration.instapaper.username.label": "اسم مستخدم Instapaper",
|
||||
"integration.obsidian.enable.description": "عرض زر 'حفظ في Obsidian' إلا كان متوفر.",
|
||||
"integration.obsidian.enable.label": "تشغيل",
|
||||
"integration.obsidian.title": "Obsidian",
|
||||
"integration.obsidian.vaultPath.description": "المسار لخزنة Obsidian ديالك.",
|
||||
"integration.obsidian.vaultPath.label": "مسار خزنة Obsidian",
|
||||
"integration.readwise.enable.description": "عرض زر 'حفظ إلى Readwise' إلا كان متوفر.",
|
||||
"integration.readwise.enable.label": "تشغيل",
|
||||
"integration.readwise.title": "Readwise",
|
||||
"integration.readwise.token.description": "يمكنك الحصول عليه هنا: ",
|
||||
"integration.readwise.token.label": "رمز الوصول إلى Readwise",
|
||||
"integration.readwise.token.label": "رمز الوصول لـ Readwise",
|
||||
"integration.sidebar_title": "التكامل",
|
||||
"integration.tip": "نصيحة: البيانات الحساسة ديالك كتحفظ محليا وما كتترفعش للسيرفر.",
|
||||
"integration.title": "التكامل",
|
||||
|
|
|
|||
|
|
@ -121,6 +121,11 @@
|
|||
"integration.instapaper.password.label": "Instapaper Passwort",
|
||||
"integration.instapaper.title": "Instapaper",
|
||||
"integration.instapaper.username.label": "Instapaper Benutzername",
|
||||
"integration.obsidian.enable.description": "Zeige den Button „In Obsidian speichern, wenn erfügbar.",
|
||||
"integration.obsidian.enable.label": "Aktivieren",
|
||||
"integration.obsidian.title": "Obsidian",
|
||||
"integration.obsidian.vaultPath.description": "Der Pfad zu Ihrem Obsidian Vault.",
|
||||
"integration.obsidian.vaultPath.label": "Obsidian Vault-Pfad",
|
||||
"integration.readwise.enable.description": "Zeige den Button „Zu Readwise speichern“, wenn verfügbar.",
|
||||
"integration.readwise.enable.label": "Aktivieren",
|
||||
"integration.readwise.title": "Readwise",
|
||||
|
|
|
|||
|
|
@ -129,6 +129,11 @@
|
|||
"integration.instapaper.password.label": "Instapaper Password",
|
||||
"integration.instapaper.title": "Instapaper",
|
||||
"integration.instapaper.username.label": "Instapaper Username",
|
||||
"integration.obsidian.enable.description": "Display 'Save to Obsidian' button when available.",
|
||||
"integration.obsidian.enable.label": "Enable",
|
||||
"integration.obsidian.title": "Obsidian",
|
||||
"integration.obsidian.vaultPath.description": "The path to your Obsidian vault.",
|
||||
"integration.obsidian.vaultPath.label": "Obsidian Vault Path",
|
||||
"integration.omnivore.enable.description": "Display 'Save to Omnivore' button when available.",
|
||||
"integration.omnivore.enable.label": "Enable",
|
||||
"integration.omnivore.endpoint.description": "Omnivore Official Endpoint is: ",
|
||||
|
|
|
|||
|
|
@ -109,6 +109,11 @@
|
|||
"integration.instapaper.password.label": "Contraseña de Instapaper",
|
||||
"integration.instapaper.title": "Instapaper",
|
||||
"integration.instapaper.username.label": "Usuario de Instapaper",
|
||||
"integration.obsidian.enable.description": "Mostrar el botón 'Guardar en Obsidian' cuando esté disponible.",
|
||||
"integration.obsidian.enable.label": "Habilitar",
|
||||
"integration.obsidian.title": "Obsidian",
|
||||
"integration.obsidian.vaultPath.description": "La ruta a tu bóveda de Obsidian.",
|
||||
"integration.obsidian.vaultPath.label": "Ruta de la bóveda de Obsidian",
|
||||
"integration.readwise.enable.description": "Mostrar el botón 'Guardar en Readwise' cuando esté disponible.",
|
||||
"integration.readwise.enable.label": "Habilitar",
|
||||
"integration.readwise.title": "Readwise",
|
||||
|
|
|
|||
|
|
@ -128,6 +128,11 @@
|
|||
"integration.instapaper.password.label": "密码",
|
||||
"integration.instapaper.title": "Instapaper",
|
||||
"integration.instapaper.username.label": "Instapaper 用户名",
|
||||
"integration.obsidian.enable.description": "显示保存到Obsidian按钮(如果可用)",
|
||||
"integration.obsidian.enable.label": "启用",
|
||||
"integration.obsidian.title": "Obsidian",
|
||||
"integration.obsidian.vaultPath.description": "你的 Obsidian 仓库的路径",
|
||||
"integration.obsidian.vaultPath.label": "Obsidian 仓库路径",
|
||||
"integration.omnivore.enable.description": "显示\"保存到 Omnivore\"按钮(如果可用)",
|
||||
"integration.omnivore.enable.label": "启用",
|
||||
"integration.omnivore.endpoint.description": "Omnivore 官方接口",
|
||||
|
|
|
|||
|
|
@ -128,6 +128,11 @@
|
|||
"integration.instapaper.password.label": "Instapaper 密碼",
|
||||
"integration.instapaper.title": "Instapaper",
|
||||
"integration.instapaper.username.label": "Instapaper 用戶名",
|
||||
"integration.obsidian.enable.description": "顯示「儲存至 Obsidian」按鈕(如果可用)",
|
||||
"integration.obsidian.enable.label": "啟用",
|
||||
"integration.obsidian.title": "Obsidian",
|
||||
"integration.obsidian.vaultPath.description": "你的 Obsidian 儲存庫的路徑",
|
||||
"integration.obsidian.vaultPath.label": "Obsidian 儲存庫路徑",
|
||||
"integration.omnivore.enable.description": "顯示\"保存到 Omnivore\"按钮(如果可用)。",
|
||||
"integration.omnivore.enable.label": "啟用",
|
||||
"integration.omnivore.endpoint.description": "Omnivore 官方端口",
|
||||
|
|
|
|||
|
|
@ -125,11 +125,16 @@
|
|||
"integration.instapaper.password.label": "密碼",
|
||||
"integration.instapaper.title": "Instapaper",
|
||||
"integration.instapaper.username.label": "Instapaper 使用者",
|
||||
"integration.obsidian.enable.description": "顯示「儲存到 Obsidian」按鈕(如果可用)",
|
||||
"integration.obsidian.enable.label": "啟用",
|
||||
"integration.obsidian.title": "Obsidian",
|
||||
"integration.obsidian.vaultPath.description": "您的 Obsidian 儲存庫的路徑",
|
||||
"integration.obsidian.vaultPath.label": "Obsidian 儲存庫路徑",
|
||||
"integration.readwise.enable.description": "顯示「儲存到 Readwise」按钮(如果可用)。",
|
||||
"integration.readwise.enable.label": "啟用",
|
||||
"integration.readwise.title": "Readwise",
|
||||
"integration.readwise.token.description": "您可以在這裡取得",
|
||||
"integration.readwise.token.label": "Readwise 存取令牌",
|
||||
"integration.readwise.token.label": "Readwise 令牌",
|
||||
"integration.sidebar_title": "整合功能",
|
||||
"integration.tip": "提示:您的敏感資料儲存於本機,不會上傳到伺服器。",
|
||||
"integration.title": "整合功能",
|
||||
|
|
|
|||
|
|
@ -56,4 +56,8 @@ export interface IntegrationSettings {
|
|||
enableOmnivore: boolean
|
||||
omnivoreEndpoint: string
|
||||
omnivoreToken: string
|
||||
|
||||
// obsidian
|
||||
enableObsidian: boolean
|
||||
obsidianVaultPath: string
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue