264 lines
9.6 KiB
TypeScript
264 lines
9.6 KiB
TypeScript
import type { Dict } from './vi';
|
||
|
||
export const en: Dict = {
|
||
'lang.name': 'English',
|
||
|
||
'nav.demo': 'TRY DEMO',
|
||
'nav.login': 'LOG IN',
|
||
'nav.signup': 'SIGN UP',
|
||
'nav.logout': 'Log out',
|
||
'nav.account': 'Account',
|
||
'nav.theme': 'Theme',
|
||
'nav.language': 'Language',
|
||
'nav.back': 'Back to home',
|
||
'nav.guest': 'Guest',
|
||
|
||
'act.undo': 'UNDO',
|
||
'act.redo': 'REDO',
|
||
'act.reset': 'RESET',
|
||
'act.export': 'EXPORT',
|
||
'act.exporting': 'Exporting…',
|
||
'act.cancel': 'Cancel',
|
||
|
||
'drop.title': 'Drag & drop a photo here',
|
||
'drop.hint': 'or click to pick one · paste from the clipboard with Ctrl+V',
|
||
'drop.replace': 'Choose another photo',
|
||
'drop.peeking': 'SHOWING THE ORIGINAL',
|
||
'drop.peekHint': 'Hold right-click or the \\ key to compare with the original',
|
||
'drop.compare': 'Compare with original picture',
|
||
'drop.demoLimit': 'Demo build: exports are capped at {px}px and carry a watermark.',
|
||
|
||
'hist.title': 'HISTOGRAM',
|
||
'hist.drag': 'Drag to move',
|
||
'hist.hide': 'Hide the histogram',
|
||
|
||
'tab.presets': 'PRESETS',
|
||
'tab.favorited': 'FAVORITED',
|
||
'tab.photos': 'MY PHOTOS',
|
||
'tab.light': 'LIGHT',
|
||
'tab.wb': 'WB',
|
||
'tab.fx': 'FX',
|
||
'tab.hsl': 'HSL',
|
||
'hsl.hint': 'PRESS PICK, THEN SAMPLE A COLOUR ON THE PHOTO',
|
||
'tab.frame': 'FRAME',
|
||
'tab.save': 'SAVE RECENT',
|
||
'tab.create': 'CREATE RECIPES',
|
||
|
||
'create.title': 'CREATE RECIPES',
|
||
'create.save': 'SAVE RECIPE',
|
||
'create.export': 'EXPORT .RECIPE FILE',
|
||
'create.guestHint':
|
||
'Guest: the recipe stays in RECIPES until you close the page. Log in to save it to your account and export it.',
|
||
'create.userHint':
|
||
'Saved to your account. Export the .recipe file to share it — encrypted exactly like the app’s.',
|
||
|
||
'sec.filmSims': 'PHOTO STYLE',
|
||
'sec.recipes': 'RECIPES',
|
||
'sec.saved': 'SAVED',
|
||
'sec.savedEmpty': 'No saved recipes yet. Log in and hit SAVE to sync them.',
|
||
'sec.frame': 'FRAME',
|
||
'sec.crop': 'CROP',
|
||
'sec.rotate': 'ROTATE',
|
||
'sec.watermark': 'WATERMARK',
|
||
'sec.gps': 'GPS',
|
||
|
||
'wb.temp': 'COLOR TEMP',
|
||
|
||
'frame.none': 'NO FRAME',
|
||
'frame.polaroid': 'RETRO INSTANT',
|
||
'frame.classic': 'CLASSIC BORDER',
|
||
'frame.cinematic': 'CINEMATIC',
|
||
'frame.wall': 'WALL FRAME PORTRAIT',
|
||
'frame.wallLand': 'WALL FRAME LANDSCAPE',
|
||
|
||
'crop.none': 'NO CROP',
|
||
'crop.1:1': '1:1',
|
||
'crop.2:3': '2:3',
|
||
'crop.3:2': '3:2',
|
||
'crop.3:4': '3:4',
|
||
'crop.4:3': '4:3',
|
||
'crop.16:9': '16:9',
|
||
'crop.free': 'FREE',
|
||
'crop.apply': 'APPLY',
|
||
'crop.cancel': 'CANCEL',
|
||
|
||
'rot.0': '0°',
|
||
'rot.90': '90°',
|
||
'rot.180': '180°',
|
||
'rot.270': '270°',
|
||
|
||
'wm.text': 'TEXT',
|
||
'wm.color': 'COLOR',
|
||
'wm.size': 'SIZE',
|
||
'wm.gps': 'GPS STAMP',
|
||
'wm.place': 'PLACE NAME',
|
||
'wm.placePh': 'e.g. HANOI',
|
||
'wm.manual': 'ENTER COORDINATES',
|
||
'wm.lat': 'Latitude',
|
||
'wm.lng': 'Longitude',
|
||
'wm.hasExif': 'GPS read from the photo.',
|
||
'wm.noExif': 'This photo has no GPS — type it in if you want the stamp.',
|
||
|
||
'auth.loginTitle': 'Log in',
|
||
'auth.signupTitle': 'Create an account',
|
||
'auth.email': 'Email',
|
||
'auth.password': 'Password',
|
||
'auth.passwordHint': 'At least 8 characters',
|
||
'auth.noAccount': 'No account yet? Sign up',
|
||
'auth.haveAccount': 'Already have an account? Log in',
|
||
'auth.continueDemo': 'Keep using the demo',
|
||
'auth.busy': 'Working…',
|
||
'auth.loggedInAs': 'Signed in as {email}',
|
||
|
||
'save.title': 'Save recipe',
|
||
'save.name': 'Recipe name',
|
||
'save.recent': 'SAVE RECENT TO RECIPES',
|
||
'save.recentHint': 'Files the look on the stage — sim, WB, light, FX and frame — under a name, in this account alone.',
|
||
'save.recentEmpty': 'No recipes of your own yet.',
|
||
'save.delete': 'Delete this recipe',
|
||
'name.photoTitle': 'NAME THIS PHOTO',
|
||
'name.photoLabel': 'What the folder keeps it as, and the title on its landing frame.',
|
||
'name.recipeTitle': 'SAVE TO RECIPES',
|
||
'name.recipeLabel': 'A name for this look, in this account alone.',
|
||
'name.required': 'Give it a name first.',
|
||
'name.duplicate': 'You already have a recipe with that name.',
|
||
'name.save': 'SAVE',
|
||
'name.cancel': 'CANCEL',
|
||
'save.saved': 'Saved "{name}"',
|
||
'save.needLogin': 'Log in to save a recipe.',
|
||
'save.photo': 'SAVE PHOTO {n}/{max}',
|
||
'save.photoNeedLogin': 'Log in to save a photo.',
|
||
'save.photoSaved': 'Photo saved {n}/{max}.',
|
||
'save.photoFull': 'That is all {max} — remove one in My photos.',
|
||
'save.photoNoSource': 'Load a photo first.',
|
||
'save.photoFailed': 'Could not save the photo: {msg}',
|
||
'myp.empty': 'NO SAVED PHOTOS YET.',
|
||
'myp.history': 'HISTORY',
|
||
'myp.historyEmpty': 'NO EARLIER SAVES YET.',
|
||
'myp.consent': 'Allow this photo on the landing page',
|
||
'myp.remove': 'REMOVE PHOTO',
|
||
'del.title': 'REMOVE THIS PHOTO',
|
||
'del.warning': 'Removing this photo also removes the {n} looks its history kept before the last saves — they cannot be recovered. Download the photo first if you want to keep it.',
|
||
'del.download': 'DOWNLOAD FIRST',
|
||
'del.confirm': 'DELETE PHOTO',
|
||
'del.cancel': 'CANCEL',
|
||
|
||
'photo.uploading': 'UPLOADING…',
|
||
|
||
'photos.title': 'My photos',
|
||
'photos.hint': 'Each account keeps up to {max} photos. What the studio saves lives here and shows up on the community reel.',
|
||
'photos.count': '{n}/{max} photos',
|
||
'photos.add': 'ADD A PHOTO',
|
||
'photos.empty': 'No photos yet. Open the studio and hit SAVE PHOTO, or add one right here.',
|
||
'photos.full': 'That is all {max}. Remove one before saving again.',
|
||
'photos.delete': 'DELETE',
|
||
'photos.deleted': 'Photo removed.',
|
||
'photos.failed': 'That did not work: {msg}',
|
||
'photos.noLabels': 'No strip labels yet',
|
||
|
||
'nav.admin': 'Admin',
|
||
'nav.photos': 'My photos',
|
||
'nav.profile': 'Profile',
|
||
'nav.studio': 'Studio',
|
||
'adm.title': 'Strip moderation',
|
||
'adm.subtitle': 'Photos contributed by users. Delete one to pull it off the landing page.',
|
||
'adm.upload': 'ADD A PHOTO',
|
||
'adm.uploads': 'Uploaded photos',
|
||
'adm.sections': 'Landing sections',
|
||
'adm.albumAll': 'All photos',
|
||
'adm.filterName': 'Filter by user name',
|
||
'adm.sort': 'Sort',
|
||
'adm.sortNewest': 'Newest first',
|
||
'adm.sortRecipe': 'Recipe A→Z',
|
||
'adm.sortRating': 'Highest rated',
|
||
'adm.rating': 'Rating',
|
||
'adm.ratingAll': 'Any rating',
|
||
'adm.ratingAtLeast': '{n}★ and up',
|
||
'adm.recipe': 'Recipe',
|
||
'adm.bigEmpty': 'Pick a frame to view.',
|
||
'adm.pickStrip': 'Film strip',
|
||
'adm.pickTester': 'Live preset tester',
|
||
'adm.pickCreator': 'Custom recipe creator',
|
||
'adm.pickQr': 'QR card',
|
||
'adm.noPreset': 'no look to hand out',
|
||
'adm.rowEmpty': 'Nothing here yet.',
|
||
'adm.slotHint': 'Tick the sections a photo should appear in — a photo can sit in several at once, and each section draws one of its own at random per visit. Unticking every box takes the photo off the landing page without deleting it — its owner keeps it in MY PHOTOS. The QR section is the one that hands the look out: its card shows a code that downloads the photo’s own .recipe file for the phone app to scan in.',
|
||
'adm.signIn': 'Sign in with an admin account',
|
||
'adm.notAdmin': 'This account has no admin rights.',
|
||
'adm.empty': 'No contributions yet.',
|
||
'adm.total': '{n} photos',
|
||
'adm.owner': 'Uploaded by',
|
||
'adm.size': 'Size',
|
||
'adm.uploaded': 'Uploaded',
|
||
'adm.delete': 'DELETE',
|
||
'adm.clearAll': 'DELETE ALL',
|
||
'adm.clearConfirm': 'Delete all {n} contributions? This cannot be undone.',
|
||
'adm.removed': 'Deleted {n} photos.',
|
||
'adm.back': 'Back to home',
|
||
'adm.settings': 'SETTINGS',
|
||
'adm.tabPictures': 'Pictures',
|
||
'adm.tabUsers': 'User account',
|
||
'adm.tabProfile': 'Profile',
|
||
'adm.close': 'Close',
|
||
'adm.userPicture': 'Picture',
|
||
'adm.userName': 'Name',
|
||
'adm.userEmail': 'Email',
|
||
'adm.userRole': 'Role',
|
||
'adm.userPhotos': 'Photos',
|
||
'adm.userJoined': 'Joined',
|
||
'adm.roleAdmin': 'Admin',
|
||
'adm.roleMember': 'Member',
|
||
'adm.viewPhotos': 'VIEW PHOTOS',
|
||
'adm.noUsers': 'No accounts yet.',
|
||
'adm.profileHint': 'Picture, email and password of the signed-in account. Changing the email or password needs the current password.',
|
||
'adm.changeAvatar': 'CHANGE PICTURE',
|
||
'adm.currentPassword': 'Current password',
|
||
'adm.newEmail': 'New email',
|
||
'adm.newPassword': 'New password',
|
||
'adm.save': 'SAVE',
|
||
'adm.saved': 'Profile saved.',
|
||
'adm.userActions': 'Actions',
|
||
'adm.userBlock': 'BLOCK',
|
||
'adm.userUnblock': 'UNBLOCK',
|
||
'adm.userRemove': 'REMOVE',
|
||
'adm.userRestore': 'RESTORE',
|
||
'adm.userDelete': 'DELETE',
|
||
'adm.userBlocked': 'Blocked',
|
||
'adm.userRemoved': 'Removed',
|
||
'adm.userDeleteConfirm': 'Permanently delete the account {email} with all of its photos and recipes? This cannot be undone.',
|
||
'adm.selectAll': 'SELECT ALL',
|
||
'adm.selectNone': 'SELECT NONE',
|
||
'adm.deleteSelected': 'DELETE SELECTED ({n})',
|
||
'adm.userDeleteSelectedConfirm': 'Permanently delete the {n} selected accounts with all of their photos and recipes? This cannot be undone.',
|
||
'adm.tabStats': 'STATS',
|
||
|
||
'stats.days': '{n} DAYS',
|
||
'stats.hint': 'Traffic over the selected range.',
|
||
'stats.views': 'PAGE VIEWS',
|
||
'stats.clicks': 'FEATURE CLICKS',
|
||
'stats.visitors': 'VISITORS',
|
||
'stats.timeline': 'TRAFFIC PER DAY',
|
||
'stats.peak': 'peak',
|
||
'stats.pages': 'PAGES VIEWED',
|
||
'stats.targets': 'FEATURES CLICKED',
|
||
'stats.countries': 'COUNTRIES',
|
||
'stats.regions': 'REGIONS',
|
||
'stats.cities': 'CITIES',
|
||
'stats.browsers': 'BROWSERS',
|
||
'stats.systems': 'OPERATING SYSTEMS',
|
||
'stats.devices': 'DEVICES',
|
||
'stats.empty': 'No data yet.',
|
||
|
||
'profile.title': 'My profile',
|
||
|
||
'err.noWebgl':
|
||
'The browser refused a WebGL context — this build needs WebGL to process photos (the CPU path is thousands of times slower).',
|
||
'err.decode': 'Could not read this image. Try another JPG or PNG.',
|
||
'err.generic': 'Something went wrong: {msg}',
|
||
'err.offline': 'Could not reach the server.',
|
||
|
||
'meta.exported': 'Downloaded {name} ({kb}KB, 300 ppi)',
|
||
};
|
||
|
||
export default en;
|