Files
learn-languages/messages/en-US.json
goddonebianu 57ad1b8699 refactor: 完全重构为 Anki 兼容数据结构
- 用 Deck 替换 Folder
- 用 Note + Card 替换 Pair (双向复习)
- 添加 NoteType (卡片模板)
- 添加 Revlog (复习历史)
- 实现 SM-2 间隔重复算法
- 更新所有前端页面
- 添加数据库迁移
2026-03-10 19:20:46 +08:00

446 lines
16 KiB
JSON

{
"alphabet": {
"chooseCharacters": "Please select the characters you want to learn",
"chooseAlphabetHint": "Select an alphabet to start learning",
"japanese": "Japanese Kana",
"english": "English Alphabet",
"uyghur": "Uyghur Alphabet",
"esperanto": "Esperanto Alphabet",
"loading": "Loading...",
"loadFailed": "Loading failed, please try again",
"hideLetter": "Hide Letter",
"showLetter": "Show Letter",
"hideIPA": "Hide IPA",
"showIPA": "Show IPA",
"roman": "Romanization",
"letter": "Letter",
"random": "Random Mode",
"randomNext": "Random Next",
"previousLetter": "Previous letter",
"nextLetter": "Next letter",
"keyboardHint": "Use left/right arrow keys or space for random, ESC to go back",
"swipeHint": "Use left/right arrow keys or swipe to navigate, ESC to go back"
},
"folders": {
"title": "Folders",
"subtitle": "Manage your collections",
"newFolder": "New Folder",
"creating": "Creating...",
"noFoldersYet": "No folders yet",
"folderInfo": "ID: {id} • {totalPairs} pairs",
"enterFolderName": "Enter folder name:",
"confirmDelete": "Type \"{name}\" to delete:",
"myFolders": "My Folders",
"publicFolders": "Public Folders",
"public": "Public",
"private": "Private",
"setPublic": "Set Public",
"setPrivate": "Set Private",
"publicFolderInfo": "{userName} • {totalPairs} pairs",
"searchPlaceholder": "Search public folders...",
"loading": "Loading...",
"noPublicFolders": "No public folders found",
"unknownUser": "Unknown User",
"enterNewName": "Enter new name:",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"pleaseLogin": "Please login first"
},
"folder_id": {
"unauthorized": "You are not the owner of this folder",
"back": "Back",
"textPairs": "Text Pairs",
"itemsCount": "{count} items",
"memorize": "Memorize",
"loadingTextPairs": "Loading text pairs...",
"noTextPairs": "No text pairs in this folder",
"addNewTextPair": "Add New Text Pair",
"add": "Add",
"updateTextPair": "Update Text Pair",
"update": "Update",
"text1": "Text 1",
"text2": "Text 2",
"language1": "Locale 1",
"language2": "Locale 2",
"enterLanguageName": "Please enter language name",
"edit": "Edit",
"delete": "Delete",
"permissionDenied": "You do not have permission to perform this action",
"error": {
"update": "You do not have permission to update this item.",
"delete": "You do not have permission to delete this item.",
"add": "You do not have permission to add items to this folder.",
"rename": "You do not have permission to rename this folder.",
"deleteFolder": "You do not have permission to delete this folder."
}
},
"home": {
"title": "Learn Languages",
"description": "Here is a very useful website to help you learn almost every language in the world, including constructed ones.",
"explore": "Explore",
"fortune": {
"quote": "Stay hungry, stay foolish.",
"author": "— Steve Jobs"
},
"translator": {
"name": "Translator",
"description": "Translate to any language and annotate with International Phonetic Alphabet (IPA)"
},
"textSpeaker": {
"name": "Text Speaker",
"description": "Recognize and read text aloud, supports loop playback and speed adjustment"
},
"srtPlayer": {
"name": "SRT Video Player",
"description": "Play videos sentence by sentence based on SRT subtitle files to mimic native speaker pronunciation"
},
"alphabet": {
"name": "Alphabet",
"description": "Start learning a new language from the alphabet"
},
"memorize": {
"name": "Memorize",
"description": "Language A to Language B, Language B to Language A, supports dictation"
},
"dictionary": {
"name": "Dictionary",
"description": "Look up words and phrases with detailed definitions and examples"
},
"moreFeatures": {
"name": "More Features",
"description": "Under development, stay tuned"
}
},
"auth": {
"title": "Sign In",
"signUpTitle": "Sign Up",
"signIn": "Sign In",
"signUp": "Sign Up",
"email": "Email",
"password": "Password",
"confirmPassword": "Confirm Password",
"name": "Name",
"username": "Username",
"emailOrUsername": "Email or Username",
"signInButton": "Sign In",
"signUpButton": "Sign Up",
"noAccount": "Don't have an account?",
"hasAccount": "Already have an account?",
"signInWithGitHub": "Sign In with GitHub",
"signUpWithGitHub": "Sign Up with GitHub",
"invalidEmail": "Please enter a valid email address",
"passwordTooShort": "Password must be at least 8 characters",
"passwordsNotMatch": "Passwords do not match",
"nameRequired": "Please enter your name",
"usernameRequired": "Please enter a username",
"usernameTooShort": "Username must be at least 3 characters",
"usernameInvalid": "Username can only contain letters, numbers, and underscores",
"emailRequired": "Please enter your email",
"identifierRequired": "Please enter your email or username",
"passwordRequired": "Please enter your password",
"confirmPasswordRequired": "Please confirm your password",
"loading": "Loading...",
"confirm": "Confirm",
"noAccountLink": "Don't have an account? Sign up",
"hasAccountLink": "Already have an account? Sign in",
"usernamePlaceholder": "Username",
"emailPlaceholder": "Email address",
"passwordPlaceholder": "Password",
"usernameOrEmailPlaceholder": "Username or email",
"loginFailed": "Login failed",
"signUpFailed": "Sign up failed",
"fillAllFields": "Please fill in all fields",
"enterCredentials": "Please enter username and password",
"forgotPassword": "Forgot Password",
"forgotPasswordHint": "Enter your email address and we'll send you a link to reset your password.",
"sendResetEmail": "Send Reset Email",
"resetPasswordFailed": "Failed to send reset email",
"resetPasswordEmailSent": "Reset email sent successfully",
"resetPasswordEmailSentHint": "We've sent a password reset link to your email address. Please check your inbox.",
"checkYourEmail": "Check Your Email",
"backToLogin": "Back to Login",
"resetPassword": "Reset Password",
"newPassword": "New Password",
"invalidToken": "Invalid or Expired Link",
"invalidTokenHint": "This password reset link is invalid or has expired. Please request a new one.",
"requestNewToken": "Request New Reset Link",
"resetPasswordSuccess": "Password reset successfully",
"resetPasswordSuccessTitle": "Password Reset Complete",
"resetPasswordSuccessHint": "Your password has been reset successfully. You can now log in with your new password."
},
"memorize": {
"deck_selector": {
"selectDeck": "Select a deck",
"noDecks": "No decks found",
"goToDecks": "Go to Decks",
"noCards": "No cards",
"new": "New",
"learning": "Learning",
"review": "Review",
"due": "Due"
},
"review": {
"loading": "Loading cards...",
"backToDecks": "Back to Decks",
"allDone": "All Done!",
"allDoneDesc": "You've reviewed all due cards.",
"reviewedCount": "Reviewed {count} cards",
"progress": "{current} / {total}",
"nextReview": "Next review",
"interval": "Interval",
"ease": "Ease",
"lapses": "Lapses",
"showAnswer": "Show Answer",
"again": "Again",
"hard": "Hard",
"good": "Good",
"easy": "Easy",
"now": "now",
"lessThanMinute": "<1 min",
"inMinutes": "{count} min",
"inHours": "{count}h",
"inDays": "{count}d",
"inMonths": "{count}mo",
"minutes": "<1 min",
"days": "{count}d",
"months": "{count}mo",
"minAbbr": "m",
"dayAbbr": "d"
},
"page": {
"unauthorized": "You are not authorized to access this deck"
}
},
"navbar": {
"title": "learn-languages",
"sourceCode": "GitHub",
"sign_in": "Sign In",
"profile": "Profile",
"folders": "Folders",
"explore": "Explore",
"favorites": "Favorites",
"settings": "Settings"
},
"ocr": {
"title": "OCR Vocabulary Extractor",
"description": "Upload vocabulary table screenshots from textbooks to extract word-definition pairs",
"uploadSection": "Upload Image",
"uploadImage": "Upload Image",
"dragDropHint": "Drag and drop an image here, or click to select",
"dropOrClick": "Drag and drop an image here, or click to select",
"changeImage": "Click to change image",
"supportedFormats": "Supports: JPG, PNG, WebP",
"deckSelection": "Select Deck",
"selectDeck": "Select a deck",
"chooseDeck": "Choose a deck to save extracted pairs",
"noDecks": "No decks available. Please create a deck first.",
"languageHints": "Language Hints (Optional)",
"sourceLanguageHint": "Source language (e.g., English)",
"targetLanguageHint": "Target/Translation language (e.g., Chinese)",
"sourceLanguagePlaceholder": "Source language (e.g., English)",
"targetLanguagePlaceholder": "Target/Translation language (e.g., Chinese)",
"process": "Process Image",
"processButton": "Process Image",
"processing": "Processing...",
"preview": "Preview",
"resultsPreview": "Results Preview",
"extractedPairs": "Extracted {count} pairs",
"word": "Word",
"definition": "Definition",
"pairsCount": "{count} pairs extracted",
"savePairs": "Save to Deck",
"saveButton": "Save",
"saving": "Saving...",
"saved": "Successfully saved {count} pairs to {deck}",
"ocrSuccess": "Successfully extracted {count} pairs to {deck}",
"savedToDeck": "Saved to {deckName}",
"saveFailed": "Failed to save pairs",
"noImage": "Please upload an image first",
"noDeck": "Please select a deck",
"noResultsToSave": "No results to save",
"processingFailed": "OCR processing failed",
"tryAgain": "Please try again with a clearer image",
"detectedLanguages": "Detected: {source} → {target}",
"detectedSourceLanguage": "Detected source language",
"detectedTargetLanguage": "Detected target language"
},
"profile": {
"myProfile": "My Profile",
"email": "Email: {email}",
"logout": "Logout"
},
"settings": {
"title": "Settings",
"themeColor": "Theme Color",
"themeColorDescription": "Choose your preferred theme color"
},
"srt_player": {
"uploadVideo": "Upload Video",
"uploadSubtitle": "Upload Subtitle",
"pause": "Pause",
"play": "Play",
"previous": "Previous",
"next": "Next",
"restart": "Restart",
"autoPause": "Auto Pause ({enabled})",
"uploadVideoAndSubtitle": "Please upload video and subtitle files",
"uploadVideoFile": "Please upload video file",
"uploadSubtitleFile": "Please upload subtitle file",
"processingSubtitle": "Processing subtitle file...",
"needBothFiles": "Both video and subtitle files are required to start learning",
"videoFile": "Video File",
"subtitleFile": "Subtitle File",
"uploaded": "Uploaded",
"notUploaded": "Not Uploaded",
"upload": "Upload",
"uploadVideoButton": "Upload Video",
"uploadSubtitleButton": "Upload Subtitle",
"subtitleUploaded": "Subtitle Uploaded ({count} entries)",
"subtitleNotUploaded": "Subtitle Not Uploaded",
"autoPauseStatus": "Auto Pause: {enabled}",
"on": "On",
"off": "Off",
"videoUploadFailed": "Video upload failed",
"subtitleUploadFailed": "Subtitle upload failed",
"subtitleLoadSuccess": "Subtitle loaded successfully",
"subtitleLoadFailed": "Subtitle load failed"
},
"text_speaker": {
"generateIPA": "Generate IPA",
"viewSavedItems": "View Saved Items",
"confirmDeleteAll": "Are you sure you want to delete everything? (Y/N)"
},
"translator": {
"detectLanguage": "detect language",
"sourceLanguage": "source language",
"auto": "Auto",
"generateIPA": "generate ipa",
"translateInto": "translate into",
"chinese": "Chinese",
"english": "English",
"french": "French",
"german": "German",
"italian": "Italian",
"japanese": "Japanese",
"korean": "Korean",
"portuguese": "Portuguese",
"russian": "Russian",
"spanish": "Spanish",
"other": "Other",
"translating": "translating...",
"translate": "translate",
"inputLanguage": "Input a language.",
"history": "History",
"enterLanguage": "Enter language",
"add_to_folder": {
"notAuthenticated": "You are not authenticated",
"chooseFolder": "Choose a Folder to Add to",
"noFolders": "No folders found",
"folderInfo": "{id}. {name}",
"close": "Close",
"success": "Text pair added to folder",
"error": "Failed to add text pair to folder"
},
"autoSave": "Auto Save"
},
"dictionary": {
"title": "Dictionary",
"description": "Look up words and phrases with detailed definitions and examples",
"searchPlaceholder": "Enter a word or phrase to look up...",
"searching": "Searching...",
"search": "Search",
"languageSettings": "Language Settings",
"queryLanguage": "Query Language",
"queryLanguageHint": "What language is the word/phrase you want to look up",
"definitionLanguage": "Definition Language",
"definitionLanguageHint": "What language do you want the definitions in",
"otherLanguagePlaceholder": "Or enter another language...",
"other": "Other",
"currentSettings": "Current settings: Query {queryLang}, Definition {definitionLang}",
"relookup": "Re-search",
"saveToFolder": "Save to folder",
"loading": "Loading...",
"noResults": "No results found",
"tryOtherWords": "Try other words or phrases",
"welcomeTitle": "Welcome to Dictionary",
"welcomeHint": "Enter a word or phrase in the search box above to start looking up",
"lookupFailed": "Search failed, please try again later",
"relookupSuccess": "Re-searched successfully",
"relookupFailed": "Dictionary re-search failed",
"pleaseLogin": "Please log in first",
"pleaseCreateFolder": "Please create a folder first",
"savedToFolder": "Saved to folder: {folderName}",
"saveFailed": "Save failed, please try again later",
"definition": "Definition",
"example": "Example"
},
"explore": {
"title": "Explore",
"subtitle": "Discover public decks",
"searchPlaceholder": "Search public decks...",
"loading": "Loading...",
"noDecks": "No public decks found",
"deckInfo": "{userName} • {cardCount} cards",
"unknownUser": "Unknown User",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"pleaseLogin": "Please login first",
"sortByFavorites": "Sort by favorites",
"sortByFavoritesActive": "Undo sort by favorites"
},
"exploreDetail": {
"title": "Deck Details",
"createdBy": "Created by: {name}",
"unknownUser": "Unknown User",
"totalCards": "Total Cards",
"favorites": "Favorites",
"createdAt": "Created At",
"viewContent": "View Content",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"favorited": "Favorited",
"unfavorited": "Unfavorited",
"pleaseLogin": "Please login first"
},
"favorites": {
"title": "My Favorites",
"subtitle": "Folders you've favorited",
"loading": "Loading...",
"noFavorites": "No favorites yet",
"folderInfo": "{userName} • {totalPairs} pairs",
"unknownUser": "Unknown User"
},
"user_profile": {
"anonymous": "Anonymous",
"email": "Email",
"verified": "Verified",
"unverified": "Unverified",
"accountInfo": "Account Information",
"userId": "User ID",
"username": "Username",
"displayName": "Display Name",
"notSet": "Not Set",
"memberSince": "Member Since",
"joined": "Joined",
"logout": "Logout",
"decks": {
"title": "Decks",
"noDecks": "No decks yet",
"deckName": "Deck Name",
"totalCards": "Total Cards",
"createdAt": "Created At",
"actions": "Actions",
"view": "View"
}
},
"follow": {
"follow": "Follow",
"following": "Following",
"followers": "Followers",
"followersOf": "{username}'s Followers",
"followingOf": "{username}'s Following",
"noFollowers": "No followers yet",
"noFollowing": "Not following anyone yet"
}
}