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