Add translations

This commit is contained in:
Nicola Benaglia 2025-05-10 11:39:59 +02:00
parent 5f602442e4
commit 88c7aed59a
3 changed files with 78 additions and 43 deletions

View File

@ -29,6 +29,7 @@
"post": "post", "post": "post",
"post_message": "post message" "post_message": "post message"
}, },
"admin": "admin",
"core": { "core": {
"block_height": "block height", "block_height": "block height",
"information": "core information", "information": "core information",
@ -52,7 +53,8 @@
"last_height": "last height", "last_height": "last height",
"list": { "list": {
"invite": "invite list", "invite": "invite list",
"join_request": "join request list" "join_request": "join request list",
"member": "member list"
}, },
"loading": "loading...", "loading": "loading...",
"loading_posts": "loading posts... please wait.", "loading_posts": "loading posts... please wait.",

View File

@ -1,5 +1,6 @@
{ {
"action": { "action": {
"ban": "ban member from group",
"cancel_ban": "cancel ban", "cancel_ban": "cancel ban",
"copy_private_key": "copy private key", "copy_private_key": "copy private key",
"create_group": "create group", "create_group": "create group",
@ -9,8 +10,11 @@
"export_private_key": "export private key", "export_private_key": "export private key",
"find_group": "find group", "find_group": "find group",
"join_group": "join group", "join_group": "join group",
"kick_member": "kick member from group",
"invite_member": "invite member", "invite_member": "invite member",
"make_admin": "make an admin",
"refetch_page": "refetch page", "refetch_page": "refetch page",
"remove_admin": "remove as admin",
"return_to_thread": "return to threads" "return_to_thread": "return to threads"
}, },
"advanced_options": "advanced options", "advanced_options": "advanced options",
@ -64,6 +68,7 @@
"thread_id": "unable to locate thread Id" "thread_id": "unable to locate thread Id"
}, },
"success": { "success": {
"group_ban": "successfully banned member from group. It may take a couple of minutes for the changes to propagate",
"group_creation": "successfully created group. It may take a couple of minutes for the changes to propagate", "group_creation": "successfully created group. It may take a couple of minutes for the changes to propagate",
"group_creation_name": "created group {{group_name}}: awaiting confirmation", "group_creation_name": "created group {{group_name}}: awaiting confirmation",
"group_creation_label": "created group {{name}}: success!", "group_creation_label": "created group {{name}}: success!",
@ -73,6 +78,9 @@
"group_join_label": "joined group {{name}}: success!", "group_join_label": "joined group {{name}}: success!",
"group_join_request": "requested to join Group {{group_name}}: awaiting confirmation", "group_join_request": "requested to join Group {{group_name}}: awaiting confirmation",
"group_join_outcome": "requested to join Group {{group_name}}: success!", "group_join_outcome": "requested to join Group {{group_name}}: success!",
"group_kick": "successfully kicked member from group. It may take a couple of minutes for the changes to propagate",
"group_member_admin": "successfully made member an admin. It may take a couple of minutes for the changes to propagate",
"group_remove_member": "successfully removed member as an admin. It may take a couple of minutes for the changes to propagate",
"invitation_cancellation": "successfully canceled invitation. It may take a couple of minutes for the changes to propagate", "invitation_cancellation": "successfully canceled invitation. It may take a couple of minutes for the changes to propagate",
"invitation_request": "accepted join request: awaiting confirmation", "invitation_request": "accepted join request: awaiting confirmation",
"loading_threads": "loading threads... please wait.", "loading_threads": "loading threads... please wait.",

View File

@ -43,7 +43,7 @@ const ListOfMembers = ({
const [isLoadingRemoveAdmin, setIsLoadingRemoveAdmin] = useState(false); const [isLoadingRemoveAdmin, setIsLoadingRemoveAdmin] = useState(false);
const theme = useTheme(); const theme = useTheme();
const { t } = useTranslation(['core', 'group']); const { t } = useTranslation(['core', 'group']);
const listRef = useRef(); const listRef = useRef(null);
const handlePopoverOpen = (event, index) => { const handlePopoverOpen = (event, index) => {
setPopoverAnchor(event.currentTarget); setPopoverAnchor(event.currentTarget);
@ -77,8 +77,9 @@ const ListOfMembers = ({
if (!response?.error) { if (!response?.error) {
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: message: t('group:message.success.group_kick', {
'Successfully kicked member from group. It may take a couple of minutes for the changes to propagate', postProcess: 'capitalize',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
handlePopoverClose(); handlePopoverClose();
@ -95,7 +96,9 @@ const ListOfMembers = ({
.catch((error) => { .catch((error) => {
setInfoSnack({ setInfoSnack({
type: 'error', type: 'error',
message: error.message || 'An error occurred', message:
error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
@ -109,7 +112,8 @@ const ListOfMembers = ({
}; };
const handleBan = async (address) => { const handleBan = async (address) => {
try { try {
const fee = await getFee('GROUP_BAN'); // TODO translate const fee = await getFee('GROUP_BAN');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('group:question.perform_transaction', {
action: 'GROUP_BAN', action: 'GROUP_BAN',
@ -117,7 +121,9 @@ const ListOfMembers = ({
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
setIsLoadingBan(true); setIsLoadingBan(true);
await new Promise((res, rej) => { await new Promise((res, rej) => {
window window
.sendMessage('banFromGroup', { .sendMessage('banFromGroup', {
@ -129,8 +135,9 @@ const ListOfMembers = ({
if (!response?.error) { if (!response?.error) {
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: message: t('group:message.success.group_ban', {
'Successfully banned member from group. It may take a couple of minutes for the changes to propagate', postProcess: 'capitalize',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
handlePopoverClose(); handlePopoverClose();
@ -147,13 +154,16 @@ const ListOfMembers = ({
.catch((error) => { .catch((error) => {
setInfoSnack({ setInfoSnack({
type: 'error', type: 'error',
message: error.message || 'An error occurred', message:
error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
}); });
}); });
} catch (error) { } catch (error) {
console.log(error);
} finally { } finally {
setIsLoadingBan(false); setIsLoadingBan(false);
} }
@ -180,8 +190,9 @@ const ListOfMembers = ({
if (!response?.error) { if (!response?.error) {
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: message: t('group:message.success.group_member_admin', {
'Successfully made member an admin. It may take a couple of minutes for the changes to propagate', postProcess: 'capitalize',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
handlePopoverClose(); handlePopoverClose();
@ -198,13 +209,16 @@ const ListOfMembers = ({
.catch((error) => { .catch((error) => {
setInfoSnack({ setInfoSnack({
type: 'error', type: 'error',
message: error.message || 'An error occurred', message:
error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
}); });
}); });
} catch (error) { } catch (error) {
console.log(error);
} finally { } finally {
setIsLoadingMakeAdmin(false); setIsLoadingMakeAdmin(false);
} }
@ -231,8 +245,9 @@ const ListOfMembers = ({
if (!response?.error) { if (!response?.error) {
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: message: t('group:message.success.group_remove_member', {
'Successfully removed member as an admin. It may take a couple of minutes for the changes to propagate', postProcess: 'capitalize',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
handlePopoverClose(); handlePopoverClose();
@ -249,13 +264,16 @@ const ListOfMembers = ({
.catch((error) => { .catch((error) => {
setInfoSnack({ setInfoSnack({
type: 'error', type: 'error',
message: error.message || 'An error occurred', message:
error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
}); });
}); });
} catch (error) { } catch (error) {
console.log(error);
} finally { } finally {
setIsLoadingRemoveAdmin(false); setIsLoadingRemoveAdmin(false);
} }
@ -290,13 +308,13 @@ const ListOfMembers = ({
> >
<Box <Box
sx={{ sx={{
width: '325px', alignItems: 'center',
height: '250px',
display: 'flex', display: 'flex',
flexDirection: 'column', flexDirection: 'column',
alignItems: 'center',
gap: '10px', gap: '10px',
height: '250px',
padding: '10px', padding: '10px',
width: '325px',
}} }}
> >
{isOwner && ( {isOwner && (
@ -307,48 +325,49 @@ const ListOfMembers = ({
variant="contained" variant="contained"
onClick={() => handleKick(member?.member)} onClick={() => handleKick(member?.member)}
> >
Kick member from group {t('group:action.kick_member', {
postProcess: 'capitalize',
})}
</LoadingButton> </LoadingButton>
<LoadingButton <LoadingButton
loading={isLoadingBan} loading={isLoadingBan}
loadingPosition="start" loadingPosition="start"
variant="contained" variant="contained"
onClick={() => handleBan(member?.member)} onClick={() => handleBan(member?.member)}
> >
Ban member from group {t('group:action.ban', {
postProcess: 'capitalize',
})}
</LoadingButton> </LoadingButton>
<LoadingButton <LoadingButton
loading={isLoadingMakeAdmin} loading={isLoadingMakeAdmin}
loadingPosition="start" loadingPosition="start"
variant="contained" variant="contained"
onClick={() => makeAdmin(member?.member)} onClick={() => makeAdmin(member?.member)}
> >
Make an admin {t('group:action.make_admin', {
postProcess: 'capitalize',
})}
</LoadingButton> </LoadingButton>
<LoadingButton <LoadingButton
loading={isLoadingRemoveAdmin} loading={isLoadingRemoveAdmin}
loadingPosition="start" loadingPosition="start"
variant="contained" variant="contained"
onClick={() => removeAdmin(member?.member)} onClick={() => removeAdmin(member?.member)}
> >
Remove as admin {t('group:action.remove_admin', {
postProcess: 'capitalize',
})}
</LoadingButton> </LoadingButton>
</> </>
)} )}
</Box> </Box>
</Popover> </Popover>
<ListItem
key={member?.member} <ListItem key={member?.member} disablePadding>
// secondaryAction={
// <Checkbox
// edge="end"
// onChange={handleToggle(value)}
// checked={checked.indexOf(value) !== -1}
// inputProps={{ 'aria-labelledby': labelId }}
// />
// }
disablePadding
>
<ListItemButton <ListItemButton
onClick={(event) => handlePopoverOpen(event, index)} onClick={(event) => handlePopoverOpen(event, index)}
> >
@ -362,6 +381,7 @@ const ListOfMembers = ({
} }
/> />
</ListItemAvatar> </ListItemAvatar>
<ListItemText <ListItemText
id={''} id={''}
primary={member?.name || member?.member} primary={member?.name || member?.member}
@ -373,7 +393,9 @@ const ListOfMembers = ({
marginLeft: 'auto', marginLeft: 'auto',
}} }}
> >
Admin {t('core:admin', {
postProcess: 'capitalize',
})}
</Typography> </Typography>
)} )}
</ListItemButton> </ListItemButton>
@ -386,28 +408,31 @@ const ListOfMembers = ({
return ( return (
<div> <div>
<p>Member list</p> <p>
{t('core:list.member', {
postProcess: 'capitalize',
})}
</p>
<div <div
style={{ style={{
position: 'relative',
height: '500px',
width: '100%',
display: 'flex', display: 'flex',
flexDirection: 'column', flexDirection: 'column',
flexShrink: 1, flexShrink: 1,
height: '500px',
position: 'relative',
width: '100%',
}} }}
> >
<AutoSizer> <AutoSizer>
{({ height, width }) => ( {({ height, width }) => (
<List <List
ref={listRef} deferredMeasurementCache={cache}
width={width}
height={height} height={height}
ref={listRef}
rowCount={members.length} rowCount={members.length}
rowHeight={cache.rowHeight} rowHeight={cache.rowHeight}
rowRenderer={rowRenderer} rowRenderer={rowRenderer}
// onScroll={handleScroll} width={width}
deferredMeasurementCache={cache}
/> />
)} )}
</AutoSizer> </AutoSizer>