111
public/locales/ar/auth.json
Normal file
111
public/locales/ar/auth.json
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"validationError": "Validation Error",
|
||||||
|
"primaryUsernameRequired": "Primary username is required for sub account login",
|
||||||
|
"subNameRequired": "Sub account name is required for sub account login",
|
||||||
|
"usernameRequired": "Username is required",
|
||||||
|
"passwordRequired": "Password is required",
|
||||||
|
"loginFailed": "Login Failed",
|
||||||
|
"genericError": "An error occurred, please try again",
|
||||||
|
"providerLoginFailed": "{{provider}} Login Failed",
|
||||||
|
"providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again",
|
||||||
|
"providerLoginError": "{{provider}} Login Error",
|
||||||
|
"networkError": "Network error occurred, please try again",
|
||||||
|
"mfaFailed": "Two-Factor Authentication Failed",
|
||||||
|
"oauthError": "OAuth Error",
|
||||||
|
"oauthBrowserFailed": "Failed to open authentication browser",
|
||||||
|
"primaryAccount": "Primary Account",
|
||||||
|
"subAccount": "Sub Account",
|
||||||
|
"username": "Username",
|
||||||
|
"primaryUsernamePlaceholder": "Enter primary account username",
|
||||||
|
"subNamePlaceholder": "Enter sub account name",
|
||||||
|
"forgotPassword": "Forgot password?",
|
||||||
|
"or": "or",
|
||||||
|
"email": "Email",
|
||||||
|
"displayNamePlaceholder": "How others see your name",
|
||||||
|
"signupFailed": "Signup Failed",
|
||||||
|
"signupDisabled": "Signup disabled, please contact admin",
|
||||||
|
"usernameMinLength": "Username must be at least 4 characters",
|
||||||
|
"invalidEmail": "Invalid email address",
|
||||||
|
"passwordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"displayNameRequired": "Display name is required",
|
||||||
|
"displayNameChars": "Display name can only contain letters and numbers",
|
||||||
|
"resetEmailSent": "Reset Email Sent",
|
||||||
|
"resetEmailSentMsg": "Check your email for password reset instructions",
|
||||||
|
"resetFailed": "Reset Failed",
|
||||||
|
"resetFailedMsg": "Failed to send reset email, please try again later",
|
||||||
|
"emailPlaceholder": "you@example.com",
|
||||||
|
"passwordUpdated": "Password Updated",
|
||||||
|
"passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...",
|
||||||
|
"passwordUpdateFailed": "Password Update Failed",
|
||||||
|
"passwordUpdateFailedMsg": "Failed to update password, please try again later",
|
||||||
|
"savePassword": "Save password",
|
||||||
|
"server": {
|
||||||
|
"url": "Server URL",
|
||||||
|
"dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.",
|
||||||
|
"unreachable": "Unable to reach the server. Check the URL, port, and network connection.",
|
||||||
|
"invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed."
|
||||||
|
},
|
||||||
|
"mfaModal": {
|
||||||
|
"title": "Two-factor authentication",
|
||||||
|
"codeRequired": "Please enter a verification code",
|
||||||
|
"verifyFailed": "Failed to verify code. Please try again.",
|
||||||
|
"backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.",
|
||||||
|
"codeHint": "Enter the 6-digit code from your authenticator app.",
|
||||||
|
"verify": "Verify & Sign In",
|
||||||
|
"backupLabel": "Backup code",
|
||||||
|
"codeLabel": "Verification code",
|
||||||
|
"backupPlaceholder": "Enter backup code",
|
||||||
|
"useAuthenticator": "Use authenticator app instead",
|
||||||
|
"useBackup": "Use a backup code instead",
|
||||||
|
"backupOnce": "Each backup code can only be used once.",
|
||||||
|
"invalidCode": "Invalid verification code. Please try again."
|
||||||
|
},
|
||||||
|
"appleLoginFailed": "Apple Login Failed",
|
||||||
|
"googleLoginFailed": "Google Login Failed",
|
||||||
|
"createOne": "Create one",
|
||||||
|
"primaryAccountUsernameLabel": "Primary account username",
|
||||||
|
"subAccountNameLabel": "Sub account name",
|
||||||
|
"serverSettings": "Server settings",
|
||||||
|
"useDifferentAccount": "Use a different account",
|
||||||
|
"yourUsername": "Your username",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"confirmNewPassword": "Confirm new password",
|
||||||
|
"newPassword": "New password",
|
||||||
|
"reenterPassword": "Re-enter your password",
|
||||||
|
"requestNewLink": "Request a new link",
|
||||||
|
"setNewPassword": "Set a new password",
|
||||||
|
"linkInvalid": "This link is not valid",
|
||||||
|
"createAccountButton": "Create account",
|
||||||
|
"createYourAccount": "Create your account",
|
||||||
|
"displayNameLabel": "Display name",
|
||||||
|
"usernameHint": "lowercase letters, numbers, dot and dash",
|
||||||
|
"termsShort": "By creating an account you agree to our Terms of Service and Privacy",
|
||||||
|
"checkYourEmail": "Check your email",
|
||||||
|
"resetYourPassword": "Reset your password",
|
||||||
|
"serverChangeWarning": "Changing the server clears locally cached data on this device.",
|
||||||
|
"serverConnected": "Connected. Taking you to sign in...",
|
||||||
|
"passwordLabel": "Password",
|
||||||
|
"showPassword": "Show password",
|
||||||
|
"hidePassword": "Hide password",
|
||||||
|
"loginPasswordPlaceholder": "Enter your password",
|
||||||
|
"signupPasswordPlaceholder": "At least 8 characters",
|
||||||
|
"signupPasswordHelper": "Use 8 to 64 characters.",
|
||||||
|
"orContinueWith": "or continue with",
|
||||||
|
"signupSignInFailed": "Your account was created, but signing in failed. Please sign in.",
|
||||||
|
"authenticating": {
|
||||||
|
"signingIn": "Signing you in",
|
||||||
|
"signingInSub": "This will only take a moment.",
|
||||||
|
"unknownProvider": "Unknown sign-in provider",
|
||||||
|
"contactSupport": "Please contact support.",
|
||||||
|
"signInFailed": "Sign-in failed",
|
||||||
|
"mfaCancelled": "Two-factor authentication was cancelled.",
|
||||||
|
"requestNotVerified": "The sign-in request could not be verified.",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"mfaSessionMissing": "The MFA session is missing. Please try again.",
|
||||||
|
"twoFactor": "Two-factor authentication",
|
||||||
|
"verifyToContinue": "Verify your login to continue.",
|
||||||
|
"noToken": "No valid authentication token was returned.",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"mfaFailed": "Two-factor authentication failed. Please try again."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,5 +71,11 @@
|
|||||||
"reset": "إعادة تعيين المؤقت",
|
"reset": "إعادة تعيين المؤقت",
|
||||||
"delete": "حذف الجلسة"
|
"delete": "حذف الجلسة"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"toolbar": {
|
||||||
|
"defaultProject": "Default Project"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"assignedToMe": "Assigned to me"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,8 @@
|
|||||||
"filters": "الفلاتر",
|
"filters": "الفلاتر",
|
||||||
"activities": "الأنشطة",
|
"activities": "الأنشطة",
|
||||||
"points": "النقاط",
|
"points": "النقاط",
|
||||||
"settings": "الإعدادات"
|
"settings": "الإعدادات",
|
||||||
|
"reportBug": "Report a Bug"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"title": "بحث",
|
"title": "بحث",
|
||||||
@@ -64,11 +65,7 @@
|
|||||||
"footer": {
|
"footer": {
|
||||||
"navigate": "تنقل",
|
"navigate": "تنقل",
|
||||||
"open": "فتح",
|
"open": "فتح",
|
||||||
"results_zero": "لا توجد نتائج",
|
|
||||||
"results_one": "نتيجة واحدة",
|
"results_one": "نتيجة واحدة",
|
||||||
"results_two": "نتيجتان",
|
|
||||||
"results_few": "{{count}} نتائج",
|
|
||||||
"results_many": "{{count}} نتيجة",
|
|
||||||
"results_other": "{{count}} نتيجة",
|
"results_other": "{{count}} نتيجة",
|
||||||
"typeToSearch": "اكتب للبحث"
|
"typeToSearch": "اكتب للبحث"
|
||||||
}
|
}
|
||||||
@@ -118,5 +115,37 @@
|
|||||||
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
||||||
"open": "Open the issue"
|
"open": "Open the issue"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"done": "Done",
|
||||||
|
"clearAll": "Clear all",
|
||||||
|
"upload": {
|
||||||
|
"quotaTitle": "Storage Quota Exceeded",
|
||||||
|
"quotaMessage": "You have exceeded your quota for uploading files.",
|
||||||
|
"tooLargeTitle": "File Too Large",
|
||||||
|
"tooLargeMessage": "The file you are trying to upload is too large.",
|
||||||
|
"deniedTitle": "Permission Denied",
|
||||||
|
"deniedMessage": "You do not have permission to upload files."
|
||||||
|
},
|
||||||
|
"getStarted": "Get Started!",
|
||||||
|
"imageLoadFailed": "Failed to load image.",
|
||||||
|
"typeHere": "Type in here…",
|
||||||
|
"summaryOfChores": "This is a summary of your chores",
|
||||||
|
"loadingOffline": "You are offline",
|
||||||
|
"loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.",
|
||||||
|
"loadingSlow": "This is taking longer than usual. There might be an issue.",
|
||||||
|
"navigateBack": "Navigate Back",
|
||||||
|
"bottomNav": "Bottom Navigation",
|
||||||
|
"profile": "Profile",
|
||||||
|
"autocompletePlaceholder": "Type here...",
|
||||||
|
"errorScreen": {
|
||||||
|
"title": "Something went wrong",
|
||||||
|
"fallback": "An unexpected error occurred. Try reloading — it usually fixes it.",
|
||||||
|
"tryAgain": "Try again",
|
||||||
|
"home": "Home",
|
||||||
|
"login": "Login",
|
||||||
|
"hideDetails": "Hide error details",
|
||||||
|
"showDetails": "Show error details",
|
||||||
|
"copyToClipboard": "Copy to clipboard",
|
||||||
|
"copied": "Error details copied to clipboard"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
public/locales/ar/filters.json
Normal file
17
public/locales/ar/filters.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"builder": {
|
||||||
|
"errorName": "Please enter a filter name",
|
||||||
|
"errorConditions": "Please configure at least one filter condition",
|
||||||
|
"editTitle": "Edit Filter",
|
||||||
|
"newTitle": "New Filter",
|
||||||
|
"addConditions": "Add conditions to preview",
|
||||||
|
"save": "Save Filter",
|
||||||
|
"name": "Filter Name",
|
||||||
|
"namePlaceholder": "e.g. Overdue tasks for Alice",
|
||||||
|
"color": "Color"
|
||||||
|
},
|
||||||
|
"nameExists": "A filter with this name already exists",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"overdue": "{{count}} overdue"
|
||||||
|
}
|
||||||
89
public/locales/ar/history.json
Normal file
89
public/locales/ar/history.json
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"edit": {
|
||||||
|
"title": "Edit History",
|
||||||
|
"completedDate": "Completed Date",
|
||||||
|
"note": "Note",
|
||||||
|
"additionalNotes": "Additional Notes",
|
||||||
|
"deleteTitle": "Delete History",
|
||||||
|
"deleteMessage": "Are you sure you want to delete this history?"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"inProgress": "In Progress",
|
||||||
|
"completed": "Completed",
|
||||||
|
"skipped": "Skipped",
|
||||||
|
"pendingApproval": "Pending Approval",
|
||||||
|
"rejected": "Rejected",
|
||||||
|
"missed": "Missed",
|
||||||
|
"rescheduled": "Rescheduled",
|
||||||
|
"scheduled": "Scheduled"
|
||||||
|
},
|
||||||
|
"badge": {
|
||||||
|
"onTime": "On Time",
|
||||||
|
"onTimeLabel": "On time"
|
||||||
|
},
|
||||||
|
"detail": {
|
||||||
|
"title": "Activity Detail",
|
||||||
|
"openTask": "Open Task",
|
||||||
|
"editEntry": "Edit Entry",
|
||||||
|
"performedBy": "Performed by",
|
||||||
|
"assignedTo": "Assigned to",
|
||||||
|
"lastUpdated": "Last updated",
|
||||||
|
"duration": "Duration",
|
||||||
|
"pointsEarned": "Points earned",
|
||||||
|
"points_one": "{{count}} pt",
|
||||||
|
"points_other": "{{count}} pts",
|
||||||
|
"note": "Note"
|
||||||
|
},
|
||||||
|
"charts": {
|
||||||
|
"noData": "No data available",
|
||||||
|
"noLabels": "No Labels",
|
||||||
|
"unassigned": "Unassigned",
|
||||||
|
"unknownTask": "Unknown Task",
|
||||||
|
"late": "Late",
|
||||||
|
"status": {
|
||||||
|
"title": "Status",
|
||||||
|
"description": "Completed tasks status"
|
||||||
|
},
|
||||||
|
"due": {
|
||||||
|
"title": "Due Date",
|
||||||
|
"description": "Current tasks due date"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"title": "Priority",
|
||||||
|
"description": "Tasks by priority"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"title": "Labels",
|
||||||
|
"description": "Tasks by labels"
|
||||||
|
},
|
||||||
|
"labelsDuration": {
|
||||||
|
"title": "Labels (time)",
|
||||||
|
"description": "Time spent by labels (hours)"
|
||||||
|
},
|
||||||
|
"tasksTime": {
|
||||||
|
"title": "Tasks (time)",
|
||||||
|
"description": "Time spent by individual tasks (hours)"
|
||||||
|
},
|
||||||
|
"assigneeBreakdown": {
|
||||||
|
"title": "by Assignee",
|
||||||
|
"description": "Tasks grouped by assignee"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"status": "Status",
|
||||||
|
"pending": "Pending",
|
||||||
|
"labels": "Labels",
|
||||||
|
"hasNotes": "Has Notes",
|
||||||
|
"hasPoints": "Has Points",
|
||||||
|
"timePeriod": "Time Period",
|
||||||
|
"user": "User"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"days_one": "{{count}} Day",
|
||||||
|
"days_other": "{{count}} Days",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"activities": {
|
||||||
|
"title": "Activities"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
public/locales/ar/labels.json
Normal file
9
public/locales/ar/labels.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Label",
|
||||||
|
"message": "Are you sure you want to delete this label? This will remove the label from all tasks."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load labels. Please try again.",
|
||||||
|
"blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task."
|
||||||
|
}
|
||||||
74
public/locales/ar/points.json
Normal file
74
public/locales/ar/points.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"redeem": "Redeem Points",
|
||||||
|
"redeemModal": {
|
||||||
|
"redeemButton": "Redeem",
|
||||||
|
"pointsAvailable": "{{count}} points available",
|
||||||
|
"pointsToRedeem": "Points to Redeem",
|
||||||
|
"placeholder": "Enter points...",
|
||||||
|
"cannotExceed": "Cannot exceed available points",
|
||||||
|
"quickAdd": "Quick Add:",
|
||||||
|
"aboutToRedeem": "You are about to redeem",
|
||||||
|
"amount": "{{count}} points",
|
||||||
|
"remaining": "Remaining: {{count}} points"
|
||||||
|
},
|
||||||
|
"leaderboard": {
|
||||||
|
"titlePoints": "Points Leaderboard",
|
||||||
|
"titleTasks": "Tasks Leaderboard",
|
||||||
|
"subtitlePoints": "Rankings based on points earned during the selected time period",
|
||||||
|
"subtitleTasks": "Rankings based on tasks completed during the selected time period",
|
||||||
|
"modePoints": "Points",
|
||||||
|
"modeTasks": "Tasks",
|
||||||
|
"you": "You",
|
||||||
|
"tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task",
|
||||||
|
"available": "{{count}} available",
|
||||||
|
"points_one": "{{count}} point",
|
||||||
|
"points_other": "{{count}} points"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"short7d": "7D",
|
||||||
|
"short6m": "6M",
|
||||||
|
"shortAll": "All",
|
||||||
|
"days7": "7 Days",
|
||||||
|
"months6": "6 Months",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"analysisTitle": "Filter & Analysis",
|
||||||
|
"title": "Filter Points",
|
||||||
|
"showFor": "Show points for:",
|
||||||
|
"timePeriod": "Time period:"
|
||||||
|
},
|
||||||
|
"cards": {
|
||||||
|
"available": {
|
||||||
|
"title": "Available",
|
||||||
|
"subtext": "Ready to redeem"
|
||||||
|
},
|
||||||
|
"redeemed": {
|
||||||
|
"title": "Redeemed",
|
||||||
|
"subtext": "Previously used"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"title": "Total",
|
||||||
|
"subtext": "All time earned"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"title": "Period Points",
|
||||||
|
"allTime": "All time",
|
||||||
|
"last6Months": "Last 6 months",
|
||||||
|
"lastDays_one": "Last {{count}} day",
|
||||||
|
"lastDays_other": "Last {{count}} days"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"showingFor": "Showing points for",
|
||||||
|
"unknownUser": "Unknown User",
|
||||||
|
"overThe": "over the",
|
||||||
|
"allTime": "All Time",
|
||||||
|
"last6Months": "Last 6 Months",
|
||||||
|
"lastDays_one": "Last {{count}} Day",
|
||||||
|
"lastDays_other": "Last {{count}} Days"
|
||||||
|
},
|
||||||
|
"trend": {
|
||||||
|
"title": "Points Trend"
|
||||||
|
}
|
||||||
|
}
|
||||||
24
public/locales/ar/projects.json
Normal file
24
public/locales/ar/projects.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"iconPicker": {
|
||||||
|
"chooseIcon": "Choose Project Icon",
|
||||||
|
"availableIcons": "Available Icons"
|
||||||
|
},
|
||||||
|
"defaultChip": "Default",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Project",
|
||||||
|
"message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load projects. Please try again.",
|
||||||
|
"blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.",
|
||||||
|
"defaultDescription": "All tasks without a specific project",
|
||||||
|
"selector": {
|
||||||
|
"title": "Projects",
|
||||||
|
"createNew": "Create New Project",
|
||||||
|
"createNewDescription": "Add a custom project workspace",
|
||||||
|
"manage": "Manage Projects",
|
||||||
|
"manageDescription": "View, edit, and organize all projects"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -171,7 +171,7 @@
|
|||||||
"description": "غيّر إعدادات حسابك أو نوع خطتك أو كلمة المرور",
|
"description": "غيّر إعدادات حسابك أو نوع خطتك أو كلمة المرور",
|
||||||
"accountType": "نوع الحساب: {{type}}",
|
"accountType": "نوع الحساب: {{type}}",
|
||||||
"free": "مجاني",
|
"free": "مجاني",
|
||||||
"plus": "Plus",
|
"plus": "بلس",
|
||||||
"plusUntil": "Plus (حتى {{date}})",
|
"plusUntil": "Plus (حتى {{date}})",
|
||||||
"activeDescription": "أنت مشترك حاليًا في خطة Plus. سيتجدد اشتراكك في {{date}}.",
|
"activeDescription": "أنت مشترك حاليًا في خطة Plus. سيتجدد اشتراكك في {{date}}.",
|
||||||
"cancelledDescription": "لقد ألغيت اشتراكك. سيتم خفض حسابك إلى الخطة المجانية في {{date}}.",
|
"cancelledDescription": "لقد ألغيت اشتراكك. سيتم خفض حسابك إلى الخطة المجانية في {{date}}.",
|
||||||
@@ -490,5 +490,78 @@
|
|||||||
"notConnected": "التحديثات الفورية مفعّلة لكن لا يوجد اتصال حاليًا.",
|
"notConnected": "التحديثات الفورية مفعّلة لكن لا يوجد اتصال حاليًا.",
|
||||||
"basicPlanNotice": "التحديثات الفورية غير متاحة في الخطة الأساسية. رقِّ إلى Plus لتلقّي إشعارات فورية عندما تنجز أنت أو أعضاء دائرتك المهام أو تتخطّونها أو تعدّلونها."
|
"basicPlanNotice": "التحديثات الفورية غير متاحة في الخطة الأساسية. رقِّ إلى Plus لتلقّي إشعارات فورية عندما تنجز أنت أو أعضاء دائرتك المهام أو تتخطّونها أو تعدّلونها."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"subscription": {
|
||||||
|
"sessionFailed": "Failed to create subscription session",
|
||||||
|
"errorTitle": "Subscription Error",
|
||||||
|
"errorMessage": "Failed to start subscription process. Please try again.",
|
||||||
|
"subscribe": "Subscribe",
|
||||||
|
"cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe."
|
||||||
|
},
|
||||||
|
"childUsers": {
|
||||||
|
"errNameRequired": "Sub account name is required",
|
||||||
|
"errNameMin": "Sub account name must be at least 2 characters",
|
||||||
|
"errNameMax": "Sub account name must be less than 20 characters",
|
||||||
|
"errNameChars": "Sub account name can only contain lowercase letters, dot and dash",
|
||||||
|
"errPasswordRequired": "Password is required",
|
||||||
|
"errPasswordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"errPasswordMatch": "Passwords do not match",
|
||||||
|
"errDisplayNameMax": "Display name must be less than 50 characters",
|
||||||
|
"createTitle": "Create Sub Account",
|
||||||
|
"createButton": "Create Account",
|
||||||
|
"nameLabel": "Sub Account Name *",
|
||||||
|
"namePlaceholder": "Enter sub account name (e.g., sarah)",
|
||||||
|
"displayNameLabel": "Display Name",
|
||||||
|
"displayNamePlaceholder": "Display name (optional, defaults to sub account name)",
|
||||||
|
"passwordLabel": "Password *",
|
||||||
|
"passwordPlaceholder": "Enter password (8-64 characters)",
|
||||||
|
"confirmPasswordLabel": "Confirm Password *",
|
||||||
|
"confirmPasswordPlaceholder": "Confirm password"
|
||||||
|
},
|
||||||
|
"passwordChange": {
|
||||||
|
"minLength": "Password must be at least 8 characters",
|
||||||
|
"maxLength": "Password must be less than 64 characters"
|
||||||
|
},
|
||||||
|
"payment": {
|
||||||
|
"cancelledTitle": "Payment has been cancelled",
|
||||||
|
"cancelledRedirect": "You will be redirected to the main page shortly.",
|
||||||
|
"successTitle": "Payment Successful!",
|
||||||
|
"successRedirect": "You will be redirected to the settings page shortly."
|
||||||
|
},
|
||||||
|
"developer": {
|
||||||
|
"tokenRefreshed": "Token refreshed successfully",
|
||||||
|
"endpointCalled": "Refresh token endpoint called successfully",
|
||||||
|
"clearDbCleared": "Local offline database cleared. Starting full sync...",
|
||||||
|
"clearDbDone": "Full sync completed from the beginning",
|
||||||
|
"intro": "View technical information about your authentication tokens and session",
|
||||||
|
"refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform",
|
||||||
|
"noReconnectInfo": "No reconnection information available",
|
||||||
|
"noTimeoutInfo": "No timeout information available",
|
||||||
|
"noDebugInfo": "No debug information available"
|
||||||
|
},
|
||||||
|
"backup": {
|
||||||
|
"keyRequired": "Encryption key is required",
|
||||||
|
"created": "Backup created and downloaded successfully",
|
||||||
|
"createFailed": "Failed to create backup",
|
||||||
|
"selectFile": "Please select a backup file",
|
||||||
|
"restored": "Backup restored successfully. Please refresh the page.",
|
||||||
|
"restoreFailed": "Failed to restore backup",
|
||||||
|
"readFailed": "Failed to read backup file",
|
||||||
|
"createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.",
|
||||||
|
"keyPlaceholder": "Enter a strong encryption key",
|
||||||
|
"includeAssets": "Include uploaded files and assets",
|
||||||
|
"warningLabel": "Warning:",
|
||||||
|
"restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.",
|
||||||
|
"restoreKeyPlaceholder": "Enter the encryption key used for this backup"
|
||||||
|
},
|
||||||
|
"deletion": {
|
||||||
|
"passwordRequired": "Please enter your password to continue",
|
||||||
|
"passwordAndDelete": "Please enter your password and type DELETE to confirm",
|
||||||
|
"failed": "Failed to delete account",
|
||||||
|
"passwordPlaceholder": "Enter your password",
|
||||||
|
"transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:",
|
||||||
|
"selectOwner": "Select new owner",
|
||||||
|
"confirmPrompt": "Please enter your password and type DELETE to confirm",
|
||||||
|
"typeDelete": "DELETE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
public/locales/ar/things.json
Normal file
18
public/locales/ar/things.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"errName": "Name is required",
|
||||||
|
"errStateNumber": "State must be a number",
|
||||||
|
"errStateBool": "State must be true or false",
|
||||||
|
"errStateRequired": "State is required",
|
||||||
|
"name": "Name",
|
||||||
|
"namePlaceholder": "Thing name",
|
||||||
|
"value": "Value",
|
||||||
|
"valuePlaceholder": "Thing value",
|
||||||
|
"updateState": "Update state",
|
||||||
|
"update": "Update",
|
||||||
|
"history": {
|
||||||
|
"overview": "Things Overview",
|
||||||
|
"visualization": "Data Visualization",
|
||||||
|
"changeHistory": "Change History",
|
||||||
|
"updated": "Updated"
|
||||||
|
}
|
||||||
|
}
|
||||||
29
public/locales/ar/timer.json
Normal file
29
public/locales/ar/timer.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"toast": {
|
||||||
|
"sessionUpdatedTitle": "Session updated",
|
||||||
|
"sessionUpdatedMessage": "Timer session has been updated successfully.",
|
||||||
|
"sessionUpdateFailTitle": "Failed to update session",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"sessionUpdateErrorTitle": "Error updating session",
|
||||||
|
"sessionDeletedTitle": "Session deleted",
|
||||||
|
"sessionDeletedMessage": "Timer session has been deleted successfully.",
|
||||||
|
"sessionDeleteErrorTitle": "Error deleting session",
|
||||||
|
"deleteConfirmTitle": "Delete Timer Session",
|
||||||
|
"deleteConfirmMessage": "Are you sure you want to delete this timer session?"
|
||||||
|
},
|
||||||
|
"loading": "Loading timer data...",
|
||||||
|
"noData": "No timer data found for this chore.",
|
||||||
|
"activeWork": "Active Work",
|
||||||
|
"breakTime": "Break Time",
|
||||||
|
"workSessions": "Work Sessions",
|
||||||
|
"totalTime": "Total Time",
|
||||||
|
"distribution": "Work vs Break Distribution",
|
||||||
|
"noActiveTime": "No active time yet",
|
||||||
|
"sessionBreakdown": "Session Breakdown",
|
||||||
|
"sessions": "Sessions",
|
||||||
|
"addSession": "Add Session",
|
||||||
|
"startTime": "Start Time",
|
||||||
|
"endTime": "End Time",
|
||||||
|
"leaveEmpty": "Leave empty if session is ongoing",
|
||||||
|
"noSessionForChore": "No timer session found for this chore."
|
||||||
|
}
|
||||||
111
public/locales/de/auth.json
Normal file
111
public/locales/de/auth.json
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"validationError": "Validation Error",
|
||||||
|
"primaryUsernameRequired": "Primary username is required for sub account login",
|
||||||
|
"subNameRequired": "Sub account name is required for sub account login",
|
||||||
|
"usernameRequired": "Username is required",
|
||||||
|
"passwordRequired": "Password is required",
|
||||||
|
"loginFailed": "Login Failed",
|
||||||
|
"genericError": "An error occurred, please try again",
|
||||||
|
"providerLoginFailed": "{{provider}} Login Failed",
|
||||||
|
"providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again",
|
||||||
|
"providerLoginError": "{{provider}} Login Error",
|
||||||
|
"networkError": "Network error occurred, please try again",
|
||||||
|
"mfaFailed": "Two-Factor Authentication Failed",
|
||||||
|
"oauthError": "OAuth Error",
|
||||||
|
"oauthBrowserFailed": "Failed to open authentication browser",
|
||||||
|
"primaryAccount": "Primary Account",
|
||||||
|
"subAccount": "Sub Account",
|
||||||
|
"username": "Username",
|
||||||
|
"primaryUsernamePlaceholder": "Enter primary account username",
|
||||||
|
"subNamePlaceholder": "Enter sub account name",
|
||||||
|
"forgotPassword": "Forgot password?",
|
||||||
|
"or": "or",
|
||||||
|
"email": "Email",
|
||||||
|
"displayNamePlaceholder": "How others see your name",
|
||||||
|
"signupFailed": "Signup Failed",
|
||||||
|
"signupDisabled": "Signup disabled, please contact admin",
|
||||||
|
"usernameMinLength": "Username must be at least 4 characters",
|
||||||
|
"invalidEmail": "Invalid email address",
|
||||||
|
"passwordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"displayNameRequired": "Display name is required",
|
||||||
|
"displayNameChars": "Display name can only contain letters and numbers",
|
||||||
|
"resetEmailSent": "Reset Email Sent",
|
||||||
|
"resetEmailSentMsg": "Check your email for password reset instructions",
|
||||||
|
"resetFailed": "Reset Failed",
|
||||||
|
"resetFailedMsg": "Failed to send reset email, please try again later",
|
||||||
|
"emailPlaceholder": "you@example.com",
|
||||||
|
"passwordUpdated": "Password Updated",
|
||||||
|
"passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...",
|
||||||
|
"passwordUpdateFailed": "Password Update Failed",
|
||||||
|
"passwordUpdateFailedMsg": "Failed to update password, please try again later",
|
||||||
|
"savePassword": "Save password",
|
||||||
|
"server": {
|
||||||
|
"url": "Server URL",
|
||||||
|
"dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.",
|
||||||
|
"unreachable": "Unable to reach the server. Check the URL, port, and network connection.",
|
||||||
|
"invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed."
|
||||||
|
},
|
||||||
|
"mfaModal": {
|
||||||
|
"title": "Two-factor authentication",
|
||||||
|
"codeRequired": "Please enter a verification code",
|
||||||
|
"verifyFailed": "Failed to verify code. Please try again.",
|
||||||
|
"backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.",
|
||||||
|
"codeHint": "Enter the 6-digit code from your authenticator app.",
|
||||||
|
"verify": "Verify & Sign In",
|
||||||
|
"backupLabel": "Backup code",
|
||||||
|
"codeLabel": "Verification code",
|
||||||
|
"backupPlaceholder": "Enter backup code",
|
||||||
|
"useAuthenticator": "Use authenticator app instead",
|
||||||
|
"useBackup": "Use a backup code instead",
|
||||||
|
"backupOnce": "Each backup code can only be used once.",
|
||||||
|
"invalidCode": "Invalid verification code. Please try again."
|
||||||
|
},
|
||||||
|
"appleLoginFailed": "Apple Login Failed",
|
||||||
|
"googleLoginFailed": "Google Login Failed",
|
||||||
|
"createOne": "Create one",
|
||||||
|
"primaryAccountUsernameLabel": "Primary account username",
|
||||||
|
"subAccountNameLabel": "Sub account name",
|
||||||
|
"serverSettings": "Server settings",
|
||||||
|
"useDifferentAccount": "Use a different account",
|
||||||
|
"yourUsername": "Your username",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"confirmNewPassword": "Confirm new password",
|
||||||
|
"newPassword": "New password",
|
||||||
|
"reenterPassword": "Re-enter your password",
|
||||||
|
"requestNewLink": "Request a new link",
|
||||||
|
"setNewPassword": "Set a new password",
|
||||||
|
"linkInvalid": "This link is not valid",
|
||||||
|
"createAccountButton": "Create account",
|
||||||
|
"createYourAccount": "Create your account",
|
||||||
|
"displayNameLabel": "Display name",
|
||||||
|
"usernameHint": "lowercase letters, numbers, dot and dash",
|
||||||
|
"termsShort": "By creating an account you agree to our Terms of Service and Privacy",
|
||||||
|
"checkYourEmail": "Check your email",
|
||||||
|
"resetYourPassword": "Reset your password",
|
||||||
|
"serverChangeWarning": "Changing the server clears locally cached data on this device.",
|
||||||
|
"serverConnected": "Connected. Taking you to sign in...",
|
||||||
|
"passwordLabel": "Password",
|
||||||
|
"showPassword": "Show password",
|
||||||
|
"hidePassword": "Hide password",
|
||||||
|
"loginPasswordPlaceholder": "Enter your password",
|
||||||
|
"signupPasswordPlaceholder": "At least 8 characters",
|
||||||
|
"signupPasswordHelper": "Use 8 to 64 characters.",
|
||||||
|
"orContinueWith": "or continue with",
|
||||||
|
"signupSignInFailed": "Your account was created, but signing in failed. Please sign in.",
|
||||||
|
"authenticating": {
|
||||||
|
"signingIn": "Signing you in",
|
||||||
|
"signingInSub": "This will only take a moment.",
|
||||||
|
"unknownProvider": "Unknown sign-in provider",
|
||||||
|
"contactSupport": "Please contact support.",
|
||||||
|
"signInFailed": "Sign-in failed",
|
||||||
|
"mfaCancelled": "Two-factor authentication was cancelled.",
|
||||||
|
"requestNotVerified": "The sign-in request could not be verified.",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"mfaSessionMissing": "The MFA session is missing. Please try again.",
|
||||||
|
"twoFactor": "Two-factor authentication",
|
||||||
|
"verifyToContinue": "Verify your login to continue.",
|
||||||
|
"noToken": "No valid authentication token was returned.",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"mfaFailed": "Two-factor authentication failed. Please try again."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,5 +71,11 @@
|
|||||||
"reset": "Timer zurücksetzen",
|
"reset": "Timer zurücksetzen",
|
||||||
"delete": "Sitzung löschen"
|
"delete": "Sitzung löschen"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"toolbar": {
|
||||||
|
"defaultProject": "Default Project"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"assignedToMe": "Assigned to me"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,8 @@
|
|||||||
"filters": "Filter",
|
"filters": "Filter",
|
||||||
"activities": "Aktivitäten",
|
"activities": "Aktivitäten",
|
||||||
"points": "Punkte",
|
"points": "Punkte",
|
||||||
"settings": "Einstellungen"
|
"settings": "Einstellungen",
|
||||||
|
"reportBug": "Report a Bug"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"title": "Suche",
|
"title": "Suche",
|
||||||
@@ -114,5 +115,37 @@
|
|||||||
"subtitle": "Wir haben ein Problem mit Ihren Notizen und Versionsdetails vorausgefüllt. Es wurde noch nichts verschickt – überprüfe es und poste, sobald du bereit bist.",
|
"subtitle": "Wir haben ein Problem mit Ihren Notizen und Versionsdetails vorausgefüllt. Es wurde noch nichts verschickt – überprüfe es und poste, sobald du bereit bist.",
|
||||||
"open": "Eröffne das Problem"
|
"open": "Eröffne das Problem"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"done": "Done",
|
||||||
|
"clearAll": "Clear all",
|
||||||
|
"upload": {
|
||||||
|
"quotaTitle": "Storage Quota Exceeded",
|
||||||
|
"quotaMessage": "You have exceeded your quota for uploading files.",
|
||||||
|
"tooLargeTitle": "File Too Large",
|
||||||
|
"tooLargeMessage": "The file you are trying to upload is too large.",
|
||||||
|
"deniedTitle": "Permission Denied",
|
||||||
|
"deniedMessage": "You do not have permission to upload files."
|
||||||
|
},
|
||||||
|
"getStarted": "Get Started!",
|
||||||
|
"imageLoadFailed": "Failed to load image.",
|
||||||
|
"typeHere": "Type in here…",
|
||||||
|
"summaryOfChores": "This is a summary of your chores",
|
||||||
|
"loadingOffline": "You are offline",
|
||||||
|
"loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.",
|
||||||
|
"loadingSlow": "This is taking longer than usual. There might be an issue.",
|
||||||
|
"navigateBack": "Navigate Back",
|
||||||
|
"bottomNav": "Bottom Navigation",
|
||||||
|
"profile": "Profile",
|
||||||
|
"autocompletePlaceholder": "Type here...",
|
||||||
|
"errorScreen": {
|
||||||
|
"title": "Something went wrong",
|
||||||
|
"fallback": "An unexpected error occurred. Try reloading — it usually fixes it.",
|
||||||
|
"tryAgain": "Try again",
|
||||||
|
"home": "Home",
|
||||||
|
"login": "Login",
|
||||||
|
"hideDetails": "Hide error details",
|
||||||
|
"showDetails": "Show error details",
|
||||||
|
"copyToClipboard": "Copy to clipboard",
|
||||||
|
"copied": "Error details copied to clipboard"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
public/locales/de/filters.json
Normal file
17
public/locales/de/filters.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"builder": {
|
||||||
|
"errorName": "Please enter a filter name",
|
||||||
|
"errorConditions": "Please configure at least one filter condition",
|
||||||
|
"editTitle": "Edit Filter",
|
||||||
|
"newTitle": "New Filter",
|
||||||
|
"addConditions": "Add conditions to preview",
|
||||||
|
"save": "Save Filter",
|
||||||
|
"name": "Filter Name",
|
||||||
|
"namePlaceholder": "e.g. Overdue tasks for Alice",
|
||||||
|
"color": "Color"
|
||||||
|
},
|
||||||
|
"nameExists": "A filter with this name already exists",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"overdue": "{{count}} overdue"
|
||||||
|
}
|
||||||
89
public/locales/de/history.json
Normal file
89
public/locales/de/history.json
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"edit": {
|
||||||
|
"title": "Edit History",
|
||||||
|
"completedDate": "Completed Date",
|
||||||
|
"note": "Note",
|
||||||
|
"additionalNotes": "Additional Notes",
|
||||||
|
"deleteTitle": "Delete History",
|
||||||
|
"deleteMessage": "Are you sure you want to delete this history?"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"inProgress": "In Progress",
|
||||||
|
"completed": "Completed",
|
||||||
|
"skipped": "Skipped",
|
||||||
|
"pendingApproval": "Pending Approval",
|
||||||
|
"rejected": "Rejected",
|
||||||
|
"missed": "Missed",
|
||||||
|
"rescheduled": "Rescheduled",
|
||||||
|
"scheduled": "Scheduled"
|
||||||
|
},
|
||||||
|
"badge": {
|
||||||
|
"onTime": "On Time",
|
||||||
|
"onTimeLabel": "On time"
|
||||||
|
},
|
||||||
|
"detail": {
|
||||||
|
"title": "Activity Detail",
|
||||||
|
"openTask": "Open Task",
|
||||||
|
"editEntry": "Edit Entry",
|
||||||
|
"performedBy": "Performed by",
|
||||||
|
"assignedTo": "Assigned to",
|
||||||
|
"lastUpdated": "Last updated",
|
||||||
|
"duration": "Duration",
|
||||||
|
"pointsEarned": "Points earned",
|
||||||
|
"points_one": "{{count}} pt",
|
||||||
|
"points_other": "{{count}} pts",
|
||||||
|
"note": "Note"
|
||||||
|
},
|
||||||
|
"charts": {
|
||||||
|
"noData": "No data available",
|
||||||
|
"noLabels": "No Labels",
|
||||||
|
"unassigned": "Unassigned",
|
||||||
|
"unknownTask": "Unknown Task",
|
||||||
|
"late": "Late",
|
||||||
|
"status": {
|
||||||
|
"title": "Status",
|
||||||
|
"description": "Completed tasks status"
|
||||||
|
},
|
||||||
|
"due": {
|
||||||
|
"title": "Due Date",
|
||||||
|
"description": "Current tasks due date"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"title": "Priority",
|
||||||
|
"description": "Tasks by priority"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"title": "Labels",
|
||||||
|
"description": "Tasks by labels"
|
||||||
|
},
|
||||||
|
"labelsDuration": {
|
||||||
|
"title": "Labels (time)",
|
||||||
|
"description": "Time spent by labels (hours)"
|
||||||
|
},
|
||||||
|
"tasksTime": {
|
||||||
|
"title": "Tasks (time)",
|
||||||
|
"description": "Time spent by individual tasks (hours)"
|
||||||
|
},
|
||||||
|
"assigneeBreakdown": {
|
||||||
|
"title": "by Assignee",
|
||||||
|
"description": "Tasks grouped by assignee"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"status": "Status",
|
||||||
|
"pending": "Pending",
|
||||||
|
"labels": "Labels",
|
||||||
|
"hasNotes": "Has Notes",
|
||||||
|
"hasPoints": "Has Points",
|
||||||
|
"timePeriod": "Time Period",
|
||||||
|
"user": "User"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"days_one": "{{count}} Day",
|
||||||
|
"days_other": "{{count}} Days",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"activities": {
|
||||||
|
"title": "Activities"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
public/locales/de/labels.json
Normal file
9
public/locales/de/labels.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Label",
|
||||||
|
"message": "Are you sure you want to delete this label? This will remove the label from all tasks."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load labels. Please try again.",
|
||||||
|
"blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task."
|
||||||
|
}
|
||||||
74
public/locales/de/points.json
Normal file
74
public/locales/de/points.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"redeem": "Redeem Points",
|
||||||
|
"redeemModal": {
|
||||||
|
"redeemButton": "Redeem",
|
||||||
|
"pointsAvailable": "{{count}} points available",
|
||||||
|
"pointsToRedeem": "Points to Redeem",
|
||||||
|
"placeholder": "Enter points...",
|
||||||
|
"cannotExceed": "Cannot exceed available points",
|
||||||
|
"quickAdd": "Quick Add:",
|
||||||
|
"aboutToRedeem": "You are about to redeem",
|
||||||
|
"amount": "{{count}} points",
|
||||||
|
"remaining": "Remaining: {{count}} points"
|
||||||
|
},
|
||||||
|
"leaderboard": {
|
||||||
|
"titlePoints": "Points Leaderboard",
|
||||||
|
"titleTasks": "Tasks Leaderboard",
|
||||||
|
"subtitlePoints": "Rankings based on points earned during the selected time period",
|
||||||
|
"subtitleTasks": "Rankings based on tasks completed during the selected time period",
|
||||||
|
"modePoints": "Points",
|
||||||
|
"modeTasks": "Tasks",
|
||||||
|
"you": "You",
|
||||||
|
"tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task",
|
||||||
|
"available": "{{count}} available",
|
||||||
|
"points_one": "{{count}} point",
|
||||||
|
"points_other": "{{count}} points"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"short7d": "7D",
|
||||||
|
"short6m": "6M",
|
||||||
|
"shortAll": "All",
|
||||||
|
"days7": "7 Days",
|
||||||
|
"months6": "6 Months",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"analysisTitle": "Filter & Analysis",
|
||||||
|
"title": "Filter Points",
|
||||||
|
"showFor": "Show points for:",
|
||||||
|
"timePeriod": "Time period:"
|
||||||
|
},
|
||||||
|
"cards": {
|
||||||
|
"available": {
|
||||||
|
"title": "Available",
|
||||||
|
"subtext": "Ready to redeem"
|
||||||
|
},
|
||||||
|
"redeemed": {
|
||||||
|
"title": "Redeemed",
|
||||||
|
"subtext": "Previously used"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"title": "Total",
|
||||||
|
"subtext": "All time earned"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"title": "Period Points",
|
||||||
|
"allTime": "All time",
|
||||||
|
"last6Months": "Last 6 months",
|
||||||
|
"lastDays_one": "Last {{count}} day",
|
||||||
|
"lastDays_other": "Last {{count}} days"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"showingFor": "Showing points for",
|
||||||
|
"unknownUser": "Unknown User",
|
||||||
|
"overThe": "over the",
|
||||||
|
"allTime": "All Time",
|
||||||
|
"last6Months": "Last 6 Months",
|
||||||
|
"lastDays_one": "Last {{count}} Day",
|
||||||
|
"lastDays_other": "Last {{count}} Days"
|
||||||
|
},
|
||||||
|
"trend": {
|
||||||
|
"title": "Points Trend"
|
||||||
|
}
|
||||||
|
}
|
||||||
24
public/locales/de/projects.json
Normal file
24
public/locales/de/projects.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"iconPicker": {
|
||||||
|
"chooseIcon": "Choose Project Icon",
|
||||||
|
"availableIcons": "Available Icons"
|
||||||
|
},
|
||||||
|
"defaultChip": "Default",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Project",
|
||||||
|
"message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load projects. Please try again.",
|
||||||
|
"blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.",
|
||||||
|
"defaultDescription": "All tasks without a specific project",
|
||||||
|
"selector": {
|
||||||
|
"title": "Projects",
|
||||||
|
"createNew": "Create New Project",
|
||||||
|
"createNewDescription": "Add a custom project workspace",
|
||||||
|
"manage": "Manage Projects",
|
||||||
|
"manageDescription": "View, edit, and organize all projects"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -490,5 +490,78 @@
|
|||||||
"notConnected": "Echtzeit-Updates sind aktiviert, aber derzeit nicht verbunden.",
|
"notConnected": "Echtzeit-Updates sind aktiviert, aber derzeit nicht verbunden.",
|
||||||
"basicPlanNotice": "Echtzeit-Updates sind im Basis-Tarif nicht verfügbar. Wechsle zu Plus, um sofort benachrichtigt zu werden, wenn du oder andere Circle-Mitglieder Aufgaben erledigen, überspringen oder ändern."
|
"basicPlanNotice": "Echtzeit-Updates sind im Basis-Tarif nicht verfügbar. Wechsle zu Plus, um sofort benachrichtigt zu werden, wenn du oder andere Circle-Mitglieder Aufgaben erledigen, überspringen oder ändern."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"subscription": {
|
||||||
|
"sessionFailed": "Failed to create subscription session",
|
||||||
|
"errorTitle": "Subscription Error",
|
||||||
|
"errorMessage": "Failed to start subscription process. Please try again.",
|
||||||
|
"subscribe": "Subscribe",
|
||||||
|
"cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe."
|
||||||
|
},
|
||||||
|
"childUsers": {
|
||||||
|
"errNameRequired": "Sub account name is required",
|
||||||
|
"errNameMin": "Sub account name must be at least 2 characters",
|
||||||
|
"errNameMax": "Sub account name must be less than 20 characters",
|
||||||
|
"errNameChars": "Sub account name can only contain lowercase letters, dot and dash",
|
||||||
|
"errPasswordRequired": "Password is required",
|
||||||
|
"errPasswordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"errPasswordMatch": "Passwords do not match",
|
||||||
|
"errDisplayNameMax": "Display name must be less than 50 characters",
|
||||||
|
"createTitle": "Create Sub Account",
|
||||||
|
"createButton": "Create Account",
|
||||||
|
"nameLabel": "Sub Account Name *",
|
||||||
|
"namePlaceholder": "Enter sub account name (e.g., sarah)",
|
||||||
|
"displayNameLabel": "Display Name",
|
||||||
|
"displayNamePlaceholder": "Display name (optional, defaults to sub account name)",
|
||||||
|
"passwordLabel": "Password *",
|
||||||
|
"passwordPlaceholder": "Enter password (8-64 characters)",
|
||||||
|
"confirmPasswordLabel": "Confirm Password *",
|
||||||
|
"confirmPasswordPlaceholder": "Confirm password"
|
||||||
|
},
|
||||||
|
"passwordChange": {
|
||||||
|
"minLength": "Password must be at least 8 characters",
|
||||||
|
"maxLength": "Password must be less than 64 characters"
|
||||||
|
},
|
||||||
|
"payment": {
|
||||||
|
"cancelledTitle": "Payment has been cancelled",
|
||||||
|
"cancelledRedirect": "You will be redirected to the main page shortly.",
|
||||||
|
"successTitle": "Payment Successful!",
|
||||||
|
"successRedirect": "You will be redirected to the settings page shortly."
|
||||||
|
},
|
||||||
|
"developer": {
|
||||||
|
"tokenRefreshed": "Token refreshed successfully",
|
||||||
|
"endpointCalled": "Refresh token endpoint called successfully",
|
||||||
|
"clearDbCleared": "Local offline database cleared. Starting full sync...",
|
||||||
|
"clearDbDone": "Full sync completed from the beginning",
|
||||||
|
"intro": "View technical information about your authentication tokens and session",
|
||||||
|
"refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform",
|
||||||
|
"noReconnectInfo": "No reconnection information available",
|
||||||
|
"noTimeoutInfo": "No timeout information available",
|
||||||
|
"noDebugInfo": "No debug information available"
|
||||||
|
},
|
||||||
|
"backup": {
|
||||||
|
"keyRequired": "Encryption key is required",
|
||||||
|
"created": "Backup created and downloaded successfully",
|
||||||
|
"createFailed": "Failed to create backup",
|
||||||
|
"selectFile": "Please select a backup file",
|
||||||
|
"restored": "Backup restored successfully. Please refresh the page.",
|
||||||
|
"restoreFailed": "Failed to restore backup",
|
||||||
|
"readFailed": "Failed to read backup file",
|
||||||
|
"createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.",
|
||||||
|
"keyPlaceholder": "Enter a strong encryption key",
|
||||||
|
"includeAssets": "Include uploaded files and assets",
|
||||||
|
"warningLabel": "Warning:",
|
||||||
|
"restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.",
|
||||||
|
"restoreKeyPlaceholder": "Enter the encryption key used for this backup"
|
||||||
|
},
|
||||||
|
"deletion": {
|
||||||
|
"passwordRequired": "Please enter your password to continue",
|
||||||
|
"passwordAndDelete": "Please enter your password and type DELETE to confirm",
|
||||||
|
"failed": "Failed to delete account",
|
||||||
|
"passwordPlaceholder": "Enter your password",
|
||||||
|
"transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:",
|
||||||
|
"selectOwner": "Select new owner",
|
||||||
|
"confirmPrompt": "Please enter your password and type DELETE to confirm",
|
||||||
|
"typeDelete": "DELETE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
public/locales/de/things.json
Normal file
18
public/locales/de/things.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"errName": "Name is required",
|
||||||
|
"errStateNumber": "State must be a number",
|
||||||
|
"errStateBool": "State must be true or false",
|
||||||
|
"errStateRequired": "State is required",
|
||||||
|
"name": "Name",
|
||||||
|
"namePlaceholder": "Thing name",
|
||||||
|
"value": "Value",
|
||||||
|
"valuePlaceholder": "Thing value",
|
||||||
|
"updateState": "Update state",
|
||||||
|
"update": "Update",
|
||||||
|
"history": {
|
||||||
|
"overview": "Things Overview",
|
||||||
|
"visualization": "Data Visualization",
|
||||||
|
"changeHistory": "Change History",
|
||||||
|
"updated": "Updated"
|
||||||
|
}
|
||||||
|
}
|
||||||
29
public/locales/de/timer.json
Normal file
29
public/locales/de/timer.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"toast": {
|
||||||
|
"sessionUpdatedTitle": "Session updated",
|
||||||
|
"sessionUpdatedMessage": "Timer session has been updated successfully.",
|
||||||
|
"sessionUpdateFailTitle": "Failed to update session",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"sessionUpdateErrorTitle": "Error updating session",
|
||||||
|
"sessionDeletedTitle": "Session deleted",
|
||||||
|
"sessionDeletedMessage": "Timer session has been deleted successfully.",
|
||||||
|
"sessionDeleteErrorTitle": "Error deleting session",
|
||||||
|
"deleteConfirmTitle": "Delete Timer Session",
|
||||||
|
"deleteConfirmMessage": "Are you sure you want to delete this timer session?"
|
||||||
|
},
|
||||||
|
"loading": "Loading timer data...",
|
||||||
|
"noData": "No timer data found for this chore.",
|
||||||
|
"activeWork": "Active Work",
|
||||||
|
"breakTime": "Break Time",
|
||||||
|
"workSessions": "Work Sessions",
|
||||||
|
"totalTime": "Total Time",
|
||||||
|
"distribution": "Work vs Break Distribution",
|
||||||
|
"noActiveTime": "No active time yet",
|
||||||
|
"sessionBreakdown": "Session Breakdown",
|
||||||
|
"sessions": "Sessions",
|
||||||
|
"addSession": "Add Session",
|
||||||
|
"startTime": "Start Time",
|
||||||
|
"endTime": "End Time",
|
||||||
|
"leaveEmpty": "Leave empty if session is ongoing",
|
||||||
|
"noSessionForChore": "No timer session found for this chore."
|
||||||
|
}
|
||||||
111
public/locales/es/auth.json
Normal file
111
public/locales/es/auth.json
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"validationError": "Validation Error",
|
||||||
|
"primaryUsernameRequired": "Primary username is required for sub account login",
|
||||||
|
"subNameRequired": "Sub account name is required for sub account login",
|
||||||
|
"usernameRequired": "Username is required",
|
||||||
|
"passwordRequired": "Password is required",
|
||||||
|
"loginFailed": "Login Failed",
|
||||||
|
"genericError": "An error occurred, please try again",
|
||||||
|
"providerLoginFailed": "{{provider}} Login Failed",
|
||||||
|
"providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again",
|
||||||
|
"providerLoginError": "{{provider}} Login Error",
|
||||||
|
"networkError": "Network error occurred, please try again",
|
||||||
|
"mfaFailed": "Two-Factor Authentication Failed",
|
||||||
|
"oauthError": "OAuth Error",
|
||||||
|
"oauthBrowserFailed": "Failed to open authentication browser",
|
||||||
|
"primaryAccount": "Primary Account",
|
||||||
|
"subAccount": "Sub Account",
|
||||||
|
"username": "Username",
|
||||||
|
"primaryUsernamePlaceholder": "Enter primary account username",
|
||||||
|
"subNamePlaceholder": "Enter sub account name",
|
||||||
|
"forgotPassword": "Forgot password?",
|
||||||
|
"or": "or",
|
||||||
|
"email": "Email",
|
||||||
|
"displayNamePlaceholder": "How others see your name",
|
||||||
|
"signupFailed": "Signup Failed",
|
||||||
|
"signupDisabled": "Signup disabled, please contact admin",
|
||||||
|
"usernameMinLength": "Username must be at least 4 characters",
|
||||||
|
"invalidEmail": "Invalid email address",
|
||||||
|
"passwordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"displayNameRequired": "Display name is required",
|
||||||
|
"displayNameChars": "Display name can only contain letters and numbers",
|
||||||
|
"resetEmailSent": "Reset Email Sent",
|
||||||
|
"resetEmailSentMsg": "Check your email for password reset instructions",
|
||||||
|
"resetFailed": "Reset Failed",
|
||||||
|
"resetFailedMsg": "Failed to send reset email, please try again later",
|
||||||
|
"emailPlaceholder": "you@example.com",
|
||||||
|
"passwordUpdated": "Password Updated",
|
||||||
|
"passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...",
|
||||||
|
"passwordUpdateFailed": "Password Update Failed",
|
||||||
|
"passwordUpdateFailedMsg": "Failed to update password, please try again later",
|
||||||
|
"savePassword": "Save password",
|
||||||
|
"server": {
|
||||||
|
"url": "Server URL",
|
||||||
|
"dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.",
|
||||||
|
"unreachable": "Unable to reach the server. Check the URL, port, and network connection.",
|
||||||
|
"invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed."
|
||||||
|
},
|
||||||
|
"mfaModal": {
|
||||||
|
"title": "Two-factor authentication",
|
||||||
|
"codeRequired": "Please enter a verification code",
|
||||||
|
"verifyFailed": "Failed to verify code. Please try again.",
|
||||||
|
"backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.",
|
||||||
|
"codeHint": "Enter the 6-digit code from your authenticator app.",
|
||||||
|
"verify": "Verify & Sign In",
|
||||||
|
"backupLabel": "Backup code",
|
||||||
|
"codeLabel": "Verification code",
|
||||||
|
"backupPlaceholder": "Enter backup code",
|
||||||
|
"useAuthenticator": "Use authenticator app instead",
|
||||||
|
"useBackup": "Use a backup code instead",
|
||||||
|
"backupOnce": "Each backup code can only be used once.",
|
||||||
|
"invalidCode": "Invalid verification code. Please try again."
|
||||||
|
},
|
||||||
|
"appleLoginFailed": "Apple Login Failed",
|
||||||
|
"googleLoginFailed": "Google Login Failed",
|
||||||
|
"createOne": "Create one",
|
||||||
|
"primaryAccountUsernameLabel": "Primary account username",
|
||||||
|
"subAccountNameLabel": "Sub account name",
|
||||||
|
"serverSettings": "Server settings",
|
||||||
|
"useDifferentAccount": "Use a different account",
|
||||||
|
"yourUsername": "Your username",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"confirmNewPassword": "Confirm new password",
|
||||||
|
"newPassword": "New password",
|
||||||
|
"reenterPassword": "Re-enter your password",
|
||||||
|
"requestNewLink": "Request a new link",
|
||||||
|
"setNewPassword": "Set a new password",
|
||||||
|
"linkInvalid": "This link is not valid",
|
||||||
|
"createAccountButton": "Create account",
|
||||||
|
"createYourAccount": "Create your account",
|
||||||
|
"displayNameLabel": "Display name",
|
||||||
|
"usernameHint": "lowercase letters, numbers, dot and dash",
|
||||||
|
"termsShort": "By creating an account you agree to our Terms of Service and Privacy",
|
||||||
|
"checkYourEmail": "Check your email",
|
||||||
|
"resetYourPassword": "Reset your password",
|
||||||
|
"serverChangeWarning": "Changing the server clears locally cached data on this device.",
|
||||||
|
"serverConnected": "Connected. Taking you to sign in...",
|
||||||
|
"passwordLabel": "Password",
|
||||||
|
"showPassword": "Show password",
|
||||||
|
"hidePassword": "Hide password",
|
||||||
|
"loginPasswordPlaceholder": "Enter your password",
|
||||||
|
"signupPasswordPlaceholder": "At least 8 characters",
|
||||||
|
"signupPasswordHelper": "Use 8 to 64 characters.",
|
||||||
|
"orContinueWith": "or continue with",
|
||||||
|
"signupSignInFailed": "Your account was created, but signing in failed. Please sign in.",
|
||||||
|
"authenticating": {
|
||||||
|
"signingIn": "Signing you in",
|
||||||
|
"signingInSub": "This will only take a moment.",
|
||||||
|
"unknownProvider": "Unknown sign-in provider",
|
||||||
|
"contactSupport": "Please contact support.",
|
||||||
|
"signInFailed": "Sign-in failed",
|
||||||
|
"mfaCancelled": "Two-factor authentication was cancelled.",
|
||||||
|
"requestNotVerified": "The sign-in request could not be verified.",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"mfaSessionMissing": "The MFA session is missing. Please try again.",
|
||||||
|
"twoFactor": "Two-factor authentication",
|
||||||
|
"verifyToContinue": "Verify your login to continue.",
|
||||||
|
"noToken": "No valid authentication token was returned.",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"mfaFailed": "Two-factor authentication failed. Please try again."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,5 +71,11 @@
|
|||||||
"reset": "Reiniciar Temporizador",
|
"reset": "Reiniciar Temporizador",
|
||||||
"delete": "Eliminar Sesión"
|
"delete": "Eliminar Sesión"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"toolbar": {
|
||||||
|
"defaultProject": "Default Project"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"assignedToMe": "Assigned to me"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,8 @@
|
|||||||
"filters": "Filtros",
|
"filters": "Filtros",
|
||||||
"activities": "Actividades",
|
"activities": "Actividades",
|
||||||
"points": "Puntos",
|
"points": "Puntos",
|
||||||
"settings": "Configuración"
|
"settings": "Configuración",
|
||||||
|
"reportBug": "Report a Bug"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"title": "Buscar",
|
"title": "Buscar",
|
||||||
@@ -114,5 +115,37 @@
|
|||||||
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
||||||
"open": "Open the issue"
|
"open": "Open the issue"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"done": "Done",
|
||||||
|
"clearAll": "Clear all",
|
||||||
|
"upload": {
|
||||||
|
"quotaTitle": "Storage Quota Exceeded",
|
||||||
|
"quotaMessage": "You have exceeded your quota for uploading files.",
|
||||||
|
"tooLargeTitle": "File Too Large",
|
||||||
|
"tooLargeMessage": "The file you are trying to upload is too large.",
|
||||||
|
"deniedTitle": "Permission Denied",
|
||||||
|
"deniedMessage": "You do not have permission to upload files."
|
||||||
|
},
|
||||||
|
"getStarted": "Get Started!",
|
||||||
|
"imageLoadFailed": "Failed to load image.",
|
||||||
|
"typeHere": "Type in here…",
|
||||||
|
"summaryOfChores": "This is a summary of your chores",
|
||||||
|
"loadingOffline": "You are offline",
|
||||||
|
"loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.",
|
||||||
|
"loadingSlow": "This is taking longer than usual. There might be an issue.",
|
||||||
|
"navigateBack": "Navigate Back",
|
||||||
|
"bottomNav": "Bottom Navigation",
|
||||||
|
"profile": "Profile",
|
||||||
|
"autocompletePlaceholder": "Type here...",
|
||||||
|
"errorScreen": {
|
||||||
|
"title": "Something went wrong",
|
||||||
|
"fallback": "An unexpected error occurred. Try reloading — it usually fixes it.",
|
||||||
|
"tryAgain": "Try again",
|
||||||
|
"home": "Home",
|
||||||
|
"login": "Login",
|
||||||
|
"hideDetails": "Hide error details",
|
||||||
|
"showDetails": "Show error details",
|
||||||
|
"copyToClipboard": "Copy to clipboard",
|
||||||
|
"copied": "Error details copied to clipboard"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
public/locales/es/filters.json
Normal file
17
public/locales/es/filters.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"builder": {
|
||||||
|
"errorName": "Please enter a filter name",
|
||||||
|
"errorConditions": "Please configure at least one filter condition",
|
||||||
|
"editTitle": "Edit Filter",
|
||||||
|
"newTitle": "New Filter",
|
||||||
|
"addConditions": "Add conditions to preview",
|
||||||
|
"save": "Save Filter",
|
||||||
|
"name": "Filter Name",
|
||||||
|
"namePlaceholder": "e.g. Overdue tasks for Alice",
|
||||||
|
"color": "Color"
|
||||||
|
},
|
||||||
|
"nameExists": "A filter with this name already exists",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"overdue": "{{count}} overdue"
|
||||||
|
}
|
||||||
89
public/locales/es/history.json
Normal file
89
public/locales/es/history.json
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"edit": {
|
||||||
|
"title": "Edit History",
|
||||||
|
"completedDate": "Completed Date",
|
||||||
|
"note": "Note",
|
||||||
|
"additionalNotes": "Additional Notes",
|
||||||
|
"deleteTitle": "Delete History",
|
||||||
|
"deleteMessage": "Are you sure you want to delete this history?"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"inProgress": "In Progress",
|
||||||
|
"completed": "Completed",
|
||||||
|
"skipped": "Skipped",
|
||||||
|
"pendingApproval": "Pending Approval",
|
||||||
|
"rejected": "Rejected",
|
||||||
|
"missed": "Missed",
|
||||||
|
"rescheduled": "Rescheduled",
|
||||||
|
"scheduled": "Scheduled"
|
||||||
|
},
|
||||||
|
"badge": {
|
||||||
|
"onTime": "On Time",
|
||||||
|
"onTimeLabel": "On time"
|
||||||
|
},
|
||||||
|
"detail": {
|
||||||
|
"title": "Activity Detail",
|
||||||
|
"openTask": "Open Task",
|
||||||
|
"editEntry": "Edit Entry",
|
||||||
|
"performedBy": "Performed by",
|
||||||
|
"assignedTo": "Assigned to",
|
||||||
|
"lastUpdated": "Last updated",
|
||||||
|
"duration": "Duration",
|
||||||
|
"pointsEarned": "Points earned",
|
||||||
|
"points_one": "{{count}} pt",
|
||||||
|
"points_other": "{{count}} pts",
|
||||||
|
"note": "Note"
|
||||||
|
},
|
||||||
|
"charts": {
|
||||||
|
"noData": "No data available",
|
||||||
|
"noLabels": "No Labels",
|
||||||
|
"unassigned": "Unassigned",
|
||||||
|
"unknownTask": "Unknown Task",
|
||||||
|
"late": "Late",
|
||||||
|
"status": {
|
||||||
|
"title": "Status",
|
||||||
|
"description": "Completed tasks status"
|
||||||
|
},
|
||||||
|
"due": {
|
||||||
|
"title": "Due Date",
|
||||||
|
"description": "Current tasks due date"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"title": "Priority",
|
||||||
|
"description": "Tasks by priority"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"title": "Labels",
|
||||||
|
"description": "Tasks by labels"
|
||||||
|
},
|
||||||
|
"labelsDuration": {
|
||||||
|
"title": "Labels (time)",
|
||||||
|
"description": "Time spent by labels (hours)"
|
||||||
|
},
|
||||||
|
"tasksTime": {
|
||||||
|
"title": "Tasks (time)",
|
||||||
|
"description": "Time spent by individual tasks (hours)"
|
||||||
|
},
|
||||||
|
"assigneeBreakdown": {
|
||||||
|
"title": "by Assignee",
|
||||||
|
"description": "Tasks grouped by assignee"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"status": "Status",
|
||||||
|
"pending": "Pending",
|
||||||
|
"labels": "Labels",
|
||||||
|
"hasNotes": "Has Notes",
|
||||||
|
"hasPoints": "Has Points",
|
||||||
|
"timePeriod": "Time Period",
|
||||||
|
"user": "User"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"days_one": "{{count}} Day",
|
||||||
|
"days_other": "{{count}} Days",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"activities": {
|
||||||
|
"title": "Activities"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
public/locales/es/labels.json
Normal file
9
public/locales/es/labels.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Label",
|
||||||
|
"message": "Are you sure you want to delete this label? This will remove the label from all tasks."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load labels. Please try again.",
|
||||||
|
"blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task."
|
||||||
|
}
|
||||||
74
public/locales/es/points.json
Normal file
74
public/locales/es/points.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"redeem": "Redeem Points",
|
||||||
|
"redeemModal": {
|
||||||
|
"redeemButton": "Redeem",
|
||||||
|
"pointsAvailable": "{{count}} points available",
|
||||||
|
"pointsToRedeem": "Points to Redeem",
|
||||||
|
"placeholder": "Enter points...",
|
||||||
|
"cannotExceed": "Cannot exceed available points",
|
||||||
|
"quickAdd": "Quick Add:",
|
||||||
|
"aboutToRedeem": "You are about to redeem",
|
||||||
|
"amount": "{{count}} points",
|
||||||
|
"remaining": "Remaining: {{count}} points"
|
||||||
|
},
|
||||||
|
"leaderboard": {
|
||||||
|
"titlePoints": "Points Leaderboard",
|
||||||
|
"titleTasks": "Tasks Leaderboard",
|
||||||
|
"subtitlePoints": "Rankings based on points earned during the selected time period",
|
||||||
|
"subtitleTasks": "Rankings based on tasks completed during the selected time period",
|
||||||
|
"modePoints": "Points",
|
||||||
|
"modeTasks": "Tasks",
|
||||||
|
"you": "You",
|
||||||
|
"tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task",
|
||||||
|
"available": "{{count}} available",
|
||||||
|
"points_one": "{{count}} point",
|
||||||
|
"points_other": "{{count}} points"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"short7d": "7D",
|
||||||
|
"short6m": "6M",
|
||||||
|
"shortAll": "All",
|
||||||
|
"days7": "7 Days",
|
||||||
|
"months6": "6 Months",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"analysisTitle": "Filter & Analysis",
|
||||||
|
"title": "Filter Points",
|
||||||
|
"showFor": "Show points for:",
|
||||||
|
"timePeriod": "Time period:"
|
||||||
|
},
|
||||||
|
"cards": {
|
||||||
|
"available": {
|
||||||
|
"title": "Available",
|
||||||
|
"subtext": "Ready to redeem"
|
||||||
|
},
|
||||||
|
"redeemed": {
|
||||||
|
"title": "Redeemed",
|
||||||
|
"subtext": "Previously used"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"title": "Total",
|
||||||
|
"subtext": "All time earned"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"title": "Period Points",
|
||||||
|
"allTime": "All time",
|
||||||
|
"last6Months": "Last 6 months",
|
||||||
|
"lastDays_one": "Last {{count}} day",
|
||||||
|
"lastDays_other": "Last {{count}} days"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"showingFor": "Showing points for",
|
||||||
|
"unknownUser": "Unknown User",
|
||||||
|
"overThe": "over the",
|
||||||
|
"allTime": "All Time",
|
||||||
|
"last6Months": "Last 6 Months",
|
||||||
|
"lastDays_one": "Last {{count}} Day",
|
||||||
|
"lastDays_other": "Last {{count}} Days"
|
||||||
|
},
|
||||||
|
"trend": {
|
||||||
|
"title": "Points Trend"
|
||||||
|
}
|
||||||
|
}
|
||||||
24
public/locales/es/projects.json
Normal file
24
public/locales/es/projects.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"iconPicker": {
|
||||||
|
"chooseIcon": "Choose Project Icon",
|
||||||
|
"availableIcons": "Available Icons"
|
||||||
|
},
|
||||||
|
"defaultChip": "Default",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Project",
|
||||||
|
"message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load projects. Please try again.",
|
||||||
|
"blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.",
|
||||||
|
"defaultDescription": "All tasks without a specific project",
|
||||||
|
"selector": {
|
||||||
|
"title": "Projects",
|
||||||
|
"createNew": "Create New Project",
|
||||||
|
"createNewDescription": "Add a custom project workspace",
|
||||||
|
"manage": "Manage Projects",
|
||||||
|
"manageDescription": "View, edit, and organize all projects"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -490,5 +490,78 @@
|
|||||||
"notConnected": "Las actualizaciones en tiempo real están activadas pero ahora mismo no hay conexión.",
|
"notConnected": "Las actualizaciones en tiempo real están activadas pero ahora mismo no hay conexión.",
|
||||||
"basicPlanNotice": "Las actualizaciones en tiempo real no están disponibles en el plan Básico. Mejora a Plus para recibir notificaciones instantáneas cuando tú u otros miembros del círculo completéis, omitáis o modifiquéis tareas."
|
"basicPlanNotice": "Las actualizaciones en tiempo real no están disponibles en el plan Básico. Mejora a Plus para recibir notificaciones instantáneas cuando tú u otros miembros del círculo completéis, omitáis o modifiquéis tareas."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"subscription": {
|
||||||
|
"sessionFailed": "Failed to create subscription session",
|
||||||
|
"errorTitle": "Subscription Error",
|
||||||
|
"errorMessage": "Failed to start subscription process. Please try again.",
|
||||||
|
"subscribe": "Subscribe",
|
||||||
|
"cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe."
|
||||||
|
},
|
||||||
|
"childUsers": {
|
||||||
|
"errNameRequired": "Sub account name is required",
|
||||||
|
"errNameMin": "Sub account name must be at least 2 characters",
|
||||||
|
"errNameMax": "Sub account name must be less than 20 characters",
|
||||||
|
"errNameChars": "Sub account name can only contain lowercase letters, dot and dash",
|
||||||
|
"errPasswordRequired": "Password is required",
|
||||||
|
"errPasswordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"errPasswordMatch": "Passwords do not match",
|
||||||
|
"errDisplayNameMax": "Display name must be less than 50 characters",
|
||||||
|
"createTitle": "Create Sub Account",
|
||||||
|
"createButton": "Create Account",
|
||||||
|
"nameLabel": "Sub Account Name *",
|
||||||
|
"namePlaceholder": "Enter sub account name (e.g., sarah)",
|
||||||
|
"displayNameLabel": "Display Name",
|
||||||
|
"displayNamePlaceholder": "Display name (optional, defaults to sub account name)",
|
||||||
|
"passwordLabel": "Password *",
|
||||||
|
"passwordPlaceholder": "Enter password (8-64 characters)",
|
||||||
|
"confirmPasswordLabel": "Confirm Password *",
|
||||||
|
"confirmPasswordPlaceholder": "Confirm password"
|
||||||
|
},
|
||||||
|
"passwordChange": {
|
||||||
|
"minLength": "Password must be at least 8 characters",
|
||||||
|
"maxLength": "Password must be less than 64 characters"
|
||||||
|
},
|
||||||
|
"payment": {
|
||||||
|
"cancelledTitle": "Payment has been cancelled",
|
||||||
|
"cancelledRedirect": "You will be redirected to the main page shortly.",
|
||||||
|
"successTitle": "Payment Successful!",
|
||||||
|
"successRedirect": "You will be redirected to the settings page shortly."
|
||||||
|
},
|
||||||
|
"developer": {
|
||||||
|
"tokenRefreshed": "Token refreshed successfully",
|
||||||
|
"endpointCalled": "Refresh token endpoint called successfully",
|
||||||
|
"clearDbCleared": "Local offline database cleared. Starting full sync...",
|
||||||
|
"clearDbDone": "Full sync completed from the beginning",
|
||||||
|
"intro": "View technical information about your authentication tokens and session",
|
||||||
|
"refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform",
|
||||||
|
"noReconnectInfo": "No reconnection information available",
|
||||||
|
"noTimeoutInfo": "No timeout information available",
|
||||||
|
"noDebugInfo": "No debug information available"
|
||||||
|
},
|
||||||
|
"backup": {
|
||||||
|
"keyRequired": "Encryption key is required",
|
||||||
|
"created": "Backup created and downloaded successfully",
|
||||||
|
"createFailed": "Failed to create backup",
|
||||||
|
"selectFile": "Please select a backup file",
|
||||||
|
"restored": "Backup restored successfully. Please refresh the page.",
|
||||||
|
"restoreFailed": "Failed to restore backup",
|
||||||
|
"readFailed": "Failed to read backup file",
|
||||||
|
"createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.",
|
||||||
|
"keyPlaceholder": "Enter a strong encryption key",
|
||||||
|
"includeAssets": "Include uploaded files and assets",
|
||||||
|
"warningLabel": "Warning:",
|
||||||
|
"restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.",
|
||||||
|
"restoreKeyPlaceholder": "Enter the encryption key used for this backup"
|
||||||
|
},
|
||||||
|
"deletion": {
|
||||||
|
"passwordRequired": "Please enter your password to continue",
|
||||||
|
"passwordAndDelete": "Please enter your password and type DELETE to confirm",
|
||||||
|
"failed": "Failed to delete account",
|
||||||
|
"passwordPlaceholder": "Enter your password",
|
||||||
|
"transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:",
|
||||||
|
"selectOwner": "Select new owner",
|
||||||
|
"confirmPrompt": "Please enter your password and type DELETE to confirm",
|
||||||
|
"typeDelete": "DELETE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
public/locales/es/things.json
Normal file
18
public/locales/es/things.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"errName": "Name is required",
|
||||||
|
"errStateNumber": "State must be a number",
|
||||||
|
"errStateBool": "State must be true or false",
|
||||||
|
"errStateRequired": "State is required",
|
||||||
|
"name": "Name",
|
||||||
|
"namePlaceholder": "Thing name",
|
||||||
|
"value": "Value",
|
||||||
|
"valuePlaceholder": "Thing value",
|
||||||
|
"updateState": "Update state",
|
||||||
|
"update": "Update",
|
||||||
|
"history": {
|
||||||
|
"overview": "Things Overview",
|
||||||
|
"visualization": "Data Visualization",
|
||||||
|
"changeHistory": "Change History",
|
||||||
|
"updated": "Updated"
|
||||||
|
}
|
||||||
|
}
|
||||||
29
public/locales/es/timer.json
Normal file
29
public/locales/es/timer.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"toast": {
|
||||||
|
"sessionUpdatedTitle": "Session updated",
|
||||||
|
"sessionUpdatedMessage": "Timer session has been updated successfully.",
|
||||||
|
"sessionUpdateFailTitle": "Failed to update session",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"sessionUpdateErrorTitle": "Error updating session",
|
||||||
|
"sessionDeletedTitle": "Session deleted",
|
||||||
|
"sessionDeletedMessage": "Timer session has been deleted successfully.",
|
||||||
|
"sessionDeleteErrorTitle": "Error deleting session",
|
||||||
|
"deleteConfirmTitle": "Delete Timer Session",
|
||||||
|
"deleteConfirmMessage": "Are you sure you want to delete this timer session?"
|
||||||
|
},
|
||||||
|
"loading": "Loading timer data...",
|
||||||
|
"noData": "No timer data found for this chore.",
|
||||||
|
"activeWork": "Active Work",
|
||||||
|
"breakTime": "Break Time",
|
||||||
|
"workSessions": "Work Sessions",
|
||||||
|
"totalTime": "Total Time",
|
||||||
|
"distribution": "Work vs Break Distribution",
|
||||||
|
"noActiveTime": "No active time yet",
|
||||||
|
"sessionBreakdown": "Session Breakdown",
|
||||||
|
"sessions": "Sessions",
|
||||||
|
"addSession": "Add Session",
|
||||||
|
"startTime": "Start Time",
|
||||||
|
"endTime": "End Time",
|
||||||
|
"leaveEmpty": "Leave empty if session is ongoing",
|
||||||
|
"noSessionForChore": "No timer session found for this chore."
|
||||||
|
}
|
||||||
111
public/locales/fr/auth.json
Normal file
111
public/locales/fr/auth.json
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"validationError": "Validation Error",
|
||||||
|
"primaryUsernameRequired": "Primary username is required for sub account login",
|
||||||
|
"subNameRequired": "Sub account name is required for sub account login",
|
||||||
|
"usernameRequired": "Username is required",
|
||||||
|
"passwordRequired": "Password is required",
|
||||||
|
"loginFailed": "Login Failed",
|
||||||
|
"genericError": "An error occurred, please try again",
|
||||||
|
"providerLoginFailed": "{{provider}} Login Failed",
|
||||||
|
"providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again",
|
||||||
|
"providerLoginError": "{{provider}} Login Error",
|
||||||
|
"networkError": "Network error occurred, please try again",
|
||||||
|
"mfaFailed": "Two-Factor Authentication Failed",
|
||||||
|
"oauthError": "OAuth Error",
|
||||||
|
"oauthBrowserFailed": "Failed to open authentication browser",
|
||||||
|
"primaryAccount": "Primary Account",
|
||||||
|
"subAccount": "Sub Account",
|
||||||
|
"username": "Username",
|
||||||
|
"primaryUsernamePlaceholder": "Enter primary account username",
|
||||||
|
"subNamePlaceholder": "Enter sub account name",
|
||||||
|
"forgotPassword": "Forgot password?",
|
||||||
|
"or": "or",
|
||||||
|
"email": "Email",
|
||||||
|
"displayNamePlaceholder": "How others see your name",
|
||||||
|
"signupFailed": "Signup Failed",
|
||||||
|
"signupDisabled": "Signup disabled, please contact admin",
|
||||||
|
"usernameMinLength": "Username must be at least 4 characters",
|
||||||
|
"invalidEmail": "Invalid email address",
|
||||||
|
"passwordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"displayNameRequired": "Display name is required",
|
||||||
|
"displayNameChars": "Display name can only contain letters and numbers",
|
||||||
|
"resetEmailSent": "Reset Email Sent",
|
||||||
|
"resetEmailSentMsg": "Check your email for password reset instructions",
|
||||||
|
"resetFailed": "Reset Failed",
|
||||||
|
"resetFailedMsg": "Failed to send reset email, please try again later",
|
||||||
|
"emailPlaceholder": "you@example.com",
|
||||||
|
"passwordUpdated": "Password Updated",
|
||||||
|
"passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...",
|
||||||
|
"passwordUpdateFailed": "Password Update Failed",
|
||||||
|
"passwordUpdateFailedMsg": "Failed to update password, please try again later",
|
||||||
|
"savePassword": "Save password",
|
||||||
|
"server": {
|
||||||
|
"url": "Server URL",
|
||||||
|
"dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.",
|
||||||
|
"unreachable": "Unable to reach the server. Check the URL, port, and network connection.",
|
||||||
|
"invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed."
|
||||||
|
},
|
||||||
|
"mfaModal": {
|
||||||
|
"title": "Two-factor authentication",
|
||||||
|
"codeRequired": "Please enter a verification code",
|
||||||
|
"verifyFailed": "Failed to verify code. Please try again.",
|
||||||
|
"backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.",
|
||||||
|
"codeHint": "Enter the 6-digit code from your authenticator app.",
|
||||||
|
"verify": "Verify & Sign In",
|
||||||
|
"backupLabel": "Backup code",
|
||||||
|
"codeLabel": "Verification code",
|
||||||
|
"backupPlaceholder": "Enter backup code",
|
||||||
|
"useAuthenticator": "Use authenticator app instead",
|
||||||
|
"useBackup": "Use a backup code instead",
|
||||||
|
"backupOnce": "Each backup code can only be used once.",
|
||||||
|
"invalidCode": "Invalid verification code. Please try again."
|
||||||
|
},
|
||||||
|
"appleLoginFailed": "Apple Login Failed",
|
||||||
|
"googleLoginFailed": "Google Login Failed",
|
||||||
|
"createOne": "Create one",
|
||||||
|
"primaryAccountUsernameLabel": "Primary account username",
|
||||||
|
"subAccountNameLabel": "Sub account name",
|
||||||
|
"serverSettings": "Server settings",
|
||||||
|
"useDifferentAccount": "Use a different account",
|
||||||
|
"yourUsername": "Your username",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"confirmNewPassword": "Confirm new password",
|
||||||
|
"newPassword": "New password",
|
||||||
|
"reenterPassword": "Re-enter your password",
|
||||||
|
"requestNewLink": "Request a new link",
|
||||||
|
"setNewPassword": "Set a new password",
|
||||||
|
"linkInvalid": "This link is not valid",
|
||||||
|
"createAccountButton": "Create account",
|
||||||
|
"createYourAccount": "Create your account",
|
||||||
|
"displayNameLabel": "Display name",
|
||||||
|
"usernameHint": "lowercase letters, numbers, dot and dash",
|
||||||
|
"termsShort": "By creating an account you agree to our Terms of Service and Privacy",
|
||||||
|
"checkYourEmail": "Check your email",
|
||||||
|
"resetYourPassword": "Reset your password",
|
||||||
|
"serverChangeWarning": "Changing the server clears locally cached data on this device.",
|
||||||
|
"serverConnected": "Connected. Taking you to sign in...",
|
||||||
|
"passwordLabel": "Password",
|
||||||
|
"showPassword": "Show password",
|
||||||
|
"hidePassword": "Hide password",
|
||||||
|
"loginPasswordPlaceholder": "Enter your password",
|
||||||
|
"signupPasswordPlaceholder": "At least 8 characters",
|
||||||
|
"signupPasswordHelper": "Use 8 to 64 characters.",
|
||||||
|
"orContinueWith": "or continue with",
|
||||||
|
"signupSignInFailed": "Your account was created, but signing in failed. Please sign in.",
|
||||||
|
"authenticating": {
|
||||||
|
"signingIn": "Signing you in",
|
||||||
|
"signingInSub": "This will only take a moment.",
|
||||||
|
"unknownProvider": "Unknown sign-in provider",
|
||||||
|
"contactSupport": "Please contact support.",
|
||||||
|
"signInFailed": "Sign-in failed",
|
||||||
|
"mfaCancelled": "Two-factor authentication was cancelled.",
|
||||||
|
"requestNotVerified": "The sign-in request could not be verified.",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"mfaSessionMissing": "The MFA session is missing. Please try again.",
|
||||||
|
"twoFactor": "Two-factor authentication",
|
||||||
|
"verifyToContinue": "Verify your login to continue.",
|
||||||
|
"noToken": "No valid authentication token was returned.",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"mfaFailed": "Two-factor authentication failed. Please try again."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,5 +71,11 @@
|
|||||||
"reset": "Réinitialiser le Minuteur",
|
"reset": "Réinitialiser le Minuteur",
|
||||||
"delete": "Supprimer la Session"
|
"delete": "Supprimer la Session"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"toolbar": {
|
||||||
|
"defaultProject": "Default Project"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"assignedToMe": "Assigned to me"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,8 @@
|
|||||||
"filters": "Filtres",
|
"filters": "Filtres",
|
||||||
"activities": "Activités",
|
"activities": "Activités",
|
||||||
"points": "Points",
|
"points": "Points",
|
||||||
"settings": "Paramètres"
|
"settings": "Paramètres",
|
||||||
|
"reportBug": "Report a Bug"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"title": "Recherche",
|
"title": "Recherche",
|
||||||
@@ -44,7 +45,7 @@
|
|||||||
},
|
},
|
||||||
"groups": {
|
"groups": {
|
||||||
"tasks": "Tâches",
|
"tasks": "Tâches",
|
||||||
"history": "Notes",
|
"history": "Remarques",
|
||||||
"projects": "Projets",
|
"projects": "Projets",
|
||||||
"labels": "Étiquettes",
|
"labels": "Étiquettes",
|
||||||
"people": "Personnes",
|
"people": "Personnes",
|
||||||
@@ -70,49 +71,81 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"feedback": {
|
"feedback": {
|
||||||
"later": "Maybe later",
|
"later": "Peut-être plus tard",
|
||||||
"sentiment": {
|
"sentiment": {
|
||||||
"title": "How's Donetick working for you?",
|
"title": "How's Donetick working for you?",
|
||||||
"subtitle": "Votre réponse nous aide à décider de ce qu'il faut construire ensuite.",
|
"subtitle": "Votre réponse nous aide à décider de ce qu'il faut construire ensuite.",
|
||||||
"options": {
|
"options": {
|
||||||
"love": "Love it",
|
"love": "J'adore",
|
||||||
"okay": "It's okay",
|
"okay": "C'est ok",
|
||||||
"issues": "Having issues"
|
"issues": "Problèmes rencontrés"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"categories": {
|
"categories": {
|
||||||
"bugs": "Bugs",
|
"bugs": "Anomalies",
|
||||||
"missingFeature": "Missing feature",
|
"missingFeature": "Fonctionnalités manquantes",
|
||||||
"tooComplicated": "Too complicated",
|
"tooComplicated": "Trop compliqué",
|
||||||
"slow": "Slow",
|
"slow": "Lent",
|
||||||
"notifications": "Notifications",
|
"notifications": "Notifications",
|
||||||
"ai": "AI",
|
"ai": "IA",
|
||||||
"other": "Other"
|
"other": "Autres"
|
||||||
},
|
},
|
||||||
"details": {
|
"details": {
|
||||||
"title": "What could we improve?",
|
"title": "Que pouvons-nous améliorer ?",
|
||||||
"messageLabel": "Tell us more",
|
"messageLabel": "Dites-nous-en plus",
|
||||||
"messagePlaceholder": "What happened, or what would make this better?",
|
"messagePlaceholder": "What happened, or what would make this better?",
|
||||||
"contextNote": "We'll include your app version, device and platform so we can reproduce issues.",
|
"contextNote": "We'll include your app version, device and platform so we can reproduce issues.",
|
||||||
"submit": "Send feedback",
|
"submit": "Envoyer vos remarques",
|
||||||
"contextNoteSelfHosted": "You're on a self-hosted instance, so nothing is sent from your server — we'll open a pre-filled GitHub issue you can review and edit first.",
|
"contextNoteSelfHosted": "Vous êtes sur une instance autohébergée, donc rien n'est envoyé depuis votre serveur — nous allons ouvrir un problème GitHub prérempli que vous pouvez examiner et modifier si besoin.",
|
||||||
"submitSelfHosted": "Continue to GitHub"
|
"submitSelfHosted": "Continuer sur GitHub"
|
||||||
},
|
},
|
||||||
"review": {
|
"review": {
|
||||||
"title": "Glad you're enjoying it!",
|
"title": "Nous sommes ravis que vous l'appréciez !",
|
||||||
"subtitle": "A rating or a star helps other people find Donetick.",
|
"subtitle": "A rating or a star helps other people find Donetick.",
|
||||||
"github": "Star on GitHub",
|
"github": "Mettez une étoile sur GitHub",
|
||||||
"appStore": "Rate on the App Store",
|
"appStore": "Évaluer sur l'App Store",
|
||||||
"playStore": "Rate on Google Play"
|
"playStore": "Évaluer sur Google Play"
|
||||||
},
|
},
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"title": "Thanks for the feedback",
|
"title": "Merci pour votre retour",
|
||||||
"subtitle": "We read every response and it shapes what we work on next."
|
"subtitle": "We read every response and it shapes what we work on next."
|
||||||
},
|
},
|
||||||
"github": {
|
"github": {
|
||||||
"title": "Report it on GitHub",
|
"title": "Signaler sur GitHub",
|
||||||
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
||||||
"open": "Open the issue"
|
"open": "Ouvrir un ticket"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"done": "Done",
|
||||||
|
"clearAll": "Clear all",
|
||||||
|
"upload": {
|
||||||
|
"quotaTitle": "Storage Quota Exceeded",
|
||||||
|
"quotaMessage": "You have exceeded your quota for uploading files.",
|
||||||
|
"tooLargeTitle": "File Too Large",
|
||||||
|
"tooLargeMessage": "The file you are trying to upload is too large.",
|
||||||
|
"deniedTitle": "Permission Denied",
|
||||||
|
"deniedMessage": "You do not have permission to upload files."
|
||||||
|
},
|
||||||
|
"getStarted": "Get Started!",
|
||||||
|
"imageLoadFailed": "Failed to load image.",
|
||||||
|
"typeHere": "Type in here…",
|
||||||
|
"summaryOfChores": "This is a summary of your chores",
|
||||||
|
"loadingOffline": "You are offline",
|
||||||
|
"loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.",
|
||||||
|
"loadingSlow": "This is taking longer than usual. There might be an issue.",
|
||||||
|
"navigateBack": "Navigate Back",
|
||||||
|
"bottomNav": "Bottom Navigation",
|
||||||
|
"profile": "Profile",
|
||||||
|
"autocompletePlaceholder": "Type here...",
|
||||||
|
"errorScreen": {
|
||||||
|
"title": "Something went wrong",
|
||||||
|
"fallback": "An unexpected error occurred. Try reloading — it usually fixes it.",
|
||||||
|
"tryAgain": "Try again",
|
||||||
|
"home": "Home",
|
||||||
|
"login": "Login",
|
||||||
|
"hideDetails": "Hide error details",
|
||||||
|
"showDetails": "Show error details",
|
||||||
|
"copyToClipboard": "Copy to clipboard",
|
||||||
|
"copied": "Error details copied to clipboard"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
public/locales/fr/filters.json
Normal file
17
public/locales/fr/filters.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"builder": {
|
||||||
|
"errorName": "Please enter a filter name",
|
||||||
|
"errorConditions": "Please configure at least one filter condition",
|
||||||
|
"editTitle": "Edit Filter",
|
||||||
|
"newTitle": "New Filter",
|
||||||
|
"addConditions": "Add conditions to preview",
|
||||||
|
"save": "Save Filter",
|
||||||
|
"name": "Filter Name",
|
||||||
|
"namePlaceholder": "e.g. Overdue tasks for Alice",
|
||||||
|
"color": "Color"
|
||||||
|
},
|
||||||
|
"nameExists": "A filter with this name already exists",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"overdue": "{{count}} overdue"
|
||||||
|
}
|
||||||
89
public/locales/fr/history.json
Normal file
89
public/locales/fr/history.json
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"edit": {
|
||||||
|
"title": "Edit History",
|
||||||
|
"completedDate": "Completed Date",
|
||||||
|
"note": "Note",
|
||||||
|
"additionalNotes": "Additional Notes",
|
||||||
|
"deleteTitle": "Delete History",
|
||||||
|
"deleteMessage": "Are you sure you want to delete this history?"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"inProgress": "In Progress",
|
||||||
|
"completed": "Completed",
|
||||||
|
"skipped": "Skipped",
|
||||||
|
"pendingApproval": "Pending Approval",
|
||||||
|
"rejected": "Rejected",
|
||||||
|
"missed": "Missed",
|
||||||
|
"rescheduled": "Rescheduled",
|
||||||
|
"scheduled": "Scheduled"
|
||||||
|
},
|
||||||
|
"badge": {
|
||||||
|
"onTime": "On Time",
|
||||||
|
"onTimeLabel": "On time"
|
||||||
|
},
|
||||||
|
"detail": {
|
||||||
|
"title": "Activity Detail",
|
||||||
|
"openTask": "Open Task",
|
||||||
|
"editEntry": "Edit Entry",
|
||||||
|
"performedBy": "Performed by",
|
||||||
|
"assignedTo": "Assigned to",
|
||||||
|
"lastUpdated": "Last updated",
|
||||||
|
"duration": "Duration",
|
||||||
|
"pointsEarned": "Points earned",
|
||||||
|
"points_one": "{{count}} pt",
|
||||||
|
"points_other": "{{count}} pts",
|
||||||
|
"note": "Note"
|
||||||
|
},
|
||||||
|
"charts": {
|
||||||
|
"noData": "No data available",
|
||||||
|
"noLabels": "No Labels",
|
||||||
|
"unassigned": "Unassigned",
|
||||||
|
"unknownTask": "Unknown Task",
|
||||||
|
"late": "Late",
|
||||||
|
"status": {
|
||||||
|
"title": "Status",
|
||||||
|
"description": "Completed tasks status"
|
||||||
|
},
|
||||||
|
"due": {
|
||||||
|
"title": "Due Date",
|
||||||
|
"description": "Current tasks due date"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"title": "Priority",
|
||||||
|
"description": "Tasks by priority"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"title": "Labels",
|
||||||
|
"description": "Tasks by labels"
|
||||||
|
},
|
||||||
|
"labelsDuration": {
|
||||||
|
"title": "Labels (time)",
|
||||||
|
"description": "Time spent by labels (hours)"
|
||||||
|
},
|
||||||
|
"tasksTime": {
|
||||||
|
"title": "Tasks (time)",
|
||||||
|
"description": "Time spent by individual tasks (hours)"
|
||||||
|
},
|
||||||
|
"assigneeBreakdown": {
|
||||||
|
"title": "by Assignee",
|
||||||
|
"description": "Tasks grouped by assignee"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"status": "Status",
|
||||||
|
"pending": "Pending",
|
||||||
|
"labels": "Labels",
|
||||||
|
"hasNotes": "Has Notes",
|
||||||
|
"hasPoints": "Has Points",
|
||||||
|
"timePeriod": "Time Period",
|
||||||
|
"user": "User"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"days_one": "{{count}} Day",
|
||||||
|
"days_other": "{{count}} Days",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"activities": {
|
||||||
|
"title": "Activities"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
public/locales/fr/labels.json
Normal file
9
public/locales/fr/labels.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Label",
|
||||||
|
"message": "Are you sure you want to delete this label? This will remove the label from all tasks."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load labels. Please try again.",
|
||||||
|
"blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task."
|
||||||
|
}
|
||||||
74
public/locales/fr/points.json
Normal file
74
public/locales/fr/points.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"redeem": "Redeem Points",
|
||||||
|
"redeemModal": {
|
||||||
|
"redeemButton": "Redeem",
|
||||||
|
"pointsAvailable": "{{count}} points available",
|
||||||
|
"pointsToRedeem": "Points to Redeem",
|
||||||
|
"placeholder": "Enter points...",
|
||||||
|
"cannotExceed": "Cannot exceed available points",
|
||||||
|
"quickAdd": "Quick Add:",
|
||||||
|
"aboutToRedeem": "You are about to redeem",
|
||||||
|
"amount": "{{count}} points",
|
||||||
|
"remaining": "Remaining: {{count}} points"
|
||||||
|
},
|
||||||
|
"leaderboard": {
|
||||||
|
"titlePoints": "Points Leaderboard",
|
||||||
|
"titleTasks": "Tasks Leaderboard",
|
||||||
|
"subtitlePoints": "Rankings based on points earned during the selected time period",
|
||||||
|
"subtitleTasks": "Rankings based on tasks completed during the selected time period",
|
||||||
|
"modePoints": "Points",
|
||||||
|
"modeTasks": "Tasks",
|
||||||
|
"you": "You",
|
||||||
|
"tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task",
|
||||||
|
"available": "{{count}} available",
|
||||||
|
"points_one": "{{count}} point",
|
||||||
|
"points_other": "{{count}} points"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"short7d": "7D",
|
||||||
|
"short6m": "6M",
|
||||||
|
"shortAll": "All",
|
||||||
|
"days7": "7 Days",
|
||||||
|
"months6": "6 Months",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"analysisTitle": "Filter & Analysis",
|
||||||
|
"title": "Filter Points",
|
||||||
|
"showFor": "Show points for:",
|
||||||
|
"timePeriod": "Time period:"
|
||||||
|
},
|
||||||
|
"cards": {
|
||||||
|
"available": {
|
||||||
|
"title": "Available",
|
||||||
|
"subtext": "Ready to redeem"
|
||||||
|
},
|
||||||
|
"redeemed": {
|
||||||
|
"title": "Redeemed",
|
||||||
|
"subtext": "Previously used"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"title": "Total",
|
||||||
|
"subtext": "All time earned"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"title": "Period Points",
|
||||||
|
"allTime": "All time",
|
||||||
|
"last6Months": "Last 6 months",
|
||||||
|
"lastDays_one": "Last {{count}} day",
|
||||||
|
"lastDays_other": "Last {{count}} days"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"showingFor": "Showing points for",
|
||||||
|
"unknownUser": "Unknown User",
|
||||||
|
"overThe": "over the",
|
||||||
|
"allTime": "All Time",
|
||||||
|
"last6Months": "Last 6 Months",
|
||||||
|
"lastDays_one": "Last {{count}} Day",
|
||||||
|
"lastDays_other": "Last {{count}} Days"
|
||||||
|
},
|
||||||
|
"trend": {
|
||||||
|
"title": "Points Trend"
|
||||||
|
}
|
||||||
|
}
|
||||||
24
public/locales/fr/projects.json
Normal file
24
public/locales/fr/projects.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"iconPicker": {
|
||||||
|
"chooseIcon": "Choose Project Icon",
|
||||||
|
"availableIcons": "Available Icons"
|
||||||
|
},
|
||||||
|
"defaultChip": "Default",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Project",
|
||||||
|
"message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load projects. Please try again.",
|
||||||
|
"blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.",
|
||||||
|
"defaultDescription": "All tasks without a specific project",
|
||||||
|
"selector": {
|
||||||
|
"title": "Projects",
|
||||||
|
"createNew": "Create New Project",
|
||||||
|
"createNewDescription": "Add a custom project workspace",
|
||||||
|
"manage": "Manage Projects",
|
||||||
|
"manageDescription": "View, edit, and organize all projects"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -490,5 +490,78 @@
|
|||||||
"notConnected": "Les mises à jour en temps réel sont activées mais non connectées actuellement.",
|
"notConnected": "Les mises à jour en temps réel sont activées mais non connectées actuellement.",
|
||||||
"basicPlanNotice": "Les mises à jour en temps réel ne sont pas disponibles dans la formule de base. Passez à Plus pour recevoir des notifications instantanées lorsque vous ou d'autres membres du cercle terminez, passez ou modifiez des tâches."
|
"basicPlanNotice": "Les mises à jour en temps réel ne sont pas disponibles dans la formule de base. Passez à Plus pour recevoir des notifications instantanées lorsque vous ou d'autres membres du cercle terminez, passez ou modifiez des tâches."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"subscription": {
|
||||||
|
"sessionFailed": "Failed to create subscription session",
|
||||||
|
"errorTitle": "Subscription Error",
|
||||||
|
"errorMessage": "Failed to start subscription process. Please try again.",
|
||||||
|
"subscribe": "Subscribe",
|
||||||
|
"cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe."
|
||||||
|
},
|
||||||
|
"childUsers": {
|
||||||
|
"errNameRequired": "Sub account name is required",
|
||||||
|
"errNameMin": "Sub account name must be at least 2 characters",
|
||||||
|
"errNameMax": "Sub account name must be less than 20 characters",
|
||||||
|
"errNameChars": "Sub account name can only contain lowercase letters, dot and dash",
|
||||||
|
"errPasswordRequired": "Password is required",
|
||||||
|
"errPasswordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"errPasswordMatch": "Passwords do not match",
|
||||||
|
"errDisplayNameMax": "Display name must be less than 50 characters",
|
||||||
|
"createTitle": "Create Sub Account",
|
||||||
|
"createButton": "Create Account",
|
||||||
|
"nameLabel": "Sub Account Name *",
|
||||||
|
"namePlaceholder": "Enter sub account name (e.g., sarah)",
|
||||||
|
"displayNameLabel": "Display Name",
|
||||||
|
"displayNamePlaceholder": "Display name (optional, defaults to sub account name)",
|
||||||
|
"passwordLabel": "Password *",
|
||||||
|
"passwordPlaceholder": "Enter password (8-64 characters)",
|
||||||
|
"confirmPasswordLabel": "Confirm Password *",
|
||||||
|
"confirmPasswordPlaceholder": "Confirm password"
|
||||||
|
},
|
||||||
|
"passwordChange": {
|
||||||
|
"minLength": "Password must be at least 8 characters",
|
||||||
|
"maxLength": "Password must be less than 64 characters"
|
||||||
|
},
|
||||||
|
"payment": {
|
||||||
|
"cancelledTitle": "Payment has been cancelled",
|
||||||
|
"cancelledRedirect": "You will be redirected to the main page shortly.",
|
||||||
|
"successTitle": "Payment Successful!",
|
||||||
|
"successRedirect": "You will be redirected to the settings page shortly."
|
||||||
|
},
|
||||||
|
"developer": {
|
||||||
|
"tokenRefreshed": "Token refreshed successfully",
|
||||||
|
"endpointCalled": "Refresh token endpoint called successfully",
|
||||||
|
"clearDbCleared": "Local offline database cleared. Starting full sync...",
|
||||||
|
"clearDbDone": "Full sync completed from the beginning",
|
||||||
|
"intro": "View technical information about your authentication tokens and session",
|
||||||
|
"refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform",
|
||||||
|
"noReconnectInfo": "No reconnection information available",
|
||||||
|
"noTimeoutInfo": "No timeout information available",
|
||||||
|
"noDebugInfo": "No debug information available"
|
||||||
|
},
|
||||||
|
"backup": {
|
||||||
|
"keyRequired": "Encryption key is required",
|
||||||
|
"created": "Backup created and downloaded successfully",
|
||||||
|
"createFailed": "Failed to create backup",
|
||||||
|
"selectFile": "Please select a backup file",
|
||||||
|
"restored": "Backup restored successfully. Please refresh the page.",
|
||||||
|
"restoreFailed": "Failed to restore backup",
|
||||||
|
"readFailed": "Failed to read backup file",
|
||||||
|
"createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.",
|
||||||
|
"keyPlaceholder": "Enter a strong encryption key",
|
||||||
|
"includeAssets": "Include uploaded files and assets",
|
||||||
|
"warningLabel": "Warning:",
|
||||||
|
"restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.",
|
||||||
|
"restoreKeyPlaceholder": "Enter the encryption key used for this backup"
|
||||||
|
},
|
||||||
|
"deletion": {
|
||||||
|
"passwordRequired": "Please enter your password to continue",
|
||||||
|
"passwordAndDelete": "Please enter your password and type DELETE to confirm",
|
||||||
|
"failed": "Failed to delete account",
|
||||||
|
"passwordPlaceholder": "Enter your password",
|
||||||
|
"transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:",
|
||||||
|
"selectOwner": "Select new owner",
|
||||||
|
"confirmPrompt": "Please enter your password and type DELETE to confirm",
|
||||||
|
"typeDelete": "DELETE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
public/locales/fr/things.json
Normal file
18
public/locales/fr/things.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"errName": "Name is required",
|
||||||
|
"errStateNumber": "State must be a number",
|
||||||
|
"errStateBool": "State must be true or false",
|
||||||
|
"errStateRequired": "State is required",
|
||||||
|
"name": "Name",
|
||||||
|
"namePlaceholder": "Thing name",
|
||||||
|
"value": "Value",
|
||||||
|
"valuePlaceholder": "Thing value",
|
||||||
|
"updateState": "Update state",
|
||||||
|
"update": "Update",
|
||||||
|
"history": {
|
||||||
|
"overview": "Things Overview",
|
||||||
|
"visualization": "Data Visualization",
|
||||||
|
"changeHistory": "Change History",
|
||||||
|
"updated": "Updated"
|
||||||
|
}
|
||||||
|
}
|
||||||
29
public/locales/fr/timer.json
Normal file
29
public/locales/fr/timer.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"toast": {
|
||||||
|
"sessionUpdatedTitle": "Session updated",
|
||||||
|
"sessionUpdatedMessage": "Timer session has been updated successfully.",
|
||||||
|
"sessionUpdateFailTitle": "Failed to update session",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"sessionUpdateErrorTitle": "Error updating session",
|
||||||
|
"sessionDeletedTitle": "Session deleted",
|
||||||
|
"sessionDeletedMessage": "Timer session has been deleted successfully.",
|
||||||
|
"sessionDeleteErrorTitle": "Error deleting session",
|
||||||
|
"deleteConfirmTitle": "Delete Timer Session",
|
||||||
|
"deleteConfirmMessage": "Are you sure you want to delete this timer session?"
|
||||||
|
},
|
||||||
|
"loading": "Loading timer data...",
|
||||||
|
"noData": "No timer data found for this chore.",
|
||||||
|
"activeWork": "Active Work",
|
||||||
|
"breakTime": "Break Time",
|
||||||
|
"workSessions": "Work Sessions",
|
||||||
|
"totalTime": "Total Time",
|
||||||
|
"distribution": "Work vs Break Distribution",
|
||||||
|
"noActiveTime": "No active time yet",
|
||||||
|
"sessionBreakdown": "Session Breakdown",
|
||||||
|
"sessions": "Sessions",
|
||||||
|
"addSession": "Add Session",
|
||||||
|
"startTime": "Start Time",
|
||||||
|
"endTime": "End Time",
|
||||||
|
"leaveEmpty": "Leave empty if session is ongoing",
|
||||||
|
"noSessionForChore": "No timer session found for this chore."
|
||||||
|
}
|
||||||
111
public/locales/ja/auth.json
Normal file
111
public/locales/ja/auth.json
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"validationError": "Validation Error",
|
||||||
|
"primaryUsernameRequired": "Primary username is required for sub account login",
|
||||||
|
"subNameRequired": "Sub account name is required for sub account login",
|
||||||
|
"usernameRequired": "Username is required",
|
||||||
|
"passwordRequired": "Password is required",
|
||||||
|
"loginFailed": "Login Failed",
|
||||||
|
"genericError": "An error occurred, please try again",
|
||||||
|
"providerLoginFailed": "{{provider}} Login Failed",
|
||||||
|
"providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again",
|
||||||
|
"providerLoginError": "{{provider}} Login Error",
|
||||||
|
"networkError": "Network error occurred, please try again",
|
||||||
|
"mfaFailed": "Two-Factor Authentication Failed",
|
||||||
|
"oauthError": "OAuth Error",
|
||||||
|
"oauthBrowserFailed": "Failed to open authentication browser",
|
||||||
|
"primaryAccount": "Primary Account",
|
||||||
|
"subAccount": "Sub Account",
|
||||||
|
"username": "Username",
|
||||||
|
"primaryUsernamePlaceholder": "Enter primary account username",
|
||||||
|
"subNamePlaceholder": "Enter sub account name",
|
||||||
|
"forgotPassword": "Forgot password?",
|
||||||
|
"or": "or",
|
||||||
|
"email": "Email",
|
||||||
|
"displayNamePlaceholder": "How others see your name",
|
||||||
|
"signupFailed": "Signup Failed",
|
||||||
|
"signupDisabled": "Signup disabled, please contact admin",
|
||||||
|
"usernameMinLength": "Username must be at least 4 characters",
|
||||||
|
"invalidEmail": "Invalid email address",
|
||||||
|
"passwordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"displayNameRequired": "Display name is required",
|
||||||
|
"displayNameChars": "Display name can only contain letters and numbers",
|
||||||
|
"resetEmailSent": "Reset Email Sent",
|
||||||
|
"resetEmailSentMsg": "Check your email for password reset instructions",
|
||||||
|
"resetFailed": "Reset Failed",
|
||||||
|
"resetFailedMsg": "Failed to send reset email, please try again later",
|
||||||
|
"emailPlaceholder": "you@example.com",
|
||||||
|
"passwordUpdated": "Password Updated",
|
||||||
|
"passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...",
|
||||||
|
"passwordUpdateFailed": "Password Update Failed",
|
||||||
|
"passwordUpdateFailedMsg": "Failed to update password, please try again later",
|
||||||
|
"savePassword": "Save password",
|
||||||
|
"server": {
|
||||||
|
"url": "Server URL",
|
||||||
|
"dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.",
|
||||||
|
"unreachable": "Unable to reach the server. Check the URL, port, and network connection.",
|
||||||
|
"invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed."
|
||||||
|
},
|
||||||
|
"mfaModal": {
|
||||||
|
"title": "Two-factor authentication",
|
||||||
|
"codeRequired": "Please enter a verification code",
|
||||||
|
"verifyFailed": "Failed to verify code. Please try again.",
|
||||||
|
"backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.",
|
||||||
|
"codeHint": "Enter the 6-digit code from your authenticator app.",
|
||||||
|
"verify": "Verify & Sign In",
|
||||||
|
"backupLabel": "Backup code",
|
||||||
|
"codeLabel": "Verification code",
|
||||||
|
"backupPlaceholder": "Enter backup code",
|
||||||
|
"useAuthenticator": "Use authenticator app instead",
|
||||||
|
"useBackup": "Use a backup code instead",
|
||||||
|
"backupOnce": "Each backup code can only be used once.",
|
||||||
|
"invalidCode": "Invalid verification code. Please try again."
|
||||||
|
},
|
||||||
|
"appleLoginFailed": "Apple Login Failed",
|
||||||
|
"googleLoginFailed": "Google Login Failed",
|
||||||
|
"createOne": "Create one",
|
||||||
|
"primaryAccountUsernameLabel": "Primary account username",
|
||||||
|
"subAccountNameLabel": "Sub account name",
|
||||||
|
"serverSettings": "Server settings",
|
||||||
|
"useDifferentAccount": "Use a different account",
|
||||||
|
"yourUsername": "Your username",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"confirmNewPassword": "Confirm new password",
|
||||||
|
"newPassword": "New password",
|
||||||
|
"reenterPassword": "Re-enter your password",
|
||||||
|
"requestNewLink": "Request a new link",
|
||||||
|
"setNewPassword": "Set a new password",
|
||||||
|
"linkInvalid": "This link is not valid",
|
||||||
|
"createAccountButton": "Create account",
|
||||||
|
"createYourAccount": "Create your account",
|
||||||
|
"displayNameLabel": "Display name",
|
||||||
|
"usernameHint": "lowercase letters, numbers, dot and dash",
|
||||||
|
"termsShort": "By creating an account you agree to our Terms of Service and Privacy",
|
||||||
|
"checkYourEmail": "Check your email",
|
||||||
|
"resetYourPassword": "Reset your password",
|
||||||
|
"serverChangeWarning": "Changing the server clears locally cached data on this device.",
|
||||||
|
"serverConnected": "Connected. Taking you to sign in...",
|
||||||
|
"passwordLabel": "Password",
|
||||||
|
"showPassword": "Show password",
|
||||||
|
"hidePassword": "Hide password",
|
||||||
|
"loginPasswordPlaceholder": "Enter your password",
|
||||||
|
"signupPasswordPlaceholder": "At least 8 characters",
|
||||||
|
"signupPasswordHelper": "Use 8 to 64 characters.",
|
||||||
|
"orContinueWith": "or continue with",
|
||||||
|
"signupSignInFailed": "Your account was created, but signing in failed. Please sign in.",
|
||||||
|
"authenticating": {
|
||||||
|
"signingIn": "Signing you in",
|
||||||
|
"signingInSub": "This will only take a moment.",
|
||||||
|
"unknownProvider": "Unknown sign-in provider",
|
||||||
|
"contactSupport": "Please contact support.",
|
||||||
|
"signInFailed": "Sign-in failed",
|
||||||
|
"mfaCancelled": "Two-factor authentication was cancelled.",
|
||||||
|
"requestNotVerified": "The sign-in request could not be verified.",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"mfaSessionMissing": "The MFA session is missing. Please try again.",
|
||||||
|
"twoFactor": "Two-factor authentication",
|
||||||
|
"verifyToContinue": "Verify your login to continue.",
|
||||||
|
"noToken": "No valid authentication token was returned.",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"mfaFailed": "Two-factor authentication failed. Please try again."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,5 +71,11 @@
|
|||||||
"reset": "タイマーをリセット",
|
"reset": "タイマーをリセット",
|
||||||
"delete": "セッションを削除"
|
"delete": "セッションを削除"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"toolbar": {
|
||||||
|
"defaultProject": "Default Project"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"assignedToMe": "Assigned to me"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,8 @@
|
|||||||
"filters": "フィルター",
|
"filters": "フィルター",
|
||||||
"activities": "アクティビティ",
|
"activities": "アクティビティ",
|
||||||
"points": "ポイント",
|
"points": "ポイント",
|
||||||
"settings": "設定"
|
"settings": "設定",
|
||||||
|
"reportBug": "Report a Bug"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"title": "検索",
|
"title": "検索",
|
||||||
@@ -64,6 +65,7 @@
|
|||||||
"footer": {
|
"footer": {
|
||||||
"navigate": "移動",
|
"navigate": "移動",
|
||||||
"open": "開く",
|
"open": "開く",
|
||||||
|
"results_one": "{{count}} result",
|
||||||
"results_other": "{{count}} 件の結果",
|
"results_other": "{{count}} 件の結果",
|
||||||
"typeToSearch": "入力して検索"
|
"typeToSearch": "入力して検索"
|
||||||
}
|
}
|
||||||
@@ -113,5 +115,37 @@
|
|||||||
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
||||||
"open": "Open the issue"
|
"open": "Open the issue"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"done": "Done",
|
||||||
|
"clearAll": "Clear all",
|
||||||
|
"upload": {
|
||||||
|
"quotaTitle": "Storage Quota Exceeded",
|
||||||
|
"quotaMessage": "You have exceeded your quota for uploading files.",
|
||||||
|
"tooLargeTitle": "File Too Large",
|
||||||
|
"tooLargeMessage": "The file you are trying to upload is too large.",
|
||||||
|
"deniedTitle": "Permission Denied",
|
||||||
|
"deniedMessage": "You do not have permission to upload files."
|
||||||
|
},
|
||||||
|
"getStarted": "Get Started!",
|
||||||
|
"imageLoadFailed": "Failed to load image.",
|
||||||
|
"typeHere": "Type in here…",
|
||||||
|
"summaryOfChores": "This is a summary of your chores",
|
||||||
|
"loadingOffline": "You are offline",
|
||||||
|
"loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.",
|
||||||
|
"loadingSlow": "This is taking longer than usual. There might be an issue.",
|
||||||
|
"navigateBack": "Navigate Back",
|
||||||
|
"bottomNav": "Bottom Navigation",
|
||||||
|
"profile": "Profile",
|
||||||
|
"autocompletePlaceholder": "Type here...",
|
||||||
|
"errorScreen": {
|
||||||
|
"title": "Something went wrong",
|
||||||
|
"fallback": "An unexpected error occurred. Try reloading — it usually fixes it.",
|
||||||
|
"tryAgain": "Try again",
|
||||||
|
"home": "Home",
|
||||||
|
"login": "Login",
|
||||||
|
"hideDetails": "Hide error details",
|
||||||
|
"showDetails": "Show error details",
|
||||||
|
"copyToClipboard": "Copy to clipboard",
|
||||||
|
"copied": "Error details copied to clipboard"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
public/locales/ja/filters.json
Normal file
17
public/locales/ja/filters.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"builder": {
|
||||||
|
"errorName": "Please enter a filter name",
|
||||||
|
"errorConditions": "Please configure at least one filter condition",
|
||||||
|
"editTitle": "Edit Filter",
|
||||||
|
"newTitle": "New Filter",
|
||||||
|
"addConditions": "Add conditions to preview",
|
||||||
|
"save": "Save Filter",
|
||||||
|
"name": "Filter Name",
|
||||||
|
"namePlaceholder": "e.g. Overdue tasks for Alice",
|
||||||
|
"color": "Color"
|
||||||
|
},
|
||||||
|
"nameExists": "A filter with this name already exists",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"overdue": "{{count}} overdue"
|
||||||
|
}
|
||||||
89
public/locales/ja/history.json
Normal file
89
public/locales/ja/history.json
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"edit": {
|
||||||
|
"title": "Edit History",
|
||||||
|
"completedDate": "Completed Date",
|
||||||
|
"note": "Note",
|
||||||
|
"additionalNotes": "Additional Notes",
|
||||||
|
"deleteTitle": "Delete History",
|
||||||
|
"deleteMessage": "Are you sure you want to delete this history?"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"inProgress": "In Progress",
|
||||||
|
"completed": "Completed",
|
||||||
|
"skipped": "Skipped",
|
||||||
|
"pendingApproval": "Pending Approval",
|
||||||
|
"rejected": "Rejected",
|
||||||
|
"missed": "Missed",
|
||||||
|
"rescheduled": "Rescheduled",
|
||||||
|
"scheduled": "Scheduled"
|
||||||
|
},
|
||||||
|
"badge": {
|
||||||
|
"onTime": "On Time",
|
||||||
|
"onTimeLabel": "On time"
|
||||||
|
},
|
||||||
|
"detail": {
|
||||||
|
"title": "Activity Detail",
|
||||||
|
"openTask": "Open Task",
|
||||||
|
"editEntry": "Edit Entry",
|
||||||
|
"performedBy": "Performed by",
|
||||||
|
"assignedTo": "Assigned to",
|
||||||
|
"lastUpdated": "Last updated",
|
||||||
|
"duration": "Duration",
|
||||||
|
"pointsEarned": "Points earned",
|
||||||
|
"points_one": "{{count}} pt",
|
||||||
|
"points_other": "{{count}} pts",
|
||||||
|
"note": "Note"
|
||||||
|
},
|
||||||
|
"charts": {
|
||||||
|
"noData": "No data available",
|
||||||
|
"noLabels": "No Labels",
|
||||||
|
"unassigned": "Unassigned",
|
||||||
|
"unknownTask": "Unknown Task",
|
||||||
|
"late": "Late",
|
||||||
|
"status": {
|
||||||
|
"title": "Status",
|
||||||
|
"description": "Completed tasks status"
|
||||||
|
},
|
||||||
|
"due": {
|
||||||
|
"title": "Due Date",
|
||||||
|
"description": "Current tasks due date"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"title": "Priority",
|
||||||
|
"description": "Tasks by priority"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"title": "Labels",
|
||||||
|
"description": "Tasks by labels"
|
||||||
|
},
|
||||||
|
"labelsDuration": {
|
||||||
|
"title": "Labels (time)",
|
||||||
|
"description": "Time spent by labels (hours)"
|
||||||
|
},
|
||||||
|
"tasksTime": {
|
||||||
|
"title": "Tasks (time)",
|
||||||
|
"description": "Time spent by individual tasks (hours)"
|
||||||
|
},
|
||||||
|
"assigneeBreakdown": {
|
||||||
|
"title": "by Assignee",
|
||||||
|
"description": "Tasks grouped by assignee"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"status": "Status",
|
||||||
|
"pending": "Pending",
|
||||||
|
"labels": "Labels",
|
||||||
|
"hasNotes": "Has Notes",
|
||||||
|
"hasPoints": "Has Points",
|
||||||
|
"timePeriod": "Time Period",
|
||||||
|
"user": "User"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"days_one": "{{count}} Day",
|
||||||
|
"days_other": "{{count}} Days",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"activities": {
|
||||||
|
"title": "Activities"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
public/locales/ja/labels.json
Normal file
9
public/locales/ja/labels.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Label",
|
||||||
|
"message": "Are you sure you want to delete this label? This will remove the label from all tasks."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load labels. Please try again.",
|
||||||
|
"blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task."
|
||||||
|
}
|
||||||
74
public/locales/ja/points.json
Normal file
74
public/locales/ja/points.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"redeem": "Redeem Points",
|
||||||
|
"redeemModal": {
|
||||||
|
"redeemButton": "Redeem",
|
||||||
|
"pointsAvailable": "{{count}} points available",
|
||||||
|
"pointsToRedeem": "Points to Redeem",
|
||||||
|
"placeholder": "Enter points...",
|
||||||
|
"cannotExceed": "Cannot exceed available points",
|
||||||
|
"quickAdd": "Quick Add:",
|
||||||
|
"aboutToRedeem": "You are about to redeem",
|
||||||
|
"amount": "{{count}} points",
|
||||||
|
"remaining": "Remaining: {{count}} points"
|
||||||
|
},
|
||||||
|
"leaderboard": {
|
||||||
|
"titlePoints": "Points Leaderboard",
|
||||||
|
"titleTasks": "Tasks Leaderboard",
|
||||||
|
"subtitlePoints": "Rankings based on points earned during the selected time period",
|
||||||
|
"subtitleTasks": "Rankings based on tasks completed during the selected time period",
|
||||||
|
"modePoints": "Points",
|
||||||
|
"modeTasks": "Tasks",
|
||||||
|
"you": "You",
|
||||||
|
"tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task",
|
||||||
|
"available": "{{count}} available",
|
||||||
|
"points_one": "{{count}} point",
|
||||||
|
"points_other": "{{count}} points"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"short7d": "7D",
|
||||||
|
"short6m": "6M",
|
||||||
|
"shortAll": "All",
|
||||||
|
"days7": "7 Days",
|
||||||
|
"months6": "6 Months",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"analysisTitle": "Filter & Analysis",
|
||||||
|
"title": "Filter Points",
|
||||||
|
"showFor": "Show points for:",
|
||||||
|
"timePeriod": "Time period:"
|
||||||
|
},
|
||||||
|
"cards": {
|
||||||
|
"available": {
|
||||||
|
"title": "Available",
|
||||||
|
"subtext": "Ready to redeem"
|
||||||
|
},
|
||||||
|
"redeemed": {
|
||||||
|
"title": "Redeemed",
|
||||||
|
"subtext": "Previously used"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"title": "Total",
|
||||||
|
"subtext": "All time earned"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"title": "Period Points",
|
||||||
|
"allTime": "All time",
|
||||||
|
"last6Months": "Last 6 months",
|
||||||
|
"lastDays_one": "Last {{count}} day",
|
||||||
|
"lastDays_other": "Last {{count}} days"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"showingFor": "Showing points for",
|
||||||
|
"unknownUser": "Unknown User",
|
||||||
|
"overThe": "over the",
|
||||||
|
"allTime": "All Time",
|
||||||
|
"last6Months": "Last 6 Months",
|
||||||
|
"lastDays_one": "Last {{count}} Day",
|
||||||
|
"lastDays_other": "Last {{count}} Days"
|
||||||
|
},
|
||||||
|
"trend": {
|
||||||
|
"title": "Points Trend"
|
||||||
|
}
|
||||||
|
}
|
||||||
24
public/locales/ja/projects.json
Normal file
24
public/locales/ja/projects.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"iconPicker": {
|
||||||
|
"chooseIcon": "Choose Project Icon",
|
||||||
|
"availableIcons": "Available Icons"
|
||||||
|
},
|
||||||
|
"defaultChip": "Default",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Project",
|
||||||
|
"message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load projects. Please try again.",
|
||||||
|
"blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.",
|
||||||
|
"defaultDescription": "All tasks without a specific project",
|
||||||
|
"selector": {
|
||||||
|
"title": "Projects",
|
||||||
|
"createNew": "Create New Project",
|
||||||
|
"createNewDescription": "Add a custom project workspace",
|
||||||
|
"manage": "Manage Projects",
|
||||||
|
"manageDescription": "View, edit, and organize all projects"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -490,5 +490,78 @@
|
|||||||
"notConnected": "リアルタイム更新は有効ですが、現在接続されていません。",
|
"notConnected": "リアルタイム更新は有効ですが、現在接続されていません。",
|
||||||
"basicPlanNotice": "リアルタイム更新はベーシックプランではご利用いただけません。Plusにアップグレードすると、あなたや他のサークルメンバーがタスクを完了・スキップ・変更したときにすぐ通知を受け取れます。"
|
"basicPlanNotice": "リアルタイム更新はベーシックプランではご利用いただけません。Plusにアップグレードすると、あなたや他のサークルメンバーがタスクを完了・スキップ・変更したときにすぐ通知を受け取れます。"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"subscription": {
|
||||||
|
"sessionFailed": "Failed to create subscription session",
|
||||||
|
"errorTitle": "Subscription Error",
|
||||||
|
"errorMessage": "Failed to start subscription process. Please try again.",
|
||||||
|
"subscribe": "Subscribe",
|
||||||
|
"cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe."
|
||||||
|
},
|
||||||
|
"childUsers": {
|
||||||
|
"errNameRequired": "Sub account name is required",
|
||||||
|
"errNameMin": "Sub account name must be at least 2 characters",
|
||||||
|
"errNameMax": "Sub account name must be less than 20 characters",
|
||||||
|
"errNameChars": "Sub account name can only contain lowercase letters, dot and dash",
|
||||||
|
"errPasswordRequired": "Password is required",
|
||||||
|
"errPasswordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"errPasswordMatch": "Passwords do not match",
|
||||||
|
"errDisplayNameMax": "Display name must be less than 50 characters",
|
||||||
|
"createTitle": "Create Sub Account",
|
||||||
|
"createButton": "Create Account",
|
||||||
|
"nameLabel": "Sub Account Name *",
|
||||||
|
"namePlaceholder": "Enter sub account name (e.g., sarah)",
|
||||||
|
"displayNameLabel": "Display Name",
|
||||||
|
"displayNamePlaceholder": "Display name (optional, defaults to sub account name)",
|
||||||
|
"passwordLabel": "Password *",
|
||||||
|
"passwordPlaceholder": "Enter password (8-64 characters)",
|
||||||
|
"confirmPasswordLabel": "Confirm Password *",
|
||||||
|
"confirmPasswordPlaceholder": "Confirm password"
|
||||||
|
},
|
||||||
|
"passwordChange": {
|
||||||
|
"minLength": "Password must be at least 8 characters",
|
||||||
|
"maxLength": "Password must be less than 64 characters"
|
||||||
|
},
|
||||||
|
"payment": {
|
||||||
|
"cancelledTitle": "Payment has been cancelled",
|
||||||
|
"cancelledRedirect": "You will be redirected to the main page shortly.",
|
||||||
|
"successTitle": "Payment Successful!",
|
||||||
|
"successRedirect": "You will be redirected to the settings page shortly."
|
||||||
|
},
|
||||||
|
"developer": {
|
||||||
|
"tokenRefreshed": "Token refreshed successfully",
|
||||||
|
"endpointCalled": "Refresh token endpoint called successfully",
|
||||||
|
"clearDbCleared": "Local offline database cleared. Starting full sync...",
|
||||||
|
"clearDbDone": "Full sync completed from the beginning",
|
||||||
|
"intro": "View technical information about your authentication tokens and session",
|
||||||
|
"refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform",
|
||||||
|
"noReconnectInfo": "No reconnection information available",
|
||||||
|
"noTimeoutInfo": "No timeout information available",
|
||||||
|
"noDebugInfo": "No debug information available"
|
||||||
|
},
|
||||||
|
"backup": {
|
||||||
|
"keyRequired": "Encryption key is required",
|
||||||
|
"created": "Backup created and downloaded successfully",
|
||||||
|
"createFailed": "Failed to create backup",
|
||||||
|
"selectFile": "Please select a backup file",
|
||||||
|
"restored": "Backup restored successfully. Please refresh the page.",
|
||||||
|
"restoreFailed": "Failed to restore backup",
|
||||||
|
"readFailed": "Failed to read backup file",
|
||||||
|
"createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.",
|
||||||
|
"keyPlaceholder": "Enter a strong encryption key",
|
||||||
|
"includeAssets": "Include uploaded files and assets",
|
||||||
|
"warningLabel": "Warning:",
|
||||||
|
"restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.",
|
||||||
|
"restoreKeyPlaceholder": "Enter the encryption key used for this backup"
|
||||||
|
},
|
||||||
|
"deletion": {
|
||||||
|
"passwordRequired": "Please enter your password to continue",
|
||||||
|
"passwordAndDelete": "Please enter your password and type DELETE to confirm",
|
||||||
|
"failed": "Failed to delete account",
|
||||||
|
"passwordPlaceholder": "Enter your password",
|
||||||
|
"transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:",
|
||||||
|
"selectOwner": "Select new owner",
|
||||||
|
"confirmPrompt": "Please enter your password and type DELETE to confirm",
|
||||||
|
"typeDelete": "DELETE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
public/locales/ja/things.json
Normal file
18
public/locales/ja/things.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"errName": "Name is required",
|
||||||
|
"errStateNumber": "State must be a number",
|
||||||
|
"errStateBool": "State must be true or false",
|
||||||
|
"errStateRequired": "State is required",
|
||||||
|
"name": "Name",
|
||||||
|
"namePlaceholder": "Thing name",
|
||||||
|
"value": "Value",
|
||||||
|
"valuePlaceholder": "Thing value",
|
||||||
|
"updateState": "Update state",
|
||||||
|
"update": "Update",
|
||||||
|
"history": {
|
||||||
|
"overview": "Things Overview",
|
||||||
|
"visualization": "Data Visualization",
|
||||||
|
"changeHistory": "Change History",
|
||||||
|
"updated": "Updated"
|
||||||
|
}
|
||||||
|
}
|
||||||
29
public/locales/ja/timer.json
Normal file
29
public/locales/ja/timer.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"toast": {
|
||||||
|
"sessionUpdatedTitle": "Session updated",
|
||||||
|
"sessionUpdatedMessage": "Timer session has been updated successfully.",
|
||||||
|
"sessionUpdateFailTitle": "Failed to update session",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"sessionUpdateErrorTitle": "Error updating session",
|
||||||
|
"sessionDeletedTitle": "Session deleted",
|
||||||
|
"sessionDeletedMessage": "Timer session has been deleted successfully.",
|
||||||
|
"sessionDeleteErrorTitle": "Error deleting session",
|
||||||
|
"deleteConfirmTitle": "Delete Timer Session",
|
||||||
|
"deleteConfirmMessage": "Are you sure you want to delete this timer session?"
|
||||||
|
},
|
||||||
|
"loading": "Loading timer data...",
|
||||||
|
"noData": "No timer data found for this chore.",
|
||||||
|
"activeWork": "Active Work",
|
||||||
|
"breakTime": "Break Time",
|
||||||
|
"workSessions": "Work Sessions",
|
||||||
|
"totalTime": "Total Time",
|
||||||
|
"distribution": "Work vs Break Distribution",
|
||||||
|
"noActiveTime": "No active time yet",
|
||||||
|
"sessionBreakdown": "Session Breakdown",
|
||||||
|
"sessions": "Sessions",
|
||||||
|
"addSession": "Add Session",
|
||||||
|
"startTime": "Start Time",
|
||||||
|
"endTime": "End Time",
|
||||||
|
"leaveEmpty": "Leave empty if session is ongoing",
|
||||||
|
"noSessionForChore": "No timer session found for this chore."
|
||||||
|
}
|
||||||
111
public/locales/nl/auth.json
Normal file
111
public/locales/nl/auth.json
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"validationError": "Validation Error",
|
||||||
|
"primaryUsernameRequired": "Primary username is required for sub account login",
|
||||||
|
"subNameRequired": "Sub account name is required for sub account login",
|
||||||
|
"usernameRequired": "Username is required",
|
||||||
|
"passwordRequired": "Password is required",
|
||||||
|
"loginFailed": "Login Failed",
|
||||||
|
"genericError": "An error occurred, please try again",
|
||||||
|
"providerLoginFailed": "{{provider}} Login Failed",
|
||||||
|
"providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again",
|
||||||
|
"providerLoginError": "{{provider}} Login Error",
|
||||||
|
"networkError": "Network error occurred, please try again",
|
||||||
|
"mfaFailed": "Two-Factor Authentication Failed",
|
||||||
|
"oauthError": "OAuth Error",
|
||||||
|
"oauthBrowserFailed": "Failed to open authentication browser",
|
||||||
|
"primaryAccount": "Primary Account",
|
||||||
|
"subAccount": "Sub Account",
|
||||||
|
"username": "Username",
|
||||||
|
"primaryUsernamePlaceholder": "Enter primary account username",
|
||||||
|
"subNamePlaceholder": "Enter sub account name",
|
||||||
|
"forgotPassword": "Forgot password?",
|
||||||
|
"or": "or",
|
||||||
|
"email": "Email",
|
||||||
|
"displayNamePlaceholder": "How others see your name",
|
||||||
|
"signupFailed": "Signup Failed",
|
||||||
|
"signupDisabled": "Signup disabled, please contact admin",
|
||||||
|
"usernameMinLength": "Username must be at least 4 characters",
|
||||||
|
"invalidEmail": "Invalid email address",
|
||||||
|
"passwordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"displayNameRequired": "Display name is required",
|
||||||
|
"displayNameChars": "Display name can only contain letters and numbers",
|
||||||
|
"resetEmailSent": "Reset Email Sent",
|
||||||
|
"resetEmailSentMsg": "Check your email for password reset instructions",
|
||||||
|
"resetFailed": "Reset Failed",
|
||||||
|
"resetFailedMsg": "Failed to send reset email, please try again later",
|
||||||
|
"emailPlaceholder": "you@example.com",
|
||||||
|
"passwordUpdated": "Password Updated",
|
||||||
|
"passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...",
|
||||||
|
"passwordUpdateFailed": "Password Update Failed",
|
||||||
|
"passwordUpdateFailedMsg": "Failed to update password, please try again later",
|
||||||
|
"savePassword": "Save password",
|
||||||
|
"server": {
|
||||||
|
"url": "Server URL",
|
||||||
|
"dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.",
|
||||||
|
"unreachable": "Unable to reach the server. Check the URL, port, and network connection.",
|
||||||
|
"invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed."
|
||||||
|
},
|
||||||
|
"mfaModal": {
|
||||||
|
"title": "Two-factor authentication",
|
||||||
|
"codeRequired": "Please enter a verification code",
|
||||||
|
"verifyFailed": "Failed to verify code. Please try again.",
|
||||||
|
"backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.",
|
||||||
|
"codeHint": "Enter the 6-digit code from your authenticator app.",
|
||||||
|
"verify": "Verify & Sign In",
|
||||||
|
"backupLabel": "Backup code",
|
||||||
|
"codeLabel": "Verification code",
|
||||||
|
"backupPlaceholder": "Enter backup code",
|
||||||
|
"useAuthenticator": "Use authenticator app instead",
|
||||||
|
"useBackup": "Use a backup code instead",
|
||||||
|
"backupOnce": "Each backup code can only be used once.",
|
||||||
|
"invalidCode": "Invalid verification code. Please try again."
|
||||||
|
},
|
||||||
|
"appleLoginFailed": "Apple Login Failed",
|
||||||
|
"googleLoginFailed": "Google Login Failed",
|
||||||
|
"createOne": "Create one",
|
||||||
|
"primaryAccountUsernameLabel": "Primary account username",
|
||||||
|
"subAccountNameLabel": "Sub account name",
|
||||||
|
"serverSettings": "Server settings",
|
||||||
|
"useDifferentAccount": "Use a different account",
|
||||||
|
"yourUsername": "Your username",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"confirmNewPassword": "Confirm new password",
|
||||||
|
"newPassword": "New password",
|
||||||
|
"reenterPassword": "Re-enter your password",
|
||||||
|
"requestNewLink": "Request a new link",
|
||||||
|
"setNewPassword": "Set a new password",
|
||||||
|
"linkInvalid": "This link is not valid",
|
||||||
|
"createAccountButton": "Create account",
|
||||||
|
"createYourAccount": "Create your account",
|
||||||
|
"displayNameLabel": "Display name",
|
||||||
|
"usernameHint": "lowercase letters, numbers, dot and dash",
|
||||||
|
"termsShort": "By creating an account you agree to our Terms of Service and Privacy",
|
||||||
|
"checkYourEmail": "Check your email",
|
||||||
|
"resetYourPassword": "Reset your password",
|
||||||
|
"serverChangeWarning": "Changing the server clears locally cached data on this device.",
|
||||||
|
"serverConnected": "Connected. Taking you to sign in...",
|
||||||
|
"passwordLabel": "Password",
|
||||||
|
"showPassword": "Show password",
|
||||||
|
"hidePassword": "Hide password",
|
||||||
|
"loginPasswordPlaceholder": "Enter your password",
|
||||||
|
"signupPasswordPlaceholder": "At least 8 characters",
|
||||||
|
"signupPasswordHelper": "Use 8 to 64 characters.",
|
||||||
|
"orContinueWith": "or continue with",
|
||||||
|
"signupSignInFailed": "Your account was created, but signing in failed. Please sign in.",
|
||||||
|
"authenticating": {
|
||||||
|
"signingIn": "Signing you in",
|
||||||
|
"signingInSub": "This will only take a moment.",
|
||||||
|
"unknownProvider": "Unknown sign-in provider",
|
||||||
|
"contactSupport": "Please contact support.",
|
||||||
|
"signInFailed": "Sign-in failed",
|
||||||
|
"mfaCancelled": "Two-factor authentication was cancelled.",
|
||||||
|
"requestNotVerified": "The sign-in request could not be verified.",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"mfaSessionMissing": "The MFA session is missing. Please try again.",
|
||||||
|
"twoFactor": "Two-factor authentication",
|
||||||
|
"verifyToContinue": "Verify your login to continue.",
|
||||||
|
"noToken": "No valid authentication token was returned.",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"mfaFailed": "Two-factor authentication failed. Please try again."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,5 +71,11 @@
|
|||||||
"reset": "Timer Resetten",
|
"reset": "Timer Resetten",
|
||||||
"delete": "Sessie Verwijderen"
|
"delete": "Sessie Verwijderen"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"toolbar": {
|
||||||
|
"defaultProject": "Default Project"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"assignedToMe": "Assigned to me"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,8 @@
|
|||||||
"filters": "Filters",
|
"filters": "Filters",
|
||||||
"activities": "Activiteiten",
|
"activities": "Activiteiten",
|
||||||
"points": "Punten",
|
"points": "Punten",
|
||||||
"settings": "Instellingen"
|
"settings": "Instellingen",
|
||||||
|
"reportBug": "Report a Bug"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"title": "Zoeken",
|
"title": "Zoeken",
|
||||||
@@ -114,5 +115,37 @@
|
|||||||
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
||||||
"open": "Open the issue"
|
"open": "Open the issue"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"done": "Done",
|
||||||
|
"clearAll": "Clear all",
|
||||||
|
"upload": {
|
||||||
|
"quotaTitle": "Storage Quota Exceeded",
|
||||||
|
"quotaMessage": "You have exceeded your quota for uploading files.",
|
||||||
|
"tooLargeTitle": "File Too Large",
|
||||||
|
"tooLargeMessage": "The file you are trying to upload is too large.",
|
||||||
|
"deniedTitle": "Permission Denied",
|
||||||
|
"deniedMessage": "You do not have permission to upload files."
|
||||||
|
},
|
||||||
|
"getStarted": "Get Started!",
|
||||||
|
"imageLoadFailed": "Failed to load image.",
|
||||||
|
"typeHere": "Type in here…",
|
||||||
|
"summaryOfChores": "This is a summary of your chores",
|
||||||
|
"loadingOffline": "You are offline",
|
||||||
|
"loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.",
|
||||||
|
"loadingSlow": "This is taking longer than usual. There might be an issue.",
|
||||||
|
"navigateBack": "Navigate Back",
|
||||||
|
"bottomNav": "Bottom Navigation",
|
||||||
|
"profile": "Profile",
|
||||||
|
"autocompletePlaceholder": "Type here...",
|
||||||
|
"errorScreen": {
|
||||||
|
"title": "Something went wrong",
|
||||||
|
"fallback": "An unexpected error occurred. Try reloading — it usually fixes it.",
|
||||||
|
"tryAgain": "Try again",
|
||||||
|
"home": "Home",
|
||||||
|
"login": "Login",
|
||||||
|
"hideDetails": "Hide error details",
|
||||||
|
"showDetails": "Show error details",
|
||||||
|
"copyToClipboard": "Copy to clipboard",
|
||||||
|
"copied": "Error details copied to clipboard"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
public/locales/nl/filters.json
Normal file
17
public/locales/nl/filters.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"builder": {
|
||||||
|
"errorName": "Please enter a filter name",
|
||||||
|
"errorConditions": "Please configure at least one filter condition",
|
||||||
|
"editTitle": "Edit Filter",
|
||||||
|
"newTitle": "New Filter",
|
||||||
|
"addConditions": "Add conditions to preview",
|
||||||
|
"save": "Save Filter",
|
||||||
|
"name": "Filter Name",
|
||||||
|
"namePlaceholder": "e.g. Overdue tasks for Alice",
|
||||||
|
"color": "Color"
|
||||||
|
},
|
||||||
|
"nameExists": "A filter with this name already exists",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"overdue": "{{count}} overdue"
|
||||||
|
}
|
||||||
89
public/locales/nl/history.json
Normal file
89
public/locales/nl/history.json
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"edit": {
|
||||||
|
"title": "Edit History",
|
||||||
|
"completedDate": "Completed Date",
|
||||||
|
"note": "Note",
|
||||||
|
"additionalNotes": "Additional Notes",
|
||||||
|
"deleteTitle": "Delete History",
|
||||||
|
"deleteMessage": "Are you sure you want to delete this history?"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"inProgress": "In Progress",
|
||||||
|
"completed": "Completed",
|
||||||
|
"skipped": "Skipped",
|
||||||
|
"pendingApproval": "Pending Approval",
|
||||||
|
"rejected": "Rejected",
|
||||||
|
"missed": "Missed",
|
||||||
|
"rescheduled": "Rescheduled",
|
||||||
|
"scheduled": "Scheduled"
|
||||||
|
},
|
||||||
|
"badge": {
|
||||||
|
"onTime": "On Time",
|
||||||
|
"onTimeLabel": "On time"
|
||||||
|
},
|
||||||
|
"detail": {
|
||||||
|
"title": "Activity Detail",
|
||||||
|
"openTask": "Open Task",
|
||||||
|
"editEntry": "Edit Entry",
|
||||||
|
"performedBy": "Performed by",
|
||||||
|
"assignedTo": "Assigned to",
|
||||||
|
"lastUpdated": "Last updated",
|
||||||
|
"duration": "Duration",
|
||||||
|
"pointsEarned": "Points earned",
|
||||||
|
"points_one": "{{count}} pt",
|
||||||
|
"points_other": "{{count}} pts",
|
||||||
|
"note": "Note"
|
||||||
|
},
|
||||||
|
"charts": {
|
||||||
|
"noData": "No data available",
|
||||||
|
"noLabels": "No Labels",
|
||||||
|
"unassigned": "Unassigned",
|
||||||
|
"unknownTask": "Unknown Task",
|
||||||
|
"late": "Late",
|
||||||
|
"status": {
|
||||||
|
"title": "Status",
|
||||||
|
"description": "Completed tasks status"
|
||||||
|
},
|
||||||
|
"due": {
|
||||||
|
"title": "Due Date",
|
||||||
|
"description": "Current tasks due date"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"title": "Priority",
|
||||||
|
"description": "Tasks by priority"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"title": "Labels",
|
||||||
|
"description": "Tasks by labels"
|
||||||
|
},
|
||||||
|
"labelsDuration": {
|
||||||
|
"title": "Labels (time)",
|
||||||
|
"description": "Time spent by labels (hours)"
|
||||||
|
},
|
||||||
|
"tasksTime": {
|
||||||
|
"title": "Tasks (time)",
|
||||||
|
"description": "Time spent by individual tasks (hours)"
|
||||||
|
},
|
||||||
|
"assigneeBreakdown": {
|
||||||
|
"title": "by Assignee",
|
||||||
|
"description": "Tasks grouped by assignee"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"status": "Status",
|
||||||
|
"pending": "Pending",
|
||||||
|
"labels": "Labels",
|
||||||
|
"hasNotes": "Has Notes",
|
||||||
|
"hasPoints": "Has Points",
|
||||||
|
"timePeriod": "Time Period",
|
||||||
|
"user": "User"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"days_one": "{{count}} Day",
|
||||||
|
"days_other": "{{count}} Days",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"activities": {
|
||||||
|
"title": "Activities"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
public/locales/nl/labels.json
Normal file
9
public/locales/nl/labels.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Label",
|
||||||
|
"message": "Are you sure you want to delete this label? This will remove the label from all tasks."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load labels. Please try again.",
|
||||||
|
"blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task."
|
||||||
|
}
|
||||||
74
public/locales/nl/points.json
Normal file
74
public/locales/nl/points.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"redeem": "Redeem Points",
|
||||||
|
"redeemModal": {
|
||||||
|
"redeemButton": "Redeem",
|
||||||
|
"pointsAvailable": "{{count}} points available",
|
||||||
|
"pointsToRedeem": "Points to Redeem",
|
||||||
|
"placeholder": "Enter points...",
|
||||||
|
"cannotExceed": "Cannot exceed available points",
|
||||||
|
"quickAdd": "Quick Add:",
|
||||||
|
"aboutToRedeem": "You are about to redeem",
|
||||||
|
"amount": "{{count}} points",
|
||||||
|
"remaining": "Remaining: {{count}} points"
|
||||||
|
},
|
||||||
|
"leaderboard": {
|
||||||
|
"titlePoints": "Points Leaderboard",
|
||||||
|
"titleTasks": "Tasks Leaderboard",
|
||||||
|
"subtitlePoints": "Rankings based on points earned during the selected time period",
|
||||||
|
"subtitleTasks": "Rankings based on tasks completed during the selected time period",
|
||||||
|
"modePoints": "Points",
|
||||||
|
"modeTasks": "Tasks",
|
||||||
|
"you": "You",
|
||||||
|
"tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task",
|
||||||
|
"available": "{{count}} available",
|
||||||
|
"points_one": "{{count}} point",
|
||||||
|
"points_other": "{{count}} points"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"short7d": "7D",
|
||||||
|
"short6m": "6M",
|
||||||
|
"shortAll": "All",
|
||||||
|
"days7": "7 Days",
|
||||||
|
"months6": "6 Months",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"analysisTitle": "Filter & Analysis",
|
||||||
|
"title": "Filter Points",
|
||||||
|
"showFor": "Show points for:",
|
||||||
|
"timePeriod": "Time period:"
|
||||||
|
},
|
||||||
|
"cards": {
|
||||||
|
"available": {
|
||||||
|
"title": "Available",
|
||||||
|
"subtext": "Ready to redeem"
|
||||||
|
},
|
||||||
|
"redeemed": {
|
||||||
|
"title": "Redeemed",
|
||||||
|
"subtext": "Previously used"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"title": "Total",
|
||||||
|
"subtext": "All time earned"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"title": "Period Points",
|
||||||
|
"allTime": "All time",
|
||||||
|
"last6Months": "Last 6 months",
|
||||||
|
"lastDays_one": "Last {{count}} day",
|
||||||
|
"lastDays_other": "Last {{count}} days"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"showingFor": "Showing points for",
|
||||||
|
"unknownUser": "Unknown User",
|
||||||
|
"overThe": "over the",
|
||||||
|
"allTime": "All Time",
|
||||||
|
"last6Months": "Last 6 Months",
|
||||||
|
"lastDays_one": "Last {{count}} Day",
|
||||||
|
"lastDays_other": "Last {{count}} Days"
|
||||||
|
},
|
||||||
|
"trend": {
|
||||||
|
"title": "Points Trend"
|
||||||
|
}
|
||||||
|
}
|
||||||
24
public/locales/nl/projects.json
Normal file
24
public/locales/nl/projects.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"iconPicker": {
|
||||||
|
"chooseIcon": "Choose Project Icon",
|
||||||
|
"availableIcons": "Available Icons"
|
||||||
|
},
|
||||||
|
"defaultChip": "Default",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Project",
|
||||||
|
"message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load projects. Please try again.",
|
||||||
|
"blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.",
|
||||||
|
"defaultDescription": "All tasks without a specific project",
|
||||||
|
"selector": {
|
||||||
|
"title": "Projects",
|
||||||
|
"createNew": "Create New Project",
|
||||||
|
"createNewDescription": "Add a custom project workspace",
|
||||||
|
"manage": "Manage Projects",
|
||||||
|
"manageDescription": "View, edit, and organize all projects"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -490,5 +490,78 @@
|
|||||||
"notConnected": "Realtime-updates staan aan maar er is momenteel geen verbinding.",
|
"notConnected": "Realtime-updates staan aan maar er is momenteel geen verbinding.",
|
||||||
"basicPlanNotice": "Realtime-updates zijn niet beschikbaar in het basisabonnement. Upgrade naar Plus om direct meldingen te ontvangen wanneer jij of andere circle-leden taken afronden, overslaan of wijzigen."
|
"basicPlanNotice": "Realtime-updates zijn niet beschikbaar in het basisabonnement. Upgrade naar Plus om direct meldingen te ontvangen wanneer jij of andere circle-leden taken afronden, overslaan of wijzigen."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"subscription": {
|
||||||
|
"sessionFailed": "Failed to create subscription session",
|
||||||
|
"errorTitle": "Subscription Error",
|
||||||
|
"errorMessage": "Failed to start subscription process. Please try again.",
|
||||||
|
"subscribe": "Subscribe",
|
||||||
|
"cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe."
|
||||||
|
},
|
||||||
|
"childUsers": {
|
||||||
|
"errNameRequired": "Sub account name is required",
|
||||||
|
"errNameMin": "Sub account name must be at least 2 characters",
|
||||||
|
"errNameMax": "Sub account name must be less than 20 characters",
|
||||||
|
"errNameChars": "Sub account name can only contain lowercase letters, dot and dash",
|
||||||
|
"errPasswordRequired": "Password is required",
|
||||||
|
"errPasswordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"errPasswordMatch": "Passwords do not match",
|
||||||
|
"errDisplayNameMax": "Display name must be less than 50 characters",
|
||||||
|
"createTitle": "Create Sub Account",
|
||||||
|
"createButton": "Create Account",
|
||||||
|
"nameLabel": "Sub Account Name *",
|
||||||
|
"namePlaceholder": "Enter sub account name (e.g., sarah)",
|
||||||
|
"displayNameLabel": "Display Name",
|
||||||
|
"displayNamePlaceholder": "Display name (optional, defaults to sub account name)",
|
||||||
|
"passwordLabel": "Password *",
|
||||||
|
"passwordPlaceholder": "Enter password (8-64 characters)",
|
||||||
|
"confirmPasswordLabel": "Confirm Password *",
|
||||||
|
"confirmPasswordPlaceholder": "Confirm password"
|
||||||
|
},
|
||||||
|
"passwordChange": {
|
||||||
|
"minLength": "Password must be at least 8 characters",
|
||||||
|
"maxLength": "Password must be less than 64 characters"
|
||||||
|
},
|
||||||
|
"payment": {
|
||||||
|
"cancelledTitle": "Payment has been cancelled",
|
||||||
|
"cancelledRedirect": "You will be redirected to the main page shortly.",
|
||||||
|
"successTitle": "Payment Successful!",
|
||||||
|
"successRedirect": "You will be redirected to the settings page shortly."
|
||||||
|
},
|
||||||
|
"developer": {
|
||||||
|
"tokenRefreshed": "Token refreshed successfully",
|
||||||
|
"endpointCalled": "Refresh token endpoint called successfully",
|
||||||
|
"clearDbCleared": "Local offline database cleared. Starting full sync...",
|
||||||
|
"clearDbDone": "Full sync completed from the beginning",
|
||||||
|
"intro": "View technical information about your authentication tokens and session",
|
||||||
|
"refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform",
|
||||||
|
"noReconnectInfo": "No reconnection information available",
|
||||||
|
"noTimeoutInfo": "No timeout information available",
|
||||||
|
"noDebugInfo": "No debug information available"
|
||||||
|
},
|
||||||
|
"backup": {
|
||||||
|
"keyRequired": "Encryption key is required",
|
||||||
|
"created": "Backup created and downloaded successfully",
|
||||||
|
"createFailed": "Failed to create backup",
|
||||||
|
"selectFile": "Please select a backup file",
|
||||||
|
"restored": "Backup restored successfully. Please refresh the page.",
|
||||||
|
"restoreFailed": "Failed to restore backup",
|
||||||
|
"readFailed": "Failed to read backup file",
|
||||||
|
"createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.",
|
||||||
|
"keyPlaceholder": "Enter a strong encryption key",
|
||||||
|
"includeAssets": "Include uploaded files and assets",
|
||||||
|
"warningLabel": "Warning:",
|
||||||
|
"restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.",
|
||||||
|
"restoreKeyPlaceholder": "Enter the encryption key used for this backup"
|
||||||
|
},
|
||||||
|
"deletion": {
|
||||||
|
"passwordRequired": "Please enter your password to continue",
|
||||||
|
"passwordAndDelete": "Please enter your password and type DELETE to confirm",
|
||||||
|
"failed": "Failed to delete account",
|
||||||
|
"passwordPlaceholder": "Enter your password",
|
||||||
|
"transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:",
|
||||||
|
"selectOwner": "Select new owner",
|
||||||
|
"confirmPrompt": "Please enter your password and type DELETE to confirm",
|
||||||
|
"typeDelete": "DELETE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
public/locales/nl/things.json
Normal file
18
public/locales/nl/things.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"errName": "Name is required",
|
||||||
|
"errStateNumber": "State must be a number",
|
||||||
|
"errStateBool": "State must be true or false",
|
||||||
|
"errStateRequired": "State is required",
|
||||||
|
"name": "Name",
|
||||||
|
"namePlaceholder": "Thing name",
|
||||||
|
"value": "Value",
|
||||||
|
"valuePlaceholder": "Thing value",
|
||||||
|
"updateState": "Update state",
|
||||||
|
"update": "Update",
|
||||||
|
"history": {
|
||||||
|
"overview": "Things Overview",
|
||||||
|
"visualization": "Data Visualization",
|
||||||
|
"changeHistory": "Change History",
|
||||||
|
"updated": "Updated"
|
||||||
|
}
|
||||||
|
}
|
||||||
29
public/locales/nl/timer.json
Normal file
29
public/locales/nl/timer.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"toast": {
|
||||||
|
"sessionUpdatedTitle": "Session updated",
|
||||||
|
"sessionUpdatedMessage": "Timer session has been updated successfully.",
|
||||||
|
"sessionUpdateFailTitle": "Failed to update session",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"sessionUpdateErrorTitle": "Error updating session",
|
||||||
|
"sessionDeletedTitle": "Session deleted",
|
||||||
|
"sessionDeletedMessage": "Timer session has been deleted successfully.",
|
||||||
|
"sessionDeleteErrorTitle": "Error deleting session",
|
||||||
|
"deleteConfirmTitle": "Delete Timer Session",
|
||||||
|
"deleteConfirmMessage": "Are you sure you want to delete this timer session?"
|
||||||
|
},
|
||||||
|
"loading": "Loading timer data...",
|
||||||
|
"noData": "No timer data found for this chore.",
|
||||||
|
"activeWork": "Active Work",
|
||||||
|
"breakTime": "Break Time",
|
||||||
|
"workSessions": "Work Sessions",
|
||||||
|
"totalTime": "Total Time",
|
||||||
|
"distribution": "Work vs Break Distribution",
|
||||||
|
"noActiveTime": "No active time yet",
|
||||||
|
"sessionBreakdown": "Session Breakdown",
|
||||||
|
"sessions": "Sessions",
|
||||||
|
"addSession": "Add Session",
|
||||||
|
"startTime": "Start Time",
|
||||||
|
"endTime": "End Time",
|
||||||
|
"leaveEmpty": "Leave empty if session is ongoing",
|
||||||
|
"noSessionForChore": "No timer session found for this chore."
|
||||||
|
}
|
||||||
111
public/locales/pt/auth.json
Normal file
111
public/locales/pt/auth.json
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"validationError": "Validation Error",
|
||||||
|
"primaryUsernameRequired": "Primary username is required for sub account login",
|
||||||
|
"subNameRequired": "Sub account name is required for sub account login",
|
||||||
|
"usernameRequired": "Username is required",
|
||||||
|
"passwordRequired": "Password is required",
|
||||||
|
"loginFailed": "Login Failed",
|
||||||
|
"genericError": "An error occurred, please try again",
|
||||||
|
"providerLoginFailed": "{{provider}} Login Failed",
|
||||||
|
"providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again",
|
||||||
|
"providerLoginError": "{{provider}} Login Error",
|
||||||
|
"networkError": "Network error occurred, please try again",
|
||||||
|
"mfaFailed": "Two-Factor Authentication Failed",
|
||||||
|
"oauthError": "OAuth Error",
|
||||||
|
"oauthBrowserFailed": "Failed to open authentication browser",
|
||||||
|
"primaryAccount": "Primary Account",
|
||||||
|
"subAccount": "Sub Account",
|
||||||
|
"username": "Username",
|
||||||
|
"primaryUsernamePlaceholder": "Enter primary account username",
|
||||||
|
"subNamePlaceholder": "Enter sub account name",
|
||||||
|
"forgotPassword": "Forgot password?",
|
||||||
|
"or": "or",
|
||||||
|
"email": "Email",
|
||||||
|
"displayNamePlaceholder": "How others see your name",
|
||||||
|
"signupFailed": "Signup Failed",
|
||||||
|
"signupDisabled": "Signup disabled, please contact admin",
|
||||||
|
"usernameMinLength": "Username must be at least 4 characters",
|
||||||
|
"invalidEmail": "Invalid email address",
|
||||||
|
"passwordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"displayNameRequired": "Display name is required",
|
||||||
|
"displayNameChars": "Display name can only contain letters and numbers",
|
||||||
|
"resetEmailSent": "Reset Email Sent",
|
||||||
|
"resetEmailSentMsg": "Check your email for password reset instructions",
|
||||||
|
"resetFailed": "Reset Failed",
|
||||||
|
"resetFailedMsg": "Failed to send reset email, please try again later",
|
||||||
|
"emailPlaceholder": "you@example.com",
|
||||||
|
"passwordUpdated": "Password Updated",
|
||||||
|
"passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...",
|
||||||
|
"passwordUpdateFailed": "Password Update Failed",
|
||||||
|
"passwordUpdateFailedMsg": "Failed to update password, please try again later",
|
||||||
|
"savePassword": "Save password",
|
||||||
|
"server": {
|
||||||
|
"url": "Server URL",
|
||||||
|
"dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.",
|
||||||
|
"unreachable": "Unable to reach the server. Check the URL, port, and network connection.",
|
||||||
|
"invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed."
|
||||||
|
},
|
||||||
|
"mfaModal": {
|
||||||
|
"title": "Two-factor authentication",
|
||||||
|
"codeRequired": "Please enter a verification code",
|
||||||
|
"verifyFailed": "Failed to verify code. Please try again.",
|
||||||
|
"backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.",
|
||||||
|
"codeHint": "Enter the 6-digit code from your authenticator app.",
|
||||||
|
"verify": "Verify & Sign In",
|
||||||
|
"backupLabel": "Backup code",
|
||||||
|
"codeLabel": "Verification code",
|
||||||
|
"backupPlaceholder": "Enter backup code",
|
||||||
|
"useAuthenticator": "Use authenticator app instead",
|
||||||
|
"useBackup": "Use a backup code instead",
|
||||||
|
"backupOnce": "Each backup code can only be used once.",
|
||||||
|
"invalidCode": "Invalid verification code. Please try again."
|
||||||
|
},
|
||||||
|
"appleLoginFailed": "Apple Login Failed",
|
||||||
|
"googleLoginFailed": "Google Login Failed",
|
||||||
|
"createOne": "Create one",
|
||||||
|
"primaryAccountUsernameLabel": "Primary account username",
|
||||||
|
"subAccountNameLabel": "Sub account name",
|
||||||
|
"serverSettings": "Server settings",
|
||||||
|
"useDifferentAccount": "Use a different account",
|
||||||
|
"yourUsername": "Your username",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"confirmNewPassword": "Confirm new password",
|
||||||
|
"newPassword": "New password",
|
||||||
|
"reenterPassword": "Re-enter your password",
|
||||||
|
"requestNewLink": "Request a new link",
|
||||||
|
"setNewPassword": "Set a new password",
|
||||||
|
"linkInvalid": "This link is not valid",
|
||||||
|
"createAccountButton": "Create account",
|
||||||
|
"createYourAccount": "Create your account",
|
||||||
|
"displayNameLabel": "Display name",
|
||||||
|
"usernameHint": "lowercase letters, numbers, dot and dash",
|
||||||
|
"termsShort": "By creating an account you agree to our Terms of Service and Privacy",
|
||||||
|
"checkYourEmail": "Check your email",
|
||||||
|
"resetYourPassword": "Reset your password",
|
||||||
|
"serverChangeWarning": "Changing the server clears locally cached data on this device.",
|
||||||
|
"serverConnected": "Connected. Taking you to sign in...",
|
||||||
|
"passwordLabel": "Password",
|
||||||
|
"showPassword": "Show password",
|
||||||
|
"hidePassword": "Hide password",
|
||||||
|
"loginPasswordPlaceholder": "Enter your password",
|
||||||
|
"signupPasswordPlaceholder": "At least 8 characters",
|
||||||
|
"signupPasswordHelper": "Use 8 to 64 characters.",
|
||||||
|
"orContinueWith": "or continue with",
|
||||||
|
"signupSignInFailed": "Your account was created, but signing in failed. Please sign in.",
|
||||||
|
"authenticating": {
|
||||||
|
"signingIn": "Signing you in",
|
||||||
|
"signingInSub": "This will only take a moment.",
|
||||||
|
"unknownProvider": "Unknown sign-in provider",
|
||||||
|
"contactSupport": "Please contact support.",
|
||||||
|
"signInFailed": "Sign-in failed",
|
||||||
|
"mfaCancelled": "Two-factor authentication was cancelled.",
|
||||||
|
"requestNotVerified": "The sign-in request could not be verified.",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"mfaSessionMissing": "The MFA session is missing. Please try again.",
|
||||||
|
"twoFactor": "Two-factor authentication",
|
||||||
|
"verifyToContinue": "Verify your login to continue.",
|
||||||
|
"noToken": "No valid authentication token was returned.",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"mfaFailed": "Two-factor authentication failed. Please try again."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,5 +71,11 @@
|
|||||||
"reset": "Reiniciar cronômetro",
|
"reset": "Reiniciar cronômetro",
|
||||||
"delete": "Excluir sessão"
|
"delete": "Excluir sessão"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"toolbar": {
|
||||||
|
"defaultProject": "Default Project"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"assignedToMe": "Assigned to me"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,8 @@
|
|||||||
"filters": "Filtros",
|
"filters": "Filtros",
|
||||||
"activities": "Atividades",
|
"activities": "Atividades",
|
||||||
"points": "Pontos",
|
"points": "Pontos",
|
||||||
"settings": "Configurações"
|
"settings": "Configurações",
|
||||||
|
"reportBug": "Report a Bug"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"title": "Pesquisar",
|
"title": "Pesquisar",
|
||||||
@@ -114,5 +115,37 @@
|
|||||||
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
||||||
"open": "Open the issue"
|
"open": "Open the issue"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"done": "Done",
|
||||||
|
"clearAll": "Clear all",
|
||||||
|
"upload": {
|
||||||
|
"quotaTitle": "Storage Quota Exceeded",
|
||||||
|
"quotaMessage": "You have exceeded your quota for uploading files.",
|
||||||
|
"tooLargeTitle": "File Too Large",
|
||||||
|
"tooLargeMessage": "The file you are trying to upload is too large.",
|
||||||
|
"deniedTitle": "Permission Denied",
|
||||||
|
"deniedMessage": "You do not have permission to upload files."
|
||||||
|
},
|
||||||
|
"getStarted": "Get Started!",
|
||||||
|
"imageLoadFailed": "Failed to load image.",
|
||||||
|
"typeHere": "Type in here…",
|
||||||
|
"summaryOfChores": "This is a summary of your chores",
|
||||||
|
"loadingOffline": "You are offline",
|
||||||
|
"loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.",
|
||||||
|
"loadingSlow": "This is taking longer than usual. There might be an issue.",
|
||||||
|
"navigateBack": "Navigate Back",
|
||||||
|
"bottomNav": "Bottom Navigation",
|
||||||
|
"profile": "Profile",
|
||||||
|
"autocompletePlaceholder": "Type here...",
|
||||||
|
"errorScreen": {
|
||||||
|
"title": "Something went wrong",
|
||||||
|
"fallback": "An unexpected error occurred. Try reloading — it usually fixes it.",
|
||||||
|
"tryAgain": "Try again",
|
||||||
|
"home": "Home",
|
||||||
|
"login": "Login",
|
||||||
|
"hideDetails": "Hide error details",
|
||||||
|
"showDetails": "Show error details",
|
||||||
|
"copyToClipboard": "Copy to clipboard",
|
||||||
|
"copied": "Error details copied to clipboard"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
public/locales/pt/filters.json
Normal file
17
public/locales/pt/filters.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"builder": {
|
||||||
|
"errorName": "Please enter a filter name",
|
||||||
|
"errorConditions": "Please configure at least one filter condition",
|
||||||
|
"editTitle": "Edit Filter",
|
||||||
|
"newTitle": "New Filter",
|
||||||
|
"addConditions": "Add conditions to preview",
|
||||||
|
"save": "Save Filter",
|
||||||
|
"name": "Filter Name",
|
||||||
|
"namePlaceholder": "e.g. Overdue tasks for Alice",
|
||||||
|
"color": "Color"
|
||||||
|
},
|
||||||
|
"nameExists": "A filter with this name already exists",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"overdue": "{{count}} overdue"
|
||||||
|
}
|
||||||
89
public/locales/pt/history.json
Normal file
89
public/locales/pt/history.json
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"edit": {
|
||||||
|
"title": "Edit History",
|
||||||
|
"completedDate": "Completed Date",
|
||||||
|
"note": "Note",
|
||||||
|
"additionalNotes": "Additional Notes",
|
||||||
|
"deleteTitle": "Delete History",
|
||||||
|
"deleteMessage": "Are you sure you want to delete this history?"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"inProgress": "In Progress",
|
||||||
|
"completed": "Completed",
|
||||||
|
"skipped": "Skipped",
|
||||||
|
"pendingApproval": "Pending Approval",
|
||||||
|
"rejected": "Rejected",
|
||||||
|
"missed": "Missed",
|
||||||
|
"rescheduled": "Rescheduled",
|
||||||
|
"scheduled": "Scheduled"
|
||||||
|
},
|
||||||
|
"badge": {
|
||||||
|
"onTime": "On Time",
|
||||||
|
"onTimeLabel": "On time"
|
||||||
|
},
|
||||||
|
"detail": {
|
||||||
|
"title": "Activity Detail",
|
||||||
|
"openTask": "Open Task",
|
||||||
|
"editEntry": "Edit Entry",
|
||||||
|
"performedBy": "Performed by",
|
||||||
|
"assignedTo": "Assigned to",
|
||||||
|
"lastUpdated": "Last updated",
|
||||||
|
"duration": "Duration",
|
||||||
|
"pointsEarned": "Points earned",
|
||||||
|
"points_one": "{{count}} pt",
|
||||||
|
"points_other": "{{count}} pts",
|
||||||
|
"note": "Note"
|
||||||
|
},
|
||||||
|
"charts": {
|
||||||
|
"noData": "No data available",
|
||||||
|
"noLabels": "No Labels",
|
||||||
|
"unassigned": "Unassigned",
|
||||||
|
"unknownTask": "Unknown Task",
|
||||||
|
"late": "Late",
|
||||||
|
"status": {
|
||||||
|
"title": "Status",
|
||||||
|
"description": "Completed tasks status"
|
||||||
|
},
|
||||||
|
"due": {
|
||||||
|
"title": "Due Date",
|
||||||
|
"description": "Current tasks due date"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"title": "Priority",
|
||||||
|
"description": "Tasks by priority"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"title": "Labels",
|
||||||
|
"description": "Tasks by labels"
|
||||||
|
},
|
||||||
|
"labelsDuration": {
|
||||||
|
"title": "Labels (time)",
|
||||||
|
"description": "Time spent by labels (hours)"
|
||||||
|
},
|
||||||
|
"tasksTime": {
|
||||||
|
"title": "Tasks (time)",
|
||||||
|
"description": "Time spent by individual tasks (hours)"
|
||||||
|
},
|
||||||
|
"assigneeBreakdown": {
|
||||||
|
"title": "by Assignee",
|
||||||
|
"description": "Tasks grouped by assignee"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"status": "Status",
|
||||||
|
"pending": "Pending",
|
||||||
|
"labels": "Labels",
|
||||||
|
"hasNotes": "Has Notes",
|
||||||
|
"hasPoints": "Has Points",
|
||||||
|
"timePeriod": "Time Period",
|
||||||
|
"user": "User"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"days_one": "{{count}} Day",
|
||||||
|
"days_other": "{{count}} Days",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"activities": {
|
||||||
|
"title": "Activities"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
public/locales/pt/labels.json
Normal file
9
public/locales/pt/labels.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Label",
|
||||||
|
"message": "Are you sure you want to delete this label? This will remove the label from all tasks."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load labels. Please try again.",
|
||||||
|
"blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task."
|
||||||
|
}
|
||||||
74
public/locales/pt/points.json
Normal file
74
public/locales/pt/points.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"redeem": "Redeem Points",
|
||||||
|
"redeemModal": {
|
||||||
|
"redeemButton": "Redeem",
|
||||||
|
"pointsAvailable": "{{count}} points available",
|
||||||
|
"pointsToRedeem": "Points to Redeem",
|
||||||
|
"placeholder": "Enter points...",
|
||||||
|
"cannotExceed": "Cannot exceed available points",
|
||||||
|
"quickAdd": "Quick Add:",
|
||||||
|
"aboutToRedeem": "You are about to redeem",
|
||||||
|
"amount": "{{count}} points",
|
||||||
|
"remaining": "Remaining: {{count}} points"
|
||||||
|
},
|
||||||
|
"leaderboard": {
|
||||||
|
"titlePoints": "Points Leaderboard",
|
||||||
|
"titleTasks": "Tasks Leaderboard",
|
||||||
|
"subtitlePoints": "Rankings based on points earned during the selected time period",
|
||||||
|
"subtitleTasks": "Rankings based on tasks completed during the selected time period",
|
||||||
|
"modePoints": "Points",
|
||||||
|
"modeTasks": "Tasks",
|
||||||
|
"you": "You",
|
||||||
|
"tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task",
|
||||||
|
"available": "{{count}} available",
|
||||||
|
"points_one": "{{count}} point",
|
||||||
|
"points_other": "{{count}} points"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"short7d": "7D",
|
||||||
|
"short6m": "6M",
|
||||||
|
"shortAll": "All",
|
||||||
|
"days7": "7 Days",
|
||||||
|
"months6": "6 Months",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"analysisTitle": "Filter & Analysis",
|
||||||
|
"title": "Filter Points",
|
||||||
|
"showFor": "Show points for:",
|
||||||
|
"timePeriod": "Time period:"
|
||||||
|
},
|
||||||
|
"cards": {
|
||||||
|
"available": {
|
||||||
|
"title": "Available",
|
||||||
|
"subtext": "Ready to redeem"
|
||||||
|
},
|
||||||
|
"redeemed": {
|
||||||
|
"title": "Redeemed",
|
||||||
|
"subtext": "Previously used"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"title": "Total",
|
||||||
|
"subtext": "All time earned"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"title": "Period Points",
|
||||||
|
"allTime": "All time",
|
||||||
|
"last6Months": "Last 6 months",
|
||||||
|
"lastDays_one": "Last {{count}} day",
|
||||||
|
"lastDays_other": "Last {{count}} days"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"showingFor": "Showing points for",
|
||||||
|
"unknownUser": "Unknown User",
|
||||||
|
"overThe": "over the",
|
||||||
|
"allTime": "All Time",
|
||||||
|
"last6Months": "Last 6 Months",
|
||||||
|
"lastDays_one": "Last {{count}} Day",
|
||||||
|
"lastDays_other": "Last {{count}} Days"
|
||||||
|
},
|
||||||
|
"trend": {
|
||||||
|
"title": "Points Trend"
|
||||||
|
}
|
||||||
|
}
|
||||||
24
public/locales/pt/projects.json
Normal file
24
public/locales/pt/projects.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"iconPicker": {
|
||||||
|
"chooseIcon": "Choose Project Icon",
|
||||||
|
"availableIcons": "Available Icons"
|
||||||
|
},
|
||||||
|
"defaultChip": "Default",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Project",
|
||||||
|
"message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load projects. Please try again.",
|
||||||
|
"blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.",
|
||||||
|
"defaultDescription": "All tasks without a specific project",
|
||||||
|
"selector": {
|
||||||
|
"title": "Projects",
|
||||||
|
"createNew": "Create New Project",
|
||||||
|
"createNewDescription": "Add a custom project workspace",
|
||||||
|
"manage": "Manage Projects",
|
||||||
|
"manageDescription": "View, edit, and organize all projects"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -490,5 +490,78 @@
|
|||||||
"notConnected": "As atualizações em tempo real estão ativadas, mas não há conexão no momento.",
|
"notConnected": "As atualizações em tempo real estão ativadas, mas não há conexão no momento.",
|
||||||
"basicPlanNotice": "As atualizações em tempo real não estão disponíveis no plano Básico. Mude para o Plus para receber notificações instantâneas quando você ou outros membros do círculo concluírem, pularem ou modificarem tarefas."
|
"basicPlanNotice": "As atualizações em tempo real não estão disponíveis no plano Básico. Mude para o Plus para receber notificações instantâneas quando você ou outros membros do círculo concluírem, pularem ou modificarem tarefas."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"subscription": {
|
||||||
|
"sessionFailed": "Failed to create subscription session",
|
||||||
|
"errorTitle": "Subscription Error",
|
||||||
|
"errorMessage": "Failed to start subscription process. Please try again.",
|
||||||
|
"subscribe": "Subscribe",
|
||||||
|
"cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe."
|
||||||
|
},
|
||||||
|
"childUsers": {
|
||||||
|
"errNameRequired": "Sub account name is required",
|
||||||
|
"errNameMin": "Sub account name must be at least 2 characters",
|
||||||
|
"errNameMax": "Sub account name must be less than 20 characters",
|
||||||
|
"errNameChars": "Sub account name can only contain lowercase letters, dot and dash",
|
||||||
|
"errPasswordRequired": "Password is required",
|
||||||
|
"errPasswordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"errPasswordMatch": "Passwords do not match",
|
||||||
|
"errDisplayNameMax": "Display name must be less than 50 characters",
|
||||||
|
"createTitle": "Create Sub Account",
|
||||||
|
"createButton": "Create Account",
|
||||||
|
"nameLabel": "Sub Account Name *",
|
||||||
|
"namePlaceholder": "Enter sub account name (e.g., sarah)",
|
||||||
|
"displayNameLabel": "Display Name",
|
||||||
|
"displayNamePlaceholder": "Display name (optional, defaults to sub account name)",
|
||||||
|
"passwordLabel": "Password *",
|
||||||
|
"passwordPlaceholder": "Enter password (8-64 characters)",
|
||||||
|
"confirmPasswordLabel": "Confirm Password *",
|
||||||
|
"confirmPasswordPlaceholder": "Confirm password"
|
||||||
|
},
|
||||||
|
"passwordChange": {
|
||||||
|
"minLength": "Password must be at least 8 characters",
|
||||||
|
"maxLength": "Password must be less than 64 characters"
|
||||||
|
},
|
||||||
|
"payment": {
|
||||||
|
"cancelledTitle": "Payment has been cancelled",
|
||||||
|
"cancelledRedirect": "You will be redirected to the main page shortly.",
|
||||||
|
"successTitle": "Payment Successful!",
|
||||||
|
"successRedirect": "You will be redirected to the settings page shortly."
|
||||||
|
},
|
||||||
|
"developer": {
|
||||||
|
"tokenRefreshed": "Token refreshed successfully",
|
||||||
|
"endpointCalled": "Refresh token endpoint called successfully",
|
||||||
|
"clearDbCleared": "Local offline database cleared. Starting full sync...",
|
||||||
|
"clearDbDone": "Full sync completed from the beginning",
|
||||||
|
"intro": "View technical information about your authentication tokens and session",
|
||||||
|
"refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform",
|
||||||
|
"noReconnectInfo": "No reconnection information available",
|
||||||
|
"noTimeoutInfo": "No timeout information available",
|
||||||
|
"noDebugInfo": "No debug information available"
|
||||||
|
},
|
||||||
|
"backup": {
|
||||||
|
"keyRequired": "Encryption key is required",
|
||||||
|
"created": "Backup created and downloaded successfully",
|
||||||
|
"createFailed": "Failed to create backup",
|
||||||
|
"selectFile": "Please select a backup file",
|
||||||
|
"restored": "Backup restored successfully. Please refresh the page.",
|
||||||
|
"restoreFailed": "Failed to restore backup",
|
||||||
|
"readFailed": "Failed to read backup file",
|
||||||
|
"createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.",
|
||||||
|
"keyPlaceholder": "Enter a strong encryption key",
|
||||||
|
"includeAssets": "Include uploaded files and assets",
|
||||||
|
"warningLabel": "Warning:",
|
||||||
|
"restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.",
|
||||||
|
"restoreKeyPlaceholder": "Enter the encryption key used for this backup"
|
||||||
|
},
|
||||||
|
"deletion": {
|
||||||
|
"passwordRequired": "Please enter your password to continue",
|
||||||
|
"passwordAndDelete": "Please enter your password and type DELETE to confirm",
|
||||||
|
"failed": "Failed to delete account",
|
||||||
|
"passwordPlaceholder": "Enter your password",
|
||||||
|
"transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:",
|
||||||
|
"selectOwner": "Select new owner",
|
||||||
|
"confirmPrompt": "Please enter your password and type DELETE to confirm",
|
||||||
|
"typeDelete": "DELETE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
public/locales/pt/things.json
Normal file
18
public/locales/pt/things.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"errName": "Name is required",
|
||||||
|
"errStateNumber": "State must be a number",
|
||||||
|
"errStateBool": "State must be true or false",
|
||||||
|
"errStateRequired": "State is required",
|
||||||
|
"name": "Name",
|
||||||
|
"namePlaceholder": "Thing name",
|
||||||
|
"value": "Value",
|
||||||
|
"valuePlaceholder": "Thing value",
|
||||||
|
"updateState": "Update state",
|
||||||
|
"update": "Update",
|
||||||
|
"history": {
|
||||||
|
"overview": "Things Overview",
|
||||||
|
"visualization": "Data Visualization",
|
||||||
|
"changeHistory": "Change History",
|
||||||
|
"updated": "Updated"
|
||||||
|
}
|
||||||
|
}
|
||||||
29
public/locales/pt/timer.json
Normal file
29
public/locales/pt/timer.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"toast": {
|
||||||
|
"sessionUpdatedTitle": "Session updated",
|
||||||
|
"sessionUpdatedMessage": "Timer session has been updated successfully.",
|
||||||
|
"sessionUpdateFailTitle": "Failed to update session",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"sessionUpdateErrorTitle": "Error updating session",
|
||||||
|
"sessionDeletedTitle": "Session deleted",
|
||||||
|
"sessionDeletedMessage": "Timer session has been deleted successfully.",
|
||||||
|
"sessionDeleteErrorTitle": "Error deleting session",
|
||||||
|
"deleteConfirmTitle": "Delete Timer Session",
|
||||||
|
"deleteConfirmMessage": "Are you sure you want to delete this timer session?"
|
||||||
|
},
|
||||||
|
"loading": "Loading timer data...",
|
||||||
|
"noData": "No timer data found for this chore.",
|
||||||
|
"activeWork": "Active Work",
|
||||||
|
"breakTime": "Break Time",
|
||||||
|
"workSessions": "Work Sessions",
|
||||||
|
"totalTime": "Total Time",
|
||||||
|
"distribution": "Work vs Break Distribution",
|
||||||
|
"noActiveTime": "No active time yet",
|
||||||
|
"sessionBreakdown": "Session Breakdown",
|
||||||
|
"sessions": "Sessions",
|
||||||
|
"addSession": "Add Session",
|
||||||
|
"startTime": "Start Time",
|
||||||
|
"endTime": "End Time",
|
||||||
|
"leaveEmpty": "Leave empty if session is ongoing",
|
||||||
|
"noSessionForChore": "No timer session found for this chore."
|
||||||
|
}
|
||||||
111
public/locales/zh/auth.json
Normal file
111
public/locales/zh/auth.json
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"validationError": "Validation Error",
|
||||||
|
"primaryUsernameRequired": "Primary username is required for sub account login",
|
||||||
|
"subNameRequired": "Sub account name is required for sub account login",
|
||||||
|
"usernameRequired": "Username is required",
|
||||||
|
"passwordRequired": "Password is required",
|
||||||
|
"loginFailed": "Login Failed",
|
||||||
|
"genericError": "An error occurred, please try again",
|
||||||
|
"providerLoginFailed": "{{provider}} Login Failed",
|
||||||
|
"providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again",
|
||||||
|
"providerLoginError": "{{provider}} Login Error",
|
||||||
|
"networkError": "Network error occurred, please try again",
|
||||||
|
"mfaFailed": "Two-Factor Authentication Failed",
|
||||||
|
"oauthError": "OAuth Error",
|
||||||
|
"oauthBrowserFailed": "Failed to open authentication browser",
|
||||||
|
"primaryAccount": "Primary Account",
|
||||||
|
"subAccount": "Sub Account",
|
||||||
|
"username": "Username",
|
||||||
|
"primaryUsernamePlaceholder": "Enter primary account username",
|
||||||
|
"subNamePlaceholder": "Enter sub account name",
|
||||||
|
"forgotPassword": "Forgot password?",
|
||||||
|
"or": "or",
|
||||||
|
"email": "Email",
|
||||||
|
"displayNamePlaceholder": "How others see your name",
|
||||||
|
"signupFailed": "Signup Failed",
|
||||||
|
"signupDisabled": "Signup disabled, please contact admin",
|
||||||
|
"usernameMinLength": "Username must be at least 4 characters",
|
||||||
|
"invalidEmail": "Invalid email address",
|
||||||
|
"passwordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"displayNameRequired": "Display name is required",
|
||||||
|
"displayNameChars": "Display name can only contain letters and numbers",
|
||||||
|
"resetEmailSent": "Reset Email Sent",
|
||||||
|
"resetEmailSentMsg": "Check your email for password reset instructions",
|
||||||
|
"resetFailed": "Reset Failed",
|
||||||
|
"resetFailedMsg": "Failed to send reset email, please try again later",
|
||||||
|
"emailPlaceholder": "you@example.com",
|
||||||
|
"passwordUpdated": "Password Updated",
|
||||||
|
"passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...",
|
||||||
|
"passwordUpdateFailed": "Password Update Failed",
|
||||||
|
"passwordUpdateFailedMsg": "Failed to update password, please try again later",
|
||||||
|
"savePassword": "Save password",
|
||||||
|
"server": {
|
||||||
|
"url": "Server URL",
|
||||||
|
"dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.",
|
||||||
|
"unreachable": "Unable to reach the server. Check the URL, port, and network connection.",
|
||||||
|
"invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed."
|
||||||
|
},
|
||||||
|
"mfaModal": {
|
||||||
|
"title": "Two-factor authentication",
|
||||||
|
"codeRequired": "Please enter a verification code",
|
||||||
|
"verifyFailed": "Failed to verify code. Please try again.",
|
||||||
|
"backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.",
|
||||||
|
"codeHint": "Enter the 6-digit code from your authenticator app.",
|
||||||
|
"verify": "Verify & Sign In",
|
||||||
|
"backupLabel": "Backup code",
|
||||||
|
"codeLabel": "Verification code",
|
||||||
|
"backupPlaceholder": "Enter backup code",
|
||||||
|
"useAuthenticator": "Use authenticator app instead",
|
||||||
|
"useBackup": "Use a backup code instead",
|
||||||
|
"backupOnce": "Each backup code can only be used once.",
|
||||||
|
"invalidCode": "Invalid verification code. Please try again."
|
||||||
|
},
|
||||||
|
"appleLoginFailed": "Apple Login Failed",
|
||||||
|
"googleLoginFailed": "Google Login Failed",
|
||||||
|
"createOne": "Create one",
|
||||||
|
"primaryAccountUsernameLabel": "Primary account username",
|
||||||
|
"subAccountNameLabel": "Sub account name",
|
||||||
|
"serverSettings": "Server settings",
|
||||||
|
"useDifferentAccount": "Use a different account",
|
||||||
|
"yourUsername": "Your username",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"confirmNewPassword": "Confirm new password",
|
||||||
|
"newPassword": "New password",
|
||||||
|
"reenterPassword": "Re-enter your password",
|
||||||
|
"requestNewLink": "Request a new link",
|
||||||
|
"setNewPassword": "Set a new password",
|
||||||
|
"linkInvalid": "This link is not valid",
|
||||||
|
"createAccountButton": "Create account",
|
||||||
|
"createYourAccount": "Create your account",
|
||||||
|
"displayNameLabel": "Display name",
|
||||||
|
"usernameHint": "lowercase letters, numbers, dot and dash",
|
||||||
|
"termsShort": "By creating an account you agree to our Terms of Service and Privacy",
|
||||||
|
"checkYourEmail": "Check your email",
|
||||||
|
"resetYourPassword": "Reset your password",
|
||||||
|
"serverChangeWarning": "Changing the server clears locally cached data on this device.",
|
||||||
|
"serverConnected": "Connected. Taking you to sign in...",
|
||||||
|
"passwordLabel": "Password",
|
||||||
|
"showPassword": "Show password",
|
||||||
|
"hidePassword": "Hide password",
|
||||||
|
"loginPasswordPlaceholder": "Enter your password",
|
||||||
|
"signupPasswordPlaceholder": "At least 8 characters",
|
||||||
|
"signupPasswordHelper": "Use 8 to 64 characters.",
|
||||||
|
"orContinueWith": "or continue with",
|
||||||
|
"signupSignInFailed": "Your account was created, but signing in failed. Please sign in.",
|
||||||
|
"authenticating": {
|
||||||
|
"signingIn": "Signing you in",
|
||||||
|
"signingInSub": "This will only take a moment.",
|
||||||
|
"unknownProvider": "Unknown sign-in provider",
|
||||||
|
"contactSupport": "Please contact support.",
|
||||||
|
"signInFailed": "Sign-in failed",
|
||||||
|
"mfaCancelled": "Two-factor authentication was cancelled.",
|
||||||
|
"requestNotVerified": "The sign-in request could not be verified.",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"mfaSessionMissing": "The MFA session is missing. Please try again.",
|
||||||
|
"twoFactor": "Two-factor authentication",
|
||||||
|
"verifyToContinue": "Verify your login to continue.",
|
||||||
|
"noToken": "No valid authentication token was returned.",
|
||||||
|
"backToSignIn": "Back to sign in",
|
||||||
|
"mfaFailed": "Two-factor authentication failed. Please try again."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,5 +71,11 @@
|
|||||||
"reset": "Reset Timer",
|
"reset": "Reset Timer",
|
||||||
"delete": "Delete Session"
|
"delete": "Delete Session"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"toolbar": {
|
||||||
|
"defaultProject": "Default Project"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"assignedToMe": "Assigned to me"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,8 @@
|
|||||||
"filters": "Filters",
|
"filters": "Filters",
|
||||||
"activities": "Activities",
|
"activities": "Activities",
|
||||||
"points": "Points",
|
"points": "Points",
|
||||||
"settings": "Settings"
|
"settings": "Settings",
|
||||||
|
"reportBug": "Report a Bug"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"title": "搜索",
|
"title": "搜索",
|
||||||
@@ -114,5 +115,37 @@
|
|||||||
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
"subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.",
|
||||||
"open": "Open the issue"
|
"open": "Open the issue"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"done": "Done",
|
||||||
|
"clearAll": "Clear all",
|
||||||
|
"upload": {
|
||||||
|
"quotaTitle": "Storage Quota Exceeded",
|
||||||
|
"quotaMessage": "You have exceeded your quota for uploading files.",
|
||||||
|
"tooLargeTitle": "File Too Large",
|
||||||
|
"tooLargeMessage": "The file you are trying to upload is too large.",
|
||||||
|
"deniedTitle": "Permission Denied",
|
||||||
|
"deniedMessage": "You do not have permission to upload files."
|
||||||
|
},
|
||||||
|
"getStarted": "Get Started!",
|
||||||
|
"imageLoadFailed": "Failed to load image.",
|
||||||
|
"typeHere": "Type in here…",
|
||||||
|
"summaryOfChores": "This is a summary of your chores",
|
||||||
|
"loadingOffline": "You are offline",
|
||||||
|
"loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.",
|
||||||
|
"loadingSlow": "This is taking longer than usual. There might be an issue.",
|
||||||
|
"navigateBack": "Navigate Back",
|
||||||
|
"bottomNav": "Bottom Navigation",
|
||||||
|
"profile": "Profile",
|
||||||
|
"autocompletePlaceholder": "Type here...",
|
||||||
|
"errorScreen": {
|
||||||
|
"title": "Something went wrong",
|
||||||
|
"fallback": "An unexpected error occurred. Try reloading — it usually fixes it.",
|
||||||
|
"tryAgain": "Try again",
|
||||||
|
"home": "Home",
|
||||||
|
"login": "Login",
|
||||||
|
"hideDetails": "Hide error details",
|
||||||
|
"showDetails": "Show error details",
|
||||||
|
"copyToClipboard": "Copy to clipboard",
|
||||||
|
"copied": "Error details copied to clipboard"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
public/locales/zh/filters.json
Normal file
17
public/locales/zh/filters.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"builder": {
|
||||||
|
"errorName": "Please enter a filter name",
|
||||||
|
"errorConditions": "Please configure at least one filter condition",
|
||||||
|
"editTitle": "Edit Filter",
|
||||||
|
"newTitle": "New Filter",
|
||||||
|
"addConditions": "Add conditions to preview",
|
||||||
|
"save": "Save Filter",
|
||||||
|
"name": "Filter Name",
|
||||||
|
"namePlaceholder": "e.g. Overdue tasks for Alice",
|
||||||
|
"color": "Color"
|
||||||
|
},
|
||||||
|
"nameExists": "A filter with this name already exists",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"overdue": "{{count}} overdue"
|
||||||
|
}
|
||||||
89
public/locales/zh/history.json
Normal file
89
public/locales/zh/history.json
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"edit": {
|
||||||
|
"title": "Edit History",
|
||||||
|
"completedDate": "Completed Date",
|
||||||
|
"note": "Note",
|
||||||
|
"additionalNotes": "Additional Notes",
|
||||||
|
"deleteTitle": "Delete History",
|
||||||
|
"deleteMessage": "Are you sure you want to delete this history?"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"inProgress": "In Progress",
|
||||||
|
"completed": "Completed",
|
||||||
|
"skipped": "Skipped",
|
||||||
|
"pendingApproval": "Pending Approval",
|
||||||
|
"rejected": "Rejected",
|
||||||
|
"missed": "Missed",
|
||||||
|
"rescheduled": "Rescheduled",
|
||||||
|
"scheduled": "Scheduled"
|
||||||
|
},
|
||||||
|
"badge": {
|
||||||
|
"onTime": "On Time",
|
||||||
|
"onTimeLabel": "On time"
|
||||||
|
},
|
||||||
|
"detail": {
|
||||||
|
"title": "Activity Detail",
|
||||||
|
"openTask": "Open Task",
|
||||||
|
"editEntry": "Edit Entry",
|
||||||
|
"performedBy": "Performed by",
|
||||||
|
"assignedTo": "Assigned to",
|
||||||
|
"lastUpdated": "Last updated",
|
||||||
|
"duration": "Duration",
|
||||||
|
"pointsEarned": "Points earned",
|
||||||
|
"points_one": "{{count}} pt",
|
||||||
|
"points_other": "{{count}} pts",
|
||||||
|
"note": "Note"
|
||||||
|
},
|
||||||
|
"charts": {
|
||||||
|
"noData": "No data available",
|
||||||
|
"noLabels": "No Labels",
|
||||||
|
"unassigned": "Unassigned",
|
||||||
|
"unknownTask": "Unknown Task",
|
||||||
|
"late": "Late",
|
||||||
|
"status": {
|
||||||
|
"title": "Status",
|
||||||
|
"description": "Completed tasks status"
|
||||||
|
},
|
||||||
|
"due": {
|
||||||
|
"title": "Due Date",
|
||||||
|
"description": "Current tasks due date"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"title": "Priority",
|
||||||
|
"description": "Tasks by priority"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"title": "Labels",
|
||||||
|
"description": "Tasks by labels"
|
||||||
|
},
|
||||||
|
"labelsDuration": {
|
||||||
|
"title": "Labels (time)",
|
||||||
|
"description": "Time spent by labels (hours)"
|
||||||
|
},
|
||||||
|
"tasksTime": {
|
||||||
|
"title": "Tasks (time)",
|
||||||
|
"description": "Time spent by individual tasks (hours)"
|
||||||
|
},
|
||||||
|
"assigneeBreakdown": {
|
||||||
|
"title": "by Assignee",
|
||||||
|
"description": "Tasks grouped by assignee"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"status": "Status",
|
||||||
|
"pending": "Pending",
|
||||||
|
"labels": "Labels",
|
||||||
|
"hasNotes": "Has Notes",
|
||||||
|
"hasPoints": "Has Points",
|
||||||
|
"timePeriod": "Time Period",
|
||||||
|
"user": "User"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"days_one": "{{count}} Day",
|
||||||
|
"days_other": "{{count}} Days",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"activities": {
|
||||||
|
"title": "Activities"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
public/locales/zh/labels.json
Normal file
9
public/locales/zh/labels.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Label",
|
||||||
|
"message": "Are you sure you want to delete this label? This will remove the label from all tasks."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load labels. Please try again.",
|
||||||
|
"blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task."
|
||||||
|
}
|
||||||
74
public/locales/zh/points.json
Normal file
74
public/locales/zh/points.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"redeem": "Redeem Points",
|
||||||
|
"redeemModal": {
|
||||||
|
"redeemButton": "Redeem",
|
||||||
|
"pointsAvailable": "{{count}} points available",
|
||||||
|
"pointsToRedeem": "Points to Redeem",
|
||||||
|
"placeholder": "Enter points...",
|
||||||
|
"cannotExceed": "Cannot exceed available points",
|
||||||
|
"quickAdd": "Quick Add:",
|
||||||
|
"aboutToRedeem": "You are about to redeem",
|
||||||
|
"amount": "{{count}} points",
|
||||||
|
"remaining": "Remaining: {{count}} points"
|
||||||
|
},
|
||||||
|
"leaderboard": {
|
||||||
|
"titlePoints": "Points Leaderboard",
|
||||||
|
"titleTasks": "Tasks Leaderboard",
|
||||||
|
"subtitlePoints": "Rankings based on points earned during the selected time period",
|
||||||
|
"subtitleTasks": "Rankings based on tasks completed during the selected time period",
|
||||||
|
"modePoints": "Points",
|
||||||
|
"modeTasks": "Tasks",
|
||||||
|
"you": "You",
|
||||||
|
"tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task",
|
||||||
|
"available": "{{count}} available",
|
||||||
|
"points_one": "{{count}} point",
|
||||||
|
"points_other": "{{count}} points"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"short7d": "7D",
|
||||||
|
"short6m": "6M",
|
||||||
|
"shortAll": "All",
|
||||||
|
"days7": "7 Days",
|
||||||
|
"months6": "6 Months",
|
||||||
|
"allTime": "All Time"
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"analysisTitle": "Filter & Analysis",
|
||||||
|
"title": "Filter Points",
|
||||||
|
"showFor": "Show points for:",
|
||||||
|
"timePeriod": "Time period:"
|
||||||
|
},
|
||||||
|
"cards": {
|
||||||
|
"available": {
|
||||||
|
"title": "Available",
|
||||||
|
"subtext": "Ready to redeem"
|
||||||
|
},
|
||||||
|
"redeemed": {
|
||||||
|
"title": "Redeemed",
|
||||||
|
"subtext": "Previously used"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"title": "Total",
|
||||||
|
"subtext": "All time earned"
|
||||||
|
},
|
||||||
|
"period": {
|
||||||
|
"title": "Period Points",
|
||||||
|
"allTime": "All time",
|
||||||
|
"last6Months": "Last 6 months",
|
||||||
|
"lastDays_one": "Last {{count}} day",
|
||||||
|
"lastDays_other": "Last {{count}} days"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"showingFor": "Showing points for",
|
||||||
|
"unknownUser": "Unknown User",
|
||||||
|
"overThe": "over the",
|
||||||
|
"allTime": "All Time",
|
||||||
|
"last6Months": "Last 6 Months",
|
||||||
|
"lastDays_one": "Last {{count}} Day",
|
||||||
|
"lastDays_other": "Last {{count}} Days"
|
||||||
|
},
|
||||||
|
"trend": {
|
||||||
|
"title": "Points Trend"
|
||||||
|
}
|
||||||
|
}
|
||||||
24
public/locales/zh/projects.json
Normal file
24
public/locales/zh/projects.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"iconPicker": {
|
||||||
|
"chooseIcon": "Choose Project Icon",
|
||||||
|
"availableIcons": "Available Icons"
|
||||||
|
},
|
||||||
|
"defaultChip": "Default",
|
||||||
|
"tasks_one": "{{count}} task",
|
||||||
|
"tasks_other": "{{count}} tasks",
|
||||||
|
"shared": "Shared",
|
||||||
|
"delete": {
|
||||||
|
"title": "Delete Project",
|
||||||
|
"message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)."
|
||||||
|
},
|
||||||
|
"loadError": "Failed to load projects. Please try again.",
|
||||||
|
"blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.",
|
||||||
|
"defaultDescription": "All tasks without a specific project",
|
||||||
|
"selector": {
|
||||||
|
"title": "Projects",
|
||||||
|
"createNew": "Create New Project",
|
||||||
|
"createNewDescription": "Add a custom project workspace",
|
||||||
|
"manage": "Manage Projects",
|
||||||
|
"manageDescription": "View, edit, and organize all projects"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -490,5 +490,78 @@
|
|||||||
"notConnected": "实时更新已开启,但当前未连接。",
|
"notConnected": "实时更新已开启,但当前未连接。",
|
||||||
"basicPlanNotice": "基础套餐不支持实时更新。升级到 Plus,当你或其他圈子成员完成、跳过或修改任务时即可立即收到通知。"
|
"basicPlanNotice": "基础套餐不支持实时更新。升级到 Plus,当你或其他圈子成员完成、跳过或修改任务时即可立即收到通知。"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"subscription": {
|
||||||
|
"sessionFailed": "Failed to create subscription session",
|
||||||
|
"errorTitle": "Subscription Error",
|
||||||
|
"errorMessage": "Failed to start subscription process. Please try again.",
|
||||||
|
"subscribe": "Subscribe",
|
||||||
|
"cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe."
|
||||||
|
},
|
||||||
|
"childUsers": {
|
||||||
|
"errNameRequired": "Sub account name is required",
|
||||||
|
"errNameMin": "Sub account name must be at least 2 characters",
|
||||||
|
"errNameMax": "Sub account name must be less than 20 characters",
|
||||||
|
"errNameChars": "Sub account name can only contain lowercase letters, dot and dash",
|
||||||
|
"errPasswordRequired": "Password is required",
|
||||||
|
"errPasswordLength": "Password must be between 8 and 64 characters",
|
||||||
|
"errPasswordMatch": "Passwords do not match",
|
||||||
|
"errDisplayNameMax": "Display name must be less than 50 characters",
|
||||||
|
"createTitle": "Create Sub Account",
|
||||||
|
"createButton": "Create Account",
|
||||||
|
"nameLabel": "Sub Account Name *",
|
||||||
|
"namePlaceholder": "Enter sub account name (e.g., sarah)",
|
||||||
|
"displayNameLabel": "Display Name",
|
||||||
|
"displayNamePlaceholder": "Display name (optional, defaults to sub account name)",
|
||||||
|
"passwordLabel": "Password *",
|
||||||
|
"passwordPlaceholder": "Enter password (8-64 characters)",
|
||||||
|
"confirmPasswordLabel": "Confirm Password *",
|
||||||
|
"confirmPasswordPlaceholder": "Confirm password"
|
||||||
|
},
|
||||||
|
"passwordChange": {
|
||||||
|
"minLength": "Password must be at least 8 characters",
|
||||||
|
"maxLength": "Password must be less than 64 characters"
|
||||||
|
},
|
||||||
|
"payment": {
|
||||||
|
"cancelledTitle": "Payment has been cancelled",
|
||||||
|
"cancelledRedirect": "You will be redirected to the main page shortly.",
|
||||||
|
"successTitle": "Payment Successful!",
|
||||||
|
"successRedirect": "You will be redirected to the settings page shortly."
|
||||||
|
},
|
||||||
|
"developer": {
|
||||||
|
"tokenRefreshed": "Token refreshed successfully",
|
||||||
|
"endpointCalled": "Refresh token endpoint called successfully",
|
||||||
|
"clearDbCleared": "Local offline database cleared. Starting full sync...",
|
||||||
|
"clearDbDone": "Full sync completed from the beginning",
|
||||||
|
"intro": "View technical information about your authentication tokens and session",
|
||||||
|
"refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform",
|
||||||
|
"noReconnectInfo": "No reconnection information available",
|
||||||
|
"noTimeoutInfo": "No timeout information available",
|
||||||
|
"noDebugInfo": "No debug information available"
|
||||||
|
},
|
||||||
|
"backup": {
|
||||||
|
"keyRequired": "Encryption key is required",
|
||||||
|
"created": "Backup created and downloaded successfully",
|
||||||
|
"createFailed": "Failed to create backup",
|
||||||
|
"selectFile": "Please select a backup file",
|
||||||
|
"restored": "Backup restored successfully. Please refresh the page.",
|
||||||
|
"restoreFailed": "Failed to restore backup",
|
||||||
|
"readFailed": "Failed to read backup file",
|
||||||
|
"createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.",
|
||||||
|
"keyPlaceholder": "Enter a strong encryption key",
|
||||||
|
"includeAssets": "Include uploaded files and assets",
|
||||||
|
"warningLabel": "Warning:",
|
||||||
|
"restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.",
|
||||||
|
"restoreKeyPlaceholder": "Enter the encryption key used for this backup"
|
||||||
|
},
|
||||||
|
"deletion": {
|
||||||
|
"passwordRequired": "Please enter your password to continue",
|
||||||
|
"passwordAndDelete": "Please enter your password and type DELETE to confirm",
|
||||||
|
"failed": "Failed to delete account",
|
||||||
|
"passwordPlaceholder": "Enter your password",
|
||||||
|
"transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:",
|
||||||
|
"selectOwner": "Select new owner",
|
||||||
|
"confirmPrompt": "Please enter your password and type DELETE to confirm",
|
||||||
|
"typeDelete": "DELETE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
public/locales/zh/things.json
Normal file
18
public/locales/zh/things.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"errName": "Name is required",
|
||||||
|
"errStateNumber": "State must be a number",
|
||||||
|
"errStateBool": "State must be true or false",
|
||||||
|
"errStateRequired": "State is required",
|
||||||
|
"name": "Name",
|
||||||
|
"namePlaceholder": "Thing name",
|
||||||
|
"value": "Value",
|
||||||
|
"valuePlaceholder": "Thing value",
|
||||||
|
"updateState": "Update state",
|
||||||
|
"update": "Update",
|
||||||
|
"history": {
|
||||||
|
"overview": "Things Overview",
|
||||||
|
"visualization": "Data Visualization",
|
||||||
|
"changeHistory": "Change History",
|
||||||
|
"updated": "Updated"
|
||||||
|
}
|
||||||
|
}
|
||||||
29
public/locales/zh/timer.json
Normal file
29
public/locales/zh/timer.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"toast": {
|
||||||
|
"sessionUpdatedTitle": "Session updated",
|
||||||
|
"sessionUpdatedMessage": "Timer session has been updated successfully.",
|
||||||
|
"sessionUpdateFailTitle": "Failed to update session",
|
||||||
|
"tryAgain": "Please try again.",
|
||||||
|
"sessionUpdateErrorTitle": "Error updating session",
|
||||||
|
"sessionDeletedTitle": "Session deleted",
|
||||||
|
"sessionDeletedMessage": "Timer session has been deleted successfully.",
|
||||||
|
"sessionDeleteErrorTitle": "Error deleting session",
|
||||||
|
"deleteConfirmTitle": "Delete Timer Session",
|
||||||
|
"deleteConfirmMessage": "Are you sure you want to delete this timer session?"
|
||||||
|
},
|
||||||
|
"loading": "Loading timer data...",
|
||||||
|
"noData": "No timer data found for this chore.",
|
||||||
|
"activeWork": "Active Work",
|
||||||
|
"breakTime": "Break Time",
|
||||||
|
"workSessions": "Work Sessions",
|
||||||
|
"totalTime": "Total Time",
|
||||||
|
"distribution": "Work vs Break Distribution",
|
||||||
|
"noActiveTime": "No active time yet",
|
||||||
|
"sessionBreakdown": "Session Breakdown",
|
||||||
|
"sessions": "Sessions",
|
||||||
|
"addSession": "Add Session",
|
||||||
|
"startTime": "Start Time",
|
||||||
|
"endTime": "End Time",
|
||||||
|
"leaveEmpty": "Leave empty if session is ongoing",
|
||||||
|
"noSessionForChore": "No timer session found for this chore."
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user