307 lines
12 KiB
TypeScript
307 lines
12 KiB
TypeScript
import demoEn from "./demo-en"
|
|
|
|
const en = {
|
|
common: {
|
|
ok: "OK!",
|
|
cancel: "Cancel",
|
|
save: "Save",
|
|
back: "Back",
|
|
logOut: "Log Out",
|
|
copied: "Copied",
|
|
},
|
|
welcomeScreen: {
|
|
postscript:
|
|
"psst — This probably isn't what your app looks like. (Unless your designer handed you these screens, and in that case, ship it!)",
|
|
readyForLaunch: "Your app, almost ready for launch!",
|
|
exciting: "(ohh, this is exciting!)",
|
|
letsGo: "Let's go!",
|
|
},
|
|
errorScreen: {
|
|
title: "Something went wrong!",
|
|
friendlySubtitle:
|
|
"This is the screen that your users will see in production when an error is thrown. You'll want to customize this message (located in `app/i18n/en.ts`) and probably the layout as well (`app/screens/ErrorScreen`). If you want to remove this entirely, check `app/app.tsx` for the <ErrorBoundary> component.",
|
|
reset: "RESET APP",
|
|
traceTitle: "Error from %{name} stack",
|
|
},
|
|
emptyStateComponent: {
|
|
generic: {
|
|
heading: "So empty... so sad",
|
|
content: "No data found yet. Try clicking the button to refresh or reload the app.",
|
|
button: "Let's try this again",
|
|
},
|
|
},
|
|
|
|
errors: {
|
|
invalidEmail: "Invalid email address.",
|
|
},
|
|
authErrors: {
|
|
// Network errors
|
|
timeout: "Request timed out. Please try again.",
|
|
cannotConnect: "Cannot connect to server. Please check your network.",
|
|
serverError: "Server error. Please try again later.",
|
|
badData: "Invalid response from server.",
|
|
unknownError: "An unknown error occurred.",
|
|
// Registration errors (E001-E010)
|
|
E001: "Username already exists.",
|
|
E002: "Email is already registered.",
|
|
E003: "Invalid referral code.",
|
|
E004: "No pending registration request.",
|
|
E005: "Invalid verification code.",
|
|
E006: "Referral code already bound.",
|
|
E007: "Cannot use your own referral code.",
|
|
// Login errors (E011-E020)
|
|
E011: "Invalid email or password.",
|
|
E012: "Account temporarily locked. Please try again later.",
|
|
E013: "No pending login request.",
|
|
E014: "User does not exist or has been disabled.",
|
|
E015: "Invalid verification code.",
|
|
E016: "Invalid Telegram authentication.",
|
|
E017: "Invalid Telegram data format.",
|
|
E018: "Google authentication failed.",
|
|
E019: "Please provide Google token.",
|
|
// Password errors (E021-E030)
|
|
E021: "Current password is incorrect.",
|
|
E022: "New password cannot be the same as current password.",
|
|
E023: "Email is not registered.",
|
|
E024: "Account has been disabled.",
|
|
E025: "No pending password reset request.",
|
|
E026: "Password reset code has expired.",
|
|
E027: "Invalid password reset code.",
|
|
E028: "User does not exist.",
|
|
E029: "No fields provided to update.",
|
|
// Email verification errors (E041-E055)
|
|
E041: "Sending verification code too frequently. Please wait.",
|
|
E042: "Email verification code has expired.",
|
|
E043: "Invalid email verification code.",
|
|
E044: "Email is already verified.",
|
|
E045: "Email is already used by another user.",
|
|
E046: "No verified email address.",
|
|
E047: "Please send verification code to current email first.",
|
|
E048: "Please verify current email first.",
|
|
E049: "Please send verification code to new email first.",
|
|
E050: "Invalid action parameter.",
|
|
},
|
|
loginScreen: {
|
|
logIn: "Log In",
|
|
enterDetails:
|
|
"Enter your details below to unlock top secret info. You'll never guess what we've got waiting. Or maybe you will; it's not rocket science here.",
|
|
emailFieldLabel: "Email",
|
|
passwordFieldLabel: "Password",
|
|
emailFieldPlaceholder: "Enter your email address",
|
|
passwordFieldPlaceholder: "Super secret password here",
|
|
tapToLogIn: "Tap to log in!",
|
|
hint: "Hint: you can use any email address and your favorite password :)",
|
|
},
|
|
navigator: {
|
|
componentsTab: "Components",
|
|
debugTab: "Debug",
|
|
communityTab: "Community",
|
|
podcastListTab: "Podcast",
|
|
profileTab: "Profile",
|
|
},
|
|
profileScreen: {
|
|
title: "Profile",
|
|
guest: "Guest",
|
|
uid: "UID",
|
|
username: "Username",
|
|
referralCode: "Referral Code",
|
|
settings: "Settings",
|
|
darkMode: "Dark Mode",
|
|
notifications: "Notifications",
|
|
security: "Security",
|
|
account: "Account",
|
|
accountStatus: "Account Status",
|
|
active: "Active",
|
|
inactive: "Inactive",
|
|
regular: "Regular",
|
|
emailVerified: "Email Verified",
|
|
verified: "Verified",
|
|
unverified: "Unverified",
|
|
loginMethods: "Login Methods",
|
|
version: "Version",
|
|
changePassword: "Change Password",
|
|
changeEmail: "Change Email",
|
|
editNickname: "Edit Nickname",
|
|
editProfile: "Edit Profile",
|
|
nicknamePlaceholder: "Enter your nickname",
|
|
nickname: "Nickname",
|
|
tapToChangeAvatar: "Tap to change avatar",
|
|
about: "About",
|
|
},
|
|
changePasswordScreen: {
|
|
title: "Change Password",
|
|
description: "Enter your current password and choose a new password.",
|
|
oldPassword: "Current Password",
|
|
newPassword: "New Password",
|
|
confirmPassword: "Confirm New Password",
|
|
logoutOtherDevices: "Log out from other devices",
|
|
submit: "Change Password",
|
|
success: "Success",
|
|
successMessage: "Your password has been changed successfully.",
|
|
oldPasswordRequired: "Current password is required.",
|
|
newPasswordRequired: "New password is required.",
|
|
passwordTooShort: "Password must be at least 6 characters.",
|
|
passwordMismatch: "Passwords do not match.",
|
|
samePassword: "New password cannot be the same as current password.",
|
|
},
|
|
changeEmailScreen: {
|
|
title: "Change Email",
|
|
step1Label: "Verify Email",
|
|
step2Label: "Bind New Email",
|
|
step1Title: "Step 1: Verify Current Email",
|
|
step1Description: "We will send a verification code to your current email address.",
|
|
step2Title: "Step 2: Bind New Email",
|
|
step2Description: "Enter your new email address and verify it.",
|
|
currentEmail: "Current Email",
|
|
newEmail: "New Email Address",
|
|
verificationCode: "Verification Code",
|
|
sendCode: "Send Verification Code",
|
|
sendCodeToNewEmail: "Send Code to New Email",
|
|
verify: "Verify",
|
|
confirmNewEmail: "Confirm New Email",
|
|
resendCode: "Resend Code",
|
|
success: "Success",
|
|
successMessage: "Your email has been changed successfully.",
|
|
codeRequired: "Verification code is required.",
|
|
codeInvalid: "Verification code must be 6 digits.",
|
|
newEmailRequired: "New email address is required.",
|
|
emailInvalid: "Please enter a valid email address.",
|
|
sameEmail: "New email cannot be the same as current email.",
|
|
},
|
|
settingsScreen: {
|
|
title: "Settings",
|
|
appearance: "Appearance",
|
|
theme: "Theme",
|
|
darkMode: "Dark Mode",
|
|
language: "Language",
|
|
currentLanguage: "Language",
|
|
},
|
|
languageScreen: {
|
|
title: "Language",
|
|
selectHint: "Select your preferred language",
|
|
},
|
|
themeScreen: {
|
|
title: "Theme",
|
|
selectHint: "Select your preferred theme",
|
|
system: "System",
|
|
light: "Light",
|
|
dark: "Dark",
|
|
},
|
|
securityScreen: {
|
|
title: "Security",
|
|
description: "Manage your account security settings.",
|
|
changePassword: "Change Password",
|
|
changeEmail: "Change Email",
|
|
// Session management
|
|
activeSessions: "Active Sessions",
|
|
activeSessionsDescription: "Devices currently logged into your account",
|
|
currentDevice: "Current Device",
|
|
lastActive: "Last active",
|
|
loginMethod: "Login via",
|
|
logoutDevice: "Logout",
|
|
logoutAllOther: "Logout All Other Devices",
|
|
logoutAllOtherDescription: "This will log out all devices except the current one.",
|
|
noOtherSessions: "No other active sessions",
|
|
sessionRevoked: "Device has been logged out",
|
|
sessionsRevoked: "{{count}} devices have been logged out",
|
|
confirmLogout: "Confirm Logout",
|
|
confirmLogoutMessage: "Are you sure you want to log out this device?",
|
|
confirmLogoutAllMessage: "Are you sure you want to log out all other devices?",
|
|
deviceTypes: {
|
|
desktop: "Desktop",
|
|
mobile: "Mobile",
|
|
tablet: "Tablet",
|
|
unknown: "Unknown Device",
|
|
},
|
|
},
|
|
aboutScreen: {
|
|
title: "About",
|
|
appInfo: "App Information",
|
|
appName: "App Name",
|
|
version: "Version",
|
|
buildVersion: "Build Version",
|
|
appId: "App ID",
|
|
appVersion: "App Version",
|
|
legal: "Legal",
|
|
privacyPolicy: "Privacy Policy",
|
|
termsOfService: "Terms of Service",
|
|
},
|
|
communityScreen: {
|
|
title: "Connect with the community",
|
|
tagLine:
|
|
"Plug in to Infinite Red's community of React Native engineers and level up your app development with us!",
|
|
joinUsOnSlackTitle: "Join us on Slack",
|
|
joinUsOnSlack:
|
|
"Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.",
|
|
joinSlackLink: "Join the Slack Community",
|
|
makeIgniteEvenBetterTitle: "Make Ignite even better",
|
|
makeIgniteEvenBetter:
|
|
"Have an idea to make Ignite even better? We're happy to hear that! We're always looking for others who want to help us build the best React Native tooling out there. Join us over on GitHub to join us in building the future of Ignite.",
|
|
contributeToIgniteLink: "Contribute to Ignite",
|
|
theLatestInReactNativeTitle: "The latest in React Native",
|
|
theLatestInReactNative: "We're here to keep you current on all React Native has to offer.",
|
|
reactNativeRadioLink: "React Native Radio",
|
|
reactNativeNewsletterLink: "React Native Newsletter",
|
|
reactNativeLiveLink: "React Native Live",
|
|
chainReactConferenceLink: "Chain React Conference",
|
|
hireUsTitle: "Hire Infinite Red for your next project",
|
|
hireUs:
|
|
"Whether it's running a full project or getting teams up to speed with our hands-on training, Infinite Red can help with just about any React Native project.",
|
|
hireUsLink: "Send us a message",
|
|
},
|
|
showroomScreen: {
|
|
jumpStart: "Components to jump start your project!",
|
|
lorem2Sentences:
|
|
"Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.",
|
|
demoHeaderTxExample: "Yay",
|
|
demoViaTxProp: "Via `tx` Prop",
|
|
demoViaSpecifiedTxProp: "Via `{{prop}}Tx` Prop",
|
|
},
|
|
demoDebugScreen: {
|
|
howTo: "HOW TO",
|
|
title: "Debug",
|
|
tagLine:
|
|
"Congratulations, you've got a very advanced React Native app template here. Take advantage of this boilerplate!",
|
|
reactotron: "Send to Reactotron",
|
|
reportBugs: "Report Bugs",
|
|
demoList: "Demo List",
|
|
demoPodcastList: "Demo Podcast List",
|
|
androidReactotronHint:
|
|
"If this doesn't work, ensure the Reactotron desktop app is running, run adb reverse tcp:9090 tcp:9090 from your terminal, and reload the app.",
|
|
iosReactotronHint:
|
|
"If this doesn't work, ensure the Reactotron desktop app is running and reload app.",
|
|
macosReactotronHint:
|
|
"If this doesn't work, ensure the Reactotron desktop app is running and reload app.",
|
|
webReactotronHint:
|
|
"If this doesn't work, ensure the Reactotron desktop app is running and reload app.",
|
|
windowsReactotronHint:
|
|
"If this doesn't work, ensure the Reactotron desktop app is running and reload app.",
|
|
},
|
|
demoPodcastListScreen: {
|
|
title: "React Native Radio episodes",
|
|
onlyFavorites: "Only Show Favorites",
|
|
favoriteButton: "Favorite",
|
|
unfavoriteButton: "Unfavorite",
|
|
accessibility: {
|
|
cardHint:
|
|
"Double tap to listen to the episode. Double tap and hold to {{action}} this episode.",
|
|
switch: "Switch on to only show favorites",
|
|
favoriteAction: "Toggle Favorite",
|
|
favoriteIcon: "Episode not favorited",
|
|
unfavoriteIcon: "Episode favorited",
|
|
publishLabel: "Published {{date}}",
|
|
durationLabel: "Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds",
|
|
},
|
|
noFavoritesEmptyState: {
|
|
heading: "This looks a bit empty",
|
|
content:
|
|
"No favorites have been added yet. Tap the heart on an episode to add it to your favorites!",
|
|
},
|
|
},
|
|
|
|
...demoEn,
|
|
}
|
|
|
|
export default en
|
|
export type Translations = typeof en
|