All checks were successful
Word limit and no-retry state for rejected input, nested /catalog route for system back, logger filter for supabase libs, more mutation-proof tests, doc fix, umlaut-aware term sorting, thousands separators. Refs #3 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
211 lines
12 KiB
Text
211 lines
12 KiB
Text
{
|
||
"@@locale": "en",
|
||
"appTitle": "Shuffle",
|
||
"@appTitle": {
|
||
"description": "Name of the app"
|
||
},
|
||
"homePlaceholderMessage": "Welcome to Shuffle. The board game catalog is coming soon.",
|
||
"@homePlaceholderMessage": {
|
||
"description": "Placeholder text on the start page until real content exists"
|
||
},
|
||
"notFoundTitle": "Page not found",
|
||
"@notFoundTitle": {
|
||
"description": "Title of the 404 page"
|
||
},
|
||
"notFoundMessage": "This page does not exist or has been moved.",
|
||
"@notFoundMessage": {
|
||
"description": "Explanation on the 404 page"
|
||
},
|
||
"notFoundBackHome": "Back to start",
|
||
"@notFoundBackHome": {
|
||
"description": "Button on the 404 page that navigates to the start page"
|
||
},
|
||
"authErrorInvalidCredentials": "Email address or password is incorrect.",
|
||
"authErrorEmailNotConfirmed": "Please confirm your email address first. We sent you an email for this.",
|
||
"authActionResendConfirmation": "Resend confirmation email",
|
||
"authErrorRateLimited": "Too many attempts. Please wait a few minutes and try again.",
|
||
"authErrorWeakPasswordLength": "The password is too short.",
|
||
"authErrorWeakPasswordCharacters": "The password is too simple. Choose a different one.",
|
||
"authErrorWeakPasswordPwned": "This password is very common and easy to guess. Choose a different one.",
|
||
"authErrorSamePassword": "Choose a password different from your current one.",
|
||
"authErrorLinkInvalidOrExpired": "The link has expired or has already been used.",
|
||
"authActionRequestNewLink": "Request a new link",
|
||
"authErrorEmailInvalid": "Enter a valid email address.",
|
||
"authErrorRegistrationRejected": "Registration is not possible. Please check your details.",
|
||
"authErrorNetwork": "No connection. You need internet access for this step.",
|
||
"authErrorUnexpected": "Something went wrong. Please try again.",
|
||
"authActionRetry": "Try again",
|
||
"authPasswordTooShort": "At least 10 characters – {missing, plural, =1{1 more character needed} other{{missing} more characters needed}}.",
|
||
"@authPasswordTooShort": {
|
||
"placeholders": {
|
||
"missing": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"authPasswordCommon": "This password is very common and easy to guess. Choose a different one.",
|
||
"authPasswordRule": "At least 10 characters. Not a very common password.",
|
||
"authPasswordRequired": "Enter a password.",
|
||
"authDisplayNameEmpty": "Enter a display name.",
|
||
"authDisplayNameTooLong": "The display name can be at most {max} characters long.",
|
||
"@authDisplayNameTooLong": {
|
||
"placeholders": {
|
||
"max": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"authDisplayNameInvalid": "This display name is not allowed. Use visible characters.",
|
||
"authDisplayNameCounter": "{count}/{max}",
|
||
"@authDisplayNameCounter": {
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
},
|
||
"max": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"authAgeNotConfirmed": "Shuffle can only be used from age 16.",
|
||
"authTermsNotAccepted": "Please agree to the privacy policy and the terms of use.",
|
||
"authFieldEmailLabel": "Email address",
|
||
"authFieldPasswordLabel": "Password",
|
||
"authFieldDisplayNameLabel": "Display name",
|
||
"authPasswordShow": "Show password",
|
||
"authPasswordHide": "Hide password",
|
||
"authCheckboxAgeLabel": "I am at least 16 years old",
|
||
"authCheckboxTermsPrefix": "I have read the",
|
||
"authCheckboxTermsPrivacyLink": "privacy policy",
|
||
"authCheckboxTermsMiddle": "and agree to the",
|
||
"authCheckboxTermsTermsLink": "terms of use",
|
||
"authCheckboxTermsSuffix": "",
|
||
"authBannerTypeError": "Error",
|
||
"authBannerTypeInfo": "Note",
|
||
"authSubmitting": "Please wait …",
|
||
"authRegisterTitle": "Create account",
|
||
"authRegisterSubmit": "Create account",
|
||
"authRegisterHaveAccount": "Already have an account? Sign in",
|
||
"authLoginTitle": "Sign in",
|
||
"authLoginSubmit": "Sign in",
|
||
"authLoginForgotPassword": "Forgot password?",
|
||
"authLoginCreateAccount": "Create account",
|
||
"authCheckEmailTitle": "Check your inbox",
|
||
"authCheckEmailBody": "We sent you an email if the address is not registered yet. Follow the link in it to continue.",
|
||
"authCheckEmailDelayHint": "The email can take a few minutes. Also check your spam folder.",
|
||
"authCheckEmailValidity": "The link is valid for {duration}.",
|
||
"@authCheckEmailValidity": {
|
||
"placeholders": {
|
||
"duration": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"authCheckEmailValidityOneHour": "1 hour",
|
||
"authCheckEmailResend": "Resend email",
|
||
"authCheckEmailResent": "We resent the email, if there is something to send for this address.",
|
||
"authBackToLogin": "Back to sign in",
|
||
"authConfirmTitle": "Confirm email address",
|
||
"authConfirmBody": "One click is enough to confirm your email address.",
|
||
"authConfirmSubmit": "Confirm email address",
|
||
"authConfirmSuccess": "Email confirmed.",
|
||
"authConfirmSuccessMobileWeb": "You can now also sign in in the app.",
|
||
"authConfirmContinue": "Continue",
|
||
"authRecoveryTitle": "Set a new password",
|
||
"authRecoveryBody": "One click is enough to set a new password.",
|
||
"authRecoverySubmit": "Continue to new password",
|
||
"authForgotTitle": "Reset password",
|
||
"authForgotBody": "Enter the email address of your account. We will send you a reset link.",
|
||
"authForgotSubmit": "Send link",
|
||
"authCheckEmailBodyReset": "We sent you an email with a reset link if an account exists for this address.",
|
||
"authCheckEmailDifferentAddress": "Enter a different email address",
|
||
"authFieldNewPasswordLabel": "New password",
|
||
"authResetTitle": "Set a new password",
|
||
"authResetSubmit": "Save password",
|
||
"authResetCancel": "Cancel",
|
||
"authPasswordChanged": "Password changed. Other devices will be signed out; this can take up to an hour.",
|
||
"gameCoverPlaceholderLabel": "No cover for {title}",
|
||
"@gameCoverPlaceholderLabel": {
|
||
"description": "Semantics label of the uniform placeholder cover",
|
||
"placeholders": {"title": {"type": "String"}}
|
||
},
|
||
"gameCoverLabel": "Cover of {title}",
|
||
"@gameCoverLabel": {
|
||
"description": "Semantics label of a game cover image",
|
||
"placeholders": {"title": {"type": "String"}}
|
||
},
|
||
"catalogSearchTitle": "Search games",
|
||
"@catalogSearchTitle": {"description": "Title of the catalog search screen and label of the search field/entry button"},
|
||
"catalogSearchFieldHint": "Title or publisher",
|
||
"@catalogSearchFieldHint": {"description": "Hint text of the search field"},
|
||
"catalogSearchClear": "Clear search",
|
||
"@catalogSearchClear": {"description": "Tooltip/label of the clear button of the search field"},
|
||
"catalogSearchFilterButton": "{count, plural, =0{Filters} other{Filters ({count})}}",
|
||
"@catalogSearchFilterButton": {"description": "Button that opens the filters, with the number of active filters", "placeholders": {"count": {"type": "int"}}},
|
||
"catalogSearchFilterTitle": "Filters",
|
||
"@catalogSearchFilterTitle": {"description": "Title of the filter area"},
|
||
"catalogSearchFilterDone": "Done",
|
||
"@catalogSearchFilterDone": {"description": "Closes the filter sheet"},
|
||
"catalogSearchFilterReset": "Reset filters",
|
||
"@catalogSearchFilterReset": {"description": "Removes all filters"},
|
||
"catalogSearchFilterPlayers": "Number of players",
|
||
"@catalogSearchFilterPlayers": {"description": "Filter label"},
|
||
"catalogSearchFilterAny": "Any",
|
||
"@catalogSearchFilterAny": {"description": "Filter value without restriction"},
|
||
"catalogSearchFilterDuration": "Play time",
|
||
"@catalogSearchFilterDuration": {"description": "Filter label"},
|
||
"catalogSearchFilterDurationValue": "Up to {minutes} min",
|
||
"@catalogSearchFilterDurationValue": {"description": "Filter value: games lasting at most this many minutes", "placeholders": {"minutes": {"type": "int"}}},
|
||
"catalogSearchFilterAge": "Age",
|
||
"@catalogSearchFilterAge": {"description": "Filter label"},
|
||
"catalogSearchFilterAgeValue": "Suitable from age {age}",
|
||
"@catalogSearchFilterAgeValue": {"description": "Filter value: games suitable for players of this age", "placeholders": {"age": {"type": "int"}}},
|
||
"catalogSearchFilterGenres": "Genre",
|
||
"@catalogSearchFilterGenres": {"description": "Filter label"},
|
||
"catalogSearchFilterMechanics": "Mechanic",
|
||
"@catalogSearchFilterMechanics": {"description": "Filter label"},
|
||
"catalogSearchTermsError": "The options could not be loaded.",
|
||
"@catalogSearchTermsError": {"description": "Error in the genre/mechanic filter"},
|
||
"catalogSearchRetry": "Try again",
|
||
"@catalogSearchRetry": {"description": "Retry button"},
|
||
"catalogSearchResultCount": "{count, plural, =0{No games} =1{1 game} other{{count} games}}",
|
||
"@catalogSearchResultCount": {"description": "Number of hits above the list", "placeholders": {"count": {"type": "int", "format": "decimalPattern"}}},
|
||
"catalogSearchAnnouncement": "{count, plural, =0{No games found} =1{1 game found} other{{count} games found}}",
|
||
"@catalogSearchAnnouncement": {"description": "Screen reader announcement after a finished search", "placeholders": {"count": {"type": "int", "format": "decimalPattern"}}},
|
||
"catalogSearchAlsoKnownAs": "also: {title}",
|
||
"@catalogSearchAlsoKnownAs": {"description": "Alternative title that matched", "placeholders": {"title": {"type": "String"}}},
|
||
"catalogSearchPlayersCount": "{count, plural, =1{1 player} other{{count} players}}",
|
||
"@catalogSearchPlayersCount": {"description": "Number of players of a game", "placeholders": {"count": {"type": "int"}}},
|
||
"catalogSearchPlayersRange": "{min}–{max} players",
|
||
"@catalogSearchPlayersRange": {"description": "Player range of a game", "placeholders": {"min": {"type": "int"}, "max": {"type": "int"}}},
|
||
"catalogSearchMinutesSingle": "{minutes} min",
|
||
"@catalogSearchMinutesSingle": {"description": "Play time of a game", "placeholders": {"minutes": {"type": "int"}}},
|
||
"catalogSearchMinutesRange": "{min}–{max} min",
|
||
"@catalogSearchMinutesRange": {"description": "Play time range of a game", "placeholders": {"min": {"type": "int"}, "max": {"type": "int"}}},
|
||
"catalogSearchMinAge": "ages {age}+",
|
||
"@catalogSearchMinAge": {"description": "Minimum age of a game", "placeholders": {"age": {"type": "int"}}},
|
||
"catalogSearchPublishersMore": "{names} +{more}",
|
||
"@catalogSearchPublishersMore": {"description": "Publishers of a game, more than shown", "placeholders": {"names": {"type": "String"}, "more": {"type": "int"}}},
|
||
"catalogSearchLoadMore": "Load more",
|
||
"@catalogSearchLoadMore": {"description": "Button at the end of the list"},
|
||
"catalogSearchLoading": "Loading games",
|
||
"@catalogSearchLoading": {"description": "Spoken label of the loading indicator"},
|
||
"catalogSearchLoadMoreError": "More games could not be loaded.",
|
||
"@catalogSearchLoadMoreError": {"description": "Error when loading the next page"},
|
||
"catalogSearchEmptyForQuery": "No games found for “{query}”.",
|
||
"@catalogSearchEmptyForQuery": {"description": "Empty state with search text", "placeholders": {"query": {"type": "String"}}},
|
||
"catalogSearchEmptyForQueryHint": "Check the spelling or remove filters.",
|
||
"@catalogSearchEmptyForQueryHint": {"description": "Hint in the empty state with search text"},
|
||
"catalogSearchEmptyForFilters": "No games match your filters.",
|
||
"@catalogSearchEmptyForFilters": {"description": "Empty state with filters only"},
|
||
"catalogSearchEmptyCatalog": "The catalog is still empty.",
|
||
"@catalogSearchEmptyCatalog": {"description": "Empty state without search text and filters"},
|
||
"catalogSearchReportGame": "Report a missing game",
|
||
"@catalogSearchReportGame": {"description": "Action in the empty state"},
|
||
"catalogSearchErrorOffline": "No connection. You need internet for the search.",
|
||
"@catalogSearchErrorOffline": {"description": "Error state: offline"},
|
||
"catalogSearchErrorGeneric": "Search is not available right now.",
|
||
"@catalogSearchErrorGeneric": {"description": "Error state: other errors"},
|
||
"catalogSearchErrorInvalid": "This search is not supported. Change the search text or the filters.",
|
||
"@catalogSearchErrorInvalid": {"description": "Error state: the backend rejected the input (no retry offered)"}
|
||
}
|