chore: Update translations
continuous-integration/drone/push Build is failing Details

This commit is contained in:
Kieran 2023-09-24 12:36:51 +00:00
parent 0e9ca7e2e3
commit 9f731da5be
10 changed files with 101 additions and 77 deletions

View File

@ -8,7 +8,18 @@ import useEventPublisher from "Hooks/useEventPublisher";
import { getMutedKeys } from "Feed/MuteList";
import useModeration from "Hooks/useModeration";
import useLogin from "Hooks/useLogin";
import { SnortAppData, addSubscription, setAppData, setBlocked, setBookmarked, setFollows, setMuted, setPinned, setRelays, setTags } from "Login";
import {
SnortAppData,
addSubscription,
setAppData,
setBlocked,
setBookmarked,
setFollows,
setMuted,
setPinned,
setRelays,
setTags,
} from "Login";
import { SnortPubKey } from "Const";
import { SubscriptionEvent } from "Subscription";
import useRelaysFeedFollows from "./RelaysFeedFollows";
@ -101,12 +112,11 @@ export default function useLoginFeed() {
).then(a => addSubscription(login, ...a.filter(a => a !== undefined).map(unwrap)));
const appData = getNewest(loginFeed.data.filter(a => a.kind === EventKind.AppData));
if(appData) {
if (appData) {
publisher.decryptGeneric(appData.content, appData.pubkey).then(d => {
setAppData(login, JSON.parse(d) as SnortAppData, appData.created_at * 1000);
})
});
}
}
}, [loginFeed, publisher]);

View File

@ -76,6 +76,6 @@ export default function useModeration() {
unblock,
isBlocked,
isMutedWord,
isEventMuted
isEventMuted,
};
}

View File

@ -158,7 +158,7 @@ export function setBookmarked(state: LoginSession, bookmarked: Array<string>, ts
}
export function setAppData(state: LoginSession, data: SnortAppData, ts: number) {
if(state.appData.timestamp >= ts) {
if (state.appData.timestamp >= ts) {
return;
}
state.appData.item = data;

View File

@ -19,7 +19,7 @@ export enum LoginSessionType {
}
export interface SnortAppData {
mutedWords: Array<string>
mutedWords: Array<string>;
}
export interface LoginSession {

View File

@ -48,7 +48,7 @@ const LoggedOut = {
subscriptions: [],
appData: {
item: {
mutedWords: []
mutedWords: [],
},
timestamp: 0,
},

View File

@ -6,39 +6,53 @@ import { useState } from "react";
import { FormattedMessage } from "react-intl";
export function ModerationSettings() {
const login = useLogin();
const [muteWord, setMuteWord] = useState("");
const login = useLogin();
const [muteWord, setMuteWord] = useState("");
function addMutedWord() {
login.appData ??= {
item: {
mutedWords: []
},
timestamp: 0
};
setAppData(login, {
...login.appData.item,
mutedWords: appendDedupe(login.appData.item.mutedWords, [muteWord])
}, unixNowMs());
setMuteWord("");
}
return <>
<h2>
<FormattedMessage defaultMessage="Muted Words" />
</h2>
<div className="flex-column g12">
<div className="flex g8">
<input type="text" placeholder="eg. crypto" className="w-max" value={muteWord} onChange={e => setMuteWord(e.target.value)} />
<button type="button" onClick={addMutedWord}>
<FormattedMessage defaultMessage="Add" />
</button>
</div>
{login.appData.item.mutedWords.map(v => <div className="p br b flex f-space">
<div>{v}</div>
<button type="button">
<FormattedMessage defaultMessage="Delete" />
</button>
</div>)}
function addMutedWord() {
login.appData ??= {
item: {
mutedWords: [],
},
timestamp: 0,
};
setAppData(
login,
{
...login.appData.item,
mutedWords: appendDedupe(login.appData.item.mutedWords, [muteWord]),
},
unixNowMs(),
);
setMuteWord("");
}
return (
<>
<h2>
<FormattedMessage defaultMessage="Muted Words" />
</h2>
<div className="flex-column g12">
<div className="flex g8">
<input
type="text"
placeholder="eg. crypto"
className="w-max"
value={muteWord}
onChange={e => setMuteWord(e.target.value)}
/>
<button type="button" onClick={addMutedWord}>
<FormattedMessage defaultMessage="Add" />
</button>
</div>
{login.appData.item.mutedWords.map(v => (
<div className="p br b flex f-space">
<div>{v}</div>
<button type="button">
<FormattedMessage defaultMessage="Delete" />
</button>
</div>
))}
</div>
</>
}
);
}

View File

@ -150,7 +150,7 @@
"GUlSVG": "Beanspruche deine enthaltene Snort Nostr-Adresse",
"Gcn9NQ": "Magnet Link",
"GspYR7": "{n} Gefällt nicht",
"Gxcr08": "Broadcast Event",
"Gxcr08": "Event verbreiten",
"H+vHiz": "Hex-Schlüssel...",
"H0JBH6": "Abmelden",
"H6/kLh": "Bestellung bezahlt!",
@ -186,7 +186,7 @@
"KoFlZg": "Mint-URL eingeben",
"KtsyO0": "PIN eingeben",
"LF5kYT": "Weitere Verbindungen",
"LR1XjT": "Pin too short",
"LR1XjT": "PIN zu kurz",
"LXxsbk": "Anonym",
"LgbKvU": "Kommentar",
"Lu5/Bj": "In Zapstr öffnen",
@ -437,12 +437,12 @@
"vOKedj": "{n,plural,one {}=1{& {n} anderer} other{& {n} andere}}",
"vZ4quW": "NIP-05 ist eine DNS-basierte Verifizierungsspezifikation, die dabei hilft, dich als echten Benutzer zu validieren.",
"vhlWFg": "Umfrageoptionen",
"vlbWtt": "Erhalte eine kostenlos",
"vlbWtt": "Eine kostenlos erhalten",
"vrTOHJ": "{amount} sats",
"vxwnbh": "Maß an Arbeit, die auf alle veröffentlichte Events angewendet werden soll",
"wEQDC6": "Anpassen",
"wLtRCF": "Dein Schlüssel",
"wSZR47": "Submit",
"wSZR47": "Absenden",
"wWLwvh": "Anon",
"wYSD2L": "Nostr-Adresse",
"wih7iJ": "Name ist blockiert",

View File

@ -1,27 +1,27 @@
{
"+D82kt": "Вы уверены, что хотите сделать репост: {id}",
"+PzQ9Y": "Payout Now",
"+Vxixo": "Secret Group Chat",
"+PzQ9Y": "Выплатить сейчас",
"+Vxixo": "Секретный групповой чат",
"+aZY2h": "Тип запа",
"+tShPg": "following",
"+tShPg": "подписки",
"+vA//S": "Логины",
"+vIQlC": "Пожалуйста, обязательно сохраните следующий пароль, чтобы в будущем управлять своим хэндлом",
"+vVZ/G": "Подключиться",
"+xliwN": "{name} reposted",
"+xliwN": "{name} сделал репост",
"/4tOwT": "Пропустить",
"/JE/X+": "Поддержка аккаунта",
"/PCavi": "Публичный",
"/RD0e2": "Nostr использует технологию цифровой подписи для создания защищенных от несанкционированного доступа заметок, которые можно безопасно копировать на множество релеев, обеспечивая резервное хранение Вашего контента.",
"/Xf4UW": "Send anonymous usage metrics",
"/Xf4UW": "Отправлять показатели анонимного использования",
"/d6vEc": "Упростить поиск и распространение вашего профиля в Nostr",
"/n5KSF": "{n} мс",
"00LcfG": "Load more",
"00LcfG": "Загрузить больше",
"08zn6O": "Экспортировать ключи",
"0Azlrb": "Управление",
"0BUTMv": "Поиск...",
"0jOEtS": "Неверный LNURL",
"0mch2Y": "имя содержит запрещенные символы",
"0uoY11": "Show Status",
"0uoY11": "Показать статус",
"0yO7wF": "{n} секунд",
"1A7TZk": "Что такое Snort и как он работает?",
"1Mo59U": "Вы уверены, что хотите удалить эту заметку из закладок?",
@ -37,7 +37,7 @@
"2a2YiP": "{n} Закладок",
"2k0Cv+": "Дизлайки ({n})",
"2ukA4d": "{n} часов",
"3KNMbJ": "Articles",
"3KNMbJ": "Статьи",
"3Rx6Qo": "Продвинутые",
"3cc4Ct": "Светлый",
"3gOsZq": "Переводчики",
@ -46,7 +46,7 @@
"3tVy+Z": "{n} Подписчиков",
"3xCwbZ": "ИЛИ",
"3yk8fB": "Кошелек",
"40VR6s": "Nostr Connect",
"40VR6s": "Подключение Nostr",
"450Fty": "Ничьи",
"47FYwb": "Отменить",
"4IPzdn": "Основные разработчики",
@ -61,14 +61,14 @@
"5oTnfy": "Приобрести хэндл",
"5rOdPG": "После того как Вы настроили расширение для управления ключами и сгенерировали ключ, Вы можете последовать нашему гиду для новичков, чтобы настроить свой профиль и найти интересных людей, заслуживающих подписки на Nostr.",
"5u6iEc": "Перевести на Pubkey",
"5vMmmR": "Usernames are not unique on Nostr. The nostr address is your unique human-readable address that is unique to you upon registration.",
"5vMmmR": "Имя пользователя не является уникальным на Nostr. Nostr адрес - это ваш уникальный человеко читаемый адрес, который уникален для вас при регистрации.",
"5ykRmX": "Отправить зап",
"6/SF6e": "<h1>{n}</h1> Cashu sats",
"6/hB3S": "Watch Replay",
"6/hB3S": "Смотреть повтор",
"65BmHb": "Не удалось загрузить изображение через {host}, нажмите здесь, чтобы загрузить напрямую",
"6OSOXl": "Reason: <i>{reason}</i>",
"6OSOXl": "Причина: <i>{reason}</i>",
"6Yfvvp": "Получите адрес",
"6bgpn+": "Not all clients support this, you may still receive some zaps as if zap splits was not configured",
"6bgpn+": "Не все клиенты поддерживают это, вы все равно можете получить некоторые запы, как если бы запределение не было настроено",
"6ewQqw": "Лайки ({n})",
"6uMqL1": "Не оплачено",
"7+Domh": "Заметки",
@ -76,13 +76,13 @@
"7hp70g": "NIP-05",
"8/vBbP": "Репосты ({n})",
"89q5wc": "Подтверждать репосты",
"8Kboo2": "Scan this QR code with your signer app to get started",
"8Kboo2": "Отсканируйте этот QR код с вашим приложением для регистрации, чтобы начать",
"8QDesP": "Запнуть {n} сат",
"8Rkoyb": "Recipient",
"8Y6bZQ": "Invalid zap split: {input}",
"8Rkoyb": "Получатель",
"8Y6bZQ": "Неверный zap сплит: {input}",
"8g2vyB": "имя слишком длинное",
"8v1NN+": "Фраза для сопряжения",
"8xNnhi": "Nostr Extension",
"8xNnhi": "Расширение Nostr",
"9+Ddtu": "Далее",
"9HU8vw": "Ответить",
"9SvQep": "Подписан(а) на {n}",
@ -91,7 +91,7 @@
"9pMqYs": "Nostr адрес",
"9wO4wJ": "Лайтнинг-инвойс",
"ADmfQT": "Ветка",
"AGNz71": "Zap All {n} sats",
"AGNz71": "Зап Все {n} sats",
"ASRK0S": "Этот автор был заглушен",
"Adk34V": "Настройте свой профиль",
"Ai8VHU": "Снятие ограничения срока хранения ваших заметок на релее Snort",
@ -108,7 +108,7 @@
"BcGMo+": "Заметки содержат текст; наиболее популярное применение этих заметок - передача сообщений \"подобно твиттеру\".",
"C5xzTC": "Premium",
"C81/uG": "Выход",
"C8HhVE": "Suggested Follows",
"C8HhVE": "Предложенные подписки",
"CHTbO3": "Не удалось загрузить инвойс",
"CVWeJ6": "Популярные профили",
"CmZ9ls": "{n} заглушен",
@ -120,12 +120,12 @@
"DZzCem": "Показать последние {n} заметки",
"DcL8P+": "Саппортер",
"Dh3hbq": "Авто Зап",
"Dn82AL": "Live",
"Dn82AL": "Прямой эфир",
"DtYelJ": "Перевод",
"E8a4yq": "Подпишитесь на популярные аккаунты",
"ELbg9p": "Data Providers",
"ELbg9p": "Данные провайдера",
"EPYwm7": "Ваш приватный ключ - это Ваш пароль. Если Вы потеряете этот ключ, вы потеряете доступ к своей учетной записи! Скопируйте и сохраните его в надежном месте. Восстановить приватный ключ невозможно.",
"EQKRE4": "Show badges on profile pages",
"EQKRE4": "Показывать значки на страницах профиля",
"EWyQH5": "Глобальная лента",
"Ebl/B2": "Перевести на {lang}",
"EcZF24": "Кастомные релеи",
@ -135,9 +135,9 @@
"F+B3x1": "Мы также сотрудничаем с nostrplebs.com, чтобы предоставить Вам больше возможностей",
"F3l7xL": "Добавить аккаунт",
"FDguSC": "{n} Запов",
"FMfjrl": "Show status messages on profile pages",
"FMfjrl": "Показывать статусные сообщения на страницах профиля",
"FS3b54": "Готово!",
"FSYL8G": "Trending Users",
"FSYL8G": "Трендовые пользователи",
"FdhSU2": "Получить сейчас",
"FfYsOb": "Произошла ошибка!",
"FmXUJg": "подписан(а) на Вас",
@ -145,24 +145,24 @@
"G1BGCg": "Выберите кошелек",
"GFOoEE": "Соль",
"GL8aXW": "Закладки ({n})",
"GQPtfk": "Join Stream",
"GSye7T": "Lightning Address",
"GQPtfk": "Присоединиться к стриму",
"GSye7T": "Lightning Адрес",
"GUlSVG": "Получите Nostr адрес от Snort",
"Gcn9NQ": "Magnet-ссылка",
"GspYR7": "{n} Дизлайк",
"Gxcr08": "Broadcast Event",
"Gxcr08": "Трансляция события",
"H+vHiz": "Hex ключа..",
"H0JBH6": "Выйти",
"H6/kLh": "Заказ оплачен!",
"HAlOn1": "Имя",
"HFls6j": "имя будет доступно позже",
"HOzFdo": "Заглушен",
"HWbkEK": "Clear cache and reload",
"HWbkEK": "Очистить кэш и перезагрузить",
"HbefNb": "Открыть кошелек",
"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": "Вы не подписаны на этого человека, нажмите здесь, чтобы загрузить медиа из <i>{link}</i>, или обновите <a><i>ваши предпочтения</i></a> чтобы всегда загружать медиа от всех.",
"IDjHJ6": "Спасибо, что выбрали Snort, пожалуйста, поддержите проект, если это возможно.",
"IEwZvs": "Вы уверены, что хотите открепить эту заметку?",
"IKKHqV": "Follows",
"IKKHqV": "Подписки",
"INSqIz": "Имя пользователя в Twitter...",
"IUZC+0": "Это означает, что никто не может изменить созданные Вами заметки, и каждый может легко убедиться, что увиденные ими заметки созданы Вами.",
"Ig9/a1": "Sent {n} sats to {name}",

View File

@ -277,7 +277,7 @@ export class EventPublisher {
*/
async decryptGeneric(content: string, from: string) {
const pl = decodeEncryptionPayload(content);
switch(pl.v) {
switch (pl.v) {
case MessageEncryptorVersion.Nip4: {
const nip4Payload = `${base64.encode(pl.ciphertext)}?iv=${base64.encode(pl.nonce)}`;
return await this.#signer.nip4Decrypt(nip4Payload, from);

View File

@ -158,4 +158,4 @@ export function decodeEncryptionPayload(p: string) {
export function encodeEncryptionPayload(p: MessageEncryptorPayload) {
return base64.encode(new Uint8Array([p.v, ...p.nonce, ...p.ciphertext]));
}
}