Merge branch 'upgrade-react-intl' into 'main'

Upgrade react-intl, remove translationRunner, fix `yarn i18n`

Closes #1553

See merge request soapbox-pub/soapbox!2799
This commit is contained in:
Alex Gleason
2023-10-11 20:27:32 +00:00
44 changed files with 305 additions and 962 deletions

View File

@ -53,9 +53,9 @@ const messages = defineMessages({
showReblogs: { id: 'account.show_reblogs', defaultMessage: 'Show reposts from @{name}' },
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' },
mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },
blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocks' },
domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Domain blocks' },
mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Mutes' },
endorse: { id: 'account.endorse', defaultMessage: 'Feature on profile' },
unendorse: { id: 'account.unendorse', defaultMessage: 'Don\'t feature on profile' },
removeFromFollowers: { id: 'account.remove_from_followers', defaultMessage: 'Remove this follower' },

View File

@ -8,7 +8,7 @@ import { useFeatures } from 'soapbox/hooks';
const messages = defineMessages({
username: {
id: 'login.fields.username_label',
defaultMessage: 'E-mail or username',
defaultMessage: 'Email or username',
},
email: {
id: 'login.fields.email_label',

View File

@ -9,7 +9,7 @@ import { useAppDispatch, useFeatures } from 'soapbox/hooks';
import toast from 'soapbox/toast';
const messages = defineMessages({
nicknameOrEmail: { id: 'password_reset.fields.username_placeholder', defaultMessage: 'E-mail or username' },
nicknameOrEmail: { id: 'password_reset.fields.username_placeholder', defaultMessage: 'Email or username' },
email: { id: 'password_reset.fields.email_placeholder', defaultMessage: 'E-mail address' },
confirmation: { id: 'password_reset.confirmation', defaultMessage: 'Check your email for confirmation.' },
});

View File

@ -17,7 +17,7 @@ const RegistrationPage: React.FC = () => {
<Text theme='muted' align='center'>
<FormattedMessage
id='registration.closed_message'
defaultMessage='{instance} is not accepting new members.'
defaultMessage='{instance} is not accepting new members'
values={{ instance: instance.title }}
/>
</Text>

View File

@ -10,7 +10,7 @@ import ChatList from '../../chat-list';
import ChatSearchInput from '../../chat-search-input';
const messages = defineMessages({
title: { id: 'column.chats', defaultMessage: 'Messages' },
title: { id: 'column.chats', defaultMessage: 'Chats' },
});
const ChatPageSidebar = () => {

View File

@ -4,9 +4,9 @@ import { defineMessages, useIntl } from 'react-intl';
import { Button, Stack, Text } from 'soapbox/components/ui';
const messages = defineMessages({
title: { id: 'chat_search.empty_results_blankslate.title', defaultMessage: 'No messages yet' },
body: { id: 'chat_search.empty_results_blankslate.body', defaultMessage: 'Search for someone to chat with.' },
action: { id: 'chat_search.empty_results_blankslate.action', defaultMessage: 'Message someone' },
title: { id: 'chat_pane.blankslate.title', defaultMessage: 'No messages yet' },
body: { id: 'chat_pane.blankslate.body', defaultMessage: 'Search for someone to chat with.' },
action: { id: 'chat_pane.blankslate.action', defaultMessage: 'Message someone' },
});
interface IBlankslate {

View File

@ -4,7 +4,7 @@ import { defineMessages, useIntl } from 'react-intl';
import { Icon, Input } from 'soapbox/components/ui';
const messages = defineMessages({
searchPlaceholder: { id: 'chats.search_placeholder', defaultMessage: 'Search inbox' },
searchPlaceholder: { id: 'chats.search_placeholder', defaultMessage: 'Start a chat with…' },
});
interface IChatSearchInput {

View File

@ -13,7 +13,7 @@ import type { AutoSuggestion } from 'soapbox/components/autosuggest-input';
const messages = defineMessages({
option_placeholder: { id: 'compose_form.poll.option_placeholder', defaultMessage: 'Answer #{number}' },
add_option: { id: 'compose_form.poll.add_option', defaultMessage: 'Add an answer' },
pollDuration: { id: 'compose_form.poll.duration', defaultMessage: 'Duration' },
pollDuration: { id: 'compose_form.poll.duration', defaultMessage: 'Poll duration' },
removePoll: { id: 'compose_form.poll.remove', defaultMessage: 'Remove poll' },
switchToMultiple: { id: 'compose_form.poll.switch_to_multiple', defaultMessage: 'Change poll to allow multiple answers' },
switchToSingle: { id: 'compose_form.poll.switch_to_single', defaultMessage: 'Change poll to allow for a single answer' },
@ -95,7 +95,7 @@ const Option: React.FC<IOption> = ({
{index > 1 && (
<div>
<Button theme='danger' size='sm' onClick={handleOptionRemove}>
<FormattedMessage id='compose_form.poll.remove_option' defaultMessage='Delete' />
<FormattedMessage id='compose_form.poll.remove_option' defaultMessage='Remove this answer' />
</Button>
</div>
)}

View File

@ -49,7 +49,7 @@ const messages = defineMessages({
header: { id: 'edit_profile.header', defaultMessage: 'Edit Profile' },
metaFieldLabel: { id: 'edit_profile.fields.meta_fields.label_placeholder', defaultMessage: 'Label' },
metaFieldContent: { id: 'edit_profile.fields.meta_fields.content_placeholder', defaultMessage: 'Content' },
success: { id: 'edit_profile.success', defaultMessage: 'Profile saved!' },
success: { id: 'edit_profile.success', defaultMessage: 'Your profile has been successfully saved!' },
error: { id: 'edit_profile.error', defaultMessage: 'Profile update failed' },
bioPlaceholder: { id: 'edit_profile.fields.bio_placeholder', defaultMessage: 'Tell us about yourself.' },
displayNamePlaceholder: { id: 'edit_profile.fields.display_name_placeholder', defaultMessage: 'Name' },

View File

@ -18,7 +18,7 @@ export const messages = defineMessages({
emoji_pick: { id: 'emoji_button.pick', defaultMessage: 'Pick an emoji…' },
emoji_oh_no: { id: 'emoji_button.oh_no', defaultMessage: 'Oh no!' },
emoji_search: { id: 'emoji_button.search', defaultMessage: 'Search…' },
emoji_not_found: { id: 'emoji_button.not_found', defaultMessage: 'No emoji\'s found.' },
emoji_not_found: { id: 'emoji_button.not_found', defaultMessage: 'No emojis found.' },
emoji_add_custom: { id: 'emoji_button.add_custom', defaultMessage: 'Add custom emoji' },
custom: { id: 'emoji_button.custom', defaultMessage: 'Custom' },
recent: { id: 'emoji_button.recent', defaultMessage: 'Frequently used' },

View File

@ -17,7 +17,7 @@ const messages = defineMessages({
conversations: { id: 'column.filters.conversations', defaultMessage: 'Conversations' },
accounts: { id: 'column.filters.accounts', defaultMessage: 'Accounts' },
delete_error: { id: 'column.filters.delete_error', defaultMessage: 'Error deleting filter' },
edit: { id: 'column.filters.edit', defaultMessage: 'Edit' },
edit: { id: 'column.filters.edit', defaultMessage: 'Edit Filter' },
delete: { id: 'column.filters.delete', defaultMessage: 'Delete' },
});

View File

@ -23,7 +23,7 @@ import type { Group, GroupMember } from 'soapbox/types/entities';
const messages = defineMessages({
adminLimitTitle: { id: 'group.member.admin.limit.title', defaultMessage: 'Admin limit reached' },
adminLimitSummary: { id: 'group.member.admin.limit.summary', defaultMessage: 'You can assign up to {count, plural, one {admin} other {admins}} for the group at this time.' },
blockConfirm: { id: 'confirmations.block_from_group.confirm', defaultMessage: 'Ban' },
blockConfirm: { id: 'confirmations.block_from_group.confirm', defaultMessage: 'Ban User' },
blockFromGroupHeading: { id: 'confirmations.block_from_group.heading', defaultMessage: 'Ban From Group' },
blockFromGroupMessage: { id: 'confirmations.block_from_group.message', defaultMessage: 'Are you sure you want to ban @{name} from the group?' },
blocked: { id: 'group.group_mod_block.success', defaultMessage: '@{name} is banned' },

View File

@ -14,7 +14,7 @@ import type { Account, Group } from 'soapbox/types/entities';
const messages = defineMessages({
confirmationConfirm: { id: 'confirmations.leave_group.confirm', defaultMessage: 'Leave' },
confirmationHeading: { id: 'confirmations.leave_group.heading', defaultMessage: 'Leave Group' },
confirmationHeading: { id: 'confirmations.leave_group.heading', defaultMessage: 'Leave group' },
confirmationMessage: { id: 'confirmations.leave_group.message', defaultMessage: 'You are about to leave the group. Do you want to continue?' },
muteConfirm: { id: 'confirmations.mute_group.confirm', defaultMessage: 'Mute' },
muteHeading: { id: 'confirmations.mute_group.heading', defaultMessage: 'Mute Group' },

View File

@ -13,7 +13,7 @@ import LayoutButtons, { GroupLayout } from './components/discover/layout-buttons
import type { Group } from 'soapbox/schemas';
const messages = defineMessages({
label: { id: 'groups.popular.label', defaultMessage: 'Popular Groups' },
label: { id: 'groups.popular.label', defaultMessage: 'Suggested Groups' },
});
const GridList: Components['List'] = React.forwardRef((props, ref) => {

View File

@ -18,7 +18,7 @@ import type { List as ListEntity } from 'soapbox/types/entities';
const messages = defineMessages({
close: { id: 'lightbox.close', defaultMessage: 'Close' },
subheading: { id: 'lists.subheading', defaultMessage: 'Your lists' },
add: { id: 'lists.new.create', defaultMessage: 'Add List' },
add: { id: 'lists.new.create', defaultMessage: 'Add list' },
});
// hack

View File

@ -148,7 +148,7 @@ const buildMessage = (
others: totalCount && totalCount > 0 ? (
<FormattedMessage
id='notification.others'
defaultMessage=' + {count, plural, one {# other} other {# others}}'
defaultMessage='+ {count, plural, one {# other} other {# others}}'
values={{ count: totalCount - 1 }}
/>
) : '',

View File

@ -134,7 +134,7 @@ const Preferences = () => {
<ThemeToggle />
</ListItem>
<ListItem label={<FormattedMessage id='preferences.fields.language_label' defaultMessage='Language' />}>
<ListItem label={<FormattedMessage id='preferences.fields.language_label' defaultMessage='Display Language' />}>
<SelectDropdown
className='max-w-[200px]'
items={languages}

View File

@ -68,7 +68,7 @@ const CommunityTimeline = () => {
>
<FormattedMessage
id='fediverse_tab.explanation_box.explanation'
defaultMessage='{site_title} is part of the Fediverse, a social network made up of thousands of independent social media sites (aka "servers"). The posts you see here are from 3rd-party servers. You have the freedom to engage with them, or to block any server you don&apos;t like. Pay attention to the full username after the second @ symbol to know which server a post is from. To see only {site_title} posts, visit {local}.'
defaultMessage={'{site_title} is part of the Fediverse, a social network made up of thousands of independent social media sites (aka "servers"). The posts you see here are from 3rd-party servers. You have the freedom to engage with them, or to block any server you don\'t like. Pay attention to the full username after the second @ symbol to know which server a post is from. To see only {site_title} posts, visit {local}.'}
values={{
site_title: instance.title,
local: (

View File

@ -25,7 +25,7 @@ const messages = defineMessages({
mfaDisabled: { id: 'mfa.disabled', defaultMessage: 'Disabled' },
mfaEnabled: { id: 'mfa.enabled', defaultMessage: 'Enabled' },
mutes: { id: 'settings.mutes', defaultMessage: 'Mutes' },
other: { id: 'settings.other', defaultMessage: 'Other options' },
other: { id: 'settings.other', defaultMessage: 'Other Options' },
preferences: { id: 'settings.preferences', defaultMessage: 'Preferences' },
privacy: { id: 'settings.privacy', defaultMessage: 'Privacy' },
profile: { id: 'settings.profile', defaultMessage: 'Profile' },

View File

@ -10,7 +10,7 @@ import { Avatar, HStack, Icon } from 'soapbox/components/ui';
import { useAppDispatch } from 'soapbox/hooks';
const messages = defineMessages({
publish: { id: 'compose_form.publish', defaultMessage: 'Publish' },
publish: { id: 'compose_form.publish', defaultMessage: 'Post' },
});
/** FloatingActionButton (aka FAB), a composer button that floats in the corner on mobile. */

View File

@ -64,7 +64,7 @@ const ActionsModal: React.FC<IActionsModal> = ({ status, actions, onClick, onClo
<li>
<button type='button' onClick={onClose}>
<FormattedMessage id='lightbox.close' defaultMessage='Cancel' />
<FormattedMessage id='lightbox.close' defaultMessage='Close' />
</button>
</li>
</ul>

View File

@ -34,7 +34,7 @@ const UploadButton: React.FC<IUploadButton> = ({ disabled, onSelectFile }) => {
/>
<Text size='sm' theme='primary' weight='semibold' transform='uppercase' tabIndex={0}>
<FormattedMessage id='compose_event.upload_banner' defaultMessage='Upload photo' />
<FormattedMessage id='compose_event.upload_banner' defaultMessage='Upload event banner' />
</Text>
<input
ref={fileElement}

View File

@ -69,7 +69,7 @@ const ComposeModal: React.FC<IComposeModal> = ({ onClose, composeId = 'compose-m
} else if (quote) {
return <FormattedMessage id='navigation_bar.compose_quote' defaultMessage='Quote post' />;
} else {
return <FormattedMessage id='navigation_bar.compose' defaultMessage='Compose new post' />;
return <FormattedMessage id='navigation_bar.compose' defaultMessage='Compose a post' />;
}
};

View File

@ -10,8 +10,8 @@ import { useAppDispatch, useAppSelector } from 'soapbox/hooks';
const messages = defineMessages({
save: { id: 'admin.edit_announcement.save', defaultMessage: 'Save' },
announcementContentPlaceholder: { id: 'admin.edit_announcement.fields.content_placeholder', defaultMessage: 'Announcement content' },
announcementStartTimePlaceholder: { id: 'admin.edit_announcement.fields.start_time_placeholder', defaultMessage: 'Announcement starts on' },
announcementEndTimePlaceholder: { id: 'admin.edit_announcement.fields.end_time_placeholder', defaultMessage: 'Announcement ends on' },
announcementStartTimePlaceholder: { id: 'admin.edit_announcement.fields.start_time_placeholder', defaultMessage: 'Announcement starts on:' },
announcementEndTimePlaceholder: { id: 'admin.edit_announcement.fields.end_time_placeholder', defaultMessage: 'Announcement ends on:' },
});
interface IEditAnnouncementModal {

View File

@ -4,7 +4,7 @@ import { injectIntl, FormattedMessage, IntlShape, defineMessages } from 'react-i
import { Modal } from 'soapbox/components/ui';
const messages = defineMessages({
modalTitle: { id: 'missing_description_modal.text', defaultMessage: 'You have not entered a description for all attachments.' },
modalTitle: { id: 'missing_description_modal.text', defaultMessage: 'You have not entered a description for all attachments. Continue anyway?' },
post: { id: 'missing_description_modal.continue', defaultMessage: 'Post' },
cancel: { id: 'missing_description_modal.cancel', defaultMessage: 'Cancel' },
});

View File

@ -18,7 +18,7 @@ import type { AxiosError } from 'axios';
const messages = defineMessages({
login: { id: 'navbar.login.action', defaultMessage: 'Log in' },
username: { id: 'navbar.login.username.placeholder', defaultMessage: 'E-mail or username' },
username: { id: 'navbar.login.username.placeholder', defaultMessage: 'Email or username' },
email: { id: 'navbar.login.email.placeholder', defaultMessage: 'E-mail address' },
password: { id: 'navbar.login.password.label', defaultMessage: 'Password' },
forgotPassword: { id: 'navbar.login.forgot_password', defaultMessage: 'Forgot password?' },
@ -170,7 +170,7 @@ const Navbar = () => {
size='sm'
{...(features.nostrSignup ? { onClick: handleNostrLogin } : { to: '/login' })}
>
<FormattedMessage id='account.login' defaultMessage='Log In' />
<FormattedMessage id='account.login' defaultMessage='Log in' />
</Button>
{(isOpen) && (

View File

@ -19,7 +19,7 @@ const SignUpPanel = () => {
</Text>
<Text theme='muted' size='sm'>
<FormattedMessage id='signup_panel.subtitle' defaultMessage='Sign up now to discuss.' />
<FormattedMessage id='signup_panel.subtitle' defaultMessage="Sign up now to discuss what's happening." />
</Text>
</Stack>

View File

@ -9,7 +9,7 @@ import type { Account } from 'soapbox/schemas';
const messages = defineMessages({
followers: { id: 'account.followers', defaultMessage: 'Followers' },
follows: { id: 'account.follows', defaultMessage: 'Follows' },
follows: { id: 'account.follows', defaultMessage: 'Following' },
});
interface IProfileStats {

View File

@ -97,7 +97,7 @@ const UserPanel: React.FC<IUserPanel> = ({ accountId, action, badges, domain })
{shortNumberFormat(account.following_count)}
</Text>
<Text weight='bold' size='sm'>
<FormattedMessage id='account.follows' defaultMessage='Follows' />
<FormattedMessage id='account.follows' defaultMessage='Following' />
</Text>
</HStack>
</Link>