chore: use babel transformer for formatted message id
continuous-integration/drone/push Build encountered an error Details

This commit is contained in:
kieran 2024-04-29 09:54:41 +01:00
parent b642f13d36
commit e6faf5d3ad
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
112 changed files with 555 additions and 458 deletions

View File

@ -4,12 +4,6 @@ module.exports = {
parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint", "formatjs", "react-refresh", "simple-import-sort"],
rules: {
"formatjs/enforce-id": [
"error",
{
idInterpolationPattern: "[sha512:contenthash:base64:6]",
},
],
"react/react-in-jsx-scope": "off",
"react-hooks/exhaustive-deps": "off",
"react-refresh/only-export-components": "error",

View File

@ -0,0 +1,11 @@
{
"plugins": [
[
"formatjs",
{
"idInterpolationPattern": "[sha512:contenthash:base64:6]",
"ast": true
}
]
]
}

View File

@ -104,6 +104,7 @@
"@webscopeio/react-textarea-autocomplete": "^4.9.2",
"@welldone-software/why-did-you-render": "^8.0.1",
"autoprefixer": "^10.4.16",
"babel-plugin-formatjs": "^10.5.14",
"config": "^3.3.9",
"eslint": "^8.48.0",
"eslint-config-react-app": "^7.0.1",

View File

@ -19,7 +19,7 @@ export function LeaderBadge() {
}}>
<AwardIcon size={16} />
<div className="text-xs font-medium text-[#AC88FF]">
<FormattedMessage defaultMessage="Community Leader" id="7YkSA2" />
<FormattedMessage defaultMessage="Community Leader" />
</div>
</div>
{showModal && (
@ -28,7 +28,7 @@ export function LeaderBadge() {
<CloseButton className="absolute right-2 top-2" onClick={() => setShowModal(false)} />
<AwardIcon size={80} />
<div className="text-3xl font-semibold">
<FormattedMessage defaultMessage="Community Leader" id="7YkSA2" />
<FormattedMessage defaultMessage="Community Leader" />
</div>
<p className="text-secondary">
<FormattedMessage
@ -38,7 +38,7 @@ export function LeaderBadge() {
</p>
<Link to="/settings/invite">
<button className="primary">
<FormattedMessage defaultMessage="Become a leader" id="M6C/px" />
<FormattedMessage defaultMessage="Become a leader" />
</button>
</Link>
</div>

View File

@ -74,7 +74,7 @@ export default function CashuNuts({ token }: { token: string }) {
<Icon name="copy" />
</AsyncButton>
<AsyncButton onClick={() => redeemToken(token)}>
<FormattedMessage defaultMessage="Redeem" id="XrSk2j" description="Button: Redeem Cashu token" />
<FormattedMessage defaultMessage="Redeem" />
</AsyncButton>
</div>
</div>

View File

@ -77,7 +77,7 @@ export default function Invoice(props: InvoiceProps) {
{description && <p>{description}</p>}
{isPaid ? (
<div className="paid">
<FormattedMessage defaultMessage="Paid" id="u/vOPu" />
<FormattedMessage defaultMessage="Paid" />
</div>
) : (
<button disabled={isExpired} type="button" onClick={payInvoice}>

View File

@ -10,7 +10,7 @@ const MagnetLink = ({ magnet }: MagnetLinkProps) => {
return (
<div className="note-invoice">
<h4>
<FormattedMessage defaultMessage="Magnet Link" id="Gcn9NQ" />
<FormattedMessage defaultMessage="Magnet Link" />
</h4>
<a href={magnet.raw} rel="noreferrer">
{magnet.dn ?? magnet.infoHash}

View File

@ -32,7 +32,7 @@ export default function ZapstrEmbed({ ev }: { ev: NostrEvent }) {
</div>
<Link to={`https://zapstr.live/?track=${link}`} target="_blank">
<button>
<FormattedMessage defaultMessage="Open on Zapstr" id="Lu5/Bj" />
<FormattedMessage defaultMessage="Open on Zapstr" />
</button>
</Link>
</>

View File

@ -330,12 +330,12 @@ export function NoteCreator() {
return (
<>
<h4>
<FormattedMessage defaultMessage="Poll Options" id="vhlWFg" />
<FormattedMessage defaultMessage="Poll Options" />
</h4>
{note.pollOptions?.map((a, i) => (
<div className="form-group w-max" key={`po-${i}`}>
<div>
<FormattedMessage defaultMessage="Option: {n}" id="mfe8RW" values={{ n: i + 1 }} />
<FormattedMessage defaultMessage="Option: {n}" values={{ n: i + 1 }} />
</div>
<div>
<input type="text" value={a} onChange={e => changePollOption(i, e.target.value)} />
@ -422,24 +422,24 @@ export function NoteCreator() {
<>
<div>
<h4>
<FormattedMessage defaultMessage="Custom Relays" id="EcZF24" />
<FormattedMessage defaultMessage="Custom Relays" />
</h4>
<p>
<FormattedMessage defaultMessage="Send note to a subset of your write relays" id="th5lxp" />
<FormattedMessage defaultMessage="Send note to a subset of your write relays" />
</p>
{renderRelayCustomisation()}
</div>
<div className="flex flex-col g8">
<h4>
<FormattedMessage defaultMessage="Zap Splits" id="5CB6zB" />
<FormattedMessage defaultMessage="Zap Splits" />
</h4>
<FormattedMessage defaultMessage="Zaps on this note will be split to the following users." id="LwYmVi" />
<FormattedMessage defaultMessage="Zaps on this note will be split to the following users." />
<div className="flex flex-col g8">
{[...(note.zapSplits ?? [])].map((v: ZapTarget, i, arr) => (
<div className="flex items-center g8" key={`${v.name}-${v.value}`}>
<div className="flex flex-col flex-4 g4">
<h4>
<FormattedMessage defaultMessage="Recipient" id="8Rkoyb" />
<FormattedMessage defaultMessage="Recipient" />
</h4>
<input
type="text"
@ -454,7 +454,7 @@ export function NoteCreator() {
</div>
<div className="flex flex-col flex-1 g4">
<h4>
<FormattedMessage defaultMessage="Weight" id="zCb8fX" />
<FormattedMessage defaultMessage="Weight" />
</h4>
<input
type="number"
@ -484,7 +484,7 @@ export function NoteCreator() {
onClick={() =>
note.update(v => (v.zapSplits = [...(v.zapSplits ?? []), { type: "pubkey", value: "", weight: 1 }]))
}>
<FormattedMessage defaultMessage="Add" id="2/2yg+" />
<FormattedMessage defaultMessage="Add" />
</button>
</div>
<span className="warning">
@ -496,7 +496,7 @@ export function NoteCreator() {
</div>
<div className="flex flex-col g8">
<h4>
<FormattedMessage defaultMessage="Sensitive Content" id="bQdA2k" />
<FormattedMessage defaultMessage="Sensitive Content" />
</h4>
<FormattedMessage
defaultMessage="Users must accept the content warning to show the content of your note."
@ -515,7 +515,7 @@ export function NoteCreator() {
})}
/>
<span className="warning">
<FormattedMessage defaultMessage="Not all clients support this yet" id="gXgY3+" />
<FormattedMessage defaultMessage="Not all clients support this yet" />
</span>
</div>
</>
@ -550,7 +550,7 @@ export function NoteCreator() {
className={classNames("note-creator-icon", { active: note.advanced })}
/>
<span className="sm:inline hidden">
<FormattedMessage defaultMessage="Preview" id="TJo5E6" />
<FormattedMessage defaultMessage="Preview" />
</span>
<ToggleSwitch
onClick={() => loadPreview()}
@ -560,14 +560,10 @@ export function NoteCreator() {
</div>
<div className="flex g8">
<button className="secondary" onClick={cancel}>
<FormattedMessage defaultMessage="Cancel" id="47FYwb" />
<FormattedMessage defaultMessage="Cancel" />
</button>
<AsyncButton onClick={onSubmit} className="primary">
{note.replyTo ? (
<FormattedMessage defaultMessage="Reply" id="9HU8vw" />
) : (
<FormattedMessage defaultMessage="Send" id="9WRlF4" />
)}
{note.replyTo ? <FormattedMessage defaultMessage="Reply" /> : <FormattedMessage defaultMessage="Send" />}
</AsyncButton>
</div>
</div>
@ -617,7 +613,7 @@ export function NoteCreator() {
{note.replyTo && (
<>
<h4>
<FormattedMessage defaultMessage="Reply To" id="8ED/4u" />
<FormattedMessage defaultMessage="Reply To" />
</h4>
<div className="max-h-64 overflow-y-auto">
<Note className="hover:bg-transparent" data={note.replyTo} options={replyToNoteOptions} />
@ -628,7 +624,7 @@ export function NoteCreator() {
{note.quote && (
<>
<h4>
<FormattedMessage defaultMessage="Quote Repost" id="C7642/" />
<FormattedMessage defaultMessage="Quote Repost" />
</h4>
<div className="max-h-64 overflow-y-auto">
<Note className="hover:bg-transparent" data={note.quote} options={quoteNoteOptions} />

View File

@ -74,7 +74,7 @@ export const NoteCreatorButton = ({
<Icon name="plus" size={16} />
{showText && (
<span className="ml-2 hidden xl:inline">
<FormattedMessage defaultMessage="New Note" id="2mcwT8" />
<FormattedMessage defaultMessage="New Note" />
</span>
)}
</button>

View File

@ -13,10 +13,10 @@ const HiddenNote = ({ children }: { children: React.ReactNode }) => {
) : (
<div className="bb p flex items-center justify-between">
<div className="text-sm text-secondary">
<FormattedMessage defaultMessage="This note has been muted" id="qfmMQh" />
<FormattedMessage defaultMessage="This note has been muted" />
</div>
<button className="btn btn-sm btn-neutral" onClick={() => setShow(true)}>
<FormattedMessage defaultMessage="Show" id="K7AkdL" />
<FormattedMessage defaultMessage="Show" />
</button>
</div>
);

View File

@ -14,7 +14,7 @@ interface ShowMoreProps {
const LoadMore = ({ text, onClick, className = "" }: ShowMoreProps) => {
return (
<button type="button" className={className} onClick={onClick}>
{text || <FormattedMessage defaultMessage="Load more" id="00LcfG" />}
{text || <FormattedMessage defaultMessage="Load more" />}
</button>
);
};

View File

@ -97,11 +97,7 @@ export function LongFormText(props: LongFormTextProps) {
e.stopPropagation();
setShowMore(!showMore);
}}>
{showMore ? (
<FormattedMessage defaultMessage="Show less" id="qyJtWy" />
) : (
<FormattedMessage defaultMessage="Show more" id="aWpBzj" />
)}
{showMore ? <FormattedMessage defaultMessage="Show less" /> : <FormattedMessage defaultMessage="Show more" />}
</a>
);
@ -126,12 +122,12 @@ export function LongFormText(props: LongFormTextProps) {
<div></div>
{!reading && (
<div className="pointer" onClick={() => readArticle()}>
<FormattedMessage defaultMessage="Listen to this article" id="nihgfo" />
<FormattedMessage defaultMessage="Listen to this article" />
</div>
)}
{reading && (
<div className="pointer" onClick={() => stopReading()}>
<FormattedMessage defaultMessage="Stop listening" id="U1aPPi" />
<FormattedMessage defaultMessage="Stop listening" />
</div>
)}
</div>

View File

@ -26,10 +26,7 @@ export function NostrFileElement({ ev }: { ev: NostrEvent }) {
if (u && m) {
return (
<Reveal
message={
<FormattedMessage defaultMessage="Click to load content from {link}" id="lsNFM1" values={{ link: u }} />
}>
<Reveal message={<FormattedMessage defaultMessage="Click to load content from {link}" values={{ link: u }} />}>
<MediaElement
mime={m}
url={u}
@ -44,7 +41,7 @@ export function NostrFileElement({ ev }: { ev: NostrEvent }) {
} else {
return (
<b className="error">
<FormattedMessage defaultMessage="Unknown file header: {name}" id="PamNxw" values={{ name: ev.content }} />
<FormattedMessage defaultMessage="Unknown file header: {name}" values={{ name: ev.content }} />
</b>
);
}

View File

@ -160,7 +160,7 @@ function Reaction({ ev }: { ev: TaggedNostrEvent }) {
<div className="text-gray-medium font-bold">
<Username pubkey={ev.pubkey} onLinkVisit={() => {}} />
<span> </span>
<FormattedMessage defaultMessage="liked" id="TvKqBp" />
<FormattedMessage defaultMessage="liked" />
</div>
<NoteQuote link={link} />
</div>

View File

@ -148,7 +148,7 @@ export function NoteContextMenu({ ev, ...props }: NoteContextMenuProps) {
)}
<MenuItem onClick={handleReBroadcastButtonClick}>
<Icon name="relay" />
<FormattedMessage defaultMessage="Broadcast Event" id="Gxcr08" />
<FormattedMessage defaultMessage="Broadcast Event" />
</MenuItem>
<MenuItem onClick={() => translate()}>
<Icon name="translate" />

View File

@ -58,7 +58,7 @@ export const RepostButton = ({ ev, reposts }: { ev: TaggedNostrEvent; reposts: T
</div>
<MenuItem onClick={repost} disabled={hasReposted()}>
<Icon name="repeat" />
<FormattedMessage defaultMessage="Repost" id="JeoS4y" />
<FormattedMessage defaultMessage="Repost" />
</MenuItem>
<MenuItem
onClick={() =>
@ -69,7 +69,7 @@ export const RepostButton = ({ ev, reposts }: { ev: TaggedNostrEvent; reposts: T
})
}>
<Icon name="edit" />
<FormattedMessage defaultMessage="Quote Repost" id="C7642/" />
<FormattedMessage defaultMessage="Quote Repost" />
</MenuItem>
</Menu>
);

View File

@ -27,11 +27,7 @@ export const NoteText = memo(function InnerContent(
e.stopPropagation();
setShowMore(!showMore);
}}>
{showMore ? (
<FormattedMessage defaultMessage="Show less" id="qyJtWy" />
) : (
<FormattedMessage defaultMessage="Show more" id="aWpBzj" />
)}
{showMore ? <FormattedMessage defaultMessage="Show less" /> : <FormattedMessage defaultMessage="Show more" />}
</a>
);
@ -80,10 +76,10 @@ export const NoteText = memo(function InnerContent(
/>
</>
)}
. <FormattedMessage defaultMessage="Click here to load anyway" id="IoQq+a" />.{" "}
. <FormattedMessage defaultMessage="Click here to load anyway" />.{" "}
<Link to="/settings/moderation">
<i>
<FormattedMessage defaultMessage="Settings" id="D3idYv" />
<FormattedMessage defaultMessage="Settings" />
</i>
</Link>
</>

View File

@ -16,7 +16,7 @@ const NoteTime: React.FC<NoteTimeProps> = ({ from, fallback }) => {
const timeDifference = Math.floor((currentTime.getTime() - fromTime) / 1000);
if (timeDifference < secondsInAMinute) {
return <FormattedMessage defaultMessage="now" id="kaaf1E" />;
return <FormattedMessage defaultMessage="now" />;
} else if (timeDifference < secondsInAnHour) {
return `${Math.floor(timeDifference / secondsInAMinute)}m`;
} else if (timeDifference < secondsInADay) {

View File

@ -135,9 +135,9 @@ export default function Poll(props: PollProps) {
values={{
type:
tallyBy === "zaps" ? (
<FormattedMessage defaultMessage="zap" id="5BVs2e" />
<FormattedMessage defaultMessage="zap" />
) : (
<FormattedMessage defaultMessage="user" id="sUNhQE" />
<FormattedMessage defaultMessage="user" />
),
}}
/>

View File

@ -136,7 +136,7 @@ export function Thread(props: { onBack?: () => void; disableSpotlight?: boolean
{!thread.root && renderCurrent()}
{!thread.root && !thread.current && (
<NoteGhost>
<FormattedMessage defaultMessage="Looking up thread..." id="JA+tz3" />
<FormattedMessage defaultMessage="Looking up thread..." />
</NoteGhost>
)}
</div>

View File

@ -13,7 +13,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
element: (
<>
<Icon name="user-v2" />
<FormattedMessage defaultMessage="For you" id="xEjBS7" />
<FormattedMessage defaultMessage="For you" />
</>
),
},
@ -24,7 +24,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
element: (
<>
<Icon name="user-v2" />
<FormattedMessage defaultMessage="Following" id="cPIKU2" />
<FormattedMessage defaultMessage="Following" />
</>
),
},
@ -35,7 +35,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
element: (
<>
<Icon name="fire" />
<FormattedMessage defaultMessage="Trending Notes" id="Ix8l+B" />
<FormattedMessage defaultMessage="Trending Notes" />
</>
),
},
@ -46,7 +46,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
element: (
<>
<Icon name="message-chat-circle" />
<FormattedMessage defaultMessage="Conversations" id="1udzha" />
<FormattedMessage defaultMessage="Conversations" />
</>
),
},
@ -57,7 +57,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
element: (
<>
<Icon name="user-v2" />
<FormattedMessage defaultMessage="Followed by friends" id="voxBKC" />
<FormattedMessage defaultMessage="Followed by friends" />
</>
),
},
@ -68,7 +68,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
element: (
<>
<Icon name="thumbs-up" />
<FormattedMessage defaultMessage="Suggested Follows" id="C8HhVE" />
<FormattedMessage defaultMessage="Suggested Follows" />
</>
),
},
@ -79,7 +79,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
element: (
<>
<Icon name="hash" />
<FormattedMessage defaultMessage="Trending Hashtags" id="XXm7jJ" />
<FormattedMessage defaultMessage="Trending Hashtags" />
</>
),
},
@ -90,7 +90,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
element: (
<>
<Icon name="globe" />
<FormattedMessage defaultMessage="Global" id="EWyQH5" />
<FormattedMessage defaultMessage="Global" />
</>
),
},
@ -101,7 +101,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
element: (
<>
<Icon name="hash" />
<FormattedMessage defaultMessage="Topics" id="kc79d3" />
<FormattedMessage defaultMessage="Topics" />
</>
),
},

View File

@ -42,7 +42,7 @@ const InviteModal = () => {
</p>
<Link to="/login/sign-up">
<button className="primary">
<FormattedMessage defaultMessage="Sign Up" id="39AHJm" />
<FormattedMessage defaultMessage="Sign Up" />
</button>
</Link>
</div>

View File

@ -11,10 +11,10 @@ export default function AccountName({ name = "", link = true }: AccountNameProps
return (
<>
<div>
<FormattedMessage defaultMessage="Username" id="JCIgkj" />: <b>{name}</b>
<FormattedMessage defaultMessage="Username" />: <b>{name}</b>
</div>
<div>
<FormattedMessage defaultMessage="Short link" id="rx1i0i" />:{" "}
<FormattedMessage defaultMessage="Short link" />:{" "}
{link ? (
<a
href={`https://iris.to/${name}`}
@ -29,7 +29,7 @@ export default function AccountName({ name = "", link = true }: AccountNameProps
)}
</div>
<div>
<FormattedMessage defaultMessage="Nostr address (nip05)" id="BjNwZW" />: <b>{name}@iris.to</b>
<FormattedMessage defaultMessage="Nostr address (nip05)" />: <b>{name}@iris.to</b>
</div>
</>
);

View File

@ -67,12 +67,12 @@ export default function ActiveAccount({ name = "", setAsPrimary = () => {} }: Ac
return (
<div>
<div className="negative">
<FormattedMessage defaultMessage="You have an active iris.to account" id="UrKTqQ" />:
<FormattedMessage defaultMessage="You have an active iris.to account" />:
<AccountName name={name} />
</div>
<p>
<button type="button" onClick={onClick}>
<FormattedMessage defaultMessage="Set as primary Nostr address (nip05)" id="MiMipu" />
<FormattedMessage defaultMessage="Set as primary Nostr address (nip05)" />
</button>
</p>
</div>

View File

@ -72,7 +72,7 @@ class IrisAccount extends Component<Props> {
view = (
<div>
<p>
<FormattedMessage defaultMessage="Register an Iris username" id="kEZUR8" /> (iris.to/username)
<FormattedMessage defaultMessage="Register an Iris username" /> (iris.to/username)
</p>
<form onSubmit={e => this.showChallenge(e)}>
<div className="flex g8">
@ -84,14 +84,14 @@ class IrisAccount extends Component<Props> {
onInput={e => this.onNewUserNameChange(e)}
/>
<button type="submit">
<FormattedMessage defaultMessage="Register" id="deEeEI" />
<FormattedMessage defaultMessage="Register" />
</button>
</div>
<div>
{this.state.newUserNameValid ? (
<>
<span className="success">
<FormattedMessage defaultMessage="Username is available" id="EcfIwB" />
<FormattedMessage defaultMessage="Username is available" />
</span>
<AccountName name={this.state.newUserName} link={false} />
</>
@ -107,7 +107,7 @@ class IrisAccount extends Component<Props> {
return (
<>
<h3>
<FormattedMessage defaultMessage="Iris.to account" id="Mzizei" />
<FormattedMessage defaultMessage="Iris.to account" />
</h3>
{view}
<p>

View File

@ -25,12 +25,12 @@ export default function ReservedAccount({
<AccountName name={name} link={false} />
<p>
<button className="btn btn-sm btn-primary" onClick={() => enableReserved()}>
<FormattedMessage defaultMessage="Yes please" id="VcwrfF" />
<FormattedMessage defaultMessage="Yes please" />
</button>
</p>
<p>
<button className="btn btn-sm btn-neutral" onClick={() => declineReserved()}>
<FormattedMessage defaultMessage="No thanks" id="c+JYNI" />
<FormattedMessage defaultMessage="No thanks" />
</button>
</p>
</div>

View File

@ -22,7 +22,7 @@ export function LiveEvent({ ev }: { ev: NostrEvent }) {
<div className="flex g4 items-center">
<Icon name="signal-01" />
<b className="uppercase">
<FormattedMessage defaultMessage="Live" id="Dn82AL" />
<FormattedMessage defaultMessage="Live" />
</b>
</div>
);
@ -30,7 +30,7 @@ export function LiveEvent({ ev }: { ev: NostrEvent }) {
case "ended": {
return (
<b className="uppercase">
<FormattedMessage defaultMessage="Ended" id="TP/cMX" />
<FormattedMessage defaultMessage="Ended" />
</b>
);
}
@ -52,7 +52,7 @@ export function LiveEvent({ ev }: { ev: NostrEvent }) {
case "live": {
return (
<button className="nowrap" onClick={() => setPlay(true)}>
<FormattedMessage defaultMessage="Watch Stream" id="furjvW" />
<FormattedMessage defaultMessage="Watch Stream" />
</button>
);
}
@ -61,7 +61,7 @@ export function LiveEvent({ ev }: { ev: NostrEvent }) {
return (
<Link to={link} target="_blank">
<button className="nowrap">
<FormattedMessage defaultMessage="Watch Replay" id="6/hB3S" />
<FormattedMessage defaultMessage="Watch Replay" />
</button>
</Link>
);

View File

@ -283,7 +283,7 @@ export default function Nip5Service(props: Nip05ServiceProps) {
: startBuy(handle, domain)
}>
{props.forSubscription ? (
<FormattedMessage defaultMessage="Claim Now" id="FdhSU2" />
<FormattedMessage defaultMessage="Claim Now" />
) : (
<FormattedMessage {...messages.BuyNow} />
)}

View File

@ -10,11 +10,11 @@ export function Offline({ onRetry, className }: { onRetry?: () => void | Promise
<div className={classNames("flex items-center g8", className)}>
<Icon name="wifi-off" className="error" />
<div className="error">
<FormattedMessage defaultMessage="Offline" id="7UOvbT" />
<FormattedMessage defaultMessage="Offline" />
</div>
{onRetry && (
<AsyncButton onClick={onRetry}>
<FormattedMessage defaultMessage="Retry" id="62nsdy" />
<FormattedMessage defaultMessage="Retry" />
</AsyncButton>
)}
</div>

View File

@ -70,7 +70,7 @@ export function PinPrompt({
}}>
<div className="flex flex-col g12">
<h2>
<FormattedMessage defaultMessage="Enter Pin" id="KtsyO0" />
<FormattedMessage defaultMessage="Enter Pin" />
</h2>
{subTitle ? <div>{subTitle}</div> : null}
<input
@ -84,10 +84,10 @@ export function PinPrompt({
{error && <b className="error">{error}</b>}
<div className="flex g8">
<button type="button" onClick={() => onCancel()}>
<FormattedMessage defaultMessage="Cancel" id="47FYwb" />
<FormattedMessage defaultMessage="Cancel" />
</button>
<AsyncButton ref={submitButtonRef} onClick={() => submitPin()} type="submit">
<FormattedMessage defaultMessage="Submit" id="wSZR47" />
<FormattedMessage defaultMessage="Submit" />
</AsyncButton>
</div>
</div>
@ -168,7 +168,7 @@ export function LoginUnlock() {
<PinPrompt
subTitle={
<p>
<FormattedMessage defaultMessage="Enter pin to unlock your private key" id="e7VmYP" />
<FormattedMessage defaultMessage="Enter pin to unlock your private key" />
</p>
}
onResult={unlockSession}

View File

@ -139,7 +139,7 @@ export default function SearchBox() {
}`}
onMouseEnter={() => setActiveIndex(0)}
onClick={() => navigate(`/search/${encodeURIComponent(search)}`, { state: { forceRefresh: true } })}>
<FormattedMessage defaultMessage="Search notes" id="EJbFi7" />: <b>{search}</b>
<FormattedMessage defaultMessage="Search notes" />: <b>{search}</b>
</div>
{results?.slice(0, MAX_RESULTS).map((result, idx) => (
<div

View File

@ -54,7 +54,7 @@ export default function SuggestedProfiles() {
return (
<>
<div className="flex items-center justify-between bg-superdark p br">
<FormattedMessage defaultMessage="Provider" id="xaj9Ba" />
<FormattedMessage defaultMessage="Provider" />
<select onChange={e => setProvider(Number(e.target.value))}>
<option value={Provider.NostrBand}>nostr.band</option>
{/*<option value={Provider.SemisolDev}>semisol.dev</option>*/}

View File

@ -25,7 +25,7 @@ export class BackupKeyTask extends BaseUITask {
</div>
<div className="flex flex-col g8">
<div className="font-semibold text-xl">
<FormattedMessage defaultMessage="Be sure to back up your keys!" id="1UWegE" />
<FormattedMessage defaultMessage="Be sure to back up your keys!" />
</div>
<small>
<FormattedMessage
@ -39,11 +39,11 @@ export class BackupKeyTask extends BaseUITask {
<div className="flex g8">
<Link to="/settings/keys">
<button>
<FormattedMessage defaultMessage="Back up now" id="rMgF34" />
<FormattedMessage defaultMessage="Back up now" />
</button>
</Link>
<button className="secondary" onClick={() => this.mute()}>
<FormattedMessage defaultMessage="Already backed up" id="j9xbzF" />
<FormattedMessage defaultMessage="Already backed up" />
</button>
</div>
</div>

View File

@ -22,7 +22,7 @@ export class DonateTask extends BaseUITask {
</p>
<Link to="/donate">
<button>
<FormattedMessage defaultMessage="Donate" id="2IFGap" />
<FormattedMessage defaultMessage="Donate" />
</button>
</Link>
</>

View File

@ -20,7 +20,7 @@ export class Nip5Task extends BaseUITask {
values={{
link: (
<Link to="/nostr-address">
<FormattedMessage defaultMessage="Buy nostr address" id="MuVeKe" />
<FormattedMessage defaultMessage="Buy nostr address" />
</Link>
),
}}

View File

@ -29,7 +29,7 @@ export class NoticeZapPoolDefault extends BaseUITask {
),
link: (
<Link to="/zap-pool">
<FormattedMessage defaultMessage="Zap Pool" id="i/dBAR" />
<FormattedMessage defaultMessage="Zap Pool" />
</Link>
),
}}

View File

@ -27,7 +27,7 @@ export class RenewSubTask extends BaseUITask {
/>
</p>
<Link to="/subscribe/manage">
<FormattedMessage defaultMessage="Renew" id="nWQFic" />
<FormattedMessage defaultMessage="Renew" />
</Link>
</>
);

View File

@ -39,7 +39,7 @@ export default function BadgeList({ badges }: { badges: TaggedNostrEvent[] }) {
<CloseButton className="absolute right-2 top-2" onClick={() => setShowModal(false)} />
<div className="reactions-header">
<h2>
<FormattedMessage defaultMessage="Badges" id="h8XMJL" />
<FormattedMessage defaultMessage="Badges" />
</h2>
</div>
<div className="body">

View File

@ -39,7 +39,7 @@ export default function FollowedBy({ pubkey }: { pubkey: HexKey }) {
{totalFollowedByFriends > 0 && (
<div className="text-gray-light">
<span className="mr-1">
<FormattedMessage defaultMessage="Followed by" id="6mr8WU" />
<FormattedMessage defaultMessage="Followed by" />
</span>
{renderFollowedByFriendsLinks()}
{totalFollowedByFriends > MAX_FOLLOWED_BY_FRIENDS && (
@ -55,12 +55,12 @@ export default function FollowedBy({ pubkey }: { pubkey: HexKey }) {
)}
{followDistance > 3 && (
<div className="text-gray-light">
<FormattedMessage defaultMessage="Not followed by anyone you follow" id="IgsWFG" />
<FormattedMessage defaultMessage="Not followed by anyone you follow" />
</div>
)}
{followDistance === 3 && ( // TODO "followed by friends of {n} friends"
<div className="text-gray-light">
<FormattedMessage defaultMessage="Followed by friends of friends" id="2oCF7O" />
<FormattedMessage defaultMessage="Followed by friends of friends" />
</div>
)}
</div>

View File

@ -13,7 +13,7 @@ export function FollowingMark({ pubkey }: { pubkey: string }) {
return (
<span className="following flex g4">
<Icon name="check" className="success" size={12} />
<FormattedMessage defaultMessage="following" id="+tShPg" />
<FormattedMessage defaultMessage="following" />
</span>
);
}

View File

@ -9,7 +9,7 @@ export function SuccessAction({ success }: { success: LNURLSuccessAction }) {
<div className="flex items-center">
<p className="flex g12">
<Icon name="check" className="success" />
{success?.description ?? <FormattedMessage defaultMessage="Paid" id="u/vOPu" />}
{success?.description ?? <FormattedMessage defaultMessage="Paid" />}
</p>
{success.url && (
<p>

View File

@ -104,7 +104,7 @@ export function ZapModalInput(props: {
<div className="flex flex-col g24">
<div className="flex flex-col g8">
<h3>
<FormattedMessage defaultMessage="Zap amount in sats" id="zcaOTs" />
<FormattedMessage defaultMessage="Zap amount in sats" />
</h3>
{renderAmounts()}
{custom()}
@ -122,7 +122,7 @@ export function ZapModalInput(props: {
{(amount ?? 0) > 0 && (
<AsyncButton onClick={() => props.onNextStage(getValue())}>
<Icon name="zap" />
<FormattedMessage defaultMessage="Zap {n} sats" id="8QDesP" values={{ n: formatShort(amount) }} />
<FormattedMessage defaultMessage="Zap {n} sats" values={{ n: formatShort(amount) }} />
</AsyncButton>
)}
</div>

View File

@ -22,7 +22,7 @@ export function ZapModalInvoice(props: {
<Copy text={v.pr} maxSize={26} className="items-center" />
<a href={`lightning:${v.pr}`}>
<button type="button">
<FormattedMessage defaultMessage="Open Wallet" id="HbefNb" />
<FormattedMessage defaultMessage="Open Wallet" />
</button>
</a>
</div>

View File

@ -20,9 +20,9 @@ export function ZapModalTitle({
<>
<h2>
{zapper?.canZap() ? (
<FormattedMessage defaultMessage="Send zap" id="5ykRmX" />
<FormattedMessage defaultMessage="Send zap" />
) : (
<FormattedMessage defaultMessage="Send sats" id="DKnriN" />
<FormattedMessage defaultMessage="Send sats" />
)}
</h2>
</>
@ -38,9 +38,9 @@ export function ZapModalTitle({
{t.zap?.pubkey && <ProfileImage pubkey={t.zap.pubkey} showUsername={false} />}
<h2>
{zapper?.canZap() ? (
<FormattedMessage defaultMessage="Send zap to {name}" id="SMO+on" values={values} />
<FormattedMessage defaultMessage="Send zap to {name}" values={values} />
) : (
<FormattedMessage defaultMessage="Send sats to {name}" id="JGrt9q" values={values} />
<FormattedMessage defaultMessage="Send sats to {name}" values={values} />
)}
</h2>
</>
@ -53,9 +53,9 @@ export function ZapModalTitle({
<div className="flex flex-col g12">
<h2>
{zapper?.canZap() ? (
<FormattedMessage defaultMessage="Send zap splits to" id="ZS+jRE" />
<FormattedMessage defaultMessage="Send zap splits to" />
) : (
<FormattedMessage defaultMessage="Send sats splits to" id="uc0din" />
<FormattedMessage defaultMessage="Send sats splits to" />
)}
</h2>
<div className="flex g4 f-wrap">

View File

@ -14,17 +14,13 @@ export function ZapTypeSelector({ zapType, setZapType }: { zapType: ZapType; set
return (
<div className="flex flex-col g8">
<h3>
<FormattedMessage defaultMessage="Zap Type" id="+aZY2h" />
<FormattedMessage defaultMessage="Zap Type" />
</h3>
<div className="flex g8">
{!readonly &&
makeTab(ZapType.PublicZap, <FormattedMessage defaultMessage="Public" id="/PCavi" description="Public Zap" />)}
{!readonly && makeTab(ZapType.PublicZap, <FormattedMessage defaultMessage="Public" />)}
{/*makeTab(ZapType.PrivateZap, "Private")*/}
{makeTab(ZapType.AnonZap, <FormattedMessage defaultMessage="Anon" id="wWLwvh" description="Anonymous Zap" />)}
{makeTab(
ZapType.NonZap,
<FormattedMessage defaultMessage="Non-Zap" id="AnLrRC" description="Non-Zap, Regular LN payment" />,
)}
{makeTab(ZapType.AnonZap, <FormattedMessage defaultMessage="Anon" />)}
{makeTab(ZapType.NonZap, <FormattedMessage defaultMessage="Non-Zap" />)}
</div>
</div>
);

View File

@ -20,7 +20,7 @@ export function AboutPage() {
return (
<div className="main-content p">
<h1>
<FormattedMessage defaultMessage="About" id="g5pX+a" />
<FormattedMessage defaultMessage="About" />
</h1>
Version: <b>{__SNORT_VERSION__}</b>
<Markdown content={changelog} tags={[]} />

View File

@ -16,7 +16,7 @@ export function NotesCol() {
<div className="deck-col-header flex">
<div className="flex flex-1 g8">
<Icon name="rows-01" size={24} />
<FormattedMessage defaultMessage="Notes" id="7+Domh" />
<FormattedMessage defaultMessage="Notes" />
</div>
<div className="flex-1">
<RootTabs base="/deck" />
@ -34,7 +34,7 @@ export function ArticlesCol() {
<div>
<div className="deck-col-header flex g8">
<Icon name="file-06" size={24} />
<FormattedMessage defaultMessage="Articles" id="3KNMbJ" />
<FormattedMessage defaultMessage="Articles" />
</div>
<div>
<Articles />
@ -55,7 +55,7 @@ export function MediaCol({ setThread }: { setThread: (e: NostrLink) => void }) {
<div>
<div className="flex items-center gap-2 p-2 border-b border-border-color">
<Icon name="camera-lens" size={24} />
<FormattedMessage defaultMessage="Media" id="hmZ3Bz" />
<FormattedMessage defaultMessage="Media" />
</div>
<TimelineFollows
postsOnly={true}
@ -78,7 +78,7 @@ export function NotificationsCol({ setThread }: { setThread: (e: NostrLink) => v
<div>
<div className="deck-col-header flex g8">
<Icon name="bell-solid" size={24} />
<FormattedMessage defaultMessage="Notifications" id="NAidKb" />
<FormattedMessage defaultMessage="Notifications" />
</div>
<div>
<NotificationsPage onClick={setThread} />

View File

@ -87,7 +87,7 @@ export function SnortDeckLayout() {
<div>
<Link to="/subscribe">
<button>
<FormattedMessage defaultMessage="Subscribe" id="gczcC5" />
<FormattedMessage defaultMessage="Subscribe" />
</button>
</Link>
</div>

View File

@ -80,7 +80,7 @@ const DonatePage = () => {
values={{
here: (
<Link to="/about" className="highlight underline">
<FormattedMessage defaultMessage="here" id="hniz8Z" />
<FormattedMessage defaultMessage="here" />
</Link>
),
}}
@ -89,7 +89,7 @@ const DonatePage = () => {
{CONFIG.chatChannels && (
<>
<h4>
<FormattedMessage defaultMessage="Public Chat Channels" id="rn52n9" />
<FormattedMessage defaultMessage="Public Chat Channels" />
</h4>
<div className="flex gap-2">
{CONFIG.chatChannels.map(a => {
@ -101,7 +101,7 @@ const DonatePage = () => {
window.open(a.value, "_blank", "noreferrer");
}}>
<img src={Telegram} width={24} height={24} />
<FormattedMessage defaultMessage="Telegram" id="TH1fFo" />
<FormattedMessage defaultMessage="Telegram" />
</AsyncButton>
);
}
@ -113,7 +113,7 @@ const DonatePage = () => {
navigate(`/messages/${id}`);
}}>
<img src={CONFIG.icon} width={24} height={24} className="rounded-full" />
<FormattedMessage defaultMessage="Nostr Public Chat" id="whSrs+" />
<FormattedMessage defaultMessage="Nostr Public Chat" />
</AsyncButton>
);
}
@ -123,14 +123,14 @@ const DonatePage = () => {
</>
)}
<h3>
<FormattedMessage defaultMessage="Donate" id="2IFGap" />
<FormattedMessage defaultMessage="Donate" />
</h3>
<div className="flex flex-col g12">
<div className="b br p">
<div className="flex items-center justify-between">
<FormattedMessage defaultMessage="Lightning Donation" id="C1LjMx" />
<FormattedMessage defaultMessage="Lightning Donation" />
<ZapButton pubkey={bech32ToHex(SnortPubKey)} lnurl={DonateLNURL}>
<FormattedMessage defaultMessage="Donate" id="2IFGap" />
<FormattedMessage defaultMessage="Donate" />
</ZapButton>
</div>
{today && (
@ -145,9 +145,9 @@ const DonatePage = () => {
</div>
<div className="b br p">
<div className="flex items-center justify-between">
<FormattedMessage defaultMessage="On-chain Donation" id="fqwcJ1" />
<FormattedMessage defaultMessage="On-chain Donation" />
<AsyncButton type="button" onClick={getOnChainAddress}>
<FormattedMessage defaultMessage="Get Address" id="bLZL5a" />
<FormattedMessage defaultMessage="Get Address" />
</AsyncButton>
</div>
</div>
@ -156,7 +156,7 @@ const DonatePage = () => {
<Modal onClose={() => setOnChain("")} id="donate-on-chain">
<div className="flex flex-col items-center g12">
<h2>
<FormattedMessage defaultMessage="On-chain Donation Address" id="EjFyoR" />
<FormattedMessage defaultMessage="On-chain Donation Address" />
</h2>
<QrCode data={onChain} link={`bitcoin:${onChain}`} />
<Copy text={onChain} />
@ -165,19 +165,19 @@ const DonatePage = () => {
)}
<ZapPoolDonateSection />
<h3>
<FormattedMessage defaultMessage="Primary Developers" id="4IPzdn" />
<FormattedMessage defaultMessage="Primary Developers" />
</h3>
{DeveloperAccounts.map(a => (
<ProfilePreview pubkey={a} key={a} actions={actions(a)} />
))}
<h4>
<FormattedMessage defaultMessage="Contributors" id="ZLmyG9" />
<FormattedMessage defaultMessage="Contributors" />
</h4>
{Contributors.map(a => (
<ProfilePreview pubkey={a} key={a} actions={actions(a)} />
))}
<h4>
<FormattedMessage defaultMessage="Translators" id="3gOsZq" />
<FormattedMessage defaultMessage="Translators" />
</h4>
{Translators.map(a => (
<ProfilePreview pubkey={a} key={a} actions={actions(a)} />

View File

@ -19,7 +19,7 @@ export function ZapPoolDonateSection() {
return (
<>
<h3>
<FormattedMessage defaultMessage="ZapPool" id="pRess9" />
<FormattedMessage defaultMessage="ZapPool" />
</h3>
<p>
<FormattedMessage
@ -29,7 +29,7 @@ export function ZapPoolDonateSection() {
</p>
<p>
<Link to="/zap-pool" className="underline">
<FormattedMessage defaultMessage="Configure zap pool" id="kqPQJD" />
<FormattedMessage defaultMessage="Configure zap pool" />
</Link>
</p>
<ZapPoolTarget

View File

@ -44,10 +44,10 @@ const ErrorPage = () => {
return (
<div className="p-2">
<h4>
<FormattedMessage defaultMessage="An error has occured!" id="FfYsOb" />
<FormattedMessage defaultMessage="An error has occured!" />
</h4>
<AsyncButton onClick={handleClearData}>
<FormattedMessage defaultMessage="Clear cache and reload" id="HWbkEK" />
<FormattedMessage defaultMessage="Clear cache and reload" />
</AsyncButton>
<h5>{error.message}</h5>
<div className="my-2">{error.message}</div>

View File

@ -8,7 +8,7 @@ export default function FreeNostrAddressPage() {
return (
<div className="main-content p">
<h2>
<FormattedMessage defaultMessage="Get a free nostr address" id="OQSOJF" />
<FormattedMessage defaultMessage="Get a free nostr address" />
</h2>
<p>
<FormattedMessage {...messages.Nip05} />

View File

@ -75,11 +75,11 @@ export function HashTagHeader({ tag, events, className }: { tag: string; events?
<AsyncButton
className="secondary"
onClick={() => state.removeFromList(EventKind.InterestsList, new NostrHashtagLink(tag), true)}>
<FormattedMessage defaultMessage="Unfollow" id="izWS4J" />
<FormattedMessage defaultMessage="Unfollow" />
</AsyncButton>
) : (
<AsyncButton onClick={() => state.addToList(EventKind.InterestsList, new NostrHashtagLink(tag), true)}>
<FormattedMessage defaultMessage="Follow" id="ieGrWo" />
<FormattedMessage defaultMessage="Follow" />
</AsyncButton>
)}
</div>

View File

@ -9,7 +9,7 @@ export default function HelpPage() {
return (
<>
<h2>
<FormattedMessage defaultMessage="NIP-05" id="7hp70g" />
<FormattedMessage defaultMessage="NIP-05" />
</h2>
<p>
<FormattedMessage

View File

@ -60,7 +60,7 @@ export function Header() {
const searchTerm = decodeURIComponent(location.pathname.split("/search/")[1]);
title = (
<>
<FormattedMessage defaultMessage="Search" id="xmcVZ0" />: {searchTerm}
<FormattedMessage defaultMessage="Search" />: {searchTerm}
</>
);
} else if (nostrLink) {
@ -116,12 +116,12 @@ function NoteTitle({ link }: { link: NostrLink }) {
}, [ev?.pubkey]);
if (!ev?.pubkey) {
return <FormattedMessage defaultMessage="Note" id="qMePPG" />;
return <FormattedMessage defaultMessage="Note" />;
}
return (
<>
<FormattedMessage defaultMessage="Note by {name}" id="ALdW69" values={values} />
<FormattedMessage defaultMessage="Note by {name}" values={values} />
</>
);
}

View File

@ -18,46 +18,46 @@ import { LogoHeader } from "./LogoHeader";
const MENU_ITEMS = [
{
label: <FormattedMessage defaultMessage="Home" id="ejEGdx" />,
label: <FormattedMessage defaultMessage="Home" />,
icon: "home",
link: "/",
nonLoggedIn: true,
},
{
label: <FormattedMessage defaultMessage="Search" id="xmcVZ0" />,
label: <FormattedMessage defaultMessage="Search" />,
icon: "search",
link: "/search",
nonLoggedIn: true,
},
{
label: <FormattedMessage defaultMessage="Notifications" id="NAidKb" />,
label: <FormattedMessage defaultMessage="Notifications" />,
icon: "bell",
link: "/notifications",
},
{
label: <FormattedMessage defaultMessage="Messages" id="hMzcSq" />,
label: <FormattedMessage defaultMessage="Messages" />,
icon: "mail",
link: "/messages",
hideReadOnly: true,
},
{
label: <FormattedMessage defaultMessage="Deck" id="o/gK53" />,
label: <FormattedMessage defaultMessage="Deck" />,
icon: "deck",
link: "/deck",
},
{
label: <FormattedMessage defaultMessage="Social Graph" id="CzHZoc" />,
label: <FormattedMessage defaultMessage="Social Graph" />,
icon: "graph",
link: "/graph",
},
{
label: <FormattedMessage defaultMessage="About" id="g5pX+a" />,
label: <FormattedMessage defaultMessage="About" />,
icon: "info",
link: "/donate",
nonLoggedIn: true,
},
{
label: <FormattedMessage defaultMessage="Settings" id="D3idYv" />,
label: <FormattedMessage defaultMessage="Settings" />,
icon: "settings",
link: "/settings",
},
@ -145,7 +145,7 @@ export default function NavSidebar({ narrow = false }: { narrow?: boolean }) {
<Icon name="sign-in" size={24} />
{!narrow && (
<span className="hidden xl:inline ml-3">
<FormattedMessage defaultMessage="Sign up" id="8HJxXG" />
<FormattedMessage defaultMessage="Sign up" />
</span>
)}
</button>
@ -163,7 +163,7 @@ export default function NavSidebar({ narrow = false }: { narrow?: boolean }) {
</ProfileLink>
{readonly && (
<div className="hidden xl:block text-nostr-red text-sm m-3">
<FormattedMessage defaultMessage="Read-only" id="djNL6D" />
<FormattedMessage defaultMessage="Read-only" />
</div>
)}
</>

View File

@ -13,9 +13,9 @@ export default function RightColumn() {
const getTitleMessage = () => {
return pubkey ? (
<FormattedMessage defaultMessage="Trending notes" id="6k7xfM" />
<FormattedMessage defaultMessage="Trending notes" />
) : (
<FormattedMessage defaultMessage="Trending hashtags" id="CbM2hK" />
<FormattedMessage defaultMessage="Trending hashtags" />
);
};

View File

@ -35,7 +35,7 @@ export const WalletBalance = () => {
<Icon name="dots" className="text-secondary" />
</div>
<div className="text-secondary text-sm">
<FormattedMessage defaultMessage="~{amount}" id="3QwfJR" values={msgValues} />
<FormattedMessage defaultMessage="~{amount}" values={msgValues} />
</div>
</div>
);

View File

@ -30,7 +30,7 @@ export function ListFeedPage() {
if (data.kind !== EventKind.ContactList && data.kind !== EventKind.FollowSet) {
return (
<b>
<FormattedMessage defaultMessage="Must be a contact list or pubkey list" id="vB3oQ/" />
<FormattedMessage defaultMessage="Must be a contact list or pubkey list" />
</b>
);
}

View File

@ -72,7 +72,7 @@ export default function DM(props: DMProps) {
{content ? (
<Text id={msg.id} content={content} tags={[]} creator={otherPubkey} />
) : (
<FormattedMessage defaultMessage="Loading..." id="gjBiyj" />
<FormattedMessage defaultMessage="Loading..." />
)}
</div>
<div className={isMe ? "text-end text-gray-400 text-sm mt-1" : "text-gray-400 text-sm mt-1"}>

View File

@ -21,7 +21,7 @@ export default function DmWindow({ id }: { id: string }) {
{chat.participants.map(v => (
<ProfileImage key={v.id} pubkey={v.id} showUsername={false} />
))}
{chat.title ?? <FormattedMessage defaultMessage="Secret Group Chat" id="+Vxixo" />}
{chat.title ?? <FormattedMessage defaultMessage="Secret Group Chat" />}
</div>
);
}

View File

@ -50,7 +50,7 @@ export default function MessagesPage() {
{cx.participants.map(v => (
<ProfileImage key={v.id} pubkey={v.id} link="" showUsername={false} profile={v.profile} />
))}
{cx.title ?? <FormattedMessage defaultMessage="Group Chat" id="eXT2QQ" />}
{cx.title ?? <FormattedMessage defaultMessage="Group Chat" />}
</div>
);
}
@ -87,7 +87,7 @@ export default function MessagesPage() {
<div className="overflow-y-auto md:h-screen p-1 w-full md:w-1/3 flex-shrink-0">
<div className="flex items-center justify-between p-2">
<button disabled={unreadCount <= 0} type="button" className="text-sm font-semibold">
<FormattedMessage defaultMessage="Mark all read" id="ShdEie" />
<FormattedMessage defaultMessage="Mark all read" />
</button>
<NewChatWindow />
</div>

View File

@ -67,15 +67,15 @@ export default function NewChatWindow() {
<div className="flex flex-col g16">
<div className="flex justify-between">
<h2>
<FormattedMessage defaultMessage="New Chat" id="UT7Nkj" />
<FormattedMessage defaultMessage="New Chat" />
</h2>
<button onClick={startChat}>
<FormattedMessage defaultMessage="Start chat" id="v8lolG" />
<FormattedMessage defaultMessage="Start chat" />
</button>
</div>
<div className="flex flex-col g8">
<h3>
<FormattedMessage defaultMessage="Search users" id="JjGgXI" />
<FormattedMessage defaultMessage="Search users" />
</h3>
<input
type="text"
@ -97,7 +97,7 @@ export default function NewChatWindow() {
</div>
<div>
<p>
<FormattedMessage defaultMessage="People you follow" id="R81upa" />
<FormattedMessage defaultMessage="People you follow" />
</p>
<div className="user-list flex flex-col g2">
{results.map(a => {

View File

@ -183,7 +183,7 @@ const NetworkGraph = () => {
setOpen(true);
refreshData();
}}>
<FormattedMessage defaultMessage="Show graph" id="ha8JKG" />
<FormattedMessage defaultMessage="Show graph" />
</button>
)}
{open && graphData && (

View File

@ -11,7 +11,7 @@ export default function NostrAddressPage() {
return (
<div className="main-content p">
<h2>
<FormattedMessage defaultMessage="Buy nostr address" id="MuVeKe" />
<FormattedMessage defaultMessage="Buy nostr address" />
</h2>
<p>
<FormattedMessage {...messages.Nip05} />

View File

@ -67,7 +67,7 @@ export default function NostrLinkHandler() {
<Spinner width={50} height={50} />
) : (
<b className="error">
<FormattedMessage defaultMessage="Nothing found :/" id="oJ+JJN" />
<FormattedMessage defaultMessage="Nothing found :/" />
</b>
)}
</div>

View File

@ -41,11 +41,11 @@ export default function NotificationSummary({ evs }: { evs: Array<TaggedNostrEve
const periodTabs = [
{
value: NotificationSummaryPeriod.Daily,
text: <FormattedMessage defaultMessage="Daily" id="zxvhnE" />,
text: <FormattedMessage defaultMessage="Daily" />,
},
{
value: NotificationSummaryPeriod.Weekly,
text: <FormattedMessage defaultMessage="Weekly" id="/clOBU" />,
text: <FormattedMessage defaultMessage="Weekly" />,
},
] as Array<Tab>;
@ -114,7 +114,7 @@ export default function NotificationSummary({ evs }: { evs: Array<TaggedNostrEve
<div className="flex flex-col g12 p bb">
<div className="flex justify-between">
<h2>
<FormattedMessage defaultMessage="Summary" id="PJeJFc" description="Notifications summary" />
<FormattedMessage defaultMessage="Summary" />
</h2>
<div className="flex items-center g8">
{filterIcon(NotificationSummaryFilter.Reactions, "heart-solid", "text-heart")}

View File

@ -58,12 +58,12 @@ const AvatarSection = ({
<>
<Link className="md:hidden" to="/settings">
<button>
<FormattedMessage defaultMessage="Settings" id="D3idYv" />
<FormattedMessage defaultMessage="Settings" />
</button>
</Link>
<Link className="hidden md:inline" to="/settings/profile">
<button>
<FormattedMessage defaultMessage="Edit" id="wEQDC6" />
<FormattedMessage defaultMessage="Edit" />
</button>
</Link>
</>

View File

@ -9,7 +9,7 @@ const ProfileTabSelectors = {
text: (
<>
<Icon name="pencil" size={16} />
<FormattedMessage defaultMessage="Notes" id="7+Domh" />
<FormattedMessage defaultMessage="Notes" />
</>
),
value: ProfileTabType.NOTES,
@ -18,7 +18,7 @@ const ProfileTabSelectors = {
text: (
<>
<Icon name="heart-solid" size={16} />
<FormattedMessage defaultMessage="Reactions" id="XgWvGA" />
<FormattedMessage defaultMessage="Reactions" />
</>
),
value: ProfileTabType.REACTIONS,
@ -27,7 +27,7 @@ const ProfileTabSelectors = {
text: (
<>
<Icon name="user-v2" size={16} />
<FormattedMessage defaultMessage="Followers" id="pzTOmv" />
<FormattedMessage defaultMessage="Followers" />
</>
),
value: ProfileTabType.FOLLOWERS,
@ -36,7 +36,7 @@ const ProfileTabSelectors = {
text: (
<>
<Icon name="stars" size={16} />
<FormattedMessage defaultMessage="Follows" id="IKKHqV" />
<FormattedMessage defaultMessage="Follows" />
</>
),
value: ProfileTabType.FOLLOWS,
@ -45,7 +45,7 @@ const ProfileTabSelectors = {
text: (
<>
<Icon name="zap-solid" size={16} />
<FormattedMessage defaultMessage="Zaps" id="OEW7yJ" />
<FormattedMessage defaultMessage="Zaps" />
</>
),
value: ProfileTabType.ZAPS,
@ -54,7 +54,7 @@ const ProfileTabSelectors = {
text: (
<>
<Icon name="mute" size={16} />
<FormattedMessage defaultMessage="Muted" id="HOzFdo" />
<FormattedMessage defaultMessage="Muted" />
</>
),
value: ProfileTabType.MUTED,
@ -63,7 +63,7 @@ const ProfileTabSelectors = {
text: (
<>
<Icon name="block" size={16} />
<FormattedMessage defaultMessage="Blocked" id="qUJTsT" />
<FormattedMessage defaultMessage="Blocked" />
</>
),
value: ProfileTabType.BLOCKED,
@ -72,7 +72,7 @@ const ProfileTabSelectors = {
text: (
<>
<Icon name="wifi" size={16} />
<FormattedMessage defaultMessage="Relays" id="RoOyAh" />
<FormattedMessage defaultMessage="Relays" />
</>
),
value: ProfileTabType.RELAYS,
@ -81,7 +81,7 @@ const ProfileTabSelectors = {
text: (
<>
<Icon name="bookmark-solid" size={16} />
<FormattedMessage defaultMessage="Bookmarks" id="nGBrvw" />
<FormattedMessage defaultMessage="Bookmarks" />
</>
),
value: ProfileTabType.BOOKMARKS,

View File

@ -45,7 +45,7 @@ export function ZapPoolPageInner() {
return (
<div className="zap-pool main-content p">
<h1>
<FormattedMessage defaultMessage="Zap Pool" id="i/dBAR" />
<FormattedMessage defaultMessage="Zap Pool" />
</h1>
<p>
<FormattedMessage
@ -110,7 +110,7 @@ export function ZapPoolPageInner() {
trackEvent("ZapPool", { manual: true });
await ZapPoolController?.payout(wallet);
}}>
<FormattedMessage defaultMessage="Payout Now" id="+PzQ9Y" />
<FormattedMessage defaultMessage="Payout Now" />
</AsyncButton>
)}
</p>
@ -127,7 +127,7 @@ export function ZapPoolPageInner() {
/>
</div>
<h3>
<FormattedMessage defaultMessage="Relays" id="RoOyAh" />
<FormattedMessage defaultMessage="Relays" />
</h3>
{relayConnections.map(a => (
<div key={a.address}>
@ -145,7 +145,7 @@ export function ZapPoolPageInner() {
</div>
))}
<h3>
<FormattedMessage defaultMessage="File hosts" id="XICsE8" />
<FormattedMessage defaultMessage="File hosts" />
</h3>
{UploaderServices.map(a => (
<div key={a.name}>
@ -163,7 +163,7 @@ export function ZapPoolPageInner() {
</div>
))}
<h3>
<FormattedMessage defaultMessage="Data Providers" id="ELbg9p" />
<FormattedMessage defaultMessage="Data Providers" />
</h3>
{DataProviders.map(a => (
<div key={a.name}>

View File

@ -17,7 +17,7 @@ function ZapPoolTargetInner({ target }: { target: ZapPoolRecipient }) {
<div>
<div>
<FormattedNumber value={target.split} />% (
<FormattedMessage defaultMessage="{n} sats" id="CsCUYo" values={{ n: defaultZapMount }} />)
<FormattedMessage defaultMessage="{n} sats" values={{ n: defaultZapMount }} />)
</div>
<input
type="range"
@ -34,7 +34,7 @@ function ZapPoolTargetInner({ target }: { target: ZapPoolRecipient }) {
/>
</div>
) : (
<FormattedMessage defaultMessage="No lightning address" id="JPFYIM" />
<FormattedMessage defaultMessage="No lightning address" />
)
}
/>

View File

@ -26,7 +26,7 @@ export function Discover() {
<TrendingUsers
title={
<h3>
<FormattedMessage defaultMessage="Trending Users" id="FSYL8G" />
<FormattedMessage defaultMessage="Trending Users" />
</h3>
}
/>
@ -38,7 +38,7 @@ export function Discover() {
state,
})
}>
<FormattedMessage defaultMessage="Next" id="9+Ddtu" />
<FormattedMessage defaultMessage="Next" />
</AsyncButton>
</div>
);

View File

@ -12,7 +12,7 @@ export const FixedModeration = {
canEdit: false,
},*/
nsfw: {
title: <FormattedMessage defaultMessage="NSFW" id="w6qrwX" />,
title: <FormattedMessage defaultMessage="NSFW" />,
words: [
"adult content",
"explicit",
@ -39,7 +39,7 @@ export const FixedModeration = {
canEdit: false,
},
crypto: {
title: <FormattedMessage defaultMessage="Crypto" id="TdtZQ5" />,
title: <FormattedMessage defaultMessage="Crypto" />,
words: [
"bitcoin",
"btc",
@ -67,7 +67,7 @@ export const FixedModeration = {
canEdit: false,
},
politics: {
title: <FormattedMessage defaultMessage="Politics" id="0siT4z" />,
title: <FormattedMessage defaultMessage="Politics" />,
words: [
"politics",
"election",

View File

@ -2,7 +2,7 @@ import { FormattedMessage } from "react-intl";
export const FixedTopics = {
life: {
text: <FormattedMessage defaultMessage="Life" id="4MjsHk" />,
text: <FormattedMessage defaultMessage="Life" />,
tags: [
"life",
"lifestyle",
@ -37,7 +37,7 @@ export const FixedTopics = {
],
},
science: {
text: <FormattedMessage defaultMessage="Science" id="qydxOd" />,
text: <FormattedMessage defaultMessage="Science" />,
tags: [
"science",
"research",
@ -72,7 +72,7 @@ export const FixedTopics = {
],
},
nature: {
text: <FormattedMessage defaultMessage="Nature" id="1ozeyg" />,
text: <FormattedMessage defaultMessage="Nature" />,
tags: [
"nature",
"wildlife",
@ -107,7 +107,7 @@ export const FixedTopics = {
],
},
business: {
text: <FormattedMessage defaultMessage="Business" id="w1Fanr" />,
text: <FormattedMessage defaultMessage="Business" />,
tags: [
"business",
"entrepreneurship",
@ -142,7 +142,7 @@ export const FixedTopics = {
],
},
game: {
text: <FormattedMessage defaultMessage="Game" id="Am8glJ" />,
text: <FormattedMessage defaultMessage="Game" />,
tags: [
"gaming",
"videogames",
@ -177,7 +177,7 @@ export const FixedTopics = {
],
},
sport: {
text: <FormattedMessage defaultMessage="Sport" id="JIVWWA" />,
text: <FormattedMessage defaultMessage="Sport" />,
tags: [
"sports",
"athletics",
@ -212,7 +212,7 @@ export const FixedTopics = {
],
},
photography: {
text: <FormattedMessage defaultMessage="Photography" id="cHCwbF" />,
text: <FormattedMessage defaultMessage="Photography" />,
tags: [
"photography",
"landscape",

View File

@ -21,17 +21,17 @@ export function Moderation() {
<div className="flex flex-col g24">
<div className="flex flex-col g8 text-center">
<h1>
<FormattedMessage defaultMessage="Clean up your feed" id="jHa/ko" />
<FormattedMessage defaultMessage="Clean up your feed" />
</h1>
<FormattedMessage defaultMessage="Your space the way you want it 😌" id="/B8zwF" />
<FormattedMessage defaultMessage="Your space the way you want it 😌" />
</div>
<div className="flex flex-col g8">
<div className="flex g8 items-center">
<small className="grow uppercase font-semibold">
<FormattedMessage defaultMessage="Lists to mute:" id="d+6YsV" />
<FormattedMessage defaultMessage="Lists to mute:" />
</small>
<span className="font-medium">
<FormattedMessage defaultMessage="Toggle all" id="Dx4ey3" />
<FormattedMessage defaultMessage="Toggle all" />
</span>
<ToggleSwitch
size={50}
@ -48,7 +48,7 @@ export function Moderation() {
<div className="font-semibold grow">{v.title}</div>
{v.canEdit && (
<div>
<FormattedMessage defaultMessage="edit" id="+vj0U3" />
<FormattedMessage defaultMessage="edit" />
</div>
)}
<ToggleSwitch
@ -61,10 +61,10 @@ export function Moderation() {
</div>
<div className="flex flex-col g8">
<span className="font-semibold">
<FormattedMessage defaultMessage="Additional Terms:" id="xl4s/X" />
<FormattedMessage defaultMessage="Additional Terms:" />
</span>
<small className="font-medium">
<FormattedMessage defaultMessage="Use commas to separate words e.g. word1, word2, word3" id="J2HeQ+" />
<FormattedMessage defaultMessage="Use commas to separate words e.g. word1, word2, word3" />
</small>
<textarea onChange={e => setExtraTerms(e.target.value)} value={extraTerms}></textarea>
</div>
@ -89,7 +89,7 @@ export function Moderation() {
}
navigate("/");
}}>
<FormattedMessage defaultMessage="Finish" id="2O2sfp" />
<FormattedMessage defaultMessage="Finish" />
</AsyncButton>
</div>
);

View File

@ -38,11 +38,11 @@ export function Profile() {
return (
<div className="flex flex-col g24 text-center">
<h1>
<FormattedMessage defaultMessage="Profile Image" id="vN5UH8" />
<FormattedMessage defaultMessage="Profile Image" />
</h1>
<AvatarEditor picture={picture} onPictureChange={p => setPicture(p)} />
<AsyncButton className="primary" onClick={() => makeRandomKey()}>
<FormattedMessage defaultMessage="Next" id="9+Ddtu" />
<FormattedMessage defaultMessage="Next" />
</AsyncButton>
{error && <b className="error">{error}</b>}
</div>

View File

@ -75,9 +75,9 @@ export function SignIn() {
<img src={CONFIG.icon} width={48} height={48} className="br mr-auto ml-auto" />
<div className="flex flex-col g16 items-center">
<h1>
<FormattedMessage defaultMessage="Sign In" id="Ub+AGc" />
<FormattedMessage defaultMessage="Sign In" />
</h1>
{nip7Login && <FormattedMessage defaultMessage="Use a nostr signer extension to sign in" id="eF0Re7" />}
{nip7Login && <FormattedMessage defaultMessage="Use a nostr signer extension to sign in" />}
</div>
<div className={classNames("flex flex-col g16", { "items-center": nip7Login })}>
{hasNip7 && !useKey && (
@ -86,13 +86,13 @@ export function SignIn() {
<div className="circle bg-warning p12 text-white">
<Icon name="key" />
</div>
<FormattedMessage defaultMessage="Sign in with Nostr Extension" id="TaeBqw" />
<FormattedMessage defaultMessage="Sign in with Nostr Extension" />
</AsyncButton>
<Link to="" className="highlight">
<FormattedMessage defaultMessage="Supported Extensions" id="aMaLBK" />
<FormattedMessage defaultMessage="Supported Extensions" />
</Link>
<AsyncButton onClick={() => setUseKey(true)}>
<FormattedMessage defaultMessage="Sign in with key" id="X6tipZ" />
<FormattedMessage defaultMessage="Sign in with key" />
</AsyncButton>
</>
)}
@ -111,7 +111,7 @@ export function SignIn() {
{error && <b className="error">{error}</b>}
<div className="flex justify-center">
<AsyncButton onClick={onSubmit} className="primary">
<FormattedMessage defaultMessage="Login" id="AyGauy" />
<FormattedMessage defaultMessage="Login" />
</AsyncButton>
</div>
</form>
@ -119,10 +119,10 @@ export function SignIn() {
</div>
<div className="flex flex-col g16 items-center">
<Link to={"/login/sign-up"}>
<FormattedMessage defaultMessage="Don't have an account?" id="25WwxF" />
<FormattedMessage defaultMessage="Don't have an account?" />
</Link>
<AsyncButton className="secondary" onClick={() => navigate("/login/sign-up")}>
<FormattedMessage defaultMessage="Sign Up" id="39AHJm" />
<FormattedMessage defaultMessage="Sign Up" />
</AsyncButton>
</div>
</div>
@ -166,9 +166,9 @@ export function SignUp() {
<img src={CONFIG.icon} width={48} height={48} className="br mr-auto ml-auto" />
<div className="flex flex-col g16 items-center">
<h1>
<FormattedMessage defaultMessage="Sign Up" id="39AHJm" />
<FormattedMessage defaultMessage="Sign Up" />
</h1>
<FormattedMessage defaultMessage="What should we call you?" id="SmuYUd" />
<FormattedMessage defaultMessage="What should we call you?" />
</div>
<form onSubmit={onSubmit} className="flex flex-col g16">
<input
@ -190,16 +190,16 @@ export function SignUp() {
id="0zASjL"
/>
) : (
<FormattedMessage defaultMessage="Next" id="9+Ddtu" />
<FormattedMessage defaultMessage="Next" />
)}
</AsyncButton>
</form>
<div className="flex flex-col g16 items-center">
<Link to={"/login"}>
<FormattedMessage defaultMessage="Already have an account?" id="uCk8r+" />
<FormattedMessage defaultMessage="Already have an account?" />
</Link>
<AsyncButton className="secondary" onClick={() => navigate("/login")}>
<FormattedMessage defaultMessage="Sign In" id="Ub+AGc" />
<FormattedMessage defaultMessage="Sign In" />
</AsyncButton>
</div>
</div>

View File

@ -28,7 +28,7 @@ export function Topics() {
return (
<div className="flex flex-col g24 text-center">
<h1>
<FormattedMessage defaultMessage="Pick a few topics of interest" id="fX5RYm" />
<FormattedMessage defaultMessage="Pick a few topics of interest" />
</h1>
<div className="tabs flex-wrap justify-center">{Object.entries(FixedTopics).map(([k, v]) => tab(k, v.text))}</div>
<AsyncButton
@ -51,7 +51,7 @@ export function Topics() {
}
navigate("/login/sign-up/discover");
}}>
<FormattedMessage defaultMessage="Next" id="9+Ddtu" />
<FormattedMessage defaultMessage="Next" />
</AsyncButton>
</div>
);

View File

@ -12,7 +12,7 @@ export default function AccountsPage() {
return (
<div className="flex flex-col g12">
<h3>
<FormattedMessage defaultMessage="Logins" id="+vA//S" />
<FormattedMessage defaultMessage="Logins" />
</h3>
{logins.map(a => (
<div className="card flex" key={a.id}>
@ -24,10 +24,10 @@ export default function AccountsPage() {
actions={
<div className="flex-1">
<button className="mb10" onClick={() => LoginStore.switchAccount(a.id)}>
<FormattedMessage defaultMessage="Switch" id="n1Whvj" />
<FormattedMessage defaultMessage="Switch" />
</button>
<button onClick={() => LoginStore.removeSession(a.id)}>
<FormattedMessage defaultMessage="Logout" id="C81/uG" />
<FormattedMessage defaultMessage="Logout" />
</button>
</div>
}
@ -38,7 +38,7 @@ export default function AccountsPage() {
{sub && (
<Link to={"/login"}>
<button type="button">
<FormattedMessage defaultMessage="Add Account" id="F3l7xL" />
<FormattedMessage defaultMessage="Add Account" />
</button>
</Link>
)}

View File

@ -10,11 +10,11 @@ export function CacheSettings() {
return (
<div className="flex flex-col g8">
<h3>
<FormattedMessage defaultMessage="Cache" id="DBiVK1" />
<FormattedMessage defaultMessage="Cache" />
</h3>
<RelayCacheStats />
<CacheDetails cache={RelayMetrics} name={<FormattedMessage defaultMessage="Relay Metrics" id="tjpYlr" />} />
<CacheDetails cache={GiftsCache} name={<FormattedMessage defaultMessage="Gift Wraps" id="fjAcWo" />} />
<CacheDetails cache={RelayMetrics} name={<FormattedMessage defaultMessage="Relay Metrics" />} />
<CacheDetails cache={GiftsCache} name={<FormattedMessage defaultMessage="Gift Wraps" />} />
</div>
);
}
@ -42,7 +42,7 @@ function CacheDetails<T>({ cache, name }: { cache: FeedCache<T>; name: ReactNode
</div>
<div>
<AsyncButton onClick={() => cache.clear()}>
<FormattedMessage defaultMessage="Clear" id="/GCoTA" />
<FormattedMessage defaultMessage="Clear" />
</AsyncButton>
</div>
</div>
@ -64,7 +64,7 @@ function RelayCacheStats() {
return (
<div className="flex justify-between br p bg-superdark">
<div className="flex flex-col g4 w-64">
<FormattedMessage defaultMessage="Worker Relay" id="xSoIUU" />
<FormattedMessage defaultMessage="Worker Relay" />
{myEvents && (
<p>
<FormattedMessage
@ -80,10 +80,10 @@ function RelayCacheStats() {
<thead>
<tr>
<th className="text-left">
<FormattedMessage defaultMessage="Kind" id="e5x8FT" />
<FormattedMessage defaultMessage="Kind" />
</th>
<th className="text-left">
<FormattedMessage defaultMessage="Count" id="Aujn2T" />
<FormattedMessage defaultMessage="Count" />
</th>
</tr>
</thead>
@ -107,7 +107,7 @@ function RelayCacheStats() {
</div>
<div className="flex flex-col gap-2">
<AsyncButton onClick={() => {}}>
<FormattedMessage defaultMessage="Clear" id="/GCoTA" />
<FormattedMessage defaultMessage="Clear" />
</AsyncButton>
<AsyncButton
onClick={async () => {
@ -122,7 +122,7 @@ function RelayCacheStats() {
a.download = "snort.db";
a.click();
}}>
<FormattedMessage defaultMessage="Dump" id="f2CAxA" />
<FormattedMessage defaultMessage="Dump" />
</AsyncButton>
</div>
</div>

View File

@ -14,7 +14,7 @@ export default function ExportKeys() {
return (
<div className="flex flex-col g12">
<div className="text-xl">
<FormattedMessage defaultMessage="Public Key" id="bep9C3" />
<FormattedMessage defaultMessage="Public Key" />
</div>
<small>
<FormattedMessage
@ -27,7 +27,7 @@ export default function ExportKeys() {
{privateKeyData instanceof KeyStorage && (
<>
<div className="text-xl">
<FormattedMessage defaultMessage="Private Key" id="JymXbw" />
<FormattedMessage defaultMessage="Private Key" />
</div>
<small>
<FormattedMessage
@ -41,7 +41,7 @@ export default function ExportKeys() {
{generatedEntropy && (
<>
<div className="text-xl">
<FormattedMessage defaultMessage="Mnemonic" id="b12Goz" />
<FormattedMessage defaultMessage="Mnemonic" />
</div>
<div className="mnemonic-grid">
{hexToMnemonic(generatedEntropy ?? "")

View File

@ -30,18 +30,18 @@ const SettingsIndex = () => {
const settingsGroups = [
{
title: <FormattedMessage id="TwyMau" defaultMessage="Account" />,
title: <FormattedMessage />,
items: [
{
icon: "profile",
iconBg: "bg-green-500",
message: <FormattedMessage id="itPgxd" defaultMessage="Profile" />,
message: <FormattedMessage />,
path: "profile",
},
{
icon: "key",
iconBg: "bg-amber-500",
message: <FormattedMessage id="08zn6O" defaultMessage="Export Keys" />,
message: <FormattedMessage />,
path: "keys",
},
...(CONFIG.features.nostrAddress
@ -49,7 +49,7 @@ const SettingsIndex = () => {
{
icon: "badge",
iconBg: "bg-pink-500",
message: <FormattedMessage id="9pMqYs" defaultMessage="Nostr Address" />,
message: <FormattedMessage />,
path: "handle",
},
]
@ -57,13 +57,13 @@ const SettingsIndex = () => {
{
icon: "gear",
iconBg: "bg-slate-500",
message: <FormattedMessage id="PCSt5T" defaultMessage="Preferences" />,
message: <FormattedMessage />,
path: "preferences",
},
{
icon: "wallet",
iconBg: "bg-emerald-500",
message: <FormattedMessage id="3yk8fB" defaultMessage="Wallet" />,
message: <FormattedMessage />,
path: "wallet",
},
...(sub
@ -71,7 +71,7 @@ const SettingsIndex = () => {
{
icon: "code-circle",
iconBg: "bg-indigo-500",
message: <FormattedMessage id="FvanT6" defaultMessage="Accounts" />,
message: <FormattedMessage />,
path: "accounts",
},
]
@ -79,24 +79,24 @@ const SettingsIndex = () => {
{
icon: "tool",
iconBg: "bg-slate-800",
message: <FormattedMessage defaultMessage="Tools" id="nUT0Lv" />,
message: <FormattedMessage defaultMessage="Tools" />,
path: "tools",
},
],
},
{
title: <FormattedMessage id="hvFRBo" defaultMessage="Interaction" />,
title: <FormattedMessage />,
items: [
{
icon: "relay",
iconBg: "bg-dark bg-opacity-20",
message: <FormattedMessage id="RoOyAh" defaultMessage="Relays" />,
message: <FormattedMessage />,
path: "relays",
},
{
icon: "shield-tick",
iconBg: "bg-yellow-500",
message: <FormattedMessage id="wofVHy" defaultMessage="Moderation" />,
message: <FormattedMessage />,
path: "moderation",
},
...(CONFIG.features.pushNotifications
@ -104,7 +104,7 @@ const SettingsIndex = () => {
{
icon: "bell-outline",
iconBg: "bg-red-500",
message: <FormattedMessage id="NAidKb" defaultMessage="Notifications" />,
message: <FormattedMessage />,
path: "notifications",
},
]
@ -114,7 +114,7 @@ const SettingsIndex = () => {
{
icon: "link",
iconBg: "bg-blue-500",
message: <FormattedMessage id="hYOE+U" defaultMessage="Invite" />,
message: <FormattedMessage />,
path: "invite",
},
]
@ -122,18 +122,18 @@ const SettingsIndex = () => {
{
icon: "hard-drive",
iconBg: "bg-cyan-500",
message: <FormattedMessage id="DBiVK1" defaultMessage="Cache" />,
message: <FormattedMessage />,
path: "cache",
},
],
},
{
title: <FormattedMessage id="HqRNN8" defaultMessage="Support" />,
title: <FormattedMessage />,
items: [
{
icon: "heart",
iconBg: "bg-purple-500",
message: <FormattedMessage id="2IFGap" defaultMessage="Donate" />,
message: <FormattedMessage />,
path: "/donate",
},
...(CONFIG.features.subscriptions
@ -141,7 +141,7 @@ const SettingsIndex = () => {
{
icon: "diamond",
iconBg: "bg-violet-500",
message: <FormattedMessage id="R/6nsx" defaultMessage="Subscription" />,
message: <FormattedMessage />,
path: "/subscribe/manage",
},
]
@ -151,7 +151,7 @@ const SettingsIndex = () => {
{
icon: "piggy-bank",
iconBg: "bg-rose-500",
message: <FormattedMessage id="i/dBAR" defaultMessage="Zap Pool" />,
message: <FormattedMessage />,
path: "/zap-pool",
},
]
@ -159,12 +159,12 @@ const SettingsIndex = () => {
],
},
{
title: <FormattedMessage id="H0JBH6" defaultMessage="Log Out" />,
title: <FormattedMessage />,
items: [
{
icon: "logout",
iconBg: "bg-red-500",
message: <FormattedMessage id="H0JBH6" defaultMessage="Log Out" />,
message: <FormattedMessage />,
action: handleLogout,
},
],

View File

@ -13,7 +13,7 @@ export default function ModerationSettingsPage() {
return (
<>
<h2>
<FormattedMessage defaultMessage="Moderation" id="wofVHy" />
<FormattedMessage defaultMessage="Moderation" />
</h2>
<div className="py-4 flex flex-col gap-2">
@ -31,13 +31,13 @@ export default function ModerationSettingsPage() {
id="showContentWarningPosts"
/>
<label htmlFor="showContentWarningPosts">
<FormattedMessage defaultMessage="Show posts that have a content warning tag" id="fQN+tq" />
<FormattedMessage defaultMessage="Show posts that have a content warning tag" />
</label>
</div>
</div>
<h3>
<FormattedMessage defaultMessage="Muted Words" id="AN0Z7Q" />
<FormattedMessage defaultMessage="Muted Words" />
</h3>
<div className="flex flex-col g12">
<div className="flex g8">
@ -53,14 +53,14 @@ export default function ModerationSettingsPage() {
await addMutedWord(muteWord);
setMuteWord("");
}}>
<FormattedMessage defaultMessage="Add" id="2/2yg+" />
<FormattedMessage defaultMessage="Add" />
</AsyncButton>
</div>
{getMutedWords().map(v => (
<div key={v} className="p br b flex items-center justify-between">
<div>{v}</div>
<AsyncButton onClick={() => removeMutedWord(v)}>
<FormattedMessage defaultMessage="Delete" id="K3r6DQ" />
<FormattedMessage defaultMessage="Delete" />
</AsyncButton>
</div>
))}

View File

@ -81,11 +81,11 @@ const PreferencesPage = () => {
return (
<div className="flex flex-col">
<h3>
<FormattedMessage defaultMessage="Notifications" id="NAidKb" />
<FormattedMessage defaultMessage="Notifications" />
</h3>
<h4>
<FormattedMessage defaultMessage="Push notifications" id="Awq32I" />
<FormattedMessage defaultMessage="Push notifications" />
</h4>
<div className="flex flex-col space-y-4">
@ -107,7 +107,7 @@ const PreferencesPage = () => {
/>
{hasNotificationsApi && !notificationsAllowed && (
<button onClick={requestNotificationPermission}>
<FormattedMessage defaultMessage="Allow" id="y/bmsG" />
<FormattedMessage defaultMessage="Allow" />
</button>
)}
</div>
@ -124,7 +124,7 @@ const PreferencesPage = () => {
/>
{allGood && !subscribedToPush && (
<button onClick={trySubscribePush}>
<FormattedMessage defaultMessage="Subscribe" id="gczcC5" />
<FormattedMessage defaultMessage="Subscribe" />
</button>
)}
</div>

View File

@ -34,15 +34,15 @@ const PreferencesPage = () => {
return (
<div className="preferences flex flex-col g24">
<h3>
<FormattedMessage defaultMessage="Preferences" id="PCSt5T" />
<FormattedMessage defaultMessage="Preferences" />
</h3>
<AsyncButton onClick={() => update(pref)}>
<FormattedMessage defaultMessage="Save" id="jvo0vs" />
<FormattedMessage defaultMessage="Save" />
</AsyncButton>
{error && <b className="warning">{error}</b>}
<div className="flex justify-between w-max">
<h4>
<FormattedMessage defaultMessage="Language" id="y1Z3or" />
<FormattedMessage defaultMessage="Language" />
</h4>
<div>
<select
@ -103,10 +103,10 @@ const PreferencesPage = () => {
} as UserPreferences)
}>
<option value="for-you">
<FormattedMessage defaultMessage="For you" id="xEjBS7" />
<FormattedMessage defaultMessage="For you" />
</option>
<option value="following">
<FormattedMessage defaultMessage="Notes" id="7+Domh" />
<FormattedMessage defaultMessage="Notes" />
</option>
<option value="conversations">
<FormattedMessage {...messages.Conversations} />
@ -120,10 +120,10 @@ const PreferencesPage = () => {
<div className="flex justify-between w-max">
<div className="flex flex-col g8">
<h4>
<FormattedMessage defaultMessage="Send usage metrics" id="XECMfW" />
<FormattedMessage defaultMessage="Send usage metrics" />
</h4>
<small>
<FormattedMessage defaultMessage="Send anonymous usage metrics" id="/Xf4UW" />
<FormattedMessage defaultMessage="Send anonymous usage metrics" />
</small>
</div>
<div>
@ -168,10 +168,10 @@ const PreferencesPage = () => {
<div className="flex justify-between w-max">
<div className="flex flex-col g8">
<h4>
<FormattedMessage defaultMessage="Check Signatures" id="1o2BgB" />
<FormattedMessage defaultMessage="Check Signatures" />
</h4>
<small>
<FormattedMessage defaultMessage="Check all event signatures received from relays" id="UNjfWJ" />
<FormattedMessage defaultMessage="Check all event signatures received from relays" />
</small>
</div>
<div>
@ -185,10 +185,10 @@ const PreferencesPage = () => {
<div className="flex justify-between w-max">
<div className="flex flex-col g8">
<h4>
<FormattedMessage defaultMessage="Auto Translate" id="IWz1ta" />
<FormattedMessage defaultMessage="Auto Translate" />
</h4>
<small>
<FormattedMessage defaultMessage="Automatically translate notes to your local language" id="WmZhfL" />
<FormattedMessage defaultMessage="Automatically translate notes to your local language" />
</small>
</div>
<div>
@ -202,10 +202,10 @@ const PreferencesPage = () => {
<div className="flex justify-between w-max">
<div className="flex flex-col g8">
<h4>
<FormattedMessage defaultMessage="Proof of Work" id="grQ+mI" />
<FormattedMessage defaultMessage="Proof of Work" />
</h4>
<small>
<FormattedMessage defaultMessage="Amount of work to apply to all published events" id="vxwnbh" />
<FormattedMessage defaultMessage="Amount of work to apply to all published events" />
</small>
</div>
<div>
@ -219,7 +219,7 @@ const PreferencesPage = () => {
</div>
<div className="flex justify-between w-max">
<h4>
<FormattedMessage defaultMessage="Default Zap amount" id="qMx1sA" />
<FormattedMessage defaultMessage="Default Zap amount" />
</h4>
<div>
<input
@ -233,10 +233,10 @@ const PreferencesPage = () => {
<div className="flex justify-between w-max">
<div className="flex flex-col g8">
<h4>
<FormattedMessage defaultMessage="Show Badges" id="sKDn4e" />
<FormattedMessage defaultMessage="Show Badges" />
</h4>
<small>
<FormattedMessage defaultMessage="Show badges on profile pages" id="EQKRE4" />
<FormattedMessage defaultMessage="Show badges on profile pages" />
</small>
</div>
<div>
@ -250,10 +250,10 @@ const PreferencesPage = () => {
<div className="flex justify-between w-max">
<div className="flex flex-col g8">
<h4>
<FormattedMessage defaultMessage="Show Status" id="0uoY11" />
<FormattedMessage defaultMessage="Show Status" />
</h4>
<small>
<FormattedMessage defaultMessage="Show status messages on profile pages" id="FMfjrl" />
<FormattedMessage defaultMessage="Show status messages on profile pages" />
</small>
</div>
<div>
@ -267,10 +267,10 @@ const PreferencesPage = () => {
<div className="flex justify-between w-max">
<div className="flex flex-col g8">
<h4>
<FormattedMessage defaultMessage="Auto Zap" id="Dh3hbq" />
<FormattedMessage defaultMessage="Auto Zap" />
</h4>
<small>
<FormattedMessage defaultMessage="Automatically zap every note when loaded" id="D+KzKd" />
<FormattedMessage defaultMessage="Automatically zap every note when loaded" />
</small>
</div>
<div>
@ -498,10 +498,10 @@ const PreferencesPage = () => {
<div className="flex justify-between">
<div className="flex flex-col g8">
<h4>
<FormattedMessage defaultMessage="Hide muted notes" id="9kO0VQ" />
<FormattedMessage defaultMessage="Hide muted notes" />
</h4>
<small>
<FormattedMessage defaultMessage="Muted notes will not be shown" id="sfL/O+" />
<FormattedMessage defaultMessage="Muted notes will not be shown" />
</small>
</div>
<div>
@ -513,7 +513,7 @@ const PreferencesPage = () => {
</div>
</div>
<AsyncButton onClick={() => update(pref)}>
<FormattedMessage defaultMessage="Save" id="jvo0vs" />
<FormattedMessage defaultMessage="Save" />
</AsyncButton>
{error && <b className="error">{error}</b>}
</div>

View File

@ -224,7 +224,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
<div className="flex flex-col g24">
<div className="flex flex-col w-max g8">
<h4>
<FormattedMessage defaultMessage="Name" id="HAlOn1" />
<FormattedMessage defaultMessage="Name" />
</h4>
<input
className="w-max"
@ -238,7 +238,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
</div>
<div className="flex flex-col w-max g8">
<h4>
<FormattedMessage defaultMessage="About" id="g5pX+a" />
<FormattedMessage defaultMessage="About" />
</h4>
<textarea
className="w-max"
@ -250,7 +250,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
</div>
<div className="flex flex-col w-max g8">
<h4>
<FormattedMessage defaultMessage="Website" id="JkLHGw" />
<FormattedMessage defaultMessage="Website" />
</h4>
<input
className="w-max"
@ -262,7 +262,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
</div>
<div className="flex flex-col w-max g8">
<h4>
<FormattedMessage defaultMessage="Nostr Address" id="9pMqYs" />
<FormattedMessage defaultMessage="Nostr Address" />
</h4>
<div className="flex flex-col g8 w-max">
<input type="text" className="w-max" value={nip05} onChange={e => onNip05Change(e)} disabled={readonly} />
@ -275,20 +275,20 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
</small>
<div className="flex g12">
<button className="flex items-center" type="button" onClick={() => navigate("/nostr-address")}>
<FormattedMessage defaultMessage="Buy nostr address" id="MuVeKe" />
<FormattedMessage defaultMessage="Buy nostr address" />
</button>
<button
className="flex items-center secondary"
type="button"
onClick={() => navigate("/free-nostr-address")}>
<FormattedMessage defaultMessage="Get a free one" id="vlbWtt" />
<FormattedMessage defaultMessage="Get a free one" />
</button>
</div>
</div>
</div>
<div className="flex flex-col w-max g8">
<h4>
<FormattedMessage defaultMessage="Lightning Address" id="GSye7T" />
<FormattedMessage defaultMessage="Lightning Address" />
</h4>
<input
className="w-max"
@ -300,7 +300,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
<div>{lud16Valid === false ? <span className="warning">{invalidLud16Message}</span> : <></>}</div>
</div>
<AsyncButton className="primary" onClick={() => saveProfile()} disabled={readonly}>
<FormattedMessage defaultMessage="Save" id="jvo0vs" />
<FormattedMessage defaultMessage="Save" />
</AsyncButton>
</div>
);
@ -318,7 +318,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
}}
className="banner">
<AsyncButton type="button" onClick={() => setNewBanner()} disabled={readonly}>
<FormattedMessage defaultMessage="Upload" id="p4N05H" />
<FormattedMessage defaultMessage="Upload" />
</AsyncButton>
</div>
)}

View File

@ -31,12 +31,12 @@ export function ReferralsPage() {
return (
<>
<h2>
<FormattedMessage defaultMessage="Become a leader" id="M6C/px" />
<FormattedMessage defaultMessage="Become a leader" />
</h2>
<div className="flex items-center justify-between">
<Link to="https://community.snort.social/" target="_blank">
<button>
<FormattedMessage defaultMessage="Learn more" id="TdTXXf" />
<FormattedMessage defaultMessage="Learn more" />
</button>
</Link>
@ -44,7 +44,7 @@ export function ReferralsPage() {
</div>
<p>
<AsyncButton className="primary" onClick={applyNow}>
<FormattedMessage defaultMessage="Apply Now" id="k0kCJp" />
<FormattedMessage defaultMessage="Apply Now" />
</AsyncButton>
</p>
</>
@ -55,19 +55,19 @@ export function ReferralsPage() {
return (
<>
<h2>
<FormattedMessage defaultMessage="Become a leader" id="M6C/px" />
<FormattedMessage defaultMessage="Become a leader" />
</h2>
<div className="flex items-center justify-between">
<Link to="https://community.snort.social/" target="_blank">
<button>
<FormattedMessage defaultMessage="Learn more" id="TdTXXf" />
<FormattedMessage defaultMessage="Learn more" />
</button>
</Link>
<LeaderBadge />
</div>
<h3>
<FormattedMessage defaultMessage="Your application is pending" id="Ups2/p" />
<FormattedMessage defaultMessage="Your application is pending" />
</h3>
</>
);
@ -77,7 +77,7 @@ export function ReferralsPage() {
return (
<>
<h2>
<FormattedMessage defaultMessage="Leader Info" id="H0OG3T" />
<FormattedMessage defaultMessage="Leader Info" />
</h2>
<p>
<FormattedMessage
@ -90,7 +90,7 @@ export function ReferralsPage() {
/>
</p>
<p>
<FormattedMessage defaultMessage="Use your invite code to earn sats!" id="O3Jz4E" />
<FormattedMessage defaultMessage="Use your invite code to earn sats!" />
</p>
</>
);
@ -99,7 +99,7 @@ export function ReferralsPage() {
return (
<>
<h1>
<FormattedMessage defaultMessage="Invite your friends" id="l3H1EK" />
<FormattedMessage defaultMessage="Invite your friends" />
</h1>
<p>
<FormattedMessage

View File

@ -87,7 +87,7 @@ const RelayInfo = () => {
{conn instanceof Connection && (
<>
<h4>
<FormattedMessage defaultMessage="Active Subscriptions" id="p85Uwy" />
<FormattedMessage defaultMessage="Active Subscriptions" />
</h4>
<div className="grow">
{conn.ActiveRequests.map(a => (
@ -101,7 +101,7 @@ const RelayInfo = () => {
{conn instanceof Connection && (
<>
<h4>
<FormattedMessage defaultMessage="Pending Subscriptions" id="UDYlxu" />
<FormattedMessage defaultMessage="Pending Subscriptions" />
</h4>
<div className="grow">
{conn.PendingRequests.map(a => (

View File

@ -74,7 +74,7 @@ const RelaySettingsPage = () => {
{addRelay()}
<CloseRelays />
<h3>
<FormattedMessage defaultMessage="Other Connections" id="LF5kYT" />
<FormattedMessage defaultMessage="Other Connections" />
</h3>
<div className="flex flex-col g8">
{otherConnections.map(a => (
@ -114,7 +114,7 @@ export function CloseRelays() {
return (
<>
<h3>
<FormattedMessage defaultMessage="Recommended Relays" id="VL900k" />
<FormattedMessage defaultMessage="Recommended Relays" />
</h3>
{"geolocation" in navigator && (
<AsyncButton
@ -131,7 +131,7 @@ export function CloseRelays() {
console.error(e);
}
}}>
<FormattedMessage defaultMessage="Use Exact Location" id="0HFX0T" />
<FormattedMessage defaultMessage="Use Exact Location" />
</AsyncButton>
)}
{relays
@ -142,7 +142,7 @@ export function CloseRelays() {
<div className="flex justify-between items-center">
<div className="bold">{getRelayName(a.url)}</div>
<AsyncButton onClick={() => addNewRelay(a.url)}>
<FormattedMessage defaultMessage="Add" id="2/2yg+" />
<FormattedMessage defaultMessage="Add" />
</AsyncButton>
</div>
<div className="flex flex-col g8">

View File

@ -48,34 +48,32 @@ const WalletSettings = () => {
return (
<>
<h3>
<FormattedMessage defaultMessage="Connect Wallet" id="cg1VJ2" />
<FormattedMessage defaultMessage="Connect Wallet" />
</h3>
<div className="flex flex-col gap-3 cursor-pointer">
<WalletRow
logo={<NWCIcon width={64} height={64} />}
name="Nostr Wallet Connect"
url="/settings/wallet/nwc"
desc={<FormattedMessage defaultMessage="Native nostr wallet connection" id="cG/bKQ" />}
desc={<FormattedMessage defaultMessage="Native nostr wallet connection" />}
/>
<WalletRow
logo={<img src={LndLogo} />}
name="LND via LNC"
url="/settings/wallet/lnc"
desc={
<FormattedMessage defaultMessage="Connect to your own LND node with Lightning Node Connect" id="aSGz4J" />
}
desc={<FormattedMessage defaultMessage="Connect to your own LND node with Lightning Node Connect" />}
/>
<WalletRow
logo={<BlueWallet width={64} height={64} />}
name="LNDHub"
url="/settings/wallet/lndhub"
desc={<FormattedMessage defaultMessage="Generic LNDHub wallet (BTCPayServer / Alby / LNBits)" id="0MndVW" />}
desc={<FormattedMessage defaultMessage="Generic LNDHub wallet (BTCPayServer / Alby / LNBits)" />}
/>
{/*<WalletRow
logo={<CashuIcon size={64} />}
name="Cashu"
url="/settings/wallet/cashu"
desc={<FormattedMessage defaultMessage="Cashu mint wallet" id="3natuV" />}
desc={<FormattedMessage defaultMessage="Cashu mint wallet" />}
/>*/}
{CONFIG.alby && (
<WalletRow
@ -86,7 +84,7 @@ const WalletSettings = () => {
const alby = getAlbyOAuth();
window.location.href = alby.getAuthUrl();
}}
desc={<FormattedMessage defaultMessage="Alby wallet connection" id="XPB8VV" />}
desc={<FormattedMessage defaultMessage="Alby wallet connection" />}
/>
)}
</div>

View File

@ -47,7 +47,7 @@ export default function LNForwardAddress({ handle }: { handle: ManageHandle }) {
return (
<div>
<h4>
<FormattedMessage defaultMessage="Update Lightning Address" id="SOqbe9" />
<FormattedMessage defaultMessage="Update Lightning Address" />
</h4>
<p>
<FormattedMessage
@ -85,7 +85,7 @@ export default function LNForwardAddress({ handle }: { handle: ManageHandle }) {
<option value={ForwardType.ProxyDirect}>Proxy</option>
</select>
<AsyncButton onClick={() => startUpdate()}>
<FormattedMessage defaultMessage="Update" id="BWpuKl" />
<FormattedMessage defaultMessage="Update" />
</AsyncButton>
</div>
{error && <b className="error">{error}</b>}

View File

@ -37,7 +37,7 @@ export default function ListHandles() {
values={{
link: (
<Link to="/nostr-address">
<FormattedMessage defaultMessage="Buy Handle" id="5oTnfy" />
<FormattedMessage defaultMessage="Buy Handle" />
</Link>
),
}}
@ -58,13 +58,13 @@ export default function ListHandles() {
state: a,
})
}>
<FormattedMessage defaultMessage="Manage" id="0Azlrb" />
<FormattedMessage defaultMessage="Manage" />
</button>
</div>
))}
{handles.length > 0 && (
<button type="button" onClick={() => navigate("/nostr-address")}>
<FormattedMessage defaultMessage="Buy Handle" id="5oTnfy" />
<FormattedMessage defaultMessage="Buy Handle" />
</button>
)}
{error && <ErrorOrOffline error={error} onRetry={loadHandles} />}

View File

@ -31,7 +31,7 @@ export default function TransferHandle({ handle }: { handle: ManageHandle }) {
return (
<div>
<h4>
<FormattedMessage defaultMessage="Transfer to Pubkey" id="5u6iEc" />
<FormattedMessage defaultMessage="Transfer to Pubkey" />
</h4>
<div className="flex">
<div className="grow">
@ -47,7 +47,7 @@ export default function TransferHandle({ handle }: { handle: ManageHandle }) {
/>
</div>
<AsyncButton onClick={() => startTransfer()}>
<FormattedMessage defaultMessage="Transfer" id="DtYelJ" />
<FormattedMessage defaultMessage="Transfer" />
</AsyncButton>
</div>
{error && <b className="error">{error}</b>}

View File

@ -10,7 +10,7 @@ export default function ManageHandlePage() {
return (
<>
<h3 onClick={() => navigate("/settings/handle")} className="pointer">
<FormattedMessage defaultMessage="Nostr Address" id="9pMqYs" />
<FormattedMessage defaultMessage="Nostr Address" />
</h3>
<Outlet />
</>

View File

@ -39,7 +39,7 @@ export function FollowsRelayHealth({
<div className="flex flex-col gap-4">
{(withTitle ?? true) && (
<div className="text-2xl font-semibold">
<FormattedMessage defaultMessage="Follows Relay Health" id="XQiFEl" />
<FormattedMessage defaultMessage="Follows Relay Health" />
</div>
)}
<div>
@ -58,7 +58,7 @@ export function FollowsRelayHealth({
className="rounded-xl border border-border-color px-3 py-4"
title={
<div className="text-lg">
<FormattedMessage defaultMessage="Missing Relays" id="4emo2p" />
<FormattedMessage defaultMessage="Missing Relays" />
</div>
}>
<div>

View File

@ -10,29 +10,29 @@ import SyncAccountTool from "./sync-account";
const ToolMenuItems = [
{
title: <FormattedMessage defaultMessage="Follow List" id="CM+Cfj" />,
title: <FormattedMessage defaultMessage="Follow List" />,
items: [
{
icon: "trash",
iconBg: "bg-red-500",
message: <FormattedMessage defaultMessage="Prune Follow List" id="hF6IN2" />,
message: <FormattedMessage defaultMessage="Prune Follow List" />,
path: "prune-follows",
},
{
icon: "medical-cross",
iconBg: "bg-green-800",
message: <FormattedMessage defaultMessage="Follows Relay Health" id="XQiFEl" />,
message: <FormattedMessage defaultMessage="Follows Relay Health" />,
path: "follows-relay-health",
},
],
},
{
title: <FormattedMessage defaultMessage="Account Data" id="IIOul1" />,
title: <FormattedMessage defaultMessage="Account Data" />,
items: [
{
icon: "repost",
iconBg: "bg-blue-800",
message: <FormattedMessage defaultMessage="Sync Account" id="hMQmIw" />,
message: <FormattedMessage defaultMessage="Sync Account" />,
path: "sync-account",
},
],
@ -45,7 +45,7 @@ export const ToolsPages = [
element: (
<>
<h2>
<FormattedMessage defaultMessage="Tools" id="nUT0Lv" />
<FormattedMessage defaultMessage="Tools" />
</h2>
<SettingsMenuComponent menu={ToolMenuItems} />
</>

View File

@ -99,7 +99,7 @@ export function PruneFollowList() {
onChange={e => setUnfollow(v => (e.target.checked ? dedupe([...v, k]) : v.filter(a => a !== k)))}
checked={unfollow.includes(k)}
/>
<FormattedMessage defaultMessage="Unfollow" id="izWS4J" />
<FormattedMessage defaultMessage="Unfollow" />
</div>
);
}
@ -107,7 +107,7 @@ export function PruneFollowList() {
return (
<div className="flex flex-col gap-4">
<div className="text-2xl font-semibold">
<FormattedMessage defaultMessage="Prune follow list" id="CM0k0d" />
<FormattedMessage defaultMessage="Prune follow list" />
</div>
<p>
<FormattedMessage
@ -127,7 +127,7 @@ export function PruneFollowList() {
</div>
<FollowsRelayHealth withTitle={false} popularRelays={false} missingRelaysActions={k => personToggle(k)} />
<AsyncButton onClick={fetchLastPosts}>
<FormattedMessage defaultMessage="Compute prune list" id="bJ+wrA" />
<FormattedMessage defaultMessage="Compute prune list" />
</AsyncButton>
{getStatus()}
<div className="flex flex-col gap-1">
@ -162,7 +162,7 @@ export function PruneFollowList() {
/>
</p>
<AsyncButton onClick={publishFollowList}>
<FormattedMessage defaultMessage="Save" id="jvo0vs" />
<FormattedMessage defaultMessage="Save" />
</AsyncButton>
</div>
</div>

View File

@ -33,7 +33,7 @@ export default function SyncAccountTool() {
return (
<>
<p>
<FormattedMessage defaultMessage="Sync all events for your profile into local cache" id="+QM0PJ" />
<FormattedMessage defaultMessage="Sync all events for your profile into local cache" />
</p>
{results.length > 0 && (
@ -59,7 +59,7 @@ export default function SyncAccountTool() {
</h4>
)}
<AsyncButton onClick={start}>
<FormattedMessage defaultMessage="Start" id="mOFG3K" />
<FormattedMessage defaultMessage="Start" />
</AsyncButton>
</>
);

View File

@ -55,7 +55,7 @@ const ConnectLNC = () => {
return (
<>
<h4>
<FormattedMessage defaultMessage="Enter pairing phrase" id="Z4BMCZ" />
<FormattedMessage defaultMessage="Enter pairing phrase" />
</h4>
<div className="flex">
<div className="grow mr10">
@ -68,7 +68,7 @@ const ConnectLNC = () => {
/>
</div>
<AsyncButton onClick={() => tryConnect(unwrap(pairingPhrase))} disabled={!pairingPhrase}>
<FormattedMessage defaultMessage="Connect" id="+vVZ/G" />
<FormattedMessage defaultMessage="Connect" />
</AsyncButton>
</div>
{error && <b className="error p10">{error}</b>}
@ -90,7 +90,7 @@ const ConnectLNC = () => {
/>
</h3>
<h4>
<FormattedMessage defaultMessage="Enter password" id="2LbrkB" />
<FormattedMessage defaultMessage="Enter password" />
</h4>
<div className="flex w-max">
<div className="grow mr10">
@ -105,7 +105,7 @@ const ConnectLNC = () => {
<AsyncButton
onClick={() => setLNCPassword(unwrap(walletPassword))}
disabled={(walletPassword?.length ?? 0) < 8}>
<FormattedMessage defaultMessage="Save" id="jvo0vs" />
<FormattedMessage defaultMessage="Save" />
</AsyncButton>
</div>
</div>

Some files were not shown because too many files have changed in this diff Show More