diff --git a/.claude/skills/find-missing-translations/SKILL.md b/.claude/skills/find-missing-translations/SKILL.md index 9f8c14109c..f9bc30f72a 100644 --- a/.claude/skills/find-missing-translations/SKILL.md +++ b/.claude/skills/find-missing-translations/SKILL.md @@ -74,7 +74,14 @@ Before presenting results, **scan the missing English strings** for two red-flag 1. **Hardcoded `"1"` next to a noun.** A new English string like `"1 reply"`, `"1 follower"`, or `"1 minute ago"` almost always belongs in a `` resource — not a ``. Hardcoding `1` in English forces every translator to either also hardcode `1` (breaking languages where the `one` category covers other numbers, e.g. some Slavic languages) or to silently change the meaning. 2. **A `%d` / `%1$d` placeholder in a clearly singular/plural sentence** (e.g. `"%1$d reply"`, `"%d follower"`). Even though the placeholder is parameterised, English-only `one`/`other` agreement won't survive translation into languages that need `few`/`many`. -Also **audit existing `` resources** for the same anti-pattern — any locale's `quantity="one"` item that hardcodes the literal `1` (instead of using a `%d` / `%1$d` placeholder) is broken for languages where the `one` CLDR category covers more than just `n=1` (Russian, Ukrainian, Croatian, etc.). Flag and offer to fix: +Also **audit existing `` resources** for two anti-patterns: + +1. **`quantity="one"` items that hardcode the literal `1`** (instead of using a `%d` / `%1$d` placeholder) — broken for languages where the `one` CLDR category covers more than just `n=1` (Russian, Ukrainian, Croatian, etc.). +2. **`quantity="zero"` items in any locale that doesn't natively use the `zero` CLDR category** — i.e. **everything except Arabic (`ar`) and Welsh (`cy`)**. ICU/CLDR maps `count=0` to `other` for English and all the locales we ship to (cs, de, pt-BR, sv, etc.), so `` is **dead code** there: `getQuantityString(id, 0)` will pick `other`, never the zero entry, and the visible runtime string ends up `"…0 items"` instead of the intended `"…no items"`. + +If a UX genuinely wants special "no items" wording at count=0, that has to be a call-site `if (count == 0)` branch to a separate ``, **not** a `quantity="zero"` plural item. + +Flag and offer to fix: ```bash # Scan every locale's strings.xml for entries that @@ -96,6 +103,27 @@ for f in amethyst/src/main/res/values/strings.xml amethyst/src/main/res/values-* done ``` +Then scan for dead `quantity="zero"` entries. CLDR's `zero` category is integer-bearing only in **Arabic (`ar`)** and **Welsh (`cy`)**. In every other locale, count=0 falls through to `other`, so a `` entry is dead and likely a translator/author bug (or it silently never fires): + +```bash +for f in amethyst/src/main/res/values/strings.xml amethyst/src/main/res/values-*/strings.xml; do + # Skip Arabic and Welsh — they natively use the zero category. + case "$f" in + *values-ar*|*values-cy*) continue ;; + esac + awk -v file="$f" ' + /]*>/, "", text); sub(/<.*$/, "", text) + print file ": zero=\"" text "\"" + } + /<\/plurals>/ { in_plurals = 0 } + ' "$f" +done +``` + +For each hit, warn the user that the entry is unreachable in that locale. The fix is to **remove the ``** and, if the UX wanted distinct wording for count=0, add a separate `` plus an `if (count == 0)` branch at the call site (see "Plurals: handle with care" below). + Quick scan over the missing keys: ```bash @@ -147,6 +175,14 @@ When adding or proposing **``** entries, follow these rules: - Arabic (`ar`): `zero`, `one`, `two`, `few`, `many`, `other` - German / Swedish / Brazilian Portuguese: `one`, `other` - When a missing string contains a count placeholder and is conceptually a singular/plural pair, **flag it before translating** — it may belong as a `` resource rather than a single ``. Surface this to the user before proposing translations. +- **Do not use `quantity="zero"` outside Arabic (`ar`) and Welsh (`cy`).** CLDR's `zero` category is integer-bearing only in those two languages. Android calls `PluralRules.select(0)` for the device locale; in English/German/Czech/Polish/Russian/Swedish/Portuguese/etc. it returns `other`, so the explicit `` is never picked at runtime and the user sees `"…0 items"` instead of the intended wording. If the design calls for "no items" at count=0, model it as a separate `` and an `if (count == 0)` branch at the call site: + ```kotlin + val label = if (count == 0) { + stringRes(R.string.foo_no_items, dateLabel) + } else { + pluralStringResource(R.plurals.foo_items, count, dateLabel, count) + } + ``` - Reference: [Android `` docs](https://developer.android.com/guide/topics/resources/string-resource#Plurals) and [CLDR plural rules](https://unicode-org.github.io/cldr-staging/charts/latest/supplemental/language_plural_rules.html). **Then ask the user:** "Would you like me to translate these missing strings into [list of target locales]?" @@ -165,4 +201,5 @@ When adding translated strings to locale files: - **Diffing each locale separately** — only diff against `cs-rCZ`; assume the same keys are missing everywhere - **Inserting strings in a specific position** — always append at the bottom; ordering is handled separately - **Hardcoding `"1"` in a `` `quantity="one"` item** — always use the count placeholder; otherwise non-English `one` categories produce wrong text -- **Copying English's `one`/`other` set into every locale** — each language must include all CLDR plural categories it uses (e.g. Czech needs `one`, `few`, `many`, `other`) \ No newline at end of file +- **Copying English's `one`/`other` set into every locale** — each language must include all CLDR plural categories it uses (e.g. Czech needs `one`, `few`, `many`, `other`) +- **Using `` to special-case count=0** — outside Arabic and Welsh, this entry is unreachable: ICU/CLDR maps 0 → `other`, so the runtime never picks the zero item and the user sees `"…0 items"`. Special-case at the call site with a separate `` instead. \ No newline at end of file diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarDayA11y.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarDayA11y.kt new file mode 100644 index 0000000000..dcaec39af4 --- /dev/null +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarDayA11y.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2025 Vitor Pamplona + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.vitorpamplona.amethyst.ui.screen.loggedIn.calendars + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.pluralStringResource +import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.ui.stringRes + +// Picks calendar_day_a11y_no_events when count is 0 because ICU/CLDR maps 0 to +// the `other` category for every locale we ship, which would otherwise render +// "[date], 0 events" instead of "[date], no events". +@Composable +fun calendarDayA11yLabel( + dateLabel: String, + count: Int, +): String = + if (count == 0) { + stringRes(R.string.calendar_day_a11y_no_events, dateLabel) + } else { + pluralStringResource(R.plurals.calendar_day_a11y_events, count, dateLabel, count) + } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarMonthView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarMonthView.kt index 648210bee6..69322f2b74 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarMonthView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarMonthView.kt @@ -46,7 +46,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics @@ -266,8 +265,7 @@ private fun DayCell( MaterialTheme.colorScheme.surface } - val baseDescription = - pluralStringResource(R.plurals.calendar_day_a11y_events, totalEventCount, dateLabel, totalEventCount) + val baseDescription = calendarDayA11yLabel(dateLabel, totalEventCount) val todaySuffix = stringRes(R.string.calendar_day_a11y_today_suffix) val selectedSuffix = stringRes(R.string.calendar_day_a11y_selected_suffix) val a11y = diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarWeekView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarWeekView.kt index c71f126c2a..46b9d8b4d9 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarWeekView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarWeekView.kt @@ -44,7 +44,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics @@ -202,7 +201,7 @@ private fun WeekStrip( } val dateLabel = formatLongDate(date.atStartOfDay(ZoneId.systemDefault()).toEpochSecond()) - val baseA11y = pluralStringResource(R.plurals.calendar_day_a11y_events, count, dateLabel, count) + val baseA11y = calendarDayA11yLabel(dateLabel, count) val todaySuffix = stringRes(R.string.calendar_day_a11y_today_suffix) val selectedSuffix = stringRes(R.string.calendar_day_a11y_selected_suffix) val a11y = diff --git a/amethyst/src/main/res/values-cs-rCZ/strings.xml b/amethyst/src/main/res/values-cs-rCZ/strings.xml index 90ca003b07..3e488ce306 100644 --- a/amethyst/src/main/res/values-cs-rCZ/strings.xml +++ b/amethyst/src/main/res/values-cs-rCZ/strings.xml @@ -2647,4 +2647,156 @@ Nowhere Zpráva Nowhere Umění Nowhere Fórum + + %1$d min + %1$d min + %1$d min + %1$d min + + Kalendáře + Celodenní + Pokračuje + (bez názvu) + Žádné události + V tento den nejsou žádné události + Skočit na dnešek + Další den + Další týden + Další měsíc + Předchozí den + Předchozí týden + Předchozí měsíc + Den + Týden + Měsíc + Kanál + Minulé + Nadcházející + Z vybraného kanálu zatím nejsou žádné nadcházející ani minulé události. + Váš kalendář je prázdný + Události sdílené lidmi, které sledujete, se zobrazí zde. Klepnutím na tlačítko + vytvořte vlastní. + Nic naplánováno + V tento den nejsou žádné události. Klepnutím na + přidejte. + Tento týden nic + V tomto týdnu nejsou žádné události. + Zatím žádné kalendářové seznamy. + Zatím žádné seznamy + Spojte události dohromady — sérii setkání, sekci konference, plán vašeho týmu. Klepnutím na + vytvořte nový. + vybráno + dnes + Den %1$d z %2$d + Zobrazit možnosti vytvoření + Vytvořit novou událost kalendáře + Vytvořit nový kalendář + Nový kalendář + Nová událost kalendáře + Upravit kalendář + Upravit událost kalendáře + Název + Popis + Název je povinný. + V tomto kalendáři zatím nejsou žádné události. + Zatím jste nevytvořili žádné události. + Události v tomto kalendáři (%1$d) + Smazat kalendář + Smazat tento kalendář? + Kalendář bude odstraněn. Události v něm nebudou smazány. + Název + Shrnutí + Místo + Začátek + Konec + Konec musí být po začátku. + Celodenní událost + Uzamčeno během úprav — změna by vytvořila novou událost. + Hashtagy (oddělené čárkou) + URL obrázku + Vybrat datum + Vybrat čas + Vybrat obrázek + Nahrání obrázku selhalo + Vybraný obrázek se nepodařilo nahrát. Zkuste to znovu nebo vložte URL. + Načítání události… + Název a začátek jsou povinné. + V kalendářích (%1$d) + Zatím není součástí žádného kalendáře. + Účastníci (%1$d) + Účastníci (%1$d) + Hledat jméno, npub nebo nip-05 + Zadejte platný npub… nebo 64znakový hex pubkey. + Odebrat účastníka + Všechny kalendáře + Zatím jste nevytvořili žádný kalendář. + Zobrazit události z… + Přidat do kalendáře + Přidat do jednoho z vašich kalendářů + Zatím jste nevytvořili žádný kalendář. + Přidat do kalendáře v telefonu + Sdílet jako Nostr odkaz + Sdílet odkaz na kalendář + Exportovat do kalendáře (.ics) + Sdílet událost kalendáře + Otevřít v mapách + Otevřít odkaz + Probíhá nyní + %1$s · končí %2$s + RSVP (%1$d) + Účastním se + ✓ Účastním se + Možná + \? Možná + Nemůžu + ✗ Nemůžu + Zatím žádné RSVP. + calendar_reminders + Připomenutí kalendáře + Upozornění, když je událost, které se účastníte, blízko začátku. + Událost kalendáře + Připomenutí kalendáře + Posílat připomenutí + Oznámení se spustí, když je událost, které se účastníte, blízko začátku. + Doba předstihu připomenutí + Kolik minut před událostí chcete být upozorněni. + Kalendáře + Seznamy kalendářů + Detail události + On-chain Bitcoin zap + Čeká na potvrzení + Nová on-chain částka v sats + Rychlé částky on-chain zapů + On-chain zapy platí poplatky těžařům, takže částky jsou obvykle vyšší než u Lightningu. Klepnutím na částku ji odstraníte. + Odeslat on-chain + Žádné transakce neodpovídají tomuto filtru + Zkopírovat adresu + Pro tento účet není k dispozici žádná on-chain adresa. + Není nakonfigurován žádný on-chain backend. + Čeká + Veřejné + Tato peněženka je veřejná + Vaše Taproot adresa je odvozena z vašeho veřejného klíče Nostr, takže kdokoli, kdo zná váš npub, může vidět zůstatek této peněženky a historii transakcí na blockchainu.\n\nAbyste zachovali soukromí, vkládejte do této peněženky a vybírejte z ní prostředky z nesoukromých účtů, jako jsou burzy. Nikdy nemíchejte tyto prostředky se svými studenými peněženkami a zacházejte s nimi jako s penězi, které můžete ztratit, protože kdokoli, kdo má pod kontrolou váš nsec, je může utratit. + Rozumím + On-chain transakce + Nowhere Drop + + %1$d událost + %1$d události + %1$d událostí + %1$d událostí + + + %1$s, %2$d událost + %1$s, %2$d události + %1$s, %2$d událostí + %1$s, %2$d událostí + + %1$s, žádné události + + Začíná za %1$d minutu + Začíná za %1$d minuty + Začíná za %1$d minut + Začíná za %1$d minut + + Seznam sledování + Seznam sledování (%1$d) + Seznam sledování (%1$d): diff --git a/amethyst/src/main/res/values-de-rDE/strings.xml b/amethyst/src/main/res/values-de-rDE/strings.xml index 62f11d5819..e2c1b6d217 100644 --- a/amethyst/src/main/res/values-de-rDE/strings.xml +++ b/amethyst/src/main/res/values-de-rDE/strings.xml @@ -2621,4 +2621,153 @@ anz der Bedingungen ist erforderlich Nowhere Shop Nowhere Nachricht Nowhere Kunst + + %1$d Min. + %1$d Min. + + Kalender + Ganztägig + Geht weiter + (ohne Titel) + Keine Termine + Keine Termine an diesem Tag + Zu heute springen + Nächster Tag + Nächste Woche + Nächster Monat + Vorheriger Tag + Vorherige Woche + Vorheriger Monat + Tag + Woche + Monat + Feed + Vergangen + Bevorstehend + Noch keine bevorstehenden oder vergangenen Kalendertermine aus deinem ausgewählten Feed. + Dein Kalender ist leer + Termine, die von Personen geteilt werden, denen du folgst, erscheinen hier. Tippe auf +, um eigene zu erstellen. + Nichts geplant + Keine Termine an diesem Tag. Tippe auf +, um einen hinzuzufügen. + Nichts diese Woche + Keine Termine in dieser Woche. + Noch keine Kalenderlisten. + Noch keine Listen + Gruppiere Termine — eine Meetup-Reihe, ein Konferenz-Track, die Roadmap deines Teams. Tippe auf +, um eine zu erstellen. + ausgewählt + heute + Tag %1$d von %2$d + Erstellungsoptionen anzeigen + Neuen Kalendertermin erstellen + Neuen Kalender erstellen + Neuer Kalender + Neuer Kalendertermin + Kalender bearbeiten + Kalendertermin bearbeiten + Titel + Beschreibung + Ein Titel ist erforderlich. + Noch keine Termine in diesem Kalender. + Du hast noch keine Kalendertermine erstellt. + Termine in diesem Kalender (%1$d) + Kalender löschen + Diesen Kalender löschen? + Die Kalenderliste wird entfernt. Termine darin werden nicht gelöscht. + Titel + Zusammenfassung + Ort + Beginnt + Endet + Ende muss nach Beginn sein. + Ganztägiger Termin + Während der Bearbeitung gesperrt — eine Änderung würde stattdessen einen neuen Termin erstellen. + Hashtags (durch Komma getrennt) + Bild-URL + Datum wählen + Zeit wählen + Bild wählen + Bild-Upload fehlgeschlagen + Das gewählte Bild konnte nicht hochgeladen werden. Versuche es erneut oder füge eine URL ein. + Termin wird geladen… + Titel und Start sind erforderlich. + In Kalendern (%1$d) + Noch nicht Teil eines Kalenders. + Teilnehmer (%1$d) + Teilnehmer (%1$d) + Name, npub oder nip-05 suchen + Gib einen gültigen npub… oder 64-stelligen hex pubkey ein. + Teilnehmer entfernen + Alle Kalender + Du hast noch keine Kalender erstellt. + Termine anzeigen aus… + Zu einem Kalender hinzufügen + Zu einem deiner Kalender hinzufügen + Du hast noch keine Kalender erstellt. + Zum Telefonkalender hinzufügen + Als Nostr-Link teilen + Kalender-Link teilen + In Kalender exportieren (.ics) + Kalendertermin teilen + In Karten öffnen + Link öffnen + Findet jetzt statt + %1$s · endet %2$s + RSVPs (%1$d) + Komme + ✓ Komme + Vielleicht + \? Vielleicht + Komme nicht + ✗ Komme nicht + Noch keine Antworten. + calendar_reminders + Kalendererinnerungen + Hinweis, wenn ein Termin, an dem du teilnimmst, bald beginnt. + Kalendertermin + Kalendererinnerungen + Erinnerungen senden + Eine Benachrichtigung wird angezeigt, wenn ein Termin, an dem du teilnimmst, bald beginnt. + Vorlaufzeit der Erinnerung + Wie viele Minuten vor dem Termin du benachrichtigt werden möchtest. + Kalender + Kalenderlisten + Termindetails + On-Chain-Bitcoin-Zap + Wartet auf Bestätigung + Neuer On-Chain-Betrag in Sats + Schnelle On-Chain-Zap-Beträge + On-Chain-Zaps zahlen Miner-Gebühren, daher sind die Beträge meist größer als bei Lightning. Tippe auf einen Betrag, um ihn zu entfernen. + Stattdessen On-Chain senden + Keine Transaktionen entsprechen diesem Filter + Adresse kopieren + Keine On-Chain-Adresse für dieses Konto verfügbar. + Kein On-Chain-Backend konfiguriert. + Ausstehend + Öffentlich + Diese Wallet ist öffentlich + Deine Taproot-Adresse wird aus deinem öffentlichen Nostr-Schlüssel abgeleitet, daher kann jeder, der deinen npub kennt, den Saldo und die Transaktionshistorie dieser Wallet in der Blockchain einsehen.\n\nUm deine Privatsphäre zu wahren, lade diese Wallet von nicht-privaten Konten (z. B. Börsen) auf und sende Mittel auch nur an solche Konten zurück. Vermische diese Mittel niemals mit deinen Cold Wallets und behandle sie wie Geld, das du verlieren kannst, da jeder, der die Kontrolle über deinen nsec hat, die Mittel ausgeben kann. + Verstanden + On-Chain-Transaktionen + Nowhere Drop + + %1$d Termin + %1$d Termine + + + %1$s, %2$d Termin + %1$s, %2$d Termine + + %1$s, keine Termine + + Beginnt in %1$d Minute + Beginnt in %1$d Minuten + + Folgenliste + Folgenliste (%1$d) + Folgenliste (%1$d Nutzer): + Links + Issues + Nowhere Event + Nowhere Forum + Nowhere Petition diff --git a/amethyst/src/main/res/values-pt-rBR/strings.xml b/amethyst/src/main/res/values-pt-rBR/strings.xml index 7d60e1d9b4..27b2e99712 100644 --- a/amethyst/src/main/res/values-pt-rBR/strings.xml +++ b/amethyst/src/main/res/values-pt-rBR/strings.xml @@ -2619,4 +2619,150 @@ Nowhere Mensagem Nowhere Arte Nowhere Fórum + + %1$d min + %1$d min + + Calendários + Dia inteiro + Continua + (sem título) + Sem eventos + Sem eventos neste dia + Ir para hoje + Próximo dia + Próxima semana + Próximo mês + Dia anterior + Semana anterior + Mês anterior + Dia + Semana + Mês + Feed + Passados + Próximos + Ainda não há eventos de calendário (futuros ou passados) do feed selecionado. + Seu calendário está vazio + Eventos compartilhados por pessoas que você segue aparecem aqui. Toque no botão + para criar os seus. + Nada agendado + Sem eventos neste dia. Toque em + para adicionar um. + Nada esta semana + Nenhum evento nesta semana. + Ainda não há listas de calendário. + Ainda não há listas + Agrupe eventos — uma série de encontros, uma trilha de conferência, o roteiro da sua equipe. Toque em + para criar uma. + selecionado + hoje + Dia %1$d de %2$d + Mostrar opções de criação + Criar um novo evento de calendário + Criar um novo calendário + Novo calendário + Novo evento de calendário + Editar calendário + Editar evento de calendário + Título + Descrição + Um título é obrigatório. + Nenhum evento neste calendário ainda. + Você ainda não criou nenhum evento de calendário. + Eventos neste calendário (%1$d) + Excluir calendário + Excluir este calendário? + O calendário será removido. Os eventos dentro dele não serão excluídos. + Título + Resumo + Local + Começa + Termina + O término deve ser após o início. + Evento de dia inteiro + Bloqueado durante edição — alterar isto criaria um novo evento. + Hashtags (separadas por vírgula) + URL da imagem + Escolher data + Escolher hora + Escolher imagem + Falha no envio da imagem + A imagem escolhida não pôde ser enviada. Tente novamente ou cole uma URL. + Carregando evento… + Título e início são obrigatórios. + Em calendários (%1$d) + Ainda não faz parte de nenhum calendário. + Participantes (%1$d) + Participantes (%1$d) + Buscar nome, npub ou nip-05 + Insira um npub… válido ou pubkey hex de 64 caracteres. + Remover participante + Todos os calendários + Você ainda não criou nenhum calendário. + Mostrar eventos de… + Adicionar a um calendário + Adicionar a um dos seus calendários + Você ainda não criou nenhum calendário. + Adicionar ao calendário do telefone + Compartilhar como link Nostr + Compartilhar link do calendário + Exportar para calendário (.ics) + Compartilhar evento de calendário + Abrir no mapa + Abrir link + Acontecendo agora + %1$s · termina %2$s + RSVPs (%1$d) + Vou + ✓ Vou + Talvez + \? Talvez + Não vou + ✗ Não vou + Sem RSVPs ainda. + calendar_reminders + Lembretes de calendário + Aviso quando um evento do qual você participa está prestes a começar. + Evento de calendário + Lembretes de calendário + Enviar lembretes + Uma notificação é disparada quando um evento do qual você participa está prestes a começar. + Antecedência do lembrete + Quantos minutos antes do evento você quer ser notificado. + Calendários + Listas de calendário + Detalhes do evento + Zap Bitcoin on-chain + Aguardando confirmação + Novo valor on-chain em sats + Valores rápidos de zap on-chain + Zaps on-chain pagam taxas de mineradores, por isso os valores costumam ser maiores que no Lightning. Toque num valor para removê-lo. + Enviar on-chain em vez disso + Nenhuma transação corresponde a este filtro + Copiar endereço + Nenhum endereço on-chain disponível para esta conta. + Nenhum backend on-chain configurado. + Pendente + Pública + Esta carteira é pública + Seu endereço Taproot é derivado da sua chave pública Nostr, então qualquer pessoa que conheça seu npub pode ver o saldo e o histórico de transações desta carteira no blockchain.\n\nPara preservar sua privacidade, abasteça esta carteira a partir de contas não privadas (como corretoras) e envie os fundos de volta para elas. Nunca misture esses fundos com suas carteiras frias e trate-os como dinheiro que você pode perder, pois qualquer um que controle seu nsec pode gastar os fundos. + Entendi + Transações on-chain + Nowhere Drop + + %1$d evento + %1$d eventos + + + %1$s, %2$d evento + %1$s, %2$d eventos + + %1$s, sem eventos + + Começa em %1$d minuto + Começa em %1$d minutos + + Lista de seguidos + Lista de seguidos (%1$d) + Lista de seguidos contendo %1$d usuário(s): + Links + Issues diff --git a/amethyst/src/main/res/values-sv-rSE/strings.xml b/amethyst/src/main/res/values-sv-rSE/strings.xml index 9d46d84fb3..d467b17c42 100644 --- a/amethyst/src/main/res/values-sv-rSE/strings.xml +++ b/amethyst/src/main/res/values-sv-rSE/strings.xml @@ -2619,4 +2619,149 @@ Nowhere Namninsamling Nowhere Meddelande Nowhere Konst + + %1$d min + %1$d min + + Kalendrar + Heldag + Fortsätter + (utan titel) + Inga händelser + Inga händelser denna dag + Hoppa till idag + Nästa dag + Nästa vecka + Nästa månad + Föregående dag + Föregående vecka + Föregående månad + Dag + Vecka + Månad + Flöde + Tidigare + Kommande + Inga kommande eller tidigare kalenderhändelser från ditt valda flöde än. + Din kalender är tom + Händelser delade av personer du följer dyker upp här. Tryck på +-knappen för att skapa egna. + Inget schemalagt + Inga händelser denna dag. Tryck på + för att lägga till en. + Inget den här veckan + Inga händelser denna vecka. + Inga kalenderlistor än. + Inga listor än + Gruppera händelser tillsammans — en träffserie, ett konferensspår, ditt teams färdplan. Tryck på + för att skapa en. + vald + idag + Dag %1$d av %2$d + Visa skapandealternativ + Skapa en ny kalenderhändelse + Skapa en ny kalender + Ny kalender + Ny kalenderhändelse + Redigera kalender + Redigera kalenderhändelse + Titel + Beskrivning + En titel krävs. + Inga händelser i denna kalender än. + Du har inte skapat några kalenderhändelser än. + Händelser i denna kalender (%1$d) + Radera kalender + Radera denna kalender? + Kalenderlistan kommer att tas bort. Händelser inuti den raderas inte. + Titel + Sammanfattning + Plats + Börjar + Slutar + Slut måste vara efter start. + Heldagshändelse + Låst under redigering — att ändra detta skulle skapa en ny händelse istället. + Hashtaggar (kommaseparerade) + Bild-URL + Välj datum + Välj tid + Välj bild + Bilduppladdning misslyckades + Den valda bilden kunde inte laddas upp. Försök igen eller klistra in en URL. + Laddar händelse… + Titel och starttid krävs. + I kalendrar (%1$d) + Inte del av någon kalender än. + Deltagare (%1$d) + Deltagare (%1$d) + Sök namn, npub eller nip-05 + Ange en giltig npub… eller 64-teckens hex pubkey. + Ta bort deltagare + Alla kalendrar + Du har inte skapat några kalendrar än. + Visa händelser från… + Lägg till i en kalender + Lägg till i en av dina kalendrar + Du har inte skapat några kalendrar än. + Lägg till i telefonens kalender + Dela som Nostr-länk + Dela kalenderlänk + Exportera till kalender (.ics) + Dela kalenderhändelse + Öppna i kartor + Öppna länk + Pågår nu + %1$s · slutar %2$s + OSA (%1$d) + Kommer + ✓ Kommer + Kanske + \? Kanske + Kommer inte + ✗ Kommer inte + Inga OSA än. + calendar_reminders + Kalenderpåminnelser + Påminnelse när en händelse du deltar i snart ska börja. + Kalenderhändelse + Kalenderpåminnelser + Skicka påminnelser + En notis visas när en händelse du deltar i snart ska börja. + Påminnelsetid + Hur många minuter före händelsen du vill bli notifierad. + Kalendrar + Kalenderlistor + Händelsedetaljer + On-chain Bitcoin-zap + Väntar på bekräftelse + Nytt on-chain-belopp i sats + Snabba on-chain-zapbelopp + On-chain-zappar betalar miner-avgifter, så beloppen är vanligtvis större än för Lightning. Tryck på ett belopp för att ta bort det. + Skicka on-chain istället + Inga transaktioner matchar detta filter + Kopiera adress + Ingen on-chain-adress tillgänglig för detta konto. + Ingen on-chain-backend är konfigurerad. + Väntar + Offentlig + Denna plånbok är offentlig + Din Taproot-adress härleds från din publika Nostr-nyckel, så alla som känner till din npub kan se denna plånboks saldo och transaktionshistorik på blockchainen.\n\nFör att bevara din integritet, fyll på denna plånbok från icke-privata konton (som börser) och skicka tillbaka medel dit. Blanda aldrig dessa medel med dina kalla plånböcker, och behandla dem som pengar du kan förlora, eftersom alla som har kontroll över din nsec kan spendera medlen. + Uppfattat + On-chain-transaktioner + Nowhere Drop + + %1$d händelse + %1$d händelser + + + %1$s, %2$d händelse + %1$s, %2$d händelser + + %1$s, inga händelser + + Börjar om %1$d minut + Börjar om %1$d minuter + + Följlista + Följlista (%1$d) + Följlista som innehåller %1$d användare: + Nowhere Forum diff --git a/amethyst/src/main/res/values/strings.xml b/amethyst/src/main/res/values/strings.xml index 557cfb208c..15b09c7920 100644 --- a/amethyst/src/main/res/values/strings.xml +++ b/amethyst/src/main/res/values/strings.xml @@ -1932,10 +1932,10 @@ Add to phone calendar Jump to today - %1$s, no events %1$s, %2$d event %1$s, %2$d events + %1$s, no events today selected Create a new calendar event