nicolium: i18n cleanup

Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
nicole mikołajczyk
2026-02-24 11:25:41 +01:00
parent 15444f00e1
commit f847e93293
2 changed files with 154 additions and 123 deletions

View File

@ -14,37 +14,37 @@ import { useLists } from '@/queries/accounts/use-lists';
import type { Circle, Features } from 'pl-api';
const messages = defineMessages({
public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },
public_long: { id: 'privacy.public.long', defaultMessage: 'Post to public timelines' },
unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Quiet public' },
unlisted_long: { id: 'privacy.unlisted.long', defaultMessage: 'Not visible in public timelines' },
private_short: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },
private_long: { id: 'privacy.private.long', defaultMessage: 'Post to followers only' },
conversation_short: { id: 'privacy.conversation.short', defaultMessage: 'Conversation' },
conversation_long: {
publicShort: { id: 'privacy.public.short', defaultMessage: 'Public' },
publicLong: { id: 'privacy.public.long', defaultMessage: 'Post to public timelines' },
unlistedShort: { id: 'privacy.unlisted.short', defaultMessage: 'Quiet public' },
unlistedLong: { id: 'privacy.unlisted.long', defaultMessage: 'Not visible in public timelines' },
privateShort: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },
privateLong: { id: 'privacy.private.long', defaultMessage: 'Post to followers only' },
conversationShort: { id: 'privacy.conversation.short', defaultMessage: 'Conversation' },
conversationLong: {
id: 'privacy.conversation.long',
defaultMessage: 'Post to recipients of the parent post',
},
mutuals_only_short: { id: 'privacy.mutuals_only.short', defaultMessage: 'Mutuals-only' },
mutuals_only_long: {
mutualsOnlyShort: { id: 'privacy.mutuals_only.short', defaultMessage: 'Mutuals-only' },
mutualsOnlyLong: {
id: 'privacy.mutuals_only.long',
defaultMessage: 'Post to mutually followed users only',
},
direct_short: { id: 'privacy.direct.short', defaultMessage: 'Private mention' },
direct_long: { id: 'privacy.direct.long', defaultMessage: 'Visible to mentioned users only' },
local_short: { id: 'privacy.local.short', defaultMessage: 'Local-only' },
local_long: { id: 'privacy.local.long', defaultMessage: 'Only visible on your instance' },
list_short: { id: 'privacy.list.short', defaultMessage: 'List only' },
list_long: { id: 'privacy.list.long', defaultMessage: 'Visible to members of a list' },
circle_short: { id: 'privacy.circle.short', defaultMessage: 'Circle only' },
circle_long: { id: 'privacy.circle.long', defaultMessage: 'Visible to members of a circle' },
subscribers_short: { id: 'privacy.subscribers.short', defaultMessage: 'Subscribers-only' },
subscribers_long: {
directShort: { id: 'privacy.direct.short', defaultMessage: 'Private mention' },
directLong: { id: 'privacy.direct.long', defaultMessage: 'Visible to mentioned users only' },
localShort: { id: 'privacy.local.short', defaultMessage: 'Local-only' },
localLong: { id: 'privacy.local.long', defaultMessage: 'Only visible on your instance' },
listShort: { id: 'privacy.list.short', defaultMessage: 'List only' },
listLong: { id: 'privacy.list.long', defaultMessage: 'Visible to members of a list' },
circleShort: { id: 'privacy.circle.short', defaultMessage: 'Circle only' },
circleLong: { id: 'privacy.circle.long', defaultMessage: 'Visible to members of a circle' },
subscribersShort: { id: 'privacy.subscribers.short', defaultMessage: 'Subscribers-only' },
subscribersLong: {
id: 'privacy.subscribers.long',
defaultMessage: 'Post to users subscribing you only',
},
change_privacy: { id: 'privacy.change', defaultMessage: 'Adjust post privacy' },
changePrivacy: { id: 'privacy.change', defaultMessage: 'Adjust post privacy' },
local: { id: 'privacy.local', defaultMessage: '{privacy} (local-only)' },
});
@ -67,57 +67,57 @@ const getItems = (
{
icon: require('@phosphor-icons/core/regular/globe.svg'),
value: 'public',
text: intl.formatMessage(messages.public_short),
meta: intl.formatMessage(messages.public_long),
text: intl.formatMessage(messages.publicShort),
meta: intl.formatMessage(messages.publicLong),
},
{
icon: require('@phosphor-icons/core/regular/moon.svg'),
value: 'unlisted',
text: intl.formatMessage(messages.unlisted_short),
meta: intl.formatMessage(messages.unlisted_long),
text: intl.formatMessage(messages.unlistedShort),
meta: intl.formatMessage(messages.unlistedLong),
},
{
icon: require('@phosphor-icons/core/regular/lock.svg'),
value: 'private',
text: intl.formatMessage(messages.private_short),
meta: intl.formatMessage(messages.private_long),
text: intl.formatMessage(messages.privateShort),
meta: intl.formatMessage(messages.privateLong),
},
isReply && features.createStatusConversationScope
? {
icon: require('@phosphor-icons/core/regular/chats-circle.svg'),
value: 'conversation',
text: intl.formatMessage(messages.conversation_short),
meta: intl.formatMessage(messages.conversation_long),
text: intl.formatMessage(messages.conversationShort),
meta: intl.formatMessage(messages.conversationLong),
}
: undefined,
features.createStatusMutualsOnlyScope
? {
icon: require('@phosphor-icons/core/regular/users-three.svg'),
value: 'mutuals_only',
text: intl.formatMessage(messages.mutuals_only_short),
meta: intl.formatMessage(messages.mutuals_only_long),
text: intl.formatMessage(messages.mutualsOnlyShort),
meta: intl.formatMessage(messages.mutualsOnlyLong),
}
: undefined,
features.createStatusSubscribersScope
? {
icon: require('@phosphor-icons/core/regular/coins.svg'),
value: 'subscribers',
text: intl.formatMessage(messages.subscribers_short),
meta: intl.formatMessage(messages.subscribers_long),
text: intl.formatMessage(messages.subscribersShort),
meta: intl.formatMessage(messages.subscribersLong),
}
: undefined,
{
icon: require('@phosphor-icons/core/regular/at.svg'),
value: 'direct',
text: intl.formatMessage(messages.direct_short),
meta: intl.formatMessage(messages.direct_long),
text: intl.formatMessage(messages.directShort),
meta: intl.formatMessage(messages.directLong),
},
features.createStatusLocalScope
? {
icon: require('@phosphor-icons/core/regular/planet.svg'),
value: 'local',
text: intl.formatMessage(messages.local_short),
meta: intl.formatMessage(messages.local_long),
text: intl.formatMessage(messages.localShort),
meta: intl.formatMessage(messages.localLong),
}
: undefined,
features.createStatusListScope && Object.keys(lists).length
@ -129,8 +129,8 @@ const getItems = (
value: `list:${list.id}`,
text: list.title,
})),
text: intl.formatMessage(messages.list_short),
meta: intl.formatMessage(messages.list_long),
text: intl.formatMessage(messages.listShort),
meta: intl.formatMessage(messages.listLong),
} as Option)
: undefined,
features.circles && Object.keys(circles).length
@ -142,8 +142,8 @@ const getItems = (
value: `circle:${circle.id}`,
text: circle.title,
})),
text: intl.formatMessage(messages.circle_short),
meta: intl.formatMessage(messages.circle_long),
text: intl.formatMessage(messages.circleShort),
meta: intl.formatMessage(messages.circleLong),
} as Option)
: undefined,
].filter((option): option is Option => !!option);
@ -187,8 +187,8 @@ const PrivacyDropdown: React.FC<IPrivacyDropdown> = ({ composeId, compact }) =>
if (features.localOnlyStatuses)
items.push({
icon: require('@phosphor-icons/core/regular/planet.svg'),
text: intl.formatMessage(messages.local_short),
meta: intl.formatMessage(messages.local_long),
text: intl.formatMessage(messages.localShort),
meta: intl.formatMessage(messages.localLong),
type: 'toggle',
checked: compose.localOnly,
onChange: () => dispatch(changeComposeFederated(composeId)),
@ -220,7 +220,7 @@ const PrivacyDropdown: React.FC<IPrivacyDropdown> = ({ composeId, compact }) =>
return (
<DropdownMenu items={items} width='16rem'>
<button title={compact ? text : intl.formatMessage(messages.change_privacy)}>
<button title={compact ? text : intl.formatMessage(messages.changePrivacy)}>
{valueOption?.icon && <Icon src={valueOption.icon} aria-hidden />}
{compact ? undefined : text}
<Icon src={require('@phosphor-icons/core/regular/caret-down.svg')} aria-hidden />

View File

@ -33,48 +33,8 @@ interface IFilterField {
}
const messages = defineMessages({
subheading_add_new: { id: 'column.filters.subheading_add_new', defaultMessage: 'Add new filter' },
title: { id: 'column.filters.title', defaultMessage: 'Title' },
subheadingAddNew: { id: 'column.filters.subheading_add_new', defaultMessage: 'Add new filter' },
keyword: { id: 'column.filters.keyword', defaultMessage: 'Keyword or phrase' },
keywords: { id: 'column.filters.keywords', defaultMessage: 'Keywords or phrases' },
expires: { id: 'column.filters.expires', defaultMessage: 'Expire after' },
home_timeline: { id: 'column.filters.home_timeline', defaultMessage: 'Home timeline' },
public_timeline: { id: 'column.filters.public_timeline', defaultMessage: 'Public timeline' },
notifications: { id: 'column.filters.notifications', defaultMessage: 'Notifications' },
conversations: { id: 'column.filters.conversations', defaultMessage: 'Conversations' },
accounts: { id: 'column.filters.accounts', defaultMessage: 'Accounts' },
drop_header: { id: 'column.filters.drop_header', defaultMessage: 'Drop instead of hide' },
drop_hint: {
id: 'column.filters.drop_hint',
defaultMessage: 'Filtered posts will disappear irreversibly, even if filter is later removed',
},
hide_header: { id: 'column.filters.hide_header', defaultMessage: 'Hide completely' },
hide_hint: {
id: 'column.filters.hide_hint',
defaultMessage: 'Completely hide the filtered content, instead of showing a warning',
},
filter_action_header: {
id: 'column.filters.filter_action_header',
defaultMessage: 'Filter action',
},
filter_action_hint: {
id: 'column.filters.filter_action_hint',
defaultMessage: 'Choose which action to perform when a post matches the filter',
},
filter_action_warn: {
id: 'column.filters.filter_action_warn',
defaultMessage: 'Hide with a warning',
},
filter_action_blur: {
id: 'column.filters.filter_action_blur',
defaultMessage: 'Hide media with a warning',
},
filter_action_hide: {
id: 'column.filters.filter_action_hide',
defaultMessage: 'Hide completely',
},
add_new: { id: 'column.filters.add_new', defaultMessage: 'Add new filter' },
edit: { id: 'column.filters.edit', defaultMessage: 'Edit filter' },
createError: { id: 'column.filters.create.error', defaultMessage: 'Error adding filter' },
editError: { id: 'column.filters.edit.error', defaultMessage: 'Error editing filter' },
createSuccess: {
@ -82,13 +42,13 @@ const messages = defineMessages({
defaultMessage: 'Filter added successfully',
},
editSuccess: { id: 'column.filters.edit.success', defaultMessage: 'Filter edited successfully' },
expiration_never: { id: 'column.filters.expiration.never', defaultMessage: 'Never' },
expiration_1800: { id: 'column.filters.expiration.1800', defaultMessage: '30 minutes' },
expiration_3600: { id: 'column.filters.expiration.3600', defaultMessage: '1 hour' },
expiration_21600: { id: 'column.filters.expiration.21600', defaultMessage: '6 hours' },
expiration_43200: { id: 'column.filters.expiration.43200', defaultMessage: '12 hours' },
expiration_86400: { id: 'column.filters.expiration.86400', defaultMessage: '1 day' },
expiration_604800: { id: 'column.filters.expiration.604800', defaultMessage: '1 week' },
expirationNever: { id: 'column.filters.expiration.never', defaultMessage: 'Never' },
expiration1800: { id: 'column.filters.expiration.1800', defaultMessage: '30 minutes' },
expiration3600: { id: 'column.filters.expiration.3600', defaultMessage: '1 hour' },
expiration21600: { id: 'column.filters.expiration.21600', defaultMessage: '6 hours' },
expiration43200: { id: 'column.filters.expiration.43200', defaultMessage: '12 hours' },
expiration86400: { id: 'column.filters.expiration.86400', defaultMessage: '1 day' },
expiration604800: { id: 'column.filters.expiration.604800', defaultMessage: '1 week' },
});
const FilterField: StreamfieldComponent<IFilterField> = ({ value, onChange }) => {
@ -150,13 +110,13 @@ const EditFilterPage: React.FC = () => {
const expirations = useMemo(
() => ({
'': intl.formatMessage(messages.expiration_never),
1800: intl.formatMessage(messages.expiration_1800),
3600: intl.formatMessage(messages.expiration_3600),
21600: intl.formatMessage(messages.expiration_21600),
43200: intl.formatMessage(messages.expiration_43200),
86400: intl.formatMessage(messages.expiration_86400),
604800: intl.formatMessage(messages.expiration_604800),
'': intl.formatMessage(messages.expirationNever),
1800: intl.formatMessage(messages.expiration1800),
3600: intl.formatMessage(messages.expiration3600),
21600: intl.formatMessage(messages.expiration21600),
43200: intl.formatMessage(messages.expiration43200),
86400: intl.formatMessage(messages.expiration86400),
604800: intl.formatMessage(messages.expiration604800),
}),
[],
);
@ -242,7 +202,7 @@ const EditFilterPage: React.FC = () => {
const keywordsField = (
<Streamfield
label={intl.formatMessage(messages.keywords)}
label={<FormattedMessage id='column.filters.keywords' defaultMessage='Keywords or phrases' />}
component={FilterField}
values={keywords}
onChange={handleChangeKeyword}
@ -254,13 +214,12 @@ const EditFilterPage: React.FC = () => {
);
return (
<Column
className='filter-settings-panel'
label={intl.formatMessage(messages.subheading_add_new)}
>
<Column className='filter-settings-panel' label={intl.formatMessage(messages.subheadingAddNew)}>
<Form onSubmit={handleAddNew}>
{features.filtersV2 ? (
<FormGroup labelText={intl.formatMessage(messages.title)}>
<FormGroup
labelText={<FormattedMessage id='column.filters.title' defaultMessage='Title' />}
>
<Input
required
type='text'
@ -275,7 +234,9 @@ const EditFilterPage: React.FC = () => {
keywordsField
)}
<FormGroup labelText={intl.formatMessage(messages.expires)}>
<FormGroup
labelText={<FormattedMessage id='column.filters.expires' defaultMessage='Expire after' />}
>
<SelectDropdown items={expirations} defaultValue='' onChange={handleSelectChange} />
</FormGroup>
@ -292,7 +253,11 @@ const EditFilterPage: React.FC = () => {
</Stack>
<List>
<ListItem label={intl.formatMessage(messages.home_timeline)}>
<ListItem
label={
<FormattedMessage id='column.filters.home_timeline' defaultMessage='Home timeline' />
}
>
<Toggle
checked={homeTimeline}
onChange={({ target }) => {
@ -300,7 +265,14 @@ const EditFilterPage: React.FC = () => {
}}
/>
</ListItem>
<ListItem label={intl.formatMessage(messages.public_timeline)}>
<ListItem
label={
<FormattedMessage
id='column.filters.public_timeline'
defaultMessage='Public timeline'
/>
}
>
<Toggle
checked={publicTimeline}
onChange={({ target }) => {
@ -308,7 +280,11 @@ const EditFilterPage: React.FC = () => {
}}
/>
</ListItem>
<ListItem label={intl.formatMessage(messages.notifications)}>
<ListItem
label={
<FormattedMessage id='column.filters.notifications' defaultMessage='Notifications' />
}
>
<Toggle
checked={notifications}
onChange={({ target }) => {
@ -316,7 +292,11 @@ const EditFilterPage: React.FC = () => {
}}
/>
</ListItem>
<ListItem label={intl.formatMessage(messages.conversations)}>
<ListItem
label={
<FormattedMessage id='column.filters.conversations' defaultMessage='Conversations' />
}
>
<Toggle
checked={conversations}
onChange={({ target }) => {
@ -325,7 +305,9 @@ const EditFilterPage: React.FC = () => {
/>
</ListItem>
{features.filtersV2 && (
<ListItem label={intl.formatMessage(messages.accounts)}>
<ListItem
label={<FormattedMessage id='column.filters.accounts' defaultMessage='Accounts' />}
>
<Toggle
checked={accounts}
onChange={({ target }) => {
@ -339,8 +321,18 @@ const EditFilterPage: React.FC = () => {
<List>
{features.filtersV2BlurAction ? (
<ListItem
label={intl.formatMessage(messages.filter_action_header)}
hint={intl.formatMessage(messages.filter_action_hint)}
label={
<FormattedMessage
id='column.filters.filter_action_header'
defaultMessage='Filter action'
/>
}
hint={
<FormattedMessage
id='column.filters.filter_action_hint'
defaultMessage='Choose which action to perform when a post matches the filter'
/>
}
>
<Select
value={filterAction}
@ -348,19 +340,54 @@ const EditFilterPage: React.FC = () => {
setFilterAction(target.value as Filter['filter_action']);
}}
>
<option value='warn'>{intl.formatMessage(messages.filter_action_warn)}</option>
<option value='hide'>{intl.formatMessage(messages.filter_action_hide)}</option>
<option value='blur'>{intl.formatMessage(messages.filter_action_blur)}</option>
<option value='warn'>
<FormattedMessage
id='column.filters.filter_action_warn'
defaultMessage='Hide with a warning'
/>
</option>
<option value='hide'>
<FormattedMessage
id='column.filters.filter_action_hide'
defaultMessage='Hide completely'
/>
</option>
<option value='blur'>
<FormattedMessage
id='column.filters.filter_action_blur'
defaultMessage='Hide media with a warning'
/>
</option>
</Select>
</ListItem>
) : (
<ListItem
label={intl.formatMessage(
features.filtersV2 ? messages.hide_header : messages.drop_header,
)}
hint={intl.formatMessage(
features.filtersV2 ? messages.hide_hint : messages.drop_hint,
)}
label={
features.filtersV2 ? (
<FormattedMessage
id='column.filters.hide_header'
defaultMessage='Hide completely'
/>
) : (
<FormattedMessage
id='column.filters.drop_header'
defaultMessage='Drop instead of hide'
/>
)
}
hint={
features.filtersV2 ? (
<FormattedMessage
id='column.filters.hide_hint'
defaultMessage='Completely hide the filtered content, instead of showing a warning'
/>
) : (
<FormattedMessage
id='column.filters.drop_hint'
defaultMessage='Filtered posts will disappear irreversibly, even if filter is later removed'
/>
)
}
>
<Toggle
checked={filterAction === 'hide'}
@ -380,7 +407,11 @@ const EditFilterPage: React.FC = () => {
theme='primary'
disabled={isFetchingFilter || isUpdating || isCreating}
>
{intl.formatMessage(filterId !== 'new' ? messages.edit : messages.add_new)}
{filterId !== 'new' ? (
<FormattedMessage id='column.filters.edit' defaultMessage='Edit filter' />
) : (
<FormattedMessage id='column.filters.add_new' defaultMessage='Add new filter' />
)}
</Button>
</FormActions>
</Form>