From 04de488fb011ce52ad604c670282db279b08201e Mon Sep 17 00:00:00 2001 From: Wavesonics Date: Fri, 25 Sep 2026 17:51:38 -0700 Subject: [PATCH 01/39] Treat any-script letters, marks, and digits as word characters in reference matching MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Names no longer match inside words containing accented or non-Latin letters ("Ana" in "Anaïs", "Иван" in "Иванов"). --- .../common/data/references/NameMatcher.kt | 12 +-- .../WholeWordCaseSensitiveMatcherTest.kt | 84 +++++++++++++++++++ 2 files changed, 91 insertions(+), 5 deletions(-) diff --git a/common/src/commonMain/kotlin/com/darkrockstudios/apps/hammer/common/data/references/NameMatcher.kt b/common/src/commonMain/kotlin/com/darkrockstudios/apps/hammer/common/data/references/NameMatcher.kt index aeb592244..ce58129b5 100644 --- a/common/src/commonMain/kotlin/com/darkrockstudios/apps/hammer/common/data/references/NameMatcher.kt +++ b/common/src/commonMain/kotlin/com/darkrockstudios/apps/hammer/common/data/references/NameMatcher.kt @@ -33,10 +33,12 @@ class WholeWordCaseSensitiveMatcher : NameMatcher { } companion object { - // Reject only adjacent letters/digits/underscores — punctuation and whitespace are fine - // on either side. This is more permissive than `\b`, which would fail when the name - // itself starts or ends with a non-word character (e.g. an alias "Mr. Smith"). - private const val NO_WORD_BEFORE = "(? Date: Fri, 25 Sep 2026 23:40:09 -0700 Subject: [PATCH 02/39] New Crowdin updates (#955) * Update source file full_description.txt [ci skip] * New translations full_description.txt (French) [ci skip] * New translations full_description.txt (Spanish) [ci skip] * New translations full_description.txt (German) [ci skip] * New translations full_description.txt (Italian) [ci skip] * New translations full_description.txt (Ukrainian) [ci skip] * New translations full_description.txt (Portuguese, Brazilian) [ci skip] * New translations full_description.txt (French) [ci skip] * New translations full_description.txt (Spanish) [ci skip] * New translations full_description.txt (German) [ci skip] * New translations full_description.txt (Italian) [ci skip] * New translations full_description.txt (Ukrainian) [ci skip] * New translations full_description.txt (Portuguese, Brazilian) [ci skip] * Update source file full_description.txt [ci skip] * New translations messages_en.properties (French) [ci skip] * New translations messages_en.properties (Spanish) [ci skip] * New translations messages_en.properties (German) [ci skip] * New translations messages_en.properties (Italian) [ci skip] * New translations messages_en.properties (Ukrainian) [ci skip] * New translations messages_en.properties (Portuguese, Brazilian) [ci skip] * Update source file Messages_en.properties [ci skip] --- .../android/de-DE/full_description.txt | 6 ++- .../android/es-ES/full_description.txt | 6 ++- .../android/fr-FR/full_description.txt | 6 ++- .../android/it-IT/full_description.txt | 22 +++++---- .../android/pt-BR/full_description.txt | 6 ++- .../metadata/android/uk/full_description.txt | 6 ++- .../resources/i18n/Messages_de.properties | 46 ++++++++++++++++++- .../resources/i18n/Messages_es.properties | 46 ++++++++++++++++++- .../resources/i18n/Messages_fr.properties | 46 ++++++++++++++++++- .../resources/i18n/Messages_it.properties | 46 ++++++++++++++++++- .../resources/i18n/Messages_pt_BR.properties | 46 ++++++++++++++++++- .../resources/i18n/Messages_uk.properties | 46 ++++++++++++++++++- 12 files changed, 302 insertions(+), 26 deletions(-) diff --git a/fastlane/metadata/android/de-DE/full_description.txt b/fastlane/metadata/android/de-DE/full_description.txt index 86866e0b7..54742f5fb 100644 --- a/fastlane/metadata/android/de-DE/full_description.txt +++ b/fastlane/metadata/android/de-DE/full_description.txt @@ -18,4 +18,8 @@ Deine Daten können zwischen Geräten synchronisiert werden, sodass du von über Synchronisierung: optional oder selbstbetrieben -Synchronisierung ist vollständig optional, du kannst den Client installieren und auf einem Gerät verwenden, oder du kannst den Server installieren und deine Daten zwischen den Geräten synchronisieren. \ No newline at end of file +Synchronisierung ist vollständig optional, du kannst den Client installieren und auf einem Gerät verwenden, oder du kannst den Server installieren und deine Daten zwischen den Geräten synchronisieren. + +Wear OS companion + +Capture notes and story ideas from your wrist with the Wear OS app, then pick them up on your other devices. Dictate or type a quick note and file it under a project. Add the Capture tile to start a note or story idea in a single tap, or put the Hammer complication on your watch face to open a new note. The watch app syncs through your Hammer sync server. \ No newline at end of file diff --git a/fastlane/metadata/android/es-ES/full_description.txt b/fastlane/metadata/android/es-ES/full_description.txt index 38256b092..344bcddc9 100644 --- a/fastlane/metadata/android/es-ES/full_description.txt +++ b/fastlane/metadata/android/es-ES/full_description.txt @@ -18,4 +18,8 @@ Your data can be synchronized between devices allowing you to work on your story Optional and Self hosted Syncing -Syncing is entirely optional, you can install the client and use it on one device, or you can install the server and sync your data between devices. \ No newline at end of file +Syncing is entirely optional, you can install the client and use it on one device, or you can install the server and sync your data between devices. + +Wear OS companion + +Capture notes and story ideas from your wrist with the Wear OS app, then pick them up on your other devices. Dictate or type a quick note and file it under a project. Add the Capture tile to start a note or story idea in a single tap, or put the Hammer complication on your watch face to open a new note. The watch app syncs through your Hammer sync server. \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/full_description.txt b/fastlane/metadata/android/fr-FR/full_description.txt index fff9b8f79..e7bf100f5 100644 --- a/fastlane/metadata/android/fr-FR/full_description.txt +++ b/fastlane/metadata/android/fr-FR/full_description.txt @@ -18,4 +18,8 @@ Vos données peuvent être synchronisées entre plusieurs appareils vous permett Synchronisation optionnelle et auto-hébergée -La synchronisation est entièrement optionnelle, vous pouvez installer le client et l'utiliser sur votre appareil sans aucune action supplémentaire, ou vous pouvez installer un serveur pour la synchronisation entre vos appareils. \ No newline at end of file +La synchronisation est entièrement optionnelle, vous pouvez installer le client et l'utiliser sur votre appareil sans aucune action supplémentaire, ou vous pouvez installer un serveur pour la synchronisation entre vos appareils. + +Wear OS companion + +Capture notes and story ideas from your wrist with the Wear OS app, then pick them up on your other devices. Dictate or type a quick note and file it under a project. Add the Capture tile to start a note or story idea in a single tap, or put the Hammer complication on your watch face to open a new note. The watch app syncs through your Hammer sync server. \ No newline at end of file diff --git a/fastlane/metadata/android/it-IT/full_description.txt b/fastlane/metadata/android/it-IT/full_description.txt index 037d3a107..c80a98e22 100644 --- a/fastlane/metadata/android/it-IT/full_description.txt +++ b/fastlane/metadata/android/it-IT/full_description.txt @@ -1,21 +1,25 @@ -Unisciti al nostro server Discord per segnalare eventuali problemi! https://discord.gg/GTmgjZcupk +Please join our Discord to report issues! https://discord.gg/GTmgjZcupk Multipiattaforma -Questa app è ovunque tu sia. Sul tuo telefono, tablet, computer fisso o portatile, puoi installare ed eseguire questo programma, non semplicemente un sito web preconfigurato, ma utilizzando tecnologie native lato client per offrire la migliore esperienza possibile. +This app is where ever you are. Your phone, tablet, desktop, laptop, this program can be installed and run, not simply a website-in-a-box, but instead using native client side technologies to provide the best experience possible. -Prima di tutto offline +Offline first -Ero frustrato dalla maggior parte dei software di scrittura che trovavo, perché utilizzavano tecnologie web (ovvero: pagine web preconfigurate) che sembrano sempre dare problemi se utilizzate offline per lunghi periodi. Hammer è stato progettato fin dall'inizio per funzionare interamente in locale, senza mai bisogno di connessione a Internet. +I was frustrated with most of the story writing software I was finding as they were using web technologies (aka: Web Page in a box) which always seems to run into problems while being used offline for long periods of time. Hammer is designed from the ground up to be entirely local, no internet connection required, ever. Dati trasparenti -I tuoi dati sono tuoi. Non sono archiviati nel cloud o in qualche database opaco. Sono memorizzati in semplici file leggibili, utilizzando cartelle e file solo per definire la struttura del progetto. Puoi aprire il file manager del tuo sistema operativo e dare un'occhiata tu stesso. Se questo programma non fosse più disponibile, potresti comunque interagire facilmente con i tuoi dati. +Your data is yours. It's not stored in the cloud, or some opaque database. It is stored in simple, human readable files, just using files and folders to define the project structure. You can open your OSes file browser and take a look for your self. If this program went away today you would be able to easily interact with your data. -Sincronizzazione intelligente tra dispositivi +Intelligent Syncing between devices -I tuoi dati possono essere sincronizzati tra i dispositivi, permettendoti di lavorare al tuo progetto ovunque ti trovi, senza il timore che una modifica apportata su un dispositivo sovrascriva una modifica apportata su un altro. +Your data can be synchronized between devices allowing you to work on your story from anywhere, and have no fear of a change on one device, overwriting a change on another device. -Sincronizzazione opzionale e self-hosted +Optional and Self hosted Syncing -La sincronizzazione è completamente opzionale: è possibile installare il client e utilizzarlo su un dispositivo, oppure installare il server e sincronizzare i dati tra i dispositivi. +Syncing is entirely optional, you can install the client and use it on one device, or you can install the server and sync your data between devices. + +Wear OS companion + +Capture notes and story ideas from your wrist with the Wear OS app, then pick them up on your other devices. Dictate or type a quick note and file it under a project. Add the Capture tile to start a note or story idea in a single tap, or put the Hammer complication on your watch face to open a new note. The watch app syncs through your Hammer sync server. \ No newline at end of file diff --git a/fastlane/metadata/android/pt-BR/full_description.txt b/fastlane/metadata/android/pt-BR/full_description.txt index f3cef1b81..c29c65067 100644 --- a/fastlane/metadata/android/pt-BR/full_description.txt +++ b/fastlane/metadata/android/pt-BR/full_description.txt @@ -18,4 +18,8 @@ Seus dados podem ser sincronizados entre aparelhos, permitindo que você trabalh Sincronização Opcional e Auto-hospedada -Você pode instalar o cliente e usá-lo em um dispositivo, ou instalar o servidor e sincronizar seus dados com outros dispositivos. \ No newline at end of file +Você pode instalar o cliente e usá-lo em um dispositivo, ou instalar o servidor e sincronizar seus dados com outros dispositivos. + +Wear OS companion + +Capture notes and story ideas from your wrist with the Wear OS app, then pick them up on your other devices. Dictate or type a quick note and file it under a project. Add the Capture tile to start a note or story idea in a single tap, or put the Hammer complication on your watch face to open a new note. The watch app syncs through your Hammer sync server. \ No newline at end of file diff --git a/fastlane/metadata/android/uk/full_description.txt b/fastlane/metadata/android/uk/full_description.txt index ba77097fb..99ec483b0 100644 --- a/fastlane/metadata/android/uk/full_description.txt +++ b/fastlane/metadata/android/uk/full_description.txt @@ -18,4 +18,8 @@ Your data can be synchronized between devices allowing you to work on your story Optional and Self hosted Syncing -Syncing is entirely optional, you can install the client and use it on one device, or you can install the server and sync your data between devices. \ No newline at end of file +Syncing is entirely optional, you can install the client and use it on one device, or you can install the server and sync your data between devices. + +Wear OS companion + +Capture notes and story ideas from your wrist with the Wear OS app, then pick them up on your other devices. Dictate or type a quick note and file it under a project. Add the Capture tile to start a note or story idea in a single tap, or put the Hammer complication on your watch face to open a new note. The watch app syncs through your Hammer sync server. \ No newline at end of file diff --git a/server/src/main/resources/i18n/Messages_de.properties b/server/src/main/resources/i18n/Messages_de.properties index 9e9f46ef7..e2ecf21df 100644 --- a/server/src/main/resources/i18n/Messages_de.properties +++ b/server/src/main/resources/i18n/Messages_de.properties @@ -278,7 +278,7 @@ admin_pagination_of=von admin_nav_settings=Einstellungen admin_nav_allowedusers=Allowed Users admin_nav_users=Benutzer -admin_users_last_sync_never=Nie +admin_users_last_sync_never=Never # Admin - Email Settings admin_nav_email=E-Mail admin_email_title=E-Mail-Einstellungen @@ -376,7 +376,7 @@ admin_allowedusers_save_reason=Speichern admin_allowedusers_edit_expiry_title=Edit Expiry admin_allowedusers_expiry_label=Expires admin_allowedusers_expiry_help=Access is revoked automatically once the entry expires. -admin_allowedusers_expiry_never=Nie +admin_allowedusers_expiry_never=Never admin_allowedusers_expiry_7days=In 7 days admin_allowedusers_expiry_30days=In 30 days admin_allowedusers_expiry_90days=In 90 days @@ -428,6 +428,14 @@ story_info_title=Infos zur Geschichte story_readers_title=Leser story_readers_total_label=Leser insgesamt, seit Beginn story_readers_graph_caption=Leser pro Tag · letzte 30 Tage +story_kudos_title=Kudos +story_kudos_givers_label={0,choice,0\#readers left kudos|1\#reader left kudos|1