From 4d4d81edbd3ae72b938213ef2687d214cf7325f2 Mon Sep 17 00:00:00 2001 From: davotoula Date: Thu, 21 May 2026 00:12:42 +0200 Subject: [PATCH 1/7] translate calendar + on-chain wallet strings to cs, de, pt-BR, svclose remaining translation gaps in cs, de, pt-BR, sv Translate the plurals and strings missed by the first pass --- .../src/main/res/values-cs-rCZ/strings.xml | 152 ++++++++++++++++++ .../src/main/res/values-de-rDE/strings.xml | 149 +++++++++++++++++ .../src/main/res/values-pt-rBR/strings.xml | 146 +++++++++++++++++ .../src/main/res/values-sv-rSE/strings.xml | 145 +++++++++++++++++ 4 files changed, 592 insertions(+) diff --git a/amethyst/src/main/res/values-cs-rCZ/strings.xml b/amethyst/src/main/res/values-cs-rCZ/strings.xml index 90ca003b07..ec275a1b81 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 + Feed + Minulé + Nadcházející + Z vybraného feedu 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é kolekce. + Zatím žádné kolekce + Spojte události dohromady — sérii setkání, sekci konference, plán vašeho týmu. Klepnutím na + vytvořte novou. + vybráno + dnes + Den %1$d z %2$d + Zobrazit možnosti vytvoření + Vytvořit novou událost kalendáře + Vytvořit novou kalendářovou kolekci + 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ář? + Seznam kalendáře 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 satoshi + 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 odeberete. + 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ý 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í, plňte a vybírejte tuto peněženku z neprivátní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 vaše 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, žádné události + %1$s, %2$d událost + %1$s, %2$d události + %1$s, %2$d událostí + %1$s, %2$d událostí + + + 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í obsahující %1$d uživatelů: diff --git a/amethyst/src/main/res/values-de-rDE/strings.xml b/amethyst/src/main/res/values-de-rDE/strings.xml index 62f11d5819..c8de7d114b 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 Kalendersammlungen. + Noch keine Sammlungen + 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 + Neue Kalendersammlung 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 + Zusagen (%1$d) + Komme + ✓ Komme + Vielleicht + \? Vielleicht + Kann nicht + ✗ Kann nicht + Noch keine Zusagen. + 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 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, befülle und entleere diese Wallet von und zu nicht-privaten Konten, wie Börsen. 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, es ausgeben kann. + Verstanden + On-Chain-Transaktionen + Nowhere Drop + + %1$d Termin + %1$d Termine + + + %1$s, keine Termine + %1$s, %2$d Termin + %1$s, %2$d Termine + + + Beginnt in %1$d Minute + Beginnt in %1$d Minuten + + Folgenliste + Folgenliste (%1$d) + Folgenliste mit %1$d Nutzern: + Links + Issues + Nowhere Veranstaltung + 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..04414f4d48 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 + Nenhum evento de calendário futuro ou passado do feed selecionado ainda. + 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. + Sem coleções de calendário ainda. + Sem coleções ainda + 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 uma nova coleção de 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? + A lista do calendário será removida. Os eventos dentro dela não sã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 + Confirmações (%1$d) + Vou + ✓ Vou + Talvez + \? Talvez + Não posso + ✗ Não posso + Sem confirmações 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 de 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 na blockchain.\n\nPara preservar sua privacidade, abasteça e esvazie esta carteira a partir de e para contas não privadas, como corretoras. 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 gastá-lo. + Entendi + Transações on-chain + Nowhere Drop + + %1$d evento + %1$d eventos + + + %1$s, sem eventos + %1$s, %2$d evento + %1$s, %2$d 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..b3663a1f7f 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 kalendersamlingar än. + Inga samlingar ä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 kalendersamling + 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 + Kan inte + ✗ Kan 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 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 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å blockchain.\n\nFör att bevara din integritet, fyll på och töm denna plånbok från och till icke-privata konton, som börser. 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 dem. + Uppfattat + On-chain-transaktioner + Nowhere Drop + + %1$d händelse + %1$d händelser + + + %1$s, inga händelser + %1$s, %2$d händelse + %1$s, %2$d 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 From 898dec73b95a938044e9b3c87a0271cf17e42934 Mon Sep 17 00:00:00 2001 From: davotoula Date: Thu, 21 May 2026 08:14:31 +0200 Subject: [PATCH 2/7] i18n: special-case count=0 at call site for calendar day a11y label --- .../loggedIn/calendars/CalendarDayA11y.kt | 40 +++++++++++++++++++ .../loggedIn/calendars/CalendarMonthView.kt | 4 +- .../loggedIn/calendars/CalendarWeekView.kt | 3 +- .../src/main/res/values-cs-rCZ/strings.xml | 2 +- .../src/main/res/values-de-rDE/strings.xml | 2 +- .../src/main/res/values-pt-rBR/strings.xml | 2 +- .../src/main/res/values-sv-rSE/strings.xml | 2 +- amethyst/src/main/res/values/strings.xml | 2 +- 8 files changed, 47 insertions(+), 10 deletions(-) create mode 100644 amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/calendars/CalendarDayA11y.kt 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 ec275a1b81..6cc5303a6d 100644 --- a/amethyst/src/main/res/values-cs-rCZ/strings.xml +++ b/amethyst/src/main/res/values-cs-rCZ/strings.xml @@ -2784,12 +2784,12 @@ %1$d událostí - %1$s, žádné události %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 diff --git a/amethyst/src/main/res/values-de-rDE/strings.xml b/amethyst/src/main/res/values-de-rDE/strings.xml index c8de7d114b..36fa2c5134 100644 --- a/amethyst/src/main/res/values-de-rDE/strings.xml +++ b/amethyst/src/main/res/values-de-rDE/strings.xml @@ -2754,10 +2754,10 @@ anz der Bedingungen ist erforderlich %1$d Termine - %1$s, keine 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 diff --git a/amethyst/src/main/res/values-pt-rBR/strings.xml b/amethyst/src/main/res/values-pt-rBR/strings.xml index 04414f4d48..febd5b47b3 100644 --- a/amethyst/src/main/res/values-pt-rBR/strings.xml +++ b/amethyst/src/main/res/values-pt-rBR/strings.xml @@ -2752,10 +2752,10 @@ %1$d eventos - %1$s, sem 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 diff --git a/amethyst/src/main/res/values-sv-rSE/strings.xml b/amethyst/src/main/res/values-sv-rSE/strings.xml index b3663a1f7f..dd64ca4dc2 100644 --- a/amethyst/src/main/res/values-sv-rSE/strings.xml +++ b/amethyst/src/main/res/values-sv-rSE/strings.xml @@ -2752,10 +2752,10 @@ %1$d händelser - %1$s, inga 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 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 From 2d3a2582ee38bfd68e3b8e2f0028b7ef4c32b34c Mon Sep 17 00:00:00 2001 From: davotoula Date: Thu, 21 May 2026 08:32:19 +0200 Subject: [PATCH 3/7] docs(skill): catch dead quantity="zero" entries in find-missing-translations --- .../skills/find-missing-translations/SKILL.md | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) 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 From a877ef7ec7db8545c3c156f3d9109dd0861171f5 Mon Sep 17 00:00:00 2001 From: davotoula Date: Thu, 21 May 2026 09:19:12 +0200 Subject: [PATCH 4/7] i18n(cs): apply Czech translation review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Native-speaker review surfaced several consistency and wording fixes in the Czech translations from this branch: - Use "Kanál" for "feed" (matches existing feed/home_feed/global_feed). - Use "sats" not "satoshi" (matches new_amount_in_sats / amount_in_sats). - Match Lightning sibling string's "odstraníte" (vs "odeberete") on quick_zap_amounts_onchain_explainer. - Capitalize "Nostr" in calendar_share_nostr. - Calendar collection naming: use "kalendář" for actions (New / Edit / Delete) matching the English source's user-facing simplification; keep the disambiguating "seznamy" wording for the empty-state body and title (matches route_calendar_collections = "Seznamy kalendářů" and English's "No calendar collections yet"). - Rephrase contact_list_containing_label to dodge Czech count inflection ("Seznam sledování (%1$d):" rather than "obsahující %1$d uživatelů" which is only correct for n ≥ 5). - Wallet privacy dialog: "vkládejte do peněženky a vybírejte z ní" (deposit/withdraw verbs) over "plňte a vybírejte"; "váš nsec" (masc. inanimate) over "vaše nsec"; "nesoukromých účtů" over "neprivátních". - "on-chain backend" over "chain backend" in wallet_onchain_no_backend. --- .../src/main/res/values-cs-rCZ/strings.xml | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/amethyst/src/main/res/values-cs-rCZ/strings.xml b/amethyst/src/main/res/values-cs-rCZ/strings.xml index 6cc5303a6d..3e488ce306 100644 --- a/amethyst/src/main/res/values-cs-rCZ/strings.xml +++ b/amethyst/src/main/res/values-cs-rCZ/strings.xml @@ -2669,25 +2669,25 @@ Den Týden Měsíc - Feed + Kanál Minulé Nadcházející - Z vybraného feedu zatím nejsou žádné nadcházející ani minulé události. + 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é kolekce. - Zatím žádné kolekce - Spojte události dohromady — sérii setkání, sekci konference, plán vašeho týmu. Klepnutím na + vytvořte novou. + 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 novou kalendářovou kolekci + Vytvořit nový kalendář Nový kalendář Nová událost kalendáře Upravit kalendář @@ -2700,7 +2700,7 @@ Události v tomto kalendáři (%1$d) Smazat kalendář Smazat tento kalendář? - Seznam kalendáře bude odstraněn. Události v něm nebudou smazány. + Kalendář bude odstraněn. Události v něm nebudou smazány. Název Shrnutí Místo @@ -2732,7 +2732,7 @@ 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 jako Nostr odkaz Sdílet odkaz na kalendář Exportovat do kalendáře (.ics) Sdílet událost kalendáře @@ -2762,18 +2762,18 @@ Detail události On-chain Bitcoin zap Čeká na potvrzení - Nová on-chain částka v satoshi + 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 odeberete. + 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ý chain backend. + 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í, plňte a vybírejte tuto peněženku z neprivátní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 vaše nsec, je může utratit. + 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 @@ -2798,5 +2798,5 @@ Seznam sledování Seznam sledování (%1$d) - Seznam sledování obsahující %1$d uživatelů: + Seznam sledování (%1$d): From db8791f5fc24d142df6b90296844c869cc99af22 Mon Sep 17 00:00:00 2001 From: davotoula Date: Thu, 21 May 2026 09:45:09 +0200 Subject: [PATCH 5/7] i18n(pt-BR): apply Brazilian Portuguese translation review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Native-speaker review surfaced consistency and wording fixes: - Capitalize "Nostr" in calendar_share_nostr. - "no blockchain" (masculine, matches ots_info_description) over "na blockchain" in wallet_onchain_public_dialog_body. - Calendar collection naming: use "calendário" for action labels (New / Edit / Delete) matching the English source's user-facing simplification; use "lista de calendário" only in the empty-state body and route header (matches route_calendar_collections = "Listas de calendário" and English's "Calendar lists"). Same hybrid we resolved for Czech. - Symmetric RSVP pair: "Vou" / "Talvez" / "Não vou" (instead of mixed "Vou" / "Talvez" / "Não posso"). - "RSVPs" over "Confirmações" for calendar_rsvp_section and calendar_rsvp_none — the section also includes "Talvez" / "Não vou" responses, so "Confirmações" was misleading. Aligns with the existing "RSVP do Compromisso" usage in kind_appt_rsvp. - wallet_onchain_public_dialog_body: clearer privacy wording ("abasteça a partir de contas não privadas e envie os fundos de volta" over "abasteça e esvazie a partir de e para"); make antecedent of "gastar" explicit ("gastar os fundos" over ambiguous "-lo"). - calendar_empty_feed: reorder to drop trailing "ainda" — "Ainda não há eventos…" reads more naturally than "…ainda" at end. - calendar_collection_delete_confirm_message: align tenses (future + future "será removido / não serão excluídos" over future + present). - "backend on-chain" over "backend de chain" in wallet_onchain_no_backend. Note: contact_list_* strings use the semantically-correct "seguidos" (people you follow, per kind:3), even though existing follow_list_selection / follow_sets use the inverted "seguidores". Recommended follow-up: clean up legacy strings to match. --- .../src/main/res/values-pt-rBR/strings.xml | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/amethyst/src/main/res/values-pt-rBR/strings.xml b/amethyst/src/main/res/values-pt-rBR/strings.xml index febd5b47b3..27b2e99712 100644 --- a/amethyst/src/main/res/values-pt-rBR/strings.xml +++ b/amethyst/src/main/res/values-pt-rBR/strings.xml @@ -2642,22 +2642,22 @@ Feed Passados Próximos - Nenhum evento de calendário futuro ou passado do feed selecionado ainda. + 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. - Sem coleções de calendário ainda. - Sem coleções ainda + 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 uma nova coleção de calendário + Criar um novo calendário Novo calendário Novo evento de calendário Editar calendário @@ -2670,7 +2670,7 @@ Eventos neste calendário (%1$d) Excluir calendário Excluir este calendário? - A lista do calendário será removida. Os eventos dentro dela não são excluídos. + O calendário será removido. Os eventos dentro dele não serão excluídos. Título Resumo Local @@ -2702,7 +2702,7 @@ 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 como link Nostr Compartilhar link do calendário Exportar para calendário (.ics) Compartilhar evento de calendário @@ -2710,14 +2710,14 @@ Abrir link Acontecendo agora %1$s · termina %2$s - Confirmações (%1$d) + RSVPs (%1$d) Vou ✓ Vou Talvez \? Talvez - Não posso - ✗ Não posso - Sem confirmações ainda. + 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. @@ -2739,11 +2739,11 @@ Nenhuma transação corresponde a este filtro Copiar endereço Nenhum endereço on-chain disponível para esta conta. - Nenhum backend de chain configurado. + 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 na blockchain.\n\nPara preservar sua privacidade, abasteça e esvazie esta carteira a partir de e para contas não privadas, como corretoras. 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 gastá-lo. + 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 From 44f8d1bfa85b49fd3b525f0b7eca1e4a58d04c9c Mon Sep 17 00:00:00 2001 From: davotoula Date: Thu, 21 May 2026 09:50:09 +0200 Subject: [PATCH 6/7] i18n(de): apply German translation review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Native-speaker review surfaced consistency and wording fixes: - Calendar collection naming: use "Kalender" for action labels (New / Edit / Delete) matching the English source's user-facing simplification; use "Kalenderliste" only in the empty-state body and route header (matches route_calendar_collections = "Kalenderlisten" and English's "Calendar lists"). Same hybrid as Czech and pt-BR. - On-Chain hyphenation: "On-Chain-Backend" over "Chain-Backend" in wallet_onchain_no_backend; "Stattdessen On-Chain senden" over "Stattdessen on-chain senden" in send_onchain_instead. Matches the rest of the batch's German compound-noun convention. - "Nowhere Event" over "Nowhere Veranstaltung" — aligns with the English source's all-English Nowhere brand prefixes (Drop / Forum / Petition were already English). - "RSVPs" / "Antworten" over "Zusagen" for calendar_rsvp_section and calendar_rsvp_none — section also includes "Vielleicht" and "Komme nicht", so "Zusagen" was misleading. Aligns with the existing "RSVP für Termin" usage in kind_appt_rsvp. - Symmetric RSVP pair: "Komme" / "Vielleicht" / "Komme nicht" (instead of mixed "Komme" / "Vielleicht" / "Kann nicht"). - wallet_onchain_public_dialog_body: clearer privacy wording ("lade auf und sende zurück" over "befülle und entleere von und zu"); make antecedent of "ausgeben" explicit ("die Mittel ausgeben" over ambiguous "es"). - contact_list_containing_label: rephrase to dodge German declension for n=1 ("Folgenliste (%1$d Nutzer):" over "Folgenliste mit %1$d Nutzern:" which is dative-plural-only). --- .../src/main/res/values-de-rDE/strings.xml | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/amethyst/src/main/res/values-de-rDE/strings.xml b/amethyst/src/main/res/values-de-rDE/strings.xml index 36fa2c5134..e2c1b6d217 100644 --- a/amethyst/src/main/res/values-de-rDE/strings.xml +++ b/amethyst/src/main/res/values-de-rDE/strings.xml @@ -2651,15 +2651,15 @@ anz der Bedingungen ist erforderlich Keine Termine an diesem Tag. Tippe auf +, um einen hinzuzufügen. Nichts diese Woche Keine Termine in dieser Woche. - Noch keine Kalendersammlungen. - Noch keine Sammlungen + 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 - Neue Kalendersammlung erstellen + Neuen Kalender erstellen Neuer Kalender Neuer Kalendertermin Kalender bearbeiten @@ -2712,14 +2712,14 @@ anz der Bedingungen ist erforderlich Link öffnen Findet jetzt statt %1$s · endet %2$s - Zusagen (%1$d) + RSVPs (%1$d) Komme ✓ Komme Vielleicht \? Vielleicht - Kann nicht - ✗ Kann nicht - Noch keine Zusagen. + Komme nicht + ✗ Komme nicht + Noch keine Antworten. calendar_reminders Kalendererinnerungen Hinweis, wenn ein Termin, an dem du teilnimmst, bald beginnt. @@ -2737,15 +2737,15 @@ anz der Bedingungen ist erforderlich 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 + Stattdessen On-Chain senden Keine Transaktionen entsprechen diesem Filter Adresse kopieren Keine On-Chain-Adresse für dieses Konto verfügbar. - Kein Chain-Backend konfiguriert. + 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, befülle und entleere diese Wallet von und zu nicht-privaten Konten, wie Börsen. 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, es ausgeben kann. + 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 @@ -2764,10 +2764,10 @@ anz der Bedingungen ist erforderlich Folgenliste Folgenliste (%1$d) - Folgenliste mit %1$d Nutzern: + Folgenliste (%1$d Nutzer): Links Issues - Nowhere Veranstaltung + Nowhere Event Nowhere Forum Nowhere Petition From ec2f621772231033b103421d2c2c52570f48610e Mon Sep 17 00:00:00 2001 From: davotoula Date: Thu, 21 May 2026 09:52:51 +0200 Subject: [PATCH 7/7] i18n(sv): apply Swedish translation review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Native-speaker review surfaced consistency and wording fixes: - Calendar collection naming: use "kalender" for action labels (New / Edit / Delete) matching the English source's user-facing simplification; use "kalenderlista" only in the empty-state body and route header (matches route_calendar_collections = "Kalenderlistor" and English's "Calendar lists"). Same hybrid as Czech, pt-BR, and German. - Capitalize "Nostr" in calendar_share_nostr. - "on-chain-backend" over "chain-backend" in wallet_onchain_no_backend (rest of batch already uses the on-chain- compound). - "blockchainen" (definite form, matches existing ots_info_description) over bare "blockchain" in wallet_onchain_public_dialog_body. - Tighten Lightning comparison: "större än för Lightning" over "större än Lightning" (the bare comparison was elliptical). - wallet_onchain_public_dialog_body: clearer privacy wording ("fyll på från icke-privata konton och skicka tillbaka medel dit" over "fyll på och töm från och till"); make antecedent of "spendera" explicit ("spendera medlen" over ambiguous "spendera dem"). - Symmetric RSVP pair: "Kommer" / "Kanske" / "Kommer inte" (instead of mixed "Kommer" / "Kanske" / "Kan inte"). Matches the same fix applied for German and pt-BR. Note: calendar_rsvp_section / calendar_rsvp_none already use the established Swedish "OSA" acronym (matching kind_appt_rsvp = "OSA för möte"), so no rename needed unlike de/pt-BR where the section noun ("Zusagen"/"Confirmações") had to be replaced. --- .../src/main/res/values-sv-rSE/strings.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/amethyst/src/main/res/values-sv-rSE/strings.xml b/amethyst/src/main/res/values-sv-rSE/strings.xml index dd64ca4dc2..d467b17c42 100644 --- a/amethyst/src/main/res/values-sv-rSE/strings.xml +++ b/amethyst/src/main/res/values-sv-rSE/strings.xml @@ -2649,15 +2649,15 @@ 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 kalendersamlingar än. - Inga samlingar än + 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 kalendersamling + Skapa en ny kalender Ny kalender Ny kalenderhändelse Redigera kalender @@ -2702,7 +2702,7 @@ 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 som Nostr-länk Dela kalenderlänk Exportera till kalender (.ics) Dela kalenderhändelse @@ -2715,8 +2715,8 @@ ✓ Kommer Kanske \? Kanske - Kan inte - ✗ Kan inte + Kommer inte + ✗ Kommer inte Inga OSA än. calendar_reminders Kalenderpåminnelser @@ -2734,16 +2734,16 @@ 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 Lightning. Tryck på ett belopp för att ta bort det. + 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 chain-backend är konfigurerad. + 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å blockchain.\n\nFör att bevara din integritet, fyll på och töm denna plånbok från och till icke-privata konton, som börser. 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 dem. + 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