diff --git a/web/components/profile-about.tsx b/web/components/profile-about.tsx
index eec257c3..34fe9b30 100644
--- a/web/components/profile-about.tsx
+++ b/web/components/profile-about.tsx
@@ -32,6 +32,7 @@ import {ClockIcon} from "@heroicons/react/solid";
import {MAX_INT, MIN_INT} from "common/constants";
import {GiFruitBowl} from "react-icons/gi";
import {FaBriefcase, FaHandsHelping, FaHeart, FaStar} from "react-icons/fa";
+import {useT} from "web/lib/locale";
export function AboutRow(props: {
icon: ReactNode
@@ -74,6 +75,7 @@ export default function ProfileAbout(props: {
isCurrentUser: boolean,
}) {
const {profile, userActivity, isCurrentUser} = props
+ const t = useT()
return (
}
- text={profile.political_beliefs?.map(belief => INVERTED_POLITICAL_CHOICES[belief])}
+ text={profile.political_beliefs?.map(belief => t(`profile.about.political_beliefs.${belief}`, INVERTED_POLITICAL_CHOICES[belief]))}
suffix={profile.political_details}
/>
}
- text={profile.religion?.map(belief => INVERTED_RELIGION_CHOICES[belief])}
+ text={profile.religion?.map(belief => t(`profile.about.religion.${belief}`, INVERTED_RELIGION_CHOICES[belief]))}
suffix={profile.religious_beliefs}
/>
}
- text={profile.interests}
+ text={profile.interests?.map(interest => t(`profile.about.interests.${interest}`, interest))}
/>
}
- text={profile.causes}
+ text={profile.causes?.map(cause => t(`profile.about.causes.${cause}`, cause))}
/>
}
@@ -113,7 +115,7 @@ export default function ProfileAbout(props: {
icon={}
text={profile.ethnicity
?.filter((r) => r !== 'other')
- ?.map((r: any) => convertRace(r))}
+ ?.map((r: any) => t(`profile.about.race.${r}`, convertRace(r)))}
/>
@@ -134,6 +136,7 @@ export default function ProfileAbout(props: {
}
function Seeking(props: { profile: Profile }) {
+ const t = useT()
const {profile} = props
const prefGender = profile.pref_gender
const min = profile.pref_age_min
@@ -143,7 +146,7 @@ function Seeking(props: { profile: Profile }) {
prefGender?.length == 5
? ['people']
: prefGender?.map((gender) => convertGenderPlural(gender as Gender)),
- preText: 'Interested in',
+ preText: t('profile.about.interested_in', 'Interested in'),
asSentence: true,
capitalizeFirstLetterOption: false,
})
@@ -153,14 +156,14 @@ function Seeking(props: { profile: Profile }) {
const ageRangeText =
noMin && noMax
- ? 'of any age'
+ ? t('profile.about.age_any', 'of any age')
: min == max
- ? `exactly ${min} years old`
+ ? t('profile.about.age_exact', 'exactly {min} years old', {min})
: noMax
- ? `older than ${min}`
+ ? t('profile.about.age_older_than', 'older than {min}', {min})
: noMin
- ? `younger than ${max}`
- : `between ${min} - ${max} years old`
+ ? t('profile.about.age_younger_than', 'younger than {max}', {max})
+ : t('profile.about.age_between', 'between {min} - {max} years old', {min, max})
if (!prefGender || prefGender.length < 1) {
return <>>
@@ -174,17 +177,14 @@ function Seeking(props: { profile: Profile }) {
}
function RelationshipType(props: { profile: Profile }) {
+ const t = useT()
const {profile} = props
const relationshipTypes = profile.pref_relation_styles
let seekingGenderText = stringOrStringArrayToText({
text: relationshipTypes?.map((rel) =>
convertRelationshipType(rel as RelationshipType).toLowerCase()
).sort(),
- preText: 'Seeking',
- // postText:
- // relationshipTypes.length == 1 && relationshipTypes[0] == 'mono'
- // ? 'relationship'
- // : 'relationships',
+ preText: t('profile.about.seeking', 'Seeking'),
asSentence: true,
capitalizeFirstLetterOption: false,
})
@@ -207,6 +207,7 @@ function RelationshipType(props: { profile: Profile }) {
function RelationshipStatus(props: { profile: Profile }) {
const {profile} = props
+ const t = useT()
const relationship_status = profile.relationship_status ?? []
if (relationship_status.length === 0) return
const key = relationship_status[0] as keyof typeof RELATIONSHIP_ICONS
@@ -214,12 +215,13 @@ function RelationshipStatus(props: { profile: Profile }) {
return (
INVERTED_RELATIONSHIP_STATUS_CHOICES[v])}
+ text={relationship_status?.map(v => t(`profile.about.relationship_status.${v}`, INVERTED_RELATIONSHIP_STATUS_CHOICES[v]))}
/>
)
}
function Education(props: { profile: Profile }) {
+ const t = useT()
const {profile} = props
const educationLevel = profile.education_level
const university = profile.university
@@ -227,10 +229,10 @@ function Education(props: { profile: Profile }) {
let text = ''
if (educationLevel) {
- text += capitalizeAndRemoveUnderscores(INVERTED_EDUCATION_CHOICES[educationLevel])
+ text += capitalizeAndRemoveUnderscores(t(`profile.about.education.${educationLevel}`, INVERTED_EDUCATION_CHOICES[educationLevel]))
}
if (university) {
- if (educationLevel) text += ' at '
+ if (educationLevel) text += ` ${t('profile.about.at', 'at')} `
text += capitalizeAndRemoveUnderscores(university)
}
if (text.length === 0) {
@@ -245,6 +247,7 @@ function Education(props: { profile: Profile }) {
}
function Occupation(props: { profile: Profile }) {
+ const t = useT()
const {profile} = props
const occupation_title = profile.occupation_title
const company = profile.company
@@ -254,7 +257,7 @@ function Occupation(props: { profile: Profile }) {
}
const occupationText = `${
occupation_title ? capitalizeAndRemoveUnderscores(occupation_title) : ''
- }${occupation_title && company ? ' at ' : ''}${
+ }${occupation_title && company ? ` ${t('profile.about.at', 'at')} ` : ''}${
company ? capitalizeAndRemoveUnderscores(company) : ''
}`
return (
@@ -266,23 +269,25 @@ function Occupation(props: { profile: Profile }) {
}
function Smoker(props: { profile: Profile }) {
+ const t = useT()
const {profile} = props
const isSmoker = profile.is_smoker
if (isSmoker == null) return null
if (isSmoker) {
return (
- } text={'Smokes'}/>
+ } text={t('profile.about.smokes', 'Smokes')}/>
)
}
return (
}
- text={`Doesn't smoke`}
+ text={t('profile.about.doesnt_smoke', "Doesn't smoke")}
/>
)
}
function Drinks(props: { profile: Profile }) {
+ const t = useT()
const {profile} = props
const drinksPerMonth = profile.drinks_per_month
if (drinksPerMonth == null) return null
@@ -290,34 +295,37 @@ function Drinks(props: { profile: Profile }) {
return (
}
- text={`Doesn't drink`}
+ text={t('profile.about.doesnt_drink', "Doesn't drink")}
/>
)
}
return (
}
- text={`${drinksPerMonth} ${
- drinksPerMonth == 1 ? 'drink' : 'drinks'
- } per month`}
+ text={
+ drinksPerMonth === 1
+ ? t('profile.about.drinks_one', '1 drink per month')
+ : t('profile.about.drinks_many', '{count} drinks per month', {count: drinksPerMonth})
+ }
/>
)
}
function WantsKids(props: { profile: Profile }) {
+ const t = useT()
const {profile} = props
const wantsKidsStrength = profile.wants_kids_strength
if (wantsKidsStrength == null || wantsKidsStrength < 0) return null
const wantsKidsText =
wantsKidsStrength == 0
- ? 'Does not want children'
+ ? t('profile.about.wants_kids_0', "Does not want children")
: wantsKidsStrength == 1
- ? 'Prefers not to have children'
+ ? t('profile.about.wants_kids_1', "Prefers not to have children")
: wantsKidsStrength == 2
- ? 'Neutral or open to having children'
+ ? t('profile.about.wants_kids_2', "Neutral or open to having children")
: wantsKidsStrength == 3
- ? 'Leaning towards wanting children'
- : 'Wants children'
+ ? t('profile.about.wants_kids_3', "Leaning towards wanting children")
+ : t('profile.about.wants_kids_4', "Wants children")
return (
}
- text={'Last online ' + fromNow(lastOnlineTime, true)}
+ text={t('profile.about.last_online', 'Last online {time}', {time: fromNow(lastOnlineTime, true)})}
/>
)
}
function HasKids(props: { profile: Profile }) {
+ const t = useT()
const {profile} = props
const hasKidsText =
profile.has_kids && profile.has_kids > 0
- ? `Has ${profile.has_kids} ${profile.has_kids > 1 ? 'kids' : 'kid'}`
+ ? profile.has_kids > 1
+ ? t('profile.about.has_kids_many', 'Has {count} kids', {count: profile.has_kids})
+ : t('profile.about.has_kids_one', 'Has {count} kid', {count: profile.has_kids})
: null
return } text={hasKidsText}/>
}
diff --git a/web/messages/fr.json b/web/messages/fr.json
index 7fddf42a..a0da5c19 100644
--- a/web/messages/fr.json
+++ b/web/messages/fr.json
@@ -503,5 +503,26 @@
"answers.opinion.edit": "Modifier",
"answers.free.add_free_response": "Ajouter une réponse libre",
"answers.free.choose_question": "Choisissez une question à laquelle répondre",
- "answers.free.see_others": "Voir {count} autres réponses"
+ "answers.free.see_others": "Voir {count} autres réponses",
+ "profile.about.interested_in": "Intéressé·e par",
+ "profile.about.age_any": "de tout âge",
+ "profile.about.age_exact": "exactement {min} ans",
+ "profile.about.age_older_than": "plus de {min} ans",
+ "profile.about.age_younger_than": "moins de {max} ans",
+ "profile.about.age_between": "entre {min} et {max} ans",
+ "profile.about.seeking": "Recherche",
+ "profile.about.at": "à",
+ "profile.about.smokes": "Fume",
+ "profile.about.doesnt_smoke": "Ne fume pas",
+ "profile.about.doesnt_drink": "Ne boit pas",
+ "profile.about.drinks_one": "1 boisson par mois",
+ "profile.about.drinks_many": "{count} boissons par mois",
+ "profile.about.wants_kids_0": "Ne veut pas d'enfants",
+ "profile.about.wants_kids_1": "Préfère ne pas avoir d'enfants",
+ "profile.about.wants_kids_2": "Neutre ou ouvert·e à avoir des enfants",
+ "profile.about.wants_kids_3": "Tend à vouloir des enfants",
+ "profile.about.wants_kids_4": "Veut des enfants",
+ "profile.about.last_online": "Dernière connexion {time}",
+ "profile.about.has_kids_one": "A {count} enfant",
+ "profile.about.has_kids_many": "A {count} enfants"
}
\ No newline at end of file