mirror of
https://github.com/streetwriters/notesnook.git
synced 2025-12-16 19:57:52 +01:00
mobile: migrate more strings
This commit is contained in:
committed by
Abdullah Atta
parent
3e5b740ef0
commit
d31f6688f8
@@ -166,7 +166,7 @@ const Actions = ({
|
||||
eSendEvent(eDBItemUpdate, attachment.id);
|
||||
}
|
||||
},
|
||||
positiveText: "Rename"
|
||||
positiveText: strings.rename()
|
||||
});
|
||||
},
|
||||
icon: "form-textbox"
|
||||
|
||||
@@ -39,10 +39,9 @@ const ResultDialog = () => {
|
||||
const { colors } = useThemeColors();
|
||||
const [visible, setVisible] = useState(false);
|
||||
const [dialogData, setDialogData] = useState({
|
||||
title: "Thank you for signing up!",
|
||||
paragraph:
|
||||
"Try out all features of Notesnook free for 7 days. No limitations. No commitments.",
|
||||
button: "Start taking notes"
|
||||
title: "",
|
||||
paragraph: "",
|
||||
button: ""
|
||||
});
|
||||
useEffect(() => {
|
||||
eSubscribeEvent(eOpenResultDialog, open);
|
||||
|
||||
@@ -179,7 +179,7 @@ export class VaultDialog extends Component {
|
||||
if (this.state.loading) {
|
||||
ToastManager.show({
|
||||
heading: this.state.title,
|
||||
message: "Please wait and do not close the app.",
|
||||
message: strings.pleaseWait() + "...",
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
@@ -214,8 +214,7 @@ export class VaultDialog extends Component {
|
||||
|
||||
if (!this.password) {
|
||||
ToastManager.show({
|
||||
heading: "Password not entered",
|
||||
message: "Enter a password for the vault and try again.",
|
||||
heading: strings.passwordNotEntered(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -225,7 +224,7 @@ export class VaultDialog extends Component {
|
||||
if (!this.state.novault) {
|
||||
if (this.password !== this.confirmPassword) {
|
||||
ToastManager.show({
|
||||
heading: "Passwords do not match",
|
||||
heading: strings.passwordNotMatched(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -251,7 +250,7 @@ export class VaultDialog extends Component {
|
||||
this._enrollFingerprint(this.newPassword);
|
||||
}
|
||||
ToastManager.show({
|
||||
heading: "Vault password updated successfully",
|
||||
heading: strings.passwordUpdated(),
|
||||
type: "success",
|
||||
context: "global"
|
||||
});
|
||||
@@ -263,8 +262,7 @@ export class VaultDialog extends Component {
|
||||
});
|
||||
if (e.message === db.vault.ERRORS.wrongPassword) {
|
||||
ToastManager.show({
|
||||
heading: "Incorrect password",
|
||||
message: "Please enter the correct password and try again",
|
||||
heading: strings.passwordIncorrect(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -275,8 +273,7 @@ export class VaultDialog extends Component {
|
||||
} else if (this.state.locked) {
|
||||
if (!this.password || this.password.trim() === 0) {
|
||||
ToastManager.show({
|
||||
heading: "Incorrect password",
|
||||
message: "Please enter the correct password and try again",
|
||||
heading: strings.passwordIncorrect(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -344,8 +341,7 @@ export class VaultDialog extends Component {
|
||||
this.close();
|
||||
} else {
|
||||
ToastManager.show({
|
||||
heading: "Account password incorrect",
|
||||
message: "Please enter correct password for your account.",
|
||||
heading: strings.passwordIncorrect(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -386,8 +382,7 @@ export class VaultDialog extends Component {
|
||||
eSendEvent("vaultUpdated");
|
||||
} catch (e) {
|
||||
ToastManager.show({
|
||||
heading: "Vault password incorrect",
|
||||
message: "Please enter correct password to clear vault.",
|
||||
heading: strings.passwordIncorrect(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -400,7 +395,7 @@ export class VaultDialog extends Component {
|
||||
async _lockNote() {
|
||||
if (!this.password || this.password.trim() === 0) {
|
||||
ToastManager.show({
|
||||
heading: "Incorrect password",
|
||||
heading: strings.passwordIncorrect(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -413,7 +408,7 @@ export class VaultDialog extends Component {
|
||||
|
||||
this.close();
|
||||
ToastManager.show({
|
||||
message: "Note locked successfully",
|
||||
message: strings.noteLocked(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -426,8 +421,7 @@ export class VaultDialog extends Component {
|
||||
async _unlockNote() {
|
||||
if (!this.password || this.password.trim() === 0) {
|
||||
ToastManager.show({
|
||||
heading: "Incorrect password",
|
||||
message: "Please enter the correct password and try again",
|
||||
heading: strings.passwordIncorrect(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -484,8 +478,7 @@ export class VaultDialog extends Component {
|
||||
});
|
||||
eSendEvent("vaultUpdated");
|
||||
ToastManager.show({
|
||||
heading: "Biometric unlocking enabled!",
|
||||
message: "Now you can unlock notes in vault with biometrics.",
|
||||
heading: strings.biometricUnlockEnabled(),
|
||||
type: "success",
|
||||
context: "global"
|
||||
});
|
||||
@@ -493,9 +486,7 @@ export class VaultDialog extends Component {
|
||||
} catch (e) {
|
||||
this.close();
|
||||
ToastManager.show({
|
||||
heading: "Incorrect password",
|
||||
message:
|
||||
"Please enter the correct vault password to enable biometrics.",
|
||||
heading: strings.passwordIncorrect(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -520,7 +511,7 @@ export class VaultDialog extends Component {
|
||||
loading: false
|
||||
});
|
||||
ToastManager.show({
|
||||
heading: "Note added to vault",
|
||||
heading: strings.noteLocked(),
|
||||
type: "success",
|
||||
context: "global"
|
||||
});
|
||||
@@ -528,7 +519,7 @@ export class VaultDialog extends Component {
|
||||
} else {
|
||||
eSendEvent("vaultUpdated");
|
||||
ToastManager.show({
|
||||
heading: "Vault created successfully",
|
||||
heading: strings.vaultCreated(),
|
||||
type: "success",
|
||||
context: "global"
|
||||
});
|
||||
@@ -541,7 +532,7 @@ export class VaultDialog extends Component {
|
||||
.remove(this.state.note.id, this.password)
|
||||
.then(() => {
|
||||
ToastManager.show({
|
||||
heading: "Note permanently unlocked.",
|
||||
heading: strings.noteUnlocked(),
|
||||
type: "success",
|
||||
context: "global"
|
||||
});
|
||||
@@ -568,9 +559,8 @@ export class VaultDialog extends Component {
|
||||
async _copyNote(note) {
|
||||
Clipboard.setString((await convertNoteToText(note, true)) || "");
|
||||
ToastManager.show({
|
||||
heading: "Note copied",
|
||||
heading: strings.noteCopied(),
|
||||
type: "success",
|
||||
message: "Note has been copied to clipboard!",
|
||||
context: "global"
|
||||
});
|
||||
this.close();
|
||||
@@ -580,7 +570,7 @@ export class VaultDialog extends Component {
|
||||
this.close();
|
||||
try {
|
||||
await Share.open({
|
||||
heading: "Share note",
|
||||
heading: note.title,
|
||||
failOnCancel: false,
|
||||
message: (await convertNoteToText(note)) || ""
|
||||
});
|
||||
@@ -600,7 +590,7 @@ export class VaultDialog extends Component {
|
||||
});
|
||||
setTimeout(() => {
|
||||
ToastManager.show({
|
||||
heading: "Incorrect password",
|
||||
heading: strings.passwordIncorrect(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -615,14 +605,13 @@ export class VaultDialog extends Component {
|
||||
await BiometricService.resetCredentials();
|
||||
eSendEvent("vaultUpdated");
|
||||
ToastManager.show({
|
||||
heading: "Biometric unlocking disabled!",
|
||||
heading: strings.biometricUnlockDisabled(),
|
||||
type: "success",
|
||||
context: "global"
|
||||
});
|
||||
} catch (e) {
|
||||
ToastManager.show({
|
||||
heading: "Failed to disable Biometric unlocking.",
|
||||
message: e.message,
|
||||
heading: e.message,
|
||||
type: "success",
|
||||
context: "global"
|
||||
});
|
||||
|
||||
@@ -97,11 +97,13 @@ const Intro = ({ navigation }) => {
|
||||
extraBold
|
||||
size={SIZE.xxl}
|
||||
>
|
||||
{heading}
|
||||
{heading()}
|
||||
</Heading>
|
||||
))}
|
||||
|
||||
{item.body ? <Paragraph size={SIZE.sm}>{item.body}</Paragraph> : null}
|
||||
{item.body ? (
|
||||
<Paragraph size={SIZE.sm}>{item.body()}</Paragraph>
|
||||
) : null}
|
||||
|
||||
{item.tesimonial ? (
|
||||
<Paragraph
|
||||
@@ -113,7 +115,7 @@ const Intro = ({ navigation }) => {
|
||||
Linking.openURL(item.link);
|
||||
}}
|
||||
>
|
||||
{item.tesimonial} — {item.user}
|
||||
{item.tesimonial()} — {item.user}
|
||||
</Paragraph>
|
||||
) : null}
|
||||
</View>
|
||||
@@ -153,26 +155,7 @@ const Intro = ({ navigation }) => {
|
||||
index={0}
|
||||
useReactNativeGestureHandler={true}
|
||||
showPagination
|
||||
data={[
|
||||
{
|
||||
headings: ["Open source.", "End to end encrypted.", "Private."],
|
||||
body: "Write notes with freedom, no spying, no tracking."
|
||||
},
|
||||
{
|
||||
headings: [
|
||||
"Privacy for everyone",
|
||||
"— not just the",
|
||||
"privileged few"
|
||||
],
|
||||
body: "Your privacy matters to us, no matter who you are. In a world where everyone is trying to spy on you, Notesnook encrypts all your data before it leaves your device. With Notesnook no one can ever sell your data again."
|
||||
},
|
||||
{
|
||||
tesimonial:
|
||||
"You simply cannot get any better of a note taking app than @notesnook. The UI is clean and slick, it is feature rich, encrypted, reasonably priced (esp. for students & educators) & open source",
|
||||
link: "https://twitter.com/andrewsayer/status/1637817220113002503",
|
||||
user: "@andrewsayer on Twitter"
|
||||
}
|
||||
]}
|
||||
data={strings.introData()}
|
||||
paginationActiveColor={colors.primary.accent}
|
||||
paginationStyleItem={{
|
||||
width: 10,
|
||||
|
||||
@@ -58,7 +58,7 @@ export const NotebookHeader = ({
|
||||
}
|
||||
});
|
||||
ToastManager.show({
|
||||
heading: "Shortcut created",
|
||||
heading: strings.shortcutCreated(),
|
||||
type: "success"
|
||||
});
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import { useSelectionStore } from "../../../stores/use-selection-store";
|
||||
import { useTrashStore } from "../../../stores/use-trash-store";
|
||||
import { presentDialog } from "../../dialog/functions";
|
||||
import SelectionWrapper, { selectItem } from "../selection-wrapper";
|
||||
import { strings } from "@notesnook/intl";
|
||||
|
||||
export const openNotebook = (item: Notebook | BaseTrashItem<Notebook>) => {
|
||||
const isTrash = item.type === "trash";
|
||||
@@ -36,16 +37,15 @@ export const openNotebook = (item: Notebook | BaseTrashItem<Notebook>) => {
|
||||
|
||||
if (isTrash) {
|
||||
presentDialog({
|
||||
title: `Restore notebook`,
|
||||
paragraph: `Restore or delete notebook forever`,
|
||||
positiveText: "Restore",
|
||||
negativeText: "Delete",
|
||||
title: strings.restoreNotebook(),
|
||||
positiveText: strings.restore(),
|
||||
negativeText: strings.delete(),
|
||||
positivePress: async () => {
|
||||
await db.trash.restore(item.id);
|
||||
Navigation.queueRoutesForUpdate();
|
||||
useSelectionStore.getState().setSelectionMode(undefined);
|
||||
ToastManager.show({
|
||||
heading: "Restore successful",
|
||||
heading: strings.notebookRestored(),
|
||||
type: "success"
|
||||
});
|
||||
},
|
||||
@@ -54,7 +54,7 @@ export const openNotebook = (item: Notebook | BaseTrashItem<Notebook>) => {
|
||||
useTrashStore.getState().refresh();
|
||||
useSelectionStore.getState().setSelectionMode(undefined);
|
||||
ToastManager.show({
|
||||
heading: "Permanently deleted items",
|
||||
heading: strings.permanentlyDeletedNotebook(),
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
|
||||
@@ -52,7 +52,7 @@ export default function NotePreview({ session, content, note }) {
|
||||
Navigation.queueRoutesForUpdate();
|
||||
useSelectionStore.getState().setSelectionMode(false);
|
||||
ToastManager.show({
|
||||
heading: "Restore successful",
|
||||
heading: strings.noteRestored(),
|
||||
type: "success"
|
||||
});
|
||||
eSendEvent(eCloseSheet);
|
||||
@@ -73,7 +73,7 @@ export default function NotePreview({ session, content, note }) {
|
||||
Navigation.queueRoutesForUpdate();
|
||||
|
||||
ToastManager.show({
|
||||
heading: "Note restored successfully",
|
||||
heading: strings.noteRestoredFromHistory(),
|
||||
type: "success"
|
||||
});
|
||||
}
|
||||
@@ -84,17 +84,17 @@ export default function NotePreview({ session, content, note }) {
|
||||
|
||||
const deleteNote = async () => {
|
||||
presentDialog({
|
||||
title: `Delete note permanently`,
|
||||
paragraph: `Are you sure you want to delete this note from trash permanentaly`,
|
||||
positiveText: "Delete",
|
||||
negativeText: "Cancel",
|
||||
title: strings.deleteNote(),
|
||||
paragraph: strings.deleteNoteConfirmation(),
|
||||
positiveText: strings.delete(),
|
||||
negativeText: strings.cancel(),
|
||||
context: "local",
|
||||
positivePress: async () => {
|
||||
await db.trash.delete(note.id);
|
||||
useTrashStore.getState().refresh();
|
||||
useSelectionStore.getState().setSelectionMode(false);
|
||||
ToastManager.show({
|
||||
heading: "Permanently deleted items",
|
||||
heading: strings.noteDeleted(),
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
|
||||
@@ -46,6 +46,7 @@ import { MoveNotebookSheet } from "../sheets/move-notebook";
|
||||
import { Button } from "../ui/button";
|
||||
import { IconButton } from "../ui/icon-button";
|
||||
import Heading from "../ui/typography/heading";
|
||||
import { strings } from "@notesnook/intl";
|
||||
|
||||
export const SelectionHeader = React.memo(
|
||||
({
|
||||
@@ -94,21 +95,20 @@ export const SelectionHeader = React.memo(
|
||||
|
||||
clearSelection();
|
||||
ToastManager.show({
|
||||
heading: "Restore successful",
|
||||
heading: strings.restored(),
|
||||
type: "success"
|
||||
});
|
||||
};
|
||||
|
||||
const deleteItem = async () => {
|
||||
presentDialog({
|
||||
title: `Delete ${selectedItemsList.length > 1 ? "items" : "item"}`,
|
||||
paragraph: `Are you sure you want to delete ${
|
||||
selectedItemsList.length > 1
|
||||
? "these items permanently?"
|
||||
: "this item permanently?"
|
||||
}`,
|
||||
positiveText: "Delete",
|
||||
negativeText: "Cancel",
|
||||
title: strings.deleteItems(type as string, selectedItemsList.length),
|
||||
paragraph: strings.deleteItemsConfirmation(
|
||||
type as string,
|
||||
selectedItemsList.length
|
||||
),
|
||||
positiveText: strings.delete(),
|
||||
negativeText: strings.cancel(),
|
||||
positivePress: async () => {
|
||||
if (!selectedItemsList.length) return;
|
||||
await db.trash.delete(...selectedItemsList);
|
||||
@@ -236,10 +236,7 @@ export const SelectionHeader = React.memo(
|
||||
>
|
||||
{[
|
||||
{
|
||||
title:
|
||||
selectedItemsList.length > 1
|
||||
? "Move notebooks"
|
||||
: "Move notebook",
|
||||
title: strings.move(),
|
||||
onPress: async () => {
|
||||
const ids = selectedItemsList;
|
||||
const notebooks = await db.notebooks.all.items(ids);
|
||||
@@ -249,7 +246,7 @@ export const SelectionHeader = React.memo(
|
||||
icon: "arrow-right-bold-box-outline"
|
||||
},
|
||||
{
|
||||
title: "Manage tags",
|
||||
title: strings.manageTags(),
|
||||
onPress: async () => {
|
||||
await sleep(100);
|
||||
ManageTagsSheet.present(selectedItemsList);
|
||||
@@ -258,7 +255,7 @@ export const SelectionHeader = React.memo(
|
||||
icon: "pound"
|
||||
},
|
||||
{
|
||||
title: "Export",
|
||||
title: strings.export(),
|
||||
onPress: async () => {
|
||||
await sleep(100);
|
||||
ExportNotesSheet.present(selectedItemsList);
|
||||
@@ -267,7 +264,7 @@ export const SelectionHeader = React.memo(
|
||||
icon: "export"
|
||||
},
|
||||
{
|
||||
title: "Link notebook",
|
||||
title: strings.linkNotebook(),
|
||||
onPress: async () => {
|
||||
await sleep(100);
|
||||
MoveNoteSheet.present();
|
||||
@@ -276,7 +273,7 @@ export const SelectionHeader = React.memo(
|
||||
icon: "plus"
|
||||
},
|
||||
{
|
||||
title: "Unlink notebook",
|
||||
title: strings.unlinkNotebook(),
|
||||
onPress: async () => {
|
||||
if (!id) return;
|
||||
await db.notes.removeFromNotebook(id, ...selectedItemsList);
|
||||
@@ -288,13 +285,13 @@ export const SelectionHeader = React.memo(
|
||||
icon: "minus"
|
||||
},
|
||||
{
|
||||
title: "Unfavorite",
|
||||
title: strings.unfavorite(),
|
||||
onPress: addToFavorite,
|
||||
visible: focusedRouteId === "Favorites",
|
||||
icon: "star-off"
|
||||
},
|
||||
{
|
||||
title: `Move to trash`,
|
||||
title: strings.moveToTrash(),
|
||||
onPress: async () => {
|
||||
deleteItems(
|
||||
undefined,
|
||||
@@ -308,13 +305,13 @@ export const SelectionHeader = React.memo(
|
||||
icon: "delete"
|
||||
},
|
||||
{
|
||||
title: `Restore`,
|
||||
title: strings.restore(),
|
||||
onPress: restoreItem,
|
||||
visible: type === "trash",
|
||||
icon: "delete-restore"
|
||||
},
|
||||
{
|
||||
title: `Delete`,
|
||||
title: strings.delete(),
|
||||
onPress: deleteItem,
|
||||
visible: type === "trash",
|
||||
icon: "delete"
|
||||
|
||||
@@ -63,18 +63,18 @@ export const AddNotebookSheet = ({
|
||||
|
||||
const onSaveChanges = async () => {
|
||||
if (loading) return;
|
||||
setLoading(true);
|
||||
|
||||
if (!title.current || title?.current.trim().length === 0) {
|
||||
ToastManager.show({
|
||||
heading: "Notebook title is required",
|
||||
heading: strings.enterNotebookTitle(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
setLoading(true);
|
||||
|
||||
const id = await db.notebooks.add({
|
||||
title: title.current,
|
||||
description: description.current,
|
||||
|
||||
@@ -89,8 +89,7 @@ export const ChangeEmail = ({ close }: ChangeEmailProps) => {
|
||||
eSendEvent(eUserLoggedIn);
|
||||
close?.();
|
||||
ToastManager.show({
|
||||
heading: `Email changed`,
|
||||
message: `Your account email has been updated to ${emailChangeData.current.email}`,
|
||||
heading: strings.emailUpdated(emailChangeData.current.email),
|
||||
type: "success",
|
||||
context: "global"
|
||||
});
|
||||
|
||||
@@ -119,7 +119,6 @@ const ExportNotesSheet = ({
|
||||
await exportNoteAs("pdf");
|
||||
},
|
||||
icon: "file-pdf-box",
|
||||
desc: "View in any pdf reader app",
|
||||
id: notesnook.ids.dialogs.export.pdf,
|
||||
pro: premium
|
||||
},
|
||||
@@ -129,7 +128,6 @@ const ExportNotesSheet = ({
|
||||
await exportNoteAs("md");
|
||||
},
|
||||
icon: "language-markdown",
|
||||
desc: "View in any text or markdown editor",
|
||||
id: notesnook.ids.dialogs.export.md,
|
||||
pro: premium
|
||||
},
|
||||
@@ -139,7 +137,6 @@ const ExportNotesSheet = ({
|
||||
await exportNoteAs("md-frontmatter");
|
||||
},
|
||||
icon: "language-markdown",
|
||||
desc: "View in any text or markdown editor",
|
||||
id: notesnook.ids.dialogs.export.md,
|
||||
pro: premium
|
||||
},
|
||||
@@ -149,7 +146,6 @@ const ExportNotesSheet = ({
|
||||
await exportNoteAs("txt");
|
||||
},
|
||||
icon: "card-text",
|
||||
desc: "View in any text editor",
|
||||
id: notesnook.ids.dialogs.export.text,
|
||||
pro: true
|
||||
},
|
||||
@@ -159,7 +155,6 @@ const ExportNotesSheet = ({
|
||||
await exportNoteAs("html");
|
||||
},
|
||||
icon: "language-html5",
|
||||
desc: "View in any web browser & html reader",
|
||||
id: notesnook.ids.dialogs.export.html,
|
||||
pro: premium
|
||||
}
|
||||
@@ -232,13 +227,13 @@ const ExportNotesSheet = ({
|
||||
<Heading style={{ marginLeft: 10 }} size={SIZE.md}>
|
||||
{item.title}
|
||||
</Heading>
|
||||
<Paragraph
|
||||
{/* <Paragraph
|
||||
style={{ marginLeft: 10 }}
|
||||
size={SIZE.sm}
|
||||
color={colors.secondary.paragraph}
|
||||
>
|
||||
{item.desc}
|
||||
</Paragraph>
|
||||
</Paragraph> */}
|
||||
</View>
|
||||
</Pressable>
|
||||
</Fragment>
|
||||
@@ -311,8 +306,7 @@ const ExportNotesSheet = ({
|
||||
showAppsSuggestions: true
|
||||
}).catch((e) => {
|
||||
ToastManager.show({
|
||||
heading: "Cannot open",
|
||||
message: `No application found to open ${result.name} file.`,
|
||||
heading: strings.noApplicationFound(result.name),
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
|
||||
@@ -42,8 +42,7 @@ export const ShareComponent = ({ uri, name, padding }) => {
|
||||
showAppsSuggestions: true
|
||||
}).catch(() => {
|
||||
ToastManager.show({
|
||||
heading: "Cannot open",
|
||||
message: `No application found to open ${name} file.`,
|
||||
heading: strings.noApplicationFound(name),
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
|
||||
@@ -76,8 +76,7 @@ Logged in: ${user ? "yes" : "no"}`,
|
||||
} catch (e) {
|
||||
setLoading(false);
|
||||
ToastManager.show({
|
||||
heading: "An error occured",
|
||||
message: e.message,
|
||||
heading: e.message,
|
||||
type: "error"
|
||||
});
|
||||
}
|
||||
|
||||
@@ -139,11 +139,6 @@ const ManageTagsSheet = (props: {
|
||||
|
||||
const onSubmit = async () => {
|
||||
if (!query || query === "" || query.trimStart().length == 0) {
|
||||
ToastManager.show({
|
||||
heading: "Tag field is empty",
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -182,12 +177,7 @@ const ManageTagsSheet = (props: {
|
||||
useTagStore.getState().refresh();
|
||||
setQuery(undefined);
|
||||
} catch (e) {
|
||||
ToastManager.show({
|
||||
heading: "Cannot add tag",
|
||||
type: "error",
|
||||
message: (e as Error).message,
|
||||
context: "local"
|
||||
});
|
||||
ToastManager.error(e as Error);
|
||||
}
|
||||
|
||||
Navigation.queueRoutesForUpdate();
|
||||
|
||||
@@ -97,17 +97,12 @@ export const MoveNotebookSheet = ({
|
||||
selectedNotebooks={selectedNotebooks}
|
||||
onPress={async (selectedNotebook) => {
|
||||
presentDialog({
|
||||
title: `Move ${
|
||||
selectedNotebooks.length > 1
|
||||
? selectedNotebooks.length + " notebooks"
|
||||
: selectedNotebooks[0].title
|
||||
}`,
|
||||
paragraph: `Are you sure you want to move ${
|
||||
selectedNotebooks.length > 1
|
||||
? selectedNotebooks.length + " notebooks"
|
||||
: selectedNotebooks[0].title
|
||||
} to ${selectedNotebook.title}?`,
|
||||
positiveText: "Move",
|
||||
title: strings.moveNotebooks(selectedNotebooks.length),
|
||||
paragraph: strings.moveNotebooksConfirm(
|
||||
selectedNotebooks.length,
|
||||
selectedNotebook.title
|
||||
),
|
||||
positiveText: strings.move(),
|
||||
context: "move-notebook",
|
||||
positivePress: async () => {
|
||||
for (const notebook of selectedNotebooks) {
|
||||
|
||||
@@ -77,7 +77,7 @@ const PublishNoteSheet = ({
|
||||
requestInAppReview();
|
||||
} catch (e) {
|
||||
ToastManager.show({
|
||||
heading: "Could not publish note",
|
||||
heading: strings.failedToPublish(),
|
||||
message: (e as Error).message,
|
||||
type: "error",
|
||||
context: "local"
|
||||
@@ -103,7 +103,7 @@ const PublishNoteSheet = ({
|
||||
}
|
||||
} catch (e) {
|
||||
ToastManager.show({
|
||||
heading: "Could not unpublish note",
|
||||
heading: strings.failedToUnpublish(),
|
||||
message: (e as Error).message,
|
||||
type: "error",
|
||||
context: "local"
|
||||
@@ -194,7 +194,7 @@ const PublishNoteSheet = ({
|
||||
onPress={() => {
|
||||
Clipboard.setString(publishUrl as string);
|
||||
ToastManager.show({
|
||||
heading: "Note publish url copied",
|
||||
heading: strings.monographUrlCopied(),
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
|
||||
@@ -76,8 +76,8 @@ class RecoveryKeySheet extends React.Component {
|
||||
close = () => {
|
||||
if (this.tapCount === 0) {
|
||||
ToastManager.show({
|
||||
heading: "Did you save recovery key?",
|
||||
message: "Tap one more time to confirm.",
|
||||
heading: strings.recoveryKeySaved(),
|
||||
message: strings.recoveryKeySavedDesc(),
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
@@ -130,9 +130,7 @@ class RecoveryKeySheet extends React.Component {
|
||||
await RNFetchBlob.fs.writeFile(path + fileName, data, "base64");
|
||||
}
|
||||
ToastManager.show({
|
||||
heading: "Recovery key QR-Code saved",
|
||||
message:
|
||||
"QR-Code image has been saved to Gallery at " + path + fileName,
|
||||
heading: strings.recoveryKeyQRCodeSaved(),
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
@@ -165,8 +163,7 @@ class RecoveryKeySheet extends React.Component {
|
||||
}
|
||||
|
||||
ToastManager.show({
|
||||
heading: "Recovery key text file saved",
|
||||
message: "Recovery key saved in text file.",
|
||||
heading: strings.recoveryKeyTextFileSaved(),
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
@@ -284,7 +281,7 @@ class RecoveryKeySheet extends React.Component {
|
||||
onPress={() => {
|
||||
Clipboard.setString(this.state.key);
|
||||
ToastManager.show({
|
||||
heading: "Recovery key copied!",
|
||||
heading: strings.recoveryKeyCopied(),
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
|
||||
@@ -68,19 +68,19 @@ export default function ReminderNotify({
|
||||
|
||||
const QuickActions = [
|
||||
{
|
||||
title: "5 min",
|
||||
title: `5 ${strings.timeShort.minute}`,
|
||||
time: 5
|
||||
},
|
||||
{
|
||||
title: "15 min",
|
||||
title: `15 ${strings.timeShort.minute}`,
|
||||
time: 15
|
||||
},
|
||||
{
|
||||
title: "30 min",
|
||||
title: `30 ${strings.timeShort.minute}`,
|
||||
time: 30
|
||||
},
|
||||
{
|
||||
title: "1 hour",
|
||||
title: `1 ${strings.timeShort.hour}`,
|
||||
time: 60
|
||||
}
|
||||
];
|
||||
|
||||
@@ -206,12 +206,6 @@ export default function ReminderSheet({
|
||||
if (!reminderId) return;
|
||||
const _reminder = await db.reminders?.reminder(reminderId);
|
||||
|
||||
if (!_reminder) {
|
||||
ToastManager.show({
|
||||
heading: "Failed to add a new reminder",
|
||||
context: "local"
|
||||
});
|
||||
}
|
||||
if (reference && _reminder) {
|
||||
await db.relations?.add(reference, {
|
||||
id: _reminder?.id as string,
|
||||
|
||||
@@ -68,6 +68,7 @@ import { sleep } from "../utils/time";
|
||||
import { ReferencesList } from "../components/sheets/references";
|
||||
import { createInternalLink } from "@notesnook/core";
|
||||
import { MoveNotebookSheet } from "../components/sheets/move-notebook";
|
||||
import { strings } from "@notesnook/intl";
|
||||
|
||||
export const useActions = ({
|
||||
close,
|
||||
@@ -194,8 +195,7 @@ export const useActions = ({
|
||||
close();
|
||||
await sleep(300);
|
||||
presentDialog({
|
||||
title: "Rename tag",
|
||||
paragraph: "Change the title of the tag " + item.title,
|
||||
title: strings.renameTag(),
|
||||
positivePress: async (value: string) => {
|
||||
if (!value || value === "" || value.trimStart().length == 0) return;
|
||||
try {
|
||||
@@ -218,7 +218,7 @@ export const useActions = ({
|
||||
input: true,
|
||||
defaultValue: item.title,
|
||||
inputPlaceholder: "Enter title of tag",
|
||||
positiveText: "Save"
|
||||
positiveText: strings.save()
|
||||
});
|
||||
}
|
||||
|
||||
@@ -227,11 +227,10 @@ export const useActions = ({
|
||||
close();
|
||||
await sleep(300);
|
||||
presentDialog({
|
||||
title: "Rename color",
|
||||
title: strings.renameColor(),
|
||||
input: true,
|
||||
inputPlaceholder: "Enter name for this color",
|
||||
inputPlaceholder: strings.name(),
|
||||
defaultValue: item.title,
|
||||
paragraph: "You are renaming the color " + item.title,
|
||||
positivePress: async (value) => {
|
||||
if (!value || value.trim().length === 0) return;
|
||||
await db.colors.add({
|
||||
@@ -242,7 +241,7 @@ export const useActions = ({
|
||||
eSendEvent(Navigation.routeNames.ColoredNotes);
|
||||
useMenuStore.getState().setColorNotes();
|
||||
},
|
||||
positiveText: "Rename"
|
||||
positiveText: strings.rename()
|
||||
});
|
||||
}
|
||||
|
||||
@@ -275,7 +274,7 @@ export const useActions = ({
|
||||
useRelationStore.getState().update();
|
||||
});
|
||||
},
|
||||
positiveText: "Delete",
|
||||
positiveText: strings.delete(),
|
||||
positiveType: "errorShade"
|
||||
});
|
||||
return;
|
||||
@@ -287,8 +286,8 @@ export const useActions = ({
|
||||
novault: true,
|
||||
locked: true,
|
||||
item: item,
|
||||
title: "Delete note",
|
||||
description: "Unlock note to delete it."
|
||||
title: strings.deleteNote(),
|
||||
description: strings.unlockToDelete()
|
||||
});
|
||||
} else {
|
||||
try {
|
||||
@@ -305,17 +304,17 @@ export const useActions = ({
|
||||
close();
|
||||
await sleep(300);
|
||||
presentDialog({
|
||||
title: "Permanent delete",
|
||||
paragraph: `Are you sure you want to delete this ${item.itemType} permanently from trash?`,
|
||||
positiveText: "Delete",
|
||||
negativeText: "Cancel",
|
||||
title: strings.delete(),
|
||||
paragraph: strings.deleteItemsConfirmation(item.itemType, 1),
|
||||
positiveText: strings.delete(),
|
||||
negativeText: strings.cancel(),
|
||||
positivePress: async () => {
|
||||
await db.trash.delete(item.id);
|
||||
setImmediate(() => {
|
||||
Navigation.queueRoutesForUpdate();
|
||||
useSelectionStore.getState().setSelectionMode(undefined);
|
||||
ToastManager.show({
|
||||
heading: "Permanently deleted items",
|
||||
heading: strings.itemDeleted(1, item.itemType),
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
@@ -358,7 +357,7 @@ export const useActions = ({
|
||||
if (item.type === "tag") {
|
||||
actions.push({
|
||||
id: "rename-tag",
|
||||
title: "Rename",
|
||||
title: strings.rename(),
|
||||
icon: "square-edit-outline",
|
||||
func: renameTag
|
||||
});
|
||||
@@ -367,14 +366,14 @@ export const useActions = ({
|
||||
if (item.type === "color") {
|
||||
actions.push({
|
||||
id: "rename-color",
|
||||
title: "Rename",
|
||||
title: strings.rename(),
|
||||
icon: "square-edit-outline",
|
||||
func: renameColor
|
||||
});
|
||||
|
||||
actions.push({
|
||||
id: "reorder",
|
||||
title: "Reorder",
|
||||
title: strings.reorder(),
|
||||
icon: "sort-ascending",
|
||||
func: () => {
|
||||
useSideBarDraggingStore.setState({
|
||||
@@ -389,7 +388,9 @@ export const useActions = ({
|
||||
actions.push(
|
||||
{
|
||||
id: "disable-reminder",
|
||||
title: !item.disabled ? "Turn off reminder" : "Turn on reminder",
|
||||
title: !item.disabled
|
||||
? strings.turnOffReminder()
|
||||
: strings.turnOnReminder(),
|
||||
icon: !item.disabled ? "bell-off-outline" : "bell",
|
||||
func: async () => {
|
||||
close();
|
||||
@@ -404,7 +405,7 @@ export const useActions = ({
|
||||
},
|
||||
{
|
||||
id: "edit-reminder",
|
||||
title: "Edit reminder",
|
||||
title: strings.editReminder(),
|
||||
icon: "pencil",
|
||||
func: async () => {
|
||||
ReminderSheet.present(item);
|
||||
@@ -418,13 +419,13 @@ export const useActions = ({
|
||||
actions.push(
|
||||
{
|
||||
id: "restore",
|
||||
title: "Restore " + item.itemType,
|
||||
title: strings.restore(),
|
||||
icon: "delete-restore",
|
||||
func: restoreTrashItem
|
||||
},
|
||||
{
|
||||
id: "delete",
|
||||
title: "Delete " + item.itemType,
|
||||
title: strings.delete(),
|
||||
icon: "delete",
|
||||
func: deleteTrashItem
|
||||
}
|
||||
@@ -434,7 +435,7 @@ export const useActions = ({
|
||||
if (item.type === "tag" || item.type === "notebook") {
|
||||
actions.push({
|
||||
id: "add-shortcut",
|
||||
title: isPinnedToMenu ? "Remove Shortcut" : "Add Shortcut",
|
||||
title: isPinnedToMenu ? strings.removeShortcut() : strings.addShortcut(),
|
||||
icon: isPinnedToMenu ? "link-variant-remove" : "link-variant",
|
||||
func: createMenuShortcut,
|
||||
close: false,
|
||||
@@ -448,7 +449,7 @@ export const useActions = ({
|
||||
actions.push(
|
||||
{
|
||||
id: "add-notebook",
|
||||
title: "Add notebook",
|
||||
title: strings.addNotebook(),
|
||||
icon: "plus",
|
||||
func: async () => {
|
||||
AddNotebookSheet.present(undefined, item);
|
||||
@@ -456,7 +457,7 @@ export const useActions = ({
|
||||
},
|
||||
{
|
||||
id: "edit-notebook",
|
||||
title: "Edit notebook",
|
||||
title: strings.editNotebook(),
|
||||
icon: "square-edit-outline",
|
||||
func: async () => {
|
||||
AddNotebookSheet.present(item);
|
||||
@@ -465,7 +466,9 @@ export const useActions = ({
|
||||
{
|
||||
id: "default-notebook",
|
||||
title:
|
||||
defaultNotebook === item.id ? "Remove as default" : "Set as default",
|
||||
defaultNotebook === item.id
|
||||
? strings.removeAsDefault()
|
||||
: strings.setAsDefault(),
|
||||
hidden: item.type !== "notebook",
|
||||
icon: "notebook",
|
||||
func: async () => {
|
||||
@@ -485,7 +488,7 @@ export const useActions = ({
|
||||
},
|
||||
{
|
||||
id: "move-notes",
|
||||
title: "Move notes",
|
||||
title: strings.moveNotes(),
|
||||
hidden: item.type !== "notebook",
|
||||
icon: "text",
|
||||
func: () => {
|
||||
@@ -494,7 +497,7 @@ export const useActions = ({
|
||||
},
|
||||
{
|
||||
id: "move-notebook",
|
||||
title: "Move notebook",
|
||||
title: strings.moveNotebookFix(),
|
||||
icon: "arrow-right-bold-box-outline",
|
||||
func: () => {
|
||||
MoveNotebookSheet.present([item]);
|
||||
@@ -506,7 +509,7 @@ export const useActions = ({
|
||||
if (item.type === "notebook" || item.type === "note") {
|
||||
actions.push({
|
||||
id: "pin",
|
||||
title: item.pinned ? "Unpin" : "Pin",
|
||||
title: item.pinned ? strings.unpin() : strings.pin(),
|
||||
icon: item.pinned ? "pin-off-outline" : "pin-outline",
|
||||
func: pinItem,
|
||||
close: false,
|
||||
@@ -593,9 +596,8 @@ export const useActions = ({
|
||||
}
|
||||
if (locked) {
|
||||
ToastManager.show({
|
||||
heading: "Note is locked",
|
||||
heading: strings.lockedNotesPinnedFailed(),
|
||||
type: "error",
|
||||
message: "Locked notes cannot be pinned to notifications",
|
||||
context: "local"
|
||||
});
|
||||
return;
|
||||
@@ -619,8 +621,7 @@ export const useActions = ({
|
||||
if (!checkItemSynced()) return;
|
||||
if (!user) {
|
||||
ToastManager.show({
|
||||
heading: "Login required",
|
||||
message: "Login to publish note",
|
||||
heading: strings.loginRequired(),
|
||||
context: "local",
|
||||
func: () => {
|
||||
eSendEvent(eOpenLoginDialog);
|
||||
@@ -632,15 +633,14 @@ export const useActions = ({
|
||||
|
||||
if (!user?.isEmailConfirmed) {
|
||||
ToastManager.show({
|
||||
heading: "Email is not verified",
|
||||
message: "Please verify your email first.",
|
||||
heading: strings.confirmEmailToPublish(),
|
||||
context: "local"
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (locked) {
|
||||
ToastManager.show({
|
||||
heading: "Locked notes cannot be published",
|
||||
heading: strings.lockedNotesPublishFailed(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
@@ -654,8 +654,7 @@ export const useActions = ({
|
||||
|
||||
if (processingId.current === "shareNote") {
|
||||
ToastManager.show({
|
||||
heading: "Please wait...",
|
||||
message: "We are preparing your note for sharing",
|
||||
heading: strings.pleaseWait() + "...",
|
||||
context: "local"
|
||||
});
|
||||
return;
|
||||
@@ -669,15 +668,14 @@ export const useActions = ({
|
||||
novault: true,
|
||||
locked: true,
|
||||
share: true,
|
||||
title: "Share note",
|
||||
description: "Unlock note to share it."
|
||||
title: strings.shareNote()
|
||||
});
|
||||
} else {
|
||||
processingId.current = "shareNote";
|
||||
const convertedText = await convertNoteToText(item);
|
||||
processingId.current = undefined;
|
||||
Share.open({
|
||||
title: "Share note to",
|
||||
title: strings.shareNote(),
|
||||
failOnCancel: false,
|
||||
message: convertedText || ""
|
||||
});
|
||||
@@ -696,8 +694,7 @@ export const useActions = ({
|
||||
novault: true,
|
||||
locked: true,
|
||||
permanant: true,
|
||||
title: "Unlock note",
|
||||
description: "Remove note from the vault."
|
||||
title: strings.unlockNote()
|
||||
});
|
||||
return;
|
||||
}
|
||||
@@ -717,8 +714,7 @@ export const useActions = ({
|
||||
openVault({
|
||||
item: item,
|
||||
novault: false,
|
||||
title: "Create vault",
|
||||
description: "Set a password to create a vault and lock note."
|
||||
title: strings.createVault()
|
||||
});
|
||||
break;
|
||||
case VAULT_ERRORS.vaultLocked:
|
||||
@@ -726,8 +722,7 @@ export const useActions = ({
|
||||
item: item,
|
||||
novault: true,
|
||||
locked: true,
|
||||
title: "Lock note",
|
||||
description: "Give access to vault to lock this note."
|
||||
title: strings.lockNote()
|
||||
});
|
||||
break;
|
||||
}
|
||||
@@ -738,8 +733,7 @@ export const useActions = ({
|
||||
try {
|
||||
if (processingId.current === "copyContent") {
|
||||
ToastManager.show({
|
||||
heading: "Please wait...",
|
||||
message: "We are preparing your note for copy to clipboard",
|
||||
heading: strings.pleaseWait() + "...",
|
||||
context: "local"
|
||||
});
|
||||
return;
|
||||
@@ -753,8 +747,7 @@ export const useActions = ({
|
||||
novault: true,
|
||||
locked: true,
|
||||
item: item,
|
||||
title: "Copy note",
|
||||
description: "Unlock note to copy to clipboard."
|
||||
title: strings.copyNote()
|
||||
});
|
||||
} else {
|
||||
processingId.current = "copyContent";
|
||||
@@ -762,7 +755,7 @@ export const useActions = ({
|
||||
Clipboard.setString(text || "");
|
||||
processingId.current = undefined;
|
||||
ToastManager.show({
|
||||
heading: "Note copied to clipboard",
|
||||
heading: strings.noteCopied(),
|
||||
type: "success",
|
||||
context: "local"
|
||||
});
|
||||
@@ -787,31 +780,31 @@ export const useActions = ({
|
||||
},
|
||||
{
|
||||
id: "remove-from-notebook",
|
||||
title: "Remove from notebook",
|
||||
title: strings.removeFromNotebook(),
|
||||
hidden: noteInCurrentNotebook,
|
||||
icon: "minus-circle-outline",
|
||||
func: removeNoteFromNotebook
|
||||
},
|
||||
{
|
||||
id: "attachments",
|
||||
title: "Attachments",
|
||||
title: strings.attachments(),
|
||||
icon: "attachment",
|
||||
func: showAttachments
|
||||
},
|
||||
{
|
||||
id: "history",
|
||||
title: "History",
|
||||
title: strings.history(),
|
||||
icon: "history",
|
||||
func: openHistory
|
||||
},
|
||||
{
|
||||
id: "copy-link",
|
||||
title: "Copy link",
|
||||
title: strings.copyLink(),
|
||||
icon: "link",
|
||||
func: () => {
|
||||
Clipboard.setString(createInternalLink("note", item.id));
|
||||
ToastManager.show({
|
||||
heading: "Note link copied",
|
||||
heading: strings.linkCopied(),
|
||||
message: createInternalLink("note", item.id),
|
||||
context: "local",
|
||||
type: "success"
|
||||
@@ -820,17 +813,17 @@ export const useActions = ({
|
||||
},
|
||||
{
|
||||
id: "reminders",
|
||||
title: "Reminders",
|
||||
title: strings.dataTypesPluralCamelCase.reminder(),
|
||||
icon: "clock-outline",
|
||||
func: async () => {
|
||||
RelationsList.present({
|
||||
reference: item,
|
||||
referenceType: "reminder",
|
||||
relationType: "from",
|
||||
title: "Reminders",
|
||||
title: strings.dataTypesPluralCamelCase.reminder(),
|
||||
onAdd: () => ReminderSheet.present(undefined, item, true),
|
||||
button: {
|
||||
title: "Add",
|
||||
title: strings.add(),
|
||||
type: "accent",
|
||||
onPress: () => ReminderSheet.present(undefined, item, true),
|
||||
icon: "plus"
|
||||
@@ -842,40 +835,40 @@ export const useActions = ({
|
||||
|
||||
{
|
||||
id: "copy",
|
||||
title: "Copy",
|
||||
title: strings.copy(),
|
||||
icon: "content-copy",
|
||||
func: copyContent
|
||||
},
|
||||
{
|
||||
id: "share",
|
||||
title: "Share",
|
||||
title: strings.share(),
|
||||
icon: "share-variant",
|
||||
func: shareNote
|
||||
},
|
||||
{
|
||||
id: "read-only",
|
||||
title: "Readonly",
|
||||
title: strings.readOnly(),
|
||||
icon: "pencil-lock",
|
||||
func: toggleReadyOnlyMode,
|
||||
on: item.readonly
|
||||
},
|
||||
{
|
||||
id: "local-only",
|
||||
title: "Sync off",
|
||||
title: strings.syncOff(),
|
||||
icon: "sync-off",
|
||||
func: toggleLocalOnly,
|
||||
on: item.localOnly
|
||||
},
|
||||
{
|
||||
id: "duplicate",
|
||||
title: "Duplicate",
|
||||
title: strings.duplicate(),
|
||||
icon: "content-duplicate",
|
||||
func: duplicateNote
|
||||
},
|
||||
|
||||
{
|
||||
id: "add-reminder",
|
||||
title: "Remind me",
|
||||
title: strings.remindMe(),
|
||||
icon: "clock-plus-outline",
|
||||
func: () => {
|
||||
ReminderSheet.present(undefined, { id: item.id, type: "note" });
|
||||
@@ -884,14 +877,14 @@ export const useActions = ({
|
||||
},
|
||||
{
|
||||
id: "lock-unlock",
|
||||
title: locked ? "Unlock" : "Lock",
|
||||
title: locked ? strings.unlock() : strings.lock(),
|
||||
icon: locked ? "lock-open-outline" : "key-outline",
|
||||
func: addToVault,
|
||||
on: locked
|
||||
},
|
||||
{
|
||||
id: "publish",
|
||||
title: isPublished ? "Published" : "Publish",
|
||||
title: isPublished ? strings.published() : strings.publish(),
|
||||
icon: "cloud-upload-outline",
|
||||
on: isPublished,
|
||||
func: publishNote
|
||||
@@ -899,7 +892,7 @@ export const useActions = ({
|
||||
|
||||
{
|
||||
id: "export",
|
||||
title: "Export",
|
||||
title: strings.export(),
|
||||
icon: "export",
|
||||
func: exportNote
|
||||
},
|
||||
@@ -907,8 +900,8 @@ export const useActions = ({
|
||||
{
|
||||
id: "pin-to-notifications",
|
||||
title: notifPinned
|
||||
? "Unpin from notifications"
|
||||
: "Pin to notifications",
|
||||
? strings.unpinFromNotifications()
|
||||
: strings.pinToNotifications(),
|
||||
icon: "message-badge-outline",
|
||||
on: !!notifPinned,
|
||||
func: pinToNotifications
|
||||
@@ -916,19 +909,19 @@ export const useActions = ({
|
||||
|
||||
{
|
||||
id: "notebooks",
|
||||
title: "Link Notebooks",
|
||||
title: strings.linkNotebooks(),
|
||||
icon: "book-outline",
|
||||
func: addTo
|
||||
},
|
||||
{
|
||||
id: "add-tag",
|
||||
title: "Add tags",
|
||||
title: strings.addTags(),
|
||||
icon: "pound",
|
||||
func: addTo
|
||||
},
|
||||
{
|
||||
id: "references",
|
||||
title: "References",
|
||||
title: strings.references(),
|
||||
icon: "vector-link",
|
||||
func: () => {
|
||||
ReferencesList.present({
|
||||
|
||||
@@ -92,6 +92,7 @@ import { tabBarRef } from "../utils/global-refs";
|
||||
import { sleep } from "../utils/time";
|
||||
import { NotesnookModule } from "../utils/notesnook-module";
|
||||
import { changeSystemBarColors } from "../stores/use-theme-store";
|
||||
import { strings } from "@notesnook/intl";
|
||||
|
||||
const onCheckSyncStatus = async (type: SyncStatusEvent) => {
|
||||
const { disableSync, disableAutoSync } = SettingsService.get();
|
||||
@@ -266,7 +267,7 @@ const onSuccessfulSubscription = async (
|
||||
|
||||
const onSubscriptionError = async (error: RNIap.PurchaseError) => {
|
||||
ToastManager.show({
|
||||
heading: "Failed to subscribe",
|
||||
heading: strings.failedToSubscribe(),
|
||||
type: "error",
|
||||
message: error.message,
|
||||
context: "local"
|
||||
|
||||
@@ -23,6 +23,7 @@ import { useRef } from "react";
|
||||
import { Platform } from "react-native";
|
||||
import { Linking } from "react-native";
|
||||
import deviceInfoModule from "react-native-device-info";
|
||||
import { strings } from "@notesnook/intl";
|
||||
const ShortcutsEmitter = new NativeEventEmitter(
|
||||
Shortcuts as unknown as NativeModule
|
||||
);
|
||||
@@ -33,8 +34,8 @@ function isSupported() {
|
||||
const defaultShortcuts: ShortcutItem[] = [
|
||||
{
|
||||
type: "notesnook.action.newnote",
|
||||
title: "Create a new note",
|
||||
shortTitle: "New note",
|
||||
title: strings.createNewNote(),
|
||||
shortTitle: strings.newNote(),
|
||||
iconName: Platform.OS === "android" ? "ic_newnote" : "plus"
|
||||
}
|
||||
];
|
||||
|
||||
@@ -44,6 +44,7 @@ import useNavigationStore from "../stores/use-navigation-store";
|
||||
import { useSelectionStore } from "../stores/use-selection-store";
|
||||
import { useSettingStore } from "../stores/use-setting-store";
|
||||
import { rootNavigatorRef } from "../utils/global-refs";
|
||||
import { strings } from "@notesnook/intl";
|
||||
|
||||
const NativeStack = createNativeStackNavigator();
|
||||
const IntroStack = createNativeStackNavigator();
|
||||
@@ -114,7 +115,7 @@ const _Tabs = () => {
|
||||
initialParams={{
|
||||
item: { type: "monograph" },
|
||||
canGoBack: false,
|
||||
title: "Monographs"
|
||||
title: strings.monographs()
|
||||
}}
|
||||
component={Monographs}
|
||||
/>
|
||||
|
||||
@@ -59,6 +59,7 @@ import {
|
||||
randId
|
||||
} from "./tiptap/utils";
|
||||
import { tabBarRef } from "../../utils/global-refs";
|
||||
import { strings } from "@notesnook/intl";
|
||||
|
||||
const style: ViewStyle = {
|
||||
height: "100%",
|
||||
@@ -257,8 +258,7 @@ const useLockedNoteHandler = () => {
|
||||
if (!tabRef.current?.noteId || !tabRef.current) return;
|
||||
if (!password || password.trim().length === 0) {
|
||||
ToastManager.show({
|
||||
heading: "Password not entered",
|
||||
message: "Enter a password for the vault and try again.",
|
||||
heading: strings.passwordNotEntered(),
|
||||
type: "error"
|
||||
});
|
||||
return;
|
||||
@@ -273,8 +273,7 @@ const useLockedNoteHandler = () => {
|
||||
await BiometricService.storeCredentials(password);
|
||||
eSendEvent("vaultUpdated");
|
||||
ToastManager.show({
|
||||
heading: "Biometric unlocking enabled!",
|
||||
message: "Now you can unlock notes in vault with biometrics.",
|
||||
heading: strings.biometricUnlockEnabled(),
|
||||
type: "success",
|
||||
context: "global"
|
||||
});
|
||||
@@ -288,9 +287,7 @@ const useLockedNoteHandler = () => {
|
||||
syncTabs();
|
||||
} catch (e) {
|
||||
ToastManager.show({
|
||||
heading: "Incorrect password",
|
||||
message:
|
||||
"Please enter the correct vault password to enable biometrics.",
|
||||
heading: strings.passwordIncorrect(),
|
||||
type: "error"
|
||||
});
|
||||
}
|
||||
@@ -304,7 +301,7 @@ const useLockedNoteHandler = () => {
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
ToastManager.show({
|
||||
heading: "Incorrect password",
|
||||
heading: strings.passwordIncorrect(),
|
||||
type: "error"
|
||||
});
|
||||
}
|
||||
|
||||
@@ -42,11 +42,12 @@ import { FILE_SIZE_LIMIT, IMAGE_SIZE_LIMIT } from "../../../utils/constants";
|
||||
import { eCloseSheet } from "../../../utils/events";
|
||||
import { useTabStore } from "./use-tab-store";
|
||||
import { editorController, editorState } from "./utils";
|
||||
import { strings } from "@notesnook/intl";
|
||||
|
||||
const showEncryptionSheet = (file: DocumentPickerResponse) => {
|
||||
presentSheet({
|
||||
title: "Encrypting attachment",
|
||||
paragraph: `Please wait while we encrypt ${file.name} file for upload`,
|
||||
title: strings.encryptingAttachment(),
|
||||
paragraph: strings.encryptingAttachmentDesc(file.name),
|
||||
icon: "attachment"
|
||||
});
|
||||
};
|
||||
@@ -92,8 +93,8 @@ const file = async (fileOptions: PickerOptions) => {
|
||||
|
||||
if ((file.size || 0) > FILE_SIZE_LIMIT) {
|
||||
ToastManager.show({
|
||||
heading: "File too large",
|
||||
message: "The maximum allowed size per file is 500 MB",
|
||||
heading: strings.fileTooLarge(),
|
||||
message: strings.fileTooLargeDesc(500),
|
||||
type: "error"
|
||||
});
|
||||
return;
|
||||
@@ -101,7 +102,7 @@ const file = async (fileOptions: PickerOptions) => {
|
||||
|
||||
if (file.copyError) {
|
||||
ToastManager.show({
|
||||
heading: "Failed to open file",
|
||||
heading: strings.failToOpen(),
|
||||
message: file.copyError,
|
||||
type: "error",
|
||||
context: "global"
|
||||
@@ -166,8 +167,7 @@ const file = async (fileOptions: PickerOptions) => {
|
||||
} catch (e) {
|
||||
eSendEvent(eCloseSheet);
|
||||
ToastManager.show({
|
||||
heading: "Failed to attach file",
|
||||
message: (e as Error).message,
|
||||
heading: (e as Error).message,
|
||||
type: "error",
|
||||
context: "global"
|
||||
});
|
||||
@@ -231,7 +231,6 @@ const gallery = async (options: PickerOptions) => {
|
||||
useSettingStore.getState().setAppDidEnterBackgroundForAction(false);
|
||||
ToastManager.show({
|
||||
heading: (e as Error).message,
|
||||
message: "You need internet access to attach a file",
|
||||
type: "error",
|
||||
context: "global"
|
||||
});
|
||||
@@ -289,8 +288,8 @@ const handleImageResponse = async (
|
||||
|
||||
if (image.size > IMAGE_SIZE_LIMIT) {
|
||||
ToastManager.show({
|
||||
heading: "File too large",
|
||||
message: "The maximum allowed size per image is 50 MB",
|
||||
heading: strings.fileTooLarge(),
|
||||
message: strings.fileTooLargeDesc(50),
|
||||
type: "error"
|
||||
});
|
||||
return;
|
||||
@@ -361,8 +360,7 @@ export async function attachFile(
|
||||
let encryptionInfo: any;
|
||||
if (options?.hash && options.hash !== hash) {
|
||||
ToastManager.show({
|
||||
heading: "Please select the same file for reuploading",
|
||||
message: `Expected hash ${options.hash} but got ${hash}.`,
|
||||
heading: strings.fileMismatch(),
|
||||
type: "error",
|
||||
context: "local"
|
||||
});
|
||||
|
||||
@@ -76,13 +76,13 @@ import { EventTypes } from "./editor-events";
|
||||
import { EditorMessage, EditorProps, useEditorType } from "./types";
|
||||
import { useTabStore } from "./use-tab-store";
|
||||
import { EditorEvents, editorState, openInternalLink } from "./utils";
|
||||
import { strings } from "@notesnook/intl";
|
||||
|
||||
const publishNote = async () => {
|
||||
const user = useUserStore.getState().user;
|
||||
if (!user) {
|
||||
ToastManager.show({
|
||||
heading: "Login required",
|
||||
message: "Login to publish",
|
||||
heading: strings.loginRequired(),
|
||||
context: "global",
|
||||
func: () => {
|
||||
eSendEvent(eOpenLoginDialog);
|
||||
@@ -94,8 +94,7 @@ const publishNote = async () => {
|
||||
|
||||
if (!user?.isEmailConfirmed) {
|
||||
ToastManager.show({
|
||||
heading: "Email not verified",
|
||||
message: "Please verify your email first.",
|
||||
heading: strings.emailNotConfirmed(),
|
||||
context: "global"
|
||||
});
|
||||
return;
|
||||
@@ -109,7 +108,7 @@ const publishNote = async () => {
|
||||
const locked = note && (await db.vaults.itemExists(note));
|
||||
if (locked) {
|
||||
ToastManager.show({
|
||||
heading: "Locked notes cannot be published",
|
||||
heading: strings.lockedNotesPublishFailed(),
|
||||
type: "error",
|
||||
context: "global"
|
||||
});
|
||||
@@ -135,7 +134,7 @@ const showActionsheet = async () => {
|
||||
Properties.present(note, ["Dark Mode"]);
|
||||
} else {
|
||||
ToastManager.show({
|
||||
heading: "Start writing to create a new note",
|
||||
heading: strings.noNoteProperties(),
|
||||
type: "success",
|
||||
context: "global"
|
||||
});
|
||||
@@ -428,7 +427,7 @@ export const useEditorEvents = (
|
||||
case EventTypes.reminders:
|
||||
if (!noteId) {
|
||||
ToastManager.show({
|
||||
heading: "Create a note first to add a reminder",
|
||||
heading: strings.createNoteFirst(),
|
||||
type: "success"
|
||||
});
|
||||
return;
|
||||
@@ -439,14 +438,14 @@ export const useEditorEvents = (
|
||||
reference: note as any,
|
||||
referenceType: "reminder",
|
||||
relationType: "from",
|
||||
title: "Reminders",
|
||||
title: strings.dataTypesPluralCamelCase.reminder(),
|
||||
onAdd: () => ReminderSheet.present(undefined, note, true)
|
||||
});
|
||||
break;
|
||||
case EventTypes.newtag:
|
||||
if (!noteId) {
|
||||
ToastManager.show({
|
||||
heading: "Create a note first to add a tag",
|
||||
heading: strings.createNoteFirst(),
|
||||
type: "success"
|
||||
});
|
||||
return;
|
||||
|
||||
@@ -74,6 +74,7 @@ import {
|
||||
post
|
||||
} from "./utils";
|
||||
import { sleep } from "../../../utils/time";
|
||||
import { strings } from "@notesnook/intl";
|
||||
|
||||
type NoteWithContent = Note & {
|
||||
content?: NoteContent<false>;
|
||||
@@ -342,14 +343,11 @@ export const useEditor = (
|
||||
if (!db.vault.unlocked) {
|
||||
if (pendingChanges) await sleep(3000);
|
||||
const unlocked = await unlockVault({
|
||||
title: "Unlock vault to save note",
|
||||
paragraph: `This note is locked, unlock to save ${
|
||||
pendingChanges ? "some pending" : ""
|
||||
} changes`,
|
||||
title: strings.unlockNote(),
|
||||
paragraph: strings.noteLockedSave(),
|
||||
context: "global"
|
||||
});
|
||||
if (!unlocked)
|
||||
throw new Error("Could not save note, vault is locked");
|
||||
if (!unlocked) throw new Error(strings.saveFailedVaultLocked());
|
||||
}
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
if (typeof noteData.title === "string") {
|
||||
|
||||
8
apps/mobile/package-lock.json
generated
8
apps/mobile/package-lock.json
generated
@@ -33288,10 +33288,14 @@
|
||||
"version": "0.3.25",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.1.0",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||
"@jridgewell/resolve-uri": "3.1.0",
|
||||
"@jridgewell/sourcemap-codec": "1.4.14"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.4.14",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@lingui/core": {
|
||||
"version": "4.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@lingui/core/-/core-4.11.2.tgz",
|
||||
|
||||
5
apps/theme-builder/package-lock.json
generated
5
apps/theme-builder/package-lock.json
generated
@@ -992,7 +992,8 @@
|
||||
"@dnd-kit/sortable": "^8.0.0",
|
||||
"@emotion/react": "11.11.1",
|
||||
"@hazae41/foras": "^2.1.4",
|
||||
"@henrygd/queue": "^1.0.6",
|
||||
"@lingui/core": "4.11.2",
|
||||
"@lingui/react": "4.11.2",
|
||||
"@mdi/js": "^7.2.96",
|
||||
"@mdi/react": "^1.6.1",
|
||||
"@notesnook-importer/core": "^2.1.1",
|
||||
@@ -1001,6 +1002,7 @@
|
||||
"@notesnook/crypto": "file:../../packages/crypto",
|
||||
"@notesnook/desktop": "file:../desktop",
|
||||
"@notesnook/editor": "file:../../packages/editor",
|
||||
"@notesnook/intl": "file:../../packages/intl",
|
||||
"@notesnook/logger": "file:../../packages/logger",
|
||||
"@notesnook/streamable-fs": "file:../../packages/streamable-fs",
|
||||
"@notesnook/theme": "file:../../packages/theme",
|
||||
@@ -1058,6 +1060,7 @@
|
||||
"react-virtuoso": "^4.6.2",
|
||||
"timeago.js": "4.0.2",
|
||||
"tinycolor2": "^1.6.0",
|
||||
"vite-plugin-commonjs": "^0.10.1",
|
||||
"w3c-keyname": "^2.2.6",
|
||||
"web-streams-polyfill": "^3.1.1",
|
||||
"wouter": "2.12.1",
|
||||
|
||||
1125
apps/web/package-lock.json
generated
1125
apps/web/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/strings.tsx:688
|
||||
msgid "— not just the"
|
||||
msgstr "— not just the"
|
||||
|
||||
#: src/strings.tsx:461
|
||||
msgid "\"I understand, change my password\""
|
||||
msgstr "\"I understand, change my password\""
|
||||
@@ -37,10 +41,18 @@ msgstr "{0}... Please wait"
|
||||
msgid "{count, plural, one {# note} other {# notes} _0 {No notes}}"
|
||||
msgstr "{count, plural, one {# note} other {# notes} _0 {No notes}}"
|
||||
|
||||
#: src/strings.tsx:721
|
||||
msgid "{count, plural, one {Are you sure you want to delete this {0} permanently?} other {Are you sure you want to delete these {1} permanently?}}"
|
||||
msgstr "{count, plural, one {Are you sure you want to delete this {0} permanently?} other {Are you sure you want to delete these {1} permanently?}}"
|
||||
|
||||
#: src/strings.tsx:55
|
||||
msgid "{count, plural, one {Are you sure you want to download all attachments of this note?} other {Are you sure you want to download all attachments?}}"
|
||||
msgstr "{count, plural, one {Are you sure you want to download all attachments of this note?} other {Are you sure you want to download all attachments?}}"
|
||||
|
||||
#: src/strings.tsx:742
|
||||
msgid "{count, plural, one {Are you sure you want to move this notebook to {selectedNotebookTitle}?} other {Are you sure you want to move these # notebooks {selectedNotebookTitle}?}}"
|
||||
msgstr "{count, plural, one {Are you sure you want to move this notebook to {selectedNotebookTitle}?} other {Are you sure you want to move these # notebooks {selectedNotebookTitle}?}}"
|
||||
|
||||
#: src/strings.tsx:105
|
||||
msgid "{count, plural, one {Attach image} other {Attach # images}}"
|
||||
msgstr "{count, plural, one {Attach image} other {Attach # images}}"
|
||||
@@ -49,6 +61,10 @@ msgstr "{count, plural, one {Attach image} other {Attach # images}}"
|
||||
msgid "{count, plural, one {Attachment downloaded at {path}} other {#/{total} attachments downloaded as a zip file at {path}}}"
|
||||
msgstr "{count, plural, one {Attachment downloaded at {path}} other {#/{total} attachments downloaded as a zip file at {path}}}"
|
||||
|
||||
#: src/strings.tsx:712
|
||||
msgid "{count, plural, one {Delete {0}} other {Delete {1}}}"
|
||||
msgstr "{count, plural, one {Delete {0}} other {Delete {1}}}"
|
||||
|
||||
#: src/strings.tsx:49
|
||||
#~ msgid "{count, plural, one {Failed to download attachment {count}} other {Failed to download # attachments {count}}}"
|
||||
#~ msgstr "{count, plural, one {Failed to download attachment {count}} other {Failed to download # attachments {count}}}"
|
||||
@@ -61,6 +77,10 @@ msgstr "{count, plural, one {Attachment downloaded at {path}} other {#/{total} a
|
||||
msgid "{count, plural, one {Failed to download attachment} other {Failed to download # attachments}}"
|
||||
msgstr "{count, plural, one {Failed to download attachment} other {Failed to download # attachments}}"
|
||||
|
||||
#: src/strings.tsx:740
|
||||
msgid "{count, plural, one {Move notebook} other {Move # notebooks}}"
|
||||
msgstr "{count, plural, one {Move notebook} other {Move # notebooks}}"
|
||||
|
||||
#: src/strings.tsx:403
|
||||
msgid "{count, plural, one {Moving {title}} other {Moving # notebooks}}"
|
||||
msgstr "{count, plural, one {Moving {title}} other {Moving # notebooks}}"
|
||||
@@ -210,6 +230,10 @@ msgstr "Applied as light theme"
|
||||
msgid "Apply changes"
|
||||
msgstr "Apply changes"
|
||||
|
||||
#: src/strings.tsx:708
|
||||
msgid "Are you sure you want to delete this note permanently?"
|
||||
msgstr "Are you sure you want to delete this note permanently?"
|
||||
|
||||
#: src/strings.tsx:64
|
||||
#~ msgid "Are you sure you want to download all attachments"
|
||||
#~ msgstr "Are you sure you want to download all attachments"
|
||||
@@ -246,6 +270,14 @@ msgstr "Audio"
|
||||
msgid "Backup failed"
|
||||
msgstr "Backup failed"
|
||||
|
||||
#: src/strings.tsx:760
|
||||
msgid "Backup is encrypted"
|
||||
msgstr "Backup is encrypted"
|
||||
|
||||
#: src/strings.tsx:766
|
||||
msgid "Backup restored"
|
||||
msgstr "Backup restored"
|
||||
|
||||
#: src/strings.tsx:414
|
||||
msgid "Backups"
|
||||
msgstr "Backups"
|
||||
@@ -262,6 +294,14 @@ msgstr "Basic"
|
||||
msgid "BETA"
|
||||
msgstr "BETA"
|
||||
|
||||
#: src/strings.tsx:672
|
||||
msgid "Biometric unlocking disabled"
|
||||
msgstr "Biometric unlocking disabled"
|
||||
|
||||
#: src/strings.tsx:671
|
||||
msgid "Biometric unlocking enabled"
|
||||
msgstr "Biometric unlocking enabled"
|
||||
|
||||
#: src/strings.tsx:341
|
||||
msgid "By"
|
||||
msgstr "By"
|
||||
@@ -444,6 +484,10 @@ msgstr "Delete permanently"
|
||||
msgid "Deleted on {date}"
|
||||
msgstr "Deleted on {date}"
|
||||
|
||||
#: src/strings.tsx:749
|
||||
msgid "Did you save recovery key?"
|
||||
msgstr "Did you save recovery key?"
|
||||
|
||||
#: src/strings.tsx:135
|
||||
msgid "Disabled"
|
||||
msgstr "Disabled"
|
||||
@@ -472,6 +516,10 @@ msgstr "Done"
|
||||
msgid "Download"
|
||||
msgstr "Download"
|
||||
|
||||
#: src/strings.tsx:666
|
||||
msgid "Download started... Please wait"
|
||||
msgstr "Download started... Please wait"
|
||||
|
||||
#: src/strings.tsx:434
|
||||
msgid "Download successful"
|
||||
msgstr "Download successful"
|
||||
@@ -517,6 +565,10 @@ msgstr "Email is required"
|
||||
msgid "Email not confirmed"
|
||||
msgstr "Email not confirmed"
|
||||
|
||||
#: src/strings.tsx:736
|
||||
msgid "Email updated to {email}"
|
||||
msgstr "Email updated to {email}"
|
||||
|
||||
#: src/strings.tsx:121
|
||||
msgid "Enable"
|
||||
msgstr "Enable"
|
||||
@@ -529,6 +581,10 @@ msgstr "Enable two-factor authentication to add an extra layer of security to yo
|
||||
msgid "Encrypted and synced"
|
||||
msgstr "Encrypted and synced"
|
||||
|
||||
#: src/strings.tsx:680
|
||||
msgid "End to end encrypted."
|
||||
msgstr "End to end encrypted."
|
||||
|
||||
#: src/strings.tsx:335
|
||||
msgid "Enter 6 digit code"
|
||||
msgstr "Enter 6 digit code"
|
||||
@@ -537,6 +593,10 @@ msgstr "Enter 6 digit code"
|
||||
msgid "Enter code from authenticator app"
|
||||
msgstr "Enter code from authenticator app"
|
||||
|
||||
#: src/strings.tsx:735
|
||||
msgid "Enter notebook title"
|
||||
msgstr "Enter notebook title"
|
||||
|
||||
#: src/strings.tsx:665
|
||||
msgid "Enter password"
|
||||
msgstr "Enter password"
|
||||
@@ -657,6 +717,10 @@ msgstr "Hash copied"
|
||||
msgid "Help improve Notesnook by sending completely anonymized"
|
||||
msgstr "Help improve Notesnook by sending completely anonymized"
|
||||
|
||||
#: src/strings.tsx:758
|
||||
msgid "hr"
|
||||
msgstr "hr"
|
||||
|
||||
#: src/strings.tsx:95
|
||||
msgid "I don't have access to authenticator app"
|
||||
msgstr "I don't have access to authenticator app"
|
||||
@@ -757,6 +821,10 @@ msgstr "Light"
|
||||
msgid "LINK TO A SECTION"
|
||||
msgstr "LINK TO A SECTION"
|
||||
|
||||
#: src/strings.tsx:730
|
||||
msgid "Link to notebook"
|
||||
msgstr "Link to notebook"
|
||||
|
||||
#: src/strings.tsx:501
|
||||
msgid "Linked notes"
|
||||
msgstr "Linked notes"
|
||||
@@ -817,6 +885,10 @@ msgstr "Logout from this device"
|
||||
msgid "Manage subscription on desktop"
|
||||
msgstr "Manage subscription on desktop"
|
||||
|
||||
#: src/strings.tsx:729
|
||||
msgid "Manage tags"
|
||||
msgstr "Manage tags"
|
||||
|
||||
#: src/strings.tsx:213
|
||||
msgid "Migrating {0} {1}... please wait"
|
||||
msgstr "Migrating {0} {1}... please wait"
|
||||
@@ -825,6 +897,10 @@ msgstr "Migrating {0} {1}... please wait"
|
||||
#~ msgid "Migrating database{0} {1}... please wait"
|
||||
#~ msgstr "Migrating database{0} {1}... please wait"
|
||||
|
||||
#: src/strings.tsx:757
|
||||
msgid "min"
|
||||
msgstr "min"
|
||||
|
||||
#: src/strings.tsx:578
|
||||
msgid "mo"
|
||||
msgstr "mo"
|
||||
@@ -837,6 +913,10 @@ msgstr "Mon"
|
||||
msgid "Monday"
|
||||
msgstr "Monday"
|
||||
|
||||
#: src/strings.tsx:748
|
||||
msgid "Monograph URL copied"
|
||||
msgstr "Monograph URL copied"
|
||||
|
||||
#: src/strings.tsx:305
|
||||
msgid "month"
|
||||
msgstr "month"
|
||||
@@ -850,6 +930,10 @@ msgstr "Month"
|
||||
msgid "Monthly"
|
||||
msgstr "Monthly"
|
||||
|
||||
#: src/strings.tsx:731
|
||||
msgid "Move"
|
||||
msgstr "Move"
|
||||
|
||||
#: src/strings.tsx:491
|
||||
msgid "Move selected notes"
|
||||
msgstr "Move selected notes"
|
||||
@@ -858,6 +942,14 @@ msgstr "Move selected notes"
|
||||
msgid "Move to top"
|
||||
msgstr "Move to top"
|
||||
|
||||
#: src/strings.tsx:734
|
||||
msgid "Move to trash"
|
||||
msgstr "Move to trash"
|
||||
|
||||
#: src/strings.tsx:764
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: src/strings.tsx:327
|
||||
msgid "Never"
|
||||
msgstr "Never"
|
||||
@@ -898,6 +990,10 @@ msgstr "Next"
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
#: src/strings.tsx:738
|
||||
msgid "No application found to open {fileToOpen}"
|
||||
msgstr "No application found to open {fileToOpen}"
|
||||
|
||||
#: src/strings.tsx:60
|
||||
msgid "No attachments."
|
||||
msgstr "No attachments."
|
||||
@@ -963,10 +1059,34 @@ msgstr "note"
|
||||
msgid "Note"
|
||||
msgstr "Note"
|
||||
|
||||
#: src/strings.tsx:675
|
||||
msgid "Note copied to clipboard"
|
||||
msgstr "Note copied to clipboard"
|
||||
|
||||
#: src/strings.tsx:709
|
||||
msgid "Note deleted"
|
||||
msgstr "Note deleted"
|
||||
|
||||
#: src/strings.tsx:386
|
||||
msgid "Note history"
|
||||
msgstr "Note history"
|
||||
|
||||
#: src/strings.tsx:670
|
||||
msgid "Note locked"
|
||||
msgstr "Note locked"
|
||||
|
||||
#: src/strings.tsx:706
|
||||
msgid "Note restored"
|
||||
msgstr "Note restored"
|
||||
|
||||
#: src/strings.tsx:705
|
||||
msgid "Note restored from history"
|
||||
msgstr "Note restored from history"
|
||||
|
||||
#: src/strings.tsx:674
|
||||
msgid "Note unlocked"
|
||||
msgstr "Note unlocked"
|
||||
|
||||
#: src/strings.tsx:148
|
||||
msgid "Note version history is local only."
|
||||
msgstr "Note version history is local only."
|
||||
@@ -979,6 +1099,10 @@ msgstr "notebook"
|
||||
msgid "Notebook"
|
||||
msgstr "Notebook"
|
||||
|
||||
#: src/strings.tsx:702
|
||||
msgid "Notebook restored"
|
||||
msgstr "Notebook restored"
|
||||
|
||||
#: src/strings.tsx:264
|
||||
msgid "notebooks"
|
||||
msgstr "notebooks"
|
||||
@@ -1035,6 +1159,14 @@ msgstr "Open in browser"
|
||||
msgid "Open issue"
|
||||
msgstr "Open issue"
|
||||
|
||||
#: src/strings.tsx:679
|
||||
msgid "Open source."
|
||||
msgstr "Open source."
|
||||
|
||||
#: src/strings.tsx:761
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: src/strings.tsx:645
|
||||
msgid "Password change failed"
|
||||
msgstr "Password change failed"
|
||||
@@ -1043,6 +1175,10 @@ msgstr "Password change failed"
|
||||
msgid "Password changed successfully"
|
||||
msgstr "Password changed successfully"
|
||||
|
||||
#: src/strings.tsx:668
|
||||
msgid "Password does not match"
|
||||
msgstr "Password does not match"
|
||||
|
||||
#: src/strings.tsx:657
|
||||
msgid "Password incorrect"
|
||||
msgstr "Password incorrect"
|
||||
@@ -1051,10 +1187,18 @@ msgstr "Password incorrect"
|
||||
#~ msgid "Password is too short"
|
||||
#~ msgstr "Password is too short"
|
||||
|
||||
#: src/strings.tsx:667
|
||||
msgid "Password not entered"
|
||||
msgstr "Password not entered"
|
||||
|
||||
#: src/strings.tsx:227
|
||||
msgid "Password protection"
|
||||
msgstr "Password protection"
|
||||
|
||||
#: src/strings.tsx:669
|
||||
msgid "Password updated"
|
||||
msgstr "Password updated"
|
||||
|
||||
#: src/strings.tsx:662
|
||||
msgid "PDF is password protected"
|
||||
msgstr "PDF is password protected"
|
||||
@@ -1063,6 +1207,10 @@ msgstr "PDF is password protected"
|
||||
msgid "Permanent"
|
||||
msgstr "Permanent"
|
||||
|
||||
#: src/strings.tsx:704
|
||||
msgid "Permanently deleted notebook"
|
||||
msgstr "Permanently deleted notebook"
|
||||
|
||||
#: src/strings.tsx:438
|
||||
msgid "Pinned"
|
||||
msgstr "Pinned"
|
||||
@@ -1075,6 +1223,10 @@ msgstr "Please enter the password to unlock the PDF and view the content."
|
||||
msgid "Please fill all the fields to continue."
|
||||
msgstr "Please fill all the fields to continue."
|
||||
|
||||
#: src/strings.tsx:751
|
||||
msgid "Please make sure you have saved the recovery key. Tap one more time to confirm."
|
||||
msgstr "Please make sure you have saved the recovery key. Tap one more time to confirm."
|
||||
|
||||
#: src/strings.tsx:275
|
||||
#~ msgid ""
|
||||
#~ "Please note that we will respond to your issue on the given\n"
|
||||
@@ -1115,6 +1267,10 @@ msgstr "PRESETS"
|
||||
msgid "Preview not available, content is encrypted."
|
||||
msgstr "Preview not available, content is encrypted."
|
||||
|
||||
#: src/strings.tsx:687
|
||||
msgid "Privacy for everyone"
|
||||
msgstr "Privacy for everyone"
|
||||
|
||||
#: src/strings.tsx:74
|
||||
msgid "Privacy Policy."
|
||||
msgstr "Privacy Policy."
|
||||
@@ -1123,6 +1279,14 @@ msgstr "Privacy Policy."
|
||||
msgid "private analytics and bug reports."
|
||||
msgstr "private analytics and bug reports."
|
||||
|
||||
#: src/strings.tsx:681
|
||||
msgid "Private."
|
||||
msgstr "Private."
|
||||
|
||||
#: src/strings.tsx:689
|
||||
msgid "privileged few"
|
||||
msgstr "privileged few"
|
||||
|
||||
#: src/strings.tsx:337
|
||||
msgid "Protect your notes"
|
||||
msgstr "Protect your notes"
|
||||
@@ -1175,6 +1339,18 @@ msgstr "Recovery email has been sent to your email address. Please check your in
|
||||
msgid "Recovery email sent!"
|
||||
msgstr "Recovery email sent!"
|
||||
|
||||
#: src/strings.tsx:754
|
||||
msgid "Recovery key copied"
|
||||
msgstr "Recovery key copied"
|
||||
|
||||
#: src/strings.tsx:752
|
||||
msgid "Recovery key QR code saved"
|
||||
msgstr "Recovery key QR code saved"
|
||||
|
||||
#: src/strings.tsx:753
|
||||
msgid "Recovery key text file saved"
|
||||
msgstr "Recovery key text file saved"
|
||||
|
||||
#: src/strings.tsx:309
|
||||
msgid "REFERENCED IN"
|
||||
msgstr "REFERENCED IN"
|
||||
@@ -1215,10 +1391,18 @@ msgstr "Remove shortcut"
|
||||
msgid "Rename"
|
||||
msgstr "Rename"
|
||||
|
||||
#: src/strings.tsx:763
|
||||
msgid "Rename color"
|
||||
msgstr "Rename color"
|
||||
|
||||
#: src/strings.tsx:629
|
||||
msgid "Rename file"
|
||||
msgstr "Rename file"
|
||||
|
||||
#: src/strings.tsx:762
|
||||
msgid "Rename tag"
|
||||
msgstr "Rename tag"
|
||||
|
||||
#: src/strings.tsx:503
|
||||
msgid "Repeat"
|
||||
msgstr "Repeat"
|
||||
@@ -1243,6 +1427,18 @@ msgstr "Resend code in ({seconds})"
|
||||
msgid "Restore"
|
||||
msgstr "Restore"
|
||||
|
||||
#: src/strings.tsx:767
|
||||
msgid "Restore failed"
|
||||
msgstr "Restore failed"
|
||||
|
||||
#: src/strings.tsx:703
|
||||
msgid "Restore notebook"
|
||||
msgstr "Restore notebook"
|
||||
|
||||
#: src/strings.tsx:710
|
||||
msgid "Restored successfully"
|
||||
msgstr "Restored successfully"
|
||||
|
||||
#: src/strings.tsx:313
|
||||
msgid "Restoring"
|
||||
msgstr "Restoring"
|
||||
@@ -1419,6 +1615,10 @@ msgstr "Share note"
|
||||
msgid "Share to cloud"
|
||||
msgstr "Share to cloud"
|
||||
|
||||
#: src/strings.tsx:701
|
||||
msgid "Shortcut created"
|
||||
msgstr "Shortcut created"
|
||||
|
||||
#: src/strings.tsx:66
|
||||
msgid "Sign up"
|
||||
msgstr "Sign up"
|
||||
@@ -1612,6 +1812,14 @@ msgstr "Two-factor authentication enabled"
|
||||
msgid "Undo"
|
||||
msgstr "Undo"
|
||||
|
||||
#: src/strings.tsx:733
|
||||
msgid "Unfavorite"
|
||||
msgstr "Unfavorite"
|
||||
|
||||
#: src/strings.tsx:732
|
||||
msgid "Unlink notebook"
|
||||
msgstr "Unlink notebook"
|
||||
|
||||
#: src/strings.tsx:127
|
||||
msgid "Unlock"
|
||||
msgstr "Unlock"
|
||||
@@ -1621,6 +1829,10 @@ msgstr "Unlock"
|
||||
msgid "Unlock note"
|
||||
msgstr "Unlock note"
|
||||
|
||||
#: src/strings.tsx:765
|
||||
msgid "Unlock note to delete it"
|
||||
msgstr "Unlock note to delete it"
|
||||
|
||||
#: src/strings.tsx:454
|
||||
msgid "Unlock with biometrics"
|
||||
msgstr "Unlock with biometrics"
|
||||
@@ -1700,6 +1912,10 @@ msgstr ""
|
||||
"$count$: Number of notes + 1.\n"
|
||||
"$headline$: Use starting line of the note as title."
|
||||
|
||||
#: src/strings.tsx:673
|
||||
msgid "Vault created"
|
||||
msgstr "Vault created"
|
||||
|
||||
#: src/strings.tsx:377
|
||||
msgid "Vault Fingerprint Unlock"
|
||||
msgstr "Vault Fingerprint Unlock"
|
||||
@@ -1757,6 +1973,10 @@ msgstr "Weekly"
|
||||
msgid "Welcome back, {email}"
|
||||
msgstr "Welcome back, {email}"
|
||||
|
||||
#: src/strings.tsx:683
|
||||
msgid "Write notes with freedom, no spying, no tracking."
|
||||
msgstr "Write notes with freedom, no spying, no tracking."
|
||||
|
||||
#: src/strings.tsx:306
|
||||
msgid "year"
|
||||
msgstr "year"
|
||||
@@ -1782,6 +2002,10 @@ msgstr "You also agree to recieve marketing emails from us which you can opt-out
|
||||
msgid "You can track your issue at"
|
||||
msgstr "You can track your issue at"
|
||||
|
||||
#: src/strings.tsx:696
|
||||
msgid "You simply cannot get any better of a note taking app than @notesnook. The UI is clean and slick, it is feature rich, encrypted, reasonably priced (esp. for students & educators) & open source"
|
||||
msgstr "You simply cannot get any better of a note taking app than @notesnook. The UI is clean and slick, it is feature rich, encrypted, reasonably priced (esp. for students & educators) & open source"
|
||||
|
||||
#: src/strings.tsx:592
|
||||
msgid "You subscribed to Notesnook Pro on Android Phone/Tablet using Google In App Purchase."
|
||||
msgstr "You subscribed to Notesnook Pro on Android Phone/Tablet using Google In App Purchase."
|
||||
@@ -1806,6 +2030,10 @@ msgstr "Your account is now 100% secure against unauthorized logins."
|
||||
msgid "Your email is not confirmed. Please confirm your email address to change account password."
|
||||
msgstr "Your email is not confirmed. Please confirm your email address to change account password."
|
||||
|
||||
#: src/strings.tsx:692
|
||||
msgid "Your privacy matters to us, no matter who you are. In a world where everyone is trying to spy on you, Notesnook encrypts all your data before it leaves your device. With Notesnook no one can ever sell your data again."
|
||||
msgstr "Your privacy matters to us, no matter who you are. In a world where everyone is trying to spy on you, Notesnook encrypts all your data before it leaves your device. With Notesnook no one can ever sell your data again."
|
||||
|
||||
#: src/strings.tsx:69
|
||||
msgid "Your session has expired. Please enter password for {obfuscatedEmail} to continue."
|
||||
msgstr "Your session has expired. Please enter password for {obfuscatedEmail} to continue."
|
||||
|
||||
@@ -676,5 +676,162 @@ $headline$: Use starting line of the note as title.`,
|
||||
fileLengthMismatch: (expectedSize: number, currentSize: number) =>
|
||||
t`File length mismatch. Expected ${expectedSize} but got ${currentSize} bytes. Please upload this file again from the attachment manager.`,
|
||||
failedToResolvedDownloadUrl: () => t`Failed to resolve download url`,
|
||||
fileSize: () => `File size`
|
||||
fileSize: () => `File size`,
|
||||
donwloadStarted: () => t`Download started... Please wait`,
|
||||
passwordNotEntered: () => t`Password not entered`,
|
||||
passwordNotMatched: () => t`Password does not match`,
|
||||
passwordUpdated: () => t`Password updated`,
|
||||
noteLocked: () => t`Note locked`,
|
||||
biometricUnlockEnabled: () => t`Biometric unlocking enabled`,
|
||||
biometricUnlockDisabled: () => t`Biometric unlocking disabled`,
|
||||
vaultCreated: () => t`Vault created`,
|
||||
noteUnlocked: () => t`Note unlocked`,
|
||||
noteCopied: () => t`Note copied to clipboard`,
|
||||
introData: [
|
||||
{
|
||||
headings: [
|
||||
() => t`Open source.`,
|
||||
() => t`End to end encrypted.`,
|
||||
() => t`Private.`
|
||||
],
|
||||
body: () => t`Write notes with freedom, no spying, no tracking.`
|
||||
},
|
||||
{
|
||||
headings: [
|
||||
() => t`Privacy for everyone`,
|
||||
() => t`— not just the`,
|
||||
() => t`privileged few`
|
||||
],
|
||||
body: () =>
|
||||
t`Your privacy matters to us, no matter who you are. In a world where everyone is trying to spy on you, Notesnook encrypts all your data before it leaves your device. With Notesnook no one can ever sell your data again.`
|
||||
},
|
||||
{
|
||||
tesimonial: () =>
|
||||
t`You simply cannot get any better of a note taking app than @notesnook. The UI is clean and slick, it is feature rich, encrypted, reasonably priced (esp. for students & educators) & open source`,
|
||||
link: "https://twitter.com/andrewsayer/status/1637817220113002503",
|
||||
user: "@andrewsayer on Twitter"
|
||||
}
|
||||
],
|
||||
shortcutCreated: () => t`Shortcut created`,
|
||||
notebookRestored: () => t`Notebook restored`,
|
||||
restoreNotebook: () => t`Restore notebook`,
|
||||
permanentlyDeletedNotebook: () => t`Permanently deleted notebook`,
|
||||
noteRestoredFromHistory: () => t`Note restored from history`,
|
||||
noteRestored: () => t`Note restored`,
|
||||
deleteNoteConfirmation: () =>
|
||||
t`Are you sure you want to delete this note permanently?`,
|
||||
noteDeleted: () => t`Note deleted`,
|
||||
restored: () => t`Restored successfully`,
|
||||
deleteItems: (type: string, count: number) =>
|
||||
plural(count, {
|
||||
one: `Delete ${strings.dataTypes[
|
||||
type as keyof typeof strings.dataTypes
|
||||
]()}`,
|
||||
other: `Delete ${strings.dataTypesPlural[
|
||||
type as keyof typeof strings.dataTypes
|
||||
]()}`
|
||||
}),
|
||||
deleteItemsConfirmation: (type: string, count: number) =>
|
||||
plural(count, {
|
||||
one: `Are you sure you want to delete this ${strings.dataTypes[
|
||||
type as keyof typeof strings.dataTypes
|
||||
]()} permanently?`,
|
||||
other: `Are you sure you want to delete these ${strings.dataTypesPlural[
|
||||
type as keyof typeof strings.dataTypes
|
||||
]()} permanently?`
|
||||
}),
|
||||
manageTags: () => t`Manage tags`,
|
||||
linkNotebook: () => t`Link to notebook`,
|
||||
move: () => t`Move`,
|
||||
unlinkNotebook: () => t`Unlink notebook`,
|
||||
unfavorite: () => t`Unfavorite`,
|
||||
moveToTrash: () => t`Move to trash`,
|
||||
enterNotebookTitle: () => t`Enter notebook title`,
|
||||
emailUpdated: (email: string) => t`Email updated to ${email}`,
|
||||
noApplicationFound: (fileToOpen: string) =>
|
||||
t`No application found to open ${fileToOpen}`,
|
||||
moveNotebooks: (count: number) =>
|
||||
plural(count, { one: "Move notebook", other: `Move # notebooks` }),
|
||||
moveNotebooksConfirm: (count: number, selectedNotebookTitle: string) =>
|
||||
plural(count, {
|
||||
one: `Are you sure you want to move this notebook to ${selectedNotebookTitle}?`,
|
||||
other: `Are you sure you want to move these # notebooks ${selectedNotebookTitle}?`
|
||||
}),
|
||||
failedToPublish: () => t`Failed to publish note`,
|
||||
failedToUnpublish: () => t`Failed to unpublish note`,
|
||||
monographUrlCopied: () => t`Monograph URL copied`,
|
||||
recoveryKeySaved: () => t`Did you save recovery key?`,
|
||||
recoveryKeySavedDesc: () =>
|
||||
t`Please make sure you have saved the recovery key. Tap one more time to confirm.`,
|
||||
recoveryKeyQRCodeSaved: () => t`Recovery key QR code saved`,
|
||||
recoveryKeyTextFileSaved: () => t`Recovery key text file saved`,
|
||||
recoveryKeyCopied: () => t`Recovery key copied`,
|
||||
timeShort: {
|
||||
second: () => t`sec`,
|
||||
minute: () => t`min`,
|
||||
hour: () => t`hr`
|
||||
},
|
||||
backupEncrypted: () => t`Backup is encrypted`,
|
||||
password: () => t`Password`,
|
||||
renameTag: () => t`Rename tag`,
|
||||
renameColor: () => t`Rename color`,
|
||||
name: () => t`Name`,
|
||||
unlockToDelete: () => t`Unlock note to delete it`,
|
||||
backupRestored: () => t`Backup restored`,
|
||||
restoreFailed: () => t`Restore failed`,
|
||||
itemDeleted: (count: number, type: string) =>
|
||||
plural(count, {
|
||||
one: `1 ${strings.dataTypesCamelCase[
|
||||
type as keyof typeof strings.dataTypesCamelCase
|
||||
]()} deleted`,
|
||||
other: `# ${strings.dataTypes[
|
||||
type as keyof typeof strings.dataTypes
|
||||
]()} deleted`
|
||||
}),
|
||||
reorder: () => t`Reorder`,
|
||||
turnOffReminder: () => t`Turn off reminder`,
|
||||
turnOnReminder: () => t`Turn on reminder`,
|
||||
addShortcut: () => t`Add shortcut`,
|
||||
addNotebook: () => t`Add notebook`,
|
||||
removeAsDefault: () => t`Remove as default`,
|
||||
setAsDefault: () => t`Set as default`,
|
||||
moveNotes: () => t`Move notes`,
|
||||
unpin: () => t`Unpin`,
|
||||
pin: () => t`Pin`,
|
||||
lockedNotesPinnedFailed: () => t`Locked notes cannot be pinned`,
|
||||
loginRequired: () => t`Login required`,
|
||||
confirmEmailToPublish: () => t`Confirm email to publish note`,
|
||||
lockedNotesPublishFailed: () => t`Locked notes cannot be published`,
|
||||
notePreparingForShare: () => t`Preparing note for share`,
|
||||
removeFromNotebook: () => t`Remove from notebook`,
|
||||
attachments: () => t`Attachments`,
|
||||
history: () => t`History`,
|
||||
copyLink: () => t`Copy link`,
|
||||
linkCopied: () => t`Link copied`,
|
||||
readOnly: () => t`Read only`,
|
||||
syncOff: () => t`Sync off`,
|
||||
duplicate: () => t`Duplicate`,
|
||||
remindMe: () => t`Remind me`,
|
||||
published: () => t`Published`,
|
||||
unpinFromNotifications: () => t`Unpin from notifications`,
|
||||
pinToNotifications: () => t`Pin to notifications`,
|
||||
linkNotebooks: () => t`Link notebooks`,
|
||||
addTags: () => t`Add tags`,
|
||||
references: () => t`References`,
|
||||
moveNotebookFix: () => t`Move notebook`,
|
||||
failedToSubscribe: () => t`Failed to subscribe`,
|
||||
createNewNote: () => t`Create a new note`,
|
||||
monographs: () => t`Monographs`,
|
||||
encryptingAttachment: () => t`Encrypting attachment`,
|
||||
encryptingAttachmentDesc: (name: string) =>
|
||||
t`Please wait while we encrypt ${name} for upload.`,
|
||||
fileTooLarge: () => t`File too large`,
|
||||
fileTooLargeDesc: (sizeInMB: number) =>
|
||||
t`File size should be less than ${sizeInMB}MB`,
|
||||
failToOpen: () => t`Failed to open`,
|
||||
fileMismatch: () => t`File mismatch`,
|
||||
noNoteProperties: () => t`Start writing to create a new note`,
|
||||
createNoteFirst: () => t`Create a note first`,
|
||||
noteLockedSave: () => t`This note is locked. Unlock note to save changes`,
|
||||
saveFailedVaultLocked: () => t`Save failed. Vault is locked`
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user