chore: Update translations

This commit is contained in:
2023-09-18 11:38:33 +00:00
parent bbbcbc0a92
commit a1cd56292a
10 changed files with 78 additions and 50 deletions

View File

@ -1,7 +1,7 @@
span.following { span.following {
padding: 2px 4px; padding: 2px 4px;
border-radius: 4px; border-radius: 4px;
font-size: 11px; font-size: 11px;
color: var(--font-secondary-color); color: var(--font-secondary-color);
background-color: var(--gray-superdark); background-color: var(--gray-superdark);
} }

View File

@ -4,12 +4,14 @@ import Icon from "Icons/Icon";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
export function FollowingMark({ pubkey }: { pubkey: string }) { export function FollowingMark({ pubkey }: { pubkey: string }) {
const { follows } = useLogin(); const { follows } = useLogin();
const doesFollow = follows.item.includes(pubkey); const doesFollow = follows.item.includes(pubkey);
if (!doesFollow) return; if (!doesFollow) return;
return <span className="following flex g4"> return (
<Icon name="check" className="success" size={12} /> <span className="following flex g4">
<FormattedMessage defaultMessage="following" /> <Icon name="check" className="success" size={12} />
<FormattedMessage defaultMessage="following" />
</span> </span>
);
} }

View File

@ -25,7 +25,7 @@ export interface ProfileImageProps {
onClick?: (e: React.MouseEvent) => void; onClick?: (e: React.MouseEvent) => void;
imageOverlay?: ReactNode; imageOverlay?: ReactNode;
showFollowingMark?: boolean; showFollowingMark?: boolean;
icons?: ReactNode icons?: ReactNode;
} }
export default function ProfileImage({ export default function ProfileImage({
@ -42,7 +42,7 @@ export default function ProfileImage({
imageOverlay, imageOverlay,
onClick, onClick,
showFollowingMark = true, showFollowingMark = true,
icons icons,
}: ProfileImageProps) { }: ProfileImageProps) {
const user = useUserProfile(profile ? "" : pubkey) ?? profile; const user = useUserProfile(profile ? "" : pubkey) ?? profile;
const nip05 = defaultNip ? defaultNip : user?.nip05; const nip05 = defaultNip ? defaultNip : user?.nip05;
@ -64,12 +64,24 @@ export default function ProfileImage({
return ( return (
<> <>
<div className="avatar-wrapper"> <div className="avatar-wrapper">
<Avatar pubkey={pubkey} user={user} size={size} imageOverlay={imageOverlay} icons={((doesFollow && showFollowingMark) || icons) ? <> <Avatar
{icons} pubkey={pubkey}
{showFollowingMark && <div className="icon-circle"> user={user}
<Icon name="check" className="success" size={10} /> size={size}
</div>} imageOverlay={imageOverlay}
</> : undefined} /> icons={
(doesFollow && showFollowingMark) || icons ? (
<>
{icons}
{showFollowingMark && (
<div className="icon-circle">
<Icon name="check" className="success" size={10} />
</div>
)}
</>
) : undefined
}
/>
</div> </div>
{showUsername && ( {showUsername && (
<div className="f-ellipsis"> <div className="f-ellipsis">

View File

@ -154,8 +154,9 @@ const TierThree = ({ active, isLastSubthread, notes, related, chains, onNavigate
return ( return (
<> <>
<div <div
className={`subthread-container ${hasMultipleNotes ? "subthread-multi" : ""} ${isLast ? "subthread-last" : "subthread-mid" className={`subthread-container ${hasMultipleNotes ? "subthread-multi" : ""} ${
}`}> isLast ? "subthread-last" : "subthread-mid"
}`}>
<Divider variant="small" /> <Divider variant="small" />
<Note <Note
highlight={active === first.id} highlight={active === first.id}
@ -184,8 +185,9 @@ const TierThree = ({ active, isLastSubthread, notes, related, chains, onNavigate
return ( return (
<div <div
key={r.id} key={r.id}
className={`subthread-container ${lastReply ? "" : "subthread-multi"} ${lastReply ? "subthread-last" : "subthread-mid" className={`subthread-container ${lastReply ? "" : "subthread-multi"} ${
}`}> lastReply ? "subthread-last" : "subthread-mid"
}`}>
<Divider variant="small" /> <Divider variant="small" />
<Note <Note
className={`thread-note ${lastNote ? "is-last-note" : ""}`} className={`thread-note ${lastNote ? "is-last-note" : ""}`}

View File

@ -117,7 +117,13 @@ const TimelineFollows = (props: TimelineFollowsProps) => {
{mainFeed.map( {mainFeed.map(
a => a =>
props.noteRenderer?.(a) ?? ( props.noteRenderer?.(a) ?? (
<Note data={a as TaggedNostrEvent} related={relatedFeed(a.id)} key={a.id} depth={0} onClick={props.noteOnClick} /> <Note
data={a as TaggedNostrEvent}
related={relatedFeed(a.id)}
key={a.id}
depth={0}
onClick={props.noteOnClick}
/>
), ),
)} )}
<div className="flex f-center p"> <div className="flex f-center p">

View File

@ -25,8 +25,8 @@ import useLogin from "Hooks/useLogin";
type Cols = "notes" | "articles" | "media" | "streams" | "notifications"; type Cols = "notes" | "articles" | "media" | "streams" | "notifications";
interface DeckScope { interface DeckScope {
thread?: string, thread?: string;
setThread: (e?: string) => void setThread: (e?: string) => void;
} }
export const DeckContext = createContext<DeckScope | undefined>(undefined); export const DeckContext = createContext<DeckScope | undefined>(undefined);
@ -35,10 +35,9 @@ export function SnortDeckLayout() {
const login = useLogin(); const login = useLogin();
const navigate = useNavigate(); const navigate = useNavigate();
const [deckScope, setDeckScope] = useState<DeckScope>({ const [deckScope, setDeckScope] = useState<DeckScope>({
setThread: (e?: string) => setDeckScope(s => ({ ...s, thread: e })) setThread: (e?: string) => setDeckScope(s => ({ ...s, thread: e })),
}); });
useLoginFeed(); useLoginFeed();
useTheme(); useTheme();
useLoginRelays(); useLoginRelays();
@ -75,7 +74,7 @@ export function SnortDeckLayout() {
<ThreadContextWrapper link={createNostrLink(NostrPrefix.Note, deckScope.thread)}> <ThreadContextWrapper link={createNostrLink(NostrPrefix.Note, deckScope.thread)}>
<SpotlightFromThread onClose={() => deckScope.setThread(undefined)} /> <SpotlightFromThread onClose={() => deckScope.setThread(undefined)} />
<div> <div>
<Thread onBack={() => deckScope.setThread(undefined)}/> <Thread onBack={() => deckScope.setThread(undefined)} />
</div> </div>
</ThreadContextWrapper> </ThreadContextWrapper>
</Modal> </Modal>

View File

@ -141,9 +141,16 @@ export const NotesTab = () => {
<> <>
<FollowsHint /> <FollowsHint />
<TaskList /> <TaskList />
<TimelineFollows postsOnly={true} noteOnClick={deckContext ? (ev) => { <TimelineFollows
deckContext.setThread(ev.id); postsOnly={true}
} : undefined} /> noteOnClick={
deckContext
? ev => {
deckContext.setThread(ev.id);
}
: undefined
}
/>
</> </>
); );
}; };

View File

@ -20,7 +20,7 @@
"0BUTMv": "Suche...", "0BUTMv": "Suche...",
"0jOEtS": "Ungültige LNURL", "0jOEtS": "Ungültige LNURL",
"0mch2Y": "Der Name enthält unerlaubte Zeichen", "0mch2Y": "Der Name enthält unerlaubte Zeichen",
"0uoY11": "Show Status", "0uoY11": "Status anzeigen",
"0yO7wF": "{n} Sek.", "0yO7wF": "{n} Sek.",
"1A7TZk": "Was ist Snort und wie funktioniert es?", "1A7TZk": "Was ist Snort und wie funktioniert es?",
"1Mo59U": "Bist du sicher, dass du diese Note aus deinen Lesezeichen entfernen möchtest?", "1Mo59U": "Bist du sicher, dass du diese Note aus deinen Lesezeichen entfernen möchtest?",
@ -36,7 +36,7 @@
"2a2YiP": "{n} Lesezeichen", "2a2YiP": "{n} Lesezeichen",
"2k0Cv+": "Gefällt nicht ({n})", "2k0Cv+": "Gefällt nicht ({n})",
"2ukA4d": "{n} Stunden", "2ukA4d": "{n} Stunden",
"3KNMbJ": "Articles", "3KNMbJ": "Artikel",
"3Rx6Qo": "Erweitert", "3Rx6Qo": "Erweitert",
"3cc4Ct": "Hell", "3cc4Ct": "Hell",
"3gOsZq": "Übersetzer", "3gOsZq": "Übersetzer",
@ -62,7 +62,7 @@
"5vMmmR": "Benutzernamen sind auf Nostr nicht einzigartig. Die Nostr-Adresse ist deine eindeutige, menschenlesbare Adresse, die dir bei der Registrierung eindeutig zugeordnet ist.", "5vMmmR": "Benutzernamen sind auf Nostr nicht einzigartig. Die Nostr-Adresse ist deine eindeutige, menschenlesbare Adresse, die dir bei der Registrierung eindeutig zugeordnet ist.",
"5ykRmX": "Zap senden", "5ykRmX": "Zap senden",
"65BmHb": "Bild von {host} konnte nicht durch Proxy geladen werden, klicke hier, um es direkt zu laden", "65BmHb": "Bild von {host} konnte nicht durch Proxy geladen werden, klicke hier, um es direkt zu laden",
"6OSOXl": "Reason: <i>{reason}</i>", "6OSOXl": "Grund: <i>{reason}</i>",
"6Yfvvp": "Bekomme eine Identifikation", "6Yfvvp": "Bekomme eine Identifikation",
"6bgpn+": "Nicht alle Clients unterstützen dies, deshalb kann es sein, dass du immer noch einige Zaps erhältst, als ob Zap-Aufteilungen nicht konfiguriert wäre", "6bgpn+": "Nicht alle Clients unterstützen dies, deshalb kann es sein, dass du immer noch einige Zaps erhältst, als ob Zap-Aufteilungen nicht konfiguriert wäre",
"6ewQqw": "Gefällt ({n})", "6ewQqw": "Gefällt ({n})",
@ -73,7 +73,7 @@
"8/vBbP": "Reposts ({n})", "8/vBbP": "Reposts ({n})",
"89q5wc": "Reposts bestätigen", "89q5wc": "Reposts bestätigen",
"8QDesP": "{n} sats zappen", "8QDesP": "{n} sats zappen",
"8Rkoyb": "Recipient", "8Rkoyb": "Empfänger",
"8Y6bZQ": "Ungültige Zap-Aufteilung: {input}", "8Y6bZQ": "Ungültige Zap-Aufteilung: {input}",
"8g2vyB": "Name ist zu lang", "8g2vyB": "Name ist zu lang",
"8v1NN+": "Verbindungsphrase", "8v1NN+": "Verbindungsphrase",
@ -118,7 +118,7 @@
"E8a4yq": "Folgen Sie einigen beliebten Konten", "E8a4yq": "Folgen Sie einigen beliebten Konten",
"ELbg9p": "Datenanbieter", "ELbg9p": "Datenanbieter",
"EPYwm7": "Dein privater Schlüssel ist dein Passwort. Wenn du diesen Schlüssel verlierst, hast du keinen Zugang mehr zu deinem Konto! Kopiere ihn und bewahre ihn an einem sicheren Ort auf. Es gibt keine Möglichkeit, deinen privaten Schlüssel wiederherzustellen.", "EPYwm7": "Dein privater Schlüssel ist dein Passwort. Wenn du diesen Schlüssel verlierst, hast du keinen Zugang mehr zu deinem Konto! Kopiere ihn und bewahre ihn an einem sicheren Ort auf. Es gibt keine Möglichkeit, deinen privaten Schlüssel wiederherzustellen.",
"EQKRE4": "Show badges on profile pages", "EQKRE4": "Abzeichen auf Profilseiten anzeigen",
"EWyQH5": "Global", "EWyQH5": "Global",
"Ebl/B2": "Auf {lang} Übersetzen", "Ebl/B2": "Auf {lang} Übersetzen",
"EcZF24": "Benutzerdefinierte Relais", "EcZF24": "Benutzerdefinierte Relais",
@ -128,7 +128,7 @@
"F+B3x1": "Wir sind auch eine Partnerschaft mit nostrplebs.com eingegangen, um Ihnen mehr Optionen anbieten zu können.", "F+B3x1": "Wir sind auch eine Partnerschaft mit nostrplebs.com eingegangen, um Ihnen mehr Optionen anbieten zu können.",
"F3l7xL": "Konto hinzufügen", "F3l7xL": "Konto hinzufügen",
"FDguSC": "{n} Zaps", "FDguSC": "{n} Zaps",
"FMfjrl": "Show status messages on profile pages", "FMfjrl": "Statusnachrichten auf Profilseiten anzeigen",
"FS3b54": "Fertig!", "FS3b54": "Fertig!",
"FSYL8G": "Angesagte Benutzer", "FSYL8G": "Angesagte Benutzer",
"FdhSU2": "Jetzt abholen", "FdhSU2": "Jetzt abholen",
@ -151,14 +151,14 @@
"HOzFdo": "Stummgeschaltet", "HOzFdo": "Stummgeschaltet",
"HWbkEK": "Cache leeren und neu laden", "HWbkEK": "Cache leeren und neu laden",
"HbefNb": "Wallet öffnen", "HbefNb": "Wallet öffnen",
"HhcAVH": "You don't follow this person, click here to load media from <i>{link}</i>, or update <a><i>your preferences</i></a> to always load media from everybody.", "HhcAVH": "Du folgst dieser Person nicht, klicke hier, um Medien von <i>{link}</i>zu laden, oder aktualisiere <a><i>deine Einstellungen</i></a>, um Medien immer von allen zu laden.",
"IDjHJ6": "Danke für die Verwendung von Snort. Wir würden uns über eine Spende freuen.", "IDjHJ6": "Danke für die Verwendung von Snort. Wir würden uns über eine Spende freuen.",
"IEwZvs": "Sind sie sicher, dass sie diese Notiz entpinnen möchten?", "IEwZvs": "Sind sie sicher, dass sie diese Notiz entpinnen möchten?",
"IKKHqV": "Folgt", "IKKHqV": "Folgt",
"INSqIz": "Twitter-Benutzername...", "INSqIz": "Twitter-Benutzername...",
"IUZC+0": "Das bedeutet, dass niemand die von dir erstellten Notes ändern kann und jeder kann leicht überprüfen, ob die Note, die er liest, von dir erstellt wurde.", "IUZC+0": "Das bedeutet, dass niemand die von dir erstellten Notes ändern kann und jeder kann leicht überprüfen, ob die Note, die er liest, von dir erstellt wurde.",
"Ig9/a1": "Sende {n} sats an {name}", "Ig9/a1": "Sende {n} sats an {name}",
"IoQq+a": "Click here to load anyway", "IoQq+a": "Klicke hier, um trotzdem zu laden",
"Ix8l+B": "Angesagte Notes", "Ix8l+B": "Angesagte Notes",
"J+dIsA": "Abonnements", "J+dIsA": "Abonnements",
"JCIgkj": "Benutzername", "JCIgkj": "Benutzername",
@ -192,7 +192,7 @@
"MuVeKe": "Nostr-Adresse kaufen", "MuVeKe": "Nostr-Adresse kaufen",
"MzRYWH": "{item} kaufen", "MzRYWH": "{item} kaufen",
"N2IrpM": "Bestätigen", "N2IrpM": "Bestätigen",
"NAidKb": "Notifications", "NAidKb": "Benachrichtigungen",
"NAuFNH": "Du hast bereits ein Abonnement dieser Art, bitte erneuern oder bezahlen", "NAuFNH": "Du hast bereits ein Abonnement dieser Art, bitte erneuern oder bezahlen",
"NNSu3d": "Importiere Folgende von Twitter", "NNSu3d": "Importiere Folgende von Twitter",
"NdOYJJ": "Hmm, nichts da.. Schau auf {newUsersPage} um einigen empfohlen Nostrichs zu folgen!", "NdOYJJ": "Hmm, nichts da.. Schau auf {newUsersPage} um einigen empfohlen Nostrichs zu folgen!",
@ -236,7 +236,7 @@
"ShdEie": "Alle als gelesen markieren", "ShdEie": "Alle als gelesen markieren",
"Sjo1P4": "Benutzerdefiniert", "Sjo1P4": "Benutzerdefiniert",
"Ss0sWu": "Jetzt bezahlen", "Ss0sWu": "Jetzt bezahlen",
"StKzTE": "The author has marked this note as a <i>sensitive topic</i>", "StKzTE": "Der Autor hat diese Note als ein <i>sensibles Thema</i> markiert",
"TDR5ge": "Medien in Notes werden für ausgewählte Personen automatisch angezeigt, ansonsten wird nur der Link angezeigt", "TDR5ge": "Medien in Notes werden für ausgewählte Personen automatisch angezeigt, ansonsten wird nur der Link angezeigt",
"TMfYfY": "Cashu Token", "TMfYfY": "Cashu Token",
"TpgeGw": "Hex Salt..", "TpgeGw": "Hex Salt..",
@ -275,7 +275,7 @@
"Z4BMCZ": "Verbindungs-Passphrase eingeben", "Z4BMCZ": "Verbindungs-Passphrase eingeben",
"ZKORll": "Jetzt aktivieren", "ZKORll": "Jetzt aktivieren",
"ZLmyG9": "Mitwirkende", "ZLmyG9": "Mitwirkende",
"ZS+jRE": "Send zap splits to", "ZS+jRE": "Sende Zap-Aufteilungen an",
"ZUZedV": "Lightning Spende:", "ZUZedV": "Lightning Spende:",
"Zr5TMx": "Profil einrichten", "Zr5TMx": "Profil einrichten",
"a5UPxh": "Finanzieren Sie Entwickler und Plattformen, die NIP-05-Verifizierungsdienste anbieten", "a5UPxh": "Finanzieren Sie Entwickler und Plattformen, die NIP-05-Verifizierungsdienste anbieten",
@ -329,7 +329,7 @@
"hWSp+B": "Nostr Connect (NIP-46)", "hWSp+B": "Nostr Connect (NIP-46)",
"hY4lzx": "Unterstützt", "hY4lzx": "Unterstützt",
"hicxcO": "Antworten anzeigen", "hicxcO": "Antworten anzeigen",
"hmZ3Bz": "Media", "hmZ3Bz": "Medien",
"hniz8Z": "hier", "hniz8Z": "hier",
"i/dBAR": "Zap Pool", "i/dBAR": "Zap Pool",
"iCqGww": "Reaktionen ({n})", "iCqGww": "Reaktionen ({n})",
@ -409,7 +409,7 @@
"rmdsT4": "{n} Tage", "rmdsT4": "{n} Tage",
"rrfdTe": "Dies ist die gleiche Technologie, die auch von Bitcoin verwendet wird, und sich als äußerst sicher erwiesen hat.", "rrfdTe": "Dies ist die gleiche Technologie, die auch von Bitcoin verwendet wird, und sich als äußerst sicher erwiesen hat.",
"rudscU": "Abonnements konnten nicht geladen werden, bitte versuchen Sie es später erneut", "rudscU": "Abonnements konnten nicht geladen werden, bitte versuchen Sie es später erneut",
"sKDn4e": "Show Badges", "sKDn4e": "Abzeichen anzeigen",
"sUNhQE": "Nutzer", "sUNhQE": "Nutzer",
"sWnYKw": "Snort wurde darauf konzipiert ein Twitter ähnliches Erlebnis zu bieten.", "sWnYKw": "Snort wurde darauf konzipiert ein Twitter ähnliches Erlebnis zu bieten.",
"sZQzjQ": "Fehler beim Parsen der Zap-Aufteilung: {input}", "sZQzjQ": "Fehler beim Parsen der Zap-Aufteilung: {input}",
@ -421,7 +421,7 @@
"u/vOPu": "Bezahlt", "u/vOPu": "Bezahlt",
"u4bHcR": "Sieh dir hier den Code an: {link}", "u4bHcR": "Sieh dir hier den Code an: {link}",
"uSV4Ti": "Reposts müssen manuell bestätigt werden", "uSV4Ti": "Reposts müssen manuell bestätigt werden",
"uc0din": "Send sats splits to", "uc0din": "Sende Sats-Aufteilungen an",
"usAvMr": "Profil anpassen", "usAvMr": "Profil anpassen",
"ut+2Cd": "Holen Sie sich einen Partner-Identifikator", "ut+2Cd": "Holen Sie sich einen Partner-Identifikator",
"v8lolG": "Chat starten", "v8lolG": "Chat starten",