Merge branch 'tos' into 'develop'

Add ToS acceptance to registration

See merge request soapbox-pub/soapbox-fe!1680
This commit is contained in:
Justin 2022-07-26 18:23:50 +00:00
commit 309c8bee80
55 changed files with 140 additions and 3 deletions

View File

@ -836,6 +836,8 @@
"registration.lead": "With an account on {instance} you\"ll be able to follow people on any server in the fediverse.",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.reason": "Reason for Joining",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -7,8 +7,8 @@ import { fetchInstance } from 'soapbox/actions/instance';
import { startOnboarding } from 'soapbox/actions/onboarding';
import snackbar from 'soapbox/actions/snackbar';
import { createAccount, removeStoredVerification } from 'soapbox/actions/verification';
import { Button, Form, FormGroup, Input } from 'soapbox/components/ui';
import { useAppDispatch, useAppSelector } from 'soapbox/hooks';
import { Button, Form, FormGroup, Input, Text } from 'soapbox/components/ui';
import { useAppDispatch, useAppSelector, useSoapboxConfig } from 'soapbox/hooks';
import { getRedirectUrl } from 'soapbox/utils/redirect';
import PasswordIndicator from './components/password-indicator';
@ -38,6 +38,8 @@ const initialState = {
const Registration = () => {
const dispatch = useAppDispatch();
const intl = useIntl();
const soapboxConfig = useSoapboxConfig();
const { links } = soapboxConfig;
const isLoading = useAppSelector((state) => state.verification.isLoading as boolean);
const siteTitle = useAppSelector((state) => state.instance.title);
@ -126,7 +128,7 @@ const Registration = () => {
<PasswordIndicator password={password} onChange={setHasValidPassword} />
</FormGroup>
<div className='text-center'>
<div className='text-center space-y-2'>
<Button
block
theme='primary'
@ -135,6 +137,33 @@ const Registration = () => {
>
Register
</Button>
{(links.get('termsOfService') && links.get('privacyPolicy')) ? (
<Text theme='muted' size='xs'>
<FormattedMessage
id='registration.acceptance'
defaultMessage="By registering, you agree to the {terms} and {privacy}."
values={{
terms: (
<a href={links.get('termsOfService')} target="_blank" className='text-primary-600 dark:text-primary-400 hover:underline'>
<FormattedMessage
id='registration.tos'
defaultMessage='Terms of Service'
/>
</a>
),
privacy: (
<a href={links.get('privacyPolicy')} target="_blank" className='text-primary-600 dark:text-primary-400 hover:underline'>
<FormattedMessage
id='registration.privacy'
defaultMessage='Privacy Policy'
/>
</a>
),
}}
/>
</Text>
) : null}
</div>
</Form>
</div>

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}ي",
"relative_time.hours": "{number}سا",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number} দিন",
"relative_time.hours": "{number} ঘন্টা",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}ghj",
"relative_time.hours": "{number}o",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}dydd",
"relative_time.hours": "{number}awr",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}t",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}η",
"relative_time.hours": "{number}ω",

View File

@ -835,6 +835,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"registration.validation.minimum_characters": "8 characters",
"registration.validation.capital_letter": "1 capital letter",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}t",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}p",
"relative_time.hours": "{number}t",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}e",
"relative_time.hours": "{number}o",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number} روز",
"relative_time.hours": "{number} ساعت",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number} pv",
"relative_time.hours": "{number} h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number} j",
"relative_time.hours": "{number} h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}nap",
"relative_time.hours": "{number}ó",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}օր",
"relative_time.hours": "{number}ժ",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}დღ",
"relative_time.hours": "{number}სთ",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}күн",
"relative_time.hours": "{number}сағ",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}일 전",
"relative_time.hours": "{number}시간 전",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}u",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "fa {number}d",
"relative_time.hours": "fa {number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}z",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}д",
"relative_time.hours": "{number}ч",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}dní",
"relative_time.hours": "{number}hod",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}tim",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number} วัน",
"relative_time.hours": "{number} ชั่วโมง",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}g",
"relative_time.hours": "{number}s",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}д",
"relative_time.hours": "{number}г",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number}日",
"relative_time.hours": "{number}小時",

View File

@ -829,6 +829,8 @@
"registration.reason_hint": "This will help us review your application",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
"registration.privacy": "Privacy Policy",
"registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
"registration.username_unavailable": "Username is already taken.",
"relative_time.days": "{number} 天",
"relative_time.hours": "{number} 小時",