mobile: migrate more strings

This commit is contained in:
Ammar Ahmed
2024-08-06 15:05:38 +05:00
committed by Abdullah Atta
parent 3e5b740ef0
commit d31f6688f8
32 changed files with 741 additions and 1245 deletions

View File

@@ -166,7 +166,7 @@ const Actions = ({
eSendEvent(eDBItemUpdate, attachment.id);
}
},
positiveText: "Rename"
positiveText: strings.rename()
});
},
icon: "form-textbox"

View File

@@ -39,10 +39,9 @@ const ResultDialog = () => {
const { colors } = useThemeColors();
const [visible, setVisible] = useState(false);
const [dialogData, setDialogData] = useState({
title: "Thank you for signing up!",
paragraph:
"Try out all features of Notesnook free for 7 days. No limitations. No commitments.",
button: "Start taking notes"
title: "",
paragraph: "",
button: ""
});
useEffect(() => {
eSubscribeEvent(eOpenResultDialog, open);

View File

@@ -179,7 +179,7 @@ export class VaultDialog extends Component {
if (this.state.loading) {
ToastManager.show({
heading: this.state.title,
message: "Please wait and do not close the app.",
message: strings.pleaseWait() + "...",
type: "success",
context: "local"
});
@@ -214,8 +214,7 @@ export class VaultDialog extends Component {
if (!this.password) {
ToastManager.show({
heading: "Password not entered",
message: "Enter a password for the vault and try again.",
heading: strings.passwordNotEntered(),
type: "error",
context: "local"
});
@@ -225,7 +224,7 @@ export class VaultDialog extends Component {
if (!this.state.novault) {
if (this.password !== this.confirmPassword) {
ToastManager.show({
heading: "Passwords do not match",
heading: strings.passwordNotMatched(),
type: "error",
context: "local"
});
@@ -251,7 +250,7 @@ export class VaultDialog extends Component {
this._enrollFingerprint(this.newPassword);
}
ToastManager.show({
heading: "Vault password updated successfully",
heading: strings.passwordUpdated(),
type: "success",
context: "global"
});
@@ -263,8 +262,7 @@ export class VaultDialog extends Component {
});
if (e.message === db.vault.ERRORS.wrongPassword) {
ToastManager.show({
heading: "Incorrect password",
message: "Please enter the correct password and try again",
heading: strings.passwordIncorrect(),
type: "error",
context: "local"
});
@@ -275,8 +273,7 @@ export class VaultDialog extends Component {
} else if (this.state.locked) {
if (!this.password || this.password.trim() === 0) {
ToastManager.show({
heading: "Incorrect password",
message: "Please enter the correct password and try again",
heading: strings.passwordIncorrect(),
type: "error",
context: "local"
});
@@ -344,8 +341,7 @@ export class VaultDialog extends Component {
this.close();
} else {
ToastManager.show({
heading: "Account password incorrect",
message: "Please enter correct password for your account.",
heading: strings.passwordIncorrect(),
type: "error",
context: "local"
});
@@ -386,8 +382,7 @@ export class VaultDialog extends Component {
eSendEvent("vaultUpdated");
} catch (e) {
ToastManager.show({
heading: "Vault password incorrect",
message: "Please enter correct password to clear vault.",
heading: strings.passwordIncorrect(),
type: "error",
context: "local"
});
@@ -400,7 +395,7 @@ export class VaultDialog extends Component {
async _lockNote() {
if (!this.password || this.password.trim() === 0) {
ToastManager.show({
heading: "Incorrect password",
heading: strings.passwordIncorrect(),
type: "error",
context: "local"
});
@@ -413,7 +408,7 @@ export class VaultDialog extends Component {
this.close();
ToastManager.show({
message: "Note locked successfully",
message: strings.noteLocked(),
type: "error",
context: "local"
});
@@ -426,8 +421,7 @@ export class VaultDialog extends Component {
async _unlockNote() {
if (!this.password || this.password.trim() === 0) {
ToastManager.show({
heading: "Incorrect password",
message: "Please enter the correct password and try again",
heading: strings.passwordIncorrect(),
type: "error",
context: "local"
});
@@ -484,8 +478,7 @@ export class VaultDialog extends Component {
});
eSendEvent("vaultUpdated");
ToastManager.show({
heading: "Biometric unlocking enabled!",
message: "Now you can unlock notes in vault with biometrics.",
heading: strings.biometricUnlockEnabled(),
type: "success",
context: "global"
});
@@ -493,9 +486,7 @@ export class VaultDialog extends Component {
} catch (e) {
this.close();
ToastManager.show({
heading: "Incorrect password",
message:
"Please enter the correct vault password to enable biometrics.",
heading: strings.passwordIncorrect(),
type: "error",
context: "local"
});
@@ -520,7 +511,7 @@ export class VaultDialog extends Component {
loading: false
});
ToastManager.show({
heading: "Note added to vault",
heading: strings.noteLocked(),
type: "success",
context: "global"
});
@@ -528,7 +519,7 @@ export class VaultDialog extends Component {
} else {
eSendEvent("vaultUpdated");
ToastManager.show({
heading: "Vault created successfully",
heading: strings.vaultCreated(),
type: "success",
context: "global"
});
@@ -541,7 +532,7 @@ export class VaultDialog extends Component {
.remove(this.state.note.id, this.password)
.then(() => {
ToastManager.show({
heading: "Note permanently unlocked.",
heading: strings.noteUnlocked(),
type: "success",
context: "global"
});
@@ -568,9 +559,8 @@ export class VaultDialog extends Component {
async _copyNote(note) {
Clipboard.setString((await convertNoteToText(note, true)) || "");
ToastManager.show({
heading: "Note copied",
heading: strings.noteCopied(),
type: "success",
message: "Note has been copied to clipboard!",
context: "global"
});
this.close();
@@ -580,7 +570,7 @@ export class VaultDialog extends Component {
this.close();
try {
await Share.open({
heading: "Share note",
heading: note.title,
failOnCancel: false,
message: (await convertNoteToText(note)) || ""
});
@@ -600,7 +590,7 @@ export class VaultDialog extends Component {
});
setTimeout(() => {
ToastManager.show({
heading: "Incorrect password",
heading: strings.passwordIncorrect(),
type: "error",
context: "local"
});
@@ -615,14 +605,13 @@ export class VaultDialog extends Component {
await BiometricService.resetCredentials();
eSendEvent("vaultUpdated");
ToastManager.show({
heading: "Biometric unlocking disabled!",
heading: strings.biometricUnlockDisabled(),
type: "success",
context: "global"
});
} catch (e) {
ToastManager.show({
heading: "Failed to disable Biometric unlocking.",
message: e.message,
heading: e.message,
type: "success",
context: "global"
});

View File

@@ -97,11 +97,13 @@ const Intro = ({ navigation }) => {
extraBold
size={SIZE.xxl}
>
{heading}
{heading()}
</Heading>
))}
{item.body ? <Paragraph size={SIZE.sm}>{item.body}</Paragraph> : null}
{item.body ? (
<Paragraph size={SIZE.sm}>{item.body()}</Paragraph>
) : null}
{item.tesimonial ? (
<Paragraph
@@ -113,7 +115,7 @@ const Intro = ({ navigation }) => {
Linking.openURL(item.link);
}}
>
{item.tesimonial} {item.user}
{item.tesimonial()} {item.user}
</Paragraph>
) : null}
</View>
@@ -153,26 +155,7 @@ const Intro = ({ navigation }) => {
index={0}
useReactNativeGestureHandler={true}
showPagination
data={[
{
headings: ["Open source.", "End to end encrypted.", "Private."],
body: "Write notes with freedom, no spying, no tracking."
},
{
headings: [
"Privacy for everyone",
"— not just the",
"privileged few"
],
body: "Your privacy matters to us, no matter who you are. In a world where everyone is trying to spy on you, Notesnook encrypts all your data before it leaves your device. With Notesnook no one can ever sell your data again."
},
{
tesimonial:
"You simply cannot get any better of a note taking app than @notesnook. The UI is clean and slick, it is feature rich, encrypted, reasonably priced (esp. for students & educators) & open source",
link: "https://twitter.com/andrewsayer/status/1637817220113002503",
user: "@andrewsayer on Twitter"
}
]}
data={strings.introData()}
paginationActiveColor={colors.primary.accent}
paginationStyleItem={{
width: 10,

View File

@@ -58,7 +58,7 @@ export const NotebookHeader = ({
}
});
ToastManager.show({
heading: "Shortcut created",
heading: strings.shortcutCreated(),
type: "success"
});
}

View File

@@ -28,6 +28,7 @@ import { useSelectionStore } from "../../../stores/use-selection-store";
import { useTrashStore } from "../../../stores/use-trash-store";
import { presentDialog } from "../../dialog/functions";
import SelectionWrapper, { selectItem } from "../selection-wrapper";
import { strings } from "@notesnook/intl";
export const openNotebook = (item: Notebook | BaseTrashItem<Notebook>) => {
const isTrash = item.type === "trash";
@@ -36,16 +37,15 @@ export const openNotebook = (item: Notebook | BaseTrashItem<Notebook>) => {
if (isTrash) {
presentDialog({
title: `Restore notebook`,
paragraph: `Restore or delete notebook forever`,
positiveText: "Restore",
negativeText: "Delete",
title: strings.restoreNotebook(),
positiveText: strings.restore(),
negativeText: strings.delete(),
positivePress: async () => {
await db.trash.restore(item.id);
Navigation.queueRoutesForUpdate();
useSelectionStore.getState().setSelectionMode(undefined);
ToastManager.show({
heading: "Restore successful",
heading: strings.notebookRestored(),
type: "success"
});
},
@@ -54,7 +54,7 @@ export const openNotebook = (item: Notebook | BaseTrashItem<Notebook>) => {
useTrashStore.getState().refresh();
useSelectionStore.getState().setSelectionMode(undefined);
ToastManager.show({
heading: "Permanently deleted items",
heading: strings.permanentlyDeletedNotebook(),
type: "success",
context: "local"
});

View File

@@ -52,7 +52,7 @@ export default function NotePreview({ session, content, note }) {
Navigation.queueRoutesForUpdate();
useSelectionStore.getState().setSelectionMode(false);
ToastManager.show({
heading: "Restore successful",
heading: strings.noteRestored(),
type: "success"
});
eSendEvent(eCloseSheet);
@@ -73,7 +73,7 @@ export default function NotePreview({ session, content, note }) {
Navigation.queueRoutesForUpdate();
ToastManager.show({
heading: "Note restored successfully",
heading: strings.noteRestoredFromHistory(),
type: "success"
});
}
@@ -84,17 +84,17 @@ export default function NotePreview({ session, content, note }) {
const deleteNote = async () => {
presentDialog({
title: `Delete note permanently`,
paragraph: `Are you sure you want to delete this note from trash permanentaly`,
positiveText: "Delete",
negativeText: "Cancel",
title: strings.deleteNote(),
paragraph: strings.deleteNoteConfirmation(),
positiveText: strings.delete(),
negativeText: strings.cancel(),
context: "local",
positivePress: async () => {
await db.trash.delete(note.id);
useTrashStore.getState().refresh();
useSelectionStore.getState().setSelectionMode(false);
ToastManager.show({
heading: "Permanently deleted items",
heading: strings.noteDeleted(),
type: "success",
context: "local"
});

View File

@@ -46,6 +46,7 @@ import { MoveNotebookSheet } from "../sheets/move-notebook";
import { Button } from "../ui/button";
import { IconButton } from "../ui/icon-button";
import Heading from "../ui/typography/heading";
import { strings } from "@notesnook/intl";
export const SelectionHeader = React.memo(
({
@@ -94,21 +95,20 @@ export const SelectionHeader = React.memo(
clearSelection();
ToastManager.show({
heading: "Restore successful",
heading: strings.restored(),
type: "success"
});
};
const deleteItem = async () => {
presentDialog({
title: `Delete ${selectedItemsList.length > 1 ? "items" : "item"}`,
paragraph: `Are you sure you want to delete ${
selectedItemsList.length > 1
? "these items permanently?"
: "this item permanently?"
}`,
positiveText: "Delete",
negativeText: "Cancel",
title: strings.deleteItems(type as string, selectedItemsList.length),
paragraph: strings.deleteItemsConfirmation(
type as string,
selectedItemsList.length
),
positiveText: strings.delete(),
negativeText: strings.cancel(),
positivePress: async () => {
if (!selectedItemsList.length) return;
await db.trash.delete(...selectedItemsList);
@@ -236,10 +236,7 @@ export const SelectionHeader = React.memo(
>
{[
{
title:
selectedItemsList.length > 1
? "Move notebooks"
: "Move notebook",
title: strings.move(),
onPress: async () => {
const ids = selectedItemsList;
const notebooks = await db.notebooks.all.items(ids);
@@ -249,7 +246,7 @@ export const SelectionHeader = React.memo(
icon: "arrow-right-bold-box-outline"
},
{
title: "Manage tags",
title: strings.manageTags(),
onPress: async () => {
await sleep(100);
ManageTagsSheet.present(selectedItemsList);
@@ -258,7 +255,7 @@ export const SelectionHeader = React.memo(
icon: "pound"
},
{
title: "Export",
title: strings.export(),
onPress: async () => {
await sleep(100);
ExportNotesSheet.present(selectedItemsList);
@@ -267,7 +264,7 @@ export const SelectionHeader = React.memo(
icon: "export"
},
{
title: "Link notebook",
title: strings.linkNotebook(),
onPress: async () => {
await sleep(100);
MoveNoteSheet.present();
@@ -276,7 +273,7 @@ export const SelectionHeader = React.memo(
icon: "plus"
},
{
title: "Unlink notebook",
title: strings.unlinkNotebook(),
onPress: async () => {
if (!id) return;
await db.notes.removeFromNotebook(id, ...selectedItemsList);
@@ -288,13 +285,13 @@ export const SelectionHeader = React.memo(
icon: "minus"
},
{
title: "Unfavorite",
title: strings.unfavorite(),
onPress: addToFavorite,
visible: focusedRouteId === "Favorites",
icon: "star-off"
},
{
title: `Move to trash`,
title: strings.moveToTrash(),
onPress: async () => {
deleteItems(
undefined,
@@ -308,13 +305,13 @@ export const SelectionHeader = React.memo(
icon: "delete"
},
{
title: `Restore`,
title: strings.restore(),
onPress: restoreItem,
visible: type === "trash",
icon: "delete-restore"
},
{
title: `Delete`,
title: strings.delete(),
onPress: deleteItem,
visible: type === "trash",
icon: "delete"

View File

@@ -63,18 +63,18 @@ export const AddNotebookSheet = ({
const onSaveChanges = async () => {
if (loading) return;
setLoading(true);
if (!title.current || title?.current.trim().length === 0) {
ToastManager.show({
heading: "Notebook title is required",
heading: strings.enterNotebookTitle(),
type: "error",
context: "local"
});
setLoading(false);
return;
}
setLoading(true);
const id = await db.notebooks.add({
title: title.current,
description: description.current,

View File

@@ -89,8 +89,7 @@ export const ChangeEmail = ({ close }: ChangeEmailProps) => {
eSendEvent(eUserLoggedIn);
close?.();
ToastManager.show({
heading: `Email changed`,
message: `Your account email has been updated to ${emailChangeData.current.email}`,
heading: strings.emailUpdated(emailChangeData.current.email),
type: "success",
context: "global"
});

View File

@@ -119,7 +119,6 @@ const ExportNotesSheet = ({
await exportNoteAs("pdf");
},
icon: "file-pdf-box",
desc: "View in any pdf reader app",
id: notesnook.ids.dialogs.export.pdf,
pro: premium
},
@@ -129,7 +128,6 @@ const ExportNotesSheet = ({
await exportNoteAs("md");
},
icon: "language-markdown",
desc: "View in any text or markdown editor",
id: notesnook.ids.dialogs.export.md,
pro: premium
},
@@ -139,7 +137,6 @@ const ExportNotesSheet = ({
await exportNoteAs("md-frontmatter");
},
icon: "language-markdown",
desc: "View in any text or markdown editor",
id: notesnook.ids.dialogs.export.md,
pro: premium
},
@@ -149,7 +146,6 @@ const ExportNotesSheet = ({
await exportNoteAs("txt");
},
icon: "card-text",
desc: "View in any text editor",
id: notesnook.ids.dialogs.export.text,
pro: true
},
@@ -159,7 +155,6 @@ const ExportNotesSheet = ({
await exportNoteAs("html");
},
icon: "language-html5",
desc: "View in any web browser & html reader",
id: notesnook.ids.dialogs.export.html,
pro: premium
}
@@ -232,13 +227,13 @@ const ExportNotesSheet = ({
<Heading style={{ marginLeft: 10 }} size={SIZE.md}>
{item.title}
</Heading>
<Paragraph
{/* <Paragraph
style={{ marginLeft: 10 }}
size={SIZE.sm}
color={colors.secondary.paragraph}
>
{item.desc}
</Paragraph>
</Paragraph> */}
</View>
</Pressable>
</Fragment>
@@ -311,8 +306,7 @@ const ExportNotesSheet = ({
showAppsSuggestions: true
}).catch((e) => {
ToastManager.show({
heading: "Cannot open",
message: `No application found to open ${result.name} file.`,
heading: strings.noApplicationFound(result.name),
type: "success",
context: "local"
});

View File

@@ -42,8 +42,7 @@ export const ShareComponent = ({ uri, name, padding }) => {
showAppsSuggestions: true
}).catch(() => {
ToastManager.show({
heading: "Cannot open",
message: `No application found to open ${name} file.`,
heading: strings.noApplicationFound(name),
type: "success",
context: "local"
});

View File

@@ -76,8 +76,7 @@ Logged in: ${user ? "yes" : "no"}`,
} catch (e) {
setLoading(false);
ToastManager.show({
heading: "An error occured",
message: e.message,
heading: e.message,
type: "error"
});
}

View File

@@ -139,11 +139,6 @@ const ManageTagsSheet = (props: {
const onSubmit = async () => {
if (!query || query === "" || query.trimStart().length == 0) {
ToastManager.show({
heading: "Tag field is empty",
type: "error",
context: "local"
});
return;
}
@@ -182,12 +177,7 @@ const ManageTagsSheet = (props: {
useTagStore.getState().refresh();
setQuery(undefined);
} catch (e) {
ToastManager.show({
heading: "Cannot add tag",
type: "error",
message: (e as Error).message,
context: "local"
});
ToastManager.error(e as Error);
}
Navigation.queueRoutesForUpdate();

View File

@@ -97,17 +97,12 @@ export const MoveNotebookSheet = ({
selectedNotebooks={selectedNotebooks}
onPress={async (selectedNotebook) => {
presentDialog({
title: `Move ${
selectedNotebooks.length > 1
? selectedNotebooks.length + " notebooks"
: selectedNotebooks[0].title
}`,
paragraph: `Are you sure you want to move ${
selectedNotebooks.length > 1
? selectedNotebooks.length + " notebooks"
: selectedNotebooks[0].title
} to ${selectedNotebook.title}?`,
positiveText: "Move",
title: strings.moveNotebooks(selectedNotebooks.length),
paragraph: strings.moveNotebooksConfirm(
selectedNotebooks.length,
selectedNotebook.title
),
positiveText: strings.move(),
context: "move-notebook",
positivePress: async () => {
for (const notebook of selectedNotebooks) {

View File

@@ -77,7 +77,7 @@ const PublishNoteSheet = ({
requestInAppReview();
} catch (e) {
ToastManager.show({
heading: "Could not publish note",
heading: strings.failedToPublish(),
message: (e as Error).message,
type: "error",
context: "local"
@@ -103,7 +103,7 @@ const PublishNoteSheet = ({
}
} catch (e) {
ToastManager.show({
heading: "Could not unpublish note",
heading: strings.failedToUnpublish(),
message: (e as Error).message,
type: "error",
context: "local"
@@ -194,7 +194,7 @@ const PublishNoteSheet = ({
onPress={() => {
Clipboard.setString(publishUrl as string);
ToastManager.show({
heading: "Note publish url copied",
heading: strings.monographUrlCopied(),
type: "success",
context: "local"
});

View File

@@ -76,8 +76,8 @@ class RecoveryKeySheet extends React.Component {
close = () => {
if (this.tapCount === 0) {
ToastManager.show({
heading: "Did you save recovery key?",
message: "Tap one more time to confirm.",
heading: strings.recoveryKeySaved(),
message: strings.recoveryKeySavedDesc(),
type: "success",
context: "local"
});
@@ -130,9 +130,7 @@ class RecoveryKeySheet extends React.Component {
await RNFetchBlob.fs.writeFile(path + fileName, data, "base64");
}
ToastManager.show({
heading: "Recovery key QR-Code saved",
message:
"QR-Code image has been saved to Gallery at " + path + fileName,
heading: strings.recoveryKeyQRCodeSaved(),
type: "success",
context: "local"
});
@@ -165,8 +163,7 @@ class RecoveryKeySheet extends React.Component {
}
ToastManager.show({
heading: "Recovery key text file saved",
message: "Recovery key saved in text file.",
heading: strings.recoveryKeyTextFileSaved(),
type: "success",
context: "local"
});
@@ -284,7 +281,7 @@ class RecoveryKeySheet extends React.Component {
onPress={() => {
Clipboard.setString(this.state.key);
ToastManager.show({
heading: "Recovery key copied!",
heading: strings.recoveryKeyCopied(),
type: "success",
context: "local"
});

View File

@@ -68,19 +68,19 @@ export default function ReminderNotify({
const QuickActions = [
{
title: "5 min",
title: `5 ${strings.timeShort.minute}`,
time: 5
},
{
title: "15 min",
title: `15 ${strings.timeShort.minute}`,
time: 15
},
{
title: "30 min",
title: `30 ${strings.timeShort.minute}`,
time: 30
},
{
title: "1 hour",
title: `1 ${strings.timeShort.hour}`,
time: 60
}
];

View File

@@ -206,12 +206,6 @@ export default function ReminderSheet({
if (!reminderId) return;
const _reminder = await db.reminders?.reminder(reminderId);
if (!_reminder) {
ToastManager.show({
heading: "Failed to add a new reminder",
context: "local"
});
}
if (reference && _reminder) {
await db.relations?.add(reference, {
id: _reminder?.id as string,

View File

@@ -68,6 +68,7 @@ import { sleep } from "../utils/time";
import { ReferencesList } from "../components/sheets/references";
import { createInternalLink } from "@notesnook/core";
import { MoveNotebookSheet } from "../components/sheets/move-notebook";
import { strings } from "@notesnook/intl";
export const useActions = ({
close,
@@ -194,8 +195,7 @@ export const useActions = ({
close();
await sleep(300);
presentDialog({
title: "Rename tag",
paragraph: "Change the title of the tag " + item.title,
title: strings.renameTag(),
positivePress: async (value: string) => {
if (!value || value === "" || value.trimStart().length == 0) return;
try {
@@ -218,7 +218,7 @@ export const useActions = ({
input: true,
defaultValue: item.title,
inputPlaceholder: "Enter title of tag",
positiveText: "Save"
positiveText: strings.save()
});
}
@@ -227,11 +227,10 @@ export const useActions = ({
close();
await sleep(300);
presentDialog({
title: "Rename color",
title: strings.renameColor(),
input: true,
inputPlaceholder: "Enter name for this color",
inputPlaceholder: strings.name(),
defaultValue: item.title,
paragraph: "You are renaming the color " + item.title,
positivePress: async (value) => {
if (!value || value.trim().length === 0) return;
await db.colors.add({
@@ -242,7 +241,7 @@ export const useActions = ({
eSendEvent(Navigation.routeNames.ColoredNotes);
useMenuStore.getState().setColorNotes();
},
positiveText: "Rename"
positiveText: strings.rename()
});
}
@@ -275,7 +274,7 @@ export const useActions = ({
useRelationStore.getState().update();
});
},
positiveText: "Delete",
positiveText: strings.delete(),
positiveType: "errorShade"
});
return;
@@ -287,8 +286,8 @@ export const useActions = ({
novault: true,
locked: true,
item: item,
title: "Delete note",
description: "Unlock note to delete it."
title: strings.deleteNote(),
description: strings.unlockToDelete()
});
} else {
try {
@@ -305,17 +304,17 @@ export const useActions = ({
close();
await sleep(300);
presentDialog({
title: "Permanent delete",
paragraph: `Are you sure you want to delete this ${item.itemType} permanently from trash?`,
positiveText: "Delete",
negativeText: "Cancel",
title: strings.delete(),
paragraph: strings.deleteItemsConfirmation(item.itemType, 1),
positiveText: strings.delete(),
negativeText: strings.cancel(),
positivePress: async () => {
await db.trash.delete(item.id);
setImmediate(() => {
Navigation.queueRoutesForUpdate();
useSelectionStore.getState().setSelectionMode(undefined);
ToastManager.show({
heading: "Permanently deleted items",
heading: strings.itemDeleted(1, item.itemType),
type: "success",
context: "local"
});
@@ -358,7 +357,7 @@ export const useActions = ({
if (item.type === "tag") {
actions.push({
id: "rename-tag",
title: "Rename",
title: strings.rename(),
icon: "square-edit-outline",
func: renameTag
});
@@ -367,14 +366,14 @@ export const useActions = ({
if (item.type === "color") {
actions.push({
id: "rename-color",
title: "Rename",
title: strings.rename(),
icon: "square-edit-outline",
func: renameColor
});
actions.push({
id: "reorder",
title: "Reorder",
title: strings.reorder(),
icon: "sort-ascending",
func: () => {
useSideBarDraggingStore.setState({
@@ -389,7 +388,9 @@ export const useActions = ({
actions.push(
{
id: "disable-reminder",
title: !item.disabled ? "Turn off reminder" : "Turn on reminder",
title: !item.disabled
? strings.turnOffReminder()
: strings.turnOnReminder(),
icon: !item.disabled ? "bell-off-outline" : "bell",
func: async () => {
close();
@@ -404,7 +405,7 @@ export const useActions = ({
},
{
id: "edit-reminder",
title: "Edit reminder",
title: strings.editReminder(),
icon: "pencil",
func: async () => {
ReminderSheet.present(item);
@@ -418,13 +419,13 @@ export const useActions = ({
actions.push(
{
id: "restore",
title: "Restore " + item.itemType,
title: strings.restore(),
icon: "delete-restore",
func: restoreTrashItem
},
{
id: "delete",
title: "Delete " + item.itemType,
title: strings.delete(),
icon: "delete",
func: deleteTrashItem
}
@@ -434,7 +435,7 @@ export const useActions = ({
if (item.type === "tag" || item.type === "notebook") {
actions.push({
id: "add-shortcut",
title: isPinnedToMenu ? "Remove Shortcut" : "Add Shortcut",
title: isPinnedToMenu ? strings.removeShortcut() : strings.addShortcut(),
icon: isPinnedToMenu ? "link-variant-remove" : "link-variant",
func: createMenuShortcut,
close: false,
@@ -448,7 +449,7 @@ export const useActions = ({
actions.push(
{
id: "add-notebook",
title: "Add notebook",
title: strings.addNotebook(),
icon: "plus",
func: async () => {
AddNotebookSheet.present(undefined, item);
@@ -456,7 +457,7 @@ export const useActions = ({
},
{
id: "edit-notebook",
title: "Edit notebook",
title: strings.editNotebook(),
icon: "square-edit-outline",
func: async () => {
AddNotebookSheet.present(item);
@@ -465,7 +466,9 @@ export const useActions = ({
{
id: "default-notebook",
title:
defaultNotebook === item.id ? "Remove as default" : "Set as default",
defaultNotebook === item.id
? strings.removeAsDefault()
: strings.setAsDefault(),
hidden: item.type !== "notebook",
icon: "notebook",
func: async () => {
@@ -485,7 +488,7 @@ export const useActions = ({
},
{
id: "move-notes",
title: "Move notes",
title: strings.moveNotes(),
hidden: item.type !== "notebook",
icon: "text",
func: () => {
@@ -494,7 +497,7 @@ export const useActions = ({
},
{
id: "move-notebook",
title: "Move notebook",
title: strings.moveNotebookFix(),
icon: "arrow-right-bold-box-outline",
func: () => {
MoveNotebookSheet.present([item]);
@@ -506,7 +509,7 @@ export const useActions = ({
if (item.type === "notebook" || item.type === "note") {
actions.push({
id: "pin",
title: item.pinned ? "Unpin" : "Pin",
title: item.pinned ? strings.unpin() : strings.pin(),
icon: item.pinned ? "pin-off-outline" : "pin-outline",
func: pinItem,
close: false,
@@ -593,9 +596,8 @@ export const useActions = ({
}
if (locked) {
ToastManager.show({
heading: "Note is locked",
heading: strings.lockedNotesPinnedFailed(),
type: "error",
message: "Locked notes cannot be pinned to notifications",
context: "local"
});
return;
@@ -619,8 +621,7 @@ export const useActions = ({
if (!checkItemSynced()) return;
if (!user) {
ToastManager.show({
heading: "Login required",
message: "Login to publish note",
heading: strings.loginRequired(),
context: "local",
func: () => {
eSendEvent(eOpenLoginDialog);
@@ -632,15 +633,14 @@ export const useActions = ({
if (!user?.isEmailConfirmed) {
ToastManager.show({
heading: "Email is not verified",
message: "Please verify your email first.",
heading: strings.confirmEmailToPublish(),
context: "local"
});
return;
}
if (locked) {
ToastManager.show({
heading: "Locked notes cannot be published",
heading: strings.lockedNotesPublishFailed(),
type: "error",
context: "local"
});
@@ -654,8 +654,7 @@ export const useActions = ({
if (processingId.current === "shareNote") {
ToastManager.show({
heading: "Please wait...",
message: "We are preparing your note for sharing",
heading: strings.pleaseWait() + "...",
context: "local"
});
return;
@@ -669,15 +668,14 @@ export const useActions = ({
novault: true,
locked: true,
share: true,
title: "Share note",
description: "Unlock note to share it."
title: strings.shareNote()
});
} else {
processingId.current = "shareNote";
const convertedText = await convertNoteToText(item);
processingId.current = undefined;
Share.open({
title: "Share note to",
title: strings.shareNote(),
failOnCancel: false,
message: convertedText || ""
});
@@ -696,8 +694,7 @@ export const useActions = ({
novault: true,
locked: true,
permanant: true,
title: "Unlock note",
description: "Remove note from the vault."
title: strings.unlockNote()
});
return;
}
@@ -717,8 +714,7 @@ export const useActions = ({
openVault({
item: item,
novault: false,
title: "Create vault",
description: "Set a password to create a vault and lock note."
title: strings.createVault()
});
break;
case VAULT_ERRORS.vaultLocked:
@@ -726,8 +722,7 @@ export const useActions = ({
item: item,
novault: true,
locked: true,
title: "Lock note",
description: "Give access to vault to lock this note."
title: strings.lockNote()
});
break;
}
@@ -738,8 +733,7 @@ export const useActions = ({
try {
if (processingId.current === "copyContent") {
ToastManager.show({
heading: "Please wait...",
message: "We are preparing your note for copy to clipboard",
heading: strings.pleaseWait() + "...",
context: "local"
});
return;
@@ -753,8 +747,7 @@ export const useActions = ({
novault: true,
locked: true,
item: item,
title: "Copy note",
description: "Unlock note to copy to clipboard."
title: strings.copyNote()
});
} else {
processingId.current = "copyContent";
@@ -762,7 +755,7 @@ export const useActions = ({
Clipboard.setString(text || "");
processingId.current = undefined;
ToastManager.show({
heading: "Note copied to clipboard",
heading: strings.noteCopied(),
type: "success",
context: "local"
});
@@ -787,31 +780,31 @@ export const useActions = ({
},
{
id: "remove-from-notebook",
title: "Remove from notebook",
title: strings.removeFromNotebook(),
hidden: noteInCurrentNotebook,
icon: "minus-circle-outline",
func: removeNoteFromNotebook
},
{
id: "attachments",
title: "Attachments",
title: strings.attachments(),
icon: "attachment",
func: showAttachments
},
{
id: "history",
title: "History",
title: strings.history(),
icon: "history",
func: openHistory
},
{
id: "copy-link",
title: "Copy link",
title: strings.copyLink(),
icon: "link",
func: () => {
Clipboard.setString(createInternalLink("note", item.id));
ToastManager.show({
heading: "Note link copied",
heading: strings.linkCopied(),
message: createInternalLink("note", item.id),
context: "local",
type: "success"
@@ -820,17 +813,17 @@ export const useActions = ({
},
{
id: "reminders",
title: "Reminders",
title: strings.dataTypesPluralCamelCase.reminder(),
icon: "clock-outline",
func: async () => {
RelationsList.present({
reference: item,
referenceType: "reminder",
relationType: "from",
title: "Reminders",
title: strings.dataTypesPluralCamelCase.reminder(),
onAdd: () => ReminderSheet.present(undefined, item, true),
button: {
title: "Add",
title: strings.add(),
type: "accent",
onPress: () => ReminderSheet.present(undefined, item, true),
icon: "plus"
@@ -842,40 +835,40 @@ export const useActions = ({
{
id: "copy",
title: "Copy",
title: strings.copy(),
icon: "content-copy",
func: copyContent
},
{
id: "share",
title: "Share",
title: strings.share(),
icon: "share-variant",
func: shareNote
},
{
id: "read-only",
title: "Readonly",
title: strings.readOnly(),
icon: "pencil-lock",
func: toggleReadyOnlyMode,
on: item.readonly
},
{
id: "local-only",
title: "Sync off",
title: strings.syncOff(),
icon: "sync-off",
func: toggleLocalOnly,
on: item.localOnly
},
{
id: "duplicate",
title: "Duplicate",
title: strings.duplicate(),
icon: "content-duplicate",
func: duplicateNote
},
{
id: "add-reminder",
title: "Remind me",
title: strings.remindMe(),
icon: "clock-plus-outline",
func: () => {
ReminderSheet.present(undefined, { id: item.id, type: "note" });
@@ -884,14 +877,14 @@ export const useActions = ({
},
{
id: "lock-unlock",
title: locked ? "Unlock" : "Lock",
title: locked ? strings.unlock() : strings.lock(),
icon: locked ? "lock-open-outline" : "key-outline",
func: addToVault,
on: locked
},
{
id: "publish",
title: isPublished ? "Published" : "Publish",
title: isPublished ? strings.published() : strings.publish(),
icon: "cloud-upload-outline",
on: isPublished,
func: publishNote
@@ -899,7 +892,7 @@ export const useActions = ({
{
id: "export",
title: "Export",
title: strings.export(),
icon: "export",
func: exportNote
},
@@ -907,8 +900,8 @@ export const useActions = ({
{
id: "pin-to-notifications",
title: notifPinned
? "Unpin from notifications"
: "Pin to notifications",
? strings.unpinFromNotifications()
: strings.pinToNotifications(),
icon: "message-badge-outline",
on: !!notifPinned,
func: pinToNotifications
@@ -916,19 +909,19 @@ export const useActions = ({
{
id: "notebooks",
title: "Link Notebooks",
title: strings.linkNotebooks(),
icon: "book-outline",
func: addTo
},
{
id: "add-tag",
title: "Add tags",
title: strings.addTags(),
icon: "pound",
func: addTo
},
{
id: "references",
title: "References",
title: strings.references(),
icon: "vector-link",
func: () => {
ReferencesList.present({

View File

@@ -92,6 +92,7 @@ import { tabBarRef } from "../utils/global-refs";
import { sleep } from "../utils/time";
import { NotesnookModule } from "../utils/notesnook-module";
import { changeSystemBarColors } from "../stores/use-theme-store";
import { strings } from "@notesnook/intl";
const onCheckSyncStatus = async (type: SyncStatusEvent) => {
const { disableSync, disableAutoSync } = SettingsService.get();
@@ -266,7 +267,7 @@ const onSuccessfulSubscription = async (
const onSubscriptionError = async (error: RNIap.PurchaseError) => {
ToastManager.show({
heading: "Failed to subscribe",
heading: strings.failedToSubscribe(),
type: "error",
message: error.message,
context: "local"

View File

@@ -23,6 +23,7 @@ import { useRef } from "react";
import { Platform } from "react-native";
import { Linking } from "react-native";
import deviceInfoModule from "react-native-device-info";
import { strings } from "@notesnook/intl";
const ShortcutsEmitter = new NativeEventEmitter(
Shortcuts as unknown as NativeModule
);
@@ -33,8 +34,8 @@ function isSupported() {
const defaultShortcuts: ShortcutItem[] = [
{
type: "notesnook.action.newnote",
title: "Create a new note",
shortTitle: "New note",
title: strings.createNewNote(),
shortTitle: strings.newNote(),
iconName: Platform.OS === "android" ? "ic_newnote" : "plus"
}
];

View File

@@ -44,6 +44,7 @@ import useNavigationStore from "../stores/use-navigation-store";
import { useSelectionStore } from "../stores/use-selection-store";
import { useSettingStore } from "../stores/use-setting-store";
import { rootNavigatorRef } from "../utils/global-refs";
import { strings } from "@notesnook/intl";
const NativeStack = createNativeStackNavigator();
const IntroStack = createNativeStackNavigator();
@@ -114,7 +115,7 @@ const _Tabs = () => {
initialParams={{
item: { type: "monograph" },
canGoBack: false,
title: "Monographs"
title: strings.monographs()
}}
component={Monographs}
/>

View File

@@ -59,6 +59,7 @@ import {
randId
} from "./tiptap/utils";
import { tabBarRef } from "../../utils/global-refs";
import { strings } from "@notesnook/intl";
const style: ViewStyle = {
height: "100%",
@@ -257,8 +258,7 @@ const useLockedNoteHandler = () => {
if (!tabRef.current?.noteId || !tabRef.current) return;
if (!password || password.trim().length === 0) {
ToastManager.show({
heading: "Password not entered",
message: "Enter a password for the vault and try again.",
heading: strings.passwordNotEntered(),
type: "error"
});
return;
@@ -273,8 +273,7 @@ const useLockedNoteHandler = () => {
await BiometricService.storeCredentials(password);
eSendEvent("vaultUpdated");
ToastManager.show({
heading: "Biometric unlocking enabled!",
message: "Now you can unlock notes in vault with biometrics.",
heading: strings.biometricUnlockEnabled(),
type: "success",
context: "global"
});
@@ -288,9 +287,7 @@ const useLockedNoteHandler = () => {
syncTabs();
} catch (e) {
ToastManager.show({
heading: "Incorrect password",
message:
"Please enter the correct vault password to enable biometrics.",
heading: strings.passwordIncorrect(),
type: "error"
});
}
@@ -304,7 +301,7 @@ const useLockedNoteHandler = () => {
} catch (e) {
console.log(e);
ToastManager.show({
heading: "Incorrect password",
heading: strings.passwordIncorrect(),
type: "error"
});
}

View File

@@ -42,11 +42,12 @@ import { FILE_SIZE_LIMIT, IMAGE_SIZE_LIMIT } from "../../../utils/constants";
import { eCloseSheet } from "../../../utils/events";
import { useTabStore } from "./use-tab-store";
import { editorController, editorState } from "./utils";
import { strings } from "@notesnook/intl";
const showEncryptionSheet = (file: DocumentPickerResponse) => {
presentSheet({
title: "Encrypting attachment",
paragraph: `Please wait while we encrypt ${file.name} file for upload`,
title: strings.encryptingAttachment(),
paragraph: strings.encryptingAttachmentDesc(file.name),
icon: "attachment"
});
};
@@ -92,8 +93,8 @@ const file = async (fileOptions: PickerOptions) => {
if ((file.size || 0) > FILE_SIZE_LIMIT) {
ToastManager.show({
heading: "File too large",
message: "The maximum allowed size per file is 500 MB",
heading: strings.fileTooLarge(),
message: strings.fileTooLargeDesc(500),
type: "error"
});
return;
@@ -101,7 +102,7 @@ const file = async (fileOptions: PickerOptions) => {
if (file.copyError) {
ToastManager.show({
heading: "Failed to open file",
heading: strings.failToOpen(),
message: file.copyError,
type: "error",
context: "global"
@@ -166,8 +167,7 @@ const file = async (fileOptions: PickerOptions) => {
} catch (e) {
eSendEvent(eCloseSheet);
ToastManager.show({
heading: "Failed to attach file",
message: (e as Error).message,
heading: (e as Error).message,
type: "error",
context: "global"
});
@@ -231,7 +231,6 @@ const gallery = async (options: PickerOptions) => {
useSettingStore.getState().setAppDidEnterBackgroundForAction(false);
ToastManager.show({
heading: (e as Error).message,
message: "You need internet access to attach a file",
type: "error",
context: "global"
});
@@ -289,8 +288,8 @@ const handleImageResponse = async (
if (image.size > IMAGE_SIZE_LIMIT) {
ToastManager.show({
heading: "File too large",
message: "The maximum allowed size per image is 50 MB",
heading: strings.fileTooLarge(),
message: strings.fileTooLargeDesc(50),
type: "error"
});
return;
@@ -361,8 +360,7 @@ export async function attachFile(
let encryptionInfo: any;
if (options?.hash && options.hash !== hash) {
ToastManager.show({
heading: "Please select the same file for reuploading",
message: `Expected hash ${options.hash} but got ${hash}.`,
heading: strings.fileMismatch(),
type: "error",
context: "local"
});

View File

@@ -76,13 +76,13 @@ import { EventTypes } from "./editor-events";
import { EditorMessage, EditorProps, useEditorType } from "./types";
import { useTabStore } from "./use-tab-store";
import { EditorEvents, editorState, openInternalLink } from "./utils";
import { strings } from "@notesnook/intl";
const publishNote = async () => {
const user = useUserStore.getState().user;
if (!user) {
ToastManager.show({
heading: "Login required",
message: "Login to publish",
heading: strings.loginRequired(),
context: "global",
func: () => {
eSendEvent(eOpenLoginDialog);
@@ -94,8 +94,7 @@ const publishNote = async () => {
if (!user?.isEmailConfirmed) {
ToastManager.show({
heading: "Email not verified",
message: "Please verify your email first.",
heading: strings.emailNotConfirmed(),
context: "global"
});
return;
@@ -109,7 +108,7 @@ const publishNote = async () => {
const locked = note && (await db.vaults.itemExists(note));
if (locked) {
ToastManager.show({
heading: "Locked notes cannot be published",
heading: strings.lockedNotesPublishFailed(),
type: "error",
context: "global"
});
@@ -135,7 +134,7 @@ const showActionsheet = async () => {
Properties.present(note, ["Dark Mode"]);
} else {
ToastManager.show({
heading: "Start writing to create a new note",
heading: strings.noNoteProperties(),
type: "success",
context: "global"
});
@@ -428,7 +427,7 @@ export const useEditorEvents = (
case EventTypes.reminders:
if (!noteId) {
ToastManager.show({
heading: "Create a note first to add a reminder",
heading: strings.createNoteFirst(),
type: "success"
});
return;
@@ -439,14 +438,14 @@ export const useEditorEvents = (
reference: note as any,
referenceType: "reminder",
relationType: "from",
title: "Reminders",
title: strings.dataTypesPluralCamelCase.reminder(),
onAdd: () => ReminderSheet.present(undefined, note, true)
});
break;
case EventTypes.newtag:
if (!noteId) {
ToastManager.show({
heading: "Create a note first to add a tag",
heading: strings.createNoteFirst(),
type: "success"
});
return;

View File

@@ -74,6 +74,7 @@ import {
post
} from "./utils";
import { sleep } from "../../../utils/time";
import { strings } from "@notesnook/intl";
type NoteWithContent = Note & {
content?: NoteContent<false>;
@@ -342,14 +343,11 @@ export const useEditor = (
if (!db.vault.unlocked) {
if (pendingChanges) await sleep(3000);
const unlocked = await unlockVault({
title: "Unlock vault to save note",
paragraph: `This note is locked, unlock to save ${
pendingChanges ? "some pending" : ""
} changes`,
title: strings.unlockNote(),
paragraph: strings.noteLockedSave(),
context: "global"
});
if (!unlocked)
throw new Error("Could not save note, vault is locked");
if (!unlocked) throw new Error(strings.saveFailedVaultLocked());
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
if (typeof noteData.title === "string") {

View File

@@ -33288,10 +33288,14 @@
"version": "0.3.25",
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
"@jridgewell/resolve-uri": "3.1.0",
"@jridgewell/sourcemap-codec": "1.4.14"
}
},
"node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"license": "MIT"
},
"node_modules/@lingui/core": {
"version": "4.11.2",
"resolved": "https://registry.npmjs.org/@lingui/core/-/core-4.11.2.tgz",

View File

@@ -992,7 +992,8 @@
"@dnd-kit/sortable": "^8.0.0",
"@emotion/react": "11.11.1",
"@hazae41/foras": "^2.1.4",
"@henrygd/queue": "^1.0.6",
"@lingui/core": "4.11.2",
"@lingui/react": "4.11.2",
"@mdi/js": "^7.2.96",
"@mdi/react": "^1.6.1",
"@notesnook-importer/core": "^2.1.1",
@@ -1001,6 +1002,7 @@
"@notesnook/crypto": "file:../../packages/crypto",
"@notesnook/desktop": "file:../desktop",
"@notesnook/editor": "file:../../packages/editor",
"@notesnook/intl": "file:../../packages/intl",
"@notesnook/logger": "file:../../packages/logger",
"@notesnook/streamable-fs": "file:../../packages/streamable-fs",
"@notesnook/theme": "file:../../packages/theme",
@@ -1058,6 +1060,7 @@
"react-virtuoso": "^4.6.2",
"timeago.js": "4.0.2",
"tinycolor2": "^1.6.0",
"vite-plugin-commonjs": "^0.10.1",
"w3c-keyname": "^2.2.6",
"web-streams-polyfill": "^3.1.1",
"wouter": "2.12.1",

File diff suppressed because it is too large Load Diff

View File

@@ -13,6 +13,10 @@ msgstr ""
"Language-Team: \n"
"Plural-Forms: \n"
#: src/strings.tsx:688
msgid "— not just the"
msgstr "— not just the"
#: src/strings.tsx:461
msgid "\"I understand, change my password\""
msgstr "\"I understand, change my password\""
@@ -37,10 +41,18 @@ msgstr "{0}... Please wait"
msgid "{count, plural, one {# note} other {# notes} _0 {No notes}}"
msgstr "{count, plural, one {# note} other {# notes} _0 {No notes}}"
#: src/strings.tsx:721
msgid "{count, plural, one {Are you sure you want to delete this {0} permanently?} other {Are you sure you want to delete these {1} permanently?}}"
msgstr "{count, plural, one {Are you sure you want to delete this {0} permanently?} other {Are you sure you want to delete these {1} permanently?}}"
#: src/strings.tsx:55
msgid "{count, plural, one {Are you sure you want to download all attachments of this note?} other {Are you sure you want to download all attachments?}}"
msgstr "{count, plural, one {Are you sure you want to download all attachments of this note?} other {Are you sure you want to download all attachments?}}"
#: src/strings.tsx:742
msgid "{count, plural, one {Are you sure you want to move this notebook to {selectedNotebookTitle}?} other {Are you sure you want to move these # notebooks {selectedNotebookTitle}?}}"
msgstr "{count, plural, one {Are you sure you want to move this notebook to {selectedNotebookTitle}?} other {Are you sure you want to move these # notebooks {selectedNotebookTitle}?}}"
#: src/strings.tsx:105
msgid "{count, plural, one {Attach image} other {Attach # images}}"
msgstr "{count, plural, one {Attach image} other {Attach # images}}"
@@ -49,6 +61,10 @@ msgstr "{count, plural, one {Attach image} other {Attach # images}}"
msgid "{count, plural, one {Attachment downloaded at {path}} other {#/{total} attachments downloaded as a zip file at {path}}}"
msgstr "{count, plural, one {Attachment downloaded at {path}} other {#/{total} attachments downloaded as a zip file at {path}}}"
#: src/strings.tsx:712
msgid "{count, plural, one {Delete {0}} other {Delete {1}}}"
msgstr "{count, plural, one {Delete {0}} other {Delete {1}}}"
#: src/strings.tsx:49
#~ msgid "{count, plural, one {Failed to download attachment {count}} other {Failed to download # attachments {count}}}"
#~ msgstr "{count, plural, one {Failed to download attachment {count}} other {Failed to download # attachments {count}}}"
@@ -61,6 +77,10 @@ msgstr "{count, plural, one {Attachment downloaded at {path}} other {#/{total} a
msgid "{count, plural, one {Failed to download attachment} other {Failed to download # attachments}}"
msgstr "{count, plural, one {Failed to download attachment} other {Failed to download # attachments}}"
#: src/strings.tsx:740
msgid "{count, plural, one {Move notebook} other {Move # notebooks}}"
msgstr "{count, plural, one {Move notebook} other {Move # notebooks}}"
#: src/strings.tsx:403
msgid "{count, plural, one {Moving {title}} other {Moving # notebooks}}"
msgstr "{count, plural, one {Moving {title}} other {Moving # notebooks}}"
@@ -210,6 +230,10 @@ msgstr "Applied as light theme"
msgid "Apply changes"
msgstr "Apply changes"
#: src/strings.tsx:708
msgid "Are you sure you want to delete this note permanently?"
msgstr "Are you sure you want to delete this note permanently?"
#: src/strings.tsx:64
#~ msgid "Are you sure you want to download all attachments"
#~ msgstr "Are you sure you want to download all attachments"
@@ -246,6 +270,14 @@ msgstr "Audio"
msgid "Backup failed"
msgstr "Backup failed"
#: src/strings.tsx:760
msgid "Backup is encrypted"
msgstr "Backup is encrypted"
#: src/strings.tsx:766
msgid "Backup restored"
msgstr "Backup restored"
#: src/strings.tsx:414
msgid "Backups"
msgstr "Backups"
@@ -262,6 +294,14 @@ msgstr "Basic"
msgid "BETA"
msgstr "BETA"
#: src/strings.tsx:672
msgid "Biometric unlocking disabled"
msgstr "Biometric unlocking disabled"
#: src/strings.tsx:671
msgid "Biometric unlocking enabled"
msgstr "Biometric unlocking enabled"
#: src/strings.tsx:341
msgid "By"
msgstr "By"
@@ -444,6 +484,10 @@ msgstr "Delete permanently"
msgid "Deleted on {date}"
msgstr "Deleted on {date}"
#: src/strings.tsx:749
msgid "Did you save recovery key?"
msgstr "Did you save recovery key?"
#: src/strings.tsx:135
msgid "Disabled"
msgstr "Disabled"
@@ -472,6 +516,10 @@ msgstr "Done"
msgid "Download"
msgstr "Download"
#: src/strings.tsx:666
msgid "Download started... Please wait"
msgstr "Download started... Please wait"
#: src/strings.tsx:434
msgid "Download successful"
msgstr "Download successful"
@@ -517,6 +565,10 @@ msgstr "Email is required"
msgid "Email not confirmed"
msgstr "Email not confirmed"
#: src/strings.tsx:736
msgid "Email updated to {email}"
msgstr "Email updated to {email}"
#: src/strings.tsx:121
msgid "Enable"
msgstr "Enable"
@@ -529,6 +581,10 @@ msgstr "Enable two-factor authentication to add an extra layer of security to yo
msgid "Encrypted and synced"
msgstr "Encrypted and synced"
#: src/strings.tsx:680
msgid "End to end encrypted."
msgstr "End to end encrypted."
#: src/strings.tsx:335
msgid "Enter 6 digit code"
msgstr "Enter 6 digit code"
@@ -537,6 +593,10 @@ msgstr "Enter 6 digit code"
msgid "Enter code from authenticator app"
msgstr "Enter code from authenticator app"
#: src/strings.tsx:735
msgid "Enter notebook title"
msgstr "Enter notebook title"
#: src/strings.tsx:665
msgid "Enter password"
msgstr "Enter password"
@@ -657,6 +717,10 @@ msgstr "Hash copied"
msgid "Help improve Notesnook by sending completely anonymized"
msgstr "Help improve Notesnook by sending completely anonymized"
#: src/strings.tsx:758
msgid "hr"
msgstr "hr"
#: src/strings.tsx:95
msgid "I don't have access to authenticator app"
msgstr "I don't have access to authenticator app"
@@ -757,6 +821,10 @@ msgstr "Light"
msgid "LINK TO A SECTION"
msgstr "LINK TO A SECTION"
#: src/strings.tsx:730
msgid "Link to notebook"
msgstr "Link to notebook"
#: src/strings.tsx:501
msgid "Linked notes"
msgstr "Linked notes"
@@ -817,6 +885,10 @@ msgstr "Logout from this device"
msgid "Manage subscription on desktop"
msgstr "Manage subscription on desktop"
#: src/strings.tsx:729
msgid "Manage tags"
msgstr "Manage tags"
#: src/strings.tsx:213
msgid "Migrating {0} {1}... please wait"
msgstr "Migrating {0} {1}... please wait"
@@ -825,6 +897,10 @@ msgstr "Migrating {0} {1}... please wait"
#~ msgid "Migrating database{0} {1}... please wait"
#~ msgstr "Migrating database{0} {1}... please wait"
#: src/strings.tsx:757
msgid "min"
msgstr "min"
#: src/strings.tsx:578
msgid "mo"
msgstr "mo"
@@ -837,6 +913,10 @@ msgstr "Mon"
msgid "Monday"
msgstr "Monday"
#: src/strings.tsx:748
msgid "Monograph URL copied"
msgstr "Monograph URL copied"
#: src/strings.tsx:305
msgid "month"
msgstr "month"
@@ -850,6 +930,10 @@ msgstr "Month"
msgid "Monthly"
msgstr "Monthly"
#: src/strings.tsx:731
msgid "Move"
msgstr "Move"
#: src/strings.tsx:491
msgid "Move selected notes"
msgstr "Move selected notes"
@@ -858,6 +942,14 @@ msgstr "Move selected notes"
msgid "Move to top"
msgstr "Move to top"
#: src/strings.tsx:734
msgid "Move to trash"
msgstr "Move to trash"
#: src/strings.tsx:764
msgid "Name"
msgstr "Name"
#: src/strings.tsx:327
msgid "Never"
msgstr "Never"
@@ -898,6 +990,10 @@ msgstr "Next"
msgid "No"
msgstr "No"
#: src/strings.tsx:738
msgid "No application found to open {fileToOpen}"
msgstr "No application found to open {fileToOpen}"
#: src/strings.tsx:60
msgid "No attachments."
msgstr "No attachments."
@@ -963,10 +1059,34 @@ msgstr "note"
msgid "Note"
msgstr "Note"
#: src/strings.tsx:675
msgid "Note copied to clipboard"
msgstr "Note copied to clipboard"
#: src/strings.tsx:709
msgid "Note deleted"
msgstr "Note deleted"
#: src/strings.tsx:386
msgid "Note history"
msgstr "Note history"
#: src/strings.tsx:670
msgid "Note locked"
msgstr "Note locked"
#: src/strings.tsx:706
msgid "Note restored"
msgstr "Note restored"
#: src/strings.tsx:705
msgid "Note restored from history"
msgstr "Note restored from history"
#: src/strings.tsx:674
msgid "Note unlocked"
msgstr "Note unlocked"
#: src/strings.tsx:148
msgid "Note version history is local only."
msgstr "Note version history is local only."
@@ -979,6 +1099,10 @@ msgstr "notebook"
msgid "Notebook"
msgstr "Notebook"
#: src/strings.tsx:702
msgid "Notebook restored"
msgstr "Notebook restored"
#: src/strings.tsx:264
msgid "notebooks"
msgstr "notebooks"
@@ -1035,6 +1159,14 @@ msgstr "Open in browser"
msgid "Open issue"
msgstr "Open issue"
#: src/strings.tsx:679
msgid "Open source."
msgstr "Open source."
#: src/strings.tsx:761
msgid "Password"
msgstr "Password"
#: src/strings.tsx:645
msgid "Password change failed"
msgstr "Password change failed"
@@ -1043,6 +1175,10 @@ msgstr "Password change failed"
msgid "Password changed successfully"
msgstr "Password changed successfully"
#: src/strings.tsx:668
msgid "Password does not match"
msgstr "Password does not match"
#: src/strings.tsx:657
msgid "Password incorrect"
msgstr "Password incorrect"
@@ -1051,10 +1187,18 @@ msgstr "Password incorrect"
#~ msgid "Password is too short"
#~ msgstr "Password is too short"
#: src/strings.tsx:667
msgid "Password not entered"
msgstr "Password not entered"
#: src/strings.tsx:227
msgid "Password protection"
msgstr "Password protection"
#: src/strings.tsx:669
msgid "Password updated"
msgstr "Password updated"
#: src/strings.tsx:662
msgid "PDF is password protected"
msgstr "PDF is password protected"
@@ -1063,6 +1207,10 @@ msgstr "PDF is password protected"
msgid "Permanent"
msgstr "Permanent"
#: src/strings.tsx:704
msgid "Permanently deleted notebook"
msgstr "Permanently deleted notebook"
#: src/strings.tsx:438
msgid "Pinned"
msgstr "Pinned"
@@ -1075,6 +1223,10 @@ msgstr "Please enter the password to unlock the PDF and view the content."
msgid "Please fill all the fields to continue."
msgstr "Please fill all the fields to continue."
#: src/strings.tsx:751
msgid "Please make sure you have saved the recovery key. Tap one more time to confirm."
msgstr "Please make sure you have saved the recovery key. Tap one more time to confirm."
#: src/strings.tsx:275
#~ msgid ""
#~ "Please note that we will respond to your issue on the given\n"
@@ -1115,6 +1267,10 @@ msgstr "PRESETS"
msgid "Preview not available, content is encrypted."
msgstr "Preview not available, content is encrypted."
#: src/strings.tsx:687
msgid "Privacy for everyone"
msgstr "Privacy for everyone"
#: src/strings.tsx:74
msgid "Privacy Policy."
msgstr "Privacy Policy."
@@ -1123,6 +1279,14 @@ msgstr "Privacy Policy."
msgid "private analytics and bug reports."
msgstr "private analytics and bug reports."
#: src/strings.tsx:681
msgid "Private."
msgstr "Private."
#: src/strings.tsx:689
msgid "privileged few"
msgstr "privileged few"
#: src/strings.tsx:337
msgid "Protect your notes"
msgstr "Protect your notes"
@@ -1175,6 +1339,18 @@ msgstr "Recovery email has been sent to your email address. Please check your in
msgid "Recovery email sent!"
msgstr "Recovery email sent!"
#: src/strings.tsx:754
msgid "Recovery key copied"
msgstr "Recovery key copied"
#: src/strings.tsx:752
msgid "Recovery key QR code saved"
msgstr "Recovery key QR code saved"
#: src/strings.tsx:753
msgid "Recovery key text file saved"
msgstr "Recovery key text file saved"
#: src/strings.tsx:309
msgid "REFERENCED IN"
msgstr "REFERENCED IN"
@@ -1215,10 +1391,18 @@ msgstr "Remove shortcut"
msgid "Rename"
msgstr "Rename"
#: src/strings.tsx:763
msgid "Rename color"
msgstr "Rename color"
#: src/strings.tsx:629
msgid "Rename file"
msgstr "Rename file"
#: src/strings.tsx:762
msgid "Rename tag"
msgstr "Rename tag"
#: src/strings.tsx:503
msgid "Repeat"
msgstr "Repeat"
@@ -1243,6 +1427,18 @@ msgstr "Resend code in ({seconds})"
msgid "Restore"
msgstr "Restore"
#: src/strings.tsx:767
msgid "Restore failed"
msgstr "Restore failed"
#: src/strings.tsx:703
msgid "Restore notebook"
msgstr "Restore notebook"
#: src/strings.tsx:710
msgid "Restored successfully"
msgstr "Restored successfully"
#: src/strings.tsx:313
msgid "Restoring"
msgstr "Restoring"
@@ -1419,6 +1615,10 @@ msgstr "Share note"
msgid "Share to cloud"
msgstr "Share to cloud"
#: src/strings.tsx:701
msgid "Shortcut created"
msgstr "Shortcut created"
#: src/strings.tsx:66
msgid "Sign up"
msgstr "Sign up"
@@ -1612,6 +1812,14 @@ msgstr "Two-factor authentication enabled"
msgid "Undo"
msgstr "Undo"
#: src/strings.tsx:733
msgid "Unfavorite"
msgstr "Unfavorite"
#: src/strings.tsx:732
msgid "Unlink notebook"
msgstr "Unlink notebook"
#: src/strings.tsx:127
msgid "Unlock"
msgstr "Unlock"
@@ -1621,6 +1829,10 @@ msgstr "Unlock"
msgid "Unlock note"
msgstr "Unlock note"
#: src/strings.tsx:765
msgid "Unlock note to delete it"
msgstr "Unlock note to delete it"
#: src/strings.tsx:454
msgid "Unlock with biometrics"
msgstr "Unlock with biometrics"
@@ -1700,6 +1912,10 @@ msgstr ""
"$count$: Number of notes + 1.\n"
"$headline$: Use starting line of the note as title."
#: src/strings.tsx:673
msgid "Vault created"
msgstr "Vault created"
#: src/strings.tsx:377
msgid "Vault Fingerprint Unlock"
msgstr "Vault Fingerprint Unlock"
@@ -1757,6 +1973,10 @@ msgstr "Weekly"
msgid "Welcome back, {email}"
msgstr "Welcome back, {email}"
#: src/strings.tsx:683
msgid "Write notes with freedom, no spying, no tracking."
msgstr "Write notes with freedom, no spying, no tracking."
#: src/strings.tsx:306
msgid "year"
msgstr "year"
@@ -1782,6 +2002,10 @@ msgstr "You also agree to recieve marketing emails from us which you can opt-out
msgid "You can track your issue at"
msgstr "You can track your issue at"
#: src/strings.tsx:696
msgid "You simply cannot get any better of a note taking app than @notesnook. The UI is clean and slick, it is feature rich, encrypted, reasonably priced (esp. for students & educators) & open source"
msgstr "You simply cannot get any better of a note taking app than @notesnook. The UI is clean and slick, it is feature rich, encrypted, reasonably priced (esp. for students & educators) & open source"
#: src/strings.tsx:592
msgid "You subscribed to Notesnook Pro on Android Phone/Tablet using Google In App Purchase."
msgstr "You subscribed to Notesnook Pro on Android Phone/Tablet using Google In App Purchase."
@@ -1806,6 +2030,10 @@ msgstr "Your account is now 100% secure against unauthorized logins."
msgid "Your email is not confirmed. Please confirm your email address to change account password."
msgstr "Your email is not confirmed. Please confirm your email address to change account password."
#: src/strings.tsx:692
msgid "Your privacy matters to us, no matter who you are. In a world where everyone is trying to spy on you, Notesnook encrypts all your data before it leaves your device. With Notesnook no one can ever sell your data again."
msgstr "Your privacy matters to us, no matter who you are. In a world where everyone is trying to spy on you, Notesnook encrypts all your data before it leaves your device. With Notesnook no one can ever sell your data again."
#: src/strings.tsx:69
msgid "Your session has expired. Please enter password for {obfuscatedEmail} to continue."
msgstr "Your session has expired. Please enter password for {obfuscatedEmail} to continue."

View File

@@ -676,5 +676,162 @@ $headline$: Use starting line of the note as title.`,
fileLengthMismatch: (expectedSize: number, currentSize: number) =>
t`File length mismatch. Expected ${expectedSize} but got ${currentSize} bytes. Please upload this file again from the attachment manager.`,
failedToResolvedDownloadUrl: () => t`Failed to resolve download url`,
fileSize: () => `File size`
fileSize: () => `File size`,
donwloadStarted: () => t`Download started... Please wait`,
passwordNotEntered: () => t`Password not entered`,
passwordNotMatched: () => t`Password does not match`,
passwordUpdated: () => t`Password updated`,
noteLocked: () => t`Note locked`,
biometricUnlockEnabled: () => t`Biometric unlocking enabled`,
biometricUnlockDisabled: () => t`Biometric unlocking disabled`,
vaultCreated: () => t`Vault created`,
noteUnlocked: () => t`Note unlocked`,
noteCopied: () => t`Note copied to clipboard`,
introData: [
{
headings: [
() => t`Open source.`,
() => t`End to end encrypted.`,
() => t`Private.`
],
body: () => t`Write notes with freedom, no spying, no tracking.`
},
{
headings: [
() => t`Privacy for everyone`,
() => t`— not just the`,
() => t`privileged few`
],
body: () =>
t`Your privacy matters to us, no matter who you are. In a world where everyone is trying to spy on you, Notesnook encrypts all your data before it leaves your device. With Notesnook no one can ever sell your data again.`
},
{
tesimonial: () =>
t`You simply cannot get any better of a note taking app than @notesnook. The UI is clean and slick, it is feature rich, encrypted, reasonably priced (esp. for students & educators) & open source`,
link: "https://twitter.com/andrewsayer/status/1637817220113002503",
user: "@andrewsayer on Twitter"
}
],
shortcutCreated: () => t`Shortcut created`,
notebookRestored: () => t`Notebook restored`,
restoreNotebook: () => t`Restore notebook`,
permanentlyDeletedNotebook: () => t`Permanently deleted notebook`,
noteRestoredFromHistory: () => t`Note restored from history`,
noteRestored: () => t`Note restored`,
deleteNoteConfirmation: () =>
t`Are you sure you want to delete this note permanently?`,
noteDeleted: () => t`Note deleted`,
restored: () => t`Restored successfully`,
deleteItems: (type: string, count: number) =>
plural(count, {
one: `Delete ${strings.dataTypes[
type as keyof typeof strings.dataTypes
]()}`,
other: `Delete ${strings.dataTypesPlural[
type as keyof typeof strings.dataTypes
]()}`
}),
deleteItemsConfirmation: (type: string, count: number) =>
plural(count, {
one: `Are you sure you want to delete this ${strings.dataTypes[
type as keyof typeof strings.dataTypes
]()} permanently?`,
other: `Are you sure you want to delete these ${strings.dataTypesPlural[
type as keyof typeof strings.dataTypes
]()} permanently?`
}),
manageTags: () => t`Manage tags`,
linkNotebook: () => t`Link to notebook`,
move: () => t`Move`,
unlinkNotebook: () => t`Unlink notebook`,
unfavorite: () => t`Unfavorite`,
moveToTrash: () => t`Move to trash`,
enterNotebookTitle: () => t`Enter notebook title`,
emailUpdated: (email: string) => t`Email updated to ${email}`,
noApplicationFound: (fileToOpen: string) =>
t`No application found to open ${fileToOpen}`,
moveNotebooks: (count: number) =>
plural(count, { one: "Move notebook", other: `Move # notebooks` }),
moveNotebooksConfirm: (count: number, selectedNotebookTitle: string) =>
plural(count, {
one: `Are you sure you want to move this notebook to ${selectedNotebookTitle}?`,
other: `Are you sure you want to move these # notebooks ${selectedNotebookTitle}?`
}),
failedToPublish: () => t`Failed to publish note`,
failedToUnpublish: () => t`Failed to unpublish note`,
monographUrlCopied: () => t`Monograph URL copied`,
recoveryKeySaved: () => t`Did you save recovery key?`,
recoveryKeySavedDesc: () =>
t`Please make sure you have saved the recovery key. Tap one more time to confirm.`,
recoveryKeyQRCodeSaved: () => t`Recovery key QR code saved`,
recoveryKeyTextFileSaved: () => t`Recovery key text file saved`,
recoveryKeyCopied: () => t`Recovery key copied`,
timeShort: {
second: () => t`sec`,
minute: () => t`min`,
hour: () => t`hr`
},
backupEncrypted: () => t`Backup is encrypted`,
password: () => t`Password`,
renameTag: () => t`Rename tag`,
renameColor: () => t`Rename color`,
name: () => t`Name`,
unlockToDelete: () => t`Unlock note to delete it`,
backupRestored: () => t`Backup restored`,
restoreFailed: () => t`Restore failed`,
itemDeleted: (count: number, type: string) =>
plural(count, {
one: `1 ${strings.dataTypesCamelCase[
type as keyof typeof strings.dataTypesCamelCase
]()} deleted`,
other: `# ${strings.dataTypes[
type as keyof typeof strings.dataTypes
]()} deleted`
}),
reorder: () => t`Reorder`,
turnOffReminder: () => t`Turn off reminder`,
turnOnReminder: () => t`Turn on reminder`,
addShortcut: () => t`Add shortcut`,
addNotebook: () => t`Add notebook`,
removeAsDefault: () => t`Remove as default`,
setAsDefault: () => t`Set as default`,
moveNotes: () => t`Move notes`,
unpin: () => t`Unpin`,
pin: () => t`Pin`,
lockedNotesPinnedFailed: () => t`Locked notes cannot be pinned`,
loginRequired: () => t`Login required`,
confirmEmailToPublish: () => t`Confirm email to publish note`,
lockedNotesPublishFailed: () => t`Locked notes cannot be published`,
notePreparingForShare: () => t`Preparing note for share`,
removeFromNotebook: () => t`Remove from notebook`,
attachments: () => t`Attachments`,
history: () => t`History`,
copyLink: () => t`Copy link`,
linkCopied: () => t`Link copied`,
readOnly: () => t`Read only`,
syncOff: () => t`Sync off`,
duplicate: () => t`Duplicate`,
remindMe: () => t`Remind me`,
published: () => t`Published`,
unpinFromNotifications: () => t`Unpin from notifications`,
pinToNotifications: () => t`Pin to notifications`,
linkNotebooks: () => t`Link notebooks`,
addTags: () => t`Add tags`,
references: () => t`References`,
moveNotebookFix: () => t`Move notebook`,
failedToSubscribe: () => t`Failed to subscribe`,
createNewNote: () => t`Create a new note`,
monographs: () => t`Monographs`,
encryptingAttachment: () => t`Encrypting attachment`,
encryptingAttachmentDesc: (name: string) =>
t`Please wait while we encrypt ${name} for upload.`,
fileTooLarge: () => t`File too large`,
fileTooLargeDesc: (sizeInMB: number) =>
t`File size should be less than ${sizeInMB}MB`,
failToOpen: () => t`Failed to open`,
fileMismatch: () => t`File mismatch`,
noNoteProperties: () => t`Start writing to create a new note`,
createNoteFirst: () => t`Create a note first`,
noteLockedSave: () => t`This note is locked. Unlock note to save changes`,
saveFailedVaultLocked: () => t`Save failed. Vault is locked`
};