- Complete MVP with Repository Pattern, SQLite storage - Provider + ChangeNotifier state management - Navigation 2.0 with deep link support - Habit CRUD with twoDayRule, notifications, categories - Backup/Restore via JSON - Statistics with streak tracking - Material You theme support - Biometric lock support - Desktop widget support - 27 languages i18n structure - Comprehensive test suite (87/89 passing)
265 lines
13 KiB
Plaintext
265 lines
13 KiB
Plaintext
{
|
|
"@@locale": "en",
|
|
"habits": "Habits:",
|
|
"statistics": "Statistics",
|
|
"emptyList": "Empty list",
|
|
"noDataAboutHabits": "There is no data about habits.",
|
|
"topStreak": "Top streak",
|
|
"currentStreak": "Current streak",
|
|
"total": "Total",
|
|
"unknown": "Unknown",
|
|
"warning": "Warning",
|
|
"allHabitsWillBeReplaced": "All habits will be replaced with habits from backup.",
|
|
"restore": "Restore",
|
|
"cancel": "Cancel",
|
|
"settings": "Settings",
|
|
"theme": "Theme",
|
|
"firstDayOfWeek": "First day of the week",
|
|
"notifications": "Notifications",
|
|
"notificationTime": "Notification time",
|
|
"soundEffects": "Sound effects",
|
|
"showMonthName": "Show month name",
|
|
"setColors": "Set colors",
|
|
"backup": "Backup",
|
|
"create": "Create",
|
|
"onboarding": "Onboarding",
|
|
"about": "About",
|
|
"habo": "Habo",
|
|
"copyright": "©2023 Habo",
|
|
"termsAndConditions": "Terms and Conditions",
|
|
"privacyPolicy": "Privacy Policy",
|
|
"disclaimer": "Disclaimer",
|
|
"sourceCode": "Source code (GitHub)",
|
|
"ifYouWantToSupport": "If you want to support Habo you can:",
|
|
"buyMeACoffee": "Buy me a coffee",
|
|
"reset": "Reset",
|
|
"done": "Done",
|
|
"congratulationsReward": "Congratulations! Your reward:",
|
|
"ohNoSanction": "Oh no! Your sanction:",
|
|
"month": "Month",
|
|
"week": "Week",
|
|
"habitLoop": "Habit loop",
|
|
"habitLoopDescription": "Habit Loop is a psychological model describing the process of habit formation. It consists of three components: Cue, Routine, and Reward. The Cue triggers the Routine (habitual action), which is then reinforced by the Reward, creating a loop that makes the habit more ingrained and likely to be repeated.",
|
|
"cue": "Cue",
|
|
"cueDescription": "is the trigger that initiates your habit. It could be a specific time, location, feeling, or an event.",
|
|
"routine": "Routine",
|
|
"routineDescription": "is the action you take in response to the cue. This is the habit itself.",
|
|
"reward": "Reward",
|
|
"rewardDescription": "is the benefit or positive feeling you experience after performing the routine. It reinforces the habit.",
|
|
"editHabit": "Edit Habit",
|
|
"createHabit": "Create Habit",
|
|
"delete": "Delete",
|
|
"habitTitleEmptyError": "The habit title can not be empty.",
|
|
"save": "Save",
|
|
"exercise": "Exercise",
|
|
"habit": "Habit",
|
|
"useTwoDayRule": "Use Two day rule",
|
|
"twoDayRule": "Two day rule",
|
|
"twoDayRuleDescription": "With two day rule, you can miss one day and do not lose a streak if the next day is successful.",
|
|
"advancedHabitBuilding": "Advanced habit building",
|
|
"advancedHabitBuildingDescription": "This section helps you better define your habits utilizing the Habit loop. You should define cues, routines, and rewards for every habit.",
|
|
"at7AM": "At 7:00AM",
|
|
"do50PushUps": "Do 50 push ups",
|
|
"fifteenMinOfVideoGames": "15 min. of video games",
|
|
"showReward": "Show reward",
|
|
"remainderOfReward": "The reminder of the reward after a successful routine.",
|
|
"habitContract": "Habit contract",
|
|
"habitContractDescription": "While positive reinforcement is recommended, some people may opt for a habit contract. A habit contract allows you to specify a sanction that will be imposed if you miss your habit, and may involve an accountability partner who helps supervise your goals.",
|
|
"donateToCharity": "Donate 10$ to charity",
|
|
"sanction": "Sanction",
|
|
"showSanction": "Show sanction",
|
|
"remainderOfSanction": "The reminder of the sanction after a unsuccessful routine.",
|
|
"dan": "Dan",
|
|
"accountabilityPartner": "Accountability partner",
|
|
"add": "Add",
|
|
"haboNeedsPermission": "Habo needs permission to send notifications to work properly.",
|
|
"allow": "Allow",
|
|
"date": "Date",
|
|
"check": "Check",
|
|
"fail": "Fail",
|
|
"skip": "Skip",
|
|
"note": "Note",
|
|
"yourCommentHere": "Your note here",
|
|
"close": "Close",
|
|
"createYourFirstHabit": "Create your first habit.",
|
|
"modify": "Modify",
|
|
"backupFailedError": "ERROR: Creating backup failed.",
|
|
"restoreFailedError": "ERROR: Restoring backup failed.",
|
|
"habitDeleted": "Habit deleted.",
|
|
"undo": "Undo",
|
|
"appNotifications": "App notifications",
|
|
"appNotificationsChannel": "Notification channel for application notifications",
|
|
"habitNotifications": "Habit notifications",
|
|
"habitNotificationsChannel": "Notification channel for habit notifications",
|
|
"doNotForgetToCheckYourHabits": "Do not forget to check your habits.",
|
|
"themeSelect": "{theme, select, device {Device} light {Light} dark {Dark} oled {OLED black} materialYou {Material You} other{Device}}",
|
|
"@themeSelect": {
|
|
"placeholders": {
|
|
"theme": {
|
|
"type": "String"
|
|
}
|
|
}
|
|
},
|
|
"defineYourHabits": "Define your habits",
|
|
"defineYourHabitsDescription": "To better stick to your habits, you can define:",
|
|
"cueNumbered": "1. Cue",
|
|
"routineNumbered": "2. Routine",
|
|
"rewardNumbered": "3. Reward",
|
|
"logYourDays": "Log your days",
|
|
"successful": "Successful",
|
|
"notSoSuccessful": "Not so successful",
|
|
"skipDoesNotAffectStreaks": "Skip (does not affect streaks)",
|
|
"observeYourProgress": "Observe your progress",
|
|
"trackYourProgress": "You can track your progress through the calendar view in every habit or on the statistics page.",
|
|
"backupCreatedSuccessfully": "Backup created successfully!",
|
|
"backupFailed": "Backup failed!",
|
|
"restoreCompletedSuccessfully": "Restore completed successfully!",
|
|
"restoreFailed": "Restore failed!",
|
|
"fileNotFound": "File not found",
|
|
"fileTooLarge": "File too large (max 10MB)",
|
|
"invalidBackupFile": "Invalid backup file",
|
|
"progress": "Progress",
|
|
"enterAmount": "Enter amount",
|
|
"complete": "Complete",
|
|
"saveProgress": "Save Progress",
|
|
"currentProgress": "Current: {current} {unit}",
|
|
"@currentProgress": {
|
|
"placeholders": {
|
|
"current": { "type": "String" },
|
|
"unit": { "type": "String" }
|
|
}
|
|
},
|
|
"targetProgress": "Target: {target} {unit}",
|
|
"@targetProgress": {
|
|
"placeholders": {
|
|
"target": { "type": "String" },
|
|
"unit": { "type": "String" }
|
|
}
|
|
},
|
|
"progressOf": "{current} / {target} {unit}",
|
|
"@progressOf": {
|
|
"placeholders": {
|
|
"current": { "type": "String" },
|
|
"target": { "type": "String" },
|
|
"unit": { "type": "String" }
|
|
}
|
|
},
|
|
"numericHabit": "Progressive",
|
|
"targetValue": "Target value",
|
|
"partialValue": "Partial value",
|
|
"unit": "Unit",
|
|
"habitType": "Habit type",
|
|
"booleanHabit": "Checkable (Yes/No)",
|
|
"slider": "Slider",
|
|
"input": "Input",
|
|
"numericHabitDescription": "Numeric habits let you track progress in increments throughout the day.",
|
|
"partialValueDescription": "To track progress in smaller increments",
|
|
"categories": "Categories",
|
|
"addCategory": "Add Category",
|
|
"editCategory": "Edit Category",
|
|
"category": "Category",
|
|
"noCategoriesYet": "No categories yet",
|
|
"createFirstCategory": "Create your first category to organize your habits",
|
|
"pleaseEnterCategoryTitle": "Please enter a category title",
|
|
"categoryAlreadyExists": "Category \"{title}\" already exists",
|
|
"@categoryAlreadyExists": { "placeholders": { "title": { "type": "String" } } },
|
|
"categoryCreatedSuccessfully": "Category \"{title}\" created successfully",
|
|
"@categoryCreatedSuccessfully": { "placeholders": { "title": { "type": "String" } } },
|
|
"categoryUpdatedSuccessfully": "Category \"{title}\" updated successfully",
|
|
"@categoryUpdatedSuccessfully": { "placeholders": { "title": { "type": "String" } } },
|
|
"categoryDeletedSuccessfully": "Category \"{title}\" deleted successfully",
|
|
"@categoryDeletedSuccessfully": { "placeholders": { "title": { "type": "String" } } },
|
|
"failedToSaveCategory": "Failed to save category: {error}",
|
|
"@failedToSaveCategory": { "placeholders": { "error": { "type": "String" } } },
|
|
"failedToDeleteCategory": "Failed to delete category: {error}",
|
|
"@failedToDeleteCategory": { "placeholders": { "error": { "type": "String" } } },
|
|
"selectCategories": "Select Categories",
|
|
"selectedCategories": "Selected Categories ({count})",
|
|
"@selectedCategories": { "placeholders": { "count": { "type": "int" } } },
|
|
"allCategories": "All Categories",
|
|
"deleteCategory": "Delete Category",
|
|
"deleteCategoryConfirmation": "Are you sure you want to delete \"{title}\"?\n\nThis will remove the category from all habits that use it.",
|
|
"@deleteCategoryConfirmation": { "placeholders": { "title": { "type": "String" } } },
|
|
"noHabitsInCategory": "No habits in \"{title}\"",
|
|
"@noHabitsInCategory": { "placeholders": { "title": { "type": "String" } } },
|
|
"createHabitForCategory": "Create a habit and assign it to this category",
|
|
"showCategories": "Show Categories",
|
|
"archive": "Archive",
|
|
"unarchive": "Unarchive",
|
|
"archiveHabit": "Archive habit",
|
|
"unarchiveHabit": "Unarchive habit",
|
|
"archivedHabits": "Archived Habits",
|
|
"noArchivedHabits": "No archived habits",
|
|
"viewArchivedHabits": "View archived habits",
|
|
"habitArchived": "Habit archived",
|
|
"habitUnarchived": "Habit unarchived",
|
|
"biometric": "Biometric",
|
|
"biometricLockEnabled": "Biometric lock enabled",
|
|
"biometricLockDisabled": "Biometric lock disabled",
|
|
"authenticationError": "Authentication error",
|
|
"biometricAuthenticationRequired": "Biometric authentication required",
|
|
"setupFingerprintFaceUnlock": "Please set up your fingerprint or face unlock in device settings",
|
|
"touchSensor": "Touch sensor",
|
|
"biometricNotRecognized": "Biometric not recognized, try again",
|
|
"biometricRequired": "Biometric required",
|
|
"biometricAuthenticationSucceeded": "Biometric authentication succeeded",
|
|
"deviceCredentialsRequired": "Device credentials required",
|
|
"setupDeviceCredentials": "Please set up device credentials in settings",
|
|
"setupTouchIdFaceId": "Please set up your Touch ID or Face ID in device settings",
|
|
"reenableTouchIdFaceId": "Please reenable your Touch ID or Face ID",
|
|
"biometricLock": "Biometric Lock",
|
|
"biometricLockDescription": "Secure app with {authMethod}",
|
|
"@biometricLockDescription": { "placeholders": { "authMethod": { "type": "String" } } },
|
|
"authenticateToEnable": "Authenticate to enable biometric lock",
|
|
"authenticateToAccess": "Please authenticate to access Habo",
|
|
"authenticationRequired": "Authentication Required",
|
|
"authenticationFailedMessage": "Please authenticate to access Habo using {authMethod}",
|
|
"@authenticationFailedMessage": { "placeholders": { "authMethod": { "type": "String" } } },
|
|
"tryAgain": "Try Again",
|
|
"authenticating": "Authenticating…",
|
|
"authenticate": "Authenticate",
|
|
"buildingBetterHabits": "Building Better Habits",
|
|
"authenticationPrompt": "Please authenticate using {authMethod} to access your habits",
|
|
"@authenticationPrompt": { "placeholders": { "authMethod": { "type": "String" } } },
|
|
"devicePinPatternPassword": "Device PIN, Pattern, or Password",
|
|
"fingerprint": "Fingerprint",
|
|
"iris": "Iris",
|
|
"whatsNewTitle": "What's New",
|
|
"whatsNewVersion": "Version {version}",
|
|
"@whatsNewVersion": { "placeholders": { "version": { "type": "String" } } },
|
|
"featureNumericTitle": "Numeric values in habits",
|
|
"featureNumericDesc": "Track counts like glasses of water or pages read",
|
|
"featureDeepLinksTitle": "URL scheme (deep links)",
|
|
"featureDeepLinksDesc": "Open Habo directly to screens like settings or create",
|
|
"featureCategoriesTitle": "Categories",
|
|
"featureCategoriesDesc": "Organize habits with category filters",
|
|
"featureArchiveTitle": "Archive",
|
|
"featureArchiveDesc": "Hide habits you no longer track without deleting",
|
|
"featureMaterialYouTitle": "Material You theme (Android)",
|
|
"featureMaterialYouDesc": "Dynamic colors that match your wallpaper",
|
|
"featureSoundTitle": "New sound engine",
|
|
"featureSoundDesc": "Adjustable volume",
|
|
"featureLockTitle": "Lock feature",
|
|
"featureLockDesc": "Secure the app with Face ID / Touch ID / biometrics",
|
|
"featureIosSoundMixingTitle": "Fixed sound mixing",
|
|
"featureIosSoundMixingDesc": "Habo sounds no longer interrupt your music or podcasts",
|
|
"featureHomescreenWidgetTitle": "Homescreen widget",
|
|
"featureHomescreenWidgetDesc": "View your habit progress at a glance from your home screen (experimental)",
|
|
"featureLongpressCheckTitle": "Longpress check",
|
|
"featureLongpressCheckDesc": "Longpress on habit buttons to quickly change status",
|
|
"haboSyncComingSoon": "Coming Soon",
|
|
"haboSyncDescription": "Sync your habits across all your devices with Habo's end-to-end encrypted cloud service.",
|
|
"haboSyncLearnMore": "Learn more at habo.space/sync",
|
|
"habitsToday": "Habits today",
|
|
"or": "or",
|
|
"oneTapCheck": "Single tap to check",
|
|
"tapCheckLongPressMenu": "Tap to check, long press for menu",
|
|
"categoryName": "Category name",
|
|
"createCategory": "Create category",
|
|
"all": "All",
|
|
"selectIcon": "Pick an icon",
|
|
"searchIcons": "Search",
|
|
"habitArchivedSuccess": "Habit archived",
|
|
"habitUnarchivedSuccess": "Habit unarchived"
|
|
}
|